@nirnex/cli 2.0.3 → 3.0.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/index.js +2 -2
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/query.js +2 -2
- package/dist/commands/query.js.map +1 -1
- package/dist/commands/setup.d.ts +6 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +296 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/status.d.ts +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +84 -21
- package/dist/commands/status.js.map +1 -1
- package/dist/index.js +16 -10
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/commands/index.js
CHANGED
|
@@ -43,7 +43,7 @@ export function indexCommand(args) {
|
|
|
43
43
|
const isRebuild = args.includes('--rebuild');
|
|
44
44
|
const targetDir = process.cwd();
|
|
45
45
|
const dbPath = path.join(targetDir, '.aidos.db');
|
|
46
|
-
console.log('[
|
|
46
|
+
console.log('[nirnex index] Starting ' + (isRebuild ? 'full rebuild' : 'incremental update') + ' on ' + targetDir);
|
|
47
47
|
const t0 = performance.now();
|
|
48
48
|
const db = openDb(dbPath);
|
|
49
49
|
let filesToProcess = [];
|
|
@@ -97,6 +97,6 @@ export function indexCommand(args) {
|
|
|
97
97
|
// Ignore if not a git repo
|
|
98
98
|
}
|
|
99
99
|
const t1 = performance.now();
|
|
100
|
-
console.log('[
|
|
100
|
+
console.log('[nirnex index] Finished processing ' + filesToProcess.length + ' file(s) in ' + (t1 - t0).toFixed(2) + 'ms');
|
|
101
101
|
}
|
|
102
102
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/query.js
CHANGED
|
@@ -34,7 +34,7 @@ export async function queryCommand(args) {
|
|
|
34
34
|
rawQuery = args[args.indexOf('--impact') + 1] || '';
|
|
35
35
|
}
|
|
36
36
|
if (!rawQuery) {
|
|
37
|
-
console.error('Usage:
|
|
37
|
+
console.error('Usage: nirnex query "<question>" or nirnex query --impact <file>');
|
|
38
38
|
return;
|
|
39
39
|
}
|
|
40
40
|
const db = openDb(dbPath);
|
|
@@ -123,7 +123,7 @@ export async function queryCommand(args) {
|
|
|
123
123
|
const label = getConfidenceLabel(conf.score);
|
|
124
124
|
const tier = computeDegradationTier(penalties);
|
|
125
125
|
const suggested = getSuggestedNext(conf.score, rawQuery);
|
|
126
|
-
console.log('\\n[
|
|
126
|
+
console.log('\\n[nirnex query] Results for "' + rawQuery + '"');
|
|
127
127
|
console.log('Flags Fired: ' + flags);
|
|
128
128
|
console.log('Sources Used: ' + sourcesUsed.join(', '));
|
|
129
129
|
console.log('Duration: ' + (t1 - t0).toFixed(2) + 'ms');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/commands/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,IAAK,SAMJ;AAND,WAAK,SAAS;IACZ,+DAAwB,CAAA;IACxB,yDAAqB,CAAA;IACrB,yDAAqB,CAAA;IACrB,2DAAsB,CAAA;IACtB,0DAAqB,CAAA;AACvB,CAAC,EANI,SAAS,KAAT,SAAS,QAMb;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAEjC,IAAI,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,KAAK,IAAI,SAAS,CAAC,eAAe,CAAC;IAC3E,IAAI,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,KAAK,IAAI,SAAS,CAAC,YAAY,CAAC;IACtE,IAAI,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,KAAK,IAAI,SAAS,CAAC,YAAY,CAAC;IACxI,IAAI,8BAA8B,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,KAAK,IAAI,SAAS,CAAC,aAAa,CAAC;IAChF,IAAI,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,KAAK,IAAI,SAAS,CAAC,YAAY,CAAC;IAE1E,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAc;IAC/C,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAChC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAEjD,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,gBAAgB,GAAG,KAAK,CAAC;IAC7B,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,gBAAgB,GAAG,IAAI,CAAC;QACxB,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACtD,CAAC;IAED,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/commands/query.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAyLA,iBAAe,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,GAAG,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAiI1E;AAID,OAAO,EAAE,QAAQ,EAAE,CAAC;AAEpB,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAKhE"}
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
// Command: nirnex setup
|
|
2
|
+
// Fully Nirnex-enables a repository: creates .ai/, nirnex.config.json,
|
|
3
|
+
// initializes the index, and optionally installs the git post-commit hook.
|
|
4
|
+
import fs from 'node:fs';
|
|
5
|
+
import path from 'node:path';
|
|
6
|
+
import readline from 'node:readline';
|
|
7
|
+
// ─── Default file templates ───────────────────────────────────────────────
|
|
8
|
+
const DEFAULT_ANALYST_MD = `# Analyst Persona
|
|
9
|
+
|
|
10
|
+
## Role
|
|
11
|
+
You are the Analyst agent in the Nirnex pipeline. Your job is to
|
|
12
|
+
**understand the codebase** and produce structured knowledge for the Implementer.
|
|
13
|
+
|
|
14
|
+
## Responsibilities
|
|
15
|
+
1. Parse the module graph and identify architectural patterns.
|
|
16
|
+
2. Detect hot-spots: high complexity, high coupling, circular dependencies.
|
|
17
|
+
3. Summarise each module in ≤ 120 tokens.
|
|
18
|
+
4. Identify critical paths from \`critical-paths.txt\` and flag changes that touch them.
|
|
19
|
+
5. Output gate results for the \`patterns\` and \`gate_results\` tables.
|
|
20
|
+
|
|
21
|
+
## Output Contract
|
|
22
|
+
- \`modules\` rows updated with \`content_hash\` and \`loc\`.
|
|
23
|
+
- \`patterns\` rows inserted for any detected smell.
|
|
24
|
+
- \`summaries\` rows upserted per module.
|
|
25
|
+
- Return a JSON status: \`{ ok: boolean, warnings: string[] }\`.
|
|
26
|
+
|
|
27
|
+
## Constraints
|
|
28
|
+
- Do not modify source files.
|
|
29
|
+
- Do not write to \`hub_summaries\` — that is the Implementer's job.
|
|
30
|
+
- Budget: ≤ 2 minutes wall-clock per invocation.
|
|
31
|
+
`;
|
|
32
|
+
const DEFAULT_IMPLEMENTER_MD = `# Implementer Persona
|
|
33
|
+
|
|
34
|
+
## Role
|
|
35
|
+
You are the Implementer agent in the Nirnex pipeline. Your job is to
|
|
36
|
+
**plan and execute changes** using the knowledge produced by the Analyst.
|
|
37
|
+
|
|
38
|
+
## Responsibilities
|
|
39
|
+
1. Read \`summaries\` and \`hub_summaries\` to understand the impact radius of a change.
|
|
40
|
+
2. Check \`gate_results\` before starting — do not proceed if any critical gate is failing.
|
|
41
|
+
3. Produce a delivery plan: ordered list of files to change, with rationale.
|
|
42
|
+
4. After changes, trigger re-analysis and confirm gates pass.
|
|
43
|
+
5. Write hub summaries for directories you have modified.
|
|
44
|
+
|
|
45
|
+
## Output Contract
|
|
46
|
+
- A markdown delivery plan committed to \`.ai/specs/plan-<date>.md\`.
|
|
47
|
+
- \`gate_results\` rows inserted for your run.
|
|
48
|
+
- \`hub_summaries\` rows upserted for touched directories.
|
|
49
|
+
|
|
50
|
+
## Constraints
|
|
51
|
+
- Follow the patterns established in \`calibration/\`.
|
|
52
|
+
- Prefer minimal diffs; do not refactor outside the task scope.
|
|
53
|
+
- Do not write directly to the database — use the \`@nirnex/core\` API.
|
|
54
|
+
`;
|
|
55
|
+
const DEFAULT_CRITICAL_PATHS = `# Critical Paths
|
|
56
|
+
# List architecturally critical files or directories here.
|
|
57
|
+
# Changes touching these paths are flagged and escalated to Lane C.
|
|
58
|
+
# One path per line. Wildcards supported.
|
|
59
|
+
#
|
|
60
|
+
# Examples:
|
|
61
|
+
# src/auth/
|
|
62
|
+
# packages/core/src/schema.sql
|
|
63
|
+
# src/state/paymentMachine.ts
|
|
64
|
+
`;
|
|
65
|
+
const DEFAULT_CALIBRATION_README = `# Calibration
|
|
66
|
+
|
|
67
|
+
Project-specific calibration files for Nirnex. Add markdown files here
|
|
68
|
+
to teach agents about your codebase conventions.
|
|
69
|
+
|
|
70
|
+
Suggested files:
|
|
71
|
+
- \`naming.md\` — naming conventions for modules, functions, types
|
|
72
|
+
- \`patterns.md\` — architectural patterns used in this project
|
|
73
|
+
- \`boundaries.md\` — module ownership and cross-boundary rules
|
|
74
|
+
- \`gates.md\` — gate check thresholds and escalation policies
|
|
75
|
+
`;
|
|
76
|
+
const POST_COMMIT_HOOK = `#!/bin/sh
|
|
77
|
+
nirnex index
|
|
78
|
+
`;
|
|
79
|
+
// ─── Helpers ─────────────────────────────────────────────────────────────
|
|
80
|
+
function tick(msg) {
|
|
81
|
+
process.stdout.write(` \x1b[32m✔\x1b[0m ${msg}\n`);
|
|
82
|
+
}
|
|
83
|
+
function info(msg) {
|
|
84
|
+
process.stdout.write(` \x1b[90m·\x1b[0m ${msg}\n`);
|
|
85
|
+
}
|
|
86
|
+
function warn(msg) {
|
|
87
|
+
process.stdout.write(` \x1b[33m!\x1b[0m ${msg}\n`);
|
|
88
|
+
}
|
|
89
|
+
function mkdirSafe(p) {
|
|
90
|
+
if (!fs.existsSync(p)) {
|
|
91
|
+
fs.mkdirSync(p, { recursive: true });
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
function writeFileSafe(p, content, label) {
|
|
95
|
+
if (!fs.existsSync(p)) {
|
|
96
|
+
fs.writeFileSync(p, content, 'utf8');
|
|
97
|
+
tick(label);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
info(`${label} (already exists, skipped)`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
function detectSourceRoots(cwd) {
|
|
104
|
+
const candidates = ['src', 'apps', 'packages', 'lib'];
|
|
105
|
+
return candidates.filter(d => fs.existsSync(path.join(cwd, d)));
|
|
106
|
+
}
|
|
107
|
+
function detectProjectName(cwd) {
|
|
108
|
+
const pkgPath = path.join(cwd, 'package.json');
|
|
109
|
+
if (fs.existsSync(pkgPath)) {
|
|
110
|
+
try {
|
|
111
|
+
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
|
|
112
|
+
if (pkg.name)
|
|
113
|
+
return pkg.name;
|
|
114
|
+
}
|
|
115
|
+
catch { }
|
|
116
|
+
}
|
|
117
|
+
return path.basename(cwd);
|
|
118
|
+
}
|
|
119
|
+
function isNodeProject(cwd) {
|
|
120
|
+
return fs.existsSync(path.join(cwd, 'package.json'));
|
|
121
|
+
}
|
|
122
|
+
function isMonorepo(cwd) {
|
|
123
|
+
const pkgPath = path.join(cwd, 'package.json');
|
|
124
|
+
if (!fs.existsSync(pkgPath))
|
|
125
|
+
return false;
|
|
126
|
+
try {
|
|
127
|
+
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
|
|
128
|
+
return Array.isArray(pkg.workspaces) && pkg.workspaces.length > 0;
|
|
129
|
+
}
|
|
130
|
+
catch { }
|
|
131
|
+
return false;
|
|
132
|
+
}
|
|
133
|
+
function getFileCount(cwd) {
|
|
134
|
+
let count = 0;
|
|
135
|
+
function walk(dir) {
|
|
136
|
+
try {
|
|
137
|
+
const entries = fs.readdirSync(dir);
|
|
138
|
+
for (const e of entries) {
|
|
139
|
+
if (e === 'node_modules' || e === 'dist' || e === '.git')
|
|
140
|
+
continue;
|
|
141
|
+
const full = path.join(dir, e);
|
|
142
|
+
try {
|
|
143
|
+
const stat = fs.statSync(full);
|
|
144
|
+
if (stat.isDirectory()) {
|
|
145
|
+
walk(full);
|
|
146
|
+
}
|
|
147
|
+
else if (full.endsWith('.ts') || full.endsWith('.tsx')) {
|
|
148
|
+
count++;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
catch { }
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
catch { }
|
|
155
|
+
}
|
|
156
|
+
walk(cwd);
|
|
157
|
+
return count;
|
|
158
|
+
}
|
|
159
|
+
// ─── Interactive prompt helper ────────────────────────────────────────────
|
|
160
|
+
function prompt(rl, question) {
|
|
161
|
+
return new Promise(resolve => rl.question(question, resolve));
|
|
162
|
+
}
|
|
163
|
+
async function askYesNo(rl, question, defaultYes = true) {
|
|
164
|
+
const hint = defaultYes ? '[Y/n]' : '[y/N]';
|
|
165
|
+
const answer = await prompt(rl, ` ${question} ${hint}: `);
|
|
166
|
+
const trimmed = answer.trim().toLowerCase();
|
|
167
|
+
if (!trimmed)
|
|
168
|
+
return defaultYes;
|
|
169
|
+
return trimmed === 'y' || trimmed === 'yes';
|
|
170
|
+
}
|
|
171
|
+
// ─── Main setup logic ─────────────────────────────────────────────────────
|
|
172
|
+
async function runSetup(cwd, opts) {
|
|
173
|
+
console.log('\n\x1b[1mNirnex Setup\x1b[0m\n');
|
|
174
|
+
// Detect environment
|
|
175
|
+
const projectName = detectProjectName(cwd);
|
|
176
|
+
const sourceRoots = detectSourceRoots(cwd);
|
|
177
|
+
const isNode = isNodeProject(cwd);
|
|
178
|
+
const mono = isMonorepo(cwd);
|
|
179
|
+
if (isNode) {
|
|
180
|
+
info(`Detected project: \x1b[1m${projectName}\x1b[0m${mono ? ' (monorepo)' : ''}`);
|
|
181
|
+
}
|
|
182
|
+
if (sourceRoots.length > 0) {
|
|
183
|
+
info(`Source roots found: ${sourceRoots.join(', ')}`);
|
|
184
|
+
}
|
|
185
|
+
console.log('');
|
|
186
|
+
// Check if already initialized
|
|
187
|
+
const configPath = path.join(cwd, 'nirnex.config.json');
|
|
188
|
+
if (fs.existsSync(configPath)) {
|
|
189
|
+
console.log('\x1b[33mThis project is already Nirnex-enabled.\x1b[0m');
|
|
190
|
+
console.log('Run \x1b[1mnirnex status\x1b[0m to check the current state.\n');
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
let installHook = true;
|
|
194
|
+
let runIndex = true;
|
|
195
|
+
if (!opts.yes) {
|
|
196
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
197
|
+
try {
|
|
198
|
+
installHook = await askYesNo(rl, 'Install git post-commit hook for automatic index refresh?', true);
|
|
199
|
+
runIndex = await askYesNo(rl, 'Initialize index now?', true);
|
|
200
|
+
}
|
|
201
|
+
finally {
|
|
202
|
+
rl.close();
|
|
203
|
+
}
|
|
204
|
+
console.log('');
|
|
205
|
+
}
|
|
206
|
+
// Create .ai/ structure
|
|
207
|
+
const aiDir = path.join(cwd, '.ai');
|
|
208
|
+
const promptsDir = path.join(aiDir, 'prompts');
|
|
209
|
+
const specsDir = path.join(aiDir, 'specs');
|
|
210
|
+
const calibrationDir = path.join(aiDir, 'calibration');
|
|
211
|
+
const aiIndexDir = path.join(cwd, '.ai-index');
|
|
212
|
+
const tracesDir = path.join(aiIndexDir, 'traces');
|
|
213
|
+
mkdirSafe(aiDir);
|
|
214
|
+
tick('Created .ai/');
|
|
215
|
+
mkdirSafe(promptsDir);
|
|
216
|
+
tick('Created .ai/prompts/');
|
|
217
|
+
mkdirSafe(specsDir);
|
|
218
|
+
tick('Created .ai/specs/');
|
|
219
|
+
mkdirSafe(calibrationDir);
|
|
220
|
+
writeFileSafe(path.join(calibrationDir, 'README.md'), DEFAULT_CALIBRATION_README, 'Created .ai/calibration/README.md');
|
|
221
|
+
writeFileSafe(path.join(aiDir, 'critical-paths.txt'), DEFAULT_CRITICAL_PATHS, 'Created .ai/critical-paths.txt');
|
|
222
|
+
writeFileSafe(path.join(promptsDir, 'analyst.md'), DEFAULT_ANALYST_MD, 'Created .ai/prompts/analyst.md');
|
|
223
|
+
writeFileSafe(path.join(promptsDir, 'implementer.md'), DEFAULT_IMPLEMENTER_MD, 'Created .ai/prompts/implementer.md');
|
|
224
|
+
mkdirSafe(aiIndexDir);
|
|
225
|
+
mkdirSafe(tracesDir);
|
|
226
|
+
tick('Created .ai-index/');
|
|
227
|
+
// Write nirnex.config.json
|
|
228
|
+
const config = {
|
|
229
|
+
projectName,
|
|
230
|
+
sourceRoots: sourceRoots.length > 0 ? sourceRoots : ['src'],
|
|
231
|
+
specDirectory: '.ai/specs',
|
|
232
|
+
criticalPathsFile: '.ai/critical-paths.txt',
|
|
233
|
+
prompts: {
|
|
234
|
+
analyst: '.ai/prompts/analyst.md',
|
|
235
|
+
implementer: '.ai/prompts/implementer.md',
|
|
236
|
+
},
|
|
237
|
+
index: {
|
|
238
|
+
path: '.ai-index',
|
|
239
|
+
db: '.aidos.db',
|
|
240
|
+
autoRefresh: installHook,
|
|
241
|
+
},
|
|
242
|
+
git: {
|
|
243
|
+
installPostCommitHook: installHook,
|
|
244
|
+
},
|
|
245
|
+
llm: {
|
|
246
|
+
provider: 'anthropic',
|
|
247
|
+
},
|
|
248
|
+
};
|
|
249
|
+
fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n', 'utf8');
|
|
250
|
+
tick('Created nirnex.config.json');
|
|
251
|
+
// Install git hook
|
|
252
|
+
if (installHook) {
|
|
253
|
+
const hooksDir = path.join(cwd, '.git', 'hooks');
|
|
254
|
+
const hookPath = path.join(hooksDir, 'post-commit');
|
|
255
|
+
if (fs.existsSync(hooksDir)) {
|
|
256
|
+
if (!fs.existsSync(hookPath)) {
|
|
257
|
+
fs.writeFileSync(hookPath, POST_COMMIT_HOOK, { mode: 0o755 });
|
|
258
|
+
tick('Installed git post-commit hook');
|
|
259
|
+
}
|
|
260
|
+
else {
|
|
261
|
+
info('Git post-commit hook already exists, skipped');
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
else {
|
|
265
|
+
warn('Not a git repo — skipping post-commit hook');
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
// Run initial index
|
|
269
|
+
if (runIndex) {
|
|
270
|
+
process.stdout.write(` \x1b[90m·\x1b[0m Indexing project...\n`);
|
|
271
|
+
try {
|
|
272
|
+
const { indexCommand } = await import('./index.js');
|
|
273
|
+
indexCommand(['--rebuild']);
|
|
274
|
+
const fileCount = getFileCount(cwd);
|
|
275
|
+
tick(`Indexed ${fileCount} TypeScript file(s)`);
|
|
276
|
+
}
|
|
277
|
+
catch (e) {
|
|
278
|
+
warn(`Indexing failed: ${e instanceof Error ? e.message : String(e)}`);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
// Success summary
|
|
282
|
+
console.log('\n\x1b[32m\x1b[1mSetup complete.\x1b[0m\n');
|
|
283
|
+
console.log('Next steps:');
|
|
284
|
+
console.log(' \x1b[1mnirnex status\x1b[0m — verify project is ready');
|
|
285
|
+
console.log(' \x1b[1mnirnex plan "your task"\x1b[0m — generate your first plan');
|
|
286
|
+
console.log(' \x1b[1mnirnex plan .ai/specs/foo.md\x1b[0m — plan from a spec file');
|
|
287
|
+
console.log('');
|
|
288
|
+
}
|
|
289
|
+
// ─── Exported command ─────────────────────────────────────────────────────
|
|
290
|
+
export { runSetup };
|
|
291
|
+
export async function setupCommand(args) {
|
|
292
|
+
const yes = args.includes('--yes') || args.includes('-y');
|
|
293
|
+
const cwd = process.cwd();
|
|
294
|
+
await runSetup(cwd, { yes });
|
|
295
|
+
}
|
|
296
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare function statusCommand(
|
|
1
|
+
export declare function statusCommand(_args: string[]): void;
|
|
2
2
|
//# sourceMappingURL=status.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAoBA,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAgFnD"}
|
package/dist/commands/status.js
CHANGED
|
@@ -1,31 +1,94 @@
|
|
|
1
|
-
// Command:
|
|
2
|
-
//
|
|
3
|
-
// and prints a one-line index summary.
|
|
1
|
+
// Command: nirnex status
|
|
2
|
+
// Shows project readiness, index health, and freshness.
|
|
4
3
|
import { openDb, indexStats } from '@nirnex/core';
|
|
5
4
|
import path from 'node:path';
|
|
6
|
-
import { existsSync } from 'node:fs';
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
5
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
6
|
+
import { execSync } from 'node:child_process';
|
|
7
|
+
function tick(msg) {
|
|
8
|
+
process.stdout.write(` \x1b[32m✔\x1b[0m ${msg}\n`);
|
|
9
|
+
}
|
|
10
|
+
function cross(msg) {
|
|
11
|
+
process.stdout.write(` \x1b[31m✘\x1b[0m ${msg}\n`);
|
|
12
|
+
}
|
|
13
|
+
function warn(msg) {
|
|
14
|
+
process.stdout.write(` \x1b[33m!\x1b[0m ${msg}\n`);
|
|
15
|
+
}
|
|
16
|
+
export function statusCommand(_args) {
|
|
17
|
+
const cwd = process.cwd();
|
|
18
|
+
const configPath = path.join(cwd, 'nirnex.config.json');
|
|
19
|
+
const dbPath = path.join(cwd, '.aidos.db');
|
|
20
|
+
console.log('\n\x1b[1mNirnex Status\x1b[0m\n');
|
|
21
|
+
// Check if project is Nirnex-enabled
|
|
22
|
+
const isEnabled = existsSync(configPath);
|
|
23
|
+
if (!isEnabled) {
|
|
24
|
+
cross('nirnex.config.json not found — project is not Nirnex-enabled');
|
|
25
|
+
console.log('\n Run \x1b[1mnirnex setup\x1b[0m to initialize this project.\n');
|
|
26
|
+
process.exit(1);
|
|
13
27
|
}
|
|
14
|
-
|
|
15
|
-
|
|
28
|
+
let config = {};
|
|
29
|
+
try {
|
|
30
|
+
config = JSON.parse(readFileSync(configPath, 'utf8'));
|
|
31
|
+
tick(`Project: \x1b[1m${config.projectName ?? path.basename(cwd)}\x1b[0m`);
|
|
16
32
|
}
|
|
17
|
-
|
|
18
|
-
|
|
33
|
+
catch {
|
|
34
|
+
warn('nirnex.config.json is malformed');
|
|
19
35
|
}
|
|
20
|
-
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
36
|
+
// Check .ai/ structure
|
|
37
|
+
const aiDir = path.join(cwd, '.ai');
|
|
38
|
+
existsSync(aiDir)
|
|
39
|
+
? tick('.ai/ workspace present')
|
|
40
|
+
: cross('.ai/ workspace missing — re-run nirnex setup');
|
|
41
|
+
const promptsDir = path.join(aiDir, 'prompts');
|
|
42
|
+
existsSync(path.join(promptsDir, 'analyst.md')) && existsSync(path.join(promptsDir, 'implementer.md'))
|
|
43
|
+
? tick('.ai/prompts/ configured')
|
|
44
|
+
: warn('.ai/prompts/ missing analyst.md or implementer.md');
|
|
45
|
+
// Check index
|
|
46
|
+
const dbExists = existsSync(dbPath);
|
|
47
|
+
if (!dbExists) {
|
|
48
|
+
cross('Index not found — run \x1b[1mnirnex index --rebuild\x1b[0m');
|
|
26
49
|
}
|
|
27
50
|
else {
|
|
28
|
-
|
|
51
|
+
try {
|
|
52
|
+
const db = openDb(dbPath);
|
|
53
|
+
const stats = indexStats(db);
|
|
54
|
+
db.close();
|
|
55
|
+
if (stats.moduleCount === 0) {
|
|
56
|
+
warn(`Index empty (0 modules) — run \x1b[1mnirnex index --rebuild\x1b[0m`);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
tick(`Index: ${stats.moduleCount} modules, ${stats.edgeCount} edges, schema v${stats.schemaVersion}`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
catch (e) {
|
|
63
|
+
warn(`Index read error: ${e instanceof Error ? e.message : String(e)}`);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// Check freshness
|
|
67
|
+
try {
|
|
68
|
+
const currentHead = execSync('git rev-parse HEAD', { cwd, encoding: 'utf8' }).trim();
|
|
69
|
+
if (dbExists) {
|
|
70
|
+
try {
|
|
71
|
+
const db = openDb(dbPath);
|
|
72
|
+
const meta = db.prepare('SELECT value FROM _meta WHERE key = ?').get('commit_hash');
|
|
73
|
+
db.close();
|
|
74
|
+
if (meta?.value === currentHead) {
|
|
75
|
+
tick('Index is fresh (matches current HEAD)');
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
warn('Index is stale — run \x1b[1mnirnex index\x1b[0m to refresh');
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
catch { }
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
// not a git repo or git not available
|
|
29
86
|
}
|
|
87
|
+
// Check git hook
|
|
88
|
+
const hookPath = path.join(cwd, '.git', 'hooks', 'post-commit');
|
|
89
|
+
existsSync(hookPath)
|
|
90
|
+
? tick('Git post-commit hook installed')
|
|
91
|
+
: warn('Git post-commit hook not installed (index may drift)');
|
|
92
|
+
console.log('');
|
|
30
93
|
}
|
|
31
94
|
//# sourceMappingURL=status.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,26 +1,32 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
//
|
|
3
|
-
// Usage:
|
|
4
|
-
// Commands: plan | query | status | replay
|
|
2
|
+
// Nirnex CLI — Decision Intelligence for software delivery
|
|
3
|
+
// Usage: nirnex <command> [args]
|
|
5
4
|
import { planCommand } from './commands/plan.js';
|
|
6
5
|
import { queryCommand } from './commands/query.js';
|
|
7
6
|
import { statusCommand } from './commands/status.js';
|
|
8
7
|
import { replayCommand } from './commands/replay.js';
|
|
9
8
|
import { indexCommand } from './commands/index.js';
|
|
10
9
|
import { traceCommand } from './commands/trace.js';
|
|
10
|
+
import { setupCommand } from './commands/setup.js';
|
|
11
11
|
const [, , command = '', ...rest] = process.argv;
|
|
12
12
|
const USAGE = `
|
|
13
|
-
|
|
13
|
+
Nirnex — Decision Intelligence for software delivery
|
|
14
14
|
|
|
15
15
|
Usage:
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
16
|
+
nirnex setup [options] Initialize Nirnex in this repository
|
|
17
|
+
nirnex index [options] Index the codebase into the knowledge graph
|
|
18
|
+
nirnex plan [options] Generate a delivery plan from a spec or query
|
|
19
|
+
nirnex query [options] Query the knowledge graph
|
|
20
|
+
nirnex status [options] Show index and project health
|
|
21
|
+
nirnex trace [options] View execution traces
|
|
22
|
+
nirnex replay [options] Replay a past analysis run
|
|
23
|
+
|
|
24
|
+
Run \`nirnex setup\` to get started.
|
|
22
25
|
`.trimStart();
|
|
23
26
|
switch (command) {
|
|
27
|
+
case 'setup':
|
|
28
|
+
setupCommand(rest).catch(console.error);
|
|
29
|
+
break;
|
|
24
30
|
case 'index':
|
|
25
31
|
indexCommand(rest);
|
|
26
32
|
break;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,2DAA2D;AAC3D,iCAAiC;AAEjC,OAAO,EAAE,WAAW,EAAE,MAAQ,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAO,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAO,qBAAqB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAO,qBAAqB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAO,qBAAqB,CAAC;AAEpD,MAAM,CAAC,EAAE,AAAD,EAAG,OAAO,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;AAEjD,MAAM,KAAK,GAAG;;;;;;;;;;;;;CAab,CAAC,SAAS,EAAE,CAAC;AAEd,QAAQ,OAAO,EAAE,CAAC;IAChB,KAAK,OAAO;QACV,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM;IACR,KAAK,OAAO;QACV,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,MAAM;IACR,KAAK,MAAM;QACT,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM;IACR,KAAK,OAAO;QACV,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM;IACR,KAAK,QAAQ;QACX,aAAa,CAAC,IAAI,CAAC,CAAC;QACpB,MAAM;IACR,KAAK,QAAQ;QACX,aAAa,CAAC,IAAI,CAAC,CAAC;QACpB,MAAM;IACR,KAAK,OAAO;QACV,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,MAAM;IACR;QACE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACnB,IAAI,OAAO,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACxD,OAAO,CAAC,KAAK,CAAC,qBAAqB,OAAO,GAAG,CAAC,CAAC;YAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM;AACV,CAAC"}
|