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.
- package/dist/commands/doctor.d.ts +3 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +164 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/install.d.ts +3 -0
- package/dist/commands/install.d.ts.map +1 -0
- package/dist/commands/install.js +31 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/mcp.d.ts +3 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +56 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/status.d.ts +3 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +142 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/uninstall.d.ts +3 -0
- package/dist/commands/uninstall.d.ts.map +1 -0
- package/dist/commands/uninstall.js +114 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/commands/update.d.ts +3 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +26 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/server.d.ts +12 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +270 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/registry/tools.d.ts +64 -0
- package/dist/registry/tools.d.ts.map +1 -0
- package/dist/registry/tools.js +212 -0
- package/dist/registry/tools.js.map +1 -0
- package/dist/services/install.d.ts +36 -0
- package/dist/services/install.d.ts.map +1 -0
- package/dist/services/install.js +371 -0
- package/dist/services/install.js.map +1 -0
- package/package.json +57 -0
- package/templates/hooks/dev-logger.js +252 -0
- package/templates/hooks/memory-check.js +64 -0
- package/templates/hooks/session-start.js +115 -0
- package/templates/rules/claude.md +27 -0
- package/templates/rules/cursor.md +27 -0
- package/templates/starters/MEMORY.md +23 -0
- package/templates/starters/session-handoff.md +19 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/services/install.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EAAE,cAAc,EAAqC,MAAM,mBAAmB,CAAC;AAEtF,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,cAAc,CAAC;IACrB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,cAAc,EAAE,OAAO,CAAC;IACxB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAgBD,qBAAa,cAAc;IAEnB,GAAG,CAAC,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,aAAa,CAAC;YAwDjD,WAAW;YAiCX,kBAAkB;YAuClB,aAAa;YA6Eb,cAAc;YAoCd,YAAY;YA2DZ,kBAAkB;YAgDlB,YAAY;IAwC1B,OAAO,CAAC,YAAY;CAoBrB"}
|
|
@@ -0,0 +1,371 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* NLC Install Service — The core of Nex Level Code.
|
|
4
|
+
*
|
|
5
|
+
* Detects the AI tool, copies hook scripts, registers hooks,
|
|
6
|
+
* sets permissions, creates starter files, and adds MCP config.
|
|
7
|
+
*/
|
|
8
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
15
|
+
}) : (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
o[k2] = m[k];
|
|
18
|
+
}));
|
|
19
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
20
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
21
|
+
}) : function(o, v) {
|
|
22
|
+
o["default"] = v;
|
|
23
|
+
});
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
42
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
43
|
+
};
|
|
44
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
+
exports.InstallService = void 0;
|
|
46
|
+
const fs = __importStar(require("fs-extra"));
|
|
47
|
+
const path = __importStar(require("path"));
|
|
48
|
+
const os = __importStar(require("os"));
|
|
49
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
50
|
+
const tools_1 = require("../registry/tools");
|
|
51
|
+
/**
|
|
52
|
+
* Get the templates directory (shipped inside the npm package).
|
|
53
|
+
*/
|
|
54
|
+
function getTemplatesDir() {
|
|
55
|
+
return path.join(__dirname, '..', '..', 'templates');
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Get the node executable path (full path for Windows compatibility).
|
|
59
|
+
*/
|
|
60
|
+
function getNodePath() {
|
|
61
|
+
return process.execPath;
|
|
62
|
+
}
|
|
63
|
+
class InstallService {
|
|
64
|
+
async run(options = {}) {
|
|
65
|
+
const tool = await this.resolveTool(options.tool);
|
|
66
|
+
const templatesDir = getTemplatesDir();
|
|
67
|
+
const nodePath = getNodePath();
|
|
68
|
+
const result = {
|
|
69
|
+
tool,
|
|
70
|
+
scriptsInstalled: [],
|
|
71
|
+
hooksRegistered: [],
|
|
72
|
+
rulesFile: null,
|
|
73
|
+
starterFiles: [],
|
|
74
|
+
mcpConfigured: false,
|
|
75
|
+
permissionsSet: false,
|
|
76
|
+
warnings: [],
|
|
77
|
+
};
|
|
78
|
+
console.log(chalk_1.default.bold.green('\n Nex Level Code (NLC) — Installing...\n'));
|
|
79
|
+
console.log(chalk_1.default.dim(` Tool: ${tool.displayName}`));
|
|
80
|
+
console.log(chalk_1.default.dim(` Templates: ${templatesDir}\n`));
|
|
81
|
+
// Step 1: Install hook scripts
|
|
82
|
+
if (!options.skipHooks && tool.hooks.supported) {
|
|
83
|
+
await this.installHookScripts(tool, templatesDir, result, options);
|
|
84
|
+
}
|
|
85
|
+
else if (!tool.hooks.supported) {
|
|
86
|
+
result.warnings.push(`${tool.displayName} doesn't support lifecycle hooks yet. Hook scripts skipped.`);
|
|
87
|
+
}
|
|
88
|
+
// Step 2: Register hooks in settings
|
|
89
|
+
if (!options.skipHooks && tool.hooks.supported) {
|
|
90
|
+
await this.registerHooks(tool, nodePath, result, options);
|
|
91
|
+
}
|
|
92
|
+
// Step 3: Set permissions
|
|
93
|
+
if (tool.permissions.supported) {
|
|
94
|
+
await this.setPermissions(tool, result, options);
|
|
95
|
+
}
|
|
96
|
+
// Step 4: Install behavioral rules
|
|
97
|
+
if (!options.skipRules) {
|
|
98
|
+
await this.installRules(tool, templatesDir, result, options);
|
|
99
|
+
}
|
|
100
|
+
// Step 5: Create starter files
|
|
101
|
+
await this.createStarterFiles(tool, templatesDir, result, options);
|
|
102
|
+
// Step 6: Configure MCP
|
|
103
|
+
await this.configureMcp(tool, result, options);
|
|
104
|
+
// Summary
|
|
105
|
+
this.printSummary(result);
|
|
106
|
+
return result;
|
|
107
|
+
}
|
|
108
|
+
// ─── Tool Resolution ────────────────────────────────────────
|
|
109
|
+
async resolveTool(toolId) {
|
|
110
|
+
if (toolId) {
|
|
111
|
+
const tool = (0, tools_1.getToolById)(toolId);
|
|
112
|
+
if (!tool)
|
|
113
|
+
throw new Error(`Unknown tool: ${toolId}. Valid options: claude, cursor, github, windsurf, codex`);
|
|
114
|
+
return tool;
|
|
115
|
+
}
|
|
116
|
+
const detected = (0, tools_1.detectInstalledTools)();
|
|
117
|
+
if (detected.length === 0) {
|
|
118
|
+
throw new Error('No AI coding tools detected. Install Claude Code, Cursor, or another supported tool first.\n' +
|
|
119
|
+
'Or specify one explicitly: nlc install --tool claude');
|
|
120
|
+
}
|
|
121
|
+
if (detected.length === 1) {
|
|
122
|
+
console.log(chalk_1.default.dim(` Auto-detected: ${detected[0].displayName}\n`));
|
|
123
|
+
return detected[0];
|
|
124
|
+
}
|
|
125
|
+
// Multiple tools found — prefer Claude Code if available
|
|
126
|
+
const claude = detected.find(t => t.id === 'claude');
|
|
127
|
+
if (claude) {
|
|
128
|
+
console.log(chalk_1.default.dim(` Multiple tools detected. Using: ${claude.displayName}\n`));
|
|
129
|
+
return claude;
|
|
130
|
+
}
|
|
131
|
+
return detected[0];
|
|
132
|
+
}
|
|
133
|
+
// ─── Step 1: Hook Scripts ───────────────────────────────────
|
|
134
|
+
async installHookScripts(tool, templatesDir, result, options) {
|
|
135
|
+
console.log(chalk_1.default.cyan(' [1/6] Installing hook scripts...'));
|
|
136
|
+
const scriptsDir = tool.paths.scriptsDir;
|
|
137
|
+
await fs.ensureDir(scriptsDir);
|
|
138
|
+
const hooks = ['session-start.js', 'memory-check.js', 'dev-logger.js'];
|
|
139
|
+
for (const hookFile of hooks) {
|
|
140
|
+
const src = path.join(templatesDir, 'hooks', hookFile);
|
|
141
|
+
const dest = path.join(scriptsDir, `nlc-${hookFile}`);
|
|
142
|
+
if (!await fs.pathExists(src)) {
|
|
143
|
+
result.warnings.push(`Template not found: ${hookFile}`);
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
if (await fs.pathExists(dest) && !options.force) {
|
|
147
|
+
result.warnings.push(`${hookFile} already exists. Use --force to overwrite.`);
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
// Read template and replace placeholders
|
|
151
|
+
let content = await fs.readFile(src, 'utf-8');
|
|
152
|
+
content = content.replace(/\{\{TOOL_ID\}\}/g, tool.id);
|
|
153
|
+
await fs.writeFile(dest, content);
|
|
154
|
+
result.scriptsInstalled.push(dest);
|
|
155
|
+
console.log(chalk_1.default.dim(` ✓ ${path.basename(dest)}`));
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
// ─── Step 2: Register Hooks ─────────────────────────────────
|
|
159
|
+
async registerHooks(tool, nodePath, result, options) {
|
|
160
|
+
console.log(chalk_1.default.cyan(' [2/6] Registering hooks...'));
|
|
161
|
+
const settingsFile = tool.paths.settingsFile;
|
|
162
|
+
let settings = {};
|
|
163
|
+
if (await fs.pathExists(settingsFile)) {
|
|
164
|
+
try {
|
|
165
|
+
settings = await fs.readJSON(settingsFile);
|
|
166
|
+
}
|
|
167
|
+
catch {
|
|
168
|
+
result.warnings.push(`Could not parse ${settingsFile}. Creating new.`);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
if (!settings.hooks)
|
|
172
|
+
settings.hooks = {};
|
|
173
|
+
const scriptsDir = tool.paths.scriptsDir;
|
|
174
|
+
const q = (s) => `"${s}"`;
|
|
175
|
+
// Hook mapping: event → script file
|
|
176
|
+
const hookMap = {
|
|
177
|
+
SessionStart: [
|
|
178
|
+
{ script: 'nlc-session-start.js', timeout: 5 },
|
|
179
|
+
],
|
|
180
|
+
UserPromptSubmit: [
|
|
181
|
+
{ script: 'nlc-memory-check.js', timeout: 5 },
|
|
182
|
+
],
|
|
183
|
+
Stop: [
|
|
184
|
+
{ script: 'nlc-dev-logger.js', timeout: 30 },
|
|
185
|
+
],
|
|
186
|
+
};
|
|
187
|
+
for (const [event, scripts] of Object.entries(hookMap)) {
|
|
188
|
+
if (!tool.hooks.events.includes(event))
|
|
189
|
+
continue;
|
|
190
|
+
if (!settings.hooks[event])
|
|
191
|
+
settings.hooks[event] = [];
|
|
192
|
+
for (const { script, timeout } of scripts) {
|
|
193
|
+
const scriptPath = path.join(scriptsDir, script);
|
|
194
|
+
const command = `${q(nodePath)} ${q(scriptPath)}`;
|
|
195
|
+
// Check if this hook is already registered
|
|
196
|
+
const alreadyRegistered = settings.hooks[event].some((hookGroup) => hookGroup.hooks?.some((h) => h.command?.includes(script)));
|
|
197
|
+
if (alreadyRegistered && !options.force) {
|
|
198
|
+
result.warnings.push(`Hook ${event}→${script} already registered.`);
|
|
199
|
+
continue;
|
|
200
|
+
}
|
|
201
|
+
if (alreadyRegistered && options.force) {
|
|
202
|
+
// Remove existing NLC hooks for this event
|
|
203
|
+
settings.hooks[event] = settings.hooks[event].filter((hookGroup) => !hookGroup.hooks?.some((h) => h.command?.includes('nlc-')));
|
|
204
|
+
}
|
|
205
|
+
settings.hooks[event].push({
|
|
206
|
+
hooks: [{ type: 'command', command, timeout }],
|
|
207
|
+
});
|
|
208
|
+
result.hooksRegistered.push(`${event} → ${script}`);
|
|
209
|
+
console.log(chalk_1.default.dim(` ✓ ${event} → ${script}`));
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
await fs.ensureDir(path.dirname(settingsFile));
|
|
213
|
+
await fs.writeJSON(settingsFile, settings, { spaces: 2 });
|
|
214
|
+
}
|
|
215
|
+
// ─── Step 3: Permissions ────────────────────────────────────
|
|
216
|
+
async setPermissions(tool, result, options) {
|
|
217
|
+
console.log(chalk_1.default.cyan(' [3/6] Setting permissions...'));
|
|
218
|
+
const settingsFile = tool.paths.settingsFile;
|
|
219
|
+
let settings = {};
|
|
220
|
+
if (await fs.pathExists(settingsFile)) {
|
|
221
|
+
try {
|
|
222
|
+
settings = await fs.readJSON(settingsFile);
|
|
223
|
+
}
|
|
224
|
+
catch { }
|
|
225
|
+
}
|
|
226
|
+
if (!settings.permissions)
|
|
227
|
+
settings.permissions = {};
|
|
228
|
+
if (!settings.permissions.allow)
|
|
229
|
+
settings.permissions.allow = [];
|
|
230
|
+
if (!settings.permissions.deny)
|
|
231
|
+
settings.permissions.deny = [];
|
|
232
|
+
// Add any missing permissions
|
|
233
|
+
let added = 0;
|
|
234
|
+
for (const perm of tool.permissions.allowList) {
|
|
235
|
+
if (!settings.permissions.allow.includes(perm)) {
|
|
236
|
+
settings.permissions.allow.push(perm);
|
|
237
|
+
added++;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
await fs.writeJSON(settingsFile, settings, { spaces: 2 });
|
|
241
|
+
result.permissionsSet = true;
|
|
242
|
+
console.log(chalk_1.default.dim(` ✓ ${added} permissions added (${settings.permissions.allow.length} total)`));
|
|
243
|
+
}
|
|
244
|
+
// ─── Step 4: Behavioral Rules ───────────────────────────────
|
|
245
|
+
async installRules(tool, templatesDir, result, options) {
|
|
246
|
+
console.log(chalk_1.default.cyan(' [4/6] Installing behavioral rules...'));
|
|
247
|
+
const rulesFile = tool.paths.rulesFile;
|
|
248
|
+
if (!rulesFile) {
|
|
249
|
+
result.warnings.push(`${tool.displayName} doesn't have a known rules file location.`);
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
const templateFile = path.join(templatesDir, 'rules', `${tool.id}.md`);
|
|
253
|
+
if (!await fs.pathExists(templateFile)) {
|
|
254
|
+
// Fall back to generic rules
|
|
255
|
+
const genericTemplate = path.join(templatesDir, 'rules', 'claude.md');
|
|
256
|
+
if (!await fs.pathExists(genericTemplate)) {
|
|
257
|
+
result.warnings.push('No rules template found.');
|
|
258
|
+
return;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
// If rules file already exists, append NLC rules rather than overwriting
|
|
262
|
+
const rulesPath = path.resolve(rulesFile);
|
|
263
|
+
const templateContent = await fs.readFile(await fs.pathExists(templateFile) ? templateFile : path.join(templatesDir, 'rules', 'claude.md'), 'utf-8');
|
|
264
|
+
if (await fs.pathExists(rulesPath)) {
|
|
265
|
+
const existing = await fs.readFile(rulesPath, 'utf-8');
|
|
266
|
+
if (existing.includes('Nex Level Code')) {
|
|
267
|
+
if (!options.force) {
|
|
268
|
+
result.warnings.push(`${rulesFile} already contains NLC rules. Use --force to overwrite.`);
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
// Append NLC section if not present
|
|
273
|
+
if (!existing.includes('Nex Level Code')) {
|
|
274
|
+
const separator = '\n\n---\n\n';
|
|
275
|
+
await fs.writeFile(rulesPath, existing + separator + templateContent);
|
|
276
|
+
result.rulesFile = rulesPath;
|
|
277
|
+
console.log(chalk_1.default.dim(` ✓ Appended NLC rules to ${rulesFile}`));
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
await fs.writeFile(rulesPath, templateContent);
|
|
282
|
+
result.rulesFile = rulesPath;
|
|
283
|
+
console.log(chalk_1.default.dim(` ✓ Created ${rulesFile}`));
|
|
284
|
+
}
|
|
285
|
+
// ─── Step 5: Starter Files ──────────────────────────────────
|
|
286
|
+
async createStarterFiles(tool, templatesDir, result, options) {
|
|
287
|
+
console.log(chalk_1.default.cyan(' [5/6] Creating starter files...'));
|
|
288
|
+
// Determine where to put starter files
|
|
289
|
+
// For Claude Code, they go in the auto-memory directory
|
|
290
|
+
const home = os.homedir();
|
|
291
|
+
let starterDir;
|
|
292
|
+
if (tool.id === 'claude') {
|
|
293
|
+
// Use Claude's project-based memory directory
|
|
294
|
+
const cwd = process.cwd();
|
|
295
|
+
const key = cwd
|
|
296
|
+
.replace(/\\/g, '-').replace(/\//g, '-')
|
|
297
|
+
.replace(/:/g, '-').replace(/_/g, '-')
|
|
298
|
+
.replace(/^([a-z])/, (m) => m.toUpperCase());
|
|
299
|
+
const lowerKey = key.replace(/^([A-Z])/, (m) => m.toLowerCase());
|
|
300
|
+
starterDir = path.join(home, '.claude', 'projects', lowerKey, 'memory');
|
|
301
|
+
}
|
|
302
|
+
else {
|
|
303
|
+
starterDir = path.join(home, '.nlc', 'projects', 'default');
|
|
304
|
+
}
|
|
305
|
+
await fs.ensureDir(starterDir);
|
|
306
|
+
const starters = ['session-handoff.md', 'MEMORY.md'];
|
|
307
|
+
for (const file of starters) {
|
|
308
|
+
const src = path.join(templatesDir, 'starters', file);
|
|
309
|
+
const dest = path.join(starterDir, file);
|
|
310
|
+
if (!await fs.pathExists(src))
|
|
311
|
+
continue;
|
|
312
|
+
if (await fs.pathExists(dest) && !options.force) {
|
|
313
|
+
result.warnings.push(`${file} already exists at ${starterDir}. Skipped.`);
|
|
314
|
+
continue;
|
|
315
|
+
}
|
|
316
|
+
await fs.copy(src, dest);
|
|
317
|
+
result.starterFiles.push(dest);
|
|
318
|
+
console.log(chalk_1.default.dim(` ✓ ${file} → ${starterDir}`));
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
// ─── Step 6: MCP Config ─────────────────────────────────────
|
|
322
|
+
async configureMcp(tool, result, options) {
|
|
323
|
+
console.log(chalk_1.default.cyan(' [6/6] Configuring MCP server...'));
|
|
324
|
+
const mcpConfigFile = path.resolve(tool.paths.mcpConfigFile);
|
|
325
|
+
let config = {};
|
|
326
|
+
if (await fs.pathExists(mcpConfigFile)) {
|
|
327
|
+
try {
|
|
328
|
+
config = await fs.readJSON(mcpConfigFile);
|
|
329
|
+
}
|
|
330
|
+
catch {
|
|
331
|
+
result.warnings.push(`Could not parse ${mcpConfigFile}. Creating new.`);
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
if (!config.mcpServers)
|
|
335
|
+
config.mcpServers = {};
|
|
336
|
+
if (config.mcpServers['nex-level-code'] && !options.force) {
|
|
337
|
+
result.warnings.push('NLC MCP already configured.');
|
|
338
|
+
result.mcpConfigured = true;
|
|
339
|
+
console.log(chalk_1.default.dim(' ✓ Already configured'));
|
|
340
|
+
return;
|
|
341
|
+
}
|
|
342
|
+
config.mcpServers['nex-level-code'] = {
|
|
343
|
+
command: getNodePath(),
|
|
344
|
+
args: [path.join(__dirname, '..', '..', 'dist', 'mcp-server.js')],
|
|
345
|
+
};
|
|
346
|
+
await fs.ensureDir(path.dirname(mcpConfigFile));
|
|
347
|
+
await fs.writeJSON(mcpConfigFile, config, { spaces: 2 });
|
|
348
|
+
result.mcpConfigured = true;
|
|
349
|
+
console.log(chalk_1.default.dim(' ✓ NLC MCP server registered'));
|
|
350
|
+
}
|
|
351
|
+
// ─── Summary ────────────────────────────────────────────────
|
|
352
|
+
printSummary(result) {
|
|
353
|
+
console.log(chalk_1.default.bold.green('\n ✓ Nex Level Code installed!\n'));
|
|
354
|
+
console.log(chalk_1.default.white(` Tool: ${result.tool.displayName}`));
|
|
355
|
+
console.log(chalk_1.default.white(` Scripts: ${result.scriptsInstalled.length} installed`));
|
|
356
|
+
console.log(chalk_1.default.white(` Hooks: ${result.hooksRegistered.length} registered`));
|
|
357
|
+
console.log(chalk_1.default.white(` Rules: ${result.rulesFile ? 'installed' : 'skipped'}`));
|
|
358
|
+
console.log(chalk_1.default.white(` Starters: ${result.starterFiles.length} created`));
|
|
359
|
+
console.log(chalk_1.default.white(` MCP: ${result.mcpConfigured ? 'configured' : 'skipped'}`));
|
|
360
|
+
console.log(chalk_1.default.white(` Permissions: ${result.permissionsSet ? 'set' : 'skipped'}`));
|
|
361
|
+
if (result.warnings.length > 0) {
|
|
362
|
+
console.log(chalk_1.default.yellow('\n Warnings:'));
|
|
363
|
+
for (const w of result.warnings) {
|
|
364
|
+
console.log(chalk_1.default.yellow(` ⚠ ${w}`));
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
console.log(chalk_1.default.dim('\n Your agent is ready. Start a new session to activate.\n'));
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
exports.InstallService = InstallService;
|
|
371
|
+
//# sourceMappingURL=install.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/services/install.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,6CAA+B;AAC/B,2CAA6B;AAC7B,uCAAyB;AACzB,kDAA0B;AAC1B,6CAAsF;AAqBtF;;GAEG;AACH,SAAS,eAAe;IACtB,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;AACvD,CAAC;AAED;;GAEG;AACH,SAAS,WAAW;IAClB,OAAO,OAAO,CAAC,QAAQ,CAAC;AAC1B,CAAC;AAED,MAAa,cAAc;IAEzB,KAAK,CAAC,GAAG,CAAC,UAA0B,EAAE;QACpC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;QAE/B,MAAM,MAAM,GAAkB;YAC5B,IAAI;YACJ,gBAAgB,EAAE,EAAE;YACpB,eAAe,EAAE,EAAE;YACnB,SAAS,EAAE,IAAI;YACf,YAAY,EAAE,EAAE;YAChB,aAAa,EAAE,KAAK;YACpB,cAAc,EAAE,KAAK;YACrB,QAAQ,EAAE,EAAE;SACb,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC,CAAC;QAC5E,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,gBAAgB,YAAY,IAAI,CAAC,CAAC,CAAC;QAEzD,+BAA+B;QAC/B,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;YAC/C,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QACrE,CAAC;aAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;YACjC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,6DAA6D,CAAC,CAAC;QACzG,CAAC;QAED,qCAAqC;QACrC,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;YAC/C,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAC5D,CAAC;QAED,0BAA0B;QAC1B,IAAI,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC;YAC/B,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QACnD,CAAC;QAED,mCAAmC;QACnC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YACvB,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAC/D,CAAC;QAED,+BAA+B;QAC/B,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAEnE,wBAAwB;QACxB,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAE/C,UAAU;QACV,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAE1B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,+DAA+D;IAEvD,KAAK,CAAC,WAAW,CAAC,MAAe;QACvC,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,IAAI,GAAG,IAAA,mBAAW,EAAC,MAAM,CAAC,CAAC;YACjC,IAAI,CAAC,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,MAAM,0DAA0D,CAAC,CAAC;YAC9G,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,QAAQ,GAAG,IAAA,4BAAoB,GAAE,CAAC;QAExC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CACb,8FAA8F;gBAC9F,sDAAsD,CACvD,CAAC;QACJ,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,oBAAoB,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC;YACxE,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;QACrB,CAAC;QAED,yDAAyD;QACzD,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;QACrD,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,qCAAqC,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC;YACpF,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC;IAED,+DAA+D;IAEvD,KAAK,CAAC,kBAAkB,CAC9B,IAAoB,EACpB,YAAoB,EACpB,MAAqB,EACrB,OAAuB;QAEvB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC,CAAC;QAE9D,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;QACzC,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAE/B,MAAM,KAAK,GAAG,CAAC,kBAAkB,EAAE,iBAAiB,EAAE,eAAe,CAAC,CAAC;QAEvE,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;YAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;YACvD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,QAAQ,EAAE,CAAC,CAAC;YAEtD,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC9B,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,uBAAuB,QAAQ,EAAE,CAAC,CAAC;gBACxD,SAAS;YACX,CAAC;YAED,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBAChD,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,4CAA4C,CAAC,CAAC;gBAC9E,SAAS;YACX,CAAC;YAED,yCAAyC;YACzC,IAAI,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAC9C,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,kBAAkB,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;YAEvD,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAClC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,+DAA+D;IAEvD,KAAK,CAAC,aAAa,CACzB,IAAoB,EACpB,QAAgB,EAChB,MAAqB,EACrB,OAAuB;QAEvB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,CAAC;QAExD,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;QAC7C,IAAI,QAAQ,GAAQ,EAAE,CAAC;QAEvB,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YACtC,IAAI,CAAC;gBACH,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;YAC7C,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,mBAAmB,YAAY,iBAAiB,CAAC,CAAC;YACzE,CAAC;QACH,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,KAAK;YAAE,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAC;QAEzC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;QACzC,MAAM,CAAC,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;QAElC,oCAAoC;QACpC,MAAM,OAAO,GAA0D;YACrE,YAAY,EAAE;gBACZ,EAAE,MAAM,EAAE,sBAAsB,EAAE,OAAO,EAAE,CAAC,EAAE;aAC/C;YACD,gBAAgB,EAAE;gBAChB,EAAE,MAAM,EAAE,qBAAqB,EAAE,OAAO,EAAE,CAAC,EAAE;aAC9C;YACD,IAAI,EAAE;gBACJ,EAAE,MAAM,EAAE,mBAAmB,EAAE,OAAO,EAAE,EAAE,EAAE;aAC7C;SACF,CAAC;QAEF,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACvD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,SAAS;YAEjD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;gBAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;YAEvD,KAAK,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,OAAO,EAAE,CAAC;gBAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;gBACjD,MAAM,OAAO,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC;gBAElD,2CAA2C;gBAC3C,MAAM,iBAAiB,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,SAAc,EAAE,EAAE,CACtE,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAC/D,CAAC;gBAEF,IAAI,iBAAiB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;oBACxC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,KAAK,IAAI,MAAM,sBAAsB,CAAC,CAAC;oBACpE,SAAS;gBACX,CAAC;gBAED,IAAI,iBAAiB,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;oBACvC,2CAA2C;oBAC3C,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,SAAc,EAAE,EAAE,CACtE,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAChE,CAAC;gBACJ,CAAC;gBAED,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;oBACzB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;iBAC/C,CAAC,CAAC;gBACH,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,KAAK,MAAM,MAAM,EAAE,CAAC,CAAC;gBACpD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,KAAK,MAAM,MAAM,EAAE,CAAC,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;QAED,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;QAC/C,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,+DAA+D;IAEvD,KAAK,CAAC,cAAc,CAC1B,IAAoB,EACpB,MAAqB,EACrB,OAAuB;QAEvB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC,CAAC;QAE1D,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;QAC7C,IAAI,QAAQ,GAAQ,EAAE,CAAC;QAEvB,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YACtC,IAAI,CAAC;gBACH,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;YAC7C,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACZ,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,WAAW;YAAE,QAAQ,CAAC,WAAW,GAAG,EAAE,CAAC;QACrD,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK;YAAE,QAAQ,CAAC,WAAW,CAAC,KAAK,GAAG,EAAE,CAAC;QACjE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI;YAAE,QAAQ,CAAC,WAAW,CAAC,IAAI,GAAG,EAAE,CAAC;QAE/D,8BAA8B;QAC9B,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC;YAC9C,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/C,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtC,KAAK,EAAE,CAAC;YACV,CAAC;QACH,CAAC;QAED,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;QAC1D,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,KAAK,uBAAuB,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,SAAS,CAAC,CAAC,CAAC;IAC1G,CAAC;IAED,+DAA+D;IAEvD,KAAK,CAAC,YAAY,CACxB,IAAoB,EACpB,YAAoB,EACpB,MAAqB,EACrB,OAAuB;QAEvB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC,CAAC;QAElE,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;QACvC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,4CAA4C,CAAC,CAAC;YACtF,OAAO;QACT,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;QAEvE,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YACvC,6BAA6B;YAC7B,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;YACtE,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;gBAC1C,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;gBACjD,OAAO;YACT,CAAC;QACH,CAAC;QAED,yEAAyE;QACzE,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC1C,MAAM,eAAe,GAAG,MAAM,EAAE,CAAC,QAAQ,CACvC,MAAM,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,WAAW,CAAC,EAChG,OAAO,CACR,CAAC;QAEF,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACnC,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAEvD,IAAI,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBACxC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;oBACnB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,SAAS,wDAAwD,CAAC,CAAC;oBAC3F,OAAO;gBACT,CAAC;YACH,CAAC;YAED,oCAAoC;YACpC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBACzC,MAAM,SAAS,GAAG,aAAa,CAAC;gBAChC,MAAM,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,QAAQ,GAAG,SAAS,GAAG,eAAe,CAAC,CAAC;gBACtE,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;gBAC7B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,+BAA+B,SAAS,EAAE,CAAC,CAAC,CAAC;gBACnE,OAAO;YACT,CAAC;QACH,CAAC;QAED,MAAM,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;QAC/C,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,iBAAiB,SAAS,EAAE,CAAC,CAAC,CAAC;IACvD,CAAC;IAED,+DAA+D;IAEvD,KAAK,CAAC,kBAAkB,CAC9B,IAAoB,EACpB,YAAoB,EACpB,MAAqB,EACrB,OAAuB;QAEvB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC,CAAC;QAE7D,uCAAuC;QACvC,wDAAwD;QACxD,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QAC1B,IAAI,UAAkB,CAAC;QAEvB,IAAI,IAAI,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;YACzB,8CAA8C;YAC9C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,GAAG;iBACZ,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;iBACvC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;iBACrC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;YACvD,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;YACzE,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC1E,CAAC;aAAM,CAAC;YACN,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;QAC9D,CAAC;QAED,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAE/B,MAAM,QAAQ,GAAG,CAAC,oBAAoB,EAAE,WAAW,CAAC,CAAC;QACrD,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;YACtD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YAEzC,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YAExC,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBAChD,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,sBAAsB,UAAU,YAAY,CAAC,CAAC;gBAC1E,SAAS;YACX,CAAC;YAED,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACzB,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM,UAAU,EAAE,CAAC,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAED,+DAA+D;IAEvD,KAAK,CAAC,YAAY,CACxB,IAAoB,EACpB,MAAqB,EACrB,OAAuB;QAEvB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC,CAAC;QAE7D,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC7D,IAAI,MAAM,GAAQ,EAAE,CAAC;QAErB,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YACvC,IAAI,CAAC;gBACH,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;YAC5C,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,mBAAmB,aAAa,iBAAiB,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,UAAU;YAAE,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC;QAE/C,IAAI,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YAC1D,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;YACpD,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC,CAAC;YACnD,OAAO;QACT,CAAC;QAED,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,GAAG;YACpC,OAAO,EAAE,WAAW,EAAE;YACtB,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC;SAClE,CAAC;QAEF,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;QAChD,MAAM,EAAE,CAAC,SAAS,CAAC,aAAa,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;QACzD,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,+DAA+D;IAEvD,YAAY,CAAC,MAAqB;QACxC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC,CAAC;QAEnE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,kBAAkB,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,kBAAkB,MAAM,CAAC,gBAAgB,CAAC,MAAM,YAAY,CAAC,CAAC,CAAC;QACvF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,kBAAkB,MAAM,CAAC,eAAe,CAAC,MAAM,aAAa,CAAC,CAAC,CAAC;QACvF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,kBAAkB,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QACzF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,kBAAkB,MAAM,CAAC,YAAY,CAAC,MAAM,UAAU,CAAC,CAAC,CAAC;QACjF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,kBAAkB,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAC9F,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,kBAAkB,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAExF,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC;YAC3C,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAChC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC,CAAC;IACxF,CAAC;CACF;AA1ZD,wCA0ZC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "nex-level-code",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Nex Level Code (NLC) — 1-click setup for AI coding agent infrastructure. Memory, logging, workflow, and behavioral rules for Claude Code, Cursor, Codex, and more.",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"nlc": "dist/index.js",
|
|
8
|
+
"nex-level-code": "dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist/**/*",
|
|
12
|
+
"templates/**/*",
|
|
13
|
+
"README.md",
|
|
14
|
+
"LICENSE"
|
|
15
|
+
],
|
|
16
|
+
"engines": {
|
|
17
|
+
"node": ">=20.0.0"
|
|
18
|
+
},
|
|
19
|
+
"scripts": {
|
|
20
|
+
"build": "tsc",
|
|
21
|
+
"dev": "tsx src/index.ts",
|
|
22
|
+
"start": "node dist/index.js",
|
|
23
|
+
"prepare": "tsc",
|
|
24
|
+
"prepublishOnly": "npm run build",
|
|
25
|
+
"release": "npm version patch && npm publish --access public"
|
|
26
|
+
},
|
|
27
|
+
"publishConfig": {
|
|
28
|
+
"access": "public",
|
|
29
|
+
"registry": "https://registry.npmjs.org/"
|
|
30
|
+
},
|
|
31
|
+
"keywords": [
|
|
32
|
+
"claude-code",
|
|
33
|
+
"cursor",
|
|
34
|
+
"codex",
|
|
35
|
+
"ai-coding",
|
|
36
|
+
"memory",
|
|
37
|
+
"workflow",
|
|
38
|
+
"hooks",
|
|
39
|
+
"developer-tools",
|
|
40
|
+
"nlc"
|
|
41
|
+
],
|
|
42
|
+
"author": "FTay Consulting",
|
|
43
|
+
"license": "MIT",
|
|
44
|
+
"dependencies": {
|
|
45
|
+
"@modelcontextprotocol/sdk": "^1.25.2",
|
|
46
|
+
"commander": "^14.0.1",
|
|
47
|
+
"chalk": "^4.1.2",
|
|
48
|
+
"fs-extra": "^11.3.2",
|
|
49
|
+
"zod": "^4.3.5"
|
|
50
|
+
},
|
|
51
|
+
"devDependencies": {
|
|
52
|
+
"@types/fs-extra": "^11.0.4",
|
|
53
|
+
"@types/node": "^24.5.2",
|
|
54
|
+
"typescript": "^5.9.2",
|
|
55
|
+
"tsx": "^4.20.6"
|
|
56
|
+
}
|
|
57
|
+
}
|