feat: add Discuss and Explore subagents for dynamic critique and code exploration

- Implement Discuss Subagent for multi-perspective critique with dynamic perspectives.
- Create Explore Subagent for shared codebase exploration with centralized caching.
- Add tests for CcwToolsMcpCard component to ensure enabled tools are preserved on config save.
- Introduce SessionPreviewPanel component for previewing and selecting sessions for Memory V2 extraction.
- Develop CommandCreateDialog component for creating/importing commands with import and CLI generate modes.
This commit is contained in:
catlog22
2026-02-27 17:25:52 +08:00
parent 3db74cc7b0
commit 3b92bfae8c
45 changed files with 6508 additions and 128 deletions

View File

@@ -74,7 +74,8 @@
"categories": {
"notification": "Notification",
"indexing": "Indexing",
"automation": "Automation"
"automation": "Automation",
"utility": "Utility"
},
"templates": {
"session-start-notify": {
@@ -116,6 +117,30 @@
"project-state-inject": {
"name": "Project State Inject",
"description": "Inject project guidelines and recent dev history at session start"
},
"memory-v2-extract": {
"name": "Memory V2 Extract",
"description": "Trigger Phase 1 extraction when session ends (after idle period)"
},
"memory-v2-auto-consolidate": {
"name": "Memory V2 Auto Consolidate",
"description": "Trigger Phase 2 consolidation after extraction jobs complete"
},
"memory-sync-dashboard": {
"name": "Memory Sync Dashboard",
"description": "Sync memory V2 status to dashboard on changes"
},
"memory-auto-compress": {
"name": "Auto Memory Compress",
"description": "Automatically compress memory when entries exceed threshold"
},
"memory-preview-extract": {
"name": "Memory Preview & Extract",
"description": "Preview extraction queue and extract eligible sessions"
},
"memory-status-check": {
"name": "Memory Status Check",
"description": "Check memory extraction and consolidation status"
}
},
"actions": {

View File

@@ -10,7 +10,8 @@
"collapseAll": "Collapse All",
"copy": "Copy",
"showDisabled": "Show Disabled",
"hideDisabled": "Hide Disabled"
"hideDisabled": "Hide Disabled",
"cancel": "Cancel"
},
"source": {
"builtin": "Built-in",
@@ -57,5 +58,45 @@
"clickToDisableAll": "Click to disable all",
"noCommands": "No commands in this group",
"noEnabledCommands": "No enabled commands in this group"
},
"create": {
"title": "Create Command",
"location": "Location",
"locationProject": "Project Commands",
"locationProjectHint": ".claude/commands/",
"locationUser": "Global Commands",
"locationUserHint": "~/.claude/commands/",
"mode": "Creation Mode",
"modeImport": "Import File",
"modeImportHint": "Import command from existing file",
"modeGenerate": "AI Generate",
"modeGenerateHint": "Generate command using AI",
"sourcePath": "Source File Path",
"sourcePathPlaceholder": "Enter absolute path to command file",
"sourcePathHint": "File must be a valid command markdown file",
"customName": "Custom Name",
"customNamePlaceholder": "Leave empty to use original name",
"customNameHint": "Optional, overrides default command name",
"commandName": "Command Name",
"commandNamePlaceholder": "Enter command name",
"commandNameHint": "Used as the command file name",
"descriptionLabel": "Command Description",
"descriptionPlaceholder": "Describe what this command should do...",
"descriptionHint": "AI will generate command content based on this description",
"generateInfo": "AI will use CLI tools to generate the command",
"generateTimeHint": "Generation may take some time",
"validate": "Validate",
"import": "Import",
"generate": "Generate",
"validating": "Validating...",
"validCommand": "Validation passed",
"invalidCommand": "Validation failed",
"creating": "Creating...",
"created": "Command \"{name}\" created successfully",
"createError": "Failed to create command",
"sourcePathRequired": "Please enter source file path",
"commandNameRequired": "Please enter command name",
"descriptionRequired": "Please enter command description",
"validateFirst": "Please validate the command file first"
}
}

View File

@@ -169,6 +169,10 @@
"saveConfig": "Save Configuration",
"saving": "Saving..."
},
"feedback": {
"saveSuccess": "Configuration saved",
"saveError": "Failed to save configuration"
},
"scope": {
"global": "Global",
"project": "Project",

View File

@@ -180,6 +180,28 @@
"statusBanner": {
"running": "Pipeline Running - {count} job(s) in progress",
"hasErrors": "Pipeline Idle - {count} job(s) failed"
},
"preview": {
"title": "Extraction Queue Preview",
"selectSessions": "Search sessions...",
"sourceCcw": "CCW",
"sourceNative": "Native",
"selectAll": "Select All",
"selectNone": "Select None",
"extractSelected": "Extract Selected ({count})",
"noSessions": "No sessions found",
"total": "Total",
"eligible": "Eligible",
"extracted": "Already Extracted",
"ready": "Ready",
"previewQueue": "Preview Queue",
"includeNative": "Include Native Sessions",
"selected": "{count} sessions selected",
"selectHint": "Select sessions to extract",
"ineligible": "Ineligible"
},
"extraction": {
"selectiveTriggered": "Selective extraction triggered"
}
}
}

View File

@@ -74,7 +74,8 @@
"categories": {
"notification": "通知",
"indexing": "索引",
"automation": "自动化"
"automation": "自动化",
"utility": "实用工具"
},
"templates": {
"session-start-notify": {
@@ -116,6 +117,30 @@
"project-state-inject": {
"name": "项目状态注入",
"description": "会话启动时注入项目约束和最近开发历史"
},
"memory-v2-extract": {
"name": "Memory V2 提取",
"description": "会话结束时触发第一阶段提取(空闲期后)"
},
"memory-v2-auto-consolidate": {
"name": "Memory V2 自动合并",
"description": "提取作业完成后触发第二阶段合并"
},
"memory-sync-dashboard": {
"name": "Memory 同步仪表盘",
"description": "变更时同步 Memory V2 状态到仪表盘"
},
"memory-auto-compress": {
"name": "自动内存压缩",
"description": "当条目超过阈值时自动压缩内存"
},
"memory-preview-extract": {
"name": "内存预览与提取",
"description": "预览提取队列并提取符合条件的会话"
},
"memory-status-check": {
"name": "内存状态检查",
"description": "检查内存提取和合并状态"
}
},
"actions": {

View File

@@ -10,7 +10,8 @@
"collapseAll": "全部收起",
"copy": "复制",
"showDisabled": "显示已禁用",
"hideDisabled": "隐藏已禁用"
"hideDisabled": "隐藏已禁用",
"cancel": "取消"
},
"source": {
"builtin": "内置",
@@ -57,5 +58,45 @@
"clickToDisableAll": "点击全部禁用",
"noCommands": "此分组中没有命令",
"noEnabledCommands": "此分组中没有已启用的命令"
},
"create": {
"title": "创建命令",
"location": "存储位置",
"locationProject": "项目命令",
"locationProjectHint": ".claude/commands/",
"locationUser": "全局命令",
"locationUserHint": "~/.claude/commands/",
"mode": "创建方式",
"modeImport": "导入文件",
"modeImportHint": "从现有文件导入命令",
"modeGenerate": "AI 生成",
"modeGenerateHint": "使用 AI 生成命令",
"sourcePath": "源文件路径",
"sourcePathPlaceholder": "输入命令文件的绝对路径",
"sourcePathHint": "文件必须是有效的命令 Markdown 文件",
"customName": "自定义名称",
"customNamePlaceholder": "留空则使用原始名称",
"customNameHint": "可选,覆盖默认命令名称",
"commandName": "命令名称",
"commandNamePlaceholder": "输入命令名称",
"commandNameHint": "用作命令文件名称",
"descriptionLabel": "命令描述",
"descriptionPlaceholder": "描述这个命令应该做什么...",
"descriptionHint": "AI 将根据描述生成命令内容",
"generateInfo": "AI 将使用 CLI 工具生成命令",
"generateTimeHint": "生成过程可能需要一些时间",
"validate": "验证",
"import": "导入",
"generate": "生成",
"validating": "验证中...",
"validCommand": "验证通过",
"invalidCommand": "验证失败",
"creating": "创建中...",
"created": "命令 \"{name}\" 创建成功",
"createError": "创建命令失败",
"sourcePathRequired": "请输入源文件路径",
"commandNameRequired": "请输入命令名称",
"descriptionRequired": "请输入命令描述",
"validateFirst": "请先验证命令文件"
}
}

View File

@@ -169,6 +169,10 @@
"saveConfig": "保存配置",
"saving": "保存中..."
},
"feedback": {
"saveSuccess": "配置已保存",
"saveError": "保存配置失败"
},
"scope": {
"global": "全局",
"project": "项目",

View File

@@ -180,6 +180,28 @@
"statusBanner": {
"running": "Pipeline 运行中 - {count} 个作业正在执行",
"hasErrors": "Pipeline 空闲 - {count} 个作业失败"
},
"preview": {
"title": "提取队列预览",
"selectSessions": "搜索会话...",
"sourceCcw": "CCW",
"sourceNative": "原生",
"selectAll": "全选",
"selectNone": "取消全选",
"extractSelected": "提取选中 ({count})",
"noSessions": "未找到会话",
"total": "总计",
"eligible": "符合条件",
"extracted": "已提取",
"ready": "就绪",
"previewQueue": "预览队列",
"includeNative": "包含原生会话",
"selected": "已选择 {count} 个会话",
"selectHint": "选择要提取的会话",
"ineligible": "不符合条件"
},
"extraction": {
"selectiveTriggered": "选择性提取已触发"
}
}
}