@nova286/nova-workflow 2.1.1 → 2.2.2
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 +113 -36
- package/dist/cli/commands/init.js +3 -1
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/index.js +6 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli-core/__tests__/context-generator.test.js +31 -0
- package/dist/cli-core/__tests__/context-generator.test.js.map +1 -1
- package/dist/cli-core/__tests__/dispatcher.test.js +22 -0
- package/dist/cli-core/__tests__/dispatcher.test.js.map +1 -1
- package/dist/cli-core/__tests__/guard.test.js +41 -1
- package/dist/cli-core/__tests__/guard.test.js.map +1 -1
- package/dist/cli-core/__tests__/init-manager.test.js +77 -20
- package/dist/cli-core/__tests__/init-manager.test.js.map +1 -1
- package/dist/cli-core/__tests__/pipeline.test.js +22 -0
- package/dist/cli-core/__tests__/pipeline.test.js.map +1 -1
- package/dist/cli-core/adapters/claude-code.d.ts +5 -3
- package/dist/cli-core/adapters/claude-code.js +90 -42
- package/dist/cli-core/adapters/claude-code.js.map +1 -1
- package/dist/cli-core/adapters/codex.js +25 -19
- package/dist/cli-core/adapters/codex.js.map +1 -1
- package/dist/cli-core/adapters/hermes-agent.js +25 -19
- package/dist/cli-core/adapters/hermes-agent.js.map +1 -1
- package/dist/cli-core/adapters/openclaw.js +25 -19
- package/dist/cli-core/adapters/openclaw.js.map +1 -1
- package/dist/cli-core/adapters/opencode.js +25 -19
- package/dist/cli-core/adapters/opencode.js.map +1 -1
- package/dist/cli-core/context-generator.js +44 -2
- package/dist/cli-core/context-generator.js.map +1 -1
- package/dist/cli-core/guard.js +4 -0
- package/dist/cli-core/guard.js.map +1 -1
- package/dist/cli-core/init-manager.d.ts +3 -0
- package/dist/cli-core/init-manager.js +43 -4
- package/dist/cli-core/init-manager.js.map +1 -1
- package/dist/cli-core/quality-check.d.ts +1 -0
- package/dist/cli-core/quality-check.js +23 -0
- package/dist/cli-core/quality-check.js.map +1 -1
- package/dist/cli-core/types.d.ts +46 -1
- package/package.json +1 -1
|
@@ -39,7 +39,8 @@ const path = __importStar(require("path"));
|
|
|
39
39
|
const HERMES_INSTRUCTIONS = `# Nova Workflow
|
|
40
40
|
|
|
41
41
|
This project uses Nova — an AI-assisted development workflow with 5 phases.
|
|
42
|
-
|
|
42
|
+
Nova orchestrates OpenSpec-compatible specs, Superpowers-compatible execution,
|
|
43
|
+
and ECC-compatible review. All state is in \`.nova.yaml\`. Always read it first.
|
|
43
44
|
|
|
44
45
|
## How to Use
|
|
45
46
|
|
|
@@ -50,37 +51,41 @@ All state is in \`.nova.yaml\`. Always read it first.
|
|
|
50
51
|
|
|
51
52
|
### Phase 1: Propose (提案)
|
|
52
53
|
\`\`\`
|
|
53
|
-
帮我为"{你的需求描述}"
|
|
54
|
+
帮我为"{你的需求描述}"创建 OpenSpec-compatible change。
|
|
54
55
|
1. 先读 .nova.yaml 和已有代码了解项目
|
|
55
56
|
2. 问 3-4 个澄清问题
|
|
56
|
-
3. 写入
|
|
57
|
-
4. 更新 .nova.yaml: phases.propose.status = done
|
|
57
|
+
3. 写入 .openspec/changes/<change-id>/proposal.md 和 specs
|
|
58
|
+
4. 更新 .nova.yaml: activeChange, artifacts.*, phases.propose.status = done
|
|
58
59
|
\`\`\`
|
|
59
60
|
|
|
60
61
|
### Phase 2: Design (设计)
|
|
61
62
|
\`\`\`
|
|
62
|
-
读取
|
|
63
|
-
1. 读 proposal 和 src/ 了解架构
|
|
64
|
-
2. 写入 docs/designs/design.md
|
|
65
|
-
3.
|
|
63
|
+
读取 activeChange 对应的 OpenSpec-compatible change,生成执行计划。
|
|
64
|
+
1. 读 proposal/spec delta 和 src/ 了解架构
|
|
65
|
+
2. 写入 docs/designs/design.md 和 docs/superpowers/plans/<change>.md
|
|
66
|
+
3. 任务必须包含 method, specRefs, acceptanceRefs, verification.commands
|
|
67
|
+
4. 更新 .nova.yaml: phases.design.status = done, tasks = 解析后的列表
|
|
66
68
|
\`\`\`
|
|
67
69
|
|
|
68
70
|
### Phase 3: Implement (实现)
|
|
69
71
|
\`\`\`
|
|
70
|
-
读取 .nova.yaml 中的 tasks,逐个实现:
|
|
71
|
-
1. 按 priority 排序执行
|
|
72
|
-
2.
|
|
73
|
-
3.
|
|
74
|
-
4.
|
|
72
|
+
读取 .nova.yaml 中的 spec-bound tasks,逐个实现:
|
|
73
|
+
1. 按 priority/dependency 排序执行
|
|
74
|
+
2. 每个任务先解析 specRefs/acceptanceRefs/method
|
|
75
|
+
3. method=tdd 时先写失败测试,再实现,再重构
|
|
76
|
+
4. 跑 verification.commands,记录 tests/filesChanged/traceIds evidence
|
|
77
|
+
5. 失败时问用户:abort / skip / retry
|
|
78
|
+
6. 全部完成后更新 phases.implement.status = done
|
|
75
79
|
\`\`\`
|
|
76
80
|
|
|
77
81
|
### Phase 4: Verify (验证)
|
|
78
82
|
\`\`\`
|
|
79
|
-
对已修改的文件做 code review + security review:
|
|
80
|
-
1.
|
|
81
|
-
2.
|
|
82
|
-
3.
|
|
83
|
-
4.
|
|
83
|
+
对已修改的文件做 spec conformance + code review + security review:
|
|
84
|
+
1. Spec conformance: evidence 是否覆盖 specRefs/acceptanceRefs
|
|
85
|
+
2. Code review: 正确性、错误处理、类型安全、测试覆盖
|
|
86
|
+
3. Security review: 注入、密钥暴露、路径遍历
|
|
87
|
+
4. 写入 docs/reports/verification-report.md
|
|
88
|
+
5. 更新 phases.verify.status = done
|
|
84
89
|
\`\`\`
|
|
85
90
|
|
|
86
91
|
### Phase 5: Archive (归档)
|
|
@@ -91,7 +96,8 @@ All state is in \`.nova.yaml\`. Always read it first.
|
|
|
91
96
|
## Key Rules
|
|
92
97
|
|
|
93
98
|
- Always read \`.nova.yaml\` before any action
|
|
94
|
-
- After each task, run
|
|
99
|
+
- After each task, run task verification commands, then project checks when needed
|
|
100
|
+
- Do not mark a task done without spec/acceptance evidence
|
|
95
101
|
- Never leave TODOs or stubs
|
|
96
102
|
- Update \`.nova.yaml\` status after each phase transition
|
|
97
103
|
`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hermes-agent.js","sourceRoot":"","sources":["../../../src/cli-core/adapters/hermes-agent.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAkC;AAClC,2CAA6B;AAG7B,MAAM,mBAAmB,GAAG
|
|
1
|
+
{"version":3,"file":"hermes-agent.js","sourceRoot":"","sources":["../../../src/cli-core/adapters/hermes-agent.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAkC;AAClC,2CAA6B;AAG7B,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgE3B,CAAC;AAEF,MAAa,kBAAkB;IAA/B;QACE,SAAI,GAAG,cAAc,CAAC;IAUxB,CAAC;IARC,KAAK,CAAC,KAAK,CAAC,GAAW;QACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAC7C,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC1B,OAAO;QACT,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QACV,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,mBAAmB,EAAE,OAAO,CAAC,CAAC;IAC7D,CAAC;CACF;AAXD,gDAWC"}
|
|
@@ -39,7 +39,8 @@ const path = __importStar(require("path"));
|
|
|
39
39
|
const OPENCLAW_INSTRUCTIONS = `# Nova Workflow
|
|
40
40
|
|
|
41
41
|
This project uses Nova — an AI-assisted development workflow with 5 phases.
|
|
42
|
-
|
|
42
|
+
Nova orchestrates OpenSpec-compatible specs, Superpowers-compatible execution,
|
|
43
|
+
and ECC-compatible review. All state is in \`.nova.yaml\`. Always read it first.
|
|
43
44
|
|
|
44
45
|
## How to Use
|
|
45
46
|
|
|
@@ -50,37 +51,41 @@ All state is in \`.nova.yaml\`. Always read it first.
|
|
|
50
51
|
|
|
51
52
|
### Phase 1: Propose (提案)
|
|
52
53
|
\`\`\`
|
|
53
|
-
帮我为"{你的需求描述}"
|
|
54
|
+
帮我为"{你的需求描述}"创建 OpenSpec-compatible change。
|
|
54
55
|
1. 先读 .nova.yaml 和已有代码了解项目
|
|
55
56
|
2. 问 3-4 个澄清问题
|
|
56
|
-
3. 写入
|
|
57
|
-
4. 更新 .nova.yaml: phases.propose.status = done
|
|
57
|
+
3. 写入 .openspec/changes/<change-id>/proposal.md 和 specs
|
|
58
|
+
4. 更新 .nova.yaml: activeChange, artifacts.*, phases.propose.status = done
|
|
58
59
|
\`\`\`
|
|
59
60
|
|
|
60
61
|
### Phase 2: Design (设计)
|
|
61
62
|
\`\`\`
|
|
62
|
-
读取
|
|
63
|
-
1. 读 proposal 和 src/ 了解架构
|
|
64
|
-
2. 写入 docs/designs/design.md
|
|
65
|
-
3.
|
|
63
|
+
读取 activeChange 对应的 OpenSpec-compatible change,生成执行计划。
|
|
64
|
+
1. 读 proposal/spec delta 和 src/ 了解架构
|
|
65
|
+
2. 写入 docs/designs/design.md 和 docs/superpowers/plans/<change>.md
|
|
66
|
+
3. 任务必须包含 method, specRefs, acceptanceRefs, verification.commands
|
|
67
|
+
4. 更新 .nova.yaml: phases.design.status = done, tasks = 解析后的列表
|
|
66
68
|
\`\`\`
|
|
67
69
|
|
|
68
70
|
### Phase 3: Implement (实现)
|
|
69
71
|
\`\`\`
|
|
70
|
-
读取 .nova.yaml 中的 tasks,逐个实现:
|
|
71
|
-
1. 按 priority 排序执行
|
|
72
|
-
2.
|
|
73
|
-
3.
|
|
74
|
-
4.
|
|
72
|
+
读取 .nova.yaml 中的 spec-bound tasks,逐个实现:
|
|
73
|
+
1. 按 priority/dependency 排序执行
|
|
74
|
+
2. 每个任务先解析 specRefs/acceptanceRefs/method
|
|
75
|
+
3. method=tdd 时先写失败测试,再实现,再重构
|
|
76
|
+
4. 跑 verification.commands,记录 tests/filesChanged/traceIds evidence
|
|
77
|
+
5. 失败时问用户:abort / skip / retry
|
|
78
|
+
6. 全部完成后更新 phases.implement.status = done
|
|
75
79
|
\`\`\`
|
|
76
80
|
|
|
77
81
|
### Phase 4: Verify (验证)
|
|
78
82
|
\`\`\`
|
|
79
|
-
对已修改的文件做 code review + security review:
|
|
80
|
-
1.
|
|
81
|
-
2.
|
|
82
|
-
3.
|
|
83
|
-
4.
|
|
83
|
+
对已修改的文件做 spec conformance + code review + security review:
|
|
84
|
+
1. Spec conformance: evidence 是否覆盖 specRefs/acceptanceRefs
|
|
85
|
+
2. Code review: 正确性、错误处理、类型安全、测试覆盖
|
|
86
|
+
3. Security review: 注入、密钥暴露、路径遍历
|
|
87
|
+
4. 写入 docs/reports/verification-report.md
|
|
88
|
+
5. 更新 phases.verify.status = done
|
|
84
89
|
\`\`\`
|
|
85
90
|
|
|
86
91
|
### Phase 5: Archive (归档)
|
|
@@ -91,7 +96,8 @@ All state is in \`.nova.yaml\`. Always read it first.
|
|
|
91
96
|
## Key Rules
|
|
92
97
|
|
|
93
98
|
- Always read \`.nova.yaml\` before any action
|
|
94
|
-
- After each task, run
|
|
99
|
+
- After each task, run task verification commands, then project checks when needed
|
|
100
|
+
- Do not mark a task done without spec/acceptance evidence
|
|
95
101
|
- Never leave TODOs or stubs
|
|
96
102
|
- Update \`.nova.yaml\` status after each phase transition
|
|
97
103
|
`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openclaw.js","sourceRoot":"","sources":["../../../src/cli-core/adapters/openclaw.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAkC;AAClC,2CAA6B;AAG7B,MAAM,qBAAqB,GAAG
|
|
1
|
+
{"version":3,"file":"openclaw.js","sourceRoot":"","sources":["../../../src/cli-core/adapters/openclaw.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAkC;AAClC,2CAA6B;AAG7B,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgE7B,CAAC;AAEF,MAAa,eAAe;IAA5B;QACE,SAAI,GAAG,UAAU,CAAC;IAYpB,CAAC;IAVC,KAAK,CAAC,KAAK,CAAC,GAAW;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QACxC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;QACnD,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC1B,OAAO;QACT,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QACV,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,qBAAqB,EAAE,OAAO,CAAC,CAAC;IAC/D,CAAC;CACF;AAbD,0CAaC"}
|
|
@@ -39,7 +39,8 @@ const path = __importStar(require("path"));
|
|
|
39
39
|
const OPENCODE_INSTRUCTIONS = `# Nova Workflow
|
|
40
40
|
|
|
41
41
|
This project uses Nova — an AI-assisted development workflow with 5 phases.
|
|
42
|
-
|
|
42
|
+
Nova orchestrates OpenSpec-compatible specs, Superpowers-compatible execution,
|
|
43
|
+
and ECC-compatible review. All state is in \`.nova.yaml\`. Always read it first.
|
|
43
44
|
|
|
44
45
|
## How to Use
|
|
45
46
|
|
|
@@ -50,37 +51,41 @@ All state is in \`.nova.yaml\`. Always read it first.
|
|
|
50
51
|
|
|
51
52
|
### Phase 1: Propose (提案)
|
|
52
53
|
\`\`\`
|
|
53
|
-
帮我为"{你的需求描述}"
|
|
54
|
+
帮我为"{你的需求描述}"创建 OpenSpec-compatible change。
|
|
54
55
|
1. 先读 .nova.yaml 和已有代码了解项目
|
|
55
56
|
2. 问 3-4 个澄清问题
|
|
56
|
-
3. 写入
|
|
57
|
-
4. 更新 .nova.yaml: phases.propose.status = done
|
|
57
|
+
3. 写入 .openspec/changes/<change-id>/proposal.md 和 specs
|
|
58
|
+
4. 更新 .nova.yaml: activeChange, artifacts.*, phases.propose.status = done
|
|
58
59
|
\`\`\`
|
|
59
60
|
|
|
60
61
|
### Phase 2: Design (设计)
|
|
61
62
|
\`\`\`
|
|
62
|
-
读取
|
|
63
|
-
1. 读 proposal 和 src/ 了解架构
|
|
64
|
-
2. 写入 docs/designs/design.md
|
|
65
|
-
3.
|
|
63
|
+
读取 activeChange 对应的 OpenSpec-compatible change,生成执行计划。
|
|
64
|
+
1. 读 proposal/spec delta 和 src/ 了解架构
|
|
65
|
+
2. 写入 docs/designs/design.md 和 docs/superpowers/plans/<change>.md
|
|
66
|
+
3. 任务必须包含 method, specRefs, acceptanceRefs, verification.commands
|
|
67
|
+
4. 更新 .nova.yaml: phases.design.status = done, tasks = 解析后的列表
|
|
66
68
|
\`\`\`
|
|
67
69
|
|
|
68
70
|
### Phase 3: Implement (实现)
|
|
69
71
|
\`\`\`
|
|
70
|
-
读取 .nova.yaml 中的 tasks,逐个实现:
|
|
71
|
-
1. 按 priority 排序执行
|
|
72
|
-
2.
|
|
73
|
-
3.
|
|
74
|
-
4.
|
|
72
|
+
读取 .nova.yaml 中的 spec-bound tasks,逐个实现:
|
|
73
|
+
1. 按 priority/dependency 排序执行
|
|
74
|
+
2. 每个任务先解析 specRefs/acceptanceRefs/method
|
|
75
|
+
3. method=tdd 时先写失败测试,再实现,再重构
|
|
76
|
+
4. 跑 verification.commands,记录 tests/filesChanged/traceIds evidence
|
|
77
|
+
5. 失败时问用户:abort / skip / retry
|
|
78
|
+
6. 全部完成后更新 phases.implement.status = done
|
|
75
79
|
\`\`\`
|
|
76
80
|
|
|
77
81
|
### Phase 4: Verify (验证)
|
|
78
82
|
\`\`\`
|
|
79
|
-
对已修改的文件做 code review + security review:
|
|
80
|
-
1.
|
|
81
|
-
2.
|
|
82
|
-
3.
|
|
83
|
-
4.
|
|
83
|
+
对已修改的文件做 spec conformance + code review + security review:
|
|
84
|
+
1. Spec conformance: evidence 是否覆盖 specRefs/acceptanceRefs
|
|
85
|
+
2. Code review: 正确性、错误处理、类型安全、测试覆盖
|
|
86
|
+
3. Security review: 注入、密钥暴露、路径遍历
|
|
87
|
+
4. 写入 docs/reports/verification-report.md
|
|
88
|
+
5. 更新 phases.verify.status = done
|
|
84
89
|
\`\`\`
|
|
85
90
|
|
|
86
91
|
### Phase 5: Archive (归档)
|
|
@@ -91,7 +96,8 @@ All state is in \`.nova.yaml\`. Always read it first.
|
|
|
91
96
|
## Key Rules
|
|
92
97
|
|
|
93
98
|
- Always read \`.nova.yaml\` before any action
|
|
94
|
-
- After each task, run
|
|
99
|
+
- After each task, run task verification commands, then project checks when needed
|
|
100
|
+
- Do not mark a task done without spec/acceptance evidence
|
|
95
101
|
- Never leave TODOs or stubs
|
|
96
102
|
- Update \`.nova.yaml\` status after each phase transition
|
|
97
103
|
`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../../src/cli-core/adapters/opencode.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAkC;AAClC,2CAA6B;AAG7B,MAAM,qBAAqB,GAAG
|
|
1
|
+
{"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../../src/cli-core/adapters/opencode.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAkC;AAClC,2CAA6B;AAG7B,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgE7B,CAAC;AAEF,MAAa,eAAe;IAA5B;QACE,SAAI,GAAG,UAAU,CAAC;IAapB,CAAC;IAXC,KAAK,CAAC,KAAK,CAAC,GAAW;QACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;QACjD,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC1B,OAAO,CAAC,kCAAkC;QAC5C,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QACV,MAAM,MAAM,GAAG;YACb,YAAY,EAAE,qBAAqB;SACpC,CAAC;QACF,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACzE,CAAC;CACF;AAdD,0CAcC"}
|
|
@@ -23,6 +23,28 @@ const TYPE_MAP = {
|
|
|
23
23
|
testing: 'testing',
|
|
24
24
|
security: 'security',
|
|
25
25
|
};
|
|
26
|
+
const DEFAULT_INTEGRATIONS = {
|
|
27
|
+
openspec: { mode: 'compatible' },
|
|
28
|
+
superpowers: { mode: 'compatible' },
|
|
29
|
+
ecc: { mode: 'compatible' },
|
|
30
|
+
};
|
|
31
|
+
const DEFAULT_ARTIFACTS = {
|
|
32
|
+
openspecChange: '',
|
|
33
|
+
proposal: '',
|
|
34
|
+
specDelta: '',
|
|
35
|
+
implementationPlan: '',
|
|
36
|
+
verificationReport: '',
|
|
37
|
+
};
|
|
38
|
+
function normalizeMethod(method, taskType) {
|
|
39
|
+
if (method === 'tdd' ||
|
|
40
|
+
method === 'implementation' ||
|
|
41
|
+
method === 'refactor' ||
|
|
42
|
+
method === 'docs' ||
|
|
43
|
+
method === 'migration') {
|
|
44
|
+
return method;
|
|
45
|
+
}
|
|
46
|
+
return taskType === 'testing' ? 'tdd' : 'implementation';
|
|
47
|
+
}
|
|
26
48
|
class ContextGenerator {
|
|
27
49
|
static async generateFromTask(task) {
|
|
28
50
|
const state = await state_1.StateManager.load();
|
|
@@ -33,15 +55,16 @@ class ContextGenerator {
|
|
|
33
55
|
buildTool: '',
|
|
34
56
|
testFramework: '',
|
|
35
57
|
};
|
|
58
|
+
const taskType = TYPE_MAP[task.type] || 'other';
|
|
36
59
|
return {
|
|
37
60
|
taskId: task.id,
|
|
38
61
|
parentTaskId: task.parentId,
|
|
39
62
|
title: task.title,
|
|
40
63
|
description: task.description,
|
|
41
|
-
taskType
|
|
64
|
+
taskType,
|
|
42
65
|
designContext: {
|
|
43
66
|
designDocRef: state.phases.design?.designDoc || '',
|
|
44
|
-
relevantSpecs: [],
|
|
67
|
+
relevantSpecs: task.specRefs || [],
|
|
45
68
|
architectureNotes: '',
|
|
46
69
|
},
|
|
47
70
|
input: {
|
|
@@ -62,6 +85,25 @@ class ContextGenerator {
|
|
|
62
85
|
})),
|
|
63
86
|
constraints: task.constraints || { mustPassTests: true },
|
|
64
87
|
},
|
|
88
|
+
change: {
|
|
89
|
+
activeChange: state.activeChange || '',
|
|
90
|
+
artifacts: { ...DEFAULT_ARTIFACTS, ...(state.artifacts || {}) },
|
|
91
|
+
},
|
|
92
|
+
methodology: { ...DEFAULT_INTEGRATIONS, ...(state.integrations || {}) },
|
|
93
|
+
implementation: {
|
|
94
|
+
method: normalizeMethod(task.method, taskType),
|
|
95
|
+
specRefs: task.specRefs || [],
|
|
96
|
+
acceptanceRefs: task.acceptanceRefs || [],
|
|
97
|
+
},
|
|
98
|
+
verification: {
|
|
99
|
+
commands: task.verification?.commands || [],
|
|
100
|
+
},
|
|
101
|
+
evidence: {
|
|
102
|
+
required: task.evidence?.required || [],
|
|
103
|
+
tests: task.evidence?.tests,
|
|
104
|
+
filesChanged: task.evidence?.filesChanged,
|
|
105
|
+
traceIds: task.evidence?.traceIds,
|
|
106
|
+
},
|
|
65
107
|
acceptanceCriteria: task.acceptance || [],
|
|
66
108
|
guardConditions: {
|
|
67
109
|
requireReview: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-generator.js","sourceRoot":"","sources":["../../src/cli-core/context-generator.ts"],"names":[],"mappings":";;;AAAA,mCAAuC;AAGvC,MAAM,gBAAgB,GAGlB;IACF,IAAI,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE;IAClG,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE;IACxF,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE;IAChF,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE;IAChG,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE;IAC1F,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE;IAC5F,GAAG,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE;IAC/F,GAAG,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE;IACnF,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE;IAC1F,KAAK,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE;IAC/F,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE;CACtG,CAAC;AAEF,MAAM,QAAQ,GAA4C;IACxD,cAAc,EAAE,gBAAgB;IAChC,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,UAAU;CACrB,CAAC;AAEF,MAAa,gBAAgB;IAC3B,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAS;QACrC,MAAM,KAAK,GAAG,MAAM,oBAAY,CAAC,IAAI,EAAE,CAAC;QACxC,MAAM,WAAW,GAAY,KAAa,CAAC,WAAW,IAAI,EAAE,CAAC;QAC7D,MAAM,GAAG,GAAG,gBAAgB,CAAC,WAAW,CAAC,IAAI;YAC3C,QAAQ,EAAE,EAAE;YACZ,SAAS,EAAE,EAAE;YACb,SAAS,EAAE,EAAE;YACb,aAAa,EAAE,EAAE;SAClB,CAAC;
|
|
1
|
+
{"version":3,"file":"context-generator.js","sourceRoot":"","sources":["../../src/cli-core/context-generator.ts"],"names":[],"mappings":"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"}
|
package/dist/cli-core/guard.js
CHANGED
|
@@ -37,6 +37,10 @@ const TRANSITION_RULES = {
|
|
|
37
37
|
label: 'All tasks have acceptance criteria',
|
|
38
38
|
check: (s) => (0, quality_check_1.validateAcceptance)(s.phases.design?.tasks || []),
|
|
39
39
|
},
|
|
40
|
+
{
|
|
41
|
+
label: 'Implementation tasks are spec-bound',
|
|
42
|
+
check: (s) => (0, quality_check_1.validateSpecBoundExecution)(s.phases.design?.tasks || []),
|
|
43
|
+
},
|
|
40
44
|
],
|
|
41
45
|
'implement:verify': [
|
|
42
46
|
{ label: 'Implement phase is done', check: (s) => s.phases.implement?.status === 'done' },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guard.js","sourceRoot":"","sources":["../../src/cli-core/guard.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"guard.js","sourceRoot":"","sources":["../../src/cli-core/guard.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,13 +2,16 @@ export declare class InitManager {
|
|
|
2
2
|
private cwd;
|
|
3
3
|
private options;
|
|
4
4
|
private backupDir?;
|
|
5
|
+
private resolvedSkillsDir?;
|
|
5
6
|
private steps;
|
|
6
7
|
constructor(cwd: string, opts: {
|
|
7
8
|
eccPath?: string;
|
|
8
9
|
force?: boolean;
|
|
10
|
+
skillsDir?: 'project' | 'user';
|
|
9
11
|
});
|
|
10
12
|
run(): Promise<void>;
|
|
11
13
|
private isInitialized;
|
|
14
|
+
private promptSkillsDir;
|
|
12
15
|
private backup;
|
|
13
16
|
private rollback;
|
|
14
17
|
private commandExists;
|
|
@@ -32,12 +32,17 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
32
32
|
return result;
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
35
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
39
|
exports.InitManager = void 0;
|
|
37
40
|
const fs = __importStar(require("fs/promises"));
|
|
38
41
|
const path = __importStar(require("path"));
|
|
42
|
+
const os = __importStar(require("os"));
|
|
39
43
|
const child_process_1 = require("child_process");
|
|
40
44
|
const yaml = __importStar(require("yaml"));
|
|
45
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
41
46
|
const ui_1 = require("../cli/ui");
|
|
42
47
|
const project_detect_1 = require("./project-detect");
|
|
43
48
|
const claude_code_1 = require("./adapters/claude-code");
|
|
@@ -66,13 +71,16 @@ class InitManager {
|
|
|
66
71
|
await this.backup();
|
|
67
72
|
const envs = await this.detectAIEnvironment();
|
|
68
73
|
const envAdapters = envs.map(e => this.getAdapter(e));
|
|
74
|
+
const skillsDir = this.options.skillsDir ?? await this.promptSkillsDir(envs);
|
|
75
|
+
this.resolvedSkillsDir = skillsDir;
|
|
76
|
+
const adapterOptions = { skillsDir };
|
|
69
77
|
this.steps = [
|
|
70
78
|
{ name: 'Create directory structure', run: () => this.createDirs(), rollback: () => this.removeDirs() },
|
|
71
79
|
{ name: 'Generate .nova.yaml', run: () => this.generateConfig(envs), rollback: () => this.removeFile('.nova.yaml') },
|
|
72
80
|
{ name: 'Install ECC skills', run: () => this.installEcc(), rollback: () => this.removeDir('.nova/ecc') },
|
|
73
81
|
{ name: 'Generate environment commands', run: async () => {
|
|
74
82
|
for (const adapter of envAdapters)
|
|
75
|
-
await adapter.setup(this.cwd);
|
|
83
|
+
await adapter.setup(this.cwd, adapterOptions);
|
|
76
84
|
}, rollback: () => this.cleanEnvCommands(envs) },
|
|
77
85
|
{ name: 'Generate templates', run: () => this.generateTemplates(), rollback: () => this.removeDir('docs') }
|
|
78
86
|
];
|
|
@@ -100,6 +108,21 @@ class InitManager {
|
|
|
100
108
|
return false;
|
|
101
109
|
}
|
|
102
110
|
}
|
|
111
|
+
async promptSkillsDir(envs) {
|
|
112
|
+
if (!envs.includes('claude-code'))
|
|
113
|
+
return 'project';
|
|
114
|
+
const { skillsDir } = await inquirer_1.default.prompt([{
|
|
115
|
+
type: 'list',
|
|
116
|
+
name: 'skillsDir',
|
|
117
|
+
message: 'Where to install Nova skills?',
|
|
118
|
+
choices: [
|
|
119
|
+
{ name: 'User (~/.agents/skills/) — shared across all AI tools', value: 'user' },
|
|
120
|
+
{ name: 'Project (.claude/skills/) — project-specific', value: 'project' },
|
|
121
|
+
],
|
|
122
|
+
default: 'user',
|
|
123
|
+
}]);
|
|
124
|
+
return skillsDir;
|
|
125
|
+
}
|
|
103
126
|
async backup() {
|
|
104
127
|
this.backupDir = path.join(this.cwd, '.nova-backup-' + Date.now());
|
|
105
128
|
await fs.mkdir(this.backupDir, { recursive: true });
|
|
@@ -154,7 +177,7 @@ class InitManager {
|
|
|
154
177
|
return factory();
|
|
155
178
|
}
|
|
156
179
|
async createDirs() {
|
|
157
|
-
const dirs = ['docs/designs', 'docs/proposals', 'docs/reports', '.nova/contexts'];
|
|
180
|
+
const dirs = ['docs/designs', 'docs/proposals', 'docs/reports', '.nova/contexts', '.openspec/changes'];
|
|
158
181
|
for (const d of dirs)
|
|
159
182
|
await fs.mkdir(path.join(this.cwd, d), { recursive: true });
|
|
160
183
|
}
|
|
@@ -166,6 +189,19 @@ class InitManager {
|
|
|
166
189
|
project: path.basename(this.cwd),
|
|
167
190
|
projectType,
|
|
168
191
|
environment: envs,
|
|
192
|
+
activeChange: '',
|
|
193
|
+
integrations: {
|
|
194
|
+
openspec: { mode: 'compatible' },
|
|
195
|
+
superpowers: { mode: 'compatible' },
|
|
196
|
+
ecc: { mode: 'compatible' },
|
|
197
|
+
},
|
|
198
|
+
artifacts: {
|
|
199
|
+
openspecChange: '',
|
|
200
|
+
proposal: '',
|
|
201
|
+
specDelta: '',
|
|
202
|
+
implementationPlan: '',
|
|
203
|
+
verificationReport: '',
|
|
204
|
+
},
|
|
169
205
|
phases: {
|
|
170
206
|
propose: { status: 'pending', proposal: '' },
|
|
171
207
|
design: { status: 'pending', designDoc: '', tasks: [] },
|
|
@@ -196,7 +232,7 @@ class InitManager {
|
|
|
196
232
|
}
|
|
197
233
|
async cleanEnvCommands(envs) {
|
|
198
234
|
const cleanupMap = {
|
|
199
|
-
'claude-code': ['.
|
|
235
|
+
'claude-code': ['.agents/skills'],
|
|
200
236
|
'codex': ['CODEX.md'],
|
|
201
237
|
'openclaw': ['.openclaw'],
|
|
202
238
|
'hermes-agent': ['HERMES.md'],
|
|
@@ -205,7 +241,10 @@ class InitManager {
|
|
|
205
241
|
for (const env of envs) {
|
|
206
242
|
const targets = cleanupMap[env] ?? [];
|
|
207
243
|
for (const target of targets) {
|
|
208
|
-
|
|
244
|
+
const baseDir = (env === 'claude-code' && this.resolvedSkillsDir === 'user')
|
|
245
|
+
? os.homedir()
|
|
246
|
+
: this.cwd;
|
|
247
|
+
await fs.rm(path.join(baseDir, target), { recursive: true, force: true });
|
|
209
248
|
}
|
|
210
249
|
}
|
|
211
250
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-manager.js","sourceRoot":"","sources":["../../src/cli-core/init-manager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init-manager.js","sourceRoot":"","sources":["../../src/cli-core/init-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,3 +6,4 @@ export declare function validateTaskSchema(tasks: any[]): QualityReport;
|
|
|
6
6
|
export declare function validateTaskIds(tasks: any[]): QualityReport;
|
|
7
7
|
export declare function validateAcceptance(tasks: any[]): QualityReport;
|
|
8
8
|
export declare function validateFiles(tasks: any[]): QualityReport;
|
|
9
|
+
export declare function validateSpecBoundExecution(tasks: any[]): QualityReport;
|
|
@@ -4,6 +4,7 @@ exports.validateTaskSchema = validateTaskSchema;
|
|
|
4
4
|
exports.validateTaskIds = validateTaskIds;
|
|
5
5
|
exports.validateAcceptance = validateAcceptance;
|
|
6
6
|
exports.validateFiles = validateFiles;
|
|
7
|
+
exports.validateSpecBoundExecution = validateSpecBoundExecution;
|
|
7
8
|
const REQUIRED_FIELDS = ['id', 'title', 'type', 'files', 'acceptance'];
|
|
8
9
|
const KEBAB_CASE_RE = /^[a-z][a-z0-9]*(-[a-z0-9]+)*$/;
|
|
9
10
|
function validateTaskSchema(tasks) {
|
|
@@ -64,4 +65,26 @@ function validateFiles(tasks) {
|
|
|
64
65
|
}
|
|
65
66
|
return { pass: errors.length === 0, errors };
|
|
66
67
|
}
|
|
68
|
+
function validateSpecBoundExecution(tasks) {
|
|
69
|
+
const errors = [];
|
|
70
|
+
const methods = new Set(['tdd', 'implementation', 'refactor', 'docs', 'migration']);
|
|
71
|
+
for (const task of tasks) {
|
|
72
|
+
if (task.type !== 'implementation' && task.type !== 'testing')
|
|
73
|
+
continue;
|
|
74
|
+
const id = task.id || '<missing-id>';
|
|
75
|
+
if (!methods.has(task.method)) {
|
|
76
|
+
errors.push(`${id}: method must be one of ${Array.from(methods).join(', ')}`);
|
|
77
|
+
}
|
|
78
|
+
if (!Array.isArray(task.specRefs) || task.specRefs.length === 0) {
|
|
79
|
+
errors.push(`${id}: specRefs is empty or missing`);
|
|
80
|
+
}
|
|
81
|
+
if (!Array.isArray(task.acceptanceRefs) || task.acceptanceRefs.length === 0) {
|
|
82
|
+
errors.push(`${id}: acceptanceRefs is empty or missing`);
|
|
83
|
+
}
|
|
84
|
+
if (!Array.isArray(task.verification?.commands) || task.verification.commands.length === 0) {
|
|
85
|
+
errors.push(`${id}: verification.commands is empty or missing`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return { pass: errors.length === 0, errors };
|
|
89
|
+
}
|
|
67
90
|
//# sourceMappingURL=quality-check.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quality-check.js","sourceRoot":"","sources":["../../src/cli-core/quality-check.ts"],"names":[],"mappings":";;AASA,gDAUC;AAED,0CAeC;AAED,gDAWC;AAED,sCAgBC;
|
|
1
|
+
{"version":3,"file":"quality-check.js","sourceRoot":"","sources":["../../src/cli-core/quality-check.ts"],"names":[],"mappings":"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"}
|