agent-skills-cli 1.1.3 โ†’ 1.1.4

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 (71) hide show
  1. package/README.md +29 -10
  2. package/dist/cli/commands/bench.d.ts +7 -0
  3. package/dist/cli/commands/bench.d.ts.map +1 -0
  4. package/dist/cli/commands/bench.js +158 -0
  5. package/dist/cli/commands/bench.js.map +1 -0
  6. package/dist/cli/commands/compose.d.ts +7 -0
  7. package/dist/cli/commands/compose.d.ts.map +1 -0
  8. package/dist/cli/commands/compose.js +71 -0
  9. package/dist/cli/commands/compose.js.map +1 -0
  10. package/dist/cli/commands/context.d.ts +7 -0
  11. package/dist/cli/commands/context.d.ts.map +1 -0
  12. package/dist/cli/commands/context.js +119 -0
  13. package/dist/cli/commands/context.js.map +1 -0
  14. package/dist/cli/commands/diff.d.ts +7 -0
  15. package/dist/cli/commands/diff.d.ts.map +1 -0
  16. package/dist/cli/commands/diff.js +101 -0
  17. package/dist/cli/commands/diff.js.map +1 -0
  18. package/dist/cli/commands/frozen.d.ts +7 -0
  19. package/dist/cli/commands/frozen.d.ts.map +1 -0
  20. package/dist/cli/commands/frozen.js +133 -0
  21. package/dist/cli/commands/frozen.js.map +1 -0
  22. package/dist/cli/commands/sandbox.d.ts +7 -0
  23. package/dist/cli/commands/sandbox.d.ts.map +1 -0
  24. package/dist/cli/commands/sandbox.js +174 -0
  25. package/dist/cli/commands/sandbox.js.map +1 -0
  26. package/dist/cli/commands/split.d.ts +7 -0
  27. package/dist/cli/commands/split.d.ts.map +1 -0
  28. package/dist/cli/commands/split.js +80 -0
  29. package/dist/cli/commands/split.js.map +1 -0
  30. package/dist/cli/commands/test.d.ts +7 -0
  31. package/dist/cli/commands/test.d.ts.map +1 -0
  32. package/dist/cli/commands/test.js +121 -0
  33. package/dist/cli/commands/test.js.map +1 -0
  34. package/dist/cli/commands/utils-commands.d.ts.map +1 -1
  35. package/dist/cli/commands/utils-commands.js +72 -4
  36. package/dist/cli/commands/utils-commands.js.map +1 -1
  37. package/dist/cli/commands/watch.d.ts +7 -0
  38. package/dist/cli/commands/watch.d.ts.map +1 -0
  39. package/dist/cli/commands/watch.js +85 -0
  40. package/dist/cli/commands/watch.js.map +1 -0
  41. package/dist/cli/index.js +20 -0
  42. package/dist/cli/index.js.map +1 -1
  43. package/dist/core/composer.d.ts +41 -0
  44. package/dist/core/composer.d.ts.map +1 -0
  45. package/dist/core/composer.js +230 -0
  46. package/dist/core/composer.js.map +1 -0
  47. package/dist/core/conflict-detector.d.ts +55 -0
  48. package/dist/core/conflict-detector.d.ts.map +1 -0
  49. package/dist/core/conflict-detector.js +339 -0
  50. package/dist/core/conflict-detector.js.map +1 -0
  51. package/dist/core/context-budget.d.ts +63 -0
  52. package/dist/core/context-budget.d.ts.map +1 -0
  53. package/dist/core/context-budget.js +310 -0
  54. package/dist/core/context-budget.js.map +1 -0
  55. package/dist/core/differ.d.ts +42 -0
  56. package/dist/core/differ.d.ts.map +1 -0
  57. package/dist/core/differ.js +117 -0
  58. package/dist/core/differ.js.map +1 -0
  59. package/dist/core/index.d.ts +12 -0
  60. package/dist/core/index.d.ts.map +1 -1
  61. package/dist/core/index.js +12 -0
  62. package/dist/core/index.js.map +1 -1
  63. package/dist/core/skill-tester.d.ts +54 -0
  64. package/dist/core/skill-tester.d.ts.map +1 -0
  65. package/dist/core/skill-tester.js +201 -0
  66. package/dist/core/skill-tester.js.map +1 -0
  67. package/dist/core/splitter.d.ts +36 -0
  68. package/dist/core/splitter.d.ts.map +1 -0
  69. package/dist/core/splitter.js +186 -0
  70. package/dist/core/splitter.js.map +1 -0
  71. package/package.json +1 -1
@@ -0,0 +1,133 @@
1
+ import chalk from 'chalk';
2
+ import ora from 'ora';
3
+ export function registerFrozenCommand(program) {
4
+ program
5
+ .command('frozen')
6
+ .description('Install skills from the lockfile with pinned versions (like npm ci)')
7
+ .option('--verify', 'Only verify that installed skills match the lock file')
8
+ .option('--strict', 'Fail if any skill cannot be restored exactly')
9
+ .action(async (options) => {
10
+ try {
11
+ const { existsSync } = await import('fs');
12
+ const { readFile, rm, mkdir, cp } = await import('fs/promises');
13
+ const { homedir } = await import('os');
14
+ const { join } = await import('path');
15
+ const { readLock } = await import('../../core/skill-lock.js');
16
+ const { exec } = await import('child_process');
17
+ const { promisify } = await import('util');
18
+ const execAsync = promisify(exec);
19
+ const lock = await readLock();
20
+ const skills = Object.values(lock.skills);
21
+ if (skills.length === 0) {
22
+ console.log(chalk.yellow('\n No skills in lockfile. Install skills first with `skills install`.\n'));
23
+ return;
24
+ }
25
+ console.log(chalk.bold(`\nโ„๏ธ Frozen Install${options.verify ? ' (verify mode)' : ''}\n`));
26
+ console.log(chalk.gray(` Found ${skills.length} skill(s) in lockfile.\n`));
27
+ let passed = 0;
28
+ let failed = 0;
29
+ for (const entry of skills) {
30
+ const spinner = ora(`${options.verify ? 'Verifying' : 'Restoring'} ${entry.name}...`).start();
31
+ try {
32
+ if (options.verify) {
33
+ // Verify mode: check if skill exists and matches
34
+ const exists = existsSync(join(entry.canonicalPath, entry.name, 'SKILL.md'));
35
+ if (exists) {
36
+ spinner.succeed(`${entry.name} ${chalk.gray('โœ“ verified')}`);
37
+ passed++;
38
+ }
39
+ else {
40
+ spinner.fail(`${entry.name} ${chalk.red('โœ— missing')}`);
41
+ failed++;
42
+ }
43
+ }
44
+ else {
45
+ // Restore mode: reinstall from source
46
+ if (entry.sourceType === 'github' || entry.sourceType === 'private-git') {
47
+ const tmpDir = join(homedir(), '.antigravity', 'tmp', `frozen-${Date.now()}`);
48
+ await mkdir(tmpDir, { recursive: true });
49
+ let cloneCmd = `git clone --depth 1`;
50
+ if (entry.version) {
51
+ // Try to checkout specific commit
52
+ cloneCmd = `git clone`;
53
+ }
54
+ cloneCmd += ` ${entry.source} ${tmpDir}`;
55
+ try {
56
+ await execAsync(cloneCmd, { timeout: 30000 });
57
+ if (entry.version) {
58
+ try {
59
+ await execAsync(`git checkout ${entry.version}`, { cwd: tmpDir });
60
+ }
61
+ catch {
62
+ // Version might not be a valid ref, continue
63
+ }
64
+ }
65
+ // Copy to canonical path
66
+ const destDir = join(entry.canonicalPath, entry.name);
67
+ await mkdir(destDir, { recursive: true });
68
+ // Find SKILL.md in cloned repo
69
+ const skillMd = join(tmpDir, 'SKILL.md');
70
+ if (existsSync(skillMd)) {
71
+ await cp(tmpDir, destDir, { recursive: true });
72
+ }
73
+ else {
74
+ // Look for skill subdirectory
75
+ const { readdir } = await import('fs/promises');
76
+ const entries = await readdir(tmpDir, { withFileTypes: true });
77
+ for (const e of entries) {
78
+ if (e.isDirectory() && existsSync(join(tmpDir, e.name, 'SKILL.md'))) {
79
+ await cp(join(tmpDir, e.name), destDir, { recursive: true });
80
+ break;
81
+ }
82
+ }
83
+ }
84
+ // Cleanup
85
+ await rm(tmpDir, { recursive: true, force: true }).catch(() => { });
86
+ spinner.succeed(`${entry.name} ${chalk.gray(`restored from ${entry.sourceType}`)}`);
87
+ passed++;
88
+ }
89
+ catch (err) {
90
+ await rm(tmpDir, { recursive: true, force: true }).catch(() => { });
91
+ throw err;
92
+ }
93
+ }
94
+ else if (entry.sourceType === 'local') {
95
+ // Local source โ€” just verify it still exists
96
+ if (existsSync(join(entry.source, 'SKILL.md'))) {
97
+ spinner.succeed(`${entry.name} ${chalk.gray('local source valid')}`);
98
+ passed++;
99
+ }
100
+ else {
101
+ spinner.fail(`${entry.name} ${chalk.red('local source missing')}`);
102
+ failed++;
103
+ }
104
+ }
105
+ else {
106
+ spinner.info(`${entry.name} ${chalk.gray(`skipped (${entry.sourceType} source)`)}`);
107
+ passed++;
108
+ }
109
+ }
110
+ }
111
+ catch (err) {
112
+ spinner.fail(`${entry.name} ${chalk.red(err.message || 'failed')}`);
113
+ failed++;
114
+ if (options.strict) {
115
+ console.log(chalk.red('\n Strict mode: aborting on first failure.\n'));
116
+ process.exit(1);
117
+ }
118
+ }
119
+ }
120
+ console.log('');
121
+ console.log(chalk.bold(' Summary:'));
122
+ console.log(` ${chalk.green(`${passed} succeeded`)} / ${chalk.red(`${failed} failed`)} / ${skills.length} total`);
123
+ console.log('');
124
+ if (failed > 0)
125
+ process.exit(1);
126
+ }
127
+ catch (error) {
128
+ console.error(chalk.red('Error:'), error.message || error);
129
+ process.exit(1);
130
+ }
131
+ });
132
+ }
133
+ //# sourceMappingURL=frozen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frozen.js","sourceRoot":"","sources":["../../../src/cli/commands/frozen.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AAEtB,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IAClD,OAAO;SACF,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,qEAAqE,CAAC;SAClF,MAAM,CAAC,UAAU,EAAE,uDAAuD,CAAC;SAC3E,MAAM,CAAC,UAAU,EAAE,8CAA8C,CAAC;SAClE,MAAM,CAAC,KAAK,EAAE,OAAY,EAAE,EAAE;QAC3B,IAAI,CAAC;YACD,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;YAC1C,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;YAChE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;YACvC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;YACtC,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;YAC9D,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;YAC/C,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;YAC3C,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;YAElC,MAAM,IAAI,GAAG,MAAM,QAAQ,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAE1C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,0EAA0E,CAAC,CAAC,CAAC;gBACtG,OAAO;YACX,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YAC3F,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,MAAM,0BAA0B,CAAC,CAAC,CAAC;YAE5E,IAAI,MAAM,GAAG,CAAC,CAAC;YACf,IAAI,MAAM,GAAG,CAAC,CAAC;YAEf,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBACzB,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;gBAE9F,IAAI,CAAC;oBACD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;wBACjB,iDAAiD;wBACjD,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;wBAC7E,IAAI,MAAM,EAAE,CAAC;4BACT,OAAO,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;4BAC7D,MAAM,EAAE,CAAC;wBACb,CAAC;6BAAM,CAAC;4BACJ,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;4BACxD,MAAM,EAAE,CAAC;wBACb,CAAC;oBACL,CAAC;yBAAM,CAAC;wBACJ,sCAAsC;wBACtC,IAAI,KAAK,CAAC,UAAU,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,KAAK,aAAa,EAAE,CAAC;4BACtE,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,UAAU,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;4BAC9E,MAAM,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;4BAEzC,IAAI,QAAQ,GAAG,qBAAqB,CAAC;4BACrC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gCAChB,kCAAkC;gCAClC,QAAQ,GAAG,WAAW,CAAC;4BAC3B,CAAC;4BACD,QAAQ,IAAI,IAAI,KAAK,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC;4BAEzC,IAAI,CAAC;gCACD,MAAM,SAAS,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;gCAE9C,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oCAChB,IAAI,CAAC;wCACD,MAAM,SAAS,CAAC,gBAAgB,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;oCACtE,CAAC;oCAAC,MAAM,CAAC;wCACL,6CAA6C;oCACjD,CAAC;gCACL,CAAC;gCAED,yBAAyB;gCACzB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gCACtD,MAAM,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gCAE1C,+BAA+B;gCAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;gCACzC,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;oCACtB,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gCACnD,CAAC;qCAAM,CAAC;oCACJ,8BAA8B;oCAC9B,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;oCAChD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;oCAC/D,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;wCACtB,IAAI,CAAC,CAAC,WAAW,EAAE,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC;4CAClE,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;4CAC7D,MAAM;wCACV,CAAC;oCACL,CAAC;gCACL,CAAC;gCAED,UAAU;gCACV,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;gCAEpE,OAAO,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,iBAAiB,KAAK,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;gCACpF,MAAM,EAAE,CAAC;4BACb,CAAC;4BAAC,OAAO,GAAQ,EAAE,CAAC;gCAChB,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;gCACpE,MAAM,GAAG,CAAC;4BACd,CAAC;wBACL,CAAC;6BAAM,IAAI,KAAK,CAAC,UAAU,KAAK,OAAO,EAAE,CAAC;4BACtC,6CAA6C;4BAC7C,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC;gCAC7C,OAAO,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;gCACrE,MAAM,EAAE,CAAC;4BACb,CAAC;iCAAM,CAAC;gCACJ,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC;gCACnE,MAAM,EAAE,CAAC;4BACb,CAAC;wBACL,CAAC;6BAAM,CAAC;4BACJ,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,KAAK,CAAC,UAAU,UAAU,CAAC,EAAE,CAAC,CAAC;4BACpF,MAAM,EAAE,CAAC;wBACb,CAAC;oBACL,CAAC;gBACL,CAAC;gBAAC,OAAO,GAAQ,EAAE,CAAC;oBAChB,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,QAAQ,CAAC,EAAE,CAAC,CAAC;oBACpE,MAAM,EAAE,CAAC;oBACT,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;wBACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC,CAAC;wBACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACpB,CAAC;gBACL,CAAC;YACL,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,MAAM,YAAY,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,SAAS,CAAC,MAAM,MAAM,CAAC,MAAM,QAAQ,CAAC,CAAC;YACrH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAEhB,IAAI,MAAM,GAAG,CAAC;gBAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC;YAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Sandbox Preview Command
3
+ * Preview a skill's effects before installation: score, conflicts, token impact.
4
+ */
5
+ import { Command } from 'commander';
6
+ export declare function registerSandboxCommand(program: Command): void;
7
+ //# sourceMappingURL=sandbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/sandbox.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,QAmLtD"}
@@ -0,0 +1,174 @@
1
+ import chalk from 'chalk';
2
+ import ora from 'ora';
3
+ export function registerSandboxCommand(program) {
4
+ program
5
+ .command('sandbox <source>')
6
+ .description('Preview a skill before installing โ€” score, conflicts, and token impact')
7
+ .option('-f, --format <format>', 'Output format: text, json', 'text')
8
+ .action(async (source, options) => {
9
+ try {
10
+ const { existsSync } = await import('fs');
11
+ const { readdir, readFile, mkdtemp, rm } = await import('fs/promises');
12
+ const { homedir } = await import('os');
13
+ const { join, basename } = await import('path');
14
+ const { tmpdir } = await import('os');
15
+ console.log(chalk.bold(`\n๐Ÿงช Sandbox Preview: ${chalk.cyan(source)}\n`));
16
+ let skillPath = '';
17
+ let tempDir = '';
18
+ let isTemp = false;
19
+ // Resolve the source
20
+ if (existsSync(source) && existsSync(join(source, 'SKILL.md'))) {
21
+ skillPath = source;
22
+ }
23
+ else {
24
+ // Try to clone from GitHub
25
+ const spinner = ora('Fetching skill from remote...').start();
26
+ try {
27
+ const { exec } = await import('child_process');
28
+ const { promisify } = await import('util');
29
+ const execAsync = promisify(exec);
30
+ tempDir = await mkdtemp(join(tmpdir(), 'skills-sandbox-'));
31
+ isTemp = true;
32
+ let gitUrl = source;
33
+ if (!source.includes('://') && !source.startsWith('git@')) {
34
+ gitUrl = `https://github.com/${source.replace(/^@/, '')}`;
35
+ }
36
+ await execAsync(`git clone --depth 1 ${gitUrl} ${tempDir}`, { timeout: 30000 });
37
+ // Find SKILL.md
38
+ if (existsSync(join(tempDir, 'SKILL.md'))) {
39
+ skillPath = tempDir;
40
+ }
41
+ else {
42
+ const entries = await readdir(tempDir, { withFileTypes: true });
43
+ for (const entry of entries) {
44
+ if (entry.isDirectory() && existsSync(join(tempDir, entry.name, 'SKILL.md'))) {
45
+ skillPath = join(tempDir, entry.name);
46
+ break;
47
+ }
48
+ }
49
+ }
50
+ spinner.succeed('Fetched skill');
51
+ }
52
+ catch (err) {
53
+ spinner.fail('Could not fetch skill');
54
+ console.error(chalk.red(` ${err.message || err}`));
55
+ if (tempDir)
56
+ await rm(tempDir, { recursive: true, force: true }).catch(() => { });
57
+ return;
58
+ }
59
+ }
60
+ if (!skillPath || !existsSync(join(skillPath, 'SKILL.md'))) {
61
+ console.error(chalk.red(' No SKILL.md found.\n'));
62
+ if (isTemp)
63
+ await rm(tempDir, { recursive: true, force: true }).catch(() => { });
64
+ return;
65
+ }
66
+ // Read the skill
67
+ const raw = await readFile(join(skillPath, 'SKILL.md'), 'utf-8');
68
+ let frontmatter = {};
69
+ try {
70
+ const matter = (await import('gray-matter')).default;
71
+ const parsed = matter(raw);
72
+ frontmatter = parsed.data;
73
+ }
74
+ catch { }
75
+ const name = frontmatter.name || basename(skillPath);
76
+ const tokens = Math.ceil(raw.length / 4);
77
+ const lines = raw.split('\n').length;
78
+ const description = frontmatter.description || chalk.gray('(no description)');
79
+ // 1. Basic info
80
+ console.log(chalk.bold(' ๐Ÿ“‹ Skill Info'));
81
+ console.log(` Name: ${chalk.cyan(name)}`);
82
+ console.log(` Description: ${chalk.gray(description)}`);
83
+ console.log(` Tokens: ${chalk.yellow(String(tokens))}`);
84
+ console.log(` Lines: ${chalk.gray(String(lines))}`);
85
+ console.log('');
86
+ // 2. Quality scoring
87
+ const qualitySpinner = ora(' Running quality checks...').start();
88
+ try {
89
+ const { testSkill } = await import('../../core/skill-tester.js');
90
+ const testResult = await testSkill(skillPath);
91
+ qualitySpinner.stop();
92
+ console.log(chalk.bold(' ๐Ÿงช Quality Score'));
93
+ const passRate = testResult.passRate;
94
+ const grade = passRate >= 90 ? chalk.green('A') :
95
+ passRate >= 80 ? chalk.green('B') :
96
+ passRate >= 70 ? chalk.yellow('C') :
97
+ passRate >= 60 ? chalk.yellow('D') :
98
+ chalk.red('F');
99
+ console.log(` Grade: ${grade} (${passRate}%)`);
100
+ // Show failed checks
101
+ const failures = testResult.assertions.filter(a => !a.passed);
102
+ if (failures.length > 0) {
103
+ console.log(` Issues:`);
104
+ for (const f of failures) {
105
+ console.log(` ${chalk.red('โœ—')} ${f.name}: ${chalk.gray(f.message || '')}`);
106
+ }
107
+ }
108
+ console.log('');
109
+ }
110
+ catch {
111
+ qualitySpinner.stop();
112
+ console.log(chalk.gray(' Quality check unavailable.\n'));
113
+ }
114
+ // 3. Conflict check against installed skills
115
+ const conflictSpinner = ora(' Checking for conflicts...').start();
116
+ try {
117
+ const home = homedir();
118
+ const skillsDir = join(home, '.antigravity', 'skills');
119
+ const existingPaths = [];
120
+ if (existsSync(skillsDir)) {
121
+ const entries = await readdir(skillsDir, { withFileTypes: true });
122
+ for (const entry of entries) {
123
+ if (entry.isDirectory() && existsSync(join(skillsDir, entry.name, 'SKILL.md'))) {
124
+ existingPaths.push(join(skillsDir, entry.name));
125
+ }
126
+ }
127
+ }
128
+ if (existingPaths.length > 0) {
129
+ const { detectConflicts } = await import('../../core/conflict-detector.js');
130
+ const result = await detectConflicts([...existingPaths, skillPath]);
131
+ conflictSpinner.stop();
132
+ console.log(chalk.bold(' โš”๏ธ Conflict Analysis'));
133
+ if (result.conflicts.length === 0 && result.overlaps.length === 0) {
134
+ console.log(chalk.green(' โœ“ No conflicts with installed skills.'));
135
+ }
136
+ else {
137
+ if (result.conflicts.length > 0) {
138
+ console.log(chalk.red(` ${result.conflicts.length} conflict(s) found:`));
139
+ for (const c of result.conflicts.slice(0, 3)) {
140
+ console.log(` ${chalk.red('โœ—')} ${c.description}`);
141
+ }
142
+ }
143
+ if (result.overlaps.length > 0) {
144
+ console.log(chalk.yellow(` ${result.overlaps.length} overlap(s) found (~${result.summary.estimatedTokenWaste} wasted tokens)`));
145
+ }
146
+ }
147
+ }
148
+ else {
149
+ conflictSpinner.stop();
150
+ console.log(chalk.bold(' โš”๏ธ Conflict Analysis'));
151
+ console.log(chalk.green(' โœ“ No installed skills to conflict with.'));
152
+ }
153
+ console.log('');
154
+ }
155
+ catch {
156
+ conflictSpinner.stop();
157
+ console.log(chalk.gray(' Conflict check unavailable.\n'));
158
+ }
159
+ // 4. Verdict
160
+ console.log(chalk.bold(' ๐Ÿ“Š Verdict'));
161
+ console.log(` This skill would consume ${chalk.yellow(`~${tokens} tokens`)} of your context budget.`);
162
+ console.log(chalk.gray(' Use `skills install` to proceed with installation.\n'));
163
+ // Cleanup
164
+ if (isTemp) {
165
+ await rm(tempDir, { recursive: true, force: true }).catch(() => { });
166
+ }
167
+ }
168
+ catch (error) {
169
+ console.error(chalk.red('Error:'), error.message || error);
170
+ process.exit(1);
171
+ }
172
+ });
173
+ }
174
+ //# sourceMappingURL=sandbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../../../src/cli/commands/sandbox.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Split Command
3
+ * Split a large skill into focused sub-skills.
4
+ */
5
+ import { Command } from 'commander';
6
+ export declare function registerSplitCommand(program: Command): void;
7
+ //# sourceMappingURL=split.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"split.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/split.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,QAoFpD"}
@@ -0,0 +1,80 @@
1
+ import chalk from 'chalk';
2
+ import ora from 'ora';
3
+ export function registerSplitCommand(program) {
4
+ program
5
+ .command('split <skill>')
6
+ .description('Split a large skill into focused sub-skills by topic')
7
+ .option('-m, --min-sections <n>', 'Minimum sections per sub-skill (default: 2)', parseInt)
8
+ .option('--save <dir>', 'Save sub-skills to directory')
9
+ .option('--dry-run', 'Only preview the split, do not save')
10
+ .option('--json', 'Output as JSON')
11
+ .action(async (skill, options) => {
12
+ try {
13
+ const { existsSync } = await import('fs');
14
+ const { mkdir, writeFile } = await import('fs/promises');
15
+ const { homedir } = await import('os');
16
+ const { join } = await import('path');
17
+ const { splitSkill } = await import('../../core/splitter.js');
18
+ const home = homedir();
19
+ const skillsDir = join(home, '.antigravity', 'skills');
20
+ // Resolve skill path
21
+ let skillPath = skill;
22
+ if (!existsSync(skillPath) && !existsSync(join(skillPath, 'SKILL.md'))) {
23
+ // Try global
24
+ const globalPath = join(skillsDir, skill);
25
+ if (existsSync(join(globalPath, 'SKILL.md'))) {
26
+ skillPath = globalPath;
27
+ }
28
+ else {
29
+ console.error(chalk.red(` โœ— Skill not found: ${skill}\n`));
30
+ return;
31
+ }
32
+ }
33
+ const spinner = ora('Analyzing skill for splitting...').start();
34
+ const result = await splitSkill(skillPath, options.minSections || 2);
35
+ spinner.stop();
36
+ if (options.json) {
37
+ console.log(JSON.stringify(result, null, 2));
38
+ return;
39
+ }
40
+ console.log(chalk.bold(`\nโœ‚๏ธ Skill Splitter: ${chalk.cyan(result.originalName)}\n`));
41
+ console.log(chalk.gray(` Original: ${result.originalTokens} tokens`));
42
+ console.log('');
43
+ if (!result.worthSplitting) {
44
+ console.log(chalk.yellow(` โš  Not worth splitting: ${result.reason}\n`));
45
+ return;
46
+ }
47
+ console.log(chalk.green(` Can be split into ${result.skills.length} sub-skills:\n`));
48
+ for (const sub of result.skills) {
49
+ console.log(` ๐Ÿ“ฆ ${chalk.bold(sub.name)} ${chalk.gray(`(${sub.tokens} tokens)`)}`);
50
+ console.log(` Sections: ${sub.headings.join(', ')}`);
51
+ console.log('');
52
+ }
53
+ const totalTokens = result.skills.reduce((s, sk) => s + sk.tokens, 0);
54
+ const savings = result.originalTokens - totalTokens;
55
+ console.log(chalk.bold(' Summary:'));
56
+ console.log(` Original: ${chalk.yellow(String(result.originalTokens))} tokens`);
57
+ console.log(` After split: ${chalk.green(String(totalTokens))} tokens total`);
58
+ if (savings > 0) {
59
+ console.log(` Overhead: ${chalk.gray(`+${savings} tokens from frontmatter duplication`)}`);
60
+ }
61
+ console.log('');
62
+ // Save if not dry run
63
+ if (!options.dryRun && (options.save || !options.dryRun)) {
64
+ const saveDir = options.save || skillsDir;
65
+ for (const sub of result.skills) {
66
+ const subDir = join(saveDir, sub.name);
67
+ await mkdir(subDir, { recursive: true });
68
+ await writeFile(join(subDir, 'SKILL.md'), sub.fullContent);
69
+ console.log(` ${chalk.green('โœ“')} Saved ${chalk.bold(sub.name)} โ†’ ${chalk.gray(join(subDir, 'SKILL.md'))}`);
70
+ }
71
+ console.log('');
72
+ }
73
+ }
74
+ catch (error) {
75
+ console.error(chalk.red('Error:'), error.message || error);
76
+ process.exit(1);
77
+ }
78
+ });
79
+ }
80
+ //# sourceMappingURL=split.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"split.js","sourceRoot":"","sources":["../../../src/cli/commands/split.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Test Command
3
+ * Run assertions and quality checks against installed skills.
4
+ */
5
+ import { Command } from 'commander';
6
+ export declare function registerTestCommand(program: Command): void;
7
+ //# sourceMappingURL=test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/test.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,QA8HnD"}
@@ -0,0 +1,121 @@
1
+ import chalk from 'chalk';
2
+ import ora from 'ora';
3
+ export function registerTestCommand(program) {
4
+ program
5
+ .command('test [skills...]')
6
+ .description('Run quality tests and assertions against skills')
7
+ .option('-a, --all', 'Test all installed skills')
8
+ .option('--json', 'Output results as JSON')
9
+ .option('-v, --verbose', 'Show all assertions (not just failures)')
10
+ .action(async (skills, options) => {
11
+ try {
12
+ const { existsSync } = await import('fs');
13
+ const { readdir } = await import('fs/promises');
14
+ const { homedir } = await import('os');
15
+ const { join } = await import('path');
16
+ const { testSkill, testSkills } = await import('../../core/skill-tester.js');
17
+ const home = homedir();
18
+ const skillsDir = join(home, '.antigravity', 'skills');
19
+ let skillPaths = [];
20
+ if (options.all) {
21
+ // Test all installed skills
22
+ if (existsSync(skillsDir)) {
23
+ const entries = await readdir(skillsDir, { withFileTypes: true });
24
+ for (const entry of entries) {
25
+ if (entry.isDirectory()) {
26
+ skillPaths.push(join(skillsDir, entry.name));
27
+ }
28
+ }
29
+ }
30
+ }
31
+ else if (skills.length > 0) {
32
+ for (const skill of skills) {
33
+ // Try as path
34
+ if (existsSync(skill)) {
35
+ skillPaths.push(skill);
36
+ continue;
37
+ }
38
+ // Try as name in global
39
+ const globalPath = join(skillsDir, skill);
40
+ if (existsSync(globalPath)) {
41
+ skillPaths.push(globalPath);
42
+ continue;
43
+ }
44
+ // Try project dir
45
+ const projectPath = join(process.cwd(), '.claude', 'skills', skill);
46
+ if (existsSync(projectPath)) {
47
+ skillPaths.push(projectPath);
48
+ continue;
49
+ }
50
+ console.error(chalk.red(` โœ— Skill not found: ${skill}`));
51
+ }
52
+ }
53
+ else {
54
+ // Try project-level skills
55
+ const projectSkills = join(process.cwd(), '.claude', 'skills');
56
+ if (existsSync(projectSkills)) {
57
+ const entries = await readdir(projectSkills, { withFileTypes: true });
58
+ for (const entry of entries) {
59
+ if (entry.isDirectory()) {
60
+ skillPaths.push(join(projectSkills, entry.name));
61
+ }
62
+ }
63
+ }
64
+ if (skillPaths.length === 0) {
65
+ console.log(chalk.yellow('\n No skills specified. Use --all or provide skill names.\n'));
66
+ return;
67
+ }
68
+ }
69
+ if (skillPaths.length === 0) {
70
+ console.log(chalk.yellow('\n No skills found to test.\n'));
71
+ return;
72
+ }
73
+ const spinner = ora(`Testing ${skillPaths.length} skill(s)...`).start();
74
+ const results = await testSkills(skillPaths);
75
+ spinner.stop();
76
+ if (options.json) {
77
+ console.log(JSON.stringify(results, null, 2));
78
+ return;
79
+ }
80
+ console.log(chalk.bold(`\n๐Ÿงช Skill Test Results\n`));
81
+ let totalPassed = 0;
82
+ let totalFailed = 0;
83
+ for (const result of results) {
84
+ const icon = result.passed ? chalk.green('โœ“') : chalk.red('โœ—');
85
+ const rate = result.passRate >= 80
86
+ ? chalk.green(`${result.passRate}%`)
87
+ : result.passRate >= 60
88
+ ? chalk.yellow(`${result.passRate}%`)
89
+ : chalk.red(`${result.passRate}%`);
90
+ console.log(` ${icon} ${chalk.bold(result.skillName)} ${rate} ${chalk.gray(`(${result.duration}ms)`)}`);
91
+ if (options.verbose || !result.passed) {
92
+ for (const assertion of result.assertions) {
93
+ if (options.verbose || !assertion.passed) {
94
+ const aIcon = assertion.passed ? chalk.green(' โœ“') : chalk.red(' โœ—');
95
+ const msg = assertion.passed
96
+ ? chalk.gray(assertion.name)
97
+ : `${chalk.red(assertion.name)}: ${chalk.gray(assertion.message || '')}`;
98
+ console.log(` ${aIcon} ${msg}`);
99
+ }
100
+ }
101
+ }
102
+ if (result.passed)
103
+ totalPassed++;
104
+ else
105
+ totalFailed++;
106
+ }
107
+ console.log('');
108
+ console.log(chalk.bold(' Summary:'));
109
+ console.log(` ${chalk.green(`${totalPassed} passed`)} / ${chalk.red(`${totalFailed} failed`)} / ${results.length} total`);
110
+ console.log('');
111
+ if (totalFailed > 0) {
112
+ process.exit(1);
113
+ }
114
+ }
115
+ catch (error) {
116
+ console.error(chalk.red('Error:'), error.message || error);
117
+ process.exit(1);
118
+ }
119
+ });
120
+ }
121
+ //# sourceMappingURL=test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../../../src/cli/commands/test.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AAEtB,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAChD,OAAO;SACF,OAAO,CAAC,kBAAkB,CAAC;SAC3B,WAAW,CAAC,iDAAiD,CAAC;SAC9D,MAAM,CAAC,WAAW,EAAE,2BAA2B,CAAC;SAChD,MAAM,CAAC,QAAQ,EAAE,wBAAwB,CAAC;SAC1C,MAAM,CAAC,eAAe,EAAE,yCAAyC,CAAC;SAClE,MAAM,CAAC,KAAK,EAAE,MAAgB,EAAE,OAAY,EAAE,EAAE;QAC7C,IAAI,CAAC;YACD,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;YAC1C,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;YAChD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;YACvC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;YACtC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,4BAA4B,CAAC,CAAC;YAE7E,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;YACvB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;YAEvD,IAAI,UAAU,GAAa,EAAE,CAAC;YAE9B,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;gBACd,4BAA4B;gBAC5B,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;oBACxB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;oBAClE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;wBAC1B,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;4BACtB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;wBACjD,CAAC;oBACL,CAAC;gBACL,CAAC;YACL,CAAC;iBAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBACzB,cAAc;oBACd,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;wBACpB,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBACvB,SAAS;oBACb,CAAC;oBACD,wBAAwB;oBACxB,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;oBAC1C,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;wBACzB,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;wBAC5B,SAAS;oBACb,CAAC;oBACD,kBAAkB;oBAClB,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;oBACpE,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;wBAC1B,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;wBAC7B,SAAS;oBACb,CAAC;oBACD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,wBAAwB,KAAK,EAAE,CAAC,CAAC,CAAC;gBAC9D,CAAC;YACL,CAAC;iBAAM,CAAC;gBACJ,2BAA2B;gBAC3B,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;gBAC/D,IAAI,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;oBAC5B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,aAAa,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;oBACtE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;wBAC1B,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;4BACtB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;wBACrD,CAAC;oBACL,CAAC;gBACL,CAAC;gBACD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,8DAA8D,CAAC,CAAC,CAAC;oBAC1F,OAAO;gBACX,CAAC;YACL,CAAC;YAED,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,gCAAgC,CAAC,CAAC,CAAC;gBAC5D,OAAO;YACX,CAAC;YAED,MAAM,OAAO,GAAG,GAAG,CAAC,WAAW,UAAU,CAAC,MAAM,cAAc,CAAC,CAAC,KAAK,EAAE,CAAC;YACxE,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC;YAC7C,OAAO,CAAC,IAAI,EAAE,CAAC;YAEf,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC9C,OAAO;YACX,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;YAErD,IAAI,WAAW,GAAG,CAAC,CAAC;YACpB,IAAI,WAAW,GAAG,CAAC,CAAC;YAEpB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC3B,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC/D,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE;oBAC9B,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,QAAQ,GAAG,CAAC;oBACpC,CAAC,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE;wBACnB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,GAAG,CAAC;wBACrC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC;gBAE3C,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC,CAAC;gBAEzG,IAAI,OAAO,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;oBACpC,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;wBACxC,IAAI,OAAO,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;4BACvC,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;4BACvE,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM;gCACxB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gCAC5B,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;4BAC7E,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC;wBACvC,CAAC;oBACL,CAAC;gBACL,CAAC;gBAED,IAAI,MAAM,CAAC,MAAM;oBAAE,WAAW,EAAE,CAAC;;oBAC5B,WAAW,EAAE,CAAC;YACvB,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,WAAW,SAAS,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,WAAW,SAAS,CAAC,MAAM,OAAO,CAAC,MAAM,QAAQ,CAAC,CAAC;YAC7H,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAEhB,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;gBAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACpB,CAAC;QACL,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC;YAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC,CAAC,CAAC;AACX,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils-commands.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/utils-commands.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,QAwIrD;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,QAgEpD;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,QA+JrD;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,QA+DnD"}
1
+ {"version":3,"file":"utils-commands.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/utils-commands.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,QA4MrD;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,QAgEpD;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,QA+JrD;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,QA+DnD"}