feat: 前置驗證納入 git push 認證檢查 #10

Merged
jiantw83 merged 11 commits from feat/preflight-auth-check into develop 2026-06-16 06:20:10 +00:00
Member
No description provided.
jiantw83 added 5 commits 2026-06-16 03:27:30 +00:00
在 README 流程新增第 0 點與設計第 11 點,並在 TODO 新增階段十二,
說明 action 啟動時集中驗證 Gitea token、comment token 與 LLM API Key
是否可用,任一失敗即 exit 1。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
feat: 啟動時前置驗證所有驗證相關設定
AI / 計算版本號 (pull_request) Failing after 1s
AI / Code Review (pull_request) Has been skipped
766f2ddf40
新增 app/preflight.js,在 action 啟動(Step1 之後、其餘步驟之前)集中
檢查必要環境變數、GITEA_TOKEN 讀 repo、GITEA_COMMENT_TOKEN、以及 LLM
provider/API Key(多把只要一把通過即可,Ollama 改檢查 base URL 連線)。
任一項失敗即印出原因並 exit 1,避免分析到一半或發 comment 時才失敗。

main.js 在 Step1 後呼叫 runPreflight();新增 preflight.test.js 覆蓋
成功、缺環境變數、token 無效、所有 LLM key 失敗、Ollama 等情境。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
feat: update GEMINI_API_KEY configuration for AI Code Review
AI / 計算版本號 (pull_request) Successful in 2s
AI / Code Review (pull_request) Failing after 2s
69371eb993
fix: update GITEA_COMMENT_TOKEN to use RUNNER_TOKEN for code review action
AI / 計算版本號 (pull_request) Successful in 3s
AI / Code Review (pull_request) Failing after 1m6s
00f5bc7dae
feat: 前置驗證納入 git push 認證檢查
AI / 計算版本號 (pull_request) Successful in 2s
AI / Code Review (pull_request) Failing after 1m28s
40ebfe99a8
git push 走 askpass + HTTP 認證,與 Gitea REST API 是兩套機制,API token
有效不代表 push 能用(曾出現 askpass 無法執行、could not read Username 而
push 失敗)。新增 git.js verifyRemoteAccess() 以相同 askpass + remote URL
跑唯讀 git ls-remote,preflight 呼叫並在失敗時 exit 1,提前攔下設定問題。

新增 git.test.js 對 verifyRemoteAccess 的測試(成功、失敗不丟例外、token
不外洩、askpass 清理)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Owner

🤖 AI Code Review 團隊

👤 名稱 🎯 職責 🧠 個性
Leo 可維護性審查員 有遠見、重視長期維護成本,常常思考「六個月後的自己能看懂嗎?」
Zara 效能優化專家 追求極致效能,對任何不必要的資源消耗都感到不舒服,喜歡用數據說話
Rex 資安審查員 謹慎、多疑、對任何潛在風險都保持高度警覺,寧可誤報也不放過漏洞
Aria 程式碼風格審查員 嚴謹、注重細節、對程式碼整潔度有高度要求,說話直接但不失禮貌
Maya 測試品質審查員 對測試覆蓋率有執念,相信沒有測試的程式碼等於沒有完成,溫和但堅持

🔍 服務:gemini 模型:gemini-2.5-flash

## 🤖 AI Code Review 團隊 | 👤 名稱 | 🎯 職責 | 🧠 個性 | |--------|--------|--------| | **Leo** | 可維護性審查員 | 有遠見、重視長期維護成本,常常思考「六個月後的自己能看懂嗎?」 | | **Zara** | 效能優化專家 | 追求極致效能,對任何不必要的資源消耗都感到不舒服,喜歡用數據說話 | | **Rex** | 資安審查員 | 謹慎、多疑、對任何潛在風險都保持高度警覺,寧可誤報也不放過漏洞 | | **Aria** | 程式碼風格審查員 | 嚴謹、注重細節、對程式碼整潔度有高度要求,說話直接但不失禮貌 | | **Maya** | 測試品質審查員 | 對測試覆蓋率有執念,相信沒有測試的程式碼等於沒有完成,溫和但堅持 | > 🔍 服務:gemini 模型:gemini-2.5-flash
Owner

🔍 新發現問題(3 筆)

等級 審查員 位置 建議
🟡 警告 Leo app/preflight.js:70 verifyLLM 函式處理了多個 LLM 供應商(Ollama, Claude, OpenAI-compatible)的驗證邏輯,並包含多個 API Key 的迭代。這使得函式較長且複雜度稍高。考慮將不同供應商的驗證邏輯拆分成獨立的私有輔助函式(例如 _verifyOllamaLLM_verifyOpenAICompatibleLLM),以提高模組化程度、可讀性,並更容易擴展或修改特定供應商的邏輯。
🟡 警告 Zara app/preflight.js:L81-L90 verifyLLM 函數中,當配置了多個 LLM API Key 時,會依序嘗試每個 Key。每個嘗試都包含一個最長 30 秒的網路請求。如果配置了大量 Key 且前幾個 Key 都失敗,這可能導致前置驗證階段耗時過長(例如,5 個 Key 失敗 4 個可能需要 2 分鐘)。建議評估實際使用情境中 API Key 的數量。如果預期會有大量 Key 或希望加快驗證速度,可以考慮將這些 API Key 的驗證請求並行化(例如使用 Promise.allSettled),但需注意並行請求可能對 API 服務造成壓力或觸發速率限制。
🟡 警告 Rex app/preflight.js:106 在記錄 LLM API 驗證失敗的錯誤訊息時,請考慮對 e.message 進行消毒或僅記錄錯誤類型,以避免潛在的敏感資訊(例如 API Key 片段)洩漏到日誌中。某些 LLM 服務的錯誤訊息可能會包含請求的敏感部分。
## 🔍 新發現問題(3 筆) | 等級 | 審查員 | 位置 | 建議 | |------|--------|------|------| | 🟡 警告 | Leo | app/preflight.js:70 | `verifyLLM` 函式處理了多個 LLM 供應商(Ollama, Claude, OpenAI-compatible)的驗證邏輯,並包含多個 API Key 的迭代。這使得函式較長且複雜度稍高。考慮將不同供應商的驗證邏輯拆分成獨立的私有輔助函式(例如 `_verifyOllamaLLM`、`_verifyOpenAICompatibleLLM`),以提高模組化程度、可讀性,並更容易擴展或修改特定供應商的邏輯。 | | 🟡 警告 | Zara | app/preflight.js:L81-L90 | 在 `verifyLLM` 函數中,當配置了多個 LLM API Key 時,會依序嘗試每個 Key。每個嘗試都包含一個最長 30 秒的網路請求。如果配置了大量 Key 且前幾個 Key 都失敗,這可能導致前置驗證階段耗時過長(例如,5 個 Key 失敗 4 個可能需要 2 分鐘)。建議評估實際使用情境中 API Key 的數量。如果預期會有大量 Key 或希望加快驗證速度,可以考慮將這些 API Key 的驗證請求並行化(例如使用 `Promise.allSettled`),但需注意並行請求可能對 API 服務造成壓力或觸發速率限制。 | | 🟡 警告 | Rex | app/preflight.js:106 | 在記錄 LLM API 驗證失敗的錯誤訊息時,請考慮對 `e.message` 進行消毒或僅記錄錯誤類型,以避免潛在的敏感資訊(例如 API Key 片段)洩漏到日誌中。某些 LLM 服務的錯誤訊息可能會包含請求的敏感部分。 |
Owner

🚨 嚴重問題

等級 審查員 位置 建議
🔴 嚴重 Rex app/preflight.js:19 在生產環境中,應避免設定 GITEA_SKIP_TLS_VERIFYtrue。禁用 TLS 憑證驗證會使應用程式容易受到中間人攻擊 (Man-in-the-Middle attacks)。請確保 Gitea 伺服器使用有效的 TLS 憑證,並移除此選項或僅在受控的開發/測試環境中使用。
## 🚨 嚴重問題 | 等級 | 審查員 | 位置 | 建議 | |------|--------|------|------| | 🔴 嚴重 | Rex | app/preflight.js:19 | 在生產環境中,應避免設定 `GITEA_SKIP_TLS_VERIFY` 為 `true`。禁用 TLS 憑證驗證會使應用程式容易受到中間人攻擊 (Man-in-the-Middle attacks)。請確保 Gitea 伺服器使用有效的 TLS 憑證,並移除此選項或僅在受控的開發/測試環境中使用。 |
Owner

🚨 嚴重問題

等級 審查員 位置 建議
🔴 嚴重 Maya app/preflight.test.js:192 runPreflight 函數是整個前置驗證流程的協調者,但目前的測試僅涵蓋了第一個環境變數檢查失敗的早期退出情境。請新增測試案例來驗證以下關鍵行為:
  1. 完整成功路徑:所有子驗證(checkRequiredEnv, verifyGiteaToken, verifyCommentToken, verifyRemoteAccess, verifyLLM)都成功時,runPreflight 應回傳 true
  2. 各個子驗證失敗路徑:針對每個子驗證函數(例如 verifyGiteaToken 失敗、verifyCommentToken 失敗、verifyRemoteAccess 失敗、verifyLLM 失敗),runPreflight 應正確地短路並回傳 false,確保錯誤處理邏輯在每個階段都有效。 |
## 🚨 嚴重問題 | 等級 | 審查員 | 位置 | 建議 | |------|--------|------|------| | 🔴 嚴重 | Maya | app/preflight.test.js:192 | `runPreflight` 函數是整個前置驗證流程的協調者,但目前的測試僅涵蓋了第一個環境變數檢查失敗的早期退出情境。請新增測試案例來驗證以下關鍵行為: 1. **完整成功路徑**:所有子驗證(`checkRequiredEnv`, `verifyGiteaToken`, `verifyCommentToken`, `verifyRemoteAccess`, `verifyLLM`)都成功時,`runPreflight` 應回傳 `true`。 2. **各個子驗證失敗路徑**:針對每個子驗證函數(例如 `verifyGiteaToken` 失敗、`verifyCommentToken` 失敗、`verifyRemoteAccess` 失敗、`verifyLLM` 失敗),`runPreflight` 應正確地短路並回傳 `false`,確保錯誤處理邏輯在每個階段都有效。 |
jiantw83 added 1 commit 2026-06-16 04:02:29 +00:00
fix: withAskpass 等待非同步 callback 完成才清理 askpass 腳本
AI / 計算版本號 (pull_request) Successful in 2s
AI / Code Review (pull_request) Failing after 2m24s
7339145641
commitAndPush 傳入 async callback,但 withAskpass 是同步 try/finally,
會在第一個 await(LLM 合併指令檔)時就刪除 .git-askpass.sh,導致後續
git push 因 GIT_ASKPASS 指向已刪除腳本而失敗(cannot exec .git-askpass.sh /
could not read Username)。前置驗證的 verifyRemoteAccess 用同步 callback
所以 ls-remote 通過,造成前置驗證過但 push 失敗的落差。

改為當 callback 回傳 thenable 時以 result.finally(cleanup) 延後清理,
同步 callback 維持立即清理與原樣回傳,不影響 verifyRemoteAccess / cloneRepo。

新增回歸測試斷言 git push 執行當下 askpass 腳本仍存在。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Owner

🤖 AI Code Review 團隊

👤 名稱 🎯 職責 🧠 個性
Leo 可維護性審查員 有遠見、重視長期維護成本,常常思考「六個月後的自己能看懂嗎?」
Zara 效能優化專家 追求極致效能,對任何不必要的資源消耗都感到不舒服,喜歡用數據說話
Rex 資安審查員 謹慎、多疑、對任何潛在風險都保持高度警覺,寧可誤報也不放過漏洞
Aria 程式碼風格審查員 嚴謹、注重細節、對程式碼整潔度有高度要求,說話直接但不失禮貌
Maya 測試品質審查員 對測試覆蓋率有執念,相信沒有測試的程式碼等於沒有完成,溫和但堅持

🔍 服務:gemini 模型:gemini-2.5-flash

## 🤖 AI Code Review 團隊 | 👤 名稱 | 🎯 職責 | 🧠 個性 | |--------|--------|--------| | **Leo** | 可維護性審查員 | 有遠見、重視長期維護成本,常常思考「六個月後的自己能看懂嗎?」 | | **Zara** | 效能優化專家 | 追求極致效能,對任何不必要的資源消耗都感到不舒服,喜歡用數據說話 | | **Rex** | 資安審查員 | 謹慎、多疑、對任何潛在風險都保持高度警覺,寧可誤報也不放過漏洞 | | **Aria** | 程式碼風格審查員 | 嚴謹、注重細節、對程式碼整潔度有高度要求,說話直接但不失禮貌 | | **Maya** | 測試品質審查員 | 對測試覆蓋率有執念,相信沒有測試的程式碼等於沒有完成,溫和但堅持 | > 🔍 服務:gemini 模型:gemini-2.5-flash
Owner

🔍 新發現問題(5 筆)

等級 審查員 位置 建議
🟡 警告 Leo app/preflight.js:56 函式 verifyLLM 處理了多種 LLM 供應商的驗證邏輯(Ollama、Claude、OpenAI 相容等),導致其長度較長且複雜度較高。建議將不同供應商的驗證邏輯拆分成獨立的輔助函式(例如 _verifyOllama_verifyOpenAICompatible),以提高模組化程度和可讀性。
🟡 警告 Zara app/preflight.js:70-82 verifyLLM 函式中,當配置了多個 LLM API Key 時,系統會依序嘗試驗證每個 Key,每個嘗試都有 30 秒的逾時時間。如果前幾個 Key 驗證失敗,這可能導致顯著的累積延遲。雖然這是為了找到一個可用的 Key,但若 Key 數量多且網路不穩定,可能會造成啟動時間過長。可以考慮縮短單次 Key 驗證的逾時時間,或在特定情況下提供更快的失敗機制。
🟡 警告 Maya app/preflight.test.js runPreflight 函數是一個重要的協調器,它依賴於多個內部驗證函數。目前的測試 runPreflight 僅涵蓋了環境變數缺失導致的早期終止情況。請為 runPreflight 函數添加以下測試案例,以確保其行為的完整性:
  1. 完整成功路徑: 模擬所有內部驗證(checkRequiredEnv, verifyGiteaToken, verifyCommentToken, verifyRemoteAccess, verifyLLM)都成功的情況,驗證 runPreflight 返回 true
  2. 各個失敗點: 針對每個內部驗證函數(除了第一個 checkRequiredEnv),添加一個測試案例,模擬該函數失敗而其之前的函數都成功的情況,驗證 runPreflight 返回 false 並在正確的步驟停止。
  3. 依賴模擬: 為了使 runPreflight 的測試更具單元性,請考慮在 preflight.test.js 中模擬 verifyRemoteAccess 函數(從 app/git.js 導入),而不是讓它執行實際的 git 命令。這將使 runPreflight 的測試更穩定且獨立於 git.js 的實現細節。 |
    | 🔵 建議 | Rex | app/preflight.js:100 | 在記錄 LLM API 驗證失敗時,直接輸出了錯誤訊息 e.message。雖然通常情況下 e.message 不會包含敏感資訊,但為了最佳安全實踐,建議審查 LLM 服務提供商的錯誤訊息格式,確保其中不會意外洩漏 API 金鑰或其他敏感請求內容。若有疑慮,應對錯誤訊息進行消毒或僅記錄高層次的錯誤類型。 |
    | 🔵 建議 | Aria | app/preflight.js:30 | 在 checkRequiredEnvverifyGiteaTokenverifyCommentToken 等函式中,預設參數直接引用了從 config.js 匯入的常數。雖然這在功能上可行,但為了提高程式碼的清晰度和一致性,建議考慮以下兩種方式之一:1. 將所有配置值作為明確的參數從呼叫端傳入。2. 讓函式直接從 config.js 模組中讀取這些值,而不是透過預設參數。 |
## 🔍 新發現問題(5 筆) | 等級 | 審查員 | 位置 | 建議 | |------|--------|------|------| | 🟡 警告 | Leo | app/preflight.js:56 | 函式 `verifyLLM` 處理了多種 LLM 供應商的驗證邏輯(Ollama、Claude、OpenAI 相容等),導致其長度較長且複雜度較高。建議將不同供應商的驗證邏輯拆分成獨立的輔助函式(例如 `_verifyOllama`、`_verifyOpenAICompatible`),以提高模組化程度和可讀性。 | | 🟡 警告 | Zara | app/preflight.js:70-82 | 在 `verifyLLM` 函式中,當配置了多個 LLM API Key 時,系統會依序嘗試驗證每個 Key,每個嘗試都有 30 秒的逾時時間。如果前幾個 Key 驗證失敗,這可能導致顯著的累積延遲。雖然這是為了找到一個可用的 Key,但若 Key 數量多且網路不穩定,可能會造成啟動時間過長。可以考慮縮短單次 Key 驗證的逾時時間,或在特定情況下提供更快的失敗機制。 | | 🟡 警告 | Maya | app/preflight.test.js | `runPreflight` 函數是一個重要的協調器,它依賴於多個內部驗證函數。目前的測試 `runPreflight` 僅涵蓋了環境變數缺失導致的早期終止情況。請為 `runPreflight` 函數添加以下測試案例,以確保其行為的完整性: 1. **完整成功路徑:** 模擬所有內部驗證(`checkRequiredEnv`, `verifyGiteaToken`, `verifyCommentToken`, `verifyRemoteAccess`, `verifyLLM`)都成功的情況,驗證 `runPreflight` 返回 `true`。 2. **各個失敗點:** 針對每個內部驗證函數(除了第一個 `checkRequiredEnv`),添加一個測試案例,模擬該函數失敗而其之前的函數都成功的情況,驗證 `runPreflight` 返回 `false` 並在正確的步驟停止。 3. **依賴模擬:** 為了使 `runPreflight` 的測試更具單元性,請考慮在 `preflight.test.js` 中模擬 `verifyRemoteAccess` 函數(從 `app/git.js` 導入),而不是讓它執行實際的 `git` 命令。這將使 `runPreflight` 的測試更穩定且獨立於 `git.js` 的實現細節。 | | 🔵 建議 | Rex | app/preflight.js:100 | 在記錄 LLM API 驗證失敗時,直接輸出了錯誤訊息 `e.message`。雖然通常情況下 `e.message` 不會包含敏感資訊,但為了最佳安全實踐,建議審查 LLM 服務提供商的錯誤訊息格式,確保其中不會意外洩漏 API 金鑰或其他敏感請求內容。若有疑慮,應對錯誤訊息進行消毒或僅記錄高層次的錯誤類型。 | | 🔵 建議 | Aria | app/preflight.js:30 | 在 `checkRequiredEnv`、`verifyGiteaToken` 和 `verifyCommentToken` 等函式中,預設參數直接引用了從 `config.js` 匯入的常數。雖然這在功能上可行,但為了提高程式碼的清晰度和一致性,建議考慮以下兩種方式之一:1. 將所有配置值作為明確的參數從呼叫端傳入。2. 讓函式直接從 `config.js` 模組中讀取這些值,而不是透過預設參數。 |
Owner

🚨 嚴重問題

等級 審查員 位置 建議
🔴 嚴重 Rex app/preflight.js:12 程式碼中根據 GITEA_SKIP_TLS_VERIFY 環境變數來禁用 TLS 憑證驗證 (rejectUnauthorized: false),這會使應用程式容易受到中間人 (Man-in-the-Middle, MITM) 攻擊。攻擊者可能在不被察覺的情況下攔截和修改與 Gitea 伺服器的通訊。建議移除此功能,或確保在任何生產環境中永不啟用。如果 Gitea 伺服器使用自簽憑證,應將其憑證加入信任儲存區,而非禁用驗證。
## 🚨 嚴重問題 | 等級 | 審查員 | 位置 | 建議 | |------|--------|------|------| | 🔴 嚴重 | Rex | app/preflight.js:12 | 程式碼中根據 `GITEA_SKIP_TLS_VERIFY` 環境變數來禁用 TLS 憑證驗證 (`rejectUnauthorized: false`),這會使應用程式容易受到中間人 (Man-in-the-Middle, MITM) 攻擊。攻擊者可能在不被察覺的情況下攔截和修改與 Gitea 伺服器的通訊。建議移除此功能,或確保在任何生產環境中永不啟用。如果 Gitea 伺服器使用自簽憑證,應將其憑證加入信任儲存區,而非禁用驗證。 |
admin added 1 commit 2026-06-16 04:05:00 +00:00
chore: update ai-review findings [ai-review-bot][failure]
AI / 計算版本號 (pull_request) Successful in 4s
AI / Code Review (pull_request) Failing after 5s
7ba9a4e223
jiantw83 added 1 commit 2026-06-16 05:50:33 +00:00
test: 補齊 runPreflight 測試並 triage preflight findings
AI / 計算版本號 (pull_request) Successful in 4s
AI / Code Review (pull_request) Failing after 1m42s
9d780788e9
triage 6 筆 review findings:1 筆修正、5 筆移入 exclusions。

修正(Maya, warning):runPreflight 僅測過 env 缺失早退,缺成功路徑與
各失敗點覆蓋。將其驗證步驟改為可注入的 deps 參數(預設沿用原函式,
行為不變),並補上完整成功、comment 略過、各失敗點早停、workspace
傳遞共 8 個測試。

移入 exclusions(誤報,保留原文):
- Rex critical:GITEA_SKIP_TLS_VERIFY 為預設開啟驗證的 opt-in 設定,
  與既有 gitea.js 排除一致,非漏洞
- Leo warning:verifyLLM 內聚清楚,拆分屬主觀重構
- Zara warning:每把 key 30s timeout 為刻意的可靠性下限,僅失敗時累積
- Rex info:axios 錯誤訊息不含認證標頭/內容
- Aria info:預設參數引用 config 常數為刻意且利於測試的 pattern

findings.json 清空(全部已修正或排除)。app/ 測試 112 pass。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Owner

🤖 AI Code Review 團隊

👤 名稱 🎯 職責 🧠 個性
Leo 可維護性審查員 有遠見、重視長期維護成本,常常思考「六個月後的自己能看懂嗎?」
Zara 效能優化專家 追求極致效能,對任何不必要的資源消耗都感到不舒服,喜歡用數據說話
Rex 資安審查員 謹慎、多疑、對任何潛在風險都保持高度警覺,寧可誤報也不放過漏洞
Aria 程式碼風格審查員 嚴謹、注重細節、對程式碼整潔度有高度要求,說話直接但不失禮貌
Maya 測試品質審查員 對測試覆蓋率有執念,相信沒有測試的程式碼等於沒有完成,溫和但堅持

🔍 服務:gemini 模型:gemini-2.5-flash

## 🤖 AI Code Review 團隊 | 👤 名稱 | 🎯 職責 | 🧠 個性 | |--------|--------|--------| | **Leo** | 可維護性審查員 | 有遠見、重視長期維護成本,常常思考「六個月後的自己能看懂嗎?」 | | **Zara** | 效能優化專家 | 追求極致效能,對任何不必要的資源消耗都感到不舒服,喜歡用數據說話 | | **Rex** | 資安審查員 | 謹慎、多疑、對任何潛在風險都保持高度警覺,寧可誤報也不放過漏洞 | | **Aria** | 程式碼風格審查員 | 嚴謹、注重細節、對程式碼整潔度有高度要求,說話直接但不失禮貌 | | **Maya** | 測試品質審查員 | 對測試覆蓋率有執念,相信沒有測試的程式碼等於沒有完成,溫和但堅持 | > 🔍 服務:gemini 模型:gemini-2.5-flash
Owner

🚨 嚴重問題

等級 審查員 位置 建議
🔴 嚴重 Maya app/preflight.js:107 verifyLLM 函數中,呼叫 axios.post 時缺少 httpsAgent 選項。這會導致即使設定了 GITEA_SKIP_TLS_VERIFY,LLM 的 API 請求仍可能因 TLS 憑證問題而失敗。請將 httpsAgent 傳遞給 axios.post 的選項物件,例如:await axios.post(${base}/chat/completions, payload, { headers, timeout: 30000, httpsAgent });
## 🚨 嚴重問題 | 等級 | 審查員 | 位置 | 建議 | |------|--------|------|------| | 🔴 嚴重 | Maya | app/preflight.js:107 | 在 `verifyLLM` 函數中,呼叫 `axios.post` 時缺少 `httpsAgent` 選項。這會導致即使設定了 `GITEA_SKIP_TLS_VERIFY`,LLM 的 API 請求仍可能因 TLS 憑證問題而失敗。請將 `httpsAgent` 傳遞給 `axios.post` 的選項物件,例如:`await axios.post(`${base}/chat/completions`, payload, { headers, timeout: 30000, httpsAgent });` |
admin added 1 commit 2026-06-16 05:52:23 +00:00
chore: update ai-review findings [ai-review-bot][failure]
AI / 計算版本號 (pull_request) Successful in 3s
AI / Code Review (pull_request) Failing after 5s
cedcb04424
jiantw83 added 1 commit 2026-06-16 06:15:14 +00:00
chore: triage preflight TLS finding 為誤報並寫入 exclusions
AI / 計算版本號 (pull_request) Successful in 4s
AI / Code Review (pull_request) Successful in 4m16s
33f1291a0f
Maya critical(app/preflight.js:107):verifyLLM 的 axios.post 未帶
httpsAgent,認為 GITEA_SKIP_TLS_VERIFY 未套用到 LLM 請求。

判定為誤報並移入 exclusions:
- GITEA_SKIP_TLS_VERIFY 為 Gitea 端(內網自簽憑證)專用設定,外部 LLM
  服務(Gemini/OpenAI/Claude)應維持 TLS 驗證,套用此 flag 屬安全降級
- 與既有 app/llm.js 排除一致(已刻意移除 rejectUnauthorized:false 還原
  TLS 驗證)

findings.json 清空(已排除)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Owner

🤖 AI Code Review 團隊

👤 名稱 🎯 職責 🧠 個性
Leo 可維護性審查員 有遠見、重視長期維護成本,常常思考「六個月後的自己能看懂嗎?」
Zara 效能優化專家 追求極致效能,對任何不必要的資源消耗都感到不舒服,喜歡用數據說話
Rex 資安審查員 謹慎、多疑、對任何潛在風險都保持高度警覺,寧可誤報也不放過漏洞
Aria 程式碼風格審查員 嚴謹、注重細節、對程式碼整潔度有高度要求,說話直接但不失禮貌
Maya 測試品質審查員 對測試覆蓋率有執念,相信沒有測試的程式碼等於沒有完成,溫和但堅持

🔍 服務:gemini 模型:gemini-2.5-flash

## 🤖 AI Code Review 團隊 | 👤 名稱 | 🎯 職責 | 🧠 個性 | |--------|--------|--------| | **Leo** | 可維護性審查員 | 有遠見、重視長期維護成本,常常思考「六個月後的自己能看懂嗎?」 | | **Zara** | 效能優化專家 | 追求極致效能,對任何不必要的資源消耗都感到不舒服,喜歡用數據說話 | | **Rex** | 資安審查員 | 謹慎、多疑、對任何潛在風險都保持高度警覺,寧可誤報也不放過漏洞 | | **Aria** | 程式碼風格審查員 | 嚴謹、注重細節、對程式碼整潔度有高度要求,說話直接但不失禮貌 | | **Maya** | 測試品質審查員 | 對測試覆蓋率有執念,相信沒有測試的程式碼等於沒有完成,溫和但堅持 | > 🔍 服務:gemini 模型:gemini-2.5-flash
Owner

🔍 新發現問題(5 筆)

等級 審查員 位置 建議
🟡 警告 Aria app/preflight.test.js:25 測試描述使用英文。請確保專案在測試描述的語言上保持一致性。如果專案主要使用繁體中文(如 app/preflight.js 中的 JSDoc 和日誌),則應將此測試描述翻譯為繁體中文。
🔵 建議 Aria app/preflight.test.js:1-4 匯入語句的排序不一致。建議遵循一致的排序規則,例如:內建模組、第三方模組、本地模組,並在各組內按字母順序排序。
🔵 建議 Aria app/preflight.test.js:7-12 此陣列字面量較長。雖然已分行,但可以考慮將每個元素獨立一行並保持一致的縮排,以提高可讀性。
🔵 建議 Aria app/preflight.test.js:14 函數名稱 clearLLMEnv 雖然可理解,但可以更具描述性,例如 clearLlmEnvironmentVariablesresetLlmEnv
🔵 建議 Aria app/preflight.test.js:149 此單行註解風格與其他部分可能不一致。建議遵循專案統一的註解風格指南。
## 🔍 新發現問題(5 筆) | 等級 | 審查員 | 位置 | 建議 | |------|--------|------|------| | 🟡 警告 | Aria | app/preflight.test.js:25 | 測試描述使用英文。請確保專案在測試描述的語言上保持一致性。如果專案主要使用繁體中文(如 `app/preflight.js` 中的 JSDoc 和日誌),則應將此測試描述翻譯為繁體中文。 | | 🔵 建議 | Aria | app/preflight.test.js:1-4 | 匯入語句的排序不一致。建議遵循一致的排序規則,例如:內建模組、第三方模組、本地模組,並在各組內按字母順序排序。 | | 🔵 建議 | Aria | app/preflight.test.js:7-12 | 此陣列字面量較長。雖然已分行,但可以考慮將每個元素獨立一行並保持一致的縮排,以提高可讀性。 | | 🔵 建議 | Aria | app/preflight.test.js:14 | 函數名稱 `clearLLMEnv` 雖然可理解,但可以更具描述性,例如 `clearLlmEnvironmentVariables` 或 `resetLlmEnv`。 | | 🔵 建議 | Aria | app/preflight.test.js:149 | 此單行註解風格與其他部分可能不一致。建議遵循專案統一的註解風格指南。 |
admin added 1 commit 2026-06-16 06:19:40 +00:00
chore: update ai-review findings [ai-review-bot][success]
AI / 計算版本號 (pull_request) Successful in 3s
AI / Code Review (pull_request) Successful in 4s
fce2cd3c45
jiantw83 merged commit 7caf3d0490 into develop 2026-06-16 06:20:10 +00:00
jiantw83 deleted branch feat/preflight-auth-check 2026-06-16 06:20:11 +00:00
Sign in to join this conversation.
No Reviewers
No Label
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: actions/code-review#10