Files
Claude-Code-Workflow/.claude/skills/command-guide/guides/implementation-details.md

28 KiB
Raw Blame History

Implementation Details

Detailed implementation logic for command-guide skill operation modes.

Architecture Overview

User Query
    ↓
Intent Recognition
    ↓
Mode Selection (1 of 6)
    ↓
Index/File/Reference Query
    ↓
Optional CLI Analysis (Mode 6)
    ↓
Response Formation
    ↓
User Output + Recommendations

Intent Recognition

Step 1: Parse User Input

Analyze query for trigger keywords and patterns:

function recognizeIntent(userQuery) {
  const query = userQuery.toLowerCase();

  // Mode 5: Issue Reporting (highest priority)
  if (query.includes('ccw-issue') || query.includes('ccw-help') ||
      query.match(/报告.*bug/) || query.includes('功能建议')) {
    return 'ISSUE_REPORTING';
  }

  // Mode 1: Command Search
  if (query.includes('搜索') || query.includes('find') ||
      query.includes('search') || query.match(/.*相关.*命令/)) {
    return 'COMMAND_SEARCH';
  }

  // Mode 2: Recommendations
  if (query.includes('下一步') || query.includes("what's next") ||
      query.includes('推荐') || query.match(/after.*\/\w+:\w+/)) {
    return 'RECOMMENDATIONS';
  }

  // Mode 3: Documentation
  if (query.includes('参数') || query.includes('怎么用') ||
      query.includes('如何使用') || query.match(/\/\w+:\w+.*详情/)) {

    // Special case: CLI tools usage guide
    if (query.match(/cli.*工具/) || query.match(/如何.*使用.*cli/) ||
        query.match(/gemini|qwen|codex.*使用/) || query.match(/优雅.*使用/) ||
        query.includes('cli能力') || query.includes('cli特性') ||
        query.includes('语义调用') || query.includes('命令调用')) {
      return 'CLI_TOOLS_GUIDE';
    }

    return 'DOCUMENTATION';
  }

  // Mode 4: Onboarding
  if (query.includes('新手') || query.includes('入门') ||
      query.includes('getting started') || query.includes('常用命令')) {
    return 'ONBOARDING';
  }

  // Mode 6: Deep Command Analysis
  // Triggered by specific command/agent names or complexity indicators
  if (query.match(/\/\w+:\w+/) || // Contains command name pattern
      query.match(/agent.*工作|实现.*原理|命令.*细节/) || // Asks about internals
      query.includes('详细说明') || query.includes('实现细节') ||
      query.match(/对比.*命令|workflow.*对比/) || // Comparison queries
      query.match(/\w+-agent/) || // Agent name pattern
      query.includes('最佳实践') && query.match(/\w+:\w+/)) { // Best practices for specific command
    return 'DEEP_ANALYSIS';
  }

  // Default: Ask for clarification
  return 'CLARIFY';
}

Mode 1: Command Search 🔍

Trigger Analysis

Keywords: 搜索, find, search, [topic] 相关命令

Examples:

  • "搜索 planning 命令"
  • "find commands for testing"
  • "实现相关的命令有哪些"

Processing Flow

1. Extract Search Parameters
   ↓
2. Determine Search Type
   ├─ Keyword Search (in name/description)
   ├─ Category Search (workflow/cli/memory/task)
   └─ Use-Case Search (planning/implementation/testing)
   ↓
3. Query Appropriate Index
   ├─ Keyword → all-commands.json
   ├─ Category → by-category.json
   └─ Use-Case → by-use-case.json
   ↓
4. Filter and Rank Results
   ↓
5. Format Response
   ├─ List matching commands
   ├─ Show key metadata (name, description, args)
   └─ Suggest related commands

Implementation

async function searchCommands(query, searchType) {
  let results = [];

  switch (searchType) {
    case 'keyword':
      // Load all-commands.json
      const allCommands = await readIndex('all-commands.json');
      results = allCommands.filter(cmd =>
        cmd.name.toLowerCase().includes(query.toLowerCase()) ||
        cmd.description.toLowerCase().includes(query.toLowerCase())
      );
      break;

    case 'category':
      // Load by-category.json
      const byCategory = await readIndex('by-category.json');
      const category = extractCategory(query); // e.g., "workflow"
      results = flattenCategory(byCategory[category]);
      break;

    case 'use-case':
      // Load by-use-case.json
      const byUseCase = await readIndex('by-use-case.json');
      const useCase = extractUseCase(query); // e.g., "planning"
      results = byUseCase[useCase] || [];
      break;
  }

  // Rank by relevance
  results = rankResults(results, query);

  // Add related commands
  results = await enrichWithRelated(results);

  return results;
}

Mode 2: Smart Recommendations 🤖

Trigger Analysis

Keywords: 下一步, what's next, 推荐, after [command]

Examples:

  • "执行完 /workflow:plan 后做什么?"
  • "What's next after planning?"
  • "推荐下一个命令"

Processing Flow

1. Extract Context
   ├─ Current/Last Command
   ├─ Workflow State
   └─ User's Current Task
   ↓
2. Query Relationships
   └─ Load command-relationships.json
   ↓
3. Find Next Steps
   ├─ Check next_steps array
   ├─ Consider prerequisites
   └─ Check related_commands
   ↓
4. Generate Recommendations
   ├─ Primary recommendation (most common next step)
   ├─ Alternative options
   └─ Rationale for each
   ↓
5. Add Workflow Context
   └─ Link to workflow-patterns.md

Implementation

async function getRecommendations(currentCommand) {
  // Load relationships
  const relationships = await readIndex('command-relationships.json');

  // Get relationship data
  const cmdData = relationships[currentCommand];

  if (!cmdData) {
    return defaultRecommendations();
  }

  // Primary next steps
  const nextSteps = cmdData.next_steps || [];

  // Alternative related commands
  const alternatives = cmdData.related_commands || [];

  // Build recommendations
  const recommendations = {
    primary: await enrichCommand(nextSteps[0]),
    alternatives: await enrichCommands(alternatives),
    workflow_pattern: findWorkflowPattern(currentCommand),
    rationale: generateRationale(currentCommand, nextSteps[0])
  };

  return recommendations;
}

Mode 3: Full Documentation 📖

Trigger Analysis

Keywords: 参数, 怎么用, 如何使用, [command] 详情

Examples:

  • "/workflow:plan 的参数是什么?"
  • "如何使用 /cli:execute"
  • "task:create 详细文档"

Special Case - CLI Tools Guide: Keywords: cli工具, 如何使用cli, gemini/qwen/codex使用, 优雅使用, cli能力, cli特性, 语义调用, 命令调用

Examples:

  • "如何优雅的使用cli工具"
  • "cli工具能做什么"
  • "gemini和codex的区别"
  • "语义调用是什么"

Processing Flow

1. Extract Command Name
   └─ Parse /workflow:plan or workflow:plan
   ↓
2. Locate in Index
   └─ Search all-commands.json
   ↓
3. Read Full Command File
   └─ Use file_path from index
   ↓
4. Extract Documentation
   ├─ Parameters section
   ├─ Arguments specification
   ├─ Examples section
   └─ Best practices
   ↓
5. Format Response
   ├─ Command overview
   ├─ Full parameter list
   ├─ Usage examples
   └─ Related commands

Implementation

async function getDocumentation(commandName, queryType = 'DOCUMENTATION') {
  // Special case: CLI tools usage guide
  if (queryType === 'CLI_TOOLS_GUIDE') {
    const guideContent = await readFile('guides/cli-tools-guide.md');
    return {
      type: 'CLI_TOOLS_GUIDE',
      title: 'CLI 工具使用指南',
      content: guideContent,
      sections: {
        introduction: extractSection(guideContent, '## 🎯 快速理解'),
        comparison: extractSection(guideContent, '## 📋 三大工具能力对比'),
        how_to_use: extractSection(guideContent, '## 🚀 如何调用'),
        capabilities: extractSection(guideContent, '## 💡 能力特性清单'),
        scenarios: extractSection(guideContent, '## 🔄 典型使用场景'),
        quick_reference: extractSection(guideContent, '## 📚 快速参考'),
        faq: extractSection(guideContent, '## 🆘 常见问题')
      },
      related_docs: [
        'intelligent-tools-strategy.md',
        'workflow-patterns.md',
        'getting-started.md'
      ]
    };
  }

  // Normal command documentation
  // Normalize command name
  const normalized = normalizeCommandName(commandName);

  // Find in index
  const allCommands = await readIndex('all-commands.json');
  const command = allCommands.find(cmd => cmd.name === normalized);

  if (!command) {
    return { error: 'Command not found' };
  }

  // Read full command file
  const commandFilePath = path.join(
    '../commands',
    command.file_path
  );
  const fullDoc = await readCommandFile(commandFilePath);

  // Parse sections
  const documentation = {
    name: command.name,
    description: command.description,
    arguments: command.arguments,
    difficulty: command.difficulty,
    usage_scenario: command.usage_scenario,
    parameters: extractSection(fullDoc, '## Parameters'),
    examples: extractSection(fullDoc, '## Examples'),
    best_practices: extractSection(fullDoc, '## Best Practices'),
    related: await getRelatedCommands(command.name)
  };

  return documentation;
}

Mode 4: Beginner Onboarding 🎓

Trigger Analysis

Keywords: 新手, 入门, getting started, 常用命令, 如何开始

Examples:

  • "我是新手,如何开始?"
  • "getting started with workflows"
  • "最常用的命令有哪些?"

Processing Flow

1. Assess User Level
   └─ Identify as beginner
   ↓
2. Load Essential Commands
   └─ Read essential-commands.json
   ↓
3. Build Learning Path
   ├─ Step 1: Core commands (Top 5)
   ├─ Step 2: Basic workflow
   ├─ Step 3: Intermediate commands
   └─ Step 4: Advanced features
   ↓
4. Provide Resources
   ├─ Link to getting-started.md
   ├─ Link to workflow-patterns.md
   └─ Suggest first task
   ↓
5. Interactive Guidance
   └─ Offer to walk through first workflow

Implementation

async function onboardBeginner() {
  // Load essential commands
  const essentialCommands = await readIndex('essential-commands.json');

  // Group by difficulty
  const beginner = essentialCommands.filter(cmd =>
    cmd.difficulty === 'Beginner' || cmd.difficulty === 'Intermediate'
  );

  // Create learning path
  const learningPath = {
    step1: {
      title: 'Core Commands (Start Here)',
      commands: beginner.slice(0, 5),
      guide: 'guides/getting-started.md'
    },
    step2: {
      title: 'Your First Workflow',
      pattern: 'Plan → Execute',
      commands: ['workflow:plan', 'workflow:execute'],
      guide: 'guides/workflow-patterns.md#basic-workflow'
    },
    step3: {
      title: 'Intermediate Skills',
      commands: beginner.slice(5, 10),
      guide: 'guides/workflow-patterns.md#common-patterns'
    }
  };

  // Resources
  const resources = {
    getting_started: 'guides/getting-started.md',
    workflow_patterns: 'guides/workflow-patterns.md',
    cli_tools: 'guides/cli-tools-guide.md',
    troubleshooting: 'guides/troubleshooting.md'
  };

  return {
    learning_path: learningPath,
    resources: resources,
    first_task: 'Try: /workflow:plan "create a simple feature"'
  };
}

Mode 5: Issue Reporting 📝

Trigger Analysis

Keywords: CCW-issue, CCW-help, 报告 bug, 功能建议, 问题咨询

Examples:

  • "CCW-issue"
  • "我要报告一个 bug"
  • "CCW-help 有问题"
  • "想提个功能建议"

Processing Flow

1. Detect Issue Type
   └─ Use AskUserQuestion if unclear
   ↓
2. Select Template
   ├─ Bug → templates/issue-bug.md
   ├─ Feature → templates/issue-feature.md
   └─ Question → templates/issue-question.md
   ↓
3. Collect Information
   └─ Interactive Q&A
      ├─ Problem description
      ├─ Steps to reproduce (bug)
      ├─ Expected vs actual (bug)
      ├─ Use case (feature)
      └─ Context
   ↓
4. Generate Filled Template
   └─ Populate template with collected data
   ↓
5. Save or Display
   ├─ Save to templates/.generated/
   └─ Display for user to copy

Implementation

async function reportIssue(issueType) {
  // Determine type (bug/feature/question)
  if (!issueType) {
    issueType = await askUserQuestion({
      question: 'What type of issue would you like to report?',
      options: ['Bug Report', 'Feature Request', 'Question']
    });
  }

  // Select template
  const templatePath = {
    'bug': 'templates/issue-bug.md',
    'feature': 'templates/issue-feature.md',
    'question': 'templates/issue-question.md'
  }[issueType.toLowerCase()];

  const template = await readTemplate(templatePath);

  // Collect information
  const info = await collectIssueInfo(issueType);

  // Fill template
  const filledTemplate = fillTemplate(template, {
    ...info,
    timestamp: new Date().toISOString(),
    auto_context: gatherAutoContext()
  });

  // Save
  const outputPath = `templates/.generated/${issueType}-${Date.now()}.md`;
  await writeFile(outputPath, filledTemplate);

  return {
    template: filledTemplate,
    file_path: outputPath,
    instructions: 'Copy content to GitHub Issues or use: gh issue create -F ' + outputPath
  };
}

Mode 6: Deep Command Analysis 🔬

Path Configuration Note: This mode uses absolute paths (~/.claude/skills/command-guide/reference) to ensure the skill works correctly regardless of where it's installed. The skill is designed to be installed in ~/.claude/skills/ (user's global Claude configuration directory).

Trigger Analysis

Keywords: 详细说明, 命令原理, agent 如何工作, 实现细节, 对比命令, 最佳实践

Examples:

  • "action-planning-agent 如何工作?"
  • "/workflow:plan 的实现原理是什么?"
  • "对比 workflow:plan 和 workflow:tdd-plan"
  • "ui-design-agent 详细说明"

Processing Flow

1. Parse Query
   ├─ Identify target command(s)/agent(s)
   ├─ Determine query complexity
   └─ Extract specific questions
   ↓
2. Classify Query Type
   ├─ Simple: Single entity, basic explanation
   └─ Complex: Multi-entity comparison, best practices, workflows
   ↓
3. Simple Query Path
   ├─ Locate file in reference/
   ├─ Read markdown content
   ├─ Extract relevant sections
   └─ Format response
   ↓
4. Complex Query Path
   ├─ Identify all relevant files
   ├─ Construct CLI analysis prompt
   ├─ Execute gemini/qwen analysis
   └─ Return comprehensive results
   ↓
5. Response Enhancement
   ├─ Add usage examples
   ├─ Link to related docs
   └─ Suggest next steps

Query Classification Logic

function classifyDeepAnalysisQuery(query) {
  const complexityIndicators = {
    multiEntity: query.match(/对比|比较|区别/) && query.match(/(\/\w+:\w+.*){2,}/),
    bestPractices: query.includes('最佳实践') || query.includes('推荐用法'),
    workflowAnalysis: query.match(/工作流.*分析|流程.*说明/),
    architecturalDepth: query.includes('架构') || query.includes('设计思路'),
    crossReference: query.match(/和.*一起用|配合.*使用/)
  };

  const isComplex = Object.values(complexityIndicators).some(v => v);

  return {
    isComplex,
    indicators: complexityIndicators,
    requiresCLI: isComplex
  };
}

Simple Query Implementation

async function handleSimpleQuery(query) {
  // Extract entity name (command or agent)
  const entityName = extractEntityName(query); // e.g., "action-planning-agent" or "workflow:plan"

  // Determine if command or agent
  const isAgent = entityName.includes('-agent') || entityName.includes('agent');
  const isCommand = entityName.includes(':') || entityName.startsWith('/');

  // Base path for reference documentation
  const basePath = '~/.claude/skills/command-guide/reference';

  let filePath;
  if (isAgent) {
    // Agent query - use absolute path
    const agentFileName = entityName.replace(/^\//, '').replace(/-agent$/, '-agent');
    filePath = `${basePath}/agents/${agentFileName}.md`;
  } else if (isCommand) {
    // Command query - need to find in command hierarchy
    const cmdName = entityName.replace(/^\//, '');
    filePath = await locateCommandFile(cmdName, basePath);
  }

  // Read documentation
  const docContent = await readFile(filePath);

  // Extract relevant sections based on query keywords
  const sections = extractRelevantSections(docContent, query);

  // Format response
  return {
    entity: entityName,
    type: isAgent ? 'agent' : 'command',
    documentation: sections,
    full_path: filePath,
    related: await findRelatedEntities(entityName)
  };
}

async function locateCommandFile(commandName, basePath) {
  // Parse command category from name
  // e.g., "workflow:plan" → "~/.claude/skills/command-guide/reference/commands/workflow/plan.md"
  const [category, name] = commandName.split(':');

  // Search in reference/commands hierarchy using absolute paths
  const possiblePaths = [
    `${basePath}/commands/${category}/${name}.md`,
    `${basePath}/commands/${category}/${name}/*.md`,
    `${basePath}/commands/${name}.md`
  ];

  for (const path of possiblePaths) {
    if (await fileExists(path)) {
      return path;
    }
  }

  throw new Error(`Command file not found: ${commandName}`);
}

function extractRelevantSections(markdown, query) {
  // Parse markdown into sections
  const sections = parseMarkdownSections(markdown);

  // Determine which sections are relevant
  const keywords = extractKeywords(query);
  const relevantSections = {};

  // Always include overview/description
  if (sections['## Overview'] || sections['## Description']) {
    relevantSections.overview = sections['## Overview'] || sections['## Description'];
  }

  // Include specific sections based on keywords
  if (keywords.includes('参数') || keywords.includes('参数说明')) {
    relevantSections.parameters = sections['## Parameters'] || sections['## Arguments'];
  }

  if (keywords.includes('例子') || keywords.includes('示例') || keywords.includes('example')) {
    relevantSections.examples = sections['## Examples'] || sections['## Usage'];
  }

  if (keywords.includes('工作流') || keywords.includes('流程')) {
    relevantSections.workflow = sections['## Workflow'] || sections['## Process Flow'];
  }

  if (keywords.includes('最佳实践') || keywords.includes('建议')) {
    relevantSections.best_practices = sections['## Best Practices'] || sections['## Recommendations'];
  }

  return relevantSections;
}

Complex Query Implementation (CLI-Assisted)

async function handleComplexQuery(query, classification) {
  // Identify all entities mentioned in query
  const entities = extractAllEntities(query); // Returns array of command/agent names

  // Build file context for CLI analysis
  const contextPaths = [];
  for (const entity of entities) {
    const path = await resolveEntityPath(entity);
    contextPaths.push(path);
  }

  // Construct CLI prompt based on query type
  const prompt = buildCLIPrompt(query, classification, contextPaths);

  // Execute CLI analysis
  const cliResult = await executeCLIAnalysis(prompt);

  return {
    query_type: 'complex',
    analysis_method: 'CLI-assisted (gemini)',
    entities_analyzed: entities,
    result: cliResult,
    source_files: contextPaths
  };
}

function buildCLIPrompt(userQuery, classification, contextPaths) {
  // Extract key question
  const question = extractCoreQuestion(userQuery);

  // Build context reference
  const contextRef = contextPaths.map(p => `@${p}`).join(' ');

  // Determine analysis focus based on classification
  let taskDescription = '';
  if (classification.indicators.multiEntity) {
    taskDescription = `• Compare the entities mentioned in terms of:
  - Use cases and scenarios
  - Capabilities and features
  - When to use each
  - Workflow integration
• Provide side-by-side comparison
• Recommend usage guidelines`;
  } else if (classification.indicators.bestPractices) {
    taskDescription = `• Analyze best practices for the mentioned entities
• Provide practical usage recommendations
• Include common pitfalls to avoid
• Show example workflows`;
  } else if (classification.indicators.workflowAnalysis) {
    taskDescription = `• Trace the workflow execution
• Explain process flow and dependencies
• Identify key integration points
• Provide usage examples`;
  } else {
    taskDescription = `• Provide comprehensive analysis
• Explain implementation details
• Show practical examples
• Include related concepts`;
  }

  // Construct full prompt using Standard Template
  // Note: CONTEXT uses @**/* because we'll use --include-directories to specify the reference path
  return `PURPOSE: Analyze command/agent documentation to provide comprehensive answer to user query
TASK:
${taskDescription}
MODE: analysis
CONTEXT: @**/*
EXPECTED: Comprehensive answer with examples, comparisons, and recommendations in markdown format
RULES: $(cat ~/.claude/workflows/cli-templates/prompts/analysis/02-analyze-code-patterns.txt) | Focus on practical usage and real-world scenarios | analysis=READ-ONLY

User Question: ${question}`;
}

async function executeCLIAnalysis(prompt) {
  // Use absolute path for reference directory
  // This ensures the command works regardless of where the skill is installed
  const referencePath = '~/.claude/skills/command-guide/reference';

  // Execute gemini with analysis prompt using --include-directories
  // This allows gemini to access reference docs while maintaining correct file context
  const command = `gemini -p "${escapePrompt(prompt)}" --include-directories ${referencePath}`;

  try {
    const result = await execBash(command, { timeout: 120000 }); // 2 min timeout
    return parseAnalysisResult(result.stdout);
  } catch (error) {
    // Fallback to qwen if gemini fails
    console.warn('Gemini failed, falling back to qwen');
    const fallbackCmd = `qwen -p "${escapePrompt(prompt)}" --include-directories ${referencePath}`;
    const result = await execBash(fallbackCmd, { timeout: 120000 });
    return parseAnalysisResult(result.stdout);
  }
}

function parseAnalysisResult(rawOutput) {
  // Extract main content from CLI output
  // Remove CLI wrapper/metadata, keep analysis content
  const lines = rawOutput.split('\n');
  const contentStart = lines.findIndex(l => l.trim().startsWith('#') || l.length > 50);
  const content = lines.slice(contentStart).join('\n');

  return {
    raw: rawOutput,
    parsed: content,
    format: 'markdown'
  };
}

Helper Functions

function extractEntityName(query) {
  // Extract command name pattern: /workflow:plan or workflow:plan
  const cmdMatch = query.match(/\/?(\w+:\w+)/);
  if (cmdMatch) return cmdMatch[1];

  // Extract agent name pattern: action-planning-agent or action planning agent
  const agentMatch = query.match(/(\w+(?:-\w+)*-agent|\w+\s+agent)/);
  if (agentMatch) return agentMatch[1].replace(/\s+/g, '-');

  return null;
}

function extractAllEntities(query) {
  const entities = [];

  // Find all command patterns
  const commands = query.match(/\/?(\w+:\w+)/g);
  if (commands) {
    entities.push(...commands.map(c => c.replace('/', '')));
  }

  // Find all agent patterns
  const agents = query.match(/(\w+(?:-\w+)*-agent)/g);
  if (agents) {
    entities.push(...agents);
  }

  return [...new Set(entities)]; // Deduplicate
}

async function resolveEntityPath(entityName) {
  // Base path for reference documentation
  const basePath = '~/.claude/skills/command-guide/reference';
  const isAgent = entityName.includes('-agent');

  if (isAgent) {
    // Return relative path within reference directory (used for @context in CLI)
    return `agents/${entityName}.md`;
  } else {
    // Command - need to find in hierarchy
    const [category] = entityName.split(':');
    // Use glob to find the file (glob pattern uses absolute path)
    const matches = await glob(`${basePath}/commands/${category}/**/${entityName.split(':')[1]}.md`);
    if (matches.length > 0) {
      // Return relative path within reference directory
      return matches[0].replace(`${basePath}/`, '');
    }
    throw new Error(`Entity file not found: ${entityName}`);
  }
}

function extractCoreQuestion(query) {
  // Remove common prefixes
  const cleaned = query
    .replace(/^(请|帮我|能否|可以)/g, '')
    .replace(/^(ccw|CCW)[:\s]*/gi, '')
    .trim();

  // Ensure it ends with question mark if it's interrogative
  if (cleaned.match(/什么|如何|为什么|怎么|哪个/) && !cleaned.endsWith('?') && !cleaned.endsWith('')) {
    return cleaned + '';
  }

  return cleaned;
}

function escapePrompt(prompt) {
  // Escape special characters for bash
  return prompt
    .replace(/\\/g, '\\\\')
    .replace(/"/g, '\\"')
    .replace(/\$/g, '\\$')
    .replace(/`/g, '\\`');
}

Example Outputs

Simple Query Example:

// Input: "action-planning-agent 如何工作?"
{
  entity: "action-planning-agent",
  type: "agent",
  documentation: {
    overview: "# Action Planning Agent\n\nGenerates structured task plans...",
    workflow: "## Workflow\n1. Analyze requirements\n2. Break down into tasks...",
    examples: "## Examples\n```bash\n/workflow:plan --agent \"feature\"\n```"
  },
  full_path: "~/.claude/skills/command-guide/reference/agents/action-planning-agent.md",
  related: ["workflow:plan", "task:create", "conceptual-planning-agent"]
}

Complex Query Example:

// Input: "对比 workflow:plan 和 workflow:tdd-plan 的使用场景和最佳实践"
{
  query_type: "complex",
  analysis_method: "CLI-assisted (gemini)",
  entities_analyzed: ["workflow:plan", "workflow:tdd-plan"],
  result: {
    parsed: `# 对比分析: workflow:plan vs workflow:tdd-plan

## 使用场景对比

### workflow:plan
- **适用场景**: 通用功能开发,无特殊测试要求
- **特点**: 灵活的任务分解focus on implementation
...

### workflow:tdd-plan
- **适用场景**: 测试驱动开发,需要严格测试覆盖
- **特点**: Red-Green-Refactor 循环test-first
...

## 最佳实践

### workflow:plan 最佳实践
1. 先分析需求,明确目标
2. 合理分解任务,避免过大或过小
...

### workflow:tdd-plan 最佳实践
1. 先写测试,明确预期行为
2. 保持 Red-Green-Refactor 节奏
...

## 选择建议

| 情况 | 推荐命令 |
|------|----------|
| 新功能开发,无特殊测试要求 | workflow:plan |
| 核心模块,需要高测试覆盖 | workflow:tdd-plan |
| 快速原型,验证想法 | workflow:plan |
| 关键业务逻辑 | workflow:tdd-plan |
`,
    format: "markdown"
  },
  source_files: [
    "~/.claude/skills/command-guide/reference/commands/workflow/plan.md",
    "~/.claude/skills/command-guide/reference/commands/workflow/tdd-plan.md"
  ]
}

Error Handling

Not Found

if (results.length === 0) {
  return {
    message: 'No commands found matching your query.',
    suggestions: [
      'Try broader keywords',
      'Browse by category: workflow, cli, memory, task',
      'View all commands: essential-commands.json',
      'Need help? Ask: "CCW-help"'
    ]
  };
}

Ambiguous Intent

if (intent === 'CLARIFY') {
  return await askUserQuestion({
    question: 'What would you like to do?',
    options: [
      'Search for commands',
      'Get recommendations for next steps',
      'View command documentation',
      'Learn how to get started',
      'Report an issue or get help'
    ]
  });
}

Optimization Strategies

Caching

// Cache indexes in memory after first load
const indexCache = new Map();

async function readIndex(filename) {
  if (indexCache.has(filename)) {
    return indexCache.get(filename);
  }

  const data = await readFile(`index/${filename}`);
  const parsed = JSON.parse(data);
  indexCache.set(filename, parsed);
  return parsed;
}

Lazy Loading

// Only load full command files when needed
// Use index metadata for most queries
// Read command file only for Mode 3 (Documentation)

Last Updated: 2025-11-06

Version: 1.3.0 - Added Mode 6: Deep Command Analysis with reference documentation backup and CLI-assisted complex queries