@hashicorp/kits 0.1.8 → 0.1.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. package/README.md +2 -0
  2. package/dist/adapters/base-adapter.d.ts.map +1 -1
  3. package/dist/adapters/base-adapter.js +13 -4
  4. package/dist/adapters/base-adapter.js.map +1 -1
  5. package/dist/adapters/command-parser.d.ts +12 -0
  6. package/dist/adapters/command-parser.d.ts.map +1 -1
  7. package/dist/adapters/command-parser.js +7 -1
  8. package/dist/adapters/command-parser.js.map +1 -1
  9. package/dist/adapters/gemini-cli/installer.js +1 -1
  10. package/dist/adapters/gemini-cli/installer.js.map +1 -1
  11. package/dist/cli/install.d.ts.map +1 -1
  12. package/dist/cli/install.js +34 -29
  13. package/dist/cli/install.js.map +1 -1
  14. package/dist/cli/uninstall.d.ts +1 -0
  15. package/dist/cli/uninstall.d.ts.map +1 -1
  16. package/dist/cli/uninstall.js +57 -62
  17. package/dist/cli/uninstall.js.map +1 -1
  18. package/dist/cli/upgrade.d.ts.map +1 -1
  19. package/dist/cli/upgrade.js +53 -57
  20. package/dist/cli/upgrade.js.map +1 -1
  21. package/dist/core/types.d.ts +2 -2
  22. package/dist/index.d.ts +1 -1
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +1 -1
  25. package/dist/index.js.map +1 -1
  26. package/dist/lockfile/index.d.ts +1 -1
  27. package/dist/lockfile/index.d.ts.map +1 -1
  28. package/dist/lockfile/index.js +1 -1
  29. package/dist/lockfile/index.js.map +1 -1
  30. package/dist/lockfile/read.d.ts.map +1 -1
  31. package/dist/lockfile/read.js +15 -24
  32. package/dist/lockfile/read.js.map +1 -1
  33. package/dist/lockfile/types.d.ts +4 -2
  34. package/dist/lockfile/types.d.ts.map +1 -1
  35. package/dist/lockfile/types.js +4 -2
  36. package/dist/lockfile/types.js.map +1 -1
  37. package/dist/lockfile/write.d.ts.map +1 -1
  38. package/dist/lockfile/write.js +7 -0
  39. package/dist/lockfile/write.js.map +1 -1
  40. package/dist/manifest/read.d.ts.map +1 -1
  41. package/dist/manifest/read.js +14 -19
  42. package/dist/manifest/read.js.map +1 -1
  43. package/dist/manifest/types.d.ts +2 -0
  44. package/dist/manifest/types.d.ts.map +1 -1
  45. package/dist/manifest/types.js +2 -0
  46. package/dist/manifest/types.js.map +1 -1
  47. package/dist/manifest/write.d.ts.map +1 -1
  48. package/dist/manifest/write.js +4 -1
  49. package/dist/manifest/write.js.map +1 -1
  50. package/dist/resolution/primitives-registry.d.ts.map +1 -1
  51. package/dist/resolution/primitives-registry.js +27 -1
  52. package/dist/resolution/primitives-registry.js.map +1 -1
  53. package/dist/tui/compatibility.d.ts.map +1 -1
  54. package/dist/tui/compatibility.js +81 -44
  55. package/dist/tui/compatibility.js.map +1 -1
  56. package/dist/tui/env-prompt.d.ts.map +1 -1
  57. package/dist/tui/env-prompt.js +39 -37
  58. package/dist/tui/env-prompt.js.map +1 -1
  59. package/dist/tui/harness-select.d.ts.map +1 -1
  60. package/dist/tui/harness-select.js +12 -18
  61. package/dist/tui/harness-select.js.map +1 -1
  62. package/dist/tui/index.d.ts +3 -1
  63. package/dist/tui/index.d.ts.map +1 -1
  64. package/dist/tui/index.js +12 -7
  65. package/dist/tui/index.js.map +1 -1
  66. package/dist/tui/kit-select.d.ts.map +1 -1
  67. package/dist/tui/kit-select.js +18 -22
  68. package/dist/tui/kit-select.js.map +1 -1
  69. package/dist/tui/progress.d.ts.map +1 -1
  70. package/dist/tui/progress.js +19 -14
  71. package/dist/tui/progress.js.map +1 -1
  72. package/dist/tui/renderer.d.ts +109 -0
  73. package/dist/tui/renderer.d.ts.map +1 -0
  74. package/dist/tui/renderer.js +296 -0
  75. package/dist/tui/renderer.js.map +1 -0
  76. package/dist/tui/resolution.d.ts.map +1 -1
  77. package/dist/tui/resolution.js +29 -22
  78. package/dist/tui/resolution.js.map +1 -1
  79. package/dist/tui/scope-compatibility.d.ts.map +1 -1
  80. package/dist/tui/scope-compatibility.js +17 -15
  81. package/dist/tui/scope-compatibility.js.map +1 -1
  82. package/dist/tui/scope-select.d.ts +1 -0
  83. package/dist/tui/scope-select.d.ts.map +1 -1
  84. package/dist/tui/scope-select.js +18 -16
  85. package/dist/tui/scope-select.js.map +1 -1
  86. package/dist/tui/summary.d.ts.map +1 -1
  87. package/dist/tui/summary.js +118 -57
  88. package/dist/tui/summary.js.map +1 -1
  89. package/dist/tui/types.d.ts +1 -0
  90. package/dist/tui/types.d.ts.map +1 -1
  91. package/dist/tui/uninstall.d.ts +13 -0
  92. package/dist/tui/uninstall.d.ts.map +1 -0
  93. package/dist/tui/uninstall.js +100 -0
  94. package/dist/tui/uninstall.js.map +1 -0
  95. package/dist/tui/upgrade-select.d.ts +26 -0
  96. package/dist/tui/upgrade-select.d.ts.map +1 -1
  97. package/dist/tui/upgrade-select.js +162 -123
  98. package/dist/tui/upgrade-select.js.map +1 -1
  99. package/dist/tui/upgrade.d.ts +15 -0
  100. package/dist/tui/upgrade.d.ts.map +1 -0
  101. package/dist/tui/upgrade.js +47 -0
  102. package/dist/tui/upgrade.js.map +1 -0
  103. package/dist/validation/schema-registry.d.ts +18 -0
  104. package/dist/validation/schema-registry.d.ts.map +1 -0
  105. package/dist/validation/schema-registry.js +112 -0
  106. package/dist/validation/schema-registry.js.map +1 -0
  107. package/dist/validation/schema-validator.d.ts +18 -0
  108. package/dist/validation/schema-validator.d.ts.map +1 -0
  109. package/dist/validation/schema-validator.js +62 -0
  110. package/dist/validation/schema-validator.js.map +1 -0
  111. package/dist/validation/validate-commands.d.ts +3 -1
  112. package/dist/validation/validate-commands.d.ts.map +1 -1
  113. package/dist/validation/validate-commands.js +37 -10
  114. package/dist/validation/validate-commands.js.map +1 -1
  115. package/dist/validation/validate-hooks.d.ts.map +1 -1
  116. package/dist/validation/validate-hooks.js +11 -15
  117. package/dist/validation/validate-hooks.js.map +1 -1
  118. package/dist/validation/validate-kits.d.ts +1 -4
  119. package/dist/validation/validate-kits.d.ts.map +1 -1
  120. package/dist/validation/validate-kits.js +19 -52
  121. package/dist/validation/validate-kits.js.map +1 -1
  122. package/dist/validation/validate-mcp.d.ts.map +1 -1
  123. package/dist/validation/validate-mcp.js +10 -19
  124. package/dist/validation/validate-mcp.js.map +1 -1
  125. package/dist/validation/validate-skills.d.ts +3 -1
  126. package/dist/validation/validate-skills.d.ts.map +1 -1
  127. package/dist/validation/validate-skills.js +42 -71
  128. package/dist/validation/validate-skills.js.map +1 -1
  129. package/dist/validation/validate-subagents.d.ts +3 -1
  130. package/dist/validation/validate-subagents.d.ts.map +1 -1
  131. package/dist/validation/validate-subagents.js +15 -118
  132. package/dist/validation/validate-subagents.js.map +1 -1
  133. package/package.json +1 -1
  134. package/schemas/{command.schema.json → command.schema.v1.0.0.json} +15 -2
  135. package/schemas/examples/hook-program-valid.json +14 -4
  136. package/schemas/examples/http-server-valid.json +2 -1
  137. package/schemas/examples/invalid-sensitive-header-no-envvar.json +2 -1
  138. package/schemas/examples/invalid-sensitive-header-with-value.json +2 -1
  139. package/schemas/examples/invalid-sensitive-var-with-default.json +6 -2
  140. package/schemas/examples/stdio-server-valid.json +6 -2
  141. package/schemas/hook-binding.schema.v1.0.0.json +107 -0
  142. package/schemas/hook-program.schema.v1.0.0.json +255 -0
  143. package/schemas/{kit.schema.json → kit.schema.v1.0.0.json} +108 -19
  144. package/schemas/kits-lock.schema.v1.0.0.json +478 -0
  145. package/schemas/{kits-manifest.schema.json → kits-manifest.schema.v1.0.0.json} +38 -9
  146. package/schemas/{kits-registry.schema.json → kits-registry.schema.v1.0.0.json} +16 -5
  147. package/schemas/{mcp-server.schema.json → mcp-server.schema.v1.0.0.json} +73 -20
  148. package/schemas/{primitives-registry.schema.json → primitives-registry.schema.v1.0.0.json} +19 -5
  149. package/schemas/{skill.schema.json → skill.schema.v1.0.0.json} +28 -5
  150. package/schemas/{subagent.schema.json → subagent.schema.v1.0.0.json} +28 -5
  151. package/schemas/hook-binding.schema.json +0 -63
  152. package/schemas/hook-program.schema.json +0 -136
  153. package/schemas/kits-lock.schema.json +0 -282
@@ -1,5 +1,6 @@
1
1
  {
2
- "$schema": "../mcp-server.schema.json",
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": "../mcp-server.schema.json",
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": ["-y", "@example/server"]
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": "../mcp-server.schema.json",
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": ["-y", "@example/mcp-server"],
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
+ }
@@ -0,0 +1,255 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft-07/schema#",
3
+ "$id": "https://hashicorp.com/schemas/hook-program.schema.v1.0.0.json",
4
+ "title": "Hook Program Config",
5
+ "description": "Schema for hook program config.json files",
6
+ "type": "object",
7
+ "required": [
8
+ "$schema",
9
+ "schemaVersion",
10
+ "name",
11
+ "version",
12
+ "description",
13
+ "runtime",
14
+ "io"
15
+ ],
16
+ "properties": {
17
+ "$schema": {
18
+ "type": "string",
19
+ "description": "JSON Schema reference"
20
+ },
21
+ "schemaVersion": {
22
+ "type": "string",
23
+ "const": "1.0.0",
24
+ "description": "Version of this schema (semver)"
25
+ },
26
+ "name": {
27
+ "type": "string",
28
+ "minLength": 3,
29
+ "maxLength": 50,
30
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
31
+ "description": "Hook program name in lowercase kebab-case"
32
+ },
33
+ "version": {
34
+ "type": "string",
35
+ "pattern": "^\\d+\\.\\d+\\.\\d+$",
36
+ "description": "Semver version string"
37
+ },
38
+ "description": {
39
+ "type": "string",
40
+ "minLength": 10,
41
+ "maxLength": 200,
42
+ "description": "Description of the hook program"
43
+ },
44
+ "runtime": {
45
+ "type": "object",
46
+ "required": [
47
+ "type",
48
+ "entrypoint"
49
+ ],
50
+ "properties": {
51
+ "type": {
52
+ "type": "string",
53
+ "enum": [
54
+ "command",
55
+ "prompt",
56
+ "opencode-plugin"
57
+ ],
58
+ "description": "Hook runtime type"
59
+ },
60
+ "entrypoint": {
61
+ "type": "string",
62
+ "minLength": 1,
63
+ "description": "Entrypoint file for the hook program"
64
+ },
65
+ "shell": {
66
+ "type": "string",
67
+ "description": "Shell to use for command runtime"
68
+ },
69
+ "working_directory": {
70
+ "type": "string",
71
+ "description": "Working directory for hook execution"
72
+ },
73
+ "args": {
74
+ "type": "array",
75
+ "items": {
76
+ "type": "string"
77
+ },
78
+ "description": "Arguments passed to the runtime executable"
79
+ },
80
+ "timeout_ms": {
81
+ "type": "number",
82
+ "description": "Execution timeout in milliseconds"
83
+ }
84
+ },
85
+ "additionalProperties": false,
86
+ "allOf": [
87
+ {
88
+ "if": {
89
+ "required": [
90
+ "args"
91
+ ]
92
+ },
93
+ "then": {
94
+ "required": [
95
+ "shell"
96
+ ]
97
+ }
98
+ }
99
+ ]
100
+ },
101
+ "io": {
102
+ "type": "object",
103
+ "required": [
104
+ "stdin",
105
+ "stdout"
106
+ ],
107
+ "properties": {
108
+ "stdin": {
109
+ "type": "string",
110
+ "enum": [
111
+ "json",
112
+ "none"
113
+ ],
114
+ "description": "Expected stdin format"
115
+ },
116
+ "stdout": {
117
+ "type": "string",
118
+ "enum": [
119
+ "json",
120
+ "none"
121
+ ],
122
+ "description": "Expected stdout format"
123
+ },
124
+ "error_codes": {
125
+ "type": "object",
126
+ "properties": {
127
+ "success": {
128
+ "type": "array",
129
+ "items": {
130
+ "type": "number"
131
+ }
132
+ },
133
+ "warn": {
134
+ "type": "array",
135
+ "items": {
136
+ "type": "number"
137
+ }
138
+ },
139
+ "block": {
140
+ "type": "array",
141
+ "items": {
142
+ "type": "number"
143
+ }
144
+ }
145
+ },
146
+ "additionalProperties": false
147
+ }
148
+ },
149
+ "additionalProperties": false
150
+ },
151
+ "env": {
152
+ "type": "object",
153
+ "additionalProperties": {
154
+ "type": "string",
155
+ "minLength": 1
156
+ },
157
+ "description": "Default environment variables for the hook program"
158
+ },
159
+ "args": {
160
+ "type": "array",
161
+ "items": {
162
+ "type": "object",
163
+ "additionalProperties": false,
164
+ "required": [
165
+ "name",
166
+ "kind",
167
+ "type",
168
+ "default"
169
+ ],
170
+ "properties": {
171
+ "name": {
172
+ "type": "string",
173
+ "minLength": 1
174
+ },
175
+ "kind": {
176
+ "type": "string",
177
+ "enum": [
178
+ "positional",
179
+ "flag"
180
+ ]
181
+ },
182
+ "flag": {
183
+ "type": "string",
184
+ "minLength": 2
185
+ },
186
+ "type": {
187
+ "type": "string",
188
+ "enum": [
189
+ "string",
190
+ "number",
191
+ "boolean",
192
+ "array"
193
+ ]
194
+ },
195
+ "default": {
196
+ "anyOf": [
197
+ {
198
+ "type": "string"
199
+ },
200
+ {
201
+ "type": "number"
202
+ },
203
+ {
204
+ "type": "boolean"
205
+ },
206
+ {
207
+ "type": "array",
208
+ "items": {
209
+ "type": [
210
+ "string",
211
+ "number",
212
+ "boolean"
213
+ ]
214
+ }
215
+ }
216
+ ]
217
+ },
218
+ "description": {
219
+ "type": "string"
220
+ },
221
+ "valueStyle": {
222
+ "type": "string",
223
+ "enum": [
224
+ "space",
225
+ "equals"
226
+ ]
227
+ }
228
+ },
229
+ "allOf": [
230
+ {
231
+ "if": {
232
+ "properties": {
233
+ "kind": {
234
+ "const": "flag"
235
+ }
236
+ }
237
+ },
238
+ "then": {
239
+ "required": [
240
+ "flag"
241
+ ]
242
+ }
243
+ }
244
+ ]
245
+ },
246
+ "description": "Optional ordered argument schema for hook programs"
247
+ },
248
+ "metadata": {
249
+ "type": "object",
250
+ "additionalProperties": true,
251
+ "description": "Arbitrary metadata for the hook program"
252
+ }
253
+ },
254
+ "additionalProperties": false
255
+ }
@@ -1,10 +1,17 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft-07/schema#",
3
- "$id": "https://hashicorp.com/schemas/kit.schema.json",
3
+ "$id": "https://hashicorp.com/schemas/kit.schema.v1.0.0.json",
4
4
  "title": "Kit Definition",
5
5
  "description": "Schema for kit.json - the kit definition file within each kit directory",
6
6
  "type": "object",
7
- "required": ["schemaVersion", "name", "version", "requires", "primitives"],
7
+ "required": [
8
+ "$schema",
9
+ "schemaVersion",
10
+ "name",
11
+ "version",
12
+ "requires",
13
+ "primitives"
14
+ ],
8
15
  "properties": {
9
16
  "$schema": {
10
17
  "type": "string",
@@ -12,7 +19,7 @@
12
19
  },
13
20
  "schemaVersion": {
14
21
  "type": "string",
15
- "pattern": "^\\d+\\.\\d+\\.\\d+$",
22
+ "const": "1.0.0",
16
23
  "description": "Version of this schema (semver)"
17
24
  },
18
25
  "name": {
@@ -78,7 +85,9 @@
78
85
  "definitions": {
79
86
  "author": {
80
87
  "type": "object",
81
- "required": ["name"],
88
+ "required": [
89
+ "name"
90
+ ],
82
91
  "properties": {
83
92
  "name": {
84
93
  "type": "string",
@@ -99,12 +108,20 @@
99
108
  },
100
109
  "primitiveType": {
101
110
  "type": "string",
102
- "enum": ["commands", "skills", "subagents", "mcp", "hooks"],
111
+ "enum": [
112
+ "commands",
113
+ "skills",
114
+ "subagents",
115
+ "mcp",
116
+ "hooks"
117
+ ],
103
118
  "description": "Primitive type identifier"
104
119
  },
105
120
  "requirements": {
106
121
  "type": "object",
107
- "required": ["primitives"],
122
+ "required": [
123
+ "primitives"
124
+ ],
108
125
  "properties": {
109
126
  "primitives": {
110
127
  "type": "array",
@@ -181,7 +198,9 @@
181
198
  },
182
199
  "referencedPrimitive": {
183
200
  "type": "object",
184
- "required": ["ref"],
201
+ "required": [
202
+ "ref"
203
+ ],
185
204
  "properties": {
186
205
  "ref": {
187
206
  "type": "string",
@@ -198,7 +217,10 @@
198
217
  },
199
218
  "inlinePrimitive": {
200
219
  "type": "object",
201
- "required": ["name", "entrypoint"],
220
+ "required": [
221
+ "name",
222
+ "entrypoint"
223
+ ],
202
224
  "properties": {
203
225
  "name": {
204
226
  "type": "string",
@@ -226,7 +248,10 @@
226
248
  },
227
249
  "hookReferencedPrimitive": {
228
250
  "type": "object",
229
- "required": ["ref", "binding"],
251
+ "required": [
252
+ "ref",
253
+ "binding"
254
+ ],
230
255
  "properties": {
231
256
  "ref": {
232
257
  "type": "string",
@@ -246,7 +271,11 @@
246
271
  },
247
272
  "hookInlinePrimitive": {
248
273
  "type": "object",
249
- "required": ["name", "entrypoint", "binding"],
274
+ "required": [
275
+ "name",
276
+ "entrypoint",
277
+ "binding"
278
+ ],
250
279
  "properties": {
251
280
  "name": {
252
281
  "type": "string",
@@ -277,7 +306,9 @@
277
306
  },
278
307
  "hookBinding": {
279
308
  "type": "object",
280
- "required": ["event"],
309
+ "required": [
310
+ "event"
311
+ ],
281
312
  "properties": {
282
313
  "event": {
283
314
  "type": "string",
@@ -301,7 +332,9 @@
301
332
  "properties": {
302
333
  "tools": {
303
334
  "type": "array",
304
- "items": { "type": "string" },
335
+ "items": {
336
+ "type": "string"
337
+ },
305
338
  "minItems": 1
306
339
  }
307
340
  },
@@ -310,27 +343,83 @@
310
343
  "policy": {
311
344
  "type": "object",
312
345
  "properties": {
313
- "on_success": { "type": "string", "enum": ["continue", "warn", "block"] },
314
- "on_failure": { "type": "string", "enum": ["continue", "warn", "block"] },
315
- "on_timeout": { "type": "string", "enum": ["continue", "warn", "block"] }
346
+ "on_success": {
347
+ "type": "string",
348
+ "enum": [
349
+ "continue",
350
+ "warn",
351
+ "block"
352
+ ]
353
+ },
354
+ "on_failure": {
355
+ "type": "string",
356
+ "enum": [
357
+ "continue",
358
+ "warn",
359
+ "block"
360
+ ]
361
+ },
362
+ "on_timeout": {
363
+ "type": "string",
364
+ "enum": [
365
+ "continue",
366
+ "warn",
367
+ "block"
368
+ ]
369
+ }
316
370
  },
317
371
  "additionalProperties": false
318
372
  },
373
+ "args": {
374
+ "type": "object",
375
+ "additionalProperties": {
376
+ "anyOf": [
377
+ {
378
+ "type": "string",
379
+ "minLength": 1
380
+ },
381
+ {
382
+ "type": "number"
383
+ },
384
+ {
385
+ "type": "boolean"
386
+ },
387
+ {
388
+ "type": "array",
389
+ "items": {
390
+ "type": [
391
+ "string",
392
+ "number",
393
+ "boolean"
394
+ ]
395
+ }
396
+ }
397
+ ]
398
+ }
399
+ },
319
400
  "runtime": {
320
401
  "type": "object",
321
402
  "properties": {
322
- "timeout_ms": { "type": "number" },
323
- "working_directory": { "type": "string" },
403
+ "timeout_ms": {
404
+ "type": "number"
405
+ },
406
+ "working_directory": {
407
+ "type": "string"
408
+ },
324
409
  "args": {
325
410
  "type": "array",
326
- "items": { "type": "string" }
411
+ "items": {
412
+ "type": "string"
413
+ }
327
414
  }
328
415
  },
329
416
  "additionalProperties": false
330
417
  },
331
418
  "env": {
332
419
  "type": "object",
333
- "additionalProperties": { "type": "string" }
420
+ "additionalProperties": {
421
+ "type": "string"
422
+ }
334
423
  }
335
424
  },
336
425
  "additionalProperties": false