feat(vscode): 改动说明 profile 可配置

This commit is contained in:
2026-08-28 06:38:02 +08:00
parent 77037924ef
commit 443a8e472a
14 changed files with 137 additions and 37 deletions
+1
View File
@@ -533,6 +533,7 @@ export function App() {
initialImplTabPostCloseScript={settings?.implTabPostCloseScript ?? ''}
initialConflictResolutionProfilePath={settings?.conflictResolutionProfilePath ?? ''}
initialCommitProfilePath={settings?.commitProfilePath ?? ''}
initialPrDiffSummaryProfilePath={settings?.prDiffSummaryProfilePath ?? ''}
initialCodexModel={settings?.codexModel ?? ''}
initialCodexReasoningEffort={settings?.codexReasoningEffort ?? ''}
initialProfilesDirectory={settings?.profilesDirectory ?? ''}
@@ -36,6 +36,7 @@ interface SubmitValues {
implTabPostCloseScript: string
conflictResolutionProfilePath: string
commitProfilePath: string
prDiffSummaryProfilePath: string
codexModel: string
codexReasoningEffort: string
profilesDirectory: string
@@ -82,6 +83,7 @@ export interface SettingsModalProps {
initialImplTabPostCloseScript: string
initialConflictResolutionProfilePath: string
initialCommitProfilePath: string
initialPrDiffSummaryProfilePath: string
initialCodexModel: string
initialCodexReasoningEffort: string
initialProfilesDirectory: string
@@ -164,6 +166,7 @@ export function SettingsModal({
initialImplTabPostCloseScript,
initialConflictResolutionProfilePath,
initialCommitProfilePath,
initialPrDiffSummaryProfilePath,
initialCodexModel,
initialCodexReasoningEffort,
initialProfilesDirectory,
@@ -198,6 +201,7 @@ export function SettingsModal({
const [implTabPostCloseScript, setImplTabPostCloseScript] = useState(initialImplTabPostCloseScript)
const [conflictResolutionProfilePath, setConflictResolutionProfilePath] = useState(initialConflictResolutionProfilePath)
const [commitProfilePath, setCommitProfilePath] = useState(initialCommitProfilePath)
const [prDiffSummaryProfilePath, setPrDiffSummaryProfilePath] = useState(initialPrDiffSummaryProfilePath)
const [codexModel, setCodexModel] = useState(initialCodexModel)
const [codexReasoningEffort, setCodexReasoningEffort] = useState(initialCodexReasoningEffort)
const [profilesDirectory, setProfilesDirectory] = useState(initialProfilesDirectory)
@@ -234,6 +238,7 @@ export function SettingsModal({
setImplTabPostCloseScript(initialImplTabPostCloseScript)
setConflictResolutionProfilePath(initialConflictResolutionProfilePath)
setCommitProfilePath(initialCommitProfilePath)
setPrDiffSummaryProfilePath(initialPrDiffSummaryProfilePath)
setCodexModel(initialCodexModel)
setCodexReasoningEffort(initialCodexReasoningEffort)
setProfilesDirectory(initialProfilesDirectory)
@@ -324,6 +329,7 @@ export function SettingsModal({
conflictResolutionProfilePath: conflictResolutionProfilePath.trim(),
// 提交代码 profile:空串 = 未配置 → 提交严格失败
commitProfilePath: commitProfilePath.trim(),
prDiffSummaryProfilePath: prDiffSummaryProfilePath.trim(),
// codex 模型 / 思考级别:trim 后留空 = 用 codex config.toml 默认
codexModel: codexModel.trim(),
codexReasoningEffort: codexReasoningEffort.trim(),
@@ -528,6 +534,30 @@ export function SettingsModal({
/>
</Field>
<Field
label="改动说明 profile"
hint={(
<>
tab PR 使 profile退
</>
)}
>
<SelectMenu
value={prDiffSummaryProfilePath}
onChange={setPrDiffSummaryProfilePath}
variant="input"
className={inputClass}
options={[
{ value: '', label: '(未配置)' },
...profiles.map(p => ({ value: p.path, label: p.name })),
...(prDiffSummaryProfilePath
&& !profiles.some(p => p.path === prDiffSummaryProfilePath)
? [{ value: prDiffSummaryProfilePath, label: `自定义:${prDiffSummaryProfilePath}` }]
: []),
]}
/>
</Field>
<Field
label="codex 模型"
hint={(
@@ -32,7 +32,7 @@ interface FileDiffPaneProps {
summary: string | undefined
/** 是否正在为当前文件生成说明。 */
generating: boolean
/** 触发 deepseek 生成当前文件说明。 */
/** 触发生成本文件改动说明。 */
onGenerate: () => void
/** 统一 / 分栏;由父级从 workspaceState 拉并持久化。 */
mode: DiffModeEnum
@@ -158,12 +158,12 @@ export function FileDiffPane({
>
<Check className="size-3.5" />
</button>
{/* 一键调 deepseek 生成本文件改动说明 */}
{/* 一键生成本文件改动说明 */}
<button
type="button"
onClick={onGenerate}
disabled={generating}
title={generating ? '生成中…' : '用 deepseek 生成本文件改动说明'}
title={generating ? '生成中…' : '生成本文件改动说明'}
className="shrink-0 text-[var(--vscode-descriptionForeground)] hover:text-[var(--vscode-foreground)] disabled:opacity-60"
>
{generating ? <Loader2 className="size-3.5 animate-spin" /> : <Sparkles className="size-3.5" />}
+4
View File
@@ -54,6 +54,7 @@ export interface SettingsValues {
implTabPostCloseScript: string
conflictResolutionProfilePath: string
commitProfilePath: string
prDiffSummaryProfilePath: string
codexModel: string
codexReasoningEffort: string
profilesDirectory: string
@@ -86,6 +87,7 @@ export interface SettingsOverlayState {
implTabPostCloseScript: string
conflictResolutionProfilePath: string
commitProfilePath: string
prDiffSummaryProfilePath: string
codexModel: string
codexReasoningEffort: string
profilesDirectory: string
@@ -377,6 +379,7 @@ export function useIssues(): UseIssuesResult {
implTabPostCloseScript: values.implTabPostCloseScript,
conflictResolutionProfilePath: values.conflictResolutionProfilePath,
commitProfilePath: values.commitProfilePath,
prDiffSummaryProfilePath: values.prDiffSummaryProfilePath,
codexModel: values.codexModel,
codexReasoningEffort: values.codexReasoningEffort,
profilesDirectory: values.profilesDirectory,
@@ -763,6 +766,7 @@ export function useIssues(): UseIssuesResult {
implTabPostCloseScript: msg.implTabPostCloseScript,
conflictResolutionProfilePath: msg.conflictResolutionProfilePath,
commitProfilePath: msg.commitProfilePath,
prDiffSummaryProfilePath: msg.prDiffSummaryProfilePath,
codexModel: msg.codexModel,
codexReasoningEffort: msg.codexReasoningEffort,
profilesDirectory: msg.profilesDirectory,
+2
View File
@@ -98,6 +98,7 @@ export type ExtensionToWebview
implTabPostCloseScript: string
conflictResolutionProfilePath: string
commitProfilePath: string
prDiffSummaryProfilePath: string
codexModel: string
codexReasoningEffort: string
profilesDirectory: string
@@ -169,6 +170,7 @@ export type WebviewToExtension
implTabPostCloseScript: string
conflictResolutionProfilePath: string
commitProfilePath: string
prDiffSummaryProfilePath: string
codexModel: string
codexReasoningEffort: string
profilesDirectory: string