opencode-skill-autodiscovery 1.6.1 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +345 -45
- package/dist/agents.d.ts +3 -1
- package/dist/agents.d.ts.map +1 -1
- package/dist/agents.js +111 -27
- package/dist/agents.js.map +1 -1
- package/dist/cache.d.ts +5 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/cache.js +94 -0
- package/dist/cache.js.map +1 -0
- package/dist/discovery-cache.d.ts +9 -0
- package/dist/discovery-cache.d.ts.map +1 -0
- package/dist/discovery-cache.js +161 -0
- package/dist/discovery-cache.js.map +1 -0
- package/dist/discovery.d.ts +31 -9
- package/dist/discovery.d.ts.map +1 -1
- package/dist/discovery.js +531 -178
- package/dist/discovery.js.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +64 -10
- package/dist/index.js.map +1 -1
- package/dist/mcp.d.ts +6 -2
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +104 -17
- package/dist/mcp.js.map +1 -1
- package/dist/schema.d.ts +1 -0
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +10 -0
- package/dist/schema.js.map +1 -1
- package/dist/schemas/mcp-schema-1.0.0.d.ts +117 -0
- package/dist/schemas/mcp-schema-1.0.0.d.ts.map +1 -0
- package/dist/schemas/mcp-schema-1.0.0.js +139 -0
- package/dist/schemas/mcp-schema-1.0.0.js.map +1 -0
- package/dist/schemas/plugin-schema-1.0.0.d.ts +66 -0
- package/dist/schemas/plugin-schema-1.0.0.d.ts.map +1 -0
- package/dist/schemas/plugin-schema-1.0.0.js +72 -0
- package/dist/schemas/plugin-schema-1.0.0.js.map +1 -0
- package/dist/spec-schema.d.ts +12 -0
- package/dist/spec-schema.d.ts.map +1 -0
- package/dist/spec-schema.js +71 -0
- package/dist/spec-schema.js.map +1 -0
- package/package.json +50 -47
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
export declare const mcpSchema100: {
|
|
2
|
+
readonly $schema: "https://json-schema.org/draft/2020-12/schema";
|
|
3
|
+
readonly $id: "https://agent-plugins.org/schemas/1.0.0/mcp.schema.json";
|
|
4
|
+
readonly title: "Agent Plugins MCP Configuration";
|
|
5
|
+
readonly description: "Machine-readable schema for mcp.json in Agent Plugins 1.0.0. The Agent Plugins specification defines additional semantic and operational requirements.";
|
|
6
|
+
readonly type: "object";
|
|
7
|
+
readonly properties: {
|
|
8
|
+
readonly $schema: {
|
|
9
|
+
readonly const: "https://agent-plugins.org/schemas/1.0.0/mcp.schema.json";
|
|
10
|
+
readonly description: "Canonical identifier of the MCP configuration schema for the Agent Plugins version targeted by this document.";
|
|
11
|
+
};
|
|
12
|
+
readonly mcpServers: {
|
|
13
|
+
readonly type: "object";
|
|
14
|
+
readonly additionalProperties: {
|
|
15
|
+
readonly $ref: "#/$defs/server";
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
readonly required: readonly ["$schema", "mcpServers"];
|
|
20
|
+
readonly additionalProperties: false;
|
|
21
|
+
readonly $defs: {
|
|
22
|
+
readonly server: {
|
|
23
|
+
readonly title: "MCP server";
|
|
24
|
+
readonly oneOf: readonly [{
|
|
25
|
+
readonly $ref: "#/$defs/stdioServer";
|
|
26
|
+
}, {
|
|
27
|
+
readonly $ref: "#/$defs/streamableHttpServer";
|
|
28
|
+
}, {
|
|
29
|
+
readonly $ref: "#/$defs/sseServer";
|
|
30
|
+
}];
|
|
31
|
+
};
|
|
32
|
+
readonly stdioServer: {
|
|
33
|
+
readonly title: "stdio MCP server";
|
|
34
|
+
readonly type: "object";
|
|
35
|
+
readonly properties: {
|
|
36
|
+
readonly type: {
|
|
37
|
+
readonly const: "stdio";
|
|
38
|
+
};
|
|
39
|
+
readonly command: {
|
|
40
|
+
readonly type: "string";
|
|
41
|
+
readonly minLength: 1;
|
|
42
|
+
readonly description: "Executable token. Resolution rules are defined by the Agent Plugins specification.";
|
|
43
|
+
};
|
|
44
|
+
readonly args: {
|
|
45
|
+
readonly type: "array";
|
|
46
|
+
readonly items: {
|
|
47
|
+
readonly type: "string";
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
readonly env: {
|
|
51
|
+
readonly type: "object";
|
|
52
|
+
readonly propertyNames: {
|
|
53
|
+
readonly not: {
|
|
54
|
+
readonly enum: readonly ["PLUGIN_ROOT", "PLUGIN_DATA"];
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
readonly additionalProperties: {
|
|
58
|
+
readonly type: "string";
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
readonly cwd: {
|
|
62
|
+
readonly type: "string";
|
|
63
|
+
readonly pattern: "^(?:\\./|\\$\\{PLUGIN_ROOT\\}(?:/|$)|\\$\\{PLUGIN_DATA\\}(?:/|$))";
|
|
64
|
+
readonly description: "Plugin-relative, PLUGIN_ROOT-rooted, or PLUGIN_DATA-rooted working directory. Filesystem containment is validated separately.";
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
readonly required: readonly ["type", "command"];
|
|
68
|
+
readonly additionalProperties: false;
|
|
69
|
+
};
|
|
70
|
+
readonly streamableHttpServer: {
|
|
71
|
+
readonly title: "Streamable HTTP MCP server";
|
|
72
|
+
readonly type: "object";
|
|
73
|
+
readonly properties: {
|
|
74
|
+
readonly type: {
|
|
75
|
+
readonly const: "streamable-http";
|
|
76
|
+
};
|
|
77
|
+
readonly url: {
|
|
78
|
+
readonly type: "string";
|
|
79
|
+
readonly minLength: 1;
|
|
80
|
+
readonly description: "MCP endpoint URL. URL semantics are defined by the Agent Plugins specification.";
|
|
81
|
+
};
|
|
82
|
+
readonly headers: {
|
|
83
|
+
readonly $ref: "#/$defs/headers";
|
|
84
|
+
};
|
|
85
|
+
};
|
|
86
|
+
readonly required: readonly ["type", "url"];
|
|
87
|
+
readonly additionalProperties: false;
|
|
88
|
+
};
|
|
89
|
+
readonly sseServer: {
|
|
90
|
+
readonly title: "Legacy HTTP+SSE MCP server";
|
|
91
|
+
readonly type: "object";
|
|
92
|
+
readonly properties: {
|
|
93
|
+
readonly type: {
|
|
94
|
+
readonly const: "sse";
|
|
95
|
+
};
|
|
96
|
+
readonly url: {
|
|
97
|
+
readonly type: "string";
|
|
98
|
+
readonly minLength: 1;
|
|
99
|
+
readonly description: "MCP endpoint URL. URL semantics are defined by the Agent Plugins specification.";
|
|
100
|
+
};
|
|
101
|
+
readonly headers: {
|
|
102
|
+
readonly $ref: "#/$defs/headers";
|
|
103
|
+
};
|
|
104
|
+
};
|
|
105
|
+
readonly required: readonly ["type", "url"];
|
|
106
|
+
readonly additionalProperties: false;
|
|
107
|
+
};
|
|
108
|
+
readonly headers: {
|
|
109
|
+
readonly title: "HTTP headers";
|
|
110
|
+
readonly type: "object";
|
|
111
|
+
readonly additionalProperties: {
|
|
112
|
+
readonly type: "string";
|
|
113
|
+
};
|
|
114
|
+
};
|
|
115
|
+
};
|
|
116
|
+
};
|
|
117
|
+
//# sourceMappingURL=mcp-schema-1.0.0.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-schema-1.0.0.d.ts","sourceRoot":"","sources":["../../src/schemas/mcp-schema-1.0.0.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsIf,CAAC"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
// Vendored verbatim from https://agent-plugins.org/schemas/1.0.0/mcp.schema.json
|
|
2
|
+
// so discovery never depends on a network fetch. Re-vendor when a new
|
|
3
|
+
// Agent Plugins schema version is published and this plugin adds support for it.
|
|
4
|
+
export const mcpSchema100 = {
|
|
5
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
6
|
+
"$id": "https://agent-plugins.org/schemas/1.0.0/mcp.schema.json",
|
|
7
|
+
"title": "Agent Plugins MCP Configuration",
|
|
8
|
+
"description": "Machine-readable schema for mcp.json in Agent Plugins 1.0.0. The Agent Plugins specification defines additional semantic and operational requirements.",
|
|
9
|
+
"type": "object",
|
|
10
|
+
"properties": {
|
|
11
|
+
"$schema": {
|
|
12
|
+
"const": "https://agent-plugins.org/schemas/1.0.0/mcp.schema.json",
|
|
13
|
+
"description": "Canonical identifier of the MCP configuration schema for the Agent Plugins version targeted by this document."
|
|
14
|
+
},
|
|
15
|
+
"mcpServers": {
|
|
16
|
+
"type": "object",
|
|
17
|
+
"additionalProperties": {
|
|
18
|
+
"$ref": "#/$defs/server"
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"required": [
|
|
23
|
+
"$schema",
|
|
24
|
+
"mcpServers"
|
|
25
|
+
],
|
|
26
|
+
"additionalProperties": false,
|
|
27
|
+
"$defs": {
|
|
28
|
+
"server": {
|
|
29
|
+
"title": "MCP server",
|
|
30
|
+
"oneOf": [
|
|
31
|
+
{
|
|
32
|
+
"$ref": "#/$defs/stdioServer"
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"$ref": "#/$defs/streamableHttpServer"
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"$ref": "#/$defs/sseServer"
|
|
39
|
+
}
|
|
40
|
+
]
|
|
41
|
+
},
|
|
42
|
+
"stdioServer": {
|
|
43
|
+
"title": "stdio MCP server",
|
|
44
|
+
"type": "object",
|
|
45
|
+
"properties": {
|
|
46
|
+
"type": {
|
|
47
|
+
"const": "stdio"
|
|
48
|
+
},
|
|
49
|
+
"command": {
|
|
50
|
+
"type": "string",
|
|
51
|
+
"minLength": 1,
|
|
52
|
+
"description": "Executable token. Resolution rules are defined by the Agent Plugins specification."
|
|
53
|
+
},
|
|
54
|
+
"args": {
|
|
55
|
+
"type": "array",
|
|
56
|
+
"items": {
|
|
57
|
+
"type": "string"
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
"env": {
|
|
61
|
+
"type": "object",
|
|
62
|
+
"propertyNames": {
|
|
63
|
+
"not": {
|
|
64
|
+
"enum": [
|
|
65
|
+
"PLUGIN_ROOT",
|
|
66
|
+
"PLUGIN_DATA"
|
|
67
|
+
]
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
"additionalProperties": {
|
|
71
|
+
"type": "string"
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
"cwd": {
|
|
75
|
+
"type": "string",
|
|
76
|
+
"pattern": "^(?:\\./|\\$\\{PLUGIN_ROOT\\}(?:/|$)|\\$\\{PLUGIN_DATA\\}(?:/|$))",
|
|
77
|
+
"description": "Plugin-relative, PLUGIN_ROOT-rooted, or PLUGIN_DATA-rooted working directory. Filesystem containment is validated separately."
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
"required": [
|
|
81
|
+
"type",
|
|
82
|
+
"command"
|
|
83
|
+
],
|
|
84
|
+
"additionalProperties": false
|
|
85
|
+
},
|
|
86
|
+
"streamableHttpServer": {
|
|
87
|
+
"title": "Streamable HTTP MCP server",
|
|
88
|
+
"type": "object",
|
|
89
|
+
"properties": {
|
|
90
|
+
"type": {
|
|
91
|
+
"const": "streamable-http"
|
|
92
|
+
},
|
|
93
|
+
"url": {
|
|
94
|
+
"type": "string",
|
|
95
|
+
"minLength": 1,
|
|
96
|
+
"description": "MCP endpoint URL. URL semantics are defined by the Agent Plugins specification."
|
|
97
|
+
},
|
|
98
|
+
"headers": {
|
|
99
|
+
"$ref": "#/$defs/headers"
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
"required": [
|
|
103
|
+
"type",
|
|
104
|
+
"url"
|
|
105
|
+
],
|
|
106
|
+
"additionalProperties": false
|
|
107
|
+
},
|
|
108
|
+
"sseServer": {
|
|
109
|
+
"title": "Legacy HTTP+SSE MCP server",
|
|
110
|
+
"type": "object",
|
|
111
|
+
"properties": {
|
|
112
|
+
"type": {
|
|
113
|
+
"const": "sse"
|
|
114
|
+
},
|
|
115
|
+
"url": {
|
|
116
|
+
"type": "string",
|
|
117
|
+
"minLength": 1,
|
|
118
|
+
"description": "MCP endpoint URL. URL semantics are defined by the Agent Plugins specification."
|
|
119
|
+
},
|
|
120
|
+
"headers": {
|
|
121
|
+
"$ref": "#/$defs/headers"
|
|
122
|
+
}
|
|
123
|
+
},
|
|
124
|
+
"required": [
|
|
125
|
+
"type",
|
|
126
|
+
"url"
|
|
127
|
+
],
|
|
128
|
+
"additionalProperties": false
|
|
129
|
+
},
|
|
130
|
+
"headers": {
|
|
131
|
+
"title": "HTTP headers",
|
|
132
|
+
"type": "object",
|
|
133
|
+
"additionalProperties": {
|
|
134
|
+
"type": "string"
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
//# sourceMappingURL=mcp-schema-1.0.0.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-schema-1.0.0.js","sourceRoot":"","sources":["../../src/schemas/mcp-schema-1.0.0.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
export declare const pluginSchema100: {
|
|
2
|
+
readonly $schema: "https://json-schema.org/draft/2020-12/schema";
|
|
3
|
+
readonly $id: "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json";
|
|
4
|
+
readonly title: "Agent Plugins Manifest";
|
|
5
|
+
readonly description: "Machine-readable schema for plugin.json in Agent Plugins 1.0.0. The Agent Plugins specification defines additional semantic and operational requirements.";
|
|
6
|
+
readonly type: "object";
|
|
7
|
+
readonly properties: {
|
|
8
|
+
readonly $schema: {
|
|
9
|
+
readonly const: "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json";
|
|
10
|
+
readonly description: "Canonical identifier of the plugin manifest schema for the Agent Plugins version targeted by this document.";
|
|
11
|
+
};
|
|
12
|
+
readonly name: {
|
|
13
|
+
readonly type: "string";
|
|
14
|
+
readonly minLength: 1;
|
|
15
|
+
readonly maxLength: 64;
|
|
16
|
+
readonly pattern: "^(?!.*(?:--|\\.\\.))[a-z0-9](?:[a-z0-9.-]*[a-z0-9])?$";
|
|
17
|
+
readonly description: "Human-readable plugin name.";
|
|
18
|
+
};
|
|
19
|
+
readonly version: {
|
|
20
|
+
readonly type: "string";
|
|
21
|
+
};
|
|
22
|
+
readonly description: {
|
|
23
|
+
readonly type: "string";
|
|
24
|
+
};
|
|
25
|
+
readonly author: {
|
|
26
|
+
readonly type: "object";
|
|
27
|
+
readonly properties: {
|
|
28
|
+
readonly name: {
|
|
29
|
+
readonly type: "string";
|
|
30
|
+
};
|
|
31
|
+
readonly email: {
|
|
32
|
+
readonly type: "string";
|
|
33
|
+
};
|
|
34
|
+
readonly url: {
|
|
35
|
+
readonly type: "string";
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
readonly additionalProperties: false;
|
|
39
|
+
};
|
|
40
|
+
readonly homepage: {
|
|
41
|
+
readonly type: "string";
|
|
42
|
+
};
|
|
43
|
+
readonly repository: {
|
|
44
|
+
readonly type: "string";
|
|
45
|
+
};
|
|
46
|
+
readonly license: {
|
|
47
|
+
readonly type: "string";
|
|
48
|
+
};
|
|
49
|
+
readonly keywords: {
|
|
50
|
+
readonly type: "array";
|
|
51
|
+
readonly items: {
|
|
52
|
+
readonly type: "string";
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
readonly extensions: {
|
|
56
|
+
readonly type: "object";
|
|
57
|
+
readonly description: "Client-specific manifest data keyed by reverse-domain extension namespace. Agent Plugins assigns no semantics to namespace object contents.";
|
|
58
|
+
readonly additionalProperties: {
|
|
59
|
+
readonly type: "object";
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
readonly required: readonly ["$schema", "name"];
|
|
64
|
+
readonly additionalProperties: false;
|
|
65
|
+
};
|
|
66
|
+
//# sourceMappingURL=plugin-schema-1.0.0.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-schema-1.0.0.d.ts","sourceRoot":"","sources":["../../src/schemas/plugin-schema-1.0.0.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmElB,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
// Vendored verbatim from https://agent-plugins.org/schemas/1.0.0/plugin.schema.json
|
|
2
|
+
// so discovery never depends on a network fetch. Re-vendor when a new
|
|
3
|
+
// Agent Plugins schema version is published and this plugin adds support for it.
|
|
4
|
+
export const pluginSchema100 = {
|
|
5
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
6
|
+
"$id": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
|
|
7
|
+
"title": "Agent Plugins Manifest",
|
|
8
|
+
"description": "Machine-readable schema for plugin.json in Agent Plugins 1.0.0. The Agent Plugins specification defines additional semantic and operational requirements.",
|
|
9
|
+
"type": "object",
|
|
10
|
+
"properties": {
|
|
11
|
+
"$schema": {
|
|
12
|
+
"const": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
|
|
13
|
+
"description": "Canonical identifier of the plugin manifest schema for the Agent Plugins version targeted by this document."
|
|
14
|
+
},
|
|
15
|
+
"name": {
|
|
16
|
+
"type": "string",
|
|
17
|
+
"minLength": 1,
|
|
18
|
+
"maxLength": 64,
|
|
19
|
+
"pattern": "^(?!.*(?:--|\\.\\.))[a-z0-9](?:[a-z0-9.-]*[a-z0-9])?$",
|
|
20
|
+
"description": "Human-readable plugin name."
|
|
21
|
+
},
|
|
22
|
+
"version": {
|
|
23
|
+
"type": "string"
|
|
24
|
+
},
|
|
25
|
+
"description": {
|
|
26
|
+
"type": "string"
|
|
27
|
+
},
|
|
28
|
+
"author": {
|
|
29
|
+
"type": "object",
|
|
30
|
+
"properties": {
|
|
31
|
+
"name": {
|
|
32
|
+
"type": "string"
|
|
33
|
+
},
|
|
34
|
+
"email": {
|
|
35
|
+
"type": "string"
|
|
36
|
+
},
|
|
37
|
+
"url": {
|
|
38
|
+
"type": "string"
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
"additionalProperties": false
|
|
42
|
+
},
|
|
43
|
+
"homepage": {
|
|
44
|
+
"type": "string"
|
|
45
|
+
},
|
|
46
|
+
"repository": {
|
|
47
|
+
"type": "string"
|
|
48
|
+
},
|
|
49
|
+
"license": {
|
|
50
|
+
"type": "string"
|
|
51
|
+
},
|
|
52
|
+
"keywords": {
|
|
53
|
+
"type": "array",
|
|
54
|
+
"items": {
|
|
55
|
+
"type": "string"
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
"extensions": {
|
|
59
|
+
"type": "object",
|
|
60
|
+
"description": "Client-specific manifest data keyed by reverse-domain extension namespace. Agent Plugins assigns no semantics to namespace object contents.",
|
|
61
|
+
"additionalProperties": {
|
|
62
|
+
"type": "object"
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
"required": [
|
|
67
|
+
"$schema",
|
|
68
|
+
"name"
|
|
69
|
+
],
|
|
70
|
+
"additionalProperties": false
|
|
71
|
+
};
|
|
72
|
+
//# sourceMappingURL=plugin-schema-1.0.0.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-schema-1.0.0.js","sourceRoot":"","sources":["../../src/schemas/plugin-schema-1.0.0.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,sEAAsE;AACtE,iFAAiF;AACjF,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,SAAS,EAAE,8CAA8C;IACzD,KAAK,EAAE,4DAA4D;IACnE,OAAO,EAAE,wBAAwB;IACjC,aAAa,EAAE,2JAA2J;IAC1K,MAAM,EAAE,QAAQ;IAChB,YAAY,EAAE;QACZ,SAAS,EAAE;YACT,OAAO,EAAE,4DAA4D;YACrE,aAAa,EAAE,6GAA6G;SAC7H;QACD,MAAM,EAAE;YACN,MAAM,EAAE,QAAQ;YAChB,WAAW,EAAE,CAAC;YACd,WAAW,EAAE,EAAE;YACf,SAAS,EAAE,uDAAuD;YAClE,aAAa,EAAE,6BAA6B;SAC7C;QACD,SAAS,EAAE;YACT,MAAM,EAAE,QAAQ;SACjB;QACD,aAAa,EAAE;YACb,MAAM,EAAE,QAAQ;SACjB;QACD,QAAQ,EAAE;YACR,MAAM,EAAE,QAAQ;YAChB,YAAY,EAAE;gBACZ,MAAM,EAAE;oBACN,MAAM,EAAE,QAAQ;iBACjB;gBACD,OAAO,EAAE;oBACP,MAAM,EAAE,QAAQ;iBACjB;gBACD,KAAK,EAAE;oBACL,MAAM,EAAE,QAAQ;iBACjB;aACF;YACD,sBAAsB,EAAE,KAAK;SAC9B;QACD,UAAU,EAAE;YACV,MAAM,EAAE,QAAQ;SACjB;QACD,YAAY,EAAE;YACZ,MAAM,EAAE,QAAQ;SACjB;QACD,SAAS,EAAE;YACT,MAAM,EAAE,QAAQ;SACjB;QACD,UAAU,EAAE;YACV,MAAM,EAAE,OAAO;YACf,OAAO,EAAE;gBACP,MAAM,EAAE,QAAQ;aACjB;SACF;QACD,YAAY,EAAE;YACZ,MAAM,EAAE,QAAQ;YAChB,aAAa,EAAE,6IAA6I;YAC5J,sBAAsB,EAAE;gBACtB,MAAM,EAAE,QAAQ;aACjB;SACF;KACF;IACD,UAAU,EAAE;QACV,SAAS;QACT,MAAM;KACP;IACD,sBAAsB,EAAE,KAAK;CACrB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare const PLUGIN_SCHEMA_1_0_0_ID: "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json";
|
|
2
|
+
export declare const MCP_SCHEMA_1_0_0_ID: "https://agent-plugins.org/schemas/1.0.0/mcp.schema.json";
|
|
3
|
+
export type ValidationResult = {
|
|
4
|
+
valid: true;
|
|
5
|
+
} | {
|
|
6
|
+
valid: false;
|
|
7
|
+
errors: string[];
|
|
8
|
+
};
|
|
9
|
+
export declare function validatePluginManifest(manifest: unknown): ValidationResult;
|
|
10
|
+
export declare function validateMcpDocumentShape(doc: unknown): ValidationResult;
|
|
11
|
+
export declare function validateMcpServerEntry(entry: unknown): ValidationResult;
|
|
12
|
+
//# sourceMappingURL=spec-schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec-schema.d.ts","sourceRoot":"","sources":["../src/spec-schema.ts"],"names":[],"mappings":"AA4BA,eAAO,MAAM,sBAAsB,8DAAsB,CAAC;AAC1D,eAAO,MAAM,mBAAmB,2DAAmB,CAAC;AAcpD,MAAM,MAAM,gBAAgB,GAAG;IAAE,KAAK,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAkBpF,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,OAAO,GAAG,gBAAgB,CAE1E;AAOD,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB,CAEvE;AAKD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,CAEvE"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { Ajv2020 } from "ajv/dist/2020.js";
|
|
2
|
+
import { pluginSchema100 } from "./schemas/plugin-schema-1.0.0.js";
|
|
3
|
+
import { mcpSchema100 } from "./schemas/mcp-schema-1.0.0.js";
|
|
4
|
+
// Validates plugin.json and mcp.json documents (and individual MCP server
|
|
5
|
+
// entries) against the *published* Agent Plugins JSON schemas, vendored
|
|
6
|
+
// verbatim under ./schemas — never against a hand-copied field list.
|
|
7
|
+
// dodopayments/dodo-agent-plugin#13 found their own hand-authored .mcp.json
|
|
8
|
+
// carried an `enabled` key the real schema's closed union
|
|
9
|
+
// (`additionalProperties: false`) rejects — this project's prior
|
|
10
|
+
// STDIO_KEYS/HTTP_KEYS-based checks already happened to list the right keys
|
|
11
|
+
// for that specific case, but the general risk they carry is real: any field
|
|
12
|
+
// the schema forbids but nobody thought to add to a hand-copied key set
|
|
13
|
+
// silently passes. One concrete case this switch does newly catch: the real
|
|
14
|
+
// schema's `env` sub-schema forbids declaring `PLUGIN_ROOT`/`PLUGIN_DATA`
|
|
15
|
+
// (property name validation on the whole object), where the prior hand-
|
|
16
|
+
// rolled check only dropped those two keys and kept the rest of the entry —
|
|
17
|
+
// see discovery.test.js's "reserved PLUGIN_ROOT/PLUGIN_DATA env keys" tests
|
|
18
|
+
// for both that behavior change and the version-fallback path preserving
|
|
19
|
+
// the old (looser) handling for any schema version not vendored here.
|
|
20
|
+
//
|
|
21
|
+
// Only version 1.0.0 is vendored (it's the only version published today).
|
|
22
|
+
// PLUGIN_SCHEMA/MCP_SCHEMA in schema.ts still accept any 1.x.x for the
|
|
23
|
+
// $schema gate itself; callers apply these stricter validators only when the
|
|
24
|
+
// declared version exactly matches what's vendored here, and fall back to
|
|
25
|
+
// their pre-existing lenient checks otherwise — a future 1.1.0 manifest is
|
|
26
|
+
// never rejected just because this plugin hasn't vendored its schema yet.
|
|
27
|
+
export const PLUGIN_SCHEMA_1_0_0_ID = pluginSchema100.$id;
|
|
28
|
+
export const MCP_SCHEMA_1_0_0_ID = mcpSchema100.$id;
|
|
29
|
+
const ajv = new Ajv2020({ allErrors: true, strict: true });
|
|
30
|
+
const validatePluginDoc = ajv.compile(pluginSchema100);
|
|
31
|
+
const validateMcpDoc = ajv.compile(mcpSchema100);
|
|
32
|
+
// A standalone schema reusing mcp.schema.json's $defs, rather than a pointer
|
|
33
|
+
// into the already-compiled document: self-contained, so it validates one
|
|
34
|
+
// server entry on its own without depending on cross-schema $id resolution.
|
|
35
|
+
const validateMcpEntry = ajv.compile({
|
|
36
|
+
$defs: mcpSchema100.$defs,
|
|
37
|
+
$ref: "#/$defs/server",
|
|
38
|
+
});
|
|
39
|
+
function formatError(e) {
|
|
40
|
+
const path = e.instancePath || "(document root)";
|
|
41
|
+
return `${path} ${e.message ?? "is invalid"}`;
|
|
42
|
+
}
|
|
43
|
+
function toResult(validate, ok) {
|
|
44
|
+
if (ok)
|
|
45
|
+
return { valid: true };
|
|
46
|
+
// A oneOf mismatch (e.g. a server entry matching none of
|
|
47
|
+
// stdio/streamable-http/sse) reports one error per failed branch, which is
|
|
48
|
+
// accurate but repetitive; dedupe rather than lose any distinct message.
|
|
49
|
+
const errors = [...new Set((validate.errors ?? []).map(formatError))];
|
|
50
|
+
return { valid: false, errors };
|
|
51
|
+
}
|
|
52
|
+
// Validates a plugin.json document against Agent Plugins 1.0.0's
|
|
53
|
+
// plugin.schema.json (root manifest shape: name, $schema, extensions, etc.).
|
|
54
|
+
export function validatePluginManifest(manifest) {
|
|
55
|
+
return toResult(validatePluginDoc, validatePluginDoc(manifest));
|
|
56
|
+
}
|
|
57
|
+
// Validates an mcp.json document's top-level shape ($schema + mcpServers
|
|
58
|
+
// container) against Agent Plugins 1.0.0's mcp.schema.json. Does not validate
|
|
59
|
+
// individual server entries — use validateMcpServerEntry for those, so one
|
|
60
|
+
// malformed server never fails the whole document (the existing per-entry
|
|
61
|
+
// fail-closed philosophy this module preserves, not just formalizes).
|
|
62
|
+
export function validateMcpDocumentShape(doc) {
|
|
63
|
+
return toResult(validateMcpDoc, validateMcpDoc(doc));
|
|
64
|
+
}
|
|
65
|
+
// Validates one mcpServers[name] entry against the spec's server union
|
|
66
|
+
// (stdio | streamable-http | sse). A failure here means only that one
|
|
67
|
+
// server is skipped by the caller — never the rest of the package.
|
|
68
|
+
export function validateMcpServerEntry(entry) {
|
|
69
|
+
return toResult(validateMcpEntry, validateMcpEntry(entry));
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=spec-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec-schema.js","sourceRoot":"","sources":["../src/spec-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE7D,0EAA0E;AAC1E,wEAAwE;AACxE,qEAAqE;AACrE,4EAA4E;AAC5E,0DAA0D;AAC1D,iEAAiE;AACjE,4EAA4E;AAC5E,6EAA6E;AAC7E,wEAAwE;AACxE,4EAA4E;AAC5E,0EAA0E;AAC1E,wEAAwE;AACxE,4EAA4E;AAC5E,4EAA4E;AAC5E,yEAAyE;AACzE,sEAAsE;AACtE,EAAE;AACF,0EAA0E;AAC1E,uEAAuE;AACvE,6EAA6E;AAC7E,0EAA0E;AAC1E,2EAA2E;AAC3E,0EAA0E;AAC1E,MAAM,CAAC,MAAM,sBAAsB,GAAG,eAAe,CAAC,GAAG,CAAC;AAC1D,MAAM,CAAC,MAAM,mBAAmB,GAAG,YAAY,CAAC,GAAG,CAAC;AAEpD,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;AAE3D,MAAM,iBAAiB,GAAG,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;AACvD,MAAM,cAAc,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;AACjD,6EAA6E;AAC7E,0EAA0E;AAC1E,4EAA4E;AAC5E,MAAM,gBAAgB,GAAG,GAAG,CAAC,OAAO,CAAC;IACnC,KAAK,EAAE,YAAY,CAAC,KAAK;IACzB,IAAI,EAAE,gBAAgB;CACvB,CAAC,CAAC;AAIH,SAAS,WAAW,CAAC,CAAc;IACjC,MAAM,IAAI,GAAG,CAAC,CAAC,YAAY,IAAI,iBAAiB,CAAC;IACjD,OAAO,GAAG,IAAI,IAAI,CAAC,CAAC,OAAO,IAAI,YAAY,EAAE,CAAC;AAChD,CAAC;AAED,SAAS,QAAQ,CAAC,QAA0B,EAAE,EAAW;IACvD,IAAI,EAAE;QAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAC/B,yDAAyD;IACzD,2EAA2E;IAC3E,yEAAyE;IACzE,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IACtE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAClC,CAAC;AAED,iEAAiE;AACjE,6EAA6E;AAC7E,MAAM,UAAU,sBAAsB,CAAC,QAAiB;IACtD,OAAO,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,yEAAyE;AACzE,8EAA8E;AAC9E,2EAA2E;AAC3E,0EAA0E;AAC1E,sEAAsE;AACtE,MAAM,UAAU,wBAAwB,CAAC,GAAY;IACnD,OAAO,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;AACvD,CAAC;AAED,uEAAuE;AACvE,sEAAsE;AACtE,mEAAmE;AACnE,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,OAAO,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7D,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,47 +1,50 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "opencode-skill-autodiscovery",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "OpenCode plugin that auto-discovers skills installed by VS Code agent plugins, Claude Code plugins, and Agent Plugins 1.0.0 packages, and registers them with the local opencode config.",
|
|
5
|
-
"license": "MIT",
|
|
6
|
-
"repository": {
|
|
7
|
-
"type": "git",
|
|
8
|
-
"url": "git+https://github.com/Marinski/opencode-skill-autodiscovery.git"
|
|
9
|
-
},
|
|
10
|
-
"homepage": "https://github.com/Marinski/opencode-skill-autodiscovery",
|
|
11
|
-
"bugs": {
|
|
12
|
-
"url": "https://github.com/Marinski/opencode-skill-autodiscovery/issues"
|
|
13
|
-
},
|
|
14
|
-
"type": "module",
|
|
15
|
-
"main": "./dist/index.js",
|
|
16
|
-
"types": "./dist/index.d.ts",
|
|
17
|
-
"exports": {
|
|
18
|
-
".": {
|
|
19
|
-
"types": "./dist/index.d.ts",
|
|
20
|
-
"import": "./dist/index.js"
|
|
21
|
-
}
|
|
22
|
-
},
|
|
23
|
-
"files": [
|
|
24
|
-
"dist"
|
|
25
|
-
],
|
|
26
|
-
"engines": {
|
|
27
|
-
"node": ">=18"
|
|
28
|
-
},
|
|
29
|
-
"scripts": {
|
|
30
|
-
"build": "tsc -p tsconfig.json",
|
|
31
|
-
"test": "npm run build && node --test",
|
|
32
|
-
"prepublishOnly": "npm run build"
|
|
33
|
-
},
|
|
34
|
-
"keywords": [
|
|
35
|
-
"opencode",
|
|
36
|
-
"plugin",
|
|
37
|
-
"skill",
|
|
38
|
-
"autodiscovery",
|
|
39
|
-
"claude",
|
|
40
|
-
"vscode"
|
|
41
|
-
],
|
|
42
|
-
"devDependencies": {
|
|
43
|
-
"@opencode-ai/plugin": "1.18.13",
|
|
44
|
-
"
|
|
45
|
-
"
|
|
46
|
-
}
|
|
47
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "opencode-skill-autodiscovery",
|
|
3
|
+
"version": "2.1.0",
|
|
4
|
+
"description": "OpenCode plugin that auto-discovers skills installed by VS Code agent plugins, Claude Code plugins, and Agent Plugins 1.0.0 packages, and registers them with the local opencode config.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/Marinski/opencode-skill-autodiscovery.git"
|
|
9
|
+
},
|
|
10
|
+
"homepage": "https://github.com/Marinski/opencode-skill-autodiscovery",
|
|
11
|
+
"bugs": {
|
|
12
|
+
"url": "https://github.com/Marinski/opencode-skill-autodiscovery/issues"
|
|
13
|
+
},
|
|
14
|
+
"type": "module",
|
|
15
|
+
"main": "./dist/index.js",
|
|
16
|
+
"types": "./dist/index.d.ts",
|
|
17
|
+
"exports": {
|
|
18
|
+
".": {
|
|
19
|
+
"types": "./dist/index.d.ts",
|
|
20
|
+
"import": "./dist/index.js"
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
"files": [
|
|
24
|
+
"dist"
|
|
25
|
+
],
|
|
26
|
+
"engines": {
|
|
27
|
+
"node": ">=18"
|
|
28
|
+
},
|
|
29
|
+
"scripts": {
|
|
30
|
+
"build": "tsc -p tsconfig.json",
|
|
31
|
+
"test": "npm run build && node --test",
|
|
32
|
+
"prepublishOnly": "npm run build"
|
|
33
|
+
},
|
|
34
|
+
"keywords": [
|
|
35
|
+
"opencode",
|
|
36
|
+
"plugin",
|
|
37
|
+
"skill",
|
|
38
|
+
"autodiscovery",
|
|
39
|
+
"claude",
|
|
40
|
+
"vscode"
|
|
41
|
+
],
|
|
42
|
+
"devDependencies": {
|
|
43
|
+
"@opencode-ai/plugin": "1.18.13",
|
|
44
|
+
"@types/node": "^20.0.0",
|
|
45
|
+
"typescript": "^5.5.0"
|
|
46
|
+
},
|
|
47
|
+
"dependencies": {
|
|
48
|
+
"ajv": "^8.20.0"
|
|
49
|
+
}
|
|
50
|
+
}
|