返回 Skills 目录
dontbesilent2025/dbskill已通过检查

SKILL DETAIL

dbs-report

dontbesilent2025/dbskill/dbs-report

dbs-report 是 dbskill 的报告产物工具,负责把 dbs-save 留下的多份存档文件合并成一份可读、可分享、可归档的诊断报告。报告内容必须来自 `{存档根目录}/sessions/{项目名}/` 下的存档文件,按时间顺序合并、去重、分类,保证每条内容都能追溯到用户已经确认过的状态。 报告包含六个部分:用户主诉的演进、已确认的结论、已否决的方向、当前未解决的问题、推荐下一步、附录存档索引。报告生成后保存为带时间戳的 Markdown 文件,永不覆盖,方便对比不同时点的诊断快照。

安装量 · 277查看来源

Installation

npx skills add https://github.com/dontbesilent2025/dbskill --skill dbs-report

技能文件

SKILL.md

最近同步 · 2026年10月18日

agents/openai.yaml›
interface:
  display_name: "dbs-report(诊断报告汇总)"
  short_description: "合并多次 dbs-save 诊断存档,生成带日期、索引和来源的可交付报告"
  default_prompt: "使用 $dbs-report,合并当前项目的诊断存档并生成可交付报告。"
references/archive-contract.md›
<!-- 本文件由 dbskill 统一生成,多个 Skill 共用同一内容,请勿单独修改 -->

# 存档契约

`dbs-save` 写入存档,`dbs-restore` 恢复存档,`dbs-report` 合并存档生成报告。三者共用本文件定义的位置、命名和格式。三个 Skill 的正文只写各自的流程,存档规则以本文件为准。

三个 Skill 各自带一份内容相同的副本(`references/archive-contract.md`),任一 Skill 单独安装也能读取。

## 1. 用户面向的措辞

跟用户对话时不暴露内部术语:

- 「snapshot」说成「存档」,一份诊断状态文件叫一份存档;
- 「session」说成「对话」或「下次回来」;
- 「slug」说成「项目」,每个项目下有独立的存档目录。

frontmatter 字段名(`status`、`title`、`source_skill`、`next_skill`)和路径中的 `sessions`、`slug` 是技术标识,不出现在用户对话里。

## 2. 项目名(slug)

每份存档属于一个项目,用来分隔不同生意的诊断。

- **默认项目名**:取自 `basename $(pwd)`。保留中文、英文字母和数字,英文字母转小写;空格、标点和其他符号替换成 `-`,连续的 `-` 合并为一个,去掉首尾的 `-`。处理后为空时用 `default`。例如「命名讨论」保持为 `命名讨论`,`My Shop (2026)` 变成 `my-shop-2026`。
- **用户显式指定**:使用 `--slug <项目名>`。
- 当前目录是用户家目录或没有明确项目时,项目名为 `default`。

## 3. 存档根目录

先解析存档根目录,后续路径都基于这个结果拼接。

配置文件固定为当前工作目录下的 `.dbs/config.json`:

```json
{
  "version": 1,
  "mode": "default"
}
```

| mode | 存档根目录 |
|---|---|
| `default` | `~/.dbs/` |
| `project` | 当前工作目录下的 `.dbs/` |
| `custom` | `root` 字段指定的目录 |

自定义示例:

```json
{
  "version": 1,
  "mode": "custom",
  "root": "~/Library/Mobile Documents/com~apple~CloudDocs/dbs-archive"
}
```

解析规则:

1. 读取当前工作目录下的 `.dbs/config.json`。
2. 文件不存在,或 `mode` 是 `default` 时,存档根目录为 `~/.dbs/`。
3. `mode` 是 `project` 时,存档根目录为当前工作目录下的 `.dbs/`。
4. `mode` 是 `custom` 时,读取 `root`。展开开头的 `~`;相对路径按当前工作目录解析。
5. 配置无法解析、`mode` 不受支持、`root` 为空,或路径指向 `/`、用户家目录、当前项目根目录时,停止当前操作并说明配置问题。不要到其他位置猜测,也不要静默退回默认位置。

只有 `dbs-save` 的 `location` 命令可以写入配置文件;`dbs-restore` 与 `dbs-report` 只读取配置。

## 4. 目录与文件名

```text
{存档根目录}/sessions/{项目名}/{YYYYMMDD-HHMMSS}-{标题}.md
{存档根目录}/reports/{项目名}/{YYYYMMDD-HHMMSS}-{项目名}.md
```

- `YYYYMMDD-HHMMSS` 使用本地时间。
- 文件名中的标题把空格和标点替换成 `-`,保留中英文字符。
- 同一秒已有同名文件时,追加 4 位随机后缀,例如 `-a7k2`。
- 排序和「最新」一律按文件名前缀的时间判断,不依赖文件修改时间;云同步可能改写修改时间。
- 存档和报告每次新建,不覆盖已有文件。

## 5. 存档文件格式

YAML frontmatter 加 Markdown 正文。

```yaml
---
slug: {项目名}
timestamp: {ISO 8601,带时区,例如 2026-05-01T14:23:15+08:00}
title: {标题原文}
source_skill: {对话中主要使用的 Skill;多个用英文逗号分隔}
status: {in-progress | resolved | abandoned}
next_skill: {用户已确认的下一步 Skill,可以为空}
---
```

`timestamp` 不能写成 `20260501T14:23:15+0800`。生成时优先使用:

```bash
python3 -c "from datetime import datetime; print(datetime.now().astimezone().isoformat(timespec='seconds'))"
```

`status` 的取值与对用户展示的中文:

| 取值 | 含义 | 展示 |
|---|---|---|
| `in-progress` | 诊断还没结束,下次回来要接着 | 进行中 |
| `resolved` | 问题已诊断完成,结论已确定 | 已结论 |
| `abandoned` | 用户决定放弃这个方向 | 已放弃 |

不确定时默认 `in-progress`。

正文固定 6 段,顺序如下:

1. `## 用户主诉`:用户最初的问题,1~2 句,保留原话语气。
2. `## 已得出的结论`:每条一句话。
3. `## 用户已否决的方向`:每条写明否决理由;没有时写「(暂无)」。
4. `## 待验证假设`:没有时写「(暂无)」。
5. `## 已确认的下一步`:用户已经确认时,写做什么、为什么、对应哪个 Skill;尚未确认时写「待定,交回 /dbs 判断」。
6. `## 备注`:任何对以后回访有用的信息。

旧版存档中名为「推荐下一步」的段落,按「已确认的下一步」读取。读取时遇到缺失的字段或段落,使用现有内容继续,不中断。

## 6. next_skill 的含义

- 只有用户已经明确选择下一个 Skill,或明确确认按某个 Skill 继续时,才填写 `next_skill`。
- 上一个 Skill 只给出候选方向、用户尚未确认时,留空,恢复后交回 `/dbs` 判断。
- 恢复存档时,只有用户明确说按上次确认的下一步继续,才进入 `next_skill` 指向的 Skill,并把存档内容作为上下文。
SKILL.md›
---
name: dbs-report
description: 把多次 dbs-save 存档合并成可交付的 Markdown 报告。用户要求汇总诊断、整理报告或生成可分享材料时使用。
---

# dbs-report:诊断报告

你是 dbskill 的报告产物工具。你的工作是:把 dbs-save 留下的多份存档文件合并成一份可读、可分享、可归档的诊断报告。

报告内容必须来自 `{存档根目录}/sessions/{项目名}/` 下的存档文件。按时间顺序合并、去重、分类,保证每条内容都能追溯到用户已经确认过的状态。

---

## 为什么需要报告

诊断结论现在漂在聊天里。客户想发给合伙人、想三周后回顾、想跟外部顾问对账,都得自己截图复制。

报告把累积的存档固化成一份带日期、带版本、带索引的 markdown 文档。这是 dbskill 从「单次工具」升级到「可交付咨询」的产物。

---

## 触发方式

| 命令 | 行为 |
|---|---|
| `/dbs-report` | 把当前项目下所有存档合并成报告 |
| `/dbs-report --since YYYY-MM-DD` | 只合并某日期之后的存档 |
| `/dbs-report --slug <项目名>` | 指定项目 |
| `/dbs-report --slug <项目名> --since YYYY-MM-DD` | 同时指定 |
| 「出报告」「打包」「整理一份」「给合伙人看的」 | 等价于 `/dbs-report` |

---

## 存档契约

措辞、项目名、存档根目录、文件名和存档格式统一按 [references/archive-contract.md](references/archive-contract.md) 执行。这份存档契约与保存、恢复、报告三个存档能力共用,内容一致。

本 Skill 只读取配置,不修改配置。配置有问题时停止生成报告并说明原因;用户要查看或调整位置时,引导使用 `/dbs-save location`。

后文中的 `{存档根目录}` 都指按契约第 3 节解析出的绝对路径。

---

## 工作流程

### Step 1:确认有数据可合并

按项目找 `{存档根目录}/sessions/{项目名}/*.md`。

- 0 个文件 → 「`{项目名}` 下还没有可汇总的存档。输入 `/dbs` 开始处理真实任务;形成结论并明确保存后,再回来生成报告。」
- 1 个文件 → 提示:「`{项目名}` 下只有 1 份存档,单份不需要合并报告。直接看 `{存档根目录}/sessions/{项目名}/{文件名}` 就行。」并询问「还是要强制出报告吗?」如果用户说要,继续。
- ≥2 个文件 → 直接进入合并

如果带了 `--since`,先按日期过滤。过滤后剩下的文件如果不到 2 份,按上面同样处理。

### Step 2:读取并解析所有存档

按文件名 `YYYYMMDD-HHMMSS` 排序(早 → 晚)。

每个文件按契约第 5 节解析 frontmatter 和正文 6 段。旧版段落名和缺失字段的处理方式也按契约执行,不因格式缺失中断报告生成。

### Step 3:拼路径、写报告

```
{存档根目录}/reports/{项目名}/{YYYYMMDD-HHMMSS}-{项目名}.md
```

每次新生成一份,**永不覆盖**。文件名带时间戳,方便对比不同时点的诊断快照。

如果目录不存在,先 `mkdir -p`。

### Step 4:报告内容

按下面的 6 段结构写。每段的内容怎么生成在下面分别说明。

```markdown
# {项目名} 商业诊断报告

**生成时间**:{现在的本地时间,YYYY-MM-DD HH:MM}
**累积存档**:{N} 份(最早 {最早存档的日期},最新 {最新存档的日期})
**主要走过的 skill**:{所有 source_skill 字段去重后列出}
**生成工具**:dbskill / dbs-report

---

## 一、用户主诉的演进

按时间顺序列出每份存档的主诉,每条一行:

- `2026-04-15` · {主诉简化版,一句话} · 来自 {source_skill}
- `2026-04-22` · {主诉} · 来自 {source_skill}
- ...

末尾用一段话点出「关注点是怎么变的」——比如从「卖什么」演进到「卖给谁」再到「怎么获客」。**这一段是你少数允许做总结的地方**,但只描述演进路径本身,不引申、不推测、不发挥。

---

## 二、已确认的结论

合并所有存档里的「已得出的结论」字段。去重(语义相近的合并),按时间倒序(新结论在前)。

格式:

- {结论原文} · 出自 {对应存档的标题} · {对应日期}

如果一条结论在后续存档里被推翻或修正,**两条都列出来**,新的在前,旧的在后并加 `(已被后续诊断修正)` 标注。

---

## 三、已否决的方向

合并所有存档里的「用户已否决的方向」字段。

格式:

- {方向} —— 否决理由:{理由} · 出自 {存档标题} · {日期}

如果没有任何否决方向,写「(暂无)」。

---

## 四、当前未解决的问题

合并以下两类:
1. status 是 `in-progress` 的存档的「待验证假设」字段
2. 在最早存档中提出但从未在后续存档中被处理的方向

格式:

- {问题/假设原文} · 首次出现 {日期} · 当前状态:{进行中 / 待验证}

---

## 五、已确认的下一步

汇总所有存档的「已确认的下一步」段落 + `next_skill` 字段,按契约第 6 节理解其含义。

按优先级排:
1. 最新存档里已确认的下一步(最优先)
2. 反复出现但还没执行的下一步
3. 早期确认但已经被新决定替代的(标注「已被后续决定替代」)

格式用一段话写出来,不要列点。一段话讲清楚下一步该做什么、为什么;存档里填了 `next_skill` 时写明对应的 Skill。所有存档都没有确认下一步时,写「(暂无)」。

---

## 六、附录:存档索引

按时间正序列出所有存档文件:

| 日期 | 标题 | 状态 | source_skill | 文件 |
|---|---|---|---|---|
| 2026-04-15 | 卖什么没想清楚 | 进行中 | dbs-diagnosis | `{存档根目录}/sessions/{项目名}/20260415-...md` |
| ... | ... | ... | ... | ... |

状态字段对用户展示时翻译成中文:进行中 / 已结论 / 已放弃。

---

报告由 dbskill 自动生成。原始存档见 `{存档根目录}/sessions/{项目名}/`。如需更新报告,再次运行 `/dbs-report`。
```

### Step 5:写完之后

写完文件后给用户一段回执:

```
报告已生成:{存档根目录}/reports/{项目名}/{文件名}

合并了 {N} 份存档({起始日期} → {结束日期})。
```

如果用户需要把报告发布到公众号或群里,加一句:

> 想发公众号的话,还需要把这份 Markdown 转成公众号后台可粘贴的格式。

用户没有发布需求时不加。

---

## 关键原则

1. **不从对话凭空总结**。报告内容必须能追溯到具体存档文件的具体字段。这是报告的可信度
2. **永不覆盖**。每次生成新文件,带时间戳。用户可以对比不同时点的诊断
3. **不发挥**。用户主诉的演进段落允许简短总结,其他全部直接搬运存档字段
4. **不主动出 PDF / HTML / 其他格式**。只生成 markdown,用户要别的格式自己处理

---

## 边界情况

- 存档文件里有用户标的「敏感信息」(比如真实收入、客户名字)→ 报告原样保留。不做脱敏。这是用户自己存进去的,要脱敏在 dbs-save 阶段做
- 多份存档之间结论冲突 → 都列出来,新的在前并标注修正关系
- 用户在 `{存档根目录}/sessions/` 之外手动放了个文件 → 不读。只读当前配置对应的 sessions 目录
- 当前存档位置为空,但用户确认以前存过 → 显示当前存档根目录,引导用户用 `/dbs-save location` 检查设置。不要跨目录自动搜索私人文件
- 存档跨年(最早 2025、最新 2026)→ 报告头部明确写出时间跨度

---

## 说话风格

1. **回执只一段**。文件路径 + 合并数量 + 时间跨度,不展开介绍
2. **不要解释报告里写了什么**。用户自己会打开看
3. **绝对不在报告 markdown 里加感叹号、表情、鼓励语**。这是给客户看的产物,不是给当前用户煽情

---

## 语言

- 用户用中文就用中文回复,用英文就用英文回复
- 中文回复遵循《中文文案排版指北》
- 报告本身用存档里的语言(如果存档是中文,报告就是中文)


---

完成当前任务后直接结束。用户的请求超出本 Skill 的范围、任务完成后用户的材料里出现明确的后续需求,或用户询问下一步时,用一句话说明还需要哪种能力,不点名其他 Skill;当前环境已经安装 `/dbs` 时,补一句「可以输入 `/dbs`,由它匹配对应的 Skill」。