feat(vscode): 冲突解决会话 profile 可在设置面板配置

This commit is contained in:
2026-07-09 08:41:58 +08:00
parent 38f15a6fe1
commit 7b4f737ce5
10 changed files with 85 additions and 17 deletions
+2
View File
@@ -452,10 +452,12 @@ export function App() {
initialWorktreePreRemoveScript={settings?.worktreePreRemoveScript ?? ''}
initialImplTabPreCreateScript={settings?.implTabPreCreateScript ?? ''}
initialImplTabPostCloseScript={settings?.implTabPostCloseScript ?? ''}
initialConflictResolutionProfilePath={settings?.conflictResolutionProfilePath ?? ''}
initialYoutrackBaseUrl={settings?.youtrackBaseUrl ?? ''}
initialYoutrackProjectShortName={settings?.youtrackProjectShortName ?? ''}
initialYoutrackCloseCommand={settings?.youtrackCloseCommand ?? ''}
initialYoutrackTokenSaved={settings?.youtrackTokenSaved ?? false}
profiles={profiles}
youtrackProjects={youtrackProjects}
onListYouTrackProjects={listYouTrackProjects}
onSubmit={saveSettings}
@@ -10,6 +10,7 @@
import type { ReactElement } from 'react'
import { useEffect, useState } from 'react'
import { X } from 'lucide-react'
import type { ClaudeProfile } from '../hooks/useIssues'
type GroupKey = 'auth' | 'network' | 'youtrack' | 'prompts' | 'hooks'
@@ -30,6 +31,7 @@ interface SubmitValues {
worktreePreRemoveScript: string
implTabPreCreateScript: string
implTabPostCloseScript: string
conflictResolutionProfilePath: string
youtrackBaseUrl: string
youtrackProjectShortName: string
youtrackCloseCommand: string
@@ -69,10 +71,12 @@ export interface SettingsModalProps {
initialWorktreePreRemoveScript: string
initialImplTabPreCreateScript: string
initialImplTabPostCloseScript: string
initialConflictResolutionProfilePath: string
initialYoutrackBaseUrl: string
initialYoutrackProjectShortName: string
initialYoutrackCloseCommand: string
initialYoutrackTokenSaved: boolean
profiles: ClaudeProfile[]
youtrackProjects: YouTrackProjectsState
onListYouTrackProjects: (baseUrl: string, token: string) => void
onSubmit: (values: SubmitValues) => void
@@ -141,10 +145,12 @@ export function SettingsModal({
initialWorktreePreRemoveScript,
initialImplTabPreCreateScript,
initialImplTabPostCloseScript,
initialConflictResolutionProfilePath,
initialYoutrackBaseUrl,
initialYoutrackProjectShortName,
initialYoutrackCloseCommand,
initialYoutrackTokenSaved,
profiles,
youtrackProjects,
onListYouTrackProjects,
onSubmit,
@@ -167,6 +173,7 @@ export function SettingsModal({
const [worktreePreRemoveScript, setWorktreePreRemoveScript] = useState(initialWorktreePreRemoveScript)
const [implTabPreCreateScript, setImplTabPreCreateScript] = useState(initialImplTabPreCreateScript)
const [implTabPostCloseScript, setImplTabPostCloseScript] = useState(initialImplTabPostCloseScript)
const [conflictResolutionProfilePath, setConflictResolutionProfilePath] = useState(initialConflictResolutionProfilePath)
const [youtrackBaseUrl, setYoutrackBaseUrl] = useState(initialYoutrackBaseUrl)
const [youtrackProjectShortName, setYoutrackProjectShortName] = useState(initialYoutrackProjectShortName)
const [youtrackCloseCommand, setYoutrackCloseCommand] = useState(initialYoutrackCloseCommand)
@@ -189,10 +196,14 @@ export function SettingsModal({
setReviewPrompt(initialReviewPrompt)
setDevBranch(initialDevBranch)
setAutoBuildBranch(initialAutoBuildBranch)
setWorktreeDirectory(initialWorktreeDirectory)
setWorktreeOpenWith(initialWorktreeOpenWith)
setPycharmCommand(initialPycharmCommand)
setWorktreePostCreateScript(initialWorktreePostCreateScript)
setWorktreePreRemoveScript(initialWorktreePreRemoveScript)
setImplTabPreCreateScript(initialImplTabPreCreateScript)
setImplTabPostCloseScript(initialImplTabPostCloseScript)
setConflictResolutionProfilePath(initialConflictResolutionProfilePath)
setYoutrackBaseUrl(initialYoutrackBaseUrl)
setYoutrackProjectShortName(initialYoutrackProjectShortName)
setYoutrackCloseCommand(initialYoutrackCloseCommand)
@@ -274,6 +285,8 @@ export function SettingsModal({
worktreePreRemoveScript: worktreePreRemoveScript.trim(),
implTabPreCreateScript: implTabPreCreateScript.trim(),
implTabPostCloseScript: implTabPostCloseScript.trim(),
// 冲突解决 profile:空串 = 用 DEFAULT_PROFILE_PATH
conflictResolutionProfilePath: conflictResolutionProfilePath.trim(),
youtrackBaseUrl: youtrackBaseUrl.trim(),
youtrackProjectShortName: youtrackProjectShortName.trim(),
youtrackCloseCommand: youtrackCloseCommand.trim(),
@@ -424,6 +437,32 @@ export function SettingsModal({
className={inputClass}
/>
</Field>
<Field
label="冲突解决配置文件"
hint={(
<>
PR main/dev 使 profile official
</>
)}
>
<select
value={conflictResolutionProfilePath}
onChange={e => setConflictResolutionProfilePath(e.target.value)}
className={inputClass}
>
<option value=""></option>
{profiles.map(p => (
<option key={p.path} value={p.path}>{p.name}</option>
))}
{conflictResolutionProfilePath
&& !profiles.some(p => p.path === conflictResolutionProfilePath) && (
<option value={conflictResolutionProfilePath}>
{`自定义:${conflictResolutionProfilePath}`}
</option>
)}
</select>
</Field>
</>
)}
+4
View File
@@ -40,6 +40,7 @@ export interface SettingsValues {
worktreePreRemoveScript: string
implTabPreCreateScript: string
implTabPostCloseScript: string
conflictResolutionProfilePath: string
youtrackBaseUrl: string
youtrackProjectShortName: string
youtrackCloseCommand: string
@@ -65,6 +66,7 @@ export interface SettingsOverlayState {
worktreePreRemoveScript: string
implTabPreCreateScript: string
implTabPostCloseScript: string
conflictResolutionProfilePath: string
youtrackBaseUrl: string
youtrackProjectShortName: string
youtrackCloseCommand: string
@@ -278,6 +280,7 @@ export function useIssues(): UseIssuesResult {
worktreePreRemoveScript: values.worktreePreRemoveScript,
implTabPreCreateScript: values.implTabPreCreateScript,
implTabPostCloseScript: values.implTabPostCloseScript,
conflictResolutionProfilePath: values.conflictResolutionProfilePath,
youtrackBaseUrl: values.youtrackBaseUrl,
youtrackProjectShortName: values.youtrackProjectShortName,
youtrackCloseCommand: values.youtrackCloseCommand,
@@ -606,6 +609,7 @@ export function useIssues(): UseIssuesResult {
worktreePreRemoveScript: msg.worktreePreRemoveScript,
implTabPreCreateScript: msg.implTabPreCreateScript,
implTabPostCloseScript: msg.implTabPostCloseScript,
conflictResolutionProfilePath: msg.conflictResolutionProfilePath,
youtrackBaseUrl: msg.youtrackBaseUrl ?? '',
youtrackProjectShortName: msg.youtrackProjectShortName ?? '',
youtrackCloseCommand: msg.youtrackCloseCommand ?? '',
+2
View File
@@ -81,6 +81,7 @@ export type ExtensionToWebview
worktreePreRemoveScript: string
implTabPreCreateScript: string
implTabPostCloseScript: string
conflictResolutionProfilePath: string
youtrackBaseUrl?: string
youtrackProjectShortName?: string
youtrackCloseCommand?: string
@@ -142,6 +143,7 @@ export type WebviewToExtension
worktreePreRemoveScript: string
implTabPreCreateScript: string
implTabPostCloseScript: string
conflictResolutionProfilePath: string
youtrackBaseUrl: string
youtrackProjectShortName: string
youtrackCloseCommand: string