@modootoday/pmcp 0.7.1 → 0.8.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/cli.js CHANGED
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  loadEmbedder,
4
4
  openEntryVectors
5
- } from "./chunk-VBLAH6J2.js";
5
+ } from "./chunk-WSTCBVXW.js";
6
6
  import {
7
7
  ConfigError,
8
8
  ProjectError,
@@ -14,16 +14,18 @@ import {
14
14
  readSpec,
15
15
  renderFrontmatter,
16
16
  spawnRunner,
17
- splitFrontmatter
18
- } from "./chunk-GNJSZCRH.js";
19
- import "./chunk-KP3TQ3QY.js";
17
+ splitFrontmatter,
18
+ validateCatalog,
19
+ validateSkillDir
20
+ } from "./chunk-M6LBYJDS.js";
21
+ import "./chunk-OPDVUHTK.js";
20
22
  import {
21
23
  serve
22
- } from "./chunk-IJPOJ6PG.js";
24
+ } from "./chunk-LUBYOET7.js";
23
25
  import {
24
26
  kindOf,
25
27
  readCatalog
26
- } from "./chunk-C46YCY2I.js";
28
+ } from "./chunk-ZDV75HZN.js";
27
29
 
28
30
  // src/cli/command.ts
29
31
  var ArgumentError = class extends Error {
@@ -448,10 +450,19 @@ var listCommand = {
448
450
  var serveCommand = {
449
451
  name: "serve",
450
452
  describe: "Run the MCP server on stdio (the default with no command)",
451
- usage: "pmcp serve [--root <dir>] [--scope <prefix>] [--marketplace <dir>] [--package <dir>] [--workspace <dir>] [--config <file> | --no-config]",
452
- options: [...CATALOG_OPTIONS],
453
+ usage: "pmcp serve [--root <dir>] [--scope <prefix>] [--marketplace <dir>] [--package <dir>] [--workspace <dir>] [--config <file> | --no-config] [--prompts]",
454
+ options: [
455
+ ...CATALOG_OPTIONS,
456
+ {
457
+ name: "prompts",
458
+ describe: "Also offer one prompt per skill, for hosts that turn prompts into commands.",
459
+ boolean: true
460
+ }
461
+ ],
453
462
  run(context) {
454
- serve(catalogOptionsFrom(context));
463
+ serve(catalogOptionsFrom(context), {
464
+ prompts: context.args.flags.has("prompts")
465
+ });
455
466
  return 0;
456
467
  }
457
468
  };
@@ -2249,6 +2260,33 @@ var doctorCommand = {
2249
2260
  }
2250
2261
  };
2251
2262
 
2263
+ // src/commands/validate.ts
2264
+ var validateCommand = {
2265
+ name: "validate",
2266
+ describe: "Check skills against the Agent Skills specification: given directories, or every skill the catalog reaches",
2267
+ usage: "pmcp validate [<skill-dir>...] [--root <dir>] [--marketplace <dir>] [--package <dir>] [--workspace <dir>] [--config <file> | --no-config] [--json]",
2268
+ options: [
2269
+ ...CATALOG_OPTIONS,
2270
+ { name: "json", describe: "Emit JSON rather than a table.", boolean: true }
2271
+ ],
2272
+ run(context) {
2273
+ const dirs = context.args.positional;
2274
+ const findings = dirs.length > 0 ? dirs.flatMap(validateSkillDir) : validateCatalog(catalogOptionsFrom(context));
2275
+ const errors = findings.filter((f) => f.level === "error").length;
2276
+ if (context.args.flags.has("json")) {
2277
+ context.ui.data(`${JSON.stringify({ findings }, null, 2)}
2278
+ `);
2279
+ return errors > 0 ? 1 : 0;
2280
+ }
2281
+ for (const finding of findings) {
2282
+ const report = finding.level === "error" ? context.ui.error : context.ui.warn;
2283
+ report.call(context.ui, finding.reason, finding.path);
2284
+ }
2285
+ if (findings.length === 0) context.ui.success("every skill is valid");
2286
+ return errors > 0 ? 1 : 0;
2287
+ }
2288
+ };
2289
+
2252
2290
  // src/commands/index.ts
2253
2291
  var COMMANDS = [
2254
2292
  serveCommand,
@@ -2262,7 +2300,8 @@ var COMMANDS = [
2262
2300
  installCommand,
2263
2301
  syncCommand,
2264
2302
  projectCommand,
2265
- doctorCommand
2303
+ doctorCommand,
2304
+ validateCommand
2266
2305
  ];
2267
2306
  var PLANNED = [];
2268
2307
  var GLOBAL = /* @__PURE__ */ new Set(["-q", "--quiet", "--no-color", "--color"]);
@@ -2308,7 +2347,7 @@ function dispatch(argv, options = {}) {
2308
2347
  }
2309
2348
  return run(command, rest, { ui, env, cwd });
2310
2349
  }
2311
- var VERSION = "0.7.1";
2350
+ var VERSION = "0.8.0";
2312
2351
  async function run(command, argv, context) {
2313
2352
  try {
2314
2353
  return await command.run({
package/dist/http.d.ts CHANGED
@@ -1,5 +1,6 @@
1
- import { S as SkillEntry } from './catalog-5v7jrGwP.js';
2
- import { E as Embedder, S as SkillServerOptions } from './server-B9GDPRoE.js';
1
+ import { S as SkillEntry } from './catalog-CS0j6-0U.js';
2
+ import { E as Embedder, S as SkillServerOptions } from './server-CLyCpwZb.js';
3
+ import 'zod';
3
4
 
4
5
  /**
5
6
  * The optional encoder and the store for the vectors it produces.
@@ -67,6 +68,13 @@ interface SkillHttpOptions extends SkillServerOptions {
67
68
  readonly challenge?: string;
68
69
  /** Encode the catalog at start so find ranks by meaning across languages. */
69
70
  readonly semantic?: SkillHttpSemanticOptions;
71
+ /** One prompt per skill. Off by default: the list grows with the catalog. */
72
+ readonly prompts?: boolean;
73
+ /**
74
+ * Cache scope the Skills extension declares. The catalog is filtered per caller
75
+ * here, so "private" unless the host knows every caller sees the same list.
76
+ */
77
+ readonly cacheScope?: "public" | "private";
70
78
  }
71
79
  declare const DEFAULT_TIERS: readonly string[];
72
80
  declare function visibleTo(entries: readonly SkillEntry[], tiers: readonly string[]): SkillEntry[];
package/dist/http.js CHANGED
@@ -2,12 +2,12 @@ import {
2
2
  DEFAULT_MODEL_ID,
3
3
  encodeEntries,
4
4
  loadEmbedder
5
- } from "./chunk-VBLAH6J2.js";
6
- import "./chunk-KP3TQ3QY.js";
5
+ } from "./chunk-WSTCBVXW.js";
6
+ import "./chunk-OPDVUHTK.js";
7
7
  import {
8
8
  createSkillServer,
9
9
  readCatalog
10
- } from "./chunk-C46YCY2I.js";
10
+ } from "./chunk-ZDV75HZN.js";
11
11
 
12
12
  // src/http.ts
13
13
  import {
@@ -50,7 +50,8 @@ function createSkillHttpHandler(options) {
50
50
  () => createSkillServer({
51
51
  ...options,
52
52
  ...embedder && vectors ? { embedder, vectors } : {},
53
- loadCatalog: () => visibleTo(all, tiers)
53
+ loadCatalog: () => visibleTo(all, tiers),
54
+ skillsExtension: { cacheScope: options.cacheScope ?? "private" }
54
55
  })
55
56
  );
56
57
  handlers.set(key, handler);
package/dist/index.d.ts CHANGED
@@ -1,8 +1,9 @@
1
- import { I as IntentCache, S as SkillServerOptions, a as SkillTools } from './server-B9GDPRoE.js';
2
- export { C as CATALOG_PAGE_MAX, b as CATALOG_PAGE_SIZE, c as CallResponse, d as CatalogItem, e as CatalogResponse, D as DEFAULT_FIND_LIMIT, f as DESCRIBE_FILE_LIMIT, E as Embedder, F as FindOptions, g as FindResult, h as IntentCacheStats, K as KindFilter, M as Match, R as READ_BUDGET_BYTES, i as Ranking, j as ReadResult, k as SkillFilters, l as cosine, m as createSkillTools, n as find, o as lexicalScore, p as normaliseIntent } from './server-B9GDPRoE.js';
3
- import { S as SkillEntry } from './catalog-5v7jrGwP.js';
4
- export { a as ASSET_KINDS, A as AssetKind, C as CatalogOptions, M as MAX_SKILL_DEPTH, b as SKIPPED_DIRS, d as displayPath, k as kindOf, r as readBody, c as readCatalog, e as readFrontmatter, w as withoutBody } from './catalog-5v7jrGwP.js';
1
+ import { I as IntentCache, S as SkillServerOptions, a as SkillTools } from './server-CLyCpwZb.js';
2
+ export { B as BundleFile, C as CATALOG_PAGE_MAX, b as CATALOG_PAGE_SIZE, c as CallResponse, d as CatalogItem, e as CatalogResponse, f as Classified, D as DEFAULT_FIND_LIMIT, g as DESCRIBE_FILE_LIMIT, E as Embedder, F as FileKind, h as FindOptions, i as FindResult, j as IntentCacheStats, K as KindFilter, M as Match, R as READ_BUDGET_BYTES, k as Ranking, l as ReadResult, m as SkillBundle, n as SkillFile, o as SkillFileContent, p as SkillFileListing, q as SkillFilters, r as bundleResponseSchema, s as bundleSkill, t as catalogResponseSchema, u as classify, v as cosine, w as createSkillTools, x as describeResponseSchema, y as find, z as findResultSchema, A as isUtf8Text, G as lexicalScore, H as listSkillFiles, J as mimeOf, L as normaliseIntent, N as readSkillFile } from './server-CLyCpwZb.js';
3
+ import { S as SkillEntry, C as CatalogOptions } from './catalog-CS0j6-0U.js';
4
+ export { a as ASSET_KINDS, A as AssetKind, M as MAX_SKILL_DEPTH, b as SKIPPED_DIRS, d as displayPath, k as kindOf, r as readBody, c as readCatalog, e as readFrontmatter, w as withoutBody } from './catalog-CS0j6-0U.js';
5
5
  import { McpServer } from '@modelcontextprotocol/server';
6
+ import 'zod';
6
7
 
7
8
  /**
8
9
  * Query vectors, kept on disk between sessions.
@@ -36,6 +37,25 @@ declare const DEFAULT_INTENT_CACHE_LIMIT = 4096;
36
37
  */
37
38
  declare function openIntentCache(options: IntentCacheOptions): Promise<IntentCache | null>;
38
39
 
40
+ /**
41
+ * SKILL.md frontmatter, read as YAML the way a host reads it, and checked against
42
+ * the Agent Skills specification (https://agentskills.io/specification).
43
+ */
44
+ type MetadataValue = string | readonly string[];
45
+ /**
46
+ * Parsed frontmatter. A value with an unquoted ": " is a common authoring slip
47
+ * the client guide says to recover from by quoting it, so that is retried once.
48
+ */
49
+ declare function frontmatterObject(source: string): Record<string, unknown> | null;
50
+ declare const NAME_MAX = 64;
51
+ declare const DESCRIPTION_MAX = 1024;
52
+ declare const COMPATIBILITY_MAX = 500;
53
+ /**
54
+ * What the specification requires of one SKILL.md, as messages; empty when valid.
55
+ * directory is the name of the folder holding it.
56
+ */
57
+ declare function specProblems(front: Record<string, unknown> | null, directory: string): string[];
58
+
39
59
  /**
40
60
  * Assets laid out as an agent plugin marketplace: a directory holding
41
61
  * `.claude-plugin/marketplace.json`, whose plugins keep skills, commands,
@@ -43,16 +63,12 @@ declare function openIntentCache(options: IntentCacheOptions): Promise<IntentCac
43
63
  * package.json is involved, which is why the node_modules walk never saw them.
44
64
  */
45
65
 
46
- type MetadataValue = string | readonly string[];
47
66
  /** Why an asset was left out rather than served. */
48
67
  interface Rejection {
49
68
  readonly path: string;
50
69
  readonly reason: string;
51
70
  }
52
- /**
53
- * The `metadata:` block of a frontmatter, one level deep: scalars and inline
54
- * lists. Deeper nesting is skipped rather than half-read.
55
- */
71
+ /** The `metadata:` map of a frontmatter, one level deep: strings and string lists. */
56
72
  declare function readMetadata(source: string): Record<string, MetadataValue>;
57
73
  /** The raw frontmatter text between the fences, for skill_describe. */
58
74
  declare function readFrontmatterText(source: string): string;
@@ -200,7 +216,7 @@ interface RunResult {
200
216
  }
201
217
  type Runner = (command: string, args: readonly string[], cwd: string) => RunResult;
202
218
  type Status = "ok" | "fail" | "skip";
203
- interface Finding {
219
+ interface Finding$1 {
204
220
  readonly tool: Tool | "project";
205
221
  readonly check: string;
206
222
  readonly status: Status;
@@ -211,7 +227,7 @@ interface DoctorOptions {
211
227
  readonly home: string;
212
228
  readonly only?: ReadonlySet<Tool>;
213
229
  }
214
- declare function doctor(spec: ProjectSpec, options: DoctorOptions): Finding[];
230
+ declare function doctor(spec: ProjectSpec, options: DoctorOptions): Finding$1[];
215
231
 
216
232
  /**
217
233
  * Links each package's path-scoped rule file into .claude/rules/<dir>/. One level
@@ -225,60 +241,119 @@ declare class ProjectError extends Error {
225
241
  declare function deriveName(dir: string, strip: readonly string[]): string;
226
242
 
227
243
  /**
228
- * The five tools, spoken over MCP.
244
+ * One catalog skill as the Skills extension (SEP-2640) describes it: frontmatter
245
+ * plus a complete manifest of its files with sha256 digests and sizes.
246
+ */
247
+
248
+ interface SkillResource {
249
+ readonly uri: string;
250
+ readonly digest: string;
251
+ readonly size: number;
252
+ }
253
+ interface SkillExtensionEntry {
254
+ readonly uri: string;
255
+ readonly frontmatter: Readonly<Record<string, unknown>>;
256
+ readonly resources: readonly SkillResource[];
257
+ }
258
+ /**
259
+ * The extension's entry, or null when the skill cannot be served under SEP-2640:
260
+ * not a directory with SKILL.md, frontmatter that breaks the Agent Skills
261
+ * specification, a name unlike its path, or over the per-skill limits. Such a
262
+ * skill stays reachable through the skill_* tools.
263
+ */
264
+ declare function extensionEntry(entry: SkillEntry): SkillExtensionEntry | null;
265
+
266
+ /**
267
+ * The Skills extension's methods, skills/list and skills/get. Their files are
268
+ * served by the skill:// resources (resources.ts), which every surface shares.
269
+ */
270
+
271
+ declare const SKILLS_EXTENSION = "io.modelcontextprotocol/skills";
272
+ interface SkillsExtensionOptions {
273
+ /**
274
+ * "public" when every caller sees the same catalog; "private" when the list is
275
+ * filtered per caller, as it is behind authorization.
276
+ */
277
+ readonly cacheScope?: "public" | "private";
278
+ }
279
+ /** Declares the extension and its methods. Must run before the server connects. */
280
+ declare function registerSkillsExtension(server: McpServer, skills: () => readonly SkillEntry[], options?: SkillsExtensionOptions): void;
281
+
282
+ /**
283
+ * skill:// URIs for skill files. The authority names this server's namespace and
284
+ * resolves to nothing; the path is the catalog name, then the file inside it.
285
+ */
286
+
287
+ declare const skillFileUri: (entry: Pick<SkillEntry, "name">, file?: string) => string;
288
+ /**
289
+ * The catalog entry and relative file a URI names, matched against the entries
290
+ * the caller may see. Names contain slashes, so the longest matching name wins.
291
+ */
292
+ declare function resolveSkillFileUri(uri: string, entries: readonly SkillEntry[]): {
293
+ entry: SkillEntry;
294
+ file: string;
295
+ } | null;
296
+
297
+ /**
298
+ * The catalog, spoken over MCP: the skill_* tools, skill:// resources, the
299
+ * Skills extension and, when asked for, one prompt per skill.
229
300
  *
230
- * Thin on purpose: every decision is in `createSkillTools`, and this file only
231
- * names the tools and shapes their arguments. A consumer that wants the same
232
- * operations from a hook or a script uses the tools directly and never speaks
233
- * a protocol.
301
+ * Thin on purpose: every decision is in createSkillTools and the modules under
302
+ * tools/ and files/; this file only composes them on one server.
234
303
  */
235
304
 
236
305
  /** Reported to the host on connect. */
237
306
  declare const SERVER_NAME = "pmcp";
307
+ declare const SERVER_VERSION = "0.8.0";
238
308
  /**
239
- * Registers the five tools on a server.
309
+ * Registers the skill_* tools on a server.
240
310
  *
241
311
  * Exported separately from the stdio entry so a consumer already running an MCP
242
312
  * server can add these to it rather than starting a second process.
243
313
  */
244
314
  declare function registerSkillTools(server: McpServer, tools: SkillTools): McpServer;
315
+ interface SkillMcpOptions extends SkillServerOptions {
316
+ /** One prompt per skill, for hosts that offer prompts as commands. Off by default. */
317
+ readonly prompts?: boolean;
318
+ readonly skillsExtension?: SkillsExtensionOptions;
319
+ }
245
320
  /**
246
- * A server with the five tools and the Skills extension registered.
321
+ * A server with everything registered.
247
322
  *
248
323
  * The catalog is read on first use rather than here, so a host that connects
249
324
  * and never asks pays nothing for the walk.
250
325
  */
251
- declare function createSkillServer(options: SkillServerOptions): McpServer;
326
+ declare function createSkillServer(options: SkillMcpOptions): McpServer;
252
327
 
253
- /**
254
- * The MCP Skills extension (SEP-2640): `skills/list`, `skills/get` and the
255
- * skill files as `skill://pmcp/<name>/<file>` resources, so a host that speaks
256
- * the extension loads skills natively instead of through the skill_* tools.
257
- */
328
+ /** Checks skill directories against the Agent Skills specification. */
258
329
 
259
- declare const SKILLS_EXTENSION = "io.modelcontextprotocol/skills";
260
- interface SkillResource {
261
- readonly uri: string;
262
- readonly digest: string;
263
- readonly size: number;
264
- }
265
- interface SkillExtensionEntry {
266
- readonly uri: string;
267
- readonly frontmatter: Readonly<Record<string, unknown>>;
268
- readonly resources: readonly SkillResource[];
330
+ interface Finding {
331
+ readonly path: string;
332
+ readonly reason: string;
333
+ /** error: the skill is left out or breaks a MUST; warning: served anyway. */
334
+ readonly level: "error" | "warning";
269
335
  }
270
- declare const skillUri: (entry: Pick<SkillEntry, "name">, file?: string) => string;
336
+ /** One skill directory, or the SKILL.md inside it. */
337
+ declare function validateSkillDir(dir: string): Finding[];
338
+ /** Every skill the catalog options reach, with what loading reported. */
339
+ declare function validateCatalog(options: CatalogOptions): Finding[];
340
+
271
341
  /**
272
- * The extension's entry for one catalog skill, or null when the skill cannot
273
- * be served under SEP-2640: not a directory with SKILL.md, a frontmatter name
274
- * that is missing, invalid or unlike its path, or over the per-skill limits.
275
- * Such a skill stays reachable through the skill_* tools.
342
+ * skill:// resources: every file of every skill the caller may see. The tools,
343
+ * the Skills extension and resource links all resolve here, over the same
344
+ * caller-filtered catalog, so nothing a caller cannot list can be read.
276
345
  */
277
- declare function extensionEntry(entry: SkillEntry): SkillExtensionEntry | null;
346
+
347
+ declare function registerSkillResources(server: McpServer, skills: () => readonly SkillEntry[]): void;
348
+
278
349
  /**
279
- * Declares the extension and its methods on a server, over the skills the
280
- * catalog function returns. Must run before the server connects.
350
+ * One prompt per skill, for hosts that offer prompts as commands: the Agent
351
+ * Skills "user-explicit activation" path. Off unless the host asks for it,
352
+ * because the list grows with the catalog.
281
353
  */
282
- declare function registerSkillsExtension(server: McpServer, skills: () => readonly SkillEntry[]): void;
283
354
 
284
- export { CONFIG_FILE, type CatalogSection, ConfigError, DEFAULT_INTENT_CACHE_LIMIT, type Finding, IntentCache, type IntentCacheOptions, LOCK_FILE, type McpServerSpec, type MetadataValue, type Output, type PackageRulesSpec, type ProjectConfig, ProjectError, type ProjectResult, type ProjectSpec, type Rejection, type Runner, SERVER_NAME, SKILLS_EXTENSION, SkillEntry, type SkillExtensionEntry, type SkillResource, SkillServerOptions, SkillTools, TOOLS, type Tool, assetRoot, createSkillServer, deadGlobs, deriveName, doctor, extensionEntry, findConfig, openIntentCache, plan, project, readConfig, readFrontmatterText, readMarketplace, readMetadata, readSpec, registerSkillTools, registerSkillsExtension, skillUri };
355
+ /** Prompt names travel into host command names, so they stay to a plain set. */
356
+ declare const promptName: (entry: Pick<SkillEntry, "name">) => string;
357
+ declare function registerSkillPrompts(server: McpServer, tools: SkillTools): void;
358
+
359
+ export { COMPATIBILITY_MAX, CONFIG_FILE, CatalogOptions, type CatalogSection, ConfigError, DEFAULT_INTENT_CACHE_LIMIT, DESCRIPTION_MAX, type Finding$1 as Finding, IntentCache, type IntentCacheOptions, LOCK_FILE, type McpServerSpec, type MetadataValue, NAME_MAX, type Output, type PackageRulesSpec, type ProjectConfig, ProjectError, type ProjectResult, type ProjectSpec, type Rejection, type Runner, SERVER_NAME, SERVER_VERSION, SKILLS_EXTENSION, SkillEntry, type SkillExtensionEntry, type SkillMcpOptions, type SkillResource, SkillServerOptions, SkillTools, TOOLS, type Tool, type Finding as ValidationFinding, assetRoot, createSkillServer, deadGlobs, deriveName, doctor, extensionEntry, findConfig, openIntentCache, frontmatterObject as parseSkillFrontmatter, plan, project, promptName, readConfig, readFrontmatterText, readMarketplace, readMetadata, readSpec, registerSkillPrompts, registerSkillResources, registerSkillTools, registerSkillsExtension, resolveSkillFileUri, skillFileUri, skillFileUri as skillUri, specProblems, validateCatalog, validateSkillDir };
package/dist/index.js CHANGED
@@ -11,78 +11,115 @@ import {
11
11
  plan,
12
12
  project,
13
13
  readConfig,
14
- readSpec
15
- } from "./chunk-GNJSZCRH.js";
14
+ readSpec,
15
+ validateCatalog,
16
+ validateSkillDir
17
+ } from "./chunk-M6LBYJDS.js";
16
18
  import {
17
19
  DEFAULT_INTENT_CACHE_LIMIT,
18
20
  openIntentCache
19
- } from "./chunk-KP3TQ3QY.js";
21
+ } from "./chunk-OPDVUHTK.js";
20
22
  import {
21
23
  ASSET_KINDS,
22
24
  CATALOG_PAGE_MAX,
23
25
  CATALOG_PAGE_SIZE,
26
+ COMPATIBILITY_MAX,
24
27
  DEFAULT_FIND_LIMIT,
25
28
  DESCRIBE_FILE_LIMIT,
29
+ DESCRIPTION_MAX,
26
30
  MAX_SKILL_DEPTH,
31
+ NAME_MAX,
27
32
  READ_BUDGET_BYTES,
28
33
  SERVER_NAME,
34
+ SERVER_VERSION,
29
35
  SKILLS_EXTENSION,
30
36
  SKIPPED_DIRS,
31
37
  assetRoot,
38
+ bundleResponseSchema,
39
+ bundleSkill,
40
+ catalogResponseSchema,
41
+ classify,
32
42
  cosine,
33
43
  createSkillServer,
34
44
  createSkillTools,
45
+ describeResponseSchema,
35
46
  displayPath,
36
47
  extensionEntry,
37
48
  find,
49
+ findResultSchema,
50
+ frontmatterObject,
51
+ isUtf8Text,
38
52
  kindOf,
39
53
  lexicalScore,
54
+ listSkillFiles,
55
+ mimeOf,
40
56
  normaliseIntent,
57
+ promptName,
41
58
  readBody,
42
59
  readCatalog,
43
60
  readFrontmatter,
44
61
  readFrontmatterText,
45
62
  readMarketplace,
46
63
  readMetadata,
64
+ readSkillFile,
65
+ registerSkillPrompts,
66
+ registerSkillResources,
47
67
  registerSkillTools,
48
68
  registerSkillsExtension,
49
- skillUri,
69
+ resolveSkillFileUri,
70
+ skillFileUri,
71
+ specProblems,
50
72
  withoutBody
51
- } from "./chunk-C46YCY2I.js";
73
+ } from "./chunk-ZDV75HZN.js";
52
74
  export {
53
75
  ASSET_KINDS,
54
76
  CATALOG_PAGE_MAX,
55
77
  CATALOG_PAGE_SIZE,
78
+ COMPATIBILITY_MAX,
56
79
  CONFIG_FILE,
57
80
  ConfigError,
58
81
  DEFAULT_FIND_LIMIT,
59
82
  DEFAULT_INTENT_CACHE_LIMIT,
60
83
  DESCRIBE_FILE_LIMIT,
84
+ DESCRIPTION_MAX,
61
85
  LOCK_FILE,
62
86
  MAX_SKILL_DEPTH,
87
+ NAME_MAX,
63
88
  ProjectError,
64
89
  READ_BUDGET_BYTES,
65
90
  SERVER_NAME,
91
+ SERVER_VERSION,
66
92
  SKILLS_EXTENSION,
67
93
  SKIPPED_DIRS,
68
94
  TOOLS,
69
95
  assetRoot,
96
+ bundleResponseSchema,
97
+ bundleSkill,
98
+ catalogResponseSchema,
99
+ classify,
70
100
  cosine,
71
101
  createSkillServer,
72
102
  createSkillTools,
73
103
  deadGlobs,
74
104
  deriveName,
105
+ describeResponseSchema,
75
106
  displayPath,
76
107
  doctor,
77
108
  extensionEntry,
78
109
  find,
79
110
  findConfig,
111
+ findResultSchema,
112
+ isUtf8Text,
80
113
  kindOf,
81
114
  lexicalScore,
115
+ listSkillFiles,
116
+ mimeOf,
82
117
  normaliseIntent,
83
118
  openIntentCache,
119
+ frontmatterObject as parseSkillFrontmatter,
84
120
  plan,
85
121
  project,
122
+ promptName,
86
123
  readBody,
87
124
  readCatalog,
88
125
  readConfig,
@@ -90,10 +127,18 @@ export {
90
127
  readFrontmatterText,
91
128
  readMarketplace,
92
129
  readMetadata,
130
+ readSkillFile,
93
131
  readSpec,
132
+ registerSkillPrompts,
133
+ registerSkillResources,
94
134
  registerSkillTools,
95
135
  registerSkillsExtension,
96
- skillUri,
136
+ resolveSkillFileUri,
137
+ skillFileUri,
138
+ skillFileUri as skillUri,
139
+ specProblems,
140
+ validateCatalog,
141
+ validateSkillDir,
97
142
  withoutBody
98
143
  };
99
144
  //# sourceMappingURL=index.js.map