ethan-skill 1.11.0 → 1.13.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/CHANGELOG.md +272 -0
- package/README.md +84 -33
- package/dist/agents/index.d.ts +14 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +37 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/orchestrator.d.ts +10 -0
- package/dist/agents/orchestrator.d.ts.map +1 -0
- package/dist/agents/orchestrator.js +233 -0
- package/dist/agents/orchestrator.js.map +1 -0
- package/dist/agents/orchestrator.test.d.ts +2 -0
- package/dist/agents/orchestrator.test.d.ts.map +1 -0
- package/dist/agents/orchestrator.test.js +151 -0
- package/dist/agents/orchestrator.test.js.map +1 -0
- package/dist/agents/presets.d.ts +16 -0
- package/dist/agents/presets.d.ts.map +1 -0
- package/dist/agents/presets.js +123 -0
- package/dist/agents/presets.js.map +1 -0
- package/dist/agents/types.d.ts +29 -0
- package/dist/agents/types.d.ts.map +1 -0
- package/dist/agents/types.js +7 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/cli/index.js +1168 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/loader/custom-agent-loader.d.ts +13 -0
- package/dist/loader/custom-agent-loader.d.ts.map +1 -0
- package/dist/loader/custom-agent-loader.js +120 -0
- package/dist/loader/custom-agent-loader.js.map +1 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +278 -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,334 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.serviceCatalogSkill = void 0;
|
|
4
|
+
exports.serviceCatalogSkill = {
|
|
5
|
+
id: 'service-catalog',
|
|
6
|
+
name: '服务目录管理',
|
|
7
|
+
nameEn: 'service_catalog',
|
|
8
|
+
order: 33,
|
|
9
|
+
description: '建立标准化服务目录,生成 Backstage 兼容的 catalog-info.yaml,可视化服务依赖与健康评分',
|
|
10
|
+
descriptionEn: 'Build standardized service catalog, generate Backstage-compatible catalog-info.yaml, visualize service dependencies and health scores',
|
|
11
|
+
detailDescription: `在微服务架构中,服务蔓延(Service Sprawl)让工程师不知道"谁拥有哪个服务"。
|
|
12
|
+
本 Skill 帮助团队建立标准化的服务目录:采集服务元数据、生成 Backstage/IDP 兼容的 catalog-info.yaml、
|
|
13
|
+
绘制服务依赖关系图、建立服务健康评分体系,
|
|
14
|
+
让每个工程师都能快速找到服务的 Owner、SLA、依赖关系和运行状态。`,
|
|
15
|
+
triggers: [
|
|
16
|
+
'服务目录',
|
|
17
|
+
'service catalog',
|
|
18
|
+
'service registry',
|
|
19
|
+
'backstage',
|
|
20
|
+
'内部开发者平台',
|
|
21
|
+
'idp',
|
|
22
|
+
'服务注册',
|
|
23
|
+
'@ethan service-catalog',
|
|
24
|
+
'/service-catalog',
|
|
25
|
+
],
|
|
26
|
+
steps: [
|
|
27
|
+
{
|
|
28
|
+
title: '1. 服务元数据采集',
|
|
29
|
+
content: `系统化收集每个服务的关键元数据:
|
|
30
|
+
|
|
31
|
+
**服务元数据清单**
|
|
32
|
+
|
|
33
|
+
\`\`\`yaml
|
|
34
|
+
# 必填字段
|
|
35
|
+
name: 服务唯一标识(小写 + 连字符)
|
|
36
|
+
display_name: 人类可读名称
|
|
37
|
+
owner: 团队/个人(GitHub Team 或 email)
|
|
38
|
+
tech_stack: 主要技术栈(Node.js/Go/Java 等)
|
|
39
|
+
type: 服务类型(service/library/website/pipeline)
|
|
40
|
+
|
|
41
|
+
# 运维信息
|
|
42
|
+
tier: 重要性等级(tier-1/tier-2/tier-3)
|
|
43
|
+
sla: 可用性目标(99.9%/99.95%/99.99%)
|
|
44
|
+
on_call: 值班联系方式(PagerDuty/Slack channel)
|
|
45
|
+
runbook: 运维手册 URL
|
|
46
|
+
|
|
47
|
+
# 依赖关系
|
|
48
|
+
dependencies: 依赖的其他服务列表
|
|
49
|
+
consumers: 消费本服务的上游列表
|
|
50
|
+
databases: 使用的数据库(类型 + 库名)
|
|
51
|
+
external_apis: 调用的外部 API(如 Stripe/SendGrid)
|
|
52
|
+
|
|
53
|
+
# 文档与质量
|
|
54
|
+
docs: 文档链接(Confluence/Notion)
|
|
55
|
+
api_spec: OpenAPI/AsyncAPI 规范文件路径
|
|
56
|
+
test_coverage: 当前测试覆盖率
|
|
57
|
+
deployment_frequency: 发布频率(daily/weekly/monthly)
|
|
58
|
+
\`\`\`
|
|
59
|
+
|
|
60
|
+
**批量采集脚本**
|
|
61
|
+
\`\`\`bash
|
|
62
|
+
#!/bin/bash
|
|
63
|
+
# 扫描所有服务目录,检查是否有 catalog-info.yaml
|
|
64
|
+
for dir in services/*/; do
|
|
65
|
+
if [ ! -f "$dir/catalog-info.yaml" ]; then
|
|
66
|
+
echo "❌ Missing: $dir/catalog-info.yaml"
|
|
67
|
+
else
|
|
68
|
+
echo "✅ Found: $dir/catalog-info.yaml"
|
|
69
|
+
fi
|
|
70
|
+
done
|
|
71
|
+
\`\`\`
|
|
72
|
+
|
|
73
|
+
**输出**:服务元数据采集表(所有服务 + 完整度评分)`,
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
title: '2. 生成 catalog-info.yaml',
|
|
77
|
+
content: `生成 Backstage/内部开发者平台兼容的服务定义文件:
|
|
78
|
+
|
|
79
|
+
**完整 catalog-info.yaml 模板**
|
|
80
|
+
\`\`\`yaml
|
|
81
|
+
# services/order-service/catalog-info.yaml
|
|
82
|
+
apiVersion: backstage.io/v1alpha1
|
|
83
|
+
kind: Component
|
|
84
|
+
metadata:
|
|
85
|
+
name: order-service
|
|
86
|
+
title: 订单服务
|
|
87
|
+
description: 处理订单创建、支付和履约的核心服务
|
|
88
|
+
tags:
|
|
89
|
+
- nodejs
|
|
90
|
+
- postgresql
|
|
91
|
+
- kafka
|
|
92
|
+
- tier-1
|
|
93
|
+
annotations:
|
|
94
|
+
# GitHub 集成
|
|
95
|
+
github.com/project-slug: myorg/order-service
|
|
96
|
+
# 监控集成
|
|
97
|
+
prometheus.io/alert: 'order-service-alerts'
|
|
98
|
+
grafana.com/dashboard: 'https://grafana.internal/d/orders'
|
|
99
|
+
# 文档
|
|
100
|
+
backstage.io/techdocs-ref: dir:.
|
|
101
|
+
# PagerDuty
|
|
102
|
+
pagerduty.com/service-id: P123456
|
|
103
|
+
links:
|
|
104
|
+
- url: https://runbook.internal/order-service
|
|
105
|
+
title: Runbook
|
|
106
|
+
icon: book
|
|
107
|
+
- url: https://grafana.internal/d/orders
|
|
108
|
+
title: Dashboard
|
|
109
|
+
icon: dashboard
|
|
110
|
+
|
|
111
|
+
spec:
|
|
112
|
+
type: service
|
|
113
|
+
lifecycle: production # experimental | production | deprecated
|
|
114
|
+
owner: group:backend-team
|
|
115
|
+
system: ecommerce-platform
|
|
116
|
+
|
|
117
|
+
# 依赖声明
|
|
118
|
+
dependsOn:
|
|
119
|
+
- component:user-service
|
|
120
|
+
- component:inventory-service
|
|
121
|
+
- resource:orders-postgres
|
|
122
|
+
- resource:payment-kafka-topic
|
|
123
|
+
|
|
124
|
+
# 对外提供的 API
|
|
125
|
+
providesApis:
|
|
126
|
+
- order-api-v2
|
|
127
|
+
\`\`\`
|
|
128
|
+
|
|
129
|
+
**API 定义(关联)**
|
|
130
|
+
\`\`\`yaml
|
|
131
|
+
# order-api.yaml
|
|
132
|
+
apiVersion: backstage.io/v1alpha1
|
|
133
|
+
kind: API
|
|
134
|
+
metadata:
|
|
135
|
+
name: order-api-v2
|
|
136
|
+
description: 订单服务 REST API v2
|
|
137
|
+
spec:
|
|
138
|
+
type: openapi
|
|
139
|
+
lifecycle: production
|
|
140
|
+
owner: group:backend-team
|
|
141
|
+
definition:
|
|
142
|
+
$text: ./openapi/order-api-v2.yaml
|
|
143
|
+
\`\`\`
|
|
144
|
+
|
|
145
|
+
**Resource 定义(数据库/队列)**
|
|
146
|
+
\`\`\`yaml
|
|
147
|
+
apiVersion: backstage.io/v1alpha1
|
|
148
|
+
kind: Resource
|
|
149
|
+
metadata:
|
|
150
|
+
name: orders-postgres
|
|
151
|
+
description: 订单主数据库(PostgreSQL 14)
|
|
152
|
+
spec:
|
|
153
|
+
type: database
|
|
154
|
+
owner: group:dba-team
|
|
155
|
+
system: ecommerce-platform
|
|
156
|
+
\`\`\`
|
|
157
|
+
|
|
158
|
+
**输出**:catalog-info.yaml + API 定义文件 + Resource 定义文件`,
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
title: '3. 服务依赖关系图',
|
|
162
|
+
content: `可视化服务间的上下游依赖关系:
|
|
163
|
+
|
|
164
|
+
**Mermaid 依赖图生成**
|
|
165
|
+
\`\`\`typescript
|
|
166
|
+
// scripts/gen-dependency-graph.ts
|
|
167
|
+
function generateMermaid(services: Service[]): string {
|
|
168
|
+
const lines = ['graph LR'];
|
|
169
|
+
|
|
170
|
+
for (const service of services) {
|
|
171
|
+
for (const dep of service.dependencies) {
|
|
172
|
+
lines.push(\` \${service.name} --> \${dep}\`);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
return lines.join('\\n');
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// 输出示例:
|
|
180
|
+
// graph LR
|
|
181
|
+
// order-service --> user-service
|
|
182
|
+
// order-service --> inventory-service
|
|
183
|
+
// order-service --> payment-service
|
|
184
|
+
// api-gateway --> order-service
|
|
185
|
+
// api-gateway --> user-service
|
|
186
|
+
\`\`\`
|
|
187
|
+
|
|
188
|
+
**关键依赖分析**
|
|
189
|
+
\`\`\`
|
|
190
|
+
依赖分析报告
|
|
191
|
+
════════════
|
|
192
|
+
|
|
193
|
+
高扇入服务(被依赖最多,故障影响最广):
|
|
194
|
+
user-service 被 8 个服务依赖 ⚠️ 单点风险
|
|
195
|
+
auth-service 被 12 个服务依赖 🔴 关键路径
|
|
196
|
+
|
|
197
|
+
高扇出服务(依赖最多,级联失败风险):
|
|
198
|
+
order-service 依赖 6 个服务 ⚠️ 需熔断保护
|
|
199
|
+
report-service 依赖 9 个服务 🔴 脆弱性高
|
|
200
|
+
|
|
201
|
+
循环依赖检测:
|
|
202
|
+
✅ 未发现循环依赖
|
|
203
|
+
|
|
204
|
+
孤立服务(无依赖/无被依赖):
|
|
205
|
+
legacy-batch-job ⚠️ 是否可下线?
|
|
206
|
+
\`\`\`
|
|
207
|
+
|
|
208
|
+
**依赖健康度 Checklist**
|
|
209
|
+
- [ ] 高扇入服务(>5个依赖)配备了熔断器(Circuit Breaker)
|
|
210
|
+
- [ ] 高扇出服务对所有依赖设置了超时(Timeout)
|
|
211
|
+
- [ ] 关键路径服务有冗余/多活部署
|
|
212
|
+
- [ ] 无循环依赖
|
|
213
|
+
|
|
214
|
+
**输出**:服务依赖关系图(Mermaid/DOT)+ 风险分析报告`,
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
title: '4. 服务健康评分',
|
|
218
|
+
content: `建立多维度服务健康评分体系,量化技术质量:
|
|
219
|
+
|
|
220
|
+
**服务健康评分卡(满分 100)**
|
|
221
|
+
|
|
222
|
+
\`\`\`
|
|
223
|
+
维度 权重 评分标准
|
|
224
|
+
─────────────────────────────────────────
|
|
225
|
+
📄 文档完整性 20分
|
|
226
|
+
catalog-info.yaml 5分 (存在且完整)
|
|
227
|
+
README.md 5分 (含部署、接口说明)
|
|
228
|
+
API 规范 5分 (OpenAPI/AsyncAPI)
|
|
229
|
+
Runbook 5分 (含常见故障处理)
|
|
230
|
+
|
|
231
|
+
🧪 测试质量 25分
|
|
232
|
+
单元测试覆盖率 >80% 15分
|
|
233
|
+
集成测试存在 10分
|
|
234
|
+
|
|
235
|
+
🚀 部署规范 25分
|
|
236
|
+
CI/CD 流水线完整 10分
|
|
237
|
+
容器化(Dockerfile) 5分
|
|
238
|
+
健康检查接口 5分
|
|
239
|
+
优雅关闭实现 5分
|
|
240
|
+
|
|
241
|
+
📊 可观测性 20分
|
|
242
|
+
Metrics 暴露 8分 (/metrics endpoint)
|
|
243
|
+
结构化日志 7分 (JSON 格式 + trace ID)
|
|
244
|
+
告警规则配置 5分
|
|
245
|
+
|
|
246
|
+
🔒 安全合规 10分
|
|
247
|
+
依赖漏洞扫描通过 5分 (npm audit/Snyk 0 High)
|
|
248
|
+
密钥未硬编码 5分
|
|
249
|
+
\`\`\`
|
|
250
|
+
|
|
251
|
+
**评分等级**
|
|
252
|
+
- 🟢 **优秀(90-100)**:可作为黄金路径参考
|
|
253
|
+
- 🟡 **良好(70-89)**:有改进空间,下季度计划
|
|
254
|
+
- 🟠 **待改进(50-69)**:需要专项提升
|
|
255
|
+
- 🔴 **高风险(< 50)**:必须立即改进
|
|
256
|
+
|
|
257
|
+
**批量评分脚本示例**
|
|
258
|
+
\`\`\`bash
|
|
259
|
+
#!/bin/bash
|
|
260
|
+
# 检查服务健康评分关键项
|
|
261
|
+
check_service() {
|
|
262
|
+
local dir=$1
|
|
263
|
+
local score=0
|
|
264
|
+
|
|
265
|
+
[ -f "$dir/catalog-info.yaml" ] && score=$((score+5))
|
|
266
|
+
[ -f "$dir/README.md" ] && score=$((score+5))
|
|
267
|
+
[ -f "$dir/Dockerfile" ] && score=$((score+5))
|
|
268
|
+
[ -f "$dir/.github/workflows/ci.yml" ] && score=$((score+10))
|
|
269
|
+
|
|
270
|
+
echo "$dir: $score / 25 (快速检查)"
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
for dir in services/*/; do check_service "$dir"; done
|
|
274
|
+
\`\`\`
|
|
275
|
+
|
|
276
|
+
**输出**:服务健康评分卡 + 改进优先级清单`,
|
|
277
|
+
},
|
|
278
|
+
{
|
|
279
|
+
title: '5. 服务生命周期管理',
|
|
280
|
+
content: `建立服务从孵化到下线的标准生命周期流程:
|
|
281
|
+
|
|
282
|
+
**四阶段生命周期**
|
|
283
|
+
\`\`\`
|
|
284
|
+
孵化(Experimental)→ 成熟(Production)→ 维护(Maintenance)→ 下线(Deprecated)
|
|
285
|
+
\`\`\`
|
|
286
|
+
|
|
287
|
+
**各阶段定义与要求**
|
|
288
|
+
|
|
289
|
+
| 阶段 | lifecycle 值 | 要求 | 颜色标记 |
|
|
290
|
+
|------|-------------|------|---------|
|
|
291
|
+
| 孵化 | experimental | 开发中,不可用于生产 | 🟡 |
|
|
292
|
+
| 成熟 | production | 满足健康评分 ≥ 80 | 🟢 |
|
|
293
|
+
| 维护 | maintenance | 仅修复 Bug,不加新功能 | 🟠 |
|
|
294
|
+
| 下线 | deprecated | 已有替代服务,设定截止日 | 🔴 |
|
|
295
|
+
|
|
296
|
+
**服务下线流程**
|
|
297
|
+
\`\`\`
|
|
298
|
+
Day 0: 更新 lifecycle: deprecated,添加 deprecation notice
|
|
299
|
+
通知所有已知消费者(来自 catalog 的 consumers 列表)
|
|
300
|
+
|
|
301
|
+
Day 30: 确认所有消费者已迁移
|
|
302
|
+
关闭新注册/新依赖
|
|
303
|
+
|
|
304
|
+
Day 60: 停止接受新请求(返回 410 Gone)
|
|
305
|
+
保留 Read-only 访问用于历史数据查询
|
|
306
|
+
|
|
307
|
+
Day 90: 完全下线,数据归档
|
|
308
|
+
从 catalog 中标记 archived: true
|
|
309
|
+
\`\`\`
|
|
310
|
+
|
|
311
|
+
**服务晋升 Checklist(Experimental → Production)**
|
|
312
|
+
- [ ] 服务健康评分 ≥ 80
|
|
313
|
+
- [ ] 通过 Load Test(目标 TPS 的 150% 压力)
|
|
314
|
+
- [ ] 完成安全扫描(0 个 High/Critical 漏洞)
|
|
315
|
+
- [ ] Runbook 已编写并通过演练
|
|
316
|
+
- [ ] 监控告警已配置并验证(OnCall 团队确认)
|
|
317
|
+
- [ ] 至少经过 2 周 Canary 发布观察
|
|
318
|
+
|
|
319
|
+
**输出**:服务生命周期文档 + 下线流程 + 晋升 Checklist`,
|
|
320
|
+
},
|
|
321
|
+
],
|
|
322
|
+
outputFormat: 'catalog-info.yaml 文件 + 服务依赖关系图(Mermaid)+ 服务健康评分卡 + 生命周期管理规范',
|
|
323
|
+
examples: [],
|
|
324
|
+
notes: [
|
|
325
|
+
'服务目录的价值在于"被发现"——确保 catalog-info.yaml 提交到代码库并与 Backstage/IDP 自动同步',
|
|
326
|
+
'从高 Tier(Tier-1 核心服务)开始建立目录,而非试图一次性覆盖所有服务',
|
|
327
|
+
'服务健康评分应作为季度技术评审的固定议题,驱动持续改进',
|
|
328
|
+
'依赖关系图定期更新至关重要——过时的依赖图比没有图更危险',
|
|
329
|
+
'Backstage 是目前最成熟的开源 IDP,推荐中大型团队直接采用;小团队可用 catalog-info.yaml 文件 + 简单脚本代替',
|
|
330
|
+
],
|
|
331
|
+
category: '执行侧',
|
|
332
|
+
nextSkill: 'deployment',
|
|
333
|
+
};
|
|
334
|
+
//# sourceMappingURL=33-service-catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"33-service-catalog.js","sourceRoot":"","sources":["../../src/skills/33-service-catalog.ts"],"names":[],"mappings":";;;AAEa,QAAA,mBAAmB,GAAoB;IAClD,EAAE,EAAE,iBAAiB;IACrB,IAAI,EAAE,QAAQ;IACd,MAAM,EAAE,iBAAiB;IACzB,KAAK,EAAE,EAAE;IACT,WAAW,EAAE,2DAA2D;IACxE,aAAa,EAAE,uIAAuI;IACtJ,iBAAiB,EAAE;;;qCAGgB;IACnC,QAAQ,EAAE;QACR,MAAM;QACN,iBAAiB;QACjB,kBAAkB;QAClB,WAAW;QACX,SAAS;QACT,KAAK;QACL,MAAM;QACN,wBAAwB;QACxB,kBAAkB;KACnB;IACD,KAAK,EAAE;QACL;YACE,KAAK,EAAE,YAAY;YACnB,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8BA4Ce;SACzB;QACD;YACE,KAAK,EAAE,yBAAyB;YAChC,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oDAiFqC;SAC/C;QACD;YACE,KAAK,EAAE,YAAY;YACnB,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oCAoDqB;SAC/B;QACD;YACE,KAAK,EAAE,WAAW;YAClB,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBA0DU;SACpB;QACD;YACE,KAAK,EAAE,aAAa;YACpB,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sCAuCuB;SACjC;KACF;IACD,YAAY,EAAE,6DAA6D;IAC3E,QAAQ,EAAE,EAAE;IACZ,KAAK,EAAE;QACL,kEAAkE;QAClE,0CAA0C;QAC1C,6BAA6B;QAC7B,8BAA8B;QAC9B,yEAAyE;KAC1E;IACD,QAAQ,EAAE,KAAK;IACf,SAAS,EAAE,YAAY;CACxB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"34-mobile-review.d.ts","sourceRoot":"","sources":["../../src/skills/34-mobile-review.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,eAAO,MAAM,iBAAiB,EAAE,eAiY/B,CAAC"}
|