ethan-skill 1.11.0 → 1.12.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.
- package/dist/cli/index.js +1019 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +206 -1
- package/dist/mcp/server.js.map +1 -1
- package/dist/skills/27-tech-debt.d.ts +3 -0
- package/dist/skills/27-tech-debt.d.ts.map +1 -0
- package/dist/skills/27-tech-debt.js +149 -0
- package/dist/skills/27-tech-debt.js.map +1 -0
- package/dist/skills/28-api-mock.d.ts +3 -0
- package/dist/skills/28-api-mock.d.ts.map +1 -0
- package/dist/skills/28-api-mock.js +272 -0
- package/dist/skills/28-api-mock.js.map +1 -0
- package/dist/skills/29-data-migration.d.ts +3 -0
- package/dist/skills/29-data-migration.d.ts.map +1 -0
- package/dist/skills/29-data-migration.js +331 -0
- package/dist/skills/29-data-migration.js.map +1 -0
- package/dist/skills/30-llm-feature.d.ts +3 -0
- package/dist/skills/30-llm-feature.d.ts.map +1 -0
- package/dist/skills/30-llm-feature.js +328 -0
- package/dist/skills/30-llm-feature.js.map +1 -0
- package/dist/skills/31-threat-model.d.ts +3 -0
- package/dist/skills/31-threat-model.d.ts.map +1 -0
- package/dist/skills/31-threat-model.js +240 -0
- package/dist/skills/31-threat-model.js.map +1 -0
- package/dist/skills/32-green-code.d.ts +3 -0
- package/dist/skills/32-green-code.d.ts.map +1 -0
- package/dist/skills/32-green-code.js +346 -0
- package/dist/skills/32-green-code.js.map +1 -0
- package/dist/skills/33-service-catalog.d.ts +3 -0
- package/dist/skills/33-service-catalog.d.ts.map +1 -0
- package/dist/skills/33-service-catalog.js +334 -0
- package/dist/skills/33-service-catalog.js.map +1 -0
- package/dist/skills/34-mobile-review.d.ts +3 -0
- package/dist/skills/34-mobile-review.d.ts.map +1 -0
- package/dist/skills/34-mobile-review.js +390 -0
- package/dist/skills/34-mobile-review.js.map +1 -0
- package/dist/skills/35-data-pipeline.d.ts +3 -0
- package/dist/skills/35-data-pipeline.d.ts.map +1 -0
- package/dist/skills/35-data-pipeline.js +392 -0
- package/dist/skills/35-data-pipeline.js.map +1 -0
- package/dist/skills/36-ml-experiment.d.ts +3 -0
- package/dist/skills/36-ml-experiment.d.ts.map +1 -0
- package/dist/skills/36-ml-experiment.js +415 -0
- package/dist/skills/36-ml-experiment.js.map +1 -0
- package/dist/skills/index.d.ts +10 -0
- package/dist/skills/index.d.ts.map +1 -1
- package/dist/skills/index.js +41 -1
- package/dist/skills/index.js.map +1 -1
- package/dist/skills/pipeline.d.ts.map +1 -1
- package/dist/skills/pipeline.js +35 -0
- package/dist/skills/pipeline.js.map +1 -1
- package/dist/skills/skills.test.js +3 -3
- package/dist/skills/skills.test.js.map +1 -1
- package/package.json +1 -1
- package/rules/claude-code/CLAUDE.md +2963 -3
- package/rules/cline/.clinerules +2805 -2
- package/rules/codebuddy/CODEBUDDY.md +2913 -2
- package/rules/continue/.continuerules +2805 -2
- package/rules/copilot/copilot-instructions.md +2883 -2
- package/rules/cursor/.cursorrules +2952 -2
- package/rules/cursor/smart-flow.mdc +2952 -2
- package/rules/jetbrains/smart-flow.md +2883 -2
- package/rules/lingma/smart-flow.md +2904 -3
- package/rules/windsurf/.windsurf/rules/smart-flow.md +2884 -3
- package/rules/zed/smart-flow.rules +2794 -1
|
@@ -0,0 +1,415 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.mlExperimentSkill = void 0;
|
|
4
|
+
exports.mlExperimentSkill = {
|
|
5
|
+
id: 'ml-experiment',
|
|
6
|
+
name: 'ML 实验管理',
|
|
7
|
+
nameEn: 'ml_experiment',
|
|
8
|
+
order: 36,
|
|
9
|
+
description: '规范 ML 实验设计、追踪配置(MLflow/W&B)、数据版本控制、Model Card 生成与部署监控',
|
|
10
|
+
descriptionEn: 'Standardize ML experiment design, tracking config (MLflow/W&B), data versioning, Model Card generation and deployment monitoring',
|
|
11
|
+
detailDescription: `ML 项目最大的痛点是"不可复现"——换台机器、换个版本就跑不出相同结果。
|
|
12
|
+
本 Skill 建立系统化的 ML 工程规范:从假设驱动的实验设计,
|
|
13
|
+
到 MLflow/W&B 实验追踪配置,再到 DVC 数据版本控制和特征工程复现,
|
|
14
|
+
生成标准化的 Model Card,最终覆盖模型注册、A/B 上线、数据漂移监控和自动回滚,
|
|
15
|
+
让 ML 实验从"炼丹"变为"可控的工程实践"。`,
|
|
16
|
+
triggers: [
|
|
17
|
+
'ml experiment',
|
|
18
|
+
'mlops',
|
|
19
|
+
'model training',
|
|
20
|
+
'模型训练',
|
|
21
|
+
'实验追踪',
|
|
22
|
+
'model card',
|
|
23
|
+
'mlflow',
|
|
24
|
+
'wandb',
|
|
25
|
+
'dvc',
|
|
26
|
+
'机器学习实验',
|
|
27
|
+
'@ethan ml-experiment',
|
|
28
|
+
'/ml-experiment',
|
|
29
|
+
],
|
|
30
|
+
steps: [
|
|
31
|
+
{
|
|
32
|
+
title: '1. 实验设计',
|
|
33
|
+
content: `在开始训练前明确实验目标和控制变量:
|
|
34
|
+
|
|
35
|
+
**假设驱动实验设计**
|
|
36
|
+
\`\`\`markdown
|
|
37
|
+
## 实验设计文档
|
|
38
|
+
|
|
39
|
+
### 研究问题
|
|
40
|
+
我们假设:[变量 X] 会导致 [指标 Y] 提升 [Z%],
|
|
41
|
+
因为 [理论依据或先验知识]。
|
|
42
|
+
|
|
43
|
+
### 实验配置
|
|
44
|
+
- 控制组(Baseline):[现有模型/方法描述]
|
|
45
|
+
- 实验组:[变更内容描述]
|
|
46
|
+
- 控制变量:[保持不变的因素:数据集/超参/随机种子]
|
|
47
|
+
|
|
48
|
+
### 评估指标
|
|
49
|
+
- 主要指标:AUC-ROC(因为关注排序,不关注具体阈值)
|
|
50
|
+
- 次要指标:Precision@K, Recall@K
|
|
51
|
+
- 业务指标:CTR 提升(线上 A/B 验证)
|
|
52
|
+
|
|
53
|
+
### 成功标准
|
|
54
|
+
- 主要指标提升 ≥ 2%(统计显著性 p < 0.05)
|
|
55
|
+
- 推理延迟不增加超过 20%
|
|
56
|
+
- 训练成本不超过 $50
|
|
57
|
+
\`\`\`
|
|
58
|
+
|
|
59
|
+
**实验矩阵(超参搜索)**
|
|
60
|
+
\`\`\`python
|
|
61
|
+
# 使用 Optuna 自动超参优化
|
|
62
|
+
import optuna
|
|
63
|
+
|
|
64
|
+
def objective(trial):
|
|
65
|
+
params = {
|
|
66
|
+
'learning_rate': trial.suggest_float('lr', 1e-5, 1e-1, log=True),
|
|
67
|
+
'batch_size': trial.suggest_categorical('batch_size', [16, 32, 64, 128]),
|
|
68
|
+
'dropout': trial.suggest_float('dropout', 0.1, 0.5),
|
|
69
|
+
'hidden_dim': trial.suggest_int('hidden_dim', 64, 512, step=64),
|
|
70
|
+
}
|
|
71
|
+
model = train_model(**params)
|
|
72
|
+
return evaluate(model)['auc']
|
|
73
|
+
|
|
74
|
+
study = optuna.create_study(direction='maximize')
|
|
75
|
+
study.optimize(objective, n_trials=50, timeout=3600)
|
|
76
|
+
print(f"Best params: {study.best_params}")
|
|
77
|
+
\`\`\`
|
|
78
|
+
|
|
79
|
+
**最小可行实验(MVE)原则**
|
|
80
|
+
\`\`\`
|
|
81
|
+
先用 10% 数据快速验证假设(10min 训练)
|
|
82
|
+
→ 有提升信号 → 扩展到全量数据
|
|
83
|
+
→ 无提升信号 → 调整假设重新实验
|
|
84
|
+
\`\`\`
|
|
85
|
+
|
|
86
|
+
**输出**:实验设计文档 + 评估指标定义 + 超参搜索配置`,
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
title: '2. 实验追踪配置',
|
|
90
|
+
content: `配置 MLflow 或 W&B 实现实验全自动追踪:
|
|
91
|
+
|
|
92
|
+
**MLflow 完整配置**
|
|
93
|
+
\`\`\`python
|
|
94
|
+
import mlflow
|
|
95
|
+
import mlflow.pytorch
|
|
96
|
+
|
|
97
|
+
# 配置追踪服务器
|
|
98
|
+
mlflow.set_tracking_uri("http://mlflow-server:5000")
|
|
99
|
+
mlflow.set_experiment("recommendation-model-v2")
|
|
100
|
+
|
|
101
|
+
with mlflow.start_run(run_name="bert-finetune-lr1e-4") as run:
|
|
102
|
+
# 记录所有超参
|
|
103
|
+
mlflow.log_params({
|
|
104
|
+
"model_name": "bert-base-chinese",
|
|
105
|
+
"learning_rate": 1e-4,
|
|
106
|
+
"batch_size": 32,
|
|
107
|
+
"epochs": 10,
|
|
108
|
+
"optimizer": "AdamW",
|
|
109
|
+
"warmup_steps": 500,
|
|
110
|
+
})
|
|
111
|
+
|
|
112
|
+
# 记录数据集信息
|
|
113
|
+
mlflow.log_param("train_samples", len(train_dataset))
|
|
114
|
+
mlflow.log_param("data_version", "v2024-01-15")
|
|
115
|
+
|
|
116
|
+
for epoch in range(config.epochs):
|
|
117
|
+
train_loss = train_epoch(model, train_loader)
|
|
118
|
+
val_metrics = evaluate(model, val_loader)
|
|
119
|
+
|
|
120
|
+
# 实时记录指标
|
|
121
|
+
mlflow.log_metrics({
|
|
122
|
+
"train_loss": train_loss,
|
|
123
|
+
"val_loss": val_metrics['loss'],
|
|
124
|
+
"val_auc": val_metrics['auc'],
|
|
125
|
+
"val_f1": val_metrics['f1'],
|
|
126
|
+
}, step=epoch)
|
|
127
|
+
|
|
128
|
+
# 注册最终模型
|
|
129
|
+
mlflow.pytorch.log_model(
|
|
130
|
+
model,
|
|
131
|
+
"model",
|
|
132
|
+
registered_model_name="recommendation-model",
|
|
133
|
+
pip_requirements=["torch==2.1.0", "transformers==4.35.0"],
|
|
134
|
+
)
|
|
135
|
+
|
|
136
|
+
# 记录评估报告
|
|
137
|
+
mlflow.log_artifact("reports/confusion_matrix.png")
|
|
138
|
+
mlflow.log_artifact("reports/feature_importance.html")
|
|
139
|
+
|
|
140
|
+
print(f"Run ID: {run.info.run_id}")
|
|
141
|
+
\`\`\`
|
|
142
|
+
|
|
143
|
+
**W&B 配置(更丰富的可视化)**
|
|
144
|
+
\`\`\`python
|
|
145
|
+
import wandb
|
|
146
|
+
|
|
147
|
+
wandb.init(
|
|
148
|
+
project="recommendation-v2",
|
|
149
|
+
name="bert-finetune-lr1e-4",
|
|
150
|
+
config={
|
|
151
|
+
"learning_rate": 1e-4,
|
|
152
|
+
"architecture": "bert-base",
|
|
153
|
+
"dataset": "user-clicks-v2",
|
|
154
|
+
},
|
|
155
|
+
tags=["bert", "production-candidate"],
|
|
156
|
+
)
|
|
157
|
+
|
|
158
|
+
# 自动记录梯度和权重(PyTorch)
|
|
159
|
+
wandb.watch(model, log='all', log_freq=100)
|
|
160
|
+
|
|
161
|
+
# 训练循环中
|
|
162
|
+
wandb.log({"train_loss": loss, "val_auc": auc}, step=epoch)
|
|
163
|
+
|
|
164
|
+
# 完成时
|
|
165
|
+
wandb.finish()
|
|
166
|
+
\`\`\`
|
|
167
|
+
|
|
168
|
+
**输出**:MLflow/W&B 实验追踪配置 + 训练脚本模板`,
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
title: '3. 数据版本控制',
|
|
172
|
+
content: `使用 DVC 管理数据集和特征工程的版本:
|
|
173
|
+
|
|
174
|
+
**DVC 初始化与数据版本管理**
|
|
175
|
+
\`\`\`bash
|
|
176
|
+
# 初始化 DVC(与 Git 协同)
|
|
177
|
+
git init && dvc init
|
|
178
|
+
|
|
179
|
+
# 添加数据集到 DVC 管理
|
|
180
|
+
dvc add data/train.parquet
|
|
181
|
+
dvc add data/test.parquet
|
|
182
|
+
git add data/.gitignore data/train.parquet.dvc data/test.parquet.dvc
|
|
183
|
+
git commit -m "Add training data v1"
|
|
184
|
+
|
|
185
|
+
# 配置远程存储(S3/GCS/Azure)
|
|
186
|
+
dvc remote add -d myremote s3://my-ml-bucket/dvc-store
|
|
187
|
+
dvc push # 上传数据到远程
|
|
188
|
+
|
|
189
|
+
# 切换到不同数据版本
|
|
190
|
+
git checkout v1.0-data-tag
|
|
191
|
+
dvc pull # 下载对应版本数据
|
|
192
|
+
\`\`\`
|
|
193
|
+
|
|
194
|
+
**特征工程管道(可复现)**
|
|
195
|
+
\`\`\`python
|
|
196
|
+
# dvc.yaml — 定义可复现的管道
|
|
197
|
+
stages:
|
|
198
|
+
prepare_data:
|
|
199
|
+
cmd: python src/prepare.py --input data/raw --output data/prepared
|
|
200
|
+
deps:
|
|
201
|
+
- src/prepare.py
|
|
202
|
+
- data/raw
|
|
203
|
+
outs:
|
|
204
|
+
- data/prepared
|
|
205
|
+
|
|
206
|
+
feature_engineering:
|
|
207
|
+
cmd: python src/features.py --input data/prepared --output data/features
|
|
208
|
+
deps:
|
|
209
|
+
- src/features.py
|
|
210
|
+
- data/prepared
|
|
211
|
+
- params.yaml # 特征工程超参
|
|
212
|
+
outs:
|
|
213
|
+
- data/features
|
|
214
|
+
metrics:
|
|
215
|
+
- reports/feature_stats.json
|
|
216
|
+
|
|
217
|
+
train:
|
|
218
|
+
cmd: python src/train.py
|
|
219
|
+
deps:
|
|
220
|
+
- src/train.py
|
|
221
|
+
- data/features
|
|
222
|
+
outs:
|
|
223
|
+
- models/model.pkl
|
|
224
|
+
metrics:
|
|
225
|
+
- reports/metrics.json
|
|
226
|
+
\`\`\`
|
|
227
|
+
|
|
228
|
+
\`\`\`bash
|
|
229
|
+
# 运行完整管道(只重新执行有变化的阶段)
|
|
230
|
+
dvc repro
|
|
231
|
+
|
|
232
|
+
# 对比不同版本的指标
|
|
233
|
+
dvc metrics diff v1.0 v2.0
|
|
234
|
+
# ┌──────────────┬───────┬───────┬────────┐
|
|
235
|
+
# │ Metric │ HEAD │ v1.0 │ Change │
|
|
236
|
+
# ├──────────────┼───────┼───────┼────────┤
|
|
237
|
+
# │ val_auc │ 0.847 │ 0.831 │ +0.016 │
|
|
238
|
+
# └──────────────┴───────┴───────┴────────┘
|
|
239
|
+
\`\`\`
|
|
240
|
+
|
|
241
|
+
**输出**:DVC 配置 + 特征管道 dvc.yaml + 版本对比命令`,
|
|
242
|
+
},
|
|
243
|
+
{
|
|
244
|
+
title: '4. Model Card 生成',
|
|
245
|
+
content: `为每个发布的模型生成标准化的 Model Card:
|
|
246
|
+
|
|
247
|
+
**Model Card 模板**
|
|
248
|
+
\`\`\`markdown
|
|
249
|
+
# Model Card: 推荐模型 v2.1.0
|
|
250
|
+
|
|
251
|
+
## 模型概述
|
|
252
|
+
- **模型类型**:双塔召回模型(BERT + 协同过滤)
|
|
253
|
+
- **任务**:电商商品推荐
|
|
254
|
+
- **训练日期**:2024-01-20
|
|
255
|
+
- **版本**:v2.1.0
|
|
256
|
+
- **MLflow Run ID**:abc123def456
|
|
257
|
+
|
|
258
|
+
## 预期用途
|
|
259
|
+
### 主要用途
|
|
260
|
+
为已登录用户生成个性化商品推荐,覆盖首页、详情页猜你喜欢。
|
|
261
|
+
|
|
262
|
+
### 不适合的用途
|
|
263
|
+
- 冷启动用户(注册 < 7 天)→ 使用热门推荐替代
|
|
264
|
+
- 价格敏感决策(不提供价格预测)
|
|
265
|
+
|
|
266
|
+
## 训练数据
|
|
267
|
+
- **数据集**:user-click-events v2024-01
|
|
268
|
+
- **训练样本**:5,200,000 条用户点击行为
|
|
269
|
+
- **时间范围**:2023-07-01 ~ 2023-12-31
|
|
270
|
+
- **数据版本**:DVC tag \`data-v2024-01\`
|
|
271
|
+
|
|
272
|
+
## 性能指标
|
|
273
|
+
| 指标 | 离线值 | 在线 A/B(1周) |
|
|
274
|
+
|------|--------|---------------|
|
|
275
|
+
| Recall@20 | 0.847 | 0.821 |
|
|
276
|
+
| NDCG@20 | 0.623 | 0.598 |
|
|
277
|
+
| CTR | — | +4.2%(vs 旧模型)|
|
|
278
|
+
| Latency P99 | 45ms | 52ms |
|
|
279
|
+
|
|
280
|
+
## 偏差与公平性
|
|
281
|
+
- 对新品(上架 < 30 天)存在曝光不足偏差 → 已通过 Explore 策略缓解
|
|
282
|
+
- 价格区间分布分析:低价商品点击率被高估(训练集偏差)→ 已加权修正
|
|
283
|
+
|
|
284
|
+
## 限制
|
|
285
|
+
- 模型不包含实时库存信息,需上层过滤下架商品
|
|
286
|
+
- 不支持多语言商品(仅中文描述)
|
|
287
|
+
|
|
288
|
+
## 负责任的 AI 声明
|
|
289
|
+
- 不使用性别/年龄等受保护属性作为特征
|
|
290
|
+
- 符合公司隐私政策,用户行为数据已脱敏处理
|
|
291
|
+
\`\`\`
|
|
292
|
+
|
|
293
|
+
**自动生成脚本**
|
|
294
|
+
\`\`\`python
|
|
295
|
+
def generate_model_card(run_id: str, ab_results: dict) -> str:
|
|
296
|
+
"""从 MLflow run 自动生成 Model Card"""
|
|
297
|
+
run = mlflow.get_run(run_id)
|
|
298
|
+
params = run.data.params
|
|
299
|
+
metrics = run.data.metrics
|
|
300
|
+
|
|
301
|
+
return MODEL_CARD_TEMPLATE.format(
|
|
302
|
+
version=params.get('model_version'),
|
|
303
|
+
train_date=run.info.start_time,
|
|
304
|
+
recall_at_20=metrics.get('val_recall_at_20'),
|
|
305
|
+
ctr_lift=ab_results.get('ctr_lift'),
|
|
306
|
+
run_id=run_id,
|
|
307
|
+
)
|
|
308
|
+
\`\`\`
|
|
309
|
+
|
|
310
|
+
**输出**:Model Card 文档 + 自动生成脚本`,
|
|
311
|
+
},
|
|
312
|
+
{
|
|
313
|
+
title: '5. 部署与监控',
|
|
314
|
+
content: `模型上线、A/B 测试和生产监控完整方案:
|
|
315
|
+
|
|
316
|
+
**模型注册与晋升流程**
|
|
317
|
+
\`\`\`python
|
|
318
|
+
# MLflow 模型注册与阶段管理
|
|
319
|
+
from mlflow.tracking import MlflowClient
|
|
320
|
+
|
|
321
|
+
client = MlflowClient()
|
|
322
|
+
|
|
323
|
+
# 注册模型
|
|
324
|
+
model_uri = f"runs:/{run_id}/model"
|
|
325
|
+
mv = client.create_model_version(
|
|
326
|
+
name="recommendation-model",
|
|
327
|
+
source=model_uri,
|
|
328
|
+
run_id=run_id,
|
|
329
|
+
)
|
|
330
|
+
|
|
331
|
+
# 模型阶段:None → Staging → Production
|
|
332
|
+
# 先晋升到 Staging(测试)
|
|
333
|
+
client.transition_model_version_stage(
|
|
334
|
+
name="recommendation-model",
|
|
335
|
+
version=mv.version,
|
|
336
|
+
stage="Staging",
|
|
337
|
+
)
|
|
338
|
+
|
|
339
|
+
# 验证通过后晋升到 Production
|
|
340
|
+
client.transition_model_version_stage(
|
|
341
|
+
name="recommendation-model",
|
|
342
|
+
version=mv.version,
|
|
343
|
+
stage="Production",
|
|
344
|
+
archive_existing_versions=True, # 归档旧版本
|
|
345
|
+
)
|
|
346
|
+
\`\`\`
|
|
347
|
+
|
|
348
|
+
**A/B 测试配置**
|
|
349
|
+
\`\`\`python
|
|
350
|
+
# 按用户哈希分流
|
|
351
|
+
def get_model_for_user(user_id: str) -> str:
|
|
352
|
+
hash_val = int(hashlib.md5(user_id.encode()).hexdigest(), 16) % 100
|
|
353
|
+
if hash_val < 10: # 10% 流量
|
|
354
|
+
return "recommendation-model:v2.1.0"
|
|
355
|
+
else:
|
|
356
|
+
return "recommendation-model:v2.0.0"
|
|
357
|
+
|
|
358
|
+
# 记录 A/B 分组(用于统计分析)
|
|
359
|
+
mlflow.log_param("ab_group", "control" if version == "v2.0.0" else "treatment")
|
|
360
|
+
\`\`\`
|
|
361
|
+
|
|
362
|
+
**数据漂移监控(Evidently)**
|
|
363
|
+
\`\`\`python
|
|
364
|
+
from evidently.report import Report
|
|
365
|
+
from evidently.metric_preset import DataDriftPreset, ModelPerformancePreset
|
|
366
|
+
|
|
367
|
+
# 对比训练数据分布 vs 生产数据分布
|
|
368
|
+
report = Report(metrics=[
|
|
369
|
+
DataDriftPreset(), # 特征分布漂移
|
|
370
|
+
ModelPerformancePreset(), # 模型性能漂移
|
|
371
|
+
])
|
|
372
|
+
|
|
373
|
+
report.run(reference_data=train_df, current_data=production_df_last_7d)
|
|
374
|
+
report.save_html("reports/drift_report.html")
|
|
375
|
+
|
|
376
|
+
# 自动回滚条件
|
|
377
|
+
drift_detected = report.as_dict()['metrics'][0]['result']['dataset_drift']
|
|
378
|
+
if drift_detected:
|
|
379
|
+
alert_and_rollback(reason="Feature distribution drift detected")
|
|
380
|
+
\`\`\`
|
|
381
|
+
|
|
382
|
+
**生产监控仪表盘**
|
|
383
|
+
\`\`\`
|
|
384
|
+
关键指标(每日监控):
|
|
385
|
+
─────────────────────────────────
|
|
386
|
+
模型性能:
|
|
387
|
+
在线 CTR(实验 vs 对照)
|
|
388
|
+
推荐命中率(Recall@K)
|
|
389
|
+
|
|
390
|
+
数据漂移:
|
|
391
|
+
用户特征分布变化(PSI > 0.2 告警)
|
|
392
|
+
商品特征新增/消失比率
|
|
393
|
+
|
|
394
|
+
运维指标:
|
|
395
|
+
推理延迟 P99(< 100ms)
|
|
396
|
+
模型服务错误率(< 0.1%)
|
|
397
|
+
预测请求量(异常波动告警)
|
|
398
|
+
\`\`\`
|
|
399
|
+
|
|
400
|
+
**输出**:模型注册流程 + A/B 测试配置 + 漂移监控脚本 + 自动回滚方案`,
|
|
401
|
+
},
|
|
402
|
+
],
|
|
403
|
+
outputFormat: '实验设计文档 + MLflow/W&B 追踪配置 + DVC 数据管道 + Model Card + 部署 A/B 测试方案 + 漂移监控配置',
|
|
404
|
+
examples: [],
|
|
405
|
+
notes: [
|
|
406
|
+
'实验追踪不是可选项——没有追踪记录的实验结果无法复现,也无法与团队分享',
|
|
407
|
+
'每个 MLflow/W&B Run 必须记录数据版本,否则6个月后无法知道用了哪份训练数据',
|
|
408
|
+
'Model Card 对外部合作和监管合规至关重要,建议与模型一起版本化管理',
|
|
409
|
+
'数据漂移监控比模型指标监控更重要——漂移发生在指标下降之前',
|
|
410
|
+
'优先用 MLflow(开源自托管)降低工具成本;大团队再考虑 W&B 或 Vertex AI 等商业方案',
|
|
411
|
+
],
|
|
412
|
+
category: '执行侧',
|
|
413
|
+
nextSkill: 'data-pipeline',
|
|
414
|
+
};
|
|
415
|
+
//# sourceMappingURL=36-ml-experiment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"36-ml-experiment.js","sourceRoot":"","sources":["../../src/skills/36-ml-experiment.ts"],"names":[],"mappings":";;;AAEa,QAAA,iBAAiB,GAAoB;IAChD,EAAE,EAAE,eAAe;IACnB,IAAI,EAAE,SAAS;IACf,MAAM,EAAE,eAAe;IACvB,KAAK,EAAE,EAAE;IACT,WAAW,EAAE,uDAAuD;IACpE,aAAa,EAAE,kIAAkI;IACjJ,iBAAiB,EAAE;;;;yBAII;IACvB,QAAQ,EAAE;QACR,eAAe;QACf,OAAO;QACP,gBAAgB;QAChB,MAAM;QACN,MAAM;QACN,YAAY;QACZ,QAAQ;QACR,OAAO;QACP,KAAK;QACL,QAAQ;QACR,sBAAsB;QACtB,gBAAgB;KACjB;IACD,KAAK,EAAE;QACL;YACE,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCAqDiB;SAC3B;QACD;YACE,KAAK,EAAE,WAAW;YAClB,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kCA8EmB;SAC7B;QACD;YACE,KAAK,EAAE,WAAW;YAClB,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uCAqEwB;SAClC;QACD;YACE,KAAK,EAAE,kBAAkB;YACzB,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8BAiEe;SACzB;QACD;YACE,KAAK,EAAE,UAAU;YACjB,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2CAsF4B;SACtC;KACF;IACD,YAAY,EAAE,yEAAyE;IACvF,QAAQ,EAAE,EAAE;IACZ,KAAK,EAAE;QACL,qCAAqC;QACrC,+CAA+C;QAC/C,wCAAwC;QACxC,+BAA+B;QAC/B,sDAAsD;KACvD;IACD,QAAQ,EAAE,KAAK;IACf,SAAS,EAAE,eAAe;CAC3B,CAAC"}
|
package/dist/skills/index.d.ts
CHANGED
|
@@ -28,6 +28,16 @@ export { observabilitySkill } from './23-observability';
|
|
|
28
28
|
export { designPatternsSkill } from './24-design-patterns';
|
|
29
29
|
export { specProposalSkill } from './25-spec-proposal';
|
|
30
30
|
export { specReviewSkill } from './26-spec-review';
|
|
31
|
+
export { techDebtSkill } from './27-tech-debt';
|
|
32
|
+
export { apiMockSkill } from './28-api-mock';
|
|
33
|
+
export { dataMigrationSkill } from './29-data-migration';
|
|
34
|
+
export { llmFeatureSkill } from './30-llm-feature';
|
|
35
|
+
export { threatModelSkill } from './31-threat-model';
|
|
36
|
+
export { greenCodeSkill } from './32-green-code';
|
|
37
|
+
export { serviceCatalogSkill } from './33-service-catalog';
|
|
38
|
+
export { mobileReviewSkill } from './34-mobile-review';
|
|
39
|
+
export { dataPipelineSkill } from './35-data-pipeline';
|
|
40
|
+
export { mlExperimentSkill } from './36-ml-experiment';
|
|
31
41
|
export type { SkillDefinition, SkillStep, SkillExample, Platform, BuildContext, PipelineDefinition } from './types';
|
|
32
42
|
/** 所有 Skill 按顺序排列 */
|
|
33
43
|
export declare const ALL_SKILLS: import("./types").SkillDefinition[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/skills/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/skills/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAuCpH,qBAAqB;AACrB,eAAO,MAAM,UAAU,qCAqCtB,CAAC"}
|
package/dist/skills/index.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* 构建脚本和运行时均从此文件取数据
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.ALL_SKILLS = exports.specReviewSkill = exports.specProposalSkill = exports.designPatternsSkill = exports.observabilitySkill = exports.refactoringSkill = exports.performanceSkill = exports.cicdSkill = exports.dockerSkill = exports.databaseOptimizeSkill = exports.systemDesignSkill = exports.unitTestingSkill = exports.gitWorkflowSkill = exports.prdSkill = exports.deploymentSkill = exports.securityReviewSkill = exports.apiDesignSkill = exports.techResearchSkill = exports.debugSkill = exports.codeReviewSkill = exports.weeklyReportSkill = exports.taskReportSkill = exports.progressTrackingSkill = exports.implementationSkill = exports.designSkill = exports.taskBreakdownSkill = exports.requirementSkill = void 0;
|
|
7
|
+
exports.ALL_SKILLS = exports.mlExperimentSkill = exports.dataPipelineSkill = exports.mobileReviewSkill = exports.serviceCatalogSkill = exports.greenCodeSkill = exports.threatModelSkill = exports.llmFeatureSkill = exports.dataMigrationSkill = exports.apiMockSkill = exports.techDebtSkill = exports.specReviewSkill = exports.specProposalSkill = exports.designPatternsSkill = exports.observabilitySkill = exports.refactoringSkill = exports.performanceSkill = exports.cicdSkill = exports.dockerSkill = exports.databaseOptimizeSkill = exports.systemDesignSkill = exports.unitTestingSkill = exports.gitWorkflowSkill = exports.prdSkill = exports.deploymentSkill = exports.securityReviewSkill = exports.apiDesignSkill = exports.techResearchSkill = exports.debugSkill = exports.codeReviewSkill = exports.weeklyReportSkill = exports.taskReportSkill = exports.progressTrackingSkill = exports.implementationSkill = exports.designSkill = exports.taskBreakdownSkill = exports.requirementSkill = void 0;
|
|
8
8
|
var _01_requirement_1 = require("./01-requirement");
|
|
9
9
|
Object.defineProperty(exports, "requirementSkill", { enumerable: true, get: function () { return _01_requirement_1.requirementSkill; } });
|
|
10
10
|
var _02_task_breakdown_1 = require("./02-task-breakdown");
|
|
@@ -57,6 +57,26 @@ var _25_spec_proposal_1 = require("./25-spec-proposal");
|
|
|
57
57
|
Object.defineProperty(exports, "specProposalSkill", { enumerable: true, get: function () { return _25_spec_proposal_1.specProposalSkill; } });
|
|
58
58
|
var _26_spec_review_1 = require("./26-spec-review");
|
|
59
59
|
Object.defineProperty(exports, "specReviewSkill", { enumerable: true, get: function () { return _26_spec_review_1.specReviewSkill; } });
|
|
60
|
+
var _27_tech_debt_1 = require("./27-tech-debt");
|
|
61
|
+
Object.defineProperty(exports, "techDebtSkill", { enumerable: true, get: function () { return _27_tech_debt_1.techDebtSkill; } });
|
|
62
|
+
var _28_api_mock_1 = require("./28-api-mock");
|
|
63
|
+
Object.defineProperty(exports, "apiMockSkill", { enumerable: true, get: function () { return _28_api_mock_1.apiMockSkill; } });
|
|
64
|
+
var _29_data_migration_1 = require("./29-data-migration");
|
|
65
|
+
Object.defineProperty(exports, "dataMigrationSkill", { enumerable: true, get: function () { return _29_data_migration_1.dataMigrationSkill; } });
|
|
66
|
+
var _30_llm_feature_1 = require("./30-llm-feature");
|
|
67
|
+
Object.defineProperty(exports, "llmFeatureSkill", { enumerable: true, get: function () { return _30_llm_feature_1.llmFeatureSkill; } });
|
|
68
|
+
var _31_threat_model_1 = require("./31-threat-model");
|
|
69
|
+
Object.defineProperty(exports, "threatModelSkill", { enumerable: true, get: function () { return _31_threat_model_1.threatModelSkill; } });
|
|
70
|
+
var _32_green_code_1 = require("./32-green-code");
|
|
71
|
+
Object.defineProperty(exports, "greenCodeSkill", { enumerable: true, get: function () { return _32_green_code_1.greenCodeSkill; } });
|
|
72
|
+
var _33_service_catalog_1 = require("./33-service-catalog");
|
|
73
|
+
Object.defineProperty(exports, "serviceCatalogSkill", { enumerable: true, get: function () { return _33_service_catalog_1.serviceCatalogSkill; } });
|
|
74
|
+
var _34_mobile_review_1 = require("./34-mobile-review");
|
|
75
|
+
Object.defineProperty(exports, "mobileReviewSkill", { enumerable: true, get: function () { return _34_mobile_review_1.mobileReviewSkill; } });
|
|
76
|
+
var _35_data_pipeline_1 = require("./35-data-pipeline");
|
|
77
|
+
Object.defineProperty(exports, "dataPipelineSkill", { enumerable: true, get: function () { return _35_data_pipeline_1.dataPipelineSkill; } });
|
|
78
|
+
var _36_ml_experiment_1 = require("./36-ml-experiment");
|
|
79
|
+
Object.defineProperty(exports, "mlExperimentSkill", { enumerable: true, get: function () { return _36_ml_experiment_1.mlExperimentSkill; } });
|
|
60
80
|
const _01_requirement_2 = require("./01-requirement");
|
|
61
81
|
const _02_task_breakdown_2 = require("./02-task-breakdown");
|
|
62
82
|
const _03_design_2 = require("./03-design");
|
|
@@ -83,6 +103,16 @@ const _23_observability_2 = require("./23-observability");
|
|
|
83
103
|
const _24_design_patterns_2 = require("./24-design-patterns");
|
|
84
104
|
const _25_spec_proposal_2 = require("./25-spec-proposal");
|
|
85
105
|
const _26_spec_review_2 = require("./26-spec-review");
|
|
106
|
+
const _27_tech_debt_2 = require("./27-tech-debt");
|
|
107
|
+
const _28_api_mock_2 = require("./28-api-mock");
|
|
108
|
+
const _29_data_migration_2 = require("./29-data-migration");
|
|
109
|
+
const _30_llm_feature_2 = require("./30-llm-feature");
|
|
110
|
+
const _31_threat_model_2 = require("./31-threat-model");
|
|
111
|
+
const _32_green_code_2 = require("./32-green-code");
|
|
112
|
+
const _33_service_catalog_2 = require("./33-service-catalog");
|
|
113
|
+
const _34_mobile_review_2 = require("./34-mobile-review");
|
|
114
|
+
const _35_data_pipeline_2 = require("./35-data-pipeline");
|
|
115
|
+
const _36_ml_experiment_2 = require("./36-ml-experiment");
|
|
86
116
|
/** 所有 Skill 按顺序排列 */
|
|
87
117
|
exports.ALL_SKILLS = [
|
|
88
118
|
_01_requirement_2.requirementSkill,
|
|
@@ -111,5 +141,15 @@ exports.ALL_SKILLS = [
|
|
|
111
141
|
_24_design_patterns_2.designPatternsSkill,
|
|
112
142
|
_25_spec_proposal_2.specProposalSkill,
|
|
113
143
|
_26_spec_review_2.specReviewSkill,
|
|
144
|
+
_27_tech_debt_2.techDebtSkill,
|
|
145
|
+
_28_api_mock_2.apiMockSkill,
|
|
146
|
+
_29_data_migration_2.dataMigrationSkill,
|
|
147
|
+
_30_llm_feature_2.llmFeatureSkill,
|
|
148
|
+
_31_threat_model_2.threatModelSkill,
|
|
149
|
+
_32_green_code_2.greenCodeSkill,
|
|
150
|
+
_33_service_catalog_2.serviceCatalogSkill,
|
|
151
|
+
_34_mobile_review_2.mobileReviewSkill,
|
|
152
|
+
_35_data_pipeline_2.dataPipelineSkill,
|
|
153
|
+
_36_ml_experiment_2.mlExperimentSkill,
|
|
114
154
|
];
|
|
115
155
|
//# sourceMappingURL=index.js.map
|
package/dist/skills/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/skills/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,oDAAoD;AAA3C,mHAAA,gBAAgB,OAAA;AACzB,0DAAyD;AAAhD,wHAAA,kBAAkB,OAAA;AAC3B,0CAA0C;AAAjC,yGAAA,WAAW,OAAA;AACpB,0DAA0D;AAAjD,yHAAA,mBAAmB,OAAA;AAC5B,gEAA+D;AAAtD,8HAAA,qBAAqB,OAAA;AAC9B,oDAAmD;AAA1C,kHAAA,eAAe,OAAA;AACxB,wDAAuD;AAA9C,sHAAA,iBAAiB,OAAA;AAC1B,oDAAmD;AAA1C,kHAAA,eAAe,OAAA;AACxB,wCAAwC;AAA/B,uGAAA,UAAU,OAAA;AACnB,wDAAuD;AAA9C,sHAAA,iBAAiB,OAAA;AAC1B,kDAAiD;AAAxC,gHAAA,cAAc,OAAA;AACvB,4DAA2D;AAAlD,0HAAA,mBAAmB,OAAA;AAC5B,kDAAkD;AAAzC,iHAAA,eAAe,OAAA;AACxB,oCAAoC;AAA3B,mGAAA,QAAQ,OAAA;AACjB,sDAAqD;AAA5C,oHAAA,gBAAgB,OAAA;AACzB,sDAAqD;AAA5C,oHAAA,gBAAgB,OAAA;AACzB,wDAAuD;AAA9C,sHAAA,iBAAiB,OAAA;AAC1B,gEAA+D;AAAtD,8HAAA,qBAAqB,OAAA;AAC9B,0CAA0C;AAAjC,yGAAA,WAAW,OAAA;AACpB,sCAAsC;AAA7B,qGAAA,SAAS,OAAA;AAClB,oDAAoD;AAA3C,mHAAA,gBAAgB,OAAA;AACzB,oDAAoD;AAA3C,mHAAA,gBAAgB,OAAA;AACzB,wDAAwD;AAA/C,uHAAA,kBAAkB,OAAA;AAC3B,4DAA2D;AAAlD,0HAAA,mBAAmB,OAAA;AAC5B,wDAAuD;AAA9C,sHAAA,iBAAiB,OAAA;AAC1B,oDAAmD;AAA1C,kHAAA,eAAe,OAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/skills/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/skills/pipeline.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAGnE,eAAO,MAAM,SAAS,EAAE,kBAAkB,
|
|
1
|
+
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/skills/pipeline.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAGnE,eAAO,MAAM,SAAS,EAAE,kBAAkB,EAiHzC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,EAAE,EAAE,MAAM,EACV,eAAe,CAAC,EAAE,kBAAkB,EAAE,EACtC,SAAS,CAAC,EAAE,eAAe,EAAE,GAC5B;IAAE,QAAQ,EAAE,kBAAkB,CAAC;IAAC,MAAM,EAAE,eAAe,EAAE,CAAA;CAAE,GAAG,IAAI,CAWpE"}
|
package/dist/skills/pipeline.js
CHANGED
|
@@ -86,6 +86,41 @@ exports.PIPELINES = [
|
|
|
86
86
|
'spec-review',
|
|
87
87
|
],
|
|
88
88
|
},
|
|
89
|
+
{
|
|
90
|
+
id: 'bugfix-workflow',
|
|
91
|
+
name: 'Bug 修复工作流',
|
|
92
|
+
description: '规范化 Bug 修复流程:故障排查 → 变更提案 → 执行实现 → 单元测试 → 意图审查',
|
|
93
|
+
skillIds: [
|
|
94
|
+
'debug',
|
|
95
|
+
'spec-proposal',
|
|
96
|
+
'implementation',
|
|
97
|
+
'unit-testing',
|
|
98
|
+
'spec-review',
|
|
99
|
+
],
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
id: 'security-audit-workflow',
|
|
103
|
+
name: '安全审计工作流',
|
|
104
|
+
description: '端到端安全审计:威胁建模 → 安全审查 → 变更提案 → 执行实现 → 意图审查',
|
|
105
|
+
skillIds: [
|
|
106
|
+
'threat-model',
|
|
107
|
+
'security-review',
|
|
108
|
+
'spec-proposal',
|
|
109
|
+
'implementation',
|
|
110
|
+
'spec-review',
|
|
111
|
+
],
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
id: 'open-source-release',
|
|
115
|
+
name: '开源发布工作流',
|
|
116
|
+
description: '开源项目规范发布:技术调研 → 代码审查 → 单元测试 → 部署上线',
|
|
117
|
+
skillIds: [
|
|
118
|
+
'tech-research',
|
|
119
|
+
'code-review',
|
|
120
|
+
'unit-testing',
|
|
121
|
+
'deployment',
|
|
122
|
+
],
|
|
123
|
+
},
|
|
89
124
|
];
|
|
90
125
|
/**
|
|
91
126
|
* 根据 pipeline id 解析出 pipeline 定义和对应的 Skill 列表
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/skills/pipeline.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;
|
|
1
|
+
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/skills/pipeline.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AA4HH,0CAeC;AAxID,mCAAqC;AAExB,QAAA,SAAS,GAAyB;IAC7C;QACE,EAAE,EAAE,cAAc;QAClB,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,qCAAqC;QAClD,QAAQ,EAAE;YACR,2BAA2B;YAC3B,gBAAgB;YAChB,iBAAiB;YACjB,gBAAgB;SACjB;KACF;IACD;QACE,EAAE,EAAE,WAAW;QACf,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,4BAA4B;QACzC,QAAQ,EAAE;YACR,mBAAmB;YACnB,aAAa;YACb,eAAe;SAChB;KACF;IACD;QACE,EAAE,EAAE,kBAAkB;QACtB,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,yBAAyB;QACtC,QAAQ,EAAE;YACR,aAAa;YACb,OAAO;SACR;KACF;IACD;QACE,EAAE,EAAE,gBAAgB;QACpB,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,iDAAiD;QAC9D,QAAQ,EAAE;YACR,2BAA2B;YAC3B,YAAY;YACZ,iBAAiB;YACjB,gBAAgB;YAChB,aAAa;YACb,YAAY;SACb;KACF;IACD;QACE,EAAE,EAAE,mBAAmB;QACvB,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,6BAA6B;QAC1C,QAAQ,EAAE;YACR,OAAO;YACP,eAAe;YACf,aAAa;SACd;KACF;IACD;QACE,EAAE,EAAE,aAAa;QACjB,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,2CAA2C;QACxD,QAAQ,EAAE;YACR,KAAK;YACL,eAAe;YACf,YAAY;YACZ,gBAAgB;YAChB,gBAAgB;SACjB;KACF;IACD;QACE,EAAE,EAAE,eAAe;QACnB,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,wDAAwD;QACrE,QAAQ,EAAE;YACR,eAAe;YACf,iBAAiB;YACjB,gBAAgB;YAChB,gBAAgB;YAChB,aAAa;SACd;KACF;IACD;QACE,EAAE,EAAE,iBAAiB;QACrB,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,+CAA+C;QAC5D,QAAQ,EAAE;YACR,OAAO;YACP,eAAe;YACf,gBAAgB;YAChB,cAAc;YACd,aAAa;SACd;KACF;IACD;QACE,EAAE,EAAE,yBAAyB;QAC7B,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,0CAA0C;QACvD,QAAQ,EAAE;YACR,cAAc;YACd,iBAAiB;YACjB,eAAe;YACf,gBAAgB;YAChB,aAAa;SACd;KACF;IACD;QACE,EAAE,EAAE,qBAAqB;QACzB,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,oCAAoC;QACjD,QAAQ,EAAE;YACR,eAAe;YACf,aAAa;YACb,cAAc;YACd,YAAY;SACb;KACF;CACF,CAAC;AAEF;;;GAGG;AACH,SAAgB,eAAe,CAC7B,EAAU,EACV,eAAsC,EACtC,SAA6B;IAE7B,MAAM,SAAS,GAAG,SAAS,IAAI,kBAAU,CAAC;IAC1C,MAAM,YAAY,GAAG,CAAC,GAAG,iBAAS,EAAE,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACvD,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE3B,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ;SAC7B,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;SACzD,MAAM,CAAC,CAAC,CAAC,EAAwB,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;IAExD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AAC9B,CAAC"}
|
|
@@ -5,8 +5,8 @@ const index_1 = require("./index");
|
|
|
5
5
|
const pipeline_1 = require("./pipeline");
|
|
6
6
|
// ─── ALL_SKILLS 基础契约 ────────────────────────────────────────────────────
|
|
7
7
|
(0, vitest_1.describe)('ALL_SKILLS', () => {
|
|
8
|
-
(0, vitest_1.it)('should contain exactly
|
|
9
|
-
(0, vitest_1.expect)(index_1.ALL_SKILLS).toHaveLength(
|
|
8
|
+
(0, vitest_1.it)('should contain exactly 36 skills', () => {
|
|
9
|
+
(0, vitest_1.expect)(index_1.ALL_SKILLS).toHaveLength(36);
|
|
10
10
|
});
|
|
11
11
|
(0, vitest_1.it)('should have unique ids', () => {
|
|
12
12
|
const ids = index_1.ALL_SKILLS.map((s) => s.id);
|
|
@@ -18,7 +18,7 @@ const pipeline_1 = require("./pipeline");
|
|
|
18
18
|
});
|
|
19
19
|
(0, vitest_1.it)('should have sequential order numbers starting from 1', () => {
|
|
20
20
|
const orders = index_1.ALL_SKILLS.map((s) => s.order).sort((a, b) => a - b);
|
|
21
|
-
(0, vitest_1.expect)(orders).toEqual([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]);
|
|
21
|
+
(0, vitest_1.expect)(orders).toEqual([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]);
|
|
22
22
|
});
|
|
23
23
|
(0, vitest_1.it)('every skill should have at least one trigger', () => {
|
|
24
24
|
for (const skill of index_1.ALL_SKILLS) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills.test.js","sourceRoot":"","sources":["../../src/skills/skills.test.ts"],"names":[],"mappings":";;AAAA,mCAA8C;AAC9C,mCAAqC;AACrC,yCAAwD;AAExD,2EAA2E;AAE3E,IAAA,iBAAQ,EAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,IAAA,WAAE,EAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,IAAA,eAAM,EAAC,kBAAU,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,wBAAwB,EAAE,GAAG,EAAE;QAChC,MAAM,GAAG,GAAG,kBAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACxC,IAAA,eAAM,EAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,KAAK,GAAG,kBAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC9C,IAAA,eAAM,EAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,MAAM,GAAG,kBAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACpE,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"skills.test.js","sourceRoot":"","sources":["../../src/skills/skills.test.ts"],"names":[],"mappings":"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"}
|