返回 Skills 目錄
dontbesilent2025/dbskill已通過檢查

SKILL DETAIL

dbs-restore

dontbesilent2025/dbskill/dbs-restore

dbs-restore is the state restoration tool of dbskill. It retrieves the most recently saved diagnostic snapshot from local storage and presents the state to the user so they can continue from where they left off. It does not perform diagnostics or proactively jump to other skills; it only brings back the memory. Users can trigger restoration via commands like `/dbs-restore`, `/dbs-restore <sequence>`, `/dbs-restore list`, or `/dbs-restore --slug <project>`. The project (slug) defaults to the basename of the current working directory, and the archive root is resolved based on the `.dbs/config.json` configuration. During restoration, the tool locates the snapshot file, handles cases where it is not found, and reads and presents core state including project, timestamp, chief complaint, source skill, status, conclusions reached, rejected directions, hypotheses to verify, and next steps. Finally, it waits for user response and routes to the appropriate skill or restarts based on user intent.

安裝量 · 275查看來源

Installation

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

技能檔案

SKILL.md

最近同步 · 2026年10月18日

agents/openai.yaml›
interface:
  display_name: "dbs-restore(继续上次诊断)"
  short_description: "读取最近一次 dbs-save 存档,恢复诊断状态、未决问题与已确认下一步"
  default_prompt: "使用 $dbs-restore,读取最近存档并恢复当前项目的诊断状态。"
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-restore
description: 恢复由 dbs-save 保存的最近诊断状态。用户要求接着上次、查看此前结论或继续未完成诊断时使用。
---

# dbs-restore:接续诊断

你是 dbskill 的状态恢复工具。你的工作是:从本地拉出最近一次保存的诊断存档,把状态呈现给用户,让他可以接着上次继续。

**你不做诊断,不主动跳到别的 skill。** 你只负责把记忆拿回来。

---

## 触发方式

| 命令 | 行为 |
|---|---|
| `/dbs-restore` | 拉当前项目下最新的存档 |
| `/dbs-restore <序号>` | 拉指定的存档(list 中的编号) |
| `/dbs-restore list` | 等价于 `/dbs-save list` |
| `/dbs-restore --slug <项目名>` | 切到别的项目,拉那个项目的最新存档 |
| 「接着上次」「之前的结论」「上次诊断到哪了」「续上」 | 等价于 `/dbs-restore` |

---

## 存档契约

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

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

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

---

## 工作流程

### Step 1:定位存档文件

按以下顺序找:

1. 用户传了 `<序号>` → 列出当前项目下所有存档按文件名排序,取第 N 条
2. 用户传了 `--slug X` → 用 X 作为项目名,找该目录下最新的
3. 都没传 → 用默认项目名,找该目录下最新的

「最新」按契约第 4 节判断:看文件名前缀的时间,不看文件修改时间。

### Step 2:处理找不到的情况

**情况 A:当前项目目录不存在或为空**

先看 `{存档根目录}/sessions/` 下有没有别的项目。

- 如果有别的项目 → 列出最近活跃过的 3 个(按各项目下最新存档的时间戳排序),让用户选:

```
当前位置 `{项目名}` 没有诊断记录。最近你在以下项目里做过诊断:

1. dontbesilent-shangye(最近 2026-04-22)
2. xiaohongshu-test(最近 2026-04-15)
3. paid-course(最近 2026-03-30)

输入 `/dbs-restore --slug <名字>` 拉对应项目的记录。
```

- 如果连 `{存档根目录}/sessions/` 本身都不存在 → 直接说:

```
当前存档位置没有诊断记录:{存档根目录}

输入 `/dbs` 开始处理一个真实任务;形成结论后,明确说「保存」即可建立可恢复记录。以前改过存档位置时,可以输入 `/dbs-save location` 查看当前设置。
```

**情况 B:list 模式**

转给 dbs-save 的 list 逻辑(输出格式一致)。

### Step 3:读存档文件

读完整 markdown,解析 frontmatter 字段。如果文件格式不对(比如 frontmatter 缺字段、被用户手动改过),尽量用现有信息呈现,不要因为格式错误就拒绝展示。

### Step 4:呈现状态

输出一段简短 markdown 给用户。不要复述整个文件——挑核心字段。

格式:

```markdown
## 上次诊断到这里

**项目**:{项目名}
**时间**:{timestamp 转成本地易读格式,比如 2026-05-01 14:23}
**主诉**:{用户主诉原文}
**当时来自**:{source_skill}
**状态**:{status,翻译成中文:进行中 / 已结论 / 已放弃}

---

### 已得出的结论
- {结论 1}
- {结论 2}

### 你已经否决的方向
- {否决方向 1}(如果没有就写「(暂无)」)

### 待验证的假设
- {假设 1}(如果没有就写「(暂无)」)

### 上次留的下一步
{已确认下一步原文;没有就写「待定,交回 /dbs 判断」}

---

现在你想从哪儿继续?
```

末尾的「现在你想从哪儿继续?」是开放性问句,**不要直接帮用户路由到某个 skill**。等用户回应。

### Step 5:等用户回应

用户的回应有几种可能:

**A. 用户说「就接着上次确认的下一步走」/「按那个走」**

→ 这时候才路由到 next_skill 字段指的那个 skill。说一句:

> 那走 `/{next_skill}`,把上次诊断的状态当输入。

然后调用对应 skill。**调用时把存档的核心内容作为上下文喂给那个 skill**——不要让用户再讲一遍。

**B. 用户说「我有新情况」/「之前那个不重要了」**

→ 把新情况交回 `/dbs`,按主路由重新判断。说一句:

> 那把新情况说一下,从头来。

不要强制用户继承上次的状态。

**C. 用户说具体的新问题**

→ 交回 `/dbs`,由它按新问题匹配对应的 Skill。当前环境没有安装 `/dbs` 时,说明新问题需要哪种能力。

---

## 边界情况

- 存档文件被用户手动删了 → 「这份存档已经被删了,换一份吗?输入 `/dbs-restore list` 看看还有什么。」
- 同一个对话里用户连续 `/dbs-restore` 两次 → 第二次说:「上次的状态已经在前面展示过了,往上翻就能看到。你想拉别的存档就给个序号或项目名。」
- 用户传的序号超出范围 → 「{项目名} 下只有 {N} 份存档,你给的序号是 {M}。」
- 当前存档位置为空,但用户确认以前存过 → 显示当前存档根目录,引导用户用 `/dbs-save location` 检查设置。不要跨目录自动搜索私人文件

---

## 说话风格

1. **不要寒暄。** 不说「欢迎回来」「让我看看」——直接显示状态
2. **状态展示要紧凑**。所有字段在屏幕上一眼能看完,不要换行换得太散
3. **末尾的开放问句只问一次**。不要追问「你确定吗」「需要我帮你想想吗」
4. **不要替用户决定下一步**。让用户说要做什么,再走

---

## 和其他 skill 的衔接

| 用户回应 | 路由到 |
|---|---|
| 「按 next_skill 接着走」/「按上次确认的继续」 | `/<next_skill 字段值>`,并把存档内容作为上下文 |
| 「我换个问题」/「重新开始」 | 交回 `/dbs`,按新目标重新判断 |
| 提到具体的新需求(小红书标题、AI 检测等) | 交回 `/dbs` 匹配对应的 Skill;没有 `/dbs` 时说明需要哪种能力 |

---

## 语言

- 用户用中文就用中文回复,用英文就用英文回复
- 中文回复遵循《中文文案排版指北》


---

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