@deepstorm/cli 0.7.1 → 0.8.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.js +1 -17
- package/dist/mcp-skills/deepstorm-mcp-figma-read/SKILL.md +1 -1
- package/dist/mcp-skills/deepstorm-mcp-jira-read/SKILL.md +1 -1
- package/dist/mcp-skills/deepstorm-mcp-playwright-read/SKILL.md +1 -1
- package/dist/skills/reef-gen-backend/SKILL.md.tmpl +1 -0
- package/dist/skills/reef-gen-backend/variants/java/steps.md +12 -0
- package/dist/skills/reef-gen-backend/variants/python/steps.md +12 -0
- package/dist/skills/reef-gen-frontend/SKILL.md.tmpl +1 -0
- package/dist/skills/reef-gen-frontend/variants/angular/steps.md +9 -0
- package/dist/skills/reef-gen-frontend/variants/react/steps.md +9 -0
- package/dist/skills/reef-gen-frontend/variants/vue/steps.md +9 -0
- package/dist/skills/reef-pr/SKILL.md +2 -2
- package/dist/skills/reef-start/SKILL.md.tmpl +8 -1
- package/dist/skills/reef-style-backend/variants/java/quick-reference.md +9 -6
- package/dist/skills/reef-style-backend/variants/python/quick-reference.md +10 -0
- package/dist/skills/reef-style-frontend/variants/angular/quick-reference.md +8 -0
- package/dist/skills/reef-style-frontend/variants/react/quick-reference.md +8 -0
- package/dist/skills/reef-style-frontend/variants/vue/quick-reference.md +8 -0
- package/dist/skills/sweep-init/SKILL.md +3 -3
- package/dist/skills/sweep-run/SKILL.md +3 -3
- package/dist/skills/sweep-run/scripts/env-manager.mjs +7 -9
- package/dist/skills/tide-discuss/references/publish-flow.md +1 -1
- package/package.json +2 -2
package/dist/cli.js
CHANGED
|
@@ -6042,22 +6042,6 @@ function readDeepStormConfig(targetDir) {
|
|
|
6042
6042
|
if (fs.existsSync(settingsPath)) {
|
|
6043
6043
|
return readAndMigrate(settingsPath);
|
|
6044
6044
|
}
|
|
6045
|
-
const oldPath = path.join(targetDir, ".claude", "settings.json");
|
|
6046
|
-
if (fs.existsSync(oldPath)) {
|
|
6047
|
-
try {
|
|
6048
|
-
const raw = fs.readFileSync(oldPath, "utf-8");
|
|
6049
|
-
const settings = JSON.parse(raw);
|
|
6050
|
-
const config = settings.deepstorm;
|
|
6051
|
-
if (config && Object.keys(config).length > 0) {
|
|
6052
|
-
const migrated = migrateConfig(config);
|
|
6053
|
-
writeDeepStormConfig(targetDir, migrated);
|
|
6054
|
-
delete settings.deepstorm;
|
|
6055
|
-
fs.writeFileSync(oldPath, JSON.stringify(settings, null, 2) + "\n", "utf-8");
|
|
6056
|
-
return migrated;
|
|
6057
|
-
}
|
|
6058
|
-
} catch {
|
|
6059
|
-
}
|
|
6060
|
-
}
|
|
6061
6045
|
return null;
|
|
6062
6046
|
}
|
|
6063
6047
|
function readAndMigrate(settingsPath) {
|
|
@@ -8074,7 +8058,7 @@ function printMcpEnvStatus(mcpTools, installedMcpServices, examplesDir, targetDi
|
|
|
8074
8058
|
async function printGuide(options) {
|
|
8075
8059
|
const { installedSkills, config, targetDir, mcpTools, mcpEnvStubs } = options;
|
|
8076
8060
|
console.log("");
|
|
8077
|
-
console.log(" \u2714 \u914D\u7F6E\u5DF2\u4FDD\u5B58\
|
|
8061
|
+
console.log(" \u2714 \u914D\u7F6E\u5DF2\u4FDD\u5B58\uFF08DeepStorm \u2192 .deepstorm/settings.json\uFF0CClaude Code \u2192 .claude/settings.json\uFF09");
|
|
8078
8062
|
if (mcpTools && mcpTools.length > 0) {
|
|
8079
8063
|
console.log("");
|
|
8080
8064
|
console.log(` \u2714 \u5DF2\u5B89\u88C5 ${mcpTools.length} \u4E2A\u5916\u90E8\u670D\u52A1`);
|
|
@@ -24,7 +24,7 @@ description: Use when you need to read Figma design data — get file info, read
|
|
|
24
24
|
操作前先确认 Figma MCP 是否可用:
|
|
25
25
|
|
|
26
26
|
```
|
|
27
|
-
检查 `.
|
|
27
|
+
检查 `.deepstorm/settings.json` → `mcpCapabilities` 中 design_tools.available === true
|
|
28
28
|
```
|
|
29
29
|
|
|
30
30
|
---
|
|
@@ -24,7 +24,7 @@ description: Use when you need to read Jira Issue data — get issue details, se
|
|
|
24
24
|
操作前先确认 Jira MCP 是否可用:
|
|
25
25
|
|
|
26
26
|
```
|
|
27
|
-
检查 `.
|
|
27
|
+
检查 `.deepstorm/settings.json` → `mcpCapabilities` 中 issue_tracker.available === true(providers 包含 jira)
|
|
28
28
|
```
|
|
29
29
|
|
|
30
30
|
---
|
|
@@ -24,7 +24,7 @@ description: Use when you need to perform browser automation — navigate pages,
|
|
|
24
24
|
操作前先确认 Playwright MCP 是否可用:
|
|
25
25
|
|
|
26
26
|
```
|
|
27
|
-
检查 `.
|
|
27
|
+
检查 `.deepstorm/settings.json` → `mcpCapabilities` 中 browser-automation.available === true(providers 包含 playwright)
|
|
28
28
|
```
|
|
29
29
|
|
|
30
30
|
---
|
|
@@ -41,6 +41,7 @@ git diff "$FORK_POINT"..HEAD --diff-filter=M --name-only
|
|
|
41
41
|
{{#if reef.backend.language.sourcePath}}
|
|
42
42
|
阅读本技能目录下的 `steps.md` 了解当前技术栈的编码步骤顺序和规范。编写过程中逐单元对照 `reef:reef-style-backend` 中对应章节检查。
|
|
43
43
|
|
|
44
|
+
**注释要求**:所有生成的后端代码必须包含有意义的注释(Javadoc / Docstring / 行内注释),说明代码的功能、参数含义和业务逻辑。缺少必要注释的代码视为未完成,不得提交。
|
|
44
45
|
**注释语言**:代码注释统一使用中文,专有名词/技术术语(如 REST、DTO、HTTP、JPA 等)保留英文。
|
|
45
46
|
{{/if}}
|
|
46
47
|
|
|
@@ -11,6 +11,18 @@
|
|
|
11
11
|
|
|
12
12
|
每完成一块对照 `reef:reef-style-backend` 中对应章节检查。
|
|
13
13
|
|
|
14
|
+
## 注释要求
|
|
15
|
+
|
|
16
|
+
每类文件必须包含以下注释(缺少则视为未完成):
|
|
17
|
+
|
|
18
|
+
| 文件类型 | 注释要求 |
|
|
19
|
+
|---------|---------|
|
|
20
|
+
| **Entity** | 类 Javadoc `/** 实体描述 */`;每个字段 `/** 字段含义 */` |
|
|
21
|
+
| **DTO / Record** | 类 Javadoc `/** 用途说明 */`;字段按 `reef-style-backend` 规范不加注释 |
|
|
22
|
+
| **Repository** | 自定义查询方法加 `/** 查询意图、参数含义 */`;简单 CRUD 方法可不加 |
|
|
23
|
+
| **Service** | 每个 public 方法加 Javadoc `/** 功能、@param、@return */`;复杂逻辑内联注释说明 |
|
|
24
|
+
| **Controller** | 每个端点加 `@Operation(summary=, description=)` 或等价 Javadoc |
|
|
25
|
+
|
|
14
26
|
## 多租户红线
|
|
15
27
|
|
|
16
28
|
- 所有数据库查询用 `findByIdAndAppId`,禁止裸 `findById`
|
|
@@ -46,6 +46,18 @@ app.include_router(orders.router, prefix="/api/v1/orders", tags=["orders"])
|
|
|
46
46
|
|
|
47
47
|
每完成一块对照 `reef:reef-style-backend` 的 Python 章节检查。
|
|
48
48
|
|
|
49
|
+
## 注释要求
|
|
50
|
+
|
|
51
|
+
每类文件必须包含以下注释(缺少则视为未完成):
|
|
52
|
+
|
|
53
|
+
| 文件类型 | 注释要求 |
|
|
54
|
+
|---------|---------|
|
|
55
|
+
| **Schema (Pydantic)** | 类 docstring 说明用途;关键字段用 `Field(description=...)`(会生成 OpenAPI 文档) |
|
|
56
|
+
| **Model (SQLAlchemy)** | 类 docstring 说明表含义;复杂字段用 `comment=` 或行内注释说明 |
|
|
57
|
+
| **Service** | 每个 public 函数加 docstring(Google 风格 `"""功能、Args、Returns"""`);复杂逻辑行内注释 |
|
|
58
|
+
| **Router** | 每个端点加 `summary=`/`description=` 参数或 docstring |
|
|
59
|
+
| **Migration** | 每个 revision 加 docstring 说明变更意图 |
|
|
60
|
+
|
|
49
61
|
## ⚠️ 异步红线
|
|
50
62
|
|
|
51
63
|
- 所有数据库操作用 `AsyncSession`,禁止同步 `Session`
|
|
@@ -62,6 +62,7 @@ git diff "$FORK_POINT"..HEAD --diff-filter=M --name-only
|
|
|
62
62
|
{{#if reef.frontend.framework.sourcePath}}
|
|
63
63
|
阅读本技能目录下的 `steps.md` 了解当前框架的编码步骤顺序和核心约束。编写过程中逐单元对照 `reef:reef-style-frontend` 中对应章节检查。
|
|
64
64
|
|
|
65
|
+
**注释原则**:关键组件、自定义 Hooks / Composables / Service 和非直观逻辑添加必要的注释说明用途,简单模板代码可不加。
|
|
65
66
|
**注释语言**:代码注释统一使用中文,专有名词/技术术语(如 Signal、Pipe、Component、Service、httpResource 等)保留英文。
|
|
66
67
|
{{/if}}
|
|
67
68
|
|
|
@@ -9,6 +9,15 @@
|
|
|
9
9
|
|
|
10
10
|
每完成一块对照 `reef:reef-style-frontend` 中对应章节检查。
|
|
11
11
|
|
|
12
|
+
## 注释要求
|
|
13
|
+
|
|
14
|
+
| 文件类型 | 注释要求 |
|
|
15
|
+
|---------|---------|
|
|
16
|
+
| **类型定义** | 复杂类型加行内注释说明字段含义 |
|
|
17
|
+
| **Service** | 简要说明每个方法的功能和返回类型 |
|
|
18
|
+
| **Component** | 关键组件加注释说明用途;复杂逻辑行内注释 |
|
|
19
|
+
| **路由** | 无需额外注释 |
|
|
20
|
+
|
|
12
21
|
## 核心约束
|
|
13
22
|
|
|
14
23
|
- Standalone 组件(不使用 NgModule)
|
|
@@ -9,6 +9,15 @@
|
|
|
9
9
|
|
|
10
10
|
每完成一块对照 `reef:reef-style-frontend` 中对应章节检查。
|
|
11
11
|
|
|
12
|
+
## 注释要求
|
|
13
|
+
|
|
14
|
+
| 文件类型 | 注释要求 |
|
|
15
|
+
|---------|---------|
|
|
16
|
+
| **类型定义** | 复杂类型加行内注释说明字段含义 |
|
|
17
|
+
| **API Hook** | 简要说明该 Hook 的功能和返回值 |
|
|
18
|
+
| **组件** | 关键组件加注释说明用途;复杂逻辑行内注释 |
|
|
19
|
+
| **页面** | 无需额外注释 |
|
|
20
|
+
|
|
12
21
|
## 核心约束
|
|
13
22
|
|
|
14
23
|
- 函数组件 + TypeScript(禁止 Class 组件)
|
|
@@ -9,6 +9,15 @@
|
|
|
9
9
|
|
|
10
10
|
每完成一块对照 `reef:reef-style-frontend` 中对应章节检查。
|
|
11
11
|
|
|
12
|
+
## 注释要求
|
|
13
|
+
|
|
14
|
+
| 文件类型 | 注释要求 |
|
|
15
|
+
|---------|---------|
|
|
16
|
+
| **类型定义** | 复杂类型加行内注释说明字段含义 |
|
|
17
|
+
| **组合式函数** | 简要说明该函数的功能和返回值 |
|
|
18
|
+
| **组件** | 关键组件加注释说明用途;复杂逻辑行内注释 |
|
|
19
|
+
| **页面** | 无需额外注释 |
|
|
20
|
+
|
|
12
21
|
## 核心约束
|
|
13
22
|
|
|
14
23
|
- `<script setup lang="ts">` 语法(禁止 Options API)
|
|
@@ -47,14 +47,14 @@ ls -d openspec/changes/$BRANCH/*.md 2>/dev/null
|
|
|
47
47
|
**正文:**
|
|
48
48
|
|
|
49
49
|
```markdown
|
|
50
|
-
##
|
|
50
|
+
## 概要
|
|
51
51
|
{2-4 行概括变更动机,优先从 proposal.md 提取}
|
|
52
52
|
## 关联
|
|
53
53
|
JIRA: {commit body / proposal.md / jira-start 元数据}
|
|
54
54
|
OpenSpec: openspec/changes/{branch-name}/
|
|
55
55
|
## 变更清单
|
|
56
56
|
{git diff --stat 输出}
|
|
57
|
-
##
|
|
57
|
+
## 测试计划
|
|
58
58
|
- [ ] {前端路径含 src/main/web/ 则加}
|
|
59
59
|
- [ ] {后端路径含 src/main/java/ 则加}
|
|
60
60
|
- [ ] {手动验证步骤,如有}
|
|
@@ -355,7 +355,14 @@ openspec instructions tasks --change "$CHANGE" --json
|
|
|
355
355
|
|
|
356
356
|
#### 3.8 语言规范
|
|
357
357
|
|
|
358
|
-
|
|
358
|
+
**所有 SDD 文档(proposal/specs/design/tasks)正文必须使用中文。** 英文仅限专有名词和技术引用。
|
|
359
|
+
|
|
360
|
+
| 组件 | 使用中文 | 保留英文原文 |
|
|
361
|
+
|------|---------|-------------|
|
|
362
|
+
| SDD 文档(proposal/specs/design/tasks) | 正文、场景描述、WHEN/THEN 描述 | 代码实体名、字段名、类名、枚举值、API 路径、技术术语 |
|
|
363
|
+
| 代码注释 | 注释正文 | 专有名词(Signal、DTO、MapStruct、PrimeNG 等) |
|
|
364
|
+
| 提交信息 | 描述性 message | JIRA URL、PRD 链接、技术术语 |
|
|
365
|
+
| 变更名/分支名 | 输入为中文 | 输出为 kebab-case(3-6 词),如 `feat/add-user-auth` |
|
|
359
366
|
|
|
360
367
|
#### 3.9 用户确认
|
|
361
368
|
|
|
@@ -70,12 +70,15 @@ public abstract boolean supportsImporting();
|
|
|
70
70
|
**替代方案:** 用 `instanceof` 判断 → ✗ 不推荐,违反开闭原则,每加一个子类就要改判断链。
|
|
71
71
|
**优势:** 开闭原则 — 新增子类只需在自己的类中覆盖方法;新增能力只需在基类加方法 + 各子类实现。
|
|
72
72
|
|
|
73
|
-
##
|
|
74
|
-
|
|
75
|
-
| 文件类型 |
|
|
76
|
-
|
|
77
|
-
|
|
|
78
|
-
| DTO / Record |
|
|
73
|
+
## 注释规则
|
|
74
|
+
|
|
75
|
+
| 文件类型 | 注释要求 |
|
|
76
|
+
|---------|---------|
|
|
77
|
+
| **Entity** | 类 Javadoc `/** 实体描述 */`;每个字段 `/** 字段含义 */` |
|
|
78
|
+
| **DTO / Record** | 类 Javadoc `/** 用途说明 */`;字段不加 `/** */` 注释 |
|
|
79
|
+
| **Repository** | 自定义查询方法加 `/** 查询意图、参数含义 */`;简单 CRUD 方法可不加 |
|
|
80
|
+
| **Service** | 每个 public 方法加 Javadoc `/** 功能、@param、@return */` |
|
|
81
|
+
| **Controller** | 每个端点加 `@Operation(summary=, description=)` 或等价 Javadoc |
|
|
79
82
|
|
|
80
83
|
## 领域事件 / POJO
|
|
81
84
|
|
|
@@ -74,6 +74,16 @@ class NumberControl(FormControl):
|
|
|
74
74
|
**替代方案:** 用 `isinstance()` 判断 → ✗ 不推荐,违反开闭原则。
|
|
75
75
|
**优势:** 开闭原则 — 新增子类只需在自己的类中覆盖方法;新增能力只需在基类加方法 + 各子类实现。
|
|
76
76
|
|
|
77
|
+
## 注释规则
|
|
78
|
+
|
|
79
|
+
| 文件类型 | 注释要求 |
|
|
80
|
+
|---------|---------|
|
|
81
|
+
| **Model (SQLAlchemy)** | 类 docstring 说明表含义;复杂字段用 `comment=` 行内注释 |
|
|
82
|
+
| **Schema (Pydantic)** | 类 docstring 说明用途;关键字段用 `Field(description=...)` |
|
|
83
|
+
| **Service** | public 函数加 docstring,说明功能、参数和返回值 |
|
|
84
|
+
| **Router** | 每个端点加 `summary=`/`description=` 参数 |
|
|
85
|
+
| **Migration** | 每个 revision 加 docstring 说明变更意图 |
|
|
86
|
+
|
|
77
87
|
## 类型注释规则
|
|
78
88
|
|
|
79
89
|
| 声明位置 | 需要类型注释 |
|
|
@@ -84,6 +84,14 @@ readonly form = form(signal({ name: '', email: '' }), (path) => {
|
|
|
84
84
|
- 控制流语句必须使用大括号,禁止无大括号的早期返回
|
|
85
85
|
- 代码折行规则(90 列限制)详见 `examples/code-wrapping.md`
|
|
86
86
|
|
|
87
|
+
## 注释规则
|
|
88
|
+
|
|
89
|
+
| 文件类型 | 注释要求 |
|
|
90
|
+
|---------|---------|
|
|
91
|
+
| **类型定义** | 复杂类型加行内注释说明字段含义 |
|
|
92
|
+
| **Service** | 简要说明每个方法的功能和返回类型 |
|
|
93
|
+
| **Component** | 关键组件加注释说明用途;复杂逻辑行内注释 |
|
|
94
|
+
|
|
87
95
|
## 前端实体类型
|
|
88
96
|
|
|
89
97
|
实体接口镜像后端实体层次,定义在 `shared/base.ts`:`ImmutableEntity` → `Entity` → `Auditable<T>` / `ImmutableAuditable<T>`。完整定义、分页响应、Discriminated Union 模式见 `examples/entity-types.md`。
|
|
@@ -107,6 +107,14 @@ const routes = [
|
|
|
107
107
|
- JSX 属性超过 3 个时换行排列
|
|
108
108
|
- 自闭合标签:无子元素时使用 `<Component />` 而非 `<Component></Component>`
|
|
109
109
|
|
|
110
|
+
## 注释规则
|
|
111
|
+
|
|
112
|
+
| 文件类型 | 注释要求 |
|
|
113
|
+
|---------|---------|
|
|
114
|
+
| **类型定义** | 复杂类型加行内注释说明字段含义 |
|
|
115
|
+
| **API Hook** | 简要说明该 Hook 的功能和返回值 |
|
|
116
|
+
| **组件** | 关键组件加注释说明用途;复杂逻辑行内注释 |
|
|
117
|
+
|
|
110
118
|
## 常见坑
|
|
111
119
|
|
|
112
120
|
| 场景 | 问题 | 正确做法 |
|
|
@@ -133,6 +133,14 @@ const router = createRouter({
|
|
|
133
133
|
- 自闭合标签:无子元素时使用 `<Component />` 而非 `<Component></Component>`
|
|
134
134
|
- 模板表达式保持简洁,复杂逻辑提取到 `<script setup>` 中
|
|
135
135
|
|
|
136
|
+
## 注释规则
|
|
137
|
+
|
|
138
|
+
| 文件类型 | 注释要求 |
|
|
139
|
+
|---------|---------|
|
|
140
|
+
| **类型定义** | 复杂类型加行内注释说明字段含义 |
|
|
141
|
+
| **组合式函数** | 简要说明该函数的功能和返回值 |
|
|
142
|
+
| **组件** | 关键组件加注释说明用途;复杂逻辑行内注释 |
|
|
143
|
+
|
|
136
144
|
## 常见坑
|
|
137
145
|
|
|
138
146
|
| 场景 | 问题 | 正确做法 |
|
|
@@ -28,10 +28,10 @@ deepstorm:
|
|
|
28
28
|
|
|
29
29
|
### 步骤 0:读取框架配置
|
|
30
30
|
|
|
31
|
-
在执行初始化前,先读取 `.
|
|
31
|
+
在执行初始化前,先读取 `.deepstorm/settings.json` 中的 `sweep.e2eFramework` 配置,确定当前项目使用的 E2E 框架。
|
|
32
32
|
|
|
33
33
|
```bash
|
|
34
|
-
cat .
|
|
34
|
+
cat .deepstorm/settings.json 2>/dev/null | grep -o '"e2eFramework"[^,]*' | head -1 | cut -d'"' -f4
|
|
35
35
|
```
|
|
36
36
|
|
|
37
37
|
如果配置不存在或为空,使用默认值 `playwright` 并输出提示。
|
|
@@ -230,7 +230,7 @@ cat .mcp.json 2>/dev/null | grep -c "deepstorm-playwright"
|
|
|
230
230
|
- **THEN** 输出提示:"⚠️ Playwright MCP 未配置。建议运行 `deepstorm setup` 并选择 Playwright MCP 服务以启用浏览器自动化。"
|
|
231
231
|
- **THEN** 不阻塞初始化流程,继续执行
|
|
232
232
|
|
|
233
|
-
> **注意:** Playwright MCP 配置由 CLI setup wizard 统一管理,不再由本 skill
|
|
233
|
+
> **注意:** Playwright MCP 配置由 CLI setup wizard 统一管理,不再由本 skill 单独配置。
|
|
234
234
|
|
|
235
235
|
---
|
|
236
236
|
|
|
@@ -43,14 +43,14 @@ deepstorm:
|
|
|
43
43
|
|
|
44
44
|
### 前置检查:读取框架配置
|
|
45
45
|
|
|
46
|
-
在执行前,先读取 `.
|
|
46
|
+
在执行前,先读取 `.deepstorm/settings.json` → `sweep.e2eFramework` 配置,确定当前项目使用的 E2E 框架。
|
|
47
47
|
|
|
48
48
|
```bash
|
|
49
49
|
node scripts/env-manager.mjs --framework
|
|
50
50
|
```
|
|
51
51
|
|
|
52
52
|
```json
|
|
53
|
-
{"framework":"playwright","source":"settings"}
|
|
53
|
+
{"framework":"playwright","source":"deepstorm-settings"}
|
|
54
54
|
```
|
|
55
55
|
|
|
56
56
|
- **playwright** → 通过 Playwright MCP(`deepstorm-playwright`)执行浏览器操作
|
|
@@ -425,7 +425,7 @@ Flow: L01 - 正常登录成功
|
|
|
425
425
|
|
|
426
426
|
## 检查清单
|
|
427
427
|
|
|
428
|
-
- [ ]
|
|
428
|
+
- [ ] 前置检查:框架配置已读取(`.deepstorm/settings.json` → `sweep.e2eFramework`)
|
|
429
429
|
- [ ] 项目已初始化(`.sweep-init` 存在)
|
|
430
430
|
- [ ] 执行范围已确定(--all / --path / 交互选择)
|
|
431
431
|
- [ ] 执行模式已选择(hybrid / native / no-parallel / browser)
|
|
@@ -24,9 +24,6 @@ import { resolve } from 'node:path';
|
|
|
24
24
|
function getEnvPath() {
|
|
25
25
|
return resolve(process.cwd(), '.env');
|
|
26
26
|
}
|
|
27
|
-
function getSettingsPath() {
|
|
28
|
-
return resolve(process.cwd(), '.claude/settings.json');
|
|
29
|
-
}
|
|
30
27
|
function getMcpPath() {
|
|
31
28
|
return resolve(process.cwd(), '.mcp.json');
|
|
32
29
|
}
|
|
@@ -119,22 +116,23 @@ export function resolveEnv(envName) {
|
|
|
119
116
|
// ── Framework config ──────────────────────────────────────────────
|
|
120
117
|
|
|
121
118
|
/**
|
|
122
|
-
* Read E2E framework config from .
|
|
119
|
+
* Read E2E framework config from .deepstorm/settings.json → sweep.e2eFramework.
|
|
123
120
|
*
|
|
124
121
|
* @returns {{ framework: string|null, source: string }}
|
|
125
122
|
* framework: 'playwright' | 'cypress' | null
|
|
126
|
-
* source: 'settings' | '
|
|
123
|
+
* source: 'deepstorm-settings' | 'missing-file' | 'not-configured' | 'parse-error'
|
|
127
124
|
*/
|
|
128
125
|
export function readFramework() {
|
|
129
|
-
|
|
126
|
+
const deepstormPath = resolve(process.cwd(), '.deepstorm', 'settings.json');
|
|
127
|
+
if (!existsSync(deepstormPath)) {
|
|
130
128
|
return { framework: null, source: 'missing-file' };
|
|
131
129
|
}
|
|
132
130
|
|
|
133
131
|
try {
|
|
134
|
-
const content = readFileSync(
|
|
132
|
+
const content = readFileSync(deepstormPath, 'utf-8');
|
|
135
133
|
const config = JSON.parse(content);
|
|
136
|
-
const framework = config.
|
|
137
|
-
return { framework, source: framework ? 'settings' : '
|
|
134
|
+
const framework = config.sweep?.e2eFramework || null;
|
|
135
|
+
return { framework, source: framework ? 'deepstorm-settings' : 'not-configured' };
|
|
138
136
|
} catch {
|
|
139
137
|
return { framework: null, source: 'parse-error' };
|
|
140
138
|
}
|
|
@@ -4,7 +4,7 @@ PRD 生成后(`status: prd_ready`),分三步完成发布流程。每步根
|
|
|
4
4
|
|
|
5
5
|
## MCP 能力发现
|
|
6
6
|
|
|
7
|
-
进入 Step 4 时,AI 先读取 `.
|
|
7
|
+
进入 Step 4 时,AI 先读取 `.deepstorm/settings.json` → `mcpCapabilities` 确定可用的 provider。
|
|
8
8
|
|
|
9
9
|
能力映射结构示例(安装时渲染):
|
|
10
10
|
```json
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deepstorm/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "DeepStorm CLI — 一键配置项目开发环境",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "billkang",
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"dotenv": "^17.4.2",
|
|
17
17
|
"handlebars": "^4.7.8",
|
|
18
18
|
"js-yaml": "^4.1.0",
|
|
19
|
-
"@deepstorm/pilot": "^0.
|
|
19
|
+
"@deepstorm/pilot": "^0.8.0"
|
|
20
20
|
},
|
|
21
21
|
"devDependencies": {
|
|
22
22
|
"@types/node": "^22.0.0",
|