dsh-report-studio
Manifest valid★ 2Turn DeepSeek Harness sessions into daily, weekly, handoff and article reports, with a verifiable HTML export and a receipt that re-checks the saved file.
dsh-report-studio
When your agent finishes work, have it write up what happened — into something you can actually hand over.
Turn one session into a daily report / weekly report / handoff document / WeChat-article draft, each sealed with a verifiable receipt block (report hash + artifact hashes) so later changes to the saved report or referenced artifacts are detectable.
Status: usable. See Releases for current versions. Tracks the Harness developer preview; interfaces may change.
Features
- 4 ready templates:
daily,weekly,handoff,article - Deterministic session extraction: user asks, todo snapshots, turn/step stats, token ledger, tool calls, produced files, shell commands, errors and blocks — all read from the durable session event log, never from the model's memory
- Verifiable receipt block: session id, workspace, generation time, report SHA-256 and artifact SHA-256 appended to every saved report
- Safe persistence: target paths are confined to the session workspace;
absolute-path escapes and
..traversal are rejected - Report index:
report_indexlists every saved report with kind, date, session and verification status, and can write the index as Markdown or HTML - Customizable templates: override built-in templates wholesale (placeholders below)
- No build step: plain ESM; install via
dsh pluginor load with a--patchoverlay
Install
Requires Node.js ≥ 18 and DeepSeek Harness.
Option 1: plugin install (needs pnpm)
dsh plugin --profile web add github:ciceroyang/dsh-report-studio#v0.4.7
Option 2: local source overlay (no pnpm)
git clone https://github.com/ciceroyang/dsh-report-studio.git
# my-report.yml (the plugin path MUST be absolute):
# - insert:
# - id: report-studio
# name: '/absolute/path/to/dsh-report-studio/index.js'
dsh web --patch ./my-report.yml
Usage
Tell the agent either of:
- "Write today's work report."
- "Turn this session into a handoff document for the next person."
The bundled work-report skill teaches the agent the full workflow:
report_generateproduces a draft with hard data plus[[待写:…]]prose slots;- the agent fills the slots from session facts only;
report_savewrites the file and appends the receipt;- the agent replies with the saved path and the report hash.
Default save location: reports/<kind>-<date>.md inside the workspace.
For an instant draft preview without a model round trip, type the slash command:
/report daily # weekly / handoff / article also work
Tools
report_generate
| Argument | Required | Meaning |
|---|---|---|
kind | yes | daily / weekly / handoff / article |
title | no | custom title; falls back to the session title |
period | no | period label (e.g. "2026-08-11 ~ 2026-08-17") for weekly |
Returns the full Markdown draft; prose sections are [[待写:…]] markers.
report_save
| Argument | Required | Meaning |
|---|---|---|
content | yes | final Markdown (receipt is appended automatically) |
path | no | target path; defaults to reports/<kind>-<date>.md |
kind | no | used for the default filename |
artifacts | no | produced file paths; existing files get hashed into the receipt |
format | no | md (default) / html — standalone forwardable document; the original Markdown is embedded in a hidden source block so report_verify still verifies it |
Returns the absolute path, report SHA-256, and verified artifact hashes.
report_week
Aggregates every persisted session of the current workspace (logs under
$DSH_HOME/sessions) plus the live session into a weekly draft with a
per-session table. Reading historical logs needs Node ≥ 22.15 (built-in zstd);
older Node degrades gracefully to the current session only.
report_verify
Independently re-checks a saved report's receipt: recomputes the report SHA-256 and every artifact hash, reporting match/missing per item.
| Argument | Required | Meaning |
|---|---|---|
path | yes | saved report file (inside the workspace) |
dir | no | batch mode: verify every .md and .html report under this workspace-relative directory; returns matched/mismatched/no-receipt summary |
report_index
Lists every saved report under a directory (default reports/, recursive, .md and .html) as an index: kind, date, session, verification status and artifact count. Verification reuses report_verify's logic, so the index shows at a glance which reports are still intact.
| Argument | Required | Meaning |
|---|---|---|
dir | no | directory to index (workspace-relative); default reports |
format | no | md (default) or html |
save | no | optional path to write the index to; without it the tool returns text only and writes nothing |
report_publish
Publish a report to Feishu (custom bot webhook) or Notion (page); target=dry previews the payload without sending anything.
| Argument | Required | Meaning |
|---|---|---|
target | yes | feishu / notion / dry |
content | no | report text; otherwise read from path |
path | no | saved report file (inside the workspace) |
title | no | Feishu prefix / Notion page title |
Configuration: plugin config publish.feishuWebhook / publish.notionToken + publish.notionParentPageId, or env vars FEISHU_WEBHOOK / NOTION_TOKEN / NOTION_PARENT_PAGE_ID. Real publishing fails loudly without them; dry mode always works.
| Argument | Required | Meaning |
|---|---|---|
title | no | custom title |
period | no | period label, e.g. "2026-08-11 ~ 2026-08-17" |
Custom templates
Templates are plain Markdown with stable placeholders (data sections are filled deterministically by the plugin):
{{TITLE}} {{DATE}} {{PERIOD}}
{{META}} session id / workspace / time range / title
{{TASKS}} user asks + latest todo snapshot
{{STATS}} turns / steps / tool calls / token ledger / end reasons
{{TOOLS}} tool call table
{{FILES}} produced and read files
{{COMMANDS}} shell commands run
{{ERRORS}} tool errors and blocks
{{TIMELINE}} per-turn timeline
{{SESSIONS}} weekly session table (report_week aggregation)
Prose sections are written as [[待写:…]] and must be filled before saving.
Point the plugin at a custom directory:
- insert:
- id: report-studio
name: dsh-report-studio
config:
templatesDirs:
- '/absolute/path/to/my-templates'
Copy any file from this repo's templates/ directory as a starting point.
Receipt example
## 报告凭据 Report Receipt
| 项 | 值 |
|---|---|
| 会话 Session | session-1c1e5d0c-… |
| 工作区 Workspace | /Users/you/project |
| 生成时间 Generated | 2026-08-14T08:00:00.000Z |
| 报告哈希 Report SHA-256 | 9f2c… |
| 产物 Artifacts | README.md → 3a1b… |
Scheduled weekly reports
Two paths (the work-report skill picks per the session's actual capability):
-
In-harness (official tools): with dsh-schedule mounted, say "generate my weekly report every Friday 18:00" and the agent implements it via
schedule_create(time zone must be explicit). -
System-level (zero deps, all data sections automatic):
scripts/auto-weekly.mjsneeds no model — it aggregates the week's sessions, fills every data section and saves a draft with [[待写:…]] prose slots. Point launchd/cron at it for Friday 18:00, then open a session and say "fill and save".node scripts/auto-weekly.mjs <workspace> --out reports/weekly-auto.md
Known limitations
- report_week cross-session aggregation reads historical logs under $DSH_HOME/sessions (multi-frame zstd); historical reading needs Node ≥ 22.15.
- Persistence uses Node's
fsdirectly, outside the Harness fs policy layer; path-escape protection lives inside the plugin. - Report tools require an agent-bound session (web and headless both qualify).
Docs & examples
- 中文实战教程:从零到发布 — 完整开发复盘,含 6 个实测坑
- Plugin scaffold — generate the same project layout in one command
- Environment doctor — one-command local diagnostics (port/deps/profiles/logs)
- Example daily report — 真实会话产出的日报样例(凭据块)
Contributing
Issues and PRs welcome (typos, new templates, translations, tests). Before pushing:
npm test
License & funding
MIT. If this saves you from writing another daily report:
- Mainland China: Afdian (pays out to Alipay; GitHub Sponsors cannot pay out there)
- Elsewhere: GitHub Sponsors
Built for the open-source community, in the spirit of DeepSeek Harness: everything is a plugin.
Comments
Loading…
Similar plugins
by ShineFree7
dsh-daily-log: daily work log plugin for DeepSeek Harness; /daily scaffolds Markdown and theme-aware HTML dashboards plus read/write/merge tools. DeepSeek Harness 每日工作日志插件:/daily 生成 Markdown 和深浅色 HTML
★ 0
TypeScript
Aug 23, 2026
dsh plugin --profile web add dsh-daily-logby snow-The
Session handoff & context management for DeepSeek Harness: structured handoff docs (export/resume/status) + active context pruning (acp_* via official compaction API) + optional OpenViking/archify enh
★ 3
MIT
JavaScript
Sep 20, 2026
dsh plugin --profile web add @snow-the/dsh-session-handoffSession change-review for DeepSeek Harness: tracks write/edit tool calls and renders VS Code-style side-by-side diffs via diff2html, auto-following the theme, with subagent aggregation and one-click r
★ 0
dsh plugin --profile web add dsh-diff-reviewby Cavan-Ou
Zero-touch runtime telemetry for DeepSeek Harness: every session writes its own report card (task/model/tools/failures/duration) into a human-readable journal. 纯观察者运行事实遥测。
★ 3
MIT
JavaScript
Aug 14, 2026
dsh plugin --profile web add dsh-observation-journalby jh1016248
DSH(DeepSeek Harness)插件:会话标题栏一键导出当前会话 —— 「保存 MD」下载纯净 Markdown,「保存 HTML」下载带左侧目录、表格与代码块渲染的网页。自动过滤模型思考过程与工具调用记录,只保留用户与助手的正文,适合归档、分享与撰写报告。安装:dsh plugin --profile web add dsh-save-session
★ 0
↓ 690/wk
MIT
JavaScript
Sep 11, 2026
dsh plugin --profile web add dsh-save-sessionby Nono-neko
An AI-native browser workspace for DeepSeek Harness (DSH), combining multi-tab browsing, live page annotations, lightweight code editing, workspace previews, and Agent-assisted iteration across Web an
★ 10
↓ 179/wk
Apache-2.0
TypeScript
Sep 10, 2026
dsh plugin --profile web add @nono-neko/dsh-browser