Compare commits

...

4 Commits

4 changed files with 18 additions and 173 deletions
+15
View File
@@ -24,5 +24,20 @@
{
"location": "app/findings.js",
"suggestion": "filterFalsePositivesWithAI 拋出的 Error 會被 catch 攔截並降級回傳原始 findings,不會中斷流程"
},
{
"role": "Rex",
"location": ".gitea/workflows/review.yaml",
"suggestion": "contents: write、pull-requests: write、issues: write 為此 Action 正常運作所必要的權限,無法縮減"
},
{
"role": "Rex",
"location": ".gitea/workflows/review.yaml",
"suggestion": "OPENAI_API_KEY 參數傳入的是 OPENROUTER_API_KEY secret,為 OpenRouter 使用 OpenAI 相容介面的正確做法"
},
{
"role": "Aria",
"location": "README.md",
"suggestion": "章節編號連續且正確,無需調整"
}
]
-168
View File
@@ -1,39 +1,4 @@
[
{
"level": "critical",
"role": "Aria",
"location": ".gitea/ai-review/exclusions.json",
"suggestion": "新增的條目包含 `role` 欄位,但目前的 JSON schema 只接受 `location` 與 `suggestion`,此欄位會導致驗證失敗,請移除或更新 schema。",
"is_new": false
},
{
"level": "critical",
"role": "Aria",
"location": ".gitea/ai-review/exclusions.json:12",
"suggestion": "移除 `role` 欄位,JSON schema 只接受 `location` 與 `suggestion`,保留這兩個欄位即可,避免驗證失敗。",
"is_new": false
},
{
"level": "warning",
"role": "Leo",
"location": "app/config.js:5",
"suggestion": "目前使用硬編碼的 `checks` 陣列來管理所有 LLM provider,未來若要新增或移除 provider 必須直接修改程式碼,易產生重複與維護負擔。建議將 provider 設定抽離至外部 JSON/YAML 檔或使用可擴充的資料結構,並在程式中載入,提升模組化與可維護性。",
"is_new": false
},
{
"level": "warning",
"role": "Rex",
"location": ".gitea/workflows/review.yaml:33",
"suggestion": "工作流程目前授予 contents、pullrequests、issues 三項 write 權限,過於寬鬆。建議依實際需求僅授予 read 或最小必要的 write 權限,以降低被濫用的風險。",
"is_new": false
},
{
"level": "warning",
"role": "Rex",
"location": ".gitea/workflows/review.yaml:35",
"suggestion": "將 OPENAI_API_KEY 參數改為使用正確的 secret 名稱(如 OPENROUTER_API_KEY)時,請確保工作流程文件中不會同時暴露兩個不同的 secret 名稱,以免因名稱錯誤導致金鑰未傳入或意外洩漏。",
"is_new": false
},
{
"level": "warning",
"role": "Aria",
@@ -41,69 +6,6 @@
"suggestion": "在 `OPENAI_API_KEY` 後的註解前應保留一個空格,以符合常見的 YAML 註解風格:`... ${{ secrets.OPENROUTER_API_KEY }} # OpenRouter 使用 OpenAI 相容介面,以 OPENAI_API_KEY 傳入`。",
"is_new": false
},
{
"level": "warning",
"role": "Aria",
"location": "README.md",
"suggestion": "文件中章節編號不連續(例如 `### 2. OpenRouter` 後直接跳到 `### 3. Anthropic Claude`),建議重新編號或使用一致的標題層級,以提升可讀性與維護性。",
"is_new": false
},
{
"level": "warning",
"role": "Aria",
"location": "app/config.js",
"suggestion": "`checks` 陣列的每一行過長,超過 120 個字元,建議拆成多行並對齊欄位,以符合程式碼可讀性與行長限制的慣例。",
"is_new": false
},
{
"level": "warning",
"role": "Aria",
"location": "app/config.js",
"suggestion": "`amazonq` 那一行的空格對齊與其他項目不一致,請統一使用單一個空格分隔欄位,或使用對齊工具保持列的垂直對齊。",
"is_new": false
},
{
"level": "warning",
"role": "Leo",
"location": "app/config.js:12",
"suggestion": "目前使用硬編碼的 `checks` 陣列管理所有 LLM provider,未來若要新增或移除 provider 必須直接修改程式碼,易產生重複與維護負擔。建議將 provider 設定抽離至外部 JSON/YAML 檔或使用可擴充的資料結構,於程式中載入,以提升模組化與可維護性。",
"is_new": false
},
{
"level": "warning",
"role": "Zara",
"location": "app/config.js:12",
"suggestion": "改用映射表(Map)或物件儲存 provider 設定,並以 O(1) 方式查找符合條件的項目,減少每次呼叫時的線性掃描成本。",
"is_new": false
},
{
"level": "warning",
"role": "Rex",
"location": ".gitea/workflows/review.yaml:33-35",
"suggestion": "工作流程目前授予 contents、pullrequests、issues 三項 write 權限過於寬鬆。建議依實際需求僅授予 read 或最小必要的 write 權限,降低被濫用的風險。",
"is_new": false
},
{
"level": "warning",
"role": "Rex",
"location": ".gitea/workflows/review.yaml:33",
"suggestion": "將 OPENAI_API_KEY 參數改為使用正確的 secret 名稱(如 OPENROUTER_API_KEY)時,請確保工作流程檔案中不會同時暴露兩個不同的 secret 名稱,以免因名稱錯誤導致金鑰未傳入或意外洩漏。",
"is_new": false
},
{
"level": "warning",
"role": "Rex",
"location": "app/config.js:12",
"suggestion": "在判斷 API 金鑰是否有效時,應先檢查 key 是否為非空字串,避免空字串被誤認為有效金鑰而發送請求。可改為 `if (key && key.trim() && baseURL) …`。",
"is_new": false
},
{
"level": "warning",
"role": "Aria",
"location": ".gitea/ai-review/exclusions.json",
"suggestion": "檔案最後缺少換行符號,請在檔案結尾加入一個空白換行,以符合 POSIX 標準。",
"is_new": false
},
{
"level": "warning",
"role": "Aria",
@@ -111,20 +13,6 @@
"suggestion": "檔案最後缺少換行符號,請在檔案結尾加入一個空白換行。",
"is_new": false
},
{
"level": "warning",
"role": "Aria",
"location": "app/config.js:12-13",
"suggestion": "`checks` 陣列每一行超過 120 個字元,請拆成多行並對齊欄位,以符合常見的行長限制。",
"is_new": false
},
{
"level": "warning",
"role": "Aria",
"location": "app/config.js:13",
"suggestion": "`amazonq` 那一行的空格對齊與其他項目不一致,請統一使用單一個空格分隔欄位或使用對齊工具保持列的垂直對齊。",
"is_new": false
},
{
"level": "warning",
"role": "Aria",
@@ -132,20 +20,6 @@
"suggestion": "檔案最後缺少換行符號,請在檔案結尾加入空白換行。",
"is_new": false
},
{
"level": "warning",
"role": "Aria",
"location": "README.md:28",
"suggestion": "文件中章節編號不連續(例如 `### 2. OpenRouter` 後直接跳到 `### 3. Anthropic Claude`),請重新編號或使用自動編號方式,保持編號連續。",
"is_new": false
},
{
"level": "warning",
"role": "Aria",
"location": "README.md:42",
"suggestion": "標題層級使用不一致,部分章節使用 `### 1.`、`### 2.`,而後面的章節直接跳到 `### 3.`,建議統一使用相同層級的 Markdown 標題,並在每個標題後留一個空行以提升可讀性。",
"is_new": false
},
{
"level": "warning",
"role": "Aria",
@@ -153,27 +27,6 @@
"suggestion": "大量移除的輸入欄位留下多行空白與註解,請整理檔案結構,移除不必要的空行與註解,保持檔案整潔。",
"is_new": false
},
{
"level": "info",
"role": "Zara",
"location": "app/config.js",
"suggestion": "對於未設定 API 金鑰的 provider(如 ollama),可提前返回快取的預設設定,避免每次呼叫都進行條件檢查。",
"is_new": false
},
{
"level": "info",
"role": "Rex",
"location": "README.md:28",
"suggestion": "文件中列出的權限說明應與實際 workflow 中的 permissions 保持一致,並提醒使用者僅在必要時授予 write 權限,避免在 CI/CD 環境中過度授權。",
"is_new": false
},
{
"level": "info",
"role": "Rex",
"location": "app/config.js:12",
"suggestion": "在取得 LLM 設定時,若 key 為空字串仍會被視為有效。建議在判斷前先檢查 key 是否為非空字串,以防止意外使用空的 API 金鑰發送請求。",
"is_new": false
},
{
"level": "info",
"role": "Aria",
@@ -188,27 +41,6 @@
"suggestion": "`ENV_KEYS` 陣列過長,建議分行列舉,每行放置一個環境變數,以提升可讀性。",
"is_new": false
},
{
"level": "info",
"role": "Aria",
"location": "app/findings.js",
"suggestion": "錯誤訊息 `AI 回傳空陣列或非陣列` 可簡化為 `AI 回傳的結果不是有效的非空陣列`,讓訊息更清晰。",
"is_new": false
},
{
"level": "info",
"role": "Leo",
"location": "app/config.js:12",
"suggestion": "`checks` 陣列的每一行過長,超過 120 個字元,建議拆成多行並對齊欄位,以符合程式碼可讀性與行長限制的慣例。",
"is_new": false
},
{
"level": "info",
"role": "Leo",
"location": "app/findings.js:151",
"suggestion": "函式內使用 `console.log` 輸出過濾結果,可能在正式環境產生過多日誌。建議改以 logger 並提供可設定的 log level,或在非除錯模式下移除此輸出。",
"is_new": false
},
{
"level": "info",
"role": "Leo",
+3 -3
View File
@@ -33,9 +33,9 @@ jobs:
- name: AI Code Review
uses: https://gitea.jsc.idv.tw/jiantw83/code-review@v${{ needs.version.outputs.version }}
with:
OPENAI_API_KEY: ${{ secrets.OPENROUTER_API_KEY }} # OpenRouter 使用 OpenAI 相容介面,以 OPENAI_API_KEY 傳入
OPENAI_BASE_URL: https://openrouter.ai/api/v1
OPENAI_MODEL: ${{ vars.OPENROUTER_MODEL }}
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY_1 }}
GEMINI_BASE_URL: https://generativelanguage.googleapis.com/v1beta
GEMINI_MODEL: ${{ vars.GEMINI_MODEL }}
permissions:
contents: write
pull-requests: write
-2
View File
@@ -72,8 +72,6 @@ inputs:
description: 'Amazon Q Base URL'
required: false
runs:
using: 'docker'
image: 'Dockerfile'