nex-level-code 0.1.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.
Files changed (48) hide show
  1. package/dist/commands/doctor.d.ts +3 -0
  2. package/dist/commands/doctor.d.ts.map +1 -0
  3. package/dist/commands/doctor.js +164 -0
  4. package/dist/commands/doctor.js.map +1 -0
  5. package/dist/commands/install.d.ts +3 -0
  6. package/dist/commands/install.d.ts.map +1 -0
  7. package/dist/commands/install.js +31 -0
  8. package/dist/commands/install.js.map +1 -0
  9. package/dist/commands/mcp.d.ts +3 -0
  10. package/dist/commands/mcp.d.ts.map +1 -0
  11. package/dist/commands/mcp.js +56 -0
  12. package/dist/commands/mcp.js.map +1 -0
  13. package/dist/commands/status.d.ts +3 -0
  14. package/dist/commands/status.d.ts.map +1 -0
  15. package/dist/commands/status.js +142 -0
  16. package/dist/commands/status.js.map +1 -0
  17. package/dist/commands/uninstall.d.ts +3 -0
  18. package/dist/commands/uninstall.d.ts.map +1 -0
  19. package/dist/commands/uninstall.js +114 -0
  20. package/dist/commands/uninstall.js.map +1 -0
  21. package/dist/commands/update.d.ts +3 -0
  22. package/dist/commands/update.d.ts.map +1 -0
  23. package/dist/commands/update.js +26 -0
  24. package/dist/commands/update.js.map +1 -0
  25. package/dist/index.d.ts +3 -0
  26. package/dist/index.d.ts.map +1 -0
  27. package/dist/index.js +23 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/mcp/server.d.ts +12 -0
  30. package/dist/mcp/server.d.ts.map +1 -0
  31. package/dist/mcp/server.js +270 -0
  32. package/dist/mcp/server.js.map +1 -0
  33. package/dist/registry/tools.d.ts +64 -0
  34. package/dist/registry/tools.d.ts.map +1 -0
  35. package/dist/registry/tools.js +212 -0
  36. package/dist/registry/tools.js.map +1 -0
  37. package/dist/services/install.d.ts +36 -0
  38. package/dist/services/install.d.ts.map +1 -0
  39. package/dist/services/install.js +371 -0
  40. package/dist/services/install.js.map +1 -0
  41. package/package.json +57 -0
  42. package/templates/hooks/dev-logger.js +252 -0
  43. package/templates/hooks/memory-check.js +64 -0
  44. package/templates/hooks/session-start.js +115 -0
  45. package/templates/rules/claude.md +27 -0
  46. package/templates/rules/cursor.md +27 -0
  47. package/templates/starters/MEMORY.md +23 -0
  48. package/templates/starters/session-handoff.md +19 -0
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerDoctorCommand(program: Command): void;
3
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyH5D"}
@@ -0,0 +1,164 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.registerDoctorCommand = registerDoctorCommand;
40
+ const fs = __importStar(require("fs-extra"));
41
+ const path = __importStar(require("path"));
42
+ const chalk_1 = __importDefault(require("chalk"));
43
+ const tools_1 = require("../registry/tools");
44
+ function registerDoctorCommand(program) {
45
+ program
46
+ .command('doctor')
47
+ .description('Diagnose and fix NLC installation issues')
48
+ .option('--fix', 'Automatically fix issues found')
49
+ .action(async (options) => {
50
+ try {
51
+ console.log(chalk_1.default.bold.green('\n NLC Doctor — Diagnosing...\n'));
52
+ const tools = (0, tools_1.detectInstalledTools)();
53
+ let issues = 0;
54
+ let fixed = 0;
55
+ if (tools.length === 0) {
56
+ console.log(chalk_1.default.red(' ✗ No AI coding tools detected'));
57
+ console.log(chalk_1.default.dim(' Install Claude Code, Cursor, or another supported tool first.\n'));
58
+ return;
59
+ }
60
+ for (const tool of tools) {
61
+ console.log(chalk_1.default.bold(` Checking ${tool.displayName}...`));
62
+ // Check 1: Scripts directory exists
63
+ if (tool.hooks.supported) {
64
+ if (!await fs.pathExists(tool.paths.scriptsDir)) {
65
+ console.log(chalk_1.default.yellow(` ⚠ Scripts directory missing: ${tool.paths.scriptsDir}`));
66
+ if (options.fix) {
67
+ await fs.ensureDir(tool.paths.scriptsDir);
68
+ console.log(chalk_1.default.green(` → Created ${tool.paths.scriptsDir}`));
69
+ fixed++;
70
+ }
71
+ issues++;
72
+ }
73
+ }
74
+ // Check 2: Settings file exists and is valid JSON
75
+ if (tool.paths.settingsFile) {
76
+ if (await fs.pathExists(tool.paths.settingsFile)) {
77
+ try {
78
+ await fs.readJSON(tool.paths.settingsFile);
79
+ console.log(chalk_1.default.green(` ✓ Settings file valid`));
80
+ }
81
+ catch {
82
+ console.log(chalk_1.default.red(` ✗ Settings file is invalid JSON: ${tool.paths.settingsFile}`));
83
+ issues++;
84
+ }
85
+ }
86
+ else {
87
+ console.log(chalk_1.default.yellow(` ⚠ Settings file missing: ${tool.paths.settingsFile}`));
88
+ issues++;
89
+ }
90
+ }
91
+ // Check 3: Node.js available
92
+ const nodePath = process.execPath;
93
+ if (!await fs.pathExists(nodePath)) {
94
+ console.log(chalk_1.default.red(` ✗ Node.js not found at: ${nodePath}`));
95
+ issues++;
96
+ }
97
+ else {
98
+ console.log(chalk_1.default.green(` ✓ Node.js: ${nodePath}`));
99
+ }
100
+ // Check 4: Hook scripts reference valid node path
101
+ if (tool.hooks.supported && await fs.pathExists(tool.paths.settingsFile)) {
102
+ try {
103
+ const settings = await fs.readJSON(tool.paths.settingsFile);
104
+ for (const [event, hookGroups] of Object.entries(settings.hooks || {})) {
105
+ for (const group of hookGroups) {
106
+ for (const h of group.hooks || []) {
107
+ if (h.command?.includes('nlc-')) {
108
+ // Extract the node path from the command
109
+ const match = h.command.match(/"([^"]+)"/);
110
+ if (match && !await fs.pathExists(match[1])) {
111
+ console.log(chalk_1.default.red(` ✗ Hook ${event}: Node path invalid: ${match[1]}`));
112
+ issues++;
113
+ }
114
+ }
115
+ }
116
+ }
117
+ }
118
+ }
119
+ catch { }
120
+ }
121
+ // Check 5: ANTHROPIC_API_KEY for dev-logger
122
+ if (!process.env.ANTHROPIC_API_KEY) {
123
+ const home = process.env.USERPROFILE || process.env.HOME || '';
124
+ const keyFiles = [
125
+ path.join(home, '.memory-mcp', 'config.json'),
126
+ path.join(home, '.config', 'anthropic', 'api_key'),
127
+ path.join(home, '.anthropic', 'api_key'),
128
+ ];
129
+ const hasKey = keyFiles.some(f => fs.pathExistsSync(f));
130
+ if (!hasKey) {
131
+ console.log(chalk_1.default.yellow(' ⚠ No API key found for dev-logger (ANTHROPIC_API_KEY or config file)'));
132
+ console.log(chalk_1.default.dim(' Dev-logger needs an API key to call Haiku for semantic analysis.'));
133
+ issues++;
134
+ }
135
+ else {
136
+ console.log(chalk_1.default.green(' ✓ API key found for dev-logger'));
137
+ }
138
+ }
139
+ else {
140
+ console.log(chalk_1.default.green(' ✓ ANTHROPIC_API_KEY set'));
141
+ }
142
+ console.log('');
143
+ }
144
+ // Summary
145
+ if (issues === 0) {
146
+ console.log(chalk_1.default.bold.green(' All checks passed! NLC is healthy.\n'));
147
+ }
148
+ else {
149
+ console.log(chalk_1.default.yellow(` Found ${issues} issue${issues !== 1 ? 's' : ''}.`));
150
+ if (options.fix) {
151
+ console.log(chalk_1.default.green(` Fixed ${fixed} issue${fixed !== 1 ? 's' : ''}.`));
152
+ }
153
+ else {
154
+ console.log(chalk_1.default.dim(' Run `nlc doctor --fix` to auto-fix what can be fixed.\n'));
155
+ }
156
+ }
157
+ }
158
+ catch (error) {
159
+ console.error(`\n Error: ${error.message}\n`);
160
+ process.exit(1);
161
+ }
162
+ });
163
+ }
164
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerInstallCommand(program: Command): void;
3
+ //# sourceMappingURL=install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwB7D"}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerInstallCommand = registerInstallCommand;
4
+ const install_1 = require("../services/install");
5
+ function registerInstallCommand(program) {
6
+ program
7
+ .command('install')
8
+ .description('Install NLC — hooks, memory protocol, behavioral rules, and MCP')
9
+ .option('-t, --tool <id>', 'Force a specific tool (claude, cursor, codex, github, windsurf)')
10
+ .option('-f, --force', 'Overwrite existing files and hooks')
11
+ .option('--skip-hooks', 'Skip hook script installation')
12
+ .option('--skip-rules', 'Skip behavioral rules installation')
13
+ .option('-v, --verbose', 'Verbose output')
14
+ .action(async (options) => {
15
+ try {
16
+ const service = new install_1.InstallService();
17
+ await service.run({
18
+ tool: options.tool,
19
+ force: options.force,
20
+ skipHooks: options.skipHooks,
21
+ skipRules: options.skipRules,
22
+ verbose: options.verbose,
23
+ });
24
+ }
25
+ catch (error) {
26
+ console.error(`\n Error: ${error.message}\n`);
27
+ process.exit(1);
28
+ }
29
+ });
30
+ }
31
+ //# sourceMappingURL=install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":";;AAGA,wDAwBC;AA1BD,iDAAqD;AAErD,SAAgB,sBAAsB,CAAC,OAAgB;IACrD,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,iEAAiE,CAAC;SAC9E,MAAM,CAAC,iBAAiB,EAAE,iEAAiE,CAAC;SAC5F,MAAM,CAAC,aAAa,EAAE,oCAAoC,CAAC;SAC3D,MAAM,CAAC,cAAc,EAAE,+BAA+B,CAAC;SACvD,MAAM,CAAC,cAAc,EAAE,oCAAoC,CAAC;SAC5D,MAAM,CAAC,eAAe,EAAE,gBAAgB,CAAC;SACzC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,wBAAc,EAAE,CAAC;YACrC,MAAM,OAAO,CAAC,GAAG,CAAC;gBAChB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,OAAO,EAAE,OAAO,CAAC,OAAO;aACzB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,cAAc,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;YAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerMcpCommand(program: Command): void;
3
+ //# sourceMappingURL=mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiBzD"}
@@ -0,0 +1,56 @@
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.registerMcpCommand = registerMcpCommand;
37
+ function registerMcpCommand(program) {
38
+ program
39
+ .command('mcp')
40
+ .description('Start NLC MCP server (used by .mcp.json config)')
41
+ .option('-v, --verbose', 'Enable verbose logging')
42
+ .action(async (options) => {
43
+ try {
44
+ // Dynamic import to avoid loading MCP dependencies for other commands
45
+ const { startMcpServer } = await Promise.resolve().then(() => __importStar(require('../mcp/server')));
46
+ await startMcpServer({ verbose: options.verbose });
47
+ }
48
+ catch (error) {
49
+ if (options.verbose) {
50
+ process.stderr.write(`[nlc-mcp] Error: ${error}\n`);
51
+ }
52
+ process.exit(1);
53
+ }
54
+ });
55
+ }
56
+ //# sourceMappingURL=mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,gDAiBC;AAjBD,SAAgB,kBAAkB,CAAC,OAAgB;IACjD,OAAO;SACJ,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,iDAAiD,CAAC;SAC9D,MAAM,CAAC,eAAe,EAAE,wBAAwB,CAAC;SACjD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,sEAAsE;YACtE,MAAM,EAAE,cAAc,EAAE,GAAG,wDAAa,eAAe,GAAC,CAAC;YACzD,MAAM,cAAc,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,KAAK,IAAI,CAAC,CAAC;YACtD,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerStatusCommand(program: Command): void;
3
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkG5D"}
@@ -0,0 +1,142 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.registerStatusCommand = registerStatusCommand;
40
+ const fs = __importStar(require("fs-extra"));
41
+ const path = __importStar(require("path"));
42
+ const chalk_1 = __importDefault(require("chalk"));
43
+ const tools_1 = require("../registry/tools");
44
+ function registerStatusCommand(program) {
45
+ program
46
+ .command('status')
47
+ .description('Show NLC installation status')
48
+ .option('-t, --tool <id>', 'Check a specific tool')
49
+ .action(async (options) => {
50
+ try {
51
+ const tools = options.tool
52
+ ? [(0, tools_1.getToolById)(options.tool)].filter(Boolean)
53
+ : (0, tools_1.detectInstalledTools)();
54
+ if (tools.length === 0) {
55
+ console.log(chalk_1.default.yellow('\n No AI coding tools detected.\n'));
56
+ return;
57
+ }
58
+ console.log(chalk_1.default.bold.green('\n Nex Level Code (NLC) — Status\n'));
59
+ for (const tool of tools) {
60
+ console.log(chalk_1.default.bold(` ${tool.displayName}`));
61
+ // Check scripts
62
+ if (tool.hooks.supported && tool.paths.scriptsDir) {
63
+ const scriptsDir = tool.paths.scriptsDir;
64
+ const scripts = ['nlc-session-start.js', 'nlc-memory-check.js', 'nlc-dev-logger.js'];
65
+ let installed = 0;
66
+ for (const s of scripts) {
67
+ if (await fs.pathExists(path.join(scriptsDir, s)))
68
+ installed++;
69
+ }
70
+ const status = installed === scripts.length ? chalk_1.default.green('✓') :
71
+ installed > 0 ? chalk_1.default.yellow('partial') : chalk_1.default.red('✗');
72
+ console.log(` Scripts: ${status} (${installed}/${scripts.length})`);
73
+ }
74
+ // Check hooks registered
75
+ if (tool.hooks.supported && tool.paths.settingsFile) {
76
+ const settingsFile = tool.paths.settingsFile;
77
+ if (await fs.pathExists(settingsFile)) {
78
+ try {
79
+ const settings = await fs.readJSON(settingsFile);
80
+ const hooks = settings.hooks || {};
81
+ let nlcHooks = 0;
82
+ for (const [, hookGroups] of Object.entries(hooks)) {
83
+ for (const group of hookGroups) {
84
+ for (const h of group.hooks || []) {
85
+ if (h.command?.includes('nlc-'))
86
+ nlcHooks++;
87
+ }
88
+ }
89
+ }
90
+ console.log(` Hooks: ${nlcHooks > 0 ? chalk_1.default.green('✓') : chalk_1.default.red('✗')} (${nlcHooks} registered)`);
91
+ }
92
+ catch {
93
+ console.log(` Hooks: ${chalk_1.default.red('✗')} (settings unreadable)`);
94
+ }
95
+ }
96
+ }
97
+ // Check permissions
98
+ if (tool.permissions.supported && tool.paths.settingsFile) {
99
+ try {
100
+ const settings = await fs.readJSON(tool.paths.settingsFile);
101
+ const perms = settings.permissions?.allow || [];
102
+ console.log(` Permissions: ${perms.length > 0 ? chalk_1.default.green('✓') : chalk_1.default.yellow('?')} (${perms.length} rules)`);
103
+ }
104
+ catch {
105
+ console.log(` Permissions: ${chalk_1.default.red('✗')}`);
106
+ }
107
+ }
108
+ // Check rules file
109
+ const rulesPath = path.resolve(tool.paths.rulesFile);
110
+ if (await fs.pathExists(rulesPath)) {
111
+ const content = await fs.readFile(rulesPath, 'utf-8');
112
+ const hasNlc = content.includes('Nex Level Code');
113
+ console.log(` Rules: ${hasNlc ? chalk_1.default.green('✓') : chalk_1.default.yellow('exists, no NLC')} (${tool.paths.rulesFile})`);
114
+ }
115
+ else {
116
+ console.log(` Rules: ${chalk_1.default.red('✗')} (${tool.paths.rulesFile} not found)`);
117
+ }
118
+ // Check MCP
119
+ const mcpPath = path.resolve(tool.paths.mcpConfigFile);
120
+ if (await fs.pathExists(mcpPath)) {
121
+ try {
122
+ const mcp = await fs.readJSON(mcpPath);
123
+ const hasNlc = !!mcp.mcpServers?.['nex-level-code'];
124
+ console.log(` MCP: ${hasNlc ? chalk_1.default.green('✓') : chalk_1.default.yellow('exists, no NLC')}`);
125
+ }
126
+ catch {
127
+ console.log(` MCP: ${chalk_1.default.red('✗')} (unreadable)`);
128
+ }
129
+ }
130
+ else {
131
+ console.log(` MCP: ${chalk_1.default.red('✗')} (not configured)`);
132
+ }
133
+ console.log('');
134
+ }
135
+ }
136
+ catch (error) {
137
+ console.error(`\n Error: ${error.message}\n`);
138
+ process.exit(1);
139
+ }
140
+ });
141
+ }
142
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerUninstallCommand(program: Command): void;
3
+ //# sourceMappingURL=uninstall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../src/commands/uninstall.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6E/D"}
@@ -0,0 +1,114 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.registerUninstallCommand = registerUninstallCommand;
40
+ const fs = __importStar(require("fs-extra"));
41
+ const path = __importStar(require("path"));
42
+ const chalk_1 = __importDefault(require("chalk"));
43
+ const tools_1 = require("../registry/tools");
44
+ function registerUninstallCommand(program) {
45
+ program
46
+ .command('uninstall')
47
+ .description('Remove NLC hooks, scripts, and MCP config (keeps memory files)')
48
+ .option('-t, --tool <id>', 'Uninstall from a specific tool')
49
+ .action(async (options) => {
50
+ try {
51
+ const tools = options.tool
52
+ ? [(0, tools_1.getToolById)(options.tool)].filter(Boolean)
53
+ : (0, tools_1.detectInstalledTools)();
54
+ if (tools.length === 0) {
55
+ console.log(chalk_1.default.yellow('\n No AI coding tools detected.\n'));
56
+ return;
57
+ }
58
+ console.log(chalk_1.default.bold('\n Nex Level Code — Uninstalling...\n'));
59
+ for (const tool of tools) {
60
+ console.log(chalk_1.default.dim(` Tool: ${tool.displayName}`));
61
+ // Remove hook scripts
62
+ if (tool.hooks.supported && tool.paths.scriptsDir) {
63
+ const scripts = ['nlc-session-start.js', 'nlc-memory-check.js', 'nlc-dev-logger.js'];
64
+ for (const s of scripts) {
65
+ const p = path.join(tool.paths.scriptsDir, s);
66
+ if (await fs.pathExists(p)) {
67
+ await fs.remove(p);
68
+ console.log(chalk_1.default.dim(` ✓ Removed ${s}`));
69
+ }
70
+ }
71
+ }
72
+ // Remove hooks from settings
73
+ if (tool.hooks.supported && await fs.pathExists(tool.paths.settingsFile)) {
74
+ try {
75
+ const settings = await fs.readJSON(tool.paths.settingsFile);
76
+ if (settings.hooks) {
77
+ for (const [event, hookGroups] of Object.entries(settings.hooks)) {
78
+ settings.hooks[event] = hookGroups.filter((group) => !group.hooks?.some((h) => h.command?.includes('nlc-')));
79
+ // Clean up empty arrays
80
+ if (settings.hooks[event].length === 0) {
81
+ delete settings.hooks[event];
82
+ }
83
+ }
84
+ await fs.writeJSON(tool.paths.settingsFile, settings, { spaces: 2 });
85
+ console.log(chalk_1.default.dim(' ✓ Removed NLC hooks from settings'));
86
+ }
87
+ }
88
+ catch { }
89
+ }
90
+ // Remove MCP config
91
+ const mcpPath = path.resolve(tool.paths.mcpConfigFile);
92
+ if (await fs.pathExists(mcpPath)) {
93
+ try {
94
+ const config = await fs.readJSON(mcpPath);
95
+ if (config.mcpServers?.['nex-level-code']) {
96
+ delete config.mcpServers['nex-level-code'];
97
+ await fs.writeJSON(mcpPath, config, { spaces: 2 });
98
+ console.log(chalk_1.default.dim(' ✓ Removed NLC MCP config'));
99
+ }
100
+ }
101
+ catch { }
102
+ }
103
+ console.log('');
104
+ }
105
+ console.log(chalk_1.default.green(' NLC uninstalled. Memory files (session-handoff.md, MEMORY.md) preserved.\n'));
106
+ console.log(chalk_1.default.dim(' To reinstall: npx nex-level-code install\n'));
107
+ }
108
+ catch (error) {
109
+ console.error(`\n Error: ${error.message}\n`);
110
+ process.exit(1);
111
+ }
112
+ });
113
+ }
114
+ //# sourceMappingURL=uninstall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../src/commands/uninstall.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerUpdateCommand(program: Command): void;
3
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmB5D"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerUpdateCommand = registerUpdateCommand;
4
+ const install_1 = require("../services/install");
5
+ function registerUpdateCommand(program) {
6
+ program
7
+ .command('update')
8
+ .description('Update NLC scripts and templates to the latest version')
9
+ .option('-t, --tool <id>', 'Update a specific tool')
10
+ .action(async (options) => {
11
+ try {
12
+ console.log('\n Updating NLC to latest version...\n');
13
+ const service = new install_1.InstallService();
14
+ await service.run({
15
+ tool: options.tool,
16
+ force: true, // Overwrite existing scripts
17
+ skipRules: true, // Don't touch user's rules file
18
+ });
19
+ }
20
+ catch (error) {
21
+ console.error(`\n Error: ${error.message}\n`);
22
+ process.exit(1);
23
+ }
24
+ });
25
+ }
26
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":";;AAGA,sDAmBC;AArBD,iDAAqD;AAErD,SAAgB,qBAAqB,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,wDAAwD,CAAC;SACrE,MAAM,CAAC,iBAAiB,EAAE,wBAAwB,CAAC;SACnD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;YACvD,MAAM,OAAO,GAAG,IAAI,wBAAc,EAAE,CAAC;YACrC,MAAM,OAAO,CAAC,GAAG,CAAC;gBAChB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,KAAK,EAAE,IAAI,EAAS,6BAA6B;gBACjD,SAAS,EAAE,IAAI,EAAK,gCAAgC;aACrD,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,cAAc,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;YAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}