vskill 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.
- package/README.md +49 -0
- package/dist/agents/agents-registry.d.ts +57 -0
- package/dist/agents/agents-registry.js +511 -0
- package/dist/agents/agents-registry.js.map +1 -0
- package/dist/api/client.d.ts +50 -0
- package/dist/api/client.js +50 -0
- package/dist/api/client.js.map +1 -0
- package/dist/commands/add.d.ts +7 -0
- package/dist/commands/add.js +126 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/find.d.ts +1 -0
- package/dist/commands/find.js +42 -0
- package/dist/commands/find.js.map +1 -0
- package/dist/commands/init.d.ts +1 -0
- package/dist/commands/init.js +39 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/list.d.ts +6 -0
- package/dist/commands/list.js +79 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/scan.d.ts +1 -0
- package/dist/commands/scan.js +99 -0
- package/dist/commands/scan.js.map +1 -0
- package/dist/commands/submit.d.ts +5 -0
- package/dist/commands/submit.js +34 -0
- package/dist/commands/submit.js.map +1 -0
- package/dist/commands/update.d.ts +5 -0
- package/dist/commands/update.js +114 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/version.d.ts +1 -0
- package/dist/commands/version.js +11 -0
- package/dist/commands/version.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +68 -0
- package/dist/index.js.map +1 -0
- package/dist/lockfile/index.d.ts +2 -0
- package/dist/lockfile/index.js +2 -0
- package/dist/lockfile/index.js.map +1 -0
- package/dist/lockfile/lockfile.d.ts +23 -0
- package/dist/lockfile/lockfile.js +70 -0
- package/dist/lockfile/lockfile.js.map +1 -0
- package/dist/lockfile/types.d.ts +14 -0
- package/dist/lockfile/types.js +5 -0
- package/dist/lockfile/types.js.map +1 -0
- package/dist/scanner/index.d.ts +4 -0
- package/dist/scanner/index.js +3 -0
- package/dist/scanner/index.js.map +1 -0
- package/dist/scanner/patterns.d.ts +25 -0
- package/dist/scanner/patterns.js +347 -0
- package/dist/scanner/patterns.js.map +1 -0
- package/dist/scanner/pipeline/submission-pipeline.d.ts +100 -0
- package/dist/scanner/pipeline/submission-pipeline.js +173 -0
- package/dist/scanner/pipeline/submission-pipeline.js.map +1 -0
- package/dist/scanner/tier1.d.ts +23 -0
- package/dist/scanner/tier1.js +83 -0
- package/dist/scanner/tier1.js.map +1 -0
- package/dist/utils/output.d.ts +15 -0
- package/dist/utils/output.js +87 -0
- package/dist/utils/output.js.map +1 -0
- package/package.json +51 -0
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Tier 1 Scanner -- Static pattern-based security analysis
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
import { scanContent, SCAN_PATTERNS, } from "./patterns.js";
|
|
5
|
+
// ---- Severity scoring weights ---------------------------------------------
|
|
6
|
+
const SEVERITY_DEDUCTIONS = {
|
|
7
|
+
critical: 25,
|
|
8
|
+
high: 15,
|
|
9
|
+
medium: 8,
|
|
10
|
+
low: 3,
|
|
11
|
+
info: 0,
|
|
12
|
+
};
|
|
13
|
+
// ---- Scanner --------------------------------------------------------------
|
|
14
|
+
/**
|
|
15
|
+
* Run the Tier 1 static scan against the provided skill content.
|
|
16
|
+
*
|
|
17
|
+
* Scoring starts at 100 and deducts points per finding based on severity.
|
|
18
|
+
* Verdict thresholds:
|
|
19
|
+
* >= 80 PASS
|
|
20
|
+
* 50-79 CONCERNS
|
|
21
|
+
* < 50 FAIL
|
|
22
|
+
*/
|
|
23
|
+
export function runTier1Scan(content) {
|
|
24
|
+
const start = performance.now();
|
|
25
|
+
const findings = scanContent(content);
|
|
26
|
+
// Count findings by severity
|
|
27
|
+
let criticalCount = 0;
|
|
28
|
+
let highCount = 0;
|
|
29
|
+
let mediumCount = 0;
|
|
30
|
+
let lowCount = 0;
|
|
31
|
+
let infoCount = 0;
|
|
32
|
+
for (const finding of findings) {
|
|
33
|
+
switch (finding.severity) {
|
|
34
|
+
case "critical":
|
|
35
|
+
criticalCount++;
|
|
36
|
+
break;
|
|
37
|
+
case "high":
|
|
38
|
+
highCount++;
|
|
39
|
+
break;
|
|
40
|
+
case "medium":
|
|
41
|
+
mediumCount++;
|
|
42
|
+
break;
|
|
43
|
+
case "low":
|
|
44
|
+
lowCount++;
|
|
45
|
+
break;
|
|
46
|
+
case "info":
|
|
47
|
+
infoCount++;
|
|
48
|
+
break;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// Calculate score
|
|
52
|
+
let score = 100;
|
|
53
|
+
for (const finding of findings) {
|
|
54
|
+
score -= SEVERITY_DEDUCTIONS[finding.severity];
|
|
55
|
+
}
|
|
56
|
+
// Clamp to 0-100
|
|
57
|
+
score = Math.max(0, Math.min(100, score));
|
|
58
|
+
// Determine verdict
|
|
59
|
+
let verdict;
|
|
60
|
+
if (score >= 80) {
|
|
61
|
+
verdict = "PASS";
|
|
62
|
+
}
|
|
63
|
+
else if (score >= 50) {
|
|
64
|
+
verdict = "CONCERNS";
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
verdict = "FAIL";
|
|
68
|
+
}
|
|
69
|
+
const durationMs = Math.round(performance.now() - start);
|
|
70
|
+
return {
|
|
71
|
+
verdict,
|
|
72
|
+
findings,
|
|
73
|
+
score,
|
|
74
|
+
patternsChecked: SCAN_PATTERNS.length,
|
|
75
|
+
criticalCount,
|
|
76
|
+
highCount,
|
|
77
|
+
mediumCount,
|
|
78
|
+
lowCount,
|
|
79
|
+
infoCount,
|
|
80
|
+
durationMs,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=tier1.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tier1.js","sourceRoot":"","sources":["../../src/scanner/tier1.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,2DAA2D;AAC3D,8EAA8E;AAE9E,OAAO,EACL,WAAW,EACX,aAAa,GAId,MAAM,eAAe,CAAC;AAiBvB,8EAA8E;AAE9E,MAAM,mBAAmB,GAAoC;IAC3D,QAAQ,EAAE,EAAE;IACZ,IAAI,EAAE,EAAE;IACR,MAAM,EAAE,CAAC;IACT,GAAG,EAAE,CAAC;IACN,IAAI,EAAE,CAAC;CACR,CAAC;AAEF,8EAA8E;AAE9E;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;IAEhC,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAEtC,6BAA6B;IAC7B,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,QAAQ,OAAO,CAAC,QAAQ,EAAE,CAAC;YACzB,KAAK,UAAU;gBACb,aAAa,EAAE,CAAC;gBAChB,MAAM;YACR,KAAK,MAAM;gBACT,SAAS,EAAE,CAAC;gBACZ,MAAM;YACR,KAAK,QAAQ;gBACX,WAAW,EAAE,CAAC;gBACd,MAAM;YACR,KAAK,KAAK;gBACR,QAAQ,EAAE,CAAC;gBACX,MAAM;YACR,KAAK,MAAM;gBACT,SAAS,EAAE,CAAC;gBACZ,MAAM;QACV,CAAC;IACH,CAAC;IAED,kBAAkB;IAClB,IAAI,KAAK,GAAG,GAAG,CAAC;IAChB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,KAAK,IAAI,mBAAmB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACjD,CAAC;IACD,iBAAiB;IACjB,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IAE1C,oBAAoB;IACpB,IAAI,OAAoB,CAAC;IACzB,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;QAChB,OAAO,GAAG,MAAM,CAAC;IACnB,CAAC;SAAM,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;QACvB,OAAO,GAAG,UAAU,CAAC;IACvB,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,MAAM,CAAC;IACnB,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC;IAEzD,OAAO;QACL,OAAO;QACP,QAAQ;QACR,KAAK;QACL,eAAe,EAAE,aAAa,CAAC,MAAM;QACrC,aAAa;QACb,SAAS;QACT,WAAW;QACX,QAAQ;QACR,SAAS;QACT,UAAU;KACX,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare const green: (text: string) => string;
|
|
2
|
+
export declare const red: (text: string) => string;
|
|
3
|
+
export declare const yellow: (text: string) => string;
|
|
4
|
+
export declare const cyan: (text: string) => string;
|
|
5
|
+
export declare const bold: (text: string) => string;
|
|
6
|
+
export declare const dim: (text: string) => string;
|
|
7
|
+
export declare const magenta: (text: string) => string;
|
|
8
|
+
/**
|
|
9
|
+
* Print aligned columns. Each row is an array of strings.
|
|
10
|
+
* Column widths are auto-calculated from the widest cell.
|
|
11
|
+
*/
|
|
12
|
+
export declare function table(headers: string[], rows: string[][], gap?: number): string;
|
|
13
|
+
export declare function spinner(message: string): {
|
|
14
|
+
stop: (final?: string) => void;
|
|
15
|
+
};
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Colored console output helpers (ANSI codes, zero dependencies)
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
const isColorSupported = process.env.FORCE_COLOR !== "0" &&
|
|
5
|
+
process.env.NO_COLOR === undefined &&
|
|
6
|
+
(process.stdout.isTTY || process.env.FORCE_COLOR === "1");
|
|
7
|
+
function wrap(code, reset) {
|
|
8
|
+
if (!isColorSupported)
|
|
9
|
+
return (text) => text;
|
|
10
|
+
return (text) => `${code}${text}${reset}`;
|
|
11
|
+
}
|
|
12
|
+
// ---- Text formatters ------------------------------------------------------
|
|
13
|
+
export const green = wrap("\x1b[32m", "\x1b[39m");
|
|
14
|
+
export const red = wrap("\x1b[31m", "\x1b[39m");
|
|
15
|
+
export const yellow = wrap("\x1b[33m", "\x1b[39m");
|
|
16
|
+
export const cyan = wrap("\x1b[36m", "\x1b[39m");
|
|
17
|
+
export const bold = wrap("\x1b[1m", "\x1b[22m");
|
|
18
|
+
export const dim = wrap("\x1b[2m", "\x1b[22m");
|
|
19
|
+
export const magenta = wrap("\x1b[35m", "\x1b[39m");
|
|
20
|
+
// ---- Table output ---------------------------------------------------------
|
|
21
|
+
/**
|
|
22
|
+
* Print aligned columns. Each row is an array of strings.
|
|
23
|
+
* Column widths are auto-calculated from the widest cell.
|
|
24
|
+
*/
|
|
25
|
+
export function table(headers, rows, gap = 2) {
|
|
26
|
+
const allRows = [headers, ...rows];
|
|
27
|
+
const colWidths = [];
|
|
28
|
+
for (const row of allRows) {
|
|
29
|
+
for (let i = 0; i < row.length; i++) {
|
|
30
|
+
const stripped = stripAnsi(row[i] || "");
|
|
31
|
+
colWidths[i] = Math.max(colWidths[i] || 0, stripped.length);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
const lines = [];
|
|
35
|
+
// Header
|
|
36
|
+
const headerLine = headers
|
|
37
|
+
.map((h, i) => padRight(h, colWidths[i], gap))
|
|
38
|
+
.join("")
|
|
39
|
+
.trimEnd();
|
|
40
|
+
lines.push(bold(headerLine));
|
|
41
|
+
lines.push(dim(colWidths.map((w) => "-".repeat(w)).join(" ".repeat(gap))));
|
|
42
|
+
// Data rows
|
|
43
|
+
for (const row of rows) {
|
|
44
|
+
const line = row
|
|
45
|
+
.map((cell, i) => padRight(cell, colWidths[i], gap))
|
|
46
|
+
.join("")
|
|
47
|
+
.trimEnd();
|
|
48
|
+
lines.push(line);
|
|
49
|
+
}
|
|
50
|
+
return lines.join("\n");
|
|
51
|
+
}
|
|
52
|
+
function stripAnsi(str) {
|
|
53
|
+
// eslint-disable-next-line no-control-regex
|
|
54
|
+
return str.replace(/\x1b\[[0-9;]*m/g, "");
|
|
55
|
+
}
|
|
56
|
+
function padRight(str, width, gap) {
|
|
57
|
+
const visible = stripAnsi(str);
|
|
58
|
+
const padding = Math.max(0, width - visible.length) + gap;
|
|
59
|
+
return str + " ".repeat(padding);
|
|
60
|
+
}
|
|
61
|
+
// ---- Spinner --------------------------------------------------------------
|
|
62
|
+
export function spinner(message) {
|
|
63
|
+
const frames = ["|", "/", "-", "\\"];
|
|
64
|
+
let i = 0;
|
|
65
|
+
if (!isColorSupported || !process.stdout.isTTY) {
|
|
66
|
+
process.stdout.write(`${message}...\n`);
|
|
67
|
+
return {
|
|
68
|
+
stop: (final) => {
|
|
69
|
+
if (final)
|
|
70
|
+
process.stdout.write(`${final}\n`);
|
|
71
|
+
},
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
const interval = setInterval(() => {
|
|
75
|
+
process.stdout.write(`\r${frames[i % frames.length]} ${message}`);
|
|
76
|
+
i++;
|
|
77
|
+
}, 80);
|
|
78
|
+
return {
|
|
79
|
+
stop: (final) => {
|
|
80
|
+
clearInterval(interval);
|
|
81
|
+
process.stdout.write(`\r${" ".repeat(message.length + 3)}\r`);
|
|
82
|
+
if (final)
|
|
83
|
+
process.stdout.write(`${final}\n`);
|
|
84
|
+
},
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/utils/output.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "vskill",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "Secure multi-platform AI skill installer — scan before you install",
|
|
6
|
+
"bin": {
|
|
7
|
+
"vskill": "./dist/index.js"
|
|
8
|
+
},
|
|
9
|
+
"main": "./dist/index.js",
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"scripts": {
|
|
12
|
+
"build": "tsc",
|
|
13
|
+
"dev": "tsc --watch",
|
|
14
|
+
"test": "vitest run",
|
|
15
|
+
"clean": "rm -rf dist",
|
|
16
|
+
"prepublishOnly": "npm run build"
|
|
17
|
+
},
|
|
18
|
+
"keywords": [
|
|
19
|
+
"ai",
|
|
20
|
+
"skills",
|
|
21
|
+
"security",
|
|
22
|
+
"agent",
|
|
23
|
+
"cli",
|
|
24
|
+
"claude",
|
|
25
|
+
"cursor",
|
|
26
|
+
"copilot",
|
|
27
|
+
"verified-skill"
|
|
28
|
+
],
|
|
29
|
+
"author": "Anton Abyzov",
|
|
30
|
+
"license": "MIT",
|
|
31
|
+
"repository": {
|
|
32
|
+
"type": "git",
|
|
33
|
+
"url": "https://github.com/anton-abyzov/vskill"
|
|
34
|
+
},
|
|
35
|
+
"homepage": "https://verified-skill.com",
|
|
36
|
+
"files": [
|
|
37
|
+
"dist",
|
|
38
|
+
"README.md"
|
|
39
|
+
],
|
|
40
|
+
"devDependencies": {
|
|
41
|
+
"@types/node": "^25.2.3",
|
|
42
|
+
"typescript": "^5.7.0",
|
|
43
|
+
"vitest": "^3.0.0"
|
|
44
|
+
},
|
|
45
|
+
"engines": {
|
|
46
|
+
"node": ">=20.0.0"
|
|
47
|
+
},
|
|
48
|
+
"dependencies": {
|
|
49
|
+
"commander": "^14.0.3"
|
|
50
|
+
}
|
|
51
|
+
}
|