@deepstorm/cli 0.11.0 → 0.11.1
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/README.md +8 -8
- package/dist/build-registry.js +11 -5
- package/dist/cli.js +839 -585
- package/dist/mcp/code-hosting/github.json +14 -1
- package/dist/mcp/docs-reference/context7.json +1 -10
- package/dist/mcp-skills/deepstorm-mcp-feishu-wiki-read/SKILL.md +8 -5
- package/dist/mcp-skills/deepstorm-mcp-feishu-wiki-write/SKILL.md +10 -8
- package/dist/mcp-skills/deepstorm-mcp-figma-read/SKILL.md +21 -20
- package/dist/mcp-skills/deepstorm-mcp-github-read/SKILL.md +17 -17
- package/dist/mcp-skills/deepstorm-mcp-github-write/SKILL.md +20 -20
- package/dist/mcp-skills/deepstorm-mcp-jira-read/SKILL.md +8 -8
- package/dist/mcp-skills/deepstorm-mcp-jira-write/SKILL.md +13 -12
- package/dist/mcp-skills/deepstorm-mcp-playwright-read/SKILL.md +10 -10
- package/dist/skills/atoll-ops/SKILL.md +4 -0
- package/dist/skills/reef-commit/SKILL.md +9 -5
- package/dist/skills/reef-commit/scripts/branch-check.mjs +5 -11
- package/dist/skills/reef-commit/scripts/check-openspec-status.mjs +6 -12
- package/dist/skills/reef-commit/scripts/collect-git-context.mjs +13 -11
- package/dist/skills/reef-gen-backend/variants/java/steps.md +7 -7
- package/dist/skills/reef-gen-backend/variants/nodejs/steps.md +7 -7
- package/dist/skills/reef-gen-backend/variants/python/steps.md +7 -7
- package/dist/skills/reef-gen-frontend/variants/angular/steps.md +5 -5
- package/dist/skills/reef-gen-frontend/variants/react/steps.md +6 -6
- package/dist/skills/reef-gen-frontend/variants/vue/steps.md +6 -6
- package/dist/skills/reef-harden/EXAMPLES.md +12 -10
- package/dist/skills/reef-harden/SKILL.md +6 -0
- package/dist/skills/reef-harden/scripts/find-change-dir.mjs +13 -13
- package/dist/skills/reef-pr/SKILL.md +7 -0
- package/dist/skills/reef-pr/scripts/create-pr.mjs +31 -29
- package/dist/skills/reef-scope/SKILL.md +6 -6
- package/dist/skills/reef-start/references/jira-start-subagent.md +7 -7
- package/dist/skills/reef-start/references/risk-routing-card.md +28 -25
- package/dist/skills/reef-start/references/stage-4-implementation.md +33 -21
- package/dist/skills/reef-start/references/superpowers-gate.md +9 -9
- package/dist/skills/reef-style-backend/fragments/java/ai/spring-ai/examples/structured-output.md +2 -2
- package/dist/skills/reef-style-backend/fragments/java/ai/spring-ai/quick-reference.md +11 -0
- package/dist/skills/reef-style-backend/fragments/java/api-spec/jackson-polymorphism.md +36 -40
- package/dist/skills/reef-style-backend/fragments/java/api-spec/quick-reference.md +11 -10
- package/dist/skills/reef-style-backend/fragments/java/db-migration/liquibase/examples/database-migration.md +7 -7
- package/dist/skills/reef-style-backend/fragments/java/dependency-management/quick-reference.md +24 -21
- package/dist/skills/reef-style-backend/fragments/java/exception-handling/examples/error-code-enum.md +7 -7
- package/dist/skills/reef-style-backend/fragments/java/exception-handling/quick-reference.md +10 -8
- package/dist/skills/reef-style-backend/fragments/java/framework/spring-boot/examples/dto-mapper.md +2 -2
- package/dist/skills/reef-style-backend/fragments/java/framework/spring-boot/examples/service-entity.md +5 -5
- package/dist/skills/reef-style-backend/fragments/java/framework/spring-boot/examples/testing.md +1 -0
- package/dist/skills/reef-style-backend/fragments/java/framework/spring-boot/quick-reference.md +12 -12
- package/dist/skills/reef-style-backend/fragments/java/orm/hibernate/quick-reference.md +13 -12
- package/dist/skills/reef-style-backend/fragments/java/security-redlines/quick-reference.md +11 -9
- package/dist/skills/reef-style-backend/fragments/java/test/data-jpa-test/quick-reference.md +7 -7
- package/dist/skills/reef-style-backend/fragments/java/test/junit5/quick-reference.md +6 -6
- package/dist/skills/reef-style-backend/fragments/java/test/spring-mvc-test/quick-reference.md +8 -8
- package/dist/skills/reef-style-backend/fragments/java/test/spring-service-test/quick-reference.md +8 -7
- package/dist/skills/reef-style-backend/fragments/nodejs/eslint-config.json +1 -4
- package/dist/skills/reef-style-backend/fragments/nodejs/nestjs-structure.md +9 -9
- package/dist/skills/reef-style-backend/fragments/python/alembic-migration/quick-reference.md +2 -1
- package/dist/skills/reef-style-backend/fragments/python/api-spec/quick-reference.md +10 -10
- package/dist/skills/reef-style-backend/fragments/python/dependency-management/quick-reference.md +24 -22
- package/dist/skills/reef-style-backend/fragments/python/exception-handling/quick-reference.md +10 -9
- package/dist/skills/reef-style-backend/fragments/python/fastapi-quick-reference/quick-reference.md +3 -0
- package/dist/skills/reef-style-backend/fragments/python/langchain/quick-reference.md +10 -7
- package/dist/skills/reef-style-backend/fragments/python/pytest-testing/quick-reference.md +2 -0
- package/dist/skills/reef-style-backend/fragments/python/ruff-mypy-toolchain/quick-reference.md +2 -0
- package/dist/skills/reef-style-backend/fragments/python/security-redlines/quick-reference.md +11 -9
- package/dist/skills/reef-style-backend/fragments/python/sqlalchemy-orm/quick-reference.md +3 -0
- package/dist/skills/reef-style-backend/variants/java/examples/code-wrapping.md +3 -4
- package/dist/skills/reef-style-backend/variants/java/quick-reference.md +31 -29
- package/dist/skills/reef-style-backend/variants/nodejs/examples/module-example.md +2 -8
- package/dist/skills/reef-style-backend/variants/nodejs/quick-reference.md +35 -36
- package/dist/skills/reef-style-backend/variants/python/quick-reference.md +32 -31
- package/dist/skills/reef-style-frontend/fragments/css/tailwind/quick-reference.md +9 -7
- package/dist/skills/reef-style-frontend/fragments/test/vitest/examples/testing.md +9 -4
- package/dist/skills/reef-style-frontend/fragments/test/vitest/quick-reference.md +4 -4
- package/dist/skills/reef-style-frontend/fragments/test/vitest-react/examples/testing.md +135 -140
- package/dist/skills/reef-style-frontend/fragments/test/vitest-react/quick-reference.md +32 -32
- package/dist/skills/reef-style-frontend/fragments/test/vitest-vue/examples/testing.md +161 -162
- package/dist/skills/reef-style-frontend/fragments/test/vitest-vue/quick-reference.md +42 -42
- package/dist/skills/reef-style-frontend/fragments/ts-config/strict/quick-reference.md +16 -10
- package/dist/skills/reef-style-frontend/fragments/ui-lib/antd/examples/ui-components.md +72 -87
- package/dist/skills/reef-style-frontend/fragments/ui-lib/antd/quick-reference.md +14 -10
- package/dist/skills/reef-style-frontend/fragments/ui-lib/antd-vue/examples/ui-components.md +93 -111
- package/dist/skills/reef-style-frontend/fragments/ui-lib/antd-vue/quick-reference.md +29 -33
- package/dist/skills/reef-style-frontend/fragments/ui-lib/primeng/examples/ui-components.md +14 -23
- package/dist/skills/reef-style-frontend/variants/angular/examples/code-wrapping.md +15 -17
- package/dist/skills/reef-style-frontend/variants/angular/examples/component-types-pipes.md +22 -5
- package/dist/skills/reef-style-frontend/variants/angular/examples/entity-types.md +52 -22
- package/dist/skills/reef-style-frontend/variants/angular/examples/forms-layer.md +17 -20
- package/dist/skills/reef-style-frontend/variants/angular/examples/service-routing.md +8 -11
- package/dist/skills/reef-style-frontend/variants/angular/quick-reference.md +27 -27
- package/dist/skills/reef-style-frontend/variants/react/examples/code-wrapping.md +14 -27
- package/dist/skills/reef-style-frontend/variants/react/examples/component-types-pipes.md +45 -52
- package/dist/skills/reef-style-frontend/variants/react/examples/entity-types.md +44 -44
- package/dist/skills/reef-style-frontend/variants/react/examples/forms-layer.md +56 -85
- package/dist/skills/reef-style-frontend/variants/react/examples/service-routing.md +114 -88
- package/dist/skills/reef-style-frontend/variants/react/quick-reference.md +48 -42
- package/dist/skills/reef-style-frontend/variants/vue/examples/code-wrapping.md +24 -43
- package/dist/skills/reef-style-frontend/variants/vue/examples/component-types-pipes.md +48 -49
- package/dist/skills/reef-style-frontend/variants/vue/examples/entity-types.md +45 -45
- package/dist/skills/reef-style-frontend/variants/vue/examples/forms-layer.md +64 -68
- package/dist/skills/reef-style-frontend/variants/vue/examples/service-routing.md +85 -84
- package/dist/skills/reef-style-frontend/variants/vue/quick-reference.md +46 -51
- package/dist/skills/reef-testcase/SKILL.md +19 -19
- package/dist/skills/reef-testcase/references/coverage-dimensions.md +8 -0
- package/dist/skills/reef-testcase/references/test-case-template.md +16 -16
- package/dist/skills/sweep-explore/SKILL.md +129 -100
- package/dist/skills/sweep-explore/references/explore-flow-template.md +9 -9
- package/dist/skills/sweep-init/SKILL.md +4 -0
- package/dist/skills/sweep-init/scripts/flow-selector.mjs +6 -11
- package/dist/skills/sweep-init/scripts/init-project.mjs +68 -51
- package/dist/skills/sweep-plan/references/test-flow-template.md +12 -6
- package/dist/skills/sweep-record/SKILL.md +38 -15
- package/dist/skills/sweep-run/SKILL.md +59 -50
- package/dist/skills/sweep-run/scripts/env-manager.mjs +4 -5
- package/dist/skills/sweep-run/scripts/flow-parser.mjs +7 -6
- package/dist/skills/sweep-run/scripts/flow-selector.mjs +4 -15
- package/dist/skills/sweep-run/scripts/generate-report.mjs +1 -2
- package/dist/skills/sweep-run/scripts/mcp-manager.mjs +107 -14
- package/dist/skills/sweep-run/scripts/spec-compiler.mjs +19 -9
- package/dist/skills/tide-discuss/references/checklists.md +32 -32
- package/dist/skills/tide-discuss/references/data-format.md +85 -77
- package/dist/skills/tide-discuss/references/prd-template.md +21 -19
- package/dist/skills/tide-discuss/references/publish-flow.md +30 -11
- package/dist/skills/tide-discuss/references/role-prompts.md +5 -5
- package/package.json +4 -3
|
@@ -13,7 +13,20 @@
|
|
|
13
13
|
"github": {
|
|
14
14
|
"type": "stdio",
|
|
15
15
|
"command": "npx",
|
|
16
|
-
"args": [
|
|
16
|
+
"args": [
|
|
17
|
+
"-y",
|
|
18
|
+
"dotenv-cli",
|
|
19
|
+
"-e",
|
|
20
|
+
".env",
|
|
21
|
+
"--",
|
|
22
|
+
"docker",
|
|
23
|
+
"run",
|
|
24
|
+
"-i",
|
|
25
|
+
"--rm",
|
|
26
|
+
"-e",
|
|
27
|
+
"GITHUB_PERSONAL_ACCESS_TOKEN",
|
|
28
|
+
"ghcr.io/github/github-mcp-server"
|
|
29
|
+
]
|
|
17
30
|
}
|
|
18
31
|
},
|
|
19
32
|
"notes": "需要本地 Docker 环境"
|
|
@@ -13,16 +13,7 @@
|
|
|
13
13
|
"context7": {
|
|
14
14
|
"type": "stdio",
|
|
15
15
|
"command": "npx",
|
|
16
|
-
"args": [
|
|
17
|
-
"-y",
|
|
18
|
-
"dotenv-cli",
|
|
19
|
-
"-e",
|
|
20
|
-
".env",
|
|
21
|
-
"--",
|
|
22
|
-
"npx",
|
|
23
|
-
"-y",
|
|
24
|
-
"@upstash/context7-mcp"
|
|
25
|
-
]
|
|
16
|
+
"args": ["-y", "dotenv-cli", "-e", ".env", "--", "npx", "-y", "@upstash/context7-mcp"]
|
|
26
17
|
}
|
|
27
18
|
}
|
|
28
19
|
}
|
|
@@ -26,6 +26,7 @@ description: Use when you need to search and read Feishu wiki documents — sear
|
|
|
26
26
|
按关键词搜索飞书知识库文档,返回匹配的文档列表和摘要。
|
|
27
27
|
|
|
28
28
|
**示例场景:**
|
|
29
|
+
|
|
29
30
|
- 搜索 PRD 文档:搜索与当前 Issue 相关的需求文档
|
|
30
31
|
- 搜索技术方案:搜索关于特定功能的讨论文档
|
|
31
32
|
|
|
@@ -34,6 +35,7 @@ description: Use when you need to search and read Feishu wiki documents — sear
|
|
|
34
35
|
获取指定文档的完整内容,支持 Markdown 格式输出。
|
|
35
36
|
|
|
36
37
|
**使用方式:**
|
|
38
|
+
|
|
37
39
|
- 从 Issue 描述中提取的文档链接
|
|
38
40
|
- 使用搜索结果的文档 ID
|
|
39
41
|
|
|
@@ -51,6 +53,7 @@ description: Use when you need to search and read Feishu wiki documents — sear
|
|
|
51
53
|
## 降级处理
|
|
52
54
|
|
|
53
55
|
`knowledge_base.available === false` 时:
|
|
56
|
+
|
|
54
57
|
1. 告知用户未检测到知识库服务
|
|
55
58
|
2. 询问用户是否手动提供 PRD 内容
|
|
56
59
|
|
|
@@ -58,8 +61,8 @@ description: Use when you need to search and read Feishu wiki documents — sear
|
|
|
58
61
|
|
|
59
62
|
## 常见错误
|
|
60
63
|
|
|
61
|
-
| 错误
|
|
62
|
-
|
|
63
|
-
| Token 错误 | Token 未配置或无效
|
|
64
|
-
| 文档不存在 | 链接错误或已被删除
|
|
65
|
-
| 无权限
|
|
64
|
+
| 错误 | 原因 | 处理 |
|
|
65
|
+
| ---------- | -------------------- | --------------------------------------- |
|
|
66
|
+
| Token 错误 | Token 未配置或无效 | 检查 `.env` 中 `DEEPSTORM_FEISHU_TOKEN` |
|
|
67
|
+
| 文档不存在 | 链接错误或已被删除 | 确认文档链接正确 |
|
|
68
|
+
| 无权限 | Token 无权访问该文档 | 确认机器人已被加入目标知识库 |
|
|
@@ -24,6 +24,7 @@ description: Use when you need to create or update Feishu wiki documents — pus
|
|
|
24
24
|
### 创建文档
|
|
25
25
|
|
|
26
26
|
在指定知识库或目录下创建新文档,需提供:
|
|
27
|
+
|
|
27
28
|
- 标题
|
|
28
29
|
- 正文(Markdown 格式)
|
|
29
30
|
- 目标知识库或目录
|
|
@@ -38,9 +39,9 @@ description: Use when you need to create or update Feishu wiki documents — pus
|
|
|
38
39
|
|
|
39
40
|
## 多 Provider 选择
|
|
40
41
|
|
|
41
|
-
| 场景
|
|
42
|
-
|
|
43
|
-
| 唯一 provider | 自动推送,无需用户选择
|
|
42
|
+
| 场景 | 处理方式 |
|
|
43
|
+
| ------------- | ------------------------------ |
|
|
44
|
+
| 唯一 provider | 自动推送,无需用户选择 |
|
|
44
45
|
| 多个 provider | 展示可用列表,用户选择后持久化 |
|
|
45
46
|
|
|
46
47
|
---
|
|
@@ -48,6 +49,7 @@ description: Use when you need to create or update Feishu wiki documents — pus
|
|
|
48
49
|
## 降级处理
|
|
49
50
|
|
|
50
51
|
`knowledge_base.available === false` 时:
|
|
52
|
+
|
|
51
53
|
1. 跳过知识库写入操作
|
|
52
54
|
2. 在 checklist 中记录为 skipped
|
|
53
55
|
3. 告知用户未检测到知识库服务,跳过 PRD 推送
|
|
@@ -56,8 +58,8 @@ description: Use when you need to create or update Feishu wiki documents — pus
|
|
|
56
58
|
|
|
57
59
|
## 常见错误
|
|
58
60
|
|
|
59
|
-
| 错误
|
|
60
|
-
|
|
61
|
-
| Token 错误 | Token 未配置或无效
|
|
62
|
-
| 文档不存在 | 链接错误或已被删除
|
|
63
|
-
| 无权限
|
|
61
|
+
| 错误 | 原因 | 处理 |
|
|
62
|
+
| ---------- | -------------------- | ---------------- |
|
|
63
|
+
| Token 错误 | Token 未配置或无效 | 检查 `.env` |
|
|
64
|
+
| 文档不存在 | 链接错误或已被删除 | 确认目标文档存在 |
|
|
65
|
+
| 无权限 | Token 无权操作该文档 | 确认机器人权限 |
|
|
@@ -37,10 +37,10 @@ description: Use when you need to read Figma design data — get file info, read
|
|
|
37
37
|
|
|
38
38
|
从 URL 中提取:
|
|
39
39
|
|
|
40
|
-
| 参数
|
|
41
|
-
|
|
42
|
-
| `fileKey` | 文件标识,从 URL path 获取
|
|
43
|
-
| `nodeId`
|
|
40
|
+
| 参数 | 说明 |
|
|
41
|
+
| --------- | -------------------------------------------- |
|
|
42
|
+
| `fileKey` | 文件标识,从 URL path 获取 |
|
|
43
|
+
| `nodeId` | 节点标识,从 URL query(`node-id` 参数)获取 |
|
|
44
44
|
|
|
45
45
|
### 从 Issue 描述回退
|
|
46
46
|
|
|
@@ -52,21 +52,21 @@ Design 字段不存在或为空时,回退到 Issue 描述中正则匹配设计
|
|
|
52
52
|
|
|
53
53
|
### 文件操作
|
|
54
54
|
|
|
55
|
-
| 操作
|
|
56
|
-
|
|
55
|
+
| 操作 | 说明 |
|
|
56
|
+
| ------------ | ------------------------------------ |
|
|
57
57
|
| 获取文件信息 | 获取元数据:名称、版本、最后修改时间 |
|
|
58
|
-
| 读取文件内容 | 获取完整节点树结构
|
|
59
|
-
| 获取节点
|
|
60
|
-
| 获取图片
|
|
61
|
-
| 获取文件版本 | 文件历史版本列表
|
|
58
|
+
| 读取文件内容 | 获取完整节点树结构 |
|
|
59
|
+
| 获取节点 | 获取指定节点的详细信息和样式属性 |
|
|
60
|
+
| 获取图片 | 导出节点为 PNG/JPEG/SVG |
|
|
61
|
+
| 获取文件版本 | 文件历史版本列表 |
|
|
62
62
|
|
|
63
63
|
### 组件和样式
|
|
64
64
|
|
|
65
|
-
| 操作
|
|
66
|
-
|
|
67
|
-
| 获取本地组件 | 文件中所有本地组件及其属性
|
|
68
|
-
| 获取团队组件 | 团队组件库中的组件
|
|
69
|
-
| 获取样式
|
|
65
|
+
| 操作 | 说明 |
|
|
66
|
+
| ------------ | ---------------------------------- |
|
|
67
|
+
| 获取本地组件 | 文件中所有本地组件及其属性 |
|
|
68
|
+
| 获取团队组件 | 团队组件库中的组件 |
|
|
69
|
+
| 获取样式 | TextStyle、ColorStyle、EffectStyle |
|
|
70
70
|
|
|
71
71
|
---
|
|
72
72
|
|
|
@@ -83,6 +83,7 @@ Design 字段不存在或为空时,回退到 Issue 描述中正则匹配设计
|
|
|
83
83
|
## 降级处理
|
|
84
84
|
|
|
85
85
|
`design_tools.available === false` 时:
|
|
86
|
+
|
|
86
87
|
1. 告知用户未检测到设计工具服务
|
|
87
88
|
2. 跳过设计稿获取
|
|
88
89
|
3. 不影响其他工作流
|
|
@@ -91,8 +92,8 @@ Design 字段不存在或为空时,回退到 Issue 描述中正则匹配设计
|
|
|
91
92
|
|
|
92
93
|
## 常见错误
|
|
93
94
|
|
|
94
|
-
| 错误
|
|
95
|
-
|
|
96
|
-
| `Invalid token`
|
|
97
|
-
| `File not found` | 链接错误或无访问权限 | 确认 URL 正确,检查分享权限
|
|
98
|
-
| `Node not found` | Node ID 错误
|
|
95
|
+
| 错误 | 原因 | 处理 |
|
|
96
|
+
| ---------------- | -------------------- | ------------------------------ |
|
|
97
|
+
| `Invalid token` | Token 无效或过期 | 在 Figma 设置中重新生成 |
|
|
98
|
+
| `File not found` | 链接错误或无访问权限 | 确认 URL 正确,检查分享权限 |
|
|
99
|
+
| `Node not found` | Node ID 错误 | 确认节点 ID 存在于当前文件版本 |
|
|
@@ -24,26 +24,26 @@ description: Use when you need to read GitHub data — browse repository files,
|
|
|
24
24
|
|
|
25
25
|
### 仓库浏览
|
|
26
26
|
|
|
27
|
-
| 操作
|
|
28
|
-
|
|
27
|
+
| 操作 | 说明 |
|
|
28
|
+
| ------------ | ------------------------------------ |
|
|
29
29
|
| 查看仓库详情 | 元信息:描述、语言、Star 数、License |
|
|
30
|
-
| 查看文件内容 | 指定路径的文件内容
|
|
31
|
-
| 列出分支
|
|
30
|
+
| 查看文件内容 | 指定路径的文件内容 |
|
|
31
|
+
| 列出分支 | 仓库所有分支列表 |
|
|
32
32
|
|
|
33
33
|
### 代码搜索
|
|
34
34
|
|
|
35
|
-
| 操作
|
|
36
|
-
|
|
37
|
-
| 搜索代码
|
|
35
|
+
| 操作 | 说明 |
|
|
36
|
+
| ------------- | ------------------------ |
|
|
37
|
+
| 搜索代码 | 在仓库范围内搜索代码片段 |
|
|
38
38
|
| 搜索 Issue/PR | 按关键词、状态、作者搜索 |
|
|
39
39
|
|
|
40
40
|
### Issue 和 PR 查看
|
|
41
41
|
|
|
42
|
-
| 操作
|
|
43
|
-
|
|
44
|
-
| 获取 PR 详情
|
|
45
|
-
| 获取 Issue 详情 | Issue 描述和全部评论
|
|
46
|
-
| 列出 Issue/PR
|
|
42
|
+
| 操作 | 说明 |
|
|
43
|
+
| --------------- | ---------------------------------- |
|
|
44
|
+
| 获取 PR 详情 | 描述、变更文件列表、评论、检查状态 |
|
|
45
|
+
| 获取 Issue 详情 | Issue 描述和全部评论 |
|
|
46
|
+
| 列出 Issue/PR | 按状态、标签、Assignee 筛选 |
|
|
47
47
|
|
|
48
48
|
---
|
|
49
49
|
|
|
@@ -55,8 +55,8 @@ description: Use when you need to read GitHub data — browse repository files,
|
|
|
55
55
|
|
|
56
56
|
## 常见错误
|
|
57
57
|
|
|
58
|
-
| 错误
|
|
59
|
-
|
|
60
|
-
| `Resource not accessible` | Token 权限不足
|
|
61
|
-
| `Not Found`
|
|
62
|
-
| Docker 错误
|
|
58
|
+
| 错误 | 原因 | 处理 |
|
|
59
|
+
| ------------------------- | ------------------ | -------------------- |
|
|
60
|
+
| `Resource not accessible` | Token 权限不足 | 检查 Token 的 scope |
|
|
61
|
+
| `Not Found` | 仓库不存在或无权限 | 确认仓库名和权限 |
|
|
62
|
+
| Docker 错误 | Docker 未启动 | 确认 Docker 正在运行 |
|
|
@@ -23,28 +23,28 @@ description: Use when you need to write to GitHub — create/update Issues, crea
|
|
|
23
23
|
|
|
24
24
|
### Issue 管理
|
|
25
25
|
|
|
26
|
-
| 操作
|
|
27
|
-
|
|
28
|
-
| 创建 Issue
|
|
29
|
-
| 更新 Issue
|
|
30
|
-
| 关闭/重新打开 | 管理 Issue 生命周期
|
|
31
|
-
| 添加评论
|
|
26
|
+
| 操作 | 说明 |
|
|
27
|
+
| ------------- | ------------------------------ |
|
|
28
|
+
| 创建 Issue | 附带标题、描述、标签、Assignee |
|
|
29
|
+
| 更新 Issue | 修改标题、描述、标签、状态 |
|
|
30
|
+
| 关闭/重新打开 | 管理 Issue 生命周期 |
|
|
31
|
+
| 添加评论 | 在 Issue 上回复 |
|
|
32
32
|
|
|
33
33
|
### Pull Request
|
|
34
34
|
|
|
35
|
-
| 操作
|
|
36
|
-
|
|
37
|
-
| 创建 PR
|
|
38
|
-
| 更新 PR 描述
|
|
39
|
-
| 合并 PR
|
|
40
|
-
| 添加 Review Comment | 在 PR 上提交 Review 评论
|
|
35
|
+
| 操作 | 说明 |
|
|
36
|
+
| ------------------- | ------------------------------------------ |
|
|
37
|
+
| 创建 PR | 指定源/目标分支、标题、描述,支持 Draft PR |
|
|
38
|
+
| 更新 PR 描述 | 修改 PR 描述 |
|
|
39
|
+
| 合并 PR | merge/squash/rebase |
|
|
40
|
+
| 添加 Review Comment | 在 PR 上提交 Review 评论 |
|
|
41
41
|
|
|
42
42
|
### 文件操作
|
|
43
43
|
|
|
44
|
-
| 操作
|
|
45
|
-
|
|
44
|
+
| 操作 | 说明 |
|
|
45
|
+
| -------- | -------------------- |
|
|
46
46
|
| 创建文件 | 在指定路径创建新文件 |
|
|
47
|
-
| 更新文件 | 修改已有文件内容
|
|
47
|
+
| 更新文件 | 修改已有文件内容 |
|
|
48
48
|
|
|
49
49
|
---
|
|
50
50
|
|
|
@@ -56,8 +56,8 @@ description: Use when you need to write to GitHub — create/update Issues, crea
|
|
|
56
56
|
|
|
57
57
|
## 常见错误
|
|
58
58
|
|
|
59
|
-
| 错误
|
|
60
|
-
|
|
61
|
-
| `Resource not accessible` | Token 权限不足
|
|
62
|
-
| `Not Found`
|
|
63
|
-
| `Conflict`
|
|
59
|
+
| 错误 | 原因 | 处理 |
|
|
60
|
+
| ------------------------- | ------------------- | ------------------------ |
|
|
61
|
+
| `Resource not accessible` | Token 权限不足 | 检查 Token 的 scope 配置 |
|
|
62
|
+
| `Not Found` | 仓库不存在或无权限 | 确认仓库名和权限 |
|
|
63
|
+
| `Conflict` | 合并冲突/分支已存在 | 先解决冲突或检查分支状态 |
|
|
@@ -33,11 +33,11 @@ description: Use when you need to read Jira Issue data — get issue details, se
|
|
|
33
33
|
|
|
34
34
|
### 解析 Issue 标识
|
|
35
35
|
|
|
36
|
-
| 输入格式 | 示例
|
|
37
|
-
|
|
36
|
+
| 输入格式 | 示例 | 提取方式 |
|
|
37
|
+
| -------- | ------------------------------------------------- | -------------------------- |
|
|
38
38
|
| 完整 URL | `https://<instance>.atlassian.net/browse/LC-1234` | 从 URL path 提取 `LC-1234` |
|
|
39
|
-
| 完整编号 | `LC-1234`
|
|
40
|
-
| 纯数字
|
|
39
|
+
| 完整编号 | `LC-1234` | 直接使用 |
|
|
40
|
+
| 纯数字 | `1234` | 需结合项目前缀 |
|
|
41
41
|
|
|
42
42
|
### 获取 Issue 详情
|
|
43
43
|
|
|
@@ -74,7 +74,7 @@ description: Use when you need to read Jira Issue data — get issue details, se
|
|
|
74
74
|
|
|
75
75
|
## 常见错误
|
|
76
76
|
|
|
77
|
-
| 错误
|
|
78
|
-
|
|
79
|
-
| `Authentication failed` | Token 无效
|
|
80
|
-
| `Issue not found`
|
|
77
|
+
| 错误 | 原因 | 处理 |
|
|
78
|
+
| ----------------------- | ---------------- | ------------------------------------- |
|
|
79
|
+
| `Authentication failed` | Token 无效 | 检查 `.env` 中 `DEEPSTORM_JIRA_TOKEN` |
|
|
80
|
+
| `Issue not found` | Key 错误或无权限 | 确认 Key 正确,检查项目访问权限 |
|
|
@@ -25,13 +25,13 @@ description: Use when you need to create, update, transition, or comment on Jira
|
|
|
25
25
|
|
|
26
26
|
调用 Jira MCP 的创建 Issue 工具,需提供:
|
|
27
27
|
|
|
28
|
-
| 字段
|
|
29
|
-
|
|
30
|
-
| 项目 Key
|
|
31
|
-
| Issue 类型
|
|
32
|
-
| 摘要(Summary)
|
|
33
|
-
| 描述(Description) | Markdown 正文
|
|
34
|
-
| 父任务(可选)
|
|
28
|
+
| 字段 | 说明 | 示例 |
|
|
29
|
+
| ------------------- | ----------------------- | ------------------ |
|
|
30
|
+
| 项目 Key | 项目标识 | `PROJ` |
|
|
31
|
+
| Issue 类型 | Story/Task/Bug/Sub-task | `Task` |
|
|
32
|
+
| 摘要(Summary) | 标题 | `用户登录功能优化` |
|
|
33
|
+
| 描述(Description) | Markdown 正文 | 详细描述 |
|
|
34
|
+
| 父任务(可选) | Sub-task 的父级 | `PROJ-123` |
|
|
35
35
|
|
|
36
36
|
### 更新 Issue 字段
|
|
37
37
|
|
|
@@ -59,6 +59,7 @@ description: Use when you need to create, update, transition, or comment on Jira
|
|
|
59
59
|
## 降级处理
|
|
60
60
|
|
|
61
61
|
`issue_tracker.available === false` 时:
|
|
62
|
+
|
|
62
63
|
1. 跳过 Issue 创建/更新操作
|
|
63
64
|
2. 在 checklist 中记录为 skipped
|
|
64
65
|
3. 提示用户手动在 Jira 中操作
|
|
@@ -67,8 +68,8 @@ description: Use when you need to create, update, transition, or comment on Jira
|
|
|
67
68
|
|
|
68
69
|
## 常见错误
|
|
69
70
|
|
|
70
|
-
| 错误
|
|
71
|
-
|
|
72
|
-
| `Authentication failed`
|
|
73
|
-
| `Transition not allowed` | 该状态流转在当前工作流中不允许 | 先查询可用的 transitions 列表
|
|
74
|
-
| `Field not on screen`
|
|
71
|
+
| 错误 | 原因 | 处理 |
|
|
72
|
+
| ------------------------ | ------------------------------ | ---------------------------------- |
|
|
73
|
+
| `Authentication failed` | Token 无效 | 检查 `.env` |
|
|
74
|
+
| `Transition not allowed` | 该状态流转在当前工作流中不允许 | 先查询可用的 transitions 列表 |
|
|
75
|
+
| `Field not on screen` | Jira 项目配置限制 | 确认字段在 project workflow 中可见 |
|
|
@@ -39,12 +39,12 @@ description: Use when you need to perform browser automation — navigate pages,
|
|
|
39
39
|
|
|
40
40
|
### 元素交互
|
|
41
41
|
|
|
42
|
-
| 操作 | 工具
|
|
43
|
-
|
|
44
|
-
| 点击 | click
|
|
45
|
-
| 填写 | fill
|
|
46
|
-
| 选择 | selectOption | selector + value
|
|
47
|
-
| 悬停 | hover
|
|
42
|
+
| 操作 | 工具 | 参数 |
|
|
43
|
+
| ---- | ------------ | ---------------------- |
|
|
44
|
+
| 点击 | click | selector(CSS 选择器) |
|
|
45
|
+
| 填写 | fill | selector + value |
|
|
46
|
+
| 选择 | selectOption | selector + value |
|
|
47
|
+
| 悬停 | hover | selector |
|
|
48
48
|
|
|
49
49
|
### 内容提取
|
|
50
50
|
|
|
@@ -72,8 +72,8 @@ description: Use when you need to perform browser automation — navigate pages,
|
|
|
72
72
|
|
|
73
73
|
## 常见错误
|
|
74
74
|
|
|
75
|
-
| 错误
|
|
76
|
-
|
|
75
|
+
| 错误 | 原因 | 处理 |
|
|
76
|
+
| -------------------- | --------------------- | ---------------------------------------------------------------------------------- |
|
|
77
77
|
| `Connection refused` | Playwright MCP 未启动 | 检查 `.mcp.json` 中 `deepstorm-playwright` 的 `url` 配置,启动 Playwright MCP 服务 |
|
|
78
|
-
| `Element not found`
|
|
79
|
-
| `Timeout`
|
|
78
|
+
| `Element not found` | 选择器不匹配 | 使用浏览器 DevTools 检查正确选择器 |
|
|
79
|
+
| `Timeout` | 页面加载慢 | 增加等待时间或使用 waitForSelector |
|
|
@@ -15,22 +15,26 @@ deepstorm:
|
|
|
15
15
|
## 规划中的核心功能
|
|
16
16
|
|
|
17
17
|
### 部署辅助
|
|
18
|
+
|
|
18
19
|
- CI/CD 流水线管理与触发
|
|
19
20
|
- 部署策略建议(滚动更新/蓝绿部署/金丝雀发布)
|
|
20
21
|
- 回滚评估与执行
|
|
21
22
|
|
|
22
23
|
### 监控查询
|
|
24
|
+
|
|
23
25
|
- 监控平台数据查询(Prometheus/Grafana/Datadog)
|
|
24
26
|
- 告警分析与聚合
|
|
25
27
|
- 性能趋势诊断
|
|
26
28
|
|
|
27
29
|
### 故障排查
|
|
30
|
+
|
|
28
31
|
- 错误日志分析
|
|
29
32
|
- 慢查询/慢接口定位
|
|
30
33
|
- 依赖链追踪
|
|
31
34
|
- 故障恢复策略建议
|
|
32
35
|
|
|
33
36
|
### 云平台操作
|
|
37
|
+
|
|
34
38
|
- 资源状态查询
|
|
35
39
|
- 配置变更管理
|
|
36
40
|
- 成本分析
|
|
@@ -21,10 +21,10 @@ deepstorm:
|
|
|
21
21
|
|
|
22
22
|
### 正文(根据任务复杂度决定)
|
|
23
23
|
|
|
24
|
-
| 复杂度
|
|
25
|
-
|
|
26
|
-
| 简单(单文件/小修补/配置改动)
|
|
27
|
-
| 中等
|
|
24
|
+
| 复杂度 | 正文策略 |
|
|
25
|
+
| --------------------------------------- | -------------------------------------- |
|
|
26
|
+
| 简单(单文件/小修补/配置改动) | 仅标题 |
|
|
27
|
+
| 中等 | 标题 + 一段说明 |
|
|
28
28
|
| 复杂(多模块/架构级/前后端/破坏性变更) | 标题 + `本次提交改动如下:` + 要点列表 |
|
|
29
29
|
|
|
30
30
|
有参考文档加 `参考资料:`,关联 Issue 在尾部隔空行加 `JIRA: {完整 URL}`。文件数仅作参考(50 个重命名仍属简单)。
|
|
@@ -48,11 +48,13 @@ node packages/reef/skills/reef-commit/scripts/branch-check.mjs
|
|
|
48
48
|
```
|
|
49
49
|
|
|
50
50
|
输出 JSON:
|
|
51
|
+
|
|
51
52
|
```json
|
|
52
|
-
{"isValid":true,"warning":false,"action":"continue"}
|
|
53
|
+
{ "isValid": true, "warning": false, "action": "continue" }
|
|
53
54
|
```
|
|
54
55
|
|
|
55
56
|
**判断规则:**
|
|
57
|
+
|
|
56
58
|
- `isValid: false, action: "create-branch"`(当前在 main/master)→ **直接进入步骤 3**
|
|
57
59
|
- `warning: true, action: "suggest-rename"`(分支名像临时分支)→ 询问用户是否改名
|
|
58
60
|
- `matchedTask` 有值 → 说明已匹配到 OpenSpec 任务
|
|
@@ -61,6 +63,7 @@ node packages/reef/skills/reef-commit/scripts/branch-check.mjs
|
|
|
61
63
|
### 3. 创建新分支
|
|
62
64
|
|
|
63
65
|
按以下逻辑确定分支名(优先级从高到低):
|
|
66
|
+
|
|
64
67
|
1. **OpenSpec 任务名**:由 `branch-check.mjs` 输出的 `matchedTask` 确定
|
|
65
68
|
2. **用户输入**:询问用户想要的分支名
|
|
66
69
|
3. **AI 推导**:根据变更内容总结生成 kebab-case 分支名
|
|
@@ -113,6 +116,7 @@ bash packages/reef/skills/reef-commit/scripts/run-tests.sh --json
|
|
|
113
116
|
**判断流程:**
|
|
114
117
|
|
|
115
118
|
1. **查找关联的 OpenSpec change:**
|
|
119
|
+
|
|
116
120
|
```bash
|
|
117
121
|
node packages/reef/skills/reef-commit/scripts/check-openspec-status.mjs \
|
|
118
122
|
--branch "$(git branch --show-current)"
|
|
@@ -44,9 +44,7 @@ export function checkBranch(branch, openspecTasks = []) {
|
|
|
44
44
|
|
|
45
45
|
const isTemp = TEMP_PATTERN.test(branch);
|
|
46
46
|
const action = isTemp ? 'suggest-rename' : 'continue';
|
|
47
|
-
const matchedTask = openspecTasks.find(t =>
|
|
48
|
-
branch === t.name || branch.includes(t.name)
|
|
49
|
-
);
|
|
47
|
+
const matchedTask = openspecTasks.find((t) => branch === t.name || branch.includes(t.name));
|
|
50
48
|
|
|
51
49
|
return {
|
|
52
50
|
isValid: true,
|
|
@@ -68,17 +66,15 @@ function exec(command) {
|
|
|
68
66
|
}
|
|
69
67
|
|
|
70
68
|
function findOpenspecTasks() {
|
|
71
|
-
const root = exec(
|
|
72
|
-
'git rev-parse --show-toplevel 2>/dev/null || echo ""'
|
|
73
|
-
);
|
|
69
|
+
const root = exec('git rev-parse --show-toplevel');
|
|
74
70
|
if (!root) return [];
|
|
75
71
|
const changesDir = join(root, 'openspec', 'changes');
|
|
76
72
|
if (!existsSync(changesDir)) return [];
|
|
77
73
|
|
|
78
74
|
const entries = readdirSync(changesDir, { withFileTypes: true });
|
|
79
75
|
return entries
|
|
80
|
-
.filter(e => e.isDirectory() && e.name !== 'archive')
|
|
81
|
-
.map(e => ({
|
|
76
|
+
.filter((e) => e.isDirectory() && e.name !== 'archive')
|
|
77
|
+
.map((e) => ({
|
|
82
78
|
name: e.name,
|
|
83
79
|
hasProposal: existsSync(join(changesDir, e.name, 'proposal.md')),
|
|
84
80
|
}));
|
|
@@ -100,9 +96,7 @@ branch-check.mjs — 检查分支合法性
|
|
|
100
96
|
}
|
|
101
97
|
|
|
102
98
|
const idx = process.argv.indexOf('--branch');
|
|
103
|
-
const branch = idx >= 0
|
|
104
|
-
? process.argv[idx + 1]
|
|
105
|
-
: exec('git branch --show-current');
|
|
99
|
+
const branch = idx >= 0 ? process.argv[idx + 1] : exec('git branch --show-current');
|
|
106
100
|
const tasks = findOpenspecTasks();
|
|
107
101
|
const result = checkBranch(branch, tasks);
|
|
108
102
|
process.stdout.write(JSON.stringify(result, null, 2) + '\n');
|
|
@@ -24,7 +24,7 @@ export function isArchived(changePath) {
|
|
|
24
24
|
export function parseTasksStatus(content) {
|
|
25
25
|
const matches = [...content.matchAll(TASKS_CHECKBOX_RE)];
|
|
26
26
|
const total = matches.length;
|
|
27
|
-
const complete = matches.filter(m => m[1] !== ' ').length;
|
|
27
|
+
const complete = matches.filter((m) => m[1] !== ' ').length;
|
|
28
28
|
return {
|
|
29
29
|
total,
|
|
30
30
|
complete,
|
|
@@ -36,16 +36,14 @@ export function scanChanges(changesDir) {
|
|
|
36
36
|
if (!existsSync(changesDir)) return [];
|
|
37
37
|
const entries = readdirSync(changesDir, { withFileTypes: true });
|
|
38
38
|
return entries
|
|
39
|
-
.filter(e => e.isDirectory() && e.name !== 'archive')
|
|
40
|
-
.map(e => {
|
|
39
|
+
.filter((e) => e.isDirectory() && e.name !== 'archive')
|
|
40
|
+
.map((e) => {
|
|
41
41
|
const dirPath = join(changesDir, e.name);
|
|
42
42
|
const tasksPath = join(dirPath, 'tasks.md');
|
|
43
43
|
const hasTasksMd = existsSync(tasksPath);
|
|
44
44
|
let tasksStatus = null;
|
|
45
45
|
if (hasTasksMd) {
|
|
46
|
-
tasksStatus = parseTasksStatus(
|
|
47
|
-
readFileSync(tasksPath, 'utf8')
|
|
48
|
-
);
|
|
46
|
+
tasksStatus = parseTasksStatus(readFileSync(tasksPath, 'utf8'));
|
|
49
47
|
}
|
|
50
48
|
return {
|
|
51
49
|
name: e.name,
|
|
@@ -80,12 +78,8 @@ check-openspec-status.mjs — 扫描 OpenSpec change 状态
|
|
|
80
78
|
const branchIdx = process.argv.indexOf('--branch');
|
|
81
79
|
if (branchIdx >= 0) {
|
|
82
80
|
const branch = process.argv[branchIdx + 1];
|
|
83
|
-
const matched = results.filter(r =>
|
|
84
|
-
|
|
85
|
-
);
|
|
86
|
-
process.stdout.write(JSON.stringify(
|
|
87
|
-
matched.length > 0 ? matched : { noMatch: true, branch }, null, 2
|
|
88
|
-
) + '\n');
|
|
81
|
+
const matched = results.filter((r) => r.name === branch || branch.includes(r.name));
|
|
82
|
+
process.stdout.write(JSON.stringify(matched.length > 0 ? matched : { noMatch: true, branch }, null, 2) + '\n');
|
|
89
83
|
} else {
|
|
90
84
|
process.stdout.write(JSON.stringify(results, null, 2) + '\n');
|
|
91
85
|
}
|
|
@@ -23,7 +23,9 @@ import { join } from 'node:path';
|
|
|
23
23
|
export function parseDiffStat(output) {
|
|
24
24
|
const lines = output.trim().split('\n').filter(Boolean);
|
|
25
25
|
const changedFiles = [];
|
|
26
|
-
let files = 0,
|
|
26
|
+
let files = 0,
|
|
27
|
+
insertions = 0,
|
|
28
|
+
deletions = 0;
|
|
27
29
|
|
|
28
30
|
for (const line of lines) {
|
|
29
31
|
// 匹配汇总行: "2 files changed, 13 insertions(+), 2 deletions(-)"
|
|
@@ -53,10 +55,12 @@ export function parseDiffStat(output) {
|
|
|
53
55
|
*/
|
|
54
56
|
export function parseCommitLog(output) {
|
|
55
57
|
const lines = output.trim().split('\n').filter(Boolean);
|
|
56
|
-
return lines
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
58
|
+
return lines
|
|
59
|
+
.map((line) => {
|
|
60
|
+
const match = line.match(/^(\S+)\s+(.*)/);
|
|
61
|
+
return match ? { hash: match[1], message: match[2] } : null;
|
|
62
|
+
})
|
|
63
|
+
.filter(Boolean);
|
|
60
64
|
}
|
|
61
65
|
|
|
62
66
|
/**
|
|
@@ -104,23 +108,21 @@ export function collectContext() {
|
|
|
104
108
|
error = '无法找到基准点';
|
|
105
109
|
}
|
|
106
110
|
const diffStat = exec(`git diff "${forkPoint || 'main'}..HEAD" --stat`);
|
|
107
|
-
const commitLogRaw = forkPoint
|
|
108
|
-
? exec(`git log "${forkPoint}"..HEAD --oneline`)
|
|
109
|
-
: '';
|
|
111
|
+
const commitLogRaw = forkPoint ? exec(`git log "${forkPoint}"..HEAD --oneline`) : '';
|
|
110
112
|
const statusShort = exec('git status --short');
|
|
111
113
|
const hasUncommitted = statusShort.length > 0;
|
|
112
114
|
|
|
113
115
|
// OpenSpec change 扫描
|
|
114
116
|
let openspecChanges = null;
|
|
115
|
-
const root = exec('git rev-parse --show-toplevel
|
|
117
|
+
const root = exec('git rev-parse --show-toplevel');
|
|
116
118
|
if (root) {
|
|
117
119
|
const changesDir = join(root, 'openspec', 'changes');
|
|
118
120
|
if (existsSync(changesDir)) {
|
|
119
121
|
try {
|
|
120
122
|
const entries = readdirSync(changesDir, { withFileTypes: true });
|
|
121
123
|
const changeDirs = entries
|
|
122
|
-
.filter(e => e.isDirectory() && e.name !== 'archive')
|
|
123
|
-
.map(e => {
|
|
124
|
+
.filter((e) => e.isDirectory() && e.name !== 'archive')
|
|
125
|
+
.map((e) => {
|
|
124
126
|
const proposalPath = join(changesDir, e.name, 'proposal.md');
|
|
125
127
|
const hasProposal = existsSync(proposalPath);
|
|
126
128
|
let title = e.name;
|
|
@@ -15,13 +15,13 @@
|
|
|
15
15
|
|
|
16
16
|
每类文件必须包含以下注释(缺少则视为未完成):
|
|
17
17
|
|
|
18
|
-
| 文件类型
|
|
19
|
-
|
|
20
|
-
| **Entity**
|
|
21
|
-
| **DTO / Record** | 类 Javadoc `/** 用途说明 */`;字段按 `reef-style-backend` 规范不加注释
|
|
22
|
-
| **Repository**
|
|
23
|
-
| **Service**
|
|
24
|
-
| **Controller**
|
|
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
25
|
|
|
26
26
|
## 多租户红线
|
|
27
27
|
|