Files
Claude-Code-Workflow/.claude/.disabled-skills/copyright-docs/phases/01.5-project-exploration.md
catlog22 7a40f16235 feat(skills): implement enable/disable functionality for skills
- Added new API endpoints to enable and disable skills.
- Introduced logic to manage disabled skills, including loading and saving configurations.
- Enhanced skills routes to return lists of disabled skills.
- Updated frontend to display disabled skills and allow toggling their status.
- Added internationalization support for new skill status messages.
- Created JSON schemas for plan verification agent and findings.
- Defined new types for skill management in TypeScript.
2026-01-28 00:49:39 +08:00

4.2 KiB

Phase 1.5: Project Exploration

基于元数据,启动并行探索 Agent 收集代码信息。

Execution

Step 1: Intelligent Angle Selection

// 根据软件类型选择探索角度
const ANGLE_PRESETS = {
  'CLI': ['architecture', 'commands', 'algorithms', 'exceptions'],
  'API': ['architecture', 'endpoints', 'data-structures', 'interfaces'],
  'SDK': ['architecture', 'interfaces', 'data-structures', 'algorithms'],
  'DataProcessing': ['architecture', 'algorithms', 'data-structures', 'dataflow'],
  'Automation': ['architecture', 'algorithms', 'exceptions', 'dataflow']
};

// 从 metadata.category 映射到预设
function getCategoryKey(category) {
  if (category.includes('CLI') || category.includes('命令行')) return 'CLI';
  if (category.includes('API') || category.includes('后端')) return 'API';
  if (category.includes('SDK') || category.includes('库')) return 'SDK';
  if (category.includes('数据处理')) return 'DataProcessing';
  if (category.includes('自动化')) return 'Automation';
  return 'API'; // default
}

const categoryKey = getCategoryKey(metadata.category);
const selectedAngles = ANGLE_PRESETS[categoryKey];

console.log(`
## Exploration Plan

Software: ${metadata.software_name}
Category: ${metadata.category}${categoryKey}
Selected Angles: ${selectedAngles.join(', ')}

Launching ${selectedAngles.length} parallel explorations...
`);

Step 2: Launch Parallel Agents (Direct Output)

⚠️ CRITICAL: Agents write output files directly.

const explorationTasks = selectedAngles.map((angle, index) =>
  Task({
    subagent_type: "cli-explore-agent",
    run_in_background: false,
    description: `Explore: ${angle}`,
    prompt: `
## Exploration Objective
为 CPCC 软著申请文档执行 **${angle}** 探索。

## Assigned Context
- **Exploration Angle**: ${angle}
- **Software Name**: ${metadata.software_name}
- **Scope Path**: ${metadata.scope_path}
- **Category**: ${metadata.category}
- **Exploration Index**: ${index + 1} of ${selectedAngles.length}
- **Output File**: ${sessionFolder}/exploration-${angle}.json

## MANDATORY FIRST STEPS
1. Run: ccw tool exec get_modules_by_depth '{}' (project structure)
2. Run: rg -l "{relevant_keyword}" --type ts (locate relevant files)
3. Analyze from ${angle} perspective

## Exploration Strategy (${angle} focus)

**Step 1: Structural Scan**
- 识别与 ${angle} 相关的模块和文件
- 分析导入/导出关系

**Step 2: Pattern Recognition**
- ${angle} 相关的设计模式
- 代码组织方式

**Step 3: Write Output**
- 输出 JSON 到指定路径

## Expected Output Schema

**File**: ${sessionFolder}/exploration-${angle}.json

\`\`\`json
{
  "angle": "${angle}",
  "findings": {
    "structure": [
      { "component": "...", "type": "module|layer|service", "path": "...", "description": "..." }
    ],
    "patterns": [
      { "name": "...", "usage": "...", "files": ["path1", "path2"] }
    ],
    "key_files": [
      { "path": "src/file.ts", "relevance": 0.85, "rationale": "Core ${angle} logic" }
    ]
  },
  "insights": [
    { "observation": "...", "cpcc_section": "2|3|4|5|6|7", "recommendation": "..." }
  ],
  "_metadata": {
    "exploration_angle": "${angle}",
    "exploration_index": ${index + 1},
    "software_name": "${metadata.software_name}",
    "timestamp": "ISO8601"
  }
}
\`\`\`

## Success Criteria
- [ ] get_modules_by_depth 执行完成
- [ ] 至少识别 3 个相关文件
- [ ] patterns 包含具体代码示例
- [ ] insights 关联到 CPCC 章节 (2-7)
- [ ] JSON 输出到指定路径
- [ ] Return: 2-3 句话总结 ${angle} 发现
`
  })
);

// Execute all exploration tasks in parallel

Output

Session folder structure after exploration:

${sessionFolder}/
├── exploration-architecture.json
├── exploration-{angle2}.json
├── exploration-{angle3}.json
└── exploration-{angle4}.json

Downstream Usage (Phase 2 Analysis Input)

Phase 2 agents read exploration files as context:

// Discover exploration files by known angle pattern
const explorationData = {};
selectedAngles.forEach(angle => {
  const filePath = `${sessionFolder}/exploration-${angle}.json`;
  explorationData[angle] = JSON.parse(Read(filePath));
});