cangming-ai-dev-kit 0.1.1 → 0.2.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8a6f74b40fed1fce2a17a568ad923914676bd04155039e60a426cfb7a9761554
4
- data.tar.gz: 6a2e6f941ba852212ff6e00c4e97752fb1dbc45fad49b6cfc326ba8a0813f0c6
3
+ metadata.gz: 03244c61f29921b849fdaff2c42b96372f4a610292a047ddbb8c5690d7297b52
4
+ data.tar.gz: 0c3eade19ade8cac3c36b763de9c24c98c81f9758ace28496f0e8e619411128c
5
5
  SHA512:
6
- metadata.gz: 5045addc916a1a5db090c8d6f1ce5cfa36ccc00868435f23225cb0089b06307a77b949cee074f8cf31c87385ab412304608ae4efcb1499e5a93234e820f5d9cb
7
- data.tar.gz: 5a6f8f54fc98d92dc4f4bbc82aeb1bd4db6a176b99cdc2590ac63a9bddd3b6d2b79b90da71e3ce7705b4a22dd077850c1b17d606393d2b2dc8195c3cffc6afbd
6
+ metadata.gz: 4082b3d598cc216203bbebfa8c380d08f5c4c4e86790c9fabb6a490127a8da8fff405f9c247b45d1af705b392737f6fb25bc9187c236985f8205f35141046ed8
7
+ data.tar.gz: 834dc50997173243deb5a071ae2898eacea1dde22d0da2feb0f7c19652d38401dfa8b2f823eab1c9c761bdda0267214e8257637c0cbb59d1db7111c9cdc1dfe8
@@ -0,0 +1,125 @@
1
+ # gem-dev-workflow — cangming-ai-dev-kit 开发工作流
2
+
3
+ ## description
4
+ cangming-ai-dev-kit 插件的完整开发与发布工作流,包括 skills 编辑、Gem 打包、RubyGems 发布、版本管理。
5
+
6
+ ## when to use
7
+ - 修改 core/ domains/ 下的 skills / references / scripts
8
+ - 修改 lib/ exe/ 下的 Ruby CLI 代码
9
+ - 修改 gemspec、版本号、README
10
+ - 发布新版本到 RubyGems.org
11
+ - 提交代码到 GitHub
12
+
13
+ ## workflow
14
+
15
+ ### 1. 修改阶段
16
+
17
+ ```mermaid
18
+ flowchart LR
19
+ A[编辑 SKILL.md] --> B[编辑 Ruby CLI]
20
+ B --> C[编辑 references/scripts]
21
+ C --> D[本地验证]
22
+ ```
23
+
24
+ - **skills**: `core/skills/*/SKILL.md` 或 `domains/*/skills/*/SKILL.md`
25
+ - **references**: `core/references/` 或 `domains/*/references/`
26
+ - **scripts**: `core/scripts/` 或 `domains/*/scripts/`
27
+ - **Ruby CLI**: `lib/cangming_ai_dev_kit/` 或 `exe/cangming-dev-kit`
28
+
29
+ ### 2. 本地验证
30
+
31
+ ```bash
32
+ # 1. 验证项目结构完整性
33
+ cangming-dev-kit verify
34
+
35
+ # 2. 验证 sync 能正确同步 skills
36
+ bash scripts/sync_skills_to_adapters.sh --dry-run
37
+
38
+ # 3. 实际同步(清空并重新生成)
39
+ bash scripts/sync_skills_to_adapters.sh
40
+ ```
41
+
42
+ ### 3. 构建与安装测试
43
+
44
+ ```bash
45
+ # 1. 构建 gem
46
+ gem build cangming-ai-dev-kit.gemspec
47
+
48
+ # 2. 本地安装测试
49
+ gem install --user-install ./cangming-ai-dev-kit-<VERSION>.gem
50
+
51
+ # 3. 验证 CLI
52
+ cangming-dev-kit version
53
+ cangming-dev-kit sync --dry-run
54
+ cangming-dev-kit verify
55
+ ```
56
+
57
+ ### 4. 版本管理
58
+
59
+ | 场景 | 版本变动 | 示例 |
60
+ |------|---------|------|
61
+ | Bug 修复 / 小调整 | PATCH +1 | 0.1.0 → 0.1.1 |
62
+ | 新增功能(兼容) | MINOR +1 | 0.1.0 → 0.2.0 |
63
+ | 破坏性变更 | MAJOR +1 | 0.1.0 → 1.0.0 |
64
+
65
+ **修改位置**:
66
+ - `lib/cangming_ai_dev_kit/version.rb` — `VERSION` 常量
67
+ - `cangming-ai-dev-kit.gemspec` — 如果有文件增删,同步更新 `spec.files`
68
+
69
+ ### 5. 发布
70
+
71
+ ```bash
72
+ # 1. 推送到 RubyGems.org
73
+ gem push cangming-ai-dev-kit-<VERSION>.gem
74
+
75
+ # 2. 验证安装
76
+ gem install cangming-ai-dev-kit --user-install
77
+
78
+ # 3. 提交 git 并打 tag
79
+ git add -A
80
+ git commit -m "feat: ... (v<VERSION>)"
81
+ git tag v<VERSION>
82
+ git push && git push --tags
83
+ ```
84
+
85
+ ### 6. 发布后检查清单
86
+
87
+ - [ ] `gem install cangming-ai-dev-kit` 成功
88
+ - [ ] `cangming-dev-kit version` 输出正确版本
89
+ - [ ] `cangming-dev-kit sync --dry-run` 发现所有 skills
90
+ - [ ] `cangming-dev-kit verify` 全部 PASS
91
+ - [ ] GitHub 已推送并打 tag
92
+ - [ ] RubyGems.org 页面可访问
93
+
94
+ ## 目录结构速查
95
+
96
+ ```
97
+ cangming-ai-dev-kit/
98
+ ├── core/skills/ # 通用开发 skills(plan / code / review / verify)
99
+ ├── core/references/ # 通用参考文档
100
+ ├── core/scripts/ # 通用检测/验证脚本
101
+ ├── domains/*/skills/ # 领域 skills(harmony-plan / harmony-code / ...)
102
+ ├── domains/*/references/ # 领域知识文档
103
+ ├── domains/*/scripts/ # 领域构建/测试脚本
104
+ ├── lib/ # Ruby Gem 核心代码
105
+ ├── exe/ # CLI 可执行入口
106
+ ├── adapters/ # 适配器骨架(源码,skills/ 目录由 sync 生成)
107
+ ├── scripts/ # Shell wrapper 委托给 CLI
108
+ └── marketplace/ # 私有 marketplace 示例
109
+ ```
110
+
111
+ ## 注意事项
112
+
113
+ - **skills 目录** `adapters/*/skills/` 由 `sync` 命令自动生成,**不要手动编辑**,修改源文件后重新 sync 即可
114
+ - **gemspec 同步**: 新增文件时必须在 `cangming-ai-dev-kit.gemspec` 的 `spec.files` 中添加对应路径
115
+ - **零依赖**: 保持纯 Ruby stdlib,不引入外部 gem 依赖
116
+ - **Ruby >= 2.6**: 兼容 macOS 系统 Ruby,不使用过新的语法特性
117
+ - **shell 脚本**: 保持可执行 (`chmod +x`),在 `.gemspec` 中登记
118
+
119
+ ## done criteria
120
+
121
+ - [ ] 所有修改已在本地验证通过(verify / sync --dry-run)
122
+ - [ ] gem 构建成功
123
+ - [ ] 新版本 gem 本地安装测试通过
124
+ - [ ] RubyGems.org 已发布
125
+ - [ ] GitHub 已提交并打 tag
@@ -0,0 +1,34 @@
1
+ # Flutter 常见错误与排查
2
+
3
+ ## 编译错误
4
+
5
+ | 错误 | 原因 | 解决 |
6
+ |------|------|------|
7
+ | `The method 'X' isn't defined for the type 'Y'` | 方法不存在或 import 缺失 | 检查 import、拼写、版本兼容性 |
8
+ | `Undefined name` | 变量未声明或 import 缺失 | 检查作用域和 import |
9
+ | `Expected a value of type 'X' but got 'Y'` | 类型不匹配 | 检查 null safety 和类型转换 |
10
+ | `The argument type 'X' can't be assigned` | 参数类型不匹配 | 检查函数签名 |
11
+ | `'const' can't be used with non-const constructor` | const 误用 | 去掉 const 或确认构造方法为 const |
12
+ | `Only static members can be accessed in initializers` | 在初始化列表访问了实例成员 | 改为 static 或使用 late |
13
+ | `The non-nullable variable must be assigned` | late 变量未初始化 | 确保赋值路径完整 |
14
+
15
+ ## 运行时错误
16
+
17
+ | 错误 | 原因 | 解决 |
18
+ |------|------|------|
19
+ | `setState() called after dispose()` | 在 widget 销毁后调了 setState | 检查 `mounted` 属性 |
20
+ | `Could not find the correct Provider` | Provider 未在 widget 树上层注册 | 检查 MultiProvider 配置 |
21
+ | `Vertical viewport was given unbounded height` | Column 嵌套 ListView 未限制高度 | 用 `Expanded` / `SizedBox` 包裹 |
22
+ | `A RenderFlex overflowed by X pixels` | 布局超出屏幕 | 用 `Flexible` / `Expanded` / 滚动 |
23
+ | `NoSuchMethodError: The method 'X' was called on null` | 空值访问 | 检查 null safety 和初始化 |
24
+ | `A build function returned null` | build() 返回了 null | build() 必须返回 widget |
25
+
26
+ ## Flutter CLI 错误
27
+
28
+ | 错误 | 原因 | 解决 |
29
+ |------|------|------|
30
+ | `Flutter: command not found` | Flutter 未加入 PATH | 检查 Flutter SDK 安装和 PATH |
31
+ | `Waiting for another flutter command` | 前一个 flutter 命令卡住 | `killall flutter` 或重启终端 |
32
+ | `Your Flutter SDK version is X but requires Y` | SDK 版本不匹配 | `flutter upgrade` 或降级依赖 |
33
+ | `A dependency may need to be resolved` | 版本冲突 | `flutter pub deps` 查看依赖树 |
34
+ | `Unable to load asset` | 资源路径错误 | 检查 pubspec.yaml assets 声明 |
@@ -0,0 +1,88 @@
1
+ # Flutter 常用命令
2
+
3
+ ## 项目生命周期
4
+
5
+ ```bash
6
+ # 创建项目
7
+ flutter create --org com.example --project-name my_app .
8
+
9
+ # 获取依赖
10
+ flutter pub get
11
+
12
+ # 升级依赖
13
+ flutter pub upgrade
14
+
15
+ # 清理构建缓存
16
+ flutter clean
17
+ ```
18
+
19
+ ## 验证
20
+
21
+ ```bash
22
+ # 静态分析
23
+ flutter analyze
24
+
25
+ # 运行测试
26
+ flutter test
27
+
28
+ # 测试覆盖率(需装 lcov)
29
+ flutter test --coverage
30
+ genhtml coverage/lcov.info -o coverage/html
31
+ ```
32
+
33
+ ## 构建
34
+
35
+ ```bash
36
+ # Android APK
37
+ flutter build apk --debug
38
+ flutter build apk --release
39
+
40
+ # Android AppBundle
41
+ flutter build appbundle --release
42
+
43
+ # iOS(需 macOS)
44
+ flutter build ios --debug --no-codesign
45
+ flutter build ios --release
46
+
47
+ # Web
48
+ flutter build web
49
+
50
+ # macOS 桌面
51
+ flutter build macos
52
+
53
+ # Linux 桌面
54
+ flutter build linux
55
+
56
+ # Windows 桌面
57
+ flutter build windows
58
+ ```
59
+
60
+ ## 设备
61
+
62
+ ```bash
63
+ # 列出设备
64
+ flutter devices
65
+
66
+ # 运行到指定设备
67
+ flutter run -d <device_id>
68
+
69
+ # 运行到 Chrome
70
+ flutter run -d chrome
71
+
72
+ # 热重载(运行时按 r)
73
+ # 热重启(运行时按 R)
74
+ ```
75
+
76
+ ## Package 管理
77
+
78
+ ```bash
79
+ # 添加依赖
80
+ flutter pub add provider
81
+ flutter pub add --dev flutter_lints
82
+
83
+ # 移除依赖
84
+ flutter pub remove provider
85
+
86
+ # 查看过时的依赖
87
+ flutter pub outdated
88
+ ```
@@ -0,0 +1,45 @@
1
+ # Flutter 项目结构
2
+
3
+ ## 推荐结构(中型项目)
4
+
5
+ ```
6
+ my_app/
7
+ ├── lib/
8
+ │ ├── main.dart # 入口,runApp
9
+ │ ├── app.dart # MaterialApp / CupertinoApp 配置
10
+ │ ├── models/ # 数据模型
11
+ │ │ ├── user.dart
12
+ │ │ └── todo.dart
13
+ │ ├── pages/ # 页面(全屏级 widget)
14
+ │ │ ├── home_page.dart
15
+ │ │ └── settings_page.dart
16
+ │ ├── widgets/ # 可复用 widget
17
+ │ │ ├── app_drawer.dart
18
+ │ │ └── loading_indicator.dart
19
+ │ ├── services/ # API / 本地存储
20
+ │ │ ├── api_client.dart
21
+ │ │ └── storage_service.dart
22
+ │ ├── providers/ # 状态管理
23
+ │ │ └── todo_provider.dart
24
+ │ └── utils/ # 工具函数
25
+ │ └── validators.dart
26
+ ├── test/
27
+ │ ├── widget_test.dart
28
+ │ ├── models/
29
+ │ │ └── todo_test.dart
30
+ │ └── services/
31
+ │ └── api_client_test.dart
32
+ ├── pubspec.yaml
33
+ ├── analysis_options.yaml
34
+ └── README.md
35
+ ```
36
+
37
+ ## 关键文件说明
38
+
39
+ | 文件 | 用途 |
40
+ |------|------|
41
+ | `pubspec.yaml` | 依赖声明、应用元信息 |
42
+ | `analysis_options.yaml` | lint 规则配置 |
43
+ | `lib/main.dart` | 程序入口 |
44
+ | `lib/app.dart` | 主题、路由、全局配置 |
45
+ | `test/` | 镜像 lib/ 结构的测试目录 |
@@ -0,0 +1,66 @@
1
+ # Flutter Widget 开发规则
2
+
3
+ ## 组件拆分原则
4
+
5
+ - **一屏一个页面 widget**: pages/home_page.dart
6
+ - **页面内拆为小组件**: widgets/todo_item.dart
7
+ - **只复用的才抽成独立文件**: 3 处以上使用或 props > 5 个
8
+
9
+ ## StatelessWidget vs StatefulWidget
10
+
11
+ ```dart
12
+ // 无内部状态 → StatelessWidget
13
+ class MyButton extends StatelessWidget {
14
+ const MyButton({super.key, required this.label});
15
+ final String label;
16
+ // ...
17
+ }
18
+
19
+ // 有内部状态 → StatefulWidget
20
+ class Counter extends StatefulWidget {
21
+ const Counter({super.key});
22
+ @override
23
+ State<Counter> createState() => _CounterState();
24
+ }
25
+ ```
26
+
27
+ ## build() 方法规范
28
+
29
+ - **保持 build() 简洁**:条件逻辑拆为 `_buildXxx()` 方法
30
+ - **不调用副作用**:不调 API、不写文件
31
+ - **build() 内不要 setState**
32
+
33
+ ```dart
34
+ // 好的写法
35
+ @override
36
+ Widget build(BuildContext context) {
37
+ return Scaffold(
38
+ body: _isLoading ? _buildLoading() : _buildContent(),
39
+ );
40
+ }
41
+
42
+ Widget _buildLoading() => const Center(child: CircularProgressIndicator());
43
+ Widget _buildContent() => ListView.builder(/* ... */);
44
+ ```
45
+
46
+ ## 列表性能
47
+
48
+ - **用 ListView.builder**(懒加载),不用 `ListView(children:[...])`
49
+ - **固定高度的列表项用 ListView.builder + itemExtent**
50
+ - **包含多种 layout 的列表用 CustomScrollView + SliverList**
51
+
52
+ ## 状态管理选型
53
+
54
+ | 场景 | 方案 |
55
+ |------|------|
56
+ | 单页面内状态 | `setState` + StatefulWidget |
57
+ | 跨页面共享状态 | Provider |
58
+ | 复杂异步状态 | Riverpod |
59
+ | 大型项目 | Riverpod 或 Bloc |
60
+ | 简单全局状态 | ChangeNotifierProvider |
61
+
62
+ ## 自适应布局
63
+
64
+ - 使用 `MediaQuery`、`LayoutBuilder` 响应屏幕变化
65
+ - 使用 `Expanded`、`Flexible` 弹性布局
66
+ - Web 端用 `Platform.isWeb` 区分平台行为
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env bash
2
+ # flutter 项目构建
3
+ set -euo pipefail
4
+
5
+ cd "$(git rev-parse --show-toplevel 2>/dev/null || echo .)"
6
+
7
+ if [ ! -f pubspec.yaml ]; then
8
+ echo "NOT_A_FLUTTER_PROJECT: 当前目录不是 Flutter 项目"
9
+ exit 0
10
+ fi
11
+
12
+ echo "=== flutter build apk --debug ==="
13
+ if command -v flutter &>/dev/null; then
14
+ flutter build apk --debug 2>&1 || echo "BUILD_FAILED(非 Android 环境可跳过)"
15
+ else
16
+ echo "SKIP: flutter 未安装"
17
+ fi
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env bash
2
+ # flutter 项目 lint 检查
3
+ set -euo pipefail
4
+
5
+ cd "$(git rev-parse --show-toplevel 2>/dev/null || echo .)"
6
+
7
+ if [ ! -f pubspec.yaml ]; then
8
+ echo "NOT_A_FLUTTER_PROJECT: 当前目录不是 Flutter 项目"
9
+ exit 0
10
+ fi
11
+
12
+ echo "=== flutter pub get ==="
13
+ flutter pub get 2>&1 || true
14
+
15
+ echo ""
16
+ echo "=== flutter analyze ==="
17
+ flutter analyze 2>&1
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env bash
2
+ # flutter 项目测试
3
+ set -euo pipefail
4
+
5
+ cd "$(git rev-parse --show-toplevel 2>/dev/null || echo .)"
6
+
7
+ if [ ! -f pubspec.yaml ]; then
8
+ echo "NOT_A_FLUTTER_PROJECT: 当前目录不是 Flutter 项目"
9
+ exit 0
10
+ fi
11
+
12
+ echo "=== flutter test ==="
13
+ flutter test 2>&1
@@ -0,0 +1,47 @@
1
+ #!/usr/bin/env bash
2
+ # flutter 完整验证:lint → test → build
3
+ set -euo pipefail
4
+
5
+ cd "$(git rev-parse --show-toplevel 2>/dev/null || echo .)"
6
+
7
+ if [ ! -f pubspec.yaml ]; then
8
+ echo "NOT_A_FLUTTER_PROJECT: 当前目录不是 Flutter 项目"
9
+ echo "FLUTTER_VERIFY_SKIP"
10
+ exit 0
11
+ fi
12
+
13
+ PASS=0
14
+ FAIL=0
15
+
16
+ echo "===== 1/3 flutter pub get + analyze ====="
17
+ if bash "$(dirname "$0")/lint_flutter.sh"; then
18
+ echo " PASS"
19
+ PASS=$((PASS + 1))
20
+ else
21
+ echo " FAIL"
22
+ FAIL=$((FAIL + 1))
23
+ fi
24
+
25
+ echo ""
26
+ echo "===== 2/3 flutter test ====="
27
+ if bash "$(dirname "$0")/test_flutter.sh"; then
28
+ echo " PASS"
29
+ PASS=$((PASS + 1))
30
+ else
31
+ echo " FAIL"
32
+ FAIL=$((FAIL + 1))
33
+ fi
34
+
35
+ echo ""
36
+ echo "===== 3/3 flutter build ====="
37
+ if bash "$(dirname "$0")/build_flutter.sh"; then
38
+ echo " PASS"
39
+ PASS=$((PASS + 1))
40
+ else
41
+ echo " FAIL"
42
+ FAIL=$((FAIL + 1))
43
+ fi
44
+
45
+ echo ""
46
+ echo "====== FLUTTER_VERIFY_RESULT: PASS=$PASS FAIL=$FAIL ======"
47
+ [ "$FAIL" -eq 0 ] || exit 1
@@ -0,0 +1,60 @@
1
+ # flutter-code — Flutter 开发规则
2
+
3
+ ## description
4
+ Flutter/Dart 编码规范:widget 拆分、状态管理、分层架构、测试。
5
+
6
+ ## when to use
7
+ - 编写 Flutter widget 和页面
8
+ - 实现状态管理逻辑
9
+ - 编写 Dart 数据模型和 service
10
+ - 添加或更新测试
11
+
12
+ ## workflow
13
+ 1. 按计划创建文件结构
14
+ 2. 先写数据模型和 service 层
15
+ 3. 再写 widget 和页面
16
+ 4. 同步编写 widget test
17
+ 5. 验证:`flutter analyze` + `flutter test`
18
+
19
+ ## coding rules
20
+
21
+ ### 分层架构
22
+ ```
23
+ lib/
24
+ ├── main.dart # 入口
25
+ ├── app.dart # MaterialApp 配置
26
+ ├── models/ # 数据模型(不可变,使用 copyWith)
27
+ ├── pages/ # 页面级 widget(StatefulWidget)
28
+ ├── widgets/ # 可复用 widget(优先 StatelessWidget)
29
+ ├── services/ # API / 本地存储
30
+ └── providers/ # 状态管理(Provider / Riverpod)
31
+ ```
32
+
33
+ ### Widget 原则
34
+ - **无状态用 StatelessWidget**,不需要 setState
35
+ - **有状态用 StatefulWidget**,只在必要层级使用
36
+ - 不把复杂逻辑塞进 `build()`,拆成 `_buildHeader()`、`_buildBody()` 等方法
37
+ - 列表用 `ListView.builder`,不用 `ListView(children:[...])`
38
+
39
+ ### 状态管理
40
+ - 简单页面:`setState` + StatefulWidget
41
+ - 跨页面/复杂状态:Provider 或 Riverpod
42
+ - 状态定义在 model 中,逻辑在 service/provider 中
43
+
44
+ ### Dart 规范
45
+ - 使用 `required` 命名参数
46
+ - 使用 `const` 构造函数
47
+ - 避免 `dynamic`,用具体类型
48
+ - 使用 `copyWith` 模式更新不可变 model
49
+ - import 使用 `package:my_app/xxx.dart` 绝对路径
50
+
51
+ ### 测试要求
52
+ - 每个 widget 至少有一个 smoke test(能渲染)
53
+ - 业务逻辑写 unit test
54
+ - 修改后 `flutter test` 全部通过
55
+
56
+ ## done criteria
57
+ - [ ] `flutter analyze` 无 issue
58
+ - [ ] `flutter test` 全部通过
59
+ - [ ] 分层结构符合规范
60
+ - [ ] widget 拆解合理,无巨型 build()
@@ -0,0 +1,51 @@
1
+ # flutter-plan — Flutter 项目计划
2
+
3
+ ## description
4
+ 为 Flutter/Dart 项目制定开发计划,涵盖 widget 树设计、状态管理、路由、数据层。
5
+
6
+ ## when to use
7
+ - 开始一个新的 Flutter 页面或功能
8
+ - 重构现有的 Flutter widget 结构
9
+ - 涉及状态管理方案选型(setState / Provider / Riverpod / Bloc)
10
+ - 需要添加 package 依赖
11
+
12
+ ## workflow
13
+ 1. 确认页面结构和 widget 拆解方案
14
+ 2. 确定状态管理方式(简单用 setState,复杂用 Provider/Riverpod)
15
+ 3. 规划数据模型和 API/本地存储层
16
+ 4. 确认路由方案(MaterialPageRoute / go_router)
17
+ 5. 列出需要新增的 package
18
+ 6. 输出计划并获得确认
19
+
20
+ ## output format
21
+
22
+ ```markdown
23
+ ## Flutter 计划:{功能名称}
24
+
25
+ ### 页面结构
26
+ - Page1 → 组件A / 组件B
27
+ - Page2 → ...
28
+
29
+ ### 状态管理
30
+ {setState / Provider / Riverpod / Bloc}
31
+
32
+ ### 数据模型
33
+ {模型字段和关系}
34
+
35
+ ### 依赖变更
36
+ - 新增: {package}: {版本}
37
+ - 无需新增
38
+
39
+ ### 改动清单
40
+ - lib/pages/xxx_page.dart (新增)
41
+ - lib/models/xxx.dart (新增)
42
+ - lib/widgets/xxx.dart (新增)
43
+ - test/xxx_test.dart (新增/更新)
44
+ ```
45
+
46
+ ## done criteria
47
+ - [ ] 页面结构和 widget 拆解已确认
48
+ - [ ] 状态管理方案已选定
49
+ - [ ] 数据模型已定义
50
+ - [ ] 路由方案已确认
51
+ - [ ] 依赖变更已列出
@@ -0,0 +1,57 @@
1
+ # flutter-verify — Flutter 项目验证
2
+
3
+ ## description
4
+ Flutter 项目的 lint / test / build 验证流程。
5
+
6
+ ## when to use
7
+ - 修改代码后准备提交前
8
+ - CI 流程触发时
9
+ - 升级 Flutter SDK 或 package 后
10
+
11
+ ## workflow
12
+
13
+ ### 1. 静态分析
14
+ ```bash
15
+ cd <project>
16
+ flutter analyze
17
+ ```
18
+ **通过标准**: `No issues found!`
19
+
20
+ ### 2. 测试
21
+ ```bash
22
+ flutter test
23
+ ```
24
+ **通过标准**: All tests passed
25
+
26
+ ### 3. 构建
27
+ ```bash
28
+ # Android
29
+ flutter build apk --debug
30
+
31
+ # iOS (macOS only)
32
+ flutter build ios --debug --no-codesign
33
+
34
+ # Web
35
+ flutter build web
36
+ ```
37
+ **通过标准**: Build successful
38
+
39
+ ### 4. 完整验证
40
+ ```bash
41
+ bash domains/flutter/scripts/verify_flutter.sh
42
+ ```
43
+
44
+ ## 常见问题
45
+
46
+ | 问题 | 排查方向 |
47
+ |------|---------|
48
+ | `flutter analyze` 报类型错误 | 检查 null safety、缺少 import |
49
+ | 测试超时 | 检查 `pump()` / `pumpAndSettle()` 使用 |
50
+ | build 失败 | `flutter clean` 后重试 |
51
+ | package 找不到 | `flutter pub get` 重新拉取 |
52
+
53
+ ## done criteria
54
+ - [ ] `flutter analyze` 无 issue
55
+ - [ ] `flutter test` 全部通过
56
+ - [ ] 目标平台的构建成功(apk / ios / web 至少一个)
57
+ - [ ] 不允许跳过或伪造验证结果
@@ -46,6 +46,18 @@ module CangmingAiDevKit
46
46
  { type: :file, path: "domains/harmony/references/hvigor_ohpm_hdc_commands.md" },
47
47
  { type: :file, path: "domains/harmony/references/common_compile_errors.md" },
48
48
 
49
+ # flutter
50
+ { type: :dir, path: "domains/flutter/skills" },
51
+ { type: :dir, path: "domains/flutter/references" },
52
+ { type: :dir, path: "domains/flutter/scripts" },
53
+ { type: :file, path: "domains/flutter/skills/flutter-plan/SKILL.md" },
54
+ { type: :file, path: "domains/flutter/skills/flutter-code/SKILL.md" },
55
+ { type: :file, path: "domains/flutter/skills/flutter-verify/SKILL.md" },
56
+ { type: :file, path: "domains/flutter/references/flutter_project_structure.md" },
57
+ { type: :file, path: "domains/flutter/references/flutter_commands.md" },
58
+ { type: :file, path: "domains/flutter/references/common_errors.md" },
59
+ { type: :file, path: "domains/flutter/references/widget_rules.md" },
60
+
49
61
  # plugin JSONs
50
62
  { type: :file, path: "adapters/claude-code/.claude-plugin/plugin.json" },
51
63
  { type: :file, path: "adapters/codex/.codex-plugin/plugin.json" },
@@ -67,6 +79,10 @@ module CangmingAiDevKit
67
79
  domains/harmony/scripts/test_harmony.sh
68
80
  domains/harmony/scripts/build_hap.sh
69
81
  domains/harmony/scripts/verify_harmony.sh
82
+ domains/flutter/scripts/lint_flutter.sh
83
+ domains/flutter/scripts/test_flutter.sh
84
+ domains/flutter/scripts/build_flutter.sh
85
+ domains/flutter/scripts/verify_flutter.sh
70
86
  ].freeze
71
87
 
72
88
  JSON_PATHS = %w[
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CangmingAiDevKit
4
- VERSION = "0.1.1"
4
+ VERSION = "0.2.0"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cangming-ai-dev-kit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - cangming
@@ -13,7 +13,7 @@ dependencies: []
13
13
  description: |
14
14
  cangming-ai-dev-kit provides cross-agent development skills
15
15
  (plan-first, safe-code-change, code-review, verify-before-done),
16
- domain-specific knowledge (HarmonyOS/ArkTS/ArkUI), and shell scripts.
16
+ domain-specific knowledge (Flutter/Dart, HarmonyOS/ArkTS/ArkUI), and shell scripts.
17
17
  Install with `gem install` and use the CLI to sync skills to Claude Code or Codex.
18
18
  email:
19
19
  executables:
@@ -35,9 +35,21 @@ files:
35
35
  - core/scripts/summarize_context.sh
36
36
  - core/scripts/verify_project.sh
37
37
  - core/skills/code-review/SKILL.md
38
+ - core/skills/gem-dev-workflow/SKILL.md
38
39
  - core/skills/plan-first/SKILL.md
39
40
  - core/skills/safe-code-change/SKILL.md
40
41
  - core/skills/verify-before-done/SKILL.md
42
+ - domains/flutter/references/common_errors.md
43
+ - domains/flutter/references/flutter_commands.md
44
+ - domains/flutter/references/flutter_project_structure.md
45
+ - domains/flutter/references/widget_rules.md
46
+ - domains/flutter/scripts/build_flutter.sh
47
+ - domains/flutter/scripts/lint_flutter.sh
48
+ - domains/flutter/scripts/test_flutter.sh
49
+ - domains/flutter/scripts/verify_flutter.sh
50
+ - domains/flutter/skills/flutter-code/SKILL.md
51
+ - domains/flutter/skills/flutter-plan/SKILL.md
52
+ - domains/flutter/skills/flutter-verify/SKILL.md
41
53
  - domains/harmony/references/arkts_syntax.md
42
54
  - domains/harmony/references/arkui_rules.md
43
55
  - domains/harmony/references/common_compile_errors.md