skillops-cli 1.3.4 → 1.3.6
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/cli.js +440 -65
- package/dist/index.d.ts +42 -42
- package/dist/index.js +266 -41
- package/package.json +10 -2
package/dist/index.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import fs from "fs";
|
|
3
3
|
import YAML from "yaml";
|
|
4
4
|
import { z } from "zod";
|
|
5
|
-
var SKILLOPS_VERSION = "1.3.
|
|
5
|
+
var SKILLOPS_VERSION = "1.3.6";
|
|
6
6
|
var SKILL_NAME_REGEX = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
|
|
7
7
|
var SEMVER_REGEX = /^\d+\.\d+\.\d+$/;
|
|
8
8
|
var FRONTMATTER_REGEX = /^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/;
|
|
@@ -79,7 +79,15 @@ var RuntimeTargetSchema = z.enum([
|
|
|
79
79
|
"kiro",
|
|
80
80
|
"trae",
|
|
81
81
|
"amazonq",
|
|
82
|
-
"junie"
|
|
82
|
+
"junie",
|
|
83
|
+
"gemini",
|
|
84
|
+
"factory",
|
|
85
|
+
"qwen",
|
|
86
|
+
"augment",
|
|
87
|
+
"vibe",
|
|
88
|
+
"warp",
|
|
89
|
+
"crush",
|
|
90
|
+
"idx"
|
|
83
91
|
]);
|
|
84
92
|
var CORE_RUNTIME_TARGETS = [
|
|
85
93
|
"claude",
|
|
@@ -108,7 +116,15 @@ var ALL_RUNTIME_TARGETS = [
|
|
|
108
116
|
"kiro",
|
|
109
117
|
"trae",
|
|
110
118
|
"amazonq",
|
|
111
|
-
"junie"
|
|
119
|
+
"junie",
|
|
120
|
+
"gemini",
|
|
121
|
+
"factory",
|
|
122
|
+
"qwen",
|
|
123
|
+
"augment",
|
|
124
|
+
"vibe",
|
|
125
|
+
"warp",
|
|
126
|
+
"crush",
|
|
127
|
+
"idx"
|
|
112
128
|
];
|
|
113
129
|
var RUNTIME_HARNESS_SPECS = {
|
|
114
130
|
claude: {
|
|
@@ -126,15 +142,15 @@ var RUNTIME_HARNESS_SPECS = {
|
|
|
126
142
|
},
|
|
127
143
|
antigravity: {
|
|
128
144
|
id: "antigravity",
|
|
129
|
-
displayName: "Google Antigravity
|
|
145
|
+
displayName: "Google Antigravity IDE",
|
|
130
146
|
vendor: "Google DeepMind",
|
|
131
147
|
category: "ai-ide",
|
|
132
148
|
skillFormat: "progressive-skill-dir",
|
|
133
149
|
skillsDir: ".agent/skills",
|
|
134
150
|
subagentsDir: ".agent/agents",
|
|
135
|
-
detectionPaths: [".agent", "
|
|
136
|
-
alwaysOnFiles: ["GEMINI.md"
|
|
137
|
-
mcpConfigPath: ".
|
|
151
|
+
detectionPaths: [".agent", "GEMINI.md"],
|
|
152
|
+
alwaysOnFiles: ["GEMINI.md"],
|
|
153
|
+
mcpConfigPath: ".agent/mcp_config.json",
|
|
138
154
|
supportsMcp: true
|
|
139
155
|
},
|
|
140
156
|
cursor: {
|
|
@@ -379,6 +395,110 @@ var RUNTIME_HARNESS_SPECS = {
|
|
|
379
395
|
alwaysOnFiles: [".junie/guidelines.md"],
|
|
380
396
|
mcpConfigPath: null,
|
|
381
397
|
supportsMcp: false
|
|
398
|
+
},
|
|
399
|
+
gemini: {
|
|
400
|
+
id: "gemini",
|
|
401
|
+
displayName: "Google Gemini CLI",
|
|
402
|
+
vendor: "Google",
|
|
403
|
+
category: "cli-agent",
|
|
404
|
+
skillFormat: "progressive-skill-dir",
|
|
405
|
+
skillsDir: ".gemini/skills",
|
|
406
|
+
subagentsDir: ".gemini/agents",
|
|
407
|
+
detectionPaths: [".gemini", "GEMINI.md"],
|
|
408
|
+
alwaysOnFiles: ["GEMINI.md", ".gemini/GEMINI.md", ".gemini/STYLEGUIDE.md"],
|
|
409
|
+
mcpConfigPath: ".gemini/settings.json",
|
|
410
|
+
supportsMcp: true
|
|
411
|
+
},
|
|
412
|
+
factory: {
|
|
413
|
+
id: "factory",
|
|
414
|
+
displayName: "Factory AI Droid",
|
|
415
|
+
vendor: "Factory AI",
|
|
416
|
+
category: "cli-agent",
|
|
417
|
+
skillFormat: "progressive-skill-dir",
|
|
418
|
+
skillsDir: ".factory/skills",
|
|
419
|
+
subagentsDir: ".factory/droids",
|
|
420
|
+
detectionPaths: [".factory"],
|
|
421
|
+
alwaysOnFiles: ["AGENTS.md", ".factory/instructions.md"],
|
|
422
|
+
mcpConfigPath: ".factory/mcp.json",
|
|
423
|
+
supportsMcp: true
|
|
424
|
+
},
|
|
425
|
+
qwen: {
|
|
426
|
+
id: "qwen",
|
|
427
|
+
displayName: "Qwen Code CLI",
|
|
428
|
+
vendor: "Alibaba Cloud / Qwen",
|
|
429
|
+
category: "cli-agent",
|
|
430
|
+
skillFormat: "progressive-skill-dir",
|
|
431
|
+
skillsDir: ".qwen/skills",
|
|
432
|
+
subagentsDir: ".qwen/agents",
|
|
433
|
+
detectionPaths: [".qwen", "QWEN.md"],
|
|
434
|
+
alwaysOnFiles: ["QWEN.md", "AGENTS.md"],
|
|
435
|
+
mcpConfigPath: ".qwen/settings.json",
|
|
436
|
+
supportsMcp: true
|
|
437
|
+
},
|
|
438
|
+
augment: {
|
|
439
|
+
id: "augment",
|
|
440
|
+
displayName: "Augment Code",
|
|
441
|
+
vendor: "Augment",
|
|
442
|
+
category: "ide-extension",
|
|
443
|
+
skillFormat: "markdown-rule",
|
|
444
|
+
skillsDir: ".augment/rules",
|
|
445
|
+
subagentsDir: ".augment/agents",
|
|
446
|
+
detectionPaths: [".augment", ".augment-guidelines"],
|
|
447
|
+
alwaysOnFiles: [".augment-guidelines", "AGENTS.md"],
|
|
448
|
+
mcpConfigPath: ".augment/settings.json",
|
|
449
|
+
supportsMcp: true
|
|
450
|
+
},
|
|
451
|
+
vibe: {
|
|
452
|
+
id: "vibe",
|
|
453
|
+
displayName: "Mistral Vibe CLI",
|
|
454
|
+
vendor: "Mistral AI",
|
|
455
|
+
category: "cli-agent",
|
|
456
|
+
skillFormat: "progressive-skill-dir",
|
|
457
|
+
skillsDir: ".vibe/skills",
|
|
458
|
+
subagentsDir: ".vibe/agents",
|
|
459
|
+
detectionPaths: [".vibe"],
|
|
460
|
+
alwaysOnFiles: [".vibe/config.toml", "AGENTS.md"],
|
|
461
|
+
mcpConfigPath: ".vibe/config.toml",
|
|
462
|
+
supportsMcp: true
|
|
463
|
+
},
|
|
464
|
+
warp: {
|
|
465
|
+
id: "warp",
|
|
466
|
+
displayName: "Warp AI Terminal",
|
|
467
|
+
vendor: "Warp",
|
|
468
|
+
category: "cli-agent",
|
|
469
|
+
skillFormat: "progressive-skill-dir",
|
|
470
|
+
skillsDir: ".warp/skills",
|
|
471
|
+
subagentsDir: ".warp/agents",
|
|
472
|
+
detectionPaths: [".warp", "WARP.md"],
|
|
473
|
+
alwaysOnFiles: ["WARP.md", "AGENTS.md"],
|
|
474
|
+
mcpConfigPath: null,
|
|
475
|
+
supportsMcp: false
|
|
476
|
+
},
|
|
477
|
+
crush: {
|
|
478
|
+
id: "crush",
|
|
479
|
+
displayName: "Charmbracelet Crush",
|
|
480
|
+
vendor: "Charmbracelet",
|
|
481
|
+
category: "cli-agent",
|
|
482
|
+
skillFormat: "progressive-skill-dir",
|
|
483
|
+
skillsDir: ".crush/skills",
|
|
484
|
+
subagentsDir: ".crush/agents",
|
|
485
|
+
detectionPaths: [".crush", ".crush.json", "CRUSH.md"],
|
|
486
|
+
alwaysOnFiles: ["CRUSH.md", "AGENTS.md"],
|
|
487
|
+
mcpConfigPath: ".crush.json",
|
|
488
|
+
supportsMcp: true
|
|
489
|
+
},
|
|
490
|
+
idx: {
|
|
491
|
+
id: "idx",
|
|
492
|
+
displayName: "Firebase Studio (Project IDX)",
|
|
493
|
+
vendor: "Google",
|
|
494
|
+
category: "ai-ide",
|
|
495
|
+
skillFormat: "markdown-rule",
|
|
496
|
+
skillsDir: ".idx/rules",
|
|
497
|
+
subagentsDir: ".idx/agents",
|
|
498
|
+
detectionPaths: [".idx"],
|
|
499
|
+
alwaysOnFiles: [".idx/airules.md", "GEMINI.md"],
|
|
500
|
+
mcpConfigPath: ".idx/mcp.json",
|
|
501
|
+
supportsMcp: true
|
|
382
502
|
}
|
|
383
503
|
};
|
|
384
504
|
function detectInstalledHarnesses(repoPath) {
|
|
@@ -410,7 +530,7 @@ function resolveRuntimeTargets(rawSpec, repoPath, fallbackTargets = CORE_RUNTIME
|
|
|
410
530
|
}
|
|
411
531
|
};
|
|
412
532
|
for (const token of tokens) {
|
|
413
|
-
if (token === "all" || token === "*" || token === "top20") {
|
|
533
|
+
if (token === "all" || token === "*" || token === "top20" || token === "top28") {
|
|
414
534
|
for (const t of ALL_RUNTIME_TARGETS) {
|
|
415
535
|
pushUnique(t);
|
|
416
536
|
}
|
|
@@ -1631,6 +1751,10 @@ var ALWAYS_ON_INSTRUCTION_CANDIDATES = [
|
|
|
1631
1751
|
"AGENTS.md",
|
|
1632
1752
|
"GEMINI.md",
|
|
1633
1753
|
".gemini/GEMINI.md",
|
|
1754
|
+
".gemini/STYLEGUIDE.md",
|
|
1755
|
+
"QWEN.md",
|
|
1756
|
+
"WARP.md",
|
|
1757
|
+
"CRUSH.md",
|
|
1634
1758
|
"AGENT.md",
|
|
1635
1759
|
"CONVENTIONS.md",
|
|
1636
1760
|
".github/copilot-instructions.md",
|
|
@@ -1640,17 +1764,22 @@ var ALWAYS_ON_INSTRUCTION_CANDIDATES = [
|
|
|
1640
1764
|
".roorules",
|
|
1641
1765
|
".kilocoderules",
|
|
1642
1766
|
".continuerules",
|
|
1767
|
+
".augment-guidelines",
|
|
1643
1768
|
".rules",
|
|
1644
1769
|
".goosehints",
|
|
1645
1770
|
".junie/guidelines.md",
|
|
1646
1771
|
".openhands/microagents/repo.md",
|
|
1647
1772
|
".trae/rules/project_rules.md",
|
|
1773
|
+
".factory/instructions.md",
|
|
1774
|
+
".idx/airules.md",
|
|
1775
|
+
".vibe/config.toml",
|
|
1648
1776
|
".kiro/steering/product.md",
|
|
1649
1777
|
".kiro/steering/tech.md",
|
|
1650
1778
|
".kiro/steering/structure.md"
|
|
1651
1779
|
];
|
|
1652
1780
|
var MCP_CONFIG_CANDIDATES = [
|
|
1653
1781
|
".mcp.json",
|
|
1782
|
+
".agent/mcp_config.json",
|
|
1654
1783
|
".cursor/mcp.json",
|
|
1655
1784
|
".vscode/mcp.json",
|
|
1656
1785
|
".gemini/settings.json",
|
|
@@ -1662,7 +1791,13 @@ var MCP_CONFIG_CANDIDATES = [
|
|
|
1662
1791
|
".amp/settings.json",
|
|
1663
1792
|
"opencode.json",
|
|
1664
1793
|
".kiro/settings/mcp.json",
|
|
1665
|
-
".amazonq/mcp.json"
|
|
1794
|
+
".amazonq/mcp.json",
|
|
1795
|
+
".factory/mcp.json",
|
|
1796
|
+
".qwen/settings.json",
|
|
1797
|
+
".augment/settings.json",
|
|
1798
|
+
".vibe/config.toml",
|
|
1799
|
+
".crush.json",
|
|
1800
|
+
".idx/mcp.json"
|
|
1666
1801
|
];
|
|
1667
1802
|
function countMcpServersInConfig(rawText, relPath) {
|
|
1668
1803
|
if (relPath.endsWith(".toml")) {
|
|
@@ -2092,9 +2227,9 @@ function diagnoseRepository(repoPath, options = {}) {
|
|
|
2092
2227
|
const detectedHarnesses = detectInstalledHarnesses(resolvedRepo);
|
|
2093
2228
|
checks.push({
|
|
2094
2229
|
id: "detected_harnesses",
|
|
2095
|
-
title: "Detected AI Coding Harnesses (Top
|
|
2230
|
+
title: "Detected AI Coding Harnesses (Top 28)",
|
|
2096
2231
|
status: "pass",
|
|
2097
|
-
summary: detectedHarnesses.length > 0 ? `Detected ${detectedHarnesses.length} AI coding harness(es): ${detectedHarnesses.join(", ")}.` : "No repo-local AI harness folders detected yet (ready to sync all
|
|
2232
|
+
summary: detectedHarnesses.length > 0 ? `Detected ${detectedHarnesses.length} AI coding harness(es): ${detectedHarnesses.join(", ")}.` : "No repo-local AI harness folders detected yet (ready to sync all 28 agents)."
|
|
2098
2233
|
});
|
|
2099
2234
|
const loadedCfg = loadSkillOpsConfig(resolvedRepo);
|
|
2100
2235
|
const configPresent = loadedCfg.exists;
|
|
@@ -2277,7 +2412,7 @@ function formatHarnessInspectionReport(report, format = "table") {
|
|
|
2277
2412
|
}
|
|
2278
2413
|
if (format === "markdown") {
|
|
2279
2414
|
const lines2 = [
|
|
2280
|
-
`## SkillOps Universal Top-
|
|
2415
|
+
`## SkillOps Universal Top-28 AI Coding Agent Harnesses (\`${report.repo_path}\`)`,
|
|
2281
2416
|
"",
|
|
2282
2417
|
`- **Supported AI Coding Harnesses:** \`${report.total_supported}\``,
|
|
2283
2418
|
`- **Detected in Repository:** \`${report.detected_count}\` (${report.detected_harnesses.length > 0 ? report.detected_harnesses.join(", ") : "none"})`,
|
|
@@ -2292,7 +2427,7 @@ function formatHarnessInspectionReport(report, format = "table") {
|
|
|
2292
2427
|
return lines2.join("\n");
|
|
2293
2428
|
}
|
|
2294
2429
|
const lines = [
|
|
2295
|
-
`=== SkillOps Universal Top-
|
|
2430
|
+
`=== SkillOps Universal Top-28 AI Coding Harnesses (${report.repo_path}) ===`,
|
|
2296
2431
|
`Supported Harnesses : ${report.total_supported}`,
|
|
2297
2432
|
`Detected in Repo : ${report.detected_count} (${report.detected_harnesses.length > 0 ? report.detected_harnesses.join(", ") : "none"})`,
|
|
2298
2433
|
"-".repeat(92),
|
|
@@ -3363,7 +3498,7 @@ var MCP_TOOLS = [
|
|
|
3363
3498
|
},
|
|
3364
3499
|
{
|
|
3365
3500
|
name: "list_supported_harnesses",
|
|
3366
|
-
description: "Inspect all
|
|
3501
|
+
description: "Inspect all 28 supported AI coding agents, IDEs, and CLI harnesses (target paths, MCP support, and repository auto-detection).",
|
|
3367
3502
|
inputSchema: {
|
|
3368
3503
|
type: "object",
|
|
3369
3504
|
properties: {
|
|
@@ -3535,7 +3670,7 @@ function startMcpStdioServer(context) {
|
|
|
3535
3670
|
}
|
|
3536
3671
|
function buildUpdatedMcpConfigContent(target, existingRaw, serverName) {
|
|
3537
3672
|
const mcpArgs = ["-y", "skillops-cli@latest", "mcp"];
|
|
3538
|
-
if (target === "codex") {
|
|
3673
|
+
if (target === "codex" || target === "vibe") {
|
|
3539
3674
|
const tomlBlock = [
|
|
3540
3675
|
`[mcp_servers.${serverName}]`,
|
|
3541
3676
|
'command = "npx"',
|
|
@@ -3628,6 +3763,20 @@ ${tomlBlock}
|
|
|
3628
3763
|
};
|
|
3629
3764
|
parsedObj.mcp = mcpMap;
|
|
3630
3765
|
return `${JSON.stringify(parsedObj, null, 2)}
|
|
3766
|
+
`;
|
|
3767
|
+
}
|
|
3768
|
+
if (target === "crush") {
|
|
3769
|
+
if (!("$schema" in parsedObj)) {
|
|
3770
|
+
parsedObj.$schema = "https://charm.land/crush.json";
|
|
3771
|
+
}
|
|
3772
|
+
const mcpMap = parsedObj.mcp && typeof parsedObj.mcp === "object" && !Array.isArray(parsedObj.mcp) ? { ...parsedObj.mcp } : {};
|
|
3773
|
+
mcpMap[serverName] = {
|
|
3774
|
+
type: "stdio",
|
|
3775
|
+
command: "npx",
|
|
3776
|
+
args: mcpArgs
|
|
3777
|
+
};
|
|
3778
|
+
parsedObj.mcp = mcpMap;
|
|
3779
|
+
return `${JSON.stringify(parsedObj, null, 2)}
|
|
3631
3780
|
`;
|
|
3632
3781
|
}
|
|
3633
3782
|
const mcpServers = parsedObj.mcpServers && typeof parsedObj.mcpServers === "object" && !Array.isArray(parsedObj.mcpServers) ? { ...parsedObj.mcpServers } : {};
|
|
@@ -3878,6 +4027,24 @@ ${body}
|
|
|
3878
4027
|
${kiroFrontmatter}
|
|
3879
4028
|
---
|
|
3880
4029
|
|
|
4030
|
+
${body}
|
|
4031
|
+
`
|
|
4032
|
+
});
|
|
4033
|
+
return files;
|
|
4034
|
+
}
|
|
4035
|
+
if (target === "augment") {
|
|
4036
|
+
const augFrontmatter = YAML4.stringify({
|
|
4037
|
+
type: "agent_requested",
|
|
4038
|
+
description: parsed.manifest.description
|
|
4039
|
+
}).trim();
|
|
4040
|
+
files.push({
|
|
4041
|
+
target,
|
|
4042
|
+
itemName: name,
|
|
4043
|
+
relativePath: `.augment/rules/skillops-${name}.md`,
|
|
4044
|
+
content: `---
|
|
4045
|
+
${augFrontmatter}
|
|
4046
|
+
---
|
|
4047
|
+
|
|
3881
4048
|
${body}
|
|
3882
4049
|
`
|
|
3883
4050
|
});
|
|
@@ -3911,6 +4078,7 @@ function renderSubagentFilesForRuntime(subagent, target) {
|
|
|
3911
4078
|
const fm = YAML4.stringify({
|
|
3912
4079
|
name: subagent.manifest.name,
|
|
3913
4080
|
description: subagent.manifest.description,
|
|
4081
|
+
model: "inherit",
|
|
3914
4082
|
model_tier: subagent.manifest.model_tier,
|
|
3915
4083
|
tools: subagent.manifest.tools,
|
|
3916
4084
|
max_output_tokens: subagent.manifest.max_output_tokens
|
|
@@ -3921,7 +4089,7 @@ ${fm}
|
|
|
3921
4089
|
|
|
3922
4090
|
${promptBody}
|
|
3923
4091
|
`;
|
|
3924
|
-
if (target === "claude" || target === "antigravity" || target === "codex" || target === "amp" || target === "goose" || target === "opencode") {
|
|
4092
|
+
if (target === "claude" || target === "antigravity" || target === "gemini" || target === "codex" || target === "amp" || target === "goose" || target === "opencode" || target === "qwen" || target === "warp" || target === "crush") {
|
|
3925
4093
|
return [
|
|
3926
4094
|
{
|
|
3927
4095
|
target,
|
|
@@ -3931,6 +4099,44 @@ ${promptBody}
|
|
|
3931
4099
|
}
|
|
3932
4100
|
];
|
|
3933
4101
|
}
|
|
4102
|
+
if (target === "factory") {
|
|
4103
|
+
const droidFm = YAML4.stringify({
|
|
4104
|
+
name,
|
|
4105
|
+
description: subagent.manifest.description,
|
|
4106
|
+
model: "inherit"
|
|
4107
|
+
}).trim();
|
|
4108
|
+
return [
|
|
4109
|
+
{
|
|
4110
|
+
target,
|
|
4111
|
+
itemName: name,
|
|
4112
|
+
relativePath: `.factory/droids/skillops-agent-${name}.md`,
|
|
4113
|
+
content: `---
|
|
4114
|
+
${droidFm}
|
|
4115
|
+
---
|
|
4116
|
+
|
|
4117
|
+
${promptBody}
|
|
4118
|
+
`
|
|
4119
|
+
}
|
|
4120
|
+
];
|
|
4121
|
+
}
|
|
4122
|
+
if (target === "vibe") {
|
|
4123
|
+
const escapedDesc = JSON.stringify(subagent.manifest.description);
|
|
4124
|
+
const escapedPrompt = JSON.stringify(promptBody);
|
|
4125
|
+
const tomlDoc = [
|
|
4126
|
+
`name = "${name}"`,
|
|
4127
|
+
`description = ${escapedDesc}`,
|
|
4128
|
+
`system_prompt = ${escapedPrompt}`,
|
|
4129
|
+
""
|
|
4130
|
+
].join("\n");
|
|
4131
|
+
return [
|
|
4132
|
+
{
|
|
4133
|
+
target,
|
|
4134
|
+
itemName: name,
|
|
4135
|
+
relativePath: `.vibe/agents/skillops-agent-${name}.toml`,
|
|
4136
|
+
content: tomlDoc
|
|
4137
|
+
}
|
|
4138
|
+
];
|
|
4139
|
+
}
|
|
3934
4140
|
if (target === "copilot") {
|
|
3935
4141
|
return [
|
|
3936
4142
|
{
|
|
@@ -4737,8 +4943,8 @@ var COMMAND_HELP_SPECS = [
|
|
|
4737
4943
|
name: "remove",
|
|
4738
4944
|
aliases: ["uninstall", "rm"],
|
|
4739
4945
|
pillar: "library",
|
|
4740
|
-
summary: "Remove
|
|
4741
|
-
usage: "npx skillops-cli remove
|
|
4946
|
+
summary: "Remove imported Skills/Subagents from harnesses",
|
|
4947
|
+
usage: "npx skillops-cli remove [name...] [options]",
|
|
4742
4948
|
options: [
|
|
4743
4949
|
{
|
|
4744
4950
|
flags: "-p, --project <dir>",
|
|
@@ -4748,12 +4954,20 @@ var COMMAND_HELP_SPECS = [
|
|
|
4748
4954
|
flags: "-t, --harness <list>",
|
|
4749
4955
|
description: "Restrict removal to specific harnesses"
|
|
4750
4956
|
},
|
|
4957
|
+
{
|
|
4958
|
+
flags: "--all",
|
|
4959
|
+
description: "Remove all imported Skills & Agents from project"
|
|
4960
|
+
},
|
|
4751
4961
|
{
|
|
4752
4962
|
flags: "--force",
|
|
4753
4963
|
description: "Remove even if SHA-256 drift is detected"
|
|
4754
4964
|
}
|
|
4755
4965
|
],
|
|
4756
4966
|
examples: [
|
|
4967
|
+
{
|
|
4968
|
+
command: "npx skillops-cli remove",
|
|
4969
|
+
description: "Interactive selector of installed Skills & Agents"
|
|
4970
|
+
},
|
|
4757
4971
|
{
|
|
4758
4972
|
command: "npx skillops-cli uninstall mcp-architect",
|
|
4759
4973
|
description: "Remove runtime files & update lockfile"
|
|
@@ -4931,7 +5145,7 @@ var COMMAND_HELP_SPECS = [
|
|
|
4931
5145
|
name: "sync",
|
|
4932
5146
|
aliases: [],
|
|
4933
5147
|
pillar: "runtime",
|
|
4934
|
-
summary: "Transpile bundle across
|
|
5148
|
+
summary: "Transpile bundle across 28 AI agents",
|
|
4935
5149
|
usage: "npx skillops-cli sync [options]",
|
|
4936
5150
|
options: [
|
|
4937
5151
|
{
|
|
@@ -4962,7 +5176,7 @@ var COMMAND_HELP_SPECS = [
|
|
|
4962
5176
|
},
|
|
4963
5177
|
{
|
|
4964
5178
|
command: "npx skillops-cli sync --harness all",
|
|
4965
|
-
description: "Transpile across all
|
|
5179
|
+
description: "Transpile across all 28 supported AI agents"
|
|
4966
5180
|
}
|
|
4967
5181
|
]
|
|
4968
5182
|
},
|
|
@@ -5055,7 +5269,7 @@ var COMMAND_HELP_SPECS = [
|
|
|
5055
5269
|
name: "harnesses",
|
|
5056
5270
|
aliases: [],
|
|
5057
5271
|
pillar: "runtime",
|
|
5058
|
-
summary: "List
|
|
5272
|
+
summary: "List 28 supported AI agents & repo status",
|
|
5059
5273
|
usage: "npx skillops-cli harnesses [options]",
|
|
5060
5274
|
options: [
|
|
5061
5275
|
{
|
|
@@ -5070,7 +5284,7 @@ var COMMAND_HELP_SPECS = [
|
|
|
5070
5284
|
examples: [
|
|
5071
5285
|
{
|
|
5072
5286
|
command: "npx skillops-cli harnesses",
|
|
5073
|
-
description: "View all
|
|
5287
|
+
description: "View all 28 supported AI IDEs/CLI agents"
|
|
5074
5288
|
}
|
|
5075
5289
|
]
|
|
5076
5290
|
},
|
|
@@ -5078,7 +5292,7 @@ var COMMAND_HELP_SPECS = [
|
|
|
5078
5292
|
name: "mcp-setup",
|
|
5079
5293
|
aliases: [],
|
|
5080
5294
|
pillar: "runtime",
|
|
5081
|
-
summary: "Wire MCP server across
|
|
5295
|
+
summary: "Wire MCP server across 20 AI IDEs & agents",
|
|
5082
5296
|
usage: "npx skillops-cli mcp-setup [options]",
|
|
5083
5297
|
options: [
|
|
5084
5298
|
{
|
|
@@ -5143,24 +5357,20 @@ function renderGlobalHelp(version, colorEnabled) {
|
|
|
5143
5357
|
desc: "Import Skills or Agents (interactive if no name given)"
|
|
5144
5358
|
},
|
|
5145
5359
|
{
|
|
5146
|
-
cmd: "
|
|
5147
|
-
desc: "
|
|
5360
|
+
cmd: "remove [name...]",
|
|
5361
|
+
desc: "Remove Skills or Agents (interactive if no name given)"
|
|
5148
5362
|
},
|
|
5149
5363
|
{
|
|
5150
5364
|
cmd: "list [query]",
|
|
5151
5365
|
desc: "List or filter available Skills & Agents in catalog"
|
|
5152
5366
|
},
|
|
5153
5367
|
{
|
|
5154
|
-
cmd: "
|
|
5155
|
-
desc: "
|
|
5156
|
-
},
|
|
5157
|
-
{
|
|
5158
|
-
cmd: "remove <name>",
|
|
5159
|
-
desc: "Remove an imported Skill or Agent from your project"
|
|
5368
|
+
cmd: "search <query>",
|
|
5369
|
+
desc: "Search Skills & Agents by keyword, stack, or domain"
|
|
5160
5370
|
},
|
|
5161
5371
|
{
|
|
5162
|
-
cmd: "
|
|
5163
|
-
desc: "
|
|
5372
|
+
cmd: "info <name>",
|
|
5373
|
+
desc: "View details and how to use a Skill or Agent"
|
|
5164
5374
|
}
|
|
5165
5375
|
];
|
|
5166
5376
|
const cmdRows = coreCmds.map(
|
|
@@ -5172,12 +5382,12 @@ function renderGlobalHelp(version, colorEnabled) {
|
|
|
5172
5382
|
renderSectionHeader("Commands", c),
|
|
5173
5383
|
cmdRows,
|
|
5174
5384
|
renderSectionHeader("Options", c),
|
|
5175
|
-
`${bar} ${padVisible(style.cyan("-t, --target <ide>", c), 22, "left")}AI IDE (cursor, claude, copilot,
|
|
5385
|
+
`${bar} ${padVisible(style.cyan("-t, --target <ide>", c), 22, "left")}AI IDE (cursor, claude, copilot, antigravity...)`,
|
|
5176
5386
|
`${bar} ${padVisible(style.cyan("-p, --project <dir>", c), 22, "left")}Project folder (default: current directory)`,
|
|
5177
|
-
`${bar} ${padVisible(style.cyan("--all", c), 22, "left")}Import all
|
|
5387
|
+
`${bar} ${padVisible(style.cyan("--all", c), 22, "left")}Import or remove all Skills & Agents`,
|
|
5178
5388
|
renderSectionHeader("Examples", c),
|
|
5179
|
-
`${bar} ${style.dim("$", c)} ${style.green("skillops add", c)} ${style.dim("\u2014 Interactive
|
|
5180
|
-
`${bar} ${style.dim("$", c)} ${style.green("skillops
|
|
5389
|
+
`${bar} ${style.dim("$", c)} ${style.green("skillops add", c)} ${style.dim("\u2014 Interactive import", c)}`,
|
|
5390
|
+
`${bar} ${style.dim("$", c)} ${style.green("skillops remove", c)} ${style.dim("\u2014 Interactive removal", c)}`,
|
|
5181
5391
|
`${bar} ${style.dim("$", c)} ${style.green("skillops list", c)} ${style.dim("\u2014 Browse catalog", c)}`,
|
|
5182
5392
|
bar,
|
|
5183
5393
|
`${style.dim("\u2570\u2500", c)} ${style.dim("Run", c)} ${style.cyan("skillops <cmd> -h", c)} ${style.dim("for command options.", c)}`
|
|
@@ -5287,6 +5497,12 @@ function applyMultiSelectKey(state, key, options = {}) {
|
|
|
5287
5497
|
}
|
|
5288
5498
|
if (key === "\x1B[D" || key === "\x1BOD" || key === "\x1B[C" || key === "\x1BOC" || key === " " || !state.searchMode && (key === "h" || key === "H" || key === "l" || key === "L")) {
|
|
5289
5499
|
const nextTab = state.activeTab === "skill" ? "agent" : "skill";
|
|
5500
|
+
const hasNextTabOptions = state.options.some(
|
|
5501
|
+
(opt) => optionMatchesTab(opt, nextTab)
|
|
5502
|
+
);
|
|
5503
|
+
if (!hasNextTabOptions) {
|
|
5504
|
+
return state;
|
|
5505
|
+
}
|
|
5290
5506
|
return {
|
|
5291
5507
|
...state,
|
|
5292
5508
|
activeTab: nextTab,
|
|
@@ -5423,8 +5639,10 @@ function renderMultiSelectFrame(title, state, options = {}) {
|
|
|
5423
5639
|
const skillTabTitle = options.tabLabels?.skill ?? "Skills";
|
|
5424
5640
|
const agentTabTitle = options.tabLabels?.agent ?? "Agents";
|
|
5425
5641
|
const submitVerb = options.submitActionLabel ?? "import";
|
|
5642
|
+
const isSinglePage = totalAgents === 0 || totalSkills === 0;
|
|
5426
5643
|
const header = `${style.bold(style.cyan(`\u25C6 ${title}`, c), c)}`;
|
|
5427
|
-
const
|
|
5644
|
+
const tabHint = isSinglePage ? "" : " \xB7 \u2190/\u2192 tab";
|
|
5645
|
+
const instructions = state.searchMode ? `${bar} ${style.dim(`\u2191/\u2193 move${tabHint} \xB7 Space select \xB7 Esc clear \xB7 Enter ${submitVerb}`, c)}` : `${bar} ${style.dim(`\u2191/\u2193 move${tabHint} \xB7 Space select \xB7 / search \xB7 a all \xB7 Enter ${submitVerb}`, c)}`;
|
|
5428
5646
|
const lines = [header];
|
|
5429
5647
|
if (options.subtitle) {
|
|
5430
5648
|
lines.push(`${bar} ${options.subtitle}`);
|
|
@@ -5433,12 +5651,19 @@ function renderMultiSelectFrame(title, state, options = {}) {
|
|
|
5433
5651
|
const hasQuery = state.searchQuery.length > 0;
|
|
5434
5652
|
const skillCountStr = hasQuery ? `${filteredSkills.length}/${totalSkills}` : `${totalSkills}`;
|
|
5435
5653
|
const agentCountStr = hasQuery ? `${filteredAgents.length}/${totalAgents}` : `${totalAgents}`;
|
|
5436
|
-
const skillTabLabel = state.activeTab === "skill" ? style.bold(
|
|
5437
|
-
|
|
5654
|
+
const skillTabLabel = state.activeTab === "skill" ? style.bold(
|
|
5655
|
+
style.cyan(`[ \u25C6 ${skillTabTitle} (${skillCountStr}) ]`, c),
|
|
5656
|
+
c
|
|
5657
|
+
) : style.dim(`\u25CB ${skillTabTitle} (${skillCountStr})`, c);
|
|
5658
|
+
const agentTabLabel = state.activeTab === "agent" ? style.bold(
|
|
5659
|
+
style.magenta(`[ \u25C6 ${agentTabTitle} (${agentCountStr}) ]`, c),
|
|
5660
|
+
c
|
|
5661
|
+
) : style.dim(`\u25CB ${agentTabTitle} (${agentCountStr})`, c);
|
|
5438
5662
|
const rawQuerySlice = state.searchQuery.length > 14 ? `\u2026${state.searchQuery.slice(-13)}` : state.searchQuery;
|
|
5439
5663
|
const searchSuffix = state.searchMode || hasQuery ? ` ${style.yellow(`/ Filter: ${rawQuerySlice}${state.searchMode ? "\u2588" : ""}`, c)}` : ` ${style.dim("(/ search)", c)}`;
|
|
5664
|
+
const singleTabLabel = totalSkills > 0 ? skillTabLabel : agentTabLabel;
|
|
5440
5665
|
lines.push(
|
|
5441
|
-
`${style.dim("\u251C\u2500", c)} ${skillTabLabel} ${agentTabLabel}${searchSuffix}`,
|
|
5666
|
+
isSinglePage ? `${style.dim("\u251C\u2500", c)} ${singleTabLabel}${searchSuffix}` : `${style.dim("\u251C\u2500", c)} ${skillTabLabel} ${agentTabLabel}${searchSuffix}`,
|
|
5442
5667
|
bar
|
|
5443
5668
|
);
|
|
5444
5669
|
if (total === 0) {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "skillops-cli",
|
|
3
|
-
"version": "1.3.
|
|
4
|
-
"description": "SkillOps — The Zero-API Framework & Benchmark-Verified Library for High-End AI Coding Skills & Context-Isolated Subagents with Universal Top-
|
|
3
|
+
"version": "1.3.6",
|
|
4
|
+
"description": "SkillOps — The Zero-API Framework & Benchmark-Verified Library for High-End AI Coding Skills & Context-Isolated Subagents with Universal Top-28 AI Agent Transpilation & Token Economy Auditing.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"author": "OdevMatheus <matheusvita007@gmail.com>",
|
|
@@ -80,6 +80,14 @@
|
|
|
80
80
|
"trae",
|
|
81
81
|
"amazon-q",
|
|
82
82
|
"junie",
|
|
83
|
+
"gemini-cli",
|
|
84
|
+
"factory-ai",
|
|
85
|
+
"qwen-code",
|
|
86
|
+
"augment-code",
|
|
87
|
+
"mistral-vibe",
|
|
88
|
+
"warp",
|
|
89
|
+
"charm-crush",
|
|
90
|
+
"firebase-studio",
|
|
83
91
|
"mcp",
|
|
84
92
|
"context-engineering"
|
|
85
93
|
]
|