superskill 0.2.5 → 0.2.7
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/CHANGELOG.md +32 -0
- package/README.md +118 -134
- package/dist/commands/skill/activate.d.ts +23 -0
- package/dist/commands/skill/activate.js +170 -0
- package/dist/commands/skill/activate.js.map +1 -0
- package/dist/commands/skill/generate.d.ts +28 -0
- package/dist/commands/skill/generate.js +180 -0
- package/dist/commands/skill/generate.js.map +1 -0
- package/dist/commands/skill/helpers.d.ts +14 -0
- package/dist/commands/skill/helpers.js +82 -0
- package/dist/commands/skill/helpers.js.map +1 -0
- package/dist/commands/skill/manifest.d.ts +26 -0
- package/dist/commands/skill/manifest.js +90 -0
- package/dist/commands/skill/manifest.js.map +1 -0
- package/dist/commands/skill/marketplace.d.ts +8 -122
- package/dist/commands/skill/marketplace.js +12 -590
- package/dist/commands/skill/marketplace.js.map +1 -1
- package/dist/commands/skill/resolve.d.ts +47 -0
- package/dist/commands/skill/resolve.js +101 -0
- package/dist/commands/skill/resolve.js.map +1 -0
- package/dist/commands/skill/web-discovery.d.ts +36 -4
- package/dist/commands/skill/web-discovery.js +160 -5
- package/dist/commands/skill/web-discovery.js.map +1 -1
- package/dist/lib/analytics.d.ts +55 -0
- package/dist/lib/analytics.js +167 -0
- package/dist/lib/analytics.js.map +1 -0
- package/dist/lib/skill-cache.d.ts +34 -0
- package/dist/lib/skill-cache.js +150 -0
- package/dist/lib/skill-cache.js.map +1 -0
- package/dist/setup/postinstall.js +21 -0
- package/dist/setup/postinstall.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
export interface CatalogResult {
|
|
2
|
+
total: number;
|
|
3
|
+
repos: {
|
|
4
|
+
repo: string;
|
|
5
|
+
count: number;
|
|
6
|
+
}[];
|
|
7
|
+
domains: {
|
|
8
|
+
id: string;
|
|
9
|
+
name: string;
|
|
10
|
+
skill_count: number;
|
|
11
|
+
}[];
|
|
12
|
+
skills: import("./catalog.js").CatalogSkill[];
|
|
13
|
+
}
|
|
14
|
+
export interface CollisionResult {
|
|
15
|
+
collisions: Array<{
|
|
16
|
+
domain_id: string;
|
|
17
|
+
domain_name: string;
|
|
18
|
+
skills: Array<{
|
|
19
|
+
id: string;
|
|
20
|
+
name: string;
|
|
21
|
+
repo: string;
|
|
22
|
+
description: string;
|
|
23
|
+
}>;
|
|
24
|
+
}>;
|
|
25
|
+
total_collision_domains: number;
|
|
26
|
+
total_affected_skills: number;
|
|
27
|
+
}
|
|
28
|
+
export interface ResolveResult {
|
|
29
|
+
success: boolean;
|
|
30
|
+
profile_name: string;
|
|
31
|
+
resolutions: Array<{
|
|
32
|
+
domain: string;
|
|
33
|
+
chosen: string;
|
|
34
|
+
alternatives: string[];
|
|
35
|
+
}>;
|
|
36
|
+
active_skills: string[];
|
|
37
|
+
error?: string;
|
|
38
|
+
}
|
|
39
|
+
export declare function catalogCommand(options: {
|
|
40
|
+
domain?: string;
|
|
41
|
+
repo?: string;
|
|
42
|
+
search?: string;
|
|
43
|
+
}): Promise<CatalogResult>;
|
|
44
|
+
export declare function collisionsCommand(): Promise<CollisionResult>;
|
|
45
|
+
export declare function resolveCommand(options: {
|
|
46
|
+
profile?: string;
|
|
47
|
+
}): Promise<ResolveResult>;
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-or-later OR Commercial
|
|
2
|
+
import { CATALOG, DOMAINS, detectCollisions, searchCatalog, getProfile, BUILT_IN_PROFILES, } from "./catalog.js";
|
|
3
|
+
// ── Commands ─────────────────────────────────────────
|
|
4
|
+
export async function catalogCommand(options) {
|
|
5
|
+
const filtered = searchCatalog({
|
|
6
|
+
domain: options.domain,
|
|
7
|
+
repo: options.repo,
|
|
8
|
+
text: options.search,
|
|
9
|
+
});
|
|
10
|
+
const repoCount = new Map();
|
|
11
|
+
const domainSkills = new Map();
|
|
12
|
+
for (const skill of filtered) {
|
|
13
|
+
repoCount.set(skill.repo, (repoCount.get(skill.repo) ?? 0) + 1);
|
|
14
|
+
for (const d of skill.domains) {
|
|
15
|
+
const set = domainSkills.get(d) ?? new Set();
|
|
16
|
+
set.add(skill.id);
|
|
17
|
+
domainSkills.set(d, set);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return {
|
|
21
|
+
total: filtered.length,
|
|
22
|
+
repos: Array.from(repoCount.entries())
|
|
23
|
+
.map(([repo, count]) => ({ repo, count }))
|
|
24
|
+
.sort((a, b) => b.count - a.count),
|
|
25
|
+
domains: Array.from(domainSkills.entries())
|
|
26
|
+
.map(([id, skills]) => ({
|
|
27
|
+
id,
|
|
28
|
+
name: DOMAINS.find((d) => d.id === id)?.name ?? id,
|
|
29
|
+
skill_count: skills.size,
|
|
30
|
+
}))
|
|
31
|
+
.sort((a, b) => b.skill_count - a.skill_count),
|
|
32
|
+
skills: filtered,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
export async function collisionsCommand() {
|
|
36
|
+
const collisions = detectCollisions();
|
|
37
|
+
const affected = new Set();
|
|
38
|
+
const mapped = collisions.map((c) => {
|
|
39
|
+
const skills = c.skills.map((s) => {
|
|
40
|
+
affected.add(s.id);
|
|
41
|
+
return { id: s.id, name: s.name, repo: s.repo, description: s.description };
|
|
42
|
+
});
|
|
43
|
+
return {
|
|
44
|
+
domain_id: c.domain.id,
|
|
45
|
+
domain_name: c.domain.name,
|
|
46
|
+
skills,
|
|
47
|
+
};
|
|
48
|
+
});
|
|
49
|
+
return {
|
|
50
|
+
collisions: mapped,
|
|
51
|
+
total_collision_domains: mapped.length,
|
|
52
|
+
total_affected_skills: affected.size,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
export async function resolveCommand(options) {
|
|
56
|
+
const profileName = options.profile ?? "ecc-first";
|
|
57
|
+
const profile = getProfile(profileName);
|
|
58
|
+
if (!profile) {
|
|
59
|
+
const available = BUILT_IN_PROFILES.map((p) => p.name).join(", ");
|
|
60
|
+
return {
|
|
61
|
+
success: false,
|
|
62
|
+
profile_name: profileName,
|
|
63
|
+
resolutions: [],
|
|
64
|
+
active_skills: [],
|
|
65
|
+
error: `Unknown profile: "${profileName}". Available: ${available}`,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
const collisions = detectCollisions();
|
|
69
|
+
const collisionDomainIds = new Set(collisions.map((c) => c.domain.id));
|
|
70
|
+
// Build resolution report
|
|
71
|
+
const resolutions = profile.resolutions.map((r) => {
|
|
72
|
+
const collision = collisions.find((c) => c.domain.id === r.domain_id);
|
|
73
|
+
return {
|
|
74
|
+
domain: r.domain_id,
|
|
75
|
+
chosen: r.chosen_skill_id,
|
|
76
|
+
alternatives: collision
|
|
77
|
+
? collision.skills.filter((s) => s.id !== r.chosen_skill_id).map((s) => s.id)
|
|
78
|
+
: [],
|
|
79
|
+
};
|
|
80
|
+
});
|
|
81
|
+
// Collect active skill IDs: chosen winners + all non-colliding skills
|
|
82
|
+
const activeSkillIds = new Set();
|
|
83
|
+
// Add collision winners
|
|
84
|
+
for (const r of profile.resolutions) {
|
|
85
|
+
activeSkillIds.add(r.chosen_skill_id);
|
|
86
|
+
}
|
|
87
|
+
// Add non-colliding skills (domains with only one repo)
|
|
88
|
+
for (const skill of CATALOG) {
|
|
89
|
+
const allDomainsNonColliding = skill.domains.every((d) => !collisionDomainIds.has(d));
|
|
90
|
+
if (allDomainsNonColliding) {
|
|
91
|
+
activeSkillIds.add(skill.id);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return {
|
|
95
|
+
success: true,
|
|
96
|
+
profile_name: profileName,
|
|
97
|
+
resolutions,
|
|
98
|
+
active_skills: [...activeSkillIds].sort(),
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=resolve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../../src/commands/skill/resolve.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,OAAO,EACL,OAAO,EACP,OAAO,EACP,gBAAgB,EAChB,aAAa,EACb,UAAU,EACV,iBAAiB,GAClB,MAAM,cAAc,CAAC;AAiCtB,wDAAwD;AAExD,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAIpC;IACC,MAAM,QAAQ,GAAG,aAAa,CAAC;QAC7B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,IAAI,EAAE,OAAO,CAAC,MAAM;KACrB,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC5C,MAAM,YAAY,GAAG,IAAI,GAAG,EAAuB,CAAC;IAEpD,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC7B,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAChE,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;YAC7C,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAClB,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,OAAO;QACL,KAAK,EAAE,QAAQ,CAAC,MAAM;QACtB,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;aACnC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;aACzC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;QACpC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;aACxC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;YACtB,EAAE;YACF,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,IAAI,EAAE;YAClD,WAAW,EAAE,MAAM,CAAC,IAAI;SACzB,CAAC,CAAC;aACF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW,CAAC;QAChD,MAAM,EAAE,QAAQ;KACjB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,MAAM,UAAU,GAAG,gBAAgB,EAAE,CAAC;IACtC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IAEnC,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAClC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YAChC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACnB,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QAC9E,CAAC,CAAC,CAAC;QACH,OAAO;YACL,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE;YACtB,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI;YAC1B,MAAM;SACP,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,UAAU,EAAE,MAAM;QAClB,uBAAuB,EAAE,MAAM,CAAC,MAAM;QACtC,qBAAqB,EAAE,QAAQ,CAAC,IAAI;KACrC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAEpC;IACC,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,IAAI,WAAW,CAAC;IACnD,MAAM,OAAO,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IAExC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,SAAS,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClE,OAAO;YACL,OAAO,EAAE,KAAK;YACd,YAAY,EAAE,WAAW;YACzB,WAAW,EAAE,EAAE;YACf,aAAa,EAAE,EAAE;YACjB,KAAK,EAAE,qBAAqB,WAAW,iBAAiB,SAAS,EAAE;SACpE,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,gBAAgB,EAAE,CAAC;IACtC,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAEvE,0BAA0B;IAC1B,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAChD,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC;QACtE,OAAO;YACL,MAAM,EAAE,CAAC,CAAC,SAAS;YACnB,MAAM,EAAE,CAAC,CAAC,eAAe;YACzB,YAAY,EAAE,SAAS;gBACrB,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7E,CAAC,CAAC,EAAE;SACP,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,sEAAsE;IACtE,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;IAEzC,wBAAwB;IACxB,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACpC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IACxC,CAAC;IAED,wDAAwD;IACxD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,sBAAsB,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACtF,IAAI,sBAAsB,EAAE,CAAC;YAC3B,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,YAAY,EAAE,WAAW;QACzB,WAAW;QACX,aAAa,EAAE,CAAC,GAAG,cAAc,CAAC,CAAC,IAAI,EAAE;KAC1C,CAAC;AACJ,CAAC"}
|
|
@@ -1,7 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
export interface DiscoveryCacheEntry {
|
|
2
|
+
results: DiscoveredSkill[];
|
|
3
|
+
timestamp: string;
|
|
4
|
+
ttl_hours: number;
|
|
5
|
+
}
|
|
6
|
+
export interface DiscoveryCache {
|
|
7
|
+
entries: Record<string, DiscoveryCacheEntry>;
|
|
8
|
+
}
|
|
9
|
+
/** Visible for testing — override cache file path. */
|
|
10
|
+
export declare let _cacheFilePath: string;
|
|
11
|
+
export declare function _setCacheFilePath(p: string): void;
|
|
12
|
+
export declare function _resetCacheFilePath(): void;
|
|
5
13
|
export interface DiscoveredSkill {
|
|
6
14
|
name: string;
|
|
7
15
|
description: string;
|
|
@@ -16,20 +24,44 @@ export interface WebDiscoveryResult {
|
|
|
16
24
|
results: DiscoveredSkill[];
|
|
17
25
|
error?: string;
|
|
18
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* Normalize a task string into a stable cache key.
|
|
29
|
+
* Lowercase, extract keywords, sort alphabetically, join with "+".
|
|
30
|
+
*/
|
|
31
|
+
export declare function normalizeCacheKey(task: string): string;
|
|
32
|
+
/**
|
|
33
|
+
* Clear the discovery cache. Exported for testing.
|
|
34
|
+
*/
|
|
35
|
+
export declare function clearDiscoveryCache(): Promise<void>;
|
|
19
36
|
/**
|
|
20
37
|
* Search GitHub for SKILL.md files matching a task description.
|
|
21
38
|
* Uses the GitHub Search API (code search + repo search).
|
|
22
39
|
* Unauthenticated: 10 req/min. With GITHUB_TOKEN: 30 req/min.
|
|
40
|
+
*
|
|
41
|
+
* Results are cached for 24 hours at ~/.superskill/discovery-cache.json
|
|
42
|
+
* to avoid hitting GitHub API rate limits.
|
|
23
43
|
*/
|
|
24
44
|
export declare function searchGitHubForSkills(task: string): Promise<WebDiscoveryResult>;
|
|
25
45
|
/**
|
|
26
46
|
* Fetch a skill's content from a raw GitHub URL.
|
|
47
|
+
* Includes security validation to prevent prompt injection.
|
|
27
48
|
*/
|
|
28
49
|
export declare function fetchDiscoveredSkill(sourceUrl: string): Promise<{
|
|
29
50
|
success: boolean;
|
|
30
51
|
content?: string;
|
|
31
52
|
error?: string;
|
|
53
|
+
warnings?: string[];
|
|
32
54
|
}>;
|
|
55
|
+
/**
|
|
56
|
+
* Scan skill content for prompt injection patterns.
|
|
57
|
+
* Skills are markdown injected into LLM context — malicious content
|
|
58
|
+
* could instruct the LLM to exfiltrate data, run commands, or ignore user intent.
|
|
59
|
+
*/
|
|
60
|
+
export declare function scanForPromptInjection(content: string): {
|
|
61
|
+
blocked: boolean;
|
|
62
|
+
reason?: string;
|
|
63
|
+
warnings: string[];
|
|
64
|
+
};
|
|
33
65
|
/**
|
|
34
66
|
* Format discovery results for presentation to the user via the LLM.
|
|
35
67
|
*/
|
|
@@ -1,14 +1,105 @@
|
|
|
1
1
|
// SPDX-License-Identifier: AGPL-3.0-or-later OR Commercial
|
|
2
|
+
/**
|
|
3
|
+
* Web Discovery — search GitHub for skills not in the local catalog.
|
|
4
|
+
* Called as a fallback when activateSkills() finds zero matches.
|
|
5
|
+
*/
|
|
6
|
+
import { homedir } from "os";
|
|
7
|
+
import { join } from "path";
|
|
8
|
+
import { readFile, writeFile, rename, mkdir } from "fs/promises";
|
|
9
|
+
const CACHE_DIR = join(homedir(), ".superskill");
|
|
10
|
+
const CACHE_FILE = join(CACHE_DIR, "discovery-cache.json");
|
|
11
|
+
const DEFAULT_TTL_HOURS = 24;
|
|
12
|
+
const MAX_CACHE_ENTRIES = 100;
|
|
13
|
+
/** Visible for testing — override cache file path. */
|
|
14
|
+
export let _cacheFilePath = CACHE_FILE;
|
|
15
|
+
export function _setCacheFilePath(p) {
|
|
16
|
+
_cacheFilePath = p;
|
|
17
|
+
}
|
|
18
|
+
export function _resetCacheFilePath() {
|
|
19
|
+
_cacheFilePath = CACHE_FILE;
|
|
20
|
+
}
|
|
21
|
+
// ── Cache Helpers ────────────────────────────────────
|
|
22
|
+
/**
|
|
23
|
+
* Normalize a task string into a stable cache key.
|
|
24
|
+
* Lowercase, extract keywords, sort alphabetically, join with "+".
|
|
25
|
+
*/
|
|
26
|
+
export function normalizeCacheKey(task) {
|
|
27
|
+
const kw = extractKeywords(task);
|
|
28
|
+
return kw.sort().join("+");
|
|
29
|
+
}
|
|
30
|
+
async function readCache() {
|
|
31
|
+
try {
|
|
32
|
+
const raw = await readFile(_cacheFilePath, "utf-8");
|
|
33
|
+
const parsed = JSON.parse(raw);
|
|
34
|
+
if (parsed && typeof parsed === "object" && parsed.entries && typeof parsed.entries === "object") {
|
|
35
|
+
return parsed;
|
|
36
|
+
}
|
|
37
|
+
return { entries: {} };
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return { entries: {} };
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
async function writeCache(cache) {
|
|
44
|
+
try {
|
|
45
|
+
const dir = _cacheFilePath.substring(0, _cacheFilePath.lastIndexOf("/"));
|
|
46
|
+
await mkdir(dir, { recursive: true });
|
|
47
|
+
const tmp = _cacheFilePath + ".tmp." + process.pid;
|
|
48
|
+
await writeFile(tmp, JSON.stringify(cache, null, 2), "utf-8");
|
|
49
|
+
await rename(tmp, _cacheFilePath);
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
// Never crash on cache write failure
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
function isCacheEntryValid(entry) {
|
|
56
|
+
const age = Date.now() - new Date(entry.timestamp).getTime();
|
|
57
|
+
const ttlMs = (entry.ttl_hours || DEFAULT_TTL_HOURS) * 60 * 60 * 1000;
|
|
58
|
+
return age < ttlMs;
|
|
59
|
+
}
|
|
60
|
+
function evictOldest(cache) {
|
|
61
|
+
const keys = Object.keys(cache.entries);
|
|
62
|
+
if (keys.length <= MAX_CACHE_ENTRIES)
|
|
63
|
+
return;
|
|
64
|
+
// Sort by timestamp ascending (oldest first), evict extras
|
|
65
|
+
const sorted = keys.sort((a, b) => {
|
|
66
|
+
const ta = new Date(cache.entries[a].timestamp).getTime();
|
|
67
|
+
const tb = new Date(cache.entries[b].timestamp).getTime();
|
|
68
|
+
return ta - tb;
|
|
69
|
+
});
|
|
70
|
+
const toRemove = sorted.slice(0, keys.length - MAX_CACHE_ENTRIES);
|
|
71
|
+
for (const key of toRemove) {
|
|
72
|
+
delete cache.entries[key];
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Clear the discovery cache. Exported for testing.
|
|
77
|
+
*/
|
|
78
|
+
export async function clearDiscoveryCache() {
|
|
79
|
+
await writeCache({ entries: {} });
|
|
80
|
+
}
|
|
2
81
|
/**
|
|
3
82
|
* Search GitHub for SKILL.md files matching a task description.
|
|
4
83
|
* Uses the GitHub Search API (code search + repo search).
|
|
5
84
|
* Unauthenticated: 10 req/min. With GITHUB_TOKEN: 30 req/min.
|
|
85
|
+
*
|
|
86
|
+
* Results are cached for 24 hours at ~/.superskill/discovery-cache.json
|
|
87
|
+
* to avoid hitting GitHub API rate limits.
|
|
6
88
|
*/
|
|
7
89
|
export async function searchGitHubForSkills(task) {
|
|
8
90
|
const keywords = extractKeywords(task);
|
|
9
91
|
if (keywords.length === 0) {
|
|
10
92
|
return { success: false, results: [], error: "Could not extract search keywords from task" };
|
|
11
93
|
}
|
|
94
|
+
const cacheKey = normalizeCacheKey(task);
|
|
95
|
+
// Check cache
|
|
96
|
+
if (cacheKey) {
|
|
97
|
+
const cache = await readCache();
|
|
98
|
+
const entry = cache.entries[cacheKey];
|
|
99
|
+
if (entry && isCacheEntryValid(entry)) {
|
|
100
|
+
return { success: true, results: entry.results };
|
|
101
|
+
}
|
|
102
|
+
}
|
|
12
103
|
const query = buildSearchQuery(keywords);
|
|
13
104
|
try {
|
|
14
105
|
// Search for repos with SKILL.md files matching keywords
|
|
@@ -31,7 +122,19 @@ export async function searchGitHubForSkills(task) {
|
|
|
31
122
|
// Sort by stars descending (trust signal)
|
|
32
123
|
skills.sort((a, b) => b.stars - a.stars);
|
|
33
124
|
// Cap at 5 results
|
|
34
|
-
|
|
125
|
+
const capped = skills.slice(0, 5);
|
|
126
|
+
// Store in cache
|
|
127
|
+
if (cacheKey) {
|
|
128
|
+
const cache = await readCache();
|
|
129
|
+
cache.entries[cacheKey] = {
|
|
130
|
+
results: capped,
|
|
131
|
+
timestamp: new Date().toISOString(),
|
|
132
|
+
ttl_hours: DEFAULT_TTL_HOURS,
|
|
133
|
+
};
|
|
134
|
+
evictOldest(cache);
|
|
135
|
+
await writeCache(cache);
|
|
136
|
+
}
|
|
137
|
+
return { success: true, results: capped };
|
|
35
138
|
}
|
|
36
139
|
catch (err) {
|
|
37
140
|
return { success: false, results: [], error: `GitHub search failed: ${err.message}` };
|
|
@@ -39,6 +142,7 @@ export async function searchGitHubForSkills(task) {
|
|
|
39
142
|
}
|
|
40
143
|
/**
|
|
41
144
|
* Fetch a skill's content from a raw GitHub URL.
|
|
145
|
+
* Includes security validation to prevent prompt injection.
|
|
42
146
|
*/
|
|
43
147
|
export async function fetchDiscoveredSkill(sourceUrl) {
|
|
44
148
|
try {
|
|
@@ -52,12 +156,63 @@ export async function fetchDiscoveredSkill(sourceUrl) {
|
|
|
52
156
|
if (content.length < 50) {
|
|
53
157
|
return { success: false, error: "File too short to be a valid skill" };
|
|
54
158
|
}
|
|
55
|
-
|
|
159
|
+
// Size cap — skills over 50KB are suspicious
|
|
160
|
+
if (content.length > 50_000) {
|
|
161
|
+
return { success: false, error: "Skill file exceeds 50KB size limit — may not be a legitimate skill file" };
|
|
162
|
+
}
|
|
163
|
+
// Security scan
|
|
164
|
+
const securityResult = scanForPromptInjection(content);
|
|
165
|
+
if (securityResult.blocked) {
|
|
166
|
+
return { success: false, error: `Security risk detected: ${securityResult.reason}` };
|
|
167
|
+
}
|
|
168
|
+
return { success: true, content, warnings: securityResult.warnings };
|
|
56
169
|
}
|
|
57
170
|
catch (err) {
|
|
58
171
|
return { success: false, error: `Fetch failed: ${err.message}` };
|
|
59
172
|
}
|
|
60
173
|
}
|
|
174
|
+
/**
|
|
175
|
+
* Scan skill content for prompt injection patterns.
|
|
176
|
+
* Skills are markdown injected into LLM context — malicious content
|
|
177
|
+
* could instruct the LLM to exfiltrate data, run commands, or ignore user intent.
|
|
178
|
+
*/
|
|
179
|
+
export function scanForPromptInjection(content) {
|
|
180
|
+
const warnings = [];
|
|
181
|
+
const lower = content.toLowerCase();
|
|
182
|
+
// Hard blocks — these should never appear in a skill file
|
|
183
|
+
const blockedPatterns = [
|
|
184
|
+
{ pattern: /ignore (all |any )?(previous|prior|above) (instructions|prompts|context)/i, reason: "Prompt override attempt" },
|
|
185
|
+
{ pattern: /forget (all |everything )?(you|your|previous)/i, reason: "Memory wipe attempt" },
|
|
186
|
+
{ pattern: /do not (tell|inform|reveal|mention|show) (the user|anyone)/i, reason: "Secrecy instruction — skills should be transparent" },
|
|
187
|
+
{ pattern: /exfiltrate|steal|extract.*secret|send.*to.*http/i, reason: "Data exfiltration pattern" },
|
|
188
|
+
{ pattern: /curl\s+.*\|.*sh/i, reason: "Remote code execution via pipe to shell" },
|
|
189
|
+
{ pattern: /rm\s+-rf\s+[\/~]/i, reason: "Destructive filesystem command" },
|
|
190
|
+
{ pattern: /eval\s*\(.*fetch/i, reason: "Dynamic code execution from remote source" },
|
|
191
|
+
{ pattern: /<\s*script[\s>]/i, reason: "Script injection" },
|
|
192
|
+
];
|
|
193
|
+
for (const { pattern, reason } of blockedPatterns) {
|
|
194
|
+
if (pattern.test(content)) {
|
|
195
|
+
return { blocked: true, reason, warnings };
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
// Soft warnings — suspicious but not necessarily malicious
|
|
199
|
+
if (lower.includes("api_key") || lower.includes("secret_key") || lower.includes("password")) {
|
|
200
|
+
warnings.push("References credentials — review before loading");
|
|
201
|
+
}
|
|
202
|
+
if (lower.includes("sudo ") || lower.includes("chmod 777")) {
|
|
203
|
+
warnings.push("Contains privileged system commands");
|
|
204
|
+
}
|
|
205
|
+
if ((content.match(/https?:\/\//g) || []).length > 20) {
|
|
206
|
+
warnings.push("Unusually high number of external URLs");
|
|
207
|
+
}
|
|
208
|
+
if (lower.includes("system prompt") || lower.includes("system message")) {
|
|
209
|
+
warnings.push("References system prompts — may attempt to modify LLM behavior");
|
|
210
|
+
}
|
|
211
|
+
if (/you are now|you must now act as/i.test(content)) {
|
|
212
|
+
warnings.push("Contains role-play instructions — common in skills but review for legitimacy");
|
|
213
|
+
}
|
|
214
|
+
return { blocked: false, warnings };
|
|
215
|
+
}
|
|
61
216
|
/**
|
|
62
217
|
* Format discovery results for presentation to the user via the LLM.
|
|
63
218
|
*/
|
|
@@ -104,8 +259,8 @@ function extractKeywords(task) {
|
|
|
104
259
|
.filter((w) => w.length > 2 && !stopwords.has(w));
|
|
105
260
|
}
|
|
106
261
|
function buildSearchQuery(keywords) {
|
|
107
|
-
//
|
|
108
|
-
return `${keywords.join(" ")} SKILL
|
|
262
|
+
// Search for SKILL.md files matching keywords
|
|
263
|
+
return `${keywords.join(" ")} filename:SKILL`;
|
|
109
264
|
}
|
|
110
265
|
async function searchGitHubCode(query) {
|
|
111
266
|
const headers = {
|
|
@@ -143,7 +298,7 @@ async function searchGitHubRepos(keywords) {
|
|
|
143
298
|
const token = process.env.GITHUB_TOKEN;
|
|
144
299
|
if (token)
|
|
145
300
|
headers.Authorization = `Bearer ${token}`;
|
|
146
|
-
const query = `${keywords.join(" ")} skill claude
|
|
301
|
+
const query = `${keywords.join(" ")} skill claude in:name,description,readme`;
|
|
147
302
|
const url = `https://api.github.com/search/repositories?q=${encodeURIComponent(query)}&sort=stars&per_page=5`;
|
|
148
303
|
const res = await fetch(url, { headers });
|
|
149
304
|
if (!res.ok) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-discovery.js","sourceRoot":"","sources":["../../../src/commands/skill/web-discovery.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"web-discovery.js","sourceRoot":"","sources":["../../../src/commands/skill/web-discovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
export type MatchMethod = "trigger" | "skill_id" | "domain" | "web_discovery";
|
|
2
|
+
export interface Activation {
|
|
3
|
+
skill_id: string;
|
|
4
|
+
match_method: MatchMethod;
|
|
5
|
+
timestamp: string;
|
|
6
|
+
task_query: string;
|
|
7
|
+
matched: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface FailedSearch {
|
|
10
|
+
query: string;
|
|
11
|
+
timestamp: string;
|
|
12
|
+
result_count: number;
|
|
13
|
+
}
|
|
14
|
+
export interface SkillUsageCount {
|
|
15
|
+
id: string;
|
|
16
|
+
count: number;
|
|
17
|
+
}
|
|
18
|
+
export interface AnalyticsSummary {
|
|
19
|
+
total_activations: number;
|
|
20
|
+
total_failed_searches: number;
|
|
21
|
+
most_used_skills: SkillUsageCount[];
|
|
22
|
+
first_seen: string | null;
|
|
23
|
+
last_seen: string | null;
|
|
24
|
+
}
|
|
25
|
+
export interface AnalyticsData {
|
|
26
|
+
activations: Activation[];
|
|
27
|
+
failed_searches: FailedSearch[];
|
|
28
|
+
summary: AnalyticsSummary;
|
|
29
|
+
}
|
|
30
|
+
export declare function setAnalyticsPath(path: string | null): void;
|
|
31
|
+
/**
|
|
32
|
+
* Track a skill activation event.
|
|
33
|
+
* Never throws — analytics failures must not block skill activation.
|
|
34
|
+
*/
|
|
35
|
+
export declare function trackActivation(activation: Omit<Activation, "timestamp">): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* Track a failed search event.
|
|
38
|
+
* Never throws — analytics failures must not block skill activation.
|
|
39
|
+
*/
|
|
40
|
+
export declare function trackFailedSearch(query: string, resultCount?: number): Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* Track a web discovery activation (convenience wrapper).
|
|
43
|
+
* Never throws.
|
|
44
|
+
*/
|
|
45
|
+
export declare function trackWebDiscovery(taskQuery: string, matched: boolean): Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* Get the current analytics summary.
|
|
48
|
+
* Never throws — returns empty summary on failure.
|
|
49
|
+
*/
|
|
50
|
+
export declare function getAnalyticsSummary(): Promise<AnalyticsSummary>;
|
|
51
|
+
/**
|
|
52
|
+
* Get the full analytics data (for debugging / display).
|
|
53
|
+
* Never throws — returns empty data on failure.
|
|
54
|
+
*/
|
|
55
|
+
export declare function getAnalyticsData(): Promise<AnalyticsData>;
|