@dsh-cc/plugin-loader 0.7.1 → 0.8.0-rc.2

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 (52) hide show
  1. package/README.i18n.yaml +1 -1
  2. package/README.md +30 -0
  3. package/lib/actor-contract-gate.d.ts +66 -0
  4. package/lib/actor-contract-gate.d.ts.map +1 -0
  5. package/lib/actor-contract-gate.js +83 -0
  6. package/lib/actor-contract-gate.js.map +1 -0
  7. package/lib/agents.d.ts +5 -1
  8. package/lib/agents.d.ts.map +1 -1
  9. package/lib/agents.js +65 -21
  10. package/lib/agents.js.map +1 -1
  11. package/lib/commands.d.ts +1 -0
  12. package/lib/commands.d.ts.map +1 -1
  13. package/lib/commands.js +84 -10
  14. package/lib/commands.js.map +1 -1
  15. package/lib/discovery.d.ts +20 -0
  16. package/lib/discovery.d.ts.map +1 -1
  17. package/lib/discovery.js +37 -1
  18. package/lib/discovery.js.map +1 -1
  19. package/lib/hooks.d.ts +8 -0
  20. package/lib/hooks.d.ts.map +1 -1
  21. package/lib/hooks.js +74 -5
  22. package/lib/hooks.js.map +1 -1
  23. package/lib/index.d.ts +17 -3
  24. package/lib/index.d.ts.map +1 -1
  25. package/lib/index.js +30 -8
  26. package/lib/index.js.map +1 -1
  27. package/lib/manifest.d.ts +11 -1
  28. package/lib/manifest.d.ts.map +1 -1
  29. package/lib/manifest.js +54 -1
  30. package/lib/manifest.js.map +1 -1
  31. package/lib/mcp.d.ts +1 -0
  32. package/lib/mcp.d.ts.map +1 -1
  33. package/lib/mcp.js +81 -5
  34. package/lib/mcp.js.map +1 -1
  35. package/lib/resolve-manifest.d.ts +15 -1
  36. package/lib/resolve-manifest.d.ts.map +1 -1
  37. package/lib/resolve-manifest.js +37 -12
  38. package/lib/resolve-manifest.js.map +1 -1
  39. package/lib/rules.d.ts +37 -0
  40. package/lib/rules.d.ts.map +1 -0
  41. package/lib/rules.js +171 -0
  42. package/lib/rules.js.map +1 -0
  43. package/lib/seams.d.ts +11 -1
  44. package/lib/seams.d.ts.map +1 -1
  45. package/lib/seams.js.map +1 -1
  46. package/lib/skills.d.ts +1 -0
  47. package/lib/skills.d.ts.map +1 -1
  48. package/lib/skills.js +45 -8
  49. package/lib/skills.js.map +1 -1
  50. package/lib/types.d.ts +31 -1
  51. package/lib/types.d.ts.map +1 -1
  52. package/package.json +17 -14
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAUH;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CACjC,GAAY,EACZ,MAAc,EACd,UAAsC,EAAE;IAExC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,UAAU,MAAM,kCAAkC,CAAC,CAAA;IACrE,CAAC;IACD,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAA;IAC1C,MAAM,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,CAAA;IACzD,MAAM,MAAM,GAAG,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAA;IACjE,MAAM,MAAM,GAAG,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAA;IACjE,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,GAAG,mBAAmB,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,CAAA;IACnF,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IACjE,OAAO;QACL,IAAI;QACJ,GAAG,OAAO,GAAG,CAAC,SAAS,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;QACxE,GAAG,OAAO,GAAG,CAAC,aAAa,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;QACpF,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;QAC/D,QAAQ;QACR,gBAAgB,EAAE,GAAG,CAAC,UAAU,CAAC,KAAK,SAAS;QAC/C,MAAM;QACN,MAAM;QACN,oBAAoB,EAAE,OAAO,CAAC,oBAAoB,KAAK,IAAI;QAC3D,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;QAC5D,UAAU;QACV,GAAG,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE;QACzD,QAAQ;KACT,CAAA;AACH,CAAC;AAYD,wDAAwD;AACxD,SAAS,QAAQ,CAAC,GAAY,EAAE,MAAc;IAC5C,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CAAC,UAAU,MAAM,qCAAqC,CAAC,CAAA;IACxE,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,UAAU,GAAG,gDAAgD,CAAC,CAAA;IAChF,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAY,EAAE,IAAY;IACnD,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,EAAE,CAAA;IAChC,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;IAC3D,IAAI,aAAa,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IACxE,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAClB,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,EAAE;YACrD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,cAAc,WAAW,qBAAqB,CAAC,CAAA;YAClG,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,CAAA;YACnD,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,KAAK,EAAE,CAAA;QACxC,CAAC,CAAC,CAAA;IACJ,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,uDAAuD,CAAC,CAAA;AACxF,CAAC;AAED,yFAAyF;AACzF,SAAS,YAAY,CAAC,IAA6B,EAAE,IAAY,EAAE,WAAmB;IACpF,MAAM,SAAS,GAAG,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,QAAQ,CAAA;IACpD,MAAM,UAAU,GAAG,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,QAAQ,CAAA;IACtD,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,cAAc,WAAW,qEAAqE,CAAC,CAAA;IAC/H,CAAC;IACD,MAAM,KAAK,GAAwB,EAAE,CAAA;IACrC,IAAI,SAAS;QAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAW,CAAA;IACtD,IAAI,UAAU;QAAE,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAW,CAAA;IACzD,KAAK,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,cAAc,EAAE,OAAO,CAAU,EAAE,CAAC;QACpE,IAAI,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,QAAQ;YAAE,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA;IAC3D,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC;QACxC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,CAAa,CAAA;IACvD,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAYD,SAAS,mBAAmB,CAAC,GAAY,EAAE,IAAY,EAAE,KAAa;IACpE,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,EAAE,CAAA;IAChC,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,CAAC,GAAG,CAAC,CAAA;IACzC,IAAI,aAAa,CAAC,GAAG,CAAC;QAAE,OAAO,CAAC,GAAG,GAAG,CAAC,CAAA;IACvC,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,MAAM,KAAK,qCAAqC,CAAC,CAAA;AACjF,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAY,EAAE,IAAY;IACrD,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,CAAA;IAChD,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,cAAc,EAAE,GAAG,EAAE,CAAA,CAAC,sBAAsB;IAClG,IAAI,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,UAAU,EAAE,GAA4C,EAAE,CAAA;IACtF,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,kEAAkE,CAAC,CAAA;AACnG,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAC7E,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAA;AAC9E,CAAC"}
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"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"}
package/lib/mcp.d.ts CHANGED
@@ -37,5 +37,6 @@ export interface MountMcpServersOptions {
37
37
  export declare function mountMcpServers(options: MountMcpServersOptions): {
38
38
  disposers: (() => void)[];
39
39
  tally: ComponentTally;
40
+ warnings: string[];
40
41
  };
41
42
  //# sourceMappingURL=mcp.d.ts.map
package/lib/mcp.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAE3C,iEAAiE;AACjE,MAAM,WAAW,OAAO;IACtB;;;;;OAKG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,IAAI,CAAA;CAC1E;AAED,qDAAqD;AACrD,MAAM,WAAW,sBAAsB;IACrC,0EAA0E;IAC1E,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,8EAA8E;IAC9E,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAA;IACnC,6DAA6D;IAC7D,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,SAAS,CAAA;CAClC;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG;IAAE,SAAS,EAAE,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;IAAC,KAAK,EAAE,cAAc,CAAA;CAAE,CAkBrH"}
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAE3C,iEAAiE;AACjE,MAAM,WAAW,OAAO;IACtB;;;;;OAKG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,IAAI,CAAA;CAC1E;AAED,qDAAqD;AACrD,MAAM,WAAW,sBAAsB;IACrC,0EAA0E;IAC1E,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,8EAA8E;IAC9E,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAA;IACnC,6DAA6D;IAC7D,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,SAAS,CAAA;CAClC;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG;IAAE,SAAS,EAAE,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;IAAC,KAAK,EAAE,cAAc,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CA2BzI"}
package/lib/mcp.js CHANGED
@@ -9,7 +9,7 @@
9
9
  * @module
10
10
  */
11
11
  import { readFileSync } from 'node:fs';
12
- import { resolve } from 'node:path';
12
+ import { resolve, join } from 'node:path';
13
13
  import { ComponentTally } from "./seams.js";
14
14
  /**
15
15
  * Collect and register a plugin's MCP servers through the optional seam.
@@ -19,21 +19,94 @@ import { ComponentTally } from "./seams.js";
19
19
  export function mountMcpServers(options) {
20
20
  const tally = new ComponentTally('mcpServers');
21
21
  const disposers = [];
22
+ const warnings = [];
22
23
  if (options.mcp === undefined) {
23
24
  tally.addSkipped('mcp seam "mcp" is not mounted');
24
- return { disposers, tally };
25
+ return { disposers, tally, warnings };
25
26
  }
26
27
  const servers = collectServers(options.pluginRoot, options.manifest);
28
+ // Cursor default layout (plan §3.2): a root `mcp.json` is discovered when the
29
+ // manifest declares nothing. CC-flavored behavior is untouched.
30
+ if (options.manifest.flavor === 'cursor' && manifestDeclaresNothing(options.manifest)) {
31
+ Object.assign(servers, readMcpJson(join(options.pluginRoot, 'mcp.json')));
32
+ }
27
33
  const entries = Object.entries(servers);
28
34
  if (entries.length === 0) {
29
35
  tally.addSkipped('plugin declares no MCP servers');
30
- return { disposers, tally };
36
+ return { disposers, tally, warnings };
31
37
  }
38
+ const cursor = options.manifest.flavor === 'cursor';
32
39
  for (const [name, config] of entries) {
33
- disposers.push(options.mcp.registerServer(name, config));
40
+ const prepared = cursor ? prepareCursorServer(name, config, options.pluginRoot, tally, warnings) : config;
41
+ if (prepared === undefined)
42
+ continue; // skipped with reason/warning already recorded
43
+ disposers.push(options.mcp.registerServer(name, prepared));
34
44
  tally.addLoaded();
35
45
  }
36
- return { disposers, tally };
46
+ return { disposers, tally, warnings };
47
+ }
48
+ /**
49
+ * Cursor-dialect server preparation (plan §3.2): expand `${CURSOR_PLUGIN_ROOT}`
50
+ * to the plugin root, then require every remaining `${VAR}` to resolve against
51
+ * the environment — an unresolved reference fails THAT server with a warning
52
+ * naming the variable (never the whole plugin, never silent empty expansion).
53
+ * Returns `undefined` when the server was skipped.
54
+ */
55
+ function prepareCursorServer(name, config, pluginRoot, tally, warnings) {
56
+ const substituted = JSON.parse(JSON.stringify(config).split('${CURSOR_PLUGIN_ROOT}').join(pluginRoot));
57
+ const missing = new Set();
58
+ collectUnresolvedVars(substituted, missing);
59
+ if (missing.size > 0) {
60
+ const reason = `skipped mcp server "${name}": environment variable${missing.size === 1 ? '' : 's'} "${[...missing].join('", "')}" not set`;
61
+ tally.addSkipped(reason);
62
+ warnings.push(reason);
63
+ return undefined;
64
+ }
65
+ return substituteEnv(substituted);
66
+ }
67
+ /** Interpolate resolved `${VAR}` / `${VAR:-default}` references into string values. */
68
+ function substituteEnv(node) {
69
+ if (typeof node === 'string') {
70
+ return node.replace(/\$\{([A-Za-z_][A-Za-z0-9_]*)(?::-([^}]*))?\}/g, (match, name, fallback) => {
71
+ const value = process.env[name];
72
+ if (value !== undefined && value !== '')
73
+ return value;
74
+ if (fallback !== undefined)
75
+ return fallback;
76
+ return match; // unreachable for validated configs; keep the reference visible
77
+ });
78
+ }
79
+ if (Array.isArray(node))
80
+ return node.map(substituteEnv);
81
+ if (typeof node === 'object' && node !== null) {
82
+ return Object.fromEntries(Object.entries(node).map(([key, value]) => [key, substituteEnv(value)]));
83
+ }
84
+ return node;
85
+ }
86
+ /** Collect `${VAR}` references with no value in the environment (fallbacks count as resolved). */
87
+ function collectUnresolvedVars(node, missing) {
88
+ if (typeof node === 'string') {
89
+ for (const match of node.matchAll(/\$\{([A-Za-z_][A-Za-z0-9_]*)(?::-[^}]*)?\}/g)) {
90
+ const variable = match[1];
91
+ if (match[2] === undefined && process.env[variable] === undefined)
92
+ missing.add(variable);
93
+ }
94
+ return;
95
+ }
96
+ if (Array.isArray(node)) {
97
+ for (const item of node)
98
+ collectUnresolvedVars(item, missing);
99
+ return;
100
+ }
101
+ if (typeof node === 'object' && node !== null) {
102
+ for (const value of Object.values(node))
103
+ collectUnresolvedVars(value, missing);
104
+ }
105
+ }
106
+ /** Whether the manifest stayed silent about mcpServers entirely. */
107
+ function manifestDeclaresNothing(manifest) {
108
+ return manifest.mcpServersPath === undefined && manifest.mcpServersPaths === undefined
109
+ && Object.keys(manifest.mcpServers).length === 0;
37
110
  }
38
111
  /** Combine inline and file-backed MCP server definitions. */
39
112
  function collectServers(pluginRoot, manifest) {
@@ -42,6 +115,9 @@ function collectServers(pluginRoot, manifest) {
42
115
  const path = resolve(pluginRoot, manifest.mcpServersPath);
43
116
  Object.assign(servers, readMcpJson(path));
44
117
  }
118
+ for (const path of manifest.mcpServersPaths ?? []) {
119
+ Object.assign(servers, readMcpJson(resolve(pluginRoot, path)));
120
+ }
45
121
  for (const [name, config] of Object.entries(manifest.mcpServers)) {
46
122
  servers[name] = config;
47
123
  }
package/lib/mcp.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAuB3C;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,OAA+B;IAC7D,MAAM,KAAK,GAAG,IAAI,cAAc,CAAC,YAAY,CAAC,CAAA;IAC9C,MAAM,SAAS,GAAmB,EAAE,CAAA;IACpC,IAAI,OAAO,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;QAC9B,KAAK,CAAC,UAAU,CAAC,+BAA+B,CAAC,CAAA;QACjD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAA;IAC7B,CAAC;IACD,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAA;IACpE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IACvC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,KAAK,CAAC,UAAU,CAAC,gCAAgC,CAAC,CAAA;QAClD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAA;IAC7B,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACrC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAA;QACxD,KAAK,CAAC,SAAS,EAAE,CAAA;IACnB,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAA;AAC7B,CAAC;AAED,6DAA6D;AAC7D,SAAS,cAAc,CAAC,UAAkB,EAAE,QAA0B;IACpE,MAAM,OAAO,GAA4C,EAAE,CAAA;IAC3D,IAAI,QAAQ,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAA;QACzD,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,CAAA;IAC3C,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC,GAAG,MAAiC,CAAA;IACnD,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,gFAAgF;AAChF,SAAS,WAAW,CAAC,IAAY;IAC/B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAA4B,CAAA;QAChF,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,CAAA;QACpC,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/E,OAAO,OAAkD,CAAA;QAC3D,CAAC;QACD,OAAO,EAAE,CAAA;IACX,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}
@@ -9,18 +9,32 @@
9
9
  *
10
10
  * @module
11
11
  */
12
+ import type { PluginFlavor } from './types.ts';
12
13
  /** Resolved raw manifest plus the marketplace replace-default flag. */
13
14
  export interface ResolvedPluginManifest {
14
15
  /** JSON object to feed `parsePluginManifest`. */
15
16
  readonly raw: unknown;
16
17
  /** When true, listed `skills` replace the default `skills/` scan. */
17
18
  readonly skillsReplaceDefault: boolean;
19
+ /** Which dialect won the candidate lookup (plan §3.1). */
20
+ readonly flavor: PluginFlavor;
21
+ /** Resolution warnings (e.g. dual-manifest precedence); travels on the parsed manifest. */
22
+ readonly warnings: readonly string[];
18
23
  }
19
24
  /**
20
25
  * Locate and return the raw manifest for one plugin root.
26
+ *
27
+ * Preference (plan §3.1): `.claude-plugin/plugin.json`, then
28
+ * `.cursor-plugin/plugin.json`, then top-level `plugin.json`, then a matching
29
+ * `marketplace.json` overlay (requires `nameHint`), then a synthesized
30
+ * `{ name }`. When both nested manifests exist the CC manifest wins and a
31
+ * precedence warning is recorded. A marketplace file with no matching entry is
32
+ * a hard miss — never fall through to synthesis (that would load the whole
33
+ * skills repo).
34
+ *
21
35
  * @param root - plugin root directory.
22
36
  * @param nameHint - installed plugin name (no `@marketplace`), for overlays.
23
- * @returns the raw JSON and whether skills should replace the default dir.
37
+ * @returns the raw JSON, flavor, and resolution warnings.
24
38
  * @throws when a present file is unreadable/invalid, or a marketplace overlay misses `nameHint`.
25
39
  */
26
40
  export declare function resolvePluginManifest(root: string, nameHint?: string): ResolvedPluginManifest;
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-manifest.d.ts","sourceRoot":"","sources":["../src/resolve-manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AASH,uEAAuE;AACvE,MAAM,WAAW,sBAAsB;IACrC,iDAAiD;IACjD,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAA;IACrB,qEAAqE;IACrE,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAA;CACvC;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,sBAAsB,CAS7F"}
1
+ {"version":3,"file":"resolve-manifest.d.ts","sourceRoot":"","sources":["../src/resolve-manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAUH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C,uEAAuE;AACvE,MAAM,WAAW,sBAAsB;IACrC,iDAAiD;IACjD,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAA;IACrB,qEAAqE;IACrE,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAA;IACtC,0DAA0D;IAC1D,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAA;IAC7B,2FAA2F;IAC3F,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;CACrC;AAOD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,sBAAsB,CAwB7F"}
@@ -11,28 +11,53 @@
11
11
  */
12
12
  import { readFileSync } from 'node:fs';
13
13
  import { basename, join, resolve } from 'node:path';
14
- import { NESTED_MANIFEST, TOP_LEVEL_MANIFEST } from "./discovery.js";
15
- /** Marketplace overlay lives next to the nested plugin.json. */
16
- const MARKETPLACE_FILE = join('.claude-plugin', 'marketplace.json');
14
+ import { CURSOR_MANIFEST as CURSOR_DIR, MANIFEST_CANDIDATE_DIRS, MARKETPLACE_CANDIDATE_FILES, TOP_LEVEL_MANIFEST, } from "./discovery.js";
15
+ /** Flavor of the winning candidate path: cc dirs/top-level → 'cc', cursor dir → 'cursor'. */
16
+ function flavorOf(manifestPath) {
17
+ return manifestPath.includes(CURSOR_DIR) ? 'cursor' : 'cc';
18
+ }
17
19
  /**
18
20
  * Locate and return the raw manifest for one plugin root.
21
+ *
22
+ * Preference (plan §3.1): `.claude-plugin/plugin.json`, then
23
+ * `.cursor-plugin/plugin.json`, then top-level `plugin.json`, then a matching
24
+ * `marketplace.json` overlay (requires `nameHint`), then a synthesized
25
+ * `{ name }`. When both nested manifests exist the CC manifest wins and a
26
+ * precedence warning is recorded. A marketplace file with no matching entry is
27
+ * a hard miss — never fall through to synthesis (that would load the whole
28
+ * skills repo).
29
+ *
19
30
  * @param root - plugin root directory.
20
31
  * @param nameHint - installed plugin name (no `@marketplace`), for overlays.
21
- * @returns the raw JSON and whether skills should replace the default dir.
32
+ * @returns the raw JSON, flavor, and resolution warnings.
22
33
  * @throws when a present file is unreadable/invalid, or a marketplace overlay misses `nameHint`.
23
34
  */
24
35
  export function resolvePluginManifest(root, nameHint) {
25
- const nested = readJsonIfPresent(join(root, NESTED_MANIFEST), root);
26
- if (nested !== undefined)
27
- return { raw: nested, skillsReplaceDefault: false };
36
+ const candidates = MANIFEST_CANDIDATE_DIRS.map(dir => join(root, dir, TOP_LEVEL_MANIFEST));
37
+ const items = candidates.map(path => ({ path, raw: readJsonIfPresent(path, root) }));
38
+ const winner = items.find(item => item.raw !== undefined);
39
+ if (winner !== undefined) {
40
+ return {
41
+ raw: winner.raw,
42
+ skillsReplaceDefault: false,
43
+ flavor: flavorOf(winner.path),
44
+ // S2 promotes this carrier into the first-class report warnings array.
45
+ warnings: items.filter(item => item.raw !== undefined).length > 1
46
+ ? ['cursor manifest ignored: cc manifest takes precedence']
47
+ : [],
48
+ };
49
+ }
28
50
  const top = readJsonIfPresent(join(root, TOP_LEVEL_MANIFEST), root);
29
51
  if (top !== undefined)
30
- return { raw: top, skillsReplaceDefault: false };
31
- const market = readJsonIfPresent(join(root, MARKETPLACE_FILE), root);
32
- if (market !== undefined)
33
- return overlayFromMarketplace(market, root, nameHint);
52
+ return { raw: top, skillsReplaceDefault: false, flavor: 'cc', warnings: [] };
53
+ for (const file of MARKETPLACE_CANDIDATE_FILES) {
54
+ const market = readJsonIfPresent(join(root, file), root);
55
+ if (market === undefined)
56
+ continue;
57
+ return { ...overlayFromMarketplace(market, root, nameHint), flavor: 'cc', warnings: [] };
58
+ }
34
59
  const name = nameHint ?? basename(resolve(root));
35
- return { raw: { name }, skillsReplaceDefault: false };
60
+ return { raw: { name }, skillsReplaceDefault: false, flavor: 'cc', warnings: [] };
36
61
  }
37
62
  /** Marketplace.json present: match `nameHint` or fail; never synthesize. */
38
63
  function overlayFromMarketplace(raw, root, nameHint) {
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-manifest.js","sourceRoot":"","sources":["../src/resolve-manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnD,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAEpE,gEAAgE;AAChE,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAA;AAUnE;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAY,EAAE,QAAiB;IACnE,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,IAAI,CAAC,CAAA;IACnE,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAA;IAC7E,MAAM,GAAG,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,kBAAkB,CAAC,EAAE,IAAI,CAAC,CAAA;IACnE,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAA;IACvE,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,gBAAgB,CAAC,EAAE,IAAI,CAAC,CAAA;IACpE,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,sBAAsB,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAA;IAC/E,MAAM,IAAI,GAAG,QAAQ,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;IAChD,OAAO,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAA;AACvD,CAAC;AAED,4EAA4E;AAC5E,SAAS,sBAAsB,CAAC,GAAY,EAAE,IAAY,EAAE,QAA4B;IACtF,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,6DAA6D,CAAC,CAAA;IAC9F,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,yCAAyC,CAAC,CAAA;IAC1E,CAAC;IACD,MAAM,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAA;IACtF,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,2CAA2C,QAAQ,GAAG,CAAC,CAAA;IACvF,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,yBAAyB,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAA;AACxF,CAAC;AAED,6EAA6E;AAC7E,SAAS,yBAAyB,CAAC,KAA8B,EAAE,QAAgB;IACjF,MAAM,IAAI,GAAG,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAA;IACrG,MAAM,GAAG,GAA4B,EAAE,IAAI,EAAE,CAAA;IAC7C,KAAK,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,CAAU,EAAE,CAAC;QACnI,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,SAAS;YAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAA;IACrD,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,gFAAgF;AAChF,SAAS,iBAAiB,CAAC,IAAY,EAAE,IAAY;IACnD,IAAI,IAAY,CAAA;IAChB,IAAI,CAAC;QACH,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IACnC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO,SAAS,CAAA;QACrC,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,oBAAoB,IAAI,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAC7E,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,CAAA;IACpC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,qBAAqB,IAAI,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAC9E,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,IAAI,KAAK,IAAK,KAA2B,CAAC,IAAI,KAAK,QAAQ,CAAA;AACzH,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAC7E,CAAC"}
1
+ {"version":3,"file":"resolve-manifest.js","sourceRoot":"","sources":["../src/resolve-manifest.ts"],"names":[],"mappings":"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"}
package/lib/rules.d.ts ADDED
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Mount a Cursor plugin's rules (`rules/*.mdc`).
3
+ *
4
+ * Discovers `.mdc` rule files from the default `rules/` directory and any
5
+ * manifest-declared `rules` paths (append-default-dir convention, plan §3.3;
6
+ * S2 glob policy: `dir/**` walks, other metacharacters skip with a warning),
7
+ * parses typed frontmatter (`alwaysApply` boolean, `globs` inline or block
8
+ * YAML list), and merges the entries through the optional `rules` guest seam
9
+ * with copy-on-write disposal mirroring the hooks seam. A missing seam or a
10
+ * malformed rule file tallies skipped — never a load failure, never a throw.
11
+ *
12
+ * @module
13
+ */
14
+ import type { CcPluginManifest } from './types.ts';
15
+ import { ComponentTally, type RulesSeam } from './seams.ts';
16
+ /** The rules seam: accepts a plugin's parsed rule entries. */
17
+ export { type RulesSeam } from './seams.ts';
18
+ /** Options for mounting one plugin's rules. */
19
+ export interface MountRulesOptions {
20
+ /** The plugin root directory; the default `rules/` dir resolves against it. */
21
+ readonly pluginRoot: string;
22
+ /** The parsed manifest; `rules` paths (cursor default dir included) drive the mount. */
23
+ readonly manifest: CcPluginManifest;
24
+ /** The rules seam (probed; `undefined` to skip rules). */
25
+ readonly rules: RulesSeam | undefined;
26
+ }
27
+ /**
28
+ * Discover and merge a plugin's rules through the optional seam.
29
+ * @param options - plugin root, manifest, and the rules seam.
30
+ * @returns mounted disposers and per-component counts.
31
+ */
32
+ export declare function mountRules(options: MountRulesOptions): Promise<{
33
+ disposers: (() => void)[];
34
+ tally: ComponentTally;
35
+ warnings: string[];
36
+ }>;
37
+ //# sourceMappingURL=rules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../src/rules.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,KAAK,EAAE,gBAAgB,EAAa,MAAM,YAAY,CAAA;AAC7D,OAAO,EAAE,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAA;AAG3D,8DAA8D;AAC9D,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAA;AAE3C,+CAA+C;AAC/C,MAAM,WAAW,iBAAiB;IAChC,+EAA+E;IAC/E,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,wFAAwF;IACxF,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAA;IACnC,0DAA0D;IAC1D,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAAA;CACtC;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC;IAAE,SAAS,EAAE,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;IAAC,KAAK,EAAE,cAAc,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAoD9I"}
package/lib/rules.js ADDED
@@ -0,0 +1,171 @@
1
+ /**
2
+ * Mount a Cursor plugin's rules (`rules/*.mdc`).
3
+ *
4
+ * Discovers `.mdc` rule files from the default `rules/` directory and any
5
+ * manifest-declared `rules` paths (append-default-dir convention, plan §3.3;
6
+ * S2 glob policy: `dir/**` walks, other metacharacters skip with a warning),
7
+ * parses typed frontmatter (`alwaysApply` boolean, `globs` inline or block
8
+ * YAML list), and merges the entries through the optional `rules` guest seam
9
+ * with copy-on-write disposal mirroring the hooks seam. A missing seam or a
10
+ * malformed rule file tallies skipped — never a load failure, never a throw.
11
+ *
12
+ * @module
13
+ */
14
+ import { readFile, readdir } from 'node:fs/promises';
15
+ import { join, relative, resolve } from 'node:path';
16
+ import { parseCcFrontmatterDocument } from '@dsh-cc/skill-loader';
17
+ import { ComponentTally } from "./seams.js";
18
+ import { globPathKind } from "./manifest.js";
19
+ /**
20
+ * Discover and merge a plugin's rules through the optional seam.
21
+ * @param options - plugin root, manifest, and the rules seam.
22
+ * @returns mounted disposers and per-component counts.
23
+ */
24
+ export async function mountRules(options) {
25
+ const tally = new ComponentTally('rules');
26
+ const disposers = [];
27
+ const warnings = [];
28
+ // A plugin declaring nothing (cc flavor never declares rules) mounts no
29
+ // rules component at all — zero-change behavior for cc plugins.
30
+ if (options.manifest.rules.length === 0) {
31
+ return { disposers, tally, warnings };
32
+ }
33
+ if (options.rules === undefined) {
34
+ for (const path of options.manifest.rules) {
35
+ tally.addSkipped(`skipped rule path "${path}": rules seam "rules" is not mounted`);
36
+ }
37
+ return { disposers, tally, warnings };
38
+ }
39
+ const files = [];
40
+ for (const declared of options.manifest.rules) {
41
+ // Append-default-dir convention (agents precedent): a declared path that
42
+ // does not already live under `rules/` is read relative to the default dir.
43
+ const relative = declared.startsWith('rules/') || declared === 'rules' ? declared : `rules/${declared}`;
44
+ // Glob policy (plan §3.4): `dir/**` walks recursively; any other glob
45
+ // metacharacter is skipped with a warning, never expanded.
46
+ const kind = globPathKind(relative);
47
+ if (kind === 'unsupported') {
48
+ const reason = `skipped rules entry "${declared}": glob patterns other than a trailing "/**" are not expanded`;
49
+ tally.addSkipped(reason);
50
+ warnings.push(reason);
51
+ continue;
52
+ }
53
+ const before = files.length;
54
+ const resolved = resolve(options.pluginRoot, kind === 'recursive' ? relative.slice(0, -3) : relative);
55
+ await collectRuleFiles(resolved, files);
56
+ if (files.length === before)
57
+ tally.addSkipped(`no rule files found under "${declared}"`);
58
+ }
59
+ if (files.length === 0)
60
+ return { disposers, tally, warnings };
61
+ const entries = [];
62
+ for (const file of files) {
63
+ const entry = await loadRuleFile(file, tally, warnings);
64
+ if (entry !== undefined) {
65
+ entries.push({
66
+ ...entry,
67
+ // Paths on the seam are plugin-root-relative (RuleEntry contract).
68
+ path: relative(options.pluginRoot, file),
69
+ });
70
+ }
71
+ }
72
+ // Merge even when every file was malformed: the seam call is the mount
73
+ // signal (an empty list), matching the never-throw hooks seam behavior.
74
+ // The report tallies loaded rule PATHS (one per parsed entry), per S4.
75
+ for (const _entry of entries)
76
+ tally.addLoaded();
77
+ disposers.push(options.rules.mergePluginRules(options.manifest.name, entries));
78
+ return { disposers, tally, warnings };
79
+ }
80
+ /** Collect `.mdc` files: a `.mdc` path is one file, anything else walks recursively. */
81
+ async function collectRuleFiles(path, found) {
82
+ if (path.endsWith('.mdc')) {
83
+ found.push(path);
84
+ return;
85
+ }
86
+ await walkMdc(path, found);
87
+ }
88
+ /** Depth-first walk collecting every `.mdc` file under `dir` (absent dir is fine). */
89
+ async function walkMdc(dir, found) {
90
+ let entries;
91
+ try {
92
+ entries = await readdir(dir, { withFileTypes: true });
93
+ }
94
+ catch {
95
+ return;
96
+ }
97
+ for (const entry of entries) {
98
+ const child = join(dir, entry.name);
99
+ if (entry.isDirectory())
100
+ await walkMdc(child, found);
101
+ else if (entry.isFile() && entry.name.endsWith('.mdc'))
102
+ found.push(child);
103
+ }
104
+ }
105
+ /** Parse one `.mdc` file's typed frontmatter; malformed files skip with a reason. */
106
+ async function loadRuleFile(file, tally, warnings) {
107
+ const path = file;
108
+ let raw;
109
+ try {
110
+ raw = await readFile(file, 'utf8');
111
+ }
112
+ catch {
113
+ const reason = `skipped rule "${path}": file could not be read`;
114
+ tally.addSkipped(reason);
115
+ warnings.push(reason);
116
+ return undefined;
117
+ }
118
+ const document = parseCcFrontmatterDocument(raw);
119
+ if (document === undefined) {
120
+ const reason = `skipped rule "${path}": frontmatter could not be parsed`;
121
+ tally.addSkipped(reason);
122
+ warnings.push(reason);
123
+ return undefined;
124
+ }
125
+ const typed = typedFields(document.data);
126
+ if (typeof typed === 'string') {
127
+ const reason = `skipped rule "${path}": ${typed}`;
128
+ tally.addSkipped(reason);
129
+ warnings.push(reason);
130
+ return undefined;
131
+ }
132
+ return {
133
+ path: file,
134
+ description: typed.description,
135
+ alwaysApply: typed.alwaysApply,
136
+ globs: typed.globs,
137
+ body: document.body,
138
+ };
139
+ }
140
+ /** Coerce the typed rule fields; a string return is a skip reason. */
141
+ function typedFields(data) {
142
+ let description;
143
+ if (data.description !== undefined) {
144
+ if (typeof data.description !== 'string')
145
+ return 'frontmatter field "description" must be a string';
146
+ description = data.description;
147
+ }
148
+ let alwaysApply = false;
149
+ if (data.alwaysApply !== undefined) {
150
+ const raw = data.alwaysApply;
151
+ if (typeof raw === 'boolean')
152
+ alwaysApply = raw;
153
+ else if (raw === 'true')
154
+ alwaysApply = true;
155
+ else if (raw === 'false')
156
+ alwaysApply = false;
157
+ else
158
+ return 'frontmatter field "alwaysApply" must be a boolean';
159
+ }
160
+ let globs = [];
161
+ if (data.globs !== undefined) {
162
+ const raw = data.globs;
163
+ const list = Array.isArray(raw) ? raw : typeof raw === 'string' ? raw.split(',') : null;
164
+ if (list === null || list.some(item => typeof item !== 'string')) {
165
+ return 'frontmatter field "globs" must be a string or a list of strings';
166
+ }
167
+ globs = list.map(item => item.trim()).filter(item => item.length > 0);
168
+ }
169
+ return { description, alwaysApply, globs };
170
+ }
171
+ //# sourceMappingURL=rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules.js","sourceRoot":"","sources":["../src/rules.ts"],"names":[],"mappings":"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"}
package/lib/seams.d.ts CHANGED
@@ -10,7 +10,7 @@
10
10
  *
11
11
  * @module
12
12
  */
13
- import type { ComponentKind, ComponentResult } from './types.ts';
13
+ import type { ComponentKind, ComponentResult, RuleEntry } from './types.ts';
14
14
  /** A guest MCP seam: registers one named server for tool discovery. */
15
15
  export interface McpSeam {
16
16
  /**
@@ -35,6 +35,16 @@ export interface HooksSeam {
35
35
  */
36
36
  mergePluginHooks(pluginName: string, config: unknown, pluginRoot?: string): () => void;
37
37
  }
38
+ /** A guest rules seam: merges a plugin's parsed `.mdc` rule entries. */
39
+ export interface RulesSeam {
40
+ /**
41
+ * Merge a plugin's rules into the host's rule set.
42
+ * @param pluginName - the plugin that owns the rules, for namespacing.
43
+ * @param entries - the parsed rule entries (typed frontmatter + body).
44
+ * @returns the exact disposer that removes the plugin's contributions.
45
+ */
46
+ mergePluginRules(pluginName: string, entries: readonly RuleEntry[]): () => void;
47
+ }
38
48
  /** Probe a guest seam by key, returning `undefined` when the host lacks it. */
39
49
  export declare function probe<X>(value: X | undefined): X | undefined;
40
50
  /** Accumulates loaded/skipped/failed counts and reasons for one component. */
@@ -1 +1 @@
1
- {"version":3,"file":"seams.d.ts","sourceRoot":"","sources":["../src/seams.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEhE,uEAAuE;AACvE,MAAM,WAAW,OAAO;IACtB;;;;;;OAMG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,IAAI,CAAA;CAC1E;AAED,gEAAgE;AAChE,MAAM,WAAW,SAAS;IACxB;;;;;;;;OAQG;IACH,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,IAAI,CAAA;CACvF;AAED,+EAA+E;AAC/E,wBAAgB,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,CAE5D;AAED,8EAA8E;AAC9E,qBAAa,cAAc;IAUb,OAAO,CAAC,QAAQ,CAAC,IAAI;IATjC,OAAO,CAAC,MAAM,CAAI;IAClB,OAAO,CAAC,OAAO,CAAI;IACnB,OAAO,CAAC,MAAM,CAAI;IAClB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IAEvC;;;OAGG;gBAC0B,IAAI,EAAE,aAAa;IAEhD,uCAAuC;IACvC,SAAS,IAAI,IAAI;IAIjB,wDAAwD;IACxD,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAKhC,uDAAuD;IACvD,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK/B,4CAA4C;IAC5C,MAAM,IAAI,eAAe;CAS1B"}
1
+ {"version":3,"file":"seams.d.ts","sourceRoot":"","sources":["../src/seams.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAE3E,uEAAuE;AACvE,MAAM,WAAW,OAAO;IACtB;;;;;;OAMG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,IAAI,CAAA;CAC1E;AAED,gEAAgE;AAChE,MAAM,WAAW,SAAS;IACxB;;;;;;;;OAQG;IACH,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,IAAI,CAAA;CACvF;AAED,wEAAwE;AACxE,MAAM,WAAW,SAAS;IACxB;;;;;OAKG;IACH,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,SAAS,EAAE,GAAG,MAAM,IAAI,CAAA;CAChF;AAED,+EAA+E;AAC/E,wBAAgB,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,CAE5D;AAED,8EAA8E;AAC9E,qBAAa,cAAc;IAUb,OAAO,CAAC,QAAQ,CAAC,IAAI;IATjC,OAAO,CAAC,MAAM,CAAI;IAClB,OAAO,CAAC,OAAO,CAAI;IACnB,OAAO,CAAC,MAAM,CAAI;IAClB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IAEvC;;;OAGG;gBAC0B,IAAI,EAAE,aAAa;IAEhD,uCAAuC;IACvC,SAAS,IAAI,IAAI;IAIjB,wDAAwD;IACxD,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAKhC,uDAAuD;IACvD,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK/B,4CAA4C;IAC5C,MAAM,IAAI,eAAe;CAS1B"}
package/lib/seams.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"seams.js","sourceRoot":"","sources":["../src/seams.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AA8BH,+EAA+E;AAC/E,MAAM,UAAU,KAAK,CAAI,KAAoB;IAC3C,OAAO,KAAK,CAAA;AACd,CAAC;AAED,8EAA8E;AAC9E,MAAM,OAAO,cAAc;IAUI;IATrB,MAAM,GAAG,CAAC,CAAA;IACV,OAAO,GAAG,CAAC,CAAA;IACX,MAAM,GAAG,CAAC,CAAA;IACD,OAAO,GAAa,EAAE,CAAA;IAEvC;;;OAGG;IACH,YAA6B,IAAmB;QAAnB,SAAI,GAAJ,IAAI,CAAe;IAAG,CAAC;IAEpD,uCAAuC;IACvC,SAAS;QACP,IAAI,CAAC,MAAM,IAAI,CAAC,CAAA;IAClB,CAAC;IAED,wDAAwD;IACxD,UAAU,CAAC,MAAc;QACvB,IAAI,CAAC,OAAO,IAAI,CAAC,CAAA;QACjB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAC3B,CAAC;IAED,uDAAuD;IACvD,SAAS,CAAC,MAAc;QACtB,IAAI,CAAC,MAAM,IAAI,CAAC,CAAA;QAChB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAC3B,CAAC;IAED,4CAA4C;IAC5C,MAAM;QACJ,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAA;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"seams.js","sourceRoot":"","sources":["../src/seams.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAyCH,+EAA+E;AAC/E,MAAM,UAAU,KAAK,CAAI,KAAoB;IAC3C,OAAO,KAAK,CAAA;AACd,CAAC;AAED,8EAA8E;AAC9E,MAAM,OAAO,cAAc;IAUI;IATrB,MAAM,GAAG,CAAC,CAAA;IACV,OAAO,GAAG,CAAC,CAAA;IACX,MAAM,GAAG,CAAC,CAAA;IACD,OAAO,GAAa,EAAE,CAAA;IAEvC;;;OAGG;IACH,YAA6B,IAAmB;QAAnB,SAAI,GAAJ,IAAI,CAAe;IAAG,CAAC;IAEpD,uCAAuC;IACvC,SAAS;QACP,IAAI,CAAC,MAAM,IAAI,CAAC,CAAA;IAClB,CAAC;IAED,wDAAwD;IACxD,UAAU,CAAC,MAAc;QACvB,IAAI,CAAC,OAAO,IAAI,CAAC,CAAA;QACjB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAC3B,CAAC;IAED,uDAAuD;IACvD,SAAS,CAAC,MAAc;QACtB,IAAI,CAAC,MAAM,IAAI,CAAC,CAAA;QAChB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAC3B,CAAC;IAED,4CAA4C;IAC5C,MAAM;QACJ,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAA;IACH,CAAC;CACF"}
package/lib/skills.d.ts CHANGED
@@ -45,5 +45,6 @@ export interface MountSkillsOptions {
45
45
  export declare function mountSkills(options: MountSkillsOptions): Promise<{
46
46
  disposers: (() => void)[];
47
47
  tally: ComponentTally;
48
+ warnings: string[];
48
49
  }>;
49
50
  //# sourceMappingURL=skills.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../src/skills.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAQlD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAG3C,uEAAuE;AACvE,eAAO,MAAM,mBAAmB,WAAW,CAAA;AAS3C,wEAAwE;AACxE,MAAM,WAAW,UAAU;IACzB;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,IAAI,CAAA;CACrC;AAED,gDAAgD;AAChD,MAAM,WAAW,kBAAkB;IACjC,2EAA2E;IAC3E,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAA;IACrB,yEAAyE;IACzE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,uEAAuE;IACvE,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAA;IACnC,oEAAoE;IACpE,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,CAAA;IACvC,mEAAmE;IACnE,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAA;CACnC;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC;IAAE,SAAS,EAAE,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;IAAC,KAAK,EAAE,cAAc,CAAA;CAAE,CAAC,CA+C5H"}
1
+ {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../src/skills.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAQlD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAI3C,uEAAuE;AACvE,eAAO,MAAM,mBAAmB,WAAW,CAAA;AAS3C,wEAAwE;AACxE,MAAM,WAAW,UAAU;IACzB;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,IAAI,CAAA;CACrC;AAED,gDAAgD;AAChD,MAAM,WAAW,kBAAkB;IACjC,2EAA2E;IAC3E,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAA;IACrB,yEAAyE;IACzE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,uEAAuE;IACvE,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAA;IACnC,oEAAoE;IACpE,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,CAAA;IACvC,mEAAmE;IACnE,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAA;CACnC;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC;IAAE,SAAS,EAAE,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;IAAC,KAAK,EAAE,cAAc,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAgDhJ"}