@mingozhou/dsh-replay 0.4.1 → 0.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +225 -148
- package/README.zh.md +225 -154
- package/assets/icon.png +0 -0
- package/lib/client.js +954 -2418
- package/lib/core.js +557 -86
- package/lib/index.js +1043 -51
- package/lib/types/src/client/api.d.ts +44 -0
- package/lib/types/src/client/components/AuditView.d.ts +2 -1
- package/lib/types/src/client/components/CompareView.d.ts +2 -1
- package/lib/types/src/client/components/DashboardView.d.ts +8 -0
- package/lib/types/src/client/components/ExportDialog.d.ts +9 -0
- package/lib/types/src/client/components/ReplayApp.d.ts +4 -2
- package/lib/types/src/client/components/ReplayModal.d.ts +1 -1
- package/lib/types/src/client/components/SessionPicker.d.ts +4 -3
- package/lib/types/src/client/components/TimelineView.d.ts +2 -1
- package/lib/types/src/client/export.d.ts +6 -1
- package/lib/types/src/client/i18n.d.ts +8 -1
- package/lib/types/src/client/pricing.d.ts +6 -0
- package/lib/types/src/core/audit.d.ts +18 -0
- package/lib/types/src/core/compare.d.ts +8 -3
- package/lib/types/src/core/cost.d.ts +21 -3
- package/lib/types/src/core/index.d.ts +1 -0
- package/lib/types/src/core/redact.d.ts +40 -0
- package/lib/types/src/core/timeline.d.ts +9 -0
- package/lib/types/src/index.d.ts +52 -1
- package/lib/viewer.js +282 -29
- package/package.json +118 -107
- package/scripts/build.mjs +7 -1
- package/src/client/api.ts +114 -10
- package/src/client/components/AuditView.tsx +89 -10
- package/src/client/components/CompareView.tsx +89 -13
- package/src/client/components/DashboardView.tsx +232 -0
- package/src/client/components/ExportDialog.tsx +136 -0
- package/src/client/components/ItemDetail.tsx +36 -4
- package/src/client/components/OverviewView.tsx +150 -34
- package/src/client/components/ReplayApp.tsx +207 -60
- package/src/client/components/ReplayModal.tsx +41 -6
- package/src/client/components/SessionPicker.tsx +55 -27
- package/src/client/components/TimelineView.tsx +106 -41
- package/src/client/export.ts +20 -4
- package/src/client/i18n.ts +266 -45
- package/src/client/index.ts +7 -5
- package/src/client/mascot-image.ts +1 -1
- package/src/client/pricing.ts +90 -0
- package/src/client/styles.css +250 -1
- package/src/client/viewer-entry.tsx +25 -4
- package/src/core/audit.ts +274 -67
- package/src/core/compare.ts +0 -0
- package/src/core/cost.ts +94 -16
- package/src/core/index.ts +1 -0
- package/src/core/redact.ts +182 -0
- package/src/core/timeline.ts +107 -12
- package/src/index.ts +290 -54
package/README.zh.md
CHANGED
|
@@ -1,154 +1,225 @@
|
|
|
1
|
-
<div align="center">
|
|
2
|
-
|
|
3
|
-
<img src="
|
|
4
|
-
|
|
5
|
-
# dsh-replay
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
[
|
|
11
|
-
|
|
12
|
-
[ · [在线 Demo](https://mingozhou.github.io/dsh-replay/) · [安装](#安装) · [为什么不是 Trajectory?](#为什么不是-trajectory) · [隐私](PRIVACY.md)
|
|
11
|
+
|
|
12
|
+
[](https://www.npmjs.com/package/@mingozhou/dsh-replay)
|
|
13
|
+
[](https://www.npmjs.com/package/@mingozhou/dsh-replay)
|
|
14
|
+
[](https://github.com/MingoZhou/dsh-replay/actions/workflows/ci.yml)
|
|
15
|
+
[](./LICENSE)
|
|
16
|
+
[](https://github.com/MingoZhou/dsh-replay#兼容性)
|
|
17
|
+
|
|
18
|
+
> **Desktop 一键安装:** **插件 → Add plugin → `@mingozhou/dsh-replay` → Install** → 重启。
|
|
19
|
+
> Web/源码:[`dsh plugin --profile <profile> add …`](#安装)。
|
|
20
|
+
|
|
21
|
+
<img src="https://raw.githubusercontent.com/MingoZhou/dsh-replay/main/assets/demo-zh.webp" width="880" alt="dsh-replay 15 秒演示:档案、成本、审计、导出" />
|
|
22
|
+
|
|
23
|
+
<sub>15 秒演示 · 示例会话 · 导出的 HTML 完全离线、只读<br/>[GIF 备用](https://raw.githubusercontent.com/MingoZhou/dsh-replay/main/assets/demo-zh.gif) · [完整 demo](https://mingozhou.github.io/dsh-replay/)</sub>
|
|
24
|
+
|
|
25
|
+
</div>
|
|
26
|
+
|
|
27
|
+
> **这里的“回放”是只读的。** dsh-replay 不会把会话重新发给模型,不写日志,也不消耗 token。它只是解析 append-only 日志并渲染出来。详见 [FAQ](#faq)。
|
|
28
|
+
>
|
|
29
|
+
> **历史注记(保留原文,不做删除)**:~~DeepSeek Harness 有一套优雅的 append-only 日志,官方承诺“到达模型的一切都可从日志重建”——但它没有配查看器。**dsh-replay 就是那个查看器。**~~
|
|
30
|
+
> 这句话写于 **2026-08**,当时是事实。自 **DSH 0.2.1-rc.2** 起,官方 Web UI 已内置 **Trajectory(轨迹)** 视图,覆盖当前会话的事件账本。dsh-replay 现在做的是 **档案层**:所有会话、成本、Windows 可用的安全审计、分支/对比,以及可脱敏分享的 HTML。[下面有对照](#为什么不是-trajectory)。
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## 安装
|
|
35
|
+
|
|
36
|
+
### DeepSeek Harness Desktop(推荐)
|
|
37
|
+
|
|
38
|
+
1. 左侧栏打开 **插件(Plugins)**。
|
|
39
|
+
2. 点 **Add plugin / 添加插件**。
|
|
40
|
+
3. 输入 `@mingozhou/dsh-replay`,点 **Install**。
|
|
41
|
+
4. 重启 Harness。
|
|
42
|
+
|
|
43
|
+
> Desktop 的 profile 由 Electron 应用独占管理,`dsh plugin --profile desktop …` 会被拒绝(`profile "desktop" is managed exclusively by the Electron application`)。这不是插件坏了,请用插件页安装。
|
|
44
|
+
|
|
45
|
+
<img src="https://raw.githubusercontent.com/MingoZhou/dsh-replay/main/assets/plugins-installed.png" width="720" alt="DeepSeek Harness 插件页中的 dsh-replay" />
|
|
46
|
+
|
|
47
|
+
<sub>插件 → 已安装插件。这是 0.4.1 的条目;0.4.2 会显示新的描述。</sub>
|
|
48
|
+
|
|
49
|
+
### Web UI / 源码模式
|
|
50
|
+
|
|
51
|
+
```sh
|
|
52
|
+
# 发行版 CLI(npm i -g @deepseek-ai/dsh)
|
|
53
|
+
dsh plugin --profile <你的profile> add @mingozhou/dsh-replay
|
|
54
|
+
|
|
55
|
+
# 从 Harness 源码跑(profile 名为 web)
|
|
56
|
+
cd deepseek-harness
|
|
57
|
+
pnpm dsh plugin --profile web add @mingozhou/dsh-replay
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
用 `dsh --profile <你的profile> --dump-config` 确认出现 `@mingozhou/dsh-replay` / `replay` 行,然后重启 Harness。
|
|
61
|
+
|
|
62
|
+
### 从源码安装(开发 / 未发布改动)
|
|
63
|
+
|
|
64
|
+
```sh
|
|
65
|
+
git clone https://github.com/MingoZhou/dsh-replay.git
|
|
66
|
+
cd dsh-replay
|
|
67
|
+
npm install && npm run build # lib/ 是构建产物
|
|
68
|
+
npm run demo # http://localhost:4173,不需要 Harness
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
让 profile 指向文件夹:
|
|
72
|
+
|
|
73
|
+
```sh
|
|
74
|
+
dsh plugin --profile <你的profile> add <插件绝对路径>/dsh-replay
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### 卸载
|
|
78
|
+
|
|
79
|
+
- **Desktop**:插件 → dsh-replay → **Remove**。
|
|
80
|
+
- **Web**:`dsh plugin --profile <你的profile> remove @mingozhou/dsh-replay`
|
|
81
|
+
- **手动兜底**:从 profile 的 `package.json` 的 `dependencies` 和 `dsh.profile.bundles` 两处删除 `@mingozhou/dsh-replay`,在该目录 `pnpm install`,重启。
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## 为什么不是 Trajectory?
|
|
86
|
+
|
|
87
|
+
Trajectory 对**当前会话**很好:实时账本、时间概览、逐条 token、思考、系统提示词、虚拟滚动。只需要这些,直接用官方视图就好。dsh-replay 解决的是**会话结束之后**、以及官方视图没回答的问题:
|
|
88
|
+
|
|
89
|
+
| | 官方 Trajectory | dsh-replay |
|
|
90
|
+
| --- | --- | --- |
|
|
91
|
+
| 范围 | 当前会话 | **所有会话 + 档案仪表盘** |
|
|
92
|
+
| 时间线 | 原生、实时、虚拟化 | 回放、思考、系统提示词、工具摘要 |
|
|
93
|
+
| 成本 | token 计数 | **分模型成本、USD/CNY、可编辑价格表** |
|
|
94
|
+
| 风险 | — | **Windows 可用的审计、基线抑制、密钥脱敏** |
|
|
95
|
+
| 血缘 | — | **分支树 + 精确分岔 + 成本/风险差值** |
|
|
96
|
+
| 分享 | 原始会话 ZIP | **脱敏、离线、可交互 HTML** |
|
|
97
|
+
| 数据 | 会话内 | **本地档案;无遥测** |
|
|
98
|
+
|
|
99
|
+
两者可以共存。dsh-replay 不是替代 Trajectory,而是回答“这么多会话里发生了什么、花了多少钱、哪里有风险、怎么给同事看”。
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## 你会得到什么
|
|
104
|
+
|
|
105
|
+
| | |
|
|
106
|
+
| --- | --- |
|
|
107
|
+
| 📊 **档案仪表盘** | 这台机器上的所有会话:本月/全部 token、估算成本、高危发现,按标题/ID/工作区搜索。 |
|
|
108
|
+
| 💰 **分模型成本** | 缓存感知的 token 统计、分模型明细、USD/CNY、可编辑价格表。多模型会话不再把全部 token 按一个费率算。 |
|
|
109
|
+
| 🛡️ **Windows 可用的审计** | 同时识别 `pwsh`/PowerShell/`cmd` 和 bash;递归删除、凭据读取、外传、持久化、策略变更。会话初始的 permission/sandbox 视为基线,不再每次报 2 条 serious。 |
|
|
110
|
+
| 🔐 **密钥脱敏** | 常见 API key、`.env` 赋值、私钥、用户主目录。导出前显示将遮罩多少处。 |
|
|
111
|
+
| 📤 **可分享 HTML** | 把一个会话烤进单个离线 `.html`:对方零安装、无网络、不调用模型。适合 bug report 和复盘。 |
|
|
112
|
+
| 🌿 **分支树** | 完整血缘、子 Agent、fork 边界,点击直达。 |
|
|
113
|
+
| ⚖️ **对比** | 任意两个会话:指标、工具分布、成本/风险差、完整血缘关系、两边首个差异事件。 |
|
|
114
|
+
| ⏪ **时间线** | 1–16 倍速回放、思考、系统提示词、搜索、类型过滤、键盘导航;工具标签是命令/路径/URL 摘要,不再是 JSON 墙。 |
|
|
115
|
+
| 🌏 **中英双语** | 应用 UI 可切换中英文;DSH 注入的会话视图标签由宿主决定。 |
|
|
116
|
+
|
|
117
|
+
### 仪表盘、成本、审计、导出
|
|
118
|
+
|
|
119
|
+
<div align="center">
|
|
120
|
+
<img src="https://raw.githubusercontent.com/MingoZhou/dsh-replay/main/assets/overview-zh.png" width="880" alt="概览与成本估算" />
|
|
121
|
+
<img src="https://raw.githubusercontent.com/MingoZhou/dsh-replay/main/assets/audit-zh.png" width="880" alt="安全审计:基线抑制、密钥脱敏" />
|
|
122
|
+
<img src="https://raw.githubusercontent.com/MingoZhou/dsh-replay/main/assets/export-zh.png" width="880" alt="脱敏、离线 HTML 导出对话框" />
|
|
123
|
+
</div>
|
|
124
|
+
|
|
125
|
+
更多:[仪表盘](https://raw.githubusercontent.com/MingoZhou/dsh-replay/main/assets/dashboard-zh.png) · [时间线](https://raw.githubusercontent.com/MingoZhou/dsh-replay/main/assets/timeline-zh.png) · [分支](https://raw.githubusercontent.com/MingoZhou/dsh-replay/main/assets/forks-zh.png) · [对比](https://raw.githubusercontent.com/MingoZhou/dsh-replay/main/assets/compare-zh.png)
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## 0.4.2 改了什么
|
|
130
|
+
|
|
131
|
+
这是一次“还活着”的维护版,优先修信任和首次体验:
|
|
132
|
+
|
|
133
|
+
- **审计正确性**:`pwsh`/PowerShell/`cmd`、Windows 删除/提权/凭据/外传;初始 `permission/preset` / `sandbox/mode` 不再报;普通 write/network 不再刷屏。
|
|
134
|
+
- **成本正确性**:分模型累计;混合模型分别计价;价格表可编辑;USD/CNY。
|
|
135
|
+
- **分享安全**:脱敏预览 + 数量 + 大小;未脱敏导出需要显式勾选;导出视图不再显示空的 Forks/Compare。
|
|
136
|
+
- **真的变小了**:client bundle **2.0 MB → 232 KB**;吉祥物 **1.4 MB → 73 KB**;README GIF **28.8 MB → 164 KB**;15 秒 WebP **116 KB**。
|
|
137
|
+
- **时间线更好用**:思考、系统提示词、模型选择、工具摘要、键盘导航;过滤时保持选中事件。
|
|
138
|
+
- **档案仪表盘**:所有会话、本月/全部、token、成本、风险、搜索、工作区过滤。
|
|
139
|
+
- **隐私/安全**:API 默认仅 loopback;密钥脱敏;新增 [PRIVACY.md](PRIVACY.md) 和 [SECURITY.md](SECURITY.md)。
|
|
140
|
+
- **兼容性**:`engines.dsh`;目标版本 DSH Desktop 0.2.1-rc.2(已对照运行中的 `sessionQuery` 契约;UI 在 demo 模式验证)。
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## 兼容性
|
|
145
|
+
|
|
146
|
+
| 组件 | 测试 / 要求 |
|
|
147
|
+
| --- | --- |
|
|
148
|
+
| DSH Desktop | **0.2.1-rc.2** — 目标版本 / API 契约已核对 |
|
|
149
|
+
| DSH Web | 预期 0.2.x(同一套 `sessionQuery` / webServer 契约) |
|
|
150
|
+
| Node | **22+** |
|
|
151
|
+
| 包版本 | `@mingozhou/dsh-replay@0.4.2` |
|
|
152
|
+
| 插件 API 范围 | `engines.dsh >= 0.2.0-rc.8` |
|
|
153
|
+
|
|
154
|
+
DSH 迭代很快。如果未来版本改坏适配层,`npm run demo` 仍然可用,因为分析/UI 层独立于宿主。遇到问题请附上 DSH 版本和失败的路由。
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## 隐私与安全
|
|
159
|
+
|
|
160
|
+
- 插件通过 `ctx.sessionQuery` 读取会话日志;**不写入会话数据**。
|
|
161
|
+
- UI 只请求**本地 DSH origin**;无遥测、无云端解析。
|
|
162
|
+
- 宿主 API 默认**仅 loopback**、只读。`allowRemote` 是显式 opt-in,且仍然没有认证——不要把端口暴露到网络。
|
|
163
|
+
- 导出的 HTML 自包含、离线。**会话日志是原始数据**:导出会遮罩常见凭据,但分享前仍建议自己检查。
|
|
164
|
+
- 详见 [PRIVACY.md](PRIVACY.md) 和 [SECURITY.md](SECURITY.md)。
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
## FAQ
|
|
169
|
+
|
|
170
|
+
**“回放”会重新跑会话 / 调用模型吗?**
|
|
171
|
+
不会。它只读取 append-only 日志。不发模型请求、不消耗 token、不写日志。这也是 [issue #2](https://github.com/MingoZhou/dsh-replay/issues/2),现在放进 FAQ。
|
|
172
|
+
|
|
173
|
+
**那为什么叫 replay?**
|
|
174
|
+
项目开始时官方还没有轨迹视图;“回放”指“播放录像”,不是“重赛”。现在 UI 叫 **会话复盘 / Session Review**,README 第一屏也明确写了只读。
|
|
175
|
+
|
|
176
|
+
**官方已经有 Trajectory,为什么还装这个?**
|
|
177
|
+
Trajectory 是单会话、实时的;dsh-replay 是跨会话档案,并补上钱、风险、血缘、分享。对照见[上面](#为什么不是-trajectory)。
|
|
178
|
+
|
|
179
|
+
**Windows 能用吗?**
|
|
180
|
+
能。0.4.2 专门补了 `pwsh`/PowerShell/`cmd` 和 Windows 路径;旧版审计完全看不到 `Remove-Item`,现在会报。
|
|
181
|
+
|
|
182
|
+
**为什么包变小了?**
|
|
183
|
+
旧版把 1.4 MB 吉祥物 base64 进了每个 client bundle。现在换成 73 KB 的 256px 图;侧栏仍然是彩色吉祥物(没有改成单色 SVG),基础 client bundle 约 232 KB。
|
|
184
|
+
|
|
185
|
+
**插件页显示已安装,但没有入口?**
|
|
186
|
+
完整重启 Harness;客户端插件集合只在启动时扫描。源码安装请确认 `lib/client.js` 存在(`npm run build`)。
|
|
187
|
+
|
|
188
|
+
**`GET /replay/api/sessions` 返回 404?**
|
|
189
|
+
profile 没有组合进 bundle。重新添加并检查配置;Desktop 用插件页,Web 用 `dsh --profile <profile> --dump-config`。
|
|
190
|
+
|
|
191
|
+
**Desktop 上 `dsh plugin --profile desktop …` 失败?**
|
|
192
|
+
正常:Desktop 应用独占该 profile。请用 **插件 → 添加插件**。
|
|
193
|
+
|
|
194
|
+
**脱敏是绝对安全的吗?**
|
|
195
|
+
不是。它是正则匹配、尽力而为;对话框会告诉你遮罩了多少处,未脱敏导出需要手动勾选。真实会话分享前请自己再看一遍。
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
## 路线图
|
|
200
|
+
|
|
201
|
+
- **从 `edit`/`write` 重建文件 diff**(比原始账本更有价值的下一项)。
|
|
202
|
+
- **标注 + 分享链接**。
|
|
203
|
+
- **更深的审计规则包**(供应链、网络外传、CI 凭据)+ 规则编辑。
|
|
204
|
+
- **更多档案分析**:按工作区花费、周报、预算提醒。
|
|
205
|
+
- **从审计发现直达原生 Trajectory**,而不是维护第二套时间线。
|
|
206
|
+
|
|
207
|
+
实时跟随不是重点:Trajectory 已经做得很好。dsh-replay 把精力放在档案、钱、风险和分享上。
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
## Star
|
|
212
|
+
|
|
213
|
+
如果 dsh-replay 帮你省下了一个下午的翻日志时间,点个 ⭐ 能让更多 DSH 用户找到它:
|
|
214
|
+
|
|
215
|
+
**[github.com/MingoZhou/dsh-replay](https://github.com/MingoZhou/dsh-replay)** · [在线 Demo](https://mingozhou.github.io/dsh-replay/) · [Issues](https://github.com/MingoZhou/dsh-replay/issues) · [Discussions](https://github.com/MingoZhou/dsh-replay/discussions)
|
|
216
|
+
|
|
217
|
+
想写文章?可编辑的发布文案在 [docs/content](docs/content/README.md)。
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
## 许可与致谢
|
|
222
|
+
|
|
223
|
+
MIT。鲸小深是为本项目创作的原创角色——不是 DeepSeek 官方 logo,也不是第三方同人作品。吉祥物图在 `assets/jingxiaoshen.png`,替换后重新构建即可嵌入。
|
|
224
|
+
|
|
225
|
+
`core/` 是零依赖分析层,可单独 `import`(`dsh-replay/core`),用来做自己的会话日志工具。它理解打包 chunk row、崩溃残尾、seed 边界、压缩遮蔽、reasoning block 和分模型 usage。
|
package/assets/icon.png
ADDED
|
Binary file
|