@skillctl/cli 0.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/LICENSE +21 -0
- package/README.md +5 -0
- package/bin/skillctl.js +10 -0
- package/dist/commands/add.d.ts +4 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.js +23 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/audit.d.ts +3 -0
- package/dist/commands/audit.d.ts.map +1 -0
- package/dist/commands/audit.js +30 -0
- package/dist/commands/audit.js.map +1 -0
- package/dist/commands/doctor.d.ts +3 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +76 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/import-cmd.d.ts +3 -0
- package/dist/commands/import-cmd.d.ts.map +1 -0
- package/dist/commands/import-cmd.js +74 -0
- package/dist/commands/import-cmd.js.map +1 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +18 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/install.d.ts +4 -0
- package/dist/commands/install.d.ts.map +1 -0
- package/dist/commands/install.js +58 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/list.d.ts +3 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +27 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/plugin.d.ts +3 -0
- package/dist/commands/plugin.d.ts.map +1 -0
- package/dist/commands/plugin.js +74 -0
- package/dist/commands/plugin.js.map +1 -0
- package/dist/commands/remove.d.ts +3 -0
- package/dist/commands/remove.d.ts.map +1 -0
- package/dist/commands/remove.js +53 -0
- package/dist/commands/remove.js.map +1 -0
- package/dist/commands/sync.d.ts +3 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +31 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/update.d.ts +4 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +49 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +53 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/errors.d.ts +2 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +6 -0
- package/dist/lib/errors.js.map +1 -0
- package/package.json +59 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 skillctl contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
package/bin/skillctl.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGrD,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,eAAe,GAAG,IAAI,CAkBzE"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { RegistryManager } from '@skillctl/registry';
|
|
2
|
+
import { handleCommandError } from '../lib/errors.js';
|
|
3
|
+
export function registerAdd(program, mgr) {
|
|
4
|
+
program
|
|
5
|
+
.command('add <spec>')
|
|
6
|
+
.description('Add a skill from github, npm, local, skills.sh (registry + cache)')
|
|
7
|
+
.option('--no-manifest', 'do not update agent-skills.json')
|
|
8
|
+
.action(async (spec, options) => {
|
|
9
|
+
try {
|
|
10
|
+
const registry = mgr || new RegistryManager();
|
|
11
|
+
console.log(`Resolving ${spec} via registry...`);
|
|
12
|
+
const entry = await registry.add(spec, { updateManifest: options.manifest !== false });
|
|
13
|
+
console.log(`Added ${entry.name}`);
|
|
14
|
+
console.log(` resolved: ${entry.resolved}`);
|
|
15
|
+
console.log(` integrity: ${entry.integrity}`);
|
|
16
|
+
console.log(` canonical: ${entry.canonicalPath}`);
|
|
17
|
+
}
|
|
18
|
+
catch (err) {
|
|
19
|
+
handleCommandError(err, 'add');
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=add.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtD,MAAM,UAAU,WAAW,CAAC,OAAgB,EAAE,GAAqB;IACjE,OAAO;SACJ,OAAO,CAAC,YAAY,CAAC;SACrB,WAAW,CAAC,mEAAmE,CAAC;SAChF,MAAM,CAAC,eAAe,EAAE,iCAAiC,CAAC;SAC1D,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;QAC9B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,GAAG,IAAI,IAAI,eAAe,EAAE,CAAC;YAC9C,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,kBAAkB,CAAC,CAAC;YACjD,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,cAAc,EAAE,OAAO,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC,CAAC;YACvF,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;YAC/C,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,kBAAkB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACjC,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2BpD"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { runAudit, auditExitCode } from '@skillctl/security';
|
|
2
|
+
import { handleCommandError } from '../lib/errors.js';
|
|
3
|
+
export function registerAudit(program) {
|
|
4
|
+
program
|
|
5
|
+
.command('audit')
|
|
6
|
+
.description('Run security scanner on installed skills')
|
|
7
|
+
.option('--json', 'machine-readable output')
|
|
8
|
+
.option('--strict', 'treat warnings as errors (exit 2)')
|
|
9
|
+
.action(async (options) => {
|
|
10
|
+
try {
|
|
11
|
+
const report = await runAudit(process.cwd());
|
|
12
|
+
if (options.json) {
|
|
13
|
+
console.log(JSON.stringify(report, null, 2));
|
|
14
|
+
process.exitCode = auditExitCode(report, options.strict);
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
console.log(`skillctl audit — scanned ${report.scanned} skill(s), status: ${report.status}`);
|
|
18
|
+
for (const f of report.findings) {
|
|
19
|
+
console.log(` [${f.severity}] ${f.skill} (${f.rule}): ${f.message}`);
|
|
20
|
+
}
|
|
21
|
+
if (report.findings.length === 0)
|
|
22
|
+
console.log(' No issues found.');
|
|
23
|
+
process.exitCode = auditExitCode(report, options.strict);
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
handleCommandError(err, 'audit');
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=audit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtD,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,0CAA0C,CAAC;SACvD,MAAM,CAAC,QAAQ,EAAE,yBAAyB,CAAC;SAC3C,MAAM,CAAC,UAAU,EAAE,mCAAmC,CAAC;SACvD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YAE7C,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC7C,OAAO,CAAC,QAAQ,GAAG,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;gBACzD,OAAO;YACT,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,4BAA4B,MAAM,CAAC,OAAO,sBAAsB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YAC7F,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAChC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACxE,CAAC;YACD,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;YAEpE,OAAO,CAAC,QAAQ,GAAG,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAC3D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,kBAAkB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACnC,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOzC,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuErD"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { loadConfig, getRegisteredAdapters, lockToSkillTargets } from '@skillctl/core';
|
|
2
|
+
import { loadManifest } from '@skillctl/manifest';
|
|
3
|
+
import { loadLockfile } from '@skillctl/lockfile';
|
|
4
|
+
import { scanCoexistence, getEnabledAdapters, syncSkillsToAgents } from '@skillctl/adapters';
|
|
5
|
+
import { runAudit, auditExitCode } from '@skillctl/security';
|
|
6
|
+
export function registerDoctor(program) {
|
|
7
|
+
program
|
|
8
|
+
.command('doctor')
|
|
9
|
+
.description('Diagnose environment, links, config, coexistence')
|
|
10
|
+
.option('--json', 'output JSON')
|
|
11
|
+
.option('--fix', 're-sync agent links from lock')
|
|
12
|
+
.action(async (options) => {
|
|
13
|
+
const cwd = process.cwd();
|
|
14
|
+
const [config, manifest, lock, coexist, enabledAdapters, audit] = await Promise.all([
|
|
15
|
+
loadConfig(),
|
|
16
|
+
loadManifest(cwd),
|
|
17
|
+
loadLockfile(cwd),
|
|
18
|
+
scanCoexistence(cwd),
|
|
19
|
+
getEnabledAdapters(),
|
|
20
|
+
runAudit(cwd),
|
|
21
|
+
]);
|
|
22
|
+
const issues = [];
|
|
23
|
+
const info = [];
|
|
24
|
+
if (!manifest)
|
|
25
|
+
issues.push('No agent-skills.json in project');
|
|
26
|
+
if (!lock)
|
|
27
|
+
info.push('No agent-skills.lock yet (run install after adding skills)');
|
|
28
|
+
if (coexist.detected)
|
|
29
|
+
info.push('Coexistence markers detected');
|
|
30
|
+
for (const f of audit.findings.filter((x) => x.severity === 'error')) {
|
|
31
|
+
issues.push(`[audit] ${f.skill}: ${f.message}`);
|
|
32
|
+
}
|
|
33
|
+
if (options.fix && lock) {
|
|
34
|
+
const res = await syncSkillsToAgents(lockToSkillTargets(lock));
|
|
35
|
+
info.push(`--fix: re-synced ${res.synced} targets`);
|
|
36
|
+
}
|
|
37
|
+
const report = {
|
|
38
|
+
status: issues.length ? 'issues' : audit.status === 'warnings' ? 'warnings' : 'ok',
|
|
39
|
+
config: { store: config.store, defaultMode: config.defaultMode },
|
|
40
|
+
manifestPresent: !!manifest,
|
|
41
|
+
lockPresent: !!lock,
|
|
42
|
+
issues,
|
|
43
|
+
info,
|
|
44
|
+
adapters: {
|
|
45
|
+
registered: getRegisteredAdapters().map((a) => a.id),
|
|
46
|
+
enabled: enabledAdapters.map((a) => a.id),
|
|
47
|
+
},
|
|
48
|
+
coexistence: coexist,
|
|
49
|
+
auditSummary: { scanned: audit.scanned, findings: audit.findings.length },
|
|
50
|
+
};
|
|
51
|
+
if (options.json) {
|
|
52
|
+
console.log(JSON.stringify(report, null, 2));
|
|
53
|
+
process.exitCode = issues.length ? 2 : auditExitCode(audit);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
console.log('skillctl doctor');
|
|
57
|
+
console.log('Config store:', report.config.store);
|
|
58
|
+
console.log('Manifest:', report.manifestPresent ? 'present' : 'missing');
|
|
59
|
+
console.log('Lockfile:', report.lockPresent ? 'present' : 'missing');
|
|
60
|
+
console.log('Adapters enabled:', report.adapters.enabled.join(', ') || '(none)');
|
|
61
|
+
if (coexist.detected) {
|
|
62
|
+
console.log('Coexistence:', coexist.details.join('; '));
|
|
63
|
+
if (coexist.recommendations.length)
|
|
64
|
+
console.log('Recommendations:', coexist.recommendations.join('; '));
|
|
65
|
+
}
|
|
66
|
+
if (audit.findings.length) {
|
|
67
|
+
console.log(`Audit: ${audit.findings.length} finding(s) across ${audit.scanned} skill(s)`);
|
|
68
|
+
}
|
|
69
|
+
if (issues.length)
|
|
70
|
+
console.log('Issues:', issues.join('; '));
|
|
71
|
+
if (info.length)
|
|
72
|
+
console.log('Info:', info.join('; '));
|
|
73
|
+
process.exitCode = issues.length ? 2 : auditExitCode(audit);
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-cmd.d.ts","sourceRoot":"","sources":["../../src/commands/import-cmd.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyErD"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { executeImport } from '@skillctl/import';
|
|
2
|
+
import { handleCommandError } from '../lib/errors.js';
|
|
3
|
+
export function registerImport(program) {
|
|
4
|
+
const importCmd = program
|
|
5
|
+
.command('import')
|
|
6
|
+
.description('Import skills from npx skills or Python skillctl');
|
|
7
|
+
importCmd
|
|
8
|
+
.command('from-npx')
|
|
9
|
+
.description('Migrate from npx skills (skills-lock.json / .agents/skills)')
|
|
10
|
+
.option('--dry-run', 'show migration plan only')
|
|
11
|
+
.option('--yes', 'skip confirmation prompts')
|
|
12
|
+
.option('--adopt', 'sync to agent targets after import')
|
|
13
|
+
.option('--write-manifest', 'update agent-skills.json with imported specs')
|
|
14
|
+
.action(async (options) => {
|
|
15
|
+
try {
|
|
16
|
+
const result = await executeImport({
|
|
17
|
+
source: 'npx',
|
|
18
|
+
dryRun: options.dryRun,
|
|
19
|
+
yes: options.yes,
|
|
20
|
+
adopt: options.adopt,
|
|
21
|
+
writeManifest: options.writeManifest,
|
|
22
|
+
});
|
|
23
|
+
if (options.dryRun) {
|
|
24
|
+
console.log('Migration plan:');
|
|
25
|
+
for (const item of result.plan) {
|
|
26
|
+
console.log(` ${item.name}: ${item.action}${item.specifier ? ` (${item.specifier})` : ''}${item.note ? ` — ${item.note}` : ''}`);
|
|
27
|
+
}
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
console.log(`Imported: ${result.imported.join(', ') || '(none)'}`);
|
|
31
|
+
if (result.skipped.length)
|
|
32
|
+
console.log(`Skipped: ${result.skipped.join(', ')}`);
|
|
33
|
+
if (result.errors.length) {
|
|
34
|
+
console.error('Errors:', result.errors.join('; '));
|
|
35
|
+
process.exitCode = 1;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
catch (err) {
|
|
39
|
+
handleCommandError(err, 'import');
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
importCmd
|
|
43
|
+
.command('from-skillctl')
|
|
44
|
+
.description('Migrate from Python skillctl (~/.skillctl/repos)')
|
|
45
|
+
.option('--dry-run', 'show migration plan only')
|
|
46
|
+
.option('--adopt', 'sync to agent targets after import')
|
|
47
|
+
.option('--write-manifest', 'update agent-skills.json')
|
|
48
|
+
.action(async (options) => {
|
|
49
|
+
try {
|
|
50
|
+
const result = await executeImport({
|
|
51
|
+
source: 'python-skillctl',
|
|
52
|
+
dryRun: options.dryRun,
|
|
53
|
+
adopt: options.adopt,
|
|
54
|
+
writeManifest: options.writeManifest,
|
|
55
|
+
});
|
|
56
|
+
if (options.dryRun) {
|
|
57
|
+
console.log('Migration plan:');
|
|
58
|
+
for (const item of result.plan) {
|
|
59
|
+
console.log(` ${item.name}: ${item.action}${item.localPath ? ` (${item.localPath})` : ''}`);
|
|
60
|
+
}
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
console.log(`Imported: ${result.imported.join(', ') || '(none)'}`);
|
|
64
|
+
if (result.errors.length) {
|
|
65
|
+
console.error('Errors:', result.errors.join('; '));
|
|
66
|
+
process.exitCode = 1;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
handleCommandError(err, 'import');
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=import-cmd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-cmd.js","sourceRoot":"","sources":["../../src/commands/import-cmd.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAenD"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { loadManifest, createDefaultManifest, saveManifest } from '@skillctl/manifest';
|
|
2
|
+
export function registerInit(program) {
|
|
3
|
+
program
|
|
4
|
+
.command('init')
|
|
5
|
+
.description('Initialize agent-skills.json in current project')
|
|
6
|
+
.action(async () => {
|
|
7
|
+
const existing = await loadManifest();
|
|
8
|
+
if (existing) {
|
|
9
|
+
console.log('agent-skills.json already exists');
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
const sample = createDefaultManifest('demo-project');
|
|
13
|
+
await saveManifest(sample);
|
|
14
|
+
console.log('Created agent-skills.json');
|
|
15
|
+
console.log('Run `skillctl add <spec>` to populate, then `install` or `sync`.');
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvF,MAAM,UAAU,YAAY,CAAC,OAAgB;IAC3C,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,iDAAiD,CAAC;SAC9D,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,QAAQ,GAAG,MAAM,YAAY,EAAE,CAAC;QACtC,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;YAChD,OAAO;QACT,CAAC;QACD,MAAM,MAAM,GAAG,qBAAqB,CAAC,cAAc,CAAC,CAAC;QACrD,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,kEAAkE,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAIrD,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,eAAe,GAAG,IAAI,CAqD7E"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { loadManifest } from '@skillctl/manifest';
|
|
2
|
+
import { loadLockfile, createEmptyLockfile } from '@skillctl/lockfile';
|
|
3
|
+
import { needsInstall, verifyLockIntegrity, lockToSkillTargets } from '@skillctl/core';
|
|
4
|
+
import { RegistryManager } from '@skillctl/registry';
|
|
5
|
+
import { syncSkillsToAgents } from '@skillctl/adapters';
|
|
6
|
+
import { handleCommandError } from '../lib/errors.js';
|
|
7
|
+
export function registerInstall(program, mgr) {
|
|
8
|
+
program
|
|
9
|
+
.command('install')
|
|
10
|
+
.alias('i')
|
|
11
|
+
.description('Install/ensure all skills from agent-skills.json into canonical store')
|
|
12
|
+
.option('--no-sync', 'skip linking to agents after install')
|
|
13
|
+
.option('--frozen', 'fail if lock integrity does not match canonical store')
|
|
14
|
+
.action(async (options) => {
|
|
15
|
+
try {
|
|
16
|
+
const cwd = process.cwd();
|
|
17
|
+
const manifest = await loadManifest(cwd);
|
|
18
|
+
let lock = (await loadLockfile(cwd)) || createEmptyLockfile();
|
|
19
|
+
const registry = mgr || new RegistryManager();
|
|
20
|
+
if (options.frozen) {
|
|
21
|
+
const errors = await verifyLockIntegrity(lock);
|
|
22
|
+
if (errors.length) {
|
|
23
|
+
console.error('Frozen install failed:');
|
|
24
|
+
errors.forEach((e) => console.error(' -', e));
|
|
25
|
+
process.exitCode = 2;
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
let installed = 0;
|
|
30
|
+
let skipped = 0;
|
|
31
|
+
const deps = manifest?.agentSkills?.dependencies || {};
|
|
32
|
+
for (const [name, spec] of Object.entries(deps)) {
|
|
33
|
+
const existing = lock.skills[name];
|
|
34
|
+
if (existing && !(await needsInstall(existing))) {
|
|
35
|
+
console.log(`Using installed ${name}`);
|
|
36
|
+
skipped++;
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
console.log(`Installing ${name} from ${spec}...`);
|
|
40
|
+
await registry.add(spec, { cwd, updateManifest: false });
|
|
41
|
+
lock = (await loadLockfile(cwd)) || lock;
|
|
42
|
+
installed++;
|
|
43
|
+
}
|
|
44
|
+
console.log(`Install complete. ${installed} fetched, ${skipped} from store.`);
|
|
45
|
+
if (options.sync !== false) {
|
|
46
|
+
const skills = lockToSkillTargets(lock);
|
|
47
|
+
const res = await syncSkillsToAgents(skills);
|
|
48
|
+
console.log(`Synced ${res.synced} links via adapters: ${res.adaptersUsed.join(', ') || 'none'}`);
|
|
49
|
+
if (res.notes.length)
|
|
50
|
+
console.log('Notes:', res.notes.join('; '));
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
handleCommandError(err, 'install');
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=install.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwBnD"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { loadManifest } from '@skillctl/manifest';
|
|
2
|
+
import { loadLockfile } from '@skillctl/lockfile';
|
|
3
|
+
export function registerList(program) {
|
|
4
|
+
program
|
|
5
|
+
.command('list')
|
|
6
|
+
.description('List installed skills from lockfile (and manifest)')
|
|
7
|
+
.option('--json', 'output JSON')
|
|
8
|
+
.action(async (options) => {
|
|
9
|
+
const cwd = process.cwd();
|
|
10
|
+
const manifest = await loadManifest(cwd);
|
|
11
|
+
const lock = await loadLockfile(cwd);
|
|
12
|
+
const skills = lock ? Object.keys(lock.skills) : [];
|
|
13
|
+
if (options.json) {
|
|
14
|
+
console.log(JSON.stringify({ manifest: manifest ?? null, lock: lock ?? null, skills }, null, 2));
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
console.log('skillctl list');
|
|
18
|
+
if (manifest) {
|
|
19
|
+
console.log('Manifest deps:', Object.keys(manifest.agentSkills?.dependencies || {}).length);
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
console.log('No agent-skills.json (run `skillctl init`)');
|
|
23
|
+
}
|
|
24
|
+
console.log('Skills in lock:', skills.length ? skills.join(', ') : '(none)');
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,UAAU,YAAY,CAAC,OAAgB;IAC3C,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,oDAAoD,CAAC;SACjE,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC;SAC/B,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAC1B,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAEpD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,QAAQ,IAAI,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACjG,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC7B,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,YAAY,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;QAC9F,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/commands/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAazC,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqErD"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { mkdir } from 'node:fs/promises';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { listInstalledPlugins, addPluginRecord, removePluginRecord, discoverPluginEntry, getPluginsDir, } from '@skillctl/plugin-system';
|
|
4
|
+
import { loadConfig, saveConfig } from '@skillctl/core';
|
|
5
|
+
import { handleCommandError } from '../lib/errors.js';
|
|
6
|
+
export function registerPlugin(program) {
|
|
7
|
+
const pluginCmd = program.command('plugin').description('Manage skillctl plugins');
|
|
8
|
+
pluginCmd
|
|
9
|
+
.command('list')
|
|
10
|
+
.description('List installed plugins')
|
|
11
|
+
.option('--json', 'JSON output')
|
|
12
|
+
.action(async (options) => {
|
|
13
|
+
const plugins = await listInstalledPlugins();
|
|
14
|
+
const config = await loadConfig();
|
|
15
|
+
if (options.json) {
|
|
16
|
+
console.log(JSON.stringify({ plugins, experimental: config.experimental?.plugins }, null, 2));
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
if (plugins.length === 0) {
|
|
20
|
+
console.log('No plugins installed.');
|
|
21
|
+
console.log('Enable with: set experimental.plugins=true in ~/.skillctl/config.json');
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
for (const p of plugins) {
|
|
25
|
+
console.log(`${p.enabled ? '✓' : '○'} ${p.name} → ${p.path}`);
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
pluginCmd
|
|
29
|
+
.command('enable')
|
|
30
|
+
.description('Enable plugin loading (experimental)')
|
|
31
|
+
.action(async () => {
|
|
32
|
+
const config = await loadConfig();
|
|
33
|
+
config.experimental = { ...config.experimental, plugins: true };
|
|
34
|
+
await saveConfig(config);
|
|
35
|
+
console.log('Plugins enabled. Restart skillctl to load plugins.');
|
|
36
|
+
});
|
|
37
|
+
pluginCmd
|
|
38
|
+
.command('add <path>')
|
|
39
|
+
.description('Register a local plugin (directory with package.json skillctl.plugin entry)')
|
|
40
|
+
.action(async (pluginPath) => {
|
|
41
|
+
try {
|
|
42
|
+
const abs = join(process.cwd(), pluginPath);
|
|
43
|
+
const entry = await discoverPluginEntry(abs);
|
|
44
|
+
if (!entry) {
|
|
45
|
+
console.error('No skillctl.plugin entry found in package.json');
|
|
46
|
+
process.exitCode = 1;
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
const pkg = JSON.parse(await (await import('node:fs/promises')).readFile(join(abs, 'package.json'), 'utf8'));
|
|
50
|
+
const name = pkg.name || abs.split(/[/\\]/).pop();
|
|
51
|
+
await mkdir(getPluginsDir(), { recursive: true });
|
|
52
|
+
await addPluginRecord(name, entry);
|
|
53
|
+
console.log(`Registered plugin ${name} at ${entry}`);
|
|
54
|
+
console.log('Run `skillctl plugin enable` if not already enabled.');
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
handleCommandError(err, 'plugin add');
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
pluginCmd
|
|
61
|
+
.command('remove <name>')
|
|
62
|
+
.description('Unregister a plugin')
|
|
63
|
+
.action(async (name) => {
|
|
64
|
+
const ok = await removePluginRecord(name);
|
|
65
|
+
if (!ok) {
|
|
66
|
+
console.log(`Plugin not found: ${name}`);
|
|
67
|
+
process.exitCode = 1;
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
console.log(`Removed plugin ${name}`);
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/commands/plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove.d.ts","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOzC,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgDrD"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { loadManifest, saveManifest } from '@skillctl/manifest';
|
|
2
|
+
import { loadLockfile, saveLockfile } from '@skillctl/lockfile';
|
|
3
|
+
import { canonicalizeName, purgeCanonical, resolveAdapterTarget } from '@skillctl/core';
|
|
4
|
+
import { getEnabledAdapters } from '@skillctl/adapters';
|
|
5
|
+
import { handleCommandError } from '../lib/errors.js';
|
|
6
|
+
export function registerRemove(program) {
|
|
7
|
+
program
|
|
8
|
+
.command('remove <name>')
|
|
9
|
+
.alias('rm')
|
|
10
|
+
.description('Remove skill from manifest/lock and unlink agent targets')
|
|
11
|
+
.option('--purge', 'also remove from canonical ~/.skillctl/skills/<name>')
|
|
12
|
+
.action(async (name, options) => {
|
|
13
|
+
try {
|
|
14
|
+
const cwd = process.cwd();
|
|
15
|
+
let manifest = await loadManifest(cwd);
|
|
16
|
+
let lock = await loadLockfile(cwd);
|
|
17
|
+
const canonicalName = canonicalizeName(name);
|
|
18
|
+
let changed = false;
|
|
19
|
+
if (manifest?.agentSkills?.dependencies?.[canonicalName]) {
|
|
20
|
+
delete manifest.agentSkills.dependencies[canonicalName];
|
|
21
|
+
await saveManifest(manifest, cwd);
|
|
22
|
+
changed = true;
|
|
23
|
+
console.log(`Removed ${canonicalName} from manifest.`);
|
|
24
|
+
}
|
|
25
|
+
if (lock?.skills?.[canonicalName]) {
|
|
26
|
+
const entry = lock.skills[canonicalName];
|
|
27
|
+
delete lock.skills[canonicalName];
|
|
28
|
+
await saveLockfile(lock, cwd);
|
|
29
|
+
changed = true;
|
|
30
|
+
console.log(`Removed ${canonicalName} from lock (was at ${entry.canonicalPath}).`);
|
|
31
|
+
const adapters = await getEnabledAdapters();
|
|
32
|
+
for (const ad of adapters) {
|
|
33
|
+
for (const p of [...ad.projectPaths, ...ad.globalPaths]) {
|
|
34
|
+
const target = resolveAdapterTarget(p, canonicalName, cwd);
|
|
35
|
+
await ad.removeTarget(canonicalName, target).catch(() => { });
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
if (options.purge) {
|
|
40
|
+
await purgeCanonical(canonicalName);
|
|
41
|
+
console.log('Purged canonical dir.');
|
|
42
|
+
}
|
|
43
|
+
if (!changed)
|
|
44
|
+
console.log(`No entry for ${name} found.`);
|
|
45
|
+
else
|
|
46
|
+
console.log('Done. Run `sync` if needed.');
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
handleCommandError(err, 'remove');
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=remove.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove.js","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMzC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsBnD"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { loadLockfile } from '@skillctl/lockfile';
|
|
2
|
+
import { lockToSkillTargets } from '@skillctl/core';
|
|
3
|
+
import { syncSkillsToAgents } from '@skillctl/adapters';
|
|
4
|
+
import { handleCommandError } from '../lib/errors.js';
|
|
5
|
+
export function registerSync(program) {
|
|
6
|
+
program
|
|
7
|
+
.command('sync')
|
|
8
|
+
.description('Sync canonical skills to all enabled agent directories')
|
|
9
|
+
.option('--dry-run', 'show what would be done')
|
|
10
|
+
.action(async (options) => {
|
|
11
|
+
try {
|
|
12
|
+
const cwd = process.cwd();
|
|
13
|
+
const lock = await loadLockfile(cwd);
|
|
14
|
+
if (!lock || Object.keys(lock.skills || {}).length === 0) {
|
|
15
|
+
console.log('No lockfile or skills to sync. Run install or add first.');
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
const skills = lockToSkillTargets(lock);
|
|
19
|
+
const res = await syncSkillsToAgents(skills, { dryRun: options.dryRun });
|
|
20
|
+
console.log(`sync: ${res.synced} targets processed (adapters: ${res.adaptersUsed.join(', ') || 'none'})`);
|
|
21
|
+
if (res.notes.length)
|
|
22
|
+
console.log('Notes:', res.notes.join(' | '));
|
|
23
|
+
if (options.dryRun)
|
|
24
|
+
console.log('(dry-run complete)');
|
|
25
|
+
}
|
|
26
|
+
catch (err) {
|
|
27
|
+
handleCommandError(err, 'sync');
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtD,MAAM,UAAU,YAAY,CAAC,OAAgB;IAC3C,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,wDAAwD,CAAC;SACrE,MAAM,CAAC,WAAW,EAAE,yBAAyB,CAAC;SAC9C,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;YAC1B,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;YACrC,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzD,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;gBACxE,OAAO;YACT,CAAC;YACD,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;YACxC,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YACzE,OAAO,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,MAAM,iCAAiC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC;YAC1G,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM;gBAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YACnE,IAAI,OAAO,CAAC,MAAM;gBAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QACxD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAClC,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAIrD,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,eAAe,GAAG,IAAI,CA2C5E"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { loadManifest } from '@skillctl/manifest';
|
|
2
|
+
import { loadLockfile } from '@skillctl/lockfile';
|
|
3
|
+
import { lockToSkillTargets, canonicalizeName } from '@skillctl/core';
|
|
4
|
+
import { RegistryManager } from '@skillctl/registry';
|
|
5
|
+
import { syncSkillsToAgents } from '@skillctl/adapters';
|
|
6
|
+
import { handleCommandError } from '../lib/errors.js';
|
|
7
|
+
export function registerUpdate(program, mgr) {
|
|
8
|
+
program
|
|
9
|
+
.command('update [names...]')
|
|
10
|
+
.description('Re-fetch and update skills from their specifiers')
|
|
11
|
+
.option('--no-sync', 'skip agent sync after update')
|
|
12
|
+
.action(async (names, options) => {
|
|
13
|
+
try {
|
|
14
|
+
const cwd = process.cwd();
|
|
15
|
+
const manifest = await loadManifest(cwd);
|
|
16
|
+
const lock = await loadLockfile(cwd);
|
|
17
|
+
if (!lock) {
|
|
18
|
+
console.log('No lockfile. Run install first.');
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
const registry = mgr || new RegistryManager();
|
|
22
|
+
const deps = manifest?.agentSkills?.dependencies || {};
|
|
23
|
+
const toUpdate = names.length
|
|
24
|
+
? names.map((n) => canonicalizeName(n))
|
|
25
|
+
: Object.keys(lock.skills);
|
|
26
|
+
let updated = 0;
|
|
27
|
+
for (const name of toUpdate) {
|
|
28
|
+
const spec = deps[name] || lock.skills[name]?.specifier;
|
|
29
|
+
if (!spec) {
|
|
30
|
+
console.log(`Skip ${name}: no specifier`);
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
console.log(`Updating ${name} from ${spec}...`);
|
|
34
|
+
await registry.add(spec, { cwd, updateManifest: false });
|
|
35
|
+
updated++;
|
|
36
|
+
}
|
|
37
|
+
console.log(`Updated ${updated} skill(s).`);
|
|
38
|
+
if (options.sync !== false) {
|
|
39
|
+
const freshLock = (await loadLockfile(cwd)) || lock;
|
|
40
|
+
const res = await syncSkillsToAgents(lockToSkillTargets(freshLock));
|
|
41
|
+
console.log(`Synced ${res.synced} links.`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
catch (err) {
|
|
45
|
+
handleCommandError(err, 'update');
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtD,MAAM,UAAU,cAAc,CAAC,OAAgB,EAAE,GAAqB;IACpE,OAAO;SACJ,OAAO,CAAC,mBAAmB,CAAC;SAC5B,WAAW,CAAC,kDAAkD,CAAC;SAC/D,MAAM,CAAC,WAAW,EAAE,8BAA8B,CAAC;SACnD,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QAC/B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;YAC1B,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;YACzC,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;YACrC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;gBAC/C,OAAO;YACT,CAAC;YAED,MAAM,QAAQ,GAAG,GAAG,IAAI,IAAI,eAAe,EAAE,CAAC;YAC9C,MAAM,IAAI,GAAG,QAAQ,EAAE,WAAW,EAAE,YAAY,IAAI,EAAE,CAAC;YACvD,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM;gBAC3B,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;gBAC/C,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAE7B,IAAI,OAAO,GAAG,CAAC,CAAC;YAChB,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;gBAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC;gBACxD,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,gBAAgB,CAAC,CAAC;oBAC1C,SAAS;gBACX,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,SAAS,IAAI,KAAK,CAAC,CAAC;gBAChD,MAAM,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC;gBACzD,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,WAAW,OAAO,YAAY,CAAC,CAAC;YAC5C,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;gBAC3B,MAAM,SAAS,GAAG,CAAC,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;gBACpD,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC;gBACpE,OAAO,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,MAAM,SAAS,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,kBAAkB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACpC,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,OAAO,oBAAoB,CAAC;AA0B5B,QAAA,MAAM,OAAO,SAAgB,CAAC;AAqB9B,wBAAsB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAGvD;AAED,OAAO,EAAE,OAAO,EAAE,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { readFileSync } from 'node:fs';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
import { dirname, join } from 'node:path';
|
|
5
|
+
import { RegistryManager } from '@skillctl/registry';
|
|
6
|
+
import { loadPlugins } from '@skillctl/plugin-system';
|
|
7
|
+
import '@skillctl/adapters';
|
|
8
|
+
import { registerInit } from './commands/init.js';
|
|
9
|
+
import { registerAdd } from './commands/add.js';
|
|
10
|
+
import { registerInstall } from './commands/install.js';
|
|
11
|
+
import { registerSync } from './commands/sync.js';
|
|
12
|
+
import { registerRemove } from './commands/remove.js';
|
|
13
|
+
import { registerList } from './commands/list.js';
|
|
14
|
+
import { registerDoctor } from './commands/doctor.js';
|
|
15
|
+
import { registerImport } from './commands/import-cmd.js';
|
|
16
|
+
import { registerAudit } from './commands/audit.js';
|
|
17
|
+
import { registerUpdate } from './commands/update.js';
|
|
18
|
+
import { registerPlugin } from './commands/plugin.js';
|
|
19
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
20
|
+
const __dirname = dirname(__filename);
|
|
21
|
+
const pkgPath = join(__dirname, '..', 'package.json');
|
|
22
|
+
let version = '0.2.0';
|
|
23
|
+
try {
|
|
24
|
+
const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));
|
|
25
|
+
version = pkg.version || version;
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
// fallback
|
|
29
|
+
}
|
|
30
|
+
const program = new Command();
|
|
31
|
+
const registryManager = new RegistryManager();
|
|
32
|
+
program
|
|
33
|
+
.name('skillctl')
|
|
34
|
+
.description('Universal package-manager-like CLI for Agent Skills')
|
|
35
|
+
.version(version, '-v, --version', 'output the current version')
|
|
36
|
+
.helpOption('-h, --help', 'display help for command');
|
|
37
|
+
registerInit(program);
|
|
38
|
+
registerList(program);
|
|
39
|
+
registerDoctor(program);
|
|
40
|
+
registerAdd(program, registryManager);
|
|
41
|
+
registerInstall(program, registryManager);
|
|
42
|
+
registerSync(program);
|
|
43
|
+
registerRemove(program);
|
|
44
|
+
registerImport(program);
|
|
45
|
+
registerAudit(program);
|
|
46
|
+
registerUpdate(program, registryManager);
|
|
47
|
+
registerPlugin(program);
|
|
48
|
+
export async function prepareProgram() {
|
|
49
|
+
await loadPlugins(program, registryManager);
|
|
50
|
+
return program;
|
|
51
|
+
}
|
|
52
|
+
export { program };
|
|
53
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,oBAAoB,CAAC;AAE5B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;AACtD,IAAI,OAAO,GAAG,OAAO,CAAC;AACtB,IAAI,CAAC;IACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;IACtD,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC;AACnC,CAAC;AAAC,MAAM,CAAC;IACP,WAAW;AACb,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAC9B,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;AAE9C,OAAO;KACJ,IAAI,CAAC,UAAU,CAAC;KAChB,WAAW,CAAC,qDAAqD,CAAC;KAClE,OAAO,CAAC,OAAO,EAAE,eAAe,EAAE,4BAA4B,CAAC;KAC/D,UAAU,CAAC,YAAY,EAAE,0BAA0B,CAAC,CAAC;AAExD,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,WAAW,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;AACtC,eAAe,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;AAC1C,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,cAAc,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;AACzC,cAAc,CAAC,OAAO,CAAC,CAAC;AAExB,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,WAAW,CAAC,OAA0D,EAAE,eAAe,CAAC,CAAC;IAC/F,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,OAAO,EAAE,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"AAAA,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAIpE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,kBAAkB,CAAC,GAAY,EAAE,KAAa;IAC5D,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACjE,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,UAAU,EAAE,OAAO,CAAC,CAAC;IAC3C,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@skillctl/cli",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "skillctl CLI - universal manager for Agent Skills",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"author": "skillctl contributors",
|
|
7
|
+
"bugs": "https://github.com/xFurti/skillctl/issues",
|
|
8
|
+
"homepage": "https://xfurti.github.io/skillctl/",
|
|
9
|
+
"type": "module",
|
|
10
|
+
"main": "./dist/index.js",
|
|
11
|
+
"bin": {
|
|
12
|
+
"skillctl": "./bin/skillctl.js"
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"bin",
|
|
16
|
+
"dist",
|
|
17
|
+
"README.md",
|
|
18
|
+
"LICENSE"
|
|
19
|
+
],
|
|
20
|
+
"dependencies": {
|
|
21
|
+
"commander": "^12.1.0",
|
|
22
|
+
"@skillctl/core": "0.2.0",
|
|
23
|
+
"@skillctl/manifest": "0.2.0",
|
|
24
|
+
"@skillctl/lockfile": "0.2.0",
|
|
25
|
+
"@skillctl/import": "0.2.0",
|
|
26
|
+
"@skillctl/adapters": "0.2.0",
|
|
27
|
+
"@skillctl/security": "0.2.0",
|
|
28
|
+
"@skillctl/registry": "0.2.0",
|
|
29
|
+
"@skillctl/link-manager": "0.2.0",
|
|
30
|
+
"@skillctl/plugin-system": "0.2.0"
|
|
31
|
+
},
|
|
32
|
+
"devDependencies": {
|
|
33
|
+
"@types/node": "^20.14.0",
|
|
34
|
+
"rimraf": "^5.0.7",
|
|
35
|
+
"typescript": "^5.6.3"
|
|
36
|
+
},
|
|
37
|
+
"engines": {
|
|
38
|
+
"node": ">=22.13"
|
|
39
|
+
},
|
|
40
|
+
"repository": {
|
|
41
|
+
"type": "git",
|
|
42
|
+
"url": "https://github.com/xFurti/skillctl.git",
|
|
43
|
+
"directory": "packages/cli"
|
|
44
|
+
},
|
|
45
|
+
"keywords": [
|
|
46
|
+
"cli",
|
|
47
|
+
"skills",
|
|
48
|
+
"agent-skills",
|
|
49
|
+
"ai",
|
|
50
|
+
"agents"
|
|
51
|
+
],
|
|
52
|
+
"scripts": {
|
|
53
|
+
"build": "tsc -b",
|
|
54
|
+
"dev": "tsc -b --watch",
|
|
55
|
+
"clean": "rimraf dist",
|
|
56
|
+
"lint": "tsc --noEmit",
|
|
57
|
+
"test": "echo \"no tests yet\" && exit 0"
|
|
58
|
+
}
|
|
59
|
+
}
|