clawdhub 0.0.3 → 0.0.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.
@@ -2,7 +2,7 @@
2
2
  import { afterEach, describe, expect, it, vi } from 'vitest';
3
3
  const mockIntro = vi.fn();
4
4
  const mockOutro = vi.fn();
5
- const mockNote = vi.fn();
5
+ const mockLog = vi.fn();
6
6
  const mockMultiselect = vi.fn(async (_args) => []);
7
7
  let interactive = false;
8
8
  const defaultFindSkillFolders = async (root) => {
@@ -17,7 +17,6 @@ const defaultFindSkillFolders = async (root) => {
17
17
  vi.mock('@clack/prompts', () => ({
18
18
  intro: (value) => mockIntro(value),
19
19
  outro: (value) => mockOutro(value),
20
- note: (message, body) => mockNote(message, body),
21
20
  multiselect: (args) => mockMultiselect(args),
22
21
  text: vi.fn(async () => ''),
23
22
  isCancel: () => false,
@@ -67,6 +66,7 @@ function makeOpts() {
67
66
  dir: '/work/skills',
68
67
  site: 'https://clawdhub.com',
69
68
  registry: 'https://clawdhub.com',
69
+ registrySource: 'default',
70
70
  };
71
71
  }
72
72
  afterEach(async () => {
@@ -74,12 +74,17 @@ afterEach(async () => {
74
74
  const { findSkillFolders } = await import('../scanSkills.js');
75
75
  vi.mocked(findSkillFolders).mockImplementation(defaultFindSkillFolders);
76
76
  });
77
+ vi.spyOn(console, 'log').mockImplementation((...args) => {
78
+ mockLog(args.map(String).join(' '));
79
+ });
77
80
  describe('cmdSync', () => {
78
81
  it('classifies skills as new/update/synced (dry-run, mocked HTTP)', async () => {
79
82
  interactive = false;
80
83
  mockApiRequest.mockImplementation(async (_registry, args) => {
81
84
  if (args.path === '/api/cli/whoami')
82
85
  return { user: { handle: 'steipete' } };
86
+ if (args.path === '/api/cli/telemetry/sync')
87
+ return { ok: true };
83
88
  if (args.path.startsWith('/api/skill/resolve?')) {
84
89
  const u = new URL(`https://x.test${args.path}`);
85
90
  const slug = u.searchParams.get('slug');
@@ -97,8 +102,9 @@ describe('cmdSync', () => {
97
102
  });
98
103
  await cmdSync(makeOpts(), { root: ['/scan'], all: true, dryRun: true }, true);
99
104
  expect(mockCmdPublish).not.toHaveBeenCalled();
100
- const alreadySyncedNote = mockNote.mock.calls.find((call) => call[0] === 'Already synced');
101
- expect(alreadySyncedNote?.[1]).toMatch(/synced-skill/);
105
+ const output = mockLog.mock.calls.map((call) => String(call[0])).join('\n');
106
+ expect(output).toMatch(/Already synced/);
107
+ expect(output).toMatch(/synced-skill/);
102
108
  const dryRunOutro = mockOutro.mock.calls.at(-1)?.[0];
103
109
  expect(String(dryRunOutro)).toMatch(/Dry run: would upload 2 skill/);
104
110
  });
@@ -111,6 +117,8 @@ describe('cmdSync', () => {
111
117
  mockApiRequest.mockImplementation(async (_registry, args) => {
112
118
  if (args.path === '/api/cli/whoami')
113
119
  return { user: { handle: 'steipete' } };
120
+ if (args.path === '/api/cli/telemetry/sync')
121
+ return { ok: true };
114
122
  if (args.path.startsWith('/api/skill/resolve?')) {
115
123
  const u = new URL(`https://x.test${args.path}`);
116
124
  const slug = u.searchParams.get('slug');
@@ -127,11 +135,12 @@ describe('cmdSync', () => {
127
135
  throw new Error(`Unexpected apiRequest: ${args.path}`);
128
136
  });
129
137
  await cmdSync(makeOpts(), { root: ['/scan'], all: false, dryRun: false, bump: 'patch' }, true);
130
- const toSyncNote = mockNote.mock.calls.find((call) => call[0] === 'To sync');
131
- expect(toSyncNote?.[1]).toMatch(/- new-skill/);
132
- expect(toSyncNote?.[1]).toMatch(/- update-skill/);
133
- const syncedNote = mockNote.mock.calls.find((call) => call[0] === 'Already synced');
134
- expect(syncedNote?.[1]).toMatch(/- synced-skill/);
138
+ const output = mockLog.mock.calls.map((call) => String(call[0])).join('\n');
139
+ expect(output).toMatch(/To sync/);
140
+ expect(output).toMatch(/- new-skill/);
141
+ expect(output).toMatch(/- update-skill/);
142
+ expect(output).toMatch(/Already synced/);
143
+ expect(output).toMatch(/- synced-skill/);
135
144
  const lastCall = mockMultiselect.mock.calls.at(-1);
136
145
  const promptArgs = lastCall ? lastCall[0] : undefined;
137
146
  expect(promptArgs?.initialValues.length).toBe(2);
@@ -142,16 +151,19 @@ describe('cmdSync', () => {
142
151
  mockApiRequest.mockImplementation(async (_registry, args) => {
143
152
  if (args.path === '/api/cli/whoami')
144
153
  return { user: { handle: 'steipete' } };
154
+ if (args.path === '/api/cli/telemetry/sync')
155
+ return { ok: true };
145
156
  if (args.path.startsWith('/api/skill/resolve?')) {
146
157
  return { match: { version: '1.0.0' }, latestVersion: { version: '1.0.0' } };
147
158
  }
148
159
  throw new Error(`Unexpected apiRequest: ${args.path}`);
149
160
  });
150
161
  await cmdSync(makeOpts(), { root: ['/scan'], all: true, dryRun: false }, true);
151
- const syncedNote = mockNote.mock.calls.find((call) => call[0] === 'Already synced');
152
- expect(syncedNote?.[1]).toMatch(/new-skill@1.0.0/);
153
- expect(syncedNote?.[1]).toMatch(/synced-skill@1.0.0/);
154
- expect(String(syncedNote?.[1])).not.toMatch(/\n-/);
162
+ const output = mockLog.mock.calls.map((call) => String(call[0])).join('\n');
163
+ expect(output).toMatch(/Already synced/);
164
+ expect(output).toMatch(/new-skill@1.0.0/);
165
+ expect(output).toMatch(/synced-skill@1.0.0/);
166
+ expect(output).not.toMatch(/\n-/);
155
167
  const outro = mockOutro.mock.calls.at(-1)?.[0];
156
168
  expect(String(outro)).toMatch(/Nothing to sync/);
157
169
  });
@@ -169,6 +181,8 @@ describe('cmdSync', () => {
169
181
  mockApiRequest.mockImplementation(async (_registry, args) => {
170
182
  if (args.path === '/api/cli/whoami')
171
183
  return { user: { handle: 'steipete' } };
184
+ if (args.path === '/api/cli/telemetry/sync')
185
+ return { ok: true };
172
186
  if (args.path.startsWith('/api/skill/resolve?')) {
173
187
  return { match: null, latestVersion: null };
174
188
  }
@@ -176,14 +190,17 @@ describe('cmdSync', () => {
176
190
  });
177
191
  await cmdSync(makeOpts(), { root: ['/scan'], all: true, dryRun: false }, true);
178
192
  expect(mockCmdPublish).toHaveBeenCalledTimes(1);
179
- const duplicateNote = mockNote.mock.calls.find((call) => call[0] === 'Skipped duplicate slugs');
180
- expect(duplicateNote?.[1]).toMatch(/dup-skill/);
193
+ const output = mockLog.mock.calls.map((call) => String(call[0])).join('\n');
194
+ expect(output).toMatch(/Skipped duplicate slugs/);
195
+ expect(output).toMatch(/dup-skill/);
181
196
  });
182
197
  it('allows empty changelog for updates (interactive)', async () => {
183
198
  interactive = true;
184
199
  mockApiRequest.mockImplementation(async (_registry, args) => {
185
200
  if (args.path === '/api/cli/whoami')
186
201
  return { user: { handle: 'steipete' } };
202
+ if (args.path === '/api/cli/telemetry/sync')
203
+ return { ok: true };
187
204
  if (args.path.startsWith('/api/skill/resolve?')) {
188
205
  const u = new URL(`https://x.test${args.path}`);
189
206
  const slug = u.searchParams.get('slug');
@@ -206,5 +223,20 @@ describe('cmdSync', () => {
206
223
  throw new Error('Missing update-skill publish');
207
224
  expect(update.changelog).toBe('');
208
225
  });
226
+ it('skips telemetry when CLAWDHUB_DISABLE_TELEMETRY is set', async () => {
227
+ interactive = false;
228
+ process.env.CLAWDHUB_DISABLE_TELEMETRY = '1';
229
+ mockApiRequest.mockImplementation(async (_registry, args) => {
230
+ if (args.path === '/api/cli/whoami')
231
+ return { user: { handle: 'steipete' } };
232
+ if (args.path.startsWith('/api/skill/resolve?')) {
233
+ return { match: { version: '1.0.0' }, latestVersion: { version: '1.0.0' } };
234
+ }
235
+ throw new Error(`Unexpected apiRequest: ${args.path}`);
236
+ });
237
+ await cmdSync(makeOpts(), { root: ['/scan'], all: true, dryRun: true }, true);
238
+ expect(mockApiRequest.mock.calls.some((call) => call[1]?.path === '/api/cli/telemetry/sync')).toBe(false);
239
+ delete process.env.CLAWDHUB_DISABLE_TELEMETRY;
240
+ });
209
241
  });
210
242
  //# sourceMappingURL=sync.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sync.test.js","sourceRoot":"","sources":["../../../src/cli/commands/sync.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync.test.js","sourceRoot":"","sources":["../../../src/cli/commands/sync.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ import { type SkillFolder } from '../scanSkills.js';
2
+ import type { GlobalOpts } from '../types.js';
3
+ import type { Candidate, LocalSkill } from './syncTypes.js';
4
+ export declare function reportTelemetryIfEnabled(params: {
5
+ token: string;
6
+ registry: string;
7
+ scan: {
8
+ roots: string[];
9
+ skillsByRoot: Record<string, SkillFolder[]>;
10
+ };
11
+ candidates: Candidate[];
12
+ }): Promise<void>;
13
+ export declare function buildScanRoots(opts: GlobalOpts, extraRoots: string[] | undefined): string[];
14
+ export declare function normalizeConcurrency(value: number | undefined): number;
15
+ export declare function mapWithConcurrency<T, R>(items: T[], limit: number, fn: (item: T) => Promise<R>): Promise<R[]>;
16
+ export declare function checkRegistrySyncState(registry: string, skill: LocalSkill, resolveSupport: {
17
+ value: boolean | null;
18
+ }): Promise<Candidate>;
19
+ export declare function scanRoots(roots: string[]): Promise<{
20
+ roots: string[];
21
+ skillsByRoot: Record<string, SkillFolder[]>;
22
+ skills: SkillFolder[];
23
+ rootsWithSkills: string[];
24
+ }>;
25
+ export declare function mergeScan(left: {
26
+ roots: string[];
27
+ skillsByRoot: Record<string, SkillFolder[]>;
28
+ skills: SkillFolder[];
29
+ rootsWithSkills: string[];
30
+ }, right: {
31
+ roots: string[];
32
+ skillsByRoot: Record<string, SkillFolder[]>;
33
+ skills: SkillFolder[];
34
+ rootsWithSkills: string[];
35
+ }): {
36
+ roots: string[];
37
+ skillsByRoot: Record<string, SkillFolder[]>;
38
+ skills: SkillFolder[];
39
+ rootsWithSkills: string[];
40
+ };
41
+ export declare function selectToUpload(candidates: Candidate[], params: {
42
+ allowPrompt: boolean;
43
+ all: boolean;
44
+ bump: 'patch' | 'minor' | 'major';
45
+ }): Promise<Candidate[]>;
46
+ export declare function resolvePublishMeta(skill: Candidate, params: {
47
+ bump: 'patch' | 'minor' | 'major';
48
+ allowPrompt: boolean;
49
+ changelogFlag?: string;
50
+ }): Promise<{
51
+ publishVersion: string;
52
+ changelog: string;
53
+ }>;
54
+ export declare function getRegistryWithAuth(opts: GlobalOpts, token: string): Promise<string>;
55
+ export declare function formatList(values: string[], max: number): string;
56
+ export declare function printSection(title: string, body?: string): void;
57
+ export declare function dedupeSkillsBySlug(skills: SkillFolder[]): {
58
+ skills: SkillFolder[];
59
+ duplicates: string[];
60
+ };
61
+ export declare function formatActionableStatus(candidate: Candidate, bump: 'patch' | 'minor' | 'major'): string;
62
+ export declare function formatActionableLine(candidate: Candidate, bump: 'patch' | 'minor' | 'major'): string;
63
+ export declare function formatSyncedSummary(candidate: Candidate): string;
64
+ export declare function formatBulletList(lines: string[], max: number): string;
65
+ export declare function formatSyncedDisplay(synced: Candidate[]): string;
66
+ export declare function formatCommaList(values: string[], max: number): string;
@@ -0,0 +1,335 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { realpath } from 'node:fs/promises';
3
+ import { homedir } from 'node:os';
4
+ import { resolve } from 'node:path';
5
+ import { isCancel, multiselect } from '@clack/prompts';
6
+ import semver from 'semver';
7
+ import { apiRequest, downloadZip } from '../../http.js';
8
+ import { ApiCliTelemetrySyncResponseSchema, ApiCliWhoamiResponseSchema, ApiRoutes, ApiSkillMetaResponseSchema, ApiSkillResolveResponseSchema, } from '../../schema/index.js';
9
+ import { hashSkillZip } from '../../skills.js';
10
+ import { getRegistry } from '../registry.js';
11
+ import { findSkillFolders } from '../scanSkills.js';
12
+ import { fail, formatError } from '../ui.js';
13
+ export async function reportTelemetryIfEnabled(params) {
14
+ if (isTelemetryDisabled())
15
+ return;
16
+ const versionBySlug = new Map();
17
+ for (const candidate of params.candidates) {
18
+ versionBySlug.set(candidate.slug, candidate.matchVersion ?? null);
19
+ }
20
+ const roots = params.scan.roots.map((root) => ({
21
+ rootId: rootTelemetryId(root),
22
+ label: formatRootLabel(root),
23
+ skills: (params.scan.skillsByRoot[root] ?? []).map((skill) => ({
24
+ slug: skill.slug,
25
+ version: versionBySlug.get(skill.slug) ?? null,
26
+ })),
27
+ }));
28
+ try {
29
+ await apiRequest(params.registry, {
30
+ method: 'POST',
31
+ path: ApiRoutes.cliTelemetrySync,
32
+ token: params.token,
33
+ body: { roots },
34
+ }, ApiCliTelemetrySyncResponseSchema);
35
+ }
36
+ catch {
37
+ // ignore telemetry failures
38
+ }
39
+ }
40
+ function isTelemetryDisabled() {
41
+ const raw = process.env.CLAWDHUB_DISABLE_TELEMETRY;
42
+ if (!raw)
43
+ return false;
44
+ return ['1', 'true', 'yes', 'on'].includes(raw.trim().toLowerCase());
45
+ }
46
+ export function buildScanRoots(opts, extraRoots) {
47
+ const roots = [opts.workdir, opts.dir, ...(extraRoots ?? [])];
48
+ return Array.from(new Set(roots.map((root) => resolve(root))));
49
+ }
50
+ export function normalizeConcurrency(value) {
51
+ const raw = typeof value === 'number' ? value : 4;
52
+ const rounded = Number.isFinite(raw) ? Math.round(raw) : 4;
53
+ return Math.min(32, Math.max(1, rounded));
54
+ }
55
+ export async function mapWithConcurrency(items, limit, fn) {
56
+ const results = Array.from({ length: items.length });
57
+ let nextIndex = 0;
58
+ const workerCount = Math.min(Math.max(1, limit), items.length || 1);
59
+ async function worker() {
60
+ while (true) {
61
+ const index = nextIndex;
62
+ nextIndex += 1;
63
+ if (index >= items.length)
64
+ return;
65
+ results[index] = await fn(items[index]);
66
+ }
67
+ }
68
+ await Promise.all(Array.from({ length: workerCount }, () => worker()));
69
+ return results;
70
+ }
71
+ export async function checkRegistrySyncState(registry, skill, resolveSupport) {
72
+ if (resolveSupport.value !== false) {
73
+ try {
74
+ const resolved = await apiRequest(registry, {
75
+ method: 'GET',
76
+ path: `${ApiRoutes.skillResolve}?slug=${encodeURIComponent(skill.slug)}&hash=${encodeURIComponent(skill.fingerprint)}`,
77
+ }, ApiSkillResolveResponseSchema);
78
+ resolveSupport.value = true;
79
+ const latestVersion = resolved.latestVersion?.version ?? null;
80
+ const matchVersion = resolved.match?.version ?? null;
81
+ if (!latestVersion) {
82
+ return {
83
+ ...skill,
84
+ status: 'new',
85
+ matchVersion: null,
86
+ latestVersion: null,
87
+ };
88
+ }
89
+ return {
90
+ ...skill,
91
+ status: matchVersion ? 'synced' : 'update',
92
+ matchVersion,
93
+ latestVersion,
94
+ };
95
+ }
96
+ catch (error) {
97
+ const message = formatError(error);
98
+ if (/skill not found/i.test(message) || /HTTP 404/i.test(message)) {
99
+ resolveSupport.value = true;
100
+ return {
101
+ ...skill,
102
+ status: 'new',
103
+ matchVersion: null,
104
+ latestVersion: null,
105
+ };
106
+ }
107
+ if (/no matching routes found/i.test(message)) {
108
+ resolveSupport.value = false;
109
+ }
110
+ else {
111
+ throw error;
112
+ }
113
+ }
114
+ }
115
+ const meta = await apiRequest(registry, { method: 'GET', path: `${ApiRoutes.skill}?slug=${encodeURIComponent(skill.slug)}` }, ApiSkillMetaResponseSchema).catch(() => null);
116
+ const latestVersion = meta?.latestVersion?.version ?? null;
117
+ if (!latestVersion) {
118
+ return {
119
+ ...skill,
120
+ status: 'new',
121
+ matchVersion: null,
122
+ latestVersion: null,
123
+ };
124
+ }
125
+ const zip = await downloadZip(registry, { slug: skill.slug, version: latestVersion });
126
+ const remote = hashSkillZip(zip).fingerprint;
127
+ const matchVersion = remote === skill.fingerprint ? latestVersion : null;
128
+ return {
129
+ ...skill,
130
+ status: matchVersion ? 'synced' : 'update',
131
+ matchVersion,
132
+ latestVersion,
133
+ };
134
+ }
135
+ export async function scanRoots(roots) {
136
+ const all = [];
137
+ const rootsWithSkills = [];
138
+ const uniqueRoots = await dedupeRoots(roots);
139
+ const skillsByRoot = {};
140
+ for (const root of uniqueRoots) {
141
+ const found = await findSkillFolders(root);
142
+ skillsByRoot[root] = found;
143
+ if (found.length > 0)
144
+ rootsWithSkills.push(root);
145
+ all.push(...found);
146
+ }
147
+ const byFolder = new Map();
148
+ for (const folder of all) {
149
+ byFolder.set(folder.folder, folder);
150
+ }
151
+ return {
152
+ roots: uniqueRoots,
153
+ skillsByRoot,
154
+ skills: Array.from(byFolder.values()),
155
+ rootsWithSkills,
156
+ };
157
+ }
158
+ export function mergeScan(left, right) {
159
+ const mergedRoots = Array.from(new Set([...left.roots, ...right.roots]));
160
+ const skillsByRoot = {};
161
+ for (const root of mergedRoots) {
162
+ skillsByRoot[root] = right.skillsByRoot[root] ?? left.skillsByRoot[root] ?? [];
163
+ }
164
+ const byFolder = new Map();
165
+ for (const entry of [...left.skills, ...right.skills]) {
166
+ byFolder.set(entry.folder, entry);
167
+ }
168
+ const skills = Array.from(byFolder.values());
169
+ const rootsWithSkills = mergedRoots.filter((root) => (skillsByRoot[root]?.length ?? 0) > 0);
170
+ return { roots: mergedRoots, skillsByRoot, skills, rootsWithSkills };
171
+ }
172
+ async function dedupeRoots(roots) {
173
+ const seen = new Set();
174
+ const unique = [];
175
+ for (const root of roots) {
176
+ const resolved = resolve(root);
177
+ const canonical = await realpath(resolved).catch(() => null);
178
+ const key = canonical ?? resolved;
179
+ if (seen.has(key))
180
+ continue;
181
+ seen.add(key);
182
+ unique.push(key);
183
+ }
184
+ return unique;
185
+ }
186
+ export async function selectToUpload(candidates, params) {
187
+ if (params.all || !params.allowPrompt)
188
+ return candidates;
189
+ const valueByKey = new Map();
190
+ const choices = candidates.map((candidate) => {
191
+ const key = candidate.folder;
192
+ valueByKey.set(key, candidate);
193
+ return {
194
+ value: key,
195
+ label: `${candidate.slug} ${formatActionableStatus(candidate, params.bump)}`,
196
+ hint: `${abbreviatePath(candidate.folder)} | ${candidate.fileCount} files`,
197
+ };
198
+ });
199
+ const picked = await multiselect({
200
+ message: 'Select skills to upload',
201
+ options: choices,
202
+ initialValues: choices.map((choice) => choice.value),
203
+ required: false,
204
+ });
205
+ if (isCancel(picked))
206
+ fail('Canceled');
207
+ const selected = picked.map((key) => valueByKey.get(String(key))).filter(Boolean);
208
+ return selected;
209
+ }
210
+ export async function resolvePublishMeta(skill, params) {
211
+ if (skill.status === 'new') {
212
+ return { publishVersion: '1.0.0', changelog: '' };
213
+ }
214
+ const latest = skill.latestVersion;
215
+ if (!latest)
216
+ fail(`Could not resolve latest version for ${skill.slug}`);
217
+ const publishVersion = semver.inc(latest, params.bump);
218
+ if (!publishVersion)
219
+ fail(`Could not bump version for ${skill.slug}`);
220
+ const fromFlag = params.changelogFlag?.trim();
221
+ if (fromFlag)
222
+ return { publishVersion, changelog: fromFlag };
223
+ return { publishVersion, changelog: '' };
224
+ }
225
+ export async function getRegistryWithAuth(opts, token) {
226
+ const registry = await getRegistry(opts, { cache: true });
227
+ await apiRequest(registry, { method: 'GET', path: ApiRoutes.cliWhoami, token }, ApiCliWhoamiResponseSchema);
228
+ return registry;
229
+ }
230
+ export function formatList(values, max) {
231
+ if (values.length === 0)
232
+ return '';
233
+ const shown = values.map(abbreviatePath);
234
+ if (shown.length <= max)
235
+ return shown.join('\n');
236
+ const head = shown.slice(0, Math.max(1, max - 1));
237
+ const rest = values.length - head.length;
238
+ return [...head, `… +${rest} more`].join('\n');
239
+ }
240
+ export function printSection(title, body) {
241
+ const trimmed = body?.trim();
242
+ if (!trimmed) {
243
+ console.log(title);
244
+ return;
245
+ }
246
+ if (trimmed.includes('\n')) {
247
+ console.log(`\n${title}\n${trimmed}`);
248
+ return;
249
+ }
250
+ console.log(`${title}: ${trimmed}`);
251
+ }
252
+ function abbreviatePath(value) {
253
+ const home = homedir();
254
+ if (value.startsWith(home))
255
+ return `~${value.slice(home.length)}`;
256
+ return value;
257
+ }
258
+ function rootTelemetryId(value) {
259
+ return createHash('sha256').update(value).digest('hex');
260
+ }
261
+ function formatRootLabel(value) {
262
+ const home = homedir();
263
+ if (value === home)
264
+ return '~';
265
+ const normalized = value.replaceAll('\\', '/');
266
+ const normalizedHome = home.replaceAll('\\', '/');
267
+ const isHome = normalized === normalizedHome || normalized.startsWith(`${normalizedHome}/`);
268
+ const stripped = isHome ? normalized.slice(normalizedHome.length).replace(/^\//, '') : normalized;
269
+ const parts = stripped.split('/').filter(Boolean);
270
+ const tail = parts.slice(-2).join('/');
271
+ if (!tail)
272
+ return isHome ? '~' : '…';
273
+ return isHome ? `~/${tail}` : `…/${tail}`;
274
+ }
275
+ export function dedupeSkillsBySlug(skills) {
276
+ const bySlug = new Map();
277
+ for (const skill of skills) {
278
+ const existing = bySlug.get(skill.slug);
279
+ if (existing)
280
+ existing.push(skill);
281
+ else
282
+ bySlug.set(skill.slug, [skill]);
283
+ }
284
+ const unique = [];
285
+ const duplicates = [];
286
+ for (const [slug, entries] of bySlug.entries()) {
287
+ unique.push(entries[0]);
288
+ if (entries.length > 1)
289
+ duplicates.push(`${slug} (${entries.length})`);
290
+ }
291
+ return { skills: unique, duplicates };
292
+ }
293
+ export function formatActionableStatus(candidate, bump) {
294
+ if (candidate.status === 'new')
295
+ return 'NEW';
296
+ const latest = candidate.latestVersion;
297
+ const next = latest ? semver.inc(latest, bump) : null;
298
+ if (latest && next)
299
+ return `UPDATE ${latest} → ${next}`;
300
+ return 'UPDATE';
301
+ }
302
+ export function formatActionableLine(candidate, bump) {
303
+ return `${candidate.slug} ${formatActionableStatus(candidate, bump)} (${candidate.fileCount} files)`;
304
+ }
305
+ function formatSyncedLine(candidate) {
306
+ const version = candidate.matchVersion ?? candidate.latestVersion ?? 'unknown';
307
+ return `${candidate.slug} synced (${version})`;
308
+ }
309
+ export function formatSyncedSummary(candidate) {
310
+ const version = candidate.matchVersion ?? candidate.latestVersion;
311
+ return version ? `${candidate.slug}@${version}` : candidate.slug;
312
+ }
313
+ export function formatBulletList(lines, max) {
314
+ if (lines.length <= max)
315
+ return lines.map((line) => `- ${line}`).join('\n');
316
+ const head = lines.slice(0, max);
317
+ const rest = lines.length - head.length;
318
+ return [...head, `... +${rest} more`].map((line) => `- ${line}`).join('\n');
319
+ }
320
+ export function formatSyncedDisplay(synced) {
321
+ const lines = synced.map(formatSyncedLine);
322
+ if (lines.length <= 12)
323
+ return formatBulletList(lines, 12);
324
+ return formatCommaList(synced.map(formatSyncedSummary), 24);
325
+ }
326
+ export function formatCommaList(values, max) {
327
+ if (values.length === 0)
328
+ return '';
329
+ if (values.length <= max)
330
+ return values.join(', ');
331
+ const head = values.slice(0, Math.max(1, max - 1));
332
+ const rest = values.length - head.length;
333
+ return `${head.join(', ')}, ... +${rest} more`;
334
+ }
335
+ //# sourceMappingURL=syncHelpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"syncHelpers.js","sourceRoot":"","sources":["../../../src/cli/commands/syncHelpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,MAAM,MAAM,QAAQ,CAAA;AAC3B,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AACvD,OAAO,EACL,iCAAiC,EACjC,0BAA0B,EAC1B,SAAS,EACT,0BAA0B,EAC1B,6BAA6B,GAC9B,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,gBAAgB,EAAoB,MAAM,kBAAkB,CAAA;AAErE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAiB,MAAM,UAAU,CAAA;AAG3D,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,MAK9C;IACC,IAAI,mBAAmB,EAAE;QAAE,OAAM;IACjC,MAAM,aAAa,GAAG,IAAI,GAAG,EAAyB,CAAA;IACtD,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QAC1C,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,YAAY,IAAI,IAAI,CAAC,CAAA;IACnE,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC7C,MAAM,EAAE,eAAe,CAAC,IAAI,CAAC;QAC7B,KAAK,EAAE,eAAe,CAAC,IAAI,CAAC;QAC5B,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC7D,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,OAAO,EAAE,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI;SAC/C,CAAC,CAAC;KACJ,CAAC,CAAC,CAAA;IAEH,IAAI,CAAC;QACH,MAAM,UAAU,CACd,MAAM,CAAC,QAAQ,EACf;YACE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,SAAS,CAAC,gBAAgB;YAChC,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,IAAI,EAAE,EAAE,KAAK,EAAE;SAChB,EACD,iCAAiC,CAClC,CAAA;IACH,CAAC;IAAC,MAAM,CAAC;QACP,4BAA4B;IAC9B,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB;IAC1B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAA;IAClD,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAA;IACtB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAA;AACtE,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAgB,EAAE,UAAgC;IAC/E,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAA;IAC7D,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;AAChE,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAyB;IAC5D,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IACjD,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC1D,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAA;AAC3C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAO,KAAU,EAAE,KAAa,EAAE,EAA2B;IACnG,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAQ,CAAA;IAC3D,IAAI,SAAS,GAAG,CAAC,CAAA;IACjB,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAA;IAEnE,KAAK,UAAU,MAAM;QACnB,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,KAAK,GAAG,SAAS,CAAA;YACvB,SAAS,IAAI,CAAC,CAAA;YACd,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM;gBAAE,OAAM;YACjC,OAAO,CAAC,KAAK,CAAC,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,KAAK,CAAM,CAAC,CAAA;QAC9C,CAAC;IACH,CAAC;IAED,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACtE,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,QAAgB,EAChB,KAAiB,EACjB,cAAyC;IAEzC,IAAI,cAAc,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,UAAU,CAC/B,QAAQ,EACR;gBACE,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,GAAG,SAAS,CAAC,YAAY,SAAS,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,kBAAkB,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE;aACvH,EACD,6BAA6B,CAC9B,CAAA;YACD,cAAc,CAAC,KAAK,GAAG,IAAI,CAAA;YAC3B,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,EAAE,OAAO,IAAI,IAAI,CAAA;YAC7D,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,EAAE,OAAO,IAAI,IAAI,CAAA;YACpD,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,OAAO;oBACL,GAAG,KAAK;oBACR,MAAM,EAAE,KAAK;oBACb,YAAY,EAAE,IAAI;oBAClB,aAAa,EAAE,IAAI;iBACpB,CAAA;YACH,CAAC;YACD,OAAO;gBACL,GAAG,KAAK;gBACR,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ;gBAC1C,YAAY;gBACZ,aAAa;aACd,CAAA;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,CAAA;YAClC,IAAI,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBAClE,cAAc,CAAC,KAAK,GAAG,IAAI,CAAA;gBAC3B,OAAO;oBACL,GAAG,KAAK;oBACR,MAAM,EAAE,KAAK;oBACb,YAAY,EAAE,IAAI;oBAClB,aAAa,EAAE,IAAI;iBACpB,CAAA;YACH,CAAC;YACD,IAAI,2BAA2B,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC9C,cAAc,CAAC,KAAK,GAAG,KAAK,CAAA;YAC9B,CAAC;iBAAM,CAAC;gBACN,MAAM,KAAK,CAAA;YACb,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,UAAU,CAC3B,QAAQ,EACR,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC,KAAK,SAAS,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EACpF,0BAA0B,CAC3B,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;IAEnB,MAAM,aAAa,GAAG,IAAI,EAAE,aAAa,EAAE,OAAO,IAAI,IAAI,CAAA;IAC1D,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO;YACL,GAAG,KAAK;YACR,MAAM,EAAE,KAAK;YACb,YAAY,EAAE,IAAI;YAClB,aAAa,EAAE,IAAI;SACpB,CAAA;IACH,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAA;IACrF,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,CAAA;IAC5C,MAAM,YAAY,GAAG,MAAM,KAAK,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAA;IAExE,OAAO;QACL,GAAG,KAAK;QACR,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ;QAC1C,YAAY;QACZ,aAAa;KACd,CAAA;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,KAAe;IAC7C,MAAM,GAAG,GAAkB,EAAE,CAAA;IAC7B,MAAM,eAAe,GAAa,EAAE,CAAA;IACpC,MAAM,WAAW,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAA;IAC5C,MAAM,YAAY,GAAkC,EAAE,CAAA;IACtD,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAA;QAC1C,YAAY,CAAC,IAAI,CAAC,GAAG,KAAK,CAAA;QAC1B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAChD,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAA;IACpB,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAuB,CAAA;IAC/C,KAAK,MAAM,MAAM,IAAI,GAAG,EAAE,CAAC;QACzB,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACrC,CAAC;IACD,OAAO;QACL,KAAK,EAAE,WAAW;QAClB,YAAY;QACZ,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QACrC,eAAe;KAChB,CAAA;AACH,CAAC;AAED,MAAM,UAAU,SAAS,CACvB,IAKC,EACD,KAKC;IAED,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IACxE,MAAM,YAAY,GAAkC,EAAE,CAAA;IACtD,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,YAAY,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;IAChF,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAuB,CAAA;IAC/C,KAAK,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QACtD,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IACnC,CAAC;IACD,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;IAC5C,MAAM,eAAe,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;IAC3F,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,CAAA;AACtE,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,KAAe;IACxC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAC9B,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;QAC9B,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;QAC5D,MAAM,GAAG,GAAG,SAAS,IAAI,QAAQ,CAAA;QACjC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAQ;QAC3B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACb,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAClB,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,UAAuB,EACvB,MAAiF;IAEjF,IAAI,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW;QAAE,OAAO,UAAU,CAAA;IAExD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAqB,CAAA;IAC/C,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;QAC3C,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAA;QAC5B,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAA;QAC9B,OAAO;YACL,KAAK,EAAE,GAAG;YACV,KAAK,EAAE,GAAG,SAAS,CAAC,IAAI,KAAK,sBAAsB,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE;YAC7E,IAAI,EAAE,GAAG,cAAc,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,SAAS,CAAC,SAAS,QAAQ;SAC3E,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC;QAC/B,OAAO,EAAE,yBAAyB;QAClC,OAAO,EAAE,OAAO;QAChB,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC;QACpD,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAA;IACF,IAAI,QAAQ,CAAC,MAAM,CAAC;QAAE,IAAI,CAAC,UAAU,CAAC,CAAA;IACtC,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAgB,CAAA;IAChG,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,KAAgB,EAChB,MAA2F;IAE3F,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;QAC3B,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,CAAA;IACnD,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAA;IAClC,IAAI,CAAC,MAAM;QAAE,IAAI,CAAC,wCAAwC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;IACvE,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;IACtD,IAAI,CAAC,cAAc;QAAE,IAAI,CAAC,8BAA8B,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;IAErE,MAAM,QAAQ,GAAG,MAAM,CAAC,aAAa,EAAE,IAAI,EAAE,CAAA;IAC7C,IAAI,QAAQ;QAAE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAA;IAE5D,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,EAAE,EAAE,CAAA;AAC1C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,IAAgB,EAAE,KAAa;IACvE,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IACzD,MAAM,UAAU,CACd,QAAQ,EACR,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,SAAS,EAAE,KAAK,EAAE,EACnD,0BAA0B,CAC3B,CAAA;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAgB,EAAE,GAAW;IACtD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IAClC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;IACxC,IAAI,KAAK,CAAC,MAAM,IAAI,GAAG;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAChD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAA;IACjD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;IACxC,OAAO,CAAC,GAAG,IAAI,EAAE,MAAM,IAAI,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAChD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAa,EAAE,IAAa;IACvD,MAAM,OAAO,GAAG,IAAI,EAAE,IAAI,EAAE,CAAA;IAC5B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QAClB,OAAM;IACR,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,KAAK,OAAO,EAAE,CAAC,CAAA;QACrC,OAAM;IACR,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,KAAK,OAAO,EAAE,CAAC,CAAA;AACrC,CAAC;AAED,SAAS,cAAc,CAAC,KAAa;IACnC,MAAM,IAAI,GAAG,OAAO,EAAE,CAAA;IACtB,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAA;IACjE,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AACzD,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,MAAM,IAAI,GAAG,OAAO,EAAE,CAAA;IACtB,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,GAAG,CAAA;IAE9B,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IAC9C,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IACjD,MAAM,MAAM,GAAG,UAAU,KAAK,cAAc,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,cAAc,GAAG,CAAC,CAAA;IAE3F,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAA;IACjG,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IACjD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAEtC,IAAI,CAAC,IAAI;QAAE,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAA;IACpC,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAA;AAC3C,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAqB;IACtD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAyB,CAAA;IAC/C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACvC,IAAI,QAAQ;YAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;;YAC7B,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;IACtC,CAAC;IACD,MAAM,MAAM,GAAkB,EAAE,CAAA;IAChC,MAAM,UAAU,GAAa,EAAE,CAAA;IAC/B,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;QAC/C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAgB,CAAC,CAAA;QACtC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,CAAA;IACxE,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,CAAA;AACvC,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,SAAoB,EAAE,IAAiC;IAC5F,IAAI,SAAS,CAAC,MAAM,KAAK,KAAK;QAAE,OAAO,KAAK,CAAA;IAC5C,MAAM,MAAM,GAAG,SAAS,CAAC,aAAa,CAAA;IACtC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IACrD,IAAI,MAAM,IAAI,IAAI;QAAE,OAAO,UAAU,MAAM,MAAM,IAAI,EAAE,CAAA;IACvD,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,SAAoB,EAAE,IAAiC;IAC1F,OAAO,GAAG,SAAS,CAAC,IAAI,KAAK,sBAAsB,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,SAAS,CAAC,SAAS,SAAS,CAAA;AACxG,CAAC;AAED,SAAS,gBAAgB,CAAC,SAAoB;IAC5C,MAAM,OAAO,GAAG,SAAS,CAAC,YAAY,IAAI,SAAS,CAAC,aAAa,IAAI,SAAS,CAAA;IAC9E,OAAO,GAAG,SAAS,CAAC,IAAI,aAAa,OAAO,GAAG,CAAA;AACjD,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,SAAoB;IACtD,MAAM,OAAO,GAAG,SAAS,CAAC,YAAY,IAAI,SAAS,CAAC,aAAa,CAAA;IACjE,OAAO,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,IAAI,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAA;AAClE,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAe,EAAE,GAAW;IAC3D,IAAI,KAAK,CAAC,MAAM,IAAI,GAAG;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC3E,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IAChC,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;IACvC,OAAO,CAAC,GAAG,IAAI,EAAE,QAAQ,IAAI,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC7E,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAmB;IACrD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;IAC1C,IAAI,KAAK,CAAC,MAAM,IAAI,EAAE;QAAE,OAAO,gBAAgB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IAC1D,OAAO,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,EAAE,CAAC,CAAA;AAC7D,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAgB,EAAE,GAAW;IAC3D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IAClC,IAAI,MAAM,CAAC,MAAM,IAAI,GAAG;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAClD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAA;IAClD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;IACxC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,OAAO,CAAA;AAChD,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { SkillFolder } from '../scanSkills.js';
2
+ export type SyncOptions = {
3
+ root?: string[];
4
+ all?: boolean;
5
+ dryRun?: boolean;
6
+ bump?: 'patch' | 'minor' | 'major';
7
+ changelog?: string;
8
+ tags?: string;
9
+ concurrency?: number;
10
+ };
11
+ export type Candidate = SkillFolder & {
12
+ fingerprint: string;
13
+ fileCount: number;
14
+ status: 'synced' | 'new' | 'update';
15
+ matchVersion: string | null;
16
+ latestVersion: string | null;
17
+ };
18
+ export type LocalSkill = SkillFolder & {
19
+ fingerprint: string;
20
+ fileCount: number;
21
+ };