qibo30/dsh-worklog

dsh-worklog

DSH plugin: give the agent a cross-session development worklog (worklog_add / worklog_list). Cordis service + agent tools + bundle patch.

未分類agent-toolscordisdeepseek-harness

dsh-worklog

给 DSH agent 一个工作日志工具:把「刚做了什么 / 为什么这么定 / 卡在哪」写进按天分文件的 JSON,下一次会话可以捡起来继续。

它提供什么

类型 · 名字 · 说明 Cordis 服务 · ctx.worklog · add / list / days / read / write Agent 工具 · worklog_add · 追加一条日志,带可选 tag Agent 工具 · worklog_list · 读当天 / 指定日期 / 按 tag 过滤 / 列出有记录的日期 Cordis 事件 · worklog/added · 每次写入后广播 { day, entry }

数据落盘:$DSH_HOME/worklog/YYYY-MM-DD.json,默认最多保留 200 条/天(maxEntries)。

配置

- id: dsh-worklog
  name: dsh-worklog
  config:
    dir: ""            # 留空 → $DSH_HOME/worklog
    maxEntries: 200

安装

从 GitHub 直装(推荐,装完自动进 bundle 层栈):

dsh plugin --profile web add github:qibo30/dsh-worklog

本地开发用 link: 前缀,改完代码重启即可,不需要重新 install:

dsh plugin --profile web add link:/path/to/dsh-worklog
desktop profile 由 Electron 应用独占管理,dsh plugin 会拒绝写入。
装进桌面版请在 $DSH_HOME/profiles/desktop/cordis.patch.yml 里加一条
- insert: [{ id: dsh-worklog, name: dsh-worklog }]。

本地冒烟测试

node test/smoke.mjs

不启动 DSH,用一个假 tools 服务把插件装起来,验证:config 解析、工具注册、执行、render、磁盘写入、必填参数校验、卸载回收。

单独克隆仓库时 @deepseek-ai/* 解析不到,把 DSH 自带的 node_modules 链接进来即可:

mkdir -p node_modules/@deepseek-ai
ln -s "<DSH>/node_modules/@deepseek-ai"/* node_modules/@deepseek-ai/

结构

dsh-worklog/
├── package.json        # dsh.bundle.patch 指向 cordis.patch.yml
├── cordis.patch.yml    # 挂载声明
├── icon.png            # 插件管理页图标
├── lib/
│   └── index.js        # 服务 + 工具 + apply
└── test/
    └── smoke.mjs       # 本地冒烟测试

写 DSH 插件要注意的坑

  1. `inject` 是严格模式:ctx.inject([...], cb) 里读没有列进列表的服务会直接抛 cannot get property "xxx" without inject。哪怕这个服务是你自己在同一个 apply 里刚注册的,也得写进去。
  2. `cordis.patch.yml` 里 `id:` 那一行不能写行尾注释,商城预检的正则会抓不到值。
  3. `package.json` 必须有 `dsh.bundle.patch`,否则安装后不会自动进层栈。
  4. 前端插件(要出 UI)还得加 dsh.client 字段和 exports["./client"] 指向 lib/client.js;纯宿主插件不需要。