@zhuan-ai/zhuanspec 2.16.6 → 2.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/hooks.js +10 -0
- package/dist/cli/index.js +4 -0
- package/dist/commands/knowledge.d.ts +12 -2
- package/dist/commands/knowledge.js +277 -3
- package/dist/core/hooks/context-load-hook.js +2 -0
- package/dist/core/hooks/knowledge-index.d.ts +54 -2
- package/dist/core/hooks/knowledge-index.js +247 -11
- package/dist/core/hooks/knowledge-usage.d.ts +61 -0
- package/dist/core/hooks/knowledge-usage.js +192 -0
- package/dist/core/hooks/post-archive.js +128 -29
- package/dist/core/hooks/review-hooks.js +198 -43
- package/dist/core/hooks/summarize.js +93 -1
- package/dist/core/hooks/user-input-hook.d.ts +12 -0
- package/dist/core/hooks/user-input-hook.js +38 -0
- package/dist/core/init.js +10 -0
- package/dist/core/metrics/knowledge-funnel.d.ts +49 -0
- package/dist/core/metrics/knowledge-funnel.js +135 -0
- package/dist/core/templates/agents-template.d.ts +1 -1
- package/dist/core/templates/agents-template.js +29 -10
- package/dist/core/templates/codex-hooks-template.js +5 -0
- package/dist/core/templates/slash-command-templates.js +91 -12
- package/package.json +22 -20
|
@@ -60,6 +60,11 @@ const CODEX_DEFAULT_HOOKS = [
|
|
|
60
60
|
command: 'ZHUANSPEC_HOST=codex zhuanspec-hook collect-knowledge --json',
|
|
61
61
|
statusMessage: '💡 Checking for knowledge to capture...',
|
|
62
62
|
},
|
|
63
|
+
{
|
|
64
|
+
event: 'PostToolUse',
|
|
65
|
+
matcher: 'Read|Grep|Glob',
|
|
66
|
+
command: 'ZHUANSPEC_HOST=codex zhuanspec-hook knowledge-usage --json',
|
|
67
|
+
},
|
|
63
68
|
{
|
|
64
69
|
event: 'Stop',
|
|
65
70
|
command: 'ZHUANSPEC_HOST=codex zhuanspec-hook summarize --json',
|
|
@@ -4,7 +4,7 @@ const baseGuardrails = `**约束条件**
|
|
|
4
4
|
- 将更改严格限制在请求的结果范围内。
|
|
5
5
|
- **工作区边界(强制)**:查找文档、检索工程代码、执行 grep/glob/ls 时,范围必须限定在当前 ZhuanSpec 工作区内。禁止使用 \`../**\`、上级目录绝对路径或手动拼接到工作区外路径。Glob 返回相对路径时,必须以本次工具调用的 \`path\` 参数作为基准拼接绝对路径,不得误解为当前目录或上级目录。
|
|
6
6
|
- **知识库参考**:开始任何阶段前,先检查 \`zhuanspec/knowledge/\` 目录。使用 \`rg "[关键词]" zhuanspec/knowledge/\` 搜索相关陷阱和最佳实践,避免重复踩坑。阅读 \`zhuanspec/knowledge/index.md\` 了解项目级知识摘要。
|
|
7
|
-
- **工程代码检索顺序**:凡是需要检索工程代码、配置类、数据模型类或关键实现位置时,必须先调用 \`@skill:load-project-knowledge\` 进行渐进式加载,使用返回的 search_priority
|
|
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
8
|
- 如果需要额外的 ZhuanSpec 约定或澄清,请参考 \`zhuanspec/AGENTS.md\`(位于 \`zhuanspec/\` 目录内 - 如果看不到,请运行 \`ls zhuanspec\` 或 \`zhuanspec update\`)。`;
|
|
9
9
|
const proposalGuardrails = `${baseGuardrails}\n- **强制澄清要求**:在创建任何提案文件之前,必须首先分析用户请求,识别所有不确定或模糊的方面(范围、技术选择、优先级、验收标准等)。如果发现任何模糊之处,必须停止并使用**选项式交互**(如 \`AskQuestion\` 工具)提问,获得明确答复后才能继续。严禁在不确定的情况下自行推测、假设或创建提案。严禁要求用户手动输入大段文字来回答澄清问题。
|
|
10
10
|
- 识别任何模糊或歧义的细节,使用带预设选项的选择题在编辑文件之前询问必要的后续问题。
|
|
@@ -64,6 +64,7 @@ const proposalSteps = `**步骤**
|
|
|
64
64
|
- **加载项目知识**:调用 \`@skill:load-project-knowledge\` 进行渐进式加载:
|
|
65
65
|
* 输入:domain(当前项目)、keywords(从需求描述提取)
|
|
66
66
|
* 获取:matched_services(涉及的服务列表)、search_priority(检索优先路径)、architecture_constraints(架构约束)
|
|
67
|
+
* **关注 Skill 返回值**:\`matched_services[].micro_path\` 指向各服务 \`.project-wiki/\` 下的知识条目,按需读取其子文档(Skill 内部无论走 llmwiki 还是 project.md 降级路径,最终内容均落在各服务的 \`.project-wiki/\`)
|
|
67
68
|
* 使用:后续代码定位使用 search_priority 限定范围,方案设计检查 architecture_constraints
|
|
68
69
|
- 审查 \`zhuanspec/project.md\`,运行 \`zhuanspec list\` 和 \`zhuanspec list --specs\`
|
|
69
70
|
- **工程代码检索**:使用 \`@skill:load-project-knowledge\` 返回的 search_priority 限定检索范围,按优先路径定位代码;仅当 Skill 无匹配结果时,才通过 \`rg\`/\`ls\`/\`glob\` 兆底。
|
|
@@ -84,7 +85,18 @@ const proposalSteps = `**步骤**
|
|
|
84
85
|
* 如果复用 techDesign 目录:运行 \`zhuanspec progress set-phase <change-id> propose\`
|
|
85
86
|
* 如果新建目录:目录创建时自动初始化 phase=propose
|
|
86
87
|
1. **测试 case 来源确认(最先执行,禁止跳过)**:
|
|
87
|
-
|
|
88
|
+
- **前置自动检测**:扫描 \`changes/<change-id>/techDesign/\` 目录下是否存在测试 case 源文件(检查 progress.json events 中是否有 \`event: "test-case-generated"\` 记录)
|
|
89
|
+
- **如果存在 techDesign 测试 case 源文件(自动 TDD 模式)**:
|
|
90
|
+
* 自动启用 TDD 模式,无需询问用户,输出提示:「✅ 检测到 techDesign 阶段已生成测试 case,自动启用 TDD 模式」
|
|
91
|
+
* 调用 \`@skill:tdd-testcase-generator\` 技能:
|
|
92
|
+
- 输入 qaTestCases:techDesign 目录下的测试 case 源文件内容
|
|
93
|
+
- 输入 technicalContext:\`techDesign/tech-spec.md\`(技术方案全文)
|
|
94
|
+
* Skill 输出的 TDD testcase 文件作为 test-cases.md 的来源
|
|
95
|
+
* 基于 tdd-testcase-generator 输出,创建 \`changes/<change-id>/test-cases.md\`
|
|
96
|
+
* tasks.md 中使用 \`@test-case:TC-XXX\` 标签关联(来源为 tdd-testcase-generator 输出的 TC 编号)
|
|
97
|
+
* ⚠️ Skill 完成后**继续步骤 2(澄清检查)**,不得停留
|
|
98
|
+
- **如果不存在 techDesign 测试 case 源文件(原流程)**:
|
|
99
|
+
在进行任何澄清、设计或编写任何提案文件之前,使用 AskQuestion 工具询问用户:
|
|
88
100
|
- 选项 A:提供测试 case(有现成 case,走 TDD 模式)
|
|
89
101
|
- 选项 B:暂不提供测试 case
|
|
90
102
|
- 选项 C:其他(请在后续补充说明)
|
|
@@ -744,6 +756,7 @@ const designSteps = `**步骤**
|
|
|
744
756
|
- **加载项目知识(必选)**:调用 \`@skill:load-project-knowledge\` 进行渐进式加载:
|
|
745
757
|
* 输入:domain(当前项目)、keywords(从需求描述提取的核心关键词)
|
|
746
758
|
* 获取:matched_services(涉及的服务列表)、search_priority(检索优先路径)、architecture_constraints(架构约束)
|
|
759
|
+
* **关注 Skill 返回值**:\`matched_services[].micro_path\` 指向各服务 \`.project-wiki/\` 下的知识条目,按需读取其子文档(Skill 内部无论走 llmwiki 还是 project.md 降级路径,最终内容均落在各服务的 \`.project-wiki/\`)
|
|
747
760
|
* 使用:后续技术方案设计需引用 matched_services 作为服务定位,方案设计需检查 architecture_constraints
|
|
748
761
|
* ⚠️ **连续性约束(红线)**:\`load-project-knowledge\` 完成并输出 matched_services 表后,**必须立即继续执行下面的“生成 change-id”子步骤以及步骤 1(Phase 初始化)**,禁止停顿等待用户输入“继续”。该 Skill 只是辅助加载,不是流程门禁。
|
|
749
762
|
- **生成 change-id**(与 proposal 阶段命名规则一致):
|
|
@@ -782,6 +795,7 @@ const designSteps = `**步骤**
|
|
|
782
795
|
- label: 仅后端开发 → description: 仅涉及后端服务/数据库/接口,无前端改动,将调用 generate-tech-spec-md-skill
|
|
783
796
|
- label: 全栈开发 → description: 同时涉及前端页面/组件与后端服务,将调用 generate-fullstack-tech-spec-skill
|
|
784
797
|
- 记录用户回答为 \`scope\`(backend 或 fullstack),作为下一步 Skill 路由依据。
|
|
798
|
+
- **持久化 scope 到 progress.json**:在 progress.json 的 events 字段追加 \`{ "event": "scope-confirmed", "scope": "backend"|"fullstack", "timestamp": "<ISO>" }\`,供后续 Review 阶段判断是否执行 UI 自动化测试。
|
|
785
799
|
- 用户选择 Other 时必须二次澄清,归类到 backend 或 fullstack之一,禁止模糊放行。
|
|
786
800
|
|
|
787
801
|
5. **Skill 可用性前置检查(硬约束,不可用则立即中断)**:
|
|
@@ -861,9 +875,28 @@ const designSteps = `**步骤**
|
|
|
861
875
|
- **状态为 ⚠️ 的依赖**:必须说明兜底方案(如"ES 不可用时用 DB 查询兜底")
|
|
862
876
|
- 该矩阵将被 propose/apply 阶段复用,作为 Subagent L1 上下文注入的根据
|
|
863
877
|
|
|
878
|
+
7.5. **测试 Case 生成(可选,选项式确认)**:
|
|
879
|
+
- 使用 AskUserQuestion 询问用户是否需要基于当前技术方案生成测试 case:
|
|
880
|
+
* header: "测试Case生成"
|
|
881
|
+
* question: "技术方案已生成,是否需要基于当前方案生成测试 case?"
|
|
882
|
+
* 选项 A:生成测试 case(推荐) → description: 调用 test-case-generator 技能,基于技术方案和需求文档自动生成测试用例,产出将用于后续 Propose 阶段的 TDD 流程
|
|
883
|
+
* 选项 B:跳过,不生成 → description: 跳过测试 case 生成,后续 Propose 阶段仍可手动提供测试 case
|
|
884
|
+
- 用户选择"生成测试 case":
|
|
885
|
+
* 从 \`techDesign/tech-spec.md\` 的 \`## 文档信息\` 表格中提取"需求来源"字段(可能是 dashen URL 或飞书文档链接)
|
|
886
|
+
* 调用 \`@skill:test-case-generator\` 技能:
|
|
887
|
+
- 输入技术方案:\`techDesign/tech-spec.md\` 全文
|
|
888
|
+
- 输入需求来源:提取到的 URL(skill 内部根据链接类型通过 dashen MCP / 飞书文档 API 读取需求正文)
|
|
889
|
+
* 输出目录:\`changes/<change-id>/techDesign/\`(测试 case 源文件)
|
|
890
|
+
* Skill 完成后,在 progress.json 的 events 字段追加:\`{ "event": "test-case-generated", "source": "test-case-generator", "timestamp": "<ISO>" }\`
|
|
891
|
+
* ⚠️ **继续执行步骤 8(输出摘要),不得在此停留**
|
|
892
|
+
- 用户选择"跳过":
|
|
893
|
+
* 在 progress.json 的 events 字段追加:\`{ "event": "test-case-skipped", "timestamp": "<ISO>" }\`
|
|
894
|
+
* 直接进入步骤 8
|
|
895
|
+
|
|
864
896
|
8. **输出摘要**:
|
|
865
897
|
- 告知用户生成的文档路径和实际调用的 Skill 名称
|
|
866
898
|
- **明确说明**:techDesign 阶段仅保存进度数据(progress.json)和技术方案(含外部依赖矩阵),不创建 proposal.md 和 tasks.md
|
|
899
|
+
- 如果步骤 7.5 生成了测试 case,额外提示:「✅ 已生成测试 case 源文件,后续 Propose 阶段将自动启用 TDD 模式并调用 tdd-testcase-generator 转换为研发 TDD testcase」
|
|
867
900
|
- 提示 phase=techDesign
|
|
868
901
|
- 提示下一步可以使用 \`/zhuanspec:proposal\` 创建变更提案(复用目录)`;
|
|
869
902
|
const designReferences = `**参考**
|
|
@@ -874,9 +907,9 @@ const designReferences = `**参考**
|
|
|
874
907
|
- Skill 输出包含:背景、目标、决策、风险、迁移计划、Mermaid 图表等完整技术方案结构
|
|
875
908
|
- 数据库表变更场景必须输出 CREATE TABLE / ALTER TABLE DDL;前后端交互接口必须输出伪代码与输入/输出参数字段结构
|
|
876
909
|
- 使用 \`zhuanspec techDesign --help\` 查看 CLI 命令选项(用于生成请求文档或验证现有设计)`;
|
|
877
|
-
const reviewGuardrails = `${baseGuardrails}\n- **门禁审查阶段**:review
|
|
878
|
-
-
|
|
879
|
-
-
|
|
910
|
+
const reviewGuardrails = `${baseGuardrails}\n- **门禁审查阶段**:review 命令用于执行最多六轨顺序串行校验并汇总结论。
|
|
911
|
+
- **最多六轨顺序串行(严格按序)**:轨道 1 Spec-Code 一致性 → 轨道 2 Unit Test(Skill)→ 轨道 3 Code Review(Skill)→ 轨道 4 功能闭环验收 → 轨道 5 接口自动化测试(条件触发,可跳过)→ 轨道 6 UI 自动化测试(仅全栈,条件触发,可跳过)。**禁止并行**,后一轨必须在前一轨完成后才可启动。
|
|
912
|
+
- **强制审查**:所有变更在归档前必须顺序通过前四轨门禁,确保规范对齐、测试覆盖、代码质量与功能闭环。轨道 5/6 为可选增强轨道,跳过不阻断归档。
|
|
880
913
|
- **Skill 硬约束(红线)**:
|
|
881
914
|
- 轨道 2 必须使用 Skill 工具调用 \`generate-mockito-unit-test\`,轨道 3 必须使用 Skill 工具调用 \`code-review-expert\`。
|
|
882
915
|
- **禁止以任何形式的人工快速审阅/人工总结代替 Skill 调用**。
|
|
@@ -927,7 +960,7 @@ const reviewSteps = `**步骤**
|
|
|
927
960
|
- \`progress.phaseDurations\` 必须关闭 apply 段并开启 review 段
|
|
928
961
|
- 三者任一缺失,说明 set-phase 未生效,必须排查后重试,禁止继续
|
|
929
962
|
|
|
930
|
-
2.
|
|
963
|
+
2. **执行最多六轨顺序串行校验(强制前四轨 + 可选后两轨)**:按 2.1 → 2.2 → 2.3 → 2.4 → 2.5 → 2.6 顺序逐轨执行,**禁止并行**,前一轨未完成禁止启动后一轨。
|
|
931
964
|
|
|
932
965
|
**2.1 轨道 1 — Spec-Code 一致性轨**
|
|
933
966
|
- 进入条件:Phase 已切换为 review。
|
|
@@ -998,27 +1031,73 @@ const reviewSteps = `**步骤**
|
|
|
998
1031
|
\`\`\`
|
|
999
1032
|
- 退出条件:\`overallStatus === "PASS"\` 且 \`skeletonCodeCount === 0\` 且 所有 \`closureStatus[i].closed === true\`。存在未闭环功能或占位代码→ FAIL,阻断归档。
|
|
1000
1033
|
|
|
1034
|
+
**2.5 轨道 5 — 接口自动化测试(条件触发,可跳过)**
|
|
1035
|
+
- 进入条件:2.4 已 PASS。
|
|
1036
|
+
- **前置审查**:读取 \`changes/<change-id>/tasks.md\`,检查是否涉及接口改动(关键词:SCF接口、API、RPC、HTTP接口、新增接口、修改接口、接口方法、@ServiceContract)。
|
|
1037
|
+
- **不涉及接口改动**:跳过本轨道,直接进入 2.6。记录 \`{ "executed": false, "skipReason": "无接口改动", "result": "SKIPPED" }\`。
|
|
1038
|
+
- **涉及接口改动**:使用 AskUserQuestion 询问用户:
|
|
1039
|
+
* header: "接口自动化"
|
|
1040
|
+
* question: "检测到本次变更涉及接口改动,是否执行接口自动化测试?"
|
|
1041
|
+
* 选项 A:执行接口自动化测试(推荐) → description: 调用 api-test-flow 技能执行接口自动化验证
|
|
1042
|
+
* 选项 B:跳过 → description: 不执行接口自动化测试,直接进入下一轨道
|
|
1043
|
+
- 用户选择"执行":
|
|
1044
|
+
* 调用 \`@skill:api-test-flow\` 技能
|
|
1045
|
+
* Skill 完成后,将结果记录到 \`review/api-test-result.json\`
|
|
1046
|
+
* ⚠️ **返回 review 流程,继续进入 2.6**
|
|
1047
|
+
- 用户选择"跳过":
|
|
1048
|
+
* 记录跳过原因,继续进入 2.6
|
|
1049
|
+
- 产物落盘:\`zhuanspec/changes/<id>/review/api-test-result.json\`,格式:
|
|
1050
|
+
\`\`\`json
|
|
1051
|
+
{ "executed": true/false, "skipReason": "...", "result": "PASS/FAIL/SKIPPED" }
|
|
1052
|
+
\`\`\`
|
|
1053
|
+
- 退出条件:记录完成即可进入 2.6(本轨道 FAIL 不阻断后续,但需记录)。
|
|
1054
|
+
|
|
1055
|
+
**2.6 轨道 6 — UI 自动化测试(仅全栈流程,条件触发,可跳过)**
|
|
1056
|
+
- 进入条件:2.5 已完成(PASS 或 SKIPPED)。
|
|
1057
|
+
- **前置判断**:检查 techDesign 阶段确认的开发范围:
|
|
1058
|
+
* 读取 \`changes/<change-id>/metrics/progress.json\` 的 events 字段,查找 \`event: "scope-confirmed"\` 记录
|
|
1059
|
+
* 或读取 \`changes/<change-id>/techDesign/tech-spec.md\` 判断是否为全栈技术方案(包含前端页面/组件设计章节)
|
|
1060
|
+
- **非全栈开发(scope !== "fullstack")**:跳过本轨道,直接进入步骤 3。记录 \`{ "executed": false, "skipReason": "非全栈开发流程", "result": "SKIPPED" }\`。
|
|
1061
|
+
- **全栈开发**:使用 AskUserQuestion 询问用户:
|
|
1062
|
+
* header: "UI自动化"
|
|
1063
|
+
* question: "当前为全栈开发流程,是否执行 UI 自动化测试?"
|
|
1064
|
+
* 选项 A:执行 UI 自动化测试(推荐) → description: 调用 zz_webui_test 技能从 ZZCase 同步用例并执行浏览器 UI 自动化测试
|
|
1065
|
+
* 选项 B:跳过 → description: 不执行 UI 自动化测试,直接进入汇总阶段
|
|
1066
|
+
- 用户选择"执行":
|
|
1067
|
+
* 调用 \`@skill:zz_webui_test\` 技能
|
|
1068
|
+
* Skill 完成后,将结果记录到 \`review/ui-test-result.json\`
|
|
1069
|
+
* ⚠️ **返回 review 流程,继续进入步骤 3**
|
|
1070
|
+
- 用户选择"跳过":
|
|
1071
|
+
* 记录跳过原因,继续进入步骤 3
|
|
1072
|
+
- 产物落盘:\`zhuanspec/changes/<id>/review/ui-test-result.json\`,格式:
|
|
1073
|
+
\`\`\`json
|
|
1074
|
+
{ "executed": true/false, "skipReason": "...", "result": "PASS/FAIL/SKIPPED" }
|
|
1075
|
+
\`\`\`
|
|
1076
|
+
- 退出条件:记录完成即可进入步骤 3(本轨道 FAIL 不阻断归档,但需记录)。
|
|
1077
|
+
|
|
1001
1078
|
3. **汇总执行 CLI Review**:
|
|
1002
|
-
-
|
|
1079
|
+
- 前四轨均 PASS 且轨道 5/6 已完成(PASS 或 SKIPPED)后运行 \`zhuanspec review <change-id>\`。
|
|
1003
1080
|
- CLI 依次校验四份 JSON 的存在性、\`code-review-result.json\` 的 \`skillReportPath\` 文件是否真实存在、\`unit-test-result.json\` 的 \`newTestsGenerated\`/\`skipReason\` 是否齐备、\`closure-check-result.json\` 的 \`overallStatus\` 是否为 PASS;任一不满足即报错退出,并要求重新调用对应 Skill 或修复代码。
|
|
1004
1081
|
- 全部通过时生成 \`zhuanspec/changes/<id>/review/review-report.md\`。
|
|
1005
1082
|
4. **审查结果处理**:
|
|
1006
|
-
- **PASS
|
|
1083
|
+
- **PASS**:前四轨顺序全部通过(Spec-Code → UT → CR → Closure)且 Critical=0、skeletonCodeCount=0、无未闭环功能,可以继续归档。
|
|
1007
1084
|
- **FAIL**:根据 CLI 输出定位失败轨,返回对应子步骤(2.1/2.2/2.3/2.4)继续修复。
|
|
1008
1085
|
5. **修复循环**(整体失败时):
|
|
1009
1086
|
- 按失败轨所在子步骤的自闭环修复流程处理;每轨内部最多 3 轮,超限则停止并向用户报告。
|
|
1010
1087
|
- 修复完成后重新从失败轨开始顺序执行,而非重置整个 Review。
|
|
1011
1088
|
6. **确认通过后**:
|
|
1012
|
-
-
|
|
1089
|
+
- 告知用户审查已通过(最多六轨顺序串行 + CLI 汇总)。
|
|
1013
1090
|
- 提示可以使用 \`/zhuanspec:archive\` 进行归档。`;
|
|
1014
1091
|
const reviewReferences = `**参考**
|
|
1015
1092
|
- 使用 \`zhuanspec review --help\` 查看完整选项
|
|
1016
|
-
- 审查执行顺序:轨道 1 Spec-Code → 轨道 2 Unit Test(Skill)→ 轨道 3 Code Review(Skill)→ 轨道 4
|
|
1017
|
-
- 审查报告文件均位于 \`zhuanspec/changes/<id>/review/\` 目录下:\`spec-consistency-result.json\`、\`unit-test-result.json\`、\`code-review-result.json\`、\`closure-check-result.json\`、\`review-report.md\`
|
|
1093
|
+
- 审查执行顺序:轨道 1 Spec-Code → 轨道 2 Unit Test(Skill)→ 轨道 3 Code Review(Skill)→ 轨道 4 功能闭环验收 → 轨道 5 接口自动化(条件触发)→ 轨道 6 UI 自动化(条件触发),禁止并行
|
|
1094
|
+
- 审查报告文件均位于 \`zhuanspec/changes/<id>/review/\` 目录下:\`spec-consistency-result.json\`、\`unit-test-result.json\`、\`code-review-result.json\`、\`closure-check-result.json\`、\`api-test-result.json\`(可选)、\`ui-test-result.json\`(可选)、\`review-report.md\`
|
|
1018
1095
|
- 单元测试覆盖率阈值默认 80%,可通过 \`--coverage-threshold\` 调整
|
|
1019
1096
|
- \`generate-mockito-unit-test\` Skill 结果由 AI 写入 \`unit-test-result.json\`(必须登记 \`newTestsGenerated\` 或 \`skipReason\`)
|
|
1020
1097
|
- \`code-review-expert\` Skill 结果由 AI 写入 \`code-review-result.json\`(必须登记 \`skillReportPath\`,指向 Skill 生成的 \`doc/code-review-*.md\` 报告)
|
|
1021
|
-
- 轨道 4 闭环检查结果由 AI 写入 \`closure-check-result.json\`,要求 \`overallStatus = PASS\` 且 \`skeletonCodeCount = 0
|
|
1098
|
+
- 轨道 4 闭环检查结果由 AI 写入 \`closure-check-result.json\`,要求 \`overallStatus = PASS\` 且 \`skeletonCodeCount = 0\`
|
|
1099
|
+
- 轨道 5 接口自动化:\`api-test-flow\` Skill 结果写入 \`api-test-result.json\`,仅涉及接口改动时触发
|
|
1100
|
+
- 轨道 6 UI 自动化:\`zz_webui_test\` Skill 结果写入 \`ui-test-result.json\`,仅全栈开发流程时触发`;
|
|
1022
1101
|
const knowledgeGuardrails = `${baseGuardrails}
|
|
1023
1102
|
- **知识管理阶段**:knowledge 命令用于管理项目级知识库。**只保留三类目录**:\`troubleshooting/\`(踩坑/bug/错误做法)、\`best-practices/\`(可复用的最佳实践、设计决策落地)、\`implicit-conventions/\`(隐式约定、默认行为、团队惯例)。**禁止新建其他分类目录**(如 decisions/、architecture/ 等)。
|
|
1024
1103
|
- **跨变更积累**:知识不绑定单个变更,是长期积累的项目资产。
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zhuan-ai/zhuanspec",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.17.0",
|
|
4
4
|
"description": "AI-native system for spec-driven development",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"zhuanspec",
|
|
@@ -39,6 +39,26 @@
|
|
|
39
39
|
"!dist/**/__tests__",
|
|
40
40
|
"!dist/**/*.map"
|
|
41
41
|
],
|
|
42
|
+
"scripts": {
|
|
43
|
+
"lint": "eslint src/",
|
|
44
|
+
"build": "node build.js",
|
|
45
|
+
"dev": "tsc --watch",
|
|
46
|
+
"dev:cli": "pnpm build && node bin/zhuanspec.js",
|
|
47
|
+
"test": "vitest run",
|
|
48
|
+
"test:watch": "vitest",
|
|
49
|
+
"test:ui": "vitest --ui",
|
|
50
|
+
"test:coverage": "vitest --coverage",
|
|
51
|
+
"test:postinstall": "node scripts/postinstall.js",
|
|
52
|
+
"prepare": "npm run build",
|
|
53
|
+
"prepublishOnly": "npm run build",
|
|
54
|
+
"postinstall": "node scripts/postinstall.js",
|
|
55
|
+
"check:pack-version": "node scripts/pack-version-check.mjs",
|
|
56
|
+
"diagnose:cursor": "node scripts/diagnose-cursor-commands.js",
|
|
57
|
+
"release": "pnpm run release:ci",
|
|
58
|
+
"release:ci": "pnpm run check:pack-version && pnpm exec changeset publish",
|
|
59
|
+
"release:local": "pnpm exec changeset version && pnpm run check:pack-version && pnpm exec changeset publish",
|
|
60
|
+
"changeset": "changeset"
|
|
61
|
+
},
|
|
42
62
|
"engines": {
|
|
43
63
|
"node": ">=20.19.0"
|
|
44
64
|
},
|
|
@@ -60,23 +80,5 @@
|
|
|
60
80
|
"ora": "^8.2.0",
|
|
61
81
|
"yaml": "^2.8.2",
|
|
62
82
|
"zod": "^4.0.17"
|
|
63
|
-
},
|
|
64
|
-
"scripts": {
|
|
65
|
-
"lint": "eslint src/",
|
|
66
|
-
"build": "node build.js",
|
|
67
|
-
"dev": "tsc --watch",
|
|
68
|
-
"dev:cli": "pnpm build && node bin/zhuanspec.js",
|
|
69
|
-
"test": "vitest run",
|
|
70
|
-
"test:watch": "vitest",
|
|
71
|
-
"test:ui": "vitest --ui",
|
|
72
|
-
"test:coverage": "vitest --coverage",
|
|
73
|
-
"test:postinstall": "node scripts/postinstall.js",
|
|
74
|
-
"postinstall": "node scripts/postinstall.js",
|
|
75
|
-
"check:pack-version": "node scripts/pack-version-check.mjs",
|
|
76
|
-
"diagnose:cursor": "node scripts/diagnose-cursor-commands.js",
|
|
77
|
-
"release": "pnpm run release:ci",
|
|
78
|
-
"release:ci": "pnpm run check:pack-version && pnpm exec changeset publish",
|
|
79
|
-
"release:local": "pnpm exec changeset version && pnpm run check:pack-version && pnpm exec changeset publish",
|
|
80
|
-
"changeset": "changeset"
|
|
81
83
|
}
|
|
82
|
-
}
|
|
84
|
+
}
|