dsh-plugin
DayuanJiang/next-ai-draw-iodsh 的 draw.io 绘图插件:通过 next-ai-drawio MCP 服务器作图,点回复里的链接在右侧栏打开实时预览,可以手动修改图,AI 的每次修改都是可以恢复的版本。需 Node.js 18+,首次使用由 npx 下载 MCP 服务器。
持久化模型工具调用轨迹记录器:每次工具调用落盘为 JSONL(重启不丢),提供结构化 call_trace 查询工具与 callTraceHistory 服务,支持文件大小轮转,附可选浮层画布 UI。
给 DeepSeek Harness 的 LLM 工具调用轨迹记录器:每次模型调用工具(read / pwsh /
subagent / web_search …),它把这次调用持久化到 JSONL 文件——重启不丢——
并提供一个结构化 call_trace 工具供模型随时查询,以及一个 callTraceHistory 服务供
浮层 UI 合并历史。
@deepseek-ai/* 运行时依赖,从任意目录可加载(--patch overlay 或 profile 安装均可)。agent/request + tools/execute + tools/result(根作用域,包含子代理调用)。dsh plugin --profile voice add ./call-trace-plugin
dsh --profile voice --dump-config # 验证出现 "# == dsh-plugin-call-trace" 层
dsh --profile voice # 启动
--patch 本地 overlay(最快,先试这个)# 先停掉当前的 dsh web,再:
pnpm dsh web --patch D:\Java\dsh-demo\call-trace-plugin\cordis.local.yml
cordis.local.yml里的name是file://URL(Windows 绝对路径必须写成合法file://URL),插件移动后要同步改。
pnpm pack # 产出 dsh-plugin-call-trace-1.0.0.tgz
dsh plugin --profile <name> add ./dsh-plugin-call-trace-1.0.0.tgz
# 或发布到 npm 后:dsh plugin --profile <name> add dsh-plugin-call-trace
配置写在 patch 行的 config 下(方式 B 在 cordis.local.yml,profile 安装则在
$DSH_HOME/profiles/<name>/cordis.patch.yml 覆盖该行 id call-trace-recorder)。
config:
outDir: 'D:/...' # 输出目录;默认 $DSH_HOME/call-trace(不写 node_modules)
call_trace 看下最近的调用」。工具返回结构化数组
(name / status / args / summary / turn / step / agentId / durationMs / ts),模型可直接读字段。call_trace({ clear: true })(破坏性,清空整个历史文件)。callTraceHistory.tail(n) 返回解析后的最近记录,供 UI 合并。目录 ui/ 附带一个动态插件浮层 UI(GraphRAG 式分叉连线 + 中文工具描述 +
点击展开详情 + 子代理嵌套分支 + 历史合并 + 本会话/全部过滤)。动态插件只存在进程内存,
重启后需重建:对 agent 说「用 call-trace-plugin\ui\host.js 和 ui\client.js 重建
调用轨迹动态插件并运行」(详见 ui/DEFINE.md)。
call-trace-plugin/
├── package.json # dsh.bundle manifest
├── cordis.patch.yml # profile 安装用的 bundle 层(name 为包名)
├── cordis.local.yml # --patch overlay(name 为 index.js 的 file:// URL)
├── index.js # 插件入口:事件监听 + JSONL 落盘 + 轮转 + 服务 + 工具
├── ui/ # 可选浮层 UI(动态插件源码 + 重建说明)
├── smoke-test.mjs # 记录器冒烟测试
├── check-syntax.mjs # ui/ 源码语法检查
└── README.md / LICENSE
@deepseek-ai/* 运行时导入:树外插件只能稳定解析安装闭包内的包,所以用
ctx.on 监听事件、ctx.tools.register 注册原始 JSON Schema 工具、ctx.provide
提供服务,不导出 Config schema(无 Config 时 Cordis 把 patch config 原样传给
apply,默认值在 apply 内合并)。tools/execute 记开始,tools/result 记完成并落盘;进程在
调用中途崩溃则该次调用不落盘(可接受)。trace.jsonl 超过 5 MB 自动改名为 trace-<ts>.jsonl 并开新文件。node --check index.js # 语法
node smoke-test.mjs # 记录器冒烟(结构化输出/历史服务/并行/轮转/clear)
node check-syntax.mjs # ui/host.js + ui/client.js 语法
subagent/workflow 调用执行窗口内、来自不同
agentId 的调用会被收进该调用的「子代理分支」,极端并发下可能误归(多会话时用
「本会话」视图过滤)。