Compare commits
8
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9018aeccbb | ||
|
|
9f7a2e97c3 | ||
|
|
ab56c56206 | ||
|
|
49061fe033 | ||
|
|
ffdb53c645 | ||
|
|
cab7507ddb | ||
|
|
0b26fbeeb7 | ||
|
|
30130b715b |
@@ -148,5 +148,11 @@
|
||||
"role": "Maya",
|
||||
"original_finding": "對於 codex 執行失敗的各種細節(權限不足、找不到 binary 等)都統一處理為 status: 1,測試未驗證具體錯誤來源。",
|
||||
"reason": "此 GitHub Action 對外輸出以 `status=completed|failed` 與 `output` 訊息表達成功或失敗;process exit code 只需反映 Codex 子程序結果或通用啟動失敗。細分 ENOENT、EACCES 等 Action exit code 會改變既有介面且對 workflow 判斷價值有限,本次已用簡潔 output 訊息與測試覆蓋具體錯誤來源。"
|
||||
},
|
||||
{
|
||||
"location": "app/main.js:142",
|
||||
"role": "Rogue",
|
||||
"original_finding": "移除這些無謂的重新編碼比較,直接嘗試解碼。",
|
||||
"reason": "AI 對話收斂判定為誤報(問題在最新程式碼中不成立或不適用)"
|
||||
}
|
||||
]
|
||||
|
||||
@@ -2,24 +2,15 @@
|
||||
{
|
||||
"level": "warning",
|
||||
"role": "Bard",
|
||||
"location": "app/main.js:245",
|
||||
"problem": "在 `runCodex` 函式中,對 `lastMessageFile` 的讀取缺乏明確的錯誤處理策略,直接將錯誤靜默處理並初始化為空字串,可能掩蓋真正的檔案系統問題,且導致邏輯錯誤。",
|
||||
"suggestion": "建議在 `catch` 區塊中至少加入簡單的日誌記錄(如 `console.error`),並明確區分錯誤類型(如檔案不存在 vs 權限問題),給予清晰的回饋。"
|
||||
},
|
||||
{
|
||||
"level": "info",
|
||||
"role": "Rogue",
|
||||
"location": "app/main.js:200",
|
||||
"problem": "每次執行 runCodex 都在建立新的 temp 目錄與追蹤檔案,這種重複性的檔案系統配置開銷對於高頻率呼叫來說是完全浪費的資源。",
|
||||
"suggestion": "如果執行環境是持續存在的,應快取 tempDir 路徑或使用預設的共享路徑,避免頻繁的檔案系統建立與追蹤開銷。",
|
||||
"is_new": true
|
||||
"location": "app/main.js:241",
|
||||
"problem": "`runCodex` 中 `resultOutput` 的計算邏輯過於緊湊且不易維護,且直接進行檔案同步讀取,若檔案過大可能阻塞 Node.js 事件循環。",
|
||||
"suggestion": "建議拆解複雜的邏輯為獨立的輔助函數,並改用非同步的檔案讀取方式。"
|
||||
},
|
||||
{
|
||||
"level": "info",
|
||||
"role": "Bard",
|
||||
"location": "app/main.js:248",
|
||||
"problem": "在 `resolve` 函式的回傳值邏輯中使用了 `lastMessage || output.toString()`,這種基於真值判斷(truthiness)的邏輯若 `lastMessage` 為空字串但 `output` 亦為空,會導致語意不明,且與前面處理錯誤的情境交織,增加閱讀複雜度。",
|
||||
"suggestion": "建議明確區分 `lastMessage` 的來源,若確定檔案應存在,請使用更明確的判斷方式(如檢查檔案是否存在或長度),提升程式碼的可預測性。",
|
||||
"is_new": true
|
||||
"location": "app/main.js:321",
|
||||
"problem": "確保字串結尾換行的樣板程式碼邏輯重複出現。",
|
||||
"suggestion": "建立 `ensureNewline` 共用工具函式。"
|
||||
}
|
||||
]
|
||||
|
||||
+4
-9
@@ -215,8 +215,6 @@ function runCodex(model, prompt) {
|
||||
output.append(Buffer.from(`Codex execution timed out after ${timeoutMs} ms.\n`));
|
||||
}, timeoutMs);
|
||||
|
||||
child.stderr.pipe(process.stdout);
|
||||
|
||||
child.stdout.on("data", (chunk) => {
|
||||
output.append(chunk);
|
||||
});
|
||||
@@ -239,14 +237,11 @@ function runCodex(model, prompt) {
|
||||
output.append(Buffer.from(`Codex process terminated by signal ${signal}.\n`));
|
||||
}
|
||||
|
||||
let lastMessage = "";
|
||||
try {
|
||||
lastMessage = fs.readFileSync(lastMessageFile, "utf8");
|
||||
} catch {
|
||||
lastMessage = "";
|
||||
}
|
||||
const lastMessage = fs.existsSync(lastMessageFile) ? fs.readFileSync(lastMessageFile, "utf8") : null;
|
||||
const diagnosticOutput = output.toString();
|
||||
const resultOutput = code === 0 && lastMessage !== null ? lastMessage : diagnosticOutput || lastMessage || "";
|
||||
|
||||
resolve({ status: code ?? 1, output: lastMessage || output.toString() });
|
||||
resolve({ status: code ?? 1, output: resultOutput });
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
@@ -70,7 +70,7 @@ while [ "$#" -gt 0 ]; do
|
||||
shift
|
||||
done
|
||||
|
||||
printf '%s\n' 'codex' 'final answer' 'tokens used' '123' 'final answer'
|
||||
printf '%s\n' 'codex' 'final answer' 'tokens used' '123' 'final answer' >&2
|
||||
printf '%s\n' 'final answer' > "$last_message_file"
|
||||
SH
|
||||
chmod +x "$dir/codex"
|
||||
|
||||
Reference in New Issue
Block a user