@skillsmith/cli 0.6.3 → 0.6.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +11 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/src/commands/__meta__/telemetry-coverage.test.d.ts +20 -0
- package/dist/src/commands/__meta__/telemetry-coverage.test.d.ts.map +1 -0
- package/dist/src/commands/__meta__/telemetry-coverage.test.js +118 -0
- package/dist/src/commands/__meta__/telemetry-coverage.test.js.map +1 -0
- package/dist/src/commands/ab-test.d.ts +1 -0
- package/dist/src/commands/ab-test.d.ts.map +1 -1
- package/dist/src/commands/ab-test.js +17 -8
- package/dist/src/commands/ab-test.js.map +1 -1
- package/dist/src/commands/analyze.d.ts +1 -0
- package/dist/src/commands/analyze.d.ts.map +1 -1
- package/dist/src/commands/analyze.js +32 -23
- package/dist/src/commands/analyze.js.map +1 -1
- package/dist/src/commands/audit-collisions.d.ts +1 -4
- package/dist/src/commands/audit-collisions.d.ts.map +1 -1
- package/dist/src/commands/audit-collisions.js +32 -23
- package/dist/src/commands/audit-collisions.js.map +1 -1
- package/dist/src/commands/audit-sources.action.d.ts +37 -0
- package/dist/src/commands/audit-sources.action.d.ts.map +1 -0
- package/dist/src/commands/audit-sources.action.js +321 -0
- package/dist/src/commands/audit-sources.action.js.map +1 -0
- package/dist/src/commands/audit-sources.d.ts +37 -0
- package/dist/src/commands/audit-sources.d.ts.map +1 -0
- package/dist/src/commands/audit-sources.js +55 -0
- package/dist/src/commands/audit-sources.js.map +1 -0
- package/dist/src/commands/audit-sources.test.d.ts +9 -0
- package/dist/src/commands/audit-sources.test.d.ts.map +1 -0
- package/dist/src/commands/audit-sources.test.js +228 -0
- package/dist/src/commands/audit-sources.test.js.map +1 -0
- package/dist/src/commands/audit.d.ts +2 -6
- package/dist/src/commands/audit.d.ts.map +1 -1
- package/dist/src/commands/audit.js +52 -31
- package/dist/src/commands/audit.js.map +1 -1
- package/dist/src/commands/author/index.d.ts +2 -1
- package/dist/src/commands/author/index.d.ts.map +1 -1
- package/dist/src/commands/author/index.js +4 -1
- package/dist/src/commands/author/index.js.map +1 -1
- package/dist/src/commands/author/init.action.d.ts +29 -0
- package/dist/src/commands/author/init.action.d.ts.map +1 -0
- package/dist/src/commands/author/init.action.js +131 -0
- package/dist/src/commands/author/init.action.js.map +1 -0
- package/dist/src/commands/author/init.d.ts +0 -14
- package/dist/src/commands/author/init.d.ts.map +1 -1
- package/dist/src/commands/author/init.js +3 -87
- package/dist/src/commands/author/init.js.map +1 -1
- package/dist/src/commands/author/mcp-init.d.ts +1 -0
- package/dist/src/commands/author/mcp-init.d.ts.map +1 -1
- package/dist/src/commands/author/mcp-init.js +21 -13
- package/dist/src/commands/author/mcp-init.js.map +1 -1
- package/dist/src/commands/author/subagent.d.ts +1 -0
- package/dist/src/commands/author/subagent.d.ts.map +1 -1
- package/dist/src/commands/author/subagent.js +23 -15
- package/dist/src/commands/author/subagent.js.map +1 -1
- package/dist/src/commands/author/transform.d.ts +1 -0
- package/dist/src/commands/author/transform.d.ts.map +1 -1
- package/dist/src/commands/author/transform.js +23 -15
- package/dist/src/commands/author/transform.js.map +1 -1
- package/dist/src/commands/config.d.ts +2 -0
- package/dist/src/commands/config.d.ts.map +1 -1
- package/dist/src/commands/config.js +43 -28
- package/dist/src/commands/config.js.map +1 -1
- package/dist/src/commands/create.d.ts +1 -0
- package/dist/src/commands/create.d.ts.map +1 -1
- package/dist/src/commands/create.js +28 -19
- package/dist/src/commands/create.js.map +1 -1
- package/dist/src/commands/diff.d.ts +4 -0
- package/dist/src/commands/diff.d.ts.map +1 -1
- package/dist/src/commands/diff.js +90 -54
- package/dist/src/commands/diff.js.map +1 -1
- package/dist/src/commands/diff.test.js +52 -0
- package/dist/src/commands/diff.test.js.map +1 -1
- package/dist/src/commands/import-local.d.ts +7 -0
- package/dist/src/commands/import-local.d.ts.map +1 -1
- package/dist/src/commands/import-local.js +43 -34
- package/dist/src/commands/import-local.js.map +1 -1
- package/dist/src/commands/import.d.ts +6 -0
- package/dist/src/commands/import.d.ts.map +1 -1
- package/dist/src/commands/import.js +23 -14
- package/dist/src/commands/import.js.map +1 -1
- package/dist/src/commands/info.d.ts +7 -0
- package/dist/src/commands/info.d.ts.map +1 -1
- package/dist/src/commands/info.js +77 -68
- package/dist/src/commands/info.js.map +1 -1
- package/dist/src/commands/install-skill.d.ts +3 -0
- package/dist/src/commands/install-skill.d.ts.map +1 -1
- package/dist/src/commands/install-skill.js +23 -15
- package/dist/src/commands/install-skill.js.map +1 -1
- package/dist/src/commands/install.d.ts +21 -0
- package/dist/src/commands/install.d.ts.map +1 -1
- package/dist/src/commands/install.js +154 -139
- package/dist/src/commands/install.js.map +1 -1
- package/dist/src/commands/login.d.ts +4 -0
- package/dist/src/commands/login.d.ts.map +1 -1
- package/dist/src/commands/login.js +56 -47
- package/dist/src/commands/login.js.map +1 -1
- package/dist/src/commands/logout.d.ts +1 -0
- package/dist/src/commands/logout.d.ts.map +1 -1
- package/dist/src/commands/logout.js +36 -27
- package/dist/src/commands/logout.js.map +1 -1
- package/dist/src/commands/manage.d.ts +3 -9
- package/dist/src/commands/manage.d.ts.map +1 -1
- package/dist/src/commands/manage.js +69 -45
- package/dist/src/commands/manage.js.map +1 -1
- package/dist/src/commands/merge.d.ts +7 -0
- package/dist/src/commands/merge.d.ts.map +1 -1
- package/dist/src/commands/merge.js +117 -108
- package/dist/src/commands/merge.js.map +1 -1
- package/dist/src/commands/pin.d.ts +2 -0
- package/dist/src/commands/pin.d.ts.map +1 -1
- package/dist/src/commands/pin.js +88 -73
- package/dist/src/commands/pin.js.map +1 -1
- package/dist/src/commands/recommend.d.ts +1 -0
- package/dist/src/commands/recommend.d.ts.map +1 -1
- package/dist/src/commands/recommend.js +35 -27
- package/dist/src/commands/recommend.js.map +1 -1
- package/dist/src/commands/search-formatters.d.ts +1 -0
- package/dist/src/commands/search-formatters.d.ts.map +1 -1
- package/dist/src/commands/search-formatters.js +3 -0
- package/dist/src/commands/search-formatters.js.map +1 -1
- package/dist/src/commands/search.action.d.ts +16 -0
- package/dist/src/commands/search.action.d.ts.map +1 -0
- package/dist/src/commands/search.action.js +384 -0
- package/dist/src/commands/search.action.js.map +1 -0
- package/dist/src/commands/search.d.ts +3 -0
- package/dist/src/commands/search.d.ts.map +1 -1
- package/dist/src/commands/search.js +5 -354
- package/dist/src/commands/search.js.map +1 -1
- package/dist/src/commands/sync.action.d.ts +39 -0
- package/dist/src/commands/sync.action.d.ts.map +1 -0
- package/dist/src/commands/sync.action.js +353 -0
- package/dist/src/commands/sync.action.js.map +1 -0
- package/dist/src/commands/sync.d.ts +3 -0
- package/dist/src/commands/sync.d.ts.map +1 -1
- package/dist/src/commands/sync.js +8 -310
- package/dist/src/commands/sync.js.map +1 -1
- package/dist/src/commands/telemetry.action.d.ts +38 -0
- package/dist/src/commands/telemetry.action.d.ts.map +1 -0
- package/dist/src/commands/telemetry.action.js +350 -0
- package/dist/src/commands/telemetry.action.js.map +1 -0
- package/dist/src/commands/telemetry.d.ts +5 -13
- package/dist/src/commands/telemetry.d.ts.map +1 -1
- package/dist/src/commands/telemetry.js +13 -302
- package/dist/src/commands/telemetry.js.map +1 -1
- package/dist/src/commands/whoami.d.ts +1 -0
- package/dist/src/commands/whoami.d.ts.map +1 -1
- package/dist/src/commands/whoami.js +29 -21
- package/dist/src/commands/whoami.js.map +1 -1
- package/dist/src/utils/open-database.d.ts +10 -2
- package/dist/src/utils/open-database.d.ts.map +1 -1
- package/dist/src/utils/open-database.js +15 -2
- package/dist/src/utils/open-database.js.map +1 -1
- package/dist/src/utils/skills-directory.d.ts.map +1 -1
- package/dist/src/utils/skills-directory.js +5 -1
- package/dist/src/utils/skills-directory.js.map +1 -1
- package/dist/tests/e2e/audit-sources-affix.test.d.ts +11 -0
- package/dist/tests/e2e/audit-sources-affix.test.d.ts.map +1 -0
- package/dist/tests/e2e/audit-sources-affix.test.js +121 -0
- package/dist/tests/e2e/audit-sources-affix.test.js.map +1 -0
- package/dist/tests/e2e/audit-sources-apply.test.d.ts +13 -0
- package/dist/tests/e2e/audit-sources-apply.test.d.ts.map +1 -0
- package/dist/tests/e2e/audit-sources-apply.test.js +166 -0
- package/dist/tests/e2e/audit-sources-apply.test.js.map +1 -0
- package/dist/tests/e2e/audit-sources-recovery.test.d.ts +15 -0
- package/dist/tests/e2e/audit-sources-recovery.test.d.ts.map +1 -0
- package/dist/tests/e2e/audit-sources-recovery.test.js +179 -0
- package/dist/tests/e2e/audit-sources-recovery.test.js.map +1 -0
- package/dist/tests/e2e/audit-sources-roundtrip.test.d.ts +23 -0
- package/dist/tests/e2e/audit-sources-roundtrip.test.d.ts.map +1 -0
- package/dist/tests/e2e/audit-sources-roundtrip.test.js +139 -0
- package/dist/tests/e2e/audit-sources-roundtrip.test.js.map +1 -0
- package/dist/tests/e2e/utils/source-recovery-fixture.d.ts +49 -0
- package/dist/tests/e2e/utils/source-recovery-fixture.d.ts.map +1 -0
- package/dist/tests/e2e/utils/source-recovery-fixture.js +106 -0
- package/dist/tests/e2e/utils/source-recovery-fixture.js.map +1 -0
- package/dist/tests/init.test.js +2 -1
- package/dist/tests/init.test.js.map +1 -1
- package/dist/tests/install-quarantine.test.d.ts +10 -0
- package/dist/tests/install-quarantine.test.d.ts.map +1 -0
- package/dist/tests/install-quarantine.test.js +86 -0
- package/dist/tests/install-quarantine.test.js.map +1 -0
- package/package.json +4 -5
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Unit tests for `sklx audit sources` CLI command.
|
|
3
|
+
* @see SMI-5407: Skill Source Provenance Recovery
|
|
4
|
+
*
|
|
5
|
+
* Tests the action layer (`runAuditSources`) with injected mocks so the test
|
|
6
|
+
* suite runs fully offline without a real DB or skills directory.
|
|
7
|
+
*/
|
|
8
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
9
|
+
import * as os from 'node:os';
|
|
10
|
+
import * as path from 'node:path';
|
|
11
|
+
// ============================================================================
|
|
12
|
+
// Module mocks — must be declared before the imports that use them
|
|
13
|
+
// ============================================================================
|
|
14
|
+
const mockOpenCliDatabase = vi.fn();
|
|
15
|
+
vi.mock('../utils/open-database.js', () => ({
|
|
16
|
+
openCliDatabase: (...args) => mockOpenCliDatabase(...args),
|
|
17
|
+
}));
|
|
18
|
+
const mockLoadManifest = vi.fn();
|
|
19
|
+
vi.mock('../utils/manifest.js', () => ({
|
|
20
|
+
loadManifest: () => mockLoadManifest(),
|
|
21
|
+
}));
|
|
22
|
+
const mockRecoverSources = vi.fn();
|
|
23
|
+
const mockBackfillManifest = vi.fn();
|
|
24
|
+
vi.mock('@skillsmith/core', async (importOriginal) => {
|
|
25
|
+
const actual = await importOriginal();
|
|
26
|
+
return {
|
|
27
|
+
...actual,
|
|
28
|
+
// Must be a regular function (not arrow) so `new SourceRecoveryService()` works.
|
|
29
|
+
SourceRecoveryService: function MockSourceRecoveryService() {
|
|
30
|
+
return { recoverSources: (...args) => mockRecoverSources(...args) };
|
|
31
|
+
},
|
|
32
|
+
backfillManifest: (...args) => mockBackfillManifest(...args),
|
|
33
|
+
defaultSkillsRoot: () => path.join(os.homedir(), '.claude', 'skills'),
|
|
34
|
+
};
|
|
35
|
+
});
|
|
36
|
+
// ============================================================================
|
|
37
|
+
// Import after mocks
|
|
38
|
+
// ============================================================================
|
|
39
|
+
import { runAuditSources } from './audit-sources.action.js';
|
|
40
|
+
function makeReport(overrides = {}) {
|
|
41
|
+
return {
|
|
42
|
+
skills: [
|
|
43
|
+
{
|
|
44
|
+
skillName: 'linear',
|
|
45
|
+
installPath: '/home/user/.claude/skills/linear',
|
|
46
|
+
recoveredSource: {
|
|
47
|
+
owner: 'williamsmith',
|
|
48
|
+
repo: 'linear',
|
|
49
|
+
url: 'https://github.com/williamsmith/linear',
|
|
50
|
+
},
|
|
51
|
+
registryId: 'uuid-linear',
|
|
52
|
+
method: 'git-remote',
|
|
53
|
+
confidence: 'exact',
|
|
54
|
+
candidates: [],
|
|
55
|
+
status: 'recovered',
|
|
56
|
+
},
|
|
57
|
+
],
|
|
58
|
+
summary: { total: 1, recovered: 1, already_tracked: 0, unknown: 0, skipped_backup: 0 },
|
|
59
|
+
...overrides,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
function makeDb() {
|
|
63
|
+
return {
|
|
64
|
+
prepare: vi.fn().mockReturnValue({ all: vi.fn().mockReturnValue([]) }),
|
|
65
|
+
close: vi.fn(),
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
function baseOptions(overrides = {}) {
|
|
69
|
+
return {
|
|
70
|
+
skillsRoot: '/tmp/test-skills',
|
|
71
|
+
apply: false,
|
|
72
|
+
yes: false,
|
|
73
|
+
set: undefined,
|
|
74
|
+
minConfidence: 'high',
|
|
75
|
+
json: false,
|
|
76
|
+
embedding: false,
|
|
77
|
+
catalogHint: false,
|
|
78
|
+
writeFrontmatter: false,
|
|
79
|
+
forceWriteFrontmatter: false,
|
|
80
|
+
db: ':memory:',
|
|
81
|
+
...overrides,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
// ============================================================================
|
|
85
|
+
// Tests
|
|
86
|
+
// ============================================================================
|
|
87
|
+
describe('runAuditSources', () => {
|
|
88
|
+
beforeEach(() => {
|
|
89
|
+
vi.clearAllMocks();
|
|
90
|
+
mockOpenCliDatabase.mockResolvedValue(makeDb());
|
|
91
|
+
mockLoadManifest.mockResolvedValue({ version: '1.0.0', installedSkills: {} });
|
|
92
|
+
mockRecoverSources.mockResolvedValue(makeReport());
|
|
93
|
+
mockBackfillManifest.mockResolvedValue({ planned: [], written: [], skipped: [] });
|
|
94
|
+
});
|
|
95
|
+
afterEach(() => {
|
|
96
|
+
vi.clearAllMocks();
|
|
97
|
+
});
|
|
98
|
+
// --------------------------------------------------------------------------
|
|
99
|
+
// --json shape + exit 0
|
|
100
|
+
// --------------------------------------------------------------------------
|
|
101
|
+
it('--json emits valid JSON with skills and summary', async () => {
|
|
102
|
+
const report = makeReport();
|
|
103
|
+
mockRecoverSources.mockResolvedValue(report);
|
|
104
|
+
const written = [];
|
|
105
|
+
vi.spyOn(process.stdout, 'write').mockImplementation((chunk) => {
|
|
106
|
+
if (typeof chunk === 'string')
|
|
107
|
+
written.push(chunk);
|
|
108
|
+
return true;
|
|
109
|
+
});
|
|
110
|
+
await runAuditSources(baseOptions({ json: true }));
|
|
111
|
+
const output = written.join('');
|
|
112
|
+
const parsed = JSON.parse(output);
|
|
113
|
+
expect(Array.isArray(parsed.skills)).toBe(true);
|
|
114
|
+
expect(parsed.summary.total).toBe(1);
|
|
115
|
+
});
|
|
116
|
+
// --------------------------------------------------------------------------
|
|
117
|
+
// Dry-run: default run does NOT write the manifest
|
|
118
|
+
// --------------------------------------------------------------------------
|
|
119
|
+
it('dry-run by default: does not call backfillManifest', async () => {
|
|
120
|
+
const logSpy = vi.spyOn(console, 'log').mockImplementation(() => { });
|
|
121
|
+
await runAuditSources(baseOptions());
|
|
122
|
+
expect(mockBackfillManifest).not.toHaveBeenCalled();
|
|
123
|
+
logSpy.mockRestore();
|
|
124
|
+
});
|
|
125
|
+
// --------------------------------------------------------------------------
|
|
126
|
+
// already_tracked overlay
|
|
127
|
+
// --------------------------------------------------------------------------
|
|
128
|
+
it('overlays already_tracked when manifest already has a source', async () => {
|
|
129
|
+
mockLoadManifest.mockResolvedValue({
|
|
130
|
+
version: '1.0.0',
|
|
131
|
+
installedSkills: {
|
|
132
|
+
linear: {
|
|
133
|
+
id: 'uuid-linear',
|
|
134
|
+
name: 'linear',
|
|
135
|
+
version: '1.0.0',
|
|
136
|
+
source: 'https://github.com/williamsmith/linear',
|
|
137
|
+
installPath: '/home/user/.claude/skills/linear',
|
|
138
|
+
installedAt: '2024-01-01T00:00:00.000Z',
|
|
139
|
+
lastUpdated: '2024-01-01T00:00:00.000Z',
|
|
140
|
+
},
|
|
141
|
+
},
|
|
142
|
+
});
|
|
143
|
+
const jsonChunks = [];
|
|
144
|
+
vi.spyOn(process.stdout, 'write').mockImplementation((chunk) => {
|
|
145
|
+
if (typeof chunk === 'string')
|
|
146
|
+
jsonChunks.push(chunk);
|
|
147
|
+
return true;
|
|
148
|
+
});
|
|
149
|
+
await runAuditSources(baseOptions({ json: true }));
|
|
150
|
+
const parsed = JSON.parse(jsonChunks.join(''));
|
|
151
|
+
const alreadyTracked = parsed.skills.find((s) => s.status === 'already_tracked');
|
|
152
|
+
expect(alreadyTracked).toBeDefined();
|
|
153
|
+
expect(parsed.summary.already_tracked).toBe(1);
|
|
154
|
+
});
|
|
155
|
+
// --------------------------------------------------------------------------
|
|
156
|
+
// --apply --yes writes the manifest
|
|
157
|
+
// --------------------------------------------------------------------------
|
|
158
|
+
it('--apply --yes calls backfillManifest with apply: true', async () => {
|
|
159
|
+
mockBackfillManifest.mockResolvedValue({ planned: [], written: ['linear'], skipped: [] });
|
|
160
|
+
const logSpy = vi.spyOn(console, 'log').mockImplementation(() => { });
|
|
161
|
+
await runAuditSources(baseOptions({ apply: true, yes: true }));
|
|
162
|
+
expect(mockBackfillManifest).toHaveBeenCalledWith(expect.objectContaining({ summary: expect.any(Object) }), expect.objectContaining({ apply: true }));
|
|
163
|
+
logSpy.mockRestore();
|
|
164
|
+
});
|
|
165
|
+
// --------------------------------------------------------------------------
|
|
166
|
+
// Multi-candidate row appears in JSON output
|
|
167
|
+
// --------------------------------------------------------------------------
|
|
168
|
+
it('--json includes candidates array when ambiguous (multi-match)', async () => {
|
|
169
|
+
const ambiguousReport = makeReport({
|
|
170
|
+
skills: [
|
|
171
|
+
{
|
|
172
|
+
skillName: 'git-helper',
|
|
173
|
+
installPath: '/home/user/.claude/skills/git-helper',
|
|
174
|
+
recoveredSource: null,
|
|
175
|
+
registryId: null,
|
|
176
|
+
method: 'registry-name',
|
|
177
|
+
confidence: 'low',
|
|
178
|
+
candidates: [
|
|
179
|
+
{
|
|
180
|
+
id: 'id-1',
|
|
181
|
+
name: 'git-helper',
|
|
182
|
+
owner: 'alice',
|
|
183
|
+
repo: 'git-helper',
|
|
184
|
+
url: 'https://github.com/alice/git-helper',
|
|
185
|
+
qualityScore: 80,
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
id: 'id-2',
|
|
189
|
+
name: 'git-helper',
|
|
190
|
+
owner: 'bob',
|
|
191
|
+
repo: 'git-helper',
|
|
192
|
+
url: 'https://github.com/bob/git-helper',
|
|
193
|
+
qualityScore: 60,
|
|
194
|
+
},
|
|
195
|
+
],
|
|
196
|
+
status: 'unknown',
|
|
197
|
+
},
|
|
198
|
+
],
|
|
199
|
+
summary: { total: 1, recovered: 0, already_tracked: 0, unknown: 1, skipped_backup: 0 },
|
|
200
|
+
});
|
|
201
|
+
mockRecoverSources.mockResolvedValue(ambiguousReport);
|
|
202
|
+
const written = [];
|
|
203
|
+
vi.spyOn(process.stdout, 'write').mockImplementation((chunk) => {
|
|
204
|
+
if (typeof chunk === 'string')
|
|
205
|
+
written.push(chunk);
|
|
206
|
+
return true;
|
|
207
|
+
});
|
|
208
|
+
await runAuditSources(baseOptions({ json: true }));
|
|
209
|
+
const parsed = JSON.parse(written.join(''));
|
|
210
|
+
expect(parsed.skills[0]?.candidates).toHaveLength(2);
|
|
211
|
+
});
|
|
212
|
+
// --------------------------------------------------------------------------
|
|
213
|
+
// --write-frontmatter without --force-write-frontmatter exits non-zero
|
|
214
|
+
// --------------------------------------------------------------------------
|
|
215
|
+
it('--write-frontmatter without --force-write-frontmatter exits with code 1', async () => {
|
|
216
|
+
const exitSpy = vi
|
|
217
|
+
.spyOn(process, 'exit')
|
|
218
|
+
.mockImplementation((_code) => {
|
|
219
|
+
throw new Error('process.exit');
|
|
220
|
+
});
|
|
221
|
+
const errSpy = vi.spyOn(console, 'error').mockImplementation(() => { });
|
|
222
|
+
await expect(runAuditSources(baseOptions({ writeFrontmatter: true, forceWriteFrontmatter: false }))).rejects.toThrow('process.exit');
|
|
223
|
+
expect(exitSpy).toHaveBeenCalledWith(1);
|
|
224
|
+
exitSpy.mockRestore();
|
|
225
|
+
errSpy.mockRestore();
|
|
226
|
+
});
|
|
227
|
+
});
|
|
228
|
+
//# sourceMappingURL=audit-sources.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-sources.test.js","sourceRoot":"","sources":["../../../src/commands/audit-sources.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,12 +17,7 @@
|
|
|
17
17
|
* - `sklx audit collisions` is the namespace-collision audit (SMI-4590 PR 5/6).
|
|
18
18
|
*/
|
|
19
19
|
import { Command } from 'commander';
|
|
20
|
-
|
|
21
|
-
* Build the `advisories` subcommand. Same body as the pre-SMI-4590 flat
|
|
22
|
-
* `audit` command — only the surface (parent + name) changed.
|
|
23
|
-
*
|
|
24
|
-
* @internal exported for tests; consumers should use {@link createAuditCommand}.
|
|
25
|
-
*/
|
|
20
|
+
export declare const advisoriesAction: (opts: Record<string, string | boolean | undefined>) => Promise<void>;
|
|
26
21
|
export declare function createAuditAdvisoriesSubcommand(): Command;
|
|
27
22
|
/**
|
|
28
23
|
* Deprecation warning for top-level `sklx audit <skill-id>` flat invocation.
|
|
@@ -40,5 +35,6 @@ export declare const AUDIT_FLAT_DEPRECATION_NOTICE = "[DEPRECATED] sklx audit <s
|
|
|
40
35
|
* `sklx audit collisions` is added by SMI-4590 PR 5/6.
|
|
41
36
|
*/
|
|
42
37
|
export declare function createAuditCommand(): Command;
|
|
38
|
+
export declare const auditAction: (skillId: string | undefined, opts: Record<string, string | boolean | undefined>, command: Command) => Promise<void>;
|
|
43
39
|
export default createAuditCommand;
|
|
44
40
|
//# sourceMappingURL=audit.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../../src/commands/audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../../src/commands/audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAiKnC,eAAO,MAAM,gBAAgB,uEAI3B,CAAA;AAEF,wBAAgB,+BAA+B,IAAI,OAAO,CAMzD;AAED;;;;;GAKG;AACH,eAAO,MAAM,6BAA6B,4JACiH,CAAA;AAE3J;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CA0B5C;AA4BD,eAAO,MAAM,WAAW,sHAItB,CAAA;AAEF,eAAe,kBAAkB,CAAA"}
|
|
@@ -19,11 +19,13 @@
|
|
|
19
19
|
import { Command } from 'commander';
|
|
20
20
|
import chalk from 'chalk';
|
|
21
21
|
import { AdvisoryRepository } from '@skillsmith/core';
|
|
22
|
+
import { withTelemetry } from '@skillsmith/core/telemetry';
|
|
22
23
|
import { openCliDatabase } from '../utils/open-database.js';
|
|
23
24
|
import { DEFAULT_DB_PATH } from '../config.js';
|
|
24
25
|
import { sanitizeError } from '../utils/sanitize.js';
|
|
25
26
|
import { requireTier } from '../utils/require-tier.js';
|
|
26
27
|
import { createAuditCollisionsSubcommand } from './audit-collisions.js';
|
|
28
|
+
import { createAuditSourcesSubcommand } from './audit-sources.js';
|
|
27
29
|
// ============================================================================
|
|
28
30
|
// Severity display helpers
|
|
29
31
|
// ============================================================================
|
|
@@ -127,23 +129,31 @@ async function runAdvisoriesAudit(options) {
|
|
|
127
129
|
*
|
|
128
130
|
* @internal exported for tests; consumers should use {@link createAuditCommand}.
|
|
129
131
|
*/
|
|
132
|
+
// SMI-5128: extracted from inline .action() closure so withTelemetry can wrap
|
|
133
|
+
// it at the export boundary (SMI-5040 coverage gate).
|
|
134
|
+
async function advisoriesActionImpl(opts) {
|
|
135
|
+
try {
|
|
136
|
+
await runAdvisoriesAudit({
|
|
137
|
+
db: opts['db'],
|
|
138
|
+
fix: opts['fix'] ?? false,
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
console.error(chalk.red('Error:'), sanitizeError(error));
|
|
143
|
+
process.exit(1);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
export const advisoriesAction = withTelemetry(advisoriesActionImpl, {
|
|
147
|
+
source: 'cli',
|
|
148
|
+
extractSkillId: () => 'advisories',
|
|
149
|
+
extractFramework: () => 'cli',
|
|
150
|
+
});
|
|
130
151
|
export function createAuditAdvisoriesSubcommand() {
|
|
131
152
|
return new Command('advisories')
|
|
132
153
|
.description('Check installed skills for known security advisories (Team tier required)')
|
|
133
154
|
.option('-d, --db <path>', 'Database file path', DEFAULT_DB_PATH)
|
|
134
155
|
.option('--fix', 'Attempt to update skills with available patches')
|
|
135
|
-
.action(
|
|
136
|
-
try {
|
|
137
|
-
await runAdvisoriesAudit({
|
|
138
|
-
db: opts['db'],
|
|
139
|
-
fix: opts['fix'] ?? false,
|
|
140
|
-
});
|
|
141
|
-
}
|
|
142
|
-
catch (error) {
|
|
143
|
-
console.error(chalk.red('Error:'), sanitizeError(error));
|
|
144
|
-
process.exit(1);
|
|
145
|
-
}
|
|
146
|
-
});
|
|
156
|
+
.action(advisoriesAction);
|
|
147
157
|
}
|
|
148
158
|
/**
|
|
149
159
|
* Deprecation warning for top-level `sklx audit <skill-id>` flat invocation.
|
|
@@ -165,6 +175,8 @@ export function createAuditCommand() {
|
|
|
165
175
|
audit.addCommand(createAuditAdvisoriesSubcommand());
|
|
166
176
|
// SMI-4590 PR 5/6 — register `collisions` sibling subcommand.
|
|
167
177
|
audit.addCommand(createAuditCollisionsSubcommand());
|
|
178
|
+
// SMI-5407 — register `sources` sibling subcommand.
|
|
179
|
+
audit.addCommand(createAuditSourcesSubcommand());
|
|
168
180
|
// Deprecation alias: `sklx audit <skill-id>` → forward to `advisories`.
|
|
169
181
|
// Implemented as a default-action on the parent: when Commander is invoked
|
|
170
182
|
// with positional args that don't match a registered subcommand, emit the
|
|
@@ -177,26 +189,35 @@ export function createAuditCommand() {
|
|
|
177
189
|
.argument('[skillId]', 'Legacy positional skill-id (deprecated; use `advisories <skill-id>`)')
|
|
178
190
|
.option('-d, --db <path>', 'Database file path (deprecated alias)', DEFAULT_DB_PATH)
|
|
179
191
|
.option('--fix', 'Attempt to update skills with available patches (deprecated alias)')
|
|
180
|
-
.action(
|
|
181
|
-
if (skillId === undefined) {
|
|
182
|
-
// No subcommand and no positional — print parent help.
|
|
183
|
-
audit.help();
|
|
184
|
-
return;
|
|
185
|
-
}
|
|
186
|
-
// Emit deprecation warning to stderr; do not pollute stdout.
|
|
187
|
-
console.error(chalk.yellow(AUDIT_FLAT_DEPRECATION_NOTICE));
|
|
188
|
-
try {
|
|
189
|
-
await runAdvisoriesAudit({
|
|
190
|
-
db: opts['db'],
|
|
191
|
-
fix: opts['fix'] ?? false,
|
|
192
|
-
});
|
|
193
|
-
}
|
|
194
|
-
catch (error) {
|
|
195
|
-
console.error(chalk.red('Error:'), sanitizeError(error));
|
|
196
|
-
process.exit(1);
|
|
197
|
-
}
|
|
198
|
-
});
|
|
192
|
+
.action(auditAction);
|
|
199
193
|
return audit;
|
|
200
194
|
}
|
|
195
|
+
// SMI-5128: extracted from the parent `audit` inline .action() closure so
|
|
196
|
+
// withTelemetry can wrap it. `command.help()` (commander passes the Command as
|
|
197
|
+
// the final action arg) replaces the closure's `audit.help()`.
|
|
198
|
+
async function auditActionImpl(skillId, opts, command) {
|
|
199
|
+
if (skillId === undefined) {
|
|
200
|
+
// No subcommand and no positional — print parent help.
|
|
201
|
+
command.help();
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
// Emit deprecation warning to stderr; do not pollute stdout.
|
|
205
|
+
console.error(chalk.yellow(AUDIT_FLAT_DEPRECATION_NOTICE));
|
|
206
|
+
try {
|
|
207
|
+
await runAdvisoriesAudit({
|
|
208
|
+
db: opts['db'],
|
|
209
|
+
fix: opts['fix'] ?? false,
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
catch (error) {
|
|
213
|
+
console.error(chalk.red('Error:'), sanitizeError(error));
|
|
214
|
+
process.exit(1);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
export const auditAction = withTelemetry(auditActionImpl, {
|
|
218
|
+
source: 'cli',
|
|
219
|
+
extractSkillId: () => 'audit',
|
|
220
|
+
extractFramework: () => 'cli',
|
|
221
|
+
});
|
|
201
222
|
export default createAuditCommand;
|
|
202
223
|
//# sourceMappingURL=audit.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../../src/commands/audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,kBAAkB,EAAsB,MAAM,kBAAkB,CAAA;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACtD,OAAO,EAAE,+BAA+B,EAAE,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../../src/commands/audit.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,8 @@
|
|
|
8
8
|
* Provides CLI commands for creating, validating, publishing skills,
|
|
9
9
|
* and generating companion subagents.
|
|
10
10
|
*/
|
|
11
|
-
export { createInitCommand, createValidateCommand, createPublishCommand
|
|
11
|
+
export { createInitCommand, createValidateCommand, createPublishCommand } from './init.action.js';
|
|
12
|
+
export { initSkill, validateSkill, publishSkill, type InitOptions, VALID_CATEGORIES, } from './init.js';
|
|
12
13
|
export { createSubagentCommand, generateSubagent, type SubagentOptions } from './subagent.js';
|
|
13
14
|
export { createTransformCommand, transformSkill, type TransformOptions } from './transform.js';
|
|
14
15
|
export { createMcpInitCommand, initMcpServer, type McpInitOptions } from './mcp-init.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/author/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/author/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AACjG,OAAO,EACL,SAAS,EACT,aAAa,EACb,YAAY,EACZ,KAAK,WAAW,EAChB,gBAAgB,GACjB,MAAM,WAAW,CAAA;AAElB,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAA;AAE7F,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAE9F,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAA;AAGxF,OAAO,EACL,qBAAqB,EACrB,UAAU,EACV,qBAAqB,EACrB,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,YAAY,CAAA"}
|
|
@@ -9,7 +9,10 @@
|
|
|
9
9
|
* and generating companion subagents.
|
|
10
10
|
*/
|
|
11
11
|
// Re-export command creators
|
|
12
|
-
|
|
12
|
+
// SMI-5129: the command factories moved to init.action.ts (sibling-split);
|
|
13
|
+
// the logic functions + types stay in init.ts.
|
|
14
|
+
export { createInitCommand, createValidateCommand, createPublishCommand } from './init.action.js';
|
|
15
|
+
export { initSkill, validateSkill, publishSkill, VALID_CATEGORIES, } from './init.js';
|
|
13
16
|
export { createSubagentCommand, generateSubagent } from './subagent.js';
|
|
14
17
|
export { createTransformCommand, transformSkill } from './transform.js';
|
|
15
18
|
export { createMcpInitCommand, initMcpServer } from './mcp-init.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/author/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,6BAA6B;AAC7B,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/author/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,6BAA6B;AAC7B,2EAA2E;AAC3E,+CAA+C;AAC/C,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AACjG,OAAO,EACL,SAAS,EACT,aAAa,EACb,YAAY,EAEZ,gBAAgB,GACjB,MAAM,WAAW,CAAA;AAElB,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAwB,MAAM,eAAe,CAAA;AAE7F,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAyB,MAAM,gBAAgB,CAAA;AAE9F,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAuB,MAAM,eAAe,CAAA;AAExF,oDAAoD;AACpD,OAAO,EACL,qBAAqB,EACrB,UAAU,EACV,qBAAqB,EACrB,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,YAAY,CAAA"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview `skillsmith author init|validate|publish` command factories +
|
|
3
|
+
* withTelemetry-wrapped action handlers.
|
|
4
|
+
* @module @skillsmith/cli/commands/author/init.action
|
|
5
|
+
* @see SMI-5129 — sibling-split of init.ts so the 3 author handlers can be
|
|
6
|
+
* wrapped without init.ts exceeding the 500-LOC gate. Mirrors the
|
|
7
|
+
* sync.action.ts / telemetry.action.ts convention (SMI-5127/SMI-5128): the
|
|
8
|
+
* business logic (initSkill/validateSkill/publishSkill) stays in init.ts;
|
|
9
|
+
* the commander factories + wrapped actions live here. One-way import
|
|
10
|
+
* (init.action → init), so no import cycle.
|
|
11
|
+
*/
|
|
12
|
+
import { Command } from 'commander';
|
|
13
|
+
export declare const initAction: (name: string | undefined, opts: Record<string, string | boolean | undefined>) => Promise<void>;
|
|
14
|
+
/**
|
|
15
|
+
* Create init command
|
|
16
|
+
* SMI-1473: Added non-interactive flags for E2E testing
|
|
17
|
+
*/
|
|
18
|
+
export declare function createInitCommand(): Command;
|
|
19
|
+
export declare const validateAction: (skillPath: string) => Promise<void>;
|
|
20
|
+
/**
|
|
21
|
+
* Create validate command
|
|
22
|
+
*/
|
|
23
|
+
export declare function createValidateCommand(): Command;
|
|
24
|
+
export declare const publishAction: (skillPath: string, opts: Record<string, string | boolean | undefined>) => Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* Create publish command
|
|
27
|
+
*/
|
|
28
|
+
export declare function createPublishCommand(): Command;
|
|
29
|
+
//# sourceMappingURL=init.action.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.action.d.ts","sourceRoot":"","sources":["../../../../src/commands/author/init.action.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAuCnC,eAAO,MAAM,UAAU,iGAIrB,CAAA;AAEF;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAa3C;AAgBD,eAAO,MAAM,cAAc,sCAIzB,CAAA;AAEF;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAK/C;AA8BD,eAAO,MAAM,aAAa,0FAIxB,CAAA;AAEF;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAU9C"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview `skillsmith author init|validate|publish` command factories +
|
|
3
|
+
* withTelemetry-wrapped action handlers.
|
|
4
|
+
* @module @skillsmith/cli/commands/author/init.action
|
|
5
|
+
* @see SMI-5129 — sibling-split of init.ts so the 3 author handlers can be
|
|
6
|
+
* wrapped without init.ts exceeding the 500-LOC gate. Mirrors the
|
|
7
|
+
* sync.action.ts / telemetry.action.ts convention (SMI-5127/SMI-5128): the
|
|
8
|
+
* business logic (initSkill/validateSkill/publishSkill) stays in init.ts;
|
|
9
|
+
* the commander factories + wrapped actions live here. One-way import
|
|
10
|
+
* (init.action → init), so no import cycle.
|
|
11
|
+
*/
|
|
12
|
+
import { Command } from 'commander';
|
|
13
|
+
import chalk from 'chalk';
|
|
14
|
+
import { withTelemetry } from '@skillsmith/core/telemetry';
|
|
15
|
+
import { sanitizeError } from '../../utils/sanitize.js';
|
|
16
|
+
import { InitSkillError } from '../../utils/errors.js';
|
|
17
|
+
import { initSkill, validateSkill, publishSkill } from './init.js';
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
// init
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
async function initActionImpl(name, opts) {
|
|
22
|
+
const targetPath = opts['path'] || '.';
|
|
23
|
+
try {
|
|
24
|
+
await initSkill(name, targetPath, {
|
|
25
|
+
description: opts['description'],
|
|
26
|
+
author: opts['author'],
|
|
27
|
+
category: opts['category'],
|
|
28
|
+
yes: opts['yes'],
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
// SMI-4314: typed InitSkillError → user-facing message is already
|
|
33
|
+
// composed (and chalk-styled); print it verbatim and exit with the
|
|
34
|
+
// requested code. Anything else is an unexpected bug — route
|
|
35
|
+
// through sanitizeError with the generic prefix.
|
|
36
|
+
if (error instanceof InitSkillError) {
|
|
37
|
+
console.error(error.message);
|
|
38
|
+
process.exit(error.exitCode);
|
|
39
|
+
}
|
|
40
|
+
console.error(chalk.red('Error initializing skill:'), sanitizeError(error));
|
|
41
|
+
process.exit(1);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
export const initAction = withTelemetry(initActionImpl, {
|
|
45
|
+
source: 'cli',
|
|
46
|
+
extractSkillId: () => 'author init',
|
|
47
|
+
extractFramework: () => 'cli',
|
|
48
|
+
});
|
|
49
|
+
/**
|
|
50
|
+
* Create init command
|
|
51
|
+
* SMI-1473: Added non-interactive flags for E2E testing
|
|
52
|
+
*/
|
|
53
|
+
export function createInitCommand() {
|
|
54
|
+
return new Command('init')
|
|
55
|
+
.description('Initialize a new skill directory')
|
|
56
|
+
.argument('[name]', 'Skill name')
|
|
57
|
+
.option('-p, --path <path>', 'Target directory', '.')
|
|
58
|
+
.option('-d, --description <description>', 'Skill description (non-interactive)')
|
|
59
|
+
.option('-a, --author <author>', 'Skill author (non-interactive)')
|
|
60
|
+
.option('-c, --category <category>', 'Skill category: development|productivity|communication|data|security|other (non-interactive)')
|
|
61
|
+
.option('-y, --yes', 'Auto-confirm overwrite (non-interactive)')
|
|
62
|
+
.action(initAction);
|
|
63
|
+
}
|
|
64
|
+
// ---------------------------------------------------------------------------
|
|
65
|
+
// validate
|
|
66
|
+
// ---------------------------------------------------------------------------
|
|
67
|
+
async function validateActionImpl(skillPath) {
|
|
68
|
+
try {
|
|
69
|
+
const valid = await validateSkill(skillPath);
|
|
70
|
+
process.exit(valid ? 0 : 1);
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
console.error(chalk.red('Error validating skill:'), sanitizeError(error));
|
|
74
|
+
process.exit(1);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
export const validateAction = withTelemetry(validateActionImpl, {
|
|
78
|
+
source: 'cli',
|
|
79
|
+
extractSkillId: () => 'author validate',
|
|
80
|
+
extractFramework: () => 'cli',
|
|
81
|
+
});
|
|
82
|
+
/**
|
|
83
|
+
* Create validate command
|
|
84
|
+
*/
|
|
85
|
+
export function createValidateCommand() {
|
|
86
|
+
return new Command('validate')
|
|
87
|
+
.description('Validate a local SKILL.md file')
|
|
88
|
+
.argument('[path]', 'Path to SKILL.md or skill directory', '.')
|
|
89
|
+
.action(validateAction);
|
|
90
|
+
}
|
|
91
|
+
// ---------------------------------------------------------------------------
|
|
92
|
+
// publish
|
|
93
|
+
// ---------------------------------------------------------------------------
|
|
94
|
+
async function publishActionImpl(skillPath, opts) {
|
|
95
|
+
try {
|
|
96
|
+
const referencePatterns = opts['referencePatterns']
|
|
97
|
+
? String(opts['referencePatterns'])
|
|
98
|
+
.split(',')
|
|
99
|
+
.map((p) => p.trim())
|
|
100
|
+
: undefined;
|
|
101
|
+
// SMI-2444: Use conditional spread to satisfy exactOptionalPropertyTypes
|
|
102
|
+
const success = await publishSkill(skillPath, {
|
|
103
|
+
...(opts['checkReferences'] !== undefined && {
|
|
104
|
+
checkReferences: opts['checkReferences'],
|
|
105
|
+
}),
|
|
106
|
+
...(referencePatterns !== undefined && { referencePatterns }),
|
|
107
|
+
});
|
|
108
|
+
process.exit(success ? 0 : 1);
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
console.error(chalk.red('Error publishing skill:'), sanitizeError(error));
|
|
112
|
+
process.exit(1);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
export const publishAction = withTelemetry(publishActionImpl, {
|
|
116
|
+
source: 'cli',
|
|
117
|
+
extractSkillId: () => 'author publish',
|
|
118
|
+
extractFramework: () => 'cli',
|
|
119
|
+
});
|
|
120
|
+
/**
|
|
121
|
+
* Create publish command
|
|
122
|
+
*/
|
|
123
|
+
export function createPublishCommand() {
|
|
124
|
+
return new Command('publish')
|
|
125
|
+
.description('Prepare skill for sharing')
|
|
126
|
+
.argument('[path]', 'Path to skill directory', '.')
|
|
127
|
+
.option('--check-references', 'Scan for project-specific references before publishing')
|
|
128
|
+
.option('--reference-patterns <patterns>', 'Additional regex patterns to check (comma-separated)')
|
|
129
|
+
.action(publishAction);
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=init.action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.action.js","sourceRoot":"","sources":["../../../../src/commands/author/init.action.ts"],"names":[],"mappings":"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"}
|