航海日志:把 AI 会话整理成可审计的报告

前言

在 DeepSeek Harness 里跟 AI 干了一个小时,活干完了,有人问「刚才做了什么」,你可能答不上来。想答上来,得翻会话日志——那是几千行原始事件:turn/start、tool/call、tool/result、审批、重试、上下文压缩。没人会读那个东西。

「航海日志」替你读完,整理成几页纸。打开任意一个聊过的会话,顶部会出现「航海日志」标签:这趟航行的成绩单、一轮一轮的时间线、文件和工具的排行榜,都在上面。想存档,可以导出为 HTML 文件或 Markdown,发给谁都能直接打开。

它是什么

xh0915/dsh-voyage-log 是一个 DeepSeek Harness 双端插件,维护者是 xh0915,分类为 admin-security。它的核心是读取 Harness 自带的会话日志,按轮次、工具、文件、token 等维度统计,生成一份可审计的「航海报告」,并支持导出为自包含的 HTML 或 Markdown。

插件不会编造任何数字:所有数据都来自 Harness 自带的 sessionQuery,读取、整理、生成报告全在本地完成,不上传任何内容。

它能回答哪些问题

  • 聊了多久、走了几轮、调用了多少次工具、失败几次。
  • 哪个文件被改得最多、哪个文件被读了很多次却没改。
  • 哪个工具调用最多、哪个工具失败最多。
  • 哪一轮最耗时,慢在哪个工具上。
  • 用了多少 token(输入、输出、缓存读取分开算)。
  • 哪一步发了请求却始终没收到结果——会明确标成「没有回执」,不会悄悄消失。

页面上有什么

关键数字:时长、轮数、工具调用次数、失败次数、改了哪些文件、读了多少文件、烧了多少 token。插件不会给出费用数字,因为会话日志本身不记录价格。

时间线:按时间顺序一轮一轮还原:你说了什么、AI 回了什么、调用了哪个工具、耗时多久、结果是什么、是否失败、审批过没过、哪里重试、哪里压缩了上下文、这一轮怎么结束的。

排行榜:三张表——文件改/读次数、工具调用/失败次数、各模型回复次数。

任务清单:显示这次会话里最近一次写入的待办面板。

导出:可以复制一段 Markdown 摘要,或下载/打印成一个 HTML 文件。那个文件是自包含的:样式内联、不引用外部资源、不含脚本,可以直接归档或转给别人。

安装与启用

需要 Node.js 22.19 或更高(24 也可以),以及 DeepSeek Harness 0.1.0-rc.6 或更高。

git clone https://github.com/xh0915/dsh-voyage-log
cd dsh-voyage-log
pnpm install
pnpm run build
dsh plugin --profile web add .

然后重启 Web Harness。随便打开一个聊过的对话,顶部会出现「航海日志」标签,点进去就是这次的报告。

pnpm run build 必须在 add 之前跑。这个包没有安装期构建脚本(pnpm 10 会拦下未批准的 prepare),跳过这一步,插件会「装上了却加载不出来」。

卸载:

dsh plugin --profile web remove dsh-voyage-log

配置与隐私

默认情况下,插件会对敏感内容做脱敏处理。在 Harness 配置文件中可以调整:

dsh-voyage-log:
  redactSecrets: true   # 显示前先把密钥类内容涂掉,默认开启
  maxTurnEvents: 240    # 每一轮最多列几行,范围 20–5000

脱敏规则包括:私钥块、JWT、GitHub / AWS / Google / Slack / npm / PyPI / Stripe / DeepSeek 形式的密钥、Bearer 认证头、URL 里的账号密码、api_key = … 赋值、邮箱等,全部替换成 «已脱敏»。报告里会记录一共涂掉多少处、命中了哪些类别。只是长得像密钥的东西不会被误伤:process.env.X、${TEMPLATE}、foo.bar.baz、全大写常量、很短的字符串都原样保留。

脱敏默认开启。如果你手动关掉,报告会写明「这次没有脱敏」,不会假装做过。

技术细节

客户端半边不贡献任何 prompt、工具或会话事件——ctx.typert.register() 只发布反射元数据。这个插件只是在你自己数据上加的一层界面。

目录结构大致如下:

  • package.json:dsh.bundle.patch + dsh.client、脚本、peer 依赖
  • cordis.patch.yml:把宿主插件行挂进 profile
  • dsh.plugin.json:注册表清单
  • src/index.ts:宿主入口(Config、Remote 服务、Typert 清单)
  • src/runtime.ts:voyage.build(sessionId) —— 读日志、整理、返回
  • src/fold.ts:整理引擎——原始事件 → 轮次、行、汇总
  • src/redact.ts:本地脱敏
  • src/schema.ts:Zod 线上契约
  • src/contract.ts:宿主与客户端共享的严格 InvocationDescriptor
  • src/typert.ts:宿主反射清单
  • src/client/index.tsx:客户端入口(挂 Remote、注册标签页)
  • src/client/view.tsx:航海日志视图
  • src/client/report.ts:Markdown 摘要 + 自包含 HTML 报告
  • src/client/styles.ts:主题令牌样式表(跟随 Harness 明暗)
  • src/client/locales.ts:中文 / 英文文案
  • tests/:整理、脱敏、接口、报告单元测试
  • build.mjs:esbuild 双构建——宿主 ESM + 客户端 CJS

开发检查:

pnpm run check   # 类型检查 + lint + 测试 + 构建

适用场景与注意

这个插件适合需要清晰回溯 AI 会话过程的开发者、运维和产品负责人。它可以帮你快速定位耗时瓶颈、工具失败原因、文件变更范围以及 token 消耗。

插件以当前 DSH 进程的权限运行,安装前建议检查源码与许可证(MIT)。所有数据处理都在本地完成,不会上传任何内容。

结尾

「航海日志」把一次 AI 会话干了多少活,算成几页纸。它不猜测费用,不逐字记录流式输出,不多抓一个字节,不上传任何东西,也不丢内容。对于需要可审计和可追溯的智能体工作流,它是一层直接的界面。

  • 目录页:https://www.skillhub.cn/plugins/xh0915/dsh-voyage-log
  • GitHub:https://github.com/xh0915/dsh-voyage-log
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye