@enactprotocol/shared 2.1.6 → 2.1.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/manifest/loader.d.ts +2 -2
- package/dist/manifest/loader.js +2 -2
- package/dist/manifest/parser.d.ts +3 -2
- package/dist/manifest/parser.d.ts.map +1 -1
- package/dist/manifest/parser.js +3 -2
- package/dist/manifest/parser.js.map +1 -1
- package/dist/mcp-registry.d.ts +107 -0
- package/dist/mcp-registry.d.ts.map +1 -0
- package/dist/mcp-registry.js +266 -0
- package/dist/mcp-registry.js.map +1 -0
- package/dist/types/manifest.d.ts +5 -3
- package/dist/types/manifest.d.ts.map +1 -1
- package/dist/types/manifest.js +4 -2
- package/dist/types/manifest.js.map +1 -1
- package/package.json +2 -2
- package/src/manifest/loader.ts +2 -2
- package/src/manifest/parser.ts +3 -2
- package/src/types/manifest.ts +5 -3
- package/tests/manifest-types.test.ts +2 -1
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -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.
|
|
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
|
package/dist/manifest/loader.js
CHANGED
|
@@ -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.
|
|
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
|
-
* -
|
|
6
|
-
* - enact.
|
|
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
|
|
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"}
|
package/dist/manifest/parser.js
CHANGED
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
* YAML and Markdown parser for Enact tool manifests
|
|
3
3
|
*
|
|
4
4
|
* Handles parsing of:
|
|
5
|
-
* -
|
|
6
|
-
* - enact.
|
|
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":"AAAA
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/manifest/parser.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,IAAI,MAAM,SAAS,CAAC;AAG3B;;GAEG;AACH,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAC3B,aAAa,CAAoB;IAEjD,YAAY,OAAe,EAAE,aAAqB;QAChD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,iBAAiB,GAAG,6CAA6C,CAAC;AAOxE;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAIhD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAE/C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAEtB,OAAO;QACL,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE;QAClD,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE;KAC9B,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,WAAmB;IAC3C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEtC,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YAC5C,MAAM,IAAI,kBAAkB,CAAC,+BAA+B,CAAC,CAAC;QAChE,CAAC;QAED,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACxD,MAAM,IAAI,kBAAkB,CAAC,2DAA2D,CAAC,CAAC;QAC5F,CAAC;QAED,OAAO,MAAiC,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,kBAAkB,EAAE,CAAC;YACxC,MAAM,KAAK,CAAC;QACd,CAAC;QAED,MAAM,SAAS,GAAG,KAAc,CAAC;QACjC,MAAM,IAAI,kBAAkB,CAAC,yBAAyB,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;IACxF,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,OAAe,EAAE,MAAsB;IACnE,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,kBAAkB,CAAC,2BAA2B,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;QAClC,OAAO;YACL,QAAQ,EAAE,MAAiC;YAC3C,MAAM,EAAE,MAAM;SACf,CAAC;IACJ,CAAC;IAED,yBAAyB;IACzB,MAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAE9C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,kBAAkB,CAC1B,oEAAoE,CACrE,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;QAC3B,MAAM,IAAI,kBAAkB,CAAC,2BAA2B,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAEhD,MAAM,MAAM,GAAmB;QAC7B,QAAQ,EAAE,MAAiC;QAC3C,MAAM,EAAE,IAAI;KACb,CAAC;IAEF,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC;QACnB,MAAM,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;IAC/B,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IAErC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACtD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,IAAI,kBAAkB,CAC1B,gDAAgD,QAAQ,2CAA2C,CACpG,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAe,EAAE,QAAgB;IACjE,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACtC,OAAO,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACxC,CAAC"}
|
|
@@ -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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"}
|
package/dist/types/manifest.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* TypeScript types for Enact tool manifests
|
|
3
|
-
* These types define the structure of
|
|
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
|
|
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":"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"}
|
package/dist/types/manifest.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* TypeScript types for Enact tool manifests
|
|
3
|
-
* These types define the structure of
|
|
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
|
|
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.
|
|
3
|
+
"version": "2.1.10",
|
|
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.
|
|
21
|
+
"@enactprotocol/trust": "2.1.10",
|
|
22
22
|
"js-yaml": "^4.1.1",
|
|
23
23
|
"zod": "^4.1.13"
|
|
24
24
|
},
|
package/src/manifest/loader.ts
CHANGED
|
@@ -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.
|
|
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
|
package/src/manifest/parser.ts
CHANGED
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
* YAML and Markdown parser for Enact tool manifests
|
|
3
3
|
*
|
|
4
4
|
* Handles parsing of:
|
|
5
|
-
* -
|
|
6
|
-
* - enact.
|
|
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";
|
package/src/types/manifest.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* TypeScript types for Enact tool manifests
|
|
3
|
-
* These types define the structure of
|
|
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
|
|
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(
|
|
352
|
+
expect(MANIFEST_FILES.length).toBe(4);
|
|
352
353
|
});
|
|
353
354
|
|
|
354
355
|
test("PACKAGE_MANIFEST_FILE is correct", () => {
|