uasp-skills 0.1.3 → 0.1.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/LICENSE +1 -1
- package/README.md +193 -0
- package/bin/uasp-skills.js +0 -0
- package/dist/benchmark/converters.d.ts +34 -0
- package/dist/benchmark/converters.d.ts.map +1 -0
- package/dist/benchmark/converters.js +139 -0
- package/dist/benchmark/converters.js.map +1 -0
- package/dist/benchmark/index.d.ts +27 -0
- package/dist/benchmark/index.d.ts.map +1 -0
- package/dist/benchmark/index.js +201 -0
- package/dist/benchmark/index.js.map +1 -0
- package/dist/benchmark/metrics.d.ts +92 -0
- package/dist/benchmark/metrics.d.ts.map +1 -0
- package/dist/benchmark/metrics.js +146 -0
- package/dist/benchmark/metrics.js.map +1 -0
- package/dist/benchmark/parsers.d.ts +42 -0
- package/dist/benchmark/parsers.d.ts.map +1 -0
- package/dist/benchmark/parsers.js +81 -0
- package/dist/benchmark/parsers.js.map +1 -0
- package/dist/benchmark/report.d.ts +46 -0
- package/dist/benchmark/report.d.ts.map +1 -0
- package/dist/benchmark/report.js +140 -0
- package/dist/benchmark/report.js.map +1 -0
- package/dist/benchmark/search.d.ts +63 -0
- package/dist/benchmark/search.d.ts.map +1 -0
- package/dist/benchmark/search.js +97 -0
- package/dist/benchmark/search.js.map +1 -0
- package/dist/benchmark/validators.d.ts +32 -0
- package/dist/benchmark/validators.d.ts.map +1 -0
- package/dist/benchmark/validators.js +60 -0
- package/dist/benchmark/validators.js.map +1 -0
- package/dist/cli/commands/benchmark.d.ts +6 -0
- package/dist/cli/commands/benchmark.d.ts.map +1 -0
- package/dist/cli/commands/benchmark.js +32 -0
- package/dist/cli/commands/benchmark.js.map +1 -0
- package/dist/cli/index.js +3 -1
- package/dist/cli/index.js.map +1 -1
- package/package.json +11 -2
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Search benchmarks - Structured vs full-text search
|
|
3
|
+
*/
|
|
4
|
+
import { benchmark } from './metrics.js';
|
|
5
|
+
/**
|
|
6
|
+
* Structured search on UASP registry
|
|
7
|
+
* Searches specific fields: name, description, keywords
|
|
8
|
+
*/
|
|
9
|
+
export function searchUaspStructured(skills, query) {
|
|
10
|
+
const lowerQuery = query.toLowerCase();
|
|
11
|
+
const results = [];
|
|
12
|
+
for (const { skill, registrySkill } of skills) {
|
|
13
|
+
let score = 0;
|
|
14
|
+
// Name match (highest weight)
|
|
15
|
+
if (skill.meta.name.toLowerCase().includes(lowerQuery)) {
|
|
16
|
+
score += 10;
|
|
17
|
+
}
|
|
18
|
+
// Description match
|
|
19
|
+
if (skill.meta.description?.toLowerCase().includes(lowerQuery)) {
|
|
20
|
+
score += 5;
|
|
21
|
+
}
|
|
22
|
+
// Keyword match
|
|
23
|
+
if (skill.triggers?.keywords?.some(k => k.toLowerCase().includes(lowerQuery))) {
|
|
24
|
+
score += 8;
|
|
25
|
+
}
|
|
26
|
+
// Intent match
|
|
27
|
+
if (skill.triggers?.intents?.some(i => i.toLowerCase().includes(lowerQuery))) {
|
|
28
|
+
score += 6;
|
|
29
|
+
}
|
|
30
|
+
// Registry keyword match
|
|
31
|
+
if (registrySkill.keywords.some(k => k.toLowerCase().includes(lowerQuery))) {
|
|
32
|
+
score += 7;
|
|
33
|
+
}
|
|
34
|
+
if (score > 0) {
|
|
35
|
+
results.push({ skill, registrySkill, score });
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// Sort by score descending
|
|
39
|
+
return results.sort((a, b) => b.score - a.score);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Full-text search on SKILL.md content
|
|
43
|
+
*/
|
|
44
|
+
export function searchSkillMdFullText(skillMdContents, query) {
|
|
45
|
+
const lowerQuery = query.toLowerCase();
|
|
46
|
+
const results = [];
|
|
47
|
+
for (const { name, content } of skillMdContents) {
|
|
48
|
+
const lowerContent = content.toLowerCase();
|
|
49
|
+
// Count occurrences
|
|
50
|
+
let count = 0;
|
|
51
|
+
let index = 0;
|
|
52
|
+
while ((index = lowerContent.indexOf(lowerQuery, index)) !== -1) {
|
|
53
|
+
count++;
|
|
54
|
+
index += lowerQuery.length;
|
|
55
|
+
}
|
|
56
|
+
if (count > 0) {
|
|
57
|
+
// Score based on occurrences and position
|
|
58
|
+
const firstIndex = lowerContent.indexOf(lowerQuery);
|
|
59
|
+
const positionBonus = firstIndex < 500 ? 2 : 1; // Boost if found early
|
|
60
|
+
results.push({
|
|
61
|
+
name,
|
|
62
|
+
score: count * positionBonus,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return results.sort((a, b) => b.score - a.score);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Benchmark structured UASP search
|
|
70
|
+
*/
|
|
71
|
+
export async function benchmarkUaspSearch(skills, query, options) {
|
|
72
|
+
return benchmark('UASP Structured Search', () => searchUaspStructured(skills, query), options);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Benchmark full-text SKILL.md search
|
|
76
|
+
*/
|
|
77
|
+
export async function benchmarkSkillMdSearch(skillMdContents, query, options) {
|
|
78
|
+
return benchmark('SKILL.md Full-text Search', () => searchSkillMdFullText(skillMdContents, query), options);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Calculate search precision
|
|
82
|
+
* Measures how relevant the top N results are
|
|
83
|
+
*/
|
|
84
|
+
export function calculateSearchPrecision(results, expectedTopResults, topN = 3) {
|
|
85
|
+
const topResults = results.slice(0, topN).map(r => r.name);
|
|
86
|
+
const relevant = topResults.filter(r => expectedTopResults.includes(r));
|
|
87
|
+
return relevant.length / Math.min(topN, results.length);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Run search benchmarks
|
|
91
|
+
*/
|
|
92
|
+
export async function runSearchBenchmarks(skills, skillMdContents, query, options) {
|
|
93
|
+
const uasp = await benchmarkUaspSearch(skills, query, options);
|
|
94
|
+
const skillMd = await benchmarkSkillMdSearch(skillMdContents, query, options);
|
|
95
|
+
return { uasp, skillMd };
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/benchmark/search.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validation benchmarks - AJV schema vs loose validation
|
|
3
|
+
*/
|
|
4
|
+
import { type BenchmarkResult, type BenchmarkOptions } from './metrics.js';
|
|
5
|
+
/**
|
|
6
|
+
* Loose validation for SKILL.md frontmatter
|
|
7
|
+
* Mimics what Claude Code might do to validate a skill
|
|
8
|
+
*/
|
|
9
|
+
export declare function validateSkillMdLoose(data: unknown): {
|
|
10
|
+
valid: boolean;
|
|
11
|
+
errors: string[];
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Benchmark UASP schema validation with AJV
|
|
15
|
+
*/
|
|
16
|
+
export declare function benchmarkUaspValidation(skill: unknown, options?: BenchmarkOptions): Promise<BenchmarkResult>;
|
|
17
|
+
/**
|
|
18
|
+
* Benchmark UASP type guard validation
|
|
19
|
+
*/
|
|
20
|
+
export declare function benchmarkUaspTypeGuard(skill: unknown, options?: BenchmarkOptions): Promise<BenchmarkResult>;
|
|
21
|
+
/**
|
|
22
|
+
* Benchmark loose SKILL.md validation
|
|
23
|
+
*/
|
|
24
|
+
export declare function benchmarkSkillMdValidation(frontmatter: unknown, options?: BenchmarkOptions): Promise<BenchmarkResult>;
|
|
25
|
+
/**
|
|
26
|
+
* Run all validation benchmarks
|
|
27
|
+
*/
|
|
28
|
+
export declare function runValidationBenchmarks(uaspSkill: unknown, skillMdFrontmatter: unknown, options?: BenchmarkOptions): Promise<{
|
|
29
|
+
uasp: BenchmarkResult;
|
|
30
|
+
skillMd: BenchmarkResult;
|
|
31
|
+
}>;
|
|
32
|
+
//# sourceMappingURL=validators.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../src/benchmark/validators.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAa,KAAK,eAAe,EAAE,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGtF;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CA8BxF;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,eAAe,CAAC,CAE1B;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,eAAe,CAAC,CAE1B;AAED;;GAEG;AACH,wBAAsB,0BAA0B,CAC9C,WAAW,EAAE,OAAO,EACpB,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,eAAe,CAAC,CAE1B;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,SAAS,EAAE,OAAO,EAClB,kBAAkB,EAAE,OAAO,EAC3B,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,OAAO,EAAE,eAAe,CAAA;CAAE,CAAC,CAK9D"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validation benchmarks - AJV schema vs loose validation
|
|
3
|
+
*/
|
|
4
|
+
import { benchmark } from './metrics.js';
|
|
5
|
+
import { validateSkill, isValidSkillStructure } from '../core/validator.js';
|
|
6
|
+
/**
|
|
7
|
+
* Loose validation for SKILL.md frontmatter
|
|
8
|
+
* Mimics what Claude Code might do to validate a skill
|
|
9
|
+
*/
|
|
10
|
+
export function validateSkillMdLoose(data) {
|
|
11
|
+
const errors = [];
|
|
12
|
+
if (typeof data !== 'object' || data === null) {
|
|
13
|
+
return { valid: false, errors: ['Data must be an object'] };
|
|
14
|
+
}
|
|
15
|
+
const obj = data;
|
|
16
|
+
// Required fields
|
|
17
|
+
if (typeof obj.name !== 'string' || !obj.name) {
|
|
18
|
+
errors.push('Missing or invalid name');
|
|
19
|
+
}
|
|
20
|
+
if (typeof obj.description !== 'string') {
|
|
21
|
+
errors.push('Missing or invalid description');
|
|
22
|
+
}
|
|
23
|
+
// Optional but validated if present
|
|
24
|
+
if (obj['allowed-tools'] !== undefined && typeof obj['allowed-tools'] !== 'string') {
|
|
25
|
+
errors.push('allowed-tools must be a string');
|
|
26
|
+
}
|
|
27
|
+
if (obj.metadata !== undefined) {
|
|
28
|
+
if (typeof obj.metadata !== 'object') {
|
|
29
|
+
errors.push('metadata must be an object');
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return { valid: errors.length === 0, errors };
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Benchmark UASP schema validation with AJV
|
|
36
|
+
*/
|
|
37
|
+
export async function benchmarkUaspValidation(skill, options) {
|
|
38
|
+
return benchmark('UASP AJV Schema', () => validateSkill(skill), options);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Benchmark UASP type guard validation
|
|
42
|
+
*/
|
|
43
|
+
export async function benchmarkUaspTypeGuard(skill, options) {
|
|
44
|
+
return benchmark('UASP Type Guard', () => isValidSkillStructure(skill), options);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Benchmark loose SKILL.md validation
|
|
48
|
+
*/
|
|
49
|
+
export async function benchmarkSkillMdValidation(frontmatter, options) {
|
|
50
|
+
return benchmark('SKILL.md Loose', () => validateSkillMdLoose(frontmatter), options);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Run all validation benchmarks
|
|
54
|
+
*/
|
|
55
|
+
export async function runValidationBenchmarks(uaspSkill, skillMdFrontmatter, options) {
|
|
56
|
+
const uasp = await benchmarkUaspValidation(uaspSkill, options);
|
|
57
|
+
const skillMd = await benchmarkSkillMdValidation(skillMdFrontmatter, options);
|
|
58
|
+
return { uasp, skillMd };
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=validators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validators.js","sourceRoot":"","sources":["../../src/benchmark/validators.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAA+C,MAAM,cAAc,CAAC;AACtF,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE5E;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAa;IAChD,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAC9C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,wBAAwB,CAAC,EAAE,CAAC;IAC9D,CAAC;IAED,MAAM,GAAG,GAAG,IAA+B,CAAC;IAE5C,kBAAkB;IAClB,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9C,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,OAAO,GAAG,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;IAChD,CAAC;IAED,oCAAoC;IACpC,IAAI,GAAG,CAAC,eAAe,CAAC,KAAK,SAAS,IAAI,OAAO,GAAG,CAAC,eAAe,CAAC,KAAK,QAAQ,EAAE,CAAC;QACnF,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC/B,IAAI,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACrC,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,KAAc,EACd,OAA0B;IAE1B,OAAO,SAAS,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;AAC3E,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,KAAc,EACd,OAA0B;IAE1B,OAAO,SAAS,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;AACnF,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,WAAoB,EACpB,OAA0B;IAE1B,OAAO,SAAS,CAAC,gBAAgB,EAAE,GAAG,EAAE,CAAC,oBAAoB,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;AACvF,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,SAAkB,EAClB,kBAA2B,EAC3B,OAA0B;IAE1B,MAAM,IAAI,GAAG,MAAM,uBAAuB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC/D,MAAM,OAAO,GAAG,MAAM,0BAA0B,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;IAE9E,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"benchmark.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/benchmark.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,gBAAgB,SAuBzB,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Benchmark command - Run UASP vs SKILL.md performance benchmarks
|
|
3
|
+
*/
|
|
4
|
+
import { Command } from 'commander';
|
|
5
|
+
import chalk from 'chalk';
|
|
6
|
+
import { runBenchmarks } from '../../benchmark/index.js';
|
|
7
|
+
export const benchmarkCommand = new Command('benchmark')
|
|
8
|
+
.description('Benchmark UASP vs SKILL.md format performance')
|
|
9
|
+
.option('-d, --dir <path>', 'Directory containing skills', process.cwd())
|
|
10
|
+
.option('-o, --output <format>', 'Output format (console, json, markdown)', 'console')
|
|
11
|
+
.option('-s, --save <path>', 'Save report to file')
|
|
12
|
+
.option('-i, --iterations <n>', 'Number of iterations', '100')
|
|
13
|
+
.option('-w, --warmup <n>', 'Number of warmup runs', '5')
|
|
14
|
+
.option('-v, --verbose', 'Show verbose output', false)
|
|
15
|
+
.action(async (opts) => {
|
|
16
|
+
try {
|
|
17
|
+
const options = {
|
|
18
|
+
dir: opts.dir,
|
|
19
|
+
output: opts.output,
|
|
20
|
+
save: opts.save,
|
|
21
|
+
iterations: parseInt(opts.iterations, 10),
|
|
22
|
+
warmup: parseInt(opts.warmup, 10),
|
|
23
|
+
verbose: opts.verbose,
|
|
24
|
+
};
|
|
25
|
+
await runBenchmarks(options);
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
console.error(chalk.red('Error:'), error instanceof Error ? error.message : String(error));
|
|
29
|
+
process.exit(1);
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
//# sourceMappingURL=benchmark.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"benchmark.js","sourceRoot":"","sources":["../../../src/cli/commands/benchmark.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAA4B,MAAM,0BAA0B,CAAC;AAEnF,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,OAAO,CAAC,WAAW,CAAC;KACrD,WAAW,CAAC,+CAA+C,CAAC;KAC5D,MAAM,CAAC,kBAAkB,EAAE,6BAA6B,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;KACxE,MAAM,CAAC,uBAAuB,EAAE,yCAAyC,EAAE,SAAS,CAAC;KACrF,MAAM,CAAC,mBAAmB,EAAE,qBAAqB,CAAC;KAClD,MAAM,CAAC,sBAAsB,EAAE,sBAAsB,EAAE,KAAK,CAAC;KAC7D,MAAM,CAAC,kBAAkB,EAAE,uBAAuB,EAAE,GAAG,CAAC;KACxD,MAAM,CAAC,eAAe,EAAE,qBAAqB,EAAE,KAAK,CAAC;KACrD,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,IAAI,CAAC;QACH,MAAM,OAAO,GAAwB;YACnC,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,MAAM,EAAE,IAAI,CAAC,MAAyC;YACtD,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;YACzC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YACjC,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC;QACF,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
|
package/dist/cli/index.js
CHANGED
|
@@ -10,17 +10,19 @@ import { listCommand } from './commands/list.js';
|
|
|
10
10
|
import { removeCommand } from './commands/remove.js';
|
|
11
11
|
import { searchCommand } from './commands/search.js';
|
|
12
12
|
import { initCommand } from './commands/init.js';
|
|
13
|
+
import { benchmarkCommand } from './commands/benchmark.js';
|
|
13
14
|
const program = new Command();
|
|
14
15
|
program
|
|
15
16
|
.name('skills')
|
|
16
17
|
.description('CLI tool for managing UASP agent skills')
|
|
17
|
-
.version('0.1.
|
|
18
|
+
.version('0.1.5');
|
|
18
19
|
// Add commands
|
|
19
20
|
program.addCommand(addCommand);
|
|
20
21
|
program.addCommand(listCommand);
|
|
21
22
|
program.addCommand(removeCommand);
|
|
22
23
|
program.addCommand(searchCommand);
|
|
23
24
|
program.addCommand(initCommand);
|
|
25
|
+
program.addCommand(benchmarkCommand);
|
|
24
26
|
// Parse and execute
|
|
25
27
|
program.parse(process.argv);
|
|
26
28
|
//# sourceMappingURL=index.js.map
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,yCAAyC,CAAC;KACtD,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,eAAe;AACf,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAC/B,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;AAErC,oBAAoB;AACpB,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "uasp-skills",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.5",
|
|
4
4
|
"description": "CLI tool for managing UASP agent skills",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -18,6 +18,12 @@
|
|
|
18
18
|
"start": "node bin/uasp-skills.js",
|
|
19
19
|
"lint": "eslint src",
|
|
20
20
|
"test": "vitest",
|
|
21
|
+
"test:unit": "vitest run tests/unit",
|
|
22
|
+
"test:integration": "vitest run tests/integration",
|
|
23
|
+
"test:coverage": "vitest run --coverage",
|
|
24
|
+
"test:watch": "vitest watch",
|
|
25
|
+
"benchmark": "node --expose-gc dist/benchmark/index.js",
|
|
26
|
+
"benchmark:dev": "tsx --expose-gc src/benchmark/index.ts",
|
|
21
27
|
"prepublishOnly": "npm run build"
|
|
22
28
|
},
|
|
23
29
|
"dependencies": {
|
|
@@ -32,10 +38,13 @@
|
|
|
32
38
|
},
|
|
33
39
|
"devDependencies": {
|
|
34
40
|
"@types/fs-extra": "^11.0.0",
|
|
35
|
-
"@types/node": "^20.
|
|
41
|
+
"@types/node": "^20.19.30",
|
|
36
42
|
"@typescript-eslint/eslint-plugin": "^6.0.0",
|
|
37
43
|
"@typescript-eslint/parser": "^6.0.0",
|
|
44
|
+
"@vitest/coverage-v8": "^1.0.0",
|
|
38
45
|
"eslint": "^8.0.0",
|
|
46
|
+
"gray-matter": "^4.0.3",
|
|
47
|
+
"tsx": "^4.0.0",
|
|
39
48
|
"typescript": "^5.3.0",
|
|
40
49
|
"vitest": "^1.0.0"
|
|
41
50
|
},
|