Skip to content
dsh.fish
Bundle

dsh-daily-log

Daily work log plugin for DeepSeek Harness: /daily scaffold plus daily_log_write (merge-on-write with .bak backups), daily_log_read, and daily_log_list tools; YYYY-MM-DD.md and a theme-aware YYYY-MM-DD.html

Source
ShineFree7
Updated
Updated 6 days ago

Readme

# dsh-daily-log

dsh-daily-log 是 DeepSeek Harness 的每日工作日志插件。`/daily` 命令会生成
`YYYY-MM-DD.md` 和跟随系统浅色/深色主题的 `YYYY-MM-DD.html` 仪表盘;同时提供
三个面向模型(agent)的工具用于读取、合并、列出日志。所有文件都写入配置的
`outputDir`,默认是 `~/.dsh/daily-log`。

dsh-daily-log is a daily work log plugin for DeepSeek Harness. The `/daily`
command scaffolds `YYYY-MM-DD.md` plus a theme-aware `YYYY-MM-DD.html` dashboard
(system light/dark), and three model-facing tools read, merge, and list logs. All
files are written under the configured output directory, defaulting to
`~/.dsh/daily-log`.

## 截图 Screenshots

浅色 / Light

![Light](assets/daily-log-light.png)

深色 / Dark

![Dark](assets/daily-log-dark.png)

## 功能 Features

- `/daily` 一键生成当天或指定日期日志:`/daily`、`/daily 2026-08-19`、
  `/daily list`
- 六个固定区块:`done`(已完成)、`changes`(变更)、`problems`(问题)、
  `next`(下一步)、`improve`(改进)、`takeaways`(经验)
- Markdown 与 HTML 双格式;HTML 为仪表盘版并支持系统浅色/深色主题
- 模型工具:`daily_log_write`(按区块合并写入,覆盖前自动 `.bak` 备份)、
  `daily_log_read`(结构化读取)、`daily_log_list`(列出已有日志)
- 支持 `zh` / `en` locale 配置

- `/daily` scaffold for today or a specific date: `/daily`, `/daily 2026-08-19`,
  `/daily list`
- Six fixed sections: `done`, `changes`, `problems`, `next`, `improve`,
  `takeaways`
- Both `.md` and a dashboard-style, theme-aware `.html` (system light/dark)
- Model tools: `daily_log_write` (section-level merge with `.bak` backups before
  overwrite), `daily_log_read` (structured read), `daily_log_list` (list dates,
  newest first)
- `zh` / `en` locale support

## 布局 Layout

- `src/index.ts` — Cordis 插件入口:注册 `/daily` 与三个工具
- `src/daily-log.ts` — 日期解析、Markdown/HTML 渲染、合并写入(`.bak` 备份)、
  读回解析、列表
- `cordis.patch.yml` — `dsh.bundle` 引用的补丁层
- `scripts/smoke.mjs` — 无依赖 smoke 测试(Node 24 类型剥离)
- `assets/` — 浅色/深色截图

- `src/index.ts` — Cordis plugin entry: registers `/daily` and the three tools
- `src/daily-log.ts` — date parsing, Markdown/HTML rendering, merge-on-write
  with `.bak` backups, read-back parsing, listing
- `cordis.patch.yml` — bundle patch layer referenced by `dsh.bundle`
- `scripts/smoke.mjs` — dependency-free smoke test (Node 24 type stripping)
- `assets/` — light/dark screenshots

## 使用 Usage

面向用户的 `/daily` 命令:

Human-facing `/daily` command:

```sh
/daily              # today, default output directory
/daily 2026-08-19   # a specific date (scaffold only, never overwrites)
/daily list         # list existing log dates, newest first
```

面向模型(agent)的工具:

Model-facing tools:

- `daily_log_write` — 写入某天日志。**合并规则**:只覆盖你传入的区块,未传的
  区块保留原内容(首次写入时缺失区块渲染为提示占位)。即将被覆盖的文件会先备份
  为 `YYYY-MM-DD.bak.md` / `.bak.html`。六个区块中至少提供一项:`done`、
  `changes`、`problems`、`next`、`improve`、`takeaways`。空数组视为“未提供”
  (不会清空区块)。返回 `updated` / `preserved` / `backups` 供确认。
- `daily_log_read` — 将某天日志读为结构化区块 + 原始 Markdown(省略 `date`
  即今天)。
- `daily_log_list` — 列出输出目录中全部日志日期,最新在前。

`problems` 的每条可写成“问题:xxx;解决:yyy”(也可用“处理方式:”“,改用”
等自然写法);HTML 渲染时会自动拆分为“问题/解决”两栏,没有解决方式的条目
右侧显示横杠。

- `daily_log_write` — write one date's log. **Merging**: only the sections you
  send are overwritten; omitted sections keep their previous content (a first
  write renders missing sections as hint placeholders). Files that will be
  overwritten are first backed up to `YYYY-MM-DD.bak.md` / `.bak.html`. Provide
  at least one of the six sections: `done`, `changes`, `problems`, `next`,
  `improve`, `takeaways`. Empty arrays count as "not provided" (never wipes a
  section). Returns `updated` / `preserved` / `backups` for confirmation.
- `daily_log_read` — read one date's log as structured sections plus the raw
  Markdown (`date` omitted = today).
- `daily_log_list` — list all log dates in the output directory, newest first.

Each `problems` item may use "Problem: xxx; Solution: yyy" (or natural phrasing
such as "处理方式:" / ",改用" / "fixed by"); the HTML renderer splits it into
a problem/solution pair, and an item without a solution keeps a dash on the
right.

`.md` 与 `.html` 始终渲染全部六个区块,`.md` 同时是合并数据源。如果手工编辑
破坏了生成格式,下次合并会明确报错而不是覆盖,`daily_log_read` 也会返回原始
Markdown 以便恢复。

Both `.md` and `.html` are always rendered with all six sections; the `.md` is
also the merge source. If hand edits break the generated section format, the
next merge fails loudly instead of overwriting, and `daily_log_read` returns
the raw Markdown for recovery.

## 配置 Configuration

在 profile 的 `cordis.patch.yml` 中覆盖输出目录与语言:

Override the output directory and language from the profile's
`cordis.patch.yml`:

```yaml
- id: dsh-daily-log
  config:
    outputDir: 'D:\\dsh\\workspace\\daily-log'
    locale: zh   # 'zh' (default) or 'en'
```

`outputDir` 默认为 `~/.dsh/daily-log`(不会使用 `process.cwd()`);`locale`
控制区块标题、工具描述、命令输出和渲染文档的语言。

`outputDir` defaults to `~/.dsh/daily-log` (never `process.cwd()`); `locale`
controls section labels, tool descriptions, command output, and the rendered
documents.

## 本地开发 Local development

包面向 Node >= 24,直接通过原生 TypeScript 类型剥离加载 `src/index.ts`,
本地链接无需构建步骤。运行 `pnpm smoke` 执行 smoke 测试;类型检查先
`pnpm install`,再 `pnpm typecheck`。

The package targets Node >= 24 and loads `src/index.ts` directly through native
TypeScript type stripping, so no build step is required for local links. Run the
smoke test with `pnpm smoke`. Type checking needs `pnpm install` first, then
`pnpm typecheck`.

安装到 profile:

Install into a profile:

```sh
dsh plugin --profile web add /absolute/path/to/dsh-daily-log
```

Install

dsh plugin --profile web add github:ShineFree7/dsh-daily-log

Profile: web

  • This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.
Source