skillsauth 3.0.1 → 3.0.3
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 +63 -53
- package/dist/__tests__/add.unsigned.test.d.ts +2 -0
- package/dist/__tests__/add.unsigned.test.d.ts.map +1 -0
- package/dist/__tests__/add.unsigned.test.js +112 -0
- package/dist/__tests__/add.unsigned.test.js.map +1 -0
- package/dist/__tests__/agents.test.js +2 -2
- package/dist/__tests__/agents.test.js.map +1 -1
- package/dist/__tests__/installer.test.js +9 -8
- package/dist/__tests__/installer.test.js.map +1 -1
- package/dist/__tests__/slug.test.js +5 -1
- package/dist/__tests__/slug.test.js.map +1 -1
- package/dist/__tests__/verify.test.d.ts +9 -0
- package/dist/__tests__/verify.test.d.ts.map +1 -0
- package/dist/__tests__/verify.test.js +206 -0
- package/dist/__tests__/verify.test.js.map +1 -0
- package/dist/commands/add-local.d.ts.map +1 -1
- package/dist/commands/add-local.js +1 -0
- package/dist/commands/add-local.js.map +1 -1
- package/dist/commands/add.d.ts +2 -0
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +49 -3
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/plugins.d.ts +8 -0
- package/dist/commands/plugins.d.ts.map +1 -0
- package/dist/commands/plugins.js +96 -0
- package/dist/commands/plugins.js.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/agent-registry.d.ts +19 -0
- package/dist/lib/agent-registry.d.ts.map +1 -0
- package/dist/lib/agent-registry.js +408 -0
- package/dist/lib/agent-registry.js.map +1 -0
- package/dist/lib/agents.d.ts +1 -1
- package/dist/lib/agents.d.ts.map +1 -1
- package/dist/lib/agents.js +7 -50
- package/dist/lib/agents.js.map +1 -1
- package/dist/lib/api.d.ts +11 -0
- package/dist/lib/api.d.ts.map +1 -1
- package/dist/lib/api.js +43 -0
- package/dist/lib/api.js.map +1 -1
- package/dist/lib/installer.d.ts.map +1 -1
- package/dist/lib/installer.js +10 -2
- package/dist/lib/installer.js.map +1 -1
- package/dist/lib/verify.d.ts +26 -0
- package/dist/lib/verify.d.ts.map +1 -0
- package/dist/lib/verify.js +91 -0
- package/dist/lib/verify.js.map +1 -0
- package/dist/types.d.ts +4 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -40
- package/dist/types.js.map +1 -1
- package/dist/utils/constants.d.ts +1 -7
- package/dist/utils/constants.d.ts.map +1 -1
- package/dist/utils/constants.js +1 -52
- package/dist/utils/constants.js.map +1 -1
- package/dist/utils/slug.d.ts +2 -0
- package/dist/utils/slug.d.ts.map +1 -1
- package/dist/utils/slug.js +3 -1
- package/dist/utils/slug.js.map +1 -1
- package/package.json +10 -8
package/dist/lib/installer.js
CHANGED
|
@@ -11,6 +11,14 @@ export function getInstallPath(slug, agent, scope) {
|
|
|
11
11
|
? AGENT_PATHS[agent].global(slug)
|
|
12
12
|
: AGENT_PATHS[agent].local(slug);
|
|
13
13
|
}
|
|
14
|
+
function installTargetIsCanonical(skillSlug, agent, scope) {
|
|
15
|
+
const canonicalAbs = scope === 'local'
|
|
16
|
+
? resolve(process.cwd(), '.agents/skills', skillSlug)
|
|
17
|
+
: resolve(join(homedir(), '.agents/skills', skillSlug));
|
|
18
|
+
const filePath = getInstallPath(skillSlug, agent, scope);
|
|
19
|
+
const skillRootAbs = scope === 'local' ? resolve(process.cwd(), dirname(filePath)) : resolve(dirname(filePath));
|
|
20
|
+
return skillRootAbs === canonicalAbs;
|
|
21
|
+
}
|
|
14
22
|
function isPathUnderBase(absPath, baseDirAbs) {
|
|
15
23
|
const base = resolve(baseDirAbs) + sep;
|
|
16
24
|
const resolved = resolve(absPath);
|
|
@@ -87,8 +95,8 @@ export function installSkill(skill, agents, scope, force = false, copyMode = fal
|
|
|
87
95
|
const agentSkillDir = scope === 'local'
|
|
88
96
|
? resolve(process.cwd(), dirname(filePath), '..')
|
|
89
97
|
: resolve(dirname(filePath), '..');
|
|
90
|
-
//
|
|
91
|
-
if (agent
|
|
98
|
+
// Project `.agents/skills/<slug>` matches canonical store — no symlink (SkillsAuth pattern)
|
|
99
|
+
if (installTargetIsCanonical(skill.slug, agent, scope)) {
|
|
92
100
|
if (allUnchanged && !force)
|
|
93
101
|
return { agent, path: filePath, status: 'skipped' };
|
|
94
102
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installer.js","sourceRoot":"","sources":["../../src/lib/installer.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"installer.js","sourceRoot":"","sources":["../../src/lib/installer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Path A — Verify-on-load.
|
|
3
|
+
* Synchronous (within async context) cryptographic verification of a skill manifest
|
|
4
|
+
* using public Sigstore (Fulcio CA + embedded TUF root in @sigstore/verify).
|
|
5
|
+
*
|
|
6
|
+
* Called by the CLI installer before extracting any skill files.
|
|
7
|
+
* p99 target for offline cert-chain verify: < 5ms.
|
|
8
|
+
*/
|
|
9
|
+
import type { ManifestResponse } from './api.js';
|
|
10
|
+
export type VerifyOutcome = {
|
|
11
|
+
ok: true;
|
|
12
|
+
rekorLogIndex: number | null;
|
|
13
|
+
} | {
|
|
14
|
+
ok: false;
|
|
15
|
+
reason: string;
|
|
16
|
+
exit: 3 | 4;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Verifies the Sigstore bundle in a ManifestResponse and checks that the
|
|
20
|
+
* signed bundleHash matches the one returned by the skill API.
|
|
21
|
+
*
|
|
22
|
+
* Uses offline cert-chain verification only (no live Rekor network call).
|
|
23
|
+
* Rekor inclusion is embedded in the bundle's SCT / inclusion proof.
|
|
24
|
+
*/
|
|
25
|
+
export declare function verifyManifest(manifest: ManifestResponse, apiBundleHash: string | null): Promise<VerifyOutcome>;
|
|
26
|
+
//# sourceMappingURL=verify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/lib/verify.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEjD,MAAM,MAAM,aAAa,GACrB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAC1C;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAA;CAAE,CAAC;AAE/C;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,gBAAgB,EAC1B,aAAa,EAAE,MAAM,GAAG,IAAI,GAC3B,OAAO,CAAC,aAAa,CAAC,CA6ExB"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Path A — Verify-on-load.
|
|
3
|
+
* Synchronous (within async context) cryptographic verification of a skill manifest
|
|
4
|
+
* using public Sigstore (Fulcio CA + embedded TUF root in @sigstore/verify).
|
|
5
|
+
*
|
|
6
|
+
* Called by the CLI installer before extracting any skill files.
|
|
7
|
+
* p99 target for offline cert-chain verify: < 5ms.
|
|
8
|
+
*/
|
|
9
|
+
import { createVerifier } from 'sigstore';
|
|
10
|
+
import { bundleFromJSON } from '@sigstore/bundle';
|
|
11
|
+
/**
|
|
12
|
+
* Verifies the Sigstore bundle in a ManifestResponse and checks that the
|
|
13
|
+
* signed bundleHash matches the one returned by the skill API.
|
|
14
|
+
*
|
|
15
|
+
* Uses offline cert-chain verification only (no live Rekor network call).
|
|
16
|
+
* Rekor inclusion is embedded in the bundle's SCT / inclusion proof.
|
|
17
|
+
*/
|
|
18
|
+
export async function verifyManifest(manifest, apiBundleHash) {
|
|
19
|
+
let bundle;
|
|
20
|
+
let payload = null;
|
|
21
|
+
// Parse the Sigstore bundle
|
|
22
|
+
try {
|
|
23
|
+
bundle = bundleFromJSON(JSON.parse(manifest.bundle));
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return { ok: false, reason: 'Manifest bundle is malformed and cannot be parsed.', exit: 3 };
|
|
27
|
+
}
|
|
28
|
+
// Extract the payload (manifest JSON) from the DSSE envelope
|
|
29
|
+
try {
|
|
30
|
+
const raw = JSON.parse(manifest.bundle);
|
|
31
|
+
const envelope = (raw?.dsseEnvelope ?? raw?.content?.dsseEnvelope);
|
|
32
|
+
if (envelope?.payload) {
|
|
33
|
+
payload = Buffer.from(envelope.payload, 'base64');
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return { ok: false, reason: 'Cannot extract manifest payload from bundle.', exit: 3 };
|
|
38
|
+
}
|
|
39
|
+
if (!payload) {
|
|
40
|
+
return { ok: false, reason: 'Bundle contains no DSSE payload.', exit: 3 };
|
|
41
|
+
}
|
|
42
|
+
// Offline certificate chain verification (< 5ms, no network)
|
|
43
|
+
try {
|
|
44
|
+
// tlogThreshold: 0 and ctLogThreshold: 0 = offline mode (cert chain + SCT only)
|
|
45
|
+
const verifier = await createVerifier({ tlogThreshold: 0, ctLogThreshold: 0 });
|
|
46
|
+
verifier.verify(bundle, payload);
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
50
|
+
if (/certificate|chain|fulcio/i.test(msg)) {
|
|
51
|
+
return { ok: false, reason: `Certificate chain invalid: ${msg}`, exit: 3 };
|
|
52
|
+
}
|
|
53
|
+
if (/rekor|tlog|transparency|inclusion/i.test(msg)) {
|
|
54
|
+
return { ok: false, reason: `Transparency log inclusion failed: ${msg}`, exit: 3 };
|
|
55
|
+
}
|
|
56
|
+
return { ok: false, reason: `Signature verification failed: ${msg}`, exit: 3 };
|
|
57
|
+
}
|
|
58
|
+
// Parse the manifest JSON to extract bundleHash for cross-check
|
|
59
|
+
let signedBundleHash = null;
|
|
60
|
+
try {
|
|
61
|
+
const manifestData = JSON.parse(payload.toString('utf8'));
|
|
62
|
+
signedBundleHash = manifestData.bundleHash ?? null;
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return { ok: false, reason: 'Cannot parse manifest JSON payload.', exit: 3 };
|
|
66
|
+
}
|
|
67
|
+
// Cross-check: signed bundleHash must match what the API says the bundle hash is
|
|
68
|
+
if (signedBundleHash && apiBundleHash && signedBundleHash !== apiBundleHash) {
|
|
69
|
+
return {
|
|
70
|
+
ok: false,
|
|
71
|
+
reason: `Bundle hash mismatch: the signed manifest (${signedBundleHash.slice(0, 16)}…) does not match the skill API (${apiBundleHash.slice(0, 16)}…). Possible CDN or storage tampering.`,
|
|
72
|
+
exit: 3,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
// Extract Rekor log index from bundle for display
|
|
76
|
+
let rekorLogIndex = null;
|
|
77
|
+
try {
|
|
78
|
+
const raw = JSON.parse(manifest.bundle);
|
|
79
|
+
const tlogEntries = raw?.verificationMaterial?.tlogEntries ??
|
|
80
|
+
raw?.verification_material?.tlog_entries ??
|
|
81
|
+
[];
|
|
82
|
+
if (Array.isArray(tlogEntries) && tlogEntries[0]?.logIndex != null) {
|
|
83
|
+
rekorLogIndex = Number(tlogEntries[0].logIndex);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
// non-fatal
|
|
88
|
+
}
|
|
89
|
+
return { ok: true, rekorLogIndex };
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=verify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/lib/verify.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import type { AgentType } from './lib/agent-registry.js';
|
|
2
|
+
export type { AgentType } from './lib/agent-registry.js';
|
|
3
|
+
export { AGENT_IDS } from './lib/agent-registry.js';
|
|
1
4
|
export interface CLISkill {
|
|
2
5
|
id: string;
|
|
3
6
|
slug: string;
|
|
@@ -12,6 +15,7 @@ export interface CLISkill {
|
|
|
12
15
|
stars: number;
|
|
13
16
|
scanStatus: 'clean';
|
|
14
17
|
scannedAt: string | null;
|
|
18
|
+
bundleHash: string | null;
|
|
15
19
|
files: Array<{
|
|
16
20
|
path: string;
|
|
17
21
|
content: string;
|
|
@@ -28,8 +32,6 @@ export interface SearchResponse {
|
|
|
28
32
|
total: number;
|
|
29
33
|
results: CLISkill[];
|
|
30
34
|
}
|
|
31
|
-
export declare const AGENT_IDS: readonly ["claude-code", "cursor", "windsurf", "codex", "copilot", "cline", "roo", "aider", "continue", "amp", "zed", "void", "pear", "trae", "aide", "augment", "supermaven", "tabnine", "cody", "qodo", "bito", "double", "codestory", "mentat", "goose", "otto", "sweep", "devin", "replit", "bolt", "v0", "lovable", "same", "manus", "opencode", "kilo-code", "gemini-cli", "agents"];
|
|
32
|
-
export type AgentType = (typeof AGENT_IDS)[number];
|
|
33
35
|
export type InstallScope = 'local' | 'global';
|
|
34
36
|
export interface InstalledSkill {
|
|
35
37
|
slug: string;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjD;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,QAAQ,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,QAAQ,EAAE,CAAC;CACrB;AAED,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEzD,YAAY,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEpD,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjD;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,QAAQ,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,QAAQ,EAAE,CAAC;CACrB;AAED,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE9C,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,KAAK,EAAE,YAAY,CAAC;IACpB,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CACxC"}
|
package/dist/types.js
CHANGED
|
@@ -1,41 +1,2 @@
|
|
|
1
|
-
export
|
|
2
|
-
'claude-code',
|
|
3
|
-
'cursor',
|
|
4
|
-
'windsurf',
|
|
5
|
-
'codex',
|
|
6
|
-
'copilot',
|
|
7
|
-
'cline',
|
|
8
|
-
'roo',
|
|
9
|
-
'aider',
|
|
10
|
-
'continue',
|
|
11
|
-
'amp',
|
|
12
|
-
'zed',
|
|
13
|
-
'void',
|
|
14
|
-
'pear',
|
|
15
|
-
'trae',
|
|
16
|
-
'aide',
|
|
17
|
-
'augment',
|
|
18
|
-
'supermaven',
|
|
19
|
-
'tabnine',
|
|
20
|
-
'cody',
|
|
21
|
-
'qodo',
|
|
22
|
-
'bito',
|
|
23
|
-
'double',
|
|
24
|
-
'codestory',
|
|
25
|
-
'mentat',
|
|
26
|
-
'goose',
|
|
27
|
-
'otto',
|
|
28
|
-
'sweep',
|
|
29
|
-
'devin',
|
|
30
|
-
'replit',
|
|
31
|
-
'bolt',
|
|
32
|
-
'v0',
|
|
33
|
-
'lovable',
|
|
34
|
-
'same',
|
|
35
|
-
'manus',
|
|
36
|
-
'opencode',
|
|
37
|
-
'kilo-code',
|
|
38
|
-
'gemini-cli',
|
|
39
|
-
'agents', // universal .agents/ convention
|
|
40
|
-
];
|
|
1
|
+
export { AGENT_IDS } from './lib/agent-registry.js';
|
|
41
2
|
//# sourceMappingURL=types.js.map
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
export { AGENT_PATHS } from '../lib/agent-registry.js';
|
|
2
2
|
export declare const API_BASE_URL: string;
|
|
3
3
|
export declare const SKIP_PROMPTS: boolean;
|
|
4
4
|
export declare const NO_ANALYTICS: boolean;
|
|
@@ -8,10 +8,4 @@ export declare const GLOBAL_DIR: string;
|
|
|
8
8
|
export declare const GLOBAL_LOCK: string;
|
|
9
9
|
export declare const LOCAL_LOCK = ".skillsauth-lock.json";
|
|
10
10
|
export declare const LOCKFILE_VERSION = 1;
|
|
11
|
-
interface AgentPathDef {
|
|
12
|
-
local: (slug: string) => string;
|
|
13
|
-
global: (slug: string) => string;
|
|
14
|
-
}
|
|
15
|
-
export declare const AGENT_PATHS: Record<AgentType, AgentPathDef>;
|
|
16
|
-
export {};
|
|
17
11
|
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,eAAO,MAAM,YAAY,QAAwE,CAAC;AAClG,eAAO,MAAM,YAAY,SAA2C,CAAC;AACrE,eAAO,MAAM,YAAY,SAAoD,CAAC;AAC9E,eAAO,MAAM,KAAK,SAA6C,CAAC;AAChE,eAAO,MAAM,QAAQ,QAAY,CAAC;AAClC,eAAO,MAAM,UAAU,QAAgC,CAAC;AACxD,eAAO,MAAM,WAAW,QAAgC,CAAC;AACzD,eAAO,MAAM,UAAU,0BAA0B,CAAC;AAClD,eAAO,MAAM,gBAAgB,IAAI,CAAC"}
|
package/dist/utils/constants.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { homedir } from 'os';
|
|
2
2
|
import { join } from 'path';
|
|
3
|
+
export { AGENT_PATHS } from '../lib/agent-registry.js';
|
|
3
4
|
export const API_BASE_URL = process.env['SKILLSAUTH_API_URL'] ?? 'https://skillsauth.com/api/cli';
|
|
4
5
|
export const SKIP_PROMPTS = process.env['SKILLSAUTH_YES'] === 'true';
|
|
5
6
|
export const NO_ANALYTICS = process.env['SKILLSAUTH_NO_ANALYTICS'] === 'true';
|
|
@@ -9,56 +10,4 @@ export const GLOBAL_DIR = join(HOME_DIR, '.skillsauth');
|
|
|
9
10
|
export const GLOBAL_LOCK = join(GLOBAL_DIR, 'lock.json');
|
|
10
11
|
export const LOCAL_LOCK = '.skillsauth-lock.json';
|
|
11
12
|
export const LOCKFILE_VERSION = 1;
|
|
12
|
-
function skillDir(dotDir) {
|
|
13
|
-
return {
|
|
14
|
-
local: (slug) => `.${dotDir}/skills/${slug}/SKILL.md`,
|
|
15
|
-
global: (slug) => join(HOME_DIR, `.${dotDir}/skills/${slug}/SKILL.md`),
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
function memoryFile(dotDir) {
|
|
19
|
-
return {
|
|
20
|
-
local: (slug) => `.${dotDir}/memories/${slug}.md`,
|
|
21
|
-
global: (slug) => join(HOME_DIR, `.${dotDir}/memories/${slug}.md`),
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
export const AGENT_PATHS = {
|
|
25
|
-
'claude-code': skillDir('claude'),
|
|
26
|
-
'cursor': skillDir('cursor'),
|
|
27
|
-
'windsurf': memoryFile('windsurf'),
|
|
28
|
-
'codex': skillDir('codex'),
|
|
29
|
-
'copilot': skillDir('github'),
|
|
30
|
-
'cline': skillDir('cline'),
|
|
31
|
-
'roo': skillDir('roo'),
|
|
32
|
-
'aider': skillDir('aider'),
|
|
33
|
-
'continue': skillDir('continue'),
|
|
34
|
-
'amp': skillDir('amp'),
|
|
35
|
-
'zed': skillDir('zed'),
|
|
36
|
-
'void': skillDir('void'),
|
|
37
|
-
'pear': skillDir('pear'),
|
|
38
|
-
'trae': skillDir('trae'),
|
|
39
|
-
'aide': skillDir('aide'),
|
|
40
|
-
'augment': skillDir('augment'),
|
|
41
|
-
'supermaven': skillDir('supermaven'),
|
|
42
|
-
'tabnine': skillDir('tabnine'),
|
|
43
|
-
'cody': skillDir('cody'),
|
|
44
|
-
'qodo': skillDir('qodo'),
|
|
45
|
-
'bito': skillDir('bito'),
|
|
46
|
-
'double': skillDir('double'),
|
|
47
|
-
'codestory': skillDir('codestory'),
|
|
48
|
-
'mentat': skillDir('mentat'),
|
|
49
|
-
'goose': skillDir('goose'),
|
|
50
|
-
'otto': skillDir('otto'),
|
|
51
|
-
'sweep': skillDir('sweep'),
|
|
52
|
-
'devin': skillDir('devin'),
|
|
53
|
-
'replit': skillDir('replit'),
|
|
54
|
-
'bolt': skillDir('bolt'),
|
|
55
|
-
'v0': skillDir('v0'),
|
|
56
|
-
'lovable': skillDir('lovable'),
|
|
57
|
-
'same': skillDir('same'),
|
|
58
|
-
'manus': skillDir('manus'),
|
|
59
|
-
'opencode': skillDir('opencode'),
|
|
60
|
-
'kilo-code': skillDir('kilo-code'),
|
|
61
|
-
'gemini-cli': skillDir('gemini'),
|
|
62
|
-
'agents': skillDir('agents'),
|
|
63
|
-
};
|
|
64
13
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,MAAM,CAAC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,gCAAgC,CAAC;AAClG,MAAM,CAAC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,KAAK,MAAM,CAAC;AACrE,MAAM,CAAC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,KAAK,MAAM,CAAC;AAC9E,MAAM,CAAC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,KAAK,MAAM,CAAC;AAChE,MAAM,CAAC,MAAM,QAAQ,GAAG,OAAO,EAAE,CAAC;AAClC,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;AACxD,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;AACzD,MAAM,CAAC,MAAM,UAAU,GAAG,uBAAuB,CAAC;AAClD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC"}
|
package/dist/utils/slug.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
/** Slugs from the API use lowercase letters, digits, and hyphens only. */
|
|
2
2
|
export declare const SKILL_SLUG_PATTERN: RegExp;
|
|
3
|
+
/** Hierarchical URL slugs: owner/skillName (both segments match SKILL_SLUG_PATTERN). */
|
|
4
|
+
export declare const HIERARCHICAL_SLUG_PATTERN: RegExp;
|
|
3
5
|
export declare function isSafeSkillSlug(slug: string): boolean;
|
|
4
6
|
//# sourceMappingURL=slug.d.ts.map
|
package/dist/utils/slug.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slug.d.ts","sourceRoot":"","sources":["../../src/utils/slug.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,eAAO,MAAM,kBAAkB,QAA+B,CAAC;AAE/D,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAErD"}
|
|
1
|
+
{"version":3,"file":"slug.d.ts","sourceRoot":"","sources":["../../src/utils/slug.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,eAAO,MAAM,kBAAkB,QAA+B,CAAC;AAE/D,wFAAwF;AACxF,eAAO,MAAM,yBAAyB,QAAyD,CAAC;AAEhG,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAErD"}
|
package/dist/utils/slug.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
/** Slugs from the API use lowercase letters, digits, and hyphens only. */
|
|
2
2
|
export const SKILL_SLUG_PATTERN = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
|
|
3
|
+
/** Hierarchical URL slugs: owner/skillName (both segments match SKILL_SLUG_PATTERN). */
|
|
4
|
+
export const HIERARCHICAL_SLUG_PATTERN = /^[a-z0-9]+(?:-[a-z0-9]+)*\/[a-z0-9]+(?:-[a-z0-9]+)*$/;
|
|
3
5
|
export function isSafeSkillSlug(slug) {
|
|
4
|
-
return SKILL_SLUG_PATTERN.test(slug);
|
|
6
|
+
return SKILL_SLUG_PATTERN.test(slug) || HIERARCHICAL_SLUG_PATTERN.test(slug);
|
|
5
7
|
}
|
|
6
8
|
//# sourceMappingURL=slug.js.map
|
package/dist/utils/slug.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slug.js","sourceRoot":"","sources":["../../src/utils/slug.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,MAAM,CAAC,MAAM,kBAAkB,GAAG,4BAA4B,CAAC;AAE/D,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"slug.js","sourceRoot":"","sources":["../../src/utils/slug.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,MAAM,CAAC,MAAM,kBAAkB,GAAG,4BAA4B,CAAC;AAE/D,wFAAwF;AACxF,MAAM,CAAC,MAAM,yBAAyB,GAAG,sDAAsD,CAAC;AAEhG,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/E,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "skillsauth",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.3",
|
|
4
4
|
"description": "Install verified AI agent skills from the SkillsAuth marketplace",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -22,15 +22,13 @@
|
|
|
22
22
|
"cursor",
|
|
23
23
|
"windsurf",
|
|
24
24
|
"codex",
|
|
25
|
-
"copilot",
|
|
25
|
+
"github-copilot",
|
|
26
26
|
"cline",
|
|
27
|
-
"aider",
|
|
28
27
|
"roo",
|
|
29
28
|
"amp",
|
|
30
29
|
"gemini-cli",
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
"lovable"
|
|
30
|
+
"opencode",
|
|
31
|
+
"vercel-skills"
|
|
34
32
|
],
|
|
35
33
|
"author": "SkillsAuth",
|
|
36
34
|
"license": "MIT",
|
|
@@ -44,14 +42,18 @@
|
|
|
44
42
|
},
|
|
45
43
|
"dependencies": {
|
|
46
44
|
"@clack/prompts": "^0.9.0",
|
|
45
|
+
"@sigstore/bundle": "^4.0.0",
|
|
46
|
+
"@sigstore/verify": "^3.1.0",
|
|
47
47
|
"chalk": "^5.3.0",
|
|
48
|
-
"commander": "^12.1.0"
|
|
48
|
+
"commander": "^12.1.0",
|
|
49
|
+
"sigstore": "^4.1.0",
|
|
50
|
+
"@skillsai/crypto-sign": "0.0.1"
|
|
49
51
|
},
|
|
50
52
|
"devDependencies": {
|
|
51
53
|
"typescript": "^5.5.0",
|
|
52
54
|
"@types/node": "^22.0.0",
|
|
53
55
|
"tsx": "^4.0.0",
|
|
54
|
-
"vitest": "^2.
|
|
56
|
+
"vitest": "^3.2.4"
|
|
55
57
|
},
|
|
56
58
|
"scripts": {
|
|
57
59
|
"build": "tsc",
|