nimai-cli 0.1.1 → 0.2.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/commands/spec-review.d.ts +5 -0
- package/dist/commands/spec-review.d.ts.map +1 -0
- package/dist/commands/spec-review.js +71 -0
- package/dist/commands/spec-review.js.map +1 -0
- package/dist/commands/spec.d.ts.map +1 -1
- package/dist/commands/spec.js +76 -31
- package/dist/commands/spec.js.map +1 -1
- package/dist/commands/validate.d.ts.map +1 -1
- package/dist/commands/validate.js +5 -1
- package/dist/commands/validate.js.map +1 -1
- package/dist/index.js +10 -2
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec-review.d.ts","sourceRoot":"","sources":["../../src/commands/spec-review.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,iBAAiB;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI,CA8BhF"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.runSpecReview = runSpecReview;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const nimai_core_1 = require("nimai-core");
|
|
40
|
+
function runSpecReview(specPath, options) {
|
|
41
|
+
const resolved = path.resolve(specPath);
|
|
42
|
+
let specContent;
|
|
43
|
+
try {
|
|
44
|
+
specContent = fs.readFileSync(resolved, 'utf-8');
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
console.error(`Error: Cannot read spec at "${resolved}"`);
|
|
48
|
+
process.exit(1);
|
|
49
|
+
}
|
|
50
|
+
const specReviewerPrompt = (0, nimai_core_1.buildPrompt15)(specContent);
|
|
51
|
+
if (options.out) {
|
|
52
|
+
const outPath = path.resolve(options.out);
|
|
53
|
+
const dir = path.dirname(outPath);
|
|
54
|
+
if (!fs.existsSync(dir))
|
|
55
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
56
|
+
fs.writeFileSync(outPath, specReviewerPrompt, 'utf-8');
|
|
57
|
+
console.log(`Spec reviewer prompt written to ${outPath}`);
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
console.log('=== NIMAI SPEC REVIEW PROMPT ===');
|
|
61
|
+
console.log('');
|
|
62
|
+
console.log('Pass the following prompt to a reviewing LLM.');
|
|
63
|
+
console.log('The LLM response will contain a JSON verdict block with {passed, issues}.');
|
|
64
|
+
console.log('');
|
|
65
|
+
console.log('--- PROMPT ---');
|
|
66
|
+
console.log(specReviewerPrompt);
|
|
67
|
+
console.log('');
|
|
68
|
+
console.log('Tip: use --out <file> to save this prompt for reuse.');
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=spec-review.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec-review.js","sourceRoot":"","sources":["../../src/commands/spec-review.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,sCA8BC;AAtCD,uCAAyB;AACzB,2CAA6B;AAC7B,2CAA2C;AAM3C,SAAgB,aAAa,CAAC,QAAgB,EAAE,OAA0B;IACxE,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAExC,IAAI,WAAmB,CAAC;IACxB,IAAI,CAAC;QACH,WAAW,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,+BAA+B,QAAQ,GAAG,CAAC,CAAC;QAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,kBAAkB,GAAG,IAAA,0BAAa,EAAC,WAAW,CAAC,CAAC;IAEtD,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAClC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,kBAAkB,EAAE,OAAO,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,mCAAmC,OAAO,EAAE,CAAC,CAAC;IAC5D,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,2EAA2E,CAAC,CAAC;QACzF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;IACtE,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec.d.ts","sourceRoot":"","sources":["../../src/commands/spec.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"spec.d.ts","sourceRoot":"","sources":["../../src/commands/spec.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAKtD,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,OAAO,CAAC,EAAE,YAAY,CAAC;CACxB;AAED,wBAAsB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAiElF"}
|
package/dist/commands/spec.js
CHANGED
|
@@ -36,6 +36,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
36
36
|
exports.runSpec = runSpec;
|
|
37
37
|
const path = __importStar(require("path"));
|
|
38
38
|
const fs = __importStar(require("fs"));
|
|
39
|
+
const readline = __importStar(require("readline"));
|
|
39
40
|
const nimai_core_1 = require("nimai-core");
|
|
40
41
|
const anthropic_1 = require("../adapters/anthropic");
|
|
41
42
|
const errors_1 = require("../adapters/errors");
|
|
@@ -63,12 +64,66 @@ async function runSpec(request, options) {
|
|
|
63
64
|
.map(item => `[${item.file}]\n${item.snippet}`)
|
|
64
65
|
.join('\n\n---\n\n');
|
|
65
66
|
const prompt = (0, nimai_core_1.buildPrompt1)(request, contextSummary);
|
|
67
|
+
// ── Clarification heuristics ──────────────────────────────────────────────────
|
|
68
|
+
const clarification = (0, nimai_core_1.detectClarifications)(request, context.length);
|
|
69
|
+
const needsClarification = clarification.needed;
|
|
70
|
+
const clarificationQuestions = clarification.questions;
|
|
66
71
|
// ── --hosted: return deterministic bundle, no API call ───────────────────────
|
|
67
72
|
if (options.hosted) {
|
|
68
|
-
printBundle(prompt, context);
|
|
73
|
+
printBundle(prompt, context, clarificationQuestions);
|
|
69
74
|
return;
|
|
70
75
|
}
|
|
71
|
-
// ── --standalone:
|
|
76
|
+
// ── --standalone: interactive clarification via readline (if TTY) ───────────
|
|
77
|
+
if (needsClarification && process.stdin.isTTY) {
|
|
78
|
+
const answers = await promptClarifications(clarificationQuestions);
|
|
79
|
+
const answerBlock = answers
|
|
80
|
+
.map((a, i) => `Q: ${clarificationQuestions[i]}\nA: ${a}`)
|
|
81
|
+
.join('\n\n');
|
|
82
|
+
console.error(`\nClarifications captured. Proceeding with enriched context.\n`);
|
|
83
|
+
const enrichedSummary = contextSummary
|
|
84
|
+
? `${contextSummary}\n\n--- CLARIFICATIONS ---\n${answerBlock}`
|
|
85
|
+
: `--- CLARIFICATIONS ---\n${answerBlock}`;
|
|
86
|
+
const enrichedPrompt = (0, nimai_core_1.buildPrompt1)(request, enrichedSummary);
|
|
87
|
+
return runSpecWithPrompt(enrichedPrompt, options);
|
|
88
|
+
}
|
|
89
|
+
if (needsClarification) {
|
|
90
|
+
// Non-TTY (scripted/piped): print clarifications as advisory warnings, then proceed
|
|
91
|
+
console.error('\nAdvisory: the request may benefit from clarification:');
|
|
92
|
+
clarificationQuestions.forEach((q, i) => console.error(` ${i + 1}. ${q}`));
|
|
93
|
+
console.error('');
|
|
94
|
+
}
|
|
95
|
+
// ── --standalone: proceed with original prompt ────────────────────────────
|
|
96
|
+
return runSpecWithPrompt(prompt, options);
|
|
97
|
+
}
|
|
98
|
+
function buildAdapter(adapterName, model, config) {
|
|
99
|
+
if (adapterName === 'anthropic') {
|
|
100
|
+
const apiKey = process.env['ANTHROPIC_API_KEY'];
|
|
101
|
+
if (!apiKey) {
|
|
102
|
+
console.error('Error: ANTHROPIC_API_KEY environment variable is not set.\n' +
|
|
103
|
+
'Set it and retry, or use --hosted to generate a prompt bundle without an API key.');
|
|
104
|
+
process.exit(1);
|
|
105
|
+
}
|
|
106
|
+
return new anthropic_1.AnthropicAdapter(apiKey, model);
|
|
107
|
+
}
|
|
108
|
+
if (adapterName === 'openai') {
|
|
109
|
+
const { OpenAIAdapter } = require('../adapters/openai');
|
|
110
|
+
const apiKey = process.env['OPENAI_API_KEY'];
|
|
111
|
+
if (!apiKey) {
|
|
112
|
+
console.error('Error: OPENAI_API_KEY environment variable is not set.');
|
|
113
|
+
process.exit(1);
|
|
114
|
+
}
|
|
115
|
+
return new OpenAIAdapter(apiKey, model, config.openaiBaseUrl);
|
|
116
|
+
}
|
|
117
|
+
if (adapterName === 'ollama') {
|
|
118
|
+
const { OllamaAdapter } = require('../adapters/ollama');
|
|
119
|
+
return new OllamaAdapter(config.ollamaUrl, model);
|
|
120
|
+
}
|
|
121
|
+
console.error(`Error: Unknown adapter "${adapterName}". Valid values: anthropic, openai, ollama`);
|
|
122
|
+
process.exit(1);
|
|
123
|
+
}
|
|
124
|
+
/** Extract the standalone generation + output + validate logic into a helper so
|
|
125
|
+
* it can be called with either the original prompt or an enriched (post-clarification) prompt. */
|
|
126
|
+
async function runSpecWithPrompt(prompt, options) {
|
|
72
127
|
let adapter;
|
|
73
128
|
if (options.adapter) {
|
|
74
129
|
adapter = options.adapter;
|
|
@@ -78,7 +133,7 @@ async function runSpec(request, options) {
|
|
|
78
133
|
const config = (0, config_1.resolveConfig)(fileConfig, { model: options.model });
|
|
79
134
|
adapter = buildAdapter(config.adapter, config.model, config);
|
|
80
135
|
if (!adapter)
|
|
81
|
-
process.exit(1);
|
|
136
|
+
process.exit(1);
|
|
82
137
|
}
|
|
83
138
|
let specContent;
|
|
84
139
|
try {
|
|
@@ -88,7 +143,6 @@ async function runSpec(request, options) {
|
|
|
88
143
|
console.error(`Error: ${err instanceof errors_1.AdapterError ? err.message : err.message}`);
|
|
89
144
|
process.exit(1);
|
|
90
145
|
}
|
|
91
|
-
// ── Output ────────────────────────────────────────────────────────────────────
|
|
92
146
|
if (options.out) {
|
|
93
147
|
const outPath = path.resolve(options.out);
|
|
94
148
|
const dir = path.dirname(outPath);
|
|
@@ -100,7 +154,6 @@ async function runSpec(request, options) {
|
|
|
100
154
|
else {
|
|
101
155
|
console.log(specContent);
|
|
102
156
|
}
|
|
103
|
-
// ── --validate ────────────────────────────────────────────────────────────────
|
|
104
157
|
if (options.validate) {
|
|
105
158
|
const issues = (0, nimai_core_1.lintContent)(specContent);
|
|
106
159
|
const hard = issues.filter(i => !i.advisory);
|
|
@@ -123,35 +176,27 @@ async function runSpec(request, options) {
|
|
|
123
176
|
}
|
|
124
177
|
}
|
|
125
178
|
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
const { OpenAIAdapter } = require('../adapters/openai');
|
|
138
|
-
const apiKey = process.env['OPENAI_API_KEY'];
|
|
139
|
-
if (!apiKey) {
|
|
140
|
-
console.error('Error: OPENAI_API_KEY environment variable is not set.');
|
|
141
|
-
process.exit(1);
|
|
142
|
-
}
|
|
143
|
-
return new OpenAIAdapter(apiKey, model, config.openaiBaseUrl);
|
|
144
|
-
}
|
|
145
|
-
if (adapterName === 'ollama') {
|
|
146
|
-
const { OllamaAdapter } = require('../adapters/ollama');
|
|
147
|
-
return new OllamaAdapter(config.ollamaUrl, model);
|
|
148
|
-
}
|
|
149
|
-
console.error(`Error: Unknown adapter "${adapterName}". Valid values: anthropic, openai, ollama`);
|
|
150
|
-
process.exit(1);
|
|
179
|
+
/** Prompts the user for answers to clarification questions via readline. */
|
|
180
|
+
async function promptClarifications(questions) {
|
|
181
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stderr });
|
|
182
|
+
const ask = (q) => new Promise(resolve => rl.question(` ${q}\n > `, resolve));
|
|
183
|
+
console.error('\nClarifications needed before generating the spec:\n');
|
|
184
|
+
const answers = [];
|
|
185
|
+
for (const q of questions) {
|
|
186
|
+
answers.push(await ask(q));
|
|
187
|
+
}
|
|
188
|
+
rl.close();
|
|
189
|
+
return answers;
|
|
151
190
|
}
|
|
152
|
-
function printBundle(prompt, context) {
|
|
191
|
+
function printBundle(prompt, context, clarifications = []) {
|
|
153
192
|
console.log('=== NIMAI SPEC BUNDLE ===');
|
|
154
193
|
console.log('');
|
|
194
|
+
if (clarifications.length > 0) {
|
|
195
|
+
console.log('--- PREFLIGHT CLARIFICATIONS ---');
|
|
196
|
+
console.log('The following questions may improve spec quality. Answer them and re-run, or proceed:');
|
|
197
|
+
clarifications.forEach((q, i) => console.log(` ${i + 1}. ${q}`));
|
|
198
|
+
console.log('');
|
|
199
|
+
}
|
|
155
200
|
console.log('--- PROMPT (paste into your AI agent) ---');
|
|
156
201
|
console.log(prompt);
|
|
157
202
|
if (context.length > 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec.js","sourceRoot":"","sources":["../../src/commands/spec.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"spec.js","sourceRoot":"","sources":["../../src/commands/spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC9B,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC9B,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,IAAI,CA0DjF"}
|
|
@@ -13,8 +13,9 @@ function runValidate(specPath, options = {}) {
|
|
|
13
13
|
}
|
|
14
14
|
const hard = issues.filter(i => !i.advisory);
|
|
15
15
|
const advisory = issues.filter(i => i.advisory);
|
|
16
|
+
const PASS_ADVISORY = 'PASS (structural): required sections/fields are complete. Semantic quality is not guaranteed; review acceptance criteria and constraints before execution.';
|
|
16
17
|
if (hard.length === 0 && advisory.length === 0) {
|
|
17
|
-
console.log(
|
|
18
|
+
console.log(PASS_ADVISORY);
|
|
18
19
|
return;
|
|
19
20
|
}
|
|
20
21
|
const blanks = hard.filter(i => i.type === 'blank_field');
|
|
@@ -46,5 +47,8 @@ function runValidate(specPath, options = {}) {
|
|
|
46
47
|
if (hard.length > 0 || options.strictArchitecture) {
|
|
47
48
|
process.exit(1);
|
|
48
49
|
}
|
|
50
|
+
if (hard.length === 0) {
|
|
51
|
+
console.log(PASS_ADVISORY);
|
|
52
|
+
}
|
|
49
53
|
}
|
|
50
54
|
//# sourceMappingURL=validate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":";;AAMA,
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -6,11 +6,12 @@ const spec_1 = require("./commands/spec");
|
|
|
6
6
|
const validate_1 = require("./commands/validate");
|
|
7
7
|
const review_1 = require("./commands/review");
|
|
8
8
|
const new_1 = require("./commands/new");
|
|
9
|
+
const spec_review_1 = require("./commands/spec-review");
|
|
9
10
|
const program = new commander_1.Command();
|
|
10
11
|
program
|
|
11
12
|
.name('nimai')
|
|
12
|
-
.description('Nimai — spec ops CLI for AI work\n\nCommands: spec, validate, review, new\nPlanned (M3b): nimai run — execute a spec end-to-end (deferred pending usage data)')
|
|
13
|
-
.version('0.1.
|
|
13
|
+
.description('Nimai — spec ops CLI for AI work\n\nCommands: spec, validate, review, spec-review, new\nPlanned (M3b): nimai run — execute a spec end-to-end (deferred pending usage data)')
|
|
14
|
+
.version('0.1.2', '-v, --version');
|
|
14
15
|
program
|
|
15
16
|
.command('spec <request>')
|
|
16
17
|
.description('Generate a FORGE spec from a loose request')
|
|
@@ -49,6 +50,13 @@ program
|
|
|
49
50
|
.action((specPath, options) => {
|
|
50
51
|
(0, review_1.runReview)(specPath, { out: options.out });
|
|
51
52
|
});
|
|
53
|
+
program
|
|
54
|
+
.command('spec-review <specPath>')
|
|
55
|
+
.description('Generate a FORGE Prompt 1.5 (Spec-Quality Reviewer) for a draft spec')
|
|
56
|
+
.option('--out <file>', 'Write reviewer prompt to file instead of stdout')
|
|
57
|
+
.action((specPath, options) => {
|
|
58
|
+
(0, spec_review_1.runSpecReview)(specPath, { out: options.out });
|
|
59
|
+
});
|
|
52
60
|
program
|
|
53
61
|
.command('new <outputPath>')
|
|
54
62
|
.description('Scaffold a new FORGE spec file from the canonical template')
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,yCAAoC;AACpC,0CAA0C;AAC1C,kDAAkD;AAClD,8CAA8C;AAC9C,wCAAwC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nimai-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Nimai CLI — spec ops for AI work. nimai spec, review, validate, and new.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"nimai",
|
|
@@ -40,8 +40,8 @@
|
|
|
40
40
|
"commander": "^12.1.0",
|
|
41
41
|
"js-yaml": "^4.1.1",
|
|
42
42
|
"zod": "^3.25.76",
|
|
43
|
-
"nimai-core": "0.
|
|
44
|
-
"nimai-mcp": "0.
|
|
43
|
+
"nimai-core": "0.2.0",
|
|
44
|
+
"nimai-mcp": "0.2.0"
|
|
45
45
|
},
|
|
46
46
|
"scripts": {
|
|
47
47
|
"build": "tsc",
|