feat(vscode): 设置面板可配置 Claude profiles 目录并修正探测顺序

This commit is contained in:
2026-07-23 21:52:53 +08:00
parent a3e557f9ee
commit 7c67d220db
13 changed files with 335 additions and 35 deletions
+1
View File
@@ -460,6 +460,7 @@ export function App() {
initialConflictResolutionProfilePath={settings?.conflictResolutionProfilePath ?? ''}
initialCodexModel={settings?.codexModel ?? ''}
initialCodexReasoningEffort={settings?.codexReasoningEffort ?? ''}
initialProfilesDirectory={settings?.profilesDirectory ?? ''}
initialYoutrackBaseUrl={settings?.youtrackBaseUrl ?? ''}
initialYoutrackProjectShortName={settings?.youtrackProjectShortName ?? ''}
initialYoutrackCloseCommand={settings?.youtrackCloseCommand ?? ''}
@@ -34,6 +34,7 @@ interface SubmitValues {
conflictResolutionProfilePath: string
codexModel: string
codexReasoningEffort: string
profilesDirectory: string
youtrackBaseUrl: string
youtrackProjectShortName: string
youtrackCloseCommand: string
@@ -76,6 +77,7 @@ export interface SettingsModalProps {
initialConflictResolutionProfilePath: string
initialCodexModel: string
initialCodexReasoningEffort: string
initialProfilesDirectory: string
initialYoutrackBaseUrl: string
initialYoutrackProjectShortName: string
initialYoutrackCloseCommand: string
@@ -152,6 +154,7 @@ export function SettingsModal({
initialConflictResolutionProfilePath,
initialCodexModel,
initialCodexReasoningEffort,
initialProfilesDirectory,
initialYoutrackBaseUrl,
initialYoutrackProjectShortName,
initialYoutrackCloseCommand,
@@ -182,6 +185,7 @@ export function SettingsModal({
const [conflictResolutionProfilePath, setConflictResolutionProfilePath] = useState(initialConflictResolutionProfilePath)
const [codexModel, setCodexModel] = useState(initialCodexModel)
const [codexReasoningEffort, setCodexReasoningEffort] = useState(initialCodexReasoningEffort)
const [profilesDirectory, setProfilesDirectory] = useState(initialProfilesDirectory)
const [youtrackBaseUrl, setYoutrackBaseUrl] = useState(initialYoutrackBaseUrl)
const [youtrackProjectShortName, setYoutrackProjectShortName] = useState(initialYoutrackProjectShortName)
const [youtrackCloseCommand, setYoutrackCloseCommand] = useState(initialYoutrackCloseCommand)
@@ -214,6 +218,7 @@ export function SettingsModal({
setConflictResolutionProfilePath(initialConflictResolutionProfilePath)
setCodexModel(initialCodexModel)
setCodexReasoningEffort(initialCodexReasoningEffort)
setProfilesDirectory(initialProfilesDirectory)
setYoutrackBaseUrl(initialYoutrackBaseUrl)
setYoutrackProjectShortName(initialYoutrackProjectShortName)
setYoutrackCloseCommand(initialYoutrackCloseCommand)
@@ -300,6 +305,8 @@ export function SettingsModal({
// codex 模型 / 思考级别:trim 后留空 = 用 codex config.toml 默认
codexModel: codexModel.trim(),
codexReasoningEffort: codexReasoningEffort.trim(),
// profiles 目录:trim 后留空 = 自动探测
profilesDirectory: profilesDirectory.trim(),
youtrackBaseUrl: youtrackBaseUrl.trim(),
youtrackProjectShortName: youtrackProjectShortName.trim(),
youtrackCloseCommand: youtrackCloseCommand.trim(),
@@ -559,6 +566,29 @@ export function SettingsModal({
<span className="opacity-80"></span>
</label>
</Field>
<Field
label="Claude profiles 目录"
hint={(
<>
claude --settings .json
{' '}
<code>~/Sources/cruldra-profile/claude-config/profiles</code>
{' '}
<code>~</code>
</>
)}
>
<input
type="text"
value={profilesDirectory}
onChange={e => setProfilesDirectory(e.target.value)}
placeholder="~/Sources/cruldra-profile/claude-config/profiles"
className={inputClass}
/>
</Field>
</>
)}
+4
View File
@@ -43,6 +43,7 @@ export interface SettingsValues {
conflictResolutionProfilePath: string
codexModel: string
codexReasoningEffort: string
profilesDirectory: string
youtrackBaseUrl: string
youtrackProjectShortName: string
youtrackCloseCommand: string
@@ -71,6 +72,7 @@ export interface SettingsOverlayState {
conflictResolutionProfilePath: string
codexModel: string
codexReasoningEffort: string
profilesDirectory: string
youtrackBaseUrl: string
youtrackProjectShortName: string
youtrackCloseCommand: string
@@ -290,6 +292,7 @@ export function useIssues(): UseIssuesResult {
conflictResolutionProfilePath: values.conflictResolutionProfilePath,
codexModel: values.codexModel,
codexReasoningEffort: values.codexReasoningEffort,
profilesDirectory: values.profilesDirectory,
youtrackBaseUrl: values.youtrackBaseUrl,
youtrackProjectShortName: values.youtrackProjectShortName,
youtrackCloseCommand: values.youtrackCloseCommand,
@@ -635,6 +638,7 @@ export function useIssues(): UseIssuesResult {
conflictResolutionProfilePath: msg.conflictResolutionProfilePath,
codexModel: msg.codexModel,
codexReasoningEffort: msg.codexReasoningEffort,
profilesDirectory: msg.profilesDirectory,
youtrackBaseUrl: msg.youtrackBaseUrl ?? '',
youtrackProjectShortName: msg.youtrackProjectShortName ?? '',
youtrackCloseCommand: msg.youtrackCloseCommand ?? '',
+2
View File
@@ -84,6 +84,7 @@ export type ExtensionToWebview
conflictResolutionProfilePath: string
codexModel: string
codexReasoningEffort: string
profilesDirectory: string
youtrackBaseUrl?: string
youtrackProjectShortName?: string
youtrackCloseCommand?: string
@@ -148,6 +149,7 @@ export type WebviewToExtension
conflictResolutionProfilePath: string
codexModel: string
codexReasoningEffort: string
profilesDirectory: string
youtrackBaseUrl: string
youtrackProjectShortName: string
youtrackCloseCommand: string