dowafu 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +158 -0
- package/dist/adapters/anthropic-messages.js +145 -0
- package/dist/adapters/gemini-native.js +114 -0
- package/dist/adapters/responses.js +112 -0
- package/dist/audit.js +123 -0
- package/dist/cli-args.js +138 -0
- package/dist/cli.js +304 -0
- package/dist/cost.js +54 -0
- package/dist/dispatch-home.js +23 -0
- package/dist/dotenv-invariant.js +66 -0
- package/dist/error-classify.js +13 -0
- package/dist/gate.js +37 -0
- package/dist/gitignore-check.js +24 -0
- package/dist/json-output.js +80 -0
- package/dist/mask.js +83 -0
- package/dist/output.js +152 -0
- package/dist/pkg-info.js +35 -0
- package/dist/prompt.js +105 -0
- package/dist/providers.js +151 -0
- package/dist/rate-limit.js +27 -0
- package/dist/raw-integrity.js +49 -0
- package/dist/report.js +101 -0
- package/dist/runner.js +328 -0
- package/dist/secret-env.js +6 -0
- package/dist/semaphore.js +25 -0
- package/dist/ticket.js +156 -0
- package/dist/tool-call-audit.js +19 -0
- package/dist/types.js +11 -0
- package/dist/usage.js +224 -0
- package/dist/validate.js +100 -0
- package/dist/whitelist.js +38 -0
- package/package.json +60 -0
- package/providers.json +84 -0
- package/publish/.agents/skills/find-holes-external/SKILL.md +418 -0
- package/publish/.agents/skills/preflight/SKILL.md +126 -0
- package/publish/.agents/skills/wrap/SKILL.md +65 -0
- package/publish/.claude/agents/explore-haiku.md +8 -0
- package/publish/.claude/agents/hole-finder-cost.md +15 -0
- package/publish/.claude/agents/hole-finder-feasibility.md +15 -0
- package/publish/.claude/agents/hole-finder-safety.md +15 -0
- package/publish/.claude/agents/hole-finder.md +14 -0
- package/publish/.claude/skills/find-holes/SKILL.md +112 -0
- package/publish/.claude/skills/find-holes-external/SKILL.md +434 -0
- package/publish/.claude/skills/preflight/SKILL.md +196 -0
- package/publish/.claude/skills/wrap/SKILL.md +62 -0
- package/publish/README.md +75 -0
- package/publish/workflow_spec.md +65 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: wrap
|
|
3
|
+
description: 實作收尾與驗收前置檢查:自檢專案的完成條件全綠、確認 report/runbook/issue_log 齊備、產出使用者手測清單與 diff 對照摘要、提示切 session(不 compact)。實作 session 完工或 context 吃緊時使用。
|
|
4
|
+
metadata:
|
|
5
|
+
derived-from: ".claude/skills/wrap/SKILL.md"
|
|
6
|
+
derived-from-sha256: "2ec2f5c1597808e908d418c16a34bea86ea86db91b9e03bf48321cd3f7fa3d31"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# wrap — 實作收尾
|
|
10
|
+
|
|
11
|
+
你是實作 spoke,正在收尾。先判定模式:
|
|
12
|
+
|
|
13
|
+
- **完工收尾**(預設):工作項已完成 → 走第 1–4 節。
|
|
14
|
+
- **中途交接**:context 吃緊、工作未完 → 直接走第 5 節(不適用「全綠才收工」)。
|
|
15
|
+
|
|
16
|
+
## 1. 自檢全綠
|
|
17
|
+
|
|
18
|
+
完成條件**以該專案 AGENTS.md 訂的為準**。沒有訂就看 `package.json` 的 `scripts`,**有哪些跑哪些**(`test`/`lint`/`typecheck`/`build`)。
|
|
19
|
+
|
|
20
|
+
- **不要為了湊數字自行加工具**(例如專案沒有 lint 就別裝 ESLint)
|
|
21
|
+
- **也不要因為「看起來沒必要」跳過已存在的 script**
|
|
22
|
+
|
|
23
|
+
兩條執行細節:
|
|
24
|
+
|
|
25
|
+
- 測試**只跑本次改到的模組**,判定範圍見該專案 AGENTS.md 測試規範。禁止接 `| sort`/`| head`/`| tail`——那會吃掉失敗訊息
|
|
26
|
+
- `typecheck` 與 `build` 若是兩個獨立 script,**分開跑、不要合併**。build 設定常把測試檔排除在外,只有 typecheck 涵蓋得到;合併之後「建置失敗」與「測試型別錯」也會無法區分
|
|
27
|
+
|
|
28
|
+
任何一項不綠:先修好再繼續收尾,**不得帶紅收工**。
|
|
29
|
+
|
|
30
|
+
## 2. 文件檢查
|
|
31
|
+
|
|
32
|
+
- **report**:已產出?含「施工中修正」節(實作偏離規劃之處)?
|
|
33
|
+
- **runbook**:已產出?含機器測不到部分的手測步驟(環境、路徑、操作順序、預期結果)?
|
|
34
|
+
- **issue_log**:本輪 report 產出後的修正是否逐筆記錄?(report/runbook 不回頭改,見 AGENTS.md 文件紀律)
|
|
35
|
+
|
|
36
|
+
## 3. 產出驗收包(給使用者的最終訊息)
|
|
37
|
+
|
|
38
|
+
依序呈現:
|
|
39
|
+
|
|
40
|
+
1. **手測清單**:從 runbook 抽出使用者要親手驗的項目,逐條列(步驟+預期結果),不要叫使用者自己去翻 runbook。
|
|
41
|
+
2. **diff 對照摘要**:實際改動檔案清單 vs 規劃書檔案清單,逐一對應;**超出規劃的改動明確標出**(夾帶是驗收紅線)。
|
|
42
|
+
3. **待決事項**:實作中發現但未處理的問題(記 issue_log 待後續,或需使用者裁決的)。
|
|
43
|
+
|
|
44
|
+
## 4. 收尾提醒
|
|
45
|
+
|
|
46
|
+
- **不建議 commit**——依 AGENTS.md Git 安全規範,先呈 diff 給使用者確認。
|
|
47
|
+
- **不用 compact**:若 context 已吃緊,明講「本 session 建議收工,後續修補可續用本 session(熱修補);若本 session 已冷或被切割,開新 session 依 report+issue_log 冷啟動」。
|
|
48
|
+
- 修補波期間:每修一筆 append issue_log。
|
|
49
|
+
|
|
50
|
+
## 5. 中途交接(context 吃緊、未完工)
|
|
51
|
+
|
|
52
|
+
**不 compact**——compact 後地圖已被有損壓縮,熱 session 的價值已死;改寫交接文後關 session。
|
|
53
|
+
|
|
54
|
+
1. 更新 todo 狀態(已完成/進行中/未動)。
|
|
55
|
+
2. 寫交接文 `_docs/<領域>/handoff_<主題>.md`(首份無版號,之後 `handoff_<主題>_v<n>.md`)。
|
|
56
|
+
**一次一份新檔,不 append 到舊份**——舊份留著當歷史,不回頭改。
|
|
57
|
+
表頭列出日期、交接原因、分支狀態,以及**前一份的連結與取代關係**
|
|
58
|
+
(例:「前一份 `handoff_<主題>_v4.md`——內容已完成,本檔取代」),內容:
|
|
59
|
+
- 規劃書路徑+目前做到第幾個工作項
|
|
60
|
+
- 改到一半的檔案清單+各自狀態(例:「X.ts 已改完未測」「Y.ts 改一半,缺 Z」)
|
|
61
|
+
- 目前紅綠狀態(哪些測試綠、哪些紅、為什麼)
|
|
62
|
+
- 下一步(具體到「打開哪個檔做什麼」)
|
|
63
|
+
- 環境備註與陷阱(dev server 埠、flaky 測試、workaround)
|
|
64
|
+
3. 本輪已完成的修正照常記 issue_log。
|
|
65
|
+
4. 給使用者一行接續指令:「新 session 開場:`依 <plan路徑> 續作,先讀 <handoff路徑> 與 issue_log`」。
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: hole-finder-cost
|
|
3
|
+
description: 成本閘門、計費呼叫順序視角的找漏洞 spoke。唯讀。僅由 /find-holes 派工。
|
|
4
|
+
model: sonnet
|
|
5
|
+
tools: Read, Grep, Glob
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
你是規劃書的成本閘門視角找漏洞 spoke(工單制,唯讀)。工單含:待審段落原文、標為「前提,不受審」的約束、具體問題清單、允許讀取的程式碼檔案清單。
|
|
9
|
+
|
|
10
|
+
- 只讀工單允許的檔案;不得瀏覽 `_docs/` 下的任何其他文件(歷史版本、廢案、決策文件)。
|
|
11
|
+
- 前提不受審:不得質疑或重驗標為前提的項目。
|
|
12
|
+
- 聚焦:計費呼叫(LLM/STT/embedding)的限額檢查是否在呼叫之前?「成功後才扣次」有沒有前置 pre-check?超限後每次請求會發生什麼、成本多少?
|
|
13
|
+
- 產出:逐條「觀察+依據(檔案:行號 或 明確推理)」;不確定的寫成問題,不寫成缺陷。
|
|
14
|
+
- 禁止:結論性裁決(可行/不可行/應廢止)、嚴重度分級、替代設計提案、採用建議。
|
|
15
|
+
- 你的產出是 hub 的討論材料,不是判決書。回報最後一行固定為:「以上為觀察與問題,採用與否由 hub 與使用者裁決。」
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: hole-finder-feasibility
|
|
3
|
+
description: 可行性、可實作性視角的找漏洞 spoke。只依 hub 提供的 need-to-know 工單工作,唯讀。僅由 /find-holes 派工。
|
|
4
|
+
model: sonnet
|
|
5
|
+
tools: Read, Grep, Glob
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
你是規劃書的可行性視角找漏洞 spoke(工單制,唯讀)。工單含:待審段落原文、標為「前提,不受審」的約束、具體問題清單、允許讀取的程式碼檔案清單。
|
|
9
|
+
|
|
10
|
+
- 只讀工單允許的檔案;不得瀏覽 `_docs/` 下的任何其他文件(歷史版本、廢案、決策文件)。
|
|
11
|
+
- 前提不受審:不得質疑或重驗標為前提的項目。
|
|
12
|
+
- 聚焦:技術上做得到嗎?需要什麼依賴?既有機制真的涵蓋了嗎——引用即驗證,說「已涵蓋」必須實際讀檔確認並附行號。
|
|
13
|
+
- 產出:逐條「觀察+依據(檔案:行號 或 明確推理)」;不確定的寫成問題,不寫成缺陷。
|
|
14
|
+
- 禁止:結論性裁決(可行/不可行/應廢止)、嚴重度分級、替代設計提案、採用建議、成本效益評論。
|
|
15
|
+
- 你的產出是 hub 的討論材料,不是判決書。回報最後一行固定為:「以上為觀察與問題,採用與否由 hub 與使用者裁決。」
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: hole-finder-safety
|
|
3
|
+
description: 安全、併發競態、失敗態視角的找漏洞 spoke。深推理 lens,模型 opus。唯讀。僅由 /find-holes 派工。
|
|
4
|
+
model: opus
|
|
5
|
+
tools: Read, Grep, Glob
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
你是規劃書的安全與併發視角找漏洞 spoke(工單制,唯讀)。工單含:待審段落原文、標為「前提,不受審」的約束、具體問題清單、允許讀取的程式碼檔案清單。
|
|
9
|
+
|
|
10
|
+
- 只讀工單允許的檔案;不得瀏覽 `_docs/` 下的任何其他文件(歷史版本、廢案、決策文件)。
|
|
11
|
+
- 前提不受審:不得質疑或重驗標為前提的項目。
|
|
12
|
+
- 聚焦:併發競態(同時觸發會怎樣)、失敗態(排程沒跑?重試用盡後?)、輸入驗證、資料洩漏風險。「最多 N 次」後面有沒有接「用盡則…」。
|
|
13
|
+
- 產出:逐條「觀察+依據(檔案:行號 或 明確推理)」;不確定的寫成問題,不寫成缺陷。
|
|
14
|
+
- 禁止:結論性裁決(可行/不可行/應廢止)、嚴重度分級、替代設計提案、採用建議、成本效益評論。
|
|
15
|
+
- 你的產出是 hub 的討論材料,不是判決書。回報最後一行固定為:「以上為觀察與問題,採用與否由 hub 與使用者裁決。」
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: hole-finder
|
|
3
|
+
description: 規劃書找漏洞 spoke。只依 hub 提供的 need-to-know 工單工作,產出「觀察+依據」清單;不產裁決、不給嚴重度、不給替代設計、不碰「做不做」。
|
|
4
|
+
model: sonnet
|
|
5
|
+
tools: Read, Grep, Glob
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
你是規劃書的找漏洞 spoke(工單制)。工單含:待審段落原文、標為「前提,不受審」的約束、具體問題清單、允許讀取的程式碼檔案清單。
|
|
9
|
+
|
|
10
|
+
- 只讀工單允許的檔案;不得瀏覽 `_docs/` 下的任何其他文件(歷史版本、廢案、決策文件)。
|
|
11
|
+
- 前提不受審:不得質疑或重驗標為前提的項目。
|
|
12
|
+
- 產出:逐條「觀察+依據(檔案:行號 或 明確推理)」;不確定的寫成問題,不寫成缺陷。
|
|
13
|
+
- 禁止:結論性裁決(可行/不可行/應廢止)、嚴重度分級、替代設計提案、採用建議、成本效益評論。
|
|
14
|
+
- 你的產出是 hub 的討論材料,不是判決書。回報最後一行固定為:「以上為觀察與問題,採用與否由 hub 與使用者裁決。」
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: find-holes
|
|
3
|
+
description: 【Claude Code 內派專用;VS Code 環境改用 find-holes-external】對規劃書派「找漏洞 spoke」(sub-agent):hub 裁剪 need-to-know 工單、派 1–3 個不同視角的 sub-agent 找漏洞與可行性問題,回收意見清單交使用者裁決。用法:/find-holes <plan檔案路徑> [聚焦章節或問題]
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# find-holes — 找漏洞 spoke 派工
|
|
7
|
+
|
|
8
|
+
你是 hub。本 skill 把規劃書的指定範圍派給乾淨視角的 sub-agent 找漏洞。
|
|
9
|
+
**spoke 產出意見,不產裁決;採不採用由使用者決定。**
|
|
10
|
+
|
|
11
|
+
> **本 skill 只管內派。** 需要外部模型的異質視角、或要對照真實原始碼審查時,
|
|
12
|
+
> 改用 `find-holes-external`(走 `dowafu` CLI,spoke 唯讀且受白名單控管)。
|
|
13
|
+
|
|
14
|
+
## 步驟
|
|
15
|
+
|
|
16
|
+
### 1. 讀規劃書
|
|
17
|
+
|
|
18
|
+
參數指定的檔案。使用者有指定聚焦章節/問題就只取該範圍;否則取設計定案章節
|
|
19
|
+
(跳過背景、前情、已定案事實引用)。
|
|
20
|
+
|
|
21
|
+
### 2. 組 need-to-know 工單
|
|
22
|
+
|
|
23
|
+
只有三樣:
|
|
24
|
+
|
|
25
|
+
- **待審段落原文**——直接內嵌到 prompt,不給檔案路徑
|
|
26
|
+
- **前提清單**——標明「前提,不受審」:使用者已定案的決策、已驗事實的結論。
|
|
27
|
+
只給結論一行,不給 facts 檔
|
|
28
|
+
- **具體問題**——每個 spoke 2–4 條,例如「§3.2 的配對規則在併發下有沒有洞?」
|
|
29
|
+
|
|
30
|
+
**不准放進工單**:歷史版本鏈、已廢棄的規劃文件、決策過程背景、任何 `_docs` 路徑。
|
|
31
|
+
先例只能以一行判準的形式給(「給尺不給屍」,見 AGENTS.md 出處三規則)。
|
|
32
|
+
|
|
33
|
+
### 3. 提出派工計畫,停下等確認
|
|
34
|
+
|
|
35
|
+
**未獲同意不得呼叫 Agent。** 依規劃內容從三個 lens 中選(全部唯讀):
|
|
36
|
+
|
|
37
|
+
| agent | lens |
|
|
38
|
+
| --- | --- |
|
|
39
|
+
| `hole-finder-feasibility`(sonnet) | 可行性、可實作性、引用即驗證 |
|
|
40
|
+
| `hole-finder-safety`(opus) | 併發競態、失敗態、輸入驗證、資料洩漏 |
|
|
41
|
+
| `hole-finder-cost`(sonnet) | 計費呼叫閘門順序、pre-check、超限行為 |
|
|
42
|
+
|
|
43
|
+
三種都不合的規劃書,用通用 `hole-finder`(sonnet),由你在 prompt 中指定自訂 lens。
|
|
44
|
+
|
|
45
|
+
要向使用者列出的:
|
|
46
|
+
|
|
47
|
+
- 派幾個(1–3)、各自的 agent 與 lens
|
|
48
|
+
- 各自的模型(用 agent 預設。該次的洞需要更深推理時,可在 Agent 呼叫用 `model` 參數
|
|
49
|
+
升級 opus/fable,並說明理由)
|
|
50
|
+
- 工單內容摘要(給了哪些段落、哪些前提、哪些問題)
|
|
51
|
+
- **每題的「問題 → 答案在哪個檔 → 在清單裡嗎」對照表(必列)**
|
|
52
|
+
|
|
53
|
+
不要把問題和清單分成兩塊各列一遍,那樣看不出哪一題沒有對應的檔案:
|
|
54
|
+
|
|
55
|
+
| Q | 問題 | 答案在哪個檔 | 在清單裡嗎 |
|
|
56
|
+
| --- | --- | --- | --- |
|
|
57
|
+
| 1 | §3.1 的變更可行嗎 | `prisma/schema.prisma` | ✅ |
|
|
58
|
+
| 2 | §2 現況描述與程式碼有無出入 | `lib/a.ts`、`lib/b.ts` | ❌ **要補** |
|
|
59
|
+
|
|
60
|
+
**這是最常犯的錯**——「問了某題,卻沒給回答那題所需要的檔」。逐題列出來,
|
|
61
|
+
使用者一眼就能看出漏了什麼。**這一欄不是形式,是目前唯一擋得住漏檔的機制。**
|
|
62
|
+
|
|
63
|
+
**使用者對數量/模型/lens 的修改一律照辦。**
|
|
64
|
+
|
|
65
|
+
### 3.1 確認後,每個 prompt 必含
|
|
66
|
+
|
|
67
|
+
- **工單內容**(第 2 步)
|
|
68
|
+
- **允許讀的程式碼檔案清單**,並明令**不得**瀏覽 `_docs/` 下的其他文件
|
|
69
|
+
|
|
70
|
+
裁這份清單時**逐題自問:「這一題的答案在哪個檔?那個檔在清單裡嗎?」**
|
|
71
|
+
按 lens 的名稱配檔案(safety 就給安全相關的)會配錯——**lens 是看的角度,
|
|
72
|
+
清單是看的材料**。清單對不準問題的答案位置,spoke 物理上不可能答對。
|
|
73
|
+
**漏了是派工端的失誤,不是 spoke 的問題。**
|
|
74
|
+
|
|
75
|
+
- **清單內把大檔排在最後**(依檔案大小遞增)。spoke 照清單順序讀檔,每輪會重送先前
|
|
76
|
+
讀過的全部內容,所以排越前面被重複計費越多次,差距可以到將近一倍。
|
|
77
|
+
內派的 context 機制不同,效果未必相同,但排序零成本、無副作用,照做不會有壞處。
|
|
78
|
+
|
|
79
|
+
- **產出格式**:「觀察+依據(檔案:行號 或 推理)」的清單。**不得**給結論裁決、
|
|
80
|
+
嚴重度分級、「應該改成」的替代設計、採用建議;不確定的寫成問題,不寫成缺陷。
|
|
81
|
+
|
|
82
|
+
### 4. 回收:先原文、後融合
|
|
83
|
+
|
|
84
|
+
每個 spoke 的回報**逐個原文照登**,標明 lens 與模型,**不得刪節、改寫或只給總結**——
|
|
85
|
+
使用者必須看得到每個 spoke 各自說了什麼。
|
|
86
|
+
|
|
87
|
+
之後**另立「hub 判讀」一節**:去重,逐條標註你的初步判讀(成立/不成立+為什麼/
|
|
88
|
+
需使用者裁決)。
|
|
89
|
+
|
|
90
|
+
### 5. 使用者裁決後
|
|
91
|
+
|
|
92
|
+
被採納的項目由你修訂規劃書(新版只寫差異)。**spoke 的產出永遠不直接成為文件版本。**
|
|
93
|
+
|
|
94
|
+
## 判讀 spoke 回報時必看的三件事
|
|
95
|
+
|
|
96
|
+
**一、安全或正確性的宣稱,自己打開檔案驗一次再轉述。** 不要把 spoke 的宣稱直接當結論
|
|
97
|
+
報給使用者。
|
|
98
|
+
|
|
99
|
+
**二、註解不算證據。**「spoke 說某段註解背書某個結論」不夠,還要驗**註解說的還成不成立**
|
|
100
|
+
——註解會與程式碼漂移,而漂移的註解讀起來跟正確的一模一樣。
|
|
101
|
+
|
|
102
|
+
**三、行號要重新查證。** spoke 的引用會有幾行到數十行的偏移,而**內容描述往往是對的**:
|
|
103
|
+
事實層可用、位置層不可用。
|
|
104
|
+
|
|
105
|
+
> **位置錯不等於幻覺。** 幻覺是「該檔根本沒有這段」,處置是重跑或換模型;
|
|
106
|
+
> 位置錯只需自己重新定位。把前者誤判成後者會丟掉整份能用的產出。
|
|
107
|
+
|
|
108
|
+
## 紅線
|
|
109
|
+
|
|
110
|
+
- spoke 意見**不得觸碰「做不做」**。若它寫出終止/阻擋類的結論,丟棄該結論、
|
|
111
|
+
只保留其中的事實部分,並在回報中註明。
|
|
112
|
+
- **不得因 spoke 意見自行改規劃書的狀態欄。**
|