fix(ai-pull-request): 分支長度抽具名常數並標示 opencode stderr 截斷
This commit is contained in:
+5
-1
@@ -138,13 +138,17 @@ function fallbackSummary({ source, target, commitMessages, diffStat }) {
|
|||||||
return { title, description };
|
return { title, description };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 解衝突分支主體最大長度;連同前綴 `resolve-conflict/` 與 runId 後綴,
|
||||||
|
// 總長度仍遠低於 Git 對 ref 名稱的限制(約 255)。
|
||||||
|
const MAX_BRANCH_STEM_LENGTH = 180;
|
||||||
|
|
||||||
/** 解衝突分支名稱。 */
|
/** 解衝突分支名稱。 */
|
||||||
function buildResolveBranchName(target, source) {
|
function buildResolveBranchName(target, source) {
|
||||||
const runId = process.env.GITHUB_RUN_NUMBER || process.env.GITHUB_RUN_ID || '';
|
const runId = process.env.GITHUB_RUN_NUMBER || process.env.GITHUB_RUN_ID || '';
|
||||||
const safe = (s) => s.replace(/[^a-zA-Z0-9._/-]/g, '-');
|
const safe = (s) => s.replace(/[^a-zA-Z0-9._/-]/g, '-');
|
||||||
const suffix = runId ? `-${runId}` : '';
|
const suffix = runId ? `-${runId}` : '';
|
||||||
// 截斷主體長度,避免 target/source 過長使分支名稱超出 Git 限制
|
// 截斷主體長度,避免 target/source 過長使分支名稱超出 Git 限制
|
||||||
const stem = `${safe(target)}-into-${safe(source)}`.slice(0, 180);
|
const stem = `${safe(target)}-into-${safe(source)}`.slice(0, MAX_BRANCH_STEM_LENGTH);
|
||||||
return `resolve-conflict/${stem}${suffix}`;
|
return `resolve-conflict/${stem}${suffix}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+5
-1
@@ -92,7 +92,11 @@ export class OpenCode {
|
|||||||
);
|
);
|
||||||
|
|
||||||
if (result.status !== 0) {
|
if (result.status !== 0) {
|
||||||
log.warn(`opencode 執行失敗 (${result.status}):${maskSecrets(result.stderr).slice(0, 500)}`);
|
const stderr = maskSecrets(result.stderr);
|
||||||
|
const shown = stderr.length > 2000
|
||||||
|
? `${stderr.slice(0, 2000)}\n…(錯誤訊息過長,已截斷,僅顯示前 2000 字元)`
|
||||||
|
: stderr;
|
||||||
|
log.warn(`opencode 執行失敗 (${result.status}):${shown}`);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user