@llmindset/hf-mcp-server 0.3.20 → 0.3.22

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.
Files changed (34) hide show
  1. package/dist/server/gradio-endpoint-connector.d.ts +2 -2
  2. package/dist/server/gradio-endpoint-connector.d.ts.map +1 -1
  3. package/dist/server/gradio-endpoint-connector.js +49 -2
  4. package/dist/server/gradio-endpoint-connector.js.map +1 -1
  5. package/dist/server/mcp-server.d.ts.map +1 -1
  6. package/dist/server/mcp-server.js +16 -5
  7. package/dist/server/mcp-server.js.map +1 -1
  8. package/dist/server/skills/skill-directory-schema.d.ts +40 -0
  9. package/dist/server/skills/skill-directory-schema.d.ts.map +1 -0
  10. package/dist/server/skills/skill-directory-schema.js +14 -0
  11. package/dist/server/skills/skill-directory-schema.js.map +1 -0
  12. package/dist/server/skills/skill-loader.d.ts.map +1 -1
  13. package/dist/server/skills/skill-loader.js +143 -43
  14. package/dist/server/skills/skill-loader.js.map +1 -1
  15. package/dist/server/skills/skill-resource-data.d.ts +11 -3
  16. package/dist/server/skills/skill-resource-data.d.ts.map +1 -1
  17. package/dist/server/skills/skill-resource-data.js +51 -25
  18. package/dist/server/skills/skill-resource-data.js.map +1 -1
  19. package/dist/server/skills/skill-resources.d.ts.map +1 -1
  20. package/dist/server/skills/skill-resources.js +23 -11
  21. package/dist/server/skills/skill-resources.js.map +1 -1
  22. package/dist/server/skills/skill-types.d.ts +28 -11
  23. package/dist/server/skills/skill-types.d.ts.map +1 -1
  24. package/dist/server/skills/skill-uri.d.ts +3 -1
  25. package/dist/server/skills/skill-uri.d.ts.map +1 -1
  26. package/dist/server/skills/skill-uri.js +18 -4
  27. package/dist/server/skills/skill-uri.js.map +1 -1
  28. package/dist/server/transport/stateless-http-transport.d.ts.map +1 -1
  29. package/dist/server/transport/stateless-http-transport.js +25 -3
  30. package/dist/server/transport/stateless-http-transport.js.map +1 -1
  31. package/dist/server/utils/capability-utils.d.ts.map +1 -1
  32. package/dist/server/utils/capability-utils.js +3 -1
  33. package/dist/server/utils/capability-utils.js.map +1 -1
  34. package/package.json +2 -2
@@ -1,13 +1,19 @@
1
1
  import fs from 'node:fs/promises';
2
2
  import path from 'node:path';
3
3
  import { logger } from '../utils/logger.js';
4
- import { mimeFor } from './skill-uri.js';
4
+ import { buildSkillDirUri, buildSkillUri, DIRECTORY_MIME, mimeFor } from './skill-uri.js';
5
5
  const INDEX_FILE = 'index.json';
6
+ const SKILL_MD = 'SKILL.md';
6
7
  function emptyCatalog(indexPath, indexText = '') {
7
- return { indexPath, indexText, skills: [], compatibilityFiles: [] };
8
+ return { indexPath, indexText, entries: [], resourcesByUri: new Map(), directories: new Map() };
8
9
  }
9
- function isSkillResourceType(value) {
10
- return value === 'skill-md' || value === 'archive';
10
+ function parseFrontmatter(value) {
11
+ if (!value || typeof value !== 'object' || Array.isArray(value))
12
+ return null;
13
+ const fm = value;
14
+ if (typeof fm.name !== 'string' || typeof fm.description !== 'string')
15
+ return null;
16
+ return fm;
11
17
  }
12
18
  function resolveSkillUrl(rootDir, url) {
13
19
  const prefix = 'skill://';
@@ -35,41 +41,125 @@ function resolveSkillUrl(rootDir, url) {
35
41
  }
36
42
  return { absPath, relPath: parts.join('/') };
37
43
  }
38
- async function loadIndexEntry(rootDir, entry) {
39
- if (typeof entry.name !== 'string' ||
40
- !isSkillResourceType(entry.type) ||
41
- typeof entry.description !== 'string' ||
42
- typeof entry.url !== 'string') {
43
- logger.warn({ entry }, 'invalid skill index entry, skipping');
44
- return null;
44
+ async function isRegularFile(absPath) {
45
+ try {
46
+ const stat = await fs.lstat(absPath);
47
+ return stat.isFile() && !stat.isSymbolicLink();
45
48
  }
46
- const resolved = resolveSkillUrl(rootDir, entry.url);
47
- if (!resolved) {
48
- logger.warn({ url: entry.url }, 'invalid skill resource URL, skipping');
49
- return null;
49
+ catch {
50
+ return false;
50
51
  }
52
+ }
53
+ async function walkSkillDir(skillPath, absDir, relDir, frontmatter, files, directories) {
54
+ const dirUri = buildSkillDirUri(skillPath, relDir);
55
+ const children = [];
56
+ let dirents;
51
57
  try {
52
- const stat = await fs.lstat(resolved.absPath);
53
- if (!stat.isFile() || stat.isSymbolicLink()) {
54
- logger.warn({ path: resolved.absPath }, 'skill resource is not a regular file, skipping');
55
- return null;
56
- }
58
+ dirents = await fs.readdir(absDir, { withFileTypes: true });
57
59
  }
58
60
  catch (err) {
59
- logger.warn({ path: resolved.absPath, err }, 'skill resource missing, skipping');
61
+ logger.warn({ absDir, err }, 'failed to read skill directory, skipping contents');
62
+ directories.set(dirUri, children);
63
+ return;
64
+ }
65
+ dirents.sort((a, b) => a.name.localeCompare(b.name));
66
+ for (const dirent of dirents) {
67
+ if (dirent.isSymbolicLink()) {
68
+ logger.warn({ dir: absDir, name: dirent.name }, 'skipping symlink in skill directory');
69
+ continue;
70
+ }
71
+ const childRel = relDir ? `${relDir}/${dirent.name}` : dirent.name;
72
+ if (dirent.isDirectory()) {
73
+ children.push({ uri: buildSkillDirUri(skillPath, childRel), name: dirent.name, mimeType: DIRECTORY_MIME });
74
+ await walkSkillDir(skillPath, path.join(absDir, dirent.name), childRel, frontmatter, files, directories);
75
+ }
76
+ else if (dirent.isFile()) {
77
+ const url = buildSkillUri(skillPath, childRel);
78
+ const { mimeType, isText } = mimeFor(childRel);
79
+ const isSkillMd = childRel === SKILL_MD;
80
+ files.push({
81
+ url,
82
+ absPath: path.join(absDir, dirent.name),
83
+ mimeType,
84
+ isText,
85
+ name: isSkillMd ? frontmatter.name : dirent.name,
86
+ description: isSkillMd ? frontmatter.description : undefined,
87
+ });
88
+ children.push({ uri: url, name: dirent.name, mimeType });
89
+ }
90
+ }
91
+ directories.set(dirUri, children);
92
+ }
93
+ async function loadArchives(rootDir, raw) {
94
+ if (!Array.isArray(raw))
95
+ return [];
96
+ const archives = [];
97
+ for (const item of raw) {
98
+ if (typeof item?.url !== 'string' || typeof item?.mimeType !== 'string') {
99
+ logger.warn({ archive: item }, 'invalid archive entry, skipping');
100
+ continue;
101
+ }
102
+ const resolved = resolveSkillUrl(rootDir, item.url);
103
+ if (!resolved || !(await isRegularFile(resolved.absPath))) {
104
+ logger.warn({ url: item.url }, 'archive resource missing or invalid, skipping');
105
+ continue;
106
+ }
107
+ archives.push({
108
+ url: item.url,
109
+ absPath: resolved.absPath,
110
+ mimeType: item.mimeType,
111
+ isText: false,
112
+ name: path.basename(resolved.relPath),
113
+ digest: typeof item.digest === 'string' ? item.digest : undefined,
114
+ });
115
+ }
116
+ return archives;
117
+ }
118
+ async function loadIndexEntry(rootDir, entry, directories) {
119
+ const frontmatter = parseFrontmatter(entry.frontmatter);
120
+ if (!frontmatter) {
121
+ logger.warn({ entry }, 'skill index entry missing valid frontmatter (name/description), skipping');
60
122
  return null;
61
123
  }
62
- const { mimeType, isText } = mimeFor(resolved.relPath);
63
- return {
64
- name: entry.name,
65
- type: entry.type,
66
- description: entry.description,
67
- url: entry.url,
68
- digest: typeof entry.digest === 'string' ? entry.digest : undefined,
69
- absPath: resolved.absPath,
70
- mimeType,
71
- isText,
72
- };
124
+ const hasUrl = typeof entry.url === 'string';
125
+ const archives = await loadArchives(rootDir, entry.archives);
126
+ if (!hasUrl && archives.length === 0) {
127
+ logger.warn({ name: frontmatter.name }, 'skill index entry has neither a readable url nor archives, skipping');
128
+ return null;
129
+ }
130
+ let skillMd;
131
+ let skillPath = frontmatter.name;
132
+ const files = [];
133
+ if (hasUrl) {
134
+ const url = entry.url;
135
+ const resolved = resolveSkillUrl(rootDir, url);
136
+ if (!resolved) {
137
+ logger.warn({ url }, 'invalid skill resource URL, skipping entry');
138
+ return null;
139
+ }
140
+ const parts = resolved.relPath.split('/');
141
+ if (parts.length < 2 || parts[parts.length - 1] !== SKILL_MD) {
142
+ logger.warn({ url }, 'skill url must point to a SKILL.md, skipping entry');
143
+ return null;
144
+ }
145
+ skillPath = parts.slice(0, -1).join('/');
146
+ const finalSegment = parts[parts.length - 2];
147
+ if (finalSegment !== frontmatter.name) {
148
+ logger.warn({ url, finalSegment, name: frontmatter.name }, 'final skill-path segment must equal frontmatter.name, skipping entry');
149
+ return null;
150
+ }
151
+ if (!(await isRegularFile(resolved.absPath))) {
152
+ logger.warn({ path: resolved.absPath }, 'SKILL.md missing or not a regular file, skipping entry');
153
+ return null;
154
+ }
155
+ if (typeof entry.digest !== 'string') {
156
+ logger.warn({ url }, 'skill entry with url is missing a digest (recommended by SEP-2640)');
157
+ }
158
+ const absDir = path.dirname(resolved.absPath);
159
+ await walkSkillDir(skillPath, absDir, '', frontmatter, files, directories);
160
+ skillMd = { url, digest: typeof entry.digest === 'string' ? entry.digest : undefined };
161
+ }
162
+ return { skillPath, frontmatter, skillMd, files, archives };
73
163
  }
74
164
  export async function loadSkills(rootDir) {
75
165
  const indexPath = path.join(rootDir, INDEX_FILE);
@@ -93,20 +183,30 @@ export async function loadSkills(rootDir) {
93
183
  logger.warn({ indexPath }, 'skills index missing skills array, skills disabled');
94
184
  return emptyCatalog(indexPath, indexText);
95
185
  }
96
- const skills = [];
97
- const seenUrls = new Set();
98
- for (const entry of parsed.skills) {
99
- const skill = await loadIndexEntry(rootDir, entry);
100
- if (!skill)
186
+ const entries = [];
187
+ const resourcesByUri = new Map();
188
+ const directories = new Map();
189
+ for (const raw of parsed.skills) {
190
+ const entry = await loadIndexEntry(rootDir, raw, directories);
191
+ if (!entry)
101
192
  continue;
102
- if (seenUrls.has(skill.url)) {
103
- logger.warn({ url: skill.url }, 'duplicate skill resource URL, skipping');
193
+ const readables = [...entry.files, ...entry.archives];
194
+ let conflict = false;
195
+ for (const file of readables) {
196
+ if (resourcesByUri.has(file.url)) {
197
+ logger.warn({ url: file.url }, 'duplicate skill resource URL, skipping entry');
198
+ conflict = true;
199
+ break;
200
+ }
201
+ }
202
+ if (conflict)
104
203
  continue;
204
+ for (const file of readables) {
205
+ resourcesByUri.set(file.url, file);
105
206
  }
106
- seenUrls.add(skill.url);
107
- skills.push(skill);
207
+ entries.push(entry);
108
208
  }
109
- logger.info({ rootDir, count: skills.length }, 'loaded skills');
110
- return { indexPath, indexText, skills, compatibilityFiles: [] };
209
+ logger.info({ rootDir, skills: entries.length, resources: resourcesByUri.size }, 'loaded skills');
210
+ return { indexPath, indexText, entries, resourcesByUri, directories };
111
211
  }
112
212
  //# sourceMappingURL=skill-loader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"skill-loader.js","sourceRoot":"","sources":["../../../src/server/skills/skill-loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skill-loader.js","sourceRoot":"","sources":["../../../src/server/skills/skill-loader.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { SkillCatalog, SkillResource } from './skill-types.js';
1
+ import type { ReadableSkillFile, SkillCatalog } from './skill-types.js';
2
2
  export declare const SKILL_INDEX_URI = "skill://index.json";
3
3
  export interface ListedSkillResource {
4
4
  uri: string;
@@ -15,9 +15,17 @@ export type SkillResourceContent = (BaseSkillResourceContent & {
15
15
  }) | (BaseSkillResourceContent & {
16
16
  blob: string;
17
17
  });
18
- export declare function skillResourceName(skill: SkillResource): string;
18
+ export interface SkillDirectoryListing {
19
+ resources: {
20
+ uri: string;
21
+ name: string;
22
+ mimeType: string;
23
+ }[];
24
+ nextCursor?: string;
25
+ }
19
26
  export declare function listSkillResources(catalog: SkillCatalog): ListedSkillResource[];
20
27
  export declare function readSkillResource(catalog: SkillCatalog, uri: string): Promise<SkillResourceContent | null>;
21
- export declare function readSkillFile(skill: SkillResource): Promise<SkillResourceContent>;
28
+ export declare function readSkillFile(file: ReadableSkillFile): Promise<SkillResourceContent>;
29
+ export declare function readSkillDirectory(catalog: SkillCatalog, uri: string, cursor?: string, pageSize?: number): SkillDirectoryListing | null;
22
30
  export {};
23
31
  //# sourceMappingURL=skill-resource-data.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"skill-resource-data.d.ts","sourceRoot":"","sources":["../../../src/server/skills/skill-resource-data.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEpE,eAAO,MAAM,eAAe,uBAAuB,CAAC;AAEpD,MAAM,WAAW,mBAAmB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,wBAAwB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,oBAAoB,GAC7B,CAAC,wBAAwB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,GAC7C,CAAC,wBAAwB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEjD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAE9D;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,YAAY,GAAG,mBAAmB,EAAE,CAe/E;AAED,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAShH;AAED,wBAAsB,aAAa,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAKvF"}
1
+ {"version":3,"file":"skill-resource-data.d.ts","sourceRoot":"","sources":["../../../src/server/skills/skill-resource-data.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAExE,eAAO,MAAM,eAAe,uBAAuB,CAAC;AAMpD,MAAM,WAAW,mBAAmB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,wBAAwB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,oBAAoB,GAC7B,CAAC,wBAAwB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,GAC7C,CAAC,wBAAwB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEjD,MAAM,WAAW,qBAAqB;IACrC,SAAS,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAKD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,YAAY,GAAG,mBAAmB,EAAE,CAiB/E;AAED,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAShH;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAK1F;AAcD,wBAAgB,kBAAkB,CACjC,OAAO,EAAE,YAAY,EACrB,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,MAAM,EACf,QAAQ,GAAE,MAAsB,GAC9B,qBAAqB,GAAG,IAAI,CAkB9B"}
@@ -1,37 +1,63 @@
1
1
  import fs from 'node:fs/promises';
2
2
  export const SKILL_INDEX_URI = 'skill://index.json';
3
- export function skillResourceName(skill) {
4
- return skill.type === 'archive' ? `${skill.name}.tar.gz` : skill.name;
5
- }
3
+ const DIR_PAGE_SIZE = 500;
6
4
  export function listSkillResources(catalog) {
7
- return [
8
- ...catalog.skills.map((skill) => ({
9
- uri: skill.url,
10
- name: skillResourceName(skill),
11
- description: skill.description,
12
- mimeType: skill.mimeType,
13
- })),
14
- {
15
- uri: SKILL_INDEX_URI,
16
- name: 'Skills Index',
17
- description: 'Catalog of skills exposed by this server (Agent Skills discovery schema).',
18
- mimeType: 'application/json',
19
- },
20
- ];
5
+ const resources = [];
6
+ for (const entry of catalog.entries) {
7
+ for (const file of entry.files) {
8
+ resources.push({ uri: file.url, name: file.name, description: file.description, mimeType: file.mimeType });
9
+ }
10
+ for (const archive of entry.archives) {
11
+ resources.push({ uri: archive.url, name: archive.name, mimeType: archive.mimeType });
12
+ }
13
+ }
14
+ resources.push({
15
+ uri: SKILL_INDEX_URI,
16
+ name: 'Skills Index',
17
+ description: 'Catalog of skills exposed by this server (SEP-2640 index).',
18
+ mimeType: 'application/json',
19
+ });
20
+ return resources;
21
21
  }
22
22
  export async function readSkillResource(catalog, uri) {
23
23
  if (uri === SKILL_INDEX_URI) {
24
24
  return { uri, mimeType: 'application/json', text: catalog.indexText };
25
25
  }
26
- const skill = catalog.skills.find((candidate) => candidate.url === uri);
27
- if (!skill)
26
+ const file = catalog.resourcesByUri.get(uri);
27
+ if (!file)
28
+ return null;
29
+ return readSkillFile(file);
30
+ }
31
+ export async function readSkillFile(file) {
32
+ const buf = await fs.readFile(file.absPath);
33
+ return file.isText
34
+ ? { uri: file.url, mimeType: file.mimeType, text: buf.toString('utf8') }
35
+ : { uri: file.url, mimeType: file.mimeType, blob: buf.toString('base64') };
36
+ }
37
+ function decodeCursor(cursor) {
38
+ if (cursor === undefined)
39
+ return 0;
40
+ const offset = Number.parseInt(cursor, 10);
41
+ if (!Number.isInteger(offset) || offset < 0)
28
42
  return null;
29
- return readSkillFile(skill);
43
+ return offset;
30
44
  }
31
- export async function readSkillFile(skill) {
32
- const buf = await fs.readFile(skill.absPath);
33
- return skill.isText
34
- ? { uri: skill.url, mimeType: skill.mimeType, text: buf.toString('utf8') }
35
- : { uri: skill.url, mimeType: skill.mimeType, blob: buf.toString('base64') };
45
+ export function readSkillDirectory(catalog, uri, cursor, pageSize = DIR_PAGE_SIZE) {
46
+ const normalised = uri.endsWith('/') ? uri.slice(0, -1) : uri;
47
+ const children = catalog.directories.get(normalised);
48
+ if (!children)
49
+ return null;
50
+ const offset = decodeCursor(cursor);
51
+ if (offset === null)
52
+ return null;
53
+ const page = children.slice(offset, offset + pageSize);
54
+ const nextOffset = offset + page.length;
55
+ const listing = {
56
+ resources: page.map((child) => ({ uri: child.uri, name: child.name, mimeType: child.mimeType })),
57
+ };
58
+ if (nextOffset < children.length) {
59
+ listing.nextCursor = String(nextOffset);
60
+ }
61
+ return listing;
36
62
  }
37
63
  //# sourceMappingURL=skill-resource-data.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"skill-resource-data.js","sourceRoot":"","sources":["../../../src/server/skills/skill-resource-data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAGlC,MAAM,CAAC,MAAM,eAAe,GAAG,oBAAoB,CAAC;AAkBpD,MAAM,UAAU,iBAAiB,CAAC,KAAoB;IACrD,OAAO,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAqB;IACvD,OAAO;QACN,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACjC,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,IAAI,EAAE,iBAAiB,CAAC,KAAK,CAAC;YAC9B,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,QAAQ,EAAE,KAAK,CAAC,QAAQ;SACxB,CAAC,CAAC;QACH;YACC,GAAG,EAAE,eAAe;YACpB,IAAI,EAAE,cAAc;YACpB,WAAW,EAAE,2EAA2E;YACxF,QAAQ,EAAE,kBAAkB;SAC5B;KACD,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAqB,EAAE,GAAW;IACzE,IAAI,GAAG,KAAK,eAAe,EAAE,CAAC;QAC7B,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,kBAAkB,EAAE,IAAI,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;IACvE,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;IACxE,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAAoB;IACvD,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7C,OAAO,KAAK,CAAC,MAAM;QAClB,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;QAC1E,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC/E,CAAC"}
1
+ {"version":3,"file":"skill-resource-data.js","sourceRoot":"","sources":["../../../src/server/skills/skill-resource-data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAGlC,MAAM,CAAC,MAAM,eAAe,GAAG,oBAAoB,CAAC;AAIpD,MAAM,aAAa,GAAG,GAAG,CAAC;AA0B1B,MAAM,UAAU,kBAAkB,CAAC,OAAqB;IACvD,MAAM,SAAS,GAA0B,EAAE,CAAC;IAC5C,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACrC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAChC,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC5G,CAAC;QACD,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACtC,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;QACtF,CAAC;IACF,CAAC;IACD,SAAS,CAAC,IAAI,CAAC;QACd,GAAG,EAAE,eAAe;QACpB,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,4DAA4D;QACzE,QAAQ,EAAE,kBAAkB;KAC5B,CAAC,CAAC;IACH,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAqB,EAAE,GAAW;IACzE,IAAI,GAAG,KAAK,eAAe,EAAE,CAAC;QAC7B,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,kBAAkB,EAAE,IAAI,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;IACvE,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7C,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAEvB,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAuB;IAC1D,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5C,OAAO,IAAI,CAAC,MAAM;QACjB,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;QACxE,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC7E,CAAC;AAED,SAAS,YAAY,CAAC,MAA0B;IAC/C,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACzD,OAAO,MAAM,CAAC;AACf,CAAC;AAOD,MAAM,UAAU,kBAAkB,CACjC,OAAqB,EACrB,GAAW,EACX,MAAe,EACf,WAAmB,aAAa;IAGhC,MAAM,UAAU,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAC9D,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACrD,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE3B,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACpC,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAEjC,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC;IACvD,MAAM,UAAU,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IACxC,MAAM,OAAO,GAA0B;QACtC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;KAChG,CAAC;IACF,IAAI,UAAU,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;QAClC,OAAO,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,OAAO,CAAC;AAChB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"skill-resources.d.ts","sourceRoot":"","sources":["../../../src/server/skills/skill-resources.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,YAAY,EAAiB,MAAM,kBAAkB,CAAC;AAkBpE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,GAAG,IAAI,CAmBrF"}
1
+ {"version":3,"file":"skill-resources.d.ts","sourceRoot":"","sources":["../../../src/server/skills/skill-resources.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,KAAK,EAAqB,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAgBxE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,GAAG,IAAI,CAkCrF"}
@@ -1,25 +1,37 @@
1
+ import { ErrorCode, McpError } from '@modelcontextprotocol/sdk/types.js';
1
2
  import { logger } from '../utils/logger.js';
2
- import { listSkillResources, readSkillFile, skillResourceName, SKILL_INDEX_URI } from './skill-resource-data.js';
3
- function registerSkillResource(server, skill) {
4
- server.registerResource(skillResourceName(skill), skill.url, {
5
- description: skill.description,
6
- mimeType: skill.mimeType,
7
- }, async () => {
8
- const content = await readSkillFile(skill);
3
+ import { listSkillResources, readSkillDirectory, readSkillFile, SKILL_INDEX_URI } from './skill-resource-data.js';
4
+ import { ResourcesDirectoryReadRequestSchema } from './skill-directory-schema.js';
5
+ function registerReadable(server, name, file, description) {
6
+ server.registerResource(name, file.url, description ? { description, mimeType: file.mimeType } : { mimeType: file.mimeType }, async () => {
7
+ const content = await readSkillFile(file);
9
8
  return { contents: [content] };
10
9
  });
11
10
  }
12
11
  export function registerSkillResources(server, catalog) {
13
- for (const skill of catalog.skills) {
14
- registerSkillResource(server, skill);
12
+ for (const entry of catalog.entries) {
13
+ for (const file of entry.files) {
14
+ registerReadable(server, file.name, file, file.description);
15
+ }
16
+ for (const archive of entry.archives) {
17
+ registerReadable(server, archive.name, archive);
18
+ }
15
19
  }
16
20
  server.registerResource('Skills Index', SKILL_INDEX_URI, {
17
- description: 'Catalog of skills exposed by this server (Agent Skills discovery schema).',
21
+ description: 'Catalog of skills exposed by this server (SEP-2640 index).',
18
22
  mimeType: 'application/json',
19
23
  }, async () => ({
20
24
  contents: [{ uri: SKILL_INDEX_URI, mimeType: 'application/json', text: catalog.indexText }],
21
25
  }));
26
+ server.server.setRequestHandler(ResourcesDirectoryReadRequestSchema, (request) => {
27
+ const { uri, cursor } = request.params;
28
+ const listing = readSkillDirectory(catalog, uri, cursor);
29
+ if (!listing) {
30
+ throw new McpError(ErrorCode.InvalidParams, `Not a directory resource: ${uri}`);
31
+ }
32
+ return listing;
33
+ });
22
34
  const resources = listSkillResources(catalog).length;
23
- logger.info({ skills: catalog.skills.length, resources }, 'registered skill resources');
35
+ logger.info({ skills: catalog.entries.length, resources }, 'registered skill resources');
24
36
  }
25
37
  //# sourceMappingURL=skill-resources.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"skill-resources.js","sourceRoot":"","sources":["../../../src/server/skills/skill-resources.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAEjH,SAAS,qBAAqB,CAAC,MAAiB,EAAE,KAAoB;IACrE,MAAM,CAAC,gBAAgB,CACtB,iBAAiB,CAAC,KAAK,CAAC,EACxB,KAAK,CAAC,GAAG,EACT;QACC,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,QAAQ,EAAE,KAAK,CAAC,QAAQ;KACxB,EACD,KAAK,IAAI,EAAE;QACV,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC;QAC3C,OAAO,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IAChC,CAAC,CACD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAAiB,EAAE,OAAqB;IAC9E,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACpC,qBAAqB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,CAAC,gBAAgB,CACtB,cAAc,EACd,eAAe,EACf;QACC,WAAW,EAAE,2EAA2E;QACxF,QAAQ,EAAE,kBAAkB;KAC5B,EACD,KAAK,IAAI,EAAE,CAAC,CAAC;QACZ,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,eAAe,EAAE,QAAQ,EAAE,kBAAkB,EAAE,IAAI,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;KAC3F,CAAC,CACF,CAAC;IAEF,MAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;IACrD,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,4BAA4B,CAAC,CAAC;AACzF,CAAC"}
1
+ {"version":3,"file":"skill-resources.js","sourceRoot":"","sources":["../../../src/server/skills/skill-resources.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAqB,MAAM,oCAAoC,CAAC;AAC5F,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAClH,OAAO,EAAE,mCAAmC,EAAE,MAAM,6BAA6B,CAAC;AAElF,SAAS,gBAAgB,CAAC,MAAiB,EAAE,IAAY,EAAE,IAAuB,EAAE,WAAoB;IACvG,MAAM,CAAC,gBAAgB,CACtB,IAAI,EACJ,IAAI,CAAC,GAAG,EACR,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,EACpF,KAAK,IAAI,EAAE;QACV,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;QAC1C,OAAO,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IAChC,CAAC,CACD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAAiB,EAAE,OAAqB;IAC9E,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACrC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAChC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAC7D,CAAC;QACD,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACtC,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACjD,CAAC;IACF,CAAC;IAED,MAAM,CAAC,gBAAgB,CACtB,cAAc,EACd,eAAe,EACf;QACC,WAAW,EAAE,4DAA4D;QACzE,QAAQ,EAAE,kBAAkB;KAC5B,EACD,KAAK,IAAI,EAAE,CAAC,CAAC;QACZ,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,eAAe,EAAE,QAAQ,EAAE,kBAAkB,EAAE,IAAI,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;KAC3F,CAAC,CACF,CAAC;IAGF,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,mCAAmC,EAAE,CAAC,OAAO,EAAgB,EAAE;QAC9F,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;QACvC,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;QACzD,IAAI,CAAC,OAAO,EAAE,CAAC;YACd,MAAM,IAAI,QAAQ,CAAC,SAAS,CAAC,aAAa,EAAE,6BAA6B,GAAG,EAAE,CAAC,CAAC;QACjF,CAAC;QACD,OAAO,OAAuB,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;IACrD,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,4BAA4B,CAAC,CAAC;AAC1F,CAAC"}
@@ -1,25 +1,42 @@
1
- export type SkillResourceType = 'skill-md' | 'archive';
2
- export interface SkillResource {
1
+ export interface SkillFrontmatter {
3
2
  name: string;
4
- type: SkillResourceType;
5
3
  description: string;
4
+ [key: string]: unknown;
5
+ }
6
+ export interface ReadableSkillFile {
6
7
  url: string;
7
- digest?: string;
8
8
  absPath: string;
9
9
  mimeType: string;
10
10
  isText: boolean;
11
11
  }
12
- export interface SkillCompatibilityFile {
13
- resourceName: string;
14
- url: string;
15
- absPath: string;
12
+ export interface SkillResource extends ReadableSkillFile {
13
+ name: string;
14
+ description?: string;
15
+ }
16
+ export interface SkillArchive extends ReadableSkillFile {
17
+ name: string;
18
+ digest?: string;
19
+ }
20
+ export interface SkillDirChild {
21
+ uri: string;
22
+ name: string;
16
23
  mimeType: string;
17
- isText: boolean;
24
+ }
25
+ export interface SkillEntry {
26
+ skillPath: string;
27
+ frontmatter: SkillFrontmatter;
28
+ skillMd?: {
29
+ url: string;
30
+ digest?: string;
31
+ };
32
+ files: SkillResource[];
33
+ archives: SkillArchive[];
18
34
  }
19
35
  export interface SkillCatalog {
20
36
  indexPath: string;
21
37
  indexText: string;
22
- skills: SkillResource[];
23
- compatibilityFiles: SkillCompatibilityFile[];
38
+ entries: SkillEntry[];
39
+ resourcesByUri: Map<string, ReadableSkillFile>;
40
+ directories: Map<string, SkillDirChild[]>;
24
41
  }
25
42
  //# sourceMappingURL=skill-types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"skill-types.d.ts","sourceRoot":"","sources":["../../../src/server/skills/skill-types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,SAAS,CAAC;AAEvD,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,iBAAiB,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,sBAAsB;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,kBAAkB,EAAE,sBAAsB,EAAE,CAAC;CAC7C"}
1
+ {"version":3,"file":"skill-types.d.ts","sourceRoot":"","sources":["../../../src/server/skills/skill-types.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,gBAAgB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACvB;AAGD,MAAM,WAAW,iBAAiB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;CAChB;AAGD,MAAM,WAAW,aAAc,SAAQ,iBAAiB;IAEvD,IAAI,EAAE,MAAM,CAAC;IAEb,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAGD,MAAM,WAAW,YAAa,SAAQ,iBAAiB;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAGD,MAAM,WAAW,aAAa;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CACjB;AAGD,MAAM,WAAW,UAAU;IAE1B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,gBAAgB,CAAC;IAE9B,OAAO,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAE3C,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,QAAQ,EAAE,YAAY,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,UAAU,EAAE,CAAC;IAEtB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAE/C,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;CAC1C"}
@@ -2,5 +2,7 @@ export declare function mimeFor(relPath: string): {
2
2
  mimeType: string;
3
3
  isText: boolean;
4
4
  };
5
- export declare function buildSkillUri(skillName: string, relPath: string): string;
5
+ export declare const DIRECTORY_MIME = "inode/directory";
6
+ export declare function buildSkillUri(skillPath: string, relPath: string): string;
7
+ export declare function buildSkillDirUri(skillPath: string, relDir: string): string;
6
8
  //# sourceMappingURL=skill-uri.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"skill-uri.d.ts","sourceRoot":"","sources":["../../../src/server/skills/skill-uri.ts"],"names":[],"mappings":"AAmCA,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAa9E;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAIxE"}
1
+ {"version":3,"file":"skill-uri.d.ts","sourceRoot":"","sources":["../../../src/server/skills/skill-uri.ts"],"names":[],"mappings":"AAmCA,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAa9E;AAGD,eAAO,MAAM,cAAc,oBAAoB,CAAC;AAgBhD,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAIxE;AAMD,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAI1E"}
@@ -44,9 +44,23 @@ export function mimeFor(relPath) {
44
44
  }
45
45
  return { mimeType: 'application/octet-stream', isText: false };
46
46
  }
47
- export function buildSkillUri(skillName, relPath) {
48
- const normalised = relPath.replaceAll('\\', '/');
49
- const encodedPath = normalised.split('/').map(encodeURIComponent).join('/');
50
- return `skill://${encodeURIComponent(skillName)}/${encodedPath}`;
47
+ export const DIRECTORY_MIME = 'inode/directory';
48
+ function encodeSegments(value) {
49
+ return value
50
+ .replaceAll('\\', '/')
51
+ .split('/')
52
+ .filter((segment) => segment.length > 0)
53
+ .map(encodeURIComponent)
54
+ .join('/');
55
+ }
56
+ export function buildSkillUri(skillPath, relPath) {
57
+ const encodedSkill = encodeSegments(skillPath);
58
+ const encodedPath = encodeSegments(relPath);
59
+ return `skill://${encodedSkill}/${encodedPath}`;
60
+ }
61
+ export function buildSkillDirUri(skillPath, relDir) {
62
+ const encodedSkill = encodeSegments(skillPath);
63
+ const encodedDir = encodeSegments(relDir);
64
+ return encodedDir ? `skill://${encodedSkill}/${encodedDir}` : `skill://${encodedSkill}`;
51
65
  }
52
66
  //# sourceMappingURL=skill-uri.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"skill-uri.js","sourceRoot":"","sources":["../../../src/server/skills/skill-uri.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,gBAAgB,GAA2B;IAChD,KAAK,EAAE,eAAe;IACtB,WAAW,EAAE,eAAe;IAC5B,MAAM,EAAE,YAAY;IACpB,OAAO,EAAE,kBAAkB;IAC3B,OAAO,EAAE,kBAAkB;IAC3B,MAAM,EAAE,kBAAkB;IAC1B,KAAK,EAAE,eAAe;IACtB,KAAK,EAAE,kBAAkB;IACzB,KAAK,EAAE,iBAAiB;IACxB,KAAK,EAAE,mBAAmB;IAC1B,MAAM,EAAE,mBAAmB;IAC3B,MAAM,EAAE,iBAAiB;IACzB,OAAO,EAAE,WAAW;IACpB,MAAM,EAAE,UAAU;IAClB,MAAM,EAAE,UAAU;IAClB,OAAO,EAAE,kBAAkB;IAC3B,MAAM,EAAE,iBAAiB;CACzB,CAAC;AAEF,MAAM,kBAAkB,GAA2B;IAClD,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,YAAY;IACpB,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,WAAW;IACnB,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,iBAAiB;IACzB,MAAM,EAAE,iBAAiB;IACzB,MAAM,EAAE,mBAAmB;IAC3B,KAAK,EAAE,kBAAkB;IACzB,MAAM,EAAE,kBAAkB;CAC1B,CAAC;AAEF,MAAM,UAAU,OAAO,CAAC,OAAe;IACtC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;IAChD,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;IACvD,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,aAAa,EAAE,CAAC;QAC5D,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACjD,CAAC;IACD,IAAI,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,QAAQ,EAAE,gBAAgB,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC1D,CAAC;IACD,IAAI,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,QAAQ,EAAE,kBAAkB,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAC7D,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,0BAA0B,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,SAAiB,EAAE,OAAe;IAC/D,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACjD,MAAM,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5E,OAAO,WAAW,kBAAkB,CAAC,SAAS,CAAC,IAAI,WAAW,EAAE,CAAC;AAClE,CAAC"}
1
+ {"version":3,"file":"skill-uri.js","sourceRoot":"","sources":["../../../src/server/skills/skill-uri.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"stateless-http-transport.d.ts","sourceRoot":"","sources":["../../../src/server/transport/stateless-http-transport.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,aAAa,EACb,KAAK,gBAAgB,EAErB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,KAAK,EAAqB,OAAO,EAAE,MAAM,SAAS,CAAC;AAmD1D,qBAAa,sBAAuB,SAAQ,aAAa;IACxD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAU;IACxC,OAAO,CAAC,iBAAiB,CAA4C;IACrE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,oBAAoB,CAAa;gBAE7B,aAAa,EAAE,aAAa,EAAE,GAAG,EAAE,OAAO;IAkBtD,OAAO,CAAC,YAAY;IA6BpB,OAAO,CAAC,oBAAoB;YAad,8BAA8B;IAkEnC,UAAU,CAAC,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;YAkDhD,oBAAoB;YAmTpB,mBAAmB;IAgDxB,QAAQ,IAAI,IAAI;IAQhB,wBAAwB,IAAI,MAAM;IAYlC,WAAW,IAAI,eAAe,EAAE;IAU1B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAQvC,OAAO,CAAC,sBAAsB;IAqB9B,OAAO,CAAC,8BAA8B;IAQtC,OAAO,CAAC,gCAAgC;IAYxC,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAa1C,gBAAgB,IAAI;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE;CAO/E"}
1
+ {"version":3,"file":"stateless-http-transport.d.ts","sourceRoot":"","sources":["../../../src/server/transport/stateless-http-transport.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,aAAa,EACb,KAAK,gBAAgB,EAErB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,KAAK,EAAqB,OAAO,EAAE,MAAM,SAAS,CAAC;AA0D1D,qBAAa,sBAAuB,SAAQ,aAAa;IACxD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAU;IACxC,OAAO,CAAC,iBAAiB,CAA4C;IACrE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,oBAAoB,CAAa;gBAE7B,aAAa,EAAE,aAAa,EAAE,GAAG,EAAE,OAAO;IAkBtD,OAAO,CAAC,YAAY;IA6BpB,OAAO,CAAC,oBAAoB;YAad,8BAA8B;IAoFnC,UAAU,CAAC,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;YAkDhD,oBAAoB;YAmTpB,mBAAmB;IAgDxB,QAAQ,IAAI,IAAI;IAQhB,wBAAwB,IAAI,MAAM;IAYlC,WAAW,IAAI,eAAe,EAAE;IAU1B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAQvC,OAAO,CAAC,sBAAsB;IAqB9B,OAAO,CAAC,8BAA8B;IAQtC,OAAO,CAAC,gCAAgC;IAYxC,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAa1C,gBAAgB,IAAI;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE;CAO/E"}