aico-cli 0.4.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -13,7 +13,7 @@ import { join as join$1 } from 'node:path';
13
13
  import { join, dirname, basename } from 'pathe';
14
14
  import { fileURLToPath } from 'node:url';
15
15
 
16
- const version = "0.4.0";
16
+ const version = "0.4.1";
17
17
 
18
18
  function displayBanner(subtitle) {
19
19
  const defaultSubtitle = "\u4E00\u952E\u914D\u7F6E\u4F60\u7684\u5F00\u53D1\u73AF\u5883";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aico-cli",
3
- "version": "0.4.0",
3
+ "version": "0.4.1",
4
4
  "packageManager": "pnpm@9.15.9",
5
5
  "description": "AI CLI",
6
6
  "repository": {
@@ -0,0 +1,219 @@
1
+ ---
2
+ name: function-point-analyzer
3
+ description: 功能点测算智能体,自动识别工程模块并分析Git提交记录,按月份输出功能点统计CSV
4
+ tools: Read, Write, Bash, Read, Edit, Glob, Grep
5
+ color: green
6
+ ---
7
+
8
+ > 🎯 功能点测算智能体 - 专为软件开发项目设计
9
+ >
10
+ > 🔍 核心功能:
11
+ > - 自动识别工程类型和结构
12
+ > - 分析Git提交记录提取功能点
13
+ > - 按月份分组统计并输出CSV报告
14
+ > - 支持多层级模块识别
15
+
16
+ ## 💻 调用方式
17
+
18
+ ### 基本用法
19
+ ```markdown
20
+ 启动功能点测算智能体
21
+ ```
22
+
23
+ ### 带参数的用法
24
+ ```markdown
25
+ /功能点测算 --months 3
26
+ ```
27
+
28
+ ### 命令选项
29
+ - `--months <number>`: 指定分析最近几个月的提交记录(默认:3)
30
+
31
+ ## 🚀 工作流程
32
+
33
+ ### 1. 工程识别阶段
34
+ - 检测当前目录是否为Git仓库
35
+ - 识别项目名称和类型(Node.js、Java、Python等)
36
+ - 分析项目结构和模块划分
37
+
38
+ ### 2. Git提交分析阶段
39
+ - 获取指定时间范围内的Git提交记录
40
+ - 提取提交信息、作者、时间、修改文件
41
+ - 按月份对提交记录进行分组
42
+
43
+ ### 3. 功能点识别阶段
44
+ - 根据提交消息分析功能点类型
45
+ - 从文件路径提取模块层级信息
46
+ - 计算各功能点的权重和复杂度
47
+
48
+ ### 4. 结果输出阶段
49
+ - 按月份创建子文件夹(如:`7月`、`8月`、`9月`)
50
+ - 生成CSV格式的功能点统计报告
51
+ - 输出详细的统计分析摘要
52
+
53
+ ## 📊 CSV输出格式
54
+
55
+ ### 文件路径结构
56
+ ```
57
+ .aico/功能点/
58
+ ├── 7月/
59
+ │ └── <项目名>_功能点统计.csv
60
+ ├── 8月/
61
+ │ └── <项目名>_功能点统计.csv
62
+ └── 9月/
63
+ └── <项目名>_功能点统计.csv
64
+ ```
65
+
66
+ ### CSV字段规范
67
+ | 字段名 | 说明 | 必填 | 示例 |
68
+ |--------|------|------|------|
69
+ | 一级模块 | 功能所属的一级模块名称 | 是 | utils |
70
+ | 二级模块(选填) | 功能所属的二级模块名称 | 否 | commands |
71
+ | 三级模块(选填) | 功能所属的三级模块名称 | 否 | function-point |
72
+ | 四级模块(选填) | 功能所属的四级模块名称 | 否 | - |
73
+ | 功能项描述 | 功能的详细业务描述 | 是 | 新增功能点测算功能 |
74
+ | 功能点计数项名称 | 功能点的计数项名称 | 是 | 新增功能点测算功能_ILF |
75
+ | 类别 | 功能点类型分类 | 是 | 内部逻辑文件(ILF) |
76
+ | 未调整功能点数(UFP) | 根据类别计算的功能点数 | 是 | 10 |
77
+ | 复用程度 | 功能的复用程度 | 是 | 低 |
78
+ | 修改类型 | 功能的修改类型 | 是 | 新增 |
79
+ | 关联人 | 功能关联的责任人 | 是 | 50632783 |
80
+
81
+ ## 🎯 功能点分类规则
82
+
83
+ ### 内部逻辑文件(ILF)- 10点
84
+ - 新增界面或模块
85
+ - 创建核心业务对象
86
+ - 实现完整功能模块
87
+ - 添加新页面或视图
88
+
89
+ ### 外部查询(EQ)- 4点
90
+ - 数据查询操作
91
+ - 报表导出功能
92
+ - 条件筛选功能
93
+ - 搜索相关功能
94
+
95
+ ### 外部输入(EI)- 4点
96
+ - 数据修改操作
97
+ - 记录删除功能
98
+ - 信息更新功能
99
+ - 内容编辑功能
100
+
101
+ ### 外部输出(EO)- 5点
102
+ - 复杂数据处理和输出
103
+ - 带计算功能的结果输出
104
+ - 综合报告生成
105
+
106
+ ## 🔧 实现原理
107
+
108
+ ### 工程类型识别
109
+ 通过检查以下文件来识别项目类型:
110
+ - `package.json` → Node.js
111
+ - `pom.xml` → Java
112
+ - `requirements.txt` → Python
113
+ - `Cargo.toml` → Rust
114
+ - `go.mod` → Go
115
+ - `Gemfile` → Ruby
116
+
117
+ ### 模块层级提取
118
+ 从文件路径中提取模块层级信息:
119
+ ```
120
+ src/utils/commands/function-point.ts
121
+ ├── 一级模块: utils
122
+ ├── 二级模块: commands
123
+ └── 三级模块: function-point
124
+ ```
125
+
126
+ ### 功能点模式匹配
127
+ 通过正则表达式匹配提交消息中的关键词来识别功能点类型:
128
+ - ILF: `新增.*界面`、`创建.*模块`、`实现.*功能`
129
+ - EQ: `查询.*数据`、`导出.*报表`、`筛选.*条件`
130
+ - EI: `修改.*数据`、`删除.*记录`、`更新.*信息`
131
+
132
+ ## 📈 使用示例
133
+
134
+ ### 示例1:基本功能点测算
135
+ ```
136
+ 启动功能点测算智能体
137
+ ```
138
+
139
+ ### 示例2:分析最近6个月的数据
140
+ ```
141
+ /功能点测算 --months 6
142
+ ```
143
+
144
+ ### 示例3:输出示例结果
145
+ ```
146
+ 🔍 正在识别工程信息...
147
+ ✅ 工程识别完成:
148
+ 项目名称: aico-cli
149
+ 项目类型: Node.js
150
+
151
+ 📊 正在分析近3个月的Git提交记录...
152
+ 📈 正在分析功能点...
153
+ ✅ 2025-10: 分析 11 个提交,识别 3 个功能点
154
+ ✅ 2025-09: 分析 58 个提交,识别 31 个功能点
155
+ ✅ 2025-08: 分析 33 个提交,识别 28 个功能点
156
+
157
+ ✅ 功能点分析完成!
158
+ 总计识别: 62 个功能点
159
+ 输出目录: .aico/功能点
160
+
161
+ 📊 功能点统计摘要:
162
+ 总计功能点: 62
163
+ 按类型分布:
164
+ 内部逻辑文件(ILF): 62
165
+ 按月份分布:
166
+ 10月: 3
167
+ 9月: 31
168
+ 8月: 28
169
+ 按模块分布:
170
+ utils: 18
171
+ commands: 10
172
+ cli-setup: 17
173
+ ```
174
+
175
+ ## ⚡ 性能优化
176
+
177
+ ### 缓存机制
178
+ - Git提交记录缓存,避免重复查询
179
+ - 功能点分析结果缓存,提高效率
180
+
181
+ ### 并行处理
182
+ - 多线程处理月份分组
183
+ - 并行生成CSV文件
184
+
185
+ ### 内存优化
186
+ - 流式处理大量提交记录
187
+ - 分批处理功能点分析
188
+
189
+ ## 🛠️ 依赖要求
190
+
191
+ ### 系统要求
192
+ - Git (命令行工具)
193
+ - Node.js (用于运行环境)
194
+ - 足够的磁盘空间存储CSV文件
195
+
196
+ ### 项目要求
197
+ - 必须是Git仓库
198
+ - 有规范的提交消息格式
199
+ - 明确的模块目录结构
200
+
201
+ ## 🚨 注意事项
202
+
203
+ 1. **数据准确性**:功能点识别基于提交消息的关键词匹配,建议团队保持规范的提交消息格式
204
+ 2. **内存使用**:大型项目可能产生大量提交记录,建议适当调整分析的时间范围
205
+ 3. **权限要求**:确保有读取Git记录和写入`.aico`目录的权限
206
+ 4. **编码格式**:CSV文件使用UTF-8 with BOM格式,确保Excel正确打开
207
+
208
+ ## 🔄 更新日志
209
+
210
+ ### v1.0.0 (2025-10-17)
211
+ - ✅ 实现基础功能点测算功能
212
+ - ✅ 支持按月份文件夹输出CSV
213
+ - ✅ 添加多项目类型识别
214
+ - ✅ 实现智能模块层级提取
215
+ - ✅ 支持自定义时间范围分析
216
+
217
+ ---
218
+
219
+ 💡 **提示**: 使用前请确保当前目录是Git仓库,并且有规范的提交消息格式,这样可以得到更准确的功能点分析结果。
@@ -0,0 +1,456 @@
1
+ #!/usr/bin/env bash
2
+ # 跨平台兼容性测试脚本 - Bash 版本
3
+ # 验证 Windows/Linux/macOS 环境下的功能完整性
4
+
5
+ set -euo pipefail
6
+
7
+ # 测试结果统计
8
+ declare -a TEST_RESULTS
9
+ PASSED_TESTS=0
10
+ FAILED_TESTS=0
11
+
12
+ # 颜色配置
13
+ RED='\033[0;31m'
14
+ GREEN='\033[0;32m'
15
+ YELLOW='\033[1;33m'
16
+ CYAN='\033[0;36m'
17
+ WHITE='\033[1;37m'
18
+ GRAY='\033[0;37m'
19
+ NC='\033[0m' # No Color
20
+
21
+ # 日志函数
22
+ log_message() {
23
+ local level="$1"
24
+ local message="$2"
25
+ local color="${3:-$WHITE}"
26
+ local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
27
+ echo -e "${color}[$timestamp] [$level] $message${NC}"
28
+ }
29
+
30
+ # 测试结果记录
31
+ add_test_result() {
32
+ local test_name="$1"
33
+ local passed="$2"
34
+ local message="${3:-}"
35
+
36
+ local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
37
+ TEST_RESULTS+=("$test_name|$passed|$message|$timestamp")
38
+
39
+ if [ "$passed" = "true" ]; then
40
+ log_message "PASS" "✅ $test_name - PASSED" "$GREEN"
41
+ ((PASSED_TESTS++))
42
+ else
43
+ log_message "FAIL" "❌ $test_name - FAILED - $message" "$RED"
44
+ ((FAILED_TESTS++))
45
+ fi
46
+ }
47
+
48
+ # 获取脚本目录
49
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
50
+
51
+ # 1. 环境检测测试
52
+ test_environment() {
53
+ log_message "TEST" "🔍 开始环境检测测试..." "$CYAN"
54
+
55
+ # 加载工具库
56
+ if [ -f "$SCRIPT_DIR/crossplatform-utils.sh" ]; then
57
+ # shellcheck source=/dev/null
58
+ source "$SCRIPT_DIR/crossplatform-utils.sh"
59
+ add_test_result "Bash 工具库加载" "true"
60
+ else
61
+ add_test_result "Bash 工具库加载" "false" "找不到工具库文件"
62
+ return 1
63
+ fi
64
+
65
+ # 平台检测
66
+ local platform=$(detect_platform)
67
+ if [[ "$platform" =~ ^(windows|linux|macos|unknown)$ ]]; then
68
+ add_test_result "平台检测功能" "true" "检测到: $platform"
69
+ else
70
+ add_test_result "平台检测功能" "false" "未知平台: $platform"
71
+ fi
72
+
73
+ # Bash 版本检测
74
+ local bash_version=$(bash --version | head -n1)
75
+ add_test_result "Bash 版本检测" "true" "版本: $bash_version"
76
+
77
+ # 检查关键命令
78
+ local missing_commands=()
79
+ for cmd in sed grep find head tail mkdir cat echo; do
80
+ if command_exists "$cmd"; then
81
+ continue
82
+ else
83
+ missing_commands+=("$cmd")
84
+ fi
85
+ done
86
+
87
+ if [ ${#missing_commands[@]} -eq 0 ]; then
88
+ add_test_result "关键命令检查" "true" "所有必要命令可用"
89
+ else
90
+ add_test_result "关键命令检查" "false" "缺少: ${missing_commands[*]}"
91
+ fi
92
+ }
93
+
94
+ # 2. 跨平台工具函数测试
95
+ test_crossplatform_utils() {
96
+ log_message "TEST" "🔧 测试跨平台工具函数..." "$CYAN"
97
+
98
+ # 临时目录测试
99
+ local temp_dir=$(get_temp_dir)
100
+ if [ -d "$temp_dir" ]; then
101
+ add_test_result "临时目录获取" "true" "路径: $temp_dir"
102
+ else
103
+ add_test_result "临时目录获取" "false" "临时目录不存在: $temp_dir"
104
+ fi
105
+
106
+ # 家目录测试
107
+ local home_dir=$(get_home_dir)
108
+ if [ -d "$home_dir" ]; then
109
+ add_test_result "家目录获取" "true" "路径: $home_dir"
110
+ else
111
+ add_test_result "家目录获取" "false" "家目录不存在: $home_dir"
112
+ fi
113
+
114
+ # 路径标准化测试
115
+ local test_path="src/components/test.js"
116
+ local normalized=$(normalize_path "$test_path")
117
+ local platform=$(detect_platform)
118
+
119
+ if [ "$platform" = "windows" ] && [[ "$normalized" == *\\* ]]; then
120
+ add_test_result "路径标准化" "true" "标准化: $normalized"
121
+ elif [ "$platform" != "windows" ] && [ "$normalized" = "$test_path" ]; then
122
+ add_test_result "路径标准化" "true" "标准化: $normalized"
123
+ else
124
+ add_test_result "路径标准化" "false" "标准化失败: $test_path -> $normalized"
125
+ fi
126
+
127
+ # 文件操作测试
128
+ local test_dir="$temp_dir/aico-test-$$"
129
+ local test_file="$test_dir/test.txt"
130
+
131
+ # 创建目录
132
+ if safe_mkdir "$test_dir" && [ -d "$test_dir" ]; then
133
+ add_test_result "目录创建" "true"
134
+ else
135
+ add_test_result "目录创建" "false" "无法创建: $test_dir"
136
+ fi
137
+
138
+ # 写入文件
139
+ echo "测试内容" > "$test_file"
140
+ if [ -f "$test_file" ]; then
141
+ add_test_result "文件创建" "true"
142
+ else
143
+ add_test_result "文件创建" "false" "无法创建: $test_file"
144
+ fi
145
+
146
+ # 读取文件
147
+ local content=$(safe_read_file "$test_file" 5)
148
+ if [[ "$content" == *"测试内容"* ]]; then
149
+ add_test_result "文件读取" "true"
150
+ else
151
+ add_test_result "文件读取" "false" "内容读取失败"
152
+ fi
153
+
154
+ # 复制文件
155
+ local copied_file="$test_dir/test-copy.txt"
156
+ if safe_cp "$test_file" "$copied_file" && [ -f "$copied_file" ]; then
157
+ add_test_result "文件复制" "true"
158
+ else
159
+ add_test_result "文件复制" "false" "复制失败"
160
+ fi
161
+
162
+ # 删除文件
163
+ if safe_rm "$test_file" && [ ! -f "$test_file" ]; then
164
+ add_test_result "文件删除" "true"
165
+ else
166
+ add_test_result "文件删除" "false" "删除失败"
167
+ fi
168
+
169
+ # 清理测试目录
170
+ if safe_rmdir "$test_dir" && [ ! -d "$test_dir" ]; then
171
+ add_test_result "目录删除" "true"
172
+ else
173
+ add_test_result "目录删除" "false" "删除失败: $test_dir"
174
+ fi
175
+ }
176
+
177
+ # 3. 需求功能库测试
178
+ test_requirement_functions() {
179
+ log_message "TEST" "📋 测试需求功能库..." "$CYAN"
180
+
181
+ # 加载需求功能库
182
+ if [ -f "$SCRIPT_DIR/requirement-functions-crossplatform.sh" ]; then
183
+ # shellcheck source=/dev/null
184
+ source "$SCRIPT_DIR/requirement-functions-crossplatform.sh"
185
+ add_test_result "需求功能库加载" "true"
186
+ else
187
+ add_test_result "需求功能库加载" "false" "找不到功能库文件"
188
+ return 1
189
+ fi
190
+
191
+ # 模块识别测试
192
+ local modules=$(identify_project_modules)
193
+ add_test_result "项目模块识别" "true" "检测到: $modules"
194
+
195
+ # 用户输入收集测试
196
+ collect_context "测试用户需求:需要开发登录功能"
197
+ if [ "$USER_INPUT" = "测试用户需求:需要开发登录功能" ]; then
198
+ add_test_result "用户输入收集" "true"
199
+ else
200
+ add_test_result "用户输入收集" "false" "输入不匹配: $USER_INPUT"
201
+ fi
202
+
203
+ # 意图分析测试
204
+ analyze_requirement "需要修复登录页面的bug"
205
+ if [ -n "$INTENT_TYPE" ]; then
206
+ add_test_result "意图分析" "true" "识别类型: $INTENT_TYPE"
207
+ else
208
+ add_test_result "意图分析" "false" "未能识别意图类型"
209
+ fi
210
+
211
+ # 需求提取测试
212
+ extract_requirements "作为用户我需要能够登录系统以便访问我的个人信息"
213
+ if [ -n "$ROLE" ] || [ -n "$GOAL" ]; then
214
+ add_test_result "需求要素提取" "true" "角色:$ROLE, 目标:$GOAL"
215
+ else
216
+ add_test_result "需求要素提取" "false" "未能提取需求要素"
217
+ fi
218
+ }
219
+
220
+ # 4. 启动器测试
221
+ test_launcher() {
222
+ log_message "TEST" "🚀 测试启动器功能..." "$CYAN"
223
+
224
+ local launcher_script="$SCRIPT_DIR/requirement-launcher.sh"
225
+
226
+ # 启动器文件存在性测试
227
+ if [ -f "$launcher_script" ]; then
228
+ add_test_result "启动器文件存在" "true"
229
+ else
230
+ add_test_result "启动器文件存在" "false" "找不到: $launcher_script"
231
+ return 1
232
+ fi
233
+
234
+ # 设置执行权限
235
+ if command_exists "chmod"; then
236
+ chmod +x "$launcher_script"
237
+ add_test_result "启动器执行权限" "true"
238
+ else
239
+ add_test_result "启动器执行权限" "false" "无法设置权限"
240
+ fi
241
+
242
+ # 启动器帮助测试
243
+ local help_result
244
+ help_result=$("$launcher_script" --help 2>&1 || true)
245
+ if [[ "$help_result" == *"使用方法"* ]] || [[ "$help_result" == *"usage"* ]]; then
246
+ add_test_result "启动器帮助功能" "true"
247
+ else
248
+ add_test_result "启动器帮助功能" "false" "帮助输出异常"
249
+ fi
250
+
251
+ # 启动器版本测试
252
+ local version_result
253
+ version_result=$("$launcher_script" --version 2>&1 || true)
254
+ if [[ "$version_result" == *"v"* ]] || [[ "$version_result" == *"version"* ]]; then
255
+ add_test_result "启动器版本信息" "true"
256
+ else
257
+ add_test_result "启动器版本信息" "false" "版本输出异常"
258
+ fi
259
+ }
260
+
261
+ # 5. 跨平台兼容性测试
262
+ test_platform_specific() {
263
+ log_message "TEST" "🌐 测试平台特定功能..." "$CYAN"
264
+
265
+ local platform=$(detect_platform)
266
+
267
+ case "$platform" in
268
+ "windows")
269
+ # Windows 特定测试
270
+ if command_exists "cmd"; then
271
+ local test_result
272
+ test_result=$(cmd /c "echo CMD_TEST_SUCCESS" 2>/dev/null || true)
273
+ if [[ "$test_result" == *"CMD_TEST_SUCCESS"* ]]; then
274
+ add_test_result "CMD 兼容性" "true"
275
+ else
276
+ add_test_result "CMD 兼容性" "false" "CMD 执行失败"
277
+ fi
278
+ else
279
+ add_test_result "CMD 兼容性" "false" "CMD 命令不可用"
280
+ fi
281
+
282
+ if [ -n "${USERNAME:-}" ]; then
283
+ add_test_result "Windows 用户环境" "true" "用户: $USERNAME"
284
+ else
285
+ add_test_result "Windows 用户环境" "false" "无法获取用户名"
286
+ fi
287
+ ;;
288
+
289
+ "linux"|"macos")
290
+ # Unix 特定测试
291
+ if command_exists "uname"; then
292
+ local os_info
293
+ os_info=$(uname -a 2>/dev/null || echo "unknown")
294
+ add_test_result "Unix 系统信息" "true" "$os_info"
295
+ else
296
+ add_test_result "Unix 系统信息" "false" "uname 命令不可用"
297
+ fi
298
+
299
+ if command_exists "whoami"; then
300
+ local current_user
301
+ current_user=$(whoami 2>/dev/null || echo "unknown")
302
+ add_test_result "Unix 用户信息" "true" "当前用户: $current_user"
303
+ else
304
+ add_test_result "Unix 用户信息" "false" "whoami 命令不可用"
305
+ fi
306
+ ;;
307
+
308
+ *)
309
+ add_test_result "平台特定功能" "false" "未知平台: $platform"
310
+ ;;
311
+ esac
312
+
313
+ # 通用进程检查测试
314
+ local shell_process
315
+ if command_exists "ps"; then
316
+ shell_process=$(ps aux | grep -v grep | grep -q "bash" && echo "true" || echo "false")
317
+ else
318
+ shell_process=$(check_process "bash" && echo "true" || echo "false")
319
+ fi
320
+
321
+ add_test_result "进程检查功能" "$shell_process" "Bash 进程运行: $shell_process"
322
+
323
+ # 通用端口检查测试
324
+ local port_80_in_use
325
+ if command_exists "lsof"; then
326
+ lsof -i ":80" >/dev/null 2>&1 && port_80_in_use="true" || port_80_in_use="false"
327
+ elif command_exists "netstat"; then
328
+ netstat -an | grep ":80 " >/dev/null 2>&1 && port_80_in_use="true" || port_80_in_use="false"
329
+ else
330
+ port_80_in_use=$(check_port 80 && echo "true" || echo "false")
331
+ fi
332
+
333
+ add_test_result "端口检查功能" "true" "端口80使用状态: $port_80_in_use"
334
+ }
335
+
336
+ # 主测试流程
337
+ start_tests() {
338
+ log_message "START" "🧪 开始跨平台兼容性测试..." "$YELLOW"
339
+ log_message "INFO" "Platform: $(detect_platform)" "$CYAN"
340
+ log_message "INFO" "Bash: $BASH_VERSION" "$CYAN"
341
+ log_message "INFO" "脚本目录: $SCRIPT_DIR" "$CYAN"
342
+ echo
343
+
344
+ try {
345
+ # 执行测试套件
346
+ test_environment
347
+ test_crossplatform_utils
348
+ test_requirement_functions
349
+ test_launcher
350
+ test_platform_specific
351
+
352
+ } catch {
353
+ log_message "ERROR" "❌ 测试过程中发生未处理的异常: $_" "$RED"
354
+ add_test_result "测试执行完整性" "false" "未处理异常: $_"
355
+ }
356
+
357
+ # 生成测试报告
358
+ generate_test_report
359
+ }
360
+
361
+ # 生成测试报告
362
+ generate_test_report() {
363
+ echo
364
+ log_message "REPORT" "📊 生成测试报告..." "$CYAN"
365
+
366
+ local total_tests=$((PASSED_TESTS + FAILED_TESTS))
367
+ local success_rate
368
+ if [ "$total_tests" -gt 0 ]; then
369
+ success_rate=$(awk "BEGIN {printf \"%.2f\", ($PASSED_TESTS / $total_tests) * 100}")
370
+ else
371
+ success_rate=0
372
+ fi
373
+
374
+ # 控制台报告
375
+ echo -e "${GRAY}═══════════════════════════════════════════════════════════════${NC}"
376
+ echo -e "${WHITE} 跨平台兼容性测试报告${NC}"
377
+ echo -e "${GRAY}═══════════════════════════════════════════════════════════════${NC}"
378
+ echo -e "${CYAN}平台: $(detect_platform)${NC}"
379
+ echo -e "${CYAN}Bash: $BASH_VERSION${NC}"
380
+ echo -e "${CYAN}测试时间: $(date '+%Y-%m-%d %H:%M:%S')${NC}"
381
+ echo
382
+ echo -e "${YELLOW}测试统计:${NC}"
383
+ echo -e " ${GREEN}✅ 通过: $PASSED_TESTS${NC}"
384
+ echo -e " ${RED}❌ 失败: $FAILED_TESTS${NC}"
385
+ if [ "$FAILED_TESTS" -gt 0 ]; then
386
+ if (( $(echo "$success_rate >= 80" | bc -l) )); then
387
+ success_color="$GREEN"
388
+ elif (( $(echo "$success_rate >= 60" | bc -l) )); then
389
+ success_color="$YELLOW"
390
+ else
391
+ success_color="$RED"
392
+ fi
393
+ echo -e " ${success_color}📊 成功率: $success_rate%${NC}"
394
+ fi
395
+ echo
396
+
397
+ # 详细结果
398
+ if [ "$FAILED_TESTS" -gt 0 ]; then
399
+ echo -e "${RED}失败测试详情:${NC}"
400
+ for result in "${TEST_RESULTS[@]}"; do
401
+ IFS='|' read -r name passed message timestamp <<< "$result"
402
+ if [ "$passed" = "false" ]; then
403
+ echo -e " ${RED}❌ $name: $message${NC}"
404
+ fi
405
+ done
406
+ fi
407
+
408
+ echo -e "${GRAY}═══════════════════════════════════════════════════════════════${NC}"
409
+
410
+ # 文本报告
411
+ local temp_dir=$(get_temp_dir)
412
+ local report_path="$temp_dir/aico-crossplatform-test-report.txt"
413
+
414
+ {
415
+ echo "跨平台兼容性测试报告"
416
+ echo "====================="
417
+ echo "平台: $(detect_platform)"
418
+ echo "Bash: $BASH_VERSION"
419
+ echo "测试时间: $(date '+%Y-%m-%d %H:%M:%S')"
420
+ echo ""
421
+ echo "测试统计:"
422
+ echo "通过: $PASSED_TESTS"
423
+ echo "失败: $FAILED_TESTS"
424
+ echo "成功率: $success_rate%"
425
+ echo ""
426
+ echo "详细结果:"
427
+ for result in "${TEST_RESULTS[@]}"; do
428
+ IFS='|' read -r name passed message timestamp <<< "$result"
429
+ echo "$name: $passed - $message"
430
+ done
431
+ } > "$report_path"
432
+
433
+ log_message "INFO" "📄 详细报告已保存至: $report_path" "$CYAN"
434
+
435
+ # 退出代码
436
+ if [ "$FAILED_TESTS" -eq 0 ]; then
437
+ echo -e "${GREEN}🎉 所有测试通过!跨平台兼容性良好。${NC}"
438
+ exit 0
439
+ else
440
+ echo -e "${YELLOW}⚠️ 存在 $FAILED_TESTS 个测试失败,请检查相关功能。${NC}"
441
+ exit 1
442
+ fi
443
+ }
444
+
445
+ # 捕获错误
446
+ trap 'echo "❌ 测试脚本出错,行号: $LINENO"' ERR
447
+
448
+ # 主入口点
449
+ if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
450
+ try {
451
+ start_tests
452
+ } catch {
453
+ echo -e "${RED}❌ 测试脚本执行失败: $_${NC}"
454
+ exit 1
455
+ }
456
+ fi
@@ -1,6 +1,6 @@
1
1
  # /code-review
2
2
 
3
- *执行专注的多代理代码审查,仅 surfaced 对使用 AI 工具的独立开发者具有关键性、高影响力的发现。*
3
+ *执行专注的多代理代码审查,仅 surfaced 对使用 AI 工具的开发者具有关键性、高影响力的发现。*
4
4
 
5
5
  ## 核心理念
6
6
 
@@ -23,8 +23,6 @@
23
23
 
24
24
  ## 自动加载项目上下文:
25
25
  @/CLAUDE.md
26
- @/docs/ai-context/project-structure.md
27
- @/docs/ai-context/docs-overview.md
28
26
 
29
27
 
30
28
  ## 命令执行
@@ -47,7 +45,7 @@
47
45
 
48
46
  #### 阅读相关文档
49
47
  在分配代理之前,**阅读文档**以了解:
50
- 1. 使用 `/docs/ai-context/docs-overview.md` 识别相关文档
48
+ 1. 根据理解的用户意图搜索识别相关文档
51
49
  2. 阅读与被审查代码相关的文档:
52
50
  - 子系统理解的架构文档
53
51
  - 集成点的 API 文档
@@ -166,7 +164,6 @@
166
164
  1. 审查自动加载的项目上下文(CLAUDE.md、project-structure.md、docs-overview.md)
167
165
  2. 深入专注地分析您分配的覆盖区域
168
166
  3. 对于复杂问题,使用:
169
- - mcp__gemini__consult_gemini 进行架构分析
170
167
  - mcp__context7__get-library-docs 获取框架最佳实践
171
168
  4. 与其他覆盖区域交叉引用系统性问题
172
169
  5. 仅记录高影响力发现:
@@ -1,29 +1,421 @@
1
1
  ---
2
- name: function-point-test
3
- description: "输入模块名,根据预设规则测算并输出功能点列表CSV"
2
+ name: function-point-analyzer
3
+ description: "自动识别工程模块并分析Git提交记录,按月份输出功能点统计CSV到子文件夹"
4
+ allowed-tools: Read(**), Write(.aico/功能点/**/*.csv), Bash
5
+ argument-hint: [模块名]
4
6
  ---
5
7
 
6
- # 功能点标准分类
7
- ILF对应10,EI对应4,EO对应4,EQ对应5。
8
+ ## 用法
8
9
 
9
- - 内部逻辑文件(ILF): 10 点(如可停输界面新增)
10
- - 外部查询(EQ): 4 点(如可停输界面导出、筛选)
11
- - 外部输入(EI): 4 点(如可停输界面删除、修改)
10
+ `/base:功能点测算 [模块名]`
12
11
 
13
- # 规则
12
+ ## 自动加载的项目上下文:
13
+ @/CLAUDE.md
14
14
 
15
- 严格遵循以下规则:
15
+ ## 全生命周期管理
16
16
 
17
- 1. **查询/导出类** -> `外部查询 (EQ)`, 4 点
18
- 2. **提交/变更类** -> `外部输入 (EI)`, 4 点
19
- 3. **纯 UI 交互类** -> `内部逻辑文件 (ILF)`, 10 点
20
- 4. **绝不使用** `功能点标准分类` 以外的类别。
17
+ 作为功能点测算的指挥官,统筹整个功能点分析流程,明确各阶段职责和智能体调用关系:
21
18
 
22
- # 任务
19
+ ### 🎯 工程识别阶段
20
+ **职责**:检测Git环境,识别项目基础信息
21
+ **执行环节**:步骤1-2
22
+ **调用智能体**:`function-point-analyzer`
23
+ **前置条件**:无
24
+ **输出**:项目名称、项目类型确认信息
23
25
 
24
- `<模块名>` 模块生成功能点列表,并输出到 `prd/功能点/结果/<模块名>功能点列表.csv`。
26
+ ### 🔍 数据采集阶段
27
+ **职责**:获取Git提交记录,按月份分组
28
+ **执行环节**:步骤3
29
+ **调用智能体**:`function-point-analyzer`
30
+ **前置条件**:工程识别完成
31
+ **输出**:近3个月Git提交记录分组数据
25
32
 
26
- 注意:一级模块必须从`可用模块`列表中选取
33
+ ### 📊 功能点分析阶段
34
+ **职责**:智能识别功能点类型,提取模块层级
35
+ **执行环节**:步骤4-6
36
+ **调用智能体**:`function-point-analyzer`
37
+ **前置条件**:Git数据采集完成
38
+ **输出**:功能点分类结果、模块层级信息
39
+
40
+ ### 📋 报告生成阶段
41
+ **职责**:生成CSV统计报告,输出分析摘要
42
+ **执行环节**:步骤7-8
43
+ **调用智能体**:`function-point-analyzer`
44
+ **前置条件**:功能点分析完成
45
+ **输出**:`.aico/功能点/`目录下的CSV文件和统计摘要
46
+
47
+ ## 编排说明
48
+
49
+ **步骤 1**:检查当前目录是否为Git仓库,确认工程环境。
50
+
51
+ **步骤 2**:根据用户输入和上下文智能识别需要执行的功能点测算流程:
52
+
53
+ ### 智能体调用决策逻辑
54
+
55
+ **基于用户输入和项目状态的智能路由**:
56
+
57
+ 1. **初始判断**:分析用户输入内容,识别是否包含模块名参数
58
+ 2. **环境检查**:验证当前目录是否为Git仓库
59
+ 3. **智能路由**:
60
+ - 如果环境检查通过 → 调用 `function-point-analyzer` 智能体
61
+ - 如果环境检查失败 → 提示用户"当前目录不是Git仓库,请切换到项目根目录"
62
+
63
+ 4. **执行机制**:`function-point-analyzer` 智能体严格按照本模板的8个标准步骤执行:
64
+ - 步骤1:工程识别阶段
65
+ - 步骤2:项目基础信息采集
66
+ - 步骤3:Git数据批量获取阶段
67
+ - 步骤4:功能点智能识别阶段
68
+ - 步骤5:模块层级智能提取阶段
69
+ - 步骤6:智能属性赋值规则
70
+ - 步骤7:CSV文件生成阶段
71
+ - 步骤8:统计分析与输出阶段
72
+
73
+ 5. **输出验证**:确保生成的CSV文件符合格式规范,统计摘要准确完整
74
+
75
+ ### 执行约束
76
+
77
+ **操作边界**:
78
+ - 📁 **文件操作**:只在 `.aico/功能点/` 目录下创建CSV文件
79
+ - 🔒 **权限控制**:需要读取Git记录和写入文件的权限
80
+ - 🏗️ **架构保护**:保持现有项目结构不变,只进行数据分析和报告生成
81
+
82
+ **安全防护**:
83
+ - ✅ **输入验证**:对Git提交记录进行安全过滤
84
+ - 🛡️ **数据保护**:不修改任何源代码文件,只进行统计分析
85
+ - ⚠️ **风险预警**:识别潜在的数据解析问题并提前预警
86
+
87
+ ## 流程可视化
88
+
89
+ ```mermaid
90
+ graph TD
91
+ A[用户输入功能点测算需求] --> B{环境检查}
92
+ B -->|Git仓库| C[function-point-analyzer]
93
+ B -->|非Git仓库| D[提示用户切换到项目根目录]
94
+
95
+ C --> E[工程识别阶段]
96
+ E --> F[数据采集阶段]
97
+ F --> G[功能点分析阶段]
98
+ G --> H[报告生成阶段]
99
+ H --> I[输出CSV文件和统计摘要]
100
+ I --> J[完成]
101
+ ```
102
+
103
+ ---
104
+
105
+ # 🔄 标准执行流程
106
+
107
+ ## 步骤1:工程识别阶段(必须优先执行)
108
+
109
+ ### 🔍 Git环境检测
110
+ **规则**:
111
+ 1. 检查当前目录是否为Git仓库
112
+ 2. 如果不是Git仓库 → 终止执行并提示用户
113
+
114
+ **执行命令**:
115
+ ```bash
116
+ git rev-parse --is-inside-work-tree
117
+ ```
118
+
119
+ **成功标准**:
120
+ - 返回值为`true`
121
+ - 当前目录存在`.git`目录
122
+
123
+ ---
124
+
125
+ ## 步骤2:项目基础信息采集
126
+
127
+ ### 📋 项目名称识别规则(按优先级):
128
+ 1. **最高优先级**:从`package.json`获取`name`字段
129
+ ```
130
+ package.json → package.name字段
131
+ ```
132
+ 2. **次要优先级**:从Git远程URL提取项目名
133
+ ```
134
+ git remote get-url origin → 从URL中提取仓库名
135
+ 示例:https://github.com/user/aico-cli → aico-cli
136
+ ```
137
+ 3. **最低优先级**:使用当前目录名
138
+
139
+ ### 🔧 项目类型判定规则:
140
+ ```
141
+ 文件存在判定逻辑 → 项目类型:
142
+ ├── package.json → Node.js
143
+ ├── pom.xml → Java
144
+ ├── requirements.txt → Python
145
+ ├── Cargo.toml → Rust
146
+ ├── go.mod → Go
147
+ └── Gemfile → Ruby
148
+ ```
149
+
150
+ ### ✅ 信息确认阶段:
151
+ 执行完成后必须输出确认信息:
152
+ ```
153
+ ✅ 工程识别完成:
154
+ 项目名称: <项目名称>
155
+ 项目类型: <项目类型>
156
+ ```
157
+
158
+ ---
159
+
160
+ ## 步骤3:Git数据批量获取阶段
161
+
162
+ ### 📅 时间范围计算规则:
163
+ **输入参数**:默认3个月(可通过--months调整)
164
+ **计算逻辑**:
165
+ ```javascript
166
+ const startDate = new Date();
167
+ startDate.setMonth(startDate.getMonth() - months);
168
+ // 格式化为 YYYY-MM-DD
169
+ ```
170
+
171
+ ### 📊 Git提交记录获取规则:
172
+ **执行命令**:
173
+ ```bash
174
+ git log --since="YYYY-MM-DD" --pretty=format:"%H|%ad|%an|%s" --date=short --name-only
175
+ ```
176
+
177
+ **数据字段说明**:
178
+ - `%H`:提交哈希
179
+ - `%ad`:提交日期(YYYY-MM-DD格式)
180
+ - `%an`:作者名称
181
+ - `%s`:提交消息
182
+
183
+ ### 🗂️ 数据分组规则:
184
+ 按月份对提交记录进行分组:
185
+ ```
186
+ 分组键:YYYY-MM格式(如2025-10)
187
+ 分组数据:该月份的所有提交记录
188
+ ```
189
+
190
+ ---
191
+
192
+ ## 步骤4:功能点智能识别阶段
193
+
194
+ ### 🎯 功能点分类判定规则(严格匹配):
195
+
196
+ #### 内部逻辑文件(ILF)- 10点
197
+ **匹配模式**(任一匹配即判定为ILF):
198
+ ```regex
199
+ /新增.*界面/i
200
+ /创建.*模块/i
201
+ /实现.*功能/i
202
+ /添加.*页面/i
203
+ /feat\(.+\):/i
204
+ ```
205
+
206
+ #### 外部查询(EQ)- 4点
207
+ **匹配模式**(任一匹配即判定为EQ):
208
+ ```regex
209
+ /查询.*数据/i
210
+ /导出.*报表/i
211
+ /筛选.*条件/i
212
+ /搜索.*功能/i
213
+ /get.*list/i
214
+ ```
215
+
216
+ #### 外部输入(EI)- 4点
217
+ **匹配模式**(任一匹配即判定为EI):
218
+ ```regex
219
+ /修改.*数据/i
220
+ /删除.*记录/i
221
+ /更新.*信息/i
222
+ /编辑.*内容/i
223
+ /fix\(.+\):/i
224
+ ```
225
+
226
+ #### 外部输出(EO)- 5点
227
+ **匹配模式**(任一匹配即判定为EO):
228
+ ```regex
229
+ /生成.*报告/i
230
+ /输出.*结果/i
231
+ /计算.*统计/i
232
+ /分析.*数据/i
233
+ ```
234
+
235
+ ### 📈 默认兜底规则:
236
+ 如果提交消息未匹配任何模式,但包含代码文件,则判定为**内部逻辑文件(ILF)- 10点**:
237
+ ```javascript
238
+ if (results.length === 0 && files.some(file =>
239
+ file.endsWith('.ts') || file.endsWith('.js') || file.endsWith('.py')
240
+ )) {
241
+ // 默认为ILF,10点
242
+ }
243
+ ```
244
+
245
+ ---
246
+
247
+ ## 步骤5:模块层级智能提取阶段
248
+
249
+ ### 🏗️ 模块层级提取规则:
250
+
251
+ #### 优先级1:从文件路径提取(主要来源)
252
+ ```
253
+ 路径示例:src/utils/commands/function-point.ts
254
+ 提取结果:
255
+ ├── 一级模块: utils
256
+ ├── 二级模块: commands
257
+ ├── 三级模块: function-point
258
+ └── 四级模块: (留空)
259
+ ```
260
+
261
+ **处理逻辑**:
262
+ 1. 过滤包含`src/`的文件路径
263
+ 2. 移除`src/`前缀
264
+ 3. 按`/`分割路径组件
265
+ 4. 最多提取三个层级的模块信息
266
+
267
+ #### 优先级2:从提交消息提取(辅助验证)
268
+ **正则表达式**:
269
+ ```regex
270
+ /(?:模块|module)[::]\s*(\w+)/i
271
+ /(?:功能|feature)[::]\s*(\w+)/i
272
+ /(?:组件|component)[::]\s*(\w+)/i
273
+ ```
274
+
275
+ ---
276
+
277
+ ## 步骤6:智能属性赋值规则
278
+
279
+ ### 🏷️ 功能点计数项命名规则:
280
+ ```
281
+ 逻辑:提取中文关键词 + 功能点类型简称
282
+ 模式:<关键词序列>_<类型>
283
+
284
+ 示例:
285
+ "新增用户管理界面" → 新增用户界面_ILF
286
+ "修复登录验证问题" → 修复登录验证_EI
287
+ "导出订单数据查询" → 导出订单查询_EQ
288
+ ```
289
+
290
+ ### 📊 属性赋值标准:
291
+
292
+ #### 复用程度判定:
293
+ ```
294
+ 逻辑:根据功能点类型和描述关键词
295
+ 内部逻辑文件(ILF) → 低 (新建为主)
296
+ 外部查询(EQ) → 中 (常见查询模式)
297
+ 外部输入(EI) → 中 (常见操作模式)
298
+ 外部输出(EO) → 高 (复杂处理逻辑)
299
+ ```
300
+
301
+ #### 修改类型判定:
302
+ ```
303
+ 新增/创建/实现 → 新增
304
+ 修改/调整/优化 → 修改
305
+ 删除/移除/清理 → 删除
306
+ 修复/解决/调整 → 修复
307
+ ```
308
+
309
+ ---
310
+
311
+ ## 步骤7:CSV文件生成阶段
312
+
313
+ ### 📁 目录结构创建规则:
314
+ ```
315
+ 基础目录:.aico/功能点/
316
+ 月份子目录:中文月份名称(1月、2月、3月...)
317
+ 文件命名:<项目名>_功能点统计.csv
318
+ ```
319
+
320
+ ### 📋 CSV格式规范:
321
+
322
+ #### 文件格式要求:
323
+ - **文件编码**:UTF-8 with BOM
324
+ - **分隔符**:英文逗号(,)
325
+ - **引号字符**:双引号(")
326
+ - **换行符**:CRLF(\r\n)
327
+ - **文件扩展名**:.csv
328
+
329
+ #### CSV字段顺序(严格按此顺序):
330
+ ```
331
+ 一级模块,二级模块(选填),三级模块(选填),四级模块(选填),
332
+ 功能项描述,功能点计数项名称,类别,未调整功能点数(UFP),
333
+ 复用程度,修改类型,关联人
334
+ ```
335
+
336
+ #### 字段处理规则:
337
+ - **一级模块**:必须填写,默认为"核心模块"
338
+ - **二级/三级模块**:可选,无则留空
339
+ - **四级模块**:固定留空
340
+ - **功能项描述**:原始提交消息,需要转义双引号为""
341
+ - **功能点计数项名称**:生成的计数项名称
342
+ - **类别**:功能点类型分类
343
+ - **未调整功能点数**:对应点数(4/5/10)
344
+ - **复用程度**:低/中/高
345
+ - **修改类型**:新增/修改/删除/修复
346
+ - **关联人**:Git提交作者
347
+
348
+ ---
349
+
350
+ ## 步骤8:统计分析与输出阶段
351
+
352
+ ### 📊 统计摘要计算规则:
353
+
354
+ #### 总体统计:
355
+ - 总计功能点数 = 所有功能点未调整功能点数之和
356
+ - 总计功能点记录数 = 所有功能点记录数量
357
+
358
+ #### 分类统计:
359
+ - 按类型分组:内部逻辑文件、外部查询、外部输入、外部输出
360
+ - 按月份分组:10月、9月、8月等
361
+ - 按模块分组:utils、commands等一级模块
362
+
363
+ ### 📈 输出格式规范:
364
+ ```
365
+ ✅ 功能点分析完成!
366
+ 总计识别: <总数> 个功能点
367
+ 输出目录: <输出路径>
368
+
369
+ 📊 功能点统计摘要:
370
+ 总计功能点: <总数>
371
+ 按类型分布:
372
+ <类型名>: <数量>
373
+ 按月份分布:
374
+ <月份名>: <数量>
375
+ 按模块分布:
376
+ <模块名>: <数量>
377
+ ```
378
+
379
+ ---
380
+
381
+ # 🚨 执行约束与错误处理
382
+
383
+ ## ⛔ 必须终止的情况:
384
+ 1. 当前目录不是Git仓库
385
+ 2. 指定时间范围内无任何提交记录
386
+ 3. 无法识别到任何有效的功能点
387
+
388
+ ## ⚠️ 警告但继续执行的情况:
389
+ 1. 项目名称无法识别(使用目录名)
390
+ 2. 项目类型无法识别(标记为Unknown)
391
+ 3. 某些提交无法解析功能点(跳过该提交)
392
+
393
+ ## ✅ 成功标准:
394
+ 1. 至少识别到1个有效功能点
395
+ 2. 成功创建月份子目录
396
+ 3. 成功生成CSV文件
397
+ 4. 成功输出统计摘要
398
+
399
+ ---
400
+
401
+ # 📋 执行检查清单
402
+
403
+ 执行前确保:
404
+ - [ ] 当前目录是Git仓库
405
+ - [ ] 有读取Git记录的权限
406
+ - [ ] 有写入.aico目录的权限
407
+
408
+ 执行中验证:
409
+ - [ ] Git命令执行成功
410
+ - [ ] 提交记录解析正确
411
+ - [ ] 功能点分类准确
412
+ - [ ] 模块层级提取完整
413
+
414
+ 执行后确认:
415
+ - [ ] CSV文件生成成功
416
+ - [ ] 目录结构正确
417
+ - [ ] 数据格式符合规范
418
+ - [ ] 统计摘要准确
27
419
 
28
420
  # 相关内容
29
421
 
@@ -104,7 +496,7 @@ ILF对应10,EI对应4,EO对应4,EQ对应5。
104
496
  - 使用模糊笼统词汇的需求
105
497
  - 与技术实现相关的描述
106
498
 
107
- ## 研发需求规范性描述细则
499
+ ## 功能标题和描述细则
108
500
  为了规范化录入研发需求,制定该细则,细则针对研发需求的标题及描述制定了描述规则,规则如下:
109
501
  研发需求标题描述句式
110
502
  触发主体+核心业务对象+精确动作动词+处理逻辑(复杂计算逻辑需要描述)+关联的数据实体(外部)(外部系统获取信息,通过“(外部)”来标识,存在外部接口数据需要描述)
@@ -149,5 +541,63 @@ ILF对应10,EI对应4,EO对应4,EQ对应5。
149
541
  ❌ 2025年6月-XX项目开发运维需求
150
542
  ❌ 系统优化
151
543
  ❌ 开发工业互联网大屏项目
152
- 研发需求质量评分规则
153
- 触发主体(20分)、业务对象(30分)、核心动词(30分)、业务规则(10分)、关联的外部对象(10分),满分100分,缺少一项扣除对应分数
544
+ ---
545
+
546
+ # 📝 完整执行示例
547
+
548
+ 以下是一个完整的功能点测算执行流程示例:
549
+
550
+ ## 输入
551
+ ```markdown
552
+ 启动功能点测算智能体
553
+ ```
554
+
555
+ ## 执行过程
556
+ 1. ✅ 检测Git环境 → 成功
557
+ 2. ✅ 识别项目信息 → aico-cli, Node.js
558
+ 3. ✅ 获取Git记录 → 102个提交,3个月
559
+ 4. ✅ 功能点分析 → 识别62个功能点
560
+ 5. ✅ CSV生成 → 3个月份文件夹
561
+ 6. ✅ 统计摘要 → 完整输出
562
+
563
+ ## 输出
564
+ ```
565
+ ✅ 工程识别完成:
566
+ 项目名称: aico-cli
567
+ 项目类型: Node.js
568
+
569
+ 📊 正在分析近3个月的Git提交记录...
570
+ 📈 正在分析功能点...
571
+ ✅ 2025-10: 分析 11 个提交,识别 3 个功能点
572
+ ✅ 2025-09: 分析 58 个提交,识别 31 个功能点
573
+ ✅ 2025-08: 分析 33 个提交,识别 28 个功能点
574
+
575
+ ✅ 功能点分析完成!
576
+ 总计识别: 62 个功能点
577
+ 输出目录: .aico/功能点
578
+
579
+ 📊 功能点统计摘要:
580
+ 总计功能点: 62
581
+ 按类型分布:
582
+ 内部逻辑文件(ILF): 62
583
+ 按月份分布:
584
+ 10月: 3
585
+ 9月: 31
586
+ 8月: 28
587
+ 按模块分布:
588
+ utils: 18
589
+ commands: 10
590
+ cli-setup: 17
591
+ ```
592
+
593
+ ## 生成文件
594
+ ```
595
+ .aico/功能点/
596
+ ├── 10月/aico-cli_功能点统计.csv
597
+ ├── 9月/aico-cli_功能点统计.csv
598
+ └── 8月/aico-cli_功能点统计.csv
599
+ ```
600
+
601
+ ---
602
+
603
+ **🎯 该智能体严格执行8个步骤的标准化流程,确保功能点测算的准确性和一致性。**