transskill 0.3.1 → 0.4.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.
@@ -1,11 +1,7 @@
1
1
  /**
2
- * Publish-all command — batch publish all skills from a directory to the registry.
2
+ * Publish-all command — batch submit links for all skills in a directory.
3
3
  *
4
- * Scans a directory (e.g. anthropic-skills/skills/) for skill subdirectories,
5
- * adds default metadata if missing, and publishes each one.
6
- */
7
- /**
8
- * Publish all skills in a directory.
4
+ * v2: No file uploads, just adds link entries to registry.json.
9
5
  */
10
6
  export declare function publishAllSkills(dir: string, options: {
11
7
  force?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"publish-all.d.ts","sourceRoot":"","sources":["../../src/marketplace/publish-all.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAmGH;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9D,OAAO,CAAC,IAAI,CAAC,CA8Ff"}
1
+ {"version":3,"file":"publish-all.d.ts","sourceRoot":"","sources":["../../src/marketplace/publish-all.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA6EH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9D,OAAO,CAAC,IAAI,CAAC,CAuEf"}
@@ -1,8 +1,7 @@
1
1
  /**
2
- * Publish-all command — batch publish all skills from a directory to the registry.
2
+ * Publish-all command — batch submit links for all skills in a directory.
3
3
  *
4
- * Scans a directory (e.g. anthropic-skills/skills/) for skill subdirectories,
5
- * adds default metadata if missing, and publishes each one.
4
+ * v2: No file uploads, just adds link entries to registry.json.
6
5
  */
7
6
  import { readFileSync, existsSync, readdirSync, statSync, writeFileSync } from 'node:fs';
8
7
  import { join } from 'node:path';
@@ -11,9 +10,6 @@ import chalk from 'chalk';
11
10
  import matter from 'gray-matter';
12
11
  const REGISTRY_OWNER = 'ljk-777';
13
12
  const REGISTRY_REPO = 'transskill-registry';
14
- /**
15
- * Scan a directory for skill subdirectories.
16
- */
17
13
  function scanSkills(baseDir) {
18
14
  if (!existsSync(baseDir)) {
19
15
  log.error(`Directory not found: ${baseDir}`);
@@ -32,14 +28,8 @@ function scanSkills(baseDir) {
32
28
  const raw = readFileSync(skillMdPath, 'utf-8');
33
29
  const parsed = matter(raw);
34
30
  const fm = parsed.data;
35
- // Determine skill name
36
31
  const name = typeof fm.name === 'string' ? fm.name : entry;
37
- skills.push({
38
- name,
39
- dirPath: fullPath,
40
- skillMdPath,
41
- frontmatter: fm,
42
- });
32
+ skills.push({ name, dirPath: fullPath, skillMdPath, frontmatter: fm });
43
33
  }
44
34
  catch {
45
35
  log.warn(` Skipped ${entry}/SKILL.md (parse error)`);
@@ -47,9 +37,6 @@ function scanSkills(baseDir) {
47
37
  }
48
38
  return skills;
49
39
  }
50
- /**
51
- * Ensure required frontmatter fields exist.
52
- */
53
40
  function ensureFrontmatter(skill, defaultAuthor) {
54
41
  const fm = skill.frontmatter;
55
42
  let modified = false;
@@ -58,9 +45,7 @@ function ensureFrontmatter(skill, defaultAuthor) {
58
45
  return false;
59
46
  }
60
47
  if (!Array.isArray(fm.tags) || fm.tags.length === 0) {
61
- // Auto-generate tags from path name
62
- const autoTags = [skill.name.split('-')[0] || skill.name];
63
- fm.tags = autoTags;
48
+ fm.tags = [skill.name.split('-')[0] || skill.name];
64
49
  modified = true;
65
50
  }
66
51
  if (!fm.author || typeof fm.author !== 'string') {
@@ -71,7 +56,6 @@ function ensureFrontmatter(skill, defaultAuthor) {
71
56
  fm.version = '1.0.0';
72
57
  modified = true;
73
58
  }
74
- // Write back if modified
75
59
  if (modified) {
76
60
  const raw = readFileSync(skill.skillMdPath, 'utf-8');
77
61
  const parsed = matter(raw);
@@ -80,40 +64,33 @@ function ensureFrontmatter(skill, defaultAuthor) {
80
64
  }
81
65
  return true;
82
66
  }
83
- /**
84
- * Publish all skills in a directory.
85
- */
86
67
  export async function publishAllSkills(dir, options) {
87
68
  const baseDir = dir.startsWith('/') ? dir : join(process.cwd(), dir);
88
69
  const defaultAuthor = options.author || 'anthropic';
89
- intro(chalk.green('📤 TransSkill Batch Publish'));
90
- // Step 1: Scan for skills
70
+ intro(chalk.green('📤 TransSkill Batch Publish (v2 — links only)'));
91
71
  const spin = spinner();
92
72
  spin.start(`Scanning ${baseDir}…`);
93
73
  const skills = scanSkills(baseDir);
94
74
  spin.stop(`Found ${skills.length} skill(s)`);
95
75
  if (skills.length === 0) {
96
- log.info('No skills found (directories must contain SKILL.md)');
76
+ log.info('No skills found');
97
77
  outro('Done');
98
78
  return;
99
79
  }
100
- // List skills
101
80
  console.log('');
102
81
  for (const s of skills) {
103
82
  const hasTags = Array.isArray(s.frontmatter.tags) && s.frontmatter.tags.length > 0;
104
83
  const hasAuthor = typeof s.frontmatter.author === 'string';
105
- const isComplete = hasTags && hasAuthor;
106
- console.log(` ${isComplete ? chalk.green('✓') : chalk.yellow('~')} ${chalk.bold(s.name)}` +
107
- `${hasTags ? '' : chalk.gray(' [no tags]')}` +
108
- `${hasAuthor ? '' : chalk.gray(' [no author]')}`);
84
+ const ok = hasTags && hasAuthor;
85
+ console.log(` ${ok ? chalk.green('✓') : chalk.yellow('~')} ${chalk.bold(s.name)}` +
86
+ `${hasTags ? '' : chalk.gray(' [no tags]')}${hasAuthor ? '' : chalk.gray(' [no author]')}`);
109
87
  }
110
88
  console.log('');
111
- // Confirm
112
89
  if (!options.dryRun && !options.force) {
113
90
  const proceed = await confirm({
114
- message: `Publish ${skills.length} skill(s) to ${chalk.cyan(`${REGISTRY_OWNER}/${REGISTRY_REPO}`)}?`,
115
- active: 'Yes, publish all',
116
- inactive: 'No, cancel',
91
+ message: `Submit ${skills.length} link(s) to ${chalk.cyan(`${REGISTRY_OWNER}/${REGISTRY_REPO}`)}?`,
92
+ active: 'Yes',
93
+ inactive: 'No',
117
94
  initialValue: false,
118
95
  });
119
96
  if (!proceed) {
@@ -121,49 +98,33 @@ export async function publishAllSkills(dir, options) {
121
98
  return;
122
99
  }
123
100
  }
124
- // Step 2: Process each skill
125
101
  let succeeded = 0;
126
102
  let skipped = 0;
127
103
  let failed = 0;
128
104
  for (const skill of skills) {
129
105
  console.log('');
130
106
  console.log(chalk.cyan(`── ${skill.name} ──`));
131
- // Ensure frontmatter
132
107
  if (!ensureFrontmatter(skill, defaultAuthor)) {
133
108
  skipped++;
134
109
  continue;
135
110
  }
136
111
  if (options.dryRun) {
137
- console.log(` ${chalk.gray('→ would publish')}`);
112
+ console.log(` ${chalk.gray('→ would submit link to registry.json')}`);
138
113
  succeeded++;
139
114
  continue;
140
115
  }
141
- // Publish via the existing publish flow
142
116
  try {
143
- // Dynamic import to avoid circular dependency
144
117
  const { publishSkill } = await import('./publish.js');
145
- try {
146
- await publishSkill(skill.dirPath, {
147
- force: true,
148
- dryRun: false,
149
- });
150
- succeeded++;
151
- }
152
- catch (pErr) {
153
- // PublishError means messages already printed, just count as failure
154
- failed++;
155
- }
118
+ await publishSkill(skill.dirPath, { force: true, dryRun: false });
119
+ succeeded++;
156
120
  }
157
- catch (err) {
158
- const message = err instanceof Error ? err.message : String(err);
159
- log.error(` Failed: ${message}`);
121
+ catch {
160
122
  failed++;
161
123
  }
162
124
  }
163
- // Summary
164
125
  console.log('');
165
126
  console.log(chalk.gray('─'.repeat(40)));
166
- console.log(` ${chalk.green(`✓ ${succeeded} published`)}${skipped > 0 ? chalk.yellow(`, ${skipped} skipped`) : ''}${failed > 0 ? chalk.red(`, ${failed} failed`) : ''}`);
127
+ console.log(` ${chalk.green(`✓ ${succeeded} submitted`)}${skipped > 0 ? chalk.yellow(`, ${skipped} skipped`) : ''}${failed > 0 ? chalk.red(`, ${failed} failed`) : ''}`);
167
128
  outro('Batch publish complete');
168
129
  }
169
130
  //# sourceMappingURL=publish-all.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"publish-all.js","sourceRoot":"","sources":["../../src/marketplace/publish-all.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"publish-all.js","sourceRoot":"","sources":["../../src/marketplace/publish-all.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,8 @@
1
1
  /**
2
- * Publish command — audit, fork, and PR a skill to the registry.
2
+ * Publish command — v2: lightweight link submission.
3
3
  *
4
- * Flow:
5
- * 1. Validate skill directory (SKILL.md + frontmatter)
6
- * 2. Parse + audit (mandatory, score >= 90 unless --force)
7
- * 3. GitHub API: fork → branch → upload SKILL.md → update registry.json → PR
4
+ * No more file uploads. Publishing a skill just adds a link entry
5
+ * to registry.json pointing to the original source.
8
6
  */
9
7
  /** Error thrown to abort publish (messages already printed via log/outro). */
10
8
  export declare class PublishError extends Error {
@@ -13,9 +11,13 @@ export declare class PublishError extends Error {
13
11
  export interface PublishOptions {
14
12
  force?: boolean;
15
13
  dryRun?: boolean;
14
+ /** Override source URL (default: GitHub path of the skill) */
15
+ sourceUrl?: string;
16
+ /** Override download URL (default: raw GitHub SKILL.md) */
17
+ downloadUrl?: string;
16
18
  }
17
19
  /**
18
- * Publish a skill directory to the registry.
20
+ * Publish a skill validate, then PR a link to the registry index.
19
21
  */
20
22
  export declare function publishSkill(skillPath: string, options: PublishOptions): Promise<void>;
21
23
  //# sourceMappingURL=publish.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../src/marketplace/publish.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAyBH,8EAA8E;AAC9E,qBAAa,YAAa,SAAQ,KAAK;gBACzB,GAAG,CAAC,EAAE,MAAM;CAIzB;AAsMD,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA0V5F"}
1
+ {"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../src/marketplace/publish.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAuBH,8EAA8E;AAC9E,qBAAa,YAAa,SAAQ,KAAK;gBACzB,GAAG,CAAC,EAAE,MAAM;CAIzB;AA0JD,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA8Q5F"}
@@ -1,12 +1,10 @@
1
1
  /**
2
- * Publish command — audit, fork, and PR a skill to the registry.
2
+ * Publish command — v2: lightweight link submission.
3
3
  *
4
- * Flow:
5
- * 1. Validate skill directory (SKILL.md + frontmatter)
6
- * 2. Parse + audit (mandatory, score >= 90 unless --force)
7
- * 3. GitHub API: fork → branch → upload SKILL.md → update registry.json → PR
4
+ * No more file uploads. Publishing a skill just adds a link entry
5
+ * to registry.json pointing to the original source.
8
6
  */
9
- import { readFileSync, existsSync, readdirSync, statSync } from 'node:fs';
7
+ import { readFileSync, existsSync, statSync } from 'node:fs';
10
8
  import { join } from 'node:path';
11
9
  import { intro, outro, spinner, log } from '@clack/prompts';
12
10
  import chalk from 'chalk';
@@ -39,7 +37,7 @@ function getToken() {
39
37
  console.error('');
40
38
  log.error('GITHUB_TOKEN environment variable not set.');
41
39
  log.info('Create a token at https://github.com/settings/tokens');
42
- log.info('Then set: export GITHUB_TOKEN=ghp_xxx');
40
+ log.info('Then set: export GITHUB_TOKEN=***');
43
41
  console.error('');
44
42
  throw new PublishError();
45
43
  }
@@ -54,60 +52,44 @@ function ghHeaders(token) {
54
52
  };
55
53
  }
56
54
  async function ghFetch(url, token, options = {}) {
57
- const res = await fetch(url, {
55
+ return fetch(url, {
58
56
  ...options,
59
57
  headers: {
60
58
  ...ghHeaders(token),
61
59
  ...options.headers,
62
60
  },
63
61
  });
64
- return res;
65
62
  }
66
- /**
67
- * Get the authenticated user's GitHub login.
68
- */
69
63
  async function getGitHubUser(token) {
70
64
  const res = await ghFetch(`${GITHUB_API}/user`, token);
71
- if (!res.ok) {
72
- throw new Error(`Failed to authenticate: ${res.status} ${res.statusText}`);
73
- }
65
+ if (!res.ok)
66
+ throw new PublishError(`Failed to authenticate: ${res.status} ${res.statusText}`);
74
67
  const data = await res.json();
75
68
  return data.login;
76
69
  }
77
- /**
78
- * Get the default branch of the registry repo.
79
- */
80
70
  async function getDefaultBranch(token) {
81
71
  const res = await ghFetch(`${GITHUB_API}/repos/${REGISTRY_FULL}`, token);
82
72
  if (!res.ok)
83
- throw new Error(`Failed to get repo info: ${res.status}`);
73
+ throw new PublishError(`Failed to get repo info: ${res.status}`);
84
74
  const data = await res.json();
85
75
  const branch = data.default_branch;
86
- // Get the SHA of the latest commit on the default branch
87
76
  const refRes = await ghFetch(`${GITHUB_API}/repos/${REGISTRY_FULL}/git/ref/heads/${branch}`, token);
88
77
  if (!refRes.ok)
89
- throw new Error(`Failed to get branch ref: ${refRes.status}`);
78
+ throw new PublishError(`Failed to get branch ref: ${refRes.status}`);
90
79
  const refData = await refRes.json();
91
80
  return { name: branch, sha: refData.object.sha };
92
81
  }
93
- /**
94
- * Create a fork of the registry repo (no-op if already exists).
95
- */
96
82
  async function ensureFork(token, user) {
97
- // Check if fork exists
98
83
  const checkRes = await ghFetch(`${GITHUB_API}/repos/${user}/${REGISTRY_REPO}`, token);
99
- if (checkRes.ok) {
100
- // Fork exists
101
- return;
102
- }
84
+ if (checkRes.ok)
85
+ return; // fork exists
103
86
  log.info('Creating fork of transskill-registry…');
104
87
  const res = await ghFetch(`${GITHUB_API}/repos/${REGISTRY_FULL}/forks`, token, {
105
88
  method: 'POST',
106
89
  body: JSON.stringify({}),
107
90
  });
108
91
  if (res.status === 202) {
109
- log.info('Fork creation in progress (this may take a few seconds)…');
110
- // Wait for fork to be ready
92
+ log.info('Fork creation in progress…');
111
93
  let ready = false;
112
94
  let attempts = 0;
113
95
  while (!ready && attempts < 30) {
@@ -118,46 +100,30 @@ async function ensureFork(token, user) {
118
100
  attempts++;
119
101
  }
120
102
  if (!ready)
121
- throw new Error('Timed out waiting for fork to be created');
103
+ throw new PublishError('Timed out waiting for fork');
122
104
  }
123
105
  else if (!res.ok) {
124
106
  const body = await res.json().catch(() => ({}));
125
- throw new Error(`Failed to fork repo: ${res.status} ${body.message || res.statusText}`);
107
+ throw new PublishError(`Failed to fork repo: ${res.status} ${body.message || res.statusText}`);
126
108
  }
127
109
  }
128
- /**
129
- * Create or update a file in the fork via GitHub API.
130
- */
131
110
  async function upsertFile(token, user, branch, path, content, message) {
132
- // Try to get existing file SHA
133
111
  let existingSha;
134
112
  const getRes = await ghFetch(`${GITHUB_API}/repos/${user}/${REGISTRY_REPO}/contents/${path}?ref=${branch}`, token);
135
113
  if (getRes.ok) {
136
114
  const data = await getRes.json();
137
115
  existingSha = data.sha;
138
116
  }
139
- // Base64 encode content
140
117
  const base64 = Buffer.from(content, 'utf-8').toString('base64');
141
- const body = {
142
- message,
143
- content: base64,
144
- branch,
145
- };
146
- if (existingSha) {
118
+ const body = { message, content: base64, branch };
119
+ if (existingSha)
147
120
  body.sha = existingSha;
148
- }
149
- const res = await ghFetch(`${GITHUB_API}/repos/${user}/${REGISTRY_REPO}/contents/${path}`, token, {
150
- method: 'PUT',
151
- body: JSON.stringify(body),
152
- });
121
+ const res = await ghFetch(`${GITHUB_API}/repos/${user}/${REGISTRY_REPO}/contents/${path}`, token, { method: 'PUT', body: JSON.stringify(body) });
153
122
  if (!res.ok) {
154
123
  const errBody = await res.json().catch(() => ({}));
155
- throw new Error(`Failed to write ${path}: ${res.status} ${errBody.message || res.statusText}`);
124
+ throw new PublishError(`Failed to write ${path}: ${res.status} ${errBody.message || res.statusText}`);
156
125
  }
157
126
  }
158
- /**
159
- * Create a pull request.
160
- */
161
127
  async function createPR(token, user, branch, title, body) {
162
128
  const res = await ghFetch(`${GITHUB_API}/repos/${REGISTRY_FULL}/pulls`, token, {
163
129
  method: 'POST',
@@ -170,231 +136,182 @@ async function createPR(token, user, branch, title, body) {
170
136
  });
171
137
  if (!res.ok) {
172
138
  const errBody = await res.json().catch(() => ({}));
173
- throw new Error(`Failed to create PR: ${res.status} ${errBody.message || res.statusText}`);
139
+ throw new PublishError(`Failed to create PR: ${res.status} ${errBody.message || res.statusText}`);
174
140
  }
175
141
  const data = await res.json();
176
142
  return data.html_url;
177
143
  }
178
144
  /**
179
- * Publish a skill directory to the registry.
145
+ * Publish a skill validate, then PR a link to the registry index.
180
146
  */
181
147
  export async function publishSkill(skillPath, options) {
182
148
  const spin = spinner();
183
- intro(chalk.green('📤 TransSkill Publish'));
184
- // Step 1: Resolve and validate skill directory
149
+ intro(chalk.green('📤 TransSkill Publish (v2 — link only)'));
150
+ // Step 1: Resolve and validate
185
151
  const skillDirPath = skillPath.startsWith('/')
186
152
  ? skillPath
187
153
  : join(process.cwd(), skillPath);
188
154
  if (!existsSync(skillDirPath)) {
189
155
  log.error(`Path does not exist: ${skillDirPath}`);
190
- outro('Publish cancelled');
191
156
  throw new PublishError();
192
157
  }
193
- const stat = statSync(skillDirPath);
194
- if (!stat.isDirectory()) {
195
- log.error(`Expected a directory, got a file: ${skillDirPath}`);
196
- log.info('Usage: transskill publish ./my-skill/');
197
- outro('Publish cancelled');
158
+ if (!statSync(skillDirPath).isDirectory()) {
159
+ log.error(`Expected a directory, got a file`);
198
160
  throw new PublishError();
199
161
  }
200
- // Check for SKILL.md
201
162
  const skillMdPath = join(skillDirPath, 'SKILL.md');
202
163
  if (!existsSync(skillMdPath)) {
203
- log.error(`Directory does not contain SKILL.md: ${skillDirPath}`);
204
- log.info('A valid skill directory must have a SKILL.md file with frontmatter.');
205
- outro('Publish cancelled');
164
+ log.error(`Directory does not contain SKILL.md`);
206
165
  throw new PublishError();
207
166
  }
208
- // Step 2: Parse and validate frontmatter
167
+ // Step 2: Parse + validate frontmatter
209
168
  spin.start('Validating SKILL.md…');
210
- let skill;
211
169
  let rawContent;
212
- let skillDir;
213
170
  let frontmatter;
214
171
  try {
215
172
  rawContent = readFileSync(skillMdPath, 'utf-8');
216
173
  const parsed = matter(rawContent);
217
174
  frontmatter = parsed.data;
218
175
  const parser = getParser('skill.md');
219
- skill = parser.parse(rawContent, skillMdPath);
220
- // Also scan directory structure
221
- skillDir = parser.parseDirectory(skillDirPath);
222
- // Validate required frontmatter
176
+ parser.parse(rawContent, skillMdPath);
223
177
  if (!frontmatter.description || typeof frontmatter.description !== 'string') {
224
- throw new Error('"description" field is required in frontmatter');
225
- }
226
- if (!Array.isArray(frontmatter.tags)) {
227
- throw new Error('"tags" field is required and must be an array');
228
- }
229
- if (frontmatter.tags.length === 0) {
230
- throw new Error('"tags" array must have at least one tag');
178
+ throw new Error('"description" field is required');
231
179
  }
232
180
  spin.stop('Validated ✓');
233
- console.log(` Name: ${chalk.bold(skill.name)}`);
234
- console.log(` Description: ${skill.description}`);
235
- if (frontmatter.version) {
236
- console.log(` Version: ${frontmatter.version}`);
237
- }
238
- console.log(` Tags: ${frontmatter.tags.map((t) => chalk.cyan(t)).join(', ')}`);
181
+ console.log(` Name: ${chalk.bold(frontmatter.name || skillMdPath)}`);
182
+ console.log(` Description: ${frontmatter.description}`);
239
183
  console.log('');
240
184
  }
241
185
  catch (err) {
242
186
  spin.stop('Validation failed');
243
187
  const message = err instanceof Error ? err.message : String(err);
244
188
  log.error(`Invalid skill: ${message}`);
245
- outro('Publish cancelled');
246
189
  throw new PublishError();
247
190
  }
248
- // Step 3: Security audit (mandatory)
191
+ // Step 3: Security audit
249
192
  spin.start('Running security audit…');
250
193
  const engine = new AuditEngine({ lang: 'en' });
251
- const report = engine.auditSkill(skill, skillMdPath);
252
- const score = calculateScore(report);
194
+ const report = engine.auditSkill(matter(rawContent).content, skillMdPath);
195
+ // Actually do proper audit
196
+ const parser = getParser('skill.md');
197
+ const skill = parser.parse(rawContent, skillMdPath);
198
+ const auditReport = engine.auditSkill(skill, skillMdPath);
199
+ const score = calculateScore(auditReport);
253
200
  spin.stop(`Audit complete — score: ${formatScore(score)}`);
254
- if (report.findings.length > 0) {
255
- console.log(engine.reportToString(report));
201
+ if (auditReport.findings.length > 0) {
202
+ console.log(engine.reportToString(auditReport));
256
203
  }
257
204
  else {
258
205
  console.log(` ${chalk.green('✓ No security issues found')}`);
259
206
  }
260
207
  console.log('');
261
208
  if (score < 90 && !options.force) {
262
- log.error(`Audit score ${score}/100 is below the minimum of 90.`);
263
- log.info('Fix the issues or use --force to publish anyway.');
264
- outro('Publish cancelled');
209
+ log.error(`Score ${score}/100 is below 90. Use --force to publish anyway.`);
265
210
  throw new PublishError();
266
211
  }
267
- // Dry run stop here
212
+ // Step 4: Determine source URLs
213
+ const skillName = frontmatter.name || 'unnamed';
214
+ const skillAuthor = frontmatter.author || 'unknown';
215
+ const version = frontmatter.version || '1.0.0';
216
+ // Try to derive GitHub URLs from git remote
217
+ let sourceUrl = options.sourceUrl || '';
218
+ let downloadUrl = options.downloadUrl || '';
219
+ if (!sourceUrl) {
220
+ // Try to read git remote
221
+ const { execSync } = await import('node:child_process');
222
+ try {
223
+ const remote = execSync('git remote get-url origin', { cwd: skillDirPath })
224
+ .toString().trim()
225
+ .replace(/\.git$/, '');
226
+ if (remote.includes('github.com')) {
227
+ sourceUrl = remote;
228
+ const repoPath = remote.replace(/^https?:\/\/github\.com\//, '');
229
+ downloadUrl = `https://raw.githubusercontent.com/${repoPath}/main/SKILL.md`;
230
+ }
231
+ }
232
+ catch {
233
+ // No git remote found
234
+ }
235
+ }
236
+ if (!sourceUrl) {
237
+ sourceUrl = `https://github.com/${skillAuthor}/skills`;
238
+ downloadUrl = `https://raw.githubusercontent.com/${skillAuthor}/skills/main/skills/${skillName}/SKILL.md`;
239
+ }
240
+ console.log(` ${chalk.gray('Source:')} ${sourceUrl}`);
241
+ console.log(` ${chalk.gray('Download:')} ${downloadUrl}`);
242
+ console.log('');
243
+ // Dry run
268
244
  if (options.dryRun) {
269
- outro(chalk.yellow('Dry run — no changes made. Use without --dry-run to publish.'));
245
+ outro(chalk.yellow('Dry run — no changes made.'));
270
246
  return;
271
247
  }
272
- // Step 4: GitHub API authenticate and publish
248
+ // Step 5: GitHub — fork branch → update registry.json → PR
273
249
  spin.start('Connecting to GitHub…');
274
250
  let token;
275
251
  let user;
276
- let baseBranch;
277
252
  let baseSha;
278
253
  try {
279
254
  token = getToken();
280
255
  user = await getGitHubUser(token);
281
256
  const base = await getDefaultBranch(token);
282
- baseBranch = base.name;
283
257
  baseSha = base.sha;
284
258
  spin.stop(`Authenticated as ${chalk.bold(user)}`);
285
- console.log(` Registry: ${chalk.cyan(REGISTRY_FULL)}`);
286
- console.log('');
287
259
  }
288
260
  catch (err) {
289
261
  spin.stop('GitHub connection failed');
290
262
  const message = err instanceof Error ? err.message : String(err);
291
263
  log.error(message);
292
- outro('Publish cancelled');
293
264
  throw new PublishError();
294
265
  }
295
- // Step 5: Fork
266
+ // Fork
296
267
  spin.start('Setting up fork…');
297
268
  try {
298
269
  await ensureFork(token, user);
299
270
  spin.stop('Fork ready ✓');
300
271
  }
301
- catch (err) {
272
+ catch {
302
273
  spin.stop('Fork failed');
303
- const message = err instanceof Error ? err.message : String(err);
304
- log.error(message);
305
- outro('Publish cancelled');
306
274
  throw new PublishError();
307
275
  }
308
- // Step 6: Create branch
309
- const branchName = `skill/${skill.name.replace(/[^a-zA-Z0-9_-]/g, '-').toLowerCase()}`;
276
+ // Create branch
277
+ const branchName = `add-${skillName.replace(/[^a-z0-9-]/gi, '-').toLowerCase()}`;
310
278
  spin.start(`Creating branch ${chalk.cyan(branchName)}…`);
311
279
  try {
312
280
  const branchRes = await ghFetch(`${GITHUB_API}/repos/${user}/${REGISTRY_REPO}/git/refs`, token, {
313
281
  method: 'POST',
314
- body: JSON.stringify({
315
- ref: `refs/heads/${branchName}`,
316
- sha: baseSha,
317
- }),
282
+ body: JSON.stringify({ ref: `refs/heads/${branchName}`, sha: baseSha }),
318
283
  });
319
284
  if (branchRes.status === 422) {
320
- log.info(`Branch ${branchName} already exists — updating it`);
285
+ log.info(`Branch already exists — updating`);
321
286
  }
322
287
  else if (!branchRes.ok) {
323
- throw new Error(`Failed to create branch: ${branchRes.status}`);
288
+ throw new Error(`HTTP ${branchRes.status}`);
324
289
  }
325
290
  spin.stop('Branch ready ✓');
326
291
  }
327
- catch (err) {
292
+ catch {
328
293
  spin.stop('Branch creation failed');
329
- const message = err instanceof Error ? err.message : String(err);
330
- log.error(message);
331
- outro('Publish cancelled');
332
- throw new PublishError();
333
- }
334
- // Step 7: Upload files
335
- const skillDirName = skill.name.replace(/[^a-zA-Z0-9_-]/g, '-').toLowerCase();
336
- const skillRepoPath = `skills/${skillDirName}/SKILL.md`;
337
- spin.start('Uploading SKILL.md…');
338
- try {
339
- await upsertFile(token, user, branchName, skillRepoPath, rawContent, `Add ${skill.name} v${frontmatter.version || '1.0.0'} skill`);
340
- spin.stop('SKILL.md uploaded ✓');
341
- }
342
- catch (err) {
343
- spin.stop('Upload failed');
344
- const message = err instanceof Error ? err.message : String(err);
345
- log.error(message);
346
- outro('Publish cancelled');
347
294
  throw new PublishError();
348
295
  }
349
- // Upload extra files if any (scripts, assets, references, etc.)
350
- const extraDirNames = ['scripts', 'assets', 'references'];
351
- for (const dirName of extraDirNames) {
352
- const dirPath = join(skillDirPath, dirName);
353
- if (existsSync(dirPath) && statSync(dirPath).isDirectory()) {
354
- spin.start(`Uploading ${dirName}/…`);
355
- try {
356
- const entries = readdirSync(dirPath);
357
- for (const entry of entries) {
358
- const entryPath = join(dirPath, entry);
359
- if (statSync(entryPath).isFile()) {
360
- const content = readFileSync(entryPath, 'utf-8');
361
- const repoEntryPath = `skills/${skillDirName}/${dirName}/${entry}`;
362
- await upsertFile(token, user, branchName, repoEntryPath, content, `Add ${dirName}/${entry}`);
363
- }
364
- }
365
- spin.stop(`${dirName}/ uploaded ✓`);
366
- }
367
- catch (err) {
368
- spin.stop(`${dirName}/ upload issue`);
369
- const message = err instanceof Error ? err.message : String(err);
370
- log.warn(`Failed to upload ${dirName}/: ${message}`);
371
- }
372
- }
373
- }
374
- // Step 8: Update registry.json
296
+ // Fetch current registry.json and update
375
297
  spin.start('Updating registry index…');
376
298
  try {
377
- // Fetch current registry.json from the branch (or upstream)
378
- const currentRegRes = await ghFetch(`${GITHUB_API}/repos/${user}/${REGISTRY_REPO}/contents/registry.json?ref=${branchName}`, token);
299
+ const regRes = await ghFetch(`${GITHUB_API}/repos/${user}/${REGISTRY_REPO}/contents/registry.json?ref=${branchName}`, token);
379
300
  let registry;
380
- if (currentRegRes.ok) {
381
- const currentData = await currentRegRes.json();
382
- const decoded = Buffer.from(currentData.content, 'base64').toString('utf-8');
383
- registry = JSON.parse(decoded);
301
+ if (regRes.ok) {
302
+ const d = await regRes.json();
303
+ registry = JSON.parse(Buffer.from(d.content, 'base64').toString('utf-8'));
384
304
  }
385
305
  else {
386
- // Fallback: fetch from upstream
387
306
  const upRes = await ghFetch(`https://raw.githubusercontent.com/${REGISTRY_FULL}/main/registry.json`, token, { headers: { 'User-Agent': 'transskill-cli' } });
388
- if (!upRes.ok)
389
- throw new Error('Failed to fetch registry.json');
390
307
  registry = await upRes.json();
391
308
  }
392
- // Update or add the skill entry
393
- const existingIdx = registry.skills.findIndex((s) => s.name === skill.name);
394
- const skillEntry = {
395
- name: skill.name,
396
- version: frontmatter.version || '1.0.0',
397
- description: skill.description,
309
+ // Add or update entry
310
+ const existingIdx = registry.skills.findIndex((s) => s.name === skillName);
311
+ const newEntry = {
312
+ name: skillName,
313
+ version,
314
+ description: frontmatter.description,
398
315
  tags: frontmatter.tags || [],
399
316
  author: user,
400
317
  stars: existingIdx >= 0 ? registry.skills[existingIdx].stars : 0,
@@ -402,73 +319,63 @@ export async function publishSkill(skillPath, options) {
402
319
  created: existingIdx >= 0
403
320
  ? registry.skills[existingIdx].created
404
321
  : new Date().toISOString(),
322
+ sourceUrl,
323
+ downloadUrl,
324
+ source: 'manual',
405
325
  };
406
326
  if (existingIdx >= 0) {
407
- registry.skills[existingIdx] = { ...registry.skills[existingIdx], ...skillEntry };
327
+ registry.skills[existingIdx] = { ...registry.skills[existingIdx], ...newEntry };
408
328
  }
409
329
  else {
410
- registry.skills.push(skillEntry);
330
+ registry.skills.push(newEntry);
411
331
  }
412
332
  registry.updated = new Date().toISOString();
413
- const registryJson = JSON.stringify(registry, null, 2);
414
- await upsertFile(token, user, branchName, 'registry.json', registryJson, `Update registry index: add ${skill.name}`);
333
+ await upsertFile(token, user, branchName, 'registry.json', JSON.stringify(registry, null, 2), `Add ${skillName} v${version} to registry index`);
415
334
  spin.stop('Registry index updated ✓');
416
335
  }
417
336
  catch (err) {
418
- spin.stop('Registry update failed');
337
+ spin.stop('Update failed');
419
338
  const message = err instanceof Error ? err.message : String(err);
420
339
  log.error(message);
421
- outro('Publish cancelled');
422
340
  throw new PublishError();
423
341
  }
424
- // Step 9: Create PR
342
+ // Create PR
425
343
  spin.start('Creating pull request…');
426
344
  try {
427
345
  const prBody = [
428
- `## 📦 ${skill.name}`,
346
+ `## 📦 ${skillName} v${version}`,
429
347
  '',
430
- `${skill.description}`,
348
+ `${frontmatter.description}`,
431
349
  '',
432
350
  '---',
433
351
  '',
352
+ '### Links',
353
+ '',
354
+ `- **Source:** ${sourceUrl}`,
355
+ `- **Download:** ${downloadUrl}`,
356
+ '',
434
357
  '### Audit Report',
435
358
  '',
436
- `- **Audit Score:** ${score}/100`,
359
+ `- **Score:** ${score}/100`,
437
360
  `- **Author:** ${user}`,
438
- ...(Array.isArray(frontmatter.tags)
439
- ? [`- **Tags:** ${frontmatter.tags.join(', ')}`]
440
- : []),
441
- '',
442
- '---',
443
361
  '',
444
362
  '> Published by [TransSkill CLI](https://github.com/ljk-777/transskill)',
445
363
  ].join('\n');
446
- const prUrl = await createPR(token, user, branchName, `Add skill: ${skill.name} v${frontmatter.version || '1.0.0'}`, prBody);
364
+ const prUrl = await createPR(token, user, branchName, `Add ${skillName} v${version} to registry index`, prBody);
447
365
  spin.stop('Pull request created ✓');
448
366
  console.log('');
449
367
  console.log(` ${chalk.green('→')} ${prUrl}`);
450
368
  console.log('');
451
- outro(`${chalk.bold(skill.name)} published! 🎉`);
369
+ outro(`${chalk.bold(skillName)} linked in registry! 🎉`);
452
370
  }
453
- catch (err) {
371
+ catch {
454
372
  spin.stop('PR creation failed');
455
- const message = err instanceof Error ? err.message : String(err);
456
- log.error(message);
457
- outro('Publish failed — files were pushed to the branch but PR could not be created.');
458
373
  throw new PublishError();
459
374
  }
460
375
  }
461
- /**
462
- * Calculate audit score from report severity counts.
463
- */
464
376
  function calculateScore(report) {
465
377
  const c = report.severityCounts;
466
- let score = 100;
467
- score -= c.critical * 30; // -30 each
468
- score -= c.high * 15; // -15 each
469
- score -= c.medium * 5; // -5 each
470
- score -= c.low * 2; // -2 each
471
- return Math.max(0, score);
378
+ return Math.max(0, 100 - c.critical * 30 - c.high * 15 - c.medium * 5 - c.low * 2);
472
379
  }
473
380
  function formatScore(score) {
474
381
  if (score >= 90)
@@ -477,5 +384,4 @@ function formatScore(score) {
477
384
  return chalk.yellow(`${score}/100`);
478
385
  return chalk.red(`${score}/100`);
479
386
  }
480
- 0;
481
387
  //# sourceMappingURL=publish.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/marketplace/publish.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/marketplace/publish.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAEzD,iDAAiD;AACjD,YAAY;AACZ,iDAAiD;AAEjD,MAAM,cAAc,GAAG,SAAS,CAAC;AACjC,MAAM,aAAa,GAAG,qBAAqB,CAAC;AAC5C,MAAM,aAAa,GAAG,GAAG,cAAc,IAAI,aAAa,EAAE,CAAC;AAC3D,MAAM,UAAU,GAAG,wBAAwB,CAAC;AAE5C,iDAAiD;AACjD,aAAa;AACb,iDAAiD;AAEjD,8EAA8E;AAC9E,MAAM,OAAO,YAAa,SAAQ,KAAK;IACrC,YAAY,GAAY;QACtB,KAAK,CAAC,GAAG,IAAI,iBAAiB,CAAC,CAAC;QAChC,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;AAED,iDAAiD;AACjD,qBAAqB;AACrB,iDAAiD;AAEjD,SAAS,QAAQ;IACf,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IACvC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,GAAG,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;QACxD,GAAG,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;QACjE,GAAG,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QAC9C,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,IAAI,YAAY,EAAE,CAAC;IAC3B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,SAAS,CAAC,KAAa;IAC9B,OAAO;QACL,aAAa,EAAE,UAAU,KAAK,EAAE;QAChC,MAAM,EAAE,6BAA6B;QACrC,YAAY,EAAE,gBAAgB;QAC9B,sBAAsB,EAAE,YAAY;KACrC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,GAAW,EAAE,KAAa,EAAE,UAAuB,EAAE;IAC1E,OAAO,KAAK,CAAC,GAAG,EAAE;QAChB,GAAG,OAAO;QACV,OAAO,EAAE;YACP,GAAG,SAAS,CAAC,KAAK,CAAC;YACnB,GAAI,OAAO,CAAC,OAAkC;SAC/C;KACF,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,KAAa;IACxC,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,GAAG,UAAU,OAAO,EAAE,KAAK,CAAC,CAAC;IACvD,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,MAAM,IAAI,YAAY,CAAC,2BAA2B,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;IAC/F,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAuB,CAAC;IACnD,OAAO,IAAI,CAAC,KAAK,CAAC;AACpB,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,KAAa;IAC3C,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,GAAG,UAAU,UAAU,aAAa,EAAE,EAAE,KAAK,CAAC,CAAC;IACzE,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,MAAM,IAAI,YAAY,CAAC,4BAA4B,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9E,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAgC,CAAC;IAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC;IAEnC,MAAM,MAAM,GAAG,MAAM,OAAO,CAC1B,GAAG,UAAU,UAAU,aAAa,kBAAkB,MAAM,EAAE,EAC9D,KAAK,CACN,CAAC;IACF,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,MAAM,IAAI,YAAY,CAAC,6BAA6B,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACrF,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,IAAI,EAAiC,CAAC;IACnE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;AACnD,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,KAAa,EAAE,IAAY;IACnD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,UAAU,UAAU,IAAI,IAAI,aAAa,EAAE,EAAE,KAAK,CAAC,CAAC;IACtF,IAAI,QAAQ,CAAC,EAAE;QAAE,OAAO,CAAC,cAAc;IAEvC,GAAG,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;IAClD,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,GAAG,UAAU,UAAU,aAAa,QAAQ,EAAE,KAAK,EAAE;QAC7E,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;KACzB,CAAC,CAAC;IAEH,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACvB,GAAG,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QACvC,IAAI,KAAK,GAAG,KAAK,CAAC;QAClB,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,OAAO,CAAC,KAAK,IAAI,QAAQ,GAAG,EAAE,EAAE,CAAC;YAC/B,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YAC9C,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,UAAU,UAAU,IAAI,IAAI,aAAa,EAAE,EAAE,KAAK,CAAC,CAAC;YACnF,IAAI,KAAK,CAAC,EAAE;gBAAE,KAAK,GAAG,IAAI,CAAC;YAC3B,QAAQ,EAAE,CAAC;QACb,CAAC;QACD,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,YAAY,CAAC,4BAA4B,CAAC,CAAC;IACnE,CAAC;SAAM,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACnB,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAChD,MAAM,IAAI,YAAY,CACpB,wBAAwB,GAAG,CAAC,MAAM,IAAK,IAA6B,CAAC,OAAO,IAAI,GAAG,CAAC,UAAU,EAAE,CACjG,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,UAAU,CACvB,KAAa,EACb,IAAY,EACZ,MAAc,EACd,IAAY,EACZ,OAAe,EACf,OAAe;IAEf,IAAI,WAA+B,CAAC;IACpC,MAAM,MAAM,GAAG,MAAM,OAAO,CAC1B,GAAG,UAAU,UAAU,IAAI,IAAI,aAAa,aAAa,IAAI,QAAQ,MAAM,EAAE,EAC7E,KAAK,CACN,CAAC;IACF,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;QACd,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,EAAqB,CAAC;QACpD,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC;IACzB,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAChE,MAAM,IAAI,GAA4B,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAC3E,IAAI,WAAW;QAAE,IAAI,CAAC,GAAG,GAAG,WAAW,CAAC;IAExC,MAAM,GAAG,GAAG,MAAM,OAAO,CACvB,GAAG,UAAU,UAAU,IAAI,IAAI,aAAa,aAAa,IAAI,EAAE,EAC/D,KAAK,EACL,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAC9C,CAAC;IACF,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACnD,MAAM,IAAI,YAAY,CACpB,mBAAmB,IAAI,KAAK,GAAG,CAAC,MAAM,IAAK,OAAgC,CAAC,OAAO,IAAI,GAAG,CAAC,UAAU,EAAE,CACxG,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,QAAQ,CACrB,KAAa,EACb,IAAY,EACZ,MAAc,EACd,KAAa,EACb,IAAY;IAEZ,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,GAAG,UAAU,UAAU,aAAa,QAAQ,EAAE,KAAK,EAAE;QAC7E,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,KAAK;YACL,IAAI;YACJ,IAAI,EAAE,GAAG,IAAI,IAAI,MAAM,EAAE;YACzB,IAAI,EAAE,MAAM;SACb,CAAC;KACH,CAAC,CAAC;IACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACnD,MAAM,IAAI,YAAY,CACpB,wBAAwB,GAAG,CAAC,MAAM,IAAK,OAAgC,CAAC,OAAO,IAAI,GAAG,CAAC,UAAU,EAAE,CACpG,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAA0B,CAAC;IACtD,OAAO,IAAI,CAAC,QAAQ,CAAC;AACvB,CAAC;AAeD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,SAAiB,EAAE,OAAuB;IAC3E,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IAEvB,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC,CAAC;IAE7D,+BAA+B;IAC/B,MAAM,YAAY,GAAG,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC;QAC5C,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;IAEnC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,GAAG,CAAC,KAAK,CAAC,wBAAwB,YAAY,EAAE,CAAC,CAAC;QAClD,MAAM,IAAI,YAAY,EAAE,CAAC;IAC3B,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QAC1C,GAAG,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;QAC9C,MAAM,IAAI,YAAY,EAAE,CAAC;IAC3B,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;IACnD,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,GAAG,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACjD,MAAM,IAAI,YAAY,EAAE,CAAC;IAC3B,CAAC;IAED,uCAAuC;IACvC,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACnC,IAAI,UAAkB,CAAC;IACvB,IAAI,WAAoC,CAAC;IAEzC,IAAI,CAAC;QACH,UAAU,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;QAClC,WAAW,GAAG,MAAM,CAAC,IAA+B,CAAC;QAErD,MAAM,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;QACrC,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAEtC,IAAI,CAAC,WAAW,CAAC,WAAW,IAAI,OAAO,WAAW,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;YAC5E,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACrD,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC;QAC7E,OAAO,CAAC,GAAG,CAAC,kBAAkB,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAC/B,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,GAAG,CAAC,KAAK,CAAC,kBAAkB,OAAO,EAAE,CAAC,CAAC;QACvC,MAAM,IAAI,YAAY,EAAE,CAAC;IAC3B,CAAC;IAED,yBAAyB;IACzB,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAC9B,MAAM,CAAC,UAAU,CAAC,CAAC,OAAc,EACjC,WAAW,CACZ,CAAC;IACF,2BAA2B;IAC3B,MAAM,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IACpD,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAC1D,MAAM,KAAK,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;IAC1C,IAAI,CAAC,IAAI,CAAC,2BAA2B,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAE3D,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC;IAClD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,4BAA4B,CAAC,EAAE,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,IAAI,KAAK,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACjC,GAAG,CAAC,KAAK,CAAC,SAAS,KAAK,kDAAkD,CAAC,CAAC;QAC5E,MAAM,IAAI,YAAY,EAAE,CAAC;IAC3B,CAAC;IAED,gCAAgC;IAChC,MAAM,SAAS,GAAI,WAAW,CAAC,IAAe,IAAI,SAAS,CAAC;IAC5D,MAAM,WAAW,GAAI,WAAW,CAAC,MAAiB,IAAI,SAAS,CAAC;IAChE,MAAM,OAAO,GAAI,WAAW,CAAC,OAAkB,IAAI,OAAO,CAAC;IAE3D,4CAA4C;IAC5C,IAAI,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;IACxC,IAAI,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC;IAE5C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,yBAAyB;QACzB,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACxD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,QAAQ,CAAC,2BAA2B,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC;iBACxE,QAAQ,EAAE,CAAC,IAAI,EAAE;iBACjB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YACzB,IAAI,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;gBAClC,SAAS,GAAG,MAAM,CAAC;gBACnB,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,2BAA2B,EAAE,EAAE,CAAC,CAAC;gBACjE,WAAW,GAAG,qCAAqC,QAAQ,gBAAgB,CAAC;YAC9E,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,sBAAsB;QACxB,CAAC;IACH,CAAC;IAED,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,SAAS,GAAG,sBAAsB,WAAW,SAAS,CAAC;QACvD,WAAW,GAAG,qCAAqC,WAAW,uBAAuB,SAAS,WAAW,CAAC;IAC5G,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,UAAU;IACV,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC,CAAC;QAClD,OAAO;IACT,CAAC;IAED,6DAA6D;IAC7D,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IACpC,IAAI,KAAa,CAAC;IAClB,IAAI,IAAY,CAAC;IACjB,IAAI,OAAe,CAAC;IAEpB,IAAI,CAAC;QACH,KAAK,GAAG,QAAQ,EAAE,CAAC;QACnB,IAAI,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC;QAClC,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC3C,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC;QACnB,IAAI,CAAC,IAAI,CAAC,oBAAoB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpD,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QACtC,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnB,MAAM,IAAI,YAAY,EAAE,CAAC;IAC3B,CAAC;IAED,OAAO;IACP,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAC/B,IAAI,CAAC;QACH,MAAM,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACzB,MAAM,IAAI,YAAY,EAAE,CAAC;IAC3B,CAAC;IAED,gBAAgB;IAChB,MAAM,UAAU,GAAG,OAAO,SAAS,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;IACjF,IAAI,CAAC,KAAK,CAAC,mBAAmB,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACzD,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,OAAO,CAC7B,GAAG,UAAU,UAAU,IAAI,IAAI,aAAa,WAAW,EACvD,KAAK,EACL;YACE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,cAAc,UAAU,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;SACxE,CACF,CAAC;QACF,IAAI,SAAS,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC7B,GAAG,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QAC/C,CAAC;aAAM,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,QAAQ,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACpC,MAAM,IAAI,YAAY,EAAE,CAAC;IAC3B,CAAC;IAED,yCAAyC;IACzC,IAAI,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;IACvC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAC1B,GAAG,UAAU,UAAU,IAAI,IAAI,aAAa,+BAA+B,UAAU,EAAE,EACvF,KAAK,CACN,CAAC;QAEF,IAAI,QAAsF,CAAC;QAC3F,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;YACd,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,IAAI,EAAyB,CAAC;YACrD,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QAC5E,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,GAAG,MAAM,OAAO,CACzB,qCAAqC,aAAa,qBAAqB,EACvE,KAAK,EACL,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,gBAAgB,EAAE,EAAE,CAChD,CAAC;YACF,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,EAAqB,CAAC;QACnD,CAAC;QAED,sBAAsB;QACtB,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;QAC3E,MAAM,QAAQ,GAAG;YACf,IAAI,EAAE,SAAS;YACf,OAAO;YACP,WAAW,EAAE,WAAW,CAAC,WAAqB;YAC9C,IAAI,EAAG,WAAW,CAAC,IAAiB,IAAI,EAAE;YAC1C,MAAM,EAAE,IAAI;YACZ,KAAK,EAAE,WAAW,IAAI,CAAC,CAAC,CAAC,CAAE,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,KAAgB,CAAC,CAAC,CAAC,CAAC;YAC5E,UAAU,EAAE,KAAK;YACjB,OAAO,EAAE,WAAW,IAAI,CAAC;gBACvB,CAAC,CAAE,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAkB;gBAClD,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAC5B,SAAS;YACT,WAAW;YACX,MAAM,EAAE,QAAiB;SAC1B,CAAC;QAEF,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;YACrB,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,GAAG,QAAe,EAAE,CAAC;QACzF,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAe,CAAC,CAAC;QACxC,CAAC;QACD,QAAQ,CAAC,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAE5C,MAAM,UAAU,CACd,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,eAAe,EACxC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EACjC,OAAO,SAAS,KAAK,OAAO,oBAAoB,CACjD,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IACxC,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC3B,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnB,MAAM,IAAI,YAAY,EAAE,CAAC;IAC3B,CAAC;IAED,YAAY;IACZ,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACrC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG;YACb,SAAS,SAAS,KAAK,OAAO,EAAE;YAChC,EAAE;YACF,GAAG,WAAW,CAAC,WAAW,EAAE;YAC5B,EAAE;YACF,KAAK;YACL,EAAE;YACF,WAAW;YACX,EAAE;YACF,iBAAiB,SAAS,EAAE;YAC5B,mBAAmB,WAAW,EAAE;YAChC,EAAE;YACF,kBAAkB;YAClB,EAAE;YACF,gBAAgB,KAAK,MAAM;YAC3B,iBAAiB,IAAI,EAAE;YACvB,EAAE;YACF,wEAAwE;SACzE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,MAAM,KAAK,GAAG,MAAM,QAAQ,CAC1B,KAAK,EAAE,IAAI,EAAE,UAAU,EACvB,OAAO,SAAS,KAAK,OAAO,oBAAoB,EAChD,MAAM,CACP,CAAC;QAEF,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAChC,MAAM,IAAI,YAAY,EAAE,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,MAAyG;IAC/H,MAAM,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC;IAChC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,QAAQ,GAAG,EAAE,GAAG,CAAC,CAAC,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACrF,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAChC,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC;IACpD,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC;IACrD,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC;AACnC,CAAC"}
@@ -1,8 +1,16 @@
1
+ /**
2
+ * Registry client — lightweight index of skill links.
3
+ *
4
+ * The registry no longer stores skill files. It's just a curated
5
+ * JSON index pointing to original sources. Skills are fetched
6
+ * directly from their author's repos when installing.
7
+ */
1
8
  import type { RegistryIndex, SkillManifest, SkillDetail } from './types.js';
2
9
  /**
3
10
  * Get the registry index, from cache if fresh, otherwise from remote.
11
+ * Optionally enriches with external sources.
4
12
  */
5
- export declare function getRegistry(forceRefresh?: boolean): Promise<RegistryIndex>;
13
+ export declare function getRegistry(forceRefresh?: boolean, includeExternal?: boolean): Promise<RegistryIndex>;
6
14
  /**
7
15
  * Simple fuzzy search across skill name, description, and tags.
8
16
  */
@@ -12,7 +20,8 @@ export declare function searchSkills(registry: RegistryIndex, query: string): Sk
12
20
  */
13
21
  export declare function findSkill(registry: RegistryIndex, name: string): SkillManifest | undefined;
14
22
  /**
15
- * Get full skill detail including README content and download URL.
23
+ * Get full skill detail including SKILL.md content.
24
+ * Fetches directly from the original source URL.
16
25
  */
17
26
  export declare function getSkillDetail(manifest: SkillManifest): Promise<SkillDetail>;
18
27
  //# sourceMappingURL=registry-client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry-client.d.ts","sourceRoot":"","sources":["../../src/marketplace/registry-client.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AA4C5E;;GAEG;AACH,wBAAsB,WAAW,CAAC,YAAY,UAAQ,GAAG,OAAO,CAAC,aAAa,CAAC,CAS9E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,EAAE,CAQpF;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAE1F;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC,CAWlF"}
1
+ {"version":3,"file":"registry-client.d.ts","sourceRoot":"","sources":["../../src/marketplace/registry-client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AA2I5E;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,YAAY,UAAQ,EACpB,eAAe,UAAO,GACrB,OAAO,CAAC,aAAa,CAAC,CA+BxB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,EAAE,CASpF;AAED;;GAEG;AACH,wBAAgB,SAAS,CACvB,QAAQ,EAAE,aAAa,EACvB,IAAI,EAAE,MAAM,GACX,aAAa,GAAG,SAAS,CAW3B;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC,CAkBlF"}
@@ -1,14 +1,23 @@
1
1
  /**
2
- * Registry client — fetches, caches, and searches skill registry.
2
+ * Registry client — lightweight index of skill links.
3
+ *
4
+ * The registry no longer stores skill files. It's just a curated
5
+ * JSON index pointing to original sources. Skills are fetched
6
+ * directly from their author's repos when installing.
3
7
  */
4
8
  import { readFileSync, existsSync, mkdirSync, writeFileSync } from 'node:fs';
5
9
  import { join } from 'node:path';
6
10
  import { homedir } from 'node:os';
11
+ // ──────────────────────────────────────────────
12
+ // Constants
13
+ // ──────────────────────────────────────────────
7
14
  const REGISTRY_URL = 'https://raw.githubusercontent.com/ljk-777/transskill-registry/main/registry.json';
8
- const RAW_SKILL_PREFIX = 'https://raw.githubusercontent.com/ljk-777/transskill-registry/main/skills';
9
15
  const CACHE_DIR = join(homedir(), '.transskill', 'cache');
10
16
  const CACHE_FILE = join(CACHE_DIR, 'registry.json');
11
17
  const CACHE_TTL_MS = 24 * 60 * 60 * 1000; // 24 hours
18
+ // ──────────────────────────────────────────────
19
+ // Cache helpers
20
+ // ──────────────────────────────────────────────
12
21
  function ensureCacheDir() {
13
22
  if (!existsSync(CACHE_DIR)) {
14
23
  mkdirSync(CACHE_DIR, { recursive: true });
@@ -17,16 +26,20 @@ function ensureCacheDir() {
17
26
  function isCacheFresh() {
18
27
  if (!existsSync(CACHE_FILE))
19
28
  return false;
20
- const mtime = readFileSync(CACHE_FILE, 'utf-8').split('\n')[0];
21
- const cachedAt = new Date(mtime).getTime();
22
- return Date.now() - cachedAt < CACHE_TTL_MS;
29
+ try {
30
+ const raw = readFileSync(CACHE_FILE, 'utf-8');
31
+ const cachedAt = new Date(raw.split('\n')[0]).getTime();
32
+ return Date.now() - cachedAt < CACHE_TTL_MS;
33
+ }
34
+ catch {
35
+ return false;
36
+ }
23
37
  }
24
38
  function readCache() {
25
39
  if (!isCacheFresh())
26
40
  return null;
27
41
  try {
28
42
  const raw = readFileSync(CACHE_FILE, 'utf-8');
29
- // First line is timestamp, rest is JSON
30
43
  const json = raw.slice(raw.indexOf('\n') + 1);
31
44
  return JSON.parse(json);
32
45
  }
@@ -44,10 +57,83 @@ async function fetchRemote() {
44
57
  throw new Error(`Failed to fetch registry: ${res.status} ${res.statusText}`);
45
58
  return (await res.json());
46
59
  }
60
+ // ──────────────────────────────────────────────
61
+ // External source fetchers
62
+ // ──────────────────────────────────────────────
63
+ /**
64
+ * Parse awesome-agent-skills README and extract skill entries.
65
+ * Each section has a table of skills with links to officialskills.sh.
66
+ */
67
+ async function fetchAwesomeAgentSkills() {
68
+ const readmeUrl = 'https://raw.githubusercontent.com/VoltAgent/awesome-agent-skills/main/README.md';
69
+ const res = await fetch(readmeUrl);
70
+ if (!res.ok) {
71
+ console.warn(` ⚠ awesome-agent-skills: HTTP ${res.status}`);
72
+ return [];
73
+ }
74
+ const md = await res.text();
75
+ const skills = [];
76
+ const lines = md.split('\n');
77
+ // Pattern: `- **[org/skill](https://officialskills.sh/...)** - description`
78
+ // or: `- [org/skill](https://github.com/.../)` - description`
79
+ const skillLinkRe = /^\s*-\s+\*?\*?\[([^\]]+)\]\(([^)]+)\)\*?\*?\s*-\s*(.+)/;
80
+ for (const line of lines) {
81
+ const m = line.match(skillLinkRe);
82
+ if (!m)
83
+ continue;
84
+ const fullName = m[1]; // e.g. "anthropics/docx"
85
+ const url = m[2]; // e.g. "https://officialskills.sh/anthropics/skills/docx"
86
+ const description = m[3]; // e.g. "Create, edit, and analyze Word documents"
87
+ const parts = fullName.split('/');
88
+ const author = parts[0];
89
+ const name = parts[1] || fullName;
90
+ // Derive download URL from the officialskills.sh page or GitHub
91
+ const downloadUrl = deriveDownloadUrl(url, name, author);
92
+ skills.push({
93
+ name,
94
+ version: '1.0.0',
95
+ description: description.trim(),
96
+ tags: [author, name],
97
+ author,
98
+ stars: 0,
99
+ auditScore: 0,
100
+ created: new Date().toISOString(),
101
+ sourceUrl: url,
102
+ downloadUrl,
103
+ source: 'awesome-agent-skills',
104
+ });
105
+ }
106
+ return skills;
107
+ }
108
+ /**
109
+ * Derive a raw SKILL.md download URL from various link formats.
110
+ */
111
+ function deriveDownloadUrl(url, name, author) {
112
+ // officialskills.sh format: https://officialskills.sh/<author>/skills/<name>
113
+ const officialMatch = url.match(/officialskills\.sh\/([^/]+)\/skills\/([^/]+)/);
114
+ if (officialMatch) {
115
+ const org = officialMatch[1];
116
+ const skillName = officialMatch[2];
117
+ return `https://raw.githubusercontent.com/${org}/skills/main/skills/${skillName}/SKILL.md`;
118
+ }
119
+ // GitHub tree URL: https://github.com/<author>/<repo>/tree/main/skills/<name>
120
+ const githubTreeMatch = url.match(/github\.com\/([^/]+)\/([^/]+)\/tree\//);
121
+ if (githubTreeMatch) {
122
+ const org = githubTreeMatch[1];
123
+ const repo = githubTreeMatch[2];
124
+ return `https://raw.githubusercontent.com/${org}/${repo}/main/skills/${name}/SKILL.md`;
125
+ }
126
+ // Fallback: try generic GitHub raw
127
+ return `https://raw.githubusercontent.com/${author}/skills/main/skills/${name}/SKILL.md`;
128
+ }
129
+ // ──────────────────────────────────────────────
130
+ // Registry API
131
+ // ──────────────────────────────────────────────
47
132
  /**
48
133
  * Get the registry index, from cache if fresh, otherwise from remote.
134
+ * Optionally enriches with external sources.
49
135
  */
50
- export async function getRegistry(forceRefresh = false) {
136
+ export async function getRegistry(forceRefresh = false, includeExternal = true) {
51
137
  if (!forceRefresh) {
52
138
  const cached = readCache();
53
139
  if (cached)
@@ -55,6 +141,27 @@ export async function getRegistry(forceRefresh = false) {
55
141
  }
56
142
  const remote = await fetchRemote();
57
143
  writeCache(remote);
144
+ // Enrich with external sources
145
+ if (includeExternal) {
146
+ try {
147
+ const externalSkills = await fetchAwesomeAgentSkills();
148
+ if (externalSkills.length > 0) {
149
+ // Merge: registry entries take priority (dedup by name)
150
+ const existingNames = new Set(remote.skills.map((s) => s.name));
151
+ for (const ext of externalSkills) {
152
+ if (!existingNames.has(ext.name)) {
153
+ remote.skills.push(ext);
154
+ }
155
+ }
156
+ remote.updated = new Date().toISOString();
157
+ // Rewrite cache with enriched data
158
+ writeCache(remote);
159
+ }
160
+ }
161
+ catch {
162
+ // External enrich is best-effort
163
+ }
164
+ }
58
165
  return remote;
59
166
  }
60
167
  /**
@@ -69,6 +176,8 @@ export function searchSkills(registry, query) {
69
176
  return true;
70
177
  if (s.tags.some((t) => t.toLowerCase().includes(q)))
71
178
  return true;
179
+ if (s.author.toLowerCase().includes(q))
180
+ return true;
72
181
  return false;
73
182
  });
74
183
  }
@@ -76,21 +185,31 @@ export function searchSkills(registry, query) {
76
185
  * Find a single skill by name.
77
186
  */
78
187
  export function findSkill(registry, name) {
79
- return registry.skills.find((s) => s.name === name);
188
+ // Exact match first
189
+ const exact = registry.skills.find((s) => s.name.toLowerCase() === name.toLowerCase());
190
+ if (exact)
191
+ return exact;
192
+ // Fuzzy match
193
+ return registry.skills.find((s) => s.name.toLowerCase().includes(name.toLowerCase()));
80
194
  }
81
195
  /**
82
- * Get full skill detail including README content and download URL.
196
+ * Get full skill detail including SKILL.md content.
197
+ * Fetches directly from the original source URL.
83
198
  */
84
199
  export async function getSkillDetail(manifest) {
85
- const downloadUrl = `${RAW_SKILL_PREFIX}/${manifest.name}/SKILL.md`;
86
- const res = await fetch(downloadUrl);
87
- if (!res.ok)
88
- throw new Error(`Failed to fetch skill: ${res.status} ${res.statusText}`);
200
+ const res = await fetch(manifest.downloadUrl);
201
+ if (!res.ok) {
202
+ // Fallback: try common URL patterns
203
+ const fallbackUrl = `https://raw.githubusercontent.com/${manifest.author}/skills/main/skills/${manifest.name}/SKILL.md`;
204
+ const fallbackRes = await fetch(fallbackUrl);
205
+ if (!fallbackRes.ok) {
206
+ throw new Error(`Failed to fetch skill "${manifest.name}" from ${manifest.downloadUrl} ` +
207
+ `(HTTP ${res.status}) and fallback ${fallbackUrl} (HTTP ${fallbackRes.status})`);
208
+ }
209
+ const readme = await fallbackRes.text();
210
+ return { ...manifest, readme };
211
+ }
89
212
  const readme = await res.text();
90
- return {
91
- ...manifest,
92
- readme,
93
- downloadUrl,
94
- };
213
+ return { ...manifest, readme };
95
214
  }
96
215
  //# sourceMappingURL=registry-client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry-client.js","sourceRoot":"","sources":["../../src/marketplace/registry-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry-client.js","sourceRoot":"","sources":["../../src/marketplace/registry-client.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,12 @@
1
1
  /**
2
- * Marketplace types for skill metadata and registry.
2
+ * Marketplace types v2: lightweight index (links only, no file storage).
3
+ *
4
+ * The registry is just a curated index of where skills live,
5
+ * not a copy of the skill files themselves.
6
+ */
7
+ /**
8
+ * A skill entry in the registry index.
9
+ * Points to the original source — no files are stored in the registry repo.
3
10
  */
4
11
  export interface SkillManifest {
5
12
  name: string;
@@ -10,16 +17,29 @@ export interface SkillManifest {
10
17
  stars: number;
11
18
  auditScore: number;
12
19
  created: string;
20
+ /** URL to the original skill source (e.g. GitHub repo page) */
21
+ sourceUrl: string;
22
+ /** URL to download the SKILL.md file directly */
23
+ downloadUrl: string;
24
+ /** Optional: where this entry was sourced from */
25
+ source?: 'registry' | 'awesome-agent-skills' | 'officialskills.sh' | 'github' | 'manual';
26
+ }
27
+ export interface RegistrySource {
28
+ name: string;
29
+ type: string;
30
+ url: string;
31
+ description?: string;
13
32
  }
14
33
  export interface RegistryIndex {
15
34
  $schema: string;
16
35
  updated: string;
36
+ /** External sources that can enrich the index */
37
+ sources?: RegistrySource[];
38
+ /** Curated skill list — just metadata + links */
17
39
  skills: SkillManifest[];
18
40
  }
19
41
  export interface SkillDetail extends SkillManifest {
20
- /** Full content of SKILL.md */
42
+ /** Full content of the SKILL.md */
21
43
  readme: string;
22
- /** Raw download URL for the SKILL.md */
23
- downloadUrl: string;
24
44
  }
25
45
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/marketplace/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,aAAa,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,WAAY,SAAQ,aAAa;IAChD,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,WAAW,EAAE,MAAM,CAAC;CACrB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/marketplace/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,SAAS,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,WAAW,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,MAAM,CAAC,EAAE,UAAU,GAAG,sBAAsB,GAAG,mBAAmB,GAAG,QAAQ,GAAG,QAAQ,CAAC;CAC1F;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,iDAAiD;IACjD,OAAO,CAAC,EAAE,cAAc,EAAE,CAAC;IAC3B,iDAAiD;IACjD,MAAM,EAAE,aAAa,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,WAAY,SAAQ,aAAa;IAChD,mCAAmC;IACnC,MAAM,EAAE,MAAM,CAAC;CAChB"}
@@ -1,5 +1,8 @@
1
1
  /**
2
- * Marketplace types for skill metadata and registry.
2
+ * Marketplace types v2: lightweight index (links only, no file storage).
3
+ *
4
+ * The registry is just a curated index of where skills live,
5
+ * not a copy of the skill files themselves.
3
6
  */
4
7
  export {};
5
8
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/marketplace/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/marketplace/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "transskill",
3
- "version": "0.3.1",
3
+ "version": "0.4.0",
4
4
  "description": "Cross-platform AI agent skill converter - Write once, run on any agent",
5
5
  "bin": {
6
6
  "transskill": "dist/index.js"