From aff99c57f3d08cfdb93def07e59e5b1186d465d3 Mon Sep 17 00:00:00 2001 From: cruldra Date: Thu, 9 Jul 2026 08:47:12 +0800 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20refactor(vscode):=20PR=20?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E8=AF=B4=E6=98=8E=E6=94=B9=E4=B8=BA=E4=B8=80?= =?UTF-8?q?=E5=8F=A5=E8=AF=9D=E6=A6=82=E8=BF=B0=E6=94=B9=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 已缓存的 `.spx/pr-file-summaries.json` 旧长文不会自动刷新,需重新点 ✨ 生成。 --- vscode/src/panel/handlers/prFiles.ts | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/vscode/src/panel/handlers/prFiles.ts b/vscode/src/panel/handlers/prFiles.ts index c321dbf..6420ba4 100644 --- a/vscode/src/panel/handlers/prFiles.ts +++ b/vscode/src/panel/handlers/prFiles.ts @@ -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 })