fix(ai-pull-request): 遮蔽錯誤訊息 token、清理暫存設定、截斷分支名稱並改用 homedir
This commit is contained in:
+31
-26
@@ -1,6 +1,6 @@
|
||||
import { writeFileSync, mkdtempSync } from 'node:fs';
|
||||
import { tmpdir } from 'node:os';
|
||||
import { join } from 'node:path';
|
||||
import { writeFileSync, mkdtempSync, rmSync } from 'node:fs';
|
||||
import { tmpdir, homedir } from 'node:os';
|
||||
import { join, dirname } from 'node:path';
|
||||
import { run, log, maskSecrets } from './util.js';
|
||||
|
||||
/**
|
||||
@@ -74,33 +74,38 @@ export class OpenCode {
|
||||
const configPath = this._writeConfig();
|
||||
const prompt = buildPrompt({ ...ctx, language: this.language });
|
||||
|
||||
log.info(`呼叫 opencode(${this.provider}/${this.model})分析 diff...`);
|
||||
const result = run(
|
||||
'opencode',
|
||||
['run', '--model', `${this.provider}/${this.model}`, prompt],
|
||||
{
|
||||
cwd: tmpdir(),
|
||||
env: {
|
||||
...process.env,
|
||||
OPENCODE_CONFIG: configPath,
|
||||
// 確保 opencode 有可寫的 HOME / 設定目錄
|
||||
HOME: process.env.HOME || '/root',
|
||||
try {
|
||||
log.info(`呼叫 opencode(${this.provider}/${this.model})分析 diff...`);
|
||||
const result = run(
|
||||
'opencode',
|
||||
['run', '--model', `${this.provider}/${this.model}`, prompt],
|
||||
{
|
||||
cwd: tmpdir(),
|
||||
env: {
|
||||
...process.env,
|
||||
OPENCODE_CONFIG: configPath,
|
||||
// 確保 opencode 有可寫的 HOME / 設定目錄
|
||||
HOME: process.env.HOME || homedir(),
|
||||
},
|
||||
timeout: 5 * 60 * 1000,
|
||||
},
|
||||
timeout: 5 * 60 * 1000,
|
||||
},
|
||||
);
|
||||
);
|
||||
|
||||
if (result.status !== 0) {
|
||||
log.warn(`opencode 執行失敗 (${result.status}):${maskSecrets(result.stderr).slice(0, 500)}`);
|
||||
return null;
|
||||
}
|
||||
if (result.status !== 0) {
|
||||
log.warn(`opencode 執行失敗 (${result.status}):${maskSecrets(result.stderr).slice(0, 500)}`);
|
||||
return null;
|
||||
}
|
||||
|
||||
const parsed = extractResult(result.stdout);
|
||||
if (!parsed) {
|
||||
log.warn('無法從 opencode 輸出解析出標題/描述');
|
||||
return null;
|
||||
const parsed = extractResult(result.stdout);
|
||||
if (!parsed) {
|
||||
log.warn('無法從 opencode 輸出解析出標題/描述');
|
||||
return null;
|
||||
}
|
||||
return parsed;
|
||||
} finally {
|
||||
// 清理 _writeConfig 建立的暫存設定目錄,避免堆積
|
||||
rmSync(dirname(configPath), { recursive: true, force: true });
|
||||
}
|
||||
return parsed;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user