@enactprotocol/shared 2.1.7 → 2.1.14

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.
@@ -30,7 +30,7 @@ export interface LoadedManifest {
30
30
  /**
31
31
  * Load a manifest from a file path
32
32
  *
33
- * @param filePath - Path to the manifest file (enact.yaml, enact.yml, or enact.md)
33
+ * @param filePath - Path to the manifest file (SKILL.md, enact.md, enact.yaml, or enact.yml)
34
34
  * @returns LoadedManifest with validated manifest and metadata
35
35
  * @throws ManifestLoadError if file doesn't exist, parse fails, or validation fails
36
36
  */
@@ -38,7 +38,7 @@ export declare function loadManifest(filePath: string): LoadedManifest;
38
38
  /**
39
39
  * Find and load a manifest from a directory
40
40
  *
41
- * Searches for enact.md, enact.yaml, or enact.yml in the given directory
41
+ * Searches for SKILL.md, enact.md, enact.yaml, or enact.yml in the given directory
42
42
  *
43
43
  * @param dir - Directory to search for manifest
44
44
  * @returns LoadedManifest if found
@@ -24,7 +24,7 @@ export class ManifestLoadError extends Error {
24
24
  /**
25
25
  * Load a manifest from a file path
26
26
  *
27
- * @param filePath - Path to the manifest file (enact.yaml, enact.yml, or enact.md)
27
+ * @param filePath - Path to the manifest file (SKILL.md, enact.md, enact.yaml, or enact.yml)
28
28
  * @returns LoadedManifest with validated manifest and metadata
29
29
  * @throws ManifestLoadError if file doesn't exist, parse fails, or validation fails
30
30
  */
@@ -75,7 +75,7 @@ export function loadManifest(filePath) {
75
75
  /**
76
76
  * Find and load a manifest from a directory
77
77
  *
78
- * Searches for enact.md, enact.yaml, or enact.yml in the given directory
78
+ * Searches for SKILL.md, enact.md, enact.yaml, or enact.yml in the given directory
79
79
  *
80
80
  * @param dir - Directory to search for manifest
81
81
  * @returns LoadedManifest if found
@@ -2,8 +2,9 @@
2
2
  * YAML and Markdown parser for Enact tool manifests
3
3
  *
4
4
  * Handles parsing of:
5
- * - enact.yaml files (pure YAML)
6
- * - enact.md files (YAML frontmatter + Markdown body)
5
+ * - SKILL.md files (YAML frontmatter + Markdown body) - primary format
6
+ * - enact.yaml/yml files (pure YAML) - legacy format
7
+ * - enact.md files (YAML frontmatter + Markdown body) - legacy format
7
8
  */
8
9
  import type { ParsedManifest } from "../types/manifest";
9
10
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/manifest/parser.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAgB,MAAM,mBAAmB,CAAC;AAEtE;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,SAAgB,aAAa,EAAE,KAAK,GAAG,SAAS,CAAC;gBAErC,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,KAAK;CAKnD;AAQD;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,IAAI,CAAC;AAE3C;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd,GAAG,IAAI,CAcP;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAqBtE;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,cAAc,CAsCrF;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CAc7D;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,cAAc,CAGnF"}
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/manifest/parser.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAgB,MAAM,mBAAmB,CAAC;AAEtE;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,SAAgB,aAAa,EAAE,KAAK,GAAG,SAAS,CAAC;gBAErC,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,KAAK;CAKnD;AAQD;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,IAAI,CAAC;AAE3C;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd,GAAG,IAAI,CAcP;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAqBtE;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,cAAc,CAsCrF;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CAc7D;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,cAAc,CAGnF"}
@@ -2,8 +2,9 @@
2
2
  * YAML and Markdown parser for Enact tool manifests
3
3
  *
4
4
  * Handles parsing of:
5
- * - enact.yaml files (pure YAML)
6
- * - enact.md files (YAML frontmatter + Markdown body)
5
+ * - SKILL.md files (YAML frontmatter + Markdown body) - primary format
6
+ * - enact.yaml/yml files (pure YAML) - legacy format
7
+ * - enact.md files (YAML frontmatter + Markdown body) - legacy format
7
8
  */
8
9
  import yaml from "js-yaml";
9
10
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/manifest/parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/manifest/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * MCP tools registry management
3
+ *
4
+ * Manages mcp.json for tracking tools exposed to MCP clients:
5
+ * - Global only: ~/.enact/mcp.json
6
+ *
7
+ * Similar to tools.json but adds toolset management for organizing
8
+ * which tools are exposed to MCP clients.
9
+ */
10
+ /**
11
+ * Structure of mcp.json file
12
+ */
13
+ export interface McpRegistry {
14
+ /** Map of tool name to installed version */
15
+ tools: Record<string, string>;
16
+ /** Named collections of tools */
17
+ toolsets: Record<string, string[]>;
18
+ /** Currently active toolset (null = expose all tools) */
19
+ activeToolset: string | null;
20
+ }
21
+ /**
22
+ * Information about an MCP-exposed tool
23
+ */
24
+ export interface McpToolInfo {
25
+ name: string;
26
+ version: string;
27
+ cachePath: string;
28
+ }
29
+ /**
30
+ * Get the path to mcp.json
31
+ */
32
+ export declare function getMcpJsonPath(): string;
33
+ /**
34
+ * Load mcp.json
35
+ * Returns empty registry if file doesn't exist
36
+ */
37
+ export declare function loadMcpRegistry(): McpRegistry;
38
+ /**
39
+ * Save mcp.json
40
+ */
41
+ export declare function saveMcpRegistry(registry: McpRegistry): void;
42
+ /**
43
+ * Add a tool to the MCP registry
44
+ */
45
+ export declare function addMcpTool(toolName: string, version: string): void;
46
+ /**
47
+ * Remove a tool from the MCP registry
48
+ */
49
+ export declare function removeMcpTool(toolName: string): boolean;
50
+ /**
51
+ * Check if a tool is in the MCP registry
52
+ */
53
+ export declare function isMcpToolInstalled(toolName: string): boolean;
54
+ /**
55
+ * Get the installed version of an MCP tool
56
+ * Returns null if not installed
57
+ */
58
+ export declare function getMcpToolVersion(toolName: string): string | null;
59
+ /**
60
+ * List all tools that should be exposed to MCP clients
61
+ * If activeToolset is set, only returns tools in that toolset
62
+ * Otherwise returns all tools
63
+ */
64
+ export declare function listMcpTools(): McpToolInfo[];
65
+ /**
66
+ * Get info for a specific MCP tool if it's exposed
67
+ */
68
+ export declare function getMcpToolInfo(toolName: string): McpToolInfo | null;
69
+ /**
70
+ * Create a new toolset
71
+ */
72
+ export declare function createToolset(name: string, tools?: string[]): void;
73
+ /**
74
+ * Delete a toolset
75
+ */
76
+ export declare function deleteToolset(name: string): boolean;
77
+ /**
78
+ * Add a tool to a toolset
79
+ */
80
+ export declare function addToolToToolset(toolsetName: string, toolName: string): boolean;
81
+ /**
82
+ * Remove a tool from a toolset
83
+ */
84
+ export declare function removeToolFromToolset(toolsetName: string, toolName: string): boolean;
85
+ /**
86
+ * Set the active toolset
87
+ */
88
+ export declare function setActiveToolset(name: string | null): boolean;
89
+ /**
90
+ * Get the active toolset name
91
+ */
92
+ export declare function getActiveToolset(): string | null;
93
+ /**
94
+ * List all toolsets
95
+ */
96
+ export declare function listToolsets(): Array<{
97
+ name: string;
98
+ tools: string[];
99
+ isActive: boolean;
100
+ }>;
101
+ /**
102
+ * Sync MCP registry with global tools.json
103
+ * Adds any tools from tools.json that aren't in mcp.json
104
+ * Does NOT remove tools (allows mcp.json to have subset of tools.json)
105
+ */
106
+ export declare function syncMcpWithGlobalTools(globalTools: Record<string, string>): void;
107
+ //# sourceMappingURL=mcp-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-registry.d.ts","sourceRoot":"","sources":["../src/mcp-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACnC,yDAAyD;IACzD,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,WAAW,CAmB7C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI,CAW3D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAIlE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAmBvD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAG5D;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGjE;AAWD;;;;GAIG;AACH,wBAAgB,YAAY,IAAI,WAAW,EAAE,CA+B5C;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAwBnE;AAID;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,MAAM,EAAO,GAAG,IAAI,CAItE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAgBnD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAc/E;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAgBpF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAU7D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAGhD;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC,CAQ1F;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAchF"}
@@ -0,0 +1,266 @@
1
+ /**
2
+ * MCP tools registry management
3
+ *
4
+ * Manages mcp.json for tracking tools exposed to MCP clients:
5
+ * - Global only: ~/.enact/mcp.json
6
+ *
7
+ * Similar to tools.json but adds toolset management for organizing
8
+ * which tools are exposed to MCP clients.
9
+ */
10
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
11
+ import { dirname, join } from "node:path";
12
+ import { getCacheDir, getEnactHome } from "./paths";
13
+ /**
14
+ * Get the path to mcp.json
15
+ */
16
+ export function getMcpJsonPath() {
17
+ return join(getEnactHome(), "mcp.json");
18
+ }
19
+ /**
20
+ * Load mcp.json
21
+ * Returns empty registry if file doesn't exist
22
+ */
23
+ export function loadMcpRegistry() {
24
+ const registryPath = getMcpJsonPath();
25
+ if (!existsSync(registryPath)) {
26
+ return { tools: {}, toolsets: {}, activeToolset: null };
27
+ }
28
+ try {
29
+ const content = readFileSync(registryPath, "utf-8");
30
+ const parsed = JSON.parse(content);
31
+ return {
32
+ tools: parsed.tools ?? {},
33
+ toolsets: parsed.toolsets ?? {},
34
+ activeToolset: parsed.activeToolset ?? null,
35
+ };
36
+ }
37
+ catch {
38
+ // Return empty registry on parse error
39
+ return { tools: {}, toolsets: {}, activeToolset: null };
40
+ }
41
+ }
42
+ /**
43
+ * Save mcp.json
44
+ */
45
+ export function saveMcpRegistry(registry) {
46
+ const registryPath = getMcpJsonPath();
47
+ // Ensure directory exists
48
+ const dir = dirname(registryPath);
49
+ if (!existsSync(dir)) {
50
+ mkdirSync(dir, { recursive: true });
51
+ }
52
+ const content = JSON.stringify(registry, null, 2);
53
+ writeFileSync(registryPath, content, "utf-8");
54
+ }
55
+ /**
56
+ * Add a tool to the MCP registry
57
+ */
58
+ export function addMcpTool(toolName, version) {
59
+ const registry = loadMcpRegistry();
60
+ registry.tools[toolName] = version;
61
+ saveMcpRegistry(registry);
62
+ }
63
+ /**
64
+ * Remove a tool from the MCP registry
65
+ */
66
+ export function removeMcpTool(toolName) {
67
+ const registry = loadMcpRegistry();
68
+ if (!(toolName in registry.tools)) {
69
+ return false;
70
+ }
71
+ delete registry.tools[toolName];
72
+ // Also remove from all toolsets
73
+ for (const toolsetName of Object.keys(registry.toolsets)) {
74
+ const toolset = registry.toolsets[toolsetName];
75
+ if (toolset) {
76
+ registry.toolsets[toolsetName] = toolset.filter((t) => t !== toolName);
77
+ }
78
+ }
79
+ saveMcpRegistry(registry);
80
+ return true;
81
+ }
82
+ /**
83
+ * Check if a tool is in the MCP registry
84
+ */
85
+ export function isMcpToolInstalled(toolName) {
86
+ const registry = loadMcpRegistry();
87
+ return toolName in registry.tools;
88
+ }
89
+ /**
90
+ * Get the installed version of an MCP tool
91
+ * Returns null if not installed
92
+ */
93
+ export function getMcpToolVersion(toolName) {
94
+ const registry = loadMcpRegistry();
95
+ return registry.tools[toolName] ?? null;
96
+ }
97
+ /**
98
+ * Get the cache path for an MCP tool
99
+ */
100
+ function getMcpToolCachePath(toolName, version) {
101
+ const cacheDir = getCacheDir();
102
+ const normalizedVersion = version.startsWith("v") ? version.slice(1) : version;
103
+ return join(cacheDir, toolName, `v${normalizedVersion}`);
104
+ }
105
+ /**
106
+ * List all tools that should be exposed to MCP clients
107
+ * If activeToolset is set, only returns tools in that toolset
108
+ * Otherwise returns all tools
109
+ */
110
+ export function listMcpTools() {
111
+ const registry = loadMcpRegistry();
112
+ const tools = [];
113
+ // Determine which tools to expose
114
+ let toolsToExpose;
115
+ const activeToolsetTools = registry.activeToolset
116
+ ? registry.toolsets[registry.activeToolset]
117
+ : undefined;
118
+ if (activeToolsetTools) {
119
+ // Filter to only tools in the active toolset that are also installed
120
+ toolsToExpose = activeToolsetTools.filter((name) => name in registry.tools);
121
+ }
122
+ else {
123
+ // Expose all installed tools
124
+ toolsToExpose = Object.keys(registry.tools);
125
+ }
126
+ for (const name of toolsToExpose) {
127
+ const version = registry.tools[name];
128
+ if (version) {
129
+ tools.push({
130
+ name,
131
+ version,
132
+ cachePath: getMcpToolCachePath(name, version),
133
+ });
134
+ }
135
+ }
136
+ return tools;
137
+ }
138
+ /**
139
+ * Get info for a specific MCP tool if it's exposed
140
+ */
141
+ export function getMcpToolInfo(toolName) {
142
+ const registry = loadMcpRegistry();
143
+ const version = registry.tools[toolName];
144
+ if (!version) {
145
+ return null;
146
+ }
147
+ // Check if tool is in active toolset (if one is set)
148
+ if (registry.activeToolset) {
149
+ const activeToolsetTools = registry.toolsets[registry.activeToolset];
150
+ if (activeToolsetTools && !activeToolsetTools.includes(toolName)) {
151
+ return null; // Tool is installed but not in active toolset
152
+ }
153
+ }
154
+ const cachePath = getMcpToolCachePath(toolName, version);
155
+ // Verify cache exists
156
+ if (!existsSync(cachePath)) {
157
+ return null;
158
+ }
159
+ return { name: toolName, version, cachePath };
160
+ }
161
+ // Toolset management
162
+ /**
163
+ * Create a new toolset
164
+ */
165
+ export function createToolset(name, tools = []) {
166
+ const registry = loadMcpRegistry();
167
+ registry.toolsets[name] = tools;
168
+ saveMcpRegistry(registry);
169
+ }
170
+ /**
171
+ * Delete a toolset
172
+ */
173
+ export function deleteToolset(name) {
174
+ const registry = loadMcpRegistry();
175
+ if (!(name in registry.toolsets)) {
176
+ return false;
177
+ }
178
+ delete registry.toolsets[name];
179
+ // Clear active toolset if it was the deleted one
180
+ if (registry.activeToolset === name) {
181
+ registry.activeToolset = null;
182
+ }
183
+ saveMcpRegistry(registry);
184
+ return true;
185
+ }
186
+ /**
187
+ * Add a tool to a toolset
188
+ */
189
+ export function addToolToToolset(toolsetName, toolName) {
190
+ const registry = loadMcpRegistry();
191
+ const toolset = registry.toolsets[toolsetName];
192
+ if (!toolset) {
193
+ return false;
194
+ }
195
+ if (!toolset.includes(toolName)) {
196
+ toolset.push(toolName);
197
+ saveMcpRegistry(registry);
198
+ }
199
+ return true;
200
+ }
201
+ /**
202
+ * Remove a tool from a toolset
203
+ */
204
+ export function removeToolFromToolset(toolsetName, toolName) {
205
+ const registry = loadMcpRegistry();
206
+ const toolset = registry.toolsets[toolsetName];
207
+ if (!toolset) {
208
+ return false;
209
+ }
210
+ const index = toolset.indexOf(toolName);
211
+ if (index === -1) {
212
+ return false;
213
+ }
214
+ toolset.splice(index, 1);
215
+ saveMcpRegistry(registry);
216
+ return true;
217
+ }
218
+ /**
219
+ * Set the active toolset
220
+ */
221
+ export function setActiveToolset(name) {
222
+ const registry = loadMcpRegistry();
223
+ if (name !== null && !(name in registry.toolsets)) {
224
+ return false;
225
+ }
226
+ registry.activeToolset = name;
227
+ saveMcpRegistry(registry);
228
+ return true;
229
+ }
230
+ /**
231
+ * Get the active toolset name
232
+ */
233
+ export function getActiveToolset() {
234
+ const registry = loadMcpRegistry();
235
+ return registry.activeToolset;
236
+ }
237
+ /**
238
+ * List all toolsets
239
+ */
240
+ export function listToolsets() {
241
+ const registry = loadMcpRegistry();
242
+ return Object.entries(registry.toolsets).map(([name, tools]) => ({
243
+ name,
244
+ tools,
245
+ isActive: registry.activeToolset === name,
246
+ }));
247
+ }
248
+ /**
249
+ * Sync MCP registry with global tools.json
250
+ * Adds any tools from tools.json that aren't in mcp.json
251
+ * Does NOT remove tools (allows mcp.json to have subset of tools.json)
252
+ */
253
+ export function syncMcpWithGlobalTools(globalTools) {
254
+ const registry = loadMcpRegistry();
255
+ let changed = false;
256
+ for (const [name, version] of Object.entries(globalTools)) {
257
+ if (!(name in registry.tools)) {
258
+ registry.tools[name] = version;
259
+ changed = true;
260
+ }
261
+ }
262
+ if (changed) {
263
+ saveMcpRegistry(registry);
264
+ }
265
+ }
266
+ //# sourceMappingURL=mcp-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-registry.js","sourceRoot":"","sources":["../src/mcp-registry.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * TypeScript types for Enact tool manifests
3
- * These types define the structure of enact.yaml and enact.md frontmatter
3
+ * These types define the structure of SKILL.md (and legacy enact.yaml/enact.md) frontmatter
4
4
  */
5
5
  import type { JSONSchema7 } from "json-schema";
6
6
  /**
@@ -68,7 +68,7 @@ export interface ToolExample {
68
68
  }
69
69
  /**
70
70
  * Complete tool manifest structure
71
- * This represents the YAML frontmatter in enact.md or the full enact.yaml
71
+ * This represents the YAML frontmatter in SKILL.md (or legacy enact.md/enact.yaml)
72
72
  */
73
73
  export interface ToolManifest {
74
74
  /** Hierarchical tool identifier (e.g., "org/category/tool-name") */
@@ -191,8 +191,10 @@ export interface ToolResolution {
191
191
  }
192
192
  /**
193
193
  * Supported manifest file names
194
+ * SKILL.md is the primary format (aligned with Anthropic Agent Skills)
195
+ * enact.md/yaml/yml are supported for backwards compatibility
194
196
  */
195
- export declare const MANIFEST_FILES: readonly ["enact.md", "enact.yaml", "enact.yml"];
197
+ export declare const MANIFEST_FILES: readonly ["SKILL.md", "enact.md", "enact.yaml", "enact.yml"];
196
198
  export type ManifestFileName = (typeof MANIFEST_FILES)[number];
197
199
  /**
198
200
  * Package manifest file name
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/types/manifest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/types/manifest.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,8DAA8D;IAC9D,WAAW,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,kBAAkB;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,kCAAkC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,yCAAyC;IACzC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kDAAkD;IAClD,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,2DAA2D;IAC3D,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uCAAuC;IACvC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,uCAAuC;IACvC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,oCAAoC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAG3B,oEAAoE;IACpE,IAAI,EAAE,MAAM,CAAC;IAEb,uDAAuD;IACvD,WAAW,EAAE,MAAM,CAAC;IAIpB,kEAAkE;IAClE,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,oDAAoD;IACpD,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,uEAAuE;IACvE,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,kEAAkE;IAClE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAE1B,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,0DAA0D;IAC1D,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,qDAAqD;IACrD,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAIhB,4CAA4C;IAC5C,WAAW,CAAC,EAAE,WAAW,CAAC;IAE1B,4CAA4C;IAC5C,YAAY,CAAC,EAAE,WAAW,CAAC;IAI3B,6DAA6D;IAC7D,GAAG,CAAC,EAAE,YAAY,CAAC;IAInB,mCAAmC;IACnC,WAAW,CAAC,EAAE,eAAe,CAAC;IAE9B,uCAAuC;IACvC,SAAS,CAAC,EAAE,oBAAoB,CAAC;IAIjC,wCAAwC;IACxC,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAInB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IAIzB,8EAA8E;IAC9E,CAAC,GAAG,EAAE,KAAK,MAAM,EAAE,GAAG,OAAO,CAAC;CAC/B;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,gEAAgE;IAChE,GAAG,CAAC,EAAE,YAAY,CAAC;IAEnB,mCAAmC;IACnC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB,mCAAmC;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,8BAA8B;IAC9B,CAAC,GAAG,EAAE,KAAK,MAAM,EAAE,GAAG,OAAO,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,kCAAkC;IAClC,QAAQ,EAAE,YAAY,CAAC;IACvB,mDAAmD;IACnD,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,mDAAmD;IACnD,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,oCAAoC;IACpC,KAAK,EAAE,OAAO,CAAC;IACf,iCAAiC;IACjC,MAAM,CAAC,EAAE,eAAe,EAAE,GAAG,SAAS,CAAC;IACvC,kCAAkC;IAClC,QAAQ,CAAC,EAAE,iBAAiB,EAAE,GAAG,SAAS,CAAC;CAC5C;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAC;IACb,oBAAoB;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,sBAAsB;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC;AAE9E;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,wCAAwC;IACxC,QAAQ,EAAE,YAAY,CAAC;IACvB,oCAAoC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,QAAQ,EAAE,YAAY,CAAC;IACvB,gCAAgC;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,kCAAkC;IAClC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AAED;;;;GAIG;AACH,eAAO,MAAM,cAAc,8DAA+D,CAAC;AAC3F,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/D;;GAEG;AACH,eAAO,MAAM,qBAAqB,uBAAuB,CAAC"}
@@ -1,11 +1,13 @@
1
1
  /**
2
2
  * TypeScript types for Enact tool manifests
3
- * These types define the structure of enact.yaml and enact.md frontmatter
3
+ * These types define the structure of SKILL.md (and legacy enact.yaml/enact.md) frontmatter
4
4
  */
5
5
  /**
6
6
  * Supported manifest file names
7
+ * SKILL.md is the primary format (aligned with Anthropic Agent Skills)
8
+ * enact.md/yaml/yml are supported for backwards compatibility
7
9
  */
8
- export const MANIFEST_FILES = ["enact.md", "enact.yaml", "enact.yml"];
10
+ export const MANIFEST_FILES = ["SKILL.md", "enact.md", "enact.yaml", "enact.yml"];
9
11
  /**
10
12
  * Package manifest file name
11
13
  */
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/types/manifest.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAkPH;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,UAAU,EAAE,YAAY,EAAE,WAAW,CAAU,CAAC;AAG/E;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,oBAAoB,CAAC"}
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/types/manifest.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAkPH;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,CAAU,CAAC;AAG3F;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,oBAAoB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@enactprotocol/shared",
3
- "version": "2.1.7",
3
+ "version": "2.1.14",
4
4
  "description": "Core business logic and utilities for Enact",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -18,7 +18,7 @@
18
18
  "typecheck": "tsc --noEmit"
19
19
  },
20
20
  "dependencies": {
21
- "@enactprotocol/trust": "2.1.7",
21
+ "@enactprotocol/trust": "2.1.14",
22
22
  "js-yaml": "^4.1.1",
23
23
  "zod": "^4.1.13"
24
24
  },
@@ -44,7 +44,7 @@ export interface LoadedManifest {
44
44
  /**
45
45
  * Load a manifest from a file path
46
46
  *
47
- * @param filePath - Path to the manifest file (enact.yaml, enact.yml, or enact.md)
47
+ * @param filePath - Path to the manifest file (SKILL.md, enact.md, enact.yaml, or enact.yml)
48
48
  * @returns LoadedManifest with validated manifest and metadata
49
49
  * @throws ManifestLoadError if file doesn't exist, parse fails, or validation fails
50
50
  */
@@ -111,7 +111,7 @@ export function loadManifest(filePath: string): LoadedManifest {
111
111
  /**
112
112
  * Find and load a manifest from a directory
113
113
  *
114
- * Searches for enact.md, enact.yaml, or enact.yml in the given directory
114
+ * Searches for SKILL.md, enact.md, enact.yaml, or enact.yml in the given directory
115
115
  *
116
116
  * @param dir - Directory to search for manifest
117
117
  * @returns LoadedManifest if found
@@ -2,8 +2,9 @@
2
2
  * YAML and Markdown parser for Enact tool manifests
3
3
  *
4
4
  * Handles parsing of:
5
- * - enact.yaml files (pure YAML)
6
- * - enact.md files (YAML frontmatter + Markdown body)
5
+ * - SKILL.md files (YAML frontmatter + Markdown body) - primary format
6
+ * - enact.yaml/yml files (pure YAML) - legacy format
7
+ * - enact.md files (YAML frontmatter + Markdown body) - legacy format
7
8
  */
8
9
 
9
10
  import yaml from "js-yaml";
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * TypeScript types for Enact tool manifests
3
- * These types define the structure of enact.yaml and enact.md frontmatter
3
+ * These types define the structure of SKILL.md (and legacy enact.yaml/enact.md) frontmatter
4
4
  */
5
5
 
6
6
  import type { JSONSchema7 } from "json-schema";
@@ -76,7 +76,7 @@ export interface ToolExample {
76
76
 
77
77
  /**
78
78
  * Complete tool manifest structure
79
- * This represents the YAML frontmatter in enact.md or the full enact.yaml
79
+ * This represents the YAML frontmatter in SKILL.md (or legacy enact.md/enact.yaml)
80
80
  */
81
81
  export interface ToolManifest {
82
82
  // ==================== Required Fields ====================
@@ -245,8 +245,10 @@ export interface ToolResolution {
245
245
 
246
246
  /**
247
247
  * Supported manifest file names
248
+ * SKILL.md is the primary format (aligned with Anthropic Agent Skills)
249
+ * enact.md/yaml/yml are supported for backwards compatibility
248
250
  */
249
- export const MANIFEST_FILES = ["enact.md", "enact.yaml", "enact.yml"] as const;
251
+ export const MANIFEST_FILES = ["SKILL.md", "enact.md", "enact.yaml", "enact.yml"] as const;
250
252
  export type ManifestFileName = (typeof MANIFEST_FILES)[number];
251
253
 
252
254
  /**
@@ -345,10 +345,11 @@ describe("manifest types", () => {
345
345
 
346
346
  describe("constants", () => {
347
347
  test("MANIFEST_FILES contains expected files", () => {
348
+ expect(MANIFEST_FILES).toContain("SKILL.md");
348
349
  expect(MANIFEST_FILES).toContain("enact.md");
349
350
  expect(MANIFEST_FILES).toContain("enact.yaml");
350
351
  expect(MANIFEST_FILES).toContain("enact.yml");
351
- expect(MANIFEST_FILES.length).toBe(3);
352
+ expect(MANIFEST_FILES.length).toBe(4);
352
353
  });
353
354
 
354
355
  test("PACKAGE_MANIFEST_FILE is correct", () => {