transskill 0.3.1 → 0.4.1

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,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,CAsCxB;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,18 +57,117 @@ 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) {
137
+ // 1. Load base index: from cache (if fresh) or remote
138
+ let index = null;
51
139
  if (!forceRefresh) {
52
- const cached = readCache();
53
- if (cached)
54
- return cached;
140
+ index = readCache();
55
141
  }
56
- const remote = await fetchRemote();
57
- writeCache(remote);
58
- return remote;
142
+ if (!index) {
143
+ index = await fetchRemote();
144
+ writeCache(index);
145
+ }
146
+ // 2. Always try to enrich with external sources (even from cache)
147
+ // This ensures broken/empty external data gets fixed on next run
148
+ if (includeExternal) {
149
+ try {
150
+ const externalSkills = await fetchAwesomeAgentSkills();
151
+ if (externalSkills.length > 0) {
152
+ const existingNames = new Set(index.skills.map((s) => s.name));
153
+ let changed = false;
154
+ for (const ext of externalSkills) {
155
+ if (!existingNames.has(ext.name)) {
156
+ index.skills.push(ext);
157
+ changed = true;
158
+ }
159
+ }
160
+ if (changed) {
161
+ index.updated = new Date().toISOString();
162
+ writeCache(index);
163
+ }
164
+ }
165
+ }
166
+ catch {
167
+ // External enrich is best-effort
168
+ }
169
+ }
170
+ return index;
59
171
  }
60
172
  /**
61
173
  * Simple fuzzy search across skill name, description, and tags.
@@ -69,6 +181,8 @@ export function searchSkills(registry, query) {
69
181
  return true;
70
182
  if (s.tags.some((t) => t.toLowerCase().includes(q)))
71
183
  return true;
184
+ if (s.author.toLowerCase().includes(q))
185
+ return true;
72
186
  return false;
73
187
  });
74
188
  }
@@ -76,21 +190,31 @@ export function searchSkills(registry, query) {
76
190
  * Find a single skill by name.
77
191
  */
78
192
  export function findSkill(registry, name) {
79
- return registry.skills.find((s) => s.name === name);
193
+ // Exact match first
194
+ const exact = registry.skills.find((s) => s.name.toLowerCase() === name.toLowerCase());
195
+ if (exact)
196
+ return exact;
197
+ // Fuzzy match
198
+ return registry.skills.find((s) => s.name.toLowerCase().includes(name.toLowerCase()));
80
199
  }
81
200
  /**
82
- * Get full skill detail including README content and download URL.
201
+ * Get full skill detail including SKILL.md content.
202
+ * Fetches directly from the original source URL.
83
203
  */
84
204
  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}`);
205
+ const res = await fetch(manifest.downloadUrl);
206
+ if (!res.ok) {
207
+ // Fallback: try common URL patterns
208
+ const fallbackUrl = `https://raw.githubusercontent.com/${manifest.author}/skills/main/skills/${manifest.name}/SKILL.md`;
209
+ const fallbackRes = await fetch(fallbackUrl);
210
+ if (!fallbackRes.ok) {
211
+ throw new Error(`Failed to fetch skill "${manifest.name}" from ${manifest.downloadUrl} ` +
212
+ `(HTTP ${res.status}) and fallback ${fallbackUrl} (HTTP ${fallbackRes.status})`);
213
+ }
214
+ const readme = await fallbackRes.text();
215
+ return { ...manifest, readme };
216
+ }
89
217
  const readme = await res.text();
90
- return {
91
- ...manifest,
92
- readme,
93
- downloadUrl,
94
- };
218
+ return { ...manifest, readme };
95
219
  }
96
220
  //# sourceMappingURL=registry-client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry-client.js","sourceRoot":"","sources":["../../src/marketplace/registry-client.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGlC,MAAM,YAAY,GAAG,kFAAkF,CAAC;AACxG,MAAM,gBAAgB,GAAG,2EAA2E,CAAC;AACrG,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;AAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;AACpD,MAAM,YAAY,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW;AAErD,SAAS,cAAc;IACrB,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC;AAED,SAAS,YAAY;IACnB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1C,MAAM,KAAK,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/D,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;IAC3C,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,GAAG,YAAY,CAAC;AAC9C,CAAC;AAED,SAAS,SAAS;IAChB,IAAI,CAAC,YAAY,EAAE;QAAE,OAAO,IAAI,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAC9C,wCAAwC;QACxC,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAkB,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,KAAoB;IACtC,cAAc,EAAE,CAAC;IACjB,aAAa,CAAC,UAAU,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;AAC9F,CAAC;AAED,KAAK,UAAU,WAAW;IACxB,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC,CAAC;IACtC,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;IAC1F,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAkB,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,YAAY,GAAG,KAAK;IACpD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;IAC5B,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,WAAW,EAAE,CAAC;IACnC,UAAU,CAAC,MAAM,CAAC,CAAC;IACnB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,QAAuB,EAAE,KAAa;IACjE,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAC9B,OAAO,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QAClC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QAClD,IAAI,CAAC,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QACzD,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QACjE,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,QAAuB,EAAE,IAAY;IAC7D,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AACtD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,QAAuB;IAC1D,MAAM,WAAW,GAAG,GAAG,gBAAgB,IAAI,QAAQ,CAAC,IAAI,WAAW,CAAC;IACpE,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,CAAC;IACrC,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;IACvF,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAEhC,OAAO;QACL,GAAG,QAAQ;QACX,MAAM;QACN,WAAW;KACZ,CAAC;AACJ,CAAC"}
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.1",
4
4
  "description": "Cross-platform AI agent skill converter - Write once, run on any agent",
5
5
  "bin": {
6
6
  "transskill": "dist/index.js"