@hashicorp/kits 0.1.9 → 0.1.11
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 +2 -0
- package/dist/adapters/base-adapter.d.ts.map +1 -1
- package/dist/adapters/base-adapter.js +13 -4
- package/dist/adapters/base-adapter.js.map +1 -1
- package/dist/adapters/command-parser.d.ts +12 -0
- package/dist/adapters/command-parser.d.ts.map +1 -1
- package/dist/adapters/command-parser.js +7 -1
- package/dist/adapters/command-parser.js.map +1 -1
- package/dist/adapters/gemini-cli/installer.js +1 -1
- package/dist/adapters/gemini-cli/installer.js.map +1 -1
- package/dist/cli/install.d.ts.map +1 -1
- package/dist/cli/install.js +3 -0
- package/dist/cli/install.js.map +1 -1
- package/dist/core/types.d.ts +2 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lockfile/index.d.ts +1 -1
- package/dist/lockfile/index.d.ts.map +1 -1
- package/dist/lockfile/index.js +1 -1
- package/dist/lockfile/index.js.map +1 -1
- package/dist/lockfile/read.d.ts.map +1 -1
- package/dist/lockfile/read.js +15 -24
- package/dist/lockfile/read.js.map +1 -1
- package/dist/lockfile/types.d.ts +4 -2
- package/dist/lockfile/types.d.ts.map +1 -1
- package/dist/lockfile/types.js +4 -2
- package/dist/lockfile/types.js.map +1 -1
- package/dist/lockfile/write.d.ts.map +1 -1
- package/dist/lockfile/write.js +7 -0
- package/dist/lockfile/write.js.map +1 -1
- package/dist/manifest/read.d.ts.map +1 -1
- package/dist/manifest/read.js +14 -19
- package/dist/manifest/read.js.map +1 -1
- package/dist/manifest/types.d.ts +2 -0
- package/dist/manifest/types.d.ts.map +1 -1
- package/dist/manifest/types.js +2 -0
- package/dist/manifest/types.js.map +1 -1
- package/dist/manifest/write.d.ts.map +1 -1
- package/dist/manifest/write.js +4 -1
- package/dist/manifest/write.js.map +1 -1
- package/dist/resolution/primitives-registry.d.ts.map +1 -1
- package/dist/resolution/primitives-registry.js +27 -1
- package/dist/resolution/primitives-registry.js.map +1 -1
- package/dist/tui/kit-select.d.ts.map +1 -1
- package/dist/tui/kit-select.js +7 -11
- package/dist/tui/kit-select.js.map +1 -1
- package/dist/tui/summary.d.ts.map +1 -1
- package/dist/tui/summary.js +1 -0
- package/dist/tui/summary.js.map +1 -1
- package/dist/tui/uninstall.d.ts.map +1 -1
- package/dist/tui/uninstall.js +1 -2
- package/dist/tui/uninstall.js.map +1 -1
- package/dist/tui/upgrade.d.ts.map +1 -1
- package/dist/tui/upgrade.js +0 -4
- package/dist/tui/upgrade.js.map +1 -1
- package/dist/validation/schema-registry.d.ts +18 -0
- package/dist/validation/schema-registry.d.ts.map +1 -0
- package/dist/validation/schema-registry.js +112 -0
- package/dist/validation/schema-registry.js.map +1 -0
- package/dist/validation/schema-validator.d.ts +18 -0
- package/dist/validation/schema-validator.d.ts.map +1 -0
- package/dist/validation/schema-validator.js +62 -0
- package/dist/validation/schema-validator.js.map +1 -0
- package/dist/validation/validate-commands.d.ts +3 -1
- package/dist/validation/validate-commands.d.ts.map +1 -1
- package/dist/validation/validate-commands.js +37 -10
- package/dist/validation/validate-commands.js.map +1 -1
- package/dist/validation/validate-hooks.d.ts.map +1 -1
- package/dist/validation/validate-hooks.js +11 -15
- package/dist/validation/validate-hooks.js.map +1 -1
- package/dist/validation/validate-kits.d.ts +1 -4
- package/dist/validation/validate-kits.d.ts.map +1 -1
- package/dist/validation/validate-kits.js +19 -52
- package/dist/validation/validate-kits.js.map +1 -1
- package/dist/validation/validate-mcp.d.ts.map +1 -1
- package/dist/validation/validate-mcp.js +10 -19
- package/dist/validation/validate-mcp.js.map +1 -1
- package/dist/validation/validate-skills.d.ts +3 -1
- package/dist/validation/validate-skills.d.ts.map +1 -1
- package/dist/validation/validate-skills.js +42 -71
- package/dist/validation/validate-skills.js.map +1 -1
- package/dist/validation/validate-subagents.d.ts +3 -1
- package/dist/validation/validate-subagents.d.ts.map +1 -1
- package/dist/validation/validate-subagents.js +15 -118
- package/dist/validation/validate-subagents.js.map +1 -1
- package/package.json +1 -1
- package/schemas/{command.schema.json → command.schema.v1.0.0.json} +15 -2
- package/schemas/examples/hook-program-valid.json +14 -4
- package/schemas/examples/http-server-valid.json +2 -1
- package/schemas/examples/invalid-sensitive-header-no-envvar.json +2 -1
- package/schemas/examples/invalid-sensitive-header-with-value.json +2 -1
- package/schemas/examples/invalid-sensitive-var-with-default.json +6 -2
- package/schemas/examples/stdio-server-valid.json +6 -2
- package/schemas/hook-binding.schema.v1.0.0.json +107 -0
- package/schemas/hook-program.schema.v1.0.0.json +255 -0
- package/schemas/{kit.schema.json → kit.schema.v1.0.0.json} +108 -19
- package/schemas/kits-lock.schema.v1.0.0.json +478 -0
- package/schemas/{kits-manifest.schema.json → kits-manifest.schema.v1.0.0.json} +38 -9
- package/schemas/{kits-registry.schema.json → kits-registry.schema.v1.0.0.json} +16 -5
- package/schemas/{mcp-server.schema.json → mcp-server.schema.v1.0.0.json} +73 -20
- package/schemas/{primitives-registry.schema.json → primitives-registry.schema.v1.0.0.json} +19 -5
- package/schemas/{skill.schema.json → skill.schema.v1.0.0.json} +28 -5
- package/schemas/{subagent.schema.json → subagent.schema.v1.0.0.json} +28 -5
- package/schemas/hook-binding.schema.json +0 -63
- package/schemas/hook-program.schema.json +0 -136
- package/schemas/kits-lock.schema.json +0 -282
|
@@ -22,6 +22,8 @@ import pc from "picocolors";
|
|
|
22
22
|
import { parseSubagentFrontmatter } from "../adapters/subagent-frontmatter.js";
|
|
23
23
|
import { formatValidationSourceError, resolveValidationSource } from "./source.js";
|
|
24
24
|
import { findMarkdownFiles, summarizeResults, printValidationResults, } from "./utils.js";
|
|
25
|
+
import { SchemaResolutionError } from "./schema-registry.js";
|
|
26
|
+
import { createSchemaValidator, formatSchemaErrors, SchemaValidationError, } from "./schema-validator.js";
|
|
25
27
|
/**
|
|
26
28
|
* Find all subagent files in a kit repository.
|
|
27
29
|
*
|
|
@@ -49,14 +51,10 @@ async function findSubagentFiles(agentKitsPath) {
|
|
|
49
51
|
}
|
|
50
52
|
return subagentFiles;
|
|
51
53
|
}
|
|
52
|
-
function isStringArray(value) {
|
|
53
|
-
return Array.isArray(value) && value.every((entry) => typeof entry === "string");
|
|
54
|
-
}
|
|
55
|
-
const ALLOWED_SUBAGENT_HOOK_EVENTS = new Set(["tool.before", "tool.after", "subagent.stop"]);
|
|
56
54
|
/**
|
|
57
55
|
* Validate a single subagent Markdown file.
|
|
58
56
|
*/
|
|
59
|
-
async function validateSubagentFile(filePath) {
|
|
57
|
+
async function validateSubagentFile(filePath, validateSchema) {
|
|
60
58
|
try {
|
|
61
59
|
const content = await fs.readFile(filePath, "utf-8");
|
|
62
60
|
const { frontmatter, body, hasFrontmatter } = parseSubagentFrontmatter(content);
|
|
@@ -67,122 +65,15 @@ async function validateSubagentFile(filePath) {
|
|
|
67
65
|
error: "subagent missing YAML frontmatter; expected ---\\n...\\n--- at start of file",
|
|
68
66
|
};
|
|
69
67
|
}
|
|
70
|
-
const
|
|
71
|
-
if (
|
|
72
|
-
|
|
73
|
-
file: filePath,
|
|
74
|
-
valid: false,
|
|
75
|
-
error: "subagent missing required 'name' field in frontmatter",
|
|
76
|
-
};
|
|
77
|
-
}
|
|
78
|
-
const description = frontmatter["description"];
|
|
79
|
-
if (typeof description !== "string" || description.trim().length === 0) {
|
|
68
|
+
const result = await validateSchema("subagent", frontmatter);
|
|
69
|
+
if (!result.valid) {
|
|
70
|
+
const errorText = formatSchemaErrors(result.errors ?? []);
|
|
80
71
|
return {
|
|
81
72
|
file: filePath,
|
|
82
73
|
valid: false,
|
|
83
|
-
error:
|
|
74
|
+
error: `Schema validation failed: ${errorText}`,
|
|
84
75
|
};
|
|
85
76
|
}
|
|
86
|
-
if (Object.prototype.hasOwnProperty.call(frontmatter, "allowedTools")) {
|
|
87
|
-
const allowedTools = frontmatter["allowedTools"];
|
|
88
|
-
if (!(typeof allowedTools === "string" || isStringArray(allowedTools))) {
|
|
89
|
-
return {
|
|
90
|
-
file: filePath,
|
|
91
|
-
valid: false,
|
|
92
|
-
error: "subagent 'allowedTools' must be a string or array of strings when present",
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
if (Object.prototype.hasOwnProperty.call(frontmatter, "disallowedTools")) {
|
|
97
|
-
const disallowedTools = frontmatter["disallowedTools"];
|
|
98
|
-
if (!(typeof disallowedTools === "string" || isStringArray(disallowedTools))) {
|
|
99
|
-
return {
|
|
100
|
-
file: filePath,
|
|
101
|
-
valid: false,
|
|
102
|
-
error: "subagent 'disallowedTools' must be a string or array of strings when present",
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
if (Object.prototype.hasOwnProperty.call(frontmatter, "maxTurns")) {
|
|
107
|
-
const maxTurns = frontmatter["maxTurns"];
|
|
108
|
-
if (typeof maxTurns !== "number") {
|
|
109
|
-
return {
|
|
110
|
-
file: filePath,
|
|
111
|
-
valid: false,
|
|
112
|
-
error: "subagent 'maxTurns' must be a number when present",
|
|
113
|
-
};
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
if (Object.prototype.hasOwnProperty.call(frontmatter, "timeout")) {
|
|
117
|
-
const timeout = frontmatter["timeout"];
|
|
118
|
-
if (typeof timeout !== "number") {
|
|
119
|
-
return {
|
|
120
|
-
file: filePath,
|
|
121
|
-
valid: false,
|
|
122
|
-
error: "subagent 'timeout' must be a number when present",
|
|
123
|
-
};
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
if (Object.prototype.hasOwnProperty.call(frontmatter, "skills")) {
|
|
127
|
-
const skills = frontmatter["skills"];
|
|
128
|
-
if (!isStringArray(skills)) {
|
|
129
|
-
return {
|
|
130
|
-
file: filePath,
|
|
131
|
-
valid: false,
|
|
132
|
-
error: "subagent 'skills' must be an array of strings when present",
|
|
133
|
-
};
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
if (Object.prototype.hasOwnProperty.call(frontmatter, "hooks")) {
|
|
137
|
-
const hooks = frontmatter["hooks"];
|
|
138
|
-
if (!Array.isArray(hooks)) {
|
|
139
|
-
return {
|
|
140
|
-
file: filePath,
|
|
141
|
-
valid: false,
|
|
142
|
-
error: "subagent 'hooks' must be an array when present",
|
|
143
|
-
};
|
|
144
|
-
}
|
|
145
|
-
for (const hookEntry of hooks) {
|
|
146
|
-
if (!hookEntry || typeof hookEntry !== "object") {
|
|
147
|
-
return {
|
|
148
|
-
file: filePath,
|
|
149
|
-
valid: false,
|
|
150
|
-
error: "subagent 'hooks' entries must be objects",
|
|
151
|
-
};
|
|
152
|
-
}
|
|
153
|
-
const ref = hookEntry["ref"];
|
|
154
|
-
if (typeof ref !== "string" || ref.trim().length === 0) {
|
|
155
|
-
return {
|
|
156
|
-
file: filePath,
|
|
157
|
-
valid: false,
|
|
158
|
-
error: "subagent 'hooks' entries must include a non-empty 'ref' string",
|
|
159
|
-
};
|
|
160
|
-
}
|
|
161
|
-
const binding = hookEntry["binding"];
|
|
162
|
-
if (!binding || typeof binding !== "object") {
|
|
163
|
-
return {
|
|
164
|
-
file: filePath,
|
|
165
|
-
valid: false,
|
|
166
|
-
error: "subagent 'hooks' entries must include a 'binding' object",
|
|
167
|
-
};
|
|
168
|
-
}
|
|
169
|
-
const event = binding["event"];
|
|
170
|
-
if (typeof event !== "string" || event.trim().length === 0) {
|
|
171
|
-
return {
|
|
172
|
-
file: filePath,
|
|
173
|
-
valid: false,
|
|
174
|
-
error: "subagent hook binding requires an 'event' string",
|
|
175
|
-
};
|
|
176
|
-
}
|
|
177
|
-
if (!ALLOWED_SUBAGENT_HOOK_EVENTS.has(event)) {
|
|
178
|
-
return {
|
|
179
|
-
file: filePath,
|
|
180
|
-
valid: false,
|
|
181
|
-
error: "subagent hook binding event must be one of: tool.before, tool.after, subagent.stop",
|
|
182
|
-
};
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
77
|
if (body.trim().length === 0) {
|
|
187
78
|
return {
|
|
188
79
|
file: filePath,
|
|
@@ -200,6 +91,9 @@ async function validateSubagentFile(filePath) {
|
|
|
200
91
|
return { file: filePath, valid: true };
|
|
201
92
|
}
|
|
202
93
|
catch (error) {
|
|
94
|
+
if (error instanceof SchemaResolutionError || error instanceof SchemaValidationError) {
|
|
95
|
+
return { file: filePath, valid: false, error: error.message };
|
|
96
|
+
}
|
|
203
97
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
204
98
|
return { file: filePath, valid: false, error: errorMessage };
|
|
205
99
|
}
|
|
@@ -207,11 +101,14 @@ async function validateSubagentFile(filePath) {
|
|
|
207
101
|
/**
|
|
208
102
|
* Validate all subagent files in a kit repository.
|
|
209
103
|
*/
|
|
210
|
-
export async function validateSubagents(agentKitsPath) {
|
|
104
|
+
export async function validateSubagents(agentKitsPath, options = {}) {
|
|
105
|
+
const schemaRoot = options.schemaRoot ??
|
|
106
|
+
path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../../schemas");
|
|
107
|
+
const schemaValidator = createSchemaValidator(schemaRoot);
|
|
211
108
|
const subagentFiles = await findSubagentFiles(agentKitsPath);
|
|
212
109
|
const results = [];
|
|
213
110
|
for (const file of subagentFiles) {
|
|
214
|
-
results.push(await validateSubagentFile(file));
|
|
111
|
+
results.push(await validateSubagentFile(file, schemaValidator.validate));
|
|
215
112
|
}
|
|
216
113
|
return summarizeResults(results);
|
|
217
114
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-subagents.js","sourceRoot":"","sources":["../../src/validation/validate-subagents.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"validate-subagents.js","sourceRoot":"","sources":["../../src/validation/validate-subagents.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,11 +1,24 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json-schema.org/draft-07/schema#",
|
|
3
|
-
"$id": "https://hashicorp.com/schemas/command.schema.json",
|
|
3
|
+
"$id": "https://hashicorp.com/schemas/command.schema.v1.0.0.json",
|
|
4
4
|
"title": "Command Frontmatter",
|
|
5
5
|
"description": "Schema for command primitive YAML frontmatter",
|
|
6
6
|
"type": "object",
|
|
7
|
-
"required": [
|
|
7
|
+
"required": [
|
|
8
|
+
"$schema",
|
|
9
|
+
"schemaVersion",
|
|
10
|
+
"description"
|
|
11
|
+
],
|
|
8
12
|
"properties": {
|
|
13
|
+
"$schema": {
|
|
14
|
+
"type": "string",
|
|
15
|
+
"description": "JSON Schema reference"
|
|
16
|
+
},
|
|
17
|
+
"schemaVersion": {
|
|
18
|
+
"type": "string",
|
|
19
|
+
"const": "1.0.0",
|
|
20
|
+
"description": "Version of this schema (semver)"
|
|
21
|
+
},
|
|
9
22
|
"description": {
|
|
10
23
|
"type": "string",
|
|
11
24
|
"minLength": 10,
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
+
"$schema": "https://raw.githubusercontent.com/hashicorp-labs/kits/refs/heads/main/schemas/hook-program.schema.v1.0.0.json",
|
|
3
|
+
"schemaVersion": "1.0.0",
|
|
2
4
|
"name": "pre-apply-validation",
|
|
3
5
|
"version": "1.0.0",
|
|
4
6
|
"description": "Validate Terraform input before apply",
|
|
@@ -7,16 +9,24 @@
|
|
|
7
9
|
"entrypoint": "hook.sh",
|
|
8
10
|
"shell": "bash",
|
|
9
11
|
"working_directory": "inherit",
|
|
10
|
-
"args": [
|
|
12
|
+
"args": [
|
|
13
|
+
"--strict"
|
|
14
|
+
],
|
|
11
15
|
"timeout_ms": 15000
|
|
12
16
|
},
|
|
13
17
|
"io": {
|
|
14
18
|
"stdin": "json",
|
|
15
19
|
"stdout": "json",
|
|
16
20
|
"error_codes": {
|
|
17
|
-
"success": [
|
|
18
|
-
|
|
19
|
-
|
|
21
|
+
"success": [
|
|
22
|
+
0
|
|
23
|
+
],
|
|
24
|
+
"warn": [
|
|
25
|
+
1
|
|
26
|
+
],
|
|
27
|
+
"block": [
|
|
28
|
+
2
|
|
29
|
+
]
|
|
20
30
|
}
|
|
21
31
|
},
|
|
22
32
|
"env": {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"$schema": "
|
|
2
|
+
"$schema": "https://raw.githubusercontent.com/hashicorp-labs/kits/refs/heads/main/schemas/mcp-server.schema.v1.0.0.json",
|
|
3
|
+
"schemaVersion": "1.0.0",
|
|
3
4
|
"name": "example-http-server",
|
|
4
5
|
"version": "1.0.0",
|
|
5
6
|
"description": "Example HTTP MCP server demonstrating sensitive and nonsensitive headers",
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"$schema": "
|
|
2
|
+
"$schema": "https://raw.githubusercontent.com/hashicorp-labs/kits/refs/heads/main/schemas/mcp-server.schema.v1.0.0.json",
|
|
3
|
+
"schemaVersion": "1.0.0",
|
|
3
4
|
"name": "invalid-server",
|
|
4
5
|
"version": "1.0.0",
|
|
5
6
|
"description": "This config should fail validation",
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"$schema": "
|
|
2
|
+
"$schema": "https://raw.githubusercontent.com/hashicorp-labs/kits/refs/heads/main/schemas/mcp-server.schema.v1.0.0.json",
|
|
3
|
+
"schemaVersion": "1.0.0",
|
|
3
4
|
"name": "invalid-server",
|
|
4
5
|
"version": "1.0.0",
|
|
5
6
|
"description": "This config should fail validation",
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
{
|
|
2
|
-
"$schema": "
|
|
2
|
+
"$schema": "https://raw.githubusercontent.com/hashicorp-labs/kits/refs/heads/main/schemas/mcp-server.schema.v1.0.0.json",
|
|
3
|
+
"schemaVersion": "1.0.0",
|
|
3
4
|
"name": "invalid-server",
|
|
4
5
|
"version": "1.0.0",
|
|
5
6
|
"description": "This config should fail validation",
|
|
6
7
|
"transport": {
|
|
7
8
|
"type": "stdio",
|
|
8
9
|
"command": "npx",
|
|
9
|
-
"args": [
|
|
10
|
+
"args": [
|
|
11
|
+
"-y",
|
|
12
|
+
"@example/server"
|
|
13
|
+
]
|
|
10
14
|
},
|
|
11
15
|
"env": {
|
|
12
16
|
"API_TOKEN": {
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
{
|
|
2
|
-
"$schema": "
|
|
2
|
+
"$schema": "https://raw.githubusercontent.com/hashicorp-labs/kits/refs/heads/main/schemas/mcp-server.schema.v1.0.0.json",
|
|
3
|
+
"schemaVersion": "1.0.0",
|
|
3
4
|
"name": "example-stdio-server",
|
|
4
5
|
"version": "1.0.0",
|
|
5
6
|
"description": "Example STDIO MCP server demonstrating sensitive and nonsensitive environment variables",
|
|
6
7
|
"transport": {
|
|
7
8
|
"type": "stdio",
|
|
8
9
|
"command": "npx",
|
|
9
|
-
"args": [
|
|
10
|
+
"args": [
|
|
11
|
+
"-y",
|
|
12
|
+
"@example/mcp-server"
|
|
13
|
+
],
|
|
10
14
|
"cwd": "."
|
|
11
15
|
},
|
|
12
16
|
"env": {
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "https://hashicorp.com/schemas/hook-binding.schema.v1.0.0.json",
|
|
4
|
+
"title": "Hook Binding",
|
|
5
|
+
"description": "Schema for canonical hook binding objects used in kit.json and subagent frontmatter",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": [
|
|
8
|
+
"event"
|
|
9
|
+
],
|
|
10
|
+
"properties": {
|
|
11
|
+
"event": {
|
|
12
|
+
"type": "string",
|
|
13
|
+
"enum": [
|
|
14
|
+
"session.start",
|
|
15
|
+
"session.end",
|
|
16
|
+
"prompt.submit",
|
|
17
|
+
"tool.before",
|
|
18
|
+
"tool.after",
|
|
19
|
+
"permission.request",
|
|
20
|
+
"notification",
|
|
21
|
+
"compaction.before",
|
|
22
|
+
"subagent.start",
|
|
23
|
+
"subagent.stop",
|
|
24
|
+
"error"
|
|
25
|
+
],
|
|
26
|
+
"description": "Canonical hook event"
|
|
27
|
+
},
|
|
28
|
+
"matcher": {
|
|
29
|
+
"type": "object",
|
|
30
|
+
"properties": {
|
|
31
|
+
"tools": {
|
|
32
|
+
"type": "array",
|
|
33
|
+
"items": {
|
|
34
|
+
"type": "string"
|
|
35
|
+
},
|
|
36
|
+
"minItems": 1
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
"additionalProperties": false
|
|
40
|
+
},
|
|
41
|
+
"policy": {
|
|
42
|
+
"type": "object",
|
|
43
|
+
"properties": {
|
|
44
|
+
"on_success": {
|
|
45
|
+
"type": "string",
|
|
46
|
+
"enum": [
|
|
47
|
+
"continue",
|
|
48
|
+
"warn",
|
|
49
|
+
"block"
|
|
50
|
+
]
|
|
51
|
+
},
|
|
52
|
+
"on_failure": {
|
|
53
|
+
"type": "string",
|
|
54
|
+
"enum": [
|
|
55
|
+
"continue",
|
|
56
|
+
"warn",
|
|
57
|
+
"block"
|
|
58
|
+
]
|
|
59
|
+
},
|
|
60
|
+
"on_timeout": {
|
|
61
|
+
"type": "string",
|
|
62
|
+
"enum": [
|
|
63
|
+
"continue",
|
|
64
|
+
"warn",
|
|
65
|
+
"block"
|
|
66
|
+
]
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
"additionalProperties": false
|
|
70
|
+
},
|
|
71
|
+
"args": {
|
|
72
|
+
"type": "object",
|
|
73
|
+
"additionalProperties": {
|
|
74
|
+
"anyOf": [
|
|
75
|
+
{
|
|
76
|
+
"type": "string",
|
|
77
|
+
"minLength": 1
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"type": "number"
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"type": "boolean"
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"type": "array",
|
|
87
|
+
"items": {
|
|
88
|
+
"type": [
|
|
89
|
+
"string",
|
|
90
|
+
"number",
|
|
91
|
+
"boolean"
|
|
92
|
+
]
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
]
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
"env": {
|
|
99
|
+
"type": "object",
|
|
100
|
+
"additionalProperties": {
|
|
101
|
+
"type": "string",
|
|
102
|
+
"minLength": 1
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
"additionalProperties": false
|
|
107
|
+
}
|