@skillsmith/cli 0.4.3 → 0.5.1

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 (117) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/src/commands/audit.d.ts +19 -0
  3. package/dist/src/commands/audit.d.ts.map +1 -0
  4. package/dist/src/commands/audit.js +134 -0
  5. package/dist/src/commands/audit.js.map +1 -0
  6. package/dist/src/commands/audit.test.d.ts +8 -0
  7. package/dist/src/commands/audit.test.d.ts.map +1 -0
  8. package/dist/src/commands/audit.test.js +97 -0
  9. package/dist/src/commands/audit.test.js.map +1 -0
  10. package/dist/src/commands/author/init.d.ts.map +1 -1
  11. package/dist/src/commands/author/init.js +4 -9
  12. package/dist/src/commands/author/init.js.map +1 -1
  13. package/dist/src/commands/create.d.ts +42 -0
  14. package/dist/src/commands/create.d.ts.map +1 -0
  15. package/dist/src/commands/create.js +325 -0
  16. package/dist/src/commands/create.js.map +1 -0
  17. package/dist/src/commands/diff.d.ts +17 -0
  18. package/dist/src/commands/diff.d.ts.map +1 -0
  19. package/dist/src/commands/diff.js +191 -0
  20. package/dist/src/commands/diff.js.map +1 -0
  21. package/dist/src/commands/diff.test.d.ts +6 -0
  22. package/dist/src/commands/diff.test.d.ts.map +1 -0
  23. package/dist/src/commands/diff.test.js +275 -0
  24. package/dist/src/commands/diff.test.js.map +1 -0
  25. package/dist/src/commands/index.d.ts +5 -0
  26. package/dist/src/commands/index.d.ts.map +1 -1
  27. package/dist/src/commands/index.js +10 -1
  28. package/dist/src/commands/index.js.map +1 -1
  29. package/dist/src/commands/install-skill.d.ts.map +1 -1
  30. package/dist/src/commands/install-skill.js +10 -3
  31. package/dist/src/commands/install-skill.js.map +1 -1
  32. package/dist/src/commands/install.d.ts +13 -0
  33. package/dist/src/commands/install.d.ts.map +1 -0
  34. package/dist/src/commands/install.js +213 -0
  35. package/dist/src/commands/install.js.map +1 -0
  36. package/dist/src/commands/manage.d.ts.map +1 -1
  37. package/dist/src/commands/manage.js +71 -27
  38. package/dist/src/commands/manage.js.map +1 -1
  39. package/dist/src/commands/pin.d.ts +24 -0
  40. package/dist/src/commands/pin.d.ts.map +1 -0
  41. package/dist/src/commands/pin.js +123 -0
  42. package/dist/src/commands/pin.js.map +1 -0
  43. package/dist/src/commands/pin.test.d.ts +6 -0
  44. package/dist/src/commands/pin.test.d.ts.map +1 -0
  45. package/dist/src/commands/pin.test.js +206 -0
  46. package/dist/src/commands/pin.test.js.map +1 -0
  47. package/dist/src/commands/search.d.ts.map +1 -1
  48. package/dist/src/commands/search.js +43 -3
  49. package/dist/src/commands/search.js.map +1 -1
  50. package/dist/src/commands/sync.d.ts.map +1 -1
  51. package/dist/src/commands/sync.js +3 -2
  52. package/dist/src/commands/sync.js.map +1 -1
  53. package/dist/src/index.d.ts +2 -1
  54. package/dist/src/index.d.ts.map +1 -1
  55. package/dist/src/index.js +16 -3
  56. package/dist/src/index.js.map +1 -1
  57. package/dist/src/templates/changelog.md.template.d.ts +8 -0
  58. package/dist/src/templates/changelog.md.template.d.ts.map +1 -0
  59. package/dist/src/templates/changelog.md.template.js +19 -0
  60. package/dist/src/templates/changelog.md.template.js.map +1 -0
  61. package/dist/src/templates/index.d.ts +1 -0
  62. package/dist/src/templates/index.d.ts.map +1 -1
  63. package/dist/src/templates/index.js +1 -0
  64. package/dist/src/templates/index.js.map +1 -1
  65. package/dist/src/templates/readme.md.template.d.ts +1 -1
  66. package/dist/src/templates/readme.md.template.d.ts.map +1 -1
  67. package/dist/src/templates/readme.md.template.js +1 -1
  68. package/dist/src/templates/skill.md.template.d.ts +1 -1
  69. package/dist/src/templates/skill.md.template.d.ts.map +1 -1
  70. package/dist/src/templates/skill.md.template.js +2 -4
  71. package/dist/src/templates/skill.md.template.js.map +1 -1
  72. package/dist/src/utils/license-validation.js +1 -1
  73. package/dist/src/utils/license-validation.js.map +1 -1
  74. package/dist/src/utils/manifest.d.ts +46 -0
  75. package/dist/src/utils/manifest.d.ts.map +1 -0
  76. package/dist/src/utils/manifest.js +55 -0
  77. package/dist/src/utils/manifest.js.map +1 -0
  78. package/dist/src/utils/skill-name.d.ts +19 -0
  79. package/dist/src/utils/skill-name.d.ts.map +1 -0
  80. package/dist/src/utils/skill-name.js +26 -0
  81. package/dist/src/utils/skill-name.js.map +1 -0
  82. package/dist/src/utils/skills-directory.d.ts +12 -3
  83. package/dist/src/utils/skills-directory.d.ts.map +1 -1
  84. package/dist/src/utils/skills-directory.js +63 -7
  85. package/dist/src/utils/skills-directory.js.map +1 -1
  86. package/dist/tests/create.test.d.ts +5 -0
  87. package/dist/tests/create.test.d.ts.map +1 -0
  88. package/dist/tests/create.test.js +449 -0
  89. package/dist/tests/create.test.js.map +1 -0
  90. package/dist/tests/install-skill.test.js +9 -4
  91. package/dist/tests/install-skill.test.js.map +1 -1
  92. package/dist/tests/license-validation.test.d.ts +8 -0
  93. package/dist/tests/license-validation.test.d.ts.map +1 -0
  94. package/dist/tests/license-validation.test.js +186 -0
  95. package/dist/tests/license-validation.test.js.map +1 -0
  96. package/dist/tests/manage.test.js +84 -0
  97. package/dist/tests/manage.test.js.map +1 -1
  98. package/dist/tests/recommend-helpers.test.d.ts +9 -0
  99. package/dist/tests/recommend-helpers.test.d.ts.map +1 -0
  100. package/dist/tests/recommend-helpers.test.js +308 -0
  101. package/dist/tests/recommend-helpers.test.js.map +1 -0
  102. package/dist/tests/recommend-scoring.test.d.ts +8 -0
  103. package/dist/tests/recommend-scoring.test.d.ts.map +1 -0
  104. package/dist/tests/recommend-scoring.test.js +184 -0
  105. package/dist/tests/recommend-scoring.test.js.map +1 -0
  106. package/dist/tests/tool-analyzer.test.d.ts +8 -0
  107. package/dist/tests/tool-analyzer.test.d.ts.map +1 -0
  108. package/dist/tests/tool-analyzer.test.js +149 -0
  109. package/dist/tests/tool-analyzer.test.js.map +1 -0
  110. package/dist/tests/unit/commands/install.test.d.ts +7 -0
  111. package/dist/tests/unit/commands/install.test.d.ts.map +1 -0
  112. package/dist/tests/unit/commands/install.test.js +407 -0
  113. package/dist/tests/unit/commands/install.test.js.map +1 -0
  114. package/dist/vitest.config.d.ts.map +1 -1
  115. package/dist/vitest.config.js +9 -3
  116. package/dist/vitest.config.js.map +1 -1
  117. package/package.json +4 -3
@@ -0,0 +1,275 @@
1
+ /**
2
+ * @fileoverview Tests for diff.ts — skillsmith diff CLI command
3
+ * @see SMI-skill-version-tracking Wave 2
4
+ */
5
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
6
+ // ============================================================================
7
+ // Module mocks — must be declared before imports that use them
8
+ // ============================================================================
9
+ vi.mock('../utils/require-tier.js', () => ({
10
+ requireTier: vi.fn().mockResolvedValue(undefined),
11
+ }));
12
+ vi.mock('../utils/sanitize.js', () => ({
13
+ sanitizeError: (e) => (e instanceof Error ? e.message : String(e)),
14
+ }));
15
+ const mockLoadManifest = vi.fn();
16
+ vi.mock('../utils/manifest.js', () => ({
17
+ loadManifest: () => mockLoadManifest(),
18
+ }));
19
+ const mockClassifyChange = vi.fn();
20
+ vi.mock('@skillsmith/core', () => ({
21
+ classifyChange: (...args) => mockClassifyChange(...args),
22
+ }));
23
+ // readFile is used for --old-content / --new-content file overrides
24
+ const mockReadFile = vi.fn();
25
+ vi.mock('fs/promises', () => ({
26
+ readFile: (...args) => mockReadFile(...args),
27
+ }));
28
+ // fetch is used for remote registry content
29
+ const mockFetch = vi.fn();
30
+ vi.stubGlobal('fetch', mockFetch);
31
+ // ============================================================================
32
+ // Import after mocks
33
+ // ============================================================================
34
+ import { createDiffCommand } from './diff.js';
35
+ // ============================================================================
36
+ // Fixtures
37
+ // ============================================================================
38
+ const OLD_CONTENT = `---
39
+ name: test-skill
40
+ version: 1.0.0
41
+ ---
42
+
43
+ ## Overview
44
+
45
+ A test skill.
46
+
47
+ ## Usage
48
+
49
+ Run with /test.
50
+ `;
51
+ const NEW_CONTENT_MINOR = `---
52
+ name: test-skill
53
+ version: 1.1.0
54
+ ---
55
+
56
+ ## Overview
57
+
58
+ A test skill.
59
+
60
+ ## Usage
61
+
62
+ Run with /test.
63
+
64
+ ## Examples
65
+
66
+ Here are examples.
67
+ `;
68
+ const NEW_CONTENT_PATCH = `---
69
+ name: test-skill
70
+ version: 1.0.1
71
+ ---
72
+
73
+ ## Overview
74
+
75
+ An updated test skill.
76
+
77
+ ## Usage
78
+
79
+ Run with /test now.
80
+ `;
81
+ function buildManifest(sourceUrl = 'https://github.com/anthropic/test-skill') {
82
+ return {
83
+ version: '1.0.0',
84
+ installedSkills: {
85
+ 'test-skill': {
86
+ id: 'anthropic/test-skill',
87
+ name: 'test-skill',
88
+ version: '1.0.0',
89
+ source: sourceUrl,
90
+ installPath: '/home/user/.claude/skills/test-skill',
91
+ installedAt: '2024-01-01T00:00:00.000Z',
92
+ lastUpdated: '2024-01-01T00:00:00.000Z',
93
+ },
94
+ },
95
+ };
96
+ }
97
+ /**
98
+ * Run a commander command programmatically with the given argv.
99
+ * Captures console output and process.exit calls.
100
+ */
101
+ async function runCommand(cmd, argv) {
102
+ const output = [];
103
+ const exitCode = { value: null };
104
+ const consoleSpy = vi.spyOn(console, 'log').mockImplementation((...args) => {
105
+ output.push(args.join(' '));
106
+ });
107
+ const errorSpy = vi.spyOn(console, 'error').mockImplementation((...args) => {
108
+ output.push(args.join(' '));
109
+ });
110
+ const exitSpy = vi.spyOn(process, 'exit').mockImplementation((code) => {
111
+ exitCode.value = typeof code === 'number' ? code : null;
112
+ throw new Error(`process.exit(${code})`);
113
+ });
114
+ try {
115
+ await cmd.parseAsync(['node', 'test', ...argv]);
116
+ }
117
+ catch (e) {
118
+ const msg = e instanceof Error ? e.message : String(e);
119
+ if (!msg.startsWith('process.exit'))
120
+ throw e;
121
+ }
122
+ finally {
123
+ consoleSpy.mockRestore();
124
+ errorSpy.mockRestore();
125
+ exitSpy.mockRestore();
126
+ }
127
+ return { exitCode: exitCode.value, consoleOutput: output };
128
+ }
129
+ // ============================================================================
130
+ // Tests
131
+ // ============================================================================
132
+ describe('createDiffCommand', () => {
133
+ beforeEach(() => {
134
+ vi.clearAllMocks();
135
+ mockClassifyChange.mockReturnValue('minor');
136
+ });
137
+ afterEach(() => {
138
+ vi.clearAllMocks();
139
+ });
140
+ describe('content resolution — remote fetch path', () => {
141
+ it('fetches latest content from registry and displays diff', async () => {
142
+ mockLoadManifest.mockResolvedValue(buildManifest());
143
+ mockReadFile.mockResolvedValue(OLD_CONTENT);
144
+ mockFetch.mockResolvedValue({
145
+ ok: true,
146
+ text: () => Promise.resolve(NEW_CONTENT_MINOR),
147
+ });
148
+ const cmd = createDiffCommand();
149
+ const { exitCode, consoleOutput } = await runCommand(cmd, [
150
+ 'test-skill',
151
+ '--old-content',
152
+ '/tmp/old-skill.md',
153
+ ]);
154
+ expect(exitCode).toBeNull();
155
+ expect(mockFetch).toHaveBeenCalledOnce();
156
+ expect(consoleOutput.join('\n')).toContain('MINOR');
157
+ });
158
+ it('exits with error when installed skill SKILL.md is not found', async () => {
159
+ // No --old-content flag, no installed skill file
160
+ mockLoadManifest.mockResolvedValue(buildManifest());
161
+ // readFile throws (file not found)
162
+ mockReadFile.mockRejectedValue(new Error('ENOENT'));
163
+ const cmd = createDiffCommand();
164
+ const { exitCode } = await runCommand(cmd, ['nonexistent-skill']);
165
+ // readInstalledSkillContent returns null on error, causing exit(1)
166
+ expect(exitCode).toBe(1);
167
+ });
168
+ it('exits with error when remote fetch fails', async () => {
169
+ mockLoadManifest.mockResolvedValue(buildManifest());
170
+ mockReadFile.mockResolvedValue(OLD_CONTENT);
171
+ mockFetch.mockResolvedValue({ ok: false });
172
+ const cmd = createDiffCommand();
173
+ const { exitCode } = await runCommand(cmd, [
174
+ 'test-skill',
175
+ '--old-content',
176
+ '/tmp/old-skill.md',
177
+ ]);
178
+ expect(exitCode).toBe(1);
179
+ });
180
+ it('exits with error when manifest has no source URL', async () => {
181
+ const manifest = {
182
+ version: '1.0.0',
183
+ installedSkills: {
184
+ 'no-source': {
185
+ id: 'test/no-source',
186
+ name: 'no-source',
187
+ version: '1.0.0',
188
+ source: '',
189
+ installPath: '/home/user/.claude/skills/no-source',
190
+ installedAt: '2024-01-01T00:00:00.000Z',
191
+ lastUpdated: '2024-01-01T00:00:00.000Z',
192
+ },
193
+ },
194
+ };
195
+ mockLoadManifest.mockResolvedValue(manifest);
196
+ mockReadFile.mockResolvedValue(OLD_CONTENT);
197
+ const cmd = createDiffCommand();
198
+ const { exitCode } = await runCommand(cmd, [
199
+ 'no-source',
200
+ '--old-content',
201
+ '/tmp/old-skill.md',
202
+ ]);
203
+ expect(exitCode).toBe(1);
204
+ });
205
+ });
206
+ describe('content resolution — file override path', () => {
207
+ it('uses --old-content and --new-content file overrides when provided', async () => {
208
+ mockReadFile.mockResolvedValueOnce(OLD_CONTENT).mockResolvedValueOnce(NEW_CONTENT_PATCH);
209
+ mockClassifyChange.mockReturnValue('patch');
210
+ const cmd = createDiffCommand();
211
+ const { exitCode, consoleOutput } = await runCommand(cmd, [
212
+ 'test-skill',
213
+ '--old-content',
214
+ '/tmp/old.md',
215
+ '--new-content',
216
+ '/tmp/new.md',
217
+ ]);
218
+ expect(exitCode).toBeNull();
219
+ // fetch should NOT be called when --new-content is provided
220
+ expect(mockFetch).not.toHaveBeenCalled();
221
+ expect(consoleOutput.join('\n')).toContain('PATCH');
222
+ });
223
+ });
224
+ describe('URL conversion — buildRawUrl', () => {
225
+ it('converts github.com URL to raw.githubusercontent.com', async () => {
226
+ mockLoadManifest.mockResolvedValue(buildManifest('https://github.com/anthropic/test-skill'));
227
+ mockReadFile.mockResolvedValue(OLD_CONTENT);
228
+ mockFetch.mockResolvedValue({
229
+ ok: true,
230
+ text: () => Promise.resolve(NEW_CONTENT_MINOR),
231
+ });
232
+ const cmd = createDiffCommand();
233
+ await runCommand(cmd, ['test-skill', '--old-content', '/tmp/old.md']);
234
+ expect(mockFetch).toHaveBeenCalledWith('https://raw.githubusercontent.com/anthropic/test-skill/main/SKILL.md', expect.objectContaining({ headers: { Accept: 'text/plain' } }));
235
+ });
236
+ it('passes raw.githubusercontent.com URLs through unchanged', async () => {
237
+ const rawUrl = 'https://raw.githubusercontent.com/anthropic/test-skill/main/SKILL.md';
238
+ mockLoadManifest.mockResolvedValue(buildManifest(rawUrl));
239
+ mockReadFile.mockResolvedValue(OLD_CONTENT);
240
+ mockFetch.mockResolvedValue({
241
+ ok: true,
242
+ text: () => Promise.resolve(NEW_CONTENT_MINOR),
243
+ });
244
+ const cmd = createDiffCommand();
245
+ await runCommand(cmd, ['test-skill', '--old-content', '/tmp/old.md']);
246
+ expect(mockFetch).toHaveBeenCalledWith(rawUrl, expect.any(Object));
247
+ });
248
+ it('exits with error for non-GitHub source URLs', async () => {
249
+ mockLoadManifest.mockResolvedValue(buildManifest('https://gitlab.com/anthropic/test-skill'));
250
+ mockReadFile.mockResolvedValue(OLD_CONTENT);
251
+ const cmd = createDiffCommand();
252
+ const { exitCode } = await runCommand(cmd, ['test-skill', '--old-content', '/tmp/old.md']);
253
+ expect(exitCode).toBe(1);
254
+ });
255
+ });
256
+ describe('output formatting', () => {
257
+ it('includes change type label and skill name in output', async () => {
258
+ mockLoadManifest.mockResolvedValue(buildManifest());
259
+ mockReadFile.mockResolvedValueOnce(OLD_CONTENT).mockResolvedValueOnce(NEW_CONTENT_MINOR);
260
+ mockClassifyChange.mockReturnValue('minor');
261
+ const cmd = createDiffCommand();
262
+ const { consoleOutput } = await runCommand(cmd, [
263
+ 'test-skill',
264
+ '--old-content',
265
+ '/tmp/old.md',
266
+ '--new-content',
267
+ '/tmp/new.md',
268
+ ]);
269
+ const joined = consoleOutput.join('\n');
270
+ expect(joined).toContain('test-skill');
271
+ expect(joined).toContain('MINOR');
272
+ });
273
+ });
274
+ });
275
+ //# sourceMappingURL=diff.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff.test.js","sourceRoot":"","sources":["../../../src/commands/diff.test.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAGxE,+EAA+E;AAC/E,+DAA+D;AAC/D,+EAA+E;AAE/E,EAAE,CAAC,IAAI,CAAC,0BAA0B,EAAE,GAAG,EAAE,CAAC,CAAC;IACzC,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;CAClD,CAAC,CAAC,CAAA;AAEH,EAAE,CAAC,IAAI,CAAC,sBAAsB,EAAE,GAAG,EAAE,CAAC,CAAC;IACrC,aAAa,EAAE,CAAC,CAAU,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;CAC5E,CAAC,CAAC,CAAA;AAEH,MAAM,gBAAgB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAA;AAChC,EAAE,CAAC,IAAI,CAAC,sBAAsB,EAAE,GAAG,EAAE,CAAC,CAAC;IACrC,YAAY,EAAE,GAAG,EAAE,CAAC,gBAAgB,EAAE;CACvC,CAAC,CAAC,CAAA;AAEH,MAAM,kBAAkB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAA;AAClC,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAC,CAAC;IACjC,cAAc,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAAC;CACpE,CAAC,CAAC,CAAA;AAEH,oEAAoE;AACpE,MAAM,YAAY,GAAG,EAAE,CAAC,EAAE,EAAE,CAAA;AAC5B,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC;IAC5B,QAAQ,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;CACxD,CAAC,CAAC,CAAA;AAEH,4CAA4C;AAC5C,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,EAAE,CAAA;AACzB,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;AAEjC,+EAA+E;AAC/E,qBAAqB;AACrB,+EAA+E;AAE/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAE7C,+EAA+E;AAC/E,WAAW;AACX,+EAA+E;AAE/E,MAAM,WAAW,GAAG;;;;;;;;;;;;CAYnB,CAAA;AAED,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;CAgBzB,CAAA;AAED,MAAM,iBAAiB,GAAG;;;;;;;;;;;;CAYzB,CAAA;AAED,SAAS,aAAa,CAAC,SAAS,GAAG,yCAAyC;IAC1E,OAAO;QACL,OAAO,EAAE,OAAO;QAChB,eAAe,EAAE;YACf,YAAY,EAAE;gBACZ,EAAE,EAAE,sBAAsB;gBAC1B,IAAI,EAAE,YAAY;gBAClB,OAAO,EAAE,OAAO;gBAChB,MAAM,EAAE,SAAS;gBACjB,WAAW,EAAE,sCAAsC;gBACnD,WAAW,EAAE,0BAA0B;gBACvC,WAAW,EAAE,0BAA0B;aACxC;SACF;KACF,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,UAAU,CACvB,GAAY,EACZ,IAAc;IAEd,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,MAAM,QAAQ,GAA6B,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;IAE1D,MAAM,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE;QACzE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;IAC7B,CAAC,CAAC,CAAA;IACF,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE;QACzE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;IAC7B,CAAC,CAAC,CAAA;IACF,MAAM,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC,IAA6B,EAAE,EAAE;QAC7F,QAAQ,CAAC,KAAK,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA;QACvD,MAAM,IAAI,KAAK,CAAC,gBAAgB,IAAI,GAAG,CAAC,CAAA;IAC1C,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC;QACH,MAAM,GAAG,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAA;IACjD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QACtD,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,cAAc,CAAC;YAAE,MAAM,CAAC,CAAA;IAC9C,CAAC;YAAS,CAAC;QACT,UAAU,CAAC,WAAW,EAAE,CAAA;QACxB,QAAQ,CAAC,WAAW,EAAE,CAAA;QACtB,OAAO,CAAC,WAAW,EAAE,CAAA;IACvB,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,CAAA;AAC5D,CAAC;AAED,+EAA+E;AAC/E,QAAQ;AACR,+EAA+E;AAE/E,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,aAAa,EAAE,CAAA;QAClB,kBAAkB,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;IAC7C,CAAC,CAAC,CAAA;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,EAAE,CAAC,aAAa,EAAE,CAAA;IACpB,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,wCAAwC,EAAE,GAAG,EAAE;QACtD,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;YACtE,gBAAgB,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC,CAAA;YACnD,YAAY,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAA;YAC3C,SAAS,CAAC,iBAAiB,CAAC;gBAC1B,EAAE,EAAE,IAAI;gBACR,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC;aAC/C,CAAC,CAAA;YAEF,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAA;YAC/B,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE;gBACxD,YAAY;gBACZ,eAAe;gBACf,mBAAmB;aACpB,CAAC,CAAA;YAEF,MAAM,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAA;YAC3B,MAAM,CAAC,SAAS,CAAC,CAAC,oBAAoB,EAAE,CAAA;YACxC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;QACrD,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;YAC3E,iDAAiD;YACjD,gBAAgB,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC,CAAA;YACnD,mCAAmC;YACnC,YAAY,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAA;YAEnD,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAA;YAC/B,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAA;YACjE,mEAAmE;YACnE,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC1B,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;YACxD,gBAAgB,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC,CAAA;YACnD,YAAY,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAA;YAC3C,SAAS,CAAC,iBAAiB,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;YAE1C,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAA;YAC/B,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE;gBACzC,YAAY;gBACZ,eAAe;gBACf,mBAAmB;aACpB,CAAC,CAAA;YAEF,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC1B,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;YAChE,MAAM,QAAQ,GAAG;gBACf,OAAO,EAAE,OAAO;gBAChB,eAAe,EAAE;oBACf,WAAW,EAAE;wBACX,EAAE,EAAE,gBAAgB;wBACpB,IAAI,EAAE,WAAW;wBACjB,OAAO,EAAE,OAAO;wBAChB,MAAM,EAAE,EAAE;wBACV,WAAW,EAAE,qCAAqC;wBAClD,WAAW,EAAE,0BAA0B;wBACvC,WAAW,EAAE,0BAA0B;qBACxC;iBACF;aACF,CAAA;YACD,gBAAgB,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAA;YAC5C,YAAY,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAA;YAE3C,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAA;YAC/B,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE;gBACzC,WAAW;gBACX,eAAe;gBACf,mBAAmB;aACpB,CAAC,CAAA;YAEF,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC1B,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACvD,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;YACjF,YAAY,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,CAAA;YACxF,kBAAkB,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;YAE3C,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAA;YAC/B,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE;gBACxD,YAAY;gBACZ,eAAe;gBACf,aAAa;gBACb,eAAe;gBACf,aAAa;aACd,CAAC,CAAA;YAEF,MAAM,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAA;YAC3B,4DAA4D;YAC5D,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;YACxC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;QACrD,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;QAC5C,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;YACpE,gBAAgB,CAAC,iBAAiB,CAAC,aAAa,CAAC,yCAAyC,CAAC,CAAC,CAAA;YAC5F,YAAY,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAA;YAC3C,SAAS,CAAC,iBAAiB,CAAC;gBAC1B,EAAE,EAAE,IAAI;gBACR,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC;aAC/C,CAAC,CAAA;YAEF,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAA;YAC/B,MAAM,UAAU,CAAC,GAAG,EAAE,CAAC,YAAY,EAAE,eAAe,EAAE,aAAa,CAAC,CAAC,CAAA;YAErE,MAAM,CAAC,SAAS,CAAC,CAAC,oBAAoB,CACpC,sEAAsE,EACtE,MAAM,CAAC,gBAAgB,CAAC,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,CAAC,CAC/D,CAAA;QACH,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;YACvE,MAAM,MAAM,GAAG,sEAAsE,CAAA;YACrF,gBAAgB,CAAC,iBAAiB,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAA;YACzD,YAAY,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAA;YAC3C,SAAS,CAAC,iBAAiB,CAAC;gBAC1B,EAAE,EAAE,IAAI;gBACR,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC;aAC/C,CAAC,CAAA;YAEF,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAA;YAC/B,MAAM,UAAU,CAAC,GAAG,EAAE,CAAC,YAAY,EAAE,eAAe,EAAE,aAAa,CAAC,CAAC,CAAA;YAErE,MAAM,CAAC,SAAS,CAAC,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;QACpE,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;YAC3D,gBAAgB,CAAC,iBAAiB,CAAC,aAAa,CAAC,yCAAyC,CAAC,CAAC,CAAA;YAC5F,YAAY,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAA;YAE3C,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAA;YAC/B,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,CAAC,YAAY,EAAE,eAAe,EAAE,aAAa,CAAC,CAAC,CAAA;YAE1F,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC1B,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACjC,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;YACnE,gBAAgB,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC,CAAA;YACnD,YAAY,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,CAAA;YACxF,kBAAkB,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;YAE3C,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAA;YAC/B,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE;gBAC9C,YAAY;gBACZ,eAAe;gBACf,aAAa;gBACb,eAAe;gBACf,aAAa;aACd,CAAC,CAAA;YAEF,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACvC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAA;YACtC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;QACnC,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -10,8 +10,13 @@ export { createAnalyzeCommand } from './analyze.js';
10
10
  export { createRecommendCommand } from './recommend.js';
11
11
  export { createSyncCommand } from './sync.js';
12
12
  export { createMergeCommand } from './merge.js';
13
+ export { createInstallCommand } from './install.js';
13
14
  export { createInstallSkillCommand } from './install-skill.js';
14
15
  export { createLoginCommand } from './login.js';
15
16
  export { createLogoutCommand } from './logout.js';
16
17
  export { createWhoamiCommand } from './whoami.js';
18
+ export { createDiffCommand } from './diff.js';
19
+ export { createPinCommand, createUnpinCommand } from './pin.js';
20
+ export { createAuditCommand } from './audit.js';
21
+ export { createCreateCommand, createSkill, validateSkillName } from './create.js';
17
22
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAGjD,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAMzF,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,mBAAmB,CAAA;AAG1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAGnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AAGvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAG7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAG/C,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAA;AAG9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAGjD,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAMzF,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,mBAAmB,CAAA;AAG1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAGnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AAGvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAG7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAG/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAGnD,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAA;AAG9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAGjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAC7C,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAG/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAG/C,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA"}
@@ -20,10 +20,19 @@ export { createRecommendCommand } from './recommend.js';
20
20
  export { createSyncCommand } from './sync.js';
21
21
  // SMI-1455: Database Merge Command
22
22
  export { createMergeCommand } from './merge.js';
23
- // SMI-824: Install Skillsmith Skill Command
23
+ // SMI-3484: Install skill from registry/GitHub
24
+ export { createInstallCommand } from './install.js';
25
+ // SMI-824: Install Skillsmith Skill Command (renamed to 'setup')
24
26
  export { createInstallSkillCommand } from './install-skill.js';
25
27
  // SMI-2715: CLI Login Device Flow
26
28
  export { createLoginCommand } from './login.js';
27
29
  export { createLogoutCommand } from './logout.js';
28
30
  export { createWhoamiCommand } from './whoami.js';
31
+ // SMI-skill-version-tracking Wave 2: diff, pin, unpin
32
+ export { createDiffCommand } from './diff.js';
33
+ export { createPinCommand, createUnpinCommand } from './pin.js';
34
+ // SMI-skill-version-tracking Wave 3: Security Advisory Audit
35
+ export { createAuditCommand } from './audit.js';
36
+ // SMI-3083: Embedded skill scaffolding
37
+ export { createCreateCommand, createSkill, validateSkillName } from './create.js';
29
38
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,8BAA8B;AAC9B,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEjD,4BAA4B;AAC5B,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEzF,2BAA2B;AAC3B,0CAA0C;AAC1C,mCAAmC;AACnC,8CAA8C;AAC9C,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,mBAAmB,CAAA;AAE1B,8BAA8B;AAC9B,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAEnD,4BAA4B;AAC5B,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AAEvD,gBAAgB;AAChB,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAE7C,mCAAmC;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAE/C,4CAA4C;AAC5C,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAA;AAE9D,kCAAkC;AAClC,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,8BAA8B;AAC9B,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEjD,4BAA4B;AAC5B,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEzF,2BAA2B;AAC3B,0CAA0C;AAC1C,mCAAmC;AACnC,8CAA8C;AAC9C,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,mBAAmB,CAAA;AAE1B,8BAA8B;AAC9B,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAEnD,4BAA4B;AAC5B,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AAEvD,gBAAgB;AAChB,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAE7C,mCAAmC;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAE/C,+CAA+C;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAEnD,iEAAiE;AACjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAA;AAE9D,kCAAkC;AAClC,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEjD,sDAAsD;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAC7C,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAE/D,6DAA6D;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAE/C,uCAAuC;AACvC,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"install-skill.d.ts","sourceRoot":"","sources":["../../../src/commands/install-skill.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAqInC;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,OAAO,CAYnD;AAED,eAAe,yBAAyB,CAAA"}
1
+ {"version":3,"file":"install-skill.d.ts","sourceRoot":"","sources":["../../../src/commands/install-skill.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAqInC;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,OAAO,CAyBnD;AAED,eAAe,yBAAyB,CAAA"}
@@ -103,7 +103,7 @@ async function installSkillsmithSkill(force) {
103
103
  console.log();
104
104
  console.log(chalk.bold('Available Commands:'));
105
105
  console.log(chalk.cyan(' /skillsmith search <query>') + ' - Search for skills');
106
- console.log(chalk.cyan(' /skillsmith install <id>') + ' - Install a skill');
106
+ console.log(chalk.cyan(' /skillsmith install <author/name>') + ' - Install a skill');
107
107
  console.log(chalk.cyan(' /skillsmith recommend') + ' - Get recommendations');
108
108
  console.log(chalk.cyan(' /skillsmith compare <ids>') + ' - Compare skills');
109
109
  console.log(chalk.cyan(' /skillsmith list') + ' - List installed skills');
@@ -120,11 +120,18 @@ async function installSkillsmithSkill(force) {
120
120
  * Create the install-skill command
121
121
  */
122
122
  export function createInstallSkillCommand() {
123
- return new Command('install-skill')
124
- .description('Install the skillsmith skill for /skillsmith slash command support')
123
+ return new Command('setup')
124
+ .alias('install-skill')
125
+ .description('Set up the skillsmith slash command skill (installs to ~/.claude/skills/skillsmith/)')
125
126
  .option('-f, --force', 'Reinstall even if already installed')
126
127
  .action(async (opts) => {
127
128
  try {
129
+ // SMI-3484: Deprecation warning when invoked via old name
130
+ const invokedName = process.argv[2];
131
+ if (invokedName === 'install-skill') {
132
+ console.log(chalk.yellow('Warning: "install-skill" is deprecated and will be removed in a future release. ' +
133
+ 'Use "setup" instead.'));
134
+ }
128
135
  await installSkillsmithSkill(opts.force ?? false);
129
136
  }
130
137
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"install-skill.js","sourceRoot":"","sources":["../../../src/commands/install-skill.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install-skill.js","sourceRoot":"","sources":["../../../src/commands/install-skill.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * SMI-3484: CLI Install Command (Wave 1)
3
+ *
4
+ * Installs a skill from the registry or GitHub URL to ~/.claude/skills/.
5
+ * Consumes SkillInstallationService from @skillsmith/core.
6
+ */
7
+ import { Command } from 'commander';
8
+ /**
9
+ * Create the install command
10
+ */
11
+ export declare function createInstallCommand(): Command;
12
+ export default createInstallCommand;
13
+ //# sourceMappingURL=install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/commands/install.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAkInC;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAiH9C;AAED,eAAe,oBAAoB,CAAA"}
@@ -0,0 +1,213 @@
1
+ /**
2
+ * SMI-3484: CLI Install Command (Wave 1)
3
+ *
4
+ * Installs a skill from the registry or GitHub URL to ~/.claude/skills/.
5
+ * Consumes SkillInstallationService from @skillsmith/core.
6
+ */
7
+ import { Command } from 'commander';
8
+ import chalk from 'chalk';
9
+ import ora from 'ora';
10
+ import { createDatabaseAsync, initializeSchema, SkillRepository, SkillDependencyRepository, SkillInstallationService, isGitHubUrl, } from '@skillsmith/core';
11
+ import { DEFAULT_DB_PATH, DEFAULT_SKILLS_DIR, DEFAULT_MANIFEST_PATH } from '../config.js';
12
+ import { sanitizeError } from '../utils/sanitize.js';
13
+ /**
14
+ * Validate that a skill ID is in author/name format.
15
+ * Rejects IDs that look like bare names without an author prefix.
16
+ */
17
+ function isValidSkillId(skillId) {
18
+ if (isGitHubUrl(skillId))
19
+ return true;
20
+ // Must be author/name format: non-empty segments separated by exactly one slash
21
+ return /^[a-zA-Z0-9_-]+\/[a-zA-Z0-9_.-]+$/.test(skillId);
22
+ }
23
+ /**
24
+ * Create a registry lookup backed by the local SQLite database.
25
+ * Returns null for skills without a repo_url (metadata-only entries).
26
+ */
27
+ function createDbRegistryLookup(skillRepo) {
28
+ return {
29
+ async lookup(skillId) {
30
+ const skill = skillRepo.findById(skillId);
31
+ if (!skill)
32
+ return null;
33
+ if (!skill.repoUrl)
34
+ return null;
35
+ return {
36
+ repoUrl: skill.repoUrl,
37
+ name: skill.name,
38
+ trustTier: skill.trustTier,
39
+ // GAP-07: Quarantine status is managed at the quarantine layer, not on
40
+ // the Skill type. CLI installs from local DB do not have quarantine
41
+ // data — default to false. This is a known limitation; quarantine
42
+ // enforcement is authoritative only via the MCP registry API path.
43
+ quarantined: false,
44
+ };
45
+ },
46
+ };
47
+ }
48
+ /**
49
+ * Format install result for --json output
50
+ */
51
+ function formatJsonResult(result) {
52
+ return JSON.stringify({
53
+ success: result.success,
54
+ skillId: result.skillId,
55
+ installPath: result.installPath,
56
+ error: result.error,
57
+ trustTier: result.trustTier,
58
+ optimization: result.optimization,
59
+ tips: result.tips,
60
+ }, null, 2);
61
+ }
62
+ /**
63
+ * Display install result in human-readable format
64
+ */
65
+ function displayResult(result, quiet) {
66
+ if (result.success) {
67
+ console.log(chalk.green('\nSkill installed successfully!'));
68
+ console.log(chalk.dim(` Path: ${result.installPath}`));
69
+ if (result.trustTier) {
70
+ console.log(chalk.dim(` Trust tier: ${result.trustTier}`));
71
+ }
72
+ if (result.optimization?.optimized && !quiet) {
73
+ console.log(chalk.dim(` Optimized: ${result.optimization.tokenReductionPercent}% reduction`));
74
+ if (result.optimization.subSkills && result.optimization.subSkills.length > 0) {
75
+ console.log(chalk.dim(` Sub-skills: ${result.optimization.subSkills.join(', ')}`));
76
+ }
77
+ if (result.optimization.subagentGenerated) {
78
+ console.log(chalk.dim(` Companion subagent generated`));
79
+ }
80
+ }
81
+ if (result.contentHashMismatch) {
82
+ console.log(chalk.yellow('\n Warning: Content has changed since last indexed.'));
83
+ console.log(chalk.yellow(" Review recent changes at the skill's repository before using."));
84
+ }
85
+ if (result.tips && result.tips.length > 0 && !quiet) {
86
+ // Skip the first tip when contentHashMismatch is true — it's the mismatch
87
+ // warning already displayed as chalk.yellow above (added via tips.unshift)
88
+ const startIndex = result.contentHashMismatch ? 1 : 0;
89
+ if (startIndex < result.tips.length) {
90
+ console.log();
91
+ for (let i = startIndex; i < result.tips.length; i++) {
92
+ console.log(chalk.dim(` Tip: ${result.tips[i]}`));
93
+ }
94
+ }
95
+ }
96
+ }
97
+ else {
98
+ console.error(chalk.red(`\nInstallation failed: ${result.error}`));
99
+ if (result.securityReport && !result.securityReport.passed) {
100
+ console.error(chalk.red(' Security scan failed.'));
101
+ for (const finding of result.securityReport.findings) {
102
+ if (finding.severity === 'critical' || finding.severity === 'high') {
103
+ console.error(chalk.red(` [${finding.severity}] ${finding.message}`));
104
+ }
105
+ }
106
+ }
107
+ if (result.tips && result.tips.length > 0 && !quiet) {
108
+ console.log();
109
+ for (const tip of result.tips) {
110
+ console.log(chalk.dim(` ${tip}`));
111
+ }
112
+ }
113
+ }
114
+ }
115
+ /**
116
+ * Create the install command
117
+ */
118
+ export function createInstallCommand() {
119
+ return new Command('install')
120
+ .description('Install a skill from the registry or GitHub URL')
121
+ .argument('<skillId>', 'Skill ID (author/name) or GitHub URL')
122
+ .option('-f, --force', 'Force reinstall if already installed')
123
+ .option('--skip-scan', 'Skip security scan (not recommended)')
124
+ .option('--skip-optimize', 'Skip Skillsmith optimization')
125
+ .option('-q, --quiet', 'Suppress advisory output')
126
+ .option('--json', 'Output structured JSON result')
127
+ .option('-d, --db <path>', 'Database file path', DEFAULT_DB_PATH)
128
+ .action(async (skillId, opts) => {
129
+ const quiet = opts.quiet ?? false;
130
+ const jsonOutput = opts.json ?? false;
131
+ try {
132
+ // Validate skill ID format
133
+ if (!isValidSkillId(skillId)) {
134
+ const errorMsg = 'Invalid skill ID format. Expected "author/name" or a GitHub URL.\n' +
135
+ ' Examples:\n' +
136
+ ' skillsmith install community/jest-helper\n' +
137
+ ' skillsmith install https://github.com/owner/repo';
138
+ if (jsonOutput) {
139
+ console.log(JSON.stringify({ success: false, skillId, error: errorMsg }, null, 2));
140
+ }
141
+ else {
142
+ console.error(chalk.red(errorMsg));
143
+ }
144
+ process.exit(1);
145
+ return;
146
+ }
147
+ const dbPath = opts.db ?? DEFAULT_DB_PATH;
148
+ const db = await createDatabaseAsync(dbPath);
149
+ initializeSchema(db);
150
+ const spinner = jsonOutput ? null : ora('Installing skill...').start();
151
+ try {
152
+ const skillRepo = new SkillRepository(db);
153
+ const skillDependencyRepo = new SkillDependencyRepository(db);
154
+ const service = new SkillInstallationService({
155
+ db,
156
+ skillRepo,
157
+ skillDependencyRepo,
158
+ skillsDir: DEFAULT_SKILLS_DIR,
159
+ manifestPath: DEFAULT_MANIFEST_PATH,
160
+ registryLookup: createDbRegistryLookup(skillRepo),
161
+ onProgress: (_stage, detail) => {
162
+ if (spinner) {
163
+ spinner.text = detail;
164
+ }
165
+ },
166
+ });
167
+ // Build install options — only set defined properties (exactOptionalPropertyTypes)
168
+ const installOptions = {};
169
+ if (opts.force !== undefined) {
170
+ installOptions.force = opts.force;
171
+ }
172
+ if (opts.skipScan !== undefined) {
173
+ installOptions.skipScan = opts.skipScan;
174
+ }
175
+ if (opts.skipOptimize !== undefined) {
176
+ installOptions.skipOptimize = opts.skipOptimize;
177
+ }
178
+ const result = await service.install(skillId, installOptions);
179
+ if (spinner) {
180
+ if (result.success) {
181
+ spinner.succeed('Skill installed');
182
+ }
183
+ else {
184
+ spinner.fail('Installation failed');
185
+ }
186
+ }
187
+ if (jsonOutput) {
188
+ console.log(formatJsonResult(result));
189
+ }
190
+ else {
191
+ displayResult(result, quiet);
192
+ }
193
+ if (!result.success) {
194
+ process.exit(1);
195
+ }
196
+ }
197
+ finally {
198
+ db.close();
199
+ }
200
+ }
201
+ catch (error) {
202
+ if (jsonOutput) {
203
+ console.log(JSON.stringify({ success: false, skillId, error: sanitizeError(error) }, null, 2));
204
+ }
205
+ else {
206
+ console.error(chalk.red('Install error:'), sanitizeError(error));
207
+ }
208
+ process.exit(1);
209
+ }
210
+ });
211
+ }
212
+ export default createInstallCommand;
213
+ //# sourceMappingURL=install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/commands/install.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,GAAG,MAAM,KAAK,CAAA;AACrB,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,yBAAyB,EACzB,wBAAwB,EACxB,WAAW,GAIZ,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AACzF,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAEpD;;;GAGG;AACH,SAAS,cAAc,CAAC,OAAe;IACrC,IAAI,WAAW,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAA;IACrC,gFAAgF;IAChF,OAAO,mCAAmC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AAC1D,CAAC;AAED;;;GAGG;AACH,SAAS,sBAAsB,CAAC,SAA0B;IACxD,OAAO;QACL,KAAK,CAAC,MAAM,CAAC,OAAe;YAC1B,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;YACzC,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAA;YACvB,IAAI,CAAC,KAAK,CAAC,OAAO;gBAAE,OAAO,IAAI,CAAA;YAE/B,OAAO;gBACL,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,uEAAuE;gBACvE,oEAAoE;gBACpE,kEAAkE;gBAClE,mEAAmE;gBACnE,WAAW,EAAE,KAAK;aACnB,CAAA;QACH,CAAC;KACF,CAAA;AACH,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,MAAyB;IACjD,OAAO,IAAI,CAAC,SAAS,CACnB;QACE,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,IAAI,EAAE,MAAM,CAAC,IAAI;KAClB,EACD,IAAI,EACJ,CAAC,CACF,CAAA;AACH,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,MAAyB,EAAE,KAAc;IAC9D,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAA;QAC3D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;QAEvD,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;QAC7D,CAAC;QAED,IAAI,MAAM,CAAC,YAAY,EAAE,SAAS,IAAI,CAAC,KAAK,EAAE,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,MAAM,CAAC,YAAY,CAAC,qBAAqB,aAAa,CAAC,CAAC,CAAA;YAC9F,IAAI,MAAM,CAAC,YAAY,CAAC,SAAS,IAAI,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;YACrF,CAAC;YACD,IAAI,MAAM,CAAC,YAAY,CAAC,iBAAiB,EAAE,CAAC;gBAC1C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,CAAA;YAC1D,CAAC;QACH,CAAC;QAED,IAAI,MAAM,CAAC,mBAAmB,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,sDAAsD,CAAC,CAAC,CAAA;YACjF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,iEAAiE,CAAC,CAAC,CAAA;QAC9F,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACpD,0EAA0E;YAC1E,2EAA2E;YAC3E,MAAM,UAAU,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YACrD,IAAI,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACpC,OAAO,CAAC,GAAG,EAAE,CAAA;gBACb,KAAK,IAAI,CAAC,GAAG,UAAU,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACrD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;gBACpD,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,0BAA0B,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;QAElE,IAAI,MAAM,CAAC,cAAc,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;YAC3D,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAA;YACnD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;gBACrD,IAAI,OAAO,CAAC,QAAQ,KAAK,UAAU,IAAI,OAAO,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;oBACnE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;gBACxE,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACpD,OAAO,CAAC,GAAG,EAAE,CAAA;YACb,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAA;YACpC,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC;SAC1B,WAAW,CAAC,iDAAiD,CAAC;SAC9D,QAAQ,CAAC,WAAW,EAAE,sCAAsC,CAAC;SAC7D,MAAM,CAAC,aAAa,EAAE,sCAAsC,CAAC;SAC7D,MAAM,CAAC,aAAa,EAAE,sCAAsC,CAAC;SAC7D,MAAM,CAAC,iBAAiB,EAAE,8BAA8B,CAAC;SACzD,MAAM,CAAC,aAAa,EAAE,0BAA0B,CAAC;SACjD,MAAM,CAAC,QAAQ,EAAE,+BAA+B,CAAC;SACjD,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,EAAE,eAAe,CAAC;SAChE,MAAM,CACL,KAAK,EACH,OAAe,EACf,IAOC,EACD,EAAE;QACF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,KAAK,CAAA;QACjC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,IAAI,KAAK,CAAA;QAErC,IAAI,CAAC;YACH,2BAA2B;YAC3B,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC7B,MAAM,QAAQ,GACZ,oEAAoE;oBACpE,eAAe;oBACf,gDAAgD;oBAChD,sDAAsD,CAAA;gBAExD,IAAI,UAAU,EAAE,CAAC;oBACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;gBACpF,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAA;gBACpC,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;gBACf,OAAM;YACR,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,IAAI,eAAe,CAAA;YACzC,MAAM,EAAE,GAAG,MAAM,mBAAmB,CAAC,MAAM,CAAC,CAAA;YAC5C,gBAAgB,CAAC,EAAE,CAAC,CAAA;YAEpB,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,KAAK,EAAE,CAAA;YAEtE,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC,EAAE,CAAC,CAAA;gBACzC,MAAM,mBAAmB,GAAG,IAAI,yBAAyB,CAAC,EAAE,CAAC,CAAA;gBAE7D,MAAM,OAAO,GAAG,IAAI,wBAAwB,CAAC;oBAC3C,EAAE;oBACF,SAAS;oBACT,mBAAmB;oBACnB,SAAS,EAAE,kBAAkB;oBAC7B,YAAY,EAAE,qBAAqB;oBACnC,cAAc,EAAE,sBAAsB,CAAC,SAAS,CAAC;oBACjD,UAAU,EAAE,CAAC,MAAc,EAAE,MAAc,EAAE,EAAE;wBAC7C,IAAI,OAAO,EAAE,CAAC;4BACZ,OAAO,CAAC,IAAI,GAAG,MAAM,CAAA;wBACvB,CAAC;oBACH,CAAC;iBACF,CAAC,CAAA;gBAEF,mFAAmF;gBACnF,MAAM,cAAc,GAA8C,EAAE,CAAA;gBACpE,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;oBAC7B,cAAc,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;gBACnC,CAAC;gBACD,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;oBAChC,cAAc,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;gBACzC,CAAC;gBACD,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;oBACpC,cAAc,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAA;gBACjD,CAAC;gBAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC,CAAA;gBAE7D,IAAI,OAAO,EAAE,CAAC;oBACZ,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;wBACnB,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAA;oBACpC,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAA;oBACrC,CAAC;gBACH,CAAC;gBAED,IAAI,UAAU,EAAE,CAAC;oBACf,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAA;gBACvC,CAAC;qBAAM,CAAC;oBACN,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;gBAC9B,CAAC;gBAED,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;oBACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;gBACjB,CAAC;YACH,CAAC;oBAAS,CAAC;gBACT,EAAE,CAAC,KAAK,EAAE,CAAA;YACZ,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,UAAU,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CACT,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAClF,CAAA;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,CAAA;YAClE,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;IACH,CAAC,CACF,CAAA;AACL,CAAC;AAED,eAAe,oBAAoB,CAAA"}