devsmind-mcp 1.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.
@@ -0,0 +1,626 @@
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.handleInit = handleInit;
40
+ const fs = __importStar(require("fs"));
41
+ const path = __importStar(require("path"));
42
+ const child_process_1 = require("child_process");
43
+ const prompts_1 = __importDefault(require("prompts"));
44
+ const dotenv = __importStar(require("dotenv"));
45
+ const database_1 = require("../db/database");
46
+ // ─── Detection Helpers ─────────────────────────────────────────────────────
47
+ /** Read a global git config value (user.name, user.email, etc.) */
48
+ function readGitConfig(key) {
49
+ try {
50
+ return (0, child_process_1.execSync)(`git config ${key}`, { encoding: 'utf-8' }).trim();
51
+ }
52
+ catch {
53
+ return '';
54
+ }
55
+ }
56
+ /** Parse non-comment, non-empty lines from a .gitignore file */
57
+ function readGitIgnorePatterns(dir) {
58
+ const gitignorePath = path.join(dir, '.gitignore');
59
+ if (!fs.existsSync(gitignorePath))
60
+ return [];
61
+ return fs.readFileSync(gitignorePath, 'utf-8')
62
+ .split('\n')
63
+ .map((l) => l.trim())
64
+ .filter((l) => l && !l.startsWith('#'));
65
+ }
66
+ /** Detect tech stack from package.json and project indicator files */
67
+ function detectTechStack(repoPaths) {
68
+ const frameworks = new Set();
69
+ const languages = new Set();
70
+ for (const repoPath of repoPaths) {
71
+ if (!fs.existsSync(repoPath))
72
+ continue;
73
+ // Language detection from indicator files
74
+ if (fs.existsSync(path.join(repoPath, 'tsconfig.json')))
75
+ languages.add('typescript');
76
+ if (fs.existsSync(path.join(repoPath, 'go.mod')))
77
+ languages.add('go');
78
+ if (fs.existsSync(path.join(repoPath, 'pom.xml')))
79
+ languages.add('java');
80
+ if (fs.existsSync(path.join(repoPath, 'Cargo.toml')))
81
+ languages.add('rust');
82
+ if (fs.existsSync(path.join(repoPath, 'requirements.txt')) ||
83
+ fs.existsSync(path.join(repoPath, 'pyproject.toml')))
84
+ languages.add('python');
85
+ // Framework + language detection from package.json
86
+ const pkgPath = path.join(repoPath, 'package.json');
87
+ if (fs.existsSync(pkgPath)) {
88
+ if (!languages.has('typescript'))
89
+ languages.add('javascript');
90
+ try {
91
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
92
+ const deps = { ...pkg.dependencies, ...pkg.devDependencies };
93
+ if (deps['@nestjs/core'])
94
+ frameworks.add('nestjs');
95
+ if (deps['express'])
96
+ frameworks.add('express');
97
+ if (deps['next'])
98
+ frameworks.add('nextjs');
99
+ if (deps['react'] && !deps['next'])
100
+ frameworks.add('react');
101
+ if (deps['vue'])
102
+ frameworks.add('vue');
103
+ if (deps['fastify'])
104
+ frameworks.add('fastify');
105
+ if (deps['@angular/core'])
106
+ frameworks.add('angular');
107
+ if (deps['svelte'])
108
+ frameworks.add('svelte');
109
+ if (deps['hono'])
110
+ frameworks.add('hono');
111
+ if (deps['koa'])
112
+ frameworks.add('koa');
113
+ if (deps['prisma'] || deps['@prisma/client'])
114
+ frameworks.add('prisma');
115
+ if (deps['typeorm'])
116
+ frameworks.add('typeorm');
117
+ if (deps['mongoose'])
118
+ frameworks.add('mongoose');
119
+ }
120
+ catch { /* skip malformed package.json */ }
121
+ }
122
+ }
123
+ return {
124
+ languages: [...languages],
125
+ frameworks: [...frameworks]
126
+ };
127
+ }
128
+ /** Aggregate unique ignored patterns from multiple repo paths */
129
+ function aggregateIgnoredPaths(repoPaths) {
130
+ const all = repoPaths.flatMap(p => readGitIgnorePatterns(p));
131
+ return [...new Set(all)];
132
+ }
133
+ function ensureDbInitialized(dbPath) {
134
+ const db = new database_1.DevMindDatabase(dbPath);
135
+ db.close();
136
+ }
137
+ function scanSubdirectories(dir) {
138
+ try {
139
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
140
+ return entries
141
+ .filter(entry => entry.isDirectory() && !entry.name.startsWith('.') && entry.name !== 'node_modules')
142
+ .map(entry => entry.name);
143
+ }
144
+ catch {
145
+ return [];
146
+ }
147
+ }
148
+ // ─── Entry Point ───────────────────────────────────────────────────────────
149
+ async function handleInit() {
150
+ const cwd = process.cwd();
151
+ const devmindDir = path.join(cwd, '.devmind');
152
+ const configPath = path.join(devmindDir, 'config.json');
153
+ const envPath = path.join(devmindDir, '.env');
154
+ const dbPath = path.join(devmindDir, 'brain.db');
155
+ console.log(`🤖 Initializing DevsMind in: ${cwd}`);
156
+ if (fs.existsSync(devmindDir) && fs.existsSync(configPath)) {
157
+ console.log(`✨ Found existing DevsMind configuration at ${configPath}`);
158
+ await handleExistingInit(devmindDir, configPath, envPath, dbPath);
159
+ }
160
+ else {
161
+ console.log(`🆕 Creating a new DevsMind brain...`);
162
+ await handleNewInit(cwd);
163
+ }
164
+ }
165
+ // ─── Re-Init ───────────────────────────────────────────────────────────────
166
+ async function handleExistingInit(devmindDir, configPath, envPath, dbPath) {
167
+ const configContent = fs.readFileSync(configPath, 'utf-8');
168
+ let config;
169
+ try {
170
+ config = JSON.parse(configContent);
171
+ }
172
+ catch (err) {
173
+ console.error(`❌ Error parsing config.json: ${err.message}`);
174
+ return;
175
+ }
176
+ let envConfig = {};
177
+ if (fs.existsSync(envPath)) {
178
+ envConfig = dotenv.parse(fs.readFileSync(envPath, 'utf-8'));
179
+ }
180
+ const envLines = [];
181
+ // ── Developer info check (all modes) ─────────────────────────
182
+ const missingDev = !envConfig['DEVELOPER_NAME'] || !envConfig['DEVELOPER_EMAIL'];
183
+ if (missingDev) {
184
+ console.log(`\n👤 Developer info missing from .env:`);
185
+ const detectedName = readGitConfig('user.name');
186
+ const detectedEmail = readGitConfig('user.email');
187
+ const devResponse = await (0, prompts_1.default)([
188
+ {
189
+ type: 'text',
190
+ name: 'name',
191
+ message: 'Your name?',
192
+ initial: detectedName,
193
+ validate: (v) => v.trim() ? true : 'Developer name is required'
194
+ },
195
+ {
196
+ type: 'text',
197
+ name: 'email',
198
+ message: 'Your email?',
199
+ initial: detectedEmail,
200
+ validate: (v) => v.trim() ? true : 'Developer email is required'
201
+ }
202
+ ]);
203
+ if (!devResponse.name) {
204
+ console.log('❌ Initialization cancelled.');
205
+ return;
206
+ }
207
+ envLines.push(`DEVELOPER_NAME=${devResponse.name.trim()}`);
208
+ envLines.push(`DEVELOPER_EMAIL=${devResponse.email?.trim() || ''}`);
209
+ }
210
+ else {
211
+ envLines.push(`DEVELOPER_NAME=${envConfig['DEVELOPER_NAME']}`);
212
+ envLines.push(`DEVELOPER_EMAIL=${envConfig['DEVELOPER_EMAIL']}`);
213
+ }
214
+ // ── Mode-specific path validation ────────────────────────────
215
+ if (config.mode === 'embedded') {
216
+ console.log(`📦 Embedded mode — verifying relative repository paths...`);
217
+ const projectRoot = path.dirname(devmindDir);
218
+ let allOk = true;
219
+ for (const repo of config.repos) {
220
+ if ('relative_path' in repo) {
221
+ const embeddedRepo = repo;
222
+ const fullPath = path.resolve(projectRoot, embeddedRepo.relative_path);
223
+ if (!fs.existsSync(fullPath)) {
224
+ console.warn(`⚠️ Repo "${repo.name}" not found at relative path: ${embeddedRepo.relative_path}`);
225
+ allOk = false;
226
+ }
227
+ else {
228
+ console.log(`✅ Repo "${repo.name}" OK (${embeddedRepo.relative_path})`);
229
+ }
230
+ }
231
+ }
232
+ if (allOk)
233
+ console.log(`✅ All relative paths are valid.`);
234
+ }
235
+ else {
236
+ console.log(`🌐 Standalone mode — checking repository paths in .env...`);
237
+ const missingKeys = [];
238
+ const invalidPaths = [];
239
+ for (const repo of config.repos) {
240
+ if ('path_key' in repo && repo.path_key) {
241
+ const currentPath = envConfig[repo.path_key];
242
+ if (!currentPath) {
243
+ missingKeys.push(repo);
244
+ }
245
+ else if (!fs.existsSync(path.resolve(currentPath))) {
246
+ invalidPaths.push({ repo, currentPath });
247
+ }
248
+ else {
249
+ envLines.push(`${repo.path_key}=${currentPath}`);
250
+ }
251
+ }
252
+ }
253
+ // Keep unaffected existing keys (not repo paths, not dev info)
254
+ for (const [key, value] of Object.entries(envConfig)) {
255
+ const isRepoPath = config.repos.some(r => 'path_key' in r && r.path_key === key);
256
+ const isDevKey = key === 'DEVELOPER_NAME' || key === 'DEVELOPER_EMAIL';
257
+ if (!isRepoPath && !isDevKey) {
258
+ envLines.push(`${key}=${value}`);
259
+ }
260
+ }
261
+ if (missingKeys.length === 0 && invalidPaths.length === 0) {
262
+ console.log(`✅ All repo paths are configured and valid.`);
263
+ }
264
+ else {
265
+ console.log(`📝 Please configure paths for your repositories on this machine:`);
266
+ const reposToPrompt = [...missingKeys, ...invalidPaths.map(ip => ip.repo)];
267
+ for (const repo of reposToPrompt) {
268
+ if ('path_key' in repo && repo.path_key) {
269
+ const initialPath = envConfig[repo.path_key] || process.cwd();
270
+ const response = await (0, prompts_1.default)({
271
+ type: 'text',
272
+ name: 'localPath',
273
+ message: `Local path for repo "${repo.name}" (${repo.path_key})?`,
274
+ initial: initialPath,
275
+ validate: (val) => {
276
+ const resolved = path.resolve(val);
277
+ return fs.existsSync(resolved) ? true : `Directory does not exist: ${resolved}`;
278
+ }
279
+ });
280
+ if (response.localPath === undefined) {
281
+ console.log('❌ Initialization cancelled.');
282
+ return;
283
+ }
284
+ envLines.push(`${repo.path_key}=${path.resolve(response.localPath)}`);
285
+ }
286
+ }
287
+ }
288
+ }
289
+ // Write updated .env
290
+ fs.writeFileSync(envPath, envLines.join('\n') + '\n', 'utf-8');
291
+ console.log(`💾 Updated ${envPath}`);
292
+ // Ensure .gitignore exists
293
+ const gitignorePath = path.join(devmindDir, '.gitignore');
294
+ if (!fs.existsSync(gitignorePath)) {
295
+ fs.writeFileSync(gitignorePath, '.env\n', 'utf-8');
296
+ }
297
+ ensureDbInitialized(dbPath);
298
+ console.log(`🎉 DevsMind initialization complete!`);
299
+ }
300
+ // ─── New Init ──────────────────────────────────────────────────────────────
301
+ async function handleNewInit(cwd) {
302
+ const defaultProjectName = path.basename(cwd);
303
+ // ── Step 1: Project name + mode ──────────────────────────────
304
+ const baseResponse = await (0, prompts_1.default)([
305
+ {
306
+ type: 'text',
307
+ name: 'projectName',
308
+ message: 'Project name?',
309
+ initial: defaultProjectName
310
+ },
311
+ {
312
+ type: 'select',
313
+ name: 'mode',
314
+ message: 'Select the setup mode for this brain:',
315
+ choices: [
316
+ {
317
+ title: 'Embedded (Single Git repo)',
318
+ value: 'embedded',
319
+ description: 'Lives inside the project repo. Relative paths — clone once, works everywhere.'
320
+ },
321
+ {
322
+ title: 'Standalone (Multiple separate Git repos)',
323
+ value: 'standalone',
324
+ description: 'Its own folder/repo. Repo names shared via config; local paths in .env.'
325
+ }
326
+ ],
327
+ initial: 0
328
+ }
329
+ ]);
330
+ if (baseResponse.projectName === undefined || baseResponse.mode === undefined) {
331
+ console.log('❌ Initialization cancelled.');
332
+ return;
333
+ }
334
+ // ── Step 2: Resolve target directory ─────────────────────────
335
+ let targetDir = '';
336
+ let devmindDir = '';
337
+ if (baseResponse.mode === 'embedded') {
338
+ targetDir = cwd;
339
+ devmindDir = path.join(targetDir, '.devmind');
340
+ }
341
+ else {
342
+ const defaultFolderName = `${baseResponse.projectName.toLowerCase().replace(/[^a-z0-9]/g, '-')}-brain`;
343
+ const folderResponse = await (0, prompts_1.default)([
344
+ {
345
+ type: 'text',
346
+ name: 'folderName',
347
+ message: "Brain's folder name?",
348
+ initial: defaultFolderName
349
+ },
350
+ {
351
+ type: 'text',
352
+ name: 'folderParent',
353
+ message: 'Where do you want it to live?',
354
+ initial: cwd,
355
+ validate: (val) => {
356
+ const resolved = path.resolve(val);
357
+ return fs.existsSync(resolved) ? true : `Directory does not exist: ${resolved}`;
358
+ }
359
+ }
360
+ ]);
361
+ if (folderResponse.folderName === undefined || folderResponse.folderParent === undefined) {
362
+ console.log('❌ Initialization cancelled.');
363
+ return;
364
+ }
365
+ targetDir = path.join(path.resolve(folderResponse.folderParent), folderResponse.folderName);
366
+ devmindDir = path.join(targetDir, '.devmind');
367
+ if (!fs.existsSync(targetDir)) {
368
+ fs.mkdirSync(targetDir, { recursive: true });
369
+ console.log(`📁 Created folder: ${targetDir}`);
370
+ }
371
+ }
372
+ const configPath = path.join(devmindDir, 'config.json');
373
+ const envPath = path.join(devmindDir, '.env');
374
+ const dbPath = path.join(devmindDir, 'brain.db');
375
+ const repos = [];
376
+ const envLines = [];
377
+ const repoPaths = []; // Track actual FS paths for detection
378
+ // ── Step 3: Configure repos ───────────────────────────────────
379
+ if (baseResponse.mode === 'embedded') {
380
+ console.log(`\n🔍 Scanning for repositories in current folder...`);
381
+ const subdirs = scanSubdirectories(cwd);
382
+ const choices = [
383
+ { title: `Root Directory (./)`, value: '.' },
384
+ ...subdirs.map(dir => ({ title: `Subdirectory: ${dir} (./${dir})`, value: dir }))
385
+ ];
386
+ const repoSelection = await (0, prompts_1.default)({
387
+ type: 'multiselect',
388
+ name: 'selectedDirs',
389
+ message: 'Select which directories are part of this project:',
390
+ choices,
391
+ min: 1,
392
+ hint: '- Space to select. Return to submit.'
393
+ });
394
+ if (repoSelection.selectedDirs === undefined) {
395
+ console.log('❌ Initialization cancelled.');
396
+ return;
397
+ }
398
+ for (const dir of repoSelection.selectedDirs) {
399
+ const repoName = dir === '.' ? baseResponse.projectName : dir;
400
+ const relativePath = dir === '.' ? '.' : `./${dir}`;
401
+ repos.push({ name: repoName, relative_path: relativePath });
402
+ repoPaths.push(path.resolve(cwd, relativePath));
403
+ }
404
+ }
405
+ else {
406
+ const countResponse = await (0, prompts_1.default)({
407
+ type: 'number',
408
+ name: 'repoCount',
409
+ message: 'How many separate repositories does this brain serve?',
410
+ initial: 1,
411
+ min: 1
412
+ });
413
+ if (countResponse.repoCount === undefined) {
414
+ console.log('❌ Initialization cancelled.');
415
+ return;
416
+ }
417
+ for (let i = 0; i < countResponse.repoCount; i++) {
418
+ console.log(`\n📦 Configuring Repository ${i + 1} of ${countResponse.repoCount}:`);
419
+ const defaultName = countResponse.repoCount === 1 ? baseResponse.projectName : `service-${i + 1}`;
420
+ const repoResponse = await (0, prompts_1.default)([
421
+ {
422
+ type: 'text',
423
+ name: 'name',
424
+ message: 'Repository name?',
425
+ initial: defaultName
426
+ },
427
+ {
428
+ type: 'text',
429
+ name: 'localPath',
430
+ message: 'Local absolute path to this repository?',
431
+ initial: cwd,
432
+ validate: (val) => {
433
+ const resolved = path.resolve(val);
434
+ return fs.existsSync(resolved) ? true : `Directory does not exist: ${resolved}`;
435
+ }
436
+ }
437
+ ]);
438
+ if (repoResponse.name === undefined || repoResponse.localPath === undefined) {
439
+ console.log('❌ Initialization cancelled.');
440
+ return;
441
+ }
442
+ const pathKey = `REPO_${repoResponse.name.toUpperCase().replace(/[^A-Z0-9]/g, '_')}`;
443
+ repos.push({ name: repoResponse.name, path_key: pathKey });
444
+ envLines.push(`${pathKey}=${path.resolve(repoResponse.localPath)}`);
445
+ repoPaths.push(path.resolve(repoResponse.localPath));
446
+ }
447
+ }
448
+ // ── Step 4: Developer info (mandatory) ───────────────────────
449
+ console.log(`\n👤 Developer info (stored in .env, gitignored — per developer):`);
450
+ const detectedName = readGitConfig('user.name');
451
+ const detectedEmail = readGitConfig('user.email');
452
+ const devResponse = await (0, prompts_1.default)([
453
+ {
454
+ type: 'text',
455
+ name: 'name',
456
+ message: 'Your name?',
457
+ initial: detectedName,
458
+ validate: (v) => v.trim() ? true : 'Developer name is required'
459
+ },
460
+ {
461
+ type: 'text',
462
+ name: 'email',
463
+ message: 'Your email?',
464
+ initial: detectedEmail,
465
+ validate: (v) => v.trim() ? true : 'Developer email is required'
466
+ }
467
+ ]);
468
+ if (!devResponse.name) {
469
+ console.log('❌ Initialization cancelled.');
470
+ return;
471
+ }
472
+ envLines.push(`DEVELOPER_NAME=${devResponse.name.trim()}`);
473
+ envLines.push(`DEVELOPER_EMAIL=${devResponse.email?.trim() || ''}`);
474
+ // ── Step 5: Ignored paths (auto from .gitignore) ──────────────
475
+ let ignoredPaths = [];
476
+ const detectedIgnored = aggregateIgnoredPaths(repoPaths);
477
+ if (detectedIgnored.length > 0) {
478
+ const preview = detectedIgnored.slice(0, 6).join(', ') + (detectedIgnored.length > 6 ? ', ...' : '');
479
+ console.log(`\n🚫 Auto-detected ${detectedIgnored.length} ignored paths from .gitignore files.`);
480
+ console.log(` Default: ${preview}`);
481
+ const ignoreResponse = await (0, prompts_1.default)({
482
+ type: 'confirm',
483
+ name: 'useDetected',
484
+ message: 'Use these as ignored_paths?',
485
+ initial: true
486
+ });
487
+ if (ignoreResponse.useDetected) {
488
+ ignoredPaths = detectedIgnored;
489
+ }
490
+ else {
491
+ const customResponse = await (0, prompts_1.default)({
492
+ type: 'list',
493
+ name: 'paths',
494
+ message: 'Custom ignored paths? (comma separated)',
495
+ initial: detectedIgnored.join(', '),
496
+ separator: ','
497
+ });
498
+ ignoredPaths = (customResponse.paths || []).map((p) => p.trim()).filter(Boolean);
499
+ }
500
+ }
501
+ else {
502
+ const customResponse = await (0, prompts_1.default)({
503
+ type: 'text',
504
+ name: 'paths',
505
+ message: 'No .gitignore found. Ignored paths? (comma separated, leave empty to skip)',
506
+ });
507
+ if (customResponse.paths?.trim()) {
508
+ ignoredPaths = customResponse.paths.split(',').map((p) => p.trim()).filter(Boolean);
509
+ }
510
+ }
511
+ // ── Step 6: Tech stack (auto from package.json) ───────────────
512
+ let techStack;
513
+ const detected = detectTechStack(repoPaths);
514
+ const hasDetected = (detected.languages?.length ?? 0) > 0 || (detected.frameworks?.length ?? 0) > 0;
515
+ if (hasDetected) {
516
+ console.log(`\n🛠️ Auto-detected tech stack:`);
517
+ if (detected.languages?.length)
518
+ console.log(` Languages: ${detected.languages.join(', ')}`);
519
+ if (detected.frameworks?.length)
520
+ console.log(` Frameworks: ${detected.frameworks.join(', ')}`);
521
+ const techConfirm = await (0, prompts_1.default)({
522
+ type: 'confirm',
523
+ name: 'correct',
524
+ message: 'Does this look right?',
525
+ initial: true
526
+ });
527
+ if (techConfirm.correct) {
528
+ techStack = detected;
529
+ }
530
+ else {
531
+ const techManual = await (0, prompts_1.default)([
532
+ {
533
+ type: 'list',
534
+ name: 'languages',
535
+ message: 'Languages? (comma separated)',
536
+ initial: detected.languages?.join(', ') || '',
537
+ separator: ','
538
+ },
539
+ {
540
+ type: 'list',
541
+ name: 'frameworks',
542
+ message: 'Frameworks? (comma separated)',
543
+ initial: detected.frameworks?.join(', ') || '',
544
+ separator: ','
545
+ }
546
+ ]);
547
+ techStack = {
548
+ languages: (techManual.languages || []).map((l) => l.trim()).filter(Boolean),
549
+ frameworks: (techManual.frameworks || []).map((f) => f.trim()).filter(Boolean)
550
+ };
551
+ }
552
+ }
553
+ // ── Step 7: Session timeout (optional, default 60) ────────────
554
+ const timeoutResponse = await (0, prompts_1.default)({
555
+ type: 'number',
556
+ name: 'minutes',
557
+ message: 'Session timeout in minutes? (default: 60 — press Enter to keep)',
558
+ initial: 60,
559
+ min: 5
560
+ });
561
+ const sessionTimeout = timeoutResponse.minutes ?? 60;
562
+ // ── Step 8: Environments (optional) ───────────────────────────
563
+ let environments;
564
+ const addEnvs = await (0, prompts_1.default)({
565
+ type: 'confirm',
566
+ name: 'add',
567
+ message: 'Add environment URLs? (dev, staging, prod) [optional]',
568
+ initial: false
569
+ });
570
+ if (addEnvs.add) {
571
+ environments = {};
572
+ for (const envName of ['dev', 'staging', 'prod']) {
573
+ const urlResponse = await (0, prompts_1.default)({
574
+ type: 'text',
575
+ name: 'url',
576
+ message: `${envName} URL? (leave empty to skip)`
577
+ });
578
+ if (urlResponse.url?.trim()) {
579
+ environments[envName] = urlResponse.url.trim();
580
+ }
581
+ }
582
+ if (Object.keys(environments).length === 0)
583
+ environments = undefined;
584
+ }
585
+ // ── Step 9: Notes (optional) ──────────────────────────────────
586
+ const notesResponse = await (0, prompts_1.default)({
587
+ type: 'text',
588
+ name: 'notes',
589
+ message: 'Any notes for the AI about this project? (optional)'
590
+ });
591
+ // ── Write files ───────────────────────────────────────────────
592
+ if (!fs.existsSync(devmindDir)) {
593
+ fs.mkdirSync(devmindDir, { recursive: true });
594
+ }
595
+ const config = {
596
+ project_name: baseResponse.projectName,
597
+ mode: baseResponse.mode,
598
+ notes: notesResponse.notes || undefined,
599
+ session_timeout_minutes: sessionTimeout !== 60 ? sessionTimeout : undefined,
600
+ ignored_paths: ignoredPaths.length > 0 ? ignoredPaths : undefined,
601
+ tech_stack: techStack,
602
+ environments,
603
+ repos
604
+ };
605
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
606
+ console.log(`\n💾 Created ${configPath} (safe to commit to Git)`);
607
+ // Always write .env — developer info is always local
608
+ fs.writeFileSync(envPath, envLines.join('\n') + '\n', 'utf-8');
609
+ console.log(`💾 Created ${envPath} (local, gitignored)`);
610
+ // Always create .gitignore to protect .env
611
+ const gitignorePath = path.join(devmindDir, '.gitignore');
612
+ if (!fs.existsSync(gitignorePath)) {
613
+ fs.writeFileSync(gitignorePath, '.env\n', 'utf-8');
614
+ console.log(`💾 Created ${gitignorePath}`);
615
+ }
616
+ ensureDbInitialized(dbPath);
617
+ console.log(`🗄️ Initialized SQLite database at ${dbPath}`);
618
+ console.log(`\n🎉 DevsMind Team AI Brain setup successfully completed!`);
619
+ if (baseResponse.mode === 'standalone') {
620
+ console.log(`💡 Next step: set DEVMIND_PATH = ${devmindDir} in your AI workspace rule.`);
621
+ }
622
+ else {
623
+ console.log(`💡 Next step: run 'devsmind start' to launch the MCP server.`);
624
+ }
625
+ }
626
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function handlePrune(opts: {
2
+ path?: string;
3
+ }): Promise<void>;