@zhuan-ai/zhuanspec 2.17.13 → 2.17.14

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.
@@ -5,6 +5,10 @@ const baseGuardrails = `**约束条件**
5
5
  - **工作区边界(强制)**:查找文档、检索工程代码、执行 grep/glob/ls 时,范围必须限定在当前 ZhuanSpec 工作区内。禁止使用 \`../**\`、上级目录绝对路径或手动拼接到工作区外路径。Glob 返回相对路径时,必须以本次工具调用的 \`path\` 参数作为基准拼接绝对路径,不得误解为当前目录或上级目录。
6
6
  - **知识库参考**:开始任何阶段前,先检查 \`zhuanspec/knowledge/\` 目录。使用 \`rg "[关键词]" zhuanspec/knowledge/\` 搜索相关陷阱和最佳实践,避免重复踩坑。阅读 \`zhuanspec/knowledge/index.md\` 了解项目级知识摘要。
7
7
  - **工程代码检索顺序**:凡是需要检索工程代码、配置类、数据模型类或关键实现位置时,必须先调用 \`@skill:load-project-knowledge\` 进行渐进式加载,使用返回的 search_priority 限定检索范围,按优先路径定位代码。Skill 返回的 \`matched_services[].micro_path\` 即各服务 \`.project-wiki/\` 下的知识条目路径,按需读取其中子文档(无论 Skill 内部走 llmwiki 还是 project.md 路径,最终内容均来自各服务的 \`.project-wiki/\`)。仅当 Skill 无匹配结果时,才回退到 \`grep/glob/ls\`。
8
+ - **需求来源读取(红线,全阶段适用)**:读取需求来源(技术方案输入、测试 case、验收标准等)时,按链接类型选用对应读取方式,禁止张冠李戴:
9
+ * **大神页面**(\`zhuanspirit\` 大神文档 / \`--dashen-page-id\` / \`--dashen-url\`):用大神 MCP 工具(如 \`mcp__dashen__getPageContent\`)读取。
10
+ * **zzcase 测试用例**(\`zzcase.zhuanspirit.com/plan/taskDetail/module/{moduleId}/task/{taskId}\`):从 URL 提取 \`moduleId\`,用 \`mcp__caseweb__GET_get2\` 读取。
11
+ * **飞书链接**(\`project.feishu.cn/{space}/story/detail/{id}\` 需求工作项、\`xxx.feishu.cn/wiki/{token}\`、\`xxx.feishu.cn/docx/{id}\` 文档):**禁止用 Fetch/WebFetch 直接抓取飞书网页**(会被安全域名校验拦截而失败),必须用本机飞书 CLI \`lark-cli\` 读取正文(通过 Bash 调用;不确定子命令时先执行 \`lark-cli --help\` 确认用法)。若 lark-cli 未安装/未授权/读取失败,如实报告失败原因与用户需处理的动作(安装 \`npm install -g @larksuite/cli\` 或执行 \`lark-cli auth login\` 授权),不要编造需求内容。
8
12
  - 如果需要额外的 ZhuanSpec 约定或澄清,请参考 \`zhuanspec/AGENTS.md\`(位于 \`zhuanspec/\` 目录内 - 如果看不到,请运行 \`ls zhuanspec\` 或 \`zhuanspec update\`)。`;
9
13
  const proposalGuardrails = `${baseGuardrails}\n- **强制澄清要求**:在创建任何提案文件之前,必须首先分析用户请求,识别所有不确定或模糊的方面(范围、技术选择、优先级、验收标准等)。如果发现任何模糊之处,必须停止并使用**选项式交互**(如 \`AskQuestion\` 工具)提问,获得明确答复后才能继续。严禁在不确定的情况下自行推测、假设或创建提案。严禁要求用户手动输入大段文字来回答澄清问题。
10
14
  - 识别任何模糊或歧义的细节,使用带预设选项的选择题在编辑文件之前询问必要的后续问题。
@@ -742,7 +746,7 @@ const archiveReferences = `**参考**
742
746
  - 会话分析 (\`session-analytics\`):记录本次会话的效率指标,用于改进工作流。`;
743
747
  const designGuardrails = `${baseGuardrails}\n- **独立设计阶段**:techDesign 命令用于在 proposal 之前生成技术设计请求文档,不依赖变更提案。设计文档可作为后续提案的输入。
744
748
  - **Skill 调用连续性(红线)**:在 techDesign 流程中调用任何辅助类 Skill(如 \`@skill:load-project-knowledge\`)后,**必须立即推进到下一编号步骤**,禁止把 Skill 的输出当作流程终态,禁止停顿等待用户输入“继续/下一步”等确认词。只有在显式标注的 AskUserQuestion 步骤(如开发范围确认、需求来源确认、外部依赖确认)才允许暂停等待用户。
745
- - **需求澄清优先**:在生成设计请求前,必须确认需求来源(大神页面、需求描述文本等)。
749
+ - **需求澄清优先**:在生成设计请求前,必须确认需求来源(大神页面、飞书链接/文档、需求描述文本等);飞书链接的读取方式见 baseGuardrails 的「需求来源读取」红线。
746
750
  - **开发范围前置确认(硬约束)**:在调用技术方案 Skill 前,**必须**先通过 AskUserQuestion 确认开发范围是“仅后端开发”还是“全栈开发”,根据答复选择对应 Skill(仅后端=\`generate-tech-spec-md-skill\`,全栈=\`generate-fullstack-tech-spec-skill\`),禁止默认或跳过此确认环节。
747
751
  - **Skill 可用性前置检查(硬约束)**:在实际调用技术方案 Skill 前,**必须**先校验目标 Skill 是否已安装且可用;**若不可用,立即中断流程**并提示用户到 Skill 市场安装对应 Skill,禁止以人工编写/其他 Skill 代替。
748
752
  - **Skill 调用为主**:技术方案生成主要通过 \`generate-tech-spec-md-skill\`(仅后端)或 \`generate-fullstack-tech-spec-skill\`(全栈)Skill 完成,而非直接运行 CLI 命令。
@@ -873,25 +877,7 @@ const designSteps = `**步骤**
873
877
  - **状态为 ⚠️ 的依赖**:必须说明兜底方案(如"ES 不可用时用 DB 查询兜底")
874
878
  - 该矩阵将被 propose/apply 阶段复用,作为 Subagent L1 上下文注入的根据
875
879
 
876
- 7.5. **测试 Case 生成(可选,选项式确认)**:
877
- - 使用 AskUserQuestion 询问用户是否需要基于当前技术方案生成测试 case:
878
- * header: "测试Case生成"
879
- * question: "技术方案已生成,是否需要基于当前方案生成测试 case?"
880
- * 选项 A:生成测试 case(推荐) → description: 调用 test-case-generator 技能,基于技术方案和需求文档自动生成测试用例,产出将用于后续 Propose 阶段的 TDD 流程
881
- * 选项 B:跳过,不生成 → description: 跳过测试 case 生成,后续 Propose 阶段仍可手动提供测试 case
882
- - 用户选择"生成测试 case":
883
- * 从 \`techDesign/tech-spec.md\` 的 \`## 文档信息\` 表格中提取"需求来源"字段(可能是 dashen URL 或飞书文档链接)
884
- * 调用 \`@skill:test-case-generator\` 技能:
885
- - 输入技术方案:\`techDesign/tech-spec.md\` 全文
886
- - 输入需求来源:提取到的 URL(skill 内部根据链接类型通过 dashen MCP / 飞书文档 API 读取需求正文)
887
- * 输出目录:\`changes/<change-id>/techDesign/\`(测试 case 源文件)
888
- * Skill 完成后,在 progress.json 的 events 字段追加:\`{ "event": "test-case-generated", "source": "test-case-generator", "timestamp": "<ISO>" }\`
889
- * ⚠️ **继续执行步骤 8(输出摘要),不得在此停留**
890
- - 用户选择"跳过":
891
- * 在 progress.json 的 events 字段追加:\`{ "event": "test-case-skipped", "timestamp": "<ISO>" }\`
892
- * 直接进入步骤 8
893
-
894
- 7.6. **涉及工程清单输出(阶段 6 定稿产物,必须生成)**:
880
+ 7.5. **涉及工程清单输出(阶段 6 定稿产物,必须生成)**:
895
881
  - 在技术方案定稿时,从 Skill 生成的 \`tech-spec.md\`、\`matched_services\` 和改动点定位结果中提取涉及工程
896
882
  - 输出到与技术方案同目录:
897
883
  \`zhuanspec/changes/{change-id}/techDesign/affected-projects.md\`
@@ -911,7 +897,6 @@ const designSteps = `**步骤**
911
897
  - 告知用户生成的文档路径和实际调用的 Skill 名称
912
898
  - 告知用户涉及工程清单路径:\`zhuanspec/changes/{change-id}/techDesign/affected-projects.md\`
913
899
  - **明确说明**:techDesign 阶段仅保存进度数据(progress.json)、技术方案(含外部依赖矩阵)和涉及工程清单,不创建 proposal.md 和 tasks.md
914
- - 如果步骤 7.5 生成了测试 case,额外提示:「✅ 已生成测试 case 源文件,后续 Propose 阶段将自动启用 TDD 模式并调用 tdd-testcase-generator 转换为研发 TDD testcase」
915
900
  - 提示 phase=techDesign
916
901
  - 提示下一步可以使用 \`/zhuanspec:proposal\` 创建变更提案(复用目录)`;
917
902
  const designReferences = `**参考**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zhuan-ai/zhuanspec",
3
- "version": "2.17.13",
3
+ "version": "2.17.14",
4
4
  "description": "AI-native system for spec-driven development",
5
5
  "keywords": [
6
6
  "zhuanspec",