@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 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\u5230 .claude/settings.json");
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
- 检查 `.claude/settings.json` → `deepstorm.mcpCapabilities` 中 design_tools.available === true
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
- 检查 `.claude/settings.json` → `deepstorm.mcpCapabilities` 中 issue_tracker.available === true(providers 包含 jira)
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
- 检查 `.claude/settings.json` → `deepstorm.mcpCapabilities` 中 browser-automation.available === true(providers 包含 playwright)
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
- ## Summary
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
- ## Test plan
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
- | Model / Entity / Event | |
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
- 在执行初始化前,先读取 `.claude/settings.json` 中的 `deepstorm.sweep.e2eFramework` 配置,确定当前项目使用的 E2E 框架。
31
+ 在执行初始化前,先读取 `.deepstorm/settings.json` 中的 `sweep.e2eFramework` 配置,确定当前项目使用的 E2E 框架。
32
32
 
33
33
  ```bash
34
- cat .claude/settings.json 2>/dev/null | grep -o '"e2eFramework"[^,]*' | head -1 | cut -d'"' -f4
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 在 `.claude/settings.json` 中独立配置。
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
- 在执行前,先读取 `.claude/settings.json` `deepstorm.sweep.e2eFramework` 配置,确定当前项目使用的 E2E 框架。
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
- - [ ] 前置检查:框架配置已读取 `.claude/settings.json`
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 .claude/settings.json.
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' | 'default' | 'missing-file'
123
+ * source: 'deepstorm-settings' | 'missing-file' | 'not-configured' | 'parse-error'
127
124
  */
128
125
  export function readFramework() {
129
- if (!existsSync(getSettingsPath())) {
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(getSettingsPath(), 'utf-8');
132
+ const content = readFileSync(deepstormPath, 'utf-8');
135
133
  const config = JSON.parse(content);
136
- const framework = config.deepstorm?.sweep?.e2eFramework || null;
137
- return { framework, source: framework ? 'settings' : 'default' };
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 先读取 `.claude/settings.json` → `deepstorm.mcpCapabilities` 确定可用的 provider。
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.7.1",
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.7.1"
19
+ "@deepstorm/pilot": "^0.8.0"
20
20
  },
21
21
  "devDependencies": {
22
22
  "@types/node": "^22.0.0",