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.
- package/dist/marketplace/publish-all.d.ts +2 -6
- package/dist/marketplace/publish-all.d.ts.map +1 -1
- package/dist/marketplace/publish-all.js +17 -56
- package/dist/marketplace/publish-all.js.map +1 -1
- package/dist/marketplace/publish.d.ts +8 -6
- package/dist/marketplace/publish.d.ts.map +1 -1
- package/dist/marketplace/publish.js +114 -208
- package/dist/marketplace/publish.js.map +1 -1
- package/dist/marketplace/registry-client.d.ts +11 -2
- package/dist/marketplace/registry-client.d.ts.map +1 -1
- package/dist/marketplace/registry-client.js +137 -18
- package/dist/marketplace/registry-client.js.map +1 -1
- package/dist/marketplace/types.d.ts +24 -4
- package/dist/marketplace/types.d.ts.map +1 -1
- package/dist/marketplace/types.js +4 -1
- package/dist/marketplace/types.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Publish-all command — batch
|
|
2
|
+
* Publish-all command — batch submit links for all skills in a directory.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
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
|
|
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
|
|
2
|
+
* Publish-all command — batch submit links for all skills in a directory.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
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
|
-
|
|
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
|
|
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
|
|
106
|
-
console.log(` ${
|
|
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: `
|
|
115
|
-
active: 'Yes
|
|
116
|
-
inactive: 'No
|
|
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
|
|
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
|
-
|
|
146
|
-
|
|
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
|
|
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}
|
|
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":"AAAA
|
|
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 —
|
|
2
|
+
* Publish command — v2: lightweight link submission.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
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
|
|
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
|
|
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 —
|
|
2
|
+
* Publish command — v2: lightweight link submission.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
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,
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
-
//
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
194
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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(
|
|
234
|
-
console.log(` 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
|
|
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(
|
|
252
|
-
|
|
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 (
|
|
255
|
-
console.log(engine.reportToString(
|
|
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(`
|
|
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
|
-
//
|
|
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.
|
|
245
|
+
outro(chalk.yellow('Dry run — no changes made.'));
|
|
270
246
|
return;
|
|
271
247
|
}
|
|
272
|
-
// Step
|
|
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
|
-
//
|
|
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
|
|
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
|
-
//
|
|
309
|
-
const branchName = `
|
|
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
|
|
285
|
+
log.info(`Branch already exists — updating`);
|
|
321
286
|
}
|
|
322
287
|
else if (!branchRes.ok) {
|
|
323
|
-
throw new Error(`
|
|
288
|
+
throw new Error(`HTTP ${branchRes.status}`);
|
|
324
289
|
}
|
|
325
290
|
spin.stop('Branch ready ✓');
|
|
326
291
|
}
|
|
327
|
-
catch
|
|
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
|
-
//
|
|
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
|
-
|
|
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 (
|
|
381
|
-
const
|
|
382
|
-
|
|
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
|
-
//
|
|
393
|
-
const existingIdx = registry.skills.findIndex((s) => s.name ===
|
|
394
|
-
const
|
|
395
|
-
name:
|
|
396
|
-
version
|
|
397
|
-
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], ...
|
|
327
|
+
registry.skills[existingIdx] = { ...registry.skills[existingIdx], ...newEntry };
|
|
408
328
|
}
|
|
409
329
|
else {
|
|
410
|
-
registry.skills.push(
|
|
330
|
+
registry.skills.push(newEntry);
|
|
411
331
|
}
|
|
412
332
|
registry.updated = new Date().toISOString();
|
|
413
|
-
|
|
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('
|
|
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
|
-
//
|
|
342
|
+
// Create PR
|
|
425
343
|
spin.start('Creating pull request…');
|
|
426
344
|
try {
|
|
427
345
|
const prBody = [
|
|
428
|
-
`## 📦 ${
|
|
346
|
+
`## 📦 ${skillName} v${version}`,
|
|
429
347
|
'',
|
|
430
|
-
`${
|
|
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
|
-
`- **
|
|
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
|
|
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(
|
|
369
|
+
outro(`${chalk.bold(skillName)} linked in registry! 🎉`);
|
|
452
370
|
}
|
|
453
|
-
catch
|
|
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
|
-
|
|
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":"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"}
|
|
@@ -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
|
|
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":"
|
|
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 —
|
|
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
|
-
|
|
21
|
-
|
|
22
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
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":"AAAA
|
|
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
|
|
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
|
|
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
|
|
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
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/marketplace/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|