claudecode-linter 2.1.150 → 2.1.153
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/.claudecode-lint.defaults.yaml +8 -2
- package/contracts/agent-frontmatter.schema.json +2 -2
- package/contracts/command-frontmatter.schema.json +56 -2
- package/contracts/hooks.schema.json +2 -2
- package/contracts/lsp.schema.json +2 -2
- package/contracts/mcp.schema.json +26 -2
- package/contracts/monitors.schema.json +3 -3
- package/contracts/plugin.schema.json +672 -22
- package/contracts/schemastore/keybindings.schema.json +179 -0
- package/contracts/schemastore/manifest.json +25 -0
- package/contracts/schemastore/marketplace.schema.json +2067 -0
- package/contracts/schemastore/plugin-manifest.schema.json +1834 -0
- package/contracts/schemastore/settings.schema.json +3240 -0
- package/contracts/settings.schema.json +93 -4
- package/contracts/skill-frontmatter.schema.json +56 -2
- package/dist/contracts.js +6 -1
- package/dist/discovery.js +23 -0
- package/dist/fixers/mcp-json.js +6 -0
- package/dist/index.js +8 -0
- package/dist/linters/agent-md.js +16 -7
- package/dist/linters/keybindings-json.js +53 -0
- package/dist/linters/marketplace-json.js +55 -0
- package/dist/linters/mcp-json.js +8 -0
- package/dist/linters/plugin-json.js +8 -0
- package/dist/linters/settings-json.js +89 -16
- package/dist/linters/skill-md.js +7 -1
- package/dist/plugin-schema.js +89 -41
- package/package.json +4 -2
|
@@ -0,0 +1,1834 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "https://json.schemastore.org/claude-code-plugin-manifest.json",
|
|
4
|
+
"$comment": "Generated on 2026-04-23T05:09:41.810Z",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"properties": {
|
|
7
|
+
"$schema": {
|
|
8
|
+
"description": "JSON Schema reference for editor autocomplete/validation; ignored at load time",
|
|
9
|
+
"type": "string"
|
|
10
|
+
},
|
|
11
|
+
"name": {
|
|
12
|
+
"description": "Unique identifier for the plugin, used for namespacing (prefer kebab-case)",
|
|
13
|
+
"type": "string",
|
|
14
|
+
"minLength": 1
|
|
15
|
+
},
|
|
16
|
+
"version": {
|
|
17
|
+
"description": "Semantic version (e.g., 1.2.3) following semver.org specification",
|
|
18
|
+
"type": "string"
|
|
19
|
+
},
|
|
20
|
+
"description": {
|
|
21
|
+
"description": "Brief, user-facing explanation of what the plugin provides",
|
|
22
|
+
"type": "string"
|
|
23
|
+
},
|
|
24
|
+
"author": {
|
|
25
|
+
"description": "Information about the plugin creator or maintainer",
|
|
26
|
+
"type": "object",
|
|
27
|
+
"properties": {
|
|
28
|
+
"name": {
|
|
29
|
+
"description": "Display name of the plugin author or organization",
|
|
30
|
+
"type": "string",
|
|
31
|
+
"minLength": 1
|
|
32
|
+
},
|
|
33
|
+
"email": {
|
|
34
|
+
"description": "Contact email for support or feedback",
|
|
35
|
+
"type": "string"
|
|
36
|
+
},
|
|
37
|
+
"url": {
|
|
38
|
+
"description": "Website, GitHub profile, or organization URL",
|
|
39
|
+
"type": "string"
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"required": [
|
|
43
|
+
"name"
|
|
44
|
+
]
|
|
45
|
+
},
|
|
46
|
+
"homepage": {
|
|
47
|
+
"description": "Plugin homepage or documentation URL",
|
|
48
|
+
"type": "string",
|
|
49
|
+
"format": "uri"
|
|
50
|
+
},
|
|
51
|
+
"repository": {
|
|
52
|
+
"description": "Source code repository URL",
|
|
53
|
+
"type": "string"
|
|
54
|
+
},
|
|
55
|
+
"license": {
|
|
56
|
+
"description": "SPDX license identifier (e.g., MIT, Apache-2.0)",
|
|
57
|
+
"type": "string"
|
|
58
|
+
},
|
|
59
|
+
"keywords": {
|
|
60
|
+
"description": "Tags for plugin discovery and categorization",
|
|
61
|
+
"type": "array",
|
|
62
|
+
"items": {
|
|
63
|
+
"type": "string"
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
"dependencies": {
|
|
67
|
+
"description": "Plugins that must be enabled for this plugin to function. Bare names (no \"@marketplace\") are resolved against the declaring plugin's own marketplace.",
|
|
68
|
+
"type": "array",
|
|
69
|
+
"items": {
|
|
70
|
+
"anyOf": [
|
|
71
|
+
{
|
|
72
|
+
"type": "string",
|
|
73
|
+
"pattern": "^[A-Za-z0-9][-A-Za-z0-9._]*(@[A-Za-z0-9][-A-Za-z0-9._]*)?(@\\^[^@]*)?$"
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"type": "object",
|
|
77
|
+
"properties": {
|
|
78
|
+
"name": {
|
|
79
|
+
"type": "string",
|
|
80
|
+
"minLength": 1,
|
|
81
|
+
"pattern": "^[A-Za-z0-9][-A-Za-z0-9._]*$"
|
|
82
|
+
},
|
|
83
|
+
"marketplace": {
|
|
84
|
+
"type": "string",
|
|
85
|
+
"minLength": 1,
|
|
86
|
+
"pattern": "^[A-Za-z0-9][-A-Za-z0-9._]*$"
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
"required": [
|
|
90
|
+
"name"
|
|
91
|
+
],
|
|
92
|
+
"additionalProperties": {}
|
|
93
|
+
}
|
|
94
|
+
]
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
"hooks": {
|
|
98
|
+
"anyOf": [
|
|
99
|
+
{
|
|
100
|
+
"description": "Path to file with additional hooks (in addition to those in hooks/hooks.json, if it exists), relative to the plugin root",
|
|
101
|
+
"type": "string",
|
|
102
|
+
"allOf": [
|
|
103
|
+
{
|
|
104
|
+
"type": "string",
|
|
105
|
+
"pattern": "^\\.\\/.*"
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
"type": "string",
|
|
109
|
+
"pattern": ".*\\.json$"
|
|
110
|
+
}
|
|
111
|
+
]
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"description": "Additional hooks (in addition to those in hooks/hooks.json, if it exists)",
|
|
115
|
+
"type": "object",
|
|
116
|
+
"propertyNames": {
|
|
117
|
+
"anyOf": [
|
|
118
|
+
{
|
|
119
|
+
"type": "string",
|
|
120
|
+
"enum": [
|
|
121
|
+
"PreToolUse",
|
|
122
|
+
"PostToolUse",
|
|
123
|
+
"PostToolUseFailure",
|
|
124
|
+
"PostToolBatch",
|
|
125
|
+
"Notification",
|
|
126
|
+
"UserPromptSubmit",
|
|
127
|
+
"UserPromptExpansion",
|
|
128
|
+
"SessionStart",
|
|
129
|
+
"SessionEnd",
|
|
130
|
+
"Stop",
|
|
131
|
+
"StopFailure",
|
|
132
|
+
"SubagentStart",
|
|
133
|
+
"SubagentStop",
|
|
134
|
+
"PreCompact",
|
|
135
|
+
"PostCompact",
|
|
136
|
+
"PermissionRequest",
|
|
137
|
+
"PermissionDenied",
|
|
138
|
+
"Setup",
|
|
139
|
+
"TeammateIdle",
|
|
140
|
+
"TaskCreated",
|
|
141
|
+
"TaskCompleted",
|
|
142
|
+
"Elicitation",
|
|
143
|
+
"ElicitationResult",
|
|
144
|
+
"ConfigChange",
|
|
145
|
+
"WorktreeCreate",
|
|
146
|
+
"WorktreeRemove",
|
|
147
|
+
"InstructionsLoaded",
|
|
148
|
+
"CwdChanged",
|
|
149
|
+
"FileChanged"
|
|
150
|
+
]
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
"not": {}
|
|
154
|
+
}
|
|
155
|
+
]
|
|
156
|
+
},
|
|
157
|
+
"additionalProperties": {
|
|
158
|
+
"type": "array",
|
|
159
|
+
"items": {
|
|
160
|
+
"type": "object",
|
|
161
|
+
"properties": {
|
|
162
|
+
"matcher": {
|
|
163
|
+
"description": "String pattern to match (e.g. tool names like \"Write\")",
|
|
164
|
+
"type": "string"
|
|
165
|
+
},
|
|
166
|
+
"hooks": {
|
|
167
|
+
"description": "List of hooks to execute when the matcher matches",
|
|
168
|
+
"type": "array",
|
|
169
|
+
"items": {
|
|
170
|
+
"anyOf": [
|
|
171
|
+
{
|
|
172
|
+
"type": "object",
|
|
173
|
+
"properties": {
|
|
174
|
+
"type": {
|
|
175
|
+
"description": "Shell command hook type",
|
|
176
|
+
"type": "string",
|
|
177
|
+
"const": "command"
|
|
178
|
+
},
|
|
179
|
+
"command": {
|
|
180
|
+
"description": "Shell command to execute",
|
|
181
|
+
"type": "string"
|
|
182
|
+
},
|
|
183
|
+
"if": {
|
|
184
|
+
"description": "Permission rule syntax to filter when this hook runs (e.g., \"Bash(git *)\"). Only runs if the tool call matches the pattern. Avoids spawning hooks for non-matching commands.",
|
|
185
|
+
"type": "string"
|
|
186
|
+
},
|
|
187
|
+
"shell": {
|
|
188
|
+
"description": "Shell interpreter. 'bash' uses your $SHELL (bash/zsh/sh); 'powershell' uses pwsh. Defaults to bash.",
|
|
189
|
+
"type": "string",
|
|
190
|
+
"enum": [
|
|
191
|
+
"bash",
|
|
192
|
+
"powershell"
|
|
193
|
+
]
|
|
194
|
+
},
|
|
195
|
+
"timeout": {
|
|
196
|
+
"description": "Timeout in seconds for this specific command",
|
|
197
|
+
"type": "number",
|
|
198
|
+
"exclusiveMinimum": 0
|
|
199
|
+
},
|
|
200
|
+
"statusMessage": {
|
|
201
|
+
"description": "Custom status message to display in spinner while hook runs",
|
|
202
|
+
"type": "string"
|
|
203
|
+
},
|
|
204
|
+
"once": {
|
|
205
|
+
"description": "If true, hook runs once and is removed after execution",
|
|
206
|
+
"type": "boolean"
|
|
207
|
+
},
|
|
208
|
+
"async": {
|
|
209
|
+
"description": "If true, hook runs in background without blocking",
|
|
210
|
+
"type": "boolean"
|
|
211
|
+
},
|
|
212
|
+
"asyncRewake": {
|
|
213
|
+
"description": "If true, hook runs in background and wakes the model on exit code 2 (blocking error). Implies async.",
|
|
214
|
+
"type": "boolean"
|
|
215
|
+
}
|
|
216
|
+
},
|
|
217
|
+
"required": [
|
|
218
|
+
"type",
|
|
219
|
+
"command"
|
|
220
|
+
]
|
|
221
|
+
},
|
|
222
|
+
{
|
|
223
|
+
"type": "object",
|
|
224
|
+
"properties": {
|
|
225
|
+
"type": {
|
|
226
|
+
"description": "LLM prompt hook type",
|
|
227
|
+
"type": "string",
|
|
228
|
+
"const": "prompt"
|
|
229
|
+
},
|
|
230
|
+
"prompt": {
|
|
231
|
+
"description": "Prompt to evaluate with LLM. Use $ARGUMENTS placeholder for hook input JSON.",
|
|
232
|
+
"type": "string"
|
|
233
|
+
},
|
|
234
|
+
"if": {
|
|
235
|
+
"description": "Permission rule syntax to filter when this hook runs (e.g., \"Bash(git *)\"). Only runs if the tool call matches the pattern. Avoids spawning hooks for non-matching commands.",
|
|
236
|
+
"type": "string"
|
|
237
|
+
},
|
|
238
|
+
"timeout": {
|
|
239
|
+
"description": "Timeout in seconds for this specific prompt evaluation",
|
|
240
|
+
"type": "number",
|
|
241
|
+
"exclusiveMinimum": 0
|
|
242
|
+
},
|
|
243
|
+
"model": {
|
|
244
|
+
"description": "Model to use for this prompt hook (e.g., \"claude-sonnet-4-6\"). If not specified, uses the default small fast model.",
|
|
245
|
+
"type": "string"
|
|
246
|
+
},
|
|
247
|
+
"statusMessage": {
|
|
248
|
+
"description": "Custom status message to display in spinner while hook runs",
|
|
249
|
+
"type": "string"
|
|
250
|
+
},
|
|
251
|
+
"once": {
|
|
252
|
+
"description": "If true, hook runs once and is removed after execution",
|
|
253
|
+
"type": "boolean"
|
|
254
|
+
}
|
|
255
|
+
},
|
|
256
|
+
"required": [
|
|
257
|
+
"type",
|
|
258
|
+
"prompt"
|
|
259
|
+
]
|
|
260
|
+
},
|
|
261
|
+
{
|
|
262
|
+
"type": "object",
|
|
263
|
+
"properties": {
|
|
264
|
+
"type": {
|
|
265
|
+
"description": "Agentic verifier hook type",
|
|
266
|
+
"type": "string",
|
|
267
|
+
"const": "agent"
|
|
268
|
+
},
|
|
269
|
+
"prompt": {
|
|
270
|
+
"description": "Prompt describing what to verify (e.g. \"Verify that unit tests ran and passed.\"). Use $ARGUMENTS placeholder for hook input JSON.",
|
|
271
|
+
"type": "string"
|
|
272
|
+
},
|
|
273
|
+
"if": {
|
|
274
|
+
"description": "Permission rule syntax to filter when this hook runs (e.g., \"Bash(git *)\"). Only runs if the tool call matches the pattern. Avoids spawning hooks for non-matching commands.",
|
|
275
|
+
"type": "string"
|
|
276
|
+
},
|
|
277
|
+
"timeout": {
|
|
278
|
+
"description": "Timeout in seconds for agent execution (default 60)",
|
|
279
|
+
"type": "number",
|
|
280
|
+
"exclusiveMinimum": 0
|
|
281
|
+
},
|
|
282
|
+
"model": {
|
|
283
|
+
"description": "Model to use for this agent hook (e.g., \"claude-sonnet-4-6\"). If not specified, uses Haiku.",
|
|
284
|
+
"type": "string"
|
|
285
|
+
},
|
|
286
|
+
"statusMessage": {
|
|
287
|
+
"description": "Custom status message to display in spinner while hook runs",
|
|
288
|
+
"type": "string"
|
|
289
|
+
},
|
|
290
|
+
"once": {
|
|
291
|
+
"description": "If true, hook runs once and is removed after execution",
|
|
292
|
+
"type": "boolean"
|
|
293
|
+
}
|
|
294
|
+
},
|
|
295
|
+
"required": [
|
|
296
|
+
"type",
|
|
297
|
+
"prompt"
|
|
298
|
+
]
|
|
299
|
+
},
|
|
300
|
+
{
|
|
301
|
+
"type": "object",
|
|
302
|
+
"properties": {
|
|
303
|
+
"type": {
|
|
304
|
+
"description": "HTTP hook type",
|
|
305
|
+
"type": "string",
|
|
306
|
+
"const": "http"
|
|
307
|
+
},
|
|
308
|
+
"url": {
|
|
309
|
+
"description": "URL to POST the hook input JSON to",
|
|
310
|
+
"type": "string",
|
|
311
|
+
"format": "uri"
|
|
312
|
+
},
|
|
313
|
+
"if": {
|
|
314
|
+
"description": "Permission rule syntax to filter when this hook runs (e.g., \"Bash(git *)\"). Only runs if the tool call matches the pattern. Avoids spawning hooks for non-matching commands.",
|
|
315
|
+
"type": "string"
|
|
316
|
+
},
|
|
317
|
+
"timeout": {
|
|
318
|
+
"description": "Timeout in seconds for this specific request",
|
|
319
|
+
"type": "number",
|
|
320
|
+
"exclusiveMinimum": 0
|
|
321
|
+
},
|
|
322
|
+
"headers": {
|
|
323
|
+
"description": "Additional headers to include in the request. Values may reference environment variables using $VAR_NAME or ${VAR_NAME} syntax (e.g., \"Authorization\": \"Bearer $MY_TOKEN\"). Only variables listed in allowedEnvVars will be interpolated.",
|
|
324
|
+
"type": "object",
|
|
325
|
+
"propertyNames": {
|
|
326
|
+
"type": "string"
|
|
327
|
+
},
|
|
328
|
+
"additionalProperties": {
|
|
329
|
+
"type": "string"
|
|
330
|
+
}
|
|
331
|
+
},
|
|
332
|
+
"allowedEnvVars": {
|
|
333
|
+
"description": "Explicit list of environment variable names that may be interpolated in header values. Only variables listed here will be resolved; all other $VAR references are left as empty strings. Required for env var interpolation to work.",
|
|
334
|
+
"type": "array",
|
|
335
|
+
"items": {
|
|
336
|
+
"type": "string"
|
|
337
|
+
}
|
|
338
|
+
},
|
|
339
|
+
"statusMessage": {
|
|
340
|
+
"description": "Custom status message to display in spinner while hook runs",
|
|
341
|
+
"type": "string"
|
|
342
|
+
},
|
|
343
|
+
"once": {
|
|
344
|
+
"description": "If true, hook runs once and is removed after execution",
|
|
345
|
+
"type": "boolean"
|
|
346
|
+
}
|
|
347
|
+
},
|
|
348
|
+
"required": [
|
|
349
|
+
"type",
|
|
350
|
+
"url"
|
|
351
|
+
]
|
|
352
|
+
},
|
|
353
|
+
{
|
|
354
|
+
"type": "object",
|
|
355
|
+
"properties": {
|
|
356
|
+
"type": {
|
|
357
|
+
"description": "MCP tool hook type",
|
|
358
|
+
"type": "string",
|
|
359
|
+
"const": "mcp_tool"
|
|
360
|
+
},
|
|
361
|
+
"server": {
|
|
362
|
+
"description": "Name of an already-configured MCP server to invoke",
|
|
363
|
+
"type": "string"
|
|
364
|
+
},
|
|
365
|
+
"tool": {
|
|
366
|
+
"description": "Name of the tool on that server to call",
|
|
367
|
+
"type": "string"
|
|
368
|
+
},
|
|
369
|
+
"input": {
|
|
370
|
+
"description": "Arguments passed to the MCP tool. String values support ${path} interpolation from the hook input JSON (e.g. \"${tool_input.file_path}\").",
|
|
371
|
+
"type": "object",
|
|
372
|
+
"propertyNames": {
|
|
373
|
+
"type": "string"
|
|
374
|
+
},
|
|
375
|
+
"additionalProperties": {}
|
|
376
|
+
},
|
|
377
|
+
"if": {
|
|
378
|
+
"description": "Permission rule syntax to filter when this hook runs (e.g., \"Bash(git *)\"). Only runs if the tool call matches the pattern. Avoids spawning hooks for non-matching commands.",
|
|
379
|
+
"type": "string"
|
|
380
|
+
},
|
|
381
|
+
"timeout": {
|
|
382
|
+
"description": "Timeout in seconds for this specific tool call",
|
|
383
|
+
"type": "number",
|
|
384
|
+
"exclusiveMinimum": 0
|
|
385
|
+
},
|
|
386
|
+
"statusMessage": {
|
|
387
|
+
"description": "Custom status message to display in spinner while hook runs",
|
|
388
|
+
"type": "string"
|
|
389
|
+
},
|
|
390
|
+
"once": {
|
|
391
|
+
"description": "If true, hook runs once and is removed after execution",
|
|
392
|
+
"type": "boolean"
|
|
393
|
+
}
|
|
394
|
+
},
|
|
395
|
+
"required": [
|
|
396
|
+
"type",
|
|
397
|
+
"server",
|
|
398
|
+
"tool"
|
|
399
|
+
]
|
|
400
|
+
}
|
|
401
|
+
]
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
},
|
|
405
|
+
"required": [
|
|
406
|
+
"hooks"
|
|
407
|
+
]
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
},
|
|
411
|
+
{
|
|
412
|
+
"type": "array",
|
|
413
|
+
"items": {
|
|
414
|
+
"anyOf": [
|
|
415
|
+
{
|
|
416
|
+
"description": "Path to file with additional hooks (in addition to those in hooks/hooks.json, if it exists), relative to the plugin root",
|
|
417
|
+
"type": "string",
|
|
418
|
+
"allOf": [
|
|
419
|
+
{
|
|
420
|
+
"type": "string",
|
|
421
|
+
"pattern": "^\\.\\/.*"
|
|
422
|
+
},
|
|
423
|
+
{
|
|
424
|
+
"type": "string",
|
|
425
|
+
"pattern": ".*\\.json$"
|
|
426
|
+
}
|
|
427
|
+
]
|
|
428
|
+
},
|
|
429
|
+
{
|
|
430
|
+
"description": "Additional hooks (in addition to those in hooks/hooks.json, if it exists)",
|
|
431
|
+
"type": "object",
|
|
432
|
+
"propertyNames": {
|
|
433
|
+
"anyOf": [
|
|
434
|
+
{
|
|
435
|
+
"type": "string",
|
|
436
|
+
"enum": [
|
|
437
|
+
"PreToolUse",
|
|
438
|
+
"PostToolUse",
|
|
439
|
+
"PostToolUseFailure",
|
|
440
|
+
"PostToolBatch",
|
|
441
|
+
"Notification",
|
|
442
|
+
"UserPromptSubmit",
|
|
443
|
+
"UserPromptExpansion",
|
|
444
|
+
"SessionStart",
|
|
445
|
+
"SessionEnd",
|
|
446
|
+
"Stop",
|
|
447
|
+
"StopFailure",
|
|
448
|
+
"SubagentStart",
|
|
449
|
+
"SubagentStop",
|
|
450
|
+
"PreCompact",
|
|
451
|
+
"PostCompact",
|
|
452
|
+
"PermissionRequest",
|
|
453
|
+
"PermissionDenied",
|
|
454
|
+
"Setup",
|
|
455
|
+
"TeammateIdle",
|
|
456
|
+
"TaskCreated",
|
|
457
|
+
"TaskCompleted",
|
|
458
|
+
"Elicitation",
|
|
459
|
+
"ElicitationResult",
|
|
460
|
+
"ConfigChange",
|
|
461
|
+
"WorktreeCreate",
|
|
462
|
+
"WorktreeRemove",
|
|
463
|
+
"InstructionsLoaded",
|
|
464
|
+
"CwdChanged",
|
|
465
|
+
"FileChanged"
|
|
466
|
+
]
|
|
467
|
+
},
|
|
468
|
+
{
|
|
469
|
+
"not": {}
|
|
470
|
+
}
|
|
471
|
+
]
|
|
472
|
+
},
|
|
473
|
+
"additionalProperties": {
|
|
474
|
+
"type": "array",
|
|
475
|
+
"items": {
|
|
476
|
+
"type": "object",
|
|
477
|
+
"properties": {
|
|
478
|
+
"matcher": {
|
|
479
|
+
"description": "String pattern to match (e.g. tool names like \"Write\")",
|
|
480
|
+
"type": "string"
|
|
481
|
+
},
|
|
482
|
+
"hooks": {
|
|
483
|
+
"description": "List of hooks to execute when the matcher matches",
|
|
484
|
+
"type": "array",
|
|
485
|
+
"items": {
|
|
486
|
+
"anyOf": [
|
|
487
|
+
{
|
|
488
|
+
"type": "object",
|
|
489
|
+
"properties": {
|
|
490
|
+
"type": {
|
|
491
|
+
"description": "Shell command hook type",
|
|
492
|
+
"type": "string",
|
|
493
|
+
"const": "command"
|
|
494
|
+
},
|
|
495
|
+
"command": {
|
|
496
|
+
"description": "Shell command to execute",
|
|
497
|
+
"type": "string"
|
|
498
|
+
},
|
|
499
|
+
"if": {
|
|
500
|
+
"description": "Permission rule syntax to filter when this hook runs (e.g., \"Bash(git *)\"). Only runs if the tool call matches the pattern. Avoids spawning hooks for non-matching commands.",
|
|
501
|
+
"type": "string"
|
|
502
|
+
},
|
|
503
|
+
"shell": {
|
|
504
|
+
"description": "Shell interpreter. 'bash' uses your $SHELL (bash/zsh/sh); 'powershell' uses pwsh. Defaults to bash.",
|
|
505
|
+
"type": "string",
|
|
506
|
+
"enum": [
|
|
507
|
+
"bash",
|
|
508
|
+
"powershell"
|
|
509
|
+
]
|
|
510
|
+
},
|
|
511
|
+
"timeout": {
|
|
512
|
+
"description": "Timeout in seconds for this specific command",
|
|
513
|
+
"type": "number",
|
|
514
|
+
"exclusiveMinimum": 0
|
|
515
|
+
},
|
|
516
|
+
"statusMessage": {
|
|
517
|
+
"description": "Custom status message to display in spinner while hook runs",
|
|
518
|
+
"type": "string"
|
|
519
|
+
},
|
|
520
|
+
"once": {
|
|
521
|
+
"description": "If true, hook runs once and is removed after execution",
|
|
522
|
+
"type": "boolean"
|
|
523
|
+
},
|
|
524
|
+
"async": {
|
|
525
|
+
"description": "If true, hook runs in background without blocking",
|
|
526
|
+
"type": "boolean"
|
|
527
|
+
},
|
|
528
|
+
"asyncRewake": {
|
|
529
|
+
"description": "If true, hook runs in background and wakes the model on exit code 2 (blocking error). Implies async.",
|
|
530
|
+
"type": "boolean"
|
|
531
|
+
}
|
|
532
|
+
},
|
|
533
|
+
"required": [
|
|
534
|
+
"type",
|
|
535
|
+
"command"
|
|
536
|
+
]
|
|
537
|
+
},
|
|
538
|
+
{
|
|
539
|
+
"type": "object",
|
|
540
|
+
"properties": {
|
|
541
|
+
"type": {
|
|
542
|
+
"description": "LLM prompt hook type",
|
|
543
|
+
"type": "string",
|
|
544
|
+
"const": "prompt"
|
|
545
|
+
},
|
|
546
|
+
"prompt": {
|
|
547
|
+
"description": "Prompt to evaluate with LLM. Use $ARGUMENTS placeholder for hook input JSON.",
|
|
548
|
+
"type": "string"
|
|
549
|
+
},
|
|
550
|
+
"if": {
|
|
551
|
+
"description": "Permission rule syntax to filter when this hook runs (e.g., \"Bash(git *)\"). Only runs if the tool call matches the pattern. Avoids spawning hooks for non-matching commands.",
|
|
552
|
+
"type": "string"
|
|
553
|
+
},
|
|
554
|
+
"timeout": {
|
|
555
|
+
"description": "Timeout in seconds for this specific prompt evaluation",
|
|
556
|
+
"type": "number",
|
|
557
|
+
"exclusiveMinimum": 0
|
|
558
|
+
},
|
|
559
|
+
"model": {
|
|
560
|
+
"description": "Model to use for this prompt hook (e.g., \"claude-sonnet-4-6\"). If not specified, uses the default small fast model.",
|
|
561
|
+
"type": "string"
|
|
562
|
+
},
|
|
563
|
+
"statusMessage": {
|
|
564
|
+
"description": "Custom status message to display in spinner while hook runs",
|
|
565
|
+
"type": "string"
|
|
566
|
+
},
|
|
567
|
+
"once": {
|
|
568
|
+
"description": "If true, hook runs once and is removed after execution",
|
|
569
|
+
"type": "boolean"
|
|
570
|
+
}
|
|
571
|
+
},
|
|
572
|
+
"required": [
|
|
573
|
+
"type",
|
|
574
|
+
"prompt"
|
|
575
|
+
]
|
|
576
|
+
},
|
|
577
|
+
{
|
|
578
|
+
"type": "object",
|
|
579
|
+
"properties": {
|
|
580
|
+
"type": {
|
|
581
|
+
"description": "Agentic verifier hook type",
|
|
582
|
+
"type": "string",
|
|
583
|
+
"const": "agent"
|
|
584
|
+
},
|
|
585
|
+
"prompt": {
|
|
586
|
+
"description": "Prompt describing what to verify (e.g. \"Verify that unit tests ran and passed.\"). Use $ARGUMENTS placeholder for hook input JSON.",
|
|
587
|
+
"type": "string"
|
|
588
|
+
},
|
|
589
|
+
"if": {
|
|
590
|
+
"description": "Permission rule syntax to filter when this hook runs (e.g., \"Bash(git *)\"). Only runs if the tool call matches the pattern. Avoids spawning hooks for non-matching commands.",
|
|
591
|
+
"type": "string"
|
|
592
|
+
},
|
|
593
|
+
"timeout": {
|
|
594
|
+
"description": "Timeout in seconds for agent execution (default 60)",
|
|
595
|
+
"type": "number",
|
|
596
|
+
"exclusiveMinimum": 0
|
|
597
|
+
},
|
|
598
|
+
"model": {
|
|
599
|
+
"description": "Model to use for this agent hook (e.g., \"claude-sonnet-4-6\"). If not specified, uses Haiku.",
|
|
600
|
+
"type": "string"
|
|
601
|
+
},
|
|
602
|
+
"statusMessage": {
|
|
603
|
+
"description": "Custom status message to display in spinner while hook runs",
|
|
604
|
+
"type": "string"
|
|
605
|
+
},
|
|
606
|
+
"once": {
|
|
607
|
+
"description": "If true, hook runs once and is removed after execution",
|
|
608
|
+
"type": "boolean"
|
|
609
|
+
}
|
|
610
|
+
},
|
|
611
|
+
"required": [
|
|
612
|
+
"type",
|
|
613
|
+
"prompt"
|
|
614
|
+
]
|
|
615
|
+
},
|
|
616
|
+
{
|
|
617
|
+
"type": "object",
|
|
618
|
+
"properties": {
|
|
619
|
+
"type": {
|
|
620
|
+
"description": "HTTP hook type",
|
|
621
|
+
"type": "string",
|
|
622
|
+
"const": "http"
|
|
623
|
+
},
|
|
624
|
+
"url": {
|
|
625
|
+
"description": "URL to POST the hook input JSON to",
|
|
626
|
+
"type": "string",
|
|
627
|
+
"format": "uri"
|
|
628
|
+
},
|
|
629
|
+
"if": {
|
|
630
|
+
"description": "Permission rule syntax to filter when this hook runs (e.g., \"Bash(git *)\"). Only runs if the tool call matches the pattern. Avoids spawning hooks for non-matching commands.",
|
|
631
|
+
"type": "string"
|
|
632
|
+
},
|
|
633
|
+
"timeout": {
|
|
634
|
+
"description": "Timeout in seconds for this specific request",
|
|
635
|
+
"type": "number",
|
|
636
|
+
"exclusiveMinimum": 0
|
|
637
|
+
},
|
|
638
|
+
"headers": {
|
|
639
|
+
"description": "Additional headers to include in the request. Values may reference environment variables using $VAR_NAME or ${VAR_NAME} syntax (e.g., \"Authorization\": \"Bearer $MY_TOKEN\"). Only variables listed in allowedEnvVars will be interpolated.",
|
|
640
|
+
"type": "object",
|
|
641
|
+
"propertyNames": {
|
|
642
|
+
"type": "string"
|
|
643
|
+
},
|
|
644
|
+
"additionalProperties": {
|
|
645
|
+
"type": "string"
|
|
646
|
+
}
|
|
647
|
+
},
|
|
648
|
+
"allowedEnvVars": {
|
|
649
|
+
"description": "Explicit list of environment variable names that may be interpolated in header values. Only variables listed here will be resolved; all other $VAR references are left as empty strings. Required for env var interpolation to work.",
|
|
650
|
+
"type": "array",
|
|
651
|
+
"items": {
|
|
652
|
+
"type": "string"
|
|
653
|
+
}
|
|
654
|
+
},
|
|
655
|
+
"statusMessage": {
|
|
656
|
+
"description": "Custom status message to display in spinner while hook runs",
|
|
657
|
+
"type": "string"
|
|
658
|
+
},
|
|
659
|
+
"once": {
|
|
660
|
+
"description": "If true, hook runs once and is removed after execution",
|
|
661
|
+
"type": "boolean"
|
|
662
|
+
}
|
|
663
|
+
},
|
|
664
|
+
"required": [
|
|
665
|
+
"type",
|
|
666
|
+
"url"
|
|
667
|
+
]
|
|
668
|
+
},
|
|
669
|
+
{
|
|
670
|
+
"type": "object",
|
|
671
|
+
"properties": {
|
|
672
|
+
"type": {
|
|
673
|
+
"description": "MCP tool hook type",
|
|
674
|
+
"type": "string",
|
|
675
|
+
"const": "mcp_tool"
|
|
676
|
+
},
|
|
677
|
+
"server": {
|
|
678
|
+
"description": "Name of an already-configured MCP server to invoke",
|
|
679
|
+
"type": "string"
|
|
680
|
+
},
|
|
681
|
+
"tool": {
|
|
682
|
+
"description": "Name of the tool on that server to call",
|
|
683
|
+
"type": "string"
|
|
684
|
+
},
|
|
685
|
+
"input": {
|
|
686
|
+
"description": "Arguments passed to the MCP tool. String values support ${path} interpolation from the hook input JSON (e.g. \"${tool_input.file_path}\").",
|
|
687
|
+
"type": "object",
|
|
688
|
+
"propertyNames": {
|
|
689
|
+
"type": "string"
|
|
690
|
+
},
|
|
691
|
+
"additionalProperties": {}
|
|
692
|
+
},
|
|
693
|
+
"if": {
|
|
694
|
+
"description": "Permission rule syntax to filter when this hook runs (e.g., \"Bash(git *)\"). Only runs if the tool call matches the pattern. Avoids spawning hooks for non-matching commands.",
|
|
695
|
+
"type": "string"
|
|
696
|
+
},
|
|
697
|
+
"timeout": {
|
|
698
|
+
"description": "Timeout in seconds for this specific tool call",
|
|
699
|
+
"type": "number",
|
|
700
|
+
"exclusiveMinimum": 0
|
|
701
|
+
},
|
|
702
|
+
"statusMessage": {
|
|
703
|
+
"description": "Custom status message to display in spinner while hook runs",
|
|
704
|
+
"type": "string"
|
|
705
|
+
},
|
|
706
|
+
"once": {
|
|
707
|
+
"description": "If true, hook runs once and is removed after execution",
|
|
708
|
+
"type": "boolean"
|
|
709
|
+
}
|
|
710
|
+
},
|
|
711
|
+
"required": [
|
|
712
|
+
"type",
|
|
713
|
+
"server",
|
|
714
|
+
"tool"
|
|
715
|
+
]
|
|
716
|
+
}
|
|
717
|
+
]
|
|
718
|
+
}
|
|
719
|
+
}
|
|
720
|
+
},
|
|
721
|
+
"required": [
|
|
722
|
+
"hooks"
|
|
723
|
+
]
|
|
724
|
+
}
|
|
725
|
+
}
|
|
726
|
+
}
|
|
727
|
+
]
|
|
728
|
+
}
|
|
729
|
+
}
|
|
730
|
+
]
|
|
731
|
+
},
|
|
732
|
+
"commands": {
|
|
733
|
+
"anyOf": [
|
|
734
|
+
{
|
|
735
|
+
"description": "Path to additional command file or skill directory (in addition to those in the commands/ directory, if it exists), relative to the plugin root",
|
|
736
|
+
"anyOf": [
|
|
737
|
+
{
|
|
738
|
+
"type": "string",
|
|
739
|
+
"allOf": [
|
|
740
|
+
{
|
|
741
|
+
"type": "string",
|
|
742
|
+
"pattern": "^\\.\\/.*"
|
|
743
|
+
},
|
|
744
|
+
{
|
|
745
|
+
"type": "string",
|
|
746
|
+
"pattern": ".*\\.md$"
|
|
747
|
+
}
|
|
748
|
+
]
|
|
749
|
+
},
|
|
750
|
+
{
|
|
751
|
+
"type": "string",
|
|
752
|
+
"pattern": "^\\.\\/.*"
|
|
753
|
+
}
|
|
754
|
+
]
|
|
755
|
+
},
|
|
756
|
+
{
|
|
757
|
+
"description": "List of paths to additional command files or skill directories",
|
|
758
|
+
"type": "array",
|
|
759
|
+
"items": {
|
|
760
|
+
"description": "Path to additional command file or skill directory (in addition to those in the commands/ directory, if it exists), relative to the plugin root",
|
|
761
|
+
"anyOf": [
|
|
762
|
+
{
|
|
763
|
+
"type": "string",
|
|
764
|
+
"allOf": [
|
|
765
|
+
{
|
|
766
|
+
"type": "string",
|
|
767
|
+
"pattern": "^\\.\\/.*"
|
|
768
|
+
},
|
|
769
|
+
{
|
|
770
|
+
"type": "string",
|
|
771
|
+
"pattern": ".*\\.md$"
|
|
772
|
+
}
|
|
773
|
+
]
|
|
774
|
+
},
|
|
775
|
+
{
|
|
776
|
+
"type": "string",
|
|
777
|
+
"pattern": "^\\.\\/.*"
|
|
778
|
+
}
|
|
779
|
+
]
|
|
780
|
+
}
|
|
781
|
+
},
|
|
782
|
+
{
|
|
783
|
+
"description": "Object mapping of command names to their metadata and source files. Command name becomes the slash command name (e.g., \"about\" → \"/plugin:about\")",
|
|
784
|
+
"type": "object",
|
|
785
|
+
"propertyNames": {
|
|
786
|
+
"type": "string"
|
|
787
|
+
},
|
|
788
|
+
"additionalProperties": {
|
|
789
|
+
"type": "object",
|
|
790
|
+
"properties": {
|
|
791
|
+
"source": {
|
|
792
|
+
"description": "Path to command markdown file, relative to plugin root",
|
|
793
|
+
"anyOf": [
|
|
794
|
+
{
|
|
795
|
+
"type": "string",
|
|
796
|
+
"allOf": [
|
|
797
|
+
{
|
|
798
|
+
"type": "string",
|
|
799
|
+
"pattern": "^\\.\\/.*"
|
|
800
|
+
},
|
|
801
|
+
{
|
|
802
|
+
"type": "string",
|
|
803
|
+
"pattern": ".*\\.md$"
|
|
804
|
+
}
|
|
805
|
+
]
|
|
806
|
+
},
|
|
807
|
+
{
|
|
808
|
+
"type": "string",
|
|
809
|
+
"pattern": "^\\.\\/.*"
|
|
810
|
+
}
|
|
811
|
+
]
|
|
812
|
+
},
|
|
813
|
+
"content": {
|
|
814
|
+
"description": "Inline markdown content for the command",
|
|
815
|
+
"type": "string"
|
|
816
|
+
},
|
|
817
|
+
"description": {
|
|
818
|
+
"description": "Command description override",
|
|
819
|
+
"type": "string"
|
|
820
|
+
},
|
|
821
|
+
"argumentHint": {
|
|
822
|
+
"description": "Hint for command arguments (e.g., \"[file]\")",
|
|
823
|
+
"type": "string"
|
|
824
|
+
},
|
|
825
|
+
"model": {
|
|
826
|
+
"description": "Default model for this command",
|
|
827
|
+
"type": "string"
|
|
828
|
+
},
|
|
829
|
+
"allowedTools": {
|
|
830
|
+
"description": "Tools allowed when command runs",
|
|
831
|
+
"type": "array",
|
|
832
|
+
"items": {
|
|
833
|
+
"type": "string"
|
|
834
|
+
}
|
|
835
|
+
}
|
|
836
|
+
}
|
|
837
|
+
}
|
|
838
|
+
}
|
|
839
|
+
]
|
|
840
|
+
},
|
|
841
|
+
"agents": {
|
|
842
|
+
"anyOf": [
|
|
843
|
+
{
|
|
844
|
+
"description": "Path to additional agent file (in addition to those in the agents/ directory, if it exists), relative to the plugin root",
|
|
845
|
+
"type": "string",
|
|
846
|
+
"allOf": [
|
|
847
|
+
{
|
|
848
|
+
"type": "string",
|
|
849
|
+
"pattern": "^\\.\\/.*"
|
|
850
|
+
},
|
|
851
|
+
{
|
|
852
|
+
"type": "string",
|
|
853
|
+
"pattern": ".*\\.md$"
|
|
854
|
+
}
|
|
855
|
+
]
|
|
856
|
+
},
|
|
857
|
+
{
|
|
858
|
+
"description": "List of paths to additional agent files",
|
|
859
|
+
"type": "array",
|
|
860
|
+
"items": {
|
|
861
|
+
"description": "Path to additional agent file (in addition to those in the agents/ directory, if it exists), relative to the plugin root",
|
|
862
|
+
"type": "string",
|
|
863
|
+
"allOf": [
|
|
864
|
+
{
|
|
865
|
+
"type": "string",
|
|
866
|
+
"pattern": "^\\.\\/.*"
|
|
867
|
+
},
|
|
868
|
+
{
|
|
869
|
+
"type": "string",
|
|
870
|
+
"pattern": ".*\\.md$"
|
|
871
|
+
}
|
|
872
|
+
]
|
|
873
|
+
}
|
|
874
|
+
}
|
|
875
|
+
]
|
|
876
|
+
},
|
|
877
|
+
"skills": {
|
|
878
|
+
"anyOf": [
|
|
879
|
+
{
|
|
880
|
+
"description": "Path to additional skill directory (in addition to those in the skills/ directory, if it exists), relative to the plugin root",
|
|
881
|
+
"type": "string",
|
|
882
|
+
"pattern": "^\\.\\/.*"
|
|
883
|
+
},
|
|
884
|
+
{
|
|
885
|
+
"description": "List of paths to additional skill directories",
|
|
886
|
+
"type": "array",
|
|
887
|
+
"items": {
|
|
888
|
+
"description": "Path to additional skill directory (in addition to those in the skills/ directory, if it exists), relative to the plugin root",
|
|
889
|
+
"type": "string",
|
|
890
|
+
"pattern": "^\\.\\/.*"
|
|
891
|
+
}
|
|
892
|
+
}
|
|
893
|
+
]
|
|
894
|
+
},
|
|
895
|
+
"outputStyles": {
|
|
896
|
+
"anyOf": [
|
|
897
|
+
{
|
|
898
|
+
"description": "Path to additional output styles directory or file (in addition to those in the output-styles/ directory, if it exists), relative to the plugin root",
|
|
899
|
+
"type": "string",
|
|
900
|
+
"pattern": "^\\.\\/.*"
|
|
901
|
+
},
|
|
902
|
+
{
|
|
903
|
+
"description": "List of paths to additional output styles directories or files",
|
|
904
|
+
"type": "array",
|
|
905
|
+
"items": {
|
|
906
|
+
"description": "Path to additional output styles directory or file (in addition to those in the output-styles/ directory, if it exists), relative to the plugin root",
|
|
907
|
+
"type": "string",
|
|
908
|
+
"pattern": "^\\.\\/.*"
|
|
909
|
+
}
|
|
910
|
+
}
|
|
911
|
+
]
|
|
912
|
+
},
|
|
913
|
+
"themes": {
|
|
914
|
+
"anyOf": [
|
|
915
|
+
{
|
|
916
|
+
"description": "Path to additional themes directory or file (in addition to those in the themes/ directory, if it exists), relative to the plugin root",
|
|
917
|
+
"type": "string",
|
|
918
|
+
"pattern": "^\\.\\/.*"
|
|
919
|
+
},
|
|
920
|
+
{
|
|
921
|
+
"description": "List of paths to additional themes directories or files",
|
|
922
|
+
"type": "array",
|
|
923
|
+
"items": {
|
|
924
|
+
"description": "Path to additional themes directory or file (in addition to those in the themes/ directory, if it exists), relative to the plugin root",
|
|
925
|
+
"type": "string",
|
|
926
|
+
"pattern": "^\\.\\/.*"
|
|
927
|
+
}
|
|
928
|
+
}
|
|
929
|
+
]
|
|
930
|
+
},
|
|
931
|
+
"channels": {
|
|
932
|
+
"description": "Channels this plugin provides. Each entry declares an MCP server as a message channel and optionally specifies user configuration to prompt for at enable time.",
|
|
933
|
+
"type": "array",
|
|
934
|
+
"items": {
|
|
935
|
+
"type": "object",
|
|
936
|
+
"properties": {
|
|
937
|
+
"server": {
|
|
938
|
+
"description": "Name of the MCP server this channel binds to. Must match a key in this plugin's mcpServers.",
|
|
939
|
+
"type": "string",
|
|
940
|
+
"minLength": 1
|
|
941
|
+
},
|
|
942
|
+
"displayName": {
|
|
943
|
+
"description": "Human-readable name shown in the config dialog title (e.g., \"Telegram\"). Defaults to the server name.",
|
|
944
|
+
"type": "string"
|
|
945
|
+
},
|
|
946
|
+
"userConfig": {
|
|
947
|
+
"description": "Fields to prompt the user for when enabling this plugin in assistant mode. Saved values are substituted into ${user_config.KEY} references in the mcpServers env.",
|
|
948
|
+
"type": "object",
|
|
949
|
+
"propertyNames": {
|
|
950
|
+
"type": "string"
|
|
951
|
+
},
|
|
952
|
+
"additionalProperties": {
|
|
953
|
+
"type": "object",
|
|
954
|
+
"properties": {
|
|
955
|
+
"type": {
|
|
956
|
+
"description": "Type of the configuration value",
|
|
957
|
+
"type": "string",
|
|
958
|
+
"enum": [
|
|
959
|
+
"string",
|
|
960
|
+
"number",
|
|
961
|
+
"boolean",
|
|
962
|
+
"directory",
|
|
963
|
+
"file"
|
|
964
|
+
]
|
|
965
|
+
},
|
|
966
|
+
"title": {
|
|
967
|
+
"description": "Human-readable label shown in the config dialog",
|
|
968
|
+
"type": "string"
|
|
969
|
+
},
|
|
970
|
+
"description": {
|
|
971
|
+
"description": "Help text shown beneath the field in the config dialog",
|
|
972
|
+
"type": "string"
|
|
973
|
+
},
|
|
974
|
+
"required": {
|
|
975
|
+
"description": "If true, validation fails when this field is empty",
|
|
976
|
+
"type": "boolean"
|
|
977
|
+
},
|
|
978
|
+
"default": {
|
|
979
|
+
"description": "Default value used when the user provides nothing",
|
|
980
|
+
"anyOf": [
|
|
981
|
+
{
|
|
982
|
+
"type": "string"
|
|
983
|
+
},
|
|
984
|
+
{
|
|
985
|
+
"type": "number"
|
|
986
|
+
},
|
|
987
|
+
{
|
|
988
|
+
"type": "boolean"
|
|
989
|
+
},
|
|
990
|
+
{
|
|
991
|
+
"type": "array",
|
|
992
|
+
"items": {
|
|
993
|
+
"type": "string"
|
|
994
|
+
}
|
|
995
|
+
}
|
|
996
|
+
]
|
|
997
|
+
},
|
|
998
|
+
"multiple": {
|
|
999
|
+
"description": "For string type: allow an array of strings",
|
|
1000
|
+
"type": "boolean"
|
|
1001
|
+
},
|
|
1002
|
+
"sensitive": {
|
|
1003
|
+
"description": "If true, masks dialog input and stores value in secure storage (keychain/credentials file) instead of settings.json",
|
|
1004
|
+
"type": "boolean"
|
|
1005
|
+
},
|
|
1006
|
+
"min": {
|
|
1007
|
+
"description": "Minimum value (number type only)",
|
|
1008
|
+
"type": "number"
|
|
1009
|
+
},
|
|
1010
|
+
"max": {
|
|
1011
|
+
"description": "Maximum value (number type only)",
|
|
1012
|
+
"type": "number"
|
|
1013
|
+
}
|
|
1014
|
+
},
|
|
1015
|
+
"required": [
|
|
1016
|
+
"type",
|
|
1017
|
+
"title",
|
|
1018
|
+
"description"
|
|
1019
|
+
],
|
|
1020
|
+
"additionalProperties": false
|
|
1021
|
+
}
|
|
1022
|
+
}
|
|
1023
|
+
},
|
|
1024
|
+
"required": [
|
|
1025
|
+
"server"
|
|
1026
|
+
],
|
|
1027
|
+
"additionalProperties": false
|
|
1028
|
+
}
|
|
1029
|
+
},
|
|
1030
|
+
"mcpServers": {
|
|
1031
|
+
"anyOf": [
|
|
1032
|
+
{
|
|
1033
|
+
"description": "MCP servers to include in the plugin (in addition to those in the .mcp.json file, if it exists)",
|
|
1034
|
+
"type": "string",
|
|
1035
|
+
"allOf": [
|
|
1036
|
+
{
|
|
1037
|
+
"type": "string",
|
|
1038
|
+
"pattern": "^\\.\\/.*"
|
|
1039
|
+
},
|
|
1040
|
+
{
|
|
1041
|
+
"type": "string",
|
|
1042
|
+
"pattern": ".*\\.json$"
|
|
1043
|
+
}
|
|
1044
|
+
]
|
|
1045
|
+
},
|
|
1046
|
+
{
|
|
1047
|
+
"description": "Path or URL to MCPB file containing MCP server configuration",
|
|
1048
|
+
"anyOf": [
|
|
1049
|
+
{
|
|
1050
|
+
"description": "Path to MCPB file relative to plugin root",
|
|
1051
|
+
"type": "string",
|
|
1052
|
+
"pattern": "^\\.\\/.*"
|
|
1053
|
+
},
|
|
1054
|
+
{
|
|
1055
|
+
"description": "URL to MCPB file",
|
|
1056
|
+
"type": "string",
|
|
1057
|
+
"format": "uri"
|
|
1058
|
+
}
|
|
1059
|
+
]
|
|
1060
|
+
},
|
|
1061
|
+
{
|
|
1062
|
+
"description": "MCP server configurations keyed by server name",
|
|
1063
|
+
"type": "object",
|
|
1064
|
+
"propertyNames": {
|
|
1065
|
+
"type": "string"
|
|
1066
|
+
},
|
|
1067
|
+
"additionalProperties": {
|
|
1068
|
+
"anyOf": [
|
|
1069
|
+
{
|
|
1070
|
+
"type": "object",
|
|
1071
|
+
"properties": {
|
|
1072
|
+
"type": {
|
|
1073
|
+
"type": "string",
|
|
1074
|
+
"const": "stdio"
|
|
1075
|
+
},
|
|
1076
|
+
"command": {
|
|
1077
|
+
"type": "string",
|
|
1078
|
+
"minLength": 1
|
|
1079
|
+
},
|
|
1080
|
+
"args": {
|
|
1081
|
+
"default": [],
|
|
1082
|
+
"type": "array",
|
|
1083
|
+
"items": {
|
|
1084
|
+
"type": "string"
|
|
1085
|
+
}
|
|
1086
|
+
},
|
|
1087
|
+
"env": {
|
|
1088
|
+
"type": "object",
|
|
1089
|
+
"propertyNames": {
|
|
1090
|
+
"type": "string"
|
|
1091
|
+
},
|
|
1092
|
+
"additionalProperties": {
|
|
1093
|
+
"type": "string"
|
|
1094
|
+
}
|
|
1095
|
+
}
|
|
1096
|
+
},
|
|
1097
|
+
"required": [
|
|
1098
|
+
"command"
|
|
1099
|
+
]
|
|
1100
|
+
},
|
|
1101
|
+
{
|
|
1102
|
+
"type": "object",
|
|
1103
|
+
"properties": {
|
|
1104
|
+
"type": {
|
|
1105
|
+
"type": "string",
|
|
1106
|
+
"const": "sse"
|
|
1107
|
+
},
|
|
1108
|
+
"url": {
|
|
1109
|
+
"type": "string"
|
|
1110
|
+
},
|
|
1111
|
+
"headers": {
|
|
1112
|
+
"type": "object",
|
|
1113
|
+
"propertyNames": {
|
|
1114
|
+
"type": "string"
|
|
1115
|
+
},
|
|
1116
|
+
"additionalProperties": {
|
|
1117
|
+
"type": "string"
|
|
1118
|
+
}
|
|
1119
|
+
},
|
|
1120
|
+
"headersHelper": {
|
|
1121
|
+
"type": "string"
|
|
1122
|
+
},
|
|
1123
|
+
"oauth": {
|
|
1124
|
+
"type": "object",
|
|
1125
|
+
"properties": {
|
|
1126
|
+
"clientId": {
|
|
1127
|
+
"type": "string"
|
|
1128
|
+
},
|
|
1129
|
+
"callbackPort": {
|
|
1130
|
+
"type": "integer",
|
|
1131
|
+
"exclusiveMinimum": 0,
|
|
1132
|
+
"maximum": 9007199254740991
|
|
1133
|
+
},
|
|
1134
|
+
"authServerMetadataUrl": {
|
|
1135
|
+
"type": "string",
|
|
1136
|
+
"format": "uri",
|
|
1137
|
+
"pattern": "^https:\\/\\/.*"
|
|
1138
|
+
},
|
|
1139
|
+
"scopes": {
|
|
1140
|
+
"type": "string",
|
|
1141
|
+
"minLength": 1
|
|
1142
|
+
},
|
|
1143
|
+
"xaa": {
|
|
1144
|
+
"type": "boolean"
|
|
1145
|
+
}
|
|
1146
|
+
}
|
|
1147
|
+
}
|
|
1148
|
+
},
|
|
1149
|
+
"required": [
|
|
1150
|
+
"type",
|
|
1151
|
+
"url"
|
|
1152
|
+
]
|
|
1153
|
+
},
|
|
1154
|
+
{
|
|
1155
|
+
"type": "object",
|
|
1156
|
+
"properties": {
|
|
1157
|
+
"type": {
|
|
1158
|
+
"type": "string",
|
|
1159
|
+
"const": "http"
|
|
1160
|
+
},
|
|
1161
|
+
"url": {
|
|
1162
|
+
"type": "string"
|
|
1163
|
+
},
|
|
1164
|
+
"headers": {
|
|
1165
|
+
"type": "object",
|
|
1166
|
+
"propertyNames": {
|
|
1167
|
+
"type": "string"
|
|
1168
|
+
},
|
|
1169
|
+
"additionalProperties": {
|
|
1170
|
+
"type": "string"
|
|
1171
|
+
}
|
|
1172
|
+
},
|
|
1173
|
+
"headersHelper": {
|
|
1174
|
+
"type": "string"
|
|
1175
|
+
},
|
|
1176
|
+
"oauth": {
|
|
1177
|
+
"type": "object",
|
|
1178
|
+
"properties": {
|
|
1179
|
+
"clientId": {
|
|
1180
|
+
"type": "string"
|
|
1181
|
+
},
|
|
1182
|
+
"callbackPort": {
|
|
1183
|
+
"type": "integer",
|
|
1184
|
+
"exclusiveMinimum": 0,
|
|
1185
|
+
"maximum": 9007199254740991
|
|
1186
|
+
},
|
|
1187
|
+
"authServerMetadataUrl": {
|
|
1188
|
+
"type": "string",
|
|
1189
|
+
"format": "uri",
|
|
1190
|
+
"pattern": "^https:\\/\\/.*"
|
|
1191
|
+
},
|
|
1192
|
+
"scopes": {
|
|
1193
|
+
"type": "string",
|
|
1194
|
+
"minLength": 1
|
|
1195
|
+
},
|
|
1196
|
+
"xaa": {
|
|
1197
|
+
"type": "boolean"
|
|
1198
|
+
}
|
|
1199
|
+
}
|
|
1200
|
+
}
|
|
1201
|
+
},
|
|
1202
|
+
"required": [
|
|
1203
|
+
"type",
|
|
1204
|
+
"url"
|
|
1205
|
+
]
|
|
1206
|
+
},
|
|
1207
|
+
{
|
|
1208
|
+
"type": "object",
|
|
1209
|
+
"properties": {
|
|
1210
|
+
"type": {
|
|
1211
|
+
"type": "string",
|
|
1212
|
+
"const": "ws"
|
|
1213
|
+
},
|
|
1214
|
+
"url": {
|
|
1215
|
+
"type": "string"
|
|
1216
|
+
},
|
|
1217
|
+
"headers": {
|
|
1218
|
+
"type": "object",
|
|
1219
|
+
"propertyNames": {
|
|
1220
|
+
"type": "string"
|
|
1221
|
+
},
|
|
1222
|
+
"additionalProperties": {
|
|
1223
|
+
"type": "string"
|
|
1224
|
+
}
|
|
1225
|
+
},
|
|
1226
|
+
"headersHelper": {
|
|
1227
|
+
"type": "string"
|
|
1228
|
+
}
|
|
1229
|
+
},
|
|
1230
|
+
"required": [
|
|
1231
|
+
"type",
|
|
1232
|
+
"url"
|
|
1233
|
+
]
|
|
1234
|
+
}
|
|
1235
|
+
]
|
|
1236
|
+
}
|
|
1237
|
+
},
|
|
1238
|
+
{
|
|
1239
|
+
"description": "Array of MCP server configurations (paths, MCPB files, or inline definitions)",
|
|
1240
|
+
"type": "array",
|
|
1241
|
+
"items": {
|
|
1242
|
+
"anyOf": [
|
|
1243
|
+
{
|
|
1244
|
+
"description": "Path to MCP servers configuration file",
|
|
1245
|
+
"type": "string",
|
|
1246
|
+
"allOf": [
|
|
1247
|
+
{
|
|
1248
|
+
"type": "string",
|
|
1249
|
+
"pattern": "^\\.\\/.*"
|
|
1250
|
+
},
|
|
1251
|
+
{
|
|
1252
|
+
"type": "string",
|
|
1253
|
+
"pattern": ".*\\.json$"
|
|
1254
|
+
}
|
|
1255
|
+
]
|
|
1256
|
+
},
|
|
1257
|
+
{
|
|
1258
|
+
"description": "Path or URL to MCPB file",
|
|
1259
|
+
"anyOf": [
|
|
1260
|
+
{
|
|
1261
|
+
"description": "Path to MCPB file relative to plugin root",
|
|
1262
|
+
"type": "string",
|
|
1263
|
+
"pattern": "^\\.\\/.*"
|
|
1264
|
+
},
|
|
1265
|
+
{
|
|
1266
|
+
"description": "URL to MCPB file",
|
|
1267
|
+
"type": "string",
|
|
1268
|
+
"format": "uri"
|
|
1269
|
+
}
|
|
1270
|
+
]
|
|
1271
|
+
},
|
|
1272
|
+
{
|
|
1273
|
+
"description": "Inline MCP server configurations",
|
|
1274
|
+
"type": "object",
|
|
1275
|
+
"propertyNames": {
|
|
1276
|
+
"type": "string"
|
|
1277
|
+
},
|
|
1278
|
+
"additionalProperties": {
|
|
1279
|
+
"anyOf": [
|
|
1280
|
+
{
|
|
1281
|
+
"type": "object",
|
|
1282
|
+
"properties": {
|
|
1283
|
+
"type": {
|
|
1284
|
+
"type": "string",
|
|
1285
|
+
"const": "stdio"
|
|
1286
|
+
},
|
|
1287
|
+
"command": {
|
|
1288
|
+
"type": "string",
|
|
1289
|
+
"minLength": 1
|
|
1290
|
+
},
|
|
1291
|
+
"args": {
|
|
1292
|
+
"default": [],
|
|
1293
|
+
"type": "array",
|
|
1294
|
+
"items": {
|
|
1295
|
+
"type": "string"
|
|
1296
|
+
}
|
|
1297
|
+
},
|
|
1298
|
+
"env": {
|
|
1299
|
+
"type": "object",
|
|
1300
|
+
"propertyNames": {
|
|
1301
|
+
"type": "string"
|
|
1302
|
+
},
|
|
1303
|
+
"additionalProperties": {
|
|
1304
|
+
"type": "string"
|
|
1305
|
+
}
|
|
1306
|
+
}
|
|
1307
|
+
},
|
|
1308
|
+
"required": [
|
|
1309
|
+
"command"
|
|
1310
|
+
]
|
|
1311
|
+
},
|
|
1312
|
+
{
|
|
1313
|
+
"type": "object",
|
|
1314
|
+
"properties": {
|
|
1315
|
+
"type": {
|
|
1316
|
+
"type": "string",
|
|
1317
|
+
"const": "sse"
|
|
1318
|
+
},
|
|
1319
|
+
"url": {
|
|
1320
|
+
"type": "string"
|
|
1321
|
+
},
|
|
1322
|
+
"headers": {
|
|
1323
|
+
"type": "object",
|
|
1324
|
+
"propertyNames": {
|
|
1325
|
+
"type": "string"
|
|
1326
|
+
},
|
|
1327
|
+
"additionalProperties": {
|
|
1328
|
+
"type": "string"
|
|
1329
|
+
}
|
|
1330
|
+
},
|
|
1331
|
+
"headersHelper": {
|
|
1332
|
+
"type": "string"
|
|
1333
|
+
},
|
|
1334
|
+
"oauth": {
|
|
1335
|
+
"type": "object",
|
|
1336
|
+
"properties": {
|
|
1337
|
+
"clientId": {
|
|
1338
|
+
"type": "string"
|
|
1339
|
+
},
|
|
1340
|
+
"callbackPort": {
|
|
1341
|
+
"type": "integer",
|
|
1342
|
+
"exclusiveMinimum": 0,
|
|
1343
|
+
"maximum": 9007199254740991
|
|
1344
|
+
},
|
|
1345
|
+
"authServerMetadataUrl": {
|
|
1346
|
+
"type": "string",
|
|
1347
|
+
"format": "uri",
|
|
1348
|
+
"pattern": "^https:\\/\\/.*"
|
|
1349
|
+
},
|
|
1350
|
+
"scopes": {
|
|
1351
|
+
"type": "string",
|
|
1352
|
+
"minLength": 1
|
|
1353
|
+
},
|
|
1354
|
+
"xaa": {
|
|
1355
|
+
"type": "boolean"
|
|
1356
|
+
}
|
|
1357
|
+
}
|
|
1358
|
+
}
|
|
1359
|
+
},
|
|
1360
|
+
"required": [
|
|
1361
|
+
"type",
|
|
1362
|
+
"url"
|
|
1363
|
+
]
|
|
1364
|
+
},
|
|
1365
|
+
{
|
|
1366
|
+
"type": "object",
|
|
1367
|
+
"properties": {
|
|
1368
|
+
"type": {
|
|
1369
|
+
"type": "string",
|
|
1370
|
+
"const": "http"
|
|
1371
|
+
},
|
|
1372
|
+
"url": {
|
|
1373
|
+
"type": "string"
|
|
1374
|
+
},
|
|
1375
|
+
"headers": {
|
|
1376
|
+
"type": "object",
|
|
1377
|
+
"propertyNames": {
|
|
1378
|
+
"type": "string"
|
|
1379
|
+
},
|
|
1380
|
+
"additionalProperties": {
|
|
1381
|
+
"type": "string"
|
|
1382
|
+
}
|
|
1383
|
+
},
|
|
1384
|
+
"headersHelper": {
|
|
1385
|
+
"type": "string"
|
|
1386
|
+
},
|
|
1387
|
+
"oauth": {
|
|
1388
|
+
"type": "object",
|
|
1389
|
+
"properties": {
|
|
1390
|
+
"clientId": {
|
|
1391
|
+
"type": "string"
|
|
1392
|
+
},
|
|
1393
|
+
"callbackPort": {
|
|
1394
|
+
"type": "integer",
|
|
1395
|
+
"exclusiveMinimum": 0,
|
|
1396
|
+
"maximum": 9007199254740991
|
|
1397
|
+
},
|
|
1398
|
+
"authServerMetadataUrl": {
|
|
1399
|
+
"type": "string",
|
|
1400
|
+
"format": "uri",
|
|
1401
|
+
"pattern": "^https:\\/\\/.*"
|
|
1402
|
+
},
|
|
1403
|
+
"scopes": {
|
|
1404
|
+
"type": "string",
|
|
1405
|
+
"minLength": 1
|
|
1406
|
+
},
|
|
1407
|
+
"xaa": {
|
|
1408
|
+
"type": "boolean"
|
|
1409
|
+
}
|
|
1410
|
+
}
|
|
1411
|
+
}
|
|
1412
|
+
},
|
|
1413
|
+
"required": [
|
|
1414
|
+
"type",
|
|
1415
|
+
"url"
|
|
1416
|
+
]
|
|
1417
|
+
},
|
|
1418
|
+
{
|
|
1419
|
+
"type": "object",
|
|
1420
|
+
"properties": {
|
|
1421
|
+
"type": {
|
|
1422
|
+
"type": "string",
|
|
1423
|
+
"const": "ws"
|
|
1424
|
+
},
|
|
1425
|
+
"url": {
|
|
1426
|
+
"type": "string"
|
|
1427
|
+
},
|
|
1428
|
+
"headers": {
|
|
1429
|
+
"type": "object",
|
|
1430
|
+
"propertyNames": {
|
|
1431
|
+
"type": "string"
|
|
1432
|
+
},
|
|
1433
|
+
"additionalProperties": {
|
|
1434
|
+
"type": "string"
|
|
1435
|
+
}
|
|
1436
|
+
},
|
|
1437
|
+
"headersHelper": {
|
|
1438
|
+
"type": "string"
|
|
1439
|
+
}
|
|
1440
|
+
},
|
|
1441
|
+
"required": [
|
|
1442
|
+
"type",
|
|
1443
|
+
"url"
|
|
1444
|
+
]
|
|
1445
|
+
}
|
|
1446
|
+
]
|
|
1447
|
+
}
|
|
1448
|
+
}
|
|
1449
|
+
]
|
|
1450
|
+
}
|
|
1451
|
+
}
|
|
1452
|
+
]
|
|
1453
|
+
},
|
|
1454
|
+
"lspServers": {
|
|
1455
|
+
"anyOf": [
|
|
1456
|
+
{
|
|
1457
|
+
"description": "Path to .lsp.json configuration file relative to plugin root",
|
|
1458
|
+
"type": "string",
|
|
1459
|
+
"allOf": [
|
|
1460
|
+
{
|
|
1461
|
+
"type": "string",
|
|
1462
|
+
"pattern": "^\\.\\/.*"
|
|
1463
|
+
},
|
|
1464
|
+
{
|
|
1465
|
+
"type": "string",
|
|
1466
|
+
"pattern": ".*\\.json$"
|
|
1467
|
+
}
|
|
1468
|
+
]
|
|
1469
|
+
},
|
|
1470
|
+
{
|
|
1471
|
+
"description": "LSP server configurations keyed by server name",
|
|
1472
|
+
"type": "object",
|
|
1473
|
+
"propertyNames": {
|
|
1474
|
+
"type": "string"
|
|
1475
|
+
},
|
|
1476
|
+
"additionalProperties": {
|
|
1477
|
+
"type": "object",
|
|
1478
|
+
"properties": {
|
|
1479
|
+
"command": {
|
|
1480
|
+
"description": "Command to execute the LSP server (e.g., \"typescript-language-server\")",
|
|
1481
|
+
"type": "string",
|
|
1482
|
+
"minLength": 1
|
|
1483
|
+
},
|
|
1484
|
+
"args": {
|
|
1485
|
+
"description": "Command-line arguments to pass to the server",
|
|
1486
|
+
"type": "array",
|
|
1487
|
+
"items": {
|
|
1488
|
+
"type": "string",
|
|
1489
|
+
"minLength": 1
|
|
1490
|
+
}
|
|
1491
|
+
},
|
|
1492
|
+
"extensionToLanguage": {
|
|
1493
|
+
"description": "Mapping from file extension to LSP language ID. File extensions and languages are derived from this mapping.",
|
|
1494
|
+
"type": "object",
|
|
1495
|
+
"propertyNames": {
|
|
1496
|
+
"type": "string",
|
|
1497
|
+
"minLength": 2
|
|
1498
|
+
},
|
|
1499
|
+
"additionalProperties": {
|
|
1500
|
+
"type": "string",
|
|
1501
|
+
"minLength": 1
|
|
1502
|
+
}
|
|
1503
|
+
},
|
|
1504
|
+
"transport": {
|
|
1505
|
+
"description": "Communication transport mechanism",
|
|
1506
|
+
"default": "stdio",
|
|
1507
|
+
"type": "string",
|
|
1508
|
+
"enum": [
|
|
1509
|
+
"stdio",
|
|
1510
|
+
"socket"
|
|
1511
|
+
]
|
|
1512
|
+
},
|
|
1513
|
+
"env": {
|
|
1514
|
+
"description": "Environment variables to set when starting the server",
|
|
1515
|
+
"type": "object",
|
|
1516
|
+
"propertyNames": {
|
|
1517
|
+
"type": "string"
|
|
1518
|
+
},
|
|
1519
|
+
"additionalProperties": {
|
|
1520
|
+
"type": "string"
|
|
1521
|
+
}
|
|
1522
|
+
},
|
|
1523
|
+
"initializationOptions": {
|
|
1524
|
+
"description": "Initialization options passed to the server during initialization"
|
|
1525
|
+
},
|
|
1526
|
+
"settings": {
|
|
1527
|
+
"description": "Settings passed to the server via workspace/didChangeConfiguration"
|
|
1528
|
+
},
|
|
1529
|
+
"workspaceFolder": {
|
|
1530
|
+
"description": "Workspace folder path to use for the server",
|
|
1531
|
+
"type": "string"
|
|
1532
|
+
},
|
|
1533
|
+
"startupTimeout": {
|
|
1534
|
+
"description": "Maximum time to wait for server startup (milliseconds)",
|
|
1535
|
+
"type": "integer",
|
|
1536
|
+
"exclusiveMinimum": 0,
|
|
1537
|
+
"maximum": 9007199254740991
|
|
1538
|
+
},
|
|
1539
|
+
"shutdownTimeout": {
|
|
1540
|
+
"description": "Maximum time to wait for graceful shutdown (milliseconds)",
|
|
1541
|
+
"type": "integer",
|
|
1542
|
+
"exclusiveMinimum": 0,
|
|
1543
|
+
"maximum": 9007199254740991
|
|
1544
|
+
},
|
|
1545
|
+
"restartOnCrash": {
|
|
1546
|
+
"description": "Whether to restart the server if it crashes",
|
|
1547
|
+
"type": "boolean"
|
|
1548
|
+
},
|
|
1549
|
+
"maxRestarts": {
|
|
1550
|
+
"description": "Maximum number of restart attempts before giving up",
|
|
1551
|
+
"type": "integer",
|
|
1552
|
+
"minimum": 0,
|
|
1553
|
+
"maximum": 9007199254740991
|
|
1554
|
+
}
|
|
1555
|
+
},
|
|
1556
|
+
"required": [
|
|
1557
|
+
"command",
|
|
1558
|
+
"extensionToLanguage"
|
|
1559
|
+
],
|
|
1560
|
+
"additionalProperties": false
|
|
1561
|
+
}
|
|
1562
|
+
},
|
|
1563
|
+
{
|
|
1564
|
+
"description": "Array of LSP server configurations (paths or inline definitions)",
|
|
1565
|
+
"type": "array",
|
|
1566
|
+
"items": {
|
|
1567
|
+
"anyOf": [
|
|
1568
|
+
{
|
|
1569
|
+
"description": "Path to LSP configuration file",
|
|
1570
|
+
"type": "string",
|
|
1571
|
+
"allOf": [
|
|
1572
|
+
{
|
|
1573
|
+
"type": "string",
|
|
1574
|
+
"pattern": "^\\.\\/.*"
|
|
1575
|
+
},
|
|
1576
|
+
{
|
|
1577
|
+
"type": "string",
|
|
1578
|
+
"pattern": ".*\\.json$"
|
|
1579
|
+
}
|
|
1580
|
+
]
|
|
1581
|
+
},
|
|
1582
|
+
{
|
|
1583
|
+
"description": "Inline LSP server configurations",
|
|
1584
|
+
"type": "object",
|
|
1585
|
+
"propertyNames": {
|
|
1586
|
+
"type": "string"
|
|
1587
|
+
},
|
|
1588
|
+
"additionalProperties": {
|
|
1589
|
+
"type": "object",
|
|
1590
|
+
"properties": {
|
|
1591
|
+
"command": {
|
|
1592
|
+
"description": "Command to execute the LSP server (e.g., \"typescript-language-server\")",
|
|
1593
|
+
"type": "string",
|
|
1594
|
+
"minLength": 1
|
|
1595
|
+
},
|
|
1596
|
+
"args": {
|
|
1597
|
+
"description": "Command-line arguments to pass to the server",
|
|
1598
|
+
"type": "array",
|
|
1599
|
+
"items": {
|
|
1600
|
+
"type": "string",
|
|
1601
|
+
"minLength": 1
|
|
1602
|
+
}
|
|
1603
|
+
},
|
|
1604
|
+
"extensionToLanguage": {
|
|
1605
|
+
"description": "Mapping from file extension to LSP language ID. File extensions and languages are derived from this mapping.",
|
|
1606
|
+
"type": "object",
|
|
1607
|
+
"propertyNames": {
|
|
1608
|
+
"type": "string",
|
|
1609
|
+
"minLength": 2
|
|
1610
|
+
},
|
|
1611
|
+
"additionalProperties": {
|
|
1612
|
+
"type": "string",
|
|
1613
|
+
"minLength": 1
|
|
1614
|
+
}
|
|
1615
|
+
},
|
|
1616
|
+
"transport": {
|
|
1617
|
+
"description": "Communication transport mechanism",
|
|
1618
|
+
"default": "stdio",
|
|
1619
|
+
"type": "string",
|
|
1620
|
+
"enum": [
|
|
1621
|
+
"stdio",
|
|
1622
|
+
"socket"
|
|
1623
|
+
]
|
|
1624
|
+
},
|
|
1625
|
+
"env": {
|
|
1626
|
+
"description": "Environment variables to set when starting the server",
|
|
1627
|
+
"type": "object",
|
|
1628
|
+
"propertyNames": {
|
|
1629
|
+
"type": "string"
|
|
1630
|
+
},
|
|
1631
|
+
"additionalProperties": {
|
|
1632
|
+
"type": "string"
|
|
1633
|
+
}
|
|
1634
|
+
},
|
|
1635
|
+
"initializationOptions": {
|
|
1636
|
+
"description": "Initialization options passed to the server during initialization"
|
|
1637
|
+
},
|
|
1638
|
+
"settings": {
|
|
1639
|
+
"description": "Settings passed to the server via workspace/didChangeConfiguration"
|
|
1640
|
+
},
|
|
1641
|
+
"workspaceFolder": {
|
|
1642
|
+
"description": "Workspace folder path to use for the server",
|
|
1643
|
+
"type": "string"
|
|
1644
|
+
},
|
|
1645
|
+
"startupTimeout": {
|
|
1646
|
+
"description": "Maximum time to wait for server startup (milliseconds)",
|
|
1647
|
+
"type": "integer",
|
|
1648
|
+
"exclusiveMinimum": 0,
|
|
1649
|
+
"maximum": 9007199254740991
|
|
1650
|
+
},
|
|
1651
|
+
"shutdownTimeout": {
|
|
1652
|
+
"description": "Maximum time to wait for graceful shutdown (milliseconds)",
|
|
1653
|
+
"type": "integer",
|
|
1654
|
+
"exclusiveMinimum": 0,
|
|
1655
|
+
"maximum": 9007199254740991
|
|
1656
|
+
},
|
|
1657
|
+
"restartOnCrash": {
|
|
1658
|
+
"description": "Whether to restart the server if it crashes",
|
|
1659
|
+
"type": "boolean"
|
|
1660
|
+
},
|
|
1661
|
+
"maxRestarts": {
|
|
1662
|
+
"description": "Maximum number of restart attempts before giving up",
|
|
1663
|
+
"type": "integer",
|
|
1664
|
+
"minimum": 0,
|
|
1665
|
+
"maximum": 9007199254740991
|
|
1666
|
+
}
|
|
1667
|
+
},
|
|
1668
|
+
"required": [
|
|
1669
|
+
"command",
|
|
1670
|
+
"extensionToLanguage"
|
|
1671
|
+
],
|
|
1672
|
+
"additionalProperties": false
|
|
1673
|
+
}
|
|
1674
|
+
}
|
|
1675
|
+
]
|
|
1676
|
+
}
|
|
1677
|
+
}
|
|
1678
|
+
]
|
|
1679
|
+
},
|
|
1680
|
+
"monitors": {
|
|
1681
|
+
"description": "Background watch scripts the host arms as persistent Monitor tasks (unsandboxed, same trust tier as hooks) so plugins need not instruct the model to arm them. When omitted, monitors/monitors.json at the plugin root is loaded if present.",
|
|
1682
|
+
"anyOf": [
|
|
1683
|
+
{
|
|
1684
|
+
"description": "Path to a JSON file containing the monitors array, relative to the plugin root",
|
|
1685
|
+
"type": "string",
|
|
1686
|
+
"allOf": [
|
|
1687
|
+
{
|
|
1688
|
+
"type": "string",
|
|
1689
|
+
"pattern": "^\\.\\/.*"
|
|
1690
|
+
},
|
|
1691
|
+
{
|
|
1692
|
+
"type": "string",
|
|
1693
|
+
"pattern": ".*\\.json$"
|
|
1694
|
+
}
|
|
1695
|
+
]
|
|
1696
|
+
},
|
|
1697
|
+
{
|
|
1698
|
+
"type": "array",
|
|
1699
|
+
"items": {
|
|
1700
|
+
"type": "object",
|
|
1701
|
+
"properties": {
|
|
1702
|
+
"name": {
|
|
1703
|
+
"description": "Identifier for this monitor, unique within the plugin. Used to dedupe so re-arming (plugin reload, repeat skill invoke) does not spawn duplicates.",
|
|
1704
|
+
"type": "string",
|
|
1705
|
+
"minLength": 1
|
|
1706
|
+
},
|
|
1707
|
+
"command": {
|
|
1708
|
+
"description": "Shell command to run as a persistent background monitor. Each stdout line is delivered to the model as a <task_notification> event; the process runs for the session lifetime. ${CLAUDE_PLUGIN_ROOT}, ${CLAUDE_PLUGIN_DATA}, ${user_config.*}, and ${ENV_VAR} are substituted. Runs in the session cwd — prefix with `cd \"${CLAUDE_PLUGIN_ROOT}\" && ` if the script needs its own directory.",
|
|
1709
|
+
"type": "string",
|
|
1710
|
+
"minLength": 1
|
|
1711
|
+
},
|
|
1712
|
+
"description": {
|
|
1713
|
+
"description": "Short human-readable description of what is being monitored (shown in task panel and notification summary).",
|
|
1714
|
+
"type": "string",
|
|
1715
|
+
"minLength": 1
|
|
1716
|
+
},
|
|
1717
|
+
"when": {
|
|
1718
|
+
"description": "Arm trigger. \"always\" arms at session start and on plugin reload. \"on-skill-invoke:<skill>\" arms the first time that skill is dispatched (via Skill tool or slash command).",
|
|
1719
|
+
"default": "always",
|
|
1720
|
+
"anyOf": [
|
|
1721
|
+
{
|
|
1722
|
+
"type": "string",
|
|
1723
|
+
"const": "always"
|
|
1724
|
+
},
|
|
1725
|
+
{
|
|
1726
|
+
"type": "string",
|
|
1727
|
+
"pattern": "^on-skill-invoke:.*"
|
|
1728
|
+
}
|
|
1729
|
+
]
|
|
1730
|
+
}
|
|
1731
|
+
},
|
|
1732
|
+
"required": [
|
|
1733
|
+
"name",
|
|
1734
|
+
"command",
|
|
1735
|
+
"description"
|
|
1736
|
+
],
|
|
1737
|
+
"additionalProperties": false
|
|
1738
|
+
}
|
|
1739
|
+
}
|
|
1740
|
+
]
|
|
1741
|
+
},
|
|
1742
|
+
"settings": {
|
|
1743
|
+
"description": "Settings to merge into the user settings while this plugin is enabled. Only the documented allowlisted keys are applied.",
|
|
1744
|
+
"type": "object",
|
|
1745
|
+
"propertyNames": {
|
|
1746
|
+
"type": "string"
|
|
1747
|
+
},
|
|
1748
|
+
"additionalProperties": {}
|
|
1749
|
+
},
|
|
1750
|
+
"userConfig": {
|
|
1751
|
+
"description": "User-configurable values this plugin needs. Prompted at enable time. Non-sensitive values saved to settings.json; sensitive values to secure storage. Available as ${user_config.KEY} in MCP/LSP server config, hook commands, and (non-sensitive only) skill/agent content. Keep sensitive value counts small.",
|
|
1752
|
+
"type": "object",
|
|
1753
|
+
"propertyNames": {
|
|
1754
|
+
"type": "string",
|
|
1755
|
+
"pattern": "^[A-Za-z_]\\w*$"
|
|
1756
|
+
},
|
|
1757
|
+
"additionalProperties": {
|
|
1758
|
+
"type": "object",
|
|
1759
|
+
"properties": {
|
|
1760
|
+
"type": {
|
|
1761
|
+
"description": "Type of the configuration value",
|
|
1762
|
+
"type": "string",
|
|
1763
|
+
"enum": [
|
|
1764
|
+
"string",
|
|
1765
|
+
"number",
|
|
1766
|
+
"boolean",
|
|
1767
|
+
"directory",
|
|
1768
|
+
"file"
|
|
1769
|
+
]
|
|
1770
|
+
},
|
|
1771
|
+
"title": {
|
|
1772
|
+
"description": "Human-readable label shown in the config dialog",
|
|
1773
|
+
"type": "string"
|
|
1774
|
+
},
|
|
1775
|
+
"description": {
|
|
1776
|
+
"description": "Help text shown beneath the field in the config dialog",
|
|
1777
|
+
"type": "string"
|
|
1778
|
+
},
|
|
1779
|
+
"required": {
|
|
1780
|
+
"description": "If true, validation fails when this field is empty",
|
|
1781
|
+
"type": "boolean"
|
|
1782
|
+
},
|
|
1783
|
+
"default": {
|
|
1784
|
+
"description": "Default value used when the user provides nothing",
|
|
1785
|
+
"anyOf": [
|
|
1786
|
+
{
|
|
1787
|
+
"type": "string"
|
|
1788
|
+
},
|
|
1789
|
+
{
|
|
1790
|
+
"type": "number"
|
|
1791
|
+
},
|
|
1792
|
+
{
|
|
1793
|
+
"type": "boolean"
|
|
1794
|
+
},
|
|
1795
|
+
{
|
|
1796
|
+
"type": "array",
|
|
1797
|
+
"items": {
|
|
1798
|
+
"type": "string"
|
|
1799
|
+
}
|
|
1800
|
+
}
|
|
1801
|
+
]
|
|
1802
|
+
},
|
|
1803
|
+
"multiple": {
|
|
1804
|
+
"description": "For string type: allow an array of strings",
|
|
1805
|
+
"type": "boolean"
|
|
1806
|
+
},
|
|
1807
|
+
"sensitive": {
|
|
1808
|
+
"description": "If true, masks dialog input and stores value in secure storage (keychain/credentials file) instead of settings.json",
|
|
1809
|
+
"type": "boolean"
|
|
1810
|
+
},
|
|
1811
|
+
"min": {
|
|
1812
|
+
"description": "Minimum value (number type only)",
|
|
1813
|
+
"type": "number"
|
|
1814
|
+
},
|
|
1815
|
+
"max": {
|
|
1816
|
+
"description": "Maximum value (number type only)",
|
|
1817
|
+
"type": "number"
|
|
1818
|
+
}
|
|
1819
|
+
},
|
|
1820
|
+
"required": [
|
|
1821
|
+
"type",
|
|
1822
|
+
"title",
|
|
1823
|
+
"description"
|
|
1824
|
+
],
|
|
1825
|
+
"additionalProperties": false
|
|
1826
|
+
}
|
|
1827
|
+
}
|
|
1828
|
+
},
|
|
1829
|
+
"required": [
|
|
1830
|
+
"name"
|
|
1831
|
+
],
|
|
1832
|
+
"title": "Claude Code Plugin Manifest",
|
|
1833
|
+
"description": "Manifest (.claude-plugin/plugin.json) for a Claude Code plugin. Learn more: https://code.claude.com/docs/en/plugins-reference"
|
|
1834
|
+
}
|