@nova286/nova-workflow 0.2.0 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/README.md +1 -1
  2. package/dist/cli/commands/archive.js +3 -3
  3. package/dist/cli/commands/archive.js.map +1 -1
  4. package/dist/cli/commands/guard.js +12 -2
  5. package/dist/cli/commands/guard.js.map +1 -1
  6. package/dist/cli/commands/status.js +8 -8
  7. package/dist/cli/commands/status.js.map +1 -1
  8. package/dist/cli/index.js +0 -0
  9. package/dist/cli-core/__tests__/adapters.test.d.ts +1 -0
  10. package/dist/cli-core/__tests__/adapters.test.js +123 -0
  11. package/dist/cli-core/__tests__/adapters.test.js.map +1 -0
  12. package/dist/cli-core/__tests__/guard.test.js +51 -13
  13. package/dist/cli-core/__tests__/guard.test.js.map +1 -1
  14. package/dist/cli-core/__tests__/init-manager.test.js +3 -3
  15. package/dist/cli-core/__tests__/init-manager.test.js.map +1 -1
  16. package/dist/cli-core/__tests__/platform-client.test.d.ts +1 -0
  17. package/dist/cli-core/__tests__/platform-client.test.js +157 -0
  18. package/dist/cli-core/__tests__/platform-client.test.js.map +1 -0
  19. package/dist/cli-core/__tests__/quality-check.test.d.ts +1 -0
  20. package/dist/cli-core/__tests__/quality-check.test.js +138 -0
  21. package/dist/cli-core/__tests__/quality-check.test.js.map +1 -0
  22. package/dist/cli-core/__tests__/state-manager.test.js +7 -7
  23. package/dist/cli-core/__tests__/state-manager.test.js.map +1 -1
  24. package/dist/cli-core/adapters/claude-code.js +8 -8
  25. package/dist/cli-core/adapters/codex.d.ts +5 -0
  26. package/dist/cli-core/adapters/codex.js +118 -0
  27. package/dist/cli-core/adapters/codex.js.map +1 -0
  28. package/dist/cli-core/adapters/hermes-agent.d.ts +5 -0
  29. package/dist/cli-core/adapters/hermes-agent.js +113 -0
  30. package/dist/cli-core/adapters/hermes-agent.js.map +1 -0
  31. package/dist/cli-core/adapters/openclaw.d.ts +5 -0
  32. package/dist/cli-core/adapters/openclaw.js +115 -0
  33. package/dist/cli-core/adapters/openclaw.js.map +1 -0
  34. package/dist/cli-core/adapters/opencode.d.ts +5 -0
  35. package/dist/cli-core/adapters/opencode.js +116 -0
  36. package/dist/cli-core/adapters/opencode.js.map +1 -0
  37. package/dist/cli-core/guard.d.ts +9 -1
  38. package/dist/cli-core/guard.js +48 -16
  39. package/dist/cli-core/guard.js.map +1 -1
  40. package/dist/cli-core/init-manager.d.ts +1 -0
  41. package/dist/cli-core/init-manager.js +48 -8
  42. package/dist/cli-core/init-manager.js.map +1 -1
  43. package/dist/cli-core/platform-client.d.ts +12 -0
  44. package/dist/cli-core/platform-client.js +150 -9
  45. package/dist/cli-core/platform-client.js.map +1 -1
  46. package/dist/cli-core/quality-check.d.ts +8 -0
  47. package/dist/cli-core/quality-check.js +67 -0
  48. package/dist/cli-core/quality-check.js.map +1 -0
  49. package/dist/cli-core/types.d.ts +1 -0
  50. package/package.json +17 -4
@@ -33,7 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.ClaudeCodeClient = exports.PlatformClient = void 0;
36
+ exports.OpenCodeClient = exports.HermesAgentClient = exports.OpenClawClient = exports.CodexClient = exports.ClaudeCodeClient = exports.PlatformClient = void 0;
37
37
  exports.resolvePlatformClient = resolvePlatformClient;
38
38
  const child_process_1 = require("child_process");
39
39
  const fs = __importStar(require("fs/promises"));
@@ -99,21 +99,162 @@ class ClaudeCodeClient extends PlatformClient {
99
99
  }
100
100
  }
101
101
  exports.ClaudeCodeClient = ClaudeCodeClient;
102
+ class CodexClient extends PlatformClient {
103
+ async sendPrompt(prompt, options) {
104
+ const t0 = Date.now();
105
+ const model = options?.model;
106
+ const args = ['--quiet'];
107
+ if (model)
108
+ args.push('--model', model);
109
+ console.error(`[nova] spawning codex (prompt: ${prompt.length} chars, via stdin)...`);
110
+ return new Promise((resolve, reject) => {
111
+ const child = (0, child_process_1.spawn)('codex', args, { stdio: ['pipe', 'pipe', 'pipe'] });
112
+ console.error(`[nova] codex pid=${child.pid} spawned in ${Date.now() - t0}ms`);
113
+ child.stdin.write(prompt);
114
+ child.stdin.end();
115
+ let stdout = '';
116
+ let stderr = '';
117
+ child.stdout.on('data', (data) => { stdout += data.toString(); });
118
+ child.stderr.on('data', (data) => { stderr += data.toString(); });
119
+ child.on('close', (code) => {
120
+ const elapsed = Date.now() - t0;
121
+ console.error(`[nova] codex exited code=${code}, ${stdout.length} chars, ${elapsed}ms`);
122
+ if (code === 0) {
123
+ resolve({ content: stdout.trim() });
124
+ }
125
+ else {
126
+ reject(new Error(`Codex CLI exit ${code}: ${stderr}`));
127
+ }
128
+ });
129
+ child.on('error', (err) => {
130
+ console.error(`[nova] codex spawn error: ${err.message}`);
131
+ reject(err);
132
+ });
133
+ });
134
+ }
135
+ }
136
+ exports.CodexClient = CodexClient;
137
+ class OpenClawClient extends PlatformClient {
138
+ async sendPrompt(prompt, options) {
139
+ const t0 = Date.now();
140
+ const args = ['--print'];
141
+ if (options?.model)
142
+ args.push('--model', options.model);
143
+ console.error(`[nova] spawning openclaw (prompt: ${prompt.length} chars, via stdin)...`);
144
+ return new Promise((resolve, reject) => {
145
+ const child = (0, child_process_1.spawn)('openclaw', args, { stdio: ['pipe', 'pipe', 'pipe'] });
146
+ console.error(`[nova] openclaw pid=${child.pid} spawned in ${Date.now() - t0}ms`);
147
+ child.stdin.write(prompt);
148
+ child.stdin.end();
149
+ let stdout = '';
150
+ let stderr = '';
151
+ child.stdout.on('data', (data) => { stdout += data.toString(); });
152
+ child.stderr.on('data', (data) => { stderr += data.toString(); });
153
+ child.on('close', (code) => {
154
+ const elapsed = Date.now() - t0;
155
+ console.error(`[nova] openclaw exited code=${code}, ${stdout.length} chars, ${elapsed}ms`);
156
+ if (code === 0) {
157
+ resolve({ content: stdout.trim() });
158
+ }
159
+ else {
160
+ reject(new Error(`OpenClaw CLI exit ${code}: ${stderr}`));
161
+ }
162
+ });
163
+ child.on('error', (err) => {
164
+ console.error(`[nova] openclaw spawn error: ${err.message}`);
165
+ reject(err);
166
+ });
167
+ });
168
+ }
169
+ }
170
+ exports.OpenClawClient = OpenClawClient;
171
+ class HermesAgentClient extends PlatformClient {
172
+ async sendPrompt(prompt, options) {
173
+ const t0 = Date.now();
174
+ const args = ['--print'];
175
+ if (options?.model)
176
+ args.push('--model', options.model);
177
+ console.error(`[nova] spawning hermes-agent (prompt: ${prompt.length} chars, via stdin)...`);
178
+ return new Promise((resolve, reject) => {
179
+ const child = (0, child_process_1.spawn)('hermes-agent', args, { stdio: ['pipe', 'pipe', 'pipe'] });
180
+ console.error(`[nova] hermes-agent pid=${child.pid} spawned in ${Date.now() - t0}ms`);
181
+ child.stdin.write(prompt);
182
+ child.stdin.end();
183
+ let stdout = '';
184
+ let stderr = '';
185
+ child.stdout.on('data', (data) => { stdout += data.toString(); });
186
+ child.stderr.on('data', (data) => { stderr += data.toString(); });
187
+ child.on('close', (code) => {
188
+ const elapsed = Date.now() - t0;
189
+ console.error(`[nova] hermes-agent exited code=${code}, ${stdout.length} chars, ${elapsed}ms`);
190
+ if (code === 0) {
191
+ resolve({ content: stdout.trim() });
192
+ }
193
+ else {
194
+ reject(new Error(`Hermes Agent CLI exit ${code}: ${stderr}`));
195
+ }
196
+ });
197
+ child.on('error', (err) => {
198
+ console.error(`[nova] hermes-agent spawn error: ${err.message}`);
199
+ reject(err);
200
+ });
201
+ });
202
+ }
203
+ }
204
+ exports.HermesAgentClient = HermesAgentClient;
205
+ class OpenCodeClient extends PlatformClient {
206
+ async sendPrompt(prompt, options) {
207
+ const t0 = Date.now();
208
+ const args = ['run', prompt];
209
+ if (options?.model)
210
+ args.push('--model', options.model);
211
+ console.error(`[nova] spawning opencode (prompt: ${prompt.length} chars)...`);
212
+ return new Promise((resolve, reject) => {
213
+ const child = (0, child_process_1.spawn)('opencode', args, { stdio: ['pipe', 'pipe', 'pipe'] });
214
+ console.error(`[nova] opencode pid=${child.pid} spawned in ${Date.now() - t0}ms`);
215
+ let stdout = '';
216
+ let stderr = '';
217
+ child.stdout.on('data', (data) => { stdout += data.toString(); });
218
+ child.stderr.on('data', (data) => { stderr += data.toString(); });
219
+ child.on('close', (code) => {
220
+ const elapsed = Date.now() - t0;
221
+ console.error(`[nova] opencode exited code=${code}, ${stdout.length} chars, ${elapsed}ms`);
222
+ if (code === 0) {
223
+ resolve({ content: stdout.trim() });
224
+ }
225
+ else {
226
+ reject(new Error(`OpenCode CLI exit ${code}: ${stderr}`));
227
+ }
228
+ });
229
+ child.on('error', (err) => {
230
+ console.error(`[nova] opencode spawn error: ${err.message}`);
231
+ reject(err);
232
+ });
233
+ });
234
+ }
235
+ }
236
+ exports.OpenCodeClient = OpenCodeClient;
102
237
  // --- Factory ---
238
+ const CLIENT_FACTORIES = {
239
+ 'claude-code': () => new ClaudeCodeClient(),
240
+ 'codex': () => new CodexClient(),
241
+ 'openclaw': () => new OpenClawClient(),
242
+ 'hermes-agent': () => new HermesAgentClient(),
243
+ 'opencode': () => new OpenCodeClient(),
244
+ };
103
245
  async function resolvePlatformClient(cwd) {
104
246
  const dir = cwd ?? process.cwd();
247
+ let env = 'claude-code';
105
248
  try {
106
249
  const raw = await fs.readFile(path.join(dir, '.nova.yaml'), 'utf-8');
107
250
  const state = yaml.parse(raw);
108
- const env = state.environment?.[0];
109
- if (env === 'codex' || env === 'openclaw' || env === 'hermes-agent') {
110
- throw new Error(`${env} is not yet supported. Nova currently supports Claude Code only.`);
111
- }
251
+ env = state.environment?.[0] ?? 'claude-code';
112
252
  }
113
- catch (err) {
114
- if (err.message?.includes('not yet supported'))
115
- throw err;
253
+ catch { }
254
+ const factory = CLIENT_FACTORIES[env];
255
+ if (!factory) {
256
+ throw new Error(`Unsupported environment: ${env}. Supported: ${Object.keys(CLIENT_FACTORIES).join(', ')}`);
116
257
  }
117
- return new ClaudeCodeClient();
258
+ return factory();
118
259
  }
119
260
  //# sourceMappingURL=platform-client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"platform-client.js","sourceRoot":"","sources":["../../src/cli-core/platform-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"platform-client.js","sourceRoot":"","sources":["../../src/cli-core/platform-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export interface QualityReport {
2
+ pass: boolean;
3
+ errors: string[];
4
+ }
5
+ export declare function validateTaskSchema(tasks: any[]): QualityReport;
6
+ export declare function validateTaskIds(tasks: any[]): QualityReport;
7
+ export declare function validateAcceptance(tasks: any[]): QualityReport;
8
+ export declare function validateFiles(tasks: any[]): QualityReport;
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateTaskSchema = validateTaskSchema;
4
+ exports.validateTaskIds = validateTaskIds;
5
+ exports.validateAcceptance = validateAcceptance;
6
+ exports.validateFiles = validateFiles;
7
+ const REQUIRED_FIELDS = ['id', 'title', 'type', 'files', 'acceptance'];
8
+ const KEBAB_CASE_RE = /^[a-z][a-z0-9]*(-[a-z0-9]+)*$/;
9
+ function validateTaskSchema(tasks) {
10
+ const errors = [];
11
+ for (const task of tasks) {
12
+ const missing = REQUIRED_FIELDS.filter(f => !(f in task));
13
+ if (missing.length > 0) {
14
+ const label = task.id || '<missing-id>';
15
+ errors.push(`${label}: missing fields: ${missing.join(', ')}`);
16
+ }
17
+ }
18
+ return { pass: errors.length === 0, errors };
19
+ }
20
+ function validateTaskIds(tasks) {
21
+ const errors = [];
22
+ const seen = new Set();
23
+ for (const task of tasks) {
24
+ const id = task.id;
25
+ if (!id)
26
+ continue; // caught by validateTaskSchema
27
+ if (!KEBAB_CASE_RE.test(id)) {
28
+ errors.push(`${id}: not kebab-case`);
29
+ }
30
+ if (seen.has(id)) {
31
+ errors.push(`${id}: duplicate task id`);
32
+ }
33
+ seen.add(id);
34
+ }
35
+ return { pass: errors.length === 0, errors };
36
+ }
37
+ function validateAcceptance(tasks) {
38
+ const errors = [];
39
+ for (const task of tasks) {
40
+ const id = task.id || '<missing-id>';
41
+ if (!Array.isArray(task.acceptance)) {
42
+ errors.push(`${id}: missing acceptance criteria`);
43
+ }
44
+ else if (task.acceptance.length === 0) {
45
+ errors.push(`${id}: acceptance criteria is empty`);
46
+ }
47
+ }
48
+ return { pass: errors.length === 0, errors };
49
+ }
50
+ function validateFiles(tasks) {
51
+ const errors = [];
52
+ for (const task of tasks) {
53
+ const id = task.id || '<missing-id>';
54
+ if (!Array.isArray(task.files) || task.files.length === 0) {
55
+ errors.push(`${id}: files array is empty or missing`);
56
+ continue;
57
+ }
58
+ for (const f of task.files) {
59
+ if (!f.path || !f.action) {
60
+ errors.push(`${id}: file entry missing path or action`);
61
+ break;
62
+ }
63
+ }
64
+ }
65
+ return { pass: errors.length === 0, errors };
66
+ }
67
+ //# sourceMappingURL=quality-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quality-check.js","sourceRoot":"","sources":["../../src/cli-core/quality-check.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@ export declare enum AgentType {
6
6
  CODE_REVIEWER = "code_reviewer",
7
7
  SECURITY_REVIEWER = "security_reviewer"
8
8
  }
9
+ export type TaskStatus = 'pending' | 'in-progress' | 'done' | 'failed' | 'skipped';
9
10
  export interface TaskContext {
10
11
  taskId: string;
11
12
  parentTaskId?: string;
package/package.json CHANGED
@@ -1,17 +1,30 @@
1
1
  {
2
2
  "name": "@nova286/nova-workflow",
3
- "version": "0.2.0",
3
+ "version": "2.1.1",
4
4
  "description": "Nova: AI workflow orchestration — a thin shell for disciplined AI-assisted development",
5
5
  "main": "dist/cli/index.js",
6
- "bin": { "nova": "dist/cli/index.js" },
6
+ "bin": {
7
+ "nova": "dist/cli/index.js"
8
+ },
7
9
  "scripts": {
8
10
  "build": "tsc",
9
11
  "dev": "ts-node src/cli/index.ts",
10
12
  "test": "jest",
11
13
  "prepublishOnly": "npm run build && npm test"
12
14
  },
13
- "files": ["dist/", "templates/", "README.md"],
14
- "keywords": ["nova", "ai-workflow", "orchestration", "claude-code", "skill-based", "process-automation"],
15
+ "files": [
16
+ "dist/",
17
+ "templates/",
18
+ "README.md"
19
+ ],
20
+ "keywords": [
21
+ "nova",
22
+ "ai-workflow",
23
+ "orchestration",
24
+ "claude-code",
25
+ "skill-based",
26
+ "process-automation"
27
+ ],
15
28
  "license": "MIT",
16
29
  "dependencies": {
17
30
  "commander": "^11.0.0",