skilldex-cli 0.1.0 → 1.0.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.
Files changed (116) hide show
  1. package/README.md +147 -5
  2. package/dist/cli/commands/config.d.ts +3 -0
  3. package/dist/cli/commands/config.d.ts.map +1 -0
  4. package/dist/cli/commands/config.js +115 -0
  5. package/dist/cli/commands/config.js.map +1 -0
  6. package/dist/cli/commands/install-action.d.ts.map +1 -1
  7. package/dist/cli/commands/install-action.js +71 -0
  8. package/dist/cli/commands/install-action.js.map +1 -1
  9. package/dist/cli/commands/install.d.ts.map +1 -1
  10. package/dist/cli/commands/install.js +4 -1
  11. package/dist/cli/commands/install.js.map +1 -1
  12. package/dist/cli/commands/list-action.d.ts.map +1 -1
  13. package/dist/cli/commands/list-action.js +5 -1
  14. package/dist/cli/commands/list-action.js.map +1 -1
  15. package/dist/cli/commands/publish.d.ts.map +1 -1
  16. package/dist/cli/commands/publish.js +118 -4
  17. package/dist/cli/commands/publish.js.map +1 -1
  18. package/dist/cli/commands/search-action.d.ts +7 -0
  19. package/dist/cli/commands/search-action.d.ts.map +1 -0
  20. package/dist/cli/commands/search-action.js +61 -0
  21. package/dist/cli/commands/search-action.js.map +1 -0
  22. package/dist/cli/commands/search.d.ts +3 -0
  23. package/dist/cli/commands/search.d.ts.map +1 -0
  24. package/dist/cli/commands/search.js +14 -0
  25. package/dist/cli/commands/search.js.map +1 -0
  26. package/dist/cli/commands/skillset-init-action.d.ts +2 -0
  27. package/dist/cli/commands/skillset-init-action.d.ts.map +1 -0
  28. package/dist/cli/commands/skillset-init-action.js +65 -0
  29. package/dist/cli/commands/skillset-init-action.js.map +1 -0
  30. package/dist/cli/commands/skillset-install-action.d.ts +7 -0
  31. package/dist/cli/commands/skillset-install-action.d.ts.map +1 -0
  32. package/dist/cli/commands/skillset-install-action.js +174 -0
  33. package/dist/cli/commands/skillset-install-action.js.map +1 -0
  34. package/dist/cli/commands/skillset-list-action.d.ts +6 -0
  35. package/dist/cli/commands/skillset-list-action.d.ts.map +1 -0
  36. package/dist/cli/commands/skillset-list-action.js +46 -0
  37. package/dist/cli/commands/skillset-list-action.js.map +1 -0
  38. package/dist/cli/commands/skillset-publish-action.d.ts +7 -0
  39. package/dist/cli/commands/skillset-publish-action.d.ts.map +1 -0
  40. package/dist/cli/commands/skillset-publish-action.js +113 -0
  41. package/dist/cli/commands/skillset-publish-action.js.map +1 -0
  42. package/dist/cli/commands/skillset-uninstall-action.d.ts +6 -0
  43. package/dist/cli/commands/skillset-uninstall-action.d.ts.map +1 -0
  44. package/dist/cli/commands/skillset-uninstall-action.js +24 -0
  45. package/dist/cli/commands/skillset-uninstall-action.js.map +1 -0
  46. package/dist/cli/commands/skillset-update-action.d.ts +7 -0
  47. package/dist/cli/commands/skillset-update-action.d.ts.map +1 -0
  48. package/dist/cli/commands/skillset-update-action.js +84 -0
  49. package/dist/cli/commands/skillset-update-action.js.map +1 -0
  50. package/dist/cli/commands/skillset-validate-action.d.ts +4 -0
  51. package/dist/cli/commands/skillset-validate-action.d.ts.map +1 -0
  52. package/dist/cli/commands/skillset-validate-action.js +49 -0
  53. package/dist/cli/commands/skillset-validate-action.js.map +1 -0
  54. package/dist/cli/commands/skillset.d.ts +3 -0
  55. package/dist/cli/commands/skillset.d.ts.map +1 -0
  56. package/dist/cli/commands/skillset.js +70 -0
  57. package/dist/cli/commands/skillset.js.map +1 -0
  58. package/dist/cli/commands/update-action.d.ts +7 -0
  59. package/dist/cli/commands/update-action.d.ts.map +1 -0
  60. package/dist/cli/commands/update-action.js +65 -0
  61. package/dist/cli/commands/update-action.js.map +1 -0
  62. package/dist/cli/commands/update.d.ts +3 -0
  63. package/dist/cli/commands/update.d.ts.map +1 -0
  64. package/dist/cli/commands/update.js +13 -0
  65. package/dist/cli/commands/update.js.map +1 -0
  66. package/dist/cli/index.d.ts.map +1 -1
  67. package/dist/cli/index.js +9 -1
  68. package/dist/cli/index.js.map +1 -1
  69. package/dist/core/config.d.ts +18 -0
  70. package/dist/core/config.d.ts.map +1 -0
  71. package/dist/core/config.js +42 -0
  72. package/dist/core/config.js.map +1 -0
  73. package/dist/core/installer.d.ts +2 -0
  74. package/dist/core/installer.d.ts.map +1 -1
  75. package/dist/core/installer.js.map +1 -1
  76. package/dist/core/manifest.d.ts +3 -1
  77. package/dist/core/manifest.d.ts.map +1 -1
  78. package/dist/core/manifest.js +27 -0
  79. package/dist/core/manifest.js.map +1 -1
  80. package/dist/core/resolver.d.ts.map +1 -1
  81. package/dist/core/resolver.js +2 -0
  82. package/dist/core/resolver.js.map +1 -1
  83. package/dist/core/skillset-installer.d.ts +21 -0
  84. package/dist/core/skillset-installer.d.ts.map +1 -0
  85. package/dist/core/skillset-installer.js +116 -0
  86. package/dist/core/skillset-installer.js.map +1 -0
  87. package/dist/core/skillset-validator.d.ts +4 -0
  88. package/dist/core/skillset-validator.d.ts.map +1 -0
  89. package/dist/core/skillset-validator.js +272 -0
  90. package/dist/core/skillset-validator.js.map +1 -0
  91. package/dist/core/suggest-agent.d.ts.map +1 -1
  92. package/dist/core/suggest-agent.js +23 -22
  93. package/dist/core/suggest-agent.js.map +1 -1
  94. package/dist/mcp/server.d.ts.map +1 -1
  95. package/dist/mcp/server.js +111 -6
  96. package/dist/mcp/server.js.map +1 -1
  97. package/dist/registry/index.d.ts +2 -0
  98. package/dist/registry/index.d.ts.map +1 -1
  99. package/dist/registry/index.js +1 -1
  100. package/dist/registry/index.js.map +1 -1
  101. package/dist/registry/sources/github.d.ts.map +1 -1
  102. package/dist/registry/sources/github.js +11 -3
  103. package/dist/registry/sources/github.js.map +1 -1
  104. package/dist/registry/sources/registry.d.ts +108 -0
  105. package/dist/registry/sources/registry.d.ts.map +1 -0
  106. package/dist/registry/sources/registry.js +124 -0
  107. package/dist/registry/sources/registry.js.map +1 -0
  108. package/dist/types/manifest.d.ts +13 -0
  109. package/dist/types/manifest.d.ts.map +1 -1
  110. package/dist/types/scope.d.ts +1 -0
  111. package/dist/types/scope.d.ts.map +1 -1
  112. package/dist/types/skillset.d.ts +26 -0
  113. package/dist/types/skillset.d.ts.map +1 -0
  114. package/dist/types/skillset.js +2 -0
  115. package/dist/types/skillset.js.map +1 -0
  116. package/package.json +1 -1
@@ -0,0 +1,24 @@
1
+ import ora from 'ora';
2
+ import { uninstallSkillset } from '../../core/skillset-installer.js';
3
+ import { printJson, printError, printSuccess } from '../ui/output.js';
4
+ export async function runSkillsetUninstall(name, options) {
5
+ const spinner = options.json ? null : ora(`Uninstalling skillset "${name}"...`).start();
6
+ try {
7
+ await uninstallSkillset(name, options.scope);
8
+ if (spinner)
9
+ spinner.succeed(`Uninstalled skillset "${name}" from ${options.scope} scope`);
10
+ if (options.json) {
11
+ printJson({ uninstalled: true, skillsetName: name, scope: options.scope });
12
+ }
13
+ else {
14
+ printSuccess(`Skillset "${name}" and its skills removed from ${options.scope} scope`);
15
+ }
16
+ }
17
+ catch (e) {
18
+ if (spinner)
19
+ spinner.fail();
20
+ printError(e instanceof Error ? e.message : String(e));
21
+ process.exit(1);
22
+ }
23
+ }
24
+ //# sourceMappingURL=skillset-uninstall-action.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skillset-uninstall-action.js","sourceRoot":"","sources":["../../../src/cli/commands/skillset-uninstall-action.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAA;AAErB,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAA;AACpE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAErE,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,IAAY,EACZ,OAA6C;IAE7C,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,0BAA0B,IAAI,MAAM,CAAC,CAAC,KAAK,EAAE,CAAA;IAEvF,IAAI,CAAC;QACH,MAAM,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAA;QAE5C,IAAI,OAAO;YAAE,OAAO,CAAC,OAAO,CAAC,yBAAyB,IAAI,UAAU,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAA;QAE1F,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,SAAS,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAA;QAC5E,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,aAAa,IAAI,iCAAiC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAA;QACvF,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,OAAO;YAAE,OAAO,CAAC,IAAI,EAAE,CAAA;QAC3B,UAAU,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;QACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;AACH,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { ScopeLevel } from '../../types/scope.js';
2
+ export declare function runSkillsetUpdate(skillsetName: string | undefined, options: {
3
+ scope: ScopeLevel;
4
+ all: boolean;
5
+ json: boolean;
6
+ }): Promise<void>;
7
+ //# sourceMappingURL=skillset-update-action.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skillset-update-action.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/skillset-update-action.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAMtD,wBAAsB,iBAAiB,CACrC,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,OAAO,EAAE;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,GAAG,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAC1D,OAAO,CAAC,IAAI,CAAC,CAsFf"}
@@ -0,0 +1,84 @@
1
+ import ora from 'ora';
2
+ import { resolveScope } from '../../core/resolver.js';
3
+ import { readManifest } from '../../core/manifest.js';
4
+ import { printJson, printError, printSuccess, printWarning, printInfo } from '../ui/output.js';
5
+ export async function runSkillsetUpdate(skillsetName, options) {
6
+ if (!skillsetName && !options.all) {
7
+ printError('Specify a skillset name or pass --all to update all skillsets in scope.');
8
+ process.exit(1);
9
+ }
10
+ const scopeConfig = await resolveScope(options.scope);
11
+ const manifest = await readManifest(scopeConfig);
12
+ const skillsets = Object.values(manifest.skillsets);
13
+ const toUpdate = options.all
14
+ ? skillsets
15
+ : skillsets.filter(s => s.name === skillsetName);
16
+ if (toUpdate.length === 0) {
17
+ const msg = options.all
18
+ ? `No skillsets installed at ${options.scope} scope.`
19
+ : `Skillset "${skillsetName}" is not installed at ${options.scope} scope.`;
20
+ printError(msg);
21
+ process.exit(1);
22
+ }
23
+ const results = [];
24
+ for (const skillset of toUpdate) {
25
+ if (!skillset.sourceUrl) {
26
+ printWarning(`"${skillset.name}" has no source URL (local skillset) — skipping.`);
27
+ results.push({ name: skillset.name, status: 'skipped', detail: 'no source URL' });
28
+ continue;
29
+ }
30
+ const spinner = options.json ? null : ora(`Updating "${skillset.name}" from ${skillset.sourceUrl}...`).start();
31
+ const { mkdtemp, rm } = await import('node:fs/promises');
32
+ const path = await import('node:path');
33
+ const os = await import('node:os');
34
+ const { simpleGit } = await import('simple-git');
35
+ const { parseGitUrl } = await import('../../registry/sources/github.js');
36
+ const { installSkillsetFromPath } = await import('../../core/skillset-installer.js');
37
+ const tmpDir = await mkdtemp(path.join(os.tmpdir(), 'skilldex-skillset-update-'));
38
+ try {
39
+ const parsed = parseGitUrl(`git+${skillset.sourceUrl}`);
40
+ const git = simpleGit();
41
+ const cloneOpts = parsed.branch ? ['--branch', parsed.branch, '--depth', '1'] : ['--depth', '1'];
42
+ await git.clone(parsed.repoUrl, tmpDir, cloneOpts);
43
+ const searchRoot = parsed.subPath ? path.join(tmpDir, parsed.subPath) : tmpDir;
44
+ const result = await installSkillsetFromPath(searchRoot, {
45
+ scope: options.scope,
46
+ force: true,
47
+ sourceUrl: skillset.sourceUrl,
48
+ });
49
+ const allSkills = [
50
+ ...result.embeddedResults.map(r => r.skillName),
51
+ ...result.remoteResults.map(r => r.skillName),
52
+ ];
53
+ const detail = `score: ${result.validation.score}/100${allSkills.length ? `, skills: ${allSkills.join(', ')}` : ''}`;
54
+ if (spinner)
55
+ spinner.succeed(`Updated "${skillset.name}" (${detail})`);
56
+ results.push({ name: skillset.name, status: 'updated', detail });
57
+ }
58
+ catch (e) {
59
+ if (spinner)
60
+ spinner.fail();
61
+ const msg = e instanceof Error ? e.message : String(e);
62
+ printError(`Failed to update "${skillset.name}": ${msg}`);
63
+ results.push({ name: skillset.name, status: 'error', detail: msg });
64
+ }
65
+ finally {
66
+ await rm(tmpDir, { recursive: true, force: true });
67
+ }
68
+ }
69
+ if (options.json) {
70
+ printJson(results);
71
+ return;
72
+ }
73
+ const updated = results.filter(r => r.status === 'updated').length;
74
+ const failed = results.filter(r => r.status === 'error').length;
75
+ const skipped = results.filter(r => r.status === 'skipped').length;
76
+ console.log('');
77
+ if (updated > 0)
78
+ printSuccess(`${updated} skillset(s) updated`);
79
+ if (skipped > 0)
80
+ printInfo(`${skipped} skillset(s) skipped`);
81
+ if (failed > 0)
82
+ printWarning(`${failed} skillset(s) failed`);
83
+ }
84
+ //# sourceMappingURL=skillset-update-action.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skillset-update-action.js","sourceRoot":"","sources":["../../../src/cli/commands/skillset-update-action.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function runSkillsetValidate(skillsetPath: string, options: {
2
+ json: boolean;
3
+ }): Promise<void>;
4
+ //# sourceMappingURL=skillset-validate-action.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skillset-validate-action.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/skillset-validate-action.ts"],"names":[],"mappings":"AAIA,wBAAsB,mBAAmB,CACvC,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACzB,OAAO,CAAC,IAAI,CAAC,CAiDf"}
@@ -0,0 +1,49 @@
1
+ import { validateSkillset } from '../../core/skillset-validator.js';
2
+ import { printJson, printError, printSuccess, printWarning } from '../ui/output.js';
3
+ import chalk from 'chalk';
4
+ export async function runSkillsetValidate(skillsetPath, options) {
5
+ try {
6
+ const result = await validateSkillset(skillsetPath);
7
+ if (options.json) {
8
+ printJson(result);
9
+ return;
10
+ }
11
+ for (const diag of result.diagnostics) {
12
+ const loc = diag.line !== undefined ? `line ${diag.line}: ` : '';
13
+ const severity = diag.severity === 'error'
14
+ ? chalk.red('error ')
15
+ : diag.severity === 'warning'
16
+ ? chalk.yellow('warn ')
17
+ : chalk.green('pass ');
18
+ console.log(` ${severity} ${loc}${diag.message}`);
19
+ }
20
+ console.log('');
21
+ const scoreColor = result.score >= 80 ? chalk.green : result.score >= 50 ? chalk.yellow : chalk.red;
22
+ console.log(`Format conformance score: ${scoreColor(String(result.score))}/100`);
23
+ console.log(`Validated against: skillset-format v${result.specVersion}`);
24
+ if (result.embeddedSkills.length > 0) {
25
+ console.log(`Embedded skills: ${result.embeddedSkills.join(', ')}`);
26
+ }
27
+ if (result.remoteSkills.length > 0) {
28
+ console.log(`Remote skills: ${result.remoteSkills.map((s) => s.name).join(', ')}`);
29
+ }
30
+ if (result.errorCount > 0) {
31
+ console.log('');
32
+ printError(`${result.errorCount} error(s) found — skillset cannot be installed`);
33
+ process.exit(1);
34
+ }
35
+ else if (result.warnCount > 0) {
36
+ console.log('');
37
+ printWarning(`${result.warnCount} warning(s) found`);
38
+ }
39
+ else {
40
+ console.log('');
41
+ printSuccess('Skillset is valid');
42
+ }
43
+ }
44
+ catch (e) {
45
+ printError(e instanceof Error ? e.message : String(e));
46
+ process.exit(1);
47
+ }
48
+ }
49
+ //# sourceMappingURL=skillset-validate-action.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skillset-validate-action.js","sourceRoot":"","sources":["../../../src/cli/commands/skillset-validate-action.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerSkillset(program: Command): void;
3
+ //# sourceMappingURL=skillset.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skillset.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/skillset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGnC,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2EvD"}
@@ -0,0 +1,70 @@
1
+ import { Command } from 'commander';
2
+ export function registerSkillset(program) {
3
+ const skillset = new Command('skillset').description('Manage skillsets — bundles of skills for a specific agent');
4
+ skillset
5
+ .command('init [name]')
6
+ .description('Scaffold a new skillset directory with a SKILLSET.md template')
7
+ .action(async (name) => {
8
+ const { runSkillsetInit } = await import('./skillset-init-action.js');
9
+ await runSkillsetInit(name);
10
+ });
11
+ skillset
12
+ .command('install <source>')
13
+ .description('Install a skillset from a local path, git URL, or registry')
14
+ .option('-s, --scope <scope>', 'Installation scope: global, shared, or project', 'project')
15
+ .option('-f, --force', 'Overwrite if already installed', false)
16
+ .option('--json', 'Output as JSON')
17
+ .action(async (source, options) => {
18
+ const { runSkillsetInstall } = await import('./skillset-install-action.js');
19
+ await runSkillsetInstall(source, options);
20
+ });
21
+ skillset
22
+ .command('publish')
23
+ .description('Publish a skillset to the Skilldex registry')
24
+ .option('--source-url <url>', 'GitHub URL of the skillset (auto-detected from git remote if omitted)')
25
+ .option('--tags <tags>', 'Comma-separated tags (e.g. forensics,ctf)')
26
+ .option('--update', 'Re-fetch and re-score an already-published skillset')
27
+ .option('--json', 'Output as JSON')
28
+ .action(async (options) => {
29
+ const { runSkillsetPublish } = await import('./skillset-publish-action.js');
30
+ await runSkillsetPublish(options);
31
+ });
32
+ skillset
33
+ .command('list')
34
+ .description('List installed skillsets')
35
+ .option('-s, --scope <scope>', 'Filter by scope: global, shared, or project')
36
+ .option('--json', 'Output as JSON')
37
+ .action(async (options) => {
38
+ const { runSkillsetList } = await import('./skillset-list-action.js');
39
+ await runSkillsetList(options);
40
+ });
41
+ skillset
42
+ .command('validate [path]')
43
+ .description('Validate a skillset directory structure and score SKILLSET.md')
44
+ .option('--json', 'Output as JSON')
45
+ .action(async (skillsetPath, options) => {
46
+ const { runSkillsetValidate } = await import('./skillset-validate-action.js');
47
+ await runSkillsetValidate(skillsetPath ?? process.cwd(), options);
48
+ });
49
+ skillset
50
+ .command('uninstall <name>')
51
+ .description('Remove an installed skillset and its skills')
52
+ .option('-s, --scope <scope>', 'Scope to uninstall from: global, shared, or project', 'project')
53
+ .option('--json', 'Output as JSON')
54
+ .action(async (name, options) => {
55
+ const { runSkillsetUninstall } = await import('./skillset-uninstall-action.js');
56
+ await runSkillsetUninstall(name, options);
57
+ });
58
+ skillset
59
+ .command('update [skillset-name]')
60
+ .description('Re-fetch and reinstall an installed skillset from its source URL')
61
+ .option('-s, --scope <scope>', 'Scope to update in: global, shared, or project', 'project')
62
+ .option('--all', 'Update all skillsets in the specified scope')
63
+ .option('--json', 'Output as JSON')
64
+ .action(async (skillsetName, options) => {
65
+ const { runSkillsetUpdate } = await import('./skillset-update-action.js');
66
+ await runSkillsetUpdate(skillsetName, options);
67
+ });
68
+ program.addCommand(skillset);
69
+ }
70
+ //# sourceMappingURL=skillset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skillset.js","sourceRoot":"","sources":["../../../src/cli/commands/skillset.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { ScopeLevel } from '../../types/scope.js';
2
+ export declare function runUpdate(skillName: string | undefined, options: {
3
+ scope: ScopeLevel;
4
+ all: boolean;
5
+ json: boolean;
6
+ }): Promise<void>;
7
+ //# sourceMappingURL=update-action.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-action.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/update-action.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAMtD,wBAAsB,SAAS,CAC7B,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,OAAO,EAAE;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,GAAG,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAC1D,OAAO,CAAC,IAAI,CAAC,CAgEf"}
@@ -0,0 +1,65 @@
1
+ import ora from 'ora';
2
+ import { resolveScope } from '../../core/resolver.js';
3
+ import { readManifest } from '../../core/manifest.js';
4
+ import { printJson, printError, printSuccess, printWarning, printInfo } from '../ui/output.js';
5
+ export async function runUpdate(skillName, options) {
6
+ if (!skillName && !options.all) {
7
+ printError('Specify a skill name or pass --all to update all skills in scope.');
8
+ process.exit(1);
9
+ }
10
+ const scopeConfig = await resolveScope(options.scope);
11
+ const manifest = await readManifest(scopeConfig);
12
+ const skills = Object.values(manifest.skills);
13
+ const toUpdate = options.all
14
+ ? skills
15
+ : skills.filter(s => s.name === skillName);
16
+ if (toUpdate.length === 0) {
17
+ const msg = options.all
18
+ ? `No skills installed at ${options.scope} scope.`
19
+ : `Skill "${skillName}" is not installed at ${options.scope} scope.`;
20
+ printError(msg);
21
+ process.exit(1);
22
+ }
23
+ const results = [];
24
+ for (const skill of toUpdate) {
25
+ if (!skill.sourceUrl) {
26
+ printWarning(`"${skill.name}" has no source URL (local skill) — skipping.`);
27
+ results.push({ name: skill.name, status: 'skipped', detail: 'no source URL' });
28
+ continue;
29
+ }
30
+ const spinner = options.json ? null : ora(`Updating "${skill.name}" from ${skill.sourceUrl}...`).start();
31
+ try {
32
+ const { installFromGitUrl } = await import('../../registry/sources/github.js');
33
+ const result = await installFromGitUrl(`git+${skill.sourceUrl}`, scopeConfig, {
34
+ scope: options.scope,
35
+ force: true,
36
+ sourceUrl: skill.sourceUrl,
37
+ });
38
+ if (spinner)
39
+ spinner.succeed(`Updated "${skill.name}" (score: ${result.validation.score}/100)`);
40
+ results.push({ name: skill.name, status: 'updated', detail: `score: ${result.validation.score}/100` });
41
+ }
42
+ catch (e) {
43
+ if (spinner)
44
+ spinner.fail();
45
+ const msg = e instanceof Error ? e.message : String(e);
46
+ printError(`Failed to update "${skill.name}": ${msg}`);
47
+ results.push({ name: skill.name, status: 'error', detail: msg });
48
+ }
49
+ }
50
+ if (options.json) {
51
+ printJson(results);
52
+ return;
53
+ }
54
+ const updated = results.filter(r => r.status === 'updated').length;
55
+ const failed = results.filter(r => r.status === 'error').length;
56
+ const skipped = results.filter(r => r.status === 'skipped').length;
57
+ console.log('');
58
+ if (updated > 0)
59
+ printSuccess(`${updated} skill(s) updated`);
60
+ if (skipped > 0)
61
+ printInfo(`${skipped} skill(s) skipped`);
62
+ if (failed > 0)
63
+ printWarning(`${failed} skill(s) failed`);
64
+ }
65
+ //# sourceMappingURL=update-action.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-action.js","sourceRoot":"","sources":["../../../src/cli/commands/update-action.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerUpdate(program: Command): void;
3
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/update.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgBrD"}
@@ -0,0 +1,13 @@
1
+ export function registerUpdate(program) {
2
+ program
3
+ .command('update [skill-name]')
4
+ .description('Re-fetch and reinstall an installed skill from its source URL')
5
+ .option('--scope <scope>', 'Scope to update in: global, shared, or project', 'project')
6
+ .option('--all', 'Update all skills in the specified scope')
7
+ .option('--json', 'Output as JSON')
8
+ .action(async (skillName, options) => {
9
+ const { runUpdate } = await import('./update-action.js');
10
+ await runUpdate(skillName, options);
11
+ });
12
+ }
13
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/cli/commands/update.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,OAAO;SACJ,OAAO,CAAC,qBAAqB,CAAC;SAC9B,WAAW,CAAC,+DAA+D,CAAC;SAC5E,MAAM,CAAC,iBAAiB,EAAE,gDAAgD,EAAE,SAAS,CAAC;SACtF,MAAM,CAAC,OAAO,EAAE,0CAA0C,CAAC;SAC3D,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CACL,KAAK,EACH,SAA6B,EAC7B,OAA2D,EAC3D,EAAE;QACF,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAA;QACxD,MAAM,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;IACrC,CAAC,CACF,CAAA;AACL,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAQnC,wBAAgB,SAAS,IAAI,OAAO,CA0BnC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAYnC,wBAAgB,SAAS,IAAI,OAAO,CA8BnC"}
package/dist/cli/index.js CHANGED
@@ -5,19 +5,27 @@ import { registerList } from './commands/list.js';
5
5
  import { registerValidate } from './commands/validate.js';
6
6
  import { registerSuggest } from './commands/suggest.js';
7
7
  import { registerPublish } from './commands/publish.js';
8
+ import { registerSearch } from './commands/search.js';
9
+ import { registerSkillset } from './commands/skillset.js';
10
+ import { registerUpdate } from './commands/update.js';
11
+ import { registerConfig } from './commands/config.js';
8
12
  export function createCli() {
9
13
  const program = new Command();
10
14
  program
11
15
  .name('skillpm')
12
16
  .description('Package manager for Claude skill packages')
13
- .version('0.1.0')
17
+ .version('1.0.0')
14
18
  .option('--no-color', 'Disable colored output');
15
19
  registerInstall(program);
16
20
  registerUninstall(program);
21
+ registerUpdate(program);
17
22
  registerList(program);
18
23
  registerValidate(program);
19
24
  registerSuggest(program);
20
25
  registerPublish(program);
26
+ registerSearch(program);
27
+ registerSkillset(program);
28
+ registerConfig(program);
21
29
  // Hidden MCP server command
22
30
  program
23
31
  .command('mcp', { hidden: true })
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAEvD,MAAM,UAAU,SAAS;IACvB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;IAE7B,OAAO;SACJ,IAAI,CAAC,SAAS,CAAC;SACf,WAAW,CAAC,2CAA2C,CAAC;SACxD,OAAO,CAAC,OAAO,CAAC;SAChB,MAAM,CAAC,YAAY,EAAE,wBAAwB,CAAC,CAAA;IAEjD,eAAe,CAAC,OAAO,CAAC,CAAA;IACxB,iBAAiB,CAAC,OAAO,CAAC,CAAA;IAC1B,YAAY,CAAC,OAAO,CAAC,CAAA;IACrB,gBAAgB,CAAC,OAAO,CAAC,CAAA;IACzB,eAAe,CAAC,OAAO,CAAC,CAAA;IACxB,eAAe,CAAC,OAAO,CAAC,CAAA;IAExB,4BAA4B;IAC5B,OAAO;SACJ,OAAO,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;SAChC,WAAW,CAAC,sBAAsB,CAAC;SACnC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAA;QAC3D,MAAM,cAAc,EAAE,CAAA;IACxB,CAAC,CAAC,CAAA;IAEJ,OAAO,OAAO,CAAA;AAChB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAErD,MAAM,UAAU,SAAS;IACvB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;IAE7B,OAAO;SACJ,IAAI,CAAC,SAAS,CAAC;SACf,WAAW,CAAC,2CAA2C,CAAC;SACxD,OAAO,CAAC,OAAO,CAAC;SAChB,MAAM,CAAC,YAAY,EAAE,wBAAwB,CAAC,CAAA;IAEjD,eAAe,CAAC,OAAO,CAAC,CAAA;IACxB,iBAAiB,CAAC,OAAO,CAAC,CAAA;IAC1B,cAAc,CAAC,OAAO,CAAC,CAAA;IACvB,YAAY,CAAC,OAAO,CAAC,CAAA;IACrB,gBAAgB,CAAC,OAAO,CAAC,CAAA;IACzB,eAAe,CAAC,OAAO,CAAC,CAAA;IACxB,eAAe,CAAC,OAAO,CAAC,CAAA;IACxB,cAAc,CAAC,OAAO,CAAC,CAAA;IACvB,gBAAgB,CAAC,OAAO,CAAC,CAAA;IACzB,cAAc,CAAC,OAAO,CAAC,CAAA;IAEvB,4BAA4B;IAC5B,OAAO;SACJ,OAAO,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;SAChC,WAAW,CAAC,sBAAsB,CAAC;SACnC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAA;QAC3D,MAAM,cAAc,EAAE,CAAA;IACxB,CAAC,CAAC,CAAA;IAEJ,OAAO,OAAO,CAAA;AAChB,CAAC"}
@@ -0,0 +1,18 @@
1
+ export interface SkilldexConfig {
2
+ registryUrl?: string;
3
+ token?: string;
4
+ anthropicApiKey?: string;
5
+ defaultScope?: 'global' | 'shared' | 'project';
6
+ }
7
+ export declare function readConfig(): Promise<SkilldexConfig>;
8
+ export declare function writeConfig(config: SkilldexConfig): Promise<void>;
9
+ /**
10
+ * Get a config value. Environment variables always win over config file values.
11
+ * Keys map as follows:
12
+ * registryUrl → SKILLDEX_REGISTRY_URL
13
+ * token → SKILLDEX_TOKEN
14
+ * anthropicApiKey → ANTHROPIC_API_KEY
15
+ * defaultScope → SKILLDEX_DEFAULT_SCOPE
16
+ */
17
+ export declare function getConfigValue<K extends keyof SkilldexConfig>(key: K): Promise<SkilldexConfig[K] | undefined>;
18
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,cAAc;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,YAAY,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAA;CAC/C;AAMD,wBAAsB,UAAU,IAAI,OAAO,CAAC,cAAc,CAAC,CAO1D;AAED,wBAAsB,WAAW,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAIvE;AAED;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAAC,CAAC,SAAS,MAAM,cAAc,EACjE,GAAG,EAAE,CAAC,GACL,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAaxC"}
@@ -0,0 +1,42 @@
1
+ import { readFile, writeFile, mkdir } from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import os from 'node:os';
4
+ function getConfigPath() {
5
+ return path.join(os.homedir(), '.skilldex', 'config.json');
6
+ }
7
+ export async function readConfig() {
8
+ try {
9
+ const raw = await readFile(getConfigPath(), 'utf8');
10
+ return JSON.parse(raw);
11
+ }
12
+ catch {
13
+ return {};
14
+ }
15
+ }
16
+ export async function writeConfig(config) {
17
+ const configPath = getConfigPath();
18
+ await mkdir(path.dirname(configPath), { recursive: true });
19
+ await writeFile(configPath, JSON.stringify(config, null, 2) + '\n', 'utf8');
20
+ }
21
+ /**
22
+ * Get a config value. Environment variables always win over config file values.
23
+ * Keys map as follows:
24
+ * registryUrl → SKILLDEX_REGISTRY_URL
25
+ * token → SKILLDEX_TOKEN
26
+ * anthropicApiKey → ANTHROPIC_API_KEY
27
+ * defaultScope → SKILLDEX_DEFAULT_SCOPE
28
+ */
29
+ export async function getConfigValue(key) {
30
+ const envMap = {
31
+ registryUrl: 'SKILLDEX_REGISTRY_URL',
32
+ token: 'SKILLDEX_TOKEN',
33
+ anthropicApiKey: 'ANTHROPIC_API_KEY',
34
+ defaultScope: 'SKILLDEX_DEFAULT_SCOPE',
35
+ };
36
+ const envVal = process.env[envMap[key]];
37
+ if (envVal !== undefined)
38
+ return envVal;
39
+ const config = await readConfig();
40
+ return config[key];
41
+ }
42
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAC7D,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,MAAM,SAAS,CAAA;AASxB,SAAS,aAAa;IACpB,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,aAAa,CAAC,CAAA;AAC5D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,aAAa,EAAE,EAAE,MAAM,CAAC,CAAA;QACnD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAmB,CAAA;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAAsB;IACtD,MAAM,UAAU,GAAG,aAAa,EAAE,CAAA;IAClC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC1D,MAAM,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,CAAA;AAC7E,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,GAAM;IAEN,MAAM,MAAM,GAAyC;QACnD,WAAW,EAAE,uBAAuB;QACpC,KAAK,EAAE,gBAAgB;QACvB,eAAe,EAAE,mBAAmB;QACpC,YAAY,EAAE,wBAAwB;KACvC,CAAA;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;IACvC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAA2B,CAAA;IAE5D,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAA;IACjC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAA;AACpB,CAAC"}
@@ -5,6 +5,8 @@ export interface InstallOptions {
5
5
  force?: boolean;
6
6
  dryRun?: boolean;
7
7
  sourceUrl?: string;
8
+ /** Called when a repo contains multiple skill folders. Return the name of the folder to install. */
9
+ onMultipleSkills?: (names: string[]) => Promise<string>;
8
10
  }
9
11
  export interface InstallResult {
10
12
  skillName: string;
@@ -1 +1 @@
1
- {"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../src/core/installer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAEnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAKzD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,UAAU,CAAA;IACjB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,UAAU,CAAA;IACjB,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,gBAAgB,CAAA;IAC5B,cAAc,EAAE,OAAO,CAAA;CACxB;AAED,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,aAAa,CAAC,CA4DxB;AAED,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAWxF"}
1
+ {"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../src/core/installer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAEnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAKzD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,UAAU,CAAA;IACjB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,oGAAoG;IACpG,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;CACxD;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,UAAU,CAAA;IACjB,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,gBAAgB,CAAA;IAC5B,cAAc,EAAE,OAAO,CAAA;CACxB;AAED,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,aAAa,CAAC,CA4DxB;AAED,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAWxF"}
@@ -1 +1 @@
1
- {"version":3,"file":"installer.js","sourceRoot":"","sources":["../../src/core/installer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"installer.js","sourceRoot":"","sources":["../../src/core/installer.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,10 @@
1
- import type { SkillManifest, InstalledSkill } from '../types/manifest.js';
1
+ import type { SkillManifest, InstalledSkill, InstalledSkillset } from '../types/manifest.js';
2
2
  import type { ScopeConfig } from '../types/scope.js';
3
3
  export declare function createEmptyManifest(scope: SkillManifest['scope']): SkillManifest;
4
4
  export declare function readManifest(scopeConfig: ScopeConfig): Promise<SkillManifest>;
5
5
  export declare function writeManifest(scopeConfig: ScopeConfig, manifest: SkillManifest): Promise<void>;
6
6
  export declare function addSkillToManifest(scopeConfig: ScopeConfig, skill: InstalledSkill): Promise<void>;
7
7
  export declare function removeSkillFromManifest(scopeConfig: ScopeConfig, skillName: string): Promise<void>;
8
+ export declare function addSkillsetToManifest(scopeConfig: ScopeConfig, skillset: InstalledSkillset): Promise<void>;
9
+ export declare function removeSkillsetFromManifest(scopeConfig: ScopeConfig, skillsetName: string): Promise<void>;
8
10
  //# sourceMappingURL=manifest.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/core/manifest.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAsBpD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,GAAG,aAAa,CAOhF;AAED,wBAAsB,YAAY,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,CAWnF;AAED,wBAAsB,aAAa,CAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAMpG;AAED,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,cAAc,GACpB,OAAO,CAAC,IAAI,CAAC,CAIf;AAED,wBAAsB,uBAAuB,CAC3C,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAOf"}
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/core/manifest.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAC5F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAoCpD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,GAAG,aAAa,CAQhF;AAED,wBAAsB,YAAY,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,CAWnF;AAED,wBAAsB,aAAa,CAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAMpG;AAED,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,cAAc,GACpB,OAAO,CAAC,IAAI,CAAC,CAIf;AAED,wBAAsB,uBAAuB,CAC3C,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAOf;AAED,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,iBAAiB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAIf;AAED,wBAAsB,0BAA0B,CAC9C,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAOf"}