dsh-share-session
Share dsh sessions as readable Markdown
nay-1
@nay-1
⬇ 1
★ 0
main
安装
dsh plugin --profile web add github:nay-1/dsh-share-session
需要可复现安装时,可在仓库后追加 #commit 固定提交。
Share dsh sessions as readable Markdown
该插件未提供要点说明,请参考仓库 README。
- 安装并启动 DeepSeek Harness:
npx @deepseek-ai/dsh web - 在终端执行上面的安装命令(CLI 会解析插件并核验来源)
- 用 dsh plugins list 确认已安装,必要时重启 Harness 生效
插件以当前 dsh 进程的权限运行,安装时可能执行代码。请先通读仓库源码与许可证,确认无破坏性命令与越权访问;本站只做索引,不对第三方插件安全性作担保。
| 代码仓库 | github.com/nay-1/dsh-share-session |
| 许可证 | MIT |
| 主要语言 | main |
| 下载量 | 1 |
| GitHub 星标 | 0 |
| 最近推送 | 2026-08-27 |
| 收录日期 | 2026-09-19 |
| 分类 | 会话与消息 |
事实信息来自公开插件目录快照(2026-10-01),介绍文案由本站再加工。
以下为插件仓库 README 全文(原始内容,由公开目录抓取整理)。
# dsh-share-session
[](https://www.npmjs.com/package/dsh-share-session)
[](https://www.npmjs.com/package/dsh-share-session)
[](./LICENSE)
[](package.json)
[](https://github.com/deepseek-ai/deepseek-harness)
把 [DeepSeek Harness(dsh)](https://github.com/deepseek-ai/deepseek-harness)的会话日志导出为**可读的 Markdown**,方便分享、存档与二次创作。
官方自带的 `Session log` 导出的是原始事件流 ZIP(JSONL/zstd),适合机器;本插件补上人的那一半——排版好的对话记录。
---
## ✨ 特性
- 📋 **两种入口**
- 设置页「分享会话」:按工作区分组的会话浏览器,支持折叠、预览、复制、下载
- 聊天界面头部按钮:`⧉ 复制` / `⤓ Markdown`,当前会话一键带走
- 🎛️ **三个导出内容开关**(跨重启持久化)
- 工具调用(默认开)— 参数与结果按 callId 精确配对
- 推理过程(默认开)— 输出为 `
` 折叠块
- 注入上下文(默认关)— AGENTS.md、skill-catalog 等自动注入内容
- 🔧 **正确的底层语义**
- 多帧 zstd 日志逐帧解压(Node 原生 API 只解第一帧,这里做了帧切分)
- compaction 折叠(`surfaceOp.replace`)正确投影存活消息
- 活动中的会话先 flush 再导出,尾部不丢事件
- 🪶 **零运行时依赖**:宿主半侧仅用 Node 内置模块(含原生 zstd),客户端为基座 React
## 📦 安装
```sh
dsh plugin --profile web add dsh-share-session
```
安装后重启 dsh 即生效。本地开发可 link 安装:
```sh
git clone https://github.com/Nay-1/dsh-share-session.git && cd dsh-share-session
pnpm install && node build.mjs
dsh plugin --profile web add "$(pwd)"
```
> 要求 Node.js ≥ 22(原生 `zlib.zstdDecompressSync`)、dsh 0.1.x、JSONL+zstd 会话持久化后端(dsh 默认配置)。
## 🚀 使用
### 设置页
打开 Web UI → **设置 → 分享会话**:
```
┌─────────────┬──────────────────────────┐
│ ▾ dsh-test 2│ [复制 Markdown] [下载 .md] │
│ 你好 │ │
│ nihao1 ● │ # DSH 会话:你好 │
│ ▸ dsh-plugin│ │
│ 1 │ ## 👤 用户 │
│ │ … │
└─────────────┴──────────────────────────┘
```
- 左侧会话按工作区分组,点击组头折叠/展开,组内按最近活动排序
- 顶部三个勾选框控制导出包含的内容,改动即时保存并作用于所有导出入口
- 右侧 `
` 预览 Markdown 源码文本
### 聊天头部
会话头部 `Session log` 左侧有两个按钮,按设置页当前选项导出:
| 按钮 | 行为 |
|---|---|
| `⧉ 复制` | 拉取 Markdown 写入剪贴板,成功显示「✓ 已复制」 |
| `⤓ Markdown` | 浏览器下载 `.md` |
### 输出示例
```md
---
title: "帮我看看目录"
session: session-f03d6827-…
---
# DSH 会话:帮我看看目录
- **会话**:`session-f03d6827-…`
- **工作区**:`/home/weoo/dsh-test`
- **创建时间**:2026-08-27 10:10:27
- **轮数**:2
- **Tokens**:↑输入 1.2k · ↓输出 0.3k
---
## 👤 用户
2026-08-27 10:10:27
帮我看看目录
## 🤖 助手
好的,我来查看。
### 🔧 bash
```json
{"command": "ls -la"}
```
**↩️ 结果**
```
file-a.txt
src/
```
```
## ⚙️ 配置
导出内容选项保存在 `~/.dsh/plugin-config/dsh-share-session.json`,缺失或损坏时自动回落默认值:
```json
{
"includeTools": true,
"includeReasoning": true,
"includeInjected": false
}
```
写入为临时文件 + 原子 rename。也可通过 HTTP 读写:
```sh
curl http://127.0.0.1:3080/share-session/api/config
curl -X POST -H 'content-type: application/json' \
-d '{"includeInjected":true}' \
http://127.0.0.1:3080/share-session/api/config
```
## 🔌 HTTP API
插件在宿主注册 prefix `/share-session`:
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | `/api/workspaces` | 列出全部持久化会话(含 live 标记与首条用户消息标题) |
| GET | `/api/session/:id/markdown` | 生成会话 Markdown;query:`tools` `reasoning` `injected` `download` |
| GET/POST | `/api/config` | 读/写导出内容选项(POST 体限 1KB,布尔校验) |
| GET | `/api` | 存活探针 |
## 🗂️ 项目结构
```
dsh-share-session/
├── package.json # dsh.bundle.patch + client 声明
├── build.mjs # esbuild 双入口构建
├── cordis.patch.yml # bundle patch(行名为包名)
└── src/
├── index.ts # 宿主半侧:扫描 ~/.dsh/sessions + JSON 路由
├── markdown.ts # 纯函数:事件日志 → Markdown(可单测)
└── client/index.tsx # 浏览器半侧:设置页 + 头部按钮槽位
```
双半侧包:宿主半侧 ESM(`lib/index.js`),客户端半侧 lazy-CJS factory bundle(`lib/client.js`,由 dsh 的 ModuleLoader 在浏览器加载)。
## 🛠️ 开发
```sh
pnpm install # 安装依赖(esbuild/typescript 仅 devDependencies)
pnpm run typecheck # tsc --noEmit
pnpm run build # 双入口构建到 lib/
```
调试循环:
```sh
dsh plugin --profile web add "$(pwd)" # 首次装入 profile(link 方式)
dsh --profile web --port 3101 --no-open # 启动
# 改代码后:
node build.mjs && 重启 dsh
```
冒烟检查:
```sh
curl -o /dev/null -w '%{http_code}' http://127.0.0.1:3101/plugins/dsh-share-session/client.js # 200
curl http://127.0.0.1:3101/share-session/api
```
## ❓ FAQ
**Q: 为什么导出里没有系统注入的 AGENTS.md 内容?**
默认隐藏(保持分享清爽)。设置页勾选「注入上下文」即可包含,每条注入带来源标注。
**Q: 正在进行的对话能导出吗?**
可以。列表中带 `● live` 标记的会话会在导出前自动 flush,已发生的事件都会包含。
**Q: 导出是原始日志吗?**
不是。原始事件流请用官方 `Session log` 按钮(ZIP);本插件产出的是面向阅读的投影。
**Q: 支持 SQLite 持久化后端吗?**
暂不支持,仅扫描 JSONL+zstd 后端的会话目录。
## 📄 License
[MIT](./LICENSE)
数据来源:公开的 DeepSeek Harness 插件目录与各插件 GitHub 仓库。本站为独立第三方目录,与 DeepSeek、幻方(High-Flyer)及插件作者均无隶属或背书关系。