DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

Chat Log — DeepSeek Harness 插件(DSH Plugin)
← Plugins
C

dsh-chat-log

Chat Log

将 DSH 会话日志导出为整洁的聊天记录:将流式片段合并为普通消息,其他事件均原样保留。支持 /chat 命令和浏览器下载按钮。

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add github:YupegLV/dsh-chat-log#d4e550119f467b9fc4b12ec4dec62d6df2b5f6d3
README兼容性版本

兼容性与来源证明

Chat Log 以 dsh-chat-log 发布,当前版本为 0.1.1。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
web
发布来源
github
Registry 更新时间
2026/8/25

版本

0.1.1stable
2026/8/25

相关插件

正在加载相关插件…

最新版
0.1.1
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
未提供
文件数
未提供
Surface
web
许可证
MIT
发布源
github
GitHub
★ 1
周下载
0
最近提交
2026/8/25
查看源码 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题
DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录

相关插件

继续浏览 productivity-workflow 分类下经过校验的插件。

Acp App@deepseek-ai/dsh-acp-appdsh ACP 配置文件包:基于 dsh-base 的仅限自动化的 JSON-RPC stdio 和进程生命周期管理Client Ui Task Board@linxin666/dsh-client-ui-task-board面向 DSH Web GUI 的主机权威任务面板,支持实际会话执行、主机 cron 调度以及可选的跨平台空闲睡眠保护;以挂载方式提供,无需修改 DSH 源代码。Web All@linxin666/dsh-web-allDSH Web UI 全家桶聚合插件:一键安装全部功能插件(task-board / git-graph / pet / remote-web-ui / web-ui-settings / skin-center / community-plugins / compat shim)。compat 桥接层已并入本包(src/client),无需独立 compat npm 包。Deepseek Ipptdeepseek-ipptiPolloWork PPT Studio 及其精选幻灯片模板,作为原生 DeepSeek Harness 对话视图。

README

dsh-chat-log

中文 | English

Turn a DSH session log into a clean chat log: streaming chunk fragments are folded into normal messages, and everything else is kept verbatim. Download it with one click next to the official "Session log" ZIP button, or via the /chat command.

Why

The official @deepseek-ai/dsh-session-log-export downloads a ZIP of the raw log: session.jsonl (or multi-frame zstd), where over 80% of the lines are token-level streaming fragments (assistant/chunk, reasoning-chunks, text-chunks, tool-call-chunks). Reading or reusing that log means wading through thousands of fragment lines.

dsh-chat-log builds a readable chat view from the authoritative folded events (user/message, assistant/message, tool/call, tool/result), and keeps every other event (permissions, approvals, request context, lifecycle) verbatim in events.

A note on fidelity: fragment deltas occasionally lose characters against the authoritative fold (observed: a missing closing quote in a tool-call argument). This plugin always trusts the authoritative fold and reports the comparison result in report.

Features

official /exportthis plugin
Outputraw-log ZIP (browser download)clean nested chat JSON (dsh-chat.v1)
Streaming fragmentsshipped as-is (80%+ of lines)folded into complete messages
Everything elsemixed into the archiveverbatim in events (nothing dropped)
DownloadZIP onlydirect .json download (same HEAD-preflight pattern)
Headless✗/chat command (zero tokens, human-command plane)
Verification—fragment↔fold comparison report
  • Zero runtime dependencies, single pure-data core (lib/fold.js) — no zstd, no zip, no server.
  • Nothing is deleted: every non-fragment event survives byte-identical; unverifiable fragment steps fall back to keeping raw events.
  • Token effect: zero. /chat stays on the human-command plane; results never enter model history.

Requirements

  • DSH Web (dsh web) profile with Node ≥ 22.15
  • commands / sessionPersistence / sessions services (mounted by the shipped profiles)

Install

# from npm (recommended)
dsh plugin --profile web add dsh-chat-log

# from GitHub
dsh plugin --profile web add github:YupegLV/dsh-chat-log

# local (development / self-hosting)
dsh plugin --profile web add file:/absolute/path/dsh-chat-log

Restart dsh web afterwards.

⚠️ Browser download needs one host patch (idempotent)

The "Chat log" button's direct browser download relies on a host download endpoint /api/session.chat, hosted in dsh-host-apiproxy — third-party plugins cannot register their own /api/* routes. After install, run once:

node node_modules/dsh-chat-log/scripts/patch-apiproxy.mjs
# or from the plugin checkout: node scripts/patch-apiproxy.mjs

The script is idempotent (safe to re-run; backs up the original file automatically). Re-run after every DSH upgrade (a fresh dsh-host-apiproxy overwrites the patch).

Without the patch: the button fails silently (no status text), but the /chat command (writes to dsh-chats/) always works.

Usage

EntryDescription
/chatExport the current session → <session-cwd>/dsh-chats/chat-<id8>-<timestamp>.json, echoes the absolute path
/chat --id <sessionId>Export a specific session
/chat --out <dir>Custom output directory
Chat log button (session header)Beside the official "Session log" ZIP button; HEAD-preflights then downloads dsh-chat-<session-id>.json through the browser download manager (needs the host patch above)

Output format (dsh-chat.v1)

{
  "schema": "dsh-chat.v1",
  "session": { "id": "...", "createdAt": 1787625016270, "cwd": "...", "agentPreset": "standard", "title": "..." },
  "model": { "provider": "deepseek-official", "model": "...", "reasoningEffort": "max", "maxTokens": 256000 },
  "turns": [
    {
      "index": 1,
      "startedAt": 1787625120770,
      "user": [ { "time": 1787625120846, "content": [ { "type": "text", "text": "..." } ] } ],
      "steps": [
        {
          "index": 1,
          "assistant": {
            "time": 1787625125842,
            "reasoning": "full reasoning text",
            "text": "full reply text",
            "toolCalls": [ { "id": "call_...", "name": "bash", "arguments": "{...full args JSON...}" } ],
            "usage": { "inputTokens": ..., "outputTokens": ... }
          },
          "tools": [
            { "call": { "id": "call_...", "name": "bash", "arguments": "..." },
              "result": { "isError": false, "text": "...", "time": ... } }
          ]
        }
      ],
      "endedAt": 1787625168111
    }
  ],
  "events": [
    /* every non-fragment raw event, verbatim and in order:
       session/turn/step lifecycles, request headers & context,
       permissions, approvals, sandbox, titles, checkpoints ... */
  ]
}

Nothing dropped guarantee

  • events = every raw event except the stream fragments, byte-identical, in original order (verified at export: count and per-line identity).
  • Fragment content is fully carried by the authoritative folds (every fragment step must have a matching assistant/message; steps without one keep their raw fragments in events).
  • The export includes a report: total events, folded fragments/steps, kept events, fragment↔fold comparison.

Development & verification

Plugin-development pitfalls (client bundle id must be the bare package name, file: installs are copies not symlinks, …) live in docs/DEVELOPMENT.md.

# offline core verification (no dsh runtime; input = decompressed JSONL)
node test/verify.mjs <session.jsonl>

Layout:

lib/fold.js                     pure-data core: JSONL → chat tree + verification report
lib/index.js                    host half: /chat command, flush, readRaw, atomic write
lib/client.js                   browser half: "Chat log" download button
cordis.patch.yml                profile patch layer (inserts the plugin row)
scripts/patch-apiproxy.mjs      idempotent patch: registers /api/session.chat
docs/DEVELOPMENT.md             pitfalls & mechanism notes
test/verify.mjs                 CLI verification suite

Known limitations

  • Requires a sessionPersistence backend exposing raw artifacts (JSONL backend: yes; SQLite: no — same as the official ZIP export).
  • Output is pretty-printed JSON; roughly 1.2× the raw log size (authoritative folds + full events), ~30% if you truncate tool results.
  • Direct browser download depends on the idempotent dsh-host-apiproxy patch (see Install; /chat writing to disk does not).

License

MIT