devlyn-cli 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.
- package/bin/devlyn.js +25 -4
- package/package.json +1 -1
package/bin/devlyn.js
CHANGED
|
@@ -152,6 +152,8 @@ const OPTIONAL_ADDONS = [
|
|
|
152
152
|
{ name: 'coreyhaines31/marketingskills', desc: 'Marketing automation and content skills', type: 'external' },
|
|
153
153
|
{ name: 'anthropics/skills', desc: 'Official Anthropic skill-creator with eval framework and description optimizer', type: 'external' },
|
|
154
154
|
{ name: 'Leonxlnx/taste-skill', desc: 'Premium frontend design skills ā modern layouts, animations, and visual refinement', type: 'external' },
|
|
155
|
+
// MCP servers (installed via claude mcp add)
|
|
156
|
+
{ name: 'codex-cli', desc: 'Codex MCP server for cross-model evaluation via OpenAI Codex', type: 'mcp', command: 'npx -y codex-mcp-server' },
|
|
155
157
|
];
|
|
156
158
|
|
|
157
159
|
function log(msg, color = 'reset') {
|
|
@@ -233,8 +235,8 @@ function listContents() {
|
|
|
233
235
|
// List optional addons
|
|
234
236
|
log('\nš¦ Optional Addons:', 'blue');
|
|
235
237
|
OPTIONAL_ADDONS.forEach((addon) => {
|
|
236
|
-
const tagLabel = addon.type === 'local' ? 'skill' : 'pack';
|
|
237
|
-
const tagColor = addon.type === 'local' ? COLORS.magenta : COLORS.cyan;
|
|
238
|
+
const tagLabel = addon.type === 'mcp' ? 'mcp' : addon.type === 'local' ? 'skill' : 'pack';
|
|
239
|
+
const tagColor = addon.type === 'mcp' ? COLORS.green : addon.type === 'local' ? COLORS.magenta : COLORS.cyan;
|
|
238
240
|
const tag = `${tagColor}${tagLabel}${COLORS.reset}`;
|
|
239
241
|
log(` ${COLORS.green}${addon.name}${COLORS.reset} ${COLORS.dim}[${tag}${COLORS.dim}]${COLORS.reset}`);
|
|
240
242
|
log(` ${COLORS.dim}${addon.desc}${COLORS.reset}`);
|
|
@@ -305,8 +307,8 @@ function multiSelect(items) {
|
|
|
305
307
|
const checkbox = selected.has(i) ? `${COLORS.green}ā${COLORS.reset}` : `${COLORS.dim}ā${COLORS.reset}`;
|
|
306
308
|
const pointer = i === cursor ? `${COLORS.cyan}āÆ${COLORS.reset}` : ' ';
|
|
307
309
|
const name = i === cursor ? `${COLORS.cyan}${item.name}${COLORS.reset}` : item.name;
|
|
308
|
-
const tagLabel = item.type === 'local' ? 'skill' : 'pack';
|
|
309
|
-
const tagColor = item.type === 'local' ? COLORS.magenta : COLORS.cyan;
|
|
310
|
+
const tagLabel = item.type === 'mcp' ? 'mcp' : item.type === 'local' ? 'skill' : 'pack';
|
|
311
|
+
const tagColor = item.type === 'mcp' ? COLORS.green : item.type === 'local' ? COLORS.magenta : COLORS.cyan;
|
|
310
312
|
const tag = `${tagColor}${tagLabel}${COLORS.reset}`;
|
|
311
313
|
console.log(`${pointer} ${checkbox} ${name} ${COLORS.dim}[${tag}${COLORS.dim}]${COLORS.reset}`);
|
|
312
314
|
console.log(` ${COLORS.dim}${item.desc}${COLORS.reset}`);
|
|
@@ -393,6 +395,18 @@ function installLocalSkill(skillName) {
|
|
|
393
395
|
return true;
|
|
394
396
|
}
|
|
395
397
|
|
|
398
|
+
function installMcpServer(name, command) {
|
|
399
|
+
try {
|
|
400
|
+
log(`\nš Installing MCP server: ${name}...`, 'cyan');
|
|
401
|
+
execSync(`claude mcp add ${name} -- ${command}`, { stdio: 'inherit' });
|
|
402
|
+
return true;
|
|
403
|
+
} catch (error) {
|
|
404
|
+
log(` ā ļø Failed to install MCP server "${name}"`, 'yellow');
|
|
405
|
+
log(` Run manually: claude mcp add ${name} -- ${command}`, 'dim');
|
|
406
|
+
return false;
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
|
|
396
410
|
function installSkillPack(packName) {
|
|
397
411
|
try {
|
|
398
412
|
log(`\nš¦ Installing ${packName}...`, 'cyan');
|
|
@@ -408,6 +422,9 @@ function installAddon(addon) {
|
|
|
408
422
|
if (addon.type === 'local') {
|
|
409
423
|
return installLocalSkill(addon.name);
|
|
410
424
|
}
|
|
425
|
+
if (addon.type === 'mcp') {
|
|
426
|
+
return installMcpServer(addon.name, addon.command);
|
|
427
|
+
}
|
|
411
428
|
return installSkillPack(addon.name);
|
|
412
429
|
}
|
|
413
430
|
|
|
@@ -607,6 +624,10 @@ function showHelp() {
|
|
|
607
624
|
OPTIONAL_ADDONS.filter((a) => a.type === 'external').forEach((pack) => {
|
|
608
625
|
log(` npx skills add ${pack.name}`);
|
|
609
626
|
});
|
|
627
|
+
log('\nMCP servers:', 'green');
|
|
628
|
+
OPTIONAL_ADDONS.filter((a) => a.type === 'mcp').forEach((mcp) => {
|
|
629
|
+
log(` claude mcp add ${mcp.name} -- ${mcp.command} ${COLORS.dim}${mcp.desc}${COLORS.reset}`);
|
|
630
|
+
});
|
|
610
631
|
log('\nSupported CLIs for agent installation:', 'green');
|
|
611
632
|
for (const [key, cli] of Object.entries(CLI_TARGETS)) {
|
|
612
633
|
log(` ${key.padEnd(10)} ${cli.name}`);
|