dsh-logbook:让 ctx.logger 输出可见的 DSH 插件

前言

在 DeepSeek Harness(DSH)插件开发中,ctx.logger 是标准的日志输出接口。然而,默认的配置往往不挂载日志接收器。DSH 内置了一个 1000 条记录的内存缓冲区,但它有一个隐藏行为:静默丢弃 warn 和 debug 级别的日志。这导致插件发出的警告无法被查看。dsh-logbook 旨在解决这个问题,它通过提供 /logs 命令和默认开启的 stderr 导出器,让日志输出变得可见。

插件简介

dsh-logbook 是一个 DeepSeek Harness 插件。插件由开发者 d3vmeh 维护,采用 MIT 许可证。它依赖 @deepseek-ai/schemastery 和 @deepseek-ai/cordis 库,运行环境需要 Node.js 22 及以上。

安装与启用

安装过程非常直接,只需在终端执行以下命令即可启用插件:

dsh plugin --profile web add dsh-logbook

安装完成后,插件会自动开启一个 stderr 导出器。若需调整日志的保留数量、输出级别或静音特定记录器,需要在配置文件 cordis.patch.yml 中进行修改。

核心功能

该插件主要解决 DSH 默认日志不可见的问题,提供以下能力:

  • 使 ctx.logger 输出可见。
  • 提供内置的 /logs 命令,用于在聊天界面查看日志。
  • 默认开启 stderr 导出器,将日志输出到标准错误流。
  • 支持 /logs 过滤,可按级别、记录器名称或正则匹配过滤日志。
  • 支持静音特定日志记录器。

典型用法与配置

安装后,可以直接在聊天框使用 /logs 查看日志。支持多种参数组合:

/logs
/logs --level warn
/logs --name llm-gate --grep queue
/logs --since 10m --limit 100

若要控制 stderr 的输出级别或静音特定记录器,需编辑 cordis.patch.yml。例如:

- id: logs
  config:
    ring: 2000            # 记录保留数量
    stderr:
      enabled: true
      types:
        default: warn     # error | warn | info | debug | off
        llm-gate: debug   # 某个插件输出所有级别
        hmr: off          # 完全静音某个记录器

配置中的值代表“该级别及更严重”的日志,顺序为 error > warn > info > debug。

注意事项

使用时需注意以下几点:

  1. 缓冲区行为:DSH 内置缓冲区会静默丢弃 warn 和 debug 记录,只有 /logs 命令能读取到完整的历史记录。
  2. 管道稳定性:stderr 导出器经过特殊处理,不会因为管道关闭而崩溃。
  3. 已知 Bug:Cordis 存在已知 bug,ctx.logger.exporter() 的 dispose 方法会移除最近注册的导出器而非自身。这可能导致插件重载时丢失其他插件的日志接收器。dsh-logbook 通过内部标志避免了重复报告,但若同时存在多个日志插件,需注意可能互相干扰。

总结

dsh-logbook 提供了一种无需依赖 Web 界面的轻量级日志查看方案。它不输出到 stdout,避免了干扰 SDK 和 ACP 协议流量。对于需要在终端和聊天界面中排查问题的开发者,这是一个实用的工具。

更多详情可参考:GitHub 仓库 | 社区目录

羽毛球分组比赛记分
小程序二维码

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

小夜