用途
本技能用于导入对话上下文:读取保存在 .dev/contexts/ 目录中的过去对话上下文,用于继续开发或评审。当用户提出“读取上下文”“导入对话上下文”“读取 .dev 的上下文”等请求时使用。
主要能力
- 获取当前 Git 分支名,并将其转换为可用作文件名的“已净化分支名”。
- 根据 git worktree 的情况决定读取来源目录(主工作树或链接工作树)。
- 检查目标目录中是否存在与当前分支同名的文件,以及其他文件。
- 根据文件存在情况决定读取对象,必要时通过提问让用户选择。
- 读取文件并向用户报告读取了哪些文件。
使用方式
1. 获取分支名
使用 Bash 工具执行:
git branch --show-current
分支名净化:将以下字符替换为 -:
/ \ : * ? " < > |
例如:dependabot/npm_and_yarn/feed-5.2.0 → dependabot-npm_and_yarn-feed-5.2.0
后续步骤中,净化后的分支名称为“已净化分支名”。
决定读取来源目录
根据 git worktree 的情况决定读取来源。使用 Bash 工具执行 git worktree list,判断当前工作树是主工作树(仓库本体的工作树)还是链接的工作树。若在 worktree 中作业,还需掌握主工作树的路径。
- 在主工作树中作业时:读取来源目录为
.dev/contexts/。 - 在 worktree 中作业时:确认主工作树与 worktree 本地的两处
.dev/contexts/中是否存在当前分支用文件({已净化分支名}.md),据此决定读取来源目录:- 两处都存在:提示两处的完整路径,使用 AskUserQuestion 工具让用户选择读取哪一处。以所选一侧的
.dev/contexts/作为读取来源目录。 - 仅一处存在:以该处的
.dev/contexts/作为读取来源目录。 - 两处都不存在:以主工作树的
.dev/contexts/作为读取来源目录。
- 两处都存在:提示两处的完整路径,使用 AskUserQuestion 工具让用户选择读取哪一处。以所选一侧的
后续步骤中,将决定好的路径称为“读取来源目录”。
2. 确认文件是否存在
确认读取来源目录内的文件。使用 Glob 工具搜索 {读取来源目录}/*.md,掌握以下情况:
- 是否存在与当前分支同名的文件(
{读取来源目录}/{已净化分支名}.md) - 是否存在其他文件
3. 决定读取对象
根据文件存在情况分别处理:
- 仅存在当前分支的文件:不提问,直接读取该文件。
- 仅存在其他文件(没有当前分支的文件):不提问,读取全部文件。
- 两者都存在:使用 AskUserQuestion 工具提供以下选项:
- 仅读取当前分支的上下文:仅
{读取来源目录}/{已净化分支名}.md - 读取全部上下文:读取来源目录内的全部文件(列出文件名并提示)
- 仅读取当前分支的上下文:仅
- 一个文件都不存在:报告在读取来源目录中未找到上下文文件并结束。
4. 读取与报告
使用 Read 工具读取目标文件。读取完成后,向用户报告读取了哪些文件:
已读取以下对话上下文:
- `{读取来源目录}/feature-a.md`
- `{读取来源目录}/feature-b.md`
适用场景
- 在开发告一段落后,需要恢复之前的对话上下文以继续开发。
- 需要基于过去保存的上下文进行代码评审。
- 在 git worktree 环境中,需要区分主工作树与 worktree 本地的上下文文件。
限制
- 依赖
.dev/contexts/目录及其中保存的上下文文件;若文件不存在则无法导入。 - 分支名中的特定字符会被替换为
-,因此不同分支名净化后可能产生同名文件。 - 在 worktree 中两处均存在同名文件时,需要用户手动选择读取来源。
相关技能
- conversation-context-export:将当前对话上下文写入
.dev/contexts/的技能。用于在开发告一段落时保存上下文。