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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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 +58 -14
  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
@@ -42,8 +42,28 @@ export interface DiscoverCcPluginRootsOptions {
42
42
  }
43
43
  /** Nested Claude Code manifest path, preferred over a top-level `plugin.json`. */
44
44
  export declare const NESTED_MANIFEST: string;
45
+ /** Cursor dialect nested manifest path (plan §3.1), between cc-nested and legacy top-level. */
46
+ export declare const CURSOR_MANIFEST: string;
45
47
  /** Legacy / fixture manifest path at the plugin root. */
46
48
  export declare const TOP_LEVEL_MANIFEST = "plugin.json";
49
+ /**
50
+ * Ordered manifest candidate dirs (plan §3.1): first existing hit wins.
51
+ * CC dialect first so existing behavior is stable when both dialects exist.
52
+ */
53
+ export declare const MANIFEST_CANDIDATE_DIRS: readonly string[];
54
+ /** Ordered marketplace overlay files (plan §3.1), symmetric with the manifest dirs. */
55
+ export declare const MARKETPLACE_CANDIDATE_FILES: readonly string[];
56
+ /** Ordered absolute manifest candidate paths for one plugin root (first hit wins). */
57
+ export declare function findPluginManifestPaths(root: string): string[];
58
+ /** First-hit winning manifest path for one plugin root, if the root is a plugin. */
59
+ export declare function findPluginManifestPath(root: string): string | undefined;
60
+ /**
61
+ * First-hit marketplace manifest path for a marketplace repo root (plan §3.1
62
+ * symmetric overlay: claude first, then cursor), or undefined when neither
63
+ * exists. Shared by the loader overlay and the plugin-manager reads so the
64
+ * dialect selection lives in exactly one place.
65
+ */
66
+ export declare function findMarketplaceManifestPath(root: string): string | undefined;
47
67
  /**
48
68
  * Discover plugin roots for the glue to mount.
49
69
  * @param options - explicit dirs or the Claude-home / cwd pair for the default path.
@@ -1 +1 @@
1
- {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAQH,mFAAmF;AACnF,MAAM,WAAW,kBAAkB;IACjC,iFAAiF;IACjF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,4EAA4E;IAC5E,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAC1B;AAED,sCAAsC;AACtC,MAAM,WAAW,4BAA4B;IAC3C;;;OAGG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAA;IAC9C,gIAAgI;IAChI,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,sFAAsF;IACtF,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;IACrB,8EAA8E;IAC9E,QAAQ,CAAC,GAAG,CAAC,EAAE;QAAE,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAA;CAC5E;AAED,kFAAkF;AAClF,eAAO,MAAM,eAAe,QAAwC,CAAA;AAEpE,yDAAyD;AACzD,eAAO,MAAM,kBAAkB,gBAAgB,CAAA;AAE/C;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,4BAAiC,GAAG,kBAAkB,EAAE,CAQtG;AAED,gHAAgH;AAChH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAOtD;AAOD,0DAA0D;AAC1D,wBAAgB,iBAAiB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAK3D"}
1
+ {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAQH,mFAAmF;AACnF,MAAM,WAAW,kBAAkB;IACjC,iFAAiF;IACjF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,4EAA4E;IAC5E,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAC1B;AAED,sCAAsC;AACtC,MAAM,WAAW,4BAA4B;IAC3C;;;OAGG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAA;IAC9C,gIAAgI;IAChI,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,sFAAsF;IACtF,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;IACrB,8EAA8E;IAC9E,QAAQ,CAAC,GAAG,CAAC,EAAE;QAAE,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAA;CAC5E;AAED,kFAAkF;AAClF,eAAO,MAAM,eAAe,QAAwC,CAAA;AAEpE,+FAA+F;AAC/F,eAAO,MAAM,eAAe,QAAwC,CAAA;AAEpE,yDAAyD;AACzD,eAAO,MAAM,kBAAkB,gBAAgB,CAAA;AAE/C;;;GAGG;AACH,eAAO,MAAM,uBAAuB,EAAE,SAAS,MAAM,EAAyC,CAAA;AAE9F,uFAAuF;AACvF,eAAO,MAAM,2BAA2B,EAAE,SAAS,MAAM,EAGxD,CAAA;AAED,sFAAsF;AACtF,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAI9D;AAED,oFAAoF;AACpF,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEvE;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAM5E;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,4BAAiC,GAAG,kBAAkB,EAAE,CAQtG;AAED,gHAAgH;AAChH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAOtD;AAOD,0DAA0D;AAC1D,wBAAgB,iBAAiB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAK3D"}
package/lib/discovery.js CHANGED
@@ -17,8 +17,44 @@ import { resolveDshHome } from '@deepseek-ai/dsh-home-paths';
17
17
  import { resolveLocalSettingsDir } from '@dsh-cc/settings-cascade/local-root';
18
18
  /** Nested Claude Code manifest path, preferred over a top-level `plugin.json`. */
19
19
  export const NESTED_MANIFEST = join('.claude-plugin', 'plugin.json');
20
+ /** Cursor dialect nested manifest path (plan §3.1), between cc-nested and legacy top-level. */
21
+ export const CURSOR_MANIFEST = join('.cursor-plugin', 'plugin.json');
20
22
  /** Legacy / fixture manifest path at the plugin root. */
21
23
  export const TOP_LEVEL_MANIFEST = 'plugin.json';
24
+ /**
25
+ * Ordered manifest candidate dirs (plan §3.1): first existing hit wins.
26
+ * CC dialect first so existing behavior is stable when both dialects exist.
27
+ */
28
+ export const MANIFEST_CANDIDATE_DIRS = ['.claude-plugin', '.cursor-plugin'];
29
+ /** Ordered marketplace overlay files (plan §3.1), symmetric with the manifest dirs. */
30
+ export const MARKETPLACE_CANDIDATE_FILES = [
31
+ join('.claude-plugin', 'marketplace.json'),
32
+ join('.cursor-plugin', 'marketplace.json'),
33
+ ];
34
+ /** Ordered absolute manifest candidate paths for one plugin root (first hit wins). */
35
+ export function findPluginManifestPaths(root) {
36
+ const candidates = MANIFEST_CANDIDATE_DIRS.map(dir => join(root, dir, TOP_LEVEL_MANIFEST));
37
+ candidates.push(join(root, TOP_LEVEL_MANIFEST));
38
+ return candidates.filter(path => existsSync(path));
39
+ }
40
+ /** First-hit winning manifest path for one plugin root, if the root is a plugin. */
41
+ export function findPluginManifestPath(root) {
42
+ return findPluginManifestPaths(root)[0];
43
+ }
44
+ /**
45
+ * First-hit marketplace manifest path for a marketplace repo root (plan §3.1
46
+ * symmetric overlay: claude first, then cursor), or undefined when neither
47
+ * exists. Shared by the loader overlay and the plugin-manager reads so the
48
+ * dialect selection lives in exactly one place.
49
+ */
50
+ export function findMarketplaceManifestPath(root) {
51
+ for (const file of MARKETPLACE_CANDIDATE_FILES) {
52
+ const path = join(root, file);
53
+ if (existsSync(path))
54
+ return path;
55
+ }
56
+ return undefined;
57
+ }
22
58
  /**
23
59
  * Discover plugin roots for the glue to mount.
24
60
  * @param options - explicit dirs or the Claude-home / cwd pair for the default path.
@@ -90,7 +126,7 @@ function flattenPluginDirs(dirs) {
90
126
  * Missing files are not a plugin root; unreadable/invalid JSON still is (basename fallback).
91
127
  */
92
128
  function nameHintFromRoot(dir) {
93
- for (const file of [NESTED_MANIFEST, TOP_LEVEL_MANIFEST]) {
129
+ for (const file of [NESTED_MANIFEST, CURSOR_MANIFEST, TOP_LEVEL_MANIFEST]) {
94
130
  const text = readText(join(dir, file));
95
131
  if (text === undefined)
96
132
  continue;
@@ -1 +1 @@
1
- {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"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"}
package/lib/hooks.d.ts CHANGED
@@ -7,6 +7,13 @@
7
7
  * seam is absent the component is reported skipped, never failed, so a
8
8
  * deployment without the bridge keeps loading the rest of the plugin.
9
9
  *
10
+ * Cursor-flavored plugins go through the verified dialect mapping table
11
+ * (plan §3.5, S0 probe verdict DIVERGENT): camelCase cursor events map onto
12
+ * their CC equivalents, cursor wire entries (`{command, matcher?, loop_limit?}`)
13
+ * become CC matcher groups, `${CURSOR_PLUGIN_ROOT}` expands to the plugin root,
14
+ * unmapped events skip with a warning, and `loop_limit` warns. CC-flavored
15
+ * plugins pass through untouched.
16
+ *
10
17
  * @module
11
18
  */
12
19
  import type { CcPluginManifest } from './types.ts';
@@ -42,5 +49,6 @@ export interface MountHooksOptions {
42
49
  export declare function mountHooks(options: MountHooksOptions): {
43
50
  disposers: (() => void)[];
44
51
  tally: ComponentTally;
52
+ warnings: string[];
45
53
  };
46
54
  //# sourceMappingURL=hooks.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAE3C,qEAAqE;AACrE,MAAM,WAAW,SAAS;IACxB;;;;;;;OAOG;IACH,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,IAAI,CAAA;CACvF;AAED,iEAAiE;AACjE,eAAO,MAAM,mBAAmB,qBAAqB,CAAA;AAErD,+CAA+C;AAC/C,MAAM,WAAW,iBAAiB;IAChC,8EAA8E;IAC9E,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,yEAAyE;IACzE,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAA;IACnC,0DAA0D;IAC1D,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAAA;CACtC;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG;IAAE,SAAS,EAAE,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;IAAC,KAAK,EAAE,cAAc,CAAA;CAAE,CAmB3G"}
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAmB3C,qEAAqE;AACrE,MAAM,WAAW,SAAS;IACxB;;;;;;;OAOG;IACH,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,IAAI,CAAA;CACvF;AAED,iEAAiE;AACjE,eAAO,MAAM,mBAAmB,qBAAqB,CAAA;AAErD,+CAA+C;AAC/C,MAAM,WAAW,iBAAiB;IAChC,8EAA8E;IAC9E,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,yEAAyE;IACzE,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAA;IACnC,0DAA0D;IAC1D,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAAA;CACtC;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG;IAAE,SAAS,EAAE,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;IAAC,KAAK,EAAE,cAAc,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAyB/H"}
package/lib/hooks.js CHANGED
@@ -7,11 +7,34 @@
7
7
  * seam is absent the component is reported skipped, never failed, so a
8
8
  * deployment without the bridge keeps loading the rest of the plugin.
9
9
  *
10
+ * Cursor-flavored plugins go through the verified dialect mapping table
11
+ * (plan §3.5, S0 probe verdict DIVERGENT): camelCase cursor events map onto
12
+ * their CC equivalents, cursor wire entries (`{command, matcher?, loop_limit?}`)
13
+ * become CC matcher groups, `${CURSOR_PLUGIN_ROOT}` expands to the plugin root,
14
+ * unmapped events skip with a warning, and `loop_limit` warns. CC-flavored
15
+ * plugins pass through untouched.
16
+ *
10
17
  * @module
11
18
  */
12
19
  import { readFileSync } from 'node:fs';
13
20
  import { join, resolve } from 'node:path';
14
21
  import { ComponentTally } from "./seams.js";
22
+ /**
23
+ * Cursor → CC hooks event mapping (plan §3.5, verified table). Cursor events
24
+ * absent here have no CC equivalent and skip with a warning.
25
+ */
26
+ const CURSOR_HOOK_EVENT_MAP = {
27
+ sessionStart: 'SessionStart',
28
+ sessionEnd: 'SessionEnd',
29
+ preToolUse: 'PreToolUse',
30
+ postToolUse: 'PostToolUse',
31
+ postToolUseFailure: 'PostToolUseFailure',
32
+ subagentStart: 'SubagentStart',
33
+ subagentStop: 'SubagentStop',
34
+ beforeSubmitPrompt: 'UserPromptSubmit',
35
+ preCompact: 'PreCompact',
36
+ stop: 'Stop',
37
+ };
15
38
  /** Hooks live under this file in a plugin root, when present. */
16
39
  export const STANDARD_HOOKS_FILE = 'hooks/hooks.json';
17
40
  /**
@@ -22,22 +45,68 @@ export const STANDARD_HOOKS_FILE = 'hooks/hooks.json';
22
45
  export function mountHooks(options) {
23
46
  const tally = new ComponentTally('hooks');
24
47
  const disposers = [];
48
+ const warnings = [];
25
49
  if (options.hooks === undefined) {
26
50
  tally.addSkipped('hooks seam "hooks" is not mounted');
27
- return { disposers, tally };
51
+ return { disposers, tally, warnings };
28
52
  }
29
53
  const hooks = resolveHooks(options.pluginRoot, options.manifest);
30
54
  if (hooks.error !== undefined) {
31
55
  tally.addFailed(hooks.error);
32
- return { disposers, tally };
56
+ return { disposers, tally, warnings };
33
57
  }
34
58
  if (hooks.value === undefined) {
35
59
  tally.addSkipped('plugin declares no hooks');
36
- return { disposers, tally };
60
+ return { disposers, tally, warnings };
37
61
  }
38
- disposers.push(options.hooks.mergePluginHooks(options.manifest.name, hooks.value, options.pluginRoot));
62
+ let value = hooks.value;
63
+ if (options.manifest.flavor === 'cursor') {
64
+ const translated = translateCursorHooks(hooks.value, options.pluginRoot, tally, warnings);
65
+ value = translated;
66
+ }
67
+ disposers.push(options.hooks.mergePluginHooks(options.manifest.name, value, options.pluginRoot));
39
68
  tally.addLoaded();
40
- return { disposers, tally };
69
+ return { disposers, tally, warnings };
70
+ }
71
+ /**
72
+ * Translate a cursor hooks map (plan §3.5) into the CC `ClaudeCodeHookConfig`
73
+ * shape: camelCase event keys map through {@link CURSOR_HOOK_EVENT_MAP}, flat
74
+ * `{command, matcher?, loop_limit?}` entries become matcher groups,
75
+ * `${CURSOR_PLUGIN_ROOT}` expands to the plugin root, unmapped events tally as
76
+ * skipped, and unsupported entry fields surface as warnings.
77
+ */
78
+ function translateCursorHooks(value, pluginRoot, tally, warnings) {
79
+ const source = value;
80
+ const out = {};
81
+ for (const [event, entries] of Object.entries(source)) {
82
+ const ccEvent = CURSOR_HOOK_EVENT_MAP[event];
83
+ if (ccEvent === undefined) {
84
+ tally.addSkipped(`skipped hook event "${event}": no Claude Code equivalent`);
85
+ continue;
86
+ }
87
+ if (!Array.isArray(entries))
88
+ continue;
89
+ const groups = [];
90
+ for (const raw of entries) {
91
+ if (typeof raw !== 'object' || raw === null)
92
+ continue;
93
+ const entry = raw;
94
+ if (typeof entry['command'] !== 'string')
95
+ continue;
96
+ const unsupported = Object.keys(entry).filter(key => !['command', 'matcher', 'loop_limit'].includes(key));
97
+ if (unsupported.length > 0 || entry['loop_limit'] !== undefined) {
98
+ const reason = `hook event "${event}": unsupported hook fields ignored (${entry['loop_limit'] !== undefined ? 'loop_limit' : unsupported.join(', ')})`;
99
+ warnings.push(reason);
100
+ }
101
+ groups.push({
102
+ ...typeof entry['matcher'] === 'string' ? { matcher: entry['matcher'] } : {},
103
+ hooks: [{ type: 'command', command: entry['command'].split('${CURSOR_PLUGIN_ROOT}').join(pluginRoot) }],
104
+ });
105
+ }
106
+ if (groups.length > 0)
107
+ out[ccEvent] = groups;
108
+ }
109
+ return out;
41
110
  }
42
111
  /** Resolve the plugin's hooks map, or a failure reason. */
43
112
  function resolveHooks(pluginRoot, manifest) {
package/lib/hooks.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
package/lib/index.d.ts CHANGED
@@ -21,14 +21,20 @@ import type { PluginLoadReport } from './types.ts';
21
21
  import { type SkillsSeam } from './skills.ts';
22
22
  import { type ResolveModel, type SubagentsSeam } from './agents.ts';
23
23
  import { type MountedPluginCommand } from './commands.ts';
24
- export type { CcPluginManifest, CcCommand, CcSkillRef, CcAgentRef, CcMcpServer, ComponentKind, ComponentResult, PluginLoadReport } from './types.ts';
24
+ import { type RulesSeam } from './rules.ts';
25
+ import { type ActorContractGate } from './actor-contract-gate.ts';
26
+ export { ACTOR_CONTRACT_NAMESPACE, DEFAULT_ACTOR_CONTRACT_MODELS, actorContractSettingsSchema, gateCandidates, mountActorContractGate, ActorContractGate, } from './actor-contract-gate.ts';
27
+ export type { ActorContractSettings } from './actor-contract-gate.ts';
28
+ export type { CcPluginManifest, CcCommand, CcSkillRef, CcAgentRef, CcMcpServer, ComponentKind, ComponentResult, PluginLoadReport, PluginFlavor } from './types.ts';
25
29
  export type { CcPluginCommandInfo, MountedPluginCommand } from './commands.ts';
26
30
  export { parsePluginManifest } from './manifest.ts';
27
- export { discoverCcPluginRoots, resolveClaudeHome, NESTED_MANIFEST, TOP_LEVEL_MANIFEST } from './discovery.ts';
31
+ export { discoverCcPluginRoots, resolveClaudeHome, NESTED_MANIFEST, CURSOR_MANIFEST, TOP_LEVEL_MANIFEST, MANIFEST_CANDIDATE_DIRS, MARKETPLACE_CANDIDATE_FILES, findPluginManifestPath, findPluginManifestPaths, findMarketplaceManifestPath, } from './discovery.ts';
28
32
  export type { DiscoveredCcPlugin, DiscoverCcPluginRootsOptions } from './discovery.ts';
29
33
  export { AgentProvider, STANDARD_AGENTS_DIR, PLUGIN_AGENT_PROVIDER_BRAND, isPluginAgentProvider } from './agents.ts';
30
34
  export type { ResolveModel } from './agents.ts';
31
- export type { McpSeam, HooksSeam } from './seams.ts';
35
+ export type { McpSeam, HooksSeam, RulesSeam } from './seams.ts';
36
+ export type { RuleEntry } from './types.ts';
37
+ export { mountRules } from './rules.ts';
32
38
  export { skillToolRestriction, resolveSkillExecution, forbidsInlineShell, activationFor, registerSkillPathActivator, applySkillRestriction, PROVIDER, type AgentScope, type SkillExecution, type SkillActivation, } from './skill-semantics.ts';
33
39
  /** The plugin.json file name at a plugin root (legacy / fixture path). */
34
40
  export declare const MANIFEST_FILE = "plugin.json";
@@ -44,6 +50,8 @@ export interface MountedSeams {
44
50
  settings?: SettingsSeam | undefined;
45
51
  /** Hooks bridge seam (guest; absent in the harness today). */
46
52
  hooks?: HooksSeam | undefined;
53
+ /** Rules merge seam (guest; absent in the harness today). */
54
+ rules?: RulesSeam | undefined;
47
55
  /** MCP server seam (guest; absent in the harness today). */
48
56
  mcp?: McpSeam | undefined;
49
57
  }
@@ -68,6 +76,12 @@ export interface CcPluginMount {
68
76
  * Recall every mounted component. Effect-scoped: calling it also releases
69
77
  * the Cordis effect, and a context teardown calls it automatically.
70
78
  */
79
+ /**
80
+ * The plugin mount's local actor-contract gate (the live reader
81
+ * `AgentProvider.start` consults; drive `setSource`/`onChange` to simulate
82
+ * a settings hot reload).
83
+ */
84
+ gate: ActorContractGate;
71
85
  dispose(): void;
72
86
  }
73
87
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/lib/index.js CHANGED
@@ -18,12 +18,16 @@ import { mountSkills } from "./skills.js";
18
18
  import { mountAgents } from "./agents.js";
19
19
  import { mountCommands } from "./commands.js";
20
20
  import { mountHooks } from "./hooks.js";
21
+ import { mountRules } from "./rules.js";
21
22
  import { mountMcpServers } from "./mcp.js";
22
23
  import { mountSettings } from "./settings.js";
23
24
  import { resolvePluginManifest } from "./resolve-manifest.js";
25
+ import { mountActorContractGate } from "./actor-contract-gate.js";
26
+ export { ACTOR_CONTRACT_NAMESPACE, DEFAULT_ACTOR_CONTRACT_MODELS, actorContractSettingsSchema, gateCandidates, mountActorContractGate, ActorContractGate, } from "./actor-contract-gate.js";
24
27
  export { parsePluginManifest } from "./manifest.js";
25
- export { discoverCcPluginRoots, resolveClaudeHome, NESTED_MANIFEST, TOP_LEVEL_MANIFEST } from "./discovery.js";
28
+ export { discoverCcPluginRoots, resolveClaudeHome, NESTED_MANIFEST, CURSOR_MANIFEST, TOP_LEVEL_MANIFEST, MANIFEST_CANDIDATE_DIRS, MARKETPLACE_CANDIDATE_FILES, findPluginManifestPath, findPluginManifestPaths, findMarketplaceManifestPath, } from "./discovery.js";
26
29
  export { AgentProvider, STANDARD_AGENTS_DIR, PLUGIN_AGENT_PROVIDER_BRAND, isPluginAgentProvider } from "./agents.js";
30
+ export { mountRules } from "./rules.js";
27
31
  export { skillToolRestriction, resolveSkillExecution, forbidsInlineShell, activationFor, registerSkillPathActivator, applySkillRestriction, PROVIDER, } from "./skill-semantics.js";
28
32
  /** The plugin.json file name at a plugin root (legacy / fixture path). */
29
33
  export const MANIFEST_FILE = 'plugin.json';
@@ -39,10 +43,18 @@ export async function mountCcPlugin(ctx, options) {
39
43
  const resolved = resolvePluginManifest(root, options.nameHint);
40
44
  const manifest = parsePluginManifest(resolved.raw, root, {
41
45
  skillsReplaceDefault: resolved.skillsReplaceDefault,
46
+ flavor: resolved.flavor,
47
+ warnings: resolved.warnings,
42
48
  });
43
49
  const probed = await probeSeams(ctx, options.seams);
44
50
  const disposers = [];
45
51
  const components = [];
52
+ const mountWarnings = [];
53
+ // Actor-contract gate (§3.2): install the settings section (no cordis
54
+ // service — the task package owns `ccActorContractGate`) and thread the
55
+ // live patterns into every mounted agent's spawn seam.
56
+ const gate = mountActorContractGate(ctx);
57
+ const gatePatterns = () => gate.patterns();
46
58
  let commandMount;
47
59
  try {
48
60
  fold(components, disposers, await mountSkills({
@@ -51,23 +63,30 @@ export async function mountCcPlugin(ctx, options) {
51
63
  manifest,
52
64
  skills: probed.skills,
53
65
  subagentsPresent: probed.subagents !== undefined,
54
- }));
66
+ }), mountWarnings);
55
67
  fold(components, disposers, await mountAgents({
56
68
  pluginRoot: root,
57
69
  manifest,
58
70
  subagents: probed.subagents,
59
71
  ...options.resolveModel !== undefined ? { resolveModel: options.resolveModel } : {},
72
+ gatePatterns,
60
73
  // Same name-resolution chain as the manifest itself: manifest name (the
61
74
  // parse/synthesis in resolve-manifest already falls back to nameHint,
62
75
  // then the root basename), used to namespace agent provider names.
63
76
  namespacePrefix: manifest.name,
64
- }));
77
+ }), mountWarnings);
65
78
  commandMount = mountCommands({ pluginRoot: root, manifest, commands: probed.commands });
66
79
  components.push(commandMount.tally.result());
80
+ mountWarnings.push(...commandMount.warnings ?? []);
67
81
  disposers.push(...commandMount.disposers);
68
- fold(components, disposers, mountHooks({ pluginRoot: root, manifest, hooks: probed.hooks }));
69
- fold(components, disposers, mountMcpServers({ pluginRoot: root, manifest, mcp: probed.mcp }));
70
- fold(components, disposers, mountSettings({ manifest, settings: probed.settings }));
82
+ fold(components, disposers, mountHooks({ pluginRoot: root, manifest, hooks: probed.hooks }), mountWarnings);
83
+ // Rules (Cursor dialect) mount after hooks, before mcpServers (plan §3.3).
84
+ // A manifest declaring no rules mounts no rules component (cc zero-change).
85
+ if (manifest.rules.length > 0) {
86
+ fold(components, disposers, await mountRules({ pluginRoot: root, manifest, rules: probed.rules }), mountWarnings);
87
+ }
88
+ fold(components, disposers, mountMcpServers({ pluginRoot: root, manifest, mcp: probed.mcp }), mountWarnings);
89
+ fold(components, disposers, mountSettings({ manifest, settings: probed.settings }), mountWarnings);
71
90
  }
72
91
  catch (error) {
73
92
  // Component-level rollback: a component mount that throws after earlier
@@ -83,8 +102,9 @@ export async function mountCcPlugin(ctx, options) {
83
102
  };
84
103
  const effectDisposer = ctx.effect(() => tearDown, 'cc-plugin-loader.mount');
85
104
  return {
86
- report: { name: manifest.name, components },
105
+ report: { name: manifest.name, flavor: manifest.flavor, warnings: [...manifest.warnings, ...mountWarnings], components },
87
106
  commands: commandMount.mounted,
107
+ gate,
88
108
  dispose: () => effectDisposer(),
89
109
  };
90
110
  }
@@ -96,12 +116,14 @@ async function probeSeams(ctx, overrides) {
96
116
  commands: overrides?.commands ?? ctx.get('commands'),
97
117
  settings: overrides?.settings ?? ctx.get('settings'),
98
118
  hooks: overrides?.hooks ?? ctx.get('hooks'),
119
+ rules: overrides?.rules ?? ctx.get('rules'),
99
120
  mcp: overrides?.mcp ?? ctx.get('mcp'),
100
121
  };
101
122
  }
102
123
  /** Fold one component mount into the report and disposer list. */
103
- function fold(components, disposers, mount) {
124
+ function fold(components, disposers, mount, mountWarnings) {
104
125
  components.push(mount.tally.result());
105
126
  disposers.push(...mount.disposers);
127
+ mountWarnings.push(...mount.warnings ?? []);
106
128
  }
107
129
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AAOnD,OAAO,EAAE,WAAW,EAAmB,MAAM,aAAa,CAAA;AAC1D,OAAO,EAAE,WAAW,EAAyC,MAAM,aAAa,CAAA;AAChF,OAAO,EAAE,aAAa,EAA6B,MAAM,eAAe,CAAA;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACvC,OAAO,EAAE,UAAU,EAAkB,MAAM,YAAY,CAAA;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAC7D,OAAO,EAAE,sBAAsB,EAA0B,MAAM,0BAA0B,CAAA;AACzF,OAAO,EACL,wBAAwB,EACxB,6BAA6B,EAC7B,2BAA2B,EAC3B,cAAc,EACd,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,0BAA0B,CAAA;AAKjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AACnD,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,uBAAuB,EACvB,2BAA2B,EAC3B,sBAAsB,EACtB,uBAAuB,EACvB,2BAA2B,GAC5B,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAIpH,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACvC,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,aAAa,EACb,0BAA0B,EAC1B,qBAAqB,EACrB,QAAQ,GAIT,MAAM,sBAAsB,CAAA;AAE7B,0EAA0E;AAC1E,MAAM,CAAC,MAAM,aAAa,GAAG,aAAa,CAAA;AAmD1C;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAY,EAAE,OAA6B;IAC7E,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAClC,MAAM,QAAQ,GAAG,qBAAqB,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC9D,MAAM,QAAQ,GAAG,mBAAmB,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE;QACvD,oBAAoB,EAAE,QAAQ,CAAC,oBAAoB;QACnD,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;KAC5B,CAAC,CAAA;IACF,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,CAAA;IACnD,MAAM,SAAS,GAAmB,EAAE,CAAA;IACpC,MAAM,UAAU,GAAsB,EAAE,CAAA;IACxC,MAAM,aAAa,GAAa,EAAE,CAAA;IAClC,sEAAsE;IACtE,wEAAwE;IACxE,uDAAuD;IACvD,MAAM,IAAI,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAA;IACxC,MAAM,YAAY,GAAG,GAAsB,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAA;IAE7D,IAAI,YAA8C,CAAA;IAClD,IAAI,CAAC;QACH,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;YAC5C,GAAG;YACH,UAAU,EAAE,IAAI;YAChB,QAAQ;YACR,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,gBAAgB,EAAE,MAAM,CAAC,SAAS,KAAK,SAAS;SACjD,CAAC,EAAE,aAAa,CAAC,CAAA;QAClB,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;YAC5C,UAAU,EAAE,IAAI;YAChB,QAAQ;YACR,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,GAAG,OAAO,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE;YACnF,YAAY;YACZ,wEAAwE;YACxE,sEAAsE;YACtE,mEAAmE;YACnE,eAAe,EAAE,QAAQ,CAAC,IAAI;SAC/B,CAAC,EAAE,aAAa,CAAC,CAAA;QAClB,YAAY,GAAG,aAAa,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA;QACvF,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAA;QAC5C,aAAa,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAA;QAClD,SAAS,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,SAAS,CAAC,CAAA;QACzC,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,aAAa,CAAC,CAAA;QAC3G,2EAA2E;QAC3E,4EAA4E;QAC5E,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,aAAa,CAAC,CAAA;QACnH,CAAC;QACD,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,eAAe,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,aAAa,CAAC,CAAA;QAC5G,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,aAAa,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,aAAa,CAAC,CAAA;IACpG,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,wEAAwE;QACxE,sEAAsE;QACtE,sCAAsC;QACtC,KAAK,MAAM,OAAO,IAAI,SAAS;YAAE,OAAO,EAAE,CAAA;QAC1C,MAAM,KAAK,CAAA;IACb,CAAC;IAED,MAAM,QAAQ,GAAG,GAAG,EAAE;QACpB,KAAK,MAAM,OAAO,IAAI,SAAS;YAAE,OAAO,EAAE,CAAA;IAC5C,CAAC,CAAA;IACD,MAAM,cAAc,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,wBAAwB,CAAC,CAAA;IAE3E,OAAO;QACL,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,QAAQ,CAAC,QAAQ,EAAE,GAAG,aAAa,CAAC,EAAE,UAAU,EAAE;QACxH,QAAQ,EAAE,YAAY,CAAC,OAAO;QAC9B,IAAI;QACJ,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,EAAE;KAChC,CAAA;AACH,CAAC;AAED,qEAAqE;AACrE,KAAK,UAAU,UAAU,CAAC,GAAY,EAAE,SAAmC;IACzE,OAAO;QACL,MAAM,EAAE,SAAS,EAAE,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,QAAQ,CAA2B;QACxE,SAAS,EAAE,SAAS,EAAE,SAAS,IAAI,GAAG,CAAC,GAAG,CAAC,WAAW,CAA8B;QACpF,QAAQ,EAAE,SAAS,EAAE,QAAQ,IAAI,GAAG,CAAC,GAAG,CAAC,UAAU,CAA6B;QAChF,QAAQ,EAAE,SAAS,EAAE,QAAQ,IAAI,GAAG,CAAC,GAAG,CAAC,UAAU,CAA6B;QAChF,KAAK,EAAE,SAAS,EAAE,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC,OAAO,CAA0B;QACpE,KAAK,EAAE,SAAS,EAAE,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC,OAAO,CAA0B;QACpE,GAAG,EAAE,SAAS,EAAE,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,CAAwB;KAC7D,CAAA;AACH,CAAC;AAED,kEAAkE;AAClE,SAAS,IAAI,CACX,UAA6B,EAC7B,SAAyB,EACzB,KAAyF,EACzF,aAAuB;IAEvB,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAA;IACrC,SAAS,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAA;IAClC,aAAa,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAA;AAC7C,CAAC"}
package/lib/manifest.d.ts CHANGED
@@ -11,11 +11,15 @@
11
11
  *
12
12
  * @module
13
13
  */
14
- import type { CcPluginManifest } from './types.ts';
14
+ import type { CcPluginManifest, PluginFlavor } from './types.ts';
15
15
  /** Extra flags the resolver threads in (not authored in plugin.json). */
16
16
  export interface ParsePluginManifestOptions {
17
17
  /** Marketplace-root overlay: listed `skills` replace the default `skills/` scan. */
18
18
  readonly skillsReplaceDefault?: boolean;
19
+ /** Dialect of the winning manifest candidate (resolver-injected, plan §3.1). */
20
+ readonly flavor?: PluginFlavor;
21
+ /** Resolution warnings to carry on the parsed manifest (S2 promotes to report). */
22
+ readonly warnings?: readonly string[];
19
23
  }
20
24
  /**
21
25
  * Validate a raw `plugin.json` object into the loader's typed manifest subset.
@@ -26,4 +30,10 @@ export interface ParsePluginManifestOptions {
26
30
  * @throws when the manifest is structurally invalid.
27
31
  */
28
32
  export declare function parsePluginManifest(raw: unknown, source: string, options?: ParsePluginManifestOptions): CcPluginManifest;
33
+ /**
34
+ * Classify a manifest component path against the v1 glob policy (plan §3.4):
35
+ * `dir/**` is directory-recursive, any other glob metacharacter is unsupported
36
+ * (skipped with a warning, never expanded), everything else is literal.
37
+ */
38
+ export declare function globPathKind(path: string): 'literal' | 'recursive' | 'unsupported';
29
39
  //# sourceMappingURL=manifest.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAA0B,MAAM,YAAY,CAAA;AAE1E,yEAAyE;AACzE,MAAM,WAAW,0BAA0B;IACzC,oFAAoF;IACpF,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAA;CACxC;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,0BAA+B,GACvC,gBAAgB,CAyBlB"}
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAA0B,YAAY,EAAE,MAAM,YAAY,CAAA;AAExF,yEAAyE;AACzE,MAAM,WAAW,0BAA0B;IACzC,oFAAoF;IACpF,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAA;IACvC,gFAAgF;IAChF,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY,CAAA;IAC9B,mFAAmF;IACnF,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CACtC;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,0BAA+B,GACvC,gBAAgB,CAuClB;AA4GD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,GAAG,aAAa,CAGlF"}
package/lib/manifest.js CHANGED
@@ -27,10 +27,23 @@ export function parsePluginManifest(raw, source, options = {}) {
27
27
  const commands = normalizeCommands(raw['commands'], name);
28
28
  const agents = normalizeStringList(raw['agents'], name, 'agents');
29
29
  const skills = normalizeStringList(raw['skills'], name, 'skills');
30
+ // Cursor default-dir inference (plan §3.2 component conventions): an
31
+ // undeclared `rules` still scans `rules/`, as with the implicit dirs.
32
+ const rules = normalizeRules(raw['rules'] ?? ((options.flavor ?? 'cc') === 'cursor' ? 'rules' : undefined), name);
30
33
  const { mcpServers, mcpServersPath } = normalizeMcpServers(raw['mcpServers'], name);
31
34
  const settings = isRecord(raw['settings']) ? raw['settings'] : {};
35
+ // Cursor-dialect tolerance warnings (plan §3.4): metadata fields are silently
36
+ // tolerated, but these two degrade silently unless surfaced.
37
+ const dialectWarnings = (options.flavor ?? 'cc') === 'cursor'
38
+ ? [
39
+ ...raw['minClientVersions'] !== undefined ? ['client-version gating is not enforced'] : [],
40
+ ...raw['variables'] !== undefined ? ['plugin variables are not prompted; set values via environment'] : [],
41
+ ]
42
+ : [];
32
43
  return {
33
44
  name,
45
+ flavor: options.flavor ?? 'cc',
46
+ warnings: [...options.warnings ?? [], ...dialectWarnings],
34
47
  ...typeof raw['version'] === 'string' ? { version: raw['version'] } : {},
35
48
  ...typeof raw['description'] === 'string' ? { description: raw['description'] } : {},
36
49
  ...raw['author'] !== undefined ? { author: raw['author'] } : {},
@@ -38,6 +51,7 @@ export function parsePluginManifest(raw, source, options = {}) {
38
51
  commandsDeclared: raw['commands'] !== undefined,
39
52
  agents,
40
53
  skills,
54
+ rules,
41
55
  skillsReplaceDefault: options.skillsReplaceDefault === true,
42
56
  ...raw['hooks'] !== undefined ? { hooks: raw['hooks'] } : {},
43
57
  mcpServers,
@@ -102,6 +116,16 @@ function normalizeStringList(raw, name, field) {
102
116
  return [...raw];
103
117
  throw new Error(`plugin ${name}: "${field}" must be a path or a list of paths`);
104
118
  }
119
+ /** Rules accept stringOrArray only — the Cursor schema has no map form. */
120
+ function normalizeRules(raw, name) {
121
+ if (raw === undefined)
122
+ return [];
123
+ if (typeof raw === 'string')
124
+ return [raw];
125
+ if (isStringArray(raw))
126
+ return [...raw];
127
+ throw new Error(`plugin ${name}: "rules" must be a path or a list of paths; a map form is not supported`);
128
+ }
105
129
  function normalizeMcpServers(raw, name) {
106
130
  if (raw === undefined)
107
131
  return { mcpServers: {} };
@@ -109,7 +133,36 @@ function normalizeMcpServers(raw, name) {
109
133
  return { mcpServers: {}, mcpServersPath: raw }; // an `.mcp.json` path
110
134
  if (isRecord(raw))
111
135
  return { mcpServers: raw };
112
- throw new Error(`plugin ${name}: "mcpServers" must be a path or an object map of server configs`);
136
+ // Cursor array form (plan §3.4): elements are `.mcp.json` paths or inline records.
137
+ if (Array.isArray(raw)) {
138
+ const servers = {};
139
+ const paths = [];
140
+ for (const item of raw) {
141
+ if (typeof item === 'string')
142
+ paths.push(item);
143
+ else if (isRecord(item))
144
+ Object.assign(servers, item);
145
+ else
146
+ throw new Error(`plugin ${name}: "mcpServers" array elements must be a path or an object map`);
147
+ }
148
+ return {
149
+ mcpServers: servers,
150
+ // Single path keeps the existing seam; multiple use the plural field.
151
+ ...paths.length === 1 ? { mcpServersPath: paths[0] } : {},
152
+ ...paths.length > 0 ? { mcpServersPaths: paths } : {},
153
+ };
154
+ }
155
+ throw new Error(`plugin ${name}: "mcpServers" must be a path, a list of paths/objects, or an object map`);
156
+ }
157
+ /**
158
+ * Classify a manifest component path against the v1 glob policy (plan §3.4):
159
+ * `dir/**` is directory-recursive, any other glob metacharacter is unsupported
160
+ * (skipped with a warning, never expanded), everything else is literal.
161
+ */
162
+ export function globPathKind(path) {
163
+ if (path.endsWith('/**'))
164
+ return 'recursive';
165
+ return /[*?[]/.test(path) ? 'unsupported' : 'literal';
113
166
  }
114
167
  function isRecord(value) {
115
168
  return typeof value === 'object' && value !== null && !Array.isArray(value);