♻️ refactor(vscode): PR 文件说明改为一句话概述改动

已缓存的 `.spx/pr-file-summaries.json` 旧长文不会自动刷新,需重新点  生成。
This commit is contained in:
2026-07-09 08:47:12 +08:00
parent 7b4f737ce5
commit aff99c57f3
+11 -7
View File
@@ -243,9 +243,8 @@ export async function handleSetPrReviewConfirmed(
}
/**
* 生成说明的 prompt:只问「为什么改 + 不改的后果」,明令禁止复述代码做了什么——
* 文件干了什么用户看代码即知,价值在意图与代价。首条垫入 PR 描述当背景并立下问法,
* 续会话只发新文件,复用已有 PR 理解、省 token。
* 生成说明的 prompt:只要一句「这个文件改了什么」,给审查者扫一眼用。
* 首条垫入 PR 描述当背景并立下问法;续会话只发新文件,复用已有 PR 理解、省 token。
*/
function buildSummaryPrompt(prNumber: number, prBody: string, filePath: string, patch: string, isFirst: boolean): string {
if (isFirst) {
@@ -253,13 +252,13 @@ function buildSummaryPrompt(prNumber: number, prBody: string, filePath: string,
const prContext = body
? `我在逐个审查 PR #${prNumber} 的改动,本 PR 的说明如下:\n${body}\n\n`
: `我在逐个审查 PR #${prNumber} 的改动。`
return `${prContext}针对下面这个文件的改动,用一句简短中文回答两点:① 为什么要做这个改动——它要解决什么问题、达成什么目的;② 不做这个改动会缺什么、有什么后果不要复述代码做了什么、不要罗列函数结构(这些我看代码就知道)。只输出这一两句结论\n\n文件: ${filePath}\n\n\`\`\`diff\n${patch}\n\`\`\``
return `${prContext}针对下面这个文件的改动,用一句简短中文说明改了什么 / 改了哪些东西。只输出这一句话,不要分点、不要 ①②、不要 markdown 加粗,不要解释为什么改、不要写不做的后果不要复述整段代码或罗列函数/结构。\n\n文件: ${filePath}\n\n\`\`\`diff\n${patch}\n\`\`\``
}
return `下一个文件,同样只回答两点:① 为什么改、要解决什么问题或达成什么目的;② 不做的后果。不要复述代码做了什么\n文件: ${filePath}\n\`\`\`diff\n${patch}\n\`\`\``
return `下一个文件,同样只用一句简短中文说明改了什么,不要分点、不要 ①②、不要解释为什么或后果\n文件: ${filePath}\n\`\`\`diff\n${patch}\n\`\`\``
}
/**
* 用 deepseek 给单个文件生成「为什么改 + 不改的后果」的改动说明。增量复用同一会话:首个文件开新会话并把
* 用 deepseek 给单个文件生成「一句话说明改了什么」的改动说明。增量复用同一会话:首个文件开新会话并把
* sessionId 记到 `.spx/pr-file-summaries.json`,后续文件 `--resume` 接上去,省去每次重新理解
* PR 的开销。说明也落盘,重载后仍显示。
*
@@ -333,7 +332,12 @@ export async function handleGeneratePrFileSummary(
})
}
const summary = result.resultText.trim().replace(/\s+/g, ' ')
// 模型偶发仍加 **①**/**②** → 轻量去标记;一句话约束主要靠 prompt
const summary = result.resultText
.trim()
.replace(/\s+/g, ' ')
.replace(/(?:\*{0,2}[①②]\*{0,2}\s*)+/g, '')
.trim()
await writeFileSummary(workspaceRoot, issueNumber, filePath, summary)
await writeSummarySession(workspaceRoot, issueNumber, result.sessionId)
panel.postMessage({ type: 'pr-file-summary/show', issueNumber, path: filePath, summary })