@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
@@ -27,6 +27,7 @@ MODULE-FUNCTION-SUBFUNCTION
27
27
  全大写 + 连字符,例:`AUTH-LOGIN-WECOM`、`PAYMENT-ORDER-REFUND`。
28
28
 
29
29
  **自动生成规则(当用户未指定时):**
30
+
30
31
  1. 先将需求描述**翻译成英文**,准确表达原意
31
32
  2. 从英文翻译中提取 2-4 个核心关键词,按逻辑层级排列:`模块-功能-子功能`
32
33
  3. 如果需求跨多个领域,取最核心的意图
@@ -60,34 +61,40 @@ MODULE-FUNCTION-SUBFUNCTION
60
61
  },
61
62
  "issueTracker": {
62
63
  "provider": "jira",
63
- "urls": [
64
- "https://jira.example.com/browse/PROJ-123",
65
- "https://jira.example.com/browse/PROJ-124"
66
- ],
64
+ "urls": ["https://jira.example.com/browse/PROJ-123", "https://jira.example.com/browse/PROJ-124"],
67
65
  "taskBreakdown": [
68
- {"title": "支持企业微信扫码登录", "fr": "FR-1", "priority": "P0",
69
- "acceptance": ["用户可通过企业微信扫码完成登录"],
70
- "description": "实现企业微信 OAuth 扫码登录流程"},
71
- {"title": "扫码授权页 UI", "fr": "FR-2", "priority": "P1",
72
- "acceptance": ["页面在移动端和 PC 端均正常显示"],
73
- "description": "设计扫码授权页面,包含二维码展示和状态提示"}
66
+ {
67
+ "title": "支持企业微信扫码登录",
68
+ "fr": "FR-1",
69
+ "priority": "P0",
70
+ "acceptance": ["用户可通过企业微信扫码完成登录"],
71
+ "description": "实现企业微信 OAuth 扫码登录流程"
72
+ },
73
+ {
74
+ "title": "扫码授权页 UI",
75
+ "fr": "FR-2",
76
+ "priority": "P1",
77
+ "acceptance": ["页面在移动端和 PC 端均正常显示"],
78
+ "description": "设计扫码授权页面,包含二维码展示和状态提示"
79
+ }
74
80
  ]
75
81
  }
76
82
  },
77
- "dingtalkUrl": "https://feishu.cn/wiki/xxx", // 向后兼容旧字段,新 session 使用 services.knowledgeBase
78
- "jiraUrls": [
79
- "https://jira.example.com/browse/PROJ-123",
80
- "https://jira.example.com/browse/PROJ-124"
81
- ],
83
+ "dingtalkUrl": "https://feishu.cn/wiki/xxx", // 向后兼容旧字段,新 session 使用 services.knowledgeBase
84
+ "jiraUrls": ["https://jira.example.com/browse/PROJ-123", "https://jira.example.com/browse/PROJ-124"],
82
85
  "jiraTaskBreakdown": [
83
- {"title": "支持企业微信扫码登录", "fr": "FR-1", "priority": "P0",
84
- "acceptance": ["用户可通过企业微信扫码完成登录"],
85
- "description": "实现企业微信 OAuth 扫码登录流程"}
86
+ {
87
+ "title": "支持企业微信扫码登录",
88
+ "fr": "FR-1",
89
+ "priority": "P0",
90
+ "acceptance": ["用户可通过企业微信扫码完成登录"],
91
+ "description": "实现企业微信 OAuth 扫码登录流程"
92
+ }
86
93
  ],
87
94
  "publishChecklist": [
88
- {"step": "knowledge_base_push", "done": true, "note": "已推送到知识库"},
89
- {"step": "issue_task_split", "done": true, "note": "用户已确认 2 个任务"},
90
- {"step": "create_issues", "done": true, "total": 2, "created": 2}
95
+ { "step": "knowledge_base_push", "done": true, "note": "已推送到知识库" },
96
+ { "step": "issue_task_split", "done": true, "note": "用户已确认 2 个任务" },
97
+ { "step": "create_issues", "done": true, "total": 2, "created": 2 }
91
98
  ],
92
99
  "steps": [
93
100
  {
@@ -97,11 +104,11 @@ MODULE-FUNCTION-SUBFUNCTION
97
104
  "requirements": ["支持企业微信扫码"],
98
105
  "skipped": false,
99
106
  "checklist": [
100
- {"item": "需求背景和业务目标", "done": true},
101
- {"item": "目标用户画像", "done": true},
102
- {"item": "核心痛点分析", "done": true},
103
- {"item": "竞品和市场调研", "done": true},
104
- {"item": "关键成功指标", "done": true}
107
+ { "item": "需求背景和业务目标", "done": true },
108
+ { "item": "目标用户画像", "done": true },
109
+ { "item": "核心痛点分析", "done": true },
110
+ { "item": "竞品和市场调研", "done": true },
111
+ { "item": "关键成功指标", "done": true }
105
112
  ],
106
113
  "completedAt": "2026-06-11T10:15:00.000Z"
107
114
  }
@@ -111,36 +118,37 @@ MODULE-FUNCTION-SUBFUNCTION
111
118
 
112
119
  ### 字段说明 — services 命名空间(新字段)
113
120
 
114
- |字段|类型|说明|
115
- |---|---|---|
116
- |`services.knowledgeBase`|object \| null|知识库服务信息。4a 成功后写入,含 `provider`(MCP 服务 ID)和 `url`(文档链接)|
117
- |`services.issueTracker`|object \| null|工单系统信息。4b+4c 过程中写入,含 `provider`、`urls` 数组(自动去重)、`taskBreakdown`(任务清单)|
121
+ | 字段 | 类型 | 说明 |
122
+ | ------------------------ | -------------- | --------------------------------------------------------------------------------------------------- |
123
+ | `services.knowledgeBase` | object \| null | 知识库服务信息。4a 成功后写入,含 `provider`(MCP 服务 ID)和 `url`(文档链接) |
124
+ | `services.issueTracker` | object \| null | 工单系统信息。4b+4c 过程中写入,含 `provider`、`urls` 数组(自动去重)、`taskBreakdown`(任务清单) |
118
125
 
119
126
  ### 字段说明 — 通用字段
120
127
 
121
- |字段|类型|说明|
122
- |---|---|---|
123
- |`sessionId`|string|会话唯一 ID,格式 `tide-YYYYMMDD-NNN`|
124
- |`featureId`|string|功能标识,格式 `MODULE-FUNCTION-SUBFUNCTION`|
125
- |`brief`|string|需求中文概要,AI 从用户输入提炼,**不超过 50 字**。用于列表展示和关键词搜索匹配|
126
- |`createdAt`|string (ISO 8601)|会话创建时间|
127
- |`status`|string|会话状态,见下方状态说明|
128
- |`parent`|string \| null|需求变更/重来时关联的旧会话 sessionId;`null` 表示原始会话|
129
- |`supersededBy`|string \| null|取代此会话的新会话 sessionId;`null` 表示未被取代|
130
- |`steps`|array|角色讨论记录数组,每个 step 包含:`role`, `summary`, `decisions`, `requirements`, `skipped`, `checklist`, `completedAt`|
131
- |`publishChecklist`|array|发布流程 checklist,每项含 `{step, done, note?, skipped?, total?, created?, failedItems?}`。`failedItems` 记录失败的具体条目明细,标准格式见下方。步骤名:`knowledge_base_push` / `issue_task_split` / `create_issues`|
128
+ | 字段 | 类型 | 说明 |
129
+ | ------------------ | ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
130
+ | `sessionId` | string | 会话唯一 ID,格式 `tide-YYYYMMDD-NNN` |
131
+ | `featureId` | string | 功能标识,格式 `MODULE-FUNCTION-SUBFUNCTION` |
132
+ | `brief` | string | 需求中文概要,AI 从用户输入提炼,**不超过 50 字**。用于列表展示和关键词搜索匹配 |
133
+ | `createdAt` | string (ISO 8601) | 会话创建时间 |
134
+ | `status` | string | 会话状态,见下方状态说明 |
135
+ | `parent` | string \| null | 需求变更/重来时关联的旧会话 sessionId;`null` 表示原始会话 |
136
+ | `supersededBy` | string \| null | 取代此会话的新会话 sessionId;`null` 表示未被取代 |
137
+ | `steps` | array | 角色讨论记录数组,每个 step 包含:`role`, `summary`, `decisions`, `requirements`, `skipped`, `checklist`, `completedAt` |
138
+ | `publishChecklist` | array | 发布流程 checklist,每项含 `{step, done, note?, skipped?, total?, created?, failedItems?}`。`failedItems` 记录失败的具体条目明细,标准格式见下方。步骤名:`knowledge_base_push` / `issue_task_split` / `create_issues` |
132
139
 
133
140
  ### 向后兼容旧字段
134
141
 
135
142
  以下旧字段保留为向后兼容别名。新代码优先使用 `services` 命名空间,读取时降级:
136
143
 
137
- |旧字段|新字段|降级规则|
138
- |---|---|---|
139
- |`dingtalkUrl`|`services.knowledgeBase.url`|`services.knowledgeBase` 不存在时读取 `dingtalkUrl`|
140
- |`jiraUrls`|`services.issueTracker.urls`|`services.issueTracker` 不存在时读取 `jiraUrls`|
141
- |`jiraTaskBreakdown`|`services.issueTracker.taskBreakdown`|`services.issueTracker.taskBreakdown` 不存在时读取 `jiraTaskBreakdown`|
144
+ | 旧字段 | 新字段 | 降级规则 |
145
+ | ------------------- | ------------------------------------- | ---------------------------------------------------------------------- |
146
+ | `dingtalkUrl` | `services.knowledgeBase.url` | `services.knowledgeBase` 不存在时读取 `dingtalkUrl` |
147
+ | `jiraUrls` | `services.issueTracker.urls` | `services.issueTracker` 不存在时读取 `jiraUrls` |
148
+ | `jiraTaskBreakdown` | `services.issueTracker.taskBreakdown` | `services.issueTracker.taskBreakdown` 不存在时读取 `jiraTaskBreakdown` |
142
149
 
143
150
  **读写规则:**
151
+
144
152
  - **写操作:** 统一写入 `services` 命名空间,不再写入旧字段
145
153
  - **读操作:** 优先读取 `services` 命名空间,不存在时降级到旧字段
146
154
  - **AI 展示:** 优先展示 `services` 中的值;展示给用户时使用通用名称("知识库"、"工单"),而非特定服务名
@@ -149,26 +157,26 @@ MODULE-FUNCTION-SUBFUNCTION
149
157
 
150
158
  ### Steps 子字段
151
159
 
152
- |字段|类型|说明|
153
- |---|---|---|
154
- |`role`|string|角色 ID:`analyst` / `pm` / `architect` / `designer` / `po`|
155
- |`summary`|string|本角色讨论总结|
156
- |`decisions`|string[]|关键决策列表|
157
- |`requirements`|string[]|功能需求/要求列表|
158
- |`skipped`|boolean|是否为用户跳过的可选角色,缺省 `false`|
159
- |`checklist`|array|讨论进度清单,每项含 `{item: string, done: boolean}`|
160
- |`completedAt`|string \| null|完成时间。有值 = 该角色已处理完毕(已完成**或**已跳过,配合 `skipped` 区分);`null` = 尚未处理|
160
+ | 字段 | 类型 | 说明 |
161
+ | -------------- | -------------- | ----------------------------------------------------------------------------------------------- |
162
+ | `role` | string | 角色 ID:`analyst` / `pm` / `architect` / `designer` / `po` |
163
+ | `summary` | string | 本角色讨论总结 |
164
+ | `decisions` | string[] | 关键决策列表 |
165
+ | `requirements` | string[] | 功能需求/要求列表 |
166
+ | `skipped` | boolean | 是否为用户跳过的可选角色,缺省 `false` |
167
+ | `checklist` | array | 讨论进度清单,每项含 `{item: string, done: boolean}` |
168
+ | `completedAt` | string \| null | 完成时间。有值 = 该角色已处理完毕(已完成**或**已跳过,配合 `skipped` 区分);`null` = 尚未处理 |
161
169
 
162
170
  ### 状态说明
163
171
 
164
- |状态|含义|何时设置|后续操作|
165
- |---|---|---|---|
166
- |`active`|讨论进行中。还有角色未完成或可选角色待询问。|Step 1 新建时设为此值|继续角色讨论|
167
- |`prd_ready`|PRD 已生成。所有必需角色讨论完成,PRD 文件已写入磁盘。|Step 3 PRD 生成后设为此值|查看 PRD、推送到知识库(4a)、变更需求|
168
- |`published`|已发布到知识库。4a 执行成功或已跳过,等待 4b 任务拆分。|Step 4a 成功后(或跳过时)设为此值|查看 PRD、拆分为任务(4b)、变更需求|
169
- |`publish_error`|发布过程中出错。知识库推送或工单创建失败。|Step 4a 或 4c 执行失败时设为此值|查看 PRD、重试发布、放弃发布(→ superseded)|
170
- |`completed`|工单已创建(或全部跳过)。所有发布步骤完成,整个需求工作流完结。**自动归档到 `archive/` 目录。**|Step 4c 成功(或全部跳过)后设为此值|查看 PRD 和工单(只读归档)|
171
- |`superseded`|已废弃(变更需求/放弃/重来)。此需求已被取代、放弃或重来。**自动归档到 `archive/` 目录。**|用户选择「变更需求」「放弃」或「重来」时设为此值|查看历史和替代会话(只读归档)|
172
+ | 状态 | 含义 | 何时设置 | 后续操作 |
173
+ | --------------- | ------------------------------------------------------------------------------------------------ | ------------------------------------------------ | -------------------------------------------- |
174
+ | `active` | 讨论进行中。还有角色未完成或可选角色待询问。 | Step 1 新建时设为此值 | 继续角色讨论 |
175
+ | `prd_ready` | PRD 已生成。所有必需角色讨论完成,PRD 文件已写入磁盘。 | Step 3 PRD 生成后设为此值 | 查看 PRD、推送到知识库(4a)、变更需求 |
176
+ | `published` | 已发布到知识库。4a 执行成功或已跳过,等待 4b 任务拆分。 | Step 4a 成功后(或跳过时)设为此值 | 查看 PRD、拆分为任务(4b)、变更需求 |
177
+ | `publish_error` | 发布过程中出错。知识库推送或工单创建失败。 | Step 4a 或 4c 执行失败时设为此值 | 查看 PRD、重试发布、放弃发布(→ superseded) |
178
+ | `completed` | 工单已创建(或全部跳过)。所有发布步骤完成,整个需求工作流完结。**自动归档到 `archive/` 目录。** | Step 4c 成功(或全部跳过)后设为此值 | 查看 PRD 和工单(只读归档) |
179
+ | `superseded` | 已废弃(变更需求/放弃/重来)。此需求已被取代、放弃或重来。**自动归档到 `archive/` 目录。** | 用户选择「变更需求」「放弃」或「重来」时设为此值 | 查看历史和替代会话(只读归档) |
172
180
 
173
181
  ### 状态流转图
174
182
 
@@ -198,13 +206,13 @@ flowchart TD
198
206
 
199
207
  `failedItems` 数组中的每个条目遵循以下标准结构:
200
208
 
201
- |字段|类型|说明|
202
- |---|---|---|
203
- |`title`|string|**必填**。失败 Issue 的标题,与 4b 任务清单中的 Story 标题一致|
204
- |`fr`|string|关联的功能需求编号(如 `FR-3`),用于追溯 PRD 原文|
205
- |`priority`|string|优先级(`P0`/`P1`/`P2`),从 4b 任务清单继承|
206
- |`acceptance`|string[]|验收标准列表,从 PRD 验收标准章节提取|
207
- |`description`|string|Issue 详细描述,包含背景和预期行为|
209
+ | 字段 | 类型 | 说明 |
210
+ | ------------- | -------- | -------------------------------------------------------------- |
211
+ | `title` | string | **必填**。失败 Issue 的标题,与 4b 任务清单中的 Story 标题一致 |
212
+ | `fr` | string | 关联的功能需求编号(如 `FR-3`),用于追溯 PRD 原文 |
213
+ | `priority` | string | 优先级(`P0`/`P1`/`P2`),从 4b 任务清单继承 |
214
+ | `acceptance` | string[] | 验收标准列表,从 PRD 验收标准章节提取 |
215
+ | `description` | string | Issue 详细描述,包含背景和预期行为 |
208
216
 
209
217
  > 重试时 AI 依据 `title` 匹配任务清单中的条目,使用 `acceptance` 和 `description` 重建 Issue 内容。
210
218
 
@@ -225,13 +233,13 @@ flowchart TD
225
233
 
226
234
  5 个 BMAD 角色,按固定顺序进行:
227
235
 
228
- |顺序|ID|名称|必需?|说明|
229
- |---|---|---|---|---|
230
- |1|`analyst`|📊 业务分析师 Mary|✅ 必需|了解背景、痛点、竞品、目标用户|
231
- |2|`pm`|📋 产品经理 John|✅ 必需|功能范围、用户故事、优先级、验收标准|
232
- |3|`architect`|🏗️ 架构师 Winston|⬜ 可选|技术可行性、风险、系统影响|
233
- |4|`designer`|🎨 UX 设计师 Sally|⬜ 可选|交互方案、设计约束|
234
- |5|`po`|👑 产品负责人 Chris|⬜ 可选|业务价值、发布策略|
236
+ | 顺序 | ID | 名称 | 必需? | 说明 |
237
+ | ---- | ----------- | ------------------- | ------- | ------------------------------------ |
238
+ | 1 | `analyst` | 📊 业务分析师 Mary | ✅ 必需 | 了解背景、痛点、竞品、目标用户 |
239
+ | 2 | `pm` | 📋 产品经理 John | ✅ 必需 | 功能范围、用户故事、优先级、验收标准 |
240
+ | 3 | `architect` | 🏗️ 架构师 Winston | ⬜ 可选 | 技术可行性、风险、系统影响 |
241
+ | 4 | `designer` | 🎨 UX 设计师 Sally | ⬜ 可选 | 交互方案、设计约束 |
242
+ | 5 | `po` | 👑 产品负责人 Chris | ⬜ 可选 | 业务价值、发布策略 |
235
243
 
236
244
  **必需角色(2 个):** `analyst`、`pm` — 必须完成才能生成 PRD
237
245
  **可选角色(3 个):** `architect`、`designer`、`po` — 用户可以选择跳过
@@ -22,18 +22,21 @@ featureId: {featureId}
22
22
  **需求描述:** {brief}
23
23
  **Feature ID:** `{featureId}`
24
24
  **参与角色:**
25
+
25
26
  - 📊 analyst — {summary 第一行}
26
27
  - 📋 pm — {summary 第一行}
27
- (如 architect / designer / po 已参与,在此列出)
28
+ (如 architect / designer / po 已参与,在此列出)
28
29
 
29
30
  ## 2. 背景与目标
30
31
 
31
32
  {analyst 的 summary}
32
33
 
33
34
  **关键决策:**
35
+
34
36
  - {analyst 的 decisions,包含背景分析和约束假设}
35
37
 
36
38
  **分析师需求(AR — Analyst Requirements):**
39
+
37
40
  - AR-1: {analyst requirements,按背景/约束/假设分类}
38
41
  - AR-2: {analyst requirements}
39
42
 
@@ -69,9 +72,9 @@ featureId: {featureId}
69
72
 
70
73
  ## 10. 讨论记录
71
74
 
72
- | 角色 | 完成时间 | 总结 |
73
- |------|----------|------|
74
- | {列出有 completedAt 的角色,跳过 skipped 的} | {时间} | {summary,前 50 字,不足则全量显示} |
75
+ | 角色 | 完成时间 | 总结 |
76
+ | -------------------------------------------- | -------- | ----------------------------------- |
77
+ | {列出有 completedAt 的角色,跳过 skipped 的} | {时间} | {summary,前 50 字,不足则全量显示} |
75
78
 
76
79
  ## 11. 开放问题
77
80
 
@@ -89,8 +92,8 @@ featureId: {featureId}
89
92
  "brief": "企业微信扫码登录",
90
93
  "generatedAt": "2026-06-11T10:30:00.000Z",
91
94
  "participants": [
92
- {"role": "analyst", "completedAt": "2026-06-11T10:15:00.000Z", "skipped": false},
93
- {"role": "pm", "completedAt": "2026-06-11T10:25:00.000Z", "skipped": false}
95
+ { "role": "analyst", "completedAt": "2026-06-11T10:15:00.000Z", "skipped": false },
96
+ { "role": "pm", "completedAt": "2026-06-11T10:25:00.000Z", "skipped": false }
94
97
  ],
95
98
  "sections": {
96
99
  "background": {
@@ -103,32 +106,31 @@ featureId: {featureId}
103
106
  "作为 IT 管理员,我想配置企业微信登录参数,以便控制接入权限"
104
107
  ],
105
108
  "functionalRequirements": [
106
- {"id": "FR-1", "title": "支持企业微信扫码登录", "priority": "P0"},
107
- {"id": "FR-2", "title": "扫码授权页 UI", "priority": "P1"}
108
- ],
109
- "nonFunctionalRequirements": [
110
- "可用性: 需满足基本可用标准",
111
- "性能: 响应时间在可接受范围内"
109
+ { "id": "FR-1", "title": "支持企业微信扫码登录", "priority": "P0" },
110
+ { "id": "FR-2", "title": "扫码授权页 UI", "priority": "P1" }
112
111
  ],
112
+ "nonFunctionalRequirements": ["可用性: 需满足基本可用标准", "性能: 响应时间在可接受范围内"],
113
113
  "acceptanceCriteria": [
114
- {"id": "AC-1", "description": "用户可通过企业微信扫码完成登录"},
115
- {"id": "AC-2", "description": "同一账号最多 3 台设备同时在线"}
114
+ { "id": "AC-1", "description": "用户可通过企业微信扫码完成登录" },
115
+ { "id": "AC-2", "description": "同一账号最多 3 台设备同时在线" }
116
116
  ],
117
117
  "technicalPlan": "(未讨论)",
118
118
  "uxSuggestions": "(未讨论)",
119
119
  "releaseStrategy": "(未讨论)"
120
120
  },
121
121
  "discussionRecords": [
122
- {"role": "analyst", "completedAt": "2026-06-11T10:15:00.000Z", "summary": "讨论了企业微信在企业通讯录中的使用情况..."}
122
+ {
123
+ "role": "analyst",
124
+ "completedAt": "2026-06-11T10:15:00.000Z",
125
+ "summary": "讨论了企业微信在企业通讯录中的使用情况..."
126
+ }
123
127
  ],
124
- "openQuestions": [
125
- "需求范围是否有需要进一步明确的地方?",
126
- "所有关键决策是否已记录?"
127
- ]
128
+ "openQuestions": ["需求范围是否有需要进一步明确的地方?", "所有关键决策是否已记录?"]
128
129
  }
129
130
  ```
130
131
 
131
132
  **说明:**
133
+
132
134
  - `sections` 中可选角色对应的字段(`technicalPlan` / `uxSuggestions` / `releaseStrategy`)如果角色未参与,值为 `"(未讨论)"`,与 Markdown 模板一致
133
135
  - `participants` 包含所有已参与的角色(包括 `skipped: true` 的),不含未触及的角色
134
136
  - 该 JSON 用于 4b 任务拆分的结构化读取,字段名固定不可随意修改
@@ -7,6 +7,7 @@ PRD 生成后(`status: prd_ready`),分三步完成发布流程。每步根
7
7
  进入 Step 4 时,AI 先读取 `.deepstorm/settings.json` → `mcpCapabilities` 确定可用的 provider。
8
8
 
9
9
  能力映射结构示例(安装时渲染):
10
+
10
11
  ```json
11
12
  {
12
13
  "knowledge_base": {
@@ -39,22 +40,36 @@ PRD 生成后(`status: prd_ready`),分三步完成发布流程。每步根
39
40
  ```json
40
41
  {
41
42
  "publishChecklist": [
42
- {"step": "knowledge_base_push", "done": true, "note": "已推送到知识库"},
43
- {"step": "issue_task_split", "done": true, "note": "用户已确认 5 个任务"},
44
- {"step": "create_issues", "done": false, "total": 5, "created": 3,
45
- "failedItems": [
46
- {"title": "Story 4: Token 刷新优化", "fr": "FR-4", "priority": "P1",
47
- "acceptance": ["Token 过期后自动刷新", "刷新过程用户无感知"],
48
- "description": "用户登录后获取 Token,Token 过期前自动调用刷新接口"},
49
- {"title": "Story 5: 多设备登录管理", "fr": "FR-5", "priority": "P2",
50
- "acceptance": ["同一账号最多 3 台设备同时在线", "超出时提示用户"],
51
- "description": "用户可在多台设备上登录同一账号,系统管理设备会话数"}
52
- ]}
43
+ { "step": "knowledge_base_push", "done": true, "note": "已推送到知识库" },
44
+ { "step": "issue_task_split", "done": true, "note": "用户已确认 5 个任务" },
45
+ {
46
+ "step": "create_issues",
47
+ "done": false,
48
+ "total": 5,
49
+ "created": 3,
50
+ "failedItems": [
51
+ {
52
+ "title": "Story 4: Token 刷新优化",
53
+ "fr": "FR-4",
54
+ "priority": "P1",
55
+ "acceptance": ["Token 过期后自动刷新", "刷新过程用户无感知"],
56
+ "description": "用户登录后获取 Token,Token 过期前自动调用刷新接口"
57
+ },
58
+ {
59
+ "title": "Story 5: 多设备登录管理",
60
+ "fr": "FR-5",
61
+ "priority": "P2",
62
+ "acceptance": ["同一账号最多 3 台设备同时在线", "超出时提示用户"],
63
+ "description": "用户可在多台设备上登录同一账号,系统管理设备会话数"
64
+ }
65
+ ]
66
+ }
53
67
  ]
54
68
  }
55
69
  ```
56
70
 
57
71
  **规则:**
72
+
58
73
  - `done: true` + 无 `skipped` → 该步已完成,下次恢复时直接跳过
59
74
  - `done: true` + `skipped: true` → 该步被跳过(无可用 MCP 服务)。恢复时**跳过该步**,不重新检查 MCP 可用性
60
75
  - `done: false` + 无 `failedItems` → 该步从未执行过,从头开始
@@ -81,12 +96,14 @@ PRD 生成后(`status: prd_ready`),分三步完成发布流程。每步根
81
96
  ### 场景 B:多知识库可用(用户选择)
82
97
 
83
98
  在 4a 入口展示可用列表让用户选择:
99
+
84
100
  ```
85
101
  检测到多个知识库服务:
86
102
  1. {provider1.label} ({provider1.id})
87
103
  2. {provider2.label} ({provider2.id})
88
104
  请选择本次推送使用的知识库:
89
105
  ```
106
+
90
107
  用户选择后,按所选 provider 的 skill 指南执行推送。选择结果持久化到 `services.knowledgeBase.provider`。
91
108
 
92
109
  ### 场景 C:无可用知识库(跳过)
@@ -130,12 +147,14 @@ PRD 生成后(`status: prd_ready`),分三步完成发布流程。每步根
130
147
  ### 多工单系统可用时(额外步骤)
131
148
 
132
149
  在 4b 入口询问用户选择:
150
+
133
151
  ```
134
152
  检测到多个工单系统:
135
153
  1. {provider1.label} ({provider1.id})
136
154
  2. {provider2.label} ({provider2.id})
137
155
  本次使用哪个?
138
156
  ```
157
+
139
158
  选择结果持久化到 `services.issueTracker.provider`,同一 session 内后续 4c 和恢复时直接读取,不再重新询问。
140
159
 
141
160
  ### 无可用工单系统时(跳过 4b + 4c)
@@ -35,12 +35,12 @@
35
35
  > **Checklist(5 项):** `references/checklists.md` — analyst
36
36
  >
37
37
  > 目标:
38
+ >
38
39
  > - 了解需求背景和用户痛点
39
40
  > - 调研竞品和市场趋势
40
41
  > - 明确目标用户和使用场景
41
42
  >
42
43
  > 要求:基于证据和数据,避免主观臆断。完成所有目标后进入下一角色。
43
- >
44
44
 
45
45
  ---
46
46
 
@@ -52,12 +52,12 @@
52
52
  > **Checklist(5 项):** `references/checklists.md` — pm
53
53
  >
54
54
  > 目标:
55
+ >
55
56
  > - 定义功能范围和边界
56
57
  > - 梳理用户故事和优先级
57
58
  > - 确定验收标准
58
59
  >
59
60
  > 要求:基于用户价值和实际场景。完成所有目标后进入下一角色。
60
- >
61
61
 
62
62
  ---
63
63
 
@@ -69,10 +69,10 @@
69
69
  > **Checklist(4 项):** `references/checklists.md` — architect
70
70
  >
71
71
  > 目标:
72
+ >
72
73
  > - 评估技术可行性和实现成本
73
74
  > - 识别潜在技术风险和依赖
74
75
  > - 给出架构建议和约束
75
- >
76
76
 
77
77
  ---
78
78
 
@@ -84,10 +84,10 @@
84
84
  > **Checklist(4 项):** `references/checklists.md` — designer
85
85
  >
86
86
  > 目标:
87
+ >
87
88
  > - 评估用户体验影响
88
89
  > - 识别关键交互流程
89
90
  > - 给出 UX 建议
90
- >
91
91
 
92
92
  ---
93
93
 
@@ -99,7 +99,7 @@
99
99
  > **Checklist(4 项):** `references/checklists.md` — po
100
100
  >
101
101
  > 目标:
102
+ >
102
103
  > - 确认产品方向与战略对齐
103
104
  > - 评估需求优先级与投入产出比
104
105
  > - 确认发布策略和节奏
105
- >
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deepstorm/cli",
3
- "version": "0.11.0",
3
+ "version": "0.11.1",
4
4
  "description": "DeepStorm CLI — 一键配置项目开发环境",
5
5
  "license": "MIT",
6
6
  "author": "billkang",
@@ -17,7 +17,7 @@
17
17
  "handlebars": "^4.7.8",
18
18
  "js-yaml": "^4.1.0",
19
19
  "playwright": "^1.62.0",
20
- "@deepstorm/pilot": "^0.11.0"
20
+ "@deepstorm/pilot": "^0.11.1"
21
21
  },
22
22
  "devDependencies": {
23
23
  "@types/node": "^22.0.0",
@@ -34,6 +34,7 @@
34
34
  },
35
35
  "scripts": {
36
36
  "build": "node scripts/build.mjs && node dist/build-registry.js",
37
- "test": "vitest run --coverage"
37
+ "test": "vitest run",
38
+ "test:coverage": "vitest run --coverage"
38
39
  }
39
40
  }