增强作者档案
此技能通过网络研究填补作者档案中缺失的字段(个人简介、头像、网站、社交账号)。
工作流程概览
阶段 1:作者识别
└─ 查找并验证作者文件
阶段 2:并行研究(仅针对缺失字段)
├─ WebSearch 代理 1:个人简介/背景
├─ WebSearch 代理 2:头像 URL
└─ WebSearch 代理 3:网站 + 社交账号
阶段 3:用户审查(审批关卡)
└─ 展示结果,等待批准
阶段 4:保存增强的作者信息
└─ 更新 frontmatter 字段
阶段 5:质量检查
└─ 运行 pnpm lint:fix && pnpm typecheck
阶段 1:作者识别
1.1 查找作者文件
接受作者 slug、名称或部分名称作为参数:
- 首先尝试精确 slug 匹配:检查
content/authors/{slug}.md是否存在(将空格转换为连字符,小写) - 如果没有精确匹配:使用 Grep 在作者文件中搜索名称:
Grep 模式:"name:.*{搜索词}" 使用 glob:"content/authors/*.md"
结果:
- 单个匹配 → 使用该文件
- 多个匹配 → 列出选项供用户选择
- 无匹配 → 列出可用的作者
1.2 识别缺失字段
读取作者文件,检查哪些字段缺失或为空:
必填字段(始终存在):
nameslug
可选增强字段:
bio- 专业背景和专长avatar- 头像 URLwebsite- 个人网站 URLsocials.twitter- Twitter/X 帐号socials.github- GitHub 用户名socials.linkedin- LinkedIn 用户名socials.youtube- YouTube 频道
字段“缺失”的条件:
- 在 frontmatter 中不存在
- 存在但为空(
""或null)
如果所有字段都已填充,通知用户并提供更新特定字段的选项。
阶段 2:并行研究
根据缺失的字段,同时启动最多 3 个 WebSearch 代理:
**代理 1 - 个人简介/背景:**
Task 工具,subagent_type:"general-purpose"
prompt:"使用 WebSearch 查找 [作者姓名] 的专业背景信息。
查询:'[作者姓名]' bio background expertise
提取:职位、公司、专业领域、著名项目。
返回:1-2 句专业个人简介。"
**代理 2 - 头像 URL:**
Task 工具,subagent_type:"general-purpose"
prompt:"使用 WebSearch 查找 [作者姓名] 的头像 URL。
查询:'[作者姓名]' site:github.com OR site:twitter.com
提取:GitHub 用户名或 Twitter 帐号以构建头像 URL。
返回:头像 URL(优先使用 GitHub 格式:https://github.com/{username}.png)"
**代理 3 - 网站与社交账号:**
Task 工具,subagent_type:"general-purpose"
prompt:"使用 WebSearch 查找 [作者姓名] 的社交媒体资料。
查询:'[作者姓名]' twitter github linkedin youtube
提取:个人网站、Twitter 帐号、GitHub 用户名、LinkedIn 资料、YouTube 频道。
返回:找到的帐号列表及其 URL/帐号名。"
仅启动缺失字段对应的代理。如果个人简介已存在,则跳过代理 1。
通过 TaskOutput(阻塞)收集所有结果。
阶段 3:用户审查(审批关卡)
这是一个强制性的批准步骤。 在保存前展示建议的更改。
3.1 展示更改
以对比表格形式展示建议的更新:
## [作者姓名] 的建议更新
| 字段 | 当前值 | 建议值 |
|------|--------|--------|
| bio | (空) | "X 创始人,Y 创造者..." |
| avatar | (空) | "https://github.com/username.png" |
| website | (空) | "https://example.com" |
| socials.twitter | (空) | "username" |
| socials.github | (空) | "username" |
| socials.linkedin | (空) | "username" |
| socials.youtube | (空) | (未找到) |
3.2 请求批准
使用 AskUserQuestion 工具:
question: "是否将这些更改保存到作者档案?"
header: "审查"
multiSelect: false
options:
- label: "保存"
description: "用这些值更新作者文件"
- label: "编辑"
description: "告诉我需要修改的内容"
- label: "取消"
description: "不修改文件"
3.3 处理响应
- 保存:进入阶段 4
- 编辑:应用用户反馈,显示更新后的预览
- 取消:退出而不更改
未经用户明确批准,不得进入阶段 4。
阶段 4:保存增强的作者信息
4.1 更新 Frontmatter
使用编辑工具仅更新已批准的字段:
修改前:
---
name: "John Doe"
slug: "john-doe"
bio: ""
avatar: ""
website: ""
socials:
twitter: ""
github: ""
linkedin: ""
youtube: ""
---
修改后:
---
name: "John Doe"
slug: "john-doe"
bio: "专注于分布式系统的软件工程师..."
avatar: "https://github.com/johndoe.png"
website: "https://johndoe.dev"
socials:
twitter: "johndoe"
github: "johndoe"
linkedin: "johndoe"
youtube: ""
---
4.2 保留现有值
关键: 除非用户明确要求,否则不要覆盖现有的非空值:
- 保持现有的
name和slug不变 - 仅更新为空/缺失的字段
- 保留任何额外的自定义字段
4.3 确认
向用户报告:
已更新:content/authors/{slug}.md
- bio:已添加
- avatar:已添加
- website:已添加
- socials.twitter:已添加
- socials.github:已添加
阶段 5:质量检查
运行 linter 和类型检查以捕获潜在问题:
pnpm lint:fix && pnpm typecheck
如果发现错误,在完成任务前修复它们。
错误恢复
| 错误 | 恢复措施 |
|---|---|
| 未找到作者 | 列出 content/authors/ 中的可用作者 |
| 没有缺失字段 | 告知用户,提供更新特定字段的选项 |
| WebSearch 失败 | 尝试其他查询模式 |
| 用户拒绝更改 | 允许编辑或取消 |
| 找不到信息 | 将字段标记为“(未找到)”,继续处理其他字段 |
质量检查清单
在保存前,确认:
- 作者文件存在于
content/authors/中 - 仅更新空/缺失的字段
- 个人简介为 1-2 句,专业语气
- 头像 URL 有效(优先使用 GitHub 格式)
- 社交帐号仅为用户名(不含完整 URL)
- 保留现有的非空值
- 用户已明确批准更改