@azerogluemin/ai-bootstrap 0.4.2 → 0.6.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/CHANGELOG.md +153 -0
- package/dist/applier/agents-installer.d.ts +1 -6
- package/dist/applier/agents-installer.js +16 -64
- package/dist/applier/agents-installer.js.map +1 -1
- package/dist/applier/pool.d.ts +34 -0
- package/dist/applier/pool.js +166 -0
- package/dist/applier/pool.js.map +1 -0
- package/dist/applier/preset-definitions.d.ts +15 -0
- package/dist/applier/preset-definitions.js +225 -0
- package/dist/applier/preset-definitions.js.map +1 -0
- package/dist/applier/preset-scaffolder.d.ts +14 -0
- package/dist/applier/preset-scaffolder.js +526 -0
- package/dist/applier/preset-scaffolder.js.map +1 -0
- package/dist/applier/skills-installer.d.ts +5 -3
- package/dist/applier/skills-installer.js +26 -75
- package/dist/applier/skills-installer.js.map +1 -1
- package/dist/commands/help.d.ts +1 -0
- package/dist/commands/help.js +98 -0
- package/dist/commands/help.js.map +1 -0
- package/dist/commands/mcp.js +50 -5
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/new.js +74 -164
- package/dist/commands/new.js.map +1 -1
- package/dist/commands/scan.d.ts +1 -0
- package/dist/commands/scan.js +42 -0
- package/dist/commands/scan.js.map +1 -0
- package/dist/commands/skills.js +65 -1
- package/dist/commands/skills.js.map +1 -1
- package/dist/index.js +10 -1
- package/dist/index.js.map +1 -1
- package/dist/utils/paths.d.ts +3 -0
- package/dist/utils/paths.js +8 -1
- package/dist/utils/paths.js.map +1 -1
- package/dist/wizard.js +63 -75
- package/dist/wizard.js.map +1 -1
- package/package.json +1 -1
- package/templates/skills/art-director/SKILL.md +209 -0
- package/templates/skills/backend-developer/SKILL.md +198 -0
- package/templates/skills/cinematographer/SKILL.md +233 -0
- package/templates/skills/colorist/SKILL.md +210 -0
- package/templates/skills/devops-developer/SKILL.md +263 -0
- package/templates/skills/editor/SKILL.md +166 -0
- package/templates/skills/frontend-developer/SKILL.md +147 -0
- package/templates/skills/mobile-developer/SKILL.md +227 -0
|
@@ -1,94 +1,45 @@
|
|
|
1
|
-
// Install
|
|
2
|
-
// Copies skill directories from packages/templates/skills/<skill>/
|
|
1
|
+
// Install skills into a target skills directory by linking from the pool.
|
|
3
2
|
//
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
3
|
+
// v0.5.0 changed:
|
|
4
|
+
// - Used to COPY skill dirs from templates (~10KB each) per project
|
|
5
|
+
// - Now ensures pool is up-to-date, then SYMLINKS from pool → target
|
|
6
|
+
// - One copy on disk in pool; many lightweight links across projects
|
|
7
|
+
// - Updates to pool (via ai-bootstrap update) propagate automatically
|
|
8
|
+
//
|
|
9
|
+
// Cross-platform: POSIX symlink, Windows junction, copy fallback.
|
|
10
|
+
import { existsSync } from 'node:fs';
|
|
11
|
+
import { join } from 'node:path';
|
|
10
12
|
import { ensureDir, SKILLS_DIR } from '../utils/paths.js';
|
|
11
|
-
|
|
12
|
-
* Resolve the absolute path to skills templates folder.
|
|
13
|
-
*
|
|
14
|
-
* Lookup order:
|
|
15
|
-
* 1) ./templates/skills/ — published npm package (bundled via prepack)
|
|
16
|
-
* 2) ../templates/skills/ — packages/cli/templates/skills/ (dev edit fallback)
|
|
17
|
-
* 3) ../../templates/skills/ — packages/templates/skills/ (monorepo dev)
|
|
18
|
-
*
|
|
19
|
-
* Returns the first path that exists; otherwise the most-likely production path.
|
|
20
|
-
*/
|
|
21
|
-
function templatesSkillsPath() {
|
|
22
|
-
const here = fileURLToPath(import.meta.url);
|
|
23
|
-
// From dist/applier/skills-installer.js:
|
|
24
|
-
// - cli root = ../../../
|
|
25
|
-
const cliRoot = resolve(here, '..', '..', '..');
|
|
26
|
-
const candidates = [
|
|
27
|
-
join(cliRoot, 'templates', 'skills'), // 1) published npm pkg
|
|
28
|
-
resolve(cliRoot, '..', 'templates', 'skills'), // 2) sibling templates package (monorepo)
|
|
29
|
-
];
|
|
30
|
-
for (const c of candidates) {
|
|
31
|
-
if (existsSync(c))
|
|
32
|
-
return c;
|
|
33
|
-
}
|
|
34
|
-
return candidates[0];
|
|
35
|
-
}
|
|
13
|
+
import { ensurePool, linkFromPool, poolHasSkill, poolSkillPath } from './pool.js';
|
|
36
14
|
/**
|
|
37
15
|
* Install skills into a target skills directory.
|
|
38
|
-
* @param skillNames List of skill IDs to install
|
|
39
|
-
* @param targetSkillsDir Absolute path
|
|
40
|
-
* Pass `<project>/.claude/skills/` for project
|
|
16
|
+
* @param skillNames List of skill IDs to install (must exist in pool)
|
|
17
|
+
* @param targetSkillsDir Absolute path. Default `~/.claude/skills/` (user scope).
|
|
18
|
+
* Pass `<project>/.claude/skills/` for project scope.
|
|
41
19
|
*/
|
|
42
20
|
export function installSkills(skillNames, targetSkillsDir = SKILLS_DIR) {
|
|
43
|
-
const result = {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
errors: [],
|
|
47
|
-
};
|
|
21
|
+
const result = { installed: [], skipped: [], errors: [] };
|
|
22
|
+
// Ensure the pool has the latest templates (no-op if already up-to-date)
|
|
23
|
+
ensurePool();
|
|
48
24
|
ensureDir(targetSkillsDir);
|
|
49
|
-
const templatesDir = templatesSkillsPath();
|
|
50
|
-
if (!existsSync(templatesDir)) {
|
|
51
|
-
for (const name of skillNames) {
|
|
52
|
-
result.errors.push({
|
|
53
|
-
skill: name,
|
|
54
|
-
error: `Templates folder yoxdur: ${templatesDir}`,
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
return result;
|
|
58
|
-
}
|
|
59
25
|
for (const name of skillNames) {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
// Check source exists
|
|
63
|
-
if (!existsSync(sourceDir)) {
|
|
64
|
-
result.skipped.push({
|
|
65
|
-
skill: name,
|
|
66
|
-
reason: `Mənbə yoxdur: ${sourceDir} (skill hələ yazılmayıb)`,
|
|
67
|
-
});
|
|
26
|
+
if (!poolHasSkill(name)) {
|
|
27
|
+
result.skipped.push({ skill: name, reason: `Pool-da yoxdur: ${name}` });
|
|
68
28
|
continue;
|
|
69
29
|
}
|
|
70
|
-
|
|
71
|
-
if (existsSync(
|
|
72
|
-
result.skipped.push({
|
|
73
|
-
skill: name,
|
|
74
|
-
reason: 'artıq install olunub',
|
|
75
|
-
});
|
|
30
|
+
const target = join(targetSkillsDir, name);
|
|
31
|
+
if (existsSync(target)) {
|
|
32
|
+
result.skipped.push({ skill: name, reason: 'artıq quraşdırılıb' });
|
|
76
33
|
continue;
|
|
77
34
|
}
|
|
78
|
-
// Copy recursively (npm-cache-safe; survives source removal)
|
|
79
35
|
try {
|
|
80
|
-
|
|
36
|
+
const mode = linkFromPool(poolSkillPath(name), target);
|
|
81
37
|
result.installed.push(name);
|
|
38
|
+
if (!result.linkMode)
|
|
39
|
+
result.linkMode = mode;
|
|
82
40
|
}
|
|
83
41
|
catch (err) {
|
|
84
|
-
|
|
85
|
-
rmSync(targetDir, { recursive: true, force: true });
|
|
86
|
-
}
|
|
87
|
-
catch { /* best-effort cleanup */ }
|
|
88
|
-
result.errors.push({
|
|
89
|
-
skill: name,
|
|
90
|
-
error: err instanceof Error ? err.message : String(err),
|
|
91
|
-
});
|
|
42
|
+
result.errors.push({ skill: name, error: err instanceof Error ? err.message : String(err) });
|
|
92
43
|
}
|
|
93
44
|
}
|
|
94
45
|
return result;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills-installer.js","sourceRoot":"","sources":["../../src/applier/skills-installer.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"skills-installer.js","sourceRoot":"","sources":["../../src/applier/skills-installer.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,EAAE;AACF,kBAAkB;AAClB,sEAAsE;AACtE,uEAAuE;AACvE,uEAAuE;AACvE,wEAAwE;AACxE,EAAE;AACF,kEAAkE;AAElE,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAUlF;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAC3B,UAAoB,EACpB,kBAA0B,UAAU;IAEpC,MAAM,MAAM,GAAuB,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAE9E,yEAAyE;IACzE,UAAU,EAAE,CAAC;IACb,SAAS,CAAC,eAAe,CAAC,CAAC;IAE3B,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,mBAAmB,IAAI,EAAE,EAAE,CAAC,CAAC;YACxE,SAAS;QACX,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;QAC3C,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACvB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAAC;YACnE,SAAS;QACX,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;YACvD,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5B,IAAI,CAAC,MAAM,CAAC,QAAQ;gBAAE,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;QAC/C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC/F,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function runHelpCommand(): void;
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
// ai-bootstrap help — comprehensive guide.
|
|
2
|
+
// `--help` shows brief; `help` shows the full tour.
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
export function runHelpCommand() {
|
|
5
|
+
console.log(`
|
|
6
|
+
${chalk.bold.cyan('ai-bootstrap')} ${chalk.dim('— Personal AI infrastructure for Claude Code')}
|
|
7
|
+
|
|
8
|
+
${chalk.bold('Necə işləyir')}
|
|
9
|
+
|
|
10
|
+
ai-bootstrap iki yerdə skill və agent quraşdırır:
|
|
11
|
+
1. ${chalk.cyan('User scope')} (${chalk.dim('~/.claude/skills/')})
|
|
12
|
+
Hər layihədə, hər session-da yüklənir. Universal əsas.
|
|
13
|
+
2. ${chalk.cyan('Project scope')} (${chalk.dim('<layihə>/.claude/skills/')})
|
|
14
|
+
Yalnız o layihədə yüklənir. Layihəyə xas dəst.
|
|
15
|
+
|
|
16
|
+
Hər ikisi ${chalk.cyan('pool')}-dan symlink edir:
|
|
17
|
+
${chalk.dim('~/.claude/skills-pool/')} ← bütün skill-lər bir dəfə saxlanır (3-4 MB)
|
|
18
|
+
${chalk.dim('~/.claude/agents-pool/')} ← bütün agent-lər bir dəfə
|
|
19
|
+
|
|
20
|
+
${chalk.bold('Nəticə:')} ${chalk.green('10 layihə = 1 dəfə disk, 10 layihəyə link')}
|
|
21
|
+
|
|
22
|
+
${chalk.bold('İlk istifadə (3 addım)')}
|
|
23
|
+
|
|
24
|
+
${chalk.cyan('npm install -g @azerogluemin/ai-bootstrap')} ${chalk.dim('# qlobal install')}
|
|
25
|
+
${chalk.cyan('ai-bootstrap')} ${chalk.dim('# 3 sual, foundation + free MCPs quraşdırır')}
|
|
26
|
+
${chalk.cyan('cd ~/Projects/yeni-layihə && ai-bootstrap new')} ${chalk.dim('# layihə bundle')}
|
|
27
|
+
|
|
28
|
+
${chalk.bold('Komandalar')}
|
|
29
|
+
|
|
30
|
+
${chalk.bold.cyan(' Setup')}
|
|
31
|
+
${chalk.cyan('ai-bootstrap')} User-scope setup (3 sual)
|
|
32
|
+
${chalk.cyan('ai-bootstrap new')} Layihə setup (3 sual, multi-bundle)
|
|
33
|
+
${chalk.cyan('ai-bootstrap update')} Yeni versiyaya yenilə (pool sinxron)
|
|
34
|
+
${chalk.cyan('ai-bootstrap doctor')} Sağlamlıq yoxla
|
|
35
|
+
|
|
36
|
+
${chalk.bold.cyan(' Skill + Agent idarəsi')}
|
|
37
|
+
${chalk.cyan('ai-bootstrap add')} ${chalk.dim('İnteraktiv multi-select siyahı')}
|
|
38
|
+
${chalk.cyan('ai-bootstrap add <name1> <name2>')} Konkret skill/agent əlavə
|
|
39
|
+
${chalk.cyan('ai-bootstrap add --bundle creator')} Bütün bundle əlavə
|
|
40
|
+
${chalk.cyan('ai-bootstrap remove <name>')} Sil (alias: rm)
|
|
41
|
+
${chalk.cyan('ai-bootstrap list')} Bu scope-da quraşdırılanlar
|
|
42
|
+
${chalk.cyan('ai-bootstrap list --all')} User + bu layihə yan-yana
|
|
43
|
+
|
|
44
|
+
${chalk.bold.cyan(' MCP servers')}
|
|
45
|
+
${chalk.cyan('ai-bootstrap mcp list')} 63 mövcud server siyahısı
|
|
46
|
+
${chalk.cyan('ai-bootstrap mcp add github notion')} Manual MCP əlavə
|
|
47
|
+
${chalk.cyan('ai-bootstrap mcp installed')} Quraşdırılan MCP-lər
|
|
48
|
+
${chalk.cyan('ai-bootstrap mcp credentials')} Token-ləri əlavə et
|
|
49
|
+
|
|
50
|
+
${chalk.bold.cyan(' Backup (opsional)')}
|
|
51
|
+
${chalk.cyan('ai-bootstrap backup init')} Git remote bağla
|
|
52
|
+
${chalk.cyan('ai-bootstrap backup sync')} Dəyişiklikləri push
|
|
53
|
+
${chalk.cyan('ai-bootstrap backup pull')} Yeni maşında bərpa
|
|
54
|
+
${chalk.cyan('ai-bootstrap backup status')} Son sinx + remote
|
|
55
|
+
|
|
56
|
+
${chalk.bold.cyan(' Layihə skan')}
|
|
57
|
+
${chalk.cyan('ai-bootstrap scan ~/MyJobs')} Mövcud layihələri tap
|
|
58
|
+
|
|
59
|
+
${chalk.bold.cyan(' Telemetry (default OFF)')}
|
|
60
|
+
${chalk.cyan('ai-bootstrap telemetry on/off/status')} Anonim usage data
|
|
61
|
+
|
|
62
|
+
${chalk.bold.cyan(' Meta')}
|
|
63
|
+
${chalk.cyan('ai-bootstrap --version')} Versiya
|
|
64
|
+
${chalk.cyan('ai-bootstrap --help')} Qısa kömək
|
|
65
|
+
${chalk.cyan('ai-bootstrap help')} Bu tam kömək
|
|
66
|
+
|
|
67
|
+
${chalk.bold('Tipik axın')}
|
|
68
|
+
|
|
69
|
+
${chalk.dim('# 1) Maşına bir dəfə:')}
|
|
70
|
+
${chalk.cyan('npm install -g @azerogluemin/ai-bootstrap')}
|
|
71
|
+
${chalk.cyan('ai-bootstrap')} ${chalk.dim('# foundation + free MCPs')}
|
|
72
|
+
${chalk.cyan('ai-bootstrap mcp add github instagram brave-search')}
|
|
73
|
+
${chalk.cyan('ai-bootstrap mcp credentials')} ${chalk.dim('# token-ləri əlavə')}
|
|
74
|
+
|
|
75
|
+
${chalk.dim('# 2) Yeni AI Creator layihə:')}
|
|
76
|
+
${chalk.cyan('mkdir -p ~/Projects/ai-content && cd ~/Projects/ai-content')}
|
|
77
|
+
${chalk.cyan('ai-bootstrap new')} ${chalk.dim('# creator bundle seç')}
|
|
78
|
+
${chalk.cyan('claude')}
|
|
79
|
+
|
|
80
|
+
${chalk.dim('# 3) Yeni SaaS layihə:')}
|
|
81
|
+
${chalk.cyan('mkdir -p ~/Projects/saas && cd ~/Projects/saas')}
|
|
82
|
+
${chalk.cyan('ai-bootstrap new')} ${chalk.dim('# developer bundle seç')}
|
|
83
|
+
${chalk.cyan('claude')}
|
|
84
|
+
|
|
85
|
+
${chalk.dim('# 4) Layihənin yarısında əlavə skill lazım oldu:')}
|
|
86
|
+
${chalk.cyan('cd ~/Projects/saas')}
|
|
87
|
+
${chalk.cyan('ai-bootstrap add')} ${chalk.dim('# interaktiv siyahı, multi-select')}
|
|
88
|
+
${chalk.cyan('# yaxud')}
|
|
89
|
+
${chalk.cyan('ai-bootstrap add showrunner image-prompt-engineer')}
|
|
90
|
+
|
|
91
|
+
${chalk.bold('Ətraflı')}
|
|
92
|
+
|
|
93
|
+
Docs: ${chalk.cyan('https://github.com/eminazeroglu/ai-bootstrap')}
|
|
94
|
+
npm: ${chalk.cyan('https://www.npmjs.com/package/@azerogluemin/ai-bootstrap')}
|
|
95
|
+
Issue: ${chalk.cyan('https://github.com/eminazeroglu/ai-bootstrap/issues')}
|
|
96
|
+
`);
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=help.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/commands/help.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/mcp.js
CHANGED
|
@@ -8,19 +8,21 @@
|
|
|
8
8
|
import chalk from 'chalk';
|
|
9
9
|
import { existsSync, readFileSync, writeFileSync, chmodSync } from 'node:fs';
|
|
10
10
|
import { join } from 'node:path';
|
|
11
|
-
import { input, password } from '@inquirer/prompts';
|
|
11
|
+
import { input, password, checkbox } from '@inquirer/prompts';
|
|
12
12
|
import { HOME } from '../utils/paths.js';
|
|
13
13
|
import { MCP_CATALOG, getMcpEntry } from '../applier/mcp-catalog.js';
|
|
14
|
-
import { listInstalledMcps } from '../applier/mcp-config.js';
|
|
14
|
+
import { writeMcpConfig, listInstalledMcps } from '../applier/mcp-config.js';
|
|
15
15
|
const ENV_FILE = join(HOME, '.ai-bootstrap.env');
|
|
16
16
|
function printMcpHelp() {
|
|
17
17
|
console.log(`
|
|
18
18
|
${chalk.bold('ai-bootstrap mcp')} — MCP server management
|
|
19
19
|
|
|
20
20
|
${chalk.bold('Subcommands:')}
|
|
21
|
-
${chalk.cyan('list')}
|
|
22
|
-
${chalk.cyan('
|
|
23
|
-
${chalk.cyan('
|
|
21
|
+
${chalk.cyan('list')} List all available MCPs in the catalog
|
|
22
|
+
${chalk.cyan('add')} Interactive multi-select MCP server(s)
|
|
23
|
+
${chalk.cyan('add github notion slack')} Add specific MCPs by ID
|
|
24
|
+
${chalk.cyan('installed')} List MCPs configured via ai-bootstrap
|
|
25
|
+
${chalk.cyan('credentials')} Interactively fill credentials into ~/.ai-bootstrap.env
|
|
24
26
|
`);
|
|
25
27
|
}
|
|
26
28
|
function listAll() {
|
|
@@ -117,6 +119,45 @@ async function collectCredentials() {
|
|
|
117
119
|
console.log(chalk.dim('Shell-də yüklə (qoy ~/.zshrc və ya ~/.bashrc-ə):'));
|
|
118
120
|
console.log(chalk.cyan(` set -a; source ${ENV_FILE}; set +a\n`));
|
|
119
121
|
}
|
|
122
|
+
async function addMcps(names) {
|
|
123
|
+
let toInstall = names;
|
|
124
|
+
// No args → interactive multi-select
|
|
125
|
+
if (toInstall.length === 0) {
|
|
126
|
+
const byCategory = new Map();
|
|
127
|
+
for (const entry of Object.values(MCP_CATALOG)) {
|
|
128
|
+
const list = byCategory.get(entry.category) ?? [];
|
|
129
|
+
list.push(entry);
|
|
130
|
+
byCategory.set(entry.category, list);
|
|
131
|
+
}
|
|
132
|
+
const choices = [];
|
|
133
|
+
for (const [cat, entries] of byCategory) {
|
|
134
|
+
choices.push({ name: chalk.bold(`── ${cat.toUpperCase()} ──`), value: `__cat_${cat}`, disabled: true });
|
|
135
|
+
for (const e of entries.sort((a, b) => a.id.localeCompare(b.id))) {
|
|
136
|
+
const credIcon = e.credentialKeys.length > 0 ? chalk.yellow(' 🔑') : '';
|
|
137
|
+
choices.push({ name: `${e.id.padEnd(22)} ${chalk.dim(e.description)}${credIcon}`, value: e.id });
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
toInstall = await checkbox({
|
|
141
|
+
message: 'MCP server-(lər)i seç: (Space = seç, Enter = bitir, 🔑 = credential lazımdır)',
|
|
142
|
+
choices,
|
|
143
|
+
pageSize: 25,
|
|
144
|
+
required: true,
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
console.log(chalk.dim(`\n Quraşdırılır: ${toInstall.join(', ')}\n`));
|
|
148
|
+
const result = writeMcpConfig(toInstall);
|
|
149
|
+
console.log(` ${chalk.green('✓')} ${result.installed.length} yeni MCP konfiq edildi`);
|
|
150
|
+
if (result.skipped.length > 0) {
|
|
151
|
+
console.log(chalk.dim(` ${result.skipped.length} artıq var: ${result.skipped.join(', ')}`));
|
|
152
|
+
}
|
|
153
|
+
if (result.missingFromCatalog.length > 0) {
|
|
154
|
+
console.log(chalk.yellow(` ⚠ Kataloqda yoxdur: ${result.missingFromCatalog.join(', ')}`));
|
|
155
|
+
}
|
|
156
|
+
if (result.credentialsRequired.length > 0) {
|
|
157
|
+
console.log(chalk.dim(`\n ${result.credentialsRequired.length} MCP credential gözləyir. İçin: ${chalk.cyan('ai-bootstrap mcp credentials')}`));
|
|
158
|
+
}
|
|
159
|
+
console.log('');
|
|
160
|
+
}
|
|
120
161
|
export async function runMcpCommand(args) {
|
|
121
162
|
const sub = args[0];
|
|
122
163
|
if (!sub || sub === 'help' || sub === '--help' || sub === '-h') {
|
|
@@ -131,6 +172,10 @@ export async function runMcpCommand(args) {
|
|
|
131
172
|
listInstalled();
|
|
132
173
|
return;
|
|
133
174
|
}
|
|
175
|
+
if (sub === 'add') {
|
|
176
|
+
await addMcps(args.slice(1).filter((a) => !a.startsWith('--')));
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
134
179
|
if (sub === 'credentials' || sub === 'creds') {
|
|
135
180
|
await collectCredentials();
|
|
136
181
|
return;
|
package/dist/commands/mcp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,EAAE;AACF,eAAe;AACf,0DAA0D;AAC1D,iEAAiE;AACjE,2EAA2E;AAC3E,8BAA8B;AAE9B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"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"}
|