@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.
Files changed (123) hide show
  1. package/README.md +8 -8
  2. package/dist/build-registry.js +11 -5
  3. package/dist/cli.js +839 -585
  4. package/dist/mcp/code-hosting/github.json +14 -1
  5. package/dist/mcp/docs-reference/context7.json +1 -10
  6. package/dist/mcp-skills/deepstorm-mcp-feishu-wiki-read/SKILL.md +8 -5
  7. package/dist/mcp-skills/deepstorm-mcp-feishu-wiki-write/SKILL.md +10 -8
  8. package/dist/mcp-skills/deepstorm-mcp-figma-read/SKILL.md +21 -20
  9. package/dist/mcp-skills/deepstorm-mcp-github-read/SKILL.md +17 -17
  10. package/dist/mcp-skills/deepstorm-mcp-github-write/SKILL.md +20 -20
  11. package/dist/mcp-skills/deepstorm-mcp-jira-read/SKILL.md +8 -8
  12. package/dist/mcp-skills/deepstorm-mcp-jira-write/SKILL.md +13 -12
  13. package/dist/mcp-skills/deepstorm-mcp-playwright-read/SKILL.md +10 -10
  14. package/dist/skills/atoll-ops/SKILL.md +4 -0
  15. package/dist/skills/reef-commit/SKILL.md +9 -5
  16. package/dist/skills/reef-commit/scripts/branch-check.mjs +5 -11
  17. package/dist/skills/reef-commit/scripts/check-openspec-status.mjs +6 -12
  18. package/dist/skills/reef-commit/scripts/collect-git-context.mjs +13 -11
  19. package/dist/skills/reef-gen-backend/variants/java/steps.md +7 -7
  20. package/dist/skills/reef-gen-backend/variants/nodejs/steps.md +7 -7
  21. package/dist/skills/reef-gen-backend/variants/python/steps.md +7 -7
  22. package/dist/skills/reef-gen-frontend/variants/angular/steps.md +5 -5
  23. package/dist/skills/reef-gen-frontend/variants/react/steps.md +6 -6
  24. package/dist/skills/reef-gen-frontend/variants/vue/steps.md +6 -6
  25. package/dist/skills/reef-harden/EXAMPLES.md +12 -10
  26. package/dist/skills/reef-harden/SKILL.md +6 -0
  27. package/dist/skills/reef-harden/scripts/find-change-dir.mjs +13 -13
  28. package/dist/skills/reef-pr/SKILL.md +7 -0
  29. package/dist/skills/reef-pr/scripts/create-pr.mjs +31 -29
  30. package/dist/skills/reef-scope/SKILL.md +6 -6
  31. package/dist/skills/reef-start/references/jira-start-subagent.md +7 -7
  32. package/dist/skills/reef-start/references/risk-routing-card.md +28 -25
  33. package/dist/skills/reef-start/references/stage-4-implementation.md +33 -21
  34. package/dist/skills/reef-start/references/superpowers-gate.md +9 -9
  35. package/dist/skills/reef-style-backend/fragments/java/ai/spring-ai/examples/structured-output.md +2 -2
  36. package/dist/skills/reef-style-backend/fragments/java/ai/spring-ai/quick-reference.md +11 -0
  37. package/dist/skills/reef-style-backend/fragments/java/api-spec/jackson-polymorphism.md +36 -40
  38. package/dist/skills/reef-style-backend/fragments/java/api-spec/quick-reference.md +11 -10
  39. package/dist/skills/reef-style-backend/fragments/java/db-migration/liquibase/examples/database-migration.md +7 -7
  40. package/dist/skills/reef-style-backend/fragments/java/dependency-management/quick-reference.md +24 -21
  41. package/dist/skills/reef-style-backend/fragments/java/exception-handling/examples/error-code-enum.md +7 -7
  42. package/dist/skills/reef-style-backend/fragments/java/exception-handling/quick-reference.md +10 -8
  43. package/dist/skills/reef-style-backend/fragments/java/framework/spring-boot/examples/dto-mapper.md +2 -2
  44. package/dist/skills/reef-style-backend/fragments/java/framework/spring-boot/examples/service-entity.md +5 -5
  45. package/dist/skills/reef-style-backend/fragments/java/framework/spring-boot/examples/testing.md +1 -0
  46. package/dist/skills/reef-style-backend/fragments/java/framework/spring-boot/quick-reference.md +12 -12
  47. package/dist/skills/reef-style-backend/fragments/java/orm/hibernate/quick-reference.md +13 -12
  48. package/dist/skills/reef-style-backend/fragments/java/security-redlines/quick-reference.md +11 -9
  49. package/dist/skills/reef-style-backend/fragments/java/test/data-jpa-test/quick-reference.md +7 -7
  50. package/dist/skills/reef-style-backend/fragments/java/test/junit5/quick-reference.md +6 -6
  51. package/dist/skills/reef-style-backend/fragments/java/test/spring-mvc-test/quick-reference.md +8 -8
  52. package/dist/skills/reef-style-backend/fragments/java/test/spring-service-test/quick-reference.md +8 -7
  53. package/dist/skills/reef-style-backend/fragments/nodejs/eslint-config.json +1 -4
  54. package/dist/skills/reef-style-backend/fragments/nodejs/nestjs-structure.md +9 -9
  55. package/dist/skills/reef-style-backend/fragments/python/alembic-migration/quick-reference.md +2 -1
  56. package/dist/skills/reef-style-backend/fragments/python/api-spec/quick-reference.md +10 -10
  57. package/dist/skills/reef-style-backend/fragments/python/dependency-management/quick-reference.md +24 -22
  58. package/dist/skills/reef-style-backend/fragments/python/exception-handling/quick-reference.md +10 -9
  59. package/dist/skills/reef-style-backend/fragments/python/fastapi-quick-reference/quick-reference.md +3 -0
  60. package/dist/skills/reef-style-backend/fragments/python/langchain/quick-reference.md +10 -7
  61. package/dist/skills/reef-style-backend/fragments/python/pytest-testing/quick-reference.md +2 -0
  62. package/dist/skills/reef-style-backend/fragments/python/ruff-mypy-toolchain/quick-reference.md +2 -0
  63. package/dist/skills/reef-style-backend/fragments/python/security-redlines/quick-reference.md +11 -9
  64. package/dist/skills/reef-style-backend/fragments/python/sqlalchemy-orm/quick-reference.md +3 -0
  65. package/dist/skills/reef-style-backend/variants/java/examples/code-wrapping.md +3 -4
  66. package/dist/skills/reef-style-backend/variants/java/quick-reference.md +31 -29
  67. package/dist/skills/reef-style-backend/variants/nodejs/examples/module-example.md +2 -8
  68. package/dist/skills/reef-style-backend/variants/nodejs/quick-reference.md +35 -36
  69. package/dist/skills/reef-style-backend/variants/python/quick-reference.md +32 -31
  70. package/dist/skills/reef-style-frontend/fragments/css/tailwind/quick-reference.md +9 -7
  71. package/dist/skills/reef-style-frontend/fragments/test/vitest/examples/testing.md +9 -4
  72. package/dist/skills/reef-style-frontend/fragments/test/vitest/quick-reference.md +4 -4
  73. package/dist/skills/reef-style-frontend/fragments/test/vitest-react/examples/testing.md +135 -140
  74. package/dist/skills/reef-style-frontend/fragments/test/vitest-react/quick-reference.md +32 -32
  75. package/dist/skills/reef-style-frontend/fragments/test/vitest-vue/examples/testing.md +161 -162
  76. package/dist/skills/reef-style-frontend/fragments/test/vitest-vue/quick-reference.md +42 -42
  77. package/dist/skills/reef-style-frontend/fragments/ts-config/strict/quick-reference.md +16 -10
  78. package/dist/skills/reef-style-frontend/fragments/ui-lib/antd/examples/ui-components.md +72 -87
  79. package/dist/skills/reef-style-frontend/fragments/ui-lib/antd/quick-reference.md +14 -10
  80. package/dist/skills/reef-style-frontend/fragments/ui-lib/antd-vue/examples/ui-components.md +93 -111
  81. package/dist/skills/reef-style-frontend/fragments/ui-lib/antd-vue/quick-reference.md +29 -33
  82. package/dist/skills/reef-style-frontend/fragments/ui-lib/primeng/examples/ui-components.md +14 -23
  83. package/dist/skills/reef-style-frontend/variants/angular/examples/code-wrapping.md +15 -17
  84. package/dist/skills/reef-style-frontend/variants/angular/examples/component-types-pipes.md +22 -5
  85. package/dist/skills/reef-style-frontend/variants/angular/examples/entity-types.md +52 -22
  86. package/dist/skills/reef-style-frontend/variants/angular/examples/forms-layer.md +17 -20
  87. package/dist/skills/reef-style-frontend/variants/angular/examples/service-routing.md +8 -11
  88. package/dist/skills/reef-style-frontend/variants/angular/quick-reference.md +27 -27
  89. package/dist/skills/reef-style-frontend/variants/react/examples/code-wrapping.md +14 -27
  90. package/dist/skills/reef-style-frontend/variants/react/examples/component-types-pipes.md +45 -52
  91. package/dist/skills/reef-style-frontend/variants/react/examples/entity-types.md +44 -44
  92. package/dist/skills/reef-style-frontend/variants/react/examples/forms-layer.md +56 -85
  93. package/dist/skills/reef-style-frontend/variants/react/examples/service-routing.md +114 -88
  94. package/dist/skills/reef-style-frontend/variants/react/quick-reference.md +48 -42
  95. package/dist/skills/reef-style-frontend/variants/vue/examples/code-wrapping.md +24 -43
  96. package/dist/skills/reef-style-frontend/variants/vue/examples/component-types-pipes.md +48 -49
  97. package/dist/skills/reef-style-frontend/variants/vue/examples/entity-types.md +45 -45
  98. package/dist/skills/reef-style-frontend/variants/vue/examples/forms-layer.md +64 -68
  99. package/dist/skills/reef-style-frontend/variants/vue/examples/service-routing.md +85 -84
  100. package/dist/skills/reef-style-frontend/variants/vue/quick-reference.md +46 -51
  101. package/dist/skills/reef-testcase/SKILL.md +19 -19
  102. package/dist/skills/reef-testcase/references/coverage-dimensions.md +8 -0
  103. package/dist/skills/reef-testcase/references/test-case-template.md +16 -16
  104. package/dist/skills/sweep-explore/SKILL.md +129 -100
  105. package/dist/skills/sweep-explore/references/explore-flow-template.md +9 -9
  106. package/dist/skills/sweep-init/SKILL.md +4 -0
  107. package/dist/skills/sweep-init/scripts/flow-selector.mjs +6 -11
  108. package/dist/skills/sweep-init/scripts/init-project.mjs +68 -51
  109. package/dist/skills/sweep-plan/references/test-flow-template.md +12 -6
  110. package/dist/skills/sweep-record/SKILL.md +38 -15
  111. package/dist/skills/sweep-run/SKILL.md +59 -50
  112. package/dist/skills/sweep-run/scripts/env-manager.mjs +4 -5
  113. package/dist/skills/sweep-run/scripts/flow-parser.mjs +7 -6
  114. package/dist/skills/sweep-run/scripts/flow-selector.mjs +4 -15
  115. package/dist/skills/sweep-run/scripts/generate-report.mjs +1 -2
  116. package/dist/skills/sweep-run/scripts/mcp-manager.mjs +107 -14
  117. package/dist/skills/sweep-run/scripts/spec-compiler.mjs +19 -9
  118. package/dist/skills/tide-discuss/references/checklists.md +32 -32
  119. package/dist/skills/tide-discuss/references/data-format.md +85 -77
  120. package/dist/skills/tide-discuss/references/prd-template.md +21 -19
  121. package/dist/skills/tide-discuss/references/publish-flow.md +30 -11
  122. package/dist/skills/tide-discuss/references/role-prompts.md +5 -5
  123. package/package.json +4 -3
@@ -13,7 +13,20 @@
13
13
  "github": {
14
14
  "type": "stdio",
15
15
  "command": "npx",
16
- "args": ["-y", "dotenv-cli", "-e", ".env", "--", "docker", "run", "-i", "--rm", "-e", "GITHUB_PERSONAL_ACCESS_TOKEN", "ghcr.io/github/github-mcp-server"]
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 未配置或无效 | 检查 `.env` 中 `DEEPSTORM_FEISHU_TOKEN` |
64
- | 文档不存在 | 链接错误或已被删除 | 确认文档链接正确 |
65
- | 无权限 | Token 无权访问该文档 | 确认机器人已被加入目标知识库 |
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 未配置或无效 | 检查 `.env` |
62
- | 文档不存在 | 链接错误或已被删除 | 确认目标文档存在 |
63
- | 无权限 | Token 无权操作该文档 | 确认机器人权限 |
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` | 节点标识,从 URL query(`node-id` 参数)获取 |
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
- | 获取图片 | 导出节点为 PNG/JPEG/SVG |
61
- | 获取文件版本 | 文件历史版本列表 |
58
+ | 读取文件内容 | 获取完整节点树结构 |
59
+ | 获取节点 | 获取指定节点的详细信息和样式属性 |
60
+ | 获取图片 | 导出节点为 PNG/JPEG/SVG |
61
+ | 获取文件版本 | 文件历史版本列表 |
62
62
 
63
63
  ### 组件和样式
64
64
 
65
- | 操作 | 说明 |
66
- |------|------|
67
- | 获取本地组件 | 文件中所有本地组件及其属性 |
68
- | 获取团队组件 | 团队组件库中的组件 |
69
- | 获取样式 | TextStyle、ColorStyle、EffectStyle |
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` | Token 无效或过期 | 在 Figma 设置中重新生成 |
97
- | `File not found` | 链接错误或无访问权限 | 确认 URL 正确,检查分享权限 |
98
- | `Node not found` | Node ID 错误 | 确认节点 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 | 按状态、标签、Assignee 筛选 |
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 权限不足 | 检查 Token 的 scope |
61
- | `Not Found` | 仓库不存在或无权限 | 确认仓库名和权限 |
62
- | Docker 错误 | Docker 未启动 | 确认 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 | 附带标题、描述、标签、Assignee |
29
- | 更新 Issue | 修改标题、描述、标签、状态 |
30
- | 关闭/重新打开 | 管理 Issue 生命周期 |
31
- | 添加评论 | 在 Issue 上回复 |
26
+ | 操作 | 说明 |
27
+ | ------------- | ------------------------------ |
28
+ | 创建 Issue | 附带标题、描述、标签、Assignee |
29
+ | 更新 Issue | 修改标题、描述、标签、状态 |
30
+ | 关闭/重新打开 | 管理 Issue 生命周期 |
31
+ | 添加评论 | 在 Issue 上回复 |
32
32
 
33
33
  ### Pull Request
34
34
 
35
- | 操作 | 说明 |
36
- |------|------|
37
- | 创建 PR | 指定源/目标分支、标题、描述,支持 Draft PR |
38
- | 更新 PR 描述 | 修改 PR 描述 |
39
- | 合并 PR | merge/squash/rebase |
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 权限不足 | 检查 Token 的 scope 配置 |
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
- | 纯数字 | `1234` | 需结合项目前缀 |
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 无效 | 检查 `.env` 中 `DEEPSTORM_JIRA_TOKEN` |
80
- | `Issue not found` | Key 错误或无权限 | 确认 Key 正确,检查项目访问权限 |
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 | 项目标识 | `PROJ` |
31
- | Issue 类型 | Story/Task/Bug/Sub-task | `Task` |
32
- | 摘要(Summary) | 标题 | `用户登录功能优化` |
33
- | 描述(Description) | Markdown 正文 | 详细描述 |
34
- | 父任务(可选) | Sub-task 的父级 | `PROJ-123` |
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` | Token 无效 | 检查 `.env` |
73
- | `Transition not allowed` | 该状态流转在当前工作流中不允许 | 先查询可用的 transitions 列表 |
74
- | `Field not on screen` | Jira 项目配置限制 | 确认字段在 project workflow 中可见 |
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 | selector(CSS 选择器) |
45
- | 填写 | fill | selector + value |
46
- | 选择 | selectOption | selector + value |
47
- | 悬停 | hover | selector |
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` | 选择器不匹配 | 使用浏览器 DevTools 检查正确选择器 |
79
- | `Timeout` | 页面加载慢 | 增加等待时间或使用 waitForSelector |
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
- r.name === branch || branch.includes(r.name)
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, insertions = 0, deletions = 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.map(line => {
57
- const match = line.match(/^(\S+)\s+(.*)/);
58
- return match ? { hash: match[1], message: match[2] } : null;
59
- }).filter(Boolean);
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 2>/dev/null || echo ""');
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** | 类 Javadoc `/** 实体描述 */`;每个字段 `/** 字段含义 */` |
21
- | **DTO / Record** | 类 Javadoc `/** 用途说明 */`;字段按 `reef-style-backend` 规范不加注释 |
22
- | **Repository** | 自定义查询方法加 `/** 查询意图、参数含义 */`;简单 CRUD 方法可不加 |
23
- | **Service** | 每个 public 方法加 Javadoc `/** 功能、@param、@return */`;复杂逻辑内联注释说明 |
24
- | **Controller** | 每个端点加 `@Operation(summary=, description=)` 或等价 Javadoc |
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