增強作者個人檔案
此技能透過網路研究,填補作者個人檔案中缺失的欄位(自我介紹、頭像、網站、社交媒體)。
工作流程概覽
階段 1:作者識別
└─ 尋找並驗證作者檔案
階段 2:並行研究(僅針對缺失欄位)
├─ WebSearch 代理 1:自我介紹/背景
├─ WebSearch 代理 2:頭像網址
└─ 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- 個人頭像網址website- 個人網站網址socials.twitter- Twitter/X 帳號socials.github- GitHub 使用者名稱socials.linkedin- LinkedIn 使用者名稱socials.youtube- YouTube 頻道
若「缺少」某欄位,表示:
- 該欄位不存在於 frontmatter 中
- 該欄位存在但為空(
""或null)
若所有欄位均已填寫,則通知使用者,並提供更新特定欄位的選項。
階段 2:並行研究
根據缺少的欄位,最多同時啟用 3 個 WebSearch 代理:
**代理 1 - 自我介紹/背景:**
使用 subagent_type:「general-purpose」的工具
提示詞:「使用 WebSearch 尋找 [作者名稱] 的專業背景資訊。
查詢:'[作者名稱]' bio background expertise
提取:職稱、公司、專長領域、知名專案。
回傳:一段 1-2 句的專業自我介紹。」
**代理 2 - 頭像網址:**
使用 subagent_type:「general-purpose」的工具
提示詞:「使用 WebSearch 尋找 [作者名稱] 的個人頭像網址。
查詢:'[作者名稱]' site:github.com OR site:twitter.com
提取:GitHub 使用者名稱或 Twitter 帳號,用以建構頭像網址。
回傳:頭像網址(優先使用 GitHub 格式:https://github.com/{使用者名稱}.png)」
**代理 3 - 網站與社交媒體:**
使用 subagent_type:「general-purpose」的工具
提示詞:「使用 WebSearch 尋找 [作者名稱] 的社交媒體個人檔案。
查詢:'[作者名稱]' twitter github linkedin youtube
提取:個人網站、Twitter 帳號、GitHub 使用者名稱、LinkedIn 個人檔案、YouTube 頻道。
回傳:找到的個人檔案清單,包含網址/帳號。」
僅針對缺失的欄位啟用代理。若自我介紹已存在,則跳過代理 1。
透過 TaskOutput(阻塞)收集所有結果。
階段 3:使用者審查(阻斷閘門)
這是強制性的批准步驟。 在儲存前呈現建議的變更。
3.1 呈現變更
以比較表格顯示建議的更新:
## [作者名稱] 的建議更新
| 欄位 | 目前 | 建議 |
|-------|---------|----------|
| bio | (空) | "X 的創辦人,Y 的創造者..." |
| avatar | (空) | "https://github.com/使用者名稱.png" |
| website | (空) | "https://example.com" |
| socials.twitter | (空) | "使用者名稱" |
| socials.github | (空) | "使用者名稱" |
| socials.linkedin | (空) | "使用者名稱" |
| 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 句,語氣專業
- 頭像網址有效(優先使用 GitHub 格式)
- 社交帳號僅為使用者名稱(不含網址)
- 已保留現有非空值
- 使用者已明確批准變更