uasp-skills 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +117 -0
  3. package/bin/skills.js +6 -0
  4. package/dist/cli/commands/add.d.ts +6 -0
  5. package/dist/cli/commands/add.d.ts.map +1 -0
  6. package/dist/cli/commands/add.js +81 -0
  7. package/dist/cli/commands/add.js.map +1 -0
  8. package/dist/cli/commands/init.d.ts +6 -0
  9. package/dist/cli/commands/init.d.ts.map +1 -0
  10. package/dist/cli/commands/init.js +28 -0
  11. package/dist/cli/commands/init.js.map +1 -0
  12. package/dist/cli/commands/list.d.ts +6 -0
  13. package/dist/cli/commands/list.d.ts.map +1 -0
  14. package/dist/cli/commands/list.js +39 -0
  15. package/dist/cli/commands/list.js.map +1 -0
  16. package/dist/cli/commands/remove.d.ts +6 -0
  17. package/dist/cli/commands/remove.d.ts.map +1 -0
  18. package/dist/cli/commands/remove.js +44 -0
  19. package/dist/cli/commands/remove.js.map +1 -0
  20. package/dist/cli/commands/search.d.ts +6 -0
  21. package/dist/cli/commands/search.d.ts.map +1 -0
  22. package/dist/cli/commands/search.js +46 -0
  23. package/dist/cli/commands/search.js.map +1 -0
  24. package/dist/cli/index.d.ts +8 -0
  25. package/dist/cli/index.d.ts.map +1 -0
  26. package/dist/cli/index.js +26 -0
  27. package/dist/cli/index.js.map +1 -0
  28. package/dist/core/github.d.ts +39 -0
  29. package/dist/core/github.d.ts.map +1 -0
  30. package/dist/core/github.js +91 -0
  31. package/dist/core/github.js.map +1 -0
  32. package/dist/core/index.d.ts +5 -0
  33. package/dist/core/index.d.ts.map +1 -0
  34. package/dist/core/index.js +5 -0
  35. package/dist/core/index.js.map +1 -0
  36. package/dist/core/installer.d.ts +88 -0
  37. package/dist/core/installer.d.ts.map +1 -0
  38. package/dist/core/installer.js +493 -0
  39. package/dist/core/installer.js.map +1 -0
  40. package/dist/core/registry.d.ts +26 -0
  41. package/dist/core/registry.d.ts.map +1 -0
  42. package/dist/core/registry.js +69 -0
  43. package/dist/core/registry.js.map +1 -0
  44. package/dist/core/validator.d.ts +17 -0
  45. package/dist/core/validator.d.ts.map +1 -0
  46. package/dist/core/validator.js +318 -0
  47. package/dist/core/validator.js.map +1 -0
  48. package/dist/index.d.ts +8 -0
  49. package/dist/index.d.ts.map +1 -0
  50. package/dist/index.js +10 -0
  51. package/dist/index.js.map +1 -0
  52. package/dist/types/index.d.ts +3 -0
  53. package/dist/types/index.d.ts.map +1 -0
  54. package/dist/types/index.js +3 -0
  55. package/dist/types/index.js.map +1 -0
  56. package/dist/types/registry.d.ts +43 -0
  57. package/dist/types/registry.d.ts.map +1 -0
  58. package/dist/types/registry.js +5 -0
  59. package/dist/types/registry.js.map +1 -0
  60. package/dist/types/skill.d.ts +128 -0
  61. package/dist/types/skill.d.ts.map +1 -0
  62. package/dist/types/skill.js +6 -0
  63. package/dist/types/skill.js.map +1 -0
  64. package/package.json +66 -0
@@ -0,0 +1,493 @@
1
+ /**
2
+ * Skill installation management
3
+ */
4
+ import fs from 'fs-extra';
5
+ import path from 'path';
6
+ import os from 'os';
7
+ import yaml from 'yaml';
8
+ import { fetchSkillFile } from './github.js';
9
+ import { validateSkill } from './validator.js';
10
+ // ============================================================================
11
+ // Directory Paths
12
+ // ============================================================================
13
+ /**
14
+ * Get the .agent directory path (project-local, new format)
15
+ */
16
+ export function getAgentDir(projectDir = process.cwd()) {
17
+ return path.join(projectDir, '.agent');
18
+ }
19
+ /**
20
+ * Get the ~/.agents directory path (Claude Code global skills)
21
+ */
22
+ export function getClaudeAgentsDir() {
23
+ return path.join(os.homedir(), '.agents');
24
+ }
25
+ /**
26
+ * Get the ~/.agents/skills directory path
27
+ */
28
+ export function getClaudeSkillsDir() {
29
+ return path.join(getClaudeAgentsDir(), 'skills');
30
+ }
31
+ /**
32
+ * Get the ~/.claude directory path
33
+ */
34
+ export function getClaudeDir() {
35
+ return path.join(os.homedir(), '.claude');
36
+ }
37
+ /**
38
+ * Get the ~/.claude/skills directory path (symlinks)
39
+ */
40
+ export function getClaudeSymlinksDir() {
41
+ return path.join(getClaudeDir(), 'skills');
42
+ }
43
+ /**
44
+ * Get the ~/.agents/.skill-lock.json path
45
+ */
46
+ export function getClaudeLockFilePath() {
47
+ return path.join(getClaudeAgentsDir(), '.skill-lock.json');
48
+ }
49
+ /**
50
+ * Get the skills directory within .agent
51
+ */
52
+ export function getSkillsDir(projectDir = process.cwd()) {
53
+ return path.join(getAgentDir(projectDir), 'skills');
54
+ }
55
+ /**
56
+ * Load or create Claude Code lock file
57
+ */
58
+ async function loadClaudeLockFile() {
59
+ const lockPath = getClaudeLockFilePath();
60
+ if (await fs.pathExists(lockPath)) {
61
+ const content = await fs.readFile(lockPath, 'utf-8');
62
+ return JSON.parse(content);
63
+ }
64
+ return {
65
+ version: 3,
66
+ skills: {},
67
+ };
68
+ }
69
+ /**
70
+ * Save Claude Code lock file
71
+ */
72
+ async function saveClaudeLockFile(lockFile) {
73
+ const lockPath = getClaudeLockFilePath();
74
+ await fs.ensureDir(path.dirname(lockPath));
75
+ await fs.writeFile(lockPath, JSON.stringify(lockFile, null, 2));
76
+ }
77
+ // ============================================================================
78
+ // UASP to SKILL.md Conversion
79
+ // ============================================================================
80
+ /**
81
+ * Convert a UASP skill to Claude Code SKILL.md format
82
+ */
83
+ export function convertToSkillMd(skill, registrySkill) {
84
+ const lines = [];
85
+ // Frontmatter
86
+ lines.push('---');
87
+ lines.push(`name: ${skill.meta.name}`);
88
+ lines.push(`description: ${skill.meta.description || registrySkill.description}`);
89
+ // Add allowed-tools for CLI skills
90
+ if (skill.meta.type === 'cli' && skill.commands) {
91
+ lines.push(`allowed-tools: Bash(${skill.meta.name}:*)`);
92
+ }
93
+ lines.push('metadata:');
94
+ lines.push(` version: "${skill.meta.version}"`);
95
+ lines.push(` type: ${skill.meta.type}`);
96
+ lines.push(` format: uasp`);
97
+ lines.push('---');
98
+ lines.push('');
99
+ // Title
100
+ const title = skill.meta.name
101
+ .split('-')
102
+ .map((w) => w.charAt(0).toUpperCase() + w.slice(1))
103
+ .join(' ');
104
+ lines.push(`# ${title}`);
105
+ lines.push('');
106
+ lines.push(skill.meta.description || registrySkill.description);
107
+ lines.push('');
108
+ // Triggers/Keywords
109
+ if (skill.triggers) {
110
+ if (skill.triggers.keywords?.length) {
111
+ lines.push('## Keywords');
112
+ lines.push('');
113
+ lines.push(skill.triggers.keywords.join(', '));
114
+ lines.push('');
115
+ }
116
+ if (skill.triggers.intents?.length) {
117
+ lines.push('## Intents');
118
+ lines.push('');
119
+ skill.triggers.intents.forEach((intent) => lines.push(`- ${intent}`));
120
+ lines.push('');
121
+ }
122
+ }
123
+ // Constraints
124
+ if (skill.constraints) {
125
+ lines.push('## Constraints');
126
+ lines.push('');
127
+ if (skill.constraints.never?.length) {
128
+ lines.push('### Never');
129
+ lines.push('');
130
+ skill.constraints.never.forEach((c) => lines.push(`- ${c}`));
131
+ lines.push('');
132
+ }
133
+ if (skill.constraints.always?.length) {
134
+ lines.push('### Always');
135
+ lines.push('');
136
+ skill.constraints.always.forEach((c) => lines.push(`- ${c}`));
137
+ lines.push('');
138
+ }
139
+ if (skill.constraints.prefer?.length) {
140
+ lines.push('### Preferences');
141
+ lines.push('');
142
+ skill.constraints.prefer.forEach((p) => {
143
+ const when = p.when ? ` when ${p.when}` : '';
144
+ lines.push(`- Prefer **${p.use}** over ${p.over}${when}`);
145
+ });
146
+ lines.push('');
147
+ }
148
+ }
149
+ // Decisions
150
+ if (skill.decisions?.length) {
151
+ lines.push('## Decisions');
152
+ lines.push('');
153
+ skill.decisions.forEach((d) => {
154
+ lines.push(`- **When** ${d.when}: ${d.then}`);
155
+ });
156
+ lines.push('');
157
+ }
158
+ // Commands (for CLI skills)
159
+ if (skill.commands && Object.keys(skill.commands).length > 0) {
160
+ lines.push('## Commands');
161
+ lines.push('');
162
+ for (const [cmdName, cmd] of Object.entries(skill.commands)) {
163
+ lines.push(`### ${cmdName}`);
164
+ lines.push('');
165
+ lines.push('```');
166
+ lines.push(cmd.syntax);
167
+ lines.push('```');
168
+ lines.push('');
169
+ if (cmd.description) {
170
+ lines.push(cmd.description);
171
+ lines.push('');
172
+ }
173
+ if (cmd.args?.length) {
174
+ lines.push('**Arguments:**');
175
+ cmd.args.forEach((arg) => {
176
+ const req = arg.required ? ' (required)' : '';
177
+ const desc = arg.description ? ` - ${arg.description}` : '';
178
+ lines.push(`- \`${arg.name}\`: ${arg.type}${req}${desc}`);
179
+ });
180
+ lines.push('');
181
+ }
182
+ if (cmd.flags?.length) {
183
+ lines.push('**Flags:**');
184
+ cmd.flags.forEach((flag) => {
185
+ const short = flag.short ? `${flag.short}, ` : '';
186
+ lines.push(`- \`${short}${flag.name}\`: ${flag.purpose || flag.type}`);
187
+ });
188
+ lines.push('');
189
+ }
190
+ if (cmd.note) {
191
+ lines.push(`> ${cmd.note}`);
192
+ lines.push('');
193
+ }
194
+ }
195
+ }
196
+ // Workflows
197
+ if (skill.workflows && Object.keys(skill.workflows).length > 0) {
198
+ lines.push('## Workflows');
199
+ lines.push('');
200
+ for (const [wfName, wf] of Object.entries(skill.workflows)) {
201
+ lines.push(`### ${wfName}`);
202
+ lines.push('');
203
+ lines.push(wf.description);
204
+ lines.push('');
205
+ if (wf.steps?.length) {
206
+ lines.push('**Steps:**');
207
+ wf.steps.forEach((step, i) => {
208
+ const note = step.note ? ` - ${step.note}` : '';
209
+ lines.push(`${i + 1}. \`${step.cmd}\`${note}`);
210
+ });
211
+ lines.push('');
212
+ }
213
+ }
214
+ }
215
+ // Sources
216
+ if (skill.sources?.length) {
217
+ lines.push('## References');
218
+ lines.push('');
219
+ skill.sources.forEach((src) => {
220
+ if (src.url) {
221
+ lines.push(`- [${src.id}](${src.url}) - ${src.use_for}`);
222
+ }
223
+ else if (src.path) {
224
+ lines.push(`- ${src.id}: ${src.path} - ${src.use_for}`);
225
+ }
226
+ });
227
+ lines.push('');
228
+ }
229
+ // Footer
230
+ lines.push('---');
231
+ lines.push('');
232
+ lines.push(`*Converted from UASP format (${skill.meta.type} skill)*`);
233
+ return lines.join('\n');
234
+ }
235
+ /**
236
+ * Get the settings.json path
237
+ */
238
+ export function getSettingsPath(projectDir = process.cwd()) {
239
+ return path.join(getAgentDir(projectDir), 'settings.json');
240
+ }
241
+ /**
242
+ * Load or create settings.json
243
+ */
244
+ export async function loadSettings(projectDir = process.cwd()) {
245
+ const settingsPath = getSettingsPath(projectDir);
246
+ if (await fs.pathExists(settingsPath)) {
247
+ const content = await fs.readFile(settingsPath, 'utf-8');
248
+ return JSON.parse(content);
249
+ }
250
+ // Return default config
251
+ return {
252
+ version: '1.0.0',
253
+ skills: {
254
+ installed: [],
255
+ },
256
+ triggers: {
257
+ keywords: {},
258
+ filePatterns: {},
259
+ },
260
+ };
261
+ }
262
+ /**
263
+ * Save settings.json
264
+ */
265
+ export async function saveSettings(config, projectDir = process.cwd()) {
266
+ const settingsPath = getSettingsPath(projectDir);
267
+ await fs.ensureDir(path.dirname(settingsPath));
268
+ await fs.writeFile(settingsPath, JSON.stringify(config, null, 2));
269
+ }
270
+ /**
271
+ * Initialize .agent directory structure
272
+ */
273
+ export async function initAgentDir(projectDir = process.cwd()) {
274
+ const agentDir = getAgentDir(projectDir);
275
+ const skillsDir = getSkillsDir(projectDir);
276
+ await fs.ensureDir(agentDir);
277
+ await fs.ensureDir(skillsDir);
278
+ // Create settings.json if it doesn't exist
279
+ const settingsPath = getSettingsPath(projectDir);
280
+ if (!(await fs.pathExists(settingsPath))) {
281
+ await saveSettings({
282
+ version: '1.0.0',
283
+ skills: { installed: [] },
284
+ triggers: { keywords: {}, filePatterns: {} },
285
+ }, projectDir);
286
+ }
287
+ }
288
+ // ============================================================================
289
+ // Claude Code Installation
290
+ // ============================================================================
291
+ /**
292
+ * Install a skill to Claude Code directories (~/.agents/skills/)
293
+ */
294
+ async function installToClaudeCode(skillName, skillMdContent, source, registrySkill) {
295
+ // Ensure directories exist
296
+ const skillDir = path.join(getClaudeSkillsDir(), skillName);
297
+ await fs.ensureDir(skillDir);
298
+ await fs.ensureDir(getClaudeSymlinksDir());
299
+ // Write SKILL.md
300
+ const skillMdPath = path.join(skillDir, 'SKILL.md');
301
+ await fs.writeFile(skillMdPath, skillMdContent);
302
+ // Create symlink in ~/.claude/skills/
303
+ const symlinkPath = path.join(getClaudeSymlinksDir(), skillName);
304
+ try {
305
+ // Remove existing symlink if present
306
+ if (await fs.pathExists(symlinkPath)) {
307
+ await fs.remove(symlinkPath);
308
+ }
309
+ await fs.symlink(skillDir, symlinkPath);
310
+ }
311
+ catch {
312
+ // Symlink creation might fail on some systems, continue anyway
313
+ }
314
+ // Update lock file
315
+ const lockFile = await loadClaudeLockFile();
316
+ const sourceUrl = source.isLocal
317
+ ? `file://${source.localPath}`
318
+ : `https://github.com/${source.owner}/${source.repo}.git`;
319
+ lockFile.skills[skillName] = {
320
+ source: source.isLocal ? 'local' : `${source.owner}/${source.repo}`,
321
+ sourceType: source.isLocal ? 'local' : 'uasp',
322
+ sourceUrl,
323
+ skillPath: `skills/${skillName}/SKILL.md`,
324
+ skillFolderHash: registrySkill.version,
325
+ installedAt: new Date().toISOString(),
326
+ updatedAt: new Date().toISOString(),
327
+ };
328
+ await saveClaudeLockFile(lockFile);
329
+ }
330
+ /**
331
+ * Remove a skill from Claude Code directories
332
+ */
333
+ async function removeFromClaudeCode(skillName) {
334
+ // Remove skill directory
335
+ const skillDir = path.join(getClaudeSkillsDir(), skillName);
336
+ if (await fs.pathExists(skillDir)) {
337
+ await fs.remove(skillDir);
338
+ }
339
+ // Remove symlink
340
+ const symlinkPath = path.join(getClaudeSymlinksDir(), skillName);
341
+ if (await fs.pathExists(symlinkPath)) {
342
+ await fs.remove(symlinkPath);
343
+ }
344
+ // Update lock file
345
+ const lockFile = await loadClaudeLockFile();
346
+ delete lockFile.skills[skillName];
347
+ await saveClaudeLockFile(lockFile);
348
+ }
349
+ /**
350
+ * Install a skill from a GitHub registry
351
+ *
352
+ * Installs to:
353
+ * 1. .agent/skills/ (project-local, UASP format)
354
+ * 2. ~/.agents/skills/ (Claude Code compatible, SKILL.md format) - if claudeCode option is true
355
+ */
356
+ export async function installSkill(source, registrySkill, options = {}) {
357
+ const { projectDir = process.cwd(), claudeCode = true } = options;
358
+ try {
359
+ // Fetch the skill file
360
+ const content = await fetchSkillFile(source, registrySkill.path);
361
+ // Parse and validate
362
+ const skillData = yaml.parse(content);
363
+ const validation = validateSkill(skillData);
364
+ if (!validation.valid) {
365
+ return {
366
+ success: false,
367
+ error: `Validation failed: ${validation.errors.join(', ')}`,
368
+ };
369
+ }
370
+ // ========================================
371
+ // 1. Install to .agent/skills/ (UASP format)
372
+ // ========================================
373
+ await initAgentDir(projectDir);
374
+ // Create skill directory
375
+ const skillDir = path.join(getSkillsDir(projectDir), registrySkill.name);
376
+ await fs.ensureDir(skillDir);
377
+ // Write skill file
378
+ const skillFileName = `${registrySkill.name}.uasp.yaml`;
379
+ const skillPath = path.join(skillDir, skillFileName);
380
+ await fs.writeFile(skillPath, content);
381
+ // Update settings.json
382
+ const settings = await loadSettings(projectDir);
383
+ // Remove existing entry if present
384
+ settings.skills.installed = settings.skills.installed.filter((s) => s.name !== registrySkill.name);
385
+ // Add new entry
386
+ const installedSkill = {
387
+ name: registrySkill.name,
388
+ version: registrySkill.version,
389
+ type: registrySkill.type,
390
+ path: `.agent/skills/${registrySkill.name}/${skillFileName}`,
391
+ enabled: true,
392
+ installedAt: new Date().toISOString(),
393
+ source: `${source.owner}/${source.repo}/${source.path}`,
394
+ };
395
+ settings.skills.installed.push(installedSkill);
396
+ // Update keyword triggers
397
+ if (!settings.triggers) {
398
+ settings.triggers = { keywords: {}, filePatterns: {} };
399
+ }
400
+ if (!settings.triggers.keywords) {
401
+ settings.triggers.keywords = {};
402
+ }
403
+ for (const keyword of registrySkill.keywords) {
404
+ if (!settings.triggers.keywords[keyword]) {
405
+ settings.triggers.keywords[keyword] = [];
406
+ }
407
+ if (!settings.triggers.keywords[keyword].includes(registrySkill.name)) {
408
+ settings.triggers.keywords[keyword].push(registrySkill.name);
409
+ }
410
+ }
411
+ await saveSettings(settings, projectDir);
412
+ // ========================================
413
+ // 2. Install to Claude Code (SKILL.md format)
414
+ // ========================================
415
+ let claudeCodeInstalled = false;
416
+ if (claudeCode) {
417
+ try {
418
+ // Convert to SKILL.md format
419
+ const skillMdContent = convertToSkillMd(skillData, registrySkill);
420
+ // Install to Claude Code directories
421
+ await installToClaudeCode(registrySkill.name, skillMdContent, source, registrySkill);
422
+ claudeCodeInstalled = true;
423
+ }
424
+ catch (error) {
425
+ // Claude Code installation is optional, don't fail the whole install
426
+ console.warn(`Warning: Could not install to Claude Code: ${error.message}`);
427
+ }
428
+ }
429
+ return {
430
+ success: true,
431
+ skill: installedSkill,
432
+ claudeCodeInstalled,
433
+ };
434
+ }
435
+ catch (error) {
436
+ return {
437
+ success: false,
438
+ error: error instanceof Error ? error.message : String(error),
439
+ };
440
+ }
441
+ }
442
+ /**
443
+ * Remove an installed skill
444
+ *
445
+ * Removes from:
446
+ * 1. .agent/skills/ (project-local)
447
+ * 2. ~/.agents/skills/ (Claude Code) - if claudeCode option is true
448
+ */
449
+ export async function removeSkill(skillName, options = {}) {
450
+ const { projectDir = process.cwd(), claudeCode = true } = options;
451
+ const settings = await loadSettings(projectDir);
452
+ // Find the skill
453
+ const skillIndex = settings.skills.installed.findIndex((s) => s.name === skillName);
454
+ if (skillIndex === -1) {
455
+ return false;
456
+ }
457
+ // Remove from settings
458
+ settings.skills.installed.splice(skillIndex, 1);
459
+ // Remove from keyword triggers
460
+ if (settings.triggers?.keywords) {
461
+ for (const keyword of Object.keys(settings.triggers.keywords)) {
462
+ settings.triggers.keywords[keyword] = settings.triggers.keywords[keyword].filter((s) => s !== skillName);
463
+ // Clean up empty arrays
464
+ if (settings.triggers.keywords[keyword].length === 0) {
465
+ delete settings.triggers.keywords[keyword];
466
+ }
467
+ }
468
+ }
469
+ await saveSettings(settings, projectDir);
470
+ // Remove skill directory from .agent/skills/
471
+ const skillDir = path.join(getSkillsDir(projectDir), skillName);
472
+ if (await fs.pathExists(skillDir)) {
473
+ await fs.remove(skillDir);
474
+ }
475
+ // Remove from Claude Code directories
476
+ if (claudeCode) {
477
+ try {
478
+ await removeFromClaudeCode(skillName);
479
+ }
480
+ catch {
481
+ // Claude Code removal is optional
482
+ }
483
+ }
484
+ return true;
485
+ }
486
+ /**
487
+ * List installed skills
488
+ */
489
+ export async function listInstalledSkills(projectDir = process.cwd()) {
490
+ const settings = await loadSettings(projectDir);
491
+ return settings.skills.installed;
492
+ }
493
+ //# sourceMappingURL=installer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installer.js","sourceRoot":"","sources":["../../src/core/installer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Registry management for UASP skills
3
+ */
4
+ import type { Registry, RegistrySkill } from '../types/index.js';
5
+ import { type GitHubSource } from './github.js';
6
+ /**
7
+ * Parse registry JSON content
8
+ */
9
+ export declare function parseRegistry(content: string): Registry;
10
+ /**
11
+ * Find a skill in the registry by name
12
+ */
13
+ export declare function findSkill(registry: Registry, skillName: string): RegistrySkill | null;
14
+ /**
15
+ * Search skills by keyword
16
+ */
17
+ export declare function searchSkills(registry: Registry, query: string): RegistrySkill[];
18
+ /**
19
+ * Load registry from a GitHub URL
20
+ */
21
+ export declare function loadRegistry(url: string): Promise<Registry>;
22
+ /**
23
+ * Get the GitHub source for a registry URL
24
+ */
25
+ export declare function getGitHubSource(url: string): GitHubSource;
26
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/core/registry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAiC,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAE/E;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAgBvD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAErF;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,EAAE,CAe/E;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAQjE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAMzD"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Registry management for UASP skills
3
+ */
4
+ import { parseGitHubUrl, fetchRegistry } from './github.js';
5
+ /**
6
+ * Parse registry JSON content
7
+ */
8
+ export function parseRegistry(content) {
9
+ try {
10
+ const registry = JSON.parse(content);
11
+ // Validate required fields
12
+ if (!registry.version || !registry.skills || !Array.isArray(registry.skills)) {
13
+ throw new Error('Invalid registry format: missing required fields');
14
+ }
15
+ return registry;
16
+ }
17
+ catch (error) {
18
+ if (error instanceof SyntaxError) {
19
+ throw new Error(`Invalid JSON in registry: ${error.message}`);
20
+ }
21
+ throw error;
22
+ }
23
+ }
24
+ /**
25
+ * Find a skill in the registry by name
26
+ */
27
+ export function findSkill(registry, skillName) {
28
+ return registry.skills.find((s) => s.name === skillName) || null;
29
+ }
30
+ /**
31
+ * Search skills by keyword
32
+ */
33
+ export function searchSkills(registry, query) {
34
+ const lowerQuery = query.toLowerCase();
35
+ return registry.skills.filter((skill) => {
36
+ // Match against name
37
+ if (skill.name.toLowerCase().includes(lowerQuery))
38
+ return true;
39
+ // Match against description
40
+ if (skill.description.toLowerCase().includes(lowerQuery))
41
+ return true;
42
+ // Match against keywords
43
+ if (skill.keywords.some((k) => k.toLowerCase().includes(lowerQuery)))
44
+ return true;
45
+ return false;
46
+ });
47
+ }
48
+ /**
49
+ * Load registry from a GitHub URL
50
+ */
51
+ export async function loadRegistry(url) {
52
+ const source = parseGitHubUrl(url);
53
+ if (!source) {
54
+ throw new Error(`Invalid GitHub URL: ${url}`);
55
+ }
56
+ const content = await fetchRegistry(source);
57
+ return parseRegistry(content);
58
+ }
59
+ /**
60
+ * Get the GitHub source for a registry URL
61
+ */
62
+ export function getGitHubSource(url) {
63
+ const source = parseGitHubUrl(url);
64
+ if (!source) {
65
+ throw new Error(`Invalid GitHub URL: ${url}`);
66
+ }
67
+ return source;
68
+ }
69
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/core/registry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,cAAc,EAAE,aAAa,EAAqB,MAAM,aAAa,CAAC;AAE/E;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAa,CAAC;QAEjD,2BAA2B;QAC3B,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7E,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACtE,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,6BAA6B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAChE,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,QAAkB,EAAE,SAAiB;IAC7D,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,IAAI,CAAC;AACnE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,QAAkB,EAAE,KAAa;IAC5D,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAEvC,OAAO,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;QACtC,qBAAqB;QACrB,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;YAAE,OAAO,IAAI,CAAC;QAE/D,4BAA4B;QAC5B,IAAI,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;YAAE,OAAO,IAAI,CAAC;QAEtE,yBAAyB;QACzB,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QAElF,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAW;IAC5C,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC;IAC5C,OAAO,aAAa,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,EAAE,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * UASP Skill validation using JSON Schema
3
+ */
4
+ import type { Skill } from '../types/index.js';
5
+ export interface ValidationResult {
6
+ valid: boolean;
7
+ errors: string[];
8
+ }
9
+ /**
10
+ * Validate a skill object against the UASP schema
11
+ */
12
+ export declare function validateSkill(skill: unknown): ValidationResult;
13
+ /**
14
+ * Check if a skill object has the minimum required structure
15
+ */
16
+ export declare function isValidSkillStructure(skill: unknown): skill is Skill;
17
+ //# sourceMappingURL=validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/core/validator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAqR/C,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,CAc9D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,KAAK,CA8BpE"}