@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.
Files changed (38) hide show
  1. package/README.md +113 -36
  2. package/dist/cli/commands/init.js +3 -1
  3. package/dist/cli/commands/init.js.map +1 -1
  4. package/dist/cli/index.js +6 -1
  5. package/dist/cli/index.js.map +1 -1
  6. package/dist/cli-core/__tests__/context-generator.test.js +31 -0
  7. package/dist/cli-core/__tests__/context-generator.test.js.map +1 -1
  8. package/dist/cli-core/__tests__/dispatcher.test.js +22 -0
  9. package/dist/cli-core/__tests__/dispatcher.test.js.map +1 -1
  10. package/dist/cli-core/__tests__/guard.test.js +41 -1
  11. package/dist/cli-core/__tests__/guard.test.js.map +1 -1
  12. package/dist/cli-core/__tests__/init-manager.test.js +77 -20
  13. package/dist/cli-core/__tests__/init-manager.test.js.map +1 -1
  14. package/dist/cli-core/__tests__/pipeline.test.js +22 -0
  15. package/dist/cli-core/__tests__/pipeline.test.js.map +1 -1
  16. package/dist/cli-core/adapters/claude-code.d.ts +5 -3
  17. package/dist/cli-core/adapters/claude-code.js +90 -42
  18. package/dist/cli-core/adapters/claude-code.js.map +1 -1
  19. package/dist/cli-core/adapters/codex.js +25 -19
  20. package/dist/cli-core/adapters/codex.js.map +1 -1
  21. package/dist/cli-core/adapters/hermes-agent.js +25 -19
  22. package/dist/cli-core/adapters/hermes-agent.js.map +1 -1
  23. package/dist/cli-core/adapters/openclaw.js +25 -19
  24. package/dist/cli-core/adapters/openclaw.js.map +1 -1
  25. package/dist/cli-core/adapters/opencode.js +25 -19
  26. package/dist/cli-core/adapters/opencode.js.map +1 -1
  27. package/dist/cli-core/context-generator.js +44 -2
  28. package/dist/cli-core/context-generator.js.map +1 -1
  29. package/dist/cli-core/guard.js +4 -0
  30. package/dist/cli-core/guard.js.map +1 -1
  31. package/dist/cli-core/init-manager.d.ts +3 -0
  32. package/dist/cli-core/init-manager.js +43 -4
  33. package/dist/cli-core/init-manager.js.map +1 -1
  34. package/dist/cli-core/quality-check.d.ts +1 -0
  35. package/dist/cli-core/quality-check.js +23 -0
  36. package/dist/cli-core/quality-check.js.map +1 -1
  37. package/dist/cli-core/types.d.ts +46 -1
  38. package/package.json +1 -1
@@ -58,7 +58,7 @@ describe('InitManager', () => {
58
58
  });
59
59
  test('force re-init proceeds and creates new state', async () => {
60
60
  await fs.writeFile('.nova.yaml', 'version: 1\nproject: old\n', 'utf-8');
61
- const mgr = new init_manager_1.InitManager(testDir, { force: true });
61
+ const mgr = new init_manager_1.InitManager(testDir, { force: true, skillsDir: 'project' });
62
62
  await mgr.run();
63
63
  const raw = await fs.readFile('.nova.yaml', 'utf-8');
64
64
  const state = yaml.parse(raw);
@@ -67,9 +67,9 @@ describe('InitManager', () => {
67
67
  });
68
68
  describe('directory creation', () => {
69
69
  test('creates all required directories', async () => {
70
- const mgr = new init_manager_1.InitManager(testDir, { force: false });
70
+ const mgr = new init_manager_1.InitManager(testDir, { force: false, skillsDir: 'project' });
71
71
  await mgr.run();
72
- const dirs = ['docs/designs', 'docs/proposals', 'docs/reports', '.nova/contexts'];
72
+ const dirs = ['docs/designs', 'docs/proposals', 'docs/reports', '.nova/contexts', '.openspec/changes'];
73
73
  for (const d of dirs) {
74
74
  await expect(fs.access(path.join(testDir, d))).resolves.toBeUndefined();
75
75
  }
@@ -77,7 +77,7 @@ describe('InitManager', () => {
77
77
  });
78
78
  describe('.nova.yaml generation', () => {
79
79
  test('generates valid .nova.yaml with correct structure', async () => {
80
- const mgr = new init_manager_1.InitManager(testDir, { force: false });
80
+ const mgr = new init_manager_1.InitManager(testDir, { force: false, skillsDir: 'project' });
81
81
  await mgr.run();
82
82
  const raw = await fs.readFile('.nova.yaml', 'utf-8');
83
83
  const state = yaml.parse(raw);
@@ -89,12 +89,25 @@ describe('InitManager', () => {
89
89
  expect(state.phases.implement.status).toBe('pending');
90
90
  expect(state.phases.verify.status).toBe('pending');
91
91
  expect(state.phases.archive.status).toBe('pending');
92
+ expect(state.activeChange).toBe('');
93
+ expect(state.integrations).toEqual({
94
+ openspec: { mode: 'compatible' },
95
+ superpowers: { mode: 'compatible' },
96
+ ecc: { mode: 'compatible' },
97
+ });
98
+ expect(state.artifacts).toEqual({
99
+ openspecChange: '',
100
+ proposal: '',
101
+ specDelta: '',
102
+ implementationPlan: '',
103
+ verificationReport: '',
104
+ });
92
105
  expect(state.metadata.stateVersion).toBe(0);
93
106
  expect(state.metadata.lastModified).toBeTruthy();
94
107
  });
95
108
  test('detects project type when package.json exists', async () => {
96
109
  await fs.writeFile('package.json', JSON.stringify({ name: 'test-pkg', dependencies: { express: '^4.0.0' } }), 'utf-8');
97
- const mgr = new init_manager_1.InitManager(testDir, { force: false });
110
+ const mgr = new init_manager_1.InitManager(testDir, { force: false, skillsDir: 'project' });
98
111
  await mgr.run();
99
112
  const raw = await fs.readFile('.nova.yaml', 'utf-8');
100
113
  const state = yaml.parse(raw);
@@ -102,28 +115,72 @@ describe('InitManager', () => {
102
115
  });
103
116
  });
104
117
  describe('environment command generation', () => {
105
- test('generates all 6 Claude Code command files', async () => {
106
- const mgr = new init_manager_1.InitManager(testDir, { force: false });
118
+ test('generates all Nova skill dirs with SKILL.md in project', async () => {
119
+ const mgr = new init_manager_1.InitManager(testDir, { force: false, skillsDir: 'project' });
107
120
  await mgr.run();
108
- const commandsDir = path.join(testDir, '.claude', 'commands');
109
- const files = await fs.readdir(commandsDir);
110
- expect(files).toContain('nova-propose.md');
111
- expect(files).toContain('nova-design.md');
112
- expect(files).toContain('nova-implement.md');
113
- expect(files).toContain('nova-verify.md');
114
- expect(files).toContain('nova-iterate.md');
115
- expect(files).toContain('nova-status.md');
116
- for (const f of files) {
117
- const content = await fs.readFile(path.join(commandsDir, f), 'utf-8');
121
+ const skillsDir = path.join(testDir, '.claude', 'skills');
122
+ const dirs = await fs.readdir(skillsDir);
123
+ const novaDirs = dirs.filter(d => d.startsWith('nova'));
124
+ expect(novaDirs).toContain('nova');
125
+ expect(novaDirs).toContain('nova-propose');
126
+ expect(novaDirs).toContain('nova-design');
127
+ expect(novaDirs).toContain('nova-implement');
128
+ expect(novaDirs).toContain('nova-verify');
129
+ expect(novaDirs).toContain('nova-iterate');
130
+ expect(novaDirs).toContain('nova-status');
131
+ for (const d of novaDirs) {
132
+ const content = await fs.readFile(path.join(skillsDir, d, 'SKILL.md'), 'utf-8');
118
133
  expect(content).toContain('description:');
119
134
  }
120
135
  });
136
+ test('generates Nova skills in ~/.agents/skills/ with symlinks when skillsDir=user', async () => {
137
+ const agentsSkillsDir = path.join(os.homedir(), '.agents', 'skills');
138
+ const claudeSkillsDir = path.join(os.homedir(), '.claude', 'skills');
139
+ const existingDirs = new Set();
140
+ const existingLinks = new Set();
141
+ try {
142
+ for (const f of await fs.readdir(agentsSkillsDir)) {
143
+ if (f.startsWith('nova'))
144
+ existingDirs.add(f);
145
+ }
146
+ }
147
+ catch { }
148
+ try {
149
+ for (const f of await fs.readdir(claudeSkillsDir)) {
150
+ if (f.startsWith('nova'))
151
+ existingLinks.add(f);
152
+ }
153
+ }
154
+ catch { }
155
+ const mgr = new init_manager_1.InitManager(testDir, { force: false, skillsDir: 'user' });
156
+ await mgr.run();
157
+ // Verify SKILL.md exists in each nova dir
158
+ const dirs = await fs.readdir(agentsSkillsDir);
159
+ const novaDirs = dirs.filter(d => d.startsWith('nova'));
160
+ expect(novaDirs.length).toBeGreaterThanOrEqual(7);
161
+ for (const d of novaDirs) {
162
+ const content = await fs.readFile(path.join(agentsSkillsDir, d, 'SKILL.md'), 'utf-8');
163
+ expect(content).toContain('description:');
164
+ }
165
+ // Cleanup: remove dirs and symlinks we created
166
+ for (const d of novaDirs) {
167
+ if (!existingDirs.has(d)) {
168
+ await fs.rm(path.join(agentsSkillsDir, d), { recursive: true, force: true });
169
+ }
170
+ }
171
+ const links = (await fs.readdir(claudeSkillsDir)).filter(f => f.startsWith('nova'));
172
+ for (const l of links) {
173
+ if (!existingLinks.has(l)) {
174
+ await fs.unlink(path.join(claudeSkillsDir, l));
175
+ }
176
+ }
177
+ });
121
178
  });
122
179
  describe('ECC installation', () => {
123
180
  test('copies ECC skills when --with-ecc provided', async () => {
124
181
  const eccDir = await fs.mkdtemp(path.join(os.tmpdir(), 'ecc-src-'));
125
182
  await fs.writeFile(path.join(eccDir, 'test-skill.md'), '# Test', 'utf-8');
126
- const mgr = new init_manager_1.InitManager(testDir, { eccPath: eccDir });
183
+ const mgr = new init_manager_1.InitManager(testDir, { eccPath: eccDir, skillsDir: 'project' });
127
184
  await mgr.run();
128
185
  const destFile = path.join(testDir, '.nova', 'ecc', 'test-skill.md');
129
186
  const content = await fs.readFile(destFile, 'utf-8');
@@ -131,7 +188,7 @@ describe('InitManager', () => {
131
188
  await fs.rm(eccDir, { recursive: true, force: true });
132
189
  });
133
190
  test('creates empty .nova/ecc without --with-ecc', async () => {
134
- const mgr = new init_manager_1.InitManager(testDir, { force: false });
191
+ const mgr = new init_manager_1.InitManager(testDir, { force: false, skillsDir: 'project' });
135
192
  await mgr.run();
136
193
  await expect(fs.access(path.join(testDir, '.nova', 'ecc'))).resolves.toBeUndefined();
137
194
  const files = await fs.readdir(path.join(testDir, '.nova', 'ecc'));
@@ -140,7 +197,7 @@ describe('InitManager', () => {
140
197
  });
141
198
  describe('document templates', () => {
142
199
  test('copies proposal and design templates to docs/', async () => {
143
- const mgr = new init_manager_1.InitManager(testDir, { force: false });
200
+ const mgr = new init_manager_1.InitManager(testDir, { force: false, skillsDir: 'project' });
144
201
  await mgr.run();
145
202
  await expect(fs.access(path.join(testDir, 'docs', 'proposal.md'))).resolves.toBeUndefined();
146
203
  await expect(fs.access(path.join(testDir, 'docs', 'design.md'))).resolves.toBeUndefined();
@@ -1 +1 @@
1
- {"version":3,"file":"init-manager.test.js","sourceRoot":"","sources":["../../../src/cli-core/__tests__/init-manager.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init-manager.test.js","sourceRoot":"","sources":["../../../src/cli-core/__tests__/init-manager.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAkC;AAClC,2CAA6B;AAC7B,uCAAyB;AACzB,2CAA6B;AAC7B,kDAA8C;AAE9C,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,IAAI,OAAe,CAAC;IACpB,IAAI,WAAmB,CAAC;IAExB,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC;QACjE,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC3B,MAAM,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACjC,IAAI,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;YACvE,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;YAC1D,MAAM,GAAG,GAAG,IAAI,0BAAW,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAEzC,MAAM,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;YAC9D,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,4BAA4B,EAAE,OAAO,CAAC,CAAC;YAExE,MAAM,GAAG,GAAG,IAAI,0BAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;YAC5E,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC;YAEhB,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YACrD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC9B,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,IAAI,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;YAClD,MAAM,GAAG,GAAG,IAAI,0BAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;YAC7E,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC;YAEhB,MAAM,IAAI,GAAG,CAAC,cAAc,EAAE,gBAAgB,EAAE,cAAc,EAAE,gBAAgB,EAAE,mBAAmB,CAAC,CAAC;YACvG,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;gBACrB,MAAM,MAAM,CACV,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CACjC,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;YAC7B,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACrC,IAAI,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;YACnE,MAAM,GAAG,GAAG,IAAI,0BAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;YAC7E,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC;YAEhB,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YACrD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAE9B,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC9B,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,CAAC;YACnC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;YACnD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACpD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACnD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACtD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACnD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACpD,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACpC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC;gBACjC,QAAQ,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE;gBAChC,WAAW,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE;gBACnC,GAAG,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE;aAC5B,CAAC,CAAC;YACH,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC;gBAC9B,cAAc,EAAE,EAAE;gBAClB,QAAQ,EAAE,EAAE;gBACZ,SAAS,EAAE,EAAE;gBACb,kBAAkB,EAAE,EAAE;gBACtB,kBAAkB,EAAE,EAAE;aACvB,CAAC,CAAC;YACH,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC5C,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,UAAU,EAAE,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;YAC/D,MAAM,EAAE,CAAC,SAAS,CAChB,cAAc,EACd,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC,EACzE,OAAO,CACR,CAAC;YAEF,MAAM,GAAG,GAAG,IAAI,0BAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;YAC7E,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC;YAEhB,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YACrD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC9B,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,UAAU,EAAE,CAAC;QACzC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;QAC9C,IAAI,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;YACxE,MAAM,GAAG,GAAG,IAAI,0BAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;YAC7E,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC;YAEhB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;YAC1D,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;YAExD,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACnC,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;YAC3C,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;YAC1C,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;YAC7C,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;YAC1C,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;YAC3C,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;YAE1C,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACzB,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;gBAChF,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,8EAA8E,EAAE,KAAK,IAAI,EAAE;YAC9F,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;YACrE,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;YACrE,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;YACvC,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;YACxC,IAAI,CAAC;gBACH,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;oBAClD,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC;wBAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAChD,CAAC;YACH,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;YACV,IAAI,CAAC;gBACH,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;oBAClD,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC;wBAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACjD,CAAC;YACH,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;YAEV,MAAM,GAAG,GAAG,IAAI,0BAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;YAC1E,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC;YAEhB,0CAA0C;YAC1C,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;YAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;YACxD,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;YAElD,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACzB,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;gBACtF,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;YAC5C,CAAC;YAED,+CAA+C;YAC/C,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACzB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;oBACzB,MAAM,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC/E,CAAC;YACH,CAAC;YACD,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;YACpF,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;gBACtB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC1B,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,CAAC;gBACjD,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAChC,IAAI,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC5D,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC;YACpE,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YAE1E,MAAM,GAAG,GAAG,IAAI,0BAAW,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;YAChF,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC;YAEhB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;YACrE,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACrD,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAE/B,MAAM,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC5D,MAAM,GAAG,GAAG,IAAI,0BAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;YAC7E,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC;YAEhB,MAAM,MAAM,CACV,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAC9C,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;YAE3B,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;YACnE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,IAAI,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;YAC/D,MAAM,GAAG,GAAG,IAAI,0BAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;YAC7E,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC;YAEhB,MAAM,MAAM,CACV,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC,CACrD,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;YAC3B,MAAM,MAAM,CACV,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CACnD,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -26,6 +26,28 @@ const baseContext = {
26
26
  environment: { language: '', framework: '', buildTool: '', testFramework: '' },
27
27
  },
28
28
  output: { expectedArtifacts: [], constraints: { mustPassTests: true } },
29
+ change: {
30
+ activeChange: '',
31
+ artifacts: {
32
+ openspecChange: '',
33
+ proposal: '',
34
+ specDelta: '',
35
+ implementationPlan: '',
36
+ verificationReport: '',
37
+ },
38
+ },
39
+ methodology: {
40
+ openspec: { mode: 'compatible' },
41
+ superpowers: { mode: 'compatible' },
42
+ ecc: { mode: 'compatible' },
43
+ },
44
+ implementation: {
45
+ method: 'implementation',
46
+ specRefs: [],
47
+ acceptanceRefs: [],
48
+ },
49
+ verification: { commands: [] },
50
+ evidence: { required: [] },
29
51
  acceptanceCriteria: [],
30
52
  guardConditions: { requireReview: true, requireTests: true, blocking: false },
31
53
  metadata: {
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline.test.js","sourceRoot":"","sources":["../../../src/cli-core/__tests__/pipeline.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pipeline.test.js","sourceRoot":"","sources":["../../../src/cli-core/__tests__/pipeline.test.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,8 @@
1
- import { EnvironmentAdapter } from '../types';
1
+ import { EnvironmentAdapter, AdapterSetupOptions } from '../types';
2
2
  export declare class ClaudeCodeAdapter implements EnvironmentAdapter {
3
3
  name: string;
4
- setup(cwd: string): Promise<void>;
5
- private writeCommand;
4
+ setup(cwd: string, options?: AdapterSetupOptions): Promise<void>;
5
+ private writeToSharedSkills;
6
+ private writeToProjectSkills;
7
+ private writeSkillFile;
6
8
  }
@@ -36,6 +36,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.ClaudeCodeAdapter = void 0;
37
37
  const fs = __importStar(require("fs/promises"));
38
38
  const path = __importStar(require("path"));
39
+ const os = __importStar(require("os"));
40
+ const crypto = __importStar(require("crypto"));
39
41
  const SKILL_TEMPLATES = {
40
42
  'nova.md': `---
41
43
  description: Nova — unified entry point. Shows progress and suggests next action.
@@ -79,13 +81,14 @@ Ask: "Run the suggested action, pick another, or do something else?"
79
81
  Read-only unless the user explicitly confirms an action.
80
82
  `,
81
83
  'nova-propose.md': `---
82
- description: Nova propose phase — generate a feature proposal from interactive Q&A
84
+ description: Nova propose phase — specify an OpenSpec-compatible change contract
83
85
  ---
84
86
 
85
87
  # Nova Propose Phase
86
88
 
87
89
  You are executing the **propose phase** of a Nova workflow. Your role is to
88
- orchestrate requirements exploration and produce a structured proposal document.
90
+ orchestrate requirements exploration and produce an OpenSpec-compatible change
91
+ contract. Native OpenSpec is optional; if unavailable, write compatible artifacts.
89
92
 
90
93
  ## Step 1: Verify State
91
94
  Read \`.nova.yaml\`. Check \`phases.propose.status\`. If pending, update to
@@ -101,34 +104,35 @@ explore alternatives, identify risks, define success criteria. Summarize for the
101
104
  user and ask them to confirm before proceeding.
102
105
 
103
106
  ## Step 4: Generate Proposal
104
- Write \`docs/proposals/proposal.md\` with: Problem Statement, Proposed Solution,
105
- User Stories (prioritized), Scope & Deliverables (in/out), Success Criteria
106
- (measurable), Risks & Constraints.
107
+ Write \`.openspec/changes/<change-id>/proposal.md\`, compatible spec files under
108
+ \`.openspec/changes/<change-id>/specs/\`, and \`docs/proposals/proposal.md\` as
109
+ a summary. Include requirement ids and acceptance ids for later task references.
107
110
 
108
111
  ## Step 5: Update State
109
- Set \`phases.propose.status = 'in-progress'\`,
110
- \`phases.propose.proposal = 'docs/proposals/proposal.md'\`.
112
+ Set \`activeChange\`, \`artifacts.openspecChange\`, \`artifacts.proposal\`,
113
+ \`artifacts.specDelta\`, \`phases.propose.status\`, and
114
+ \`phases.propose.proposal\`.
111
115
 
112
116
  ## Constraints
113
117
  - Read any file for context. Write only to \`docs/proposals/\` and \`.nova.yaml\`.
114
118
  - Do not modify source code — the implement phase handles that.
115
119
  `,
116
120
  'nova-design.md': `---
117
- description: Nova design phase — generate technical design from approved proposal
121
+ description: Nova design phase — plan spec-bound work from an approved change
118
122
  ---
119
123
 
120
124
  # Nova Design Phase
121
125
 
122
- You are executing the **design phase** of a Nova workflow. Your role is to
123
- orchestrate architecture exploration and produce a design document with an
124
- actionable task list.
126
+ You are executing the **design phase** of a Nova workflow. Your role is to turn
127
+ the OpenSpec-compatible change into a Superpowers-compatible plan and task graph.
125
128
 
126
129
  ## Step 1: Verify State
127
130
  Read \`.nova.yaml\`. Require \`phases.propose.status: done\` with a non-empty proposal.
128
131
  Update \`phases.design.status\` to \`in-progress\` and set \`startedAt\`.
129
132
 
130
133
  ## Step 2: Load Context
131
- Read the proposal (\`phases.propose.proposal\`), \`AGENTS.md\`, \`package.json\`, \`src/\`.
134
+ Read the proposal/spec delta (\`artifacts.proposal\`, \`artifacts.openspecChange\`),
135
+ \`AGENTS.md\`, \`package.json\`, \`src/\`.
132
136
 
133
137
  ## Step 3: Explore Architecture Options
134
138
  Use the **brainstorming skill** to explore at least 2 architectural approaches.
@@ -137,8 +141,9 @@ flow, key trade-offs. Present alternatives to the user for selection.
137
141
 
138
142
  ## Step 4: Generate Design Document
139
143
  Based on the user-selected approach, use the **writing-plans skill** to produce
140
- \`docs/designs/design.md\` with: Architecture Overview, Tech Stack, Component
141
- Breakdown, Data Flow, Implementation Plan (YAML task list), Risks & Mitigations.
144
+ \`docs/designs/design.md\` and \`docs/superpowers/plans/<change-id>.md\`.
145
+ Tasks must include \`method\`, \`specRefs\`, \`acceptanceRefs\`, and
146
+ \`verification.commands\`.
142
147
 
143
148
  ## Step 5: Validate Tasks
144
149
  Verify each task has all required fields (id, title, type, description, files,
@@ -152,37 +157,42 @@ Set \`phases.design.status = 'done'\`, \`designDoc\`, \`tasks\` from parsed YAML
152
157
  - Tasks must be concrete: specific file paths, verifiable acceptance criteria.
153
158
  `,
154
159
  'nova-implement.md': `---
155
- description: Nova implement phase — execute design tasks with retry and tracing
160
+ description: Nova implement phase — execute spec-bound tasks with evidence
156
161
  ---
157
162
 
158
163
  # Nova Implement Phase
159
164
 
160
165
  You are executing the **implement phase** of a Nova workflow. Your role is to
161
- execute each task from the design phase, routing by task type.
166
+ execute each task as a spec-bound unit of work: resolve spec refs, apply the
167
+ task method, verify the result, and record evidence for review.
162
168
 
163
169
  ## Step 1: Verify State
164
170
  Read \`.nova.yaml\`. Require \`phases.design.status: done\` with non-empty tasks.
165
171
  Update \`phases.implement.status\` to \`in-progress\` and set \`startedAt\`.
166
172
 
167
173
  ## Step 2: Load Task List
168
- Show task summary (id, title, type, priority). Ask user to confirm before
174
+ Show task summary (id, title, method, specRefs, priority). Ask user to confirm before
169
175
  proceeding.
170
176
 
171
177
  ## Step 3: Execute Each Task
172
178
  For each task in priority order:
173
179
 
174
- ### Route by Task Type
175
- - **implementation** — write production code following project conventions
176
- - **testing** — use the **test-driven-development skill**
177
- - **design** — update design documents (noted for user review)
180
+ ### Route by Method
181
+ - **tdd** — use the **test-driven-development skill** when available
182
+ - **implementation** — write scoped production code with tests or no-test rationale
183
+ - **refactor** — preserve referenced spec behavior and run regression checks
184
+ - **docs** — update docs/specs and validate references
185
+ - **migration** — require dry-run, rollback notes, and compatibility evidence
178
186
 
179
187
  ### Verify After Each Task
180
- 1. Run type check (\`npx tsc --noEmit\`)
181
- 2. Run tests (\`npx jest --no-coverage\`)
182
- 3. Fix before marking complete
188
+ 1. Run \`task.verification.commands\` if present
189
+ 2. Run type check (\`npx tsc --noEmit\`)
190
+ 3. Run tests (\`npm test\` or project equivalent)
191
+ 4. Confirm specRefs and acceptanceRefs have evidence before marking complete
183
192
 
184
193
  ### Record Result
185
- Update \`.nova.yaml\` with task status (done/failed) and timestamp.
194
+ Update \`.nova.yaml\` with task status, specRefs, acceptanceRefs, tests,
195
+ filesChanged, traceIds, and timestamp.
186
196
  On failure, ask user: abort, skip, or retry.
187
197
 
188
198
  ## Step 4: Final Verification
@@ -196,38 +206,43 @@ Set \`phases.implement.status = 'done'\`.
196
206
  - Run checks after EACH task, not just at the end.
197
207
  `,
198
208
  'nova-verify.md': `---
199
- description: Nova verify phase — run code review and security review pipeline
209
+ description: Nova verify phase — run spec conformance, code, and security review
200
210
  ---
201
211
 
202
212
  # Nova Verify Phase
203
213
 
204
214
  You are executing the **verify phase** of a Nova workflow. Your role is to
205
- orchestrate a verification pipeline using ECC review skills.
215
+ orchestrate an ECC-compatible verification pipeline.
206
216
 
207
217
  ## Step 1: Verify State
208
218
  Read \`.nova.yaml\`. Require \`phases.implement.status: done\`.
209
219
  Update \`phases.verify.status\` to \`in-progress\` and set \`startedAt\`.
210
220
 
211
221
  ## Step 2: Gather Context
212
- Load completed tasks from \`phases.design.tasks\`. Read changed files and the
213
- design document.
222
+ Load completed tasks from \`phases.design.tasks\`. Read changed files, task
223
+ evidence, the design document, and \`artifacts.openspecChange\`.
214
224
 
215
- ## Step 3: Run Code Review
225
+ ## Step 3: Run Spec-Conformance Review
226
+ Compare task evidence against \`specRefs\` and \`acceptanceRefs\`. Verdict:
227
+ PASS / CHANGES_REQUESTED / BLOCKED.
228
+
229
+ ## Step 4: Run Code Review
216
230
  Use the **ecc:code-reviewer** skill to review each task's changed files:
217
231
  correctness, conventions, error handling, test coverage, type safety.
218
232
  Verdict: PASS / CHANGES_REQUESTED / COMMENT.
219
233
 
220
- ## Step 4: Run Security Review
234
+ ## Step 5: Run Security Review
221
235
  Use the **ecc:security-reviewer** skill to audit each task's changed files:
222
236
  injection risks, secret exposure, insecure dependencies, input validation.
223
237
  Verdict: PASS / VULNERABILITY_FOUND. Include severity and remediation.
224
238
 
225
- ## Step 5: Generate Report
226
- Write \`docs/designs/verification-report.md\` with summary, per-task results,
239
+ ## Step 6: Generate Report
240
+ Write \`docs/reports/verification-report.md\` with summary, spec-conformance results, per-task results,
227
241
  overall assessment (PASS / NEEDS_FIXES / BLOCKED), and recommendations.
228
242
 
229
- ## Step 6: Update State
243
+ ## Step 7: Update State
230
244
  Set \`phases.verify.status = 'done'\`, \`pipelineResult\` with stage results.
245
+ Set \`artifacts.verificationReport = 'docs/reports/verification-report.md'\`.
231
246
 
232
247
  ## Constraints
233
248
  - Be specific — reference file paths and line numbers.
@@ -290,18 +305,51 @@ class ClaudeCodeAdapter {
290
305
  constructor() {
291
306
  this.name = 'claude-code';
292
307
  }
293
- async setup(cwd) {
294
- const dir = path.join(cwd, '.claude', 'commands');
295
- await fs.mkdir(dir, { recursive: true });
308
+ async setup(cwd, options) {
309
+ if (options?.skillsDir === 'user') {
310
+ await this.writeToSharedSkills();
311
+ }
312
+ else {
313
+ await this.writeToProjectSkills(cwd);
314
+ }
315
+ }
316
+ async writeToSharedSkills() {
317
+ const agentsSkillsDir = path.join(os.homedir(), '.agents', 'skills');
318
+ const claudeSkillsDir = path.join(os.homedir(), '.claude', 'skills');
319
+ for (const [filename, content] of Object.entries(SKILL_TEMPLATES)) {
320
+ const skillName = filename.replace('.md', '');
321
+ const skillDir = path.join(agentsSkillsDir, skillName);
322
+ await fs.mkdir(skillDir, { recursive: true });
323
+ await this.writeSkillFile(path.join(skillDir, 'SKILL.md'), content);
324
+ // Create symlink in ~/.claude/skills/ for Claude Code discovery
325
+ const linkPath = path.join(claudeSkillsDir, skillName);
326
+ try {
327
+ await fs.access(linkPath);
328
+ continue;
329
+ }
330
+ catch { }
331
+ try {
332
+ await fs.symlink(skillDir, linkPath);
333
+ }
334
+ catch { }
335
+ }
336
+ }
337
+ async writeToProjectSkills(cwd) {
338
+ const skillsDir = path.join(cwd, '.claude', 'skills');
296
339
  for (const [filename, content] of Object.entries(SKILL_TEMPLATES)) {
297
- await this.writeCommand(dir, filename, content);
340
+ const skillName = filename.replace('.md', '');
341
+ const skillDir = path.join(skillsDir, skillName);
342
+ await fs.mkdir(skillDir, { recursive: true });
343
+ await this.writeSkillFile(path.join(skillDir, 'SKILL.md'), content);
298
344
  }
299
345
  }
300
- async writeCommand(dir, file, content) {
301
- const filePath = path.join(dir, file);
346
+ async writeSkillFile(filePath, content) {
347
+ const newHash = crypto.createHash('md5').update(content).digest('hex');
302
348
  try {
303
- await fs.access(filePath);
304
- return;
349
+ const existing = await fs.readFile(filePath, 'utf-8');
350
+ const oldHash = crypto.createHash('md5').update(existing).digest('hex');
351
+ if (oldHash === newHash)
352
+ return;
305
353
  }
306
354
  catch { }
307
355
  await fs.writeFile(filePath, content);
@@ -1 +1 @@
1
- {"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../../src/cli-core/adapters/claude-code.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAkC;AAClC,2CAA6B;AAG7B,MAAM,eAAe,GAA2B;IAC9C,SAAS,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwCZ;IAEC,iBAAiB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkCpB;IAEC,gBAAgB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqCnB;IAEC,mBAAmB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2CtB;IAEC,gBAAgB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqCnB;IAEC,iBAAiB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgCpB;IAEC,gBAAgB,EAAE;;;;;;;;;;;;;;;;;;CAkBnB;CACA,CAAC;AAEF,MAAa,iBAAiB;IAA9B;QACE,SAAI,GAAG,aAAa,CAAC;IAavB,CAAC;IAZC,KAAK,CAAC,KAAK,CAAC,GAAW;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;QAClD,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,KAAK,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;YAClE,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IACO,KAAK,CAAC,YAAY,CAAC,GAAW,EAAE,IAAY,EAAE,OAAe;QACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC;YAAC,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QACnD,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;CACF;AAdD,8CAcC"}
1
+ {"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../../src/cli-core/adapters/claude-code.ts"],"names":[],"mappings":"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"}
@@ -39,7 +39,8 @@ const path = __importStar(require("path"));
39
39
  const CODEX_INSTRUCTIONS = `# Nova Workflow
40
40
 
41
41
  This project uses Nova — an AI-assisted development workflow with 5 phases.
42
- All state is in \`.nova.yaml\`. Always read it first.
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
- 帮我为"{你的需求描述}"写一个 proposal
54
+ 帮我为"{你的需求描述}"创建 OpenSpec-compatible change
54
55
  1. 先读 .nova.yaml 和已有代码了解项目
55
56
  2. 问 3-4 个澄清问题
56
- 3. 写入 docs/proposals/proposal.md
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
- 读取 docs/proposals/proposal.md,生成技术设计文档。
63
- 1. 读 proposal 和 src/ 了解架构
64
- 2. 写入 docs/designs/design.md,包含架构、组件、YAML 任务列表
65
- 3. 更新 .nova.yaml: phases.design.status = done, tasks = 解析后的列表
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. 每个任务:写代码 → tsc --noEmit → npm test → 更新 task status = done
73
- 3. 失败时问用户:abort / skip / retry
74
- 4. 全部完成后更新 phases.implement.status = done
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. Code review: 正确性、错误处理、类型安全、测试覆盖
81
- 2. Security review: 注入、密钥暴露、路径遍历
82
- 3. 写入 docs/designs/verification-report.md
83
- 4. 更新 phases.verify.status = done
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 (归档)
@@ -96,7 +101,8 @@ All state is in \`.nova.yaml\`. Always read it first.
96
101
  ## Key Rules
97
102
 
98
103
  - Always read \`.nova.yaml\` before any action
99
- - After each task, run \`npx tsc --noEmit\` and \`npm test\`
104
+ - After each task, run task verification commands, then project checks when needed
105
+ - Do not mark a task done without spec/acceptance evidence
100
106
  - Never leave TODOs or stubs
101
107
  - Update \`.nova.yaml\` status after each phase transition
102
108
  `;
@@ -1 +1 @@
1
- {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../../src/cli-core/adapters/codex.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAkC;AAClC,2CAA6B;AAG7B,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+D1B,CAAC;AAEF,MAAa,YAAY;IAAzB;QACE,SAAI,GAAG,OAAO,CAAC;IAUjB,CAAC;IARC,KAAK,CAAC,KAAK,CAAC,GAAW;QACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAC5C,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC1B,OAAO,CAAC,kBAAkB;QAC5B,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QACV,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,kBAAkB,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC;CACF;AAXD,oCAWC"}
1
+ {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../../src/cli-core/adapters/codex.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAkC;AAClC,2CAA6B;AAG7B,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqE1B,CAAC;AAEF,MAAa,YAAY;IAAzB;QACE,SAAI,GAAG,OAAO,CAAC;IAUjB,CAAC;IARC,KAAK,CAAC,KAAK,CAAC,GAAW;QACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAC5C,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC1B,OAAO,CAAC,kBAAkB;QAC5B,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QACV,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,kBAAkB,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC;CACF;AAXD,oCAWC"}