didev 1.1.2 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,11 +1,16 @@
1
- import { mkdir, writeFile, access } from 'fs/promises';
1
+ import { mkdir, writeFile, access, readFile } from 'fs/promises';
2
2
  import { join } from 'path';
3
+ import { homedir } from 'os';
4
+ import { execFile } from 'child_process';
5
+ import { promisify } from 'util';
3
6
  import inquirer from 'inquirer';
4
7
  import chalk from 'chalk';
5
8
  import { logger } from '../../utils/logger.js';
6
9
  import { collectProjectContext } from '../../core/context.js';
7
10
  import { saveConfig } from '../../core/config.js';
8
11
  import { generateContextDocument } from './context.js';
12
+ import { BUNDLED_SERVERS, mergeBundledServers, isBundledServerReady } from '../../core/bundled-mcp.js';
13
+ const execFileAsync = promisify(execFile);
9
14
  async function exists(p) {
10
15
  try {
11
16
  await access(p);
@@ -142,7 +147,11 @@ export async function runInit(options = {}) {
142
147
  servers: [],
143
148
  },
144
149
  };
150
+ // Merge bundled MCP servers into config
151
+ config.mcp.servers = mergeBundledServers(config.mcp.servers);
145
152
  await saveConfig(config, rootDir);
153
+ // Clone + build GitHub-based bundled servers that don't require auth
154
+ await setupBundledGitServers();
146
155
  // Create context.md — AI-generated if key is available, otherwise a template
147
156
  let contextMd;
148
157
  if (apiKey) {
@@ -178,6 +187,43 @@ export async function runInit(options = {}) {
178
187
  logger.dim('Then generate project knowledge base: ' + chalk.cyan('didev context update'));
179
188
  }
180
189
  }
190
+ async function setupBundledGitServers() {
191
+ const mcpDir = join(homedir(), '.didev', 'mcp');
192
+ await mkdir(mcpDir, { recursive: true });
193
+ const toSetup = BUNDLED_SERVERS.filter(s => s.gitRepo && !s.requiresAuth);
194
+ for (const def of toSetup) {
195
+ const ready = await isBundledServerReady(def);
196
+ if (ready)
197
+ continue;
198
+ const repoName = def.gitRepo.split('/').pop().replace(/\.git$/, '');
199
+ const targetDir = join(mcpDir, repoName);
200
+ const spinner = logger.spinner(`Setting up bundled MCP: ${chalk.bold(def.displayName)}...`).start();
201
+ try {
202
+ const alreadyCloned = await exists(join(targetDir, '.git'));
203
+ if (!alreadyCloned) {
204
+ await execFileAsync('git', ['clone', '--depth', '1', '--quiet', def.gitRepo, targetDir], { shell: true });
205
+ }
206
+ // Install + build if package.json exists
207
+ const hasPkg = await exists(join(targetDir, 'package.json'));
208
+ if (hasPkg) {
209
+ await execFileAsync('npm', ['install', '--prefer-offline', '--silent'], { cwd: targetDir, shell: true });
210
+ let scripts = {};
211
+ try {
212
+ const raw = await readFile(join(targetDir, 'package.json'), 'utf-8');
213
+ scripts = (JSON.parse(raw)['scripts'] ?? {});
214
+ }
215
+ catch { /* ignore */ }
216
+ if (scripts['build']) {
217
+ await execFileAsync('npm', ['run', 'build'], { cwd: targetDir, shell: true });
218
+ }
219
+ }
220
+ spinner.succeed(`${chalk.bold(def.displayName)} ready`);
221
+ }
222
+ catch (e) {
223
+ spinner.warn(`${def.displayName}: ${e.message}`);
224
+ }
225
+ }
226
+ }
181
227
  function generateContextMd(ctx, type) {
182
228
  return `# Project Context
183
229
 
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export interface MenuResult {
2
+ action: 'chat' | 'agent' | 'exit' | 'back';
3
+ model?: string;
4
+ agentTask?: string;
5
+ agentMode?: 'full' | 'light' | 'developer-only';
6
+ agentSkip?: string[];
7
+ }
8
+ export declare function runMenu(inChat?: boolean): Promise<MenuResult>;
9
+ //# sourceMappingURL=menu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/menu.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,gBAAgB,CAAC;IAChD,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAyCD,wBAAsB,OAAO,CAAC,MAAM,UAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAgEjE"}
@@ -0,0 +1,342 @@
1
+ import chalk from 'chalk';
2
+ import inquirer from 'inquirer';
3
+ import { createRequire } from 'module';
4
+ import { loadConfig, setConfigValue } from '../../core/config.js';
5
+ import { getMcpManager } from '../../core/mcp.js';
6
+ import { BUNDLED_SERVERS, getMissingRequiredEnv, mergeBundledServers } from '../../core/bundled-mcp.js';
7
+ import { logger } from '../../utils/logger.js';
8
+ const _require = createRequire(import.meta.url);
9
+ const { version: PKG_VERSION } = _require('../../../package.json');
10
+ const MODELS = [
11
+ {
12
+ name: 'deepseek-v4-flash',
13
+ value: 'deepseek-v4-flash',
14
+ desc: 'быстрая · 1M контекст · 384K вывод (по умолчанию)',
15
+ },
16
+ {
17
+ name: 'deepseek-v4-pro',
18
+ value: 'deepseek-v4-pro',
19
+ desc: 'thinking model · сложные архитектурные задачи',
20
+ },
21
+ ];
22
+ const AGENTS = [
23
+ ['Analyst', 'анализ задачи и требований'],
24
+ ['Architect', 'архитектура и технический план'],
25
+ ['Developer', 'реализация кода'],
26
+ ['Reviewer', 'code review'],
27
+ ['Tester', 'написание тестов'],
28
+ ];
29
+ function sep(len = 44) {
30
+ return new inquirer.Separator(chalk.gray('─'.repeat(len)));
31
+ }
32
+ function header(projectName) {
33
+ console.log('');
34
+ console.log(chalk.bold.cyan('didev') +
35
+ chalk.gray(` v${PKG_VERSION}`) +
36
+ chalk.gray(' · ') +
37
+ chalk.white(projectName));
38
+ console.log(chalk.gray('─'.repeat(50)));
39
+ console.log('');
40
+ }
41
+ // ── Main entry point ──────────────────────────────────────────────────────────
42
+ export async function runMenu(inChat = false) {
43
+ const projectName = process.cwd().split(/[/\\]/).pop() ?? 'project';
44
+ while (true) {
45
+ const config = await loadConfig();
46
+ const currentModel = config.api.model;
47
+ const servers = config.mcp?.servers ?? [];
48
+ const mcpLabel = servers.length > 0
49
+ ? chalk.dim(`(${servers.length})`)
50
+ : chalk.dim('(нет)');
51
+ header(projectName);
52
+ const { action } = await inquirer.prompt([{
53
+ type: 'list',
54
+ name: 'action',
55
+ message: 'Меню',
56
+ choices: [
57
+ inChat
58
+ ? { name: `${chalk.cyan('▶')} Вернуться в чат`, value: 'chat' }
59
+ : { name: `${chalk.cyan('▶')} Чат с AI`, value: 'chat' },
60
+ { name: `${chalk.yellow('◈')} Агент pipeline`, value: 'agent' },
61
+ sep(),
62
+ { name: `${chalk.blue('◉')} MCP серверы ${mcpLabel}`, value: 'mcp' },
63
+ { name: `${chalk.green('◉')} Контекст проекта`, value: 'context' },
64
+ { name: `${chalk.magenta('◉')} Модель: ${chalk.bold(currentModel)}`, value: 'model' },
65
+ { name: `${chalk.gray('◉')} Настройки конфига`, value: 'settings' },
66
+ sep(),
67
+ { name: `${chalk.red('✕')} Выход`, value: 'exit' },
68
+ ],
69
+ pageSize: 12,
70
+ }]);
71
+ switch (action) {
72
+ case 'chat':
73
+ return { action: inChat ? 'back' : 'chat', model: config.api.model };
74
+ case 'agent': {
75
+ const result = await agentMenu();
76
+ if (result !== null)
77
+ return result;
78
+ break;
79
+ }
80
+ case 'mcp':
81
+ await mcpMenu(servers);
82
+ break;
83
+ case 'context':
84
+ await contextMenu(config.api.model);
85
+ break;
86
+ case 'model':
87
+ await modelMenu(currentModel);
88
+ break;
89
+ case 'settings':
90
+ await settingsMenu();
91
+ break;
92
+ case 'exit':
93
+ return { action: 'exit' };
94
+ }
95
+ // loop → redraw menu
96
+ }
97
+ }
98
+ // ── Agents / Skills ───────────────────────────────────────────────────────────
99
+ async function agentMenu() {
100
+ console.log('');
101
+ console.log(chalk.bold(' Skills — доступные агенты:'));
102
+ console.log('');
103
+ for (const [name, desc] of AGENTS) {
104
+ console.log(` ${chalk.cyan(name.padEnd(12))}${chalk.gray(desc)}`);
105
+ }
106
+ console.log('');
107
+ const { choice } = await inquirer.prompt([{
108
+ type: 'list',
109
+ name: 'choice',
110
+ message: 'Режим запуска',
111
+ choices: [
112
+ { name: 'Полный pipeline (Analyst → Architect → Developer → Reviewer)', value: 'full' },
113
+ { name: 'Только Developer', value: 'dev' },
114
+ { name: 'Только Reviewer', value: 'review' },
115
+ { name: 'Только Tester', value: 'tester' },
116
+ sep(),
117
+ { name: chalk.gray('Назад'), value: 'back' },
118
+ ],
119
+ }]);
120
+ if (choice === 'back')
121
+ return null;
122
+ const { task } = await inquirer.prompt([{
123
+ type: 'input',
124
+ name: 'task',
125
+ message: 'Опишите задачу:',
126
+ validate: (v) => v.trim().length > 0 || 'Введите задачу',
127
+ }]);
128
+ if (!task?.trim())
129
+ return null;
130
+ const SKIP_ALL_BUT_DEV = ['Analyst', 'Frontend Analyst', 'Backend Analyst', 'Architect', 'Frontend Architect', 'Backend Architect', 'Reviewer', 'Security Auditor', 'Tester', 'Performance Auditor'];
131
+ const SKIP_ALL_BUT_REVIEW = ['Analyst', 'Frontend Analyst', 'Backend Analyst', 'Architect', 'Frontend Architect', 'Backend Architect', 'Developer', 'Frontend Developer', 'Backend Developer', 'Tester', 'Performance Auditor'];
132
+ const SKIP_ALL_BUT_TEST = ['Analyst', 'Frontend Analyst', 'Backend Analyst', 'Architect', 'Frontend Architect', 'Backend Architect', 'Developer', 'Frontend Developer', 'Backend Developer', 'Reviewer', 'Security Auditor'];
133
+ const modeMap = {
134
+ full: { agentMode: 'full' },
135
+ dev: { agentMode: 'developer-only' },
136
+ review: { agentSkip: SKIP_ALL_BUT_REVIEW },
137
+ tester: { agentSkip: SKIP_ALL_BUT_TEST },
138
+ };
139
+ return { action: 'agent', agentTask: task.trim(), ...modeMap[choice] };
140
+ }
141
+ // ── MCP ───────────────────────────────────────────────────────────────────────
142
+ function mcpStatusIcon(status) {
143
+ switch (status) {
144
+ case 'connected': return chalk.green('●');
145
+ case 'failed': return chalk.red('✕');
146
+ case 'disabled': return chalk.gray('○');
147
+ default: return chalk.dim('·');
148
+ }
149
+ }
150
+ async function mcpMenu(servers) {
151
+ console.log('');
152
+ // Merge bundled to get the full picture even if config doesn't have them yet
153
+ const allServers = mergeBundledServers(servers);
154
+ const manager = getMcpManager();
155
+ const liveStatuses = manager.getServerStatuses();
156
+ const statusMap = new Map(liveStatuses.map(s => [s.name, s]));
157
+ // Build display rows
158
+ console.log(chalk.bold(` MCP серверы (${allServers.length}):`));
159
+ console.log('');
160
+ for (const s of allServers) {
161
+ const live = statusMap.get(s.name);
162
+ const status = live?.status ?? (s.enabled === false ? 'disabled' : 'unknown');
163
+ const icon = mcpStatusIcon(status);
164
+ // Status label
165
+ let statusLabel;
166
+ if (status === 'connected') {
167
+ statusLabel = chalk.green(`подключён (${live.toolCount} tools)`);
168
+ }
169
+ else if (status === 'failed') {
170
+ const shortErr = (live?.error ?? '').slice(0, 40);
171
+ statusLabel = chalk.red(`ошибка ${chalk.dim(shortErr)}`);
172
+ }
173
+ else if (status === 'disabled') {
174
+ // Show which env vars are missing for bundled servers
175
+ const def = BUNDLED_SERVERS.find(d => d.name === s.name);
176
+ if (def?.requiresAuth) {
177
+ const missing = getMissingRequiredEnv(def);
178
+ if (missing.length > 0) {
179
+ statusLabel = chalk.gray(`отключён `) + chalk.dim(`нет: ${missing.join(', ')}`);
180
+ }
181
+ else {
182
+ statusLabel = chalk.yellow('отключён (включить: didev mcp)');
183
+ }
184
+ }
185
+ else {
186
+ statusLabel = chalk.gray('отключён');
187
+ }
188
+ }
189
+ else {
190
+ statusLabel = chalk.dim('не запущен в этой сессии');
191
+ }
192
+ console.log(` ${icon} ${chalk.bold(s.name.padEnd(14))} ${statusLabel}`);
193
+ }
194
+ console.log('');
195
+ // Show hints for disabled bundled servers that need env vars
196
+ const needsSetup = BUNDLED_SERVERS.filter(def => {
197
+ const missing = getMissingRequiredEnv(def);
198
+ return def.requiresAuth && missing.length > 0;
199
+ });
200
+ if (needsSetup.length > 0) {
201
+ console.log(chalk.dim(' Для активации требуются токены:'));
202
+ for (const def of needsSetup) {
203
+ const missing = getMissingRequiredEnv(def);
204
+ for (const varName of missing) {
205
+ const envDef = def.requiredEnv.find(e => e.name === varName);
206
+ console.log(` ${chalk.yellow('→')} ${chalk.bold(varName.padEnd(24))} ${chalk.dim(envDef?.hint ?? '')}`);
207
+ }
208
+ }
209
+ console.log(chalk.dim(` Установить: ${chalk.cyan('didev config set VAR=value')}`));
210
+ console.log('');
211
+ }
212
+ const { action } = await inquirer.prompt([{
213
+ type: 'list',
214
+ name: 'action',
215
+ message: 'MCP серверы',
216
+ choices: [
217
+ { name: 'Добавить сервер', value: 'add' },
218
+ ...(allServers.length > 0 ? [
219
+ { name: 'Тестировать соединения', value: 'test' },
220
+ { name: 'Удалить сервер', value: 'remove' },
221
+ ] : []),
222
+ sep(),
223
+ { name: chalk.gray('Назад'), value: 'back' },
224
+ ],
225
+ }]);
226
+ if (action === 'back')
227
+ return;
228
+ const { runMcpAdd, runMcpTest, runMcpRemove } = await import('./mcp.js');
229
+ if (action === 'add') {
230
+ await runMcpAdd();
231
+ }
232
+ else if (action === 'test') {
233
+ await runMcpTest();
234
+ }
235
+ else if (action === 'remove' && allServers.length > 0) {
236
+ const { serverName } = await inquirer.prompt([{
237
+ type: 'list',
238
+ name: 'serverName',
239
+ message: 'Выберите сервер для удаления:',
240
+ choices: allServers.map(s => ({ name: s.name, value: s.name })),
241
+ }]);
242
+ await runMcpRemove(serverName);
243
+ }
244
+ }
245
+ // ── Context ───────────────────────────────────────────────────────────────────
246
+ async function contextMenu(model) {
247
+ const { action } = await inquirer.prompt([{
248
+ type: 'list',
249
+ name: 'action',
250
+ message: 'Контекст проекта',
251
+ choices: [
252
+ { name: 'Показать базу знаний', value: 'show' },
253
+ { name: 'Обновить базу знаний через AI', value: 'update' },
254
+ sep(),
255
+ { name: chalk.gray('Назад'), value: 'back' },
256
+ ],
257
+ }]);
258
+ if (action === 'back')
259
+ return;
260
+ const { runContextShow, runContextUpdate } = await import('./context.js');
261
+ if (action === 'show') {
262
+ console.log('');
263
+ await runContextShow();
264
+ console.log('');
265
+ await inquirer.prompt([{
266
+ type: 'input',
267
+ name: '_',
268
+ message: chalk.gray('Enter для возврата...'),
269
+ }]);
270
+ }
271
+ else if (action === 'update') {
272
+ await runContextUpdate({ model });
273
+ }
274
+ }
275
+ // ── Model selection ───────────────────────────────────────────────────────────
276
+ async function modelMenu(currentModel) {
277
+ console.log('');
278
+ const { choice } = await inquirer.prompt([{
279
+ type: 'list',
280
+ name: 'choice',
281
+ message: 'Выберите модель',
282
+ choices: [
283
+ ...MODELS.map(m => ({
284
+ name: chalk.bold(m.name.padEnd(22)) +
285
+ chalk.gray(m.desc) +
286
+ (m.value === currentModel ? chalk.green(' ✓') : ''),
287
+ value: m.value,
288
+ short: m.value,
289
+ })),
290
+ sep(),
291
+ { name: chalk.gray('Назад'), value: 'back' },
292
+ ],
293
+ pageSize: 6,
294
+ }]);
295
+ if (choice === 'back' || choice === currentModel)
296
+ return;
297
+ await setConfigValue('api.model', choice);
298
+ console.log('');
299
+ logger.success(`Модель установлена: ${chalk.bold(choice)}`);
300
+ console.log('');
301
+ }
302
+ // ── Settings / Config ─────────────────────────────────────────────────────────
303
+ async function settingsMenu() {
304
+ const { action } = await inquirer.prompt([{
305
+ type: 'list',
306
+ name: 'action',
307
+ message: 'Настройки',
308
+ choices: [
309
+ { name: 'Показать конфигурацию', value: 'show' },
310
+ { name: 'Установить значение (KEY=VALUE)', value: 'set' },
311
+ sep(),
312
+ { name: chalk.gray('Назад'), value: 'back' },
313
+ ],
314
+ }]);
315
+ if (action === 'back')
316
+ return;
317
+ if (action === 'show') {
318
+ const { runConfigShow } = await import('./config.js');
319
+ console.log('');
320
+ await runConfigShow();
321
+ console.log('');
322
+ await inquirer.prompt([{
323
+ type: 'input',
324
+ name: '_',
325
+ message: chalk.gray('Enter для возврата...'),
326
+ }]);
327
+ }
328
+ else if (action === 'set') {
329
+ const { assignment } = await inquirer.prompt([{
330
+ type: 'input',
331
+ name: 'assignment',
332
+ message: 'KEY=VALUE (например: api.temperature=0.5):',
333
+ validate: (v) => v.includes('=') || 'Формат: KEY=VALUE',
334
+ }]);
335
+ if (assignment?.trim()) {
336
+ const { runConfigSet } = await import('./config.js');
337
+ await runConfigSet(assignment.trim());
338
+ console.log('');
339
+ }
340
+ }
341
+ }
342
+ //# sourceMappingURL=menu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"menu.js","sourceRoot":"","sources":["../../../src/cli/commands/menu.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { McpServerConfig } from './mcp.js';
2
+ export interface RequiredEnvVar {
3
+ name: string;
4
+ hint: string;
5
+ sensitive: boolean;
6
+ }
7
+ export interface BundledServerDef {
8
+ name: string;
9
+ displayName: string;
10
+ description: string;
11
+ command: string;
12
+ args: string[];
13
+ env?: Record<string, string>;
14
+ requiresAuth: boolean;
15
+ requiredEnv: RequiredEnvVar[];
16
+ gitRepo?: string;
17
+ defaultEnabled: boolean;
18
+ }
19
+ export declare const BUNDLED_SERVERS: BundledServerDef[];
20
+ export declare function toBundledMcpConfig(def: BundledServerDef): McpServerConfig;
21
+ export declare function getMissingRequiredEnv(def: BundledServerDef): string[];
22
+ export declare function isBundledServerReady(def: BundledServerDef): Promise<boolean>;
23
+ export declare function mergeBundledServers(existing: McpServerConfig[]): McpServerConfig[];
24
+ //# sourceMappingURL=bundled-mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundled-mcp.d.ts","sourceRoot":"","sources":["../../src/core/bundled-mcp.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEhD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,OAAO,CAAC;CACzB;AAID,eAAO,MAAM,eAAe,EAAE,gBAAgB,EAwD7C,CAAC;AAIF,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,gBAAgB,GAAG,eAAe,CAQzE;AAUD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,gBAAgB,GAAG,MAAM,EAAE,CAIrE;AAGD,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CAUlF;AAGD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG,eAAe,EAAE,CASlF"}
@@ -0,0 +1,112 @@
1
+ import { join } from 'path';
2
+ import { homedir } from 'os';
3
+ import { access } from 'fs/promises';
4
+ const MCP_DIR = join(homedir(), '.didev', 'mcp');
5
+ export const BUNDLED_SERVERS = [
6
+ {
7
+ name: 'java-vuln',
8
+ displayName: 'Java Vuln Remediation',
9
+ description: 'Find vulnerable Java deps via OSV.dev + Maven Central',
10
+ command: 'node',
11
+ args: [join(MCP_DIR, 'java-vuln-remediation', 'dist', 'index.js')],
12
+ requiresAuth: false,
13
+ requiredEnv: [],
14
+ gitRepo: 'https://github.com/Neovaryag/java-vuln-remediation.git',
15
+ defaultEnabled: true,
16
+ },
17
+ {
18
+ name: 'context7',
19
+ displayName: 'Context7',
20
+ description: 'Real-time library documentation from context7.com',
21
+ command: 'npx',
22
+ args: ['-y', '@upstash/context7-mcp'],
23
+ requiresAuth: false,
24
+ requiredEnv: [],
25
+ defaultEnabled: true,
26
+ },
27
+ {
28
+ name: 'pgs-tool',
29
+ displayName: 'PostgreSQL Tool',
30
+ description: 'PostgreSQL MCP tools for database interaction',
31
+ command: 'node',
32
+ args: [join(MCP_DIR, 'mcp-pgs-tool', 'dist', 'index.js')],
33
+ env: { DATABASE_URL: '${DATABASE_URL}' },
34
+ requiresAuth: true,
35
+ requiredEnv: [
36
+ { name: 'DATABASE_URL', hint: 'postgresql://user:pass@host/dbname', sensitive: false },
37
+ ],
38
+ gitRepo: 'https://github.com/Neovaryag/mcp-pgs-tool.git',
39
+ defaultEnabled: false,
40
+ },
41
+ {
42
+ name: 'atlassian',
43
+ displayName: 'Atlassian MCP',
44
+ description: 'Jira & Confluence integration',
45
+ command: 'node',
46
+ args: [join(MCP_DIR, 'atlassian-mcp', 'dist', 'index.js')],
47
+ env: {
48
+ ATLASSIAN_API_TOKEN: '${ATLASSIAN_API_TOKEN}',
49
+ ATLASSIAN_BASE_URL: '${ATLASSIAN_BASE_URL}',
50
+ ATLASSIAN_EMAIL: '${ATLASSIAN_EMAIL}',
51
+ },
52
+ requiresAuth: true,
53
+ requiredEnv: [
54
+ { name: 'ATLASSIAN_EMAIL', hint: 'your@email.com', sensitive: false },
55
+ { name: 'ATLASSIAN_API_TOKEN', hint: 'your Atlassian API token', sensitive: true },
56
+ { name: 'ATLASSIAN_BASE_URL', hint: 'https://yourcompany.atlassian.net', sensitive: false },
57
+ ],
58
+ gitRepo: 'https://github.com/varunkumar/atlassian-mcp.git',
59
+ defaultEnabled: false,
60
+ },
61
+ ];
62
+ // ── Helpers ───────────────────────────────────────────────────────────────────
63
+ export function toBundledMcpConfig(def) {
64
+ return {
65
+ name: def.name,
66
+ command: def.command,
67
+ args: def.args,
68
+ ...(def.env ? { env: def.env } : {}),
69
+ enabled: resolveEnabled(def),
70
+ };
71
+ }
72
+ function resolveEnabled(def) {
73
+ if (!def.defaultEnabled)
74
+ return false;
75
+ // If it requires env vars that aren't set, disable it
76
+ const missing = getMissingRequiredEnv(def);
77
+ if (missing.length > 0)
78
+ return false;
79
+ return true;
80
+ }
81
+ export function getMissingRequiredEnv(def) {
82
+ return def.requiredEnv
83
+ .filter(e => !process.env[e.name])
84
+ .map(e => e.name);
85
+ }
86
+ // Returns true if the server entry point file exists (for node-based cloned servers)
87
+ export async function isBundledServerReady(def) {
88
+ if (def.command === 'npx')
89
+ return true;
90
+ const entryPoint = def.args[0];
91
+ if (!entryPoint)
92
+ return false;
93
+ try {
94
+ await access(entryPoint);
95
+ return true;
96
+ }
97
+ catch {
98
+ return false;
99
+ }
100
+ }
101
+ // Merges bundled servers into an existing list — skips ones already present by name
102
+ export function mergeBundledServers(existing) {
103
+ const names = new Set(existing.map(s => s.name));
104
+ const result = [...existing];
105
+ for (const def of BUNDLED_SERVERS) {
106
+ if (!names.has(def.name)) {
107
+ result.push(toBundledMcpConfig(def));
108
+ }
109
+ }
110
+ return result;
111
+ }
112
+ //# sourceMappingURL=bundled-mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundled-mcp.js","sourceRoot":"","sources":["../../src/core/bundled-mcp.ts"],"names":[],"mappings":"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"}