✨ feat(vscode): 头脑风暴 profile 独立 + codex 命令统一组装收尾

- 头脑风暴/实施/测试会话 profile 彻底独立,互不回退,各自空值回落默认
- 新建工单弹窗的 profile 选择改为头脑风暴专用 brainstormProfilePath
- 详情面板新增「头脑风暴配置文件」下拉
- 删除从未接线的死代码 reviewFlow.ts(runReview 全仓库无调用方)
- codexCommand 精简为仅 resume/interactive 两种终端命令形态
- 版本号 0.2.55 → 0.2.60
This commit is contained in:
cruldra committed 2026-07-13 07:50:39 +08:00
1 parent 5188c23765
commit b585016cd7
22 files changed
+258 -366

No files matched your search

@@ -33,7 +33,7 @@ export interface ClaudeProfile {
interface Props {
open: boolean
onCancel: () => void
onSubmit: (userRequest: string, images: PastedImage[], profilePath?: string) => void
onSubmit: (userRequest: string, images: PastedImage[], brainstormProfilePath?: string) => void
profiles: ClaudeProfile[]
defaultProfileName?: string
}
@@ -55,13 +55,10 @@ export function NewIssueModal({ open, onCancel, onSubmit, profiles, defaultProfi
setSelectedProfile(null)
return
}
// Pick default profile when the modal opens. Prefer the one matching
// `defaultProfileName`, otherwise fall back to the first alphabetically.
if (profiles.length > 0) {
const match = defaultProfileName
? profiles.find(p => p.name === defaultProfileName)
: undefined
setSelectedProfile(match ? match.name : profiles[0].name)
// 默认不预选 profile(空 = 系统默认);仅当显式传入 defaultProfileName 时预选。
if (profiles.length > 0 && defaultProfileName) {
const match = profiles.find(p => p.name === defaultProfileName)
setSelectedProfile(match ? match.name : null)
}
else {
setSelectedProfile(null)
@@ -208,7 +205,7 @@ export function NewIssueModal({ open, onCancel, onSubmit, profiles, defaultProfi
function handleSubmit(): void {
if (!canSubmit)
return
const profilePath = selectedProfile
const brainstormProfilePath = selectedProfile
? profiles.find(p => p.name === selectedProfile)?.path
: undefined
const pending = [...pastedTexts]
@@ -224,7 +221,7 @@ export function NewIssueModal({ open, onCancel, onSubmit, profiles, defaultProfi
onSubmit(
finalRequest,
images.map(({ mediaType, base64, previewDataUrl }) => ({ mediaType, base64, previewDataUrl })),
profilePath,
brainstormProfilePath,
)
}
@@ -248,8 +245,19 @@ export function NewIssueModal({ open, onCancel, onSubmit, profiles, defaultProfi
{profiles.length > 0 && (
<fieldset className="mb-3 border-0 p-0">
<legend className="mb-1 text-xs opacity-70">配置文件</legend>
<legend className="mb-1 text-xs opacity-70">头脑风暴配置文件</legend>
<div className="flex flex-wrap gap-3 text-xs">
<label className="flex cursor-pointer items-center gap-1">
<input
type="radio"
name="claude-profile"
value=""
checked={selectedProfile === null}
onChange={() => setSelectedProfile(null)}
className="accent-[var(--vscode-focusBorder)]"
/>
<span>(默认)</span>
</label>
{profiles.map(p => (
<label key={p.name} className="flex cursor-pointer items-center gap-1">
<input