feat: AI Pull Request action — opencode 自動產生 PR 並通過 AI review #2
@@ -82,5 +82,35 @@
|
||||
"role": "Rogue",
|
||||
"original_finding": "頻繁寫入讀取 opencode.json 設定檔造成無謂的 I/O;建議透過參數或環境變數傳入配置。",
|
||||
"reason": "summarize 每次 action 執行僅呼叫一次,並非「頻繁」;opencode 以 OPENCODE_CONFIG 指向設定檔為其官方配置介面,寫入單一小檔的 I/O 可忽略。"
|
||||
},
|
||||
{
|
||||
"location": "app/index.js:80",
|
||||
"role": "Bard",
|
||||
"original_finding": "分支命名格式若目標分支名稱過長,可能導致總長度超過 Git 限制;建議確保不超過 255 字元。",
|
||||
"reason": "buildResolveBranchName 已將主體截斷至 MAX_BRANCH_STEM_LENGTH(180),連同前綴 `resolve-conflict/`(17)與 runId 後綴,總長度約 207,遠低於 Git 的 255 上限,已滿足建議。"
|
||||
},
|
||||
{
|
||||
"location": "app/index.js:52",
|
||||
"role": "Mage",
|
||||
"original_finding": "opencode 失敗時,若相關資訊皆為空,fallback 機制產出的 PR 描述將空洞無效;建議檢查輸出內容或拋錯。",
|
||||
"reason": "fallbackSummary 的 title 在無 commit 時退回 `Merge <source> into <target>`,description 恆包含固定結構標題(## 變更摘要、### Commits、### 變更檔案)與 `(無)` 佔位,不會產生空字串;PR 仍具基本可讀內容,非缺陷。"
|
||||
},
|
||||
{
|
||||
"location": "app/lib/util.js:11, 13",
|
||||
"role": "Bard",
|
||||
"original_finding": "run 函式 Buffer 大小硬編碼,缺乏靈活性,且針對極端巨大輸入缺乏保護。",
|
||||
"reason": "maxBuffer(64MB)為刻意的上限保護而非預先配置;本 action 於即拋容器內執行,將其抽為環境變數只增配置面而無實益。等同已收錄的 util.js:14 排除(同一機制)。"
|
||||
},
|
||||
{
|
||||
"location": "app/index.js:176",
|
||||
"role": "Bard",
|
||||
"original_finding": "PR 已存在時僅記錄 log.info,CI 流程中可能需要更明確的提示;建議改用 log.warn 或 log.notice。",
|
||||
"reason": "「PR 已存在」是冪等重跑下的正常且預期結果,log.info 語意正確;改為 warn 會在正常流程中產生誤導性警告雜訊,屬偏好而非缺陷。"
|
||||
},
|
||||
{
|
||||
"location": "app/lib/git.js:32",
|
||||
"role": "Leo",
|
||||
"original_finding": "Sensitive Token 處理耦合在 Git 類別中,且未驗證有效性;建議將遮蔽邏輯交由 util.js 或於初始化時驗證。",
|
||||
"reason": "token 遮蔽邏輯已實作於 util.js 的 maskSecrets 並由 Git 類別重用(非重複實作);token 存在性已於 inputs.js 的 required('GITEA_TOKEN') 驗證。Git 持有 token 以組 http.extraheader 為必要,耦合度可接受。"
|
||||
}
|
||||
]
|
||||
|
||||
@@ -17,8 +17,8 @@
|
||||
"level": "warning",
|
||||
"role": "Maya",
|
||||
"location": "app/index.js:114, 126, 154",
|
||||
"problem": "diff 截斷邏輯、fallbackSummary 邊界處理、以及分支名稱長度限制(Magic Number 180)缺乏測試或硬編碼,難以維護。",
|
||||
"suggestion": "補上針對 truncateDiff 及 commitMessages 為空/null 時的測試案例。將長度限制抽離為具名常數(例如 `MAX_BRANCH_NAME_LENGTH`)。"
|
||||
"problem": "diff 截斷邏輯、fallbackSummary 邊界處理缺乏測試。(分支名稱長度 Magic Number 已抽為具名常數 MAX_BRANCH_STEM_LENGTH。)",
|
||||
"suggestion": "補上針對 truncateDiff 及 commitMessages 為空/null 時的測試案例。"
|
||||
},
|
||||
{
|
||||
"level": "warning",
|
||||
@@ -27,27 +27,6 @@
|
||||
"problem": "Dockerfile 中使用全域 `npm install` 存在供應鏈風險。",
|
||||
"suggestion": "使用 lockfile(如 `package-lock.json`)確保依賴版本一致性,並定期審查更新。"
|
||||
},
|
||||
{
|
||||
"level": "warning",
|
||||
"role": "Bard",
|
||||
"location": "app/lib/opencode.js:154",
|
||||
"problem": "錯誤訊息處理中,對 `result.stderr` 進行截斷,可能導致切斷關鍵錯誤上下文,除錯困難。",
|
||||
"suggestion": "改用 log.warn 輸出完整內容(遮蔽敏感資訊後),或將截斷訊息與「內容已截斷」提示並列。"
|
||||
},
|
||||
{
|
||||
"level": "warning",
|
||||
"role": "Bard",
|
||||
"location": "app/index.js:80",
|
||||
"problem": "分支命名格式若目標分支名稱過長,可能導致總長度超過 Git 限制。",
|
||||
"suggestion": "調整 `stem` 截斷長度,或加入總長度檢查機制,確保不超過 255 字元。"
|
||||
},
|
||||
{
|
||||
"level": "warning",
|
||||
"role": "Mage",
|
||||
"location": "app/index.js:52",
|
||||
"problem": "opencode 失敗時,若相關資訊皆為空,fallback 機制產出的 PR 描述將空洞無效。",
|
||||
"suggestion": "增加對 `fallbackSummary` 輸出內容的檢查。若資訊不足,應拋出錯誤或提供更有意義的預設說明。"
|
||||
},
|
||||
{
|
||||
"level": "warning",
|
||||
"role": "Maya",
|
||||
@@ -62,26 +41,5 @@
|
||||
"problem": "缺乏單元測試驗證 `extractResult` 對非標準 JSON 的解析能力。",
|
||||
"suggestion": "補上單元測試,驗證 extractResult 能否正確解析壞 JSON。",
|
||||
"is_new": false
|
||||
},
|
||||
{
|
||||
"level": "info",
|
||||
"role": "Bard",
|
||||
"location": "app/lib/util.js:11, 13",
|
||||
"problem": "Buffer 大小硬編碼,缺乏靈活性,且針對極端巨大輸入缺乏保護。",
|
||||
"suggestion": "將 buffer 大小作為常數定義或透過環境變數傳入,並在呼叫 `run` 前增加對輸入內容的檢查。"
|
||||
},
|
||||
{
|
||||
"level": "info",
|
||||
"role": "Bard",
|
||||
"location": "app/index.js:176",
|
||||
"problem": "PR 已存在時僅記錄 `log.info`,CI 流程中可能需要更明確的提示。",
|
||||
"suggestion": "建議改用 `log.warn` 或新增 `log.notice` 等級,以更明確提示使用者「PR 已經存在」。"
|
||||
},
|
||||
{
|
||||
"level": "info",
|
||||
"role": "Leo",
|
||||
"location": "app/lib/git.js:32",
|
||||
"problem": "Sensitive Token 處理耦合在 `Git` 類別中,且未驗證有效性。",
|
||||
"suggestion": "將 Token 的遮蔽邏輯交由 `util.js` 處理,或在 `Git` 初始化時驗證其有效性。"
|
||||
}
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user