superskill 0.2.6 → 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.
@@ -0,0 +1,180 @@
1
+ import { CATALOG } from "./catalog.js";
2
+ import { resolveCommand } from "./resolve.js";
3
+ import { fetchSkillContent, formatSection, assembleSuperSkill, classifySkill, } from "./helpers.js";
4
+ async function fetchAllSkills(skillIds, concurrency) {
5
+ const results = new Map();
6
+ // Split into chunks to bound concurrency
7
+ const chunks = [];
8
+ for (let i = 0; i < skillIds.length; i += concurrency) {
9
+ chunks.push(skillIds.slice(i, i + concurrency));
10
+ }
11
+ for (const chunk of chunks) {
12
+ const settled = await Promise.allSettled(chunk.map(async (id) => {
13
+ const entry = CATALOG.find((s) => s.id === id);
14
+ if (!entry)
15
+ return { id, error: "not in catalog" };
16
+ const content = await fetchSkillContent(entry.source);
17
+ return { id, content };
18
+ }));
19
+ for (let i = 0; i < settled.length; i++) {
20
+ const id = chunk[i];
21
+ const r = settled[i];
22
+ if (r.status === "fulfilled") {
23
+ const val = r.value;
24
+ if ("error" in val) {
25
+ results.set(id, { error: val.error });
26
+ }
27
+ else {
28
+ results.set(id, { content: val.content });
29
+ }
30
+ }
31
+ else {
32
+ results.set(id, { error: String(r.reason) });
33
+ }
34
+ }
35
+ }
36
+ return results;
37
+ }
38
+ // ── Generate Command ──────────────────────────────────
39
+ export async function generateCommand(vaultFs, _vaultPath, options) {
40
+ const CONCURRENCY = 8;
41
+ // 1. Resolve
42
+ const resolution = await resolveCommand({ profile: options.profile });
43
+ if (!resolution.success) {
44
+ return { success: false, error: resolution.error };
45
+ }
46
+ // 2. Determine active skills
47
+ let activeSkillIds;
48
+ if (options.includeNonColliding === false) {
49
+ activeSkillIds = resolution.resolutions.map((r) => r.chosen);
50
+ }
51
+ else {
52
+ activeSkillIds = resolution.active_skills;
53
+ }
54
+ // 2b. Domain filter: only keep skills whose domains overlap with relevantDomains
55
+ let filteredOut = 0;
56
+ if (options.relevantDomains && options.relevantDomains.length > 0) {
57
+ const relevantSet = new Set(options.relevantDomains);
58
+ const before = activeSkillIds.length;
59
+ activeSkillIds = activeSkillIds.filter((id) => {
60
+ const entry = CATALOG.find((s) => s.id === id);
61
+ if (!entry)
62
+ return true; // keep unknowns, they'll fail at fetch
63
+ return entry.domains.some((d) => relevantSet.has(d));
64
+ });
65
+ filteredOut = before - activeSkillIds.length;
66
+ }
67
+ // Track which skill IDs are collision winners (always core)
68
+ const collisionWinnerIds = new Set(resolution.resolutions.map((r) => r.chosen));
69
+ // 3. Parallel fetch
70
+ const fetchResults = await fetchAllSkills(activeSkillIds, CONCURRENCY);
71
+ const fetchErrors = [];
72
+ const buckets = {
73
+ core: [],
74
+ extended: [],
75
+ reference: [],
76
+ };
77
+ for (const skillId of activeSkillIds) {
78
+ const result = fetchResults.get(skillId);
79
+ if (!result) {
80
+ fetchErrors.push(`${skillId}: fetch result missing`);
81
+ continue;
82
+ }
83
+ if ("error" in result) {
84
+ fetchErrors.push(`${skillId}: ${result.error}`);
85
+ continue;
86
+ }
87
+ const entry = CATALOG.find((s) => s.id === skillId);
88
+ if (!entry) {
89
+ fetchErrors.push(`${skillId}: not found in catalog`);
90
+ continue;
91
+ }
92
+ const layer = classifySkill(skillId, collisionWinnerIds);
93
+ buckets[layer].push({
94
+ skill: entry,
95
+ section: formatSection(entry, result.content),
96
+ });
97
+ }
98
+ const totalFetched = buckets.core.length + buckets.extended.length + buckets.reference.length;
99
+ if (totalFetched === 0) {
100
+ return {
101
+ success: false,
102
+ error: "No skills could be fetched",
103
+ fetch_errors: fetchErrors,
104
+ };
105
+ }
106
+ // 4. Assemble each layer
107
+ const profileName = resolution.profile_name;
108
+ function assembleLayer(layer) {
109
+ const items = buckets[layer];
110
+ const sections = items.map((i) => i.section);
111
+ const domainsCovered = new Set(items.flatMap((i) => i.skill.domains));
112
+ return assembleSuperSkill({
113
+ layer,
114
+ profileName,
115
+ sections,
116
+ skillCount: sections.length,
117
+ domainCount: domainsCovered.size,
118
+ fetchErrors: layer === 'core' ? fetchErrors : [],
119
+ });
120
+ }
121
+ const coreContent = assembleLayer('core');
122
+ const extContent = assembleLayer('extended');
123
+ const refContent = assembleLayer('reference');
124
+ // 5. Pipe mode — write to stdout, skip vault
125
+ if (options.pipe) {
126
+ const pipeLayer = options.pipeLayer ?? 'core';
127
+ let content;
128
+ if (pipeLayer === 'all') {
129
+ content = [coreContent, extContent, refContent].join('\n\n');
130
+ }
131
+ else if (pipeLayer === 'extended') {
132
+ content = extContent;
133
+ }
134
+ else if (pipeLayer === 'reference') {
135
+ content = refContent;
136
+ }
137
+ else {
138
+ content = coreContent;
139
+ }
140
+ return {
141
+ success: true,
142
+ pipe_content: content,
143
+ total_skills: totalFetched,
144
+ fetch_errors: fetchErrors.length > 0 ? fetchErrors : undefined,
145
+ filtered_out: filteredOut > 0 ? filteredOut : undefined,
146
+ };
147
+ }
148
+ // 6. Write three files
149
+ const corePath = "skills/super-skill/SKILL.md";
150
+ const extPath = "skills/super-skill/SKILL-extended.md";
151
+ const refPath = "skills/super-skill/SKILL-reference.md";
152
+ await vaultFs.write(corePath, coreContent);
153
+ await vaultFs.write(extPath, extContent);
154
+ await vaultFs.write(refPath, refContent);
155
+ const estimateTokens = (s) => Math.ceil(s.length / 4);
156
+ return {
157
+ success: true,
158
+ layers: {
159
+ core: {
160
+ path: corePath,
161
+ skill_count: buckets.core.length,
162
+ estimated_tokens: estimateTokens(coreContent),
163
+ },
164
+ extended: {
165
+ path: extPath,
166
+ skill_count: buckets.extended.length,
167
+ estimated_tokens: estimateTokens(extContent),
168
+ },
169
+ reference: {
170
+ path: refPath,
171
+ skill_count: buckets.reference.length,
172
+ estimated_tokens: estimateTokens(refContent),
173
+ },
174
+ },
175
+ total_skills: totalFetched,
176
+ fetch_errors: fetchErrors.length > 0 ? fetchErrors : undefined,
177
+ filtered_out: filteredOut > 0 ? filteredOut : undefined,
178
+ };
179
+ }
180
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/commands/skill/generate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { CatalogSkill } from "./catalog.js";
2
+ export type LayerName = 'core' | 'extended' | 'reference';
3
+ export declare function fetchSkillContent(source: string): Promise<string>;
4
+ export declare function stripFrontmatter(content: string): string;
5
+ export declare function formatSection(skill: CatalogSkill, rawContent: string): string;
6
+ export declare function assembleSuperSkill(opts: {
7
+ layer: 'core' | 'extended' | 'reference';
8
+ profileName: string;
9
+ sections: string[];
10
+ skillCount: number;
11
+ domainCount: number;
12
+ fetchErrors: string[];
13
+ }): string;
14
+ export declare function classifySkill(skillId: string, collisionWinnerIds: Set<string>): LayerName;
@@ -0,0 +1,82 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-or-later OR Commercial
2
+ import { readFile } from "fs/promises";
3
+ import { CATALOG, DOMAIN_PRIORITY } from "./catalog.js";
4
+ // ── Fetching & Formatting ────────────────────────────
5
+ export async function fetchSkillContent(source) {
6
+ if (source.startsWith("http://") || source.startsWith("https://")) {
7
+ const res = await fetch(source);
8
+ if (!res.ok)
9
+ throw new Error(`HTTP ${res.status} ${res.statusText}`);
10
+ return res.text();
11
+ }
12
+ return readFile(source, "utf-8");
13
+ }
14
+ export function stripFrontmatter(content) {
15
+ return content.replace(/^---[\s\S]*?---\n*/, "").trim();
16
+ }
17
+ export function formatSection(skill, rawContent) {
18
+ const body = stripFrontmatter(rawContent);
19
+ return [
20
+ `## ${skill.name}`,
21
+ `<!-- source: ${skill.repo} | domains: ${skill.domains.join(", ")} | id: ${skill.id} -->`,
22
+ "",
23
+ body,
24
+ ].join("\n");
25
+ }
26
+ // ── Layer Assembly ───────────────────────────────────
27
+ export function assembleSuperSkill(opts) {
28
+ const now = new Date().toISOString();
29
+ const layerLabel = {
30
+ core: "Core — always loaded",
31
+ extended: "Extended — medium+ context models",
32
+ reference: "Reference — large context models only",
33
+ };
34
+ const estimatedTokens = Math.ceil(opts.sections.join("").length / 4);
35
+ const lines = [
36
+ "---",
37
+ "name: super-skill",
38
+ `layer: ${opts.layer}`,
39
+ `description: ${layerLabel[opts.layer]} — ${opts.skillCount} skills across ${opts.domainCount} domains`,
40
+ `version: ${now.slice(0, 10)}`,
41
+ `estimated_tokens: ${estimatedTokens}`,
42
+ "---",
43
+ "",
44
+ `# Super Skill — ${opts.layer.charAt(0).toUpperCase() + opts.layer.slice(1)}`,
45
+ "",
46
+ `> Generated by **superskill** skill marketplace`,
47
+ `> Profile: **${opts.profileName}** | Layer: **${opts.layer}** | Skills: **${opts.skillCount}** | Domains: **${opts.domainCount}** | Generated: ${now}`,
48
+ "",
49
+ ];
50
+ if (opts.fetchErrors.length > 0) {
51
+ lines.push("## Fetch Errors", "");
52
+ for (const err of opts.fetchErrors) {
53
+ lines.push(`- ${err}`);
54
+ }
55
+ lines.push("");
56
+ }
57
+ if (opts.sections.length > 0) {
58
+ lines.push(opts.sections.join("\n\n---\n\n"));
59
+ lines.push("");
60
+ }
61
+ return lines.join("\n");
62
+ }
63
+ // ── Layer Classifier ─────────────────────────────────
64
+ export function classifySkill(skillId, collisionWinnerIds) {
65
+ // Collision winners always go to core
66
+ if (collisionWinnerIds.has(skillId))
67
+ return 'core';
68
+ const entry = CATALOG.find((s) => s.id === skillId);
69
+ if (!entry)
70
+ return 'reference';
71
+ // Use highest-priority domain
72
+ let best = 'reference';
73
+ for (const domain of entry.domains) {
74
+ const priority = DOMAIN_PRIORITY[domain];
75
+ if (priority === 'core')
76
+ return 'core';
77
+ if (priority === 'extended')
78
+ best = 'extended';
79
+ }
80
+ return best;
81
+ }
82
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/commands/skill/helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ export interface ManifestEntry {
2
+ id: string;
3
+ name: string;
4
+ domains: string[];
5
+ layer: 'core' | 'extended' | 'reference';
6
+ description: string;
7
+ estimated_tokens: number;
8
+ }
9
+ export interface ManifestResult {
10
+ success: boolean;
11
+ manifest?: ManifestEntry[];
12
+ total_skills?: number;
13
+ total_estimated_tokens?: number;
14
+ error?: string;
15
+ }
16
+ export declare function generateManifest(options: {
17
+ profile?: string;
18
+ }): Promise<ManifestResult>;
19
+ export declare function loadSkillContent(skillId: string): Promise<{
20
+ success: boolean;
21
+ content?: string;
22
+ skill_name?: string;
23
+ estimated_tokens?: number;
24
+ error?: string;
25
+ }>;
26
+ export declare function getSkillAwarenessBlock(): string;
@@ -0,0 +1,90 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-or-later OR Commercial
2
+ import { CATALOG } from "./catalog.js";
3
+ import { resolveCommand } from "./resolve.js";
4
+ import { fetchSkillContent, formatSection, classifySkill } from "./helpers.js";
5
+ // ── Manifest Command ──────────────────────────────────
6
+ export async function generateManifest(options) {
7
+ const resolution = await resolveCommand({ profile: options.profile });
8
+ if (!resolution.success) {
9
+ return { success: false, error: resolution.error };
10
+ }
11
+ const collisionWinnerIds = new Set(resolution.resolutions.map((r) => r.chosen));
12
+ const manifest = [];
13
+ for (const skillId of resolution.active_skills) {
14
+ const entry = CATALOG.find((s) => s.id === skillId);
15
+ if (!entry)
16
+ continue;
17
+ const layer = classifySkill(skillId, collisionWinnerIds);
18
+ manifest.push({
19
+ id: entry.id,
20
+ name: entry.name,
21
+ domains: entry.domains,
22
+ layer,
23
+ description: entry.description,
24
+ estimated_tokens: 2000,
25
+ });
26
+ }
27
+ const total_estimated_tokens = manifest.reduce((sum, e) => sum + e.estimated_tokens, 0);
28
+ return {
29
+ success: true,
30
+ manifest,
31
+ total_skills: manifest.length,
32
+ total_estimated_tokens,
33
+ };
34
+ }
35
+ // ── Load Skill Content ────────────────────────────────
36
+ export async function loadSkillContent(skillId) {
37
+ const entry = CATALOG.find((s) => s.id === skillId);
38
+ // If not in catalog, check if it's a GitHub URL (web-discovered skill)
39
+ if (!entry) {
40
+ if (skillId.startsWith("https://github.com/") || skillId.startsWith("https://raw.githubusercontent.com/")) {
41
+ const { fetchDiscoveredSkill } = await import("./web-discovery.js");
42
+ const result = await fetchDiscoveredSkill(skillId);
43
+ if (!result.success) {
44
+ return { success: false, error: result.error };
45
+ }
46
+ const name = skillId.split("/").filter(Boolean).slice(-2, -1)[0]?.replace(/-/g, " ").replace(/\b\w/g, c => c.toUpperCase()) ?? "Community Skill";
47
+ const content = `## ${name}\n<!-- source: community | url: ${skillId} -->\n<!-- ⚠️ Unverified community skill -->\n\n${result.content}`;
48
+ return {
49
+ success: true,
50
+ content,
51
+ skill_name: name,
52
+ estimated_tokens: Math.ceil(content.length / 4),
53
+ };
54
+ }
55
+ return { success: false, error: `Skill not found in catalog: ${skillId}` };
56
+ }
57
+ try {
58
+ const rawContent = await fetchSkillContent(entry.source);
59
+ const content = formatSection(entry, rawContent);
60
+ return {
61
+ success: true,
62
+ content,
63
+ skill_name: entry.name,
64
+ estimated_tokens: Math.ceil(content.length / 4),
65
+ };
66
+ }
67
+ catch (e) {
68
+ const msg = e instanceof Error ? e.message : String(e);
69
+ return { success: false, error: `Failed to fetch skill content: ${msg}` };
70
+ }
71
+ }
72
+ // ── Skill Awareness (for resume/context injection) ────
73
+ export function getSkillAwarenessBlock() {
74
+ return [
75
+ "",
76
+ "## SuperSkill — Expert Methodologies",
77
+ "",
78
+ "You have **superskill** — your skill package manager. Call it whenever you're about to:",
79
+ "",
80
+ "- Write, review, test, or debug code",
81
+ "- Plan, architect, or design something",
82
+ "- Ship, deploy, or secure a system",
83
+ "- Research, write content, or prepare materials",
84
+ "",
85
+ "Just describe the task: `superskill({task: \"write tests for my Go API\"})`",
86
+ "SuperSkill finds the right methodology from " + CATALOG.length + "+ skills across " + new Set(CATALOG.map(s => s.repo)).size + " repos.",
87
+ "",
88
+ ].join("\n");
89
+ }
90
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/commands/skill/manifest.ts"],"names":[],"mappings":"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"}
@@ -1,122 +1,8 @@
1
- import { VaultFS } from "../../lib/vault-fs.js";
2
- import type { CatalogSkill } from "./catalog.js";
3
- export interface CatalogResult {
4
- total: number;
5
- repos: {
6
- repo: string;
7
- count: number;
8
- }[];
9
- domains: {
10
- id: string;
11
- name: string;
12
- skill_count: number;
13
- }[];
14
- skills: CatalogSkill[];
15
- }
16
- export interface CollisionResult {
17
- collisions: Array<{
18
- domain_id: string;
19
- domain_name: string;
20
- skills: Array<{
21
- id: string;
22
- name: string;
23
- repo: string;
24
- description: string;
25
- }>;
26
- }>;
27
- total_collision_domains: number;
28
- total_affected_skills: number;
29
- }
30
- export interface ResolveResult {
31
- success: boolean;
32
- profile_name: string;
33
- resolutions: Array<{
34
- domain: string;
35
- chosen: string;
36
- alternatives: string[];
37
- }>;
38
- active_skills: string[];
39
- error?: string;
40
- }
41
- export interface LayerInfo {
42
- path: string;
43
- skill_count: number;
44
- estimated_tokens: number;
45
- }
46
- export interface GenerateResult {
47
- success: boolean;
48
- layers?: {
49
- core: LayerInfo;
50
- extended: LayerInfo;
51
- reference: LayerInfo;
52
- };
53
- total_skills?: number;
54
- fetch_errors?: string[];
55
- error?: string;
56
- filtered_out?: number;
57
- pipe_content?: string;
58
- }
59
- export interface ManifestEntry {
60
- id: string;
61
- name: string;
62
- domains: string[];
63
- layer: 'core' | 'extended' | 'reference';
64
- description: string;
65
- estimated_tokens: number;
66
- }
67
- export interface ManifestResult {
68
- success: boolean;
69
- manifest?: ManifestEntry[];
70
- total_skills?: number;
71
- total_estimated_tokens?: number;
72
- error?: string;
73
- }
74
- export declare function catalogCommand(options: {
75
- domain?: string;
76
- repo?: string;
77
- search?: string;
78
- }): Promise<CatalogResult>;
79
- export declare function collisionsCommand(): Promise<CollisionResult>;
80
- export declare function resolveCommand(options: {
81
- profile?: string;
82
- }): Promise<ResolveResult>;
83
- type LayerName = 'core' | 'extended' | 'reference';
84
- export declare function generateCommand(vaultFs: VaultFS, _vaultPath: string, options: {
85
- profile?: string;
86
- includeNonColliding?: boolean;
87
- outputPath?: string;
88
- pipe?: boolean;
89
- pipeLayer?: LayerName | 'all';
90
- relevantDomains?: string[];
91
- }): Promise<GenerateResult>;
92
- export declare function generateManifest(options: {
93
- profile?: string;
94
- }): Promise<ManifestResult>;
95
- export declare function loadSkillContent(skillId: string): Promise<{
96
- success: boolean;
97
- content?: string;
98
- skill_name?: string;
99
- estimated_tokens?: number;
100
- error?: string;
101
- }>;
102
- export declare function matchTaskToDomains(task: string): string[];
103
- export interface ActivateResult {
104
- success: boolean;
105
- skills_loaded: Array<{
106
- id: string;
107
- name: string;
108
- domains: string[];
109
- }>;
110
- content: string;
111
- matched_domains: string[];
112
- total_tokens: number;
113
- error?: string;
114
- }
115
- export declare function activateSkills(options: {
116
- task: string;
117
- profile?: string;
118
- skill_id?: string;
119
- domain?: string;
120
- }): Promise<ActivateResult>;
121
- export declare function getSkillAwarenessBlock(): string;
122
- export {};
1
+ export { catalogCommand, collisionsCommand, resolveCommand } from "./resolve.js";
2
+ export type { CatalogResult, CollisionResult, ResolveResult } from "./resolve.js";
3
+ export { generateCommand } from "./generate.js";
4
+ export type { LayerInfo, GenerateResult } from "./generate.js";
5
+ export { generateManifest, loadSkillContent, getSkillAwarenessBlock } from "./manifest.js";
6
+ export type { ManifestEntry, ManifestResult } from "./manifest.js";
7
+ export { activateSkills, matchTaskToDomains, TASK_DOMAIN_MAP } from "./activate.js";
8
+ export type { ActivateResult } from "./activate.js";