Loading...
Loading...
Compare original and translation side by side
--yes-y--yes-yundefinedundefinedundefinedundefinedStep 0: Session Setup
├─ Parse topic, flags (--depth, --continue, -y)
├─ Generate session ID: ANL-{slug}-{date}
└─ Create session folder (or detect existing → continue mode)
Step 1: Topic Understanding
├─ Parse topic, identify analysis dimensions
├─ Initial scoping with user (focus areas, perspectives, depth)
└─ Initialize discussion.md
Step 2: Exploration (Inline, No Agents)
├─ Detect codebase → search relevant modules, patterns
│ ├─ Read project-tech.json / project-guidelines.json (if exists)
│ └─ Use Grep, Glob, Read, mcp__ace-tool__search_context
├─ Multi-perspective analysis (if selected, serial)
│ ├─ Single: Comprehensive analysis
│ └─ Multi (≤4): Serial per-perspective analysis with synthesis
├─ Aggregate findings → explorations.json / perspectives.json
└─ Update discussion.md with Round 1
Step 3: Interactive Discussion (Multi-Round, max 5)
├─ Present exploration findings
├─ Gather user feedback
├─ Process response:
│ ├─ Deepen → deeper inline analysis in current direction
│ ├─ Adjust → new inline analysis with adjusted focus
│ ├─ Questions → direct answers with evidence
│ └─ Complete → exit loop for synthesis
├─ Update discussion.md with each round
└─ Repeat until user selects complete or max rounds
Step 4: Synthesis & Conclusion
├─ Consolidate all insights → conclusions.json
├─ Update discussion.md with final synthesis
└─ Offer options: quick execute / create issue / generate task / export / done
Step 5: Quick Execute (Optional - user selects)
├─ Convert conclusions.recommendations → tasks.jsonl (unified JSONL with convergence)
├─ Pre-execution analysis (dependencies, file conflicts, execution order)
├─ User confirmation
├─ Direct inline execution (Read/Edit/Write/Grep/Glob/Bash)
├─ Record events → execution-events.md, update execution.md
└─ Report completion summary步骤0:会话设置
├─ 解析主题、标志位(--depth, --continue, -y)
├─ 生成会话ID:ANL-{slug}-{date}
└─ 创建会话文件夹(或检测现有文件夹 → 进入继续模式)
步骤1:主题理解
├─ 解析主题,识别分析维度
├─ 与用户进行初始范围界定(重点领域、视角、深度)
└─ 初始化discussion.md
步骤2:探索(内联执行,无代理)
├─ 检测代码库 → 搜索相关模块、模式
│ ├─ 读取project-tech.json / project-guidelines.json(如果存在)
│ └─ 使用Grep、Glob、Read、mcp__ace-tool__search_context工具
├─ 多视角分析(如果已选择,串行执行)
│ ├─ 单视角:全面分析
│ └─ 多视角(≤4):按视角串行分析并进行综合
├─ 汇总发现 → 存入explorations.json / perspectives.json
└─ 在discussion.md中更新第一轮内容
步骤3:交互式讨论(多轮,最多5轮)
├─ 展示探索发现
├─ 收集用户反馈
├─ 处理响应:
│ ├─ 深化 → 沿当前方向进行更深入的内联分析
│ ├─ 调整 → 调整重点后进行新的内联分析
│ ├─ 提问 → 结合证据直接作答
│ └─ 完成 → 退出循环进入综合阶段
├─ 每轮讨论后更新discussion.md
└─ 重复直到用户选择完成或达到最大轮次
步骤4:综合与总结
├─ 整合所有见解 → 存入conclusions.json
├─ 在discussion.md中更新最终综合内容
└─ 提供选项:快速执行 / 创建Issue / 生成任务 / 导出报告 / 完成
步骤5:快速执行(可选)
├─ 将conclusions.recommendations转换为tasks.jsonl(带收敛条件的统一JSONL格式)
├─ 执行前分析(依赖项、文件冲突、执行顺序)
├─ 用户确认
├─ 直接内联执行(Read/Edit/Write/Grep/Glob/Bash)
├─ 记录事件 → 存入execution-events.md,更新execution.md
└─ 报告执行完成摘要| Flag | Default | Description |
|---|---|---|
| false | Auto-confirm all decisions |
| false | Continue existing session |
| standard | Analysis depth: quick / standard / deep |
ANL-{slug}-{YYYY-MM-DD}| 标志位 | 默认值 | 描述 |
|---|---|---|
| false | 自动确认所有决策 |
| false | 继续现有会话 |
| standard | 分析深度:quick / standard / deep |
ANL-{slug}-{YYYY-MM-DD}const getUtc8ISOString = () => new Date(Date.now() + 8 * 60 * 60 * 1000).toISOString()
// Parse flags
const autoYes = $ARGUMENTS.includes('--yes') || $ARGUMENTS.includes('-y')
const continueMode = $ARGUMENTS.includes('--continue')
const depthMatch = $ARGUMENTS.match(/--depth[=\s](quick|standard|deep)/)
const analysisDepth = depthMatch ? depthMatch[1] : 'standard'
// Extract topic
const topic = $ARGUMENTS.replace(/--yes|-y|--continue|--depth[=\s]\w+|TOPIC=/g, '').replace(/^["']|["']$/g, '').trim()
// Determine project root
const projectRoot = Bash('git rev-parse --show-toplevel 2>/dev/null || pwd').trim()
const slug = topic.toLowerCase().replace(/[^a-z0-9\u4e00-\u9fa5]+/g, '-').substring(0, 40)
const dateStr = getUtc8ISOString().substring(0, 10)
const sessionId = `ANL-${slug}-${dateStr}`
const sessionFolder = `${projectRoot}/.workflow/.analysis/${sessionId}`
// Auto-detect continue: session folder + discussion.md exists → continue mode
// If continue → load discussion.md + explorations, resume from last round
Bash(`mkdir -p ${sessionFolder}`)const getUtc8ISOString = () => new Date(Date.now() + 8 * 60 * 60 * 1000).toISOString()
// 解析标志位
const autoYes = $ARGUMENTS.includes('--yes') || $ARGUMENTS.includes('-y')
const continueMode = $ARGUMENTS.includes('--continue')
const depthMatch = $ARGUMENTS.match(/--depth[=\s](quick|standard|deep)/)
const analysisDepth = depthMatch ? depthMatch[1] : 'standard'
// 提取主题
const topic = $ARGUMENTS.replace(/--yes|-y|--continue|--depth[=\s]\w+|TOPIC=/g, '').replace(/^["']|["']$/g, '').trim()
// 确定项目根目录
const projectRoot = Bash('git rev-parse --show-toplevel 2>/dev/null || pwd').trim()
const slug = topic.toLowerCase().replace(/[^a-z0-9\u4e00-\u9fa5]+/g, '-').substring(0, 40)
const dateStr = getUtc8ISOString().substring(0, 10)
const sessionId = `ANL-${slug}-${dateStr}`
const sessionFolder = `${projectRoot}/.workflow/.analysis/${sessionId}`
// 自动检测继续模式:会话文件夹 + discussion.md存在 → 进入继续模式
// 如果是继续模式 → 加载discussion.md + 探索结果,从上一轮恢复
Bash(`mkdir -p ${sessionFolder}`)const ANALYSIS_DIMENSIONS = {
architecture: ['架构', 'architecture', 'design', 'structure', '设计', 'pattern'],
implementation: ['实现', 'implement', 'code', 'coding', '代码', 'logic'],
performance: ['性能', 'performance', 'optimize', 'bottleneck', '优化', 'speed'],
security: ['安全', 'security', 'auth', 'permission', '权限', 'vulnerability'],
concept: ['概念', 'concept', 'theory', 'principle', '原理', 'understand'],
comparison: ['比较', 'compare', 'vs', 'difference', '区别', 'versus'],
decision: ['决策', 'decision', 'choice', 'tradeoff', '选择', 'trade-off']
}
// Match topic text against keyword lists
// If multiple dimensions match, include all
// If none match, default to "architecture" and "implementation"
const dimensions = identifyDimensions(topic, ANALYSIS_DIMENSIONS)const ANALYSIS_DIMENSIONS = {
architecture: ['架构', 'architecture', 'design', 'structure', '设计', 'pattern'],
implementation: ['实现', 'implement', 'code', 'coding', '代码', 'logic'],
performance: ['性能', 'performance', 'optimize', 'bottleneck', '优化', 'speed'],
security: ['安全', 'security', 'auth', 'permission', '权限', 'vulnerability'],
concept: ['概念', 'concept', 'theory', 'principle', '原理', 'understand'],
comparison: ['比较', 'compare', 'vs', 'difference', '区别', 'versus'],
decision: ['决策', 'decision', 'choice', 'tradeoff', '选择', 'trade-off']
}
// 将主题文本与关键词列表匹配
// 如果匹配多个维度,全部包含
// 如果没有匹配项,默认使用"architecture"和"implementation"
const dimensions = identifyDimensions(topic, ANALYSIS_DIMENSIONS)if (!autoYes && !continueMode) {
// 1. Focus areas (multi-select)
// Generate directions dynamically from detected dimensions (see Dimension-Direction Mapping)
const focusAreas = AskUserQuestion({
questions: [{
question: "Select analysis focus areas:",
header: "Focus",
multiSelect: true,
options: generateFocusOptions(dimensions) // Dynamic based on dimensions
}]
})
// 2. Analysis perspectives (multi-select, max 4)
const perspectives = AskUserQuestion({
questions: [{
question: "Select analysis perspectives (single = focused, multi = broader coverage):",
header: "Perspectives",
multiSelect: true,
options: [
{ label: "Technical", description: "Implementation patterns, code structure, technical feasibility" },
{ label: "Architectural", description: "System design, scalability, component interactions" },
{ label: "Security", description: "Vulnerabilities, authentication, access control" },
{ label: "Performance", description: "Bottlenecks, optimization, resource utilization" }
]
}]
})
// 3. Analysis depth (single-select, unless --depth already set)
// Quick: surface level | Standard: moderate depth | Deep: comprehensive
}if (!autoYes && !continueMode) {
// 1. 重点领域(多选)
// 根据检测到的维度动态生成方向(参考维度-方向映射)
const focusAreas = AskUserQuestion({
questions: [{
question: "选择分析重点领域:",
header: "重点",
multiSelect: true,
options: generateFocusOptions(dimensions) // 基于维度动态生成
}]
})
// 2. 分析视角(多选,最多4个)
const perspectives = AskUserQuestion({
questions: [{
question: "选择分析视角(单视角=聚焦,多视角=更广泛覆盖):",
header: "视角",
multiSelect: true,
options: [
{ label: "Technical", description: "实现模式、代码结构、技术可行性" },
{ label: "Architectural", description: "系统设计、可扩展性、组件交互" },
{ label: "Security", description: "漏洞、认证、访问控制" },
{ label: "Performance", description: "瓶颈、优化、资源利用率" }
]
}]
})
// 3. 分析深度(单选,除非已设置--depth)
// Quick:表层分析 | Standard:中等深度(默认) | Deep:全面分析
}const discussionMd = `# Analysis Discussion
**Session ID**: ${sessionId}
**Topic**: ${topic}
**Started**: ${getUtc8ISOString()}
**Dimensions**: ${dimensions.join(', ')}
**Depth**: ${analysisDepth}const discussionMd = `# 分析讨论
**会话ID**: ${sessionId}
**主题**: ${topic}
**开始时间**: ${getUtc8ISOString()}
**分析维度**: ${dimensions.join(', ')}
**分析深度**: ${analysisDepth}- ${q}- ${q}Rounds will be appended below as analysis progresses.
随着分析推进,后续轮次将追加至下方。
To be populated after exploration.${sessionFolder}/discussion.md`, discussionMd)Write(
**Success Criteria**:
- Session folder created with discussion.md initialized
- Analysis dimensions identified
- User preferences captured (focus, perspectives, depth)探索完成后将填充此部分。${sessionFolder}/discussion.md`, discussionMd)Write(
**成功标准**:
- 已创建会话文件夹并初始化discussion.md
- 已识别分析维度
- 已捕获用户偏好(重点、视角、深度)const hasCodebase = Bash(`
test -f package.json && echo "nodejs" ||
test -f go.mod && echo "golang" ||
test -f Cargo.toml && echo "rust" ||
test -f pyproject.toml && echo "python" ||
test -f pom.xml && echo "java" ||
test -d src && echo "generic" ||
echo "none"
`).trim()
if (hasCodebase !== 'none') {
// 1. Read project metadata (if exists)
// - .workflow/project-tech.json (tech stack info)
// - .workflow/project-guidelines.json (project conventions)
// 2. Search codebase for relevant content
// Use: Grep, Glob, Read, or mcp__ace-tool__search_context
// Search based on topic keywords and identified dimensions
// Focus on:
// - Modules/components related to the topic
// - Existing patterns and code structure
// - Integration points and constraints
// - Relevant configuration and dependencies
// 3. Write findings
Write(`${sessionFolder}/exploration-codebase.json`, JSON.stringify({
project_type: hasCodebase,
relevant_files: [...], // [{path, relevance, summary}]
patterns: [...], // [{pattern, files, description}]
constraints: [...], // Architectural constraints found
integration_points: [...], // [{location, description}]
key_findings: [...], // Main insights from code search
_metadata: { timestamp: getUtc8ISOString(), exploration_scope: '...' }
}, null, 2))
}const hasCodebase = Bash(`
test -f package.json && echo "nodejs" ||
test -f go.mod && echo "golang" ||
test -f Cargo.toml && echo "rust" ||
test -f pyproject.toml && echo "python" ||
test -f pom.xml && echo "java" ||
test -d src && echo "generic" ||
echo "none"
`).trim()
if (hasCodebase !== 'none') {
// 1. 读取项目元数据(如果存在)
// - .workflow/project-tech.json(技术栈信息)
// - .workflow/project-guidelines.json(项目规范)
// 2. 搜索代码库中的相关内容
// 使用: Grep、Glob、Read或mcp__ace-tool__search_context
// 基于主题关键词和已识别维度进行搜索
// 重点关注:
// - 与主题相关的模块/组件
// - 现有模式和代码结构
// - 集成点和约束
// - 相关配置和依赖
// 3. 写入发现结果
Write(`${sessionFolder}/exploration-codebase.json`, JSON.stringify({
project_type: hasCodebase,
relevant_files: [...], // [{path, relevance, summary}]
patterns: [...], // [{pattern, files, description}]
constraints: [...], // 发现的架构约束
integration_points: [...], // [{location, description}]
key_findings: [...], // 代码搜索的主要见解
_metadata: { timestamp: getUtc8ISOString(), exploration_scope: '...' }
}, null, 2))
}// Analyze comprehensively across all identified dimensions
// Use exploration-codebase.json as context
// Focus on: patterns, anti-patterns, potential issues, opportunities
const findings = {
session_id: sessionId,
timestamp: getUtc8ISOString(),
topic: topic,
dimensions: dimensions,
sources: [...], // [{type, file, summary}]
key_findings: [...], // Main insights
discussion_points: [...], // Questions for user engagement
open_questions: [...] // Unresolved questions
}
Write(`${sessionFolder}/explorations.json`, JSON.stringify(findings, null, 2))// Analyze each perspective sequentially
// For each perspective:
// 1. Focus search/analysis on that perspective's concern area
// 2. Generate perspective-specific insights
// 3. Write individual findings
selectedPerspectives.forEach(perspective => {
// Analyze from this perspective's angle
// Use exploration-codebase.json + dimension focus
// Write to explorations/{perspective.name}.json
Write(`${sessionFolder}/explorations/${perspective.name}.json`, JSON.stringify({
perspective: perspective.name,
relevant_files: [...],
patterns: [...],
key_findings: [...],
perspective_insights: [...],
open_questions: [...],
_metadata: { timestamp: getUtc8ISOString() }
}, null, 2))
})// 跨所有已识别维度进行全面分析
// 使用exploration-codebase.json作为上下文
// 重点关注: 模式、反模式、潜在问题、改进机会
const findings = {
session_id: sessionId,
timestamp: getUtc8ISOString(),
topic: topic,
dimensions: dimensions,
sources: [...], // [{type, file, summary}]
key_findings: [...], // 主要见解
discussion_points: [...], // 用于用户互动的问题
open_questions: [...] // 未解决的问题
}
Write(`${sessionFolder}/explorations.json`, JSON.stringify(findings, null, 2))// 按顺序分析每个视角
// 对于每个视角:
// 1. 聚焦该视角的关注领域进行搜索/分析
// 2. 生成视角专属见解
// 3. 写入单独的发现结果
selectedPerspectives.forEach(perspective => {
// 从该视角的角度进行分析
// 使用exploration-codebase.json + 维度重点
// 写入至explorations/{perspective.name}.json
Write(`${sessionFolder}/explorations/${perspective.name}.json`, JSON.stringify({
perspective: perspective.name,
relevant_files: [...],
patterns: [...],
key_findings: [...],
perspective_insights: [...],
open_questions: [...],
_metadata: { timestamp: getUtc8ISOString() }
}, null, 2))
})// Single perspective → explorations.json already written
// Multi-perspective → synthesize into perspectives.json
if (selectedPerspectives.length > 1) {
const synthesis = {
session_id: sessionId,
timestamp: getUtc8ISOString(),
topic: topic,
dimensions: dimensions,
// Individual perspective findings
perspectives: selectedPerspectives.map(p => ({
name: p.name,
findings: readJson(`${sessionFolder}/explorations/${p.name}.json`).key_findings,
insights: readJson(`${sessionFolder}/explorations/${p.name}.json`).perspective_insights,
questions: readJson(`${sessionFolder}/explorations/${p.name}.json`).open_questions
})),
// Cross-perspective synthesis
synthesis: {
convergent_themes: [...], // What all perspectives agree on
conflicting_views: [...], // Where perspectives differ
unique_contributions: [...] // Insights unique to specific perspectives
},
aggregated_findings: [...], // Main insights across all perspectives
discussion_points: [...], // Questions for user engagement
open_questions: [...] // Unresolved questions
}
Write(`${sessionFolder}/perspectives.json`, JSON.stringify(synthesis, null, 2))
}// 单视角 → explorations.json已写入
// 多视角 → 综合结果存入perspectives.json
if (selectedPerspectives.length > 1) {
const synthesis = {
session_id: sessionId,
timestamp: getUtc8ISOString(),
topic: topic,
dimensions: dimensions,
// 各视角的单独发现结果
perspectives: selectedPerspectives.map(p => ({
name: p.name,
findings: readJson(`${sessionFolder}/explorations/${p.name}.json`).key_findings,
insights: readJson(`${sessionFolder}/explorations/${p.name}.json`).perspective_insights,
questions: readJson(`${sessionFolder}/explorations/${p.name}.json`).open_questions
})),
// 跨视角综合
synthesis: {
convergent_themes: [...], // 所有视角达成共识的内容
conflicting_views: [...], // 视角存在分歧的内容
unique_contributions: [...] // 特定视角的独特见解
},
aggregated_findings: [...], // 所有视角的主要见解汇总
discussion_points: [...], // 用于用户互动的问题
open_questions: [...] // 未解决的问题
}
Write(`${sessionFolder}/perspectives.json`, JSON.stringify(synthesis, null, 2))
}// Display current findings summary from explorations.json or perspectives.json
// Show key points, discussion points, open questions
if (!autoYes) {
const feedback = AskUserQuestion({
questions: [{
question: `Analysis round ${round}: Feedback on current findings?`,
header: "Direction",
multiSelect: false,
options: [
{ label: "Deepen", description: "Analysis direction is correct, investigate deeper" },
{ label: "Adjust Direction", description: "Different understanding or focus needed" },
{ label: "Specific Questions", description: "Have specific questions to ask" },
{ label: "Analysis Complete", description: "Sufficient information obtained, proceed to synthesis" }
]
}]
})
}// 从explorations.json或perspectives.json中展示当前发现结果摘要
// 显示关键点、讨论点、未解决的问题
if (!autoYes) {
const feedback = AskUserQuestion({
questions: [{
question: `分析第${round}轮:对当前发现结果的反馈?`,
header: "方向",
multiSelect: false,
options: [
{ label: "深化", description: "分析方向正确,进行更深入调查" },
{ label: "调整方向", description: "需要不同的理解或重点" },
{ label: "特定问题", description: "有具体问题需要提问" },
{ label: "分析完成", description: "已获取足够信息,进入综合阶段" }
]
}]
})
}// Deeper inline analysis using search tools
// Investigate edge cases, special scenarios
// Identify patterns not yet discussed
// Suggest improvement approaches
// Provide risk/impact assessments
// Update explorations.json with deepening findings// Ask user for adjusted focus
const adjustedFocus = AskUserQuestion({
questions: [{
question: "What should the new analysis focus be?",
header: "New Focus",
multiSelect: false,
options: [
{ label: "Code Details", description: "Deeper into implementation specifics" },
{ label: "Architecture", description: "Broader structural analysis" },
{ label: "Best Practices", description: "Industry standards and recommendations" }
]
}]
})
// Analyze from adjusted perspective using inline search
// Compare new insights with prior analysis
// Identify what was missed and why
// Update explorations.json with adjusted findings// Capture user questions via AskUserQuestion (text input)
// Answer each question based on codebase search and analysis
// Provide evidence and file references
// Rate confidence for each answer (high/medium/low)
// Document Q&A in discussion.md// 使用搜索工具进行更深入的内联分析
// 调查边缘情况、特殊场景
// 识别尚未讨论的模式
// 提出改进方案
// 提供风险/影响评估
// 在explorations.json中更新深化后的发现结果// 询问用户调整后的重点
const adjustedFocus = AskUserQuestion({
questions: [{
question: "新的分析重点应该是什么?",
header: "新重点",
multiSelect: false,
options: [
{ label: "代码细节", description: "更深入的实现细节" },
{ label: "架构", description: "更广泛的结构分析" },
{ label: "最佳实践", description: "行业标准和建议" }
]
}]
})
// 从调整后的视角进行内联搜索分析
// 将新见解与之前的分析进行比较
// 识别之前遗漏的内容及原因
// 在explorations.json中更新调整后的发现结果// 通过AskUserQuestion捕获用户问题(文本输入)
// 基于代码库搜索和分析回答每个问题
// 提供证据和文件引用
// 为每个答案标注置信度(高/中/低)
// 在discussion.md中记录问答内容| Section | Content |
|---|---|
| User Direction | Action taken (deepen/adjust/questions) and focus area |
| Analysis Results | Key findings, insights, evidence with file references |
| Insights | New learnings or clarifications from this round |
| Corrected Assumptions | Important wrong→right transformations with explanation |
| Open Items | Remaining questions or areas for future investigation |
| 部分 | 内容 |
|---|---|
| 用户方向 | 采取的行动(深化/调整/提问)和重点领域 |
| 分析结果 | 关键发现、见解、带文件引用的证据 |
| 见解 | 本轮分析的新认知或澄清内容 |
| 修正的假设 | 重要的错误→正确的转变及解释 |
| 未完成项 | 剩余的问题或未来需要调查的领域 |
const conclusions = {
session_id: sessionId,
topic: topic,
completed: getUtc8ISOString(),
total_rounds: roundCount,
summary: '...', // Executive summary
key_conclusions: [ // Main conclusions
{ point: '...', evidence: '...', confidence: 'high|medium|low' }
],
recommendations: [ // Actionable recommendations
{ action: '...', rationale: '...', priority: 'high|medium|low' }
],
open_questions: [...], // Unresolved questions
follow_up_suggestions: [ // Next steps
{ type: 'issue|task|research', summary: '...' }
]
}
Write(`${sessionFolder}/conclusions.json`, JSON.stringify(conclusions, null, 2))const conclusions = {
session_id: sessionId,
topic: topic,
completed: getUtc8ISOString(),
total_rounds: roundCount,
summary: '...', // 执行摘要
key_conclusions: [ // 主要结论
{ point: '...', evidence: '...', confidence: 'high|medium|low' }
],
recommendations: [ // 可执行建议
{ action: '...', rationale: '...', priority: 'high|medium|low' }
],
open_questions: [...], // 未解决的问题
follow_up_suggestions: [ // 后续步骤
{ type: 'issue|task|research', summary: '...' }
]
}
Write(`${sessionFolder}/conclusions.json`, JSON.stringify(conclusions, null, 2))| Subsection | Content |
|---|---|
| What We Established | Confirmed points and validated findings |
| What Was Clarified | Important corrections ( |
| Key Insights | Valuable learnings for future reference |
| 子部分 | 内容 |
|---|---|
| 已确认内容 | 已验证的结论和发现结果 |
| 已澄清内容 | 重要的修正( |
| 关键见解 | 对未来有参考价值的重要认知 |
if (!autoYes) {
AskUserQuestion({
questions: [{
question: "Analysis complete. Next step:",
header: "Next Step",
multiSelect: false,
options: [
{ label: "Quick Execute", description: "Convert recommendations to tasks and execute serially" },
{ label: "Create Issue", description: "Create GitHub Issue from conclusions" },
{ label: "Generate Task", description: "Launch lite-plan for implementation planning" },
{ label: "Export Report", description: "Generate standalone analysis report" },
{ label: "Done", description: "Save analysis only, no further action" }
]
}]
})
}| Selection | Action |
|---|---|
| Quick Execute | Jump to Phase 5 |
| Create Issue | |
| Generate Task | |
| Export Report | Copy discussion.md + conclusions.json to user-specified location |
| Done | Display artifact paths, end |
if (!autoYes) {
AskUserQuestion({
questions: [{
question: "分析完成。下一步:",
header: "下一步",
multiSelect: false,
options: [
{ label: "快速执行", description: "将建议转换为任务并串行执行" },
{ label: "创建Issue", description: "从结论创建GitHub Issue" },
{ label: "生成任务", description: "启动lite-plan进行实施规划" },
{ label: "导出报告", description: "生成独立的分析报告" },
{ label: "完成", description: "仅保存分析结果,不进行后续操作" }
]
}]
})
}| 选择 | 操作 |
|---|---|
| 快速执行 | 跳至阶段5 |
| 创建Issue | |
| 生成任务 | |
| 导出报告 | 将discussion.md + conclusions.json复制到用户指定位置 |
| 完成 | 显示制品路径,结束流程 |
conclusions.json → tasks.jsonl → User Confirmation → Direct Inline Execution → execution.md + execution-events.mdEXECUTE.mdconclusions.json → tasks.jsonl → 用户确认 → 直接内联执行 → execution.md + execution-events.mdEXECUTE.mdconclusions.recommendationsconst conclusions = JSON.parse(Read(`${sessionFolder}/conclusions.json`))
const explorations = file_exists(`${sessionFolder}/explorations.json`)
? JSON.parse(Read(`${sessionFolder}/explorations.json`))
: file_exists(`${sessionFolder}/perspectives.json`)
? JSON.parse(Read(`${sessionFolder}/perspectives.json`))
: null
const tasks = conclusions.recommendations.map((rec, index) => ({
id: `TASK-${String(index + 1).padStart(3, '0')}`,
title: rec.action,
description: rec.rationale,
type: inferTaskType(rec), // fix | refactor | feature | enhancement | testing
priority: rec.priority,
effort: inferEffort(rec), // small | medium | large
files: extractFilesFromEvidence(rec, explorations).map(f => ({
path: f,
action: 'modify'
})),
depends_on: [],
convergence: {
criteria: generateCriteria(rec), // Testable conditions
verification: generateVerification(rec), // Executable command or steps
definition_of_done: generateDoD(rec) // Business language
},
evidence: rec.evidence || [],
source: {
tool: 'analyze-with-file',
session_id: sessionId,
original_id: `TASK-${String(index + 1).padStart(3, '0')}`
}
}))
// Validate convergence quality (same as req-plan-with-file)
// Write one task per line
Write(`${sessionFolder}/tasks.jsonl`, tasks.map(t => JSON.stringify(t)).join('\n'))conclusions.recommendationsconst conclusions = JSON.parse(Read(`${sessionFolder}/conclusions.json`))
const explorations = file_exists(`${sessionFolder}/explorations.json`)
? JSON.parse(Read(`${sessionFolder}/explorations.json`))
: file_exists(`${sessionFolder}/perspectives.json`)
? JSON.parse(Read(`${sessionFolder}/perspectives.json`))
: null
const tasks = conclusions.recommendations.map((rec, index) => ({
id: `TASK-${String(index + 1).padStart(3, '0')}`,
title: rec.action,
description: rec.rationale,
type: inferTaskType(rec), // fix | refactor | feature | enhancement | testing
priority: rec.priority,
effort: inferEffort(rec), // small | medium | large
files: extractFilesFromEvidence(rec, explorations).map(f => ({
path: f,
action: 'modify'
})),
depends_on: [],
convergence: {
criteria: generateCriteria(rec), // 可测试条件
verification: generateVerification(rec), // 可执行命令或步骤
definition_of_done: generateDoD(rec) // 业务语言描述的完成标准
},
evidence: rec.evidence || [],
source: {
tool: 'analyze-with-file',
session_id: sessionId,
original_id: `TASK-${String(index + 1).padStart(3, '0')}`
}
}))
// 验证收敛条件质量(与req-plan-with-file相同)
// 每行写入一个任务
Write(`${sessionFolder}/tasks.jsonl`, tasks.map(t => JSON.stringify(t)).join('\n'))execution.mdexecution-events.mdexecution.mdexecution-events.mdif (!autoYes) {
AskUserQuestion({
questions: [{
question: `Execute ${tasks.length} tasks directly?\n\nExecution: Direct inline, serial`,
header: "Confirm",
multiSelect: false,
options: [
{ label: "Start Execution", description: "Execute all tasks serially" },
{ label: "Adjust Tasks", description: "Modify, reorder, or remove tasks" },
{ label: "Cancel", description: "Cancel execution, keep tasks.jsonl" }
]
}]
})
}if (!autoYes) {
AskUserQuestion({
questions: [{
question: `直接执行${tasks.length}个任务?\n\n执行方式:直接内联,串行执行`,
header: "确认",
multiSelect: false,
options: [
{ label: "开始执行", description: "串行执行所有任务" },
{ label: "调整任务", description: "修改、重新排序或移除任务" },
{ label: "取消", description: "取消执行,保留tasks.jsonl" }
]
}]
})
}execution-events.mdexecution.mdexecution-events.mdexecution.mdexecution.mdexecution-events.mdtasks.jsonl_executionif (!autoYes) {
AskUserQuestion({
questions: [{
question: `Execution complete: ${completedTasks.size}/${tasks.length} succeeded.\nNext step:`,
header: "Post-Execute",
multiSelect: false,
options: [
{ label: "Retry Failed", description: `Re-execute ${failedTasks.size} failed tasks` },
{ label: "View Events", description: "Display execution-events.md" },
{ label: "Create Issue", description: "Create issue from failed tasks" },
{ label: "Done", description: "End workflow" }
]
}]
})
}tasks.jsonlexecution.mdexecution-events.mdexecution.mdexecution-events.mdtasks.jsonl_executionif (!autoYes) {
AskUserQuestion({
questions: [{
question: `执行完成:${completedTasks.size}/${tasks.length}个任务成功。\n下一步:`,
header: "执行后",
multiSelect: false,
options: [
{ label: "重试失败任务", description: `重新执行${failedTasks.size}个失败任务` },
{ label: "查看事件", description: "显示execution-events.md" },
{ label: "创建Issue", description: "从失败任务创建Issue" },
{ label: "完成", description: "结束工作流" }
]
}]
})
}execution.mdexecution-events.md{projectRoot}/.workflow/.analysis/ANL-{slug}-{date}/
├── discussion.md # Evolution of understanding & discussions
├── exploration-codebase.json # Phase 2: Codebase context
├── explorations/ # Phase 2: Multi-perspective explorations (if selected)
│ ├── technical.json
│ ├── architectural.json
│ └── ...
├── explorations.json # Phase 2: Single perspective aggregated findings
├── perspectives.json # Phase 2: Multi-perspective findings with synthesis
├── conclusions.json # Phase 4: Final synthesis with recommendations
├── tasks.jsonl # Phase 5: Unified JSONL with convergence + source (if quick execute)
├── execution.md # Phase 5: Execution overview + task table + summary (if quick execute)
└── execution-events.md # Phase 5: Chronological event log (if quick execute)| File | Phase | Description |
|---|---|---|
| 1 | Initialized with session metadata, finalized in Phase 4 |
| 2 | Codebase context: relevant files, patterns, constraints |
| 2 | Per-perspective exploration results (multi only) |
| 2 | Single perspective aggregated findings |
| 2 | Multi-perspective findings with cross-perspective synthesis |
| 4 | Final synthesis: conclusions, recommendations, open questions |
| 5 | Unified JSONL from recommendations, each line with convergence criteria and source provenance |
| 5 | Execution overview: plan source, task table, pre-execution analysis, final summary |
| 5 | Chronological event stream with task details and convergence verification |
{projectRoot}/.workflow/.analysis/ANL-{slug}-{date}/
├── discussion.md # 认知演进与讨论记录
├── exploration-codebase.json # 阶段2:代码库上下文
├── explorations/ # 阶段2:多视角探索结果(如果已选择)
│ ├── technical.json
│ ├── architectural.json
│ └── ...
├── explorations.json # 阶段2:单视角汇总发现结果
├── perspectives.json # 阶段2:多视角发现结果及综合内容
├── conclusions.json # 阶段4:带建议的最终综合内容
├── tasks.jsonl # 阶段5:带收敛条件和来源的统一JSONL(如果使用快速执行)
├── execution.md # 阶段5:执行概述 + 任务表 + 摘要(如果使用快速执行)
└── execution-events.md # 阶段5: chronological事件日志(如果使用快速执行)| 文件 | 阶段 | 描述 |
|---|---|---|
| 1 | 用会话元数据初始化,在阶段4定稿 |
| 2 | 代码库上下文:相关文件、模式、约束 |
| 2 | 各视角的探索结果(仅多视角) |
| 2 | 单视角汇总发现结果 |
| 2 | 多视角发现结果及跨视角综合内容 |
| 4 | 最终综合内容:结论、建议、未解决问题 |
| 5 | 从建议生成的统一JSONL,每行带收敛条件和来源溯源 |
| 5 | 执行概述:计划来源、任务表、执行前分析、最终摘要 |
| 5 | 带任务细节和收敛验证的 chronological事件流 |
| Dimension | Keywords | Description |
|---|---|---|
| architecture | 架构, architecture, design, structure, 设计, pattern | System design, component interactions, design patterns |
| implementation | 实现, implement, code, coding, 代码, logic | Code patterns, implementation details, algorithms |
| performance | 性能, performance, optimize, bottleneck, 优化, speed | Bottlenecks, optimization opportunities, resource usage |
| security | 安全, security, auth, permission, 权限, vulnerability | Vulnerabilities, authentication, access control |
| concept | 概念, concept, theory, principle, 原理, understand | Foundational ideas, principles, theory |
| comparison | 比较, compare, vs, difference, 区别, versus | Comparing solutions, evaluating alternatives |
| decision | 决策, decision, choice, tradeoff, 选择, trade-off | Trade-offs, impact analysis, decision rationale |
| 维度 | 关键词 | 描述 |
|---|---|---|
| architecture | 架构, architecture, design, structure, 设计, pattern | 系统设计、组件交互、设计模式 |
| implementation | 实现, implement, code, coding, 代码, logic | 代码模式、实现细节、算法 |
| performance | 性能, performance, optimize, bottleneck, 优化, speed | 瓶颈、优化机会、资源使用情况 |
| security | 安全, security, auth, permission, 权限, vulnerability | 漏洞、认证、访问控制 |
| concept | 概念, concept, theory, principle, 原理, understand | 基础理念、原则、理论 |
| comparison | 比较, compare, vs, difference, 区别, versus | 方案比较、替代方案评估 |
| decision | 决策, decision, choice, tradeoff, 选择, trade-off | 权衡、影响分析、决策理由 |
| Perspective | Focus | Best For |
|---|---|---|
| Technical | Implementation patterns, code structure, technical feasibility | Understanding how and technical details |
| Architectural | System design, scalability, component interactions | Understanding structure and organization |
| Security | Security patterns, vulnerabilities, access control | Identifying security risks |
| Performance | Bottlenecks, optimization, resource utilization | Finding performance issues |
| 视角 | 重点 | 适用场景 |
|---|---|---|
| Technical | 实现模式、代码结构、技术可行性 | 理解实现方式和技术细节 |
| Architectural | 系统设计、可扩展性、组件交互 | 理解结构和组织方式 |
| Security | 安全模式、漏洞、访问控制 | 识别安全风险 |
| Performance | 瓶颈、优化、资源利用率 | 查找性能问题 |
| Depth | Scope | Description |
|---|---|---|
| Quick | Surface level understanding | Fast overview, minimal exploration |
| Standard | Moderate depth with good coverage | Balanced analysis (default) |
| Deep | Comprehensive detailed analysis | Thorough multi-round investigation |
| 深度 | 范围 | 描述 |
|---|---|---|
| Quick | 表层理解 | 快速概述,最小化探索 |
| Standard | 中等深度,覆盖全面 | 平衡的分析(默认) |
| Deep | 全面详细的分析 | 深入的多轮调查 |
| Dimension | Possible Directions |
|---|---|
| architecture | System Design, Component Interactions, Technology Choices, Integration Points, Design Patterns, Scalability Strategy |
| implementation | Code Structure, Implementation Details, Code Patterns, Error Handling, Testing Approach, Algorithm Analysis |
| performance | Performance Bottlenecks, Optimization Opportunities, Resource Utilization, Caching Strategy, Concurrency Issues |
| security | Security Vulnerabilities, Authentication/Authorization, Access Control, Data Protection, Input Validation |
| concept | Conceptual Foundation, Core Mechanisms, Fundamental Patterns, Theory & Principles, Trade-offs & Reasoning |
| comparison | Solution Comparison, Pros & Cons Analysis, Technology Evaluation, Approach Differences |
| decision | Decision Criteria, Trade-off Analysis, Risk Assessment, Impact Analysis, Implementation Implications |
| 维度 | 可能的方向 |
|---|---|
| architecture | 系统设计、组件交互、技术选型、集成点、设计模式、可扩展性策略 |
| implementation | 代码结构、实现细节、代码模式、错误处理、测试方法、算法分析 |
| performance | 性能瓶颈、优化机会、资源利用率、缓存策略、并发问题 |
| security | 安全漏洞、认证/授权、访问控制、数据保护、输入验证 |
| concept | 概念基础、核心机制、基础模式、理论与原则、权衡与推理 |
| comparison | 方案比较、优缺点分析、技术评估、方法差异 |
| decision | 决策标准、权衡分析、风险评估、影响分析、实施影响 |
| Rule | Description |
|---|---|
| Promote confirmed insights | Move validated findings to "What We Established" |
| Track corrections | Keep important wrong→right transformations |
| Focus on current state | What do we know NOW, not the journey |
| Avoid timeline repetition | Don't copy discussion details into consolidated section |
| Preserve key learnings | Keep insights valuable for future reference |
undefined| 规则 | 描述 |
|---|---|
| 提升已确认的见解 | 将已验证的发现结果移至"已确认内容" |
| 跟踪修正 | 记录重要的错误→正确的转变 |
| 聚焦当前状态 | 记录我们现在知道的内容,而非过程 |
| 避免时间线重复 | 不要将讨论细节复制到整合部分 |
| 保留关键认知 | 保留对未来有参考价值的见解 |
undefined
Good (consolidated):
```markdown
正确示例(整合后):
```markdownundefinedundefinedundefinedundefinedundefinedundefined| Situation | Action | Recovery |
|---|---|---|
| No codebase detected | Normal flow, pure topic analysis | Proceed without exploration-codebase.json |
| Codebase search fails | Continue with available context | Note limitation in discussion.md |
| No relevant findings | Broaden search keywords | Ask user for clarification |
| User timeout in discussion | Save state, show resume command | Use |
| Max rounds reached (5) | Force synthesis phase | Highlight remaining questions in conclusions |
| Session folder conflict | Append timestamp suffix | Create unique folder and continue |
| Quick execute: task fails | Record failure in execution-events.md | User can retry, skip, or abort |
| Quick execute: verification fails | Mark criterion as unverified, continue | Note in events, manual check |
| Quick execute: no recommendations | Cannot generate tasks.jsonl | Suggest using lite-plan instead |
| 情况 | 操作 | 恢复方式 |
|---|---|---|
| 未检测到代码库 | 正常流程,纯主题分析 | 不创建exploration-codebase.json继续执行 |
| 代码库搜索失败 | 基于现有上下文继续 | 在discussion.md中记录限制 |
| 无相关发现结果 | 扩大搜索关键词范围 | 询问用户以澄清 |
| 讨论中用户超时 | 保存状态,显示恢复命令 | 使用 |
| 达到最大轮次(5轮) | 强制进入综合阶段 | 在结论中突出剩余问题 |
| 会话文件夹冲突 | 追加时间戳后缀 | 创建唯一文件夹并继续 |
| 快速执行:任务失败 | 在execution-events.md中记录失败 | 用户可重试、跳过或中止 |
| 快速执行:验证失败 | 将标准标记为未验证,继续执行 | 在事件中记录,需手动检查 |
| 快速执行:无建议 | 无法生成tasks.jsonl | 建议使用lite-plan替代 |
debug-with-filebrainstorm-with-filecollaborative-plan-with-filelite-planreq-plan-with-filedebug-with-filebrainstorm-with-filecollaborative-plan-with-filelite-planreq-plan-with-file