mirror of
https://github.com/catlog22/Claude-Code-Workflow.git
synced 2026-02-11 02:33:51 +08:00
- Phase 3: Added Mermaid diagram generation for system architecture, function modules, algorithms, class diagrams, sequence diagrams, and error flows. - Phase 4: Assembled analysis and diagrams into a structured CPCC-compliant document with section templates and figure numbering. - Phase 5: Developed compliance review process with iterative refinement based on analysis findings and user feedback. - Added CPCC compliance requirements and quality standards for project analysis reports. - Established a comprehensive project analysis skill with detailed execution flow and report types. - Enhanced error handling and recovery mechanisms throughout the analysis phases.
1266 lines
36 KiB
Markdown
1266 lines
36 KiB
Markdown
---
|
||
name: copyright
|
||
description: Multi-phase iterative software copyright documentation generator for CPCC compliance, produces design specification with Mermaid diagrams through code analysis
|
||
argument-hint: "[scope|path] [--name=软件名称] [--version=版本号]"
|
||
allowed-tools: Task(*), AskUserQuestion(*), Read(*), Bash(*), Glob(*), Grep(*), TodoWrite(*), Write(*)
|
||
---
|
||
|
||
# Workflow Copyright Command (/workflow:docs:copyright)
|
||
|
||
## Overview
|
||
|
||
**软件著作权设计说明书生成器** - 基于源代码深度分析,生成符合中国版权保护中心(CPCC)规范的无界面软件设计说明书。通过多阶段迭代和用户交互,确保文档内容准确、完整、合规。
|
||
|
||
**核心原则**:
|
||
- **基于代码分析**:所有内容严格来源于代码分析,杜绝臆测
|
||
- **Mermaid 规范**:所有图表使用正确的 Mermaid 语法,特殊字符正确转义
|
||
- **CPCC 合规**:严格遵循鉴别材料必备组成部分要求
|
||
- **迭代优化**:通过多轮交互确保文档质量
|
||
|
||
## 文档结构(鉴别材料必备组成部分)
|
||
|
||
| 章节 | 内容 | 图表类型 |
|
||
|------|------|----------|
|
||
| 1. 软件概述 | 背景、目标、运行环境、技术架构 | - |
|
||
| 2. 系统架构图 | 整体架构、模块关系、数据流 | `graph TD` |
|
||
| 3. 功能模块设计 | 功能分解、模块职责、交互关系 | `flowchart TD` |
|
||
| 4. 核心算法与流程 | 关键业务逻辑、算法实现、处理流程 | `flowchart TD` |
|
||
| 5. 数据结构设计 | 数据实体、关系、约束 | `classDiagram` |
|
||
| 6. 接口设计 | API 定义、参数、返回值 | `sequenceDiagram` |
|
||
| 7. 异常处理设计 | 错误处理、异常流程、恢复机制 | `flowchart TD` |
|
||
|
||
## Execution Process
|
||
|
||
```
|
||
Input Parsing:
|
||
├─ Parse: scope/path (required, source code location)
|
||
├─ Parse: --name (software name, will prompt if not provided)
|
||
└─ Parse: --version (version number, will prompt if not provided)
|
||
|
||
Phase 1: Project Discovery & Metadata Collection
|
||
├─ Ask: Software name and version (if not specified)
|
||
├─ Ask: Software category and primary function
|
||
├─ Explore: Project structure and tech stack
|
||
└─ Output: project-metadata.json
|
||
|
||
Phase 2: Deep Code Analysis (Parallel Agents)
|
||
├─ Agent 1: Architecture analysis (modules, layers, dependencies)
|
||
├─ Agent 2: Function analysis (features, workflows, algorithms)
|
||
├─ Agent 3: Data structure analysis (entities, relationships)
|
||
├─ Agent 4: Interface analysis (APIs, protocols)
|
||
└─ Output: analysis-{dimension}.json files
|
||
|
||
Phase 3: Mermaid Diagram Generation
|
||
├─ Generate: System architecture diagram (graph TD)
|
||
├─ Generate: Function module diagrams (flowchart TD)
|
||
├─ Generate: Core algorithm flowcharts (flowchart TD)
|
||
├─ Generate: Class diagrams (classDiagram)
|
||
├─ Generate: Sequence diagrams (sequenceDiagram)
|
||
└─ Output: diagrams/*.mmd + validation
|
||
|
||
Phase 4: Document Assembly
|
||
├─ Synthesize: Merge all analysis results
|
||
├─ Generate: 软件设计说明书.md (draft)
|
||
├─ Validate: CPCC compliance check
|
||
└─ Output: Present document to user
|
||
|
||
Phase 5: Iterative Refinement (Discovery-Driven)
|
||
├─ Extract: Gaps and ambiguities from analysis
|
||
├─ Ask: Targeted questions based on findings
|
||
├─ Update: Incremental document modification
|
||
└─ Loop: Until user satisfied or no more discoveries
|
||
|
||
Finalize:
|
||
└─ Output: Final 软件设计说明书.md
|
||
```
|
||
|
||
## 5-Phase Execution
|
||
|
||
### Phase 1: Project Discovery & Metadata Collection
|
||
|
||
**Purpose**: Collect essential metadata and understand project structure
|
||
|
||
**Step 1.1: Initialize TodoWrite**
|
||
|
||
```javascript
|
||
TodoWrite([
|
||
{content: "Phase 1: Project Discovery", status: "in_progress", activeForm: "Discovering project structure"},
|
||
{content: "Phase 2: Deep Code Analysis", status: "pending", activeForm: "Analyzing source code"},
|
||
{content: "Phase 3: Diagram Generation", status: "pending", activeForm: "Generating Mermaid diagrams"},
|
||
{content: "Phase 4: Document Assembly", status: "pending", activeForm: "Assembling design document"},
|
||
{content: "Phase 5: Iterative Refinement", status: "pending", activeForm: "Refining based on feedback"}
|
||
])
|
||
```
|
||
|
||
**Step 1.2: Collect Software Metadata (if not specified)**
|
||
|
||
```javascript
|
||
if (!name_specified || !version_specified) {
|
||
AskUserQuestion({
|
||
questions: [
|
||
{
|
||
question: "请提供软件的正式名称(将显示在页眉和文档标题中)",
|
||
header: "软件名称",
|
||
multiSelect: false,
|
||
options: [
|
||
{label: "使用项目名称", description: `自动检测: ${detected_project_name}`},
|
||
{label: "自定义名称", description: "输入自定义的软件名称"}
|
||
]
|
||
},
|
||
{
|
||
question: "请提供软件版本号(格式如 V1.0.0)",
|
||
header: "版本号",
|
||
multiSelect: false,
|
||
options: [
|
||
{label: "V1.0.0", description: "初始版本"},
|
||
{label: "使用 package.json 版本", description: `自动检测: ${detected_version}`},
|
||
{label: "自定义版本", description: "输入自定义版本号"}
|
||
]
|
||
}
|
||
]
|
||
});
|
||
}
|
||
```
|
||
|
||
**Step 1.3: Software Category Selection**
|
||
|
||
```javascript
|
||
AskUserQuestion({
|
||
questions: [{
|
||
question: "请选择软件的主要类型(影响文档描述风格)",
|
||
header: "软件类型",
|
||
multiSelect: false,
|
||
options: [
|
||
{label: "命令行工具 (CLI)", description: "无图形界面的命令行应用程序"},
|
||
{label: "后端服务/API", description: "Web API、微服务、后台服务"},
|
||
{label: "SDK/库", description: "供其他程序调用的开发工具包"},
|
||
{label: "数据处理系统", description: "ETL、数据分析、批处理系统"},
|
||
{label: "自动化脚本", description: "运维自动化、构建工具、脚本集合"}
|
||
]
|
||
}]
|
||
});
|
||
```
|
||
|
||
**Step 1.4: Explore Project Structure**
|
||
|
||
```javascript
|
||
Task({
|
||
subagent_type: "cli-explore-agent",
|
||
run_in_background: false,
|
||
description: "Explore project structure",
|
||
prompt: `
|
||
## Exploration Objective
|
||
分析项目结构,提取软件著作权文档所需的基础信息。
|
||
|
||
## Target Path
|
||
${scope_path}
|
||
|
||
## Required Analysis
|
||
1. **技术栈识别**:编程语言、框架、主要依赖
|
||
2. **目录结构**:源代码组织方式、模块划分
|
||
3. **入口点识别**:主程序入口、命令行入口
|
||
4. **配置文件**:环境配置、构建配置
|
||
5. **文档线索**:README、注释中的功能描述
|
||
|
||
## Output
|
||
Write to: ${outputDir}/project-discovery.json
|
||
{
|
||
"tech_stack": {...},
|
||
"directory_structure": {...},
|
||
"entry_points": [...],
|
||
"main_modules": [...],
|
||
"detected_features": [...]
|
||
}
|
||
`
|
||
});
|
||
```
|
||
|
||
**Step 1.5: Store Project Metadata**
|
||
|
||
```javascript
|
||
const projectMetadata = {
|
||
software_name: selected_name,
|
||
version: selected_version,
|
||
category: selected_category,
|
||
scope_path: scope_path,
|
||
tech_stack: discovery.tech_stack,
|
||
entry_points: discovery.entry_points,
|
||
main_modules: discovery.main_modules,
|
||
timestamp: new Date().toISOString()
|
||
};
|
||
|
||
Write(`${outputDir}/project-metadata.json`, JSON.stringify(projectMetadata, null, 2));
|
||
```
|
||
|
||
**TodoWrite**: Mark Phase 1 completed, Phase 2 in_progress
|
||
|
||
---
|
||
|
||
### Phase 2: Deep Code Analysis (Parallel Agents)
|
||
|
||
**Purpose**: Multi-dimensional code analysis for comprehensive understanding
|
||
|
||
**Step 2.1: Launch Parallel Analysis Agents**
|
||
|
||
```javascript
|
||
const analysisAgents = [
|
||
{
|
||
dimension: "architecture",
|
||
focus: "系统架构分析",
|
||
prompt: `
|
||
## 分析目标
|
||
分析项目的系统架构,为"系统架构图"章节提供数据。
|
||
|
||
## 分析内容
|
||
1. **分层结构**:识别代码的分层(如 Controller/Service/Repository)
|
||
2. **模块边界**:各模块的职责范围和边界
|
||
3. **依赖关系**:模块间的依赖方向和类型
|
||
4. **核心组件**:系统的核心组件及其作用
|
||
5. **数据流向**:数据在各层之间的流动路径
|
||
|
||
## 输出格式
|
||
{
|
||
"layers": [{name, components, responsibility}],
|
||
"modules": [{name, path, responsibility, dependencies}],
|
||
"data_flow": [{from, to, data_type, description}],
|
||
"core_components": [{name, type, responsibility}],
|
||
"mermaid_hints": {nodes: [], edges: []}
|
||
}
|
||
`
|
||
},
|
||
{
|
||
dimension: "functions",
|
||
focus: "功能模块分析",
|
||
prompt: `
|
||
## 分析目标
|
||
分析项目的功能模块,为"功能模块设计"章节提供数据。
|
||
|
||
## 分析内容
|
||
1. **功能清单**:从代码中提取的所有功能点
|
||
2. **功能分组**:按业务逻辑分组的功能模块
|
||
3. **功能层级**:功能的父子关系和层级结构
|
||
4. **模块交互**:功能模块之间的调用关系
|
||
5. **关键流程**:主要业务流程的步骤分解
|
||
|
||
## 输出格式
|
||
{
|
||
"feature_list": [{id, name, description, module, entry_file}],
|
||
"feature_groups": [{group_name, features: []}],
|
||
"feature_hierarchy": {root: {children: [...]}},
|
||
"interactions": [{caller, callee, trigger, description}],
|
||
"key_workflows": [{name, steps: [], files_involved}]
|
||
}
|
||
`
|
||
},
|
||
{
|
||
dimension: "algorithms",
|
||
focus: "核心算法分析",
|
||
prompt: `
|
||
## 分析目标
|
||
分析项目的核心算法和业务逻辑,为"核心算法与流程"章节提供数据。
|
||
|
||
## 分析内容
|
||
1. **核心算法**:识别关键算法(排序、搜索、加密、业务规则等)
|
||
2. **复杂逻辑**:圈复杂度高的函数/方法
|
||
3. **处理流程**:核心业务的处理步骤
|
||
4. **输入输出**:算法的输入参数和输出结果
|
||
5. **边界条件**:特殊情况的处理逻辑
|
||
|
||
## 输出格式
|
||
{
|
||
"algorithms": [{
|
||
name, file, line,
|
||
description,
|
||
complexity,
|
||
inputs: [{name, type, description}],
|
||
outputs: [{name, type, description}],
|
||
steps: [{step_num, description, code_ref}]
|
||
}],
|
||
"complex_functions": [{name, file, cyclomatic_complexity, description}],
|
||
"flowchart_hints": [{algorithm_name, nodes: [], edges: []}]
|
||
}
|
||
`
|
||
},
|
||
{
|
||
dimension: "data_structures",
|
||
focus: "数据结构分析",
|
||
prompt: `
|
||
## 分析目标
|
||
分析项目的数据结构,为"数据结构设计"章节提供数据。
|
||
|
||
## 分析内容
|
||
1. **数据实体**:类、接口、类型定义
|
||
2. **属性字段**:实体的属性及其类型
|
||
3. **实体关系**:继承、组合、关联关系
|
||
4. **约束规则**:数据验证、业务约束
|
||
5. **枚举常量**:枚举类型和常量定义
|
||
|
||
## 输出格式
|
||
{
|
||
"entities": [{
|
||
name, file, type, // class/interface/type
|
||
properties: [{name, type, visibility, description}],
|
||
methods: [{name, params, return_type, visibility}]
|
||
}],
|
||
"relationships": [{
|
||
from, to,
|
||
type, // inheritance/composition/association/dependency
|
||
cardinality, description
|
||
}],
|
||
"enums": [{name, values: [{name, value, description}]}],
|
||
"class_diagram_hints": {classes: [], relationships: []}
|
||
}
|
||
`
|
||
},
|
||
{
|
||
dimension: "interfaces",
|
||
focus: "接口设计分析",
|
||
prompt: `
|
||
## 分析目标
|
||
分析项目的接口设计,为"接口设计"章节提供数据。
|
||
|
||
## 分析内容
|
||
1. **API 端点**:HTTP API、RPC 接口、CLI 命令
|
||
2. **参数定义**:输入参数的名称、类型、约束
|
||
3. **返回值**:输出结果的格式和类型
|
||
4. **调用协议**:同步/异步、请求/响应模式
|
||
5. **接口分组**:按功能或资源分组
|
||
|
||
## 输出格式
|
||
{
|
||
"apis": [{
|
||
name, path, method, // GET/POST/CLI/RPC
|
||
description,
|
||
parameters: [{name, type, required, description}],
|
||
response: {type, schema, description},
|
||
category
|
||
}],
|
||
"protocols": [{name, type, description}],
|
||
"sequence_hints": [{scenario, actors: [], messages: []}]
|
||
}
|
||
`
|
||
},
|
||
{
|
||
dimension: "exceptions",
|
||
focus: "异常处理分析",
|
||
prompt: `
|
||
## 分析目标
|
||
分析项目的异常处理机制,为"异常处理设计"章节提供数据。
|
||
|
||
## 分析内容
|
||
1. **异常类型**:自定义异常类、错误码定义
|
||
2. **捕获策略**:try-catch 的使用模式
|
||
3. **错误传播**:异常的传播和转换链
|
||
4. **恢复机制**:重试、降级、回滚策略
|
||
5. **日志记录**:错误日志的记录方式
|
||
|
||
## 输出格式
|
||
{
|
||
"exception_types": [{name, parent, code, message, file}],
|
||
"error_codes": [{code, message, severity, category}],
|
||
"handling_patterns": [{pattern, locations: [], description}],
|
||
"recovery_strategies": [{strategy, trigger, action, files}],
|
||
"logging_approach": {framework, levels, format}
|
||
}
|
||
`
|
||
}
|
||
];
|
||
|
||
// Launch all agents in parallel
|
||
const analysisTasks = analysisAgents.map(agent =>
|
||
Task({
|
||
subagent_type: "cli-explore-agent",
|
||
run_in_background: false,
|
||
description: agent.focus,
|
||
prompt: `
|
||
${agent.prompt}
|
||
|
||
## Context
|
||
- **Scope Path**: ${scope_path}
|
||
- **Tech Stack**: ${projectMetadata.tech_stack}
|
||
- **Main Modules**: ${projectMetadata.main_modules.join(', ')}
|
||
|
||
## Output File
|
||
Write to: ${outputDir}/analysis-${agent.dimension}.json
|
||
`
|
||
})
|
||
);
|
||
```
|
||
|
||
**Step 2.2: Validate Analysis Results**
|
||
|
||
```javascript
|
||
// Verify all analysis files created
|
||
const requiredAnalyses = ['architecture', 'functions', 'algorithms', 'data_structures', 'interfaces', 'exceptions'];
|
||
for (const dimension of requiredAnalyses) {
|
||
const filePath = `${outputDir}/analysis-${dimension}.json`;
|
||
if (!file_exists(filePath)) {
|
||
throw new Error(`Missing analysis: ${dimension}`);
|
||
}
|
||
}
|
||
```
|
||
|
||
**TodoWrite**: Mark Phase 2 completed, Phase 3 in_progress
|
||
|
||
---
|
||
|
||
### Phase 3: Mermaid Diagram Generation
|
||
|
||
**Purpose**: Generate all required diagrams with correct Mermaid syntax
|
||
|
||
**Step 3.1: System Architecture Diagram**
|
||
|
||
```javascript
|
||
const archAnalysis = JSON.parse(Read(`${outputDir}/analysis-architecture.json`));
|
||
|
||
// Generate Mermaid graph TD
|
||
function generateArchitectureDiagram(analysis) {
|
||
let mermaid = 'graph TD\n';
|
||
|
||
// Add subgraphs for layers
|
||
for (const layer of analysis.layers) {
|
||
mermaid += ` subgraph ${sanitizeId(layer.name)}["${escapeLabel(layer.name)}"]\n`;
|
||
for (const comp of layer.components) {
|
||
mermaid += ` ${sanitizeId(comp)}["${escapeLabel(comp)}"]\n`;
|
||
}
|
||
mermaid += ' end\n';
|
||
}
|
||
|
||
// Add edges for data flow
|
||
for (const flow of analysis.data_flow) {
|
||
mermaid += ` ${sanitizeId(flow.from)} -->|"${escapeLabel(flow.description)}"| ${sanitizeId(flow.to)}\n`;
|
||
}
|
||
|
||
return mermaid;
|
||
}
|
||
|
||
// Helper: Escape special characters in labels
|
||
function escapeLabel(text) {
|
||
return text.replace(/["(){}[\]<>]/g, char => `#${char.charCodeAt(0)};`);
|
||
}
|
||
|
||
const archDiagram = generateArchitectureDiagram(archAnalysis);
|
||
Write(`${outputDir}/diagrams/architecture.mmd`, archDiagram);
|
||
```
|
||
|
||
**Step 3.2: Function Module Diagrams**
|
||
|
||
```javascript
|
||
const funcAnalysis = JSON.parse(Read(`${outputDir}/analysis-functions.json`));
|
||
|
||
function generateFunctionDiagram(analysis) {
|
||
let mermaid = 'flowchart TD\n';
|
||
|
||
// Root node
|
||
mermaid += ` ROOT["${escapeLabel(projectMetadata.software_name)}"]\n`;
|
||
|
||
// Feature groups as subgraphs
|
||
for (const group of analysis.feature_groups) {
|
||
mermaid += ` subgraph ${sanitizeId(group.group_name)}["${escapeLabel(group.group_name)}"]\n`;
|
||
for (const feature of group.features) {
|
||
mermaid += ` ${sanitizeId(feature.id)}["${escapeLabel(feature.name)}"]\n`;
|
||
}
|
||
mermaid += ' end\n';
|
||
mermaid += ` ROOT --> ${sanitizeId(group.group_name)}\n`;
|
||
}
|
||
|
||
return mermaid;
|
||
}
|
||
|
||
const funcDiagram = generateFunctionDiagram(funcAnalysis);
|
||
Write(`${outputDir}/diagrams/functions.mmd`, funcDiagram);
|
||
```
|
||
|
||
**Step 3.3: Algorithm Flowcharts**
|
||
|
||
```javascript
|
||
const algoAnalysis = JSON.parse(Read(`${outputDir}/analysis-algorithms.json`));
|
||
|
||
function generateAlgorithmFlowchart(algorithm) {
|
||
let mermaid = 'flowchart TD\n';
|
||
|
||
// Start node
|
||
mermaid += ` START(["开始"])\n`;
|
||
|
||
// Input nodes
|
||
for (const input of algorithm.inputs) {
|
||
mermaid += ` INPUT_${sanitizeId(input.name)}[/"${escapeLabel(input.name)}: ${escapeLabel(input.type)}"/]\n`;
|
||
}
|
||
|
||
// Process steps
|
||
let prevNode = 'START';
|
||
for (const step of algorithm.steps) {
|
||
const nodeId = `STEP_${step.step_num}`;
|
||
mermaid += ` ${nodeId}["${escapeLabel(step.description)}"]\n`;
|
||
mermaid += ` ${prevNode} --> ${nodeId}\n`;
|
||
prevNode = nodeId;
|
||
}
|
||
|
||
// Output and end
|
||
mermaid += ` OUTPUT[/"输出结果"/]\n`;
|
||
mermaid += ` ${prevNode} --> OUTPUT\n`;
|
||
mermaid += ` END_(["结束"])\n`;
|
||
mermaid += ` OUTPUT --> END_\n`;
|
||
|
||
return mermaid;
|
||
}
|
||
|
||
// Generate flowchart for each core algorithm
|
||
for (const algo of algoAnalysis.algorithms.slice(0, 5)) { // Top 5 algorithms
|
||
const flowchart = generateAlgorithmFlowchart(algo);
|
||
Write(`${outputDir}/diagrams/algorithm-${sanitizeId(algo.name)}.mmd`, flowchart);
|
||
}
|
||
```
|
||
|
||
**Step 3.4: Class Diagrams**
|
||
|
||
```javascript
|
||
const dataAnalysis = JSON.parse(Read(`${outputDir}/analysis-data_structures.json`));
|
||
|
||
function generateClassDiagram(analysis) {
|
||
let mermaid = 'classDiagram\n';
|
||
|
||
// Classes
|
||
for (const entity of analysis.entities) {
|
||
mermaid += ` class ${sanitizeId(entity.name)} {\n`;
|
||
|
||
// Properties
|
||
for (const prop of entity.properties) {
|
||
const visibility = {public: '+', private: '-', protected: '#'}[prop.visibility] || '+';
|
||
mermaid += ` ${visibility}${prop.type} ${prop.name}\n`;
|
||
}
|
||
|
||
// Methods
|
||
for (const method of entity.methods) {
|
||
const visibility = {public: '+', private: '-', protected: '#'}[method.visibility] || '+';
|
||
mermaid += ` ${visibility}${method.name}(${method.params}) ${method.return_type}\n`;
|
||
}
|
||
|
||
mermaid += ' }\n';
|
||
}
|
||
|
||
// Relationships
|
||
for (const rel of analysis.relationships) {
|
||
const arrows = {
|
||
inheritance: '--|>',
|
||
composition: '*--',
|
||
aggregation: 'o--',
|
||
association: '-->',
|
||
dependency: '..>'
|
||
};
|
||
const arrow = arrows[rel.type] || '-->';
|
||
mermaid += ` ${sanitizeId(rel.from)} ${arrow} ${sanitizeId(rel.to)} : ${escapeLabel(rel.description || rel.type)}\n`;
|
||
}
|
||
|
||
return mermaid;
|
||
}
|
||
|
||
const classDiagram = generateClassDiagram(dataAnalysis);
|
||
Write(`${outputDir}/diagrams/class-diagram.mmd`, classDiagram);
|
||
```
|
||
|
||
**Step 3.5: Sequence Diagrams**
|
||
|
||
```javascript
|
||
const interfaceAnalysis = JSON.parse(Read(`${outputDir}/analysis-interfaces.json`));
|
||
|
||
function generateSequenceDiagram(scenario) {
|
||
let mermaid = 'sequenceDiagram\n';
|
||
|
||
// Participants
|
||
for (const actor of scenario.actors) {
|
||
mermaid += ` participant ${sanitizeId(actor.id)} as ${escapeLabel(actor.name)}\n`;
|
||
}
|
||
|
||
// Messages
|
||
for (const msg of scenario.messages) {
|
||
const arrow = msg.type === 'async' ? '-)' : '->>';
|
||
mermaid += ` ${sanitizeId(msg.from)}${arrow}${sanitizeId(msg.to)}: ${escapeLabel(msg.description)}\n`;
|
||
}
|
||
|
||
return mermaid;
|
||
}
|
||
|
||
// Generate sequence diagram for each key scenario
|
||
for (const scenario of interfaceAnalysis.sequence_hints || []) {
|
||
const seqDiagram = generateSequenceDiagram(scenario);
|
||
Write(`${outputDir}/diagrams/sequence-${sanitizeId(scenario.scenario)}.mmd`, seqDiagram);
|
||
}
|
||
```
|
||
|
||
**Step 3.6: Validate Mermaid Syntax**
|
||
|
||
```javascript
|
||
// Validate all generated diagrams
|
||
const diagramFiles = Glob(`${outputDir}/diagrams/*.mmd`);
|
||
const validationResults = [];
|
||
|
||
for (const file of diagramFiles) {
|
||
const content = Read(file);
|
||
const issues = validateMermaidSyntax(content);
|
||
validationResults.push({
|
||
file: file,
|
||
valid: issues.length === 0,
|
||
issues: issues
|
||
});
|
||
}
|
||
|
||
Write(`${outputDir}/diagrams/validation-report.json`, JSON.stringify(validationResults, null, 2));
|
||
```
|
||
|
||
**TodoWrite**: Mark Phase 3 completed, Phase 4 in_progress
|
||
|
||
---
|
||
|
||
### Phase 4: Document Assembly
|
||
|
||
**Purpose**: Assemble all analysis and diagrams into final document
|
||
|
||
**Step 4.1: Load All Analysis Data**
|
||
|
||
```javascript
|
||
const metadata = JSON.parse(Read(`${outputDir}/project-metadata.json`));
|
||
const analyses = {
|
||
architecture: JSON.parse(Read(`${outputDir}/analysis-architecture.json`)),
|
||
functions: JSON.parse(Read(`${outputDir}/analysis-functions.json`)),
|
||
algorithms: JSON.parse(Read(`${outputDir}/analysis-algorithms.json`)),
|
||
data_structures: JSON.parse(Read(`${outputDir}/analysis-data_structures.json`)),
|
||
interfaces: JSON.parse(Read(`${outputDir}/analysis-interfaces.json`)),
|
||
exceptions: JSON.parse(Read(`${outputDir}/analysis-exceptions.json`))
|
||
};
|
||
const diagrams = loadAllDiagrams(`${outputDir}/diagrams/`);
|
||
```
|
||
|
||
**Step 4.2: Generate Document Header**
|
||
|
||
```javascript
|
||
const header = `
|
||
<!-- 页眉:${metadata.software_name} - 版本号:${metadata.version} -->
|
||
<!-- 注:最终文档页码位于每页右上角 -->
|
||
|
||
# ${metadata.software_name} 软件设计说明书
|
||
|
||
**版本号**:${metadata.version}
|
||
**生成日期**:${new Date().toLocaleDateString('zh-CN')}
|
||
**文档性质**:软件著作权鉴别材料
|
||
|
||
---
|
||
|
||
`;
|
||
```
|
||
|
||
**Step 4.3: Generate Each Section**
|
||
|
||
```javascript
|
||
function generateSection1_Overview(metadata, analyses) {
|
||
return `
|
||
## 1. 软件概述
|
||
|
||
### 1.1 软件背景与用途
|
||
|
||
${metadata.software_name}是一款${metadata.category}软件,主要用于${inferPurpose(analyses)}。
|
||
|
||
本软件基于${metadata.tech_stack.language}语言开发,采用${metadata.tech_stack.framework || '自研架构'}实现核心功能。
|
||
|
||
### 1.2 开发目标与特点
|
||
|
||
**开发目标**:
|
||
${generateObjectives(analyses.functions)}
|
||
|
||
**技术特点**:
|
||
${generateFeatures(analyses.architecture)}
|
||
|
||
### 1.3 运行环境与技术架构
|
||
|
||
**运行环境**:
|
||
- 操作系统:${metadata.tech_stack.os || '跨平台'}
|
||
- 运行时:${metadata.tech_stack.runtime}
|
||
- 依赖环境:${metadata.tech_stack.dependencies?.join('、') || '无特殊依赖'}
|
||
|
||
**技术架构**:
|
||
- 架构模式:${analyses.architecture.pattern || '模块化架构'}
|
||
- 核心框架:${metadata.tech_stack.framework || '无'}
|
||
- 主要技术栈:${metadata.tech_stack.main_technologies?.join('、') || metadata.tech_stack.language}
|
||
|
||
`;
|
||
}
|
||
|
||
function generateSection2_Architecture(analyses, diagrams) {
|
||
return `
|
||
## 2. 系统架构图
|
||
|
||
本章节展示${metadata.software_name}的整体系统架构,包括各主要模块之间的关系与核心数据流。
|
||
|
||
\`\`\`mermaid
|
||
${diagrams.architecture}
|
||
\`\`\`
|
||
|
||
**图2-1 系统架构图**
|
||
|
||
### 架构说明
|
||
|
||
${generateArchitectureDescription(analyses.architecture)}
|
||
|
||
**核心模块说明**:
|
||
|
||
${analyses.architecture.modules.map((m, i) =>
|
||
`${i + 1}. **${m.name}**:${m.responsibility}`
|
||
).join('\n')}
|
||
|
||
`;
|
||
}
|
||
|
||
function generateSection3_FunctionModules(analyses, diagrams) {
|
||
return `
|
||
## 3. 功能模块设计
|
||
|
||
本章节详细描述各功能模块的设计与职责划分。
|
||
|
||
\`\`\`mermaid
|
||
${diagrams.functions}
|
||
\`\`\`
|
||
|
||
**图3-1 功能模块结构图**
|
||
|
||
### 3.1 功能模块列表
|
||
|
||
${analyses.functions.feature_groups.map((group, gi) => `
|
||
#### 3.1.${gi + 1} ${group.group_name}
|
||
|
||
${group.features.map((f, fi) =>
|
||
`- **${f.name}**:${f.description}`
|
||
).join('\n')}
|
||
`).join('\n')}
|
||
|
||
### 3.2 模块交互关系
|
||
|
||
${generateInteractionDescription(analyses.functions.interactions)}
|
||
|
||
`;
|
||
}
|
||
|
||
function generateSection4_Algorithms(analyses, diagrams) {
|
||
return `
|
||
## 4. 核心算法与流程
|
||
|
||
本章节描述软件中的核心算法实现与关键业务处理流程。
|
||
|
||
${analyses.algorithms.algorithms.slice(0, 5).map((algo, i) => `
|
||
### 4.${i + 1} ${algo.name}
|
||
|
||
**功能描述**:${algo.description}
|
||
|
||
**输入参数**:
|
||
${algo.inputs.map(input => `- \`${input.name}\`(${input.type}):${input.description}`).join('\n')}
|
||
|
||
**输出结果**:
|
||
${algo.outputs.map(output => `- \`${output.name}\`(${output.type}):${output.description}`).join('\n')}
|
||
|
||
**处理流程**:
|
||
|
||
\`\`\`mermaid
|
||
${diagrams[`algorithm-${sanitizeId(algo.name)}`] || generateSimpleFlowchart(algo)}
|
||
\`\`\`
|
||
|
||
**图4-${i + 1} ${algo.name}流程图**
|
||
|
||
**算法步骤说明**:
|
||
|
||
${algo.steps.map((step, si) =>
|
||
`${si + 1}. ${step.description}`
|
||
).join('\n')}
|
||
|
||
`).join('\n')}
|
||
`;
|
||
}
|
||
|
||
function generateSection5_DataStructures(analyses, diagrams) {
|
||
return `
|
||
## 5. 数据结构设计
|
||
|
||
本章节描述软件中使用的主要数据实体及其关系。
|
||
|
||
\`\`\`mermaid
|
||
${diagrams['class-diagram']}
|
||
\`\`\`
|
||
|
||
**图5-1 数据结构类图**
|
||
|
||
### 5.1 主要数据实体
|
||
|
||
${analyses.data_structures.entities.map((entity, i) => `
|
||
#### 5.1.${i + 1} ${entity.name}
|
||
|
||
**类型**:${entity.type}
|
||
**文件位置**:\`${entity.file}\`
|
||
|
||
**属性列表**:
|
||
|
||
| 属性名 | 类型 | 可见性 | 说明 |
|
||
|--------|------|--------|------|
|
||
${entity.properties.map(p =>
|
||
`| ${p.name} | ${p.type} | ${p.visibility} | ${p.description || '-'} |`
|
||
).join('\n')}
|
||
|
||
`).join('\n')}
|
||
|
||
### 5.2 实体关系说明
|
||
|
||
${analyses.data_structures.relationships.map((rel, i) =>
|
||
`${i + 1}. **${rel.from}** ${rel.type} **${rel.to}**:${rel.description || '关联关系'}`
|
||
).join('\n')}
|
||
|
||
`;
|
||
}
|
||
|
||
function generateSection6_Interfaces(analyses, diagrams) {
|
||
return `
|
||
## 6. 接口设计
|
||
|
||
本章节描述软件对外提供的接口定义。
|
||
|
||
${diagrams.sequence ? `
|
||
\`\`\`mermaid
|
||
${diagrams.sequence}
|
||
\`\`\`
|
||
|
||
**图6-1 接口调用时序图**
|
||
` : ''}
|
||
|
||
### 6.1 接口列表
|
||
|
||
${analyses.interfaces.apis.map((api, i) => `
|
||
#### 6.1.${i + 1} ${api.name}
|
||
|
||
- **路径/命令**:\`${api.path}\`
|
||
- **方法类型**:${api.method}
|
||
- **功能描述**:${api.description}
|
||
|
||
**请求参数**:
|
||
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
|--------|------|------|------|
|
||
${api.parameters.map(p =>
|
||
`| ${p.name} | ${p.type} | ${p.required ? '是' : '否'} | ${p.description} |`
|
||
).join('\n')}
|
||
|
||
**返回结果**:
|
||
- 类型:${api.response.type}
|
||
- 说明:${api.response.description}
|
||
|
||
`).join('\n')}
|
||
`;
|
||
}
|
||
|
||
function generateSection7_Exceptions(analyses) {
|
||
return `
|
||
## 7. 异常处理设计
|
||
|
||
本章节描述软件的异常处理机制与错误恢复策略。
|
||
|
||
### 7.1 异常类型定义
|
||
|
||
${analyses.exceptions.exception_types.map((ex, i) => `
|
||
#### 7.1.${i + 1} ${ex.name}
|
||
|
||
- **错误码**:\`${ex.code || 'N/A'}\`
|
||
- **错误信息**:${ex.message}
|
||
- **父类**:${ex.parent || '基础异常类'}
|
||
- **定义位置**:\`${ex.file}\`
|
||
`).join('\n')}
|
||
|
||
### 7.2 错误码说明
|
||
|
||
| 错误码 | 错误信息 | 严重程度 | 类别 |
|
||
|--------|----------|----------|------|
|
||
${analyses.exceptions.error_codes.map(e =>
|
||
`| ${e.code} | ${e.message} | ${e.severity} | ${e.category} |`
|
||
).join('\n')}
|
||
|
||
### 7.3 异常处理策略
|
||
|
||
${analyses.exceptions.handling_patterns.map((pattern, i) => `
|
||
**${i + 1}. ${pattern.pattern}**
|
||
|
||
${pattern.description}
|
||
|
||
应用位置:${pattern.locations.join('、')}
|
||
`).join('\n')}
|
||
|
||
### 7.4 恢复机制
|
||
|
||
${analyses.exceptions.recovery_strategies.map((strategy, i) =>
|
||
`${i + 1}. **${strategy.strategy}**:${strategy.action}(触发条件:${strategy.trigger})`
|
||
).join('\n')}
|
||
|
||
`;
|
||
}
|
||
```
|
||
|
||
**Step 4.4: Assemble Final Document**
|
||
|
||
```javascript
|
||
const documentContent = [
|
||
header,
|
||
generateSection1_Overview(metadata, analyses),
|
||
generateSection2_Architecture(analyses, diagrams),
|
||
generateSection3_FunctionModules(analyses, diagrams),
|
||
generateSection4_Algorithms(analyses, diagrams),
|
||
generateSection5_DataStructures(analyses, diagrams),
|
||
generateSection6_Interfaces(analyses, diagrams),
|
||
generateSection7_Exceptions(analyses)
|
||
].join('\n');
|
||
|
||
const documentPath = `${outputDir}/${metadata.software_name}-软件设计说明书.md`;
|
||
Write(documentPath, documentContent);
|
||
```
|
||
|
||
**Step 4.5: CPCC Compliance Check**
|
||
|
||
```javascript
|
||
function validateCPCCCompliance(document, analyses) {
|
||
const checks = [
|
||
{name: "软件概述完整性", pass: document.includes("## 1. 软件概述")},
|
||
{name: "系统架构图存在", pass: document.includes("图2-1 系统架构图")},
|
||
{name: "功能模块设计完整", pass: document.includes("## 3. 功能模块设计")},
|
||
{name: "核心算法描述", pass: document.includes("## 4. 核心算法与流程")},
|
||
{name: "数据结构设计", pass: document.includes("## 5. 数据结构设计")},
|
||
{name: "接口设计说明", pass: document.includes("## 6. 接口设计")},
|
||
{name: "异常处理设计", pass: document.includes("## 7. 异常处理设计")},
|
||
{name: "Mermaid图表语法", pass: !document.includes("mermaid error")},
|
||
{name: "页眉信息", pass: document.includes("页眉")},
|
||
{name: "页码说明", pass: document.includes("页码")}
|
||
];
|
||
|
||
return {
|
||
passed: checks.filter(c => c.pass).length,
|
||
total: checks.length,
|
||
details: checks
|
||
};
|
||
}
|
||
|
||
const compliance = validateCPCCCompliance(documentContent, analyses);
|
||
console.log(`CPCC 合规检查: ${compliance.passed}/${compliance.total} 项通过`);
|
||
```
|
||
|
||
**TodoWrite**: Mark Phase 4 completed, Phase 5 in_progress
|
||
|
||
---
|
||
|
||
### Phase 5: Iterative Refinement (Discovery-Driven)
|
||
|
||
**Purpose**: Refine document based on analysis gaps and user feedback
|
||
|
||
**Step 5.1: Extract Document Gaps**
|
||
|
||
```javascript
|
||
function extractDocumentGaps(analyses, document) {
|
||
return {
|
||
// Missing descriptions
|
||
missingDescriptions: analyses.functions.features
|
||
.filter(f => !f.description || f.description.length < 20),
|
||
|
||
// Low confidence analyses
|
||
lowConfidenceAreas: Object.entries(analyses)
|
||
.flatMap(([dim, data]) =>
|
||
(data.confidence_scores || []).filter(s => s.score < 0.7)
|
||
),
|
||
|
||
// Complex areas needing clarification
|
||
complexAreas: analyses.algorithms.algorithms
|
||
.filter(a => a.complexity === 'high' && a.steps.length < 3),
|
||
|
||
// Incomplete relationships
|
||
incompleteRelationships: analyses.data_structures.relationships
|
||
.filter(r => !r.description),
|
||
|
||
// Missing exception handling
|
||
missingExceptionHandling: analyses.exceptions.exception_types
|
||
.filter(e => !e.message || e.message === 'Unknown')
|
||
};
|
||
}
|
||
|
||
const gaps = extractDocumentGaps(analyses, documentContent);
|
||
```
|
||
|
||
**Step 5.2: Generate Targeted Questions**
|
||
|
||
```javascript
|
||
function buildRefinementQuestions(gaps, metadata) {
|
||
const questions = [];
|
||
|
||
// Question about missing feature descriptions
|
||
if (gaps.missingDescriptions.length > 0) {
|
||
questions.push({
|
||
question: `以下功能缺少详细描述,请选择需要补充说明的功能:`,
|
||
header: "功能描述",
|
||
multiSelect: true,
|
||
options: gaps.missingDescriptions.slice(0, 4).map(f => ({
|
||
label: f.name,
|
||
description: `文件: ${f.entry_file} - 当前描述不完整`
|
||
}))
|
||
});
|
||
}
|
||
|
||
// Question about complex algorithms
|
||
if (gaps.complexAreas.length > 0) {
|
||
questions.push({
|
||
question: `发现 ${gaps.complexAreas.length} 个复杂算法的流程描述不够详细,是否需要深入分析?`,
|
||
header: "算法详解",
|
||
multiSelect: false,
|
||
options: [
|
||
{label: "是,详细分析所有", description: "为所有复杂算法生成详细流程图"},
|
||
{label: "选择性分析", description: "仅分析最核心的算法"},
|
||
{label: "保持现状", description: "当前描述已足够"}
|
||
]
|
||
});
|
||
}
|
||
|
||
// Question about data relationships
|
||
if (gaps.incompleteRelationships.length > 0) {
|
||
questions.push({
|
||
question: `发现 ${gaps.incompleteRelationships.length} 个数据实体关系缺少说明,是否补充?`,
|
||
header: "数据关系",
|
||
multiSelect: false,
|
||
options: [
|
||
{label: "自动推断并补充", description: "基于代码分析自动补充关系说明"},
|
||
{label: "跳过", description: "保持当前状态"}
|
||
]
|
||
});
|
||
}
|
||
|
||
// Final action question
|
||
questions.push({
|
||
question: "如何处理当前文档?",
|
||
header: "操作",
|
||
multiSelect: false,
|
||
options: [
|
||
{label: "继续优化", description: "应用上述选择并继续检查"},
|
||
{label: "完成文档", description: "当前文档已满足需求,生成最终版本"},
|
||
{label: "调整范围", description: "修改分析范围或重点"}
|
||
]
|
||
});
|
||
|
||
return questions.slice(0, 4);
|
||
}
|
||
|
||
const refinementQuestions = buildRefinementQuestions(gaps, metadata);
|
||
AskUserQuestion({questions: refinementQuestions});
|
||
```
|
||
|
||
**Step 5.3: Apply Refinements**
|
||
|
||
```javascript
|
||
async function applyRefinements(responses, gaps, outputDir) {
|
||
const updates = [];
|
||
|
||
if (responses.功能描述) {
|
||
// Re-analyze selected features with deeper exploration
|
||
for (const feature of responses.功能描述) {
|
||
const deepAnalysis = await Task({
|
||
subagent_type: "cli-explore-agent",
|
||
prompt: `深入分析功能 ${feature.name},提供详细描述...`
|
||
});
|
||
updates.push({type: 'feature_description', data: deepAnalysis});
|
||
}
|
||
}
|
||
|
||
if (responses.算法详解 === "是,详细分析所有") {
|
||
// Generate detailed flowcharts for complex algorithms
|
||
for (const algo of gaps.complexAreas) {
|
||
const detailedFlow = await analyzeAlgorithmInDepth(algo);
|
||
updates.push({type: 'algorithm_flowchart', data: detailedFlow});
|
||
}
|
||
}
|
||
|
||
if (responses.数据关系 === "自动推断并补充") {
|
||
// Infer relationship descriptions from code
|
||
const inferences = await inferRelationshipDescriptions(gaps.incompleteRelationships);
|
||
updates.push({type: 'relationship_descriptions', data: inferences});
|
||
}
|
||
|
||
return updates;
|
||
}
|
||
|
||
const updates = await applyRefinements(user_responses, gaps, outputDir);
|
||
```
|
||
|
||
**Step 5.4: Regenerate Affected Sections**
|
||
|
||
```javascript
|
||
// Update document with refinements
|
||
for (const update of updates) {
|
||
switch (update.type) {
|
||
case 'feature_description':
|
||
analyses.functions = mergeFeatureDescriptions(analyses.functions, update.data);
|
||
break;
|
||
case 'algorithm_flowchart':
|
||
diagrams[`algorithm-${update.data.name}`] = update.data.flowchart;
|
||
break;
|
||
case 'relationship_descriptions':
|
||
analyses.data_structures.relationships = update.data;
|
||
break;
|
||
}
|
||
}
|
||
|
||
// Regenerate document
|
||
const updatedDocument = regenerateDocument(metadata, analyses, diagrams);
|
||
Write(documentPath, updatedDocument);
|
||
Write(`${outputDir}/iterations/v${iteration_count}.md`, documentContent); // Archive
|
||
```
|
||
|
||
**Step 5.5: Loop or Finalize**
|
||
|
||
```javascript
|
||
if (user_responses.操作 === "完成文档") {
|
||
finalized = true;
|
||
} else if (user_responses.操作 === "调整范围") {
|
||
goto Phase1_Step1_3;
|
||
} else {
|
||
iteration_count++;
|
||
if (iteration_count > 5) {
|
||
console.log("已达到最大迭代次数,建议完成文档");
|
||
}
|
||
goto Step5.1;
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### Finalization
|
||
|
||
**Step 6.1: Generate Final Document**
|
||
|
||
```javascript
|
||
const finalDocument = `
|
||
${header}
|
||
|
||
${documentContent}
|
||
|
||
---
|
||
|
||
**文档生成信息**
|
||
|
||
- 生成工具:/workflow:docs:copyright
|
||
- 分析范围:${metadata.scope_path}
|
||
- 迭代次数:${iteration_count}
|
||
- 生成时间:${new Date().toISOString()}
|
||
|
||
---
|
||
|
||
*本文档基于源代码自动分析生成,所有描述均来源于代码实现。*
|
||
`;
|
||
|
||
Write(documentPath, finalDocument);
|
||
```
|
||
|
||
**Step 6.2: Output Summary**
|
||
|
||
```markdown
|
||
## 软件著作权设计说明书生成完成
|
||
|
||
**软件名称**:${metadata.software_name}
|
||
**版本号**:${metadata.version}
|
||
**文档路径**:${documentPath}
|
||
|
||
### 文档统计
|
||
- 总章节数:7
|
||
- Mermaid 图表数:${Object.keys(diagrams).length}
|
||
- 功能模块数:${analyses.functions.feature_list.length}
|
||
- 数据实体数:${analyses.data_structures.entities.length}
|
||
- 接口数量:${analyses.interfaces.apis.length}
|
||
|
||
### CPCC 合规检查
|
||
${compliance.details.map(c => `- [${c.pass ? '✓' : '✗'}] ${c.name}`).join('\n')}
|
||
|
||
### 后续步骤
|
||
1. 检查生成的 Mermaid 图表是否正确渲染
|
||
2. 补充任何需要人工说明的细节
|
||
3. 将文档转换为 PDF 格式(A4 纵向)
|
||
4. 确认页眉、页码格式符合要求
|
||
```
|
||
|
||
**TodoWrite**: Mark all phases completed
|
||
|
||
---
|
||
|
||
## Mermaid 语法规范
|
||
|
||
**关键规则**(确保图表正确渲染):
|
||
|
||
```javascript
|
||
// 1. 特殊字符转义 - 使用双引号包裹
|
||
// 正确
|
||
A["处理(数据)"] --> B["验证{结果}"]
|
||
|
||
// 错误
|
||
A[处理(数据)] --> B[验证{结果}]
|
||
|
||
// 2. 边标签转义
|
||
// 正确
|
||
A -->|"调用(参数)"| B
|
||
|
||
// 错误
|
||
A -->|调用(参数)| B
|
||
|
||
// 3. 节点 ID 规范 - 仅使用字母数字下划线
|
||
// 正确
|
||
UserService --> AuthModule
|
||
|
||
// 错误
|
||
User-Service --> Auth.Module
|
||
|
||
// 4. 子图标题
|
||
// 正确
|
||
subgraph ServiceLayer["服务层(核心)"]
|
||
|
||
// 错误
|
||
subgraph ServiceLayer[服务层(核心)]
|
||
```
|
||
|
||
## Usage Examples
|
||
|
||
```bash
|
||
# 交互式生成(引导输入所有信息)
|
||
/workflow:docs:copyright src/
|
||
|
||
# 指定软件名称和版本
|
||
/workflow:docs:copyright src/ --name="智能数据分析系统" --version="V1.0.0"
|
||
|
||
# 分析特定模块
|
||
/workflow:docs:copyright src/core --name="核心处理引擎" --version="V2.1.0"
|
||
```
|
||
|
||
## Output Structure
|
||
|
||
```
|
||
.workflow/.scratchpad/copyright-{timestamp}/
|
||
├── project-metadata.json # 软件元数据
|
||
├── project-discovery.json # 项目发现结果
|
||
├── analysis-architecture.json # 架构分析
|
||
├── analysis-functions.json # 功能分析
|
||
├── analysis-algorithms.json # 算法分析
|
||
├── analysis-data_structures.json # 数据结构分析
|
||
├── analysis-interfaces.json # 接口分析
|
||
├── analysis-exceptions.json # 异常处理分析
|
||
├── diagrams/ # Mermaid 图表
|
||
│ ├── architecture.mmd
|
||
│ ├── functions.mmd
|
||
│ ├── class-diagram.mmd
|
||
│ ├── algorithm-*.mmd
|
||
│ └── sequence-*.mmd
|
||
├── iterations/ # 迭代版本
|
||
│ ├── v1.md
|
||
│ └── ...
|
||
└── {软件名称}-软件设计说明书.md # 最终文档
|
||
```
|
||
|
||
## Related Commands
|
||
|
||
**Follow-up Commands**:
|
||
- `/workflow:analyze` - 更深入的项目分析
|
||
- `/memory:docs` - 生成技术文档
|
||
|
||
**Alternative Commands**:
|
||
- `/workflow:docs:copyright --lite` - 简化版(仅生成必要章节)
|