agent-switchboard 0.1.26 → 0.1.28

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 (97) hide show
  1. package/README.md +37 -11
  2. package/dist/commands/distribution.js +2 -2
  3. package/dist/commands/distribution.js.map +1 -1
  4. package/dist/commands/library.d.ts +1 -1
  5. package/dist/commands/library.js +5 -6
  6. package/dist/commands/library.js.map +1 -1
  7. package/dist/config/application-config.d.ts +37 -0
  8. package/dist/config/application-config.js +83 -0
  9. package/dist/config/application-config.js.map +1 -0
  10. package/dist/config/layered-config.js +43 -2
  11. package/dist/config/layered-config.js.map +1 -1
  12. package/dist/config/paths.d.ts +13 -2
  13. package/dist/config/paths.js +21 -3
  14. package/dist/config/paths.js.map +1 -1
  15. package/dist/config/schemas.d.ts +408 -43
  16. package/dist/config/schemas.js +32 -22
  17. package/dist/config/schemas.js.map +1 -1
  18. package/dist/config/switchboard-config.d.ts +3 -6
  19. package/dist/config/switchboard-config.js +3 -6
  20. package/dist/config/switchboard-config.js.map +1 -1
  21. package/dist/hooks/distribution.d.ts +27 -0
  22. package/dist/hooks/distribution.js +235 -0
  23. package/dist/hooks/distribution.js.map +1 -0
  24. package/dist/hooks/library.d.ts +40 -0
  25. package/dist/hooks/library.js +143 -0
  26. package/dist/hooks/library.js.map +1 -0
  27. package/dist/hooks/schema.d.ts +542 -0
  28. package/dist/hooks/schema.js +49 -0
  29. package/dist/hooks/schema.js.map +1 -0
  30. package/dist/index.js +708 -168
  31. package/dist/index.js.map +1 -1
  32. package/dist/library/fs.d.ts +1 -3
  33. package/dist/library/fs.js +24 -7
  34. package/dist/library/fs.js.map +1 -1
  35. package/dist/library/schema.d.ts +1 -1
  36. package/dist/library/schema.js +1 -1
  37. package/dist/library/sources.d.ts +75 -0
  38. package/dist/library/sources.js +285 -0
  39. package/dist/library/sources.js.map +1 -0
  40. package/dist/library/state.d.ts +4 -5
  41. package/dist/library/state.js +15 -31
  42. package/dist/library/state.js.map +1 -1
  43. package/dist/marketplace/plugin-loader.d.ts +30 -0
  44. package/dist/marketplace/plugin-loader.js +178 -0
  45. package/dist/marketplace/plugin-loader.js.map +1 -0
  46. package/dist/marketplace/reader.d.ts +36 -0
  47. package/dist/marketplace/reader.js +90 -0
  48. package/dist/marketplace/reader.js.map +1 -0
  49. package/dist/marketplace/schemas.d.ts +467 -0
  50. package/dist/marketplace/schemas.js +57 -0
  51. package/dist/marketplace/schemas.js.map +1 -0
  52. package/dist/marketplace/source-loader.d.ts +32 -0
  53. package/dist/marketplace/source-loader.js +45 -0
  54. package/dist/marketplace/source-loader.js.map +1 -0
  55. package/dist/rules/agents.d.ts +4 -4
  56. package/dist/rules/agents.js +10 -4
  57. package/dist/rules/agents.js.map +1 -1
  58. package/dist/rules/composer.d.ts +2 -2
  59. package/dist/rules/composer.js +5 -5
  60. package/dist/rules/composer.js.map +1 -1
  61. package/dist/rules/distribution.js +48 -112
  62. package/dist/rules/distribution.js.map +1 -1
  63. package/dist/rules/library.d.ts +1 -1
  64. package/dist/rules/library.js +4 -5
  65. package/dist/rules/library.js.map +1 -1
  66. package/dist/skills/distribution.js +6 -6
  67. package/dist/skills/distribution.js.map +1 -1
  68. package/dist/skills/library.d.ts +1 -2
  69. package/dist/skills/library.js +6 -7
  70. package/dist/skills/library.js.map +1 -1
  71. package/dist/subagents/distribution.d.ts +1 -1
  72. package/dist/subagents/distribution.js +319 -20
  73. package/dist/subagents/distribution.js.map +1 -1
  74. package/dist/subagents/importer.d.ts +1 -1
  75. package/dist/subagents/importer.js +61 -1
  76. package/dist/subagents/importer.js.map +1 -1
  77. package/dist/subagents/inventory.js +3 -3
  78. package/dist/subagents/inventory.js.map +1 -1
  79. package/dist/subagents/library.d.ts +2 -2
  80. package/dist/subagents/library.js +14 -20
  81. package/dist/subagents/library.js.map +1 -1
  82. package/dist/ui/hook-ui.d.ts +8 -0
  83. package/dist/ui/hook-ui.js +17 -0
  84. package/dist/ui/hook-ui.js.map +1 -0
  85. package/dist/ui/library-selector.d.ts +1 -1
  86. package/dist/ui/subagent-ui.js +3 -3
  87. package/dist/ui/subagent-ui.js.map +1 -1
  88. package/dist/util/cli.d.ts +20 -0
  89. package/dist/util/cli.js +107 -14
  90. package/dist/util/cli.js.map +1 -1
  91. package/package.json +3 -2
  92. package/dist/config/agent-config.d.ts +0 -35
  93. package/dist/config/agent-config.js +0 -88
  94. package/dist/config/agent-config.js.map +0 -1
  95. package/dist/library/subscriptions.d.ts +0 -42
  96. package/dist/library/subscriptions.js +0 -116
  97. package/dist/library/subscriptions.js.map +0 -1
@@ -0,0 +1,542 @@
1
+ /**
2
+ * Zod schemas for hook library entries.
3
+ *
4
+ * Hooks can be stored as:
5
+ * - **Bundles**: a directory containing `hook.json` + script files
6
+ * - **Single files**: a standalone `.json` file (no scripts to sync)
7
+ *
8
+ * In bundle mode, commands in hook.json can reference `${HOOK_DIR}` which
9
+ * gets replaced at distribution time with the absolute path to the
10
+ * distributed hook directory.
11
+ */
12
+ import { z } from 'zod';
13
+ declare const hookHandlerSchema: z.ZodObject<{
14
+ type: z.ZodEnum<["command", "http", "prompt", "agent"]>;
15
+ command: z.ZodOptional<z.ZodString>;
16
+ url: z.ZodOptional<z.ZodString>;
17
+ prompt: z.ZodOptional<z.ZodString>;
18
+ model: z.ZodOptional<z.ZodString>;
19
+ timeout: z.ZodOptional<z.ZodNumber>;
20
+ statusMessage: z.ZodOptional<z.ZodString>;
21
+ async: z.ZodOptional<z.ZodBoolean>;
22
+ once: z.ZodOptional<z.ZodBoolean>;
23
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
24
+ allowedEnvVars: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
25
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
26
+ type: z.ZodEnum<["command", "http", "prompt", "agent"]>;
27
+ command: z.ZodOptional<z.ZodString>;
28
+ url: z.ZodOptional<z.ZodString>;
29
+ prompt: z.ZodOptional<z.ZodString>;
30
+ model: z.ZodOptional<z.ZodString>;
31
+ timeout: z.ZodOptional<z.ZodNumber>;
32
+ statusMessage: z.ZodOptional<z.ZodString>;
33
+ async: z.ZodOptional<z.ZodBoolean>;
34
+ once: z.ZodOptional<z.ZodBoolean>;
35
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
36
+ allowedEnvVars: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
37
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
38
+ type: z.ZodEnum<["command", "http", "prompt", "agent"]>;
39
+ command: z.ZodOptional<z.ZodString>;
40
+ url: z.ZodOptional<z.ZodString>;
41
+ prompt: z.ZodOptional<z.ZodString>;
42
+ model: z.ZodOptional<z.ZodString>;
43
+ timeout: z.ZodOptional<z.ZodNumber>;
44
+ statusMessage: z.ZodOptional<z.ZodString>;
45
+ async: z.ZodOptional<z.ZodBoolean>;
46
+ once: z.ZodOptional<z.ZodBoolean>;
47
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
48
+ allowedEnvVars: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
49
+ }, z.ZodTypeAny, "passthrough">>;
50
+ declare const matcherGroupSchema: z.ZodObject<{
51
+ matcher: z.ZodOptional<z.ZodString>;
52
+ hooks: z.ZodArray<z.ZodObject<{
53
+ type: z.ZodEnum<["command", "http", "prompt", "agent"]>;
54
+ command: z.ZodOptional<z.ZodString>;
55
+ url: z.ZodOptional<z.ZodString>;
56
+ prompt: z.ZodOptional<z.ZodString>;
57
+ model: z.ZodOptional<z.ZodString>;
58
+ timeout: z.ZodOptional<z.ZodNumber>;
59
+ statusMessage: z.ZodOptional<z.ZodString>;
60
+ async: z.ZodOptional<z.ZodBoolean>;
61
+ once: z.ZodOptional<z.ZodBoolean>;
62
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
63
+ allowedEnvVars: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
64
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
65
+ type: z.ZodEnum<["command", "http", "prompt", "agent"]>;
66
+ command: z.ZodOptional<z.ZodString>;
67
+ url: z.ZodOptional<z.ZodString>;
68
+ prompt: z.ZodOptional<z.ZodString>;
69
+ model: z.ZodOptional<z.ZodString>;
70
+ timeout: z.ZodOptional<z.ZodNumber>;
71
+ statusMessage: z.ZodOptional<z.ZodString>;
72
+ async: z.ZodOptional<z.ZodBoolean>;
73
+ once: z.ZodOptional<z.ZodBoolean>;
74
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
75
+ allowedEnvVars: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
76
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
77
+ type: z.ZodEnum<["command", "http", "prompt", "agent"]>;
78
+ command: z.ZodOptional<z.ZodString>;
79
+ url: z.ZodOptional<z.ZodString>;
80
+ prompt: z.ZodOptional<z.ZodString>;
81
+ model: z.ZodOptional<z.ZodString>;
82
+ timeout: z.ZodOptional<z.ZodNumber>;
83
+ statusMessage: z.ZodOptional<z.ZodString>;
84
+ async: z.ZodOptional<z.ZodBoolean>;
85
+ once: z.ZodOptional<z.ZodBoolean>;
86
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
87
+ allowedEnvVars: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
88
+ }, z.ZodTypeAny, "passthrough">>, "many">;
89
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
90
+ matcher: z.ZodOptional<z.ZodString>;
91
+ hooks: z.ZodArray<z.ZodObject<{
92
+ type: z.ZodEnum<["command", "http", "prompt", "agent"]>;
93
+ command: z.ZodOptional<z.ZodString>;
94
+ url: z.ZodOptional<z.ZodString>;
95
+ prompt: z.ZodOptional<z.ZodString>;
96
+ model: z.ZodOptional<z.ZodString>;
97
+ timeout: z.ZodOptional<z.ZodNumber>;
98
+ statusMessage: z.ZodOptional<z.ZodString>;
99
+ async: z.ZodOptional<z.ZodBoolean>;
100
+ once: z.ZodOptional<z.ZodBoolean>;
101
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
102
+ allowedEnvVars: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
103
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
104
+ type: z.ZodEnum<["command", "http", "prompt", "agent"]>;
105
+ command: z.ZodOptional<z.ZodString>;
106
+ url: z.ZodOptional<z.ZodString>;
107
+ prompt: z.ZodOptional<z.ZodString>;
108
+ model: z.ZodOptional<z.ZodString>;
109
+ timeout: z.ZodOptional<z.ZodNumber>;
110
+ statusMessage: z.ZodOptional<z.ZodString>;
111
+ async: z.ZodOptional<z.ZodBoolean>;
112
+ once: z.ZodOptional<z.ZodBoolean>;
113
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
114
+ allowedEnvVars: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
115
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
116
+ type: z.ZodEnum<["command", "http", "prompt", "agent"]>;
117
+ command: z.ZodOptional<z.ZodString>;
118
+ url: z.ZodOptional<z.ZodString>;
119
+ prompt: z.ZodOptional<z.ZodString>;
120
+ model: z.ZodOptional<z.ZodString>;
121
+ timeout: z.ZodOptional<z.ZodNumber>;
122
+ statusMessage: z.ZodOptional<z.ZodString>;
123
+ async: z.ZodOptional<z.ZodBoolean>;
124
+ once: z.ZodOptional<z.ZodBoolean>;
125
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
126
+ allowedEnvVars: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
127
+ }, z.ZodTypeAny, "passthrough">>, "many">;
128
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
129
+ matcher: z.ZodOptional<z.ZodString>;
130
+ hooks: z.ZodArray<z.ZodObject<{
131
+ type: z.ZodEnum<["command", "http", "prompt", "agent"]>;
132
+ command: z.ZodOptional<z.ZodString>;
133
+ url: z.ZodOptional<z.ZodString>;
134
+ prompt: z.ZodOptional<z.ZodString>;
135
+ model: z.ZodOptional<z.ZodString>;
136
+ timeout: z.ZodOptional<z.ZodNumber>;
137
+ statusMessage: z.ZodOptional<z.ZodString>;
138
+ async: z.ZodOptional<z.ZodBoolean>;
139
+ once: z.ZodOptional<z.ZodBoolean>;
140
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
141
+ allowedEnvVars: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
142
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
143
+ type: z.ZodEnum<["command", "http", "prompt", "agent"]>;
144
+ command: z.ZodOptional<z.ZodString>;
145
+ url: z.ZodOptional<z.ZodString>;
146
+ prompt: z.ZodOptional<z.ZodString>;
147
+ model: z.ZodOptional<z.ZodString>;
148
+ timeout: z.ZodOptional<z.ZodNumber>;
149
+ statusMessage: z.ZodOptional<z.ZodString>;
150
+ async: z.ZodOptional<z.ZodBoolean>;
151
+ once: z.ZodOptional<z.ZodBoolean>;
152
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
153
+ allowedEnvVars: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
154
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
155
+ type: z.ZodEnum<["command", "http", "prompt", "agent"]>;
156
+ command: z.ZodOptional<z.ZodString>;
157
+ url: z.ZodOptional<z.ZodString>;
158
+ prompt: z.ZodOptional<z.ZodString>;
159
+ model: z.ZodOptional<z.ZodString>;
160
+ timeout: z.ZodOptional<z.ZodNumber>;
161
+ statusMessage: z.ZodOptional<z.ZodString>;
162
+ async: z.ZodOptional<z.ZodBoolean>;
163
+ once: z.ZodOptional<z.ZodBoolean>;
164
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
165
+ allowedEnvVars: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
166
+ }, z.ZodTypeAny, "passthrough">>, "many">;
167
+ }, z.ZodTypeAny, "passthrough">>;
168
+ /**
169
+ * Schema for a hook library JSON file (both bundle hook.json and standalone .json).
170
+ * Top-level `name` and `description` are ASB metadata;
171
+ * `hooks` holds the Claude Code-native event map.
172
+ */
173
+ export declare const hookFileSchema: z.ZodObject<{
174
+ name: z.ZodOptional<z.ZodString>;
175
+ description: z.ZodOptional<z.ZodString>;
176
+ hooks: z.ZodRecord<z.ZodString, z.ZodArray<z.ZodObject<{
177
+ matcher: z.ZodOptional<z.ZodString>;
178
+ hooks: z.ZodArray<z.ZodObject<{
179
+ type: z.ZodEnum<["command", "http", "prompt", "agent"]>;
180
+ command: z.ZodOptional<z.ZodString>;
181
+ url: z.ZodOptional<z.ZodString>;
182
+ prompt: z.ZodOptional<z.ZodString>;
183
+ model: z.ZodOptional<z.ZodString>;
184
+ timeout: z.ZodOptional<z.ZodNumber>;
185
+ statusMessage: z.ZodOptional<z.ZodString>;
186
+ async: z.ZodOptional<z.ZodBoolean>;
187
+ once: z.ZodOptional<z.ZodBoolean>;
188
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
189
+ allowedEnvVars: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
190
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
191
+ type: z.ZodEnum<["command", "http", "prompt", "agent"]>;
192
+ command: z.ZodOptional<z.ZodString>;
193
+ url: z.ZodOptional<z.ZodString>;
194
+ prompt: z.ZodOptional<z.ZodString>;
195
+ model: z.ZodOptional<z.ZodString>;
196
+ timeout: z.ZodOptional<z.ZodNumber>;
197
+ statusMessage: z.ZodOptional<z.ZodString>;
198
+ async: z.ZodOptional<z.ZodBoolean>;
199
+ once: z.ZodOptional<z.ZodBoolean>;
200
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
201
+ allowedEnvVars: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
202
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
203
+ type: z.ZodEnum<["command", "http", "prompt", "agent"]>;
204
+ command: z.ZodOptional<z.ZodString>;
205
+ url: z.ZodOptional<z.ZodString>;
206
+ prompt: z.ZodOptional<z.ZodString>;
207
+ model: z.ZodOptional<z.ZodString>;
208
+ timeout: z.ZodOptional<z.ZodNumber>;
209
+ statusMessage: z.ZodOptional<z.ZodString>;
210
+ async: z.ZodOptional<z.ZodBoolean>;
211
+ once: z.ZodOptional<z.ZodBoolean>;
212
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
213
+ allowedEnvVars: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
214
+ }, z.ZodTypeAny, "passthrough">>, "many">;
215
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
216
+ matcher: z.ZodOptional<z.ZodString>;
217
+ hooks: z.ZodArray<z.ZodObject<{
218
+ type: z.ZodEnum<["command", "http", "prompt", "agent"]>;
219
+ command: z.ZodOptional<z.ZodString>;
220
+ url: z.ZodOptional<z.ZodString>;
221
+ prompt: z.ZodOptional<z.ZodString>;
222
+ model: z.ZodOptional<z.ZodString>;
223
+ timeout: z.ZodOptional<z.ZodNumber>;
224
+ statusMessage: z.ZodOptional<z.ZodString>;
225
+ async: z.ZodOptional<z.ZodBoolean>;
226
+ once: z.ZodOptional<z.ZodBoolean>;
227
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
228
+ allowedEnvVars: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
229
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
230
+ type: z.ZodEnum<["command", "http", "prompt", "agent"]>;
231
+ command: z.ZodOptional<z.ZodString>;
232
+ url: z.ZodOptional<z.ZodString>;
233
+ prompt: z.ZodOptional<z.ZodString>;
234
+ model: z.ZodOptional<z.ZodString>;
235
+ timeout: z.ZodOptional<z.ZodNumber>;
236
+ statusMessage: z.ZodOptional<z.ZodString>;
237
+ async: z.ZodOptional<z.ZodBoolean>;
238
+ once: z.ZodOptional<z.ZodBoolean>;
239
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
240
+ allowedEnvVars: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
241
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
242
+ type: z.ZodEnum<["command", "http", "prompt", "agent"]>;
243
+ command: z.ZodOptional<z.ZodString>;
244
+ url: z.ZodOptional<z.ZodString>;
245
+ prompt: z.ZodOptional<z.ZodString>;
246
+ model: z.ZodOptional<z.ZodString>;
247
+ timeout: z.ZodOptional<z.ZodNumber>;
248
+ statusMessage: z.ZodOptional<z.ZodString>;
249
+ async: z.ZodOptional<z.ZodBoolean>;
250
+ once: z.ZodOptional<z.ZodBoolean>;
251
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
252
+ allowedEnvVars: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
253
+ }, z.ZodTypeAny, "passthrough">>, "many">;
254
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
255
+ matcher: z.ZodOptional<z.ZodString>;
256
+ hooks: z.ZodArray<z.ZodObject<{
257
+ type: z.ZodEnum<["command", "http", "prompt", "agent"]>;
258
+ command: z.ZodOptional<z.ZodString>;
259
+ url: z.ZodOptional<z.ZodString>;
260
+ prompt: z.ZodOptional<z.ZodString>;
261
+ model: z.ZodOptional<z.ZodString>;
262
+ timeout: z.ZodOptional<z.ZodNumber>;
263
+ statusMessage: z.ZodOptional<z.ZodString>;
264
+ async: z.ZodOptional<z.ZodBoolean>;
265
+ once: z.ZodOptional<z.ZodBoolean>;
266
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
267
+ allowedEnvVars: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
268
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
269
+ type: z.ZodEnum<["command", "http", "prompt", "agent"]>;
270
+ command: z.ZodOptional<z.ZodString>;
271
+ url: z.ZodOptional<z.ZodString>;
272
+ prompt: z.ZodOptional<z.ZodString>;
273
+ model: z.ZodOptional<z.ZodString>;
274
+ timeout: z.ZodOptional<z.ZodNumber>;
275
+ statusMessage: z.ZodOptional<z.ZodString>;
276
+ async: z.ZodOptional<z.ZodBoolean>;
277
+ once: z.ZodOptional<z.ZodBoolean>;
278
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
279
+ allowedEnvVars: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
280
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
281
+ type: z.ZodEnum<["command", "http", "prompt", "agent"]>;
282
+ command: z.ZodOptional<z.ZodString>;
283
+ url: z.ZodOptional<z.ZodString>;
284
+ prompt: z.ZodOptional<z.ZodString>;
285
+ model: z.ZodOptional<z.ZodString>;
286
+ timeout: z.ZodOptional<z.ZodNumber>;
287
+ statusMessage: z.ZodOptional<z.ZodString>;
288
+ async: z.ZodOptional<z.ZodBoolean>;
289
+ once: z.ZodOptional<z.ZodBoolean>;
290
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
291
+ allowedEnvVars: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
292
+ }, z.ZodTypeAny, "passthrough">>, "many">;
293
+ }, z.ZodTypeAny, "passthrough">>, "many">>;
294
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
295
+ name: z.ZodOptional<z.ZodString>;
296
+ description: z.ZodOptional<z.ZodString>;
297
+ hooks: z.ZodRecord<z.ZodString, z.ZodArray<z.ZodObject<{
298
+ matcher: z.ZodOptional<z.ZodString>;
299
+ hooks: z.ZodArray<z.ZodObject<{
300
+ type: z.ZodEnum<["command", "http", "prompt", "agent"]>;
301
+ command: z.ZodOptional<z.ZodString>;
302
+ url: z.ZodOptional<z.ZodString>;
303
+ prompt: z.ZodOptional<z.ZodString>;
304
+ model: z.ZodOptional<z.ZodString>;
305
+ timeout: z.ZodOptional<z.ZodNumber>;
306
+ statusMessage: z.ZodOptional<z.ZodString>;
307
+ async: z.ZodOptional<z.ZodBoolean>;
308
+ once: z.ZodOptional<z.ZodBoolean>;
309
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
310
+ allowedEnvVars: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
311
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
312
+ type: z.ZodEnum<["command", "http", "prompt", "agent"]>;
313
+ command: z.ZodOptional<z.ZodString>;
314
+ url: z.ZodOptional<z.ZodString>;
315
+ prompt: z.ZodOptional<z.ZodString>;
316
+ model: z.ZodOptional<z.ZodString>;
317
+ timeout: z.ZodOptional<z.ZodNumber>;
318
+ statusMessage: z.ZodOptional<z.ZodString>;
319
+ async: z.ZodOptional<z.ZodBoolean>;
320
+ once: z.ZodOptional<z.ZodBoolean>;
321
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
322
+ allowedEnvVars: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
323
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
324
+ type: z.ZodEnum<["command", "http", "prompt", "agent"]>;
325
+ command: z.ZodOptional<z.ZodString>;
326
+ url: z.ZodOptional<z.ZodString>;
327
+ prompt: z.ZodOptional<z.ZodString>;
328
+ model: z.ZodOptional<z.ZodString>;
329
+ timeout: z.ZodOptional<z.ZodNumber>;
330
+ statusMessage: z.ZodOptional<z.ZodString>;
331
+ async: z.ZodOptional<z.ZodBoolean>;
332
+ once: z.ZodOptional<z.ZodBoolean>;
333
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
334
+ allowedEnvVars: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
335
+ }, z.ZodTypeAny, "passthrough">>, "many">;
336
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
337
+ matcher: z.ZodOptional<z.ZodString>;
338
+ hooks: z.ZodArray<z.ZodObject<{
339
+ type: z.ZodEnum<["command", "http", "prompt", "agent"]>;
340
+ command: z.ZodOptional<z.ZodString>;
341
+ url: z.ZodOptional<z.ZodString>;
342
+ prompt: z.ZodOptional<z.ZodString>;
343
+ model: z.ZodOptional<z.ZodString>;
344
+ timeout: z.ZodOptional<z.ZodNumber>;
345
+ statusMessage: z.ZodOptional<z.ZodString>;
346
+ async: z.ZodOptional<z.ZodBoolean>;
347
+ once: z.ZodOptional<z.ZodBoolean>;
348
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
349
+ allowedEnvVars: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
350
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
351
+ type: z.ZodEnum<["command", "http", "prompt", "agent"]>;
352
+ command: z.ZodOptional<z.ZodString>;
353
+ url: z.ZodOptional<z.ZodString>;
354
+ prompt: z.ZodOptional<z.ZodString>;
355
+ model: z.ZodOptional<z.ZodString>;
356
+ timeout: z.ZodOptional<z.ZodNumber>;
357
+ statusMessage: z.ZodOptional<z.ZodString>;
358
+ async: z.ZodOptional<z.ZodBoolean>;
359
+ once: z.ZodOptional<z.ZodBoolean>;
360
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
361
+ allowedEnvVars: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
362
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
363
+ type: z.ZodEnum<["command", "http", "prompt", "agent"]>;
364
+ command: z.ZodOptional<z.ZodString>;
365
+ url: z.ZodOptional<z.ZodString>;
366
+ prompt: z.ZodOptional<z.ZodString>;
367
+ model: z.ZodOptional<z.ZodString>;
368
+ timeout: z.ZodOptional<z.ZodNumber>;
369
+ statusMessage: z.ZodOptional<z.ZodString>;
370
+ async: z.ZodOptional<z.ZodBoolean>;
371
+ once: z.ZodOptional<z.ZodBoolean>;
372
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
373
+ allowedEnvVars: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
374
+ }, z.ZodTypeAny, "passthrough">>, "many">;
375
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
376
+ matcher: z.ZodOptional<z.ZodString>;
377
+ hooks: z.ZodArray<z.ZodObject<{
378
+ type: z.ZodEnum<["command", "http", "prompt", "agent"]>;
379
+ command: z.ZodOptional<z.ZodString>;
380
+ url: z.ZodOptional<z.ZodString>;
381
+ prompt: z.ZodOptional<z.ZodString>;
382
+ model: z.ZodOptional<z.ZodString>;
383
+ timeout: z.ZodOptional<z.ZodNumber>;
384
+ statusMessage: z.ZodOptional<z.ZodString>;
385
+ async: z.ZodOptional<z.ZodBoolean>;
386
+ once: z.ZodOptional<z.ZodBoolean>;
387
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
388
+ allowedEnvVars: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
389
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
390
+ type: z.ZodEnum<["command", "http", "prompt", "agent"]>;
391
+ command: z.ZodOptional<z.ZodString>;
392
+ url: z.ZodOptional<z.ZodString>;
393
+ prompt: z.ZodOptional<z.ZodString>;
394
+ model: z.ZodOptional<z.ZodString>;
395
+ timeout: z.ZodOptional<z.ZodNumber>;
396
+ statusMessage: z.ZodOptional<z.ZodString>;
397
+ async: z.ZodOptional<z.ZodBoolean>;
398
+ once: z.ZodOptional<z.ZodBoolean>;
399
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
400
+ allowedEnvVars: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
401
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
402
+ type: z.ZodEnum<["command", "http", "prompt", "agent"]>;
403
+ command: z.ZodOptional<z.ZodString>;
404
+ url: z.ZodOptional<z.ZodString>;
405
+ prompt: z.ZodOptional<z.ZodString>;
406
+ model: z.ZodOptional<z.ZodString>;
407
+ timeout: z.ZodOptional<z.ZodNumber>;
408
+ statusMessage: z.ZodOptional<z.ZodString>;
409
+ async: z.ZodOptional<z.ZodBoolean>;
410
+ once: z.ZodOptional<z.ZodBoolean>;
411
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
412
+ allowedEnvVars: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
413
+ }, z.ZodTypeAny, "passthrough">>, "many">;
414
+ }, z.ZodTypeAny, "passthrough">>, "many">>;
415
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
416
+ name: z.ZodOptional<z.ZodString>;
417
+ description: z.ZodOptional<z.ZodString>;
418
+ hooks: z.ZodRecord<z.ZodString, z.ZodArray<z.ZodObject<{
419
+ matcher: z.ZodOptional<z.ZodString>;
420
+ hooks: z.ZodArray<z.ZodObject<{
421
+ type: z.ZodEnum<["command", "http", "prompt", "agent"]>;
422
+ command: z.ZodOptional<z.ZodString>;
423
+ url: z.ZodOptional<z.ZodString>;
424
+ prompt: z.ZodOptional<z.ZodString>;
425
+ model: z.ZodOptional<z.ZodString>;
426
+ timeout: z.ZodOptional<z.ZodNumber>;
427
+ statusMessage: z.ZodOptional<z.ZodString>;
428
+ async: z.ZodOptional<z.ZodBoolean>;
429
+ once: z.ZodOptional<z.ZodBoolean>;
430
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
431
+ allowedEnvVars: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
432
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
433
+ type: z.ZodEnum<["command", "http", "prompt", "agent"]>;
434
+ command: z.ZodOptional<z.ZodString>;
435
+ url: z.ZodOptional<z.ZodString>;
436
+ prompt: z.ZodOptional<z.ZodString>;
437
+ model: z.ZodOptional<z.ZodString>;
438
+ timeout: z.ZodOptional<z.ZodNumber>;
439
+ statusMessage: z.ZodOptional<z.ZodString>;
440
+ async: z.ZodOptional<z.ZodBoolean>;
441
+ once: z.ZodOptional<z.ZodBoolean>;
442
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
443
+ allowedEnvVars: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
444
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
445
+ type: z.ZodEnum<["command", "http", "prompt", "agent"]>;
446
+ command: z.ZodOptional<z.ZodString>;
447
+ url: z.ZodOptional<z.ZodString>;
448
+ prompt: z.ZodOptional<z.ZodString>;
449
+ model: z.ZodOptional<z.ZodString>;
450
+ timeout: z.ZodOptional<z.ZodNumber>;
451
+ statusMessage: z.ZodOptional<z.ZodString>;
452
+ async: z.ZodOptional<z.ZodBoolean>;
453
+ once: z.ZodOptional<z.ZodBoolean>;
454
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
455
+ allowedEnvVars: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
456
+ }, z.ZodTypeAny, "passthrough">>, "many">;
457
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
458
+ matcher: z.ZodOptional<z.ZodString>;
459
+ hooks: z.ZodArray<z.ZodObject<{
460
+ type: z.ZodEnum<["command", "http", "prompt", "agent"]>;
461
+ command: z.ZodOptional<z.ZodString>;
462
+ url: z.ZodOptional<z.ZodString>;
463
+ prompt: z.ZodOptional<z.ZodString>;
464
+ model: z.ZodOptional<z.ZodString>;
465
+ timeout: z.ZodOptional<z.ZodNumber>;
466
+ statusMessage: z.ZodOptional<z.ZodString>;
467
+ async: z.ZodOptional<z.ZodBoolean>;
468
+ once: z.ZodOptional<z.ZodBoolean>;
469
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
470
+ allowedEnvVars: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
471
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
472
+ type: z.ZodEnum<["command", "http", "prompt", "agent"]>;
473
+ command: z.ZodOptional<z.ZodString>;
474
+ url: z.ZodOptional<z.ZodString>;
475
+ prompt: z.ZodOptional<z.ZodString>;
476
+ model: z.ZodOptional<z.ZodString>;
477
+ timeout: z.ZodOptional<z.ZodNumber>;
478
+ statusMessage: z.ZodOptional<z.ZodString>;
479
+ async: z.ZodOptional<z.ZodBoolean>;
480
+ once: z.ZodOptional<z.ZodBoolean>;
481
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
482
+ allowedEnvVars: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
483
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
484
+ type: z.ZodEnum<["command", "http", "prompt", "agent"]>;
485
+ command: z.ZodOptional<z.ZodString>;
486
+ url: z.ZodOptional<z.ZodString>;
487
+ prompt: z.ZodOptional<z.ZodString>;
488
+ model: z.ZodOptional<z.ZodString>;
489
+ timeout: z.ZodOptional<z.ZodNumber>;
490
+ statusMessage: z.ZodOptional<z.ZodString>;
491
+ async: z.ZodOptional<z.ZodBoolean>;
492
+ once: z.ZodOptional<z.ZodBoolean>;
493
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
494
+ allowedEnvVars: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
495
+ }, z.ZodTypeAny, "passthrough">>, "many">;
496
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
497
+ matcher: z.ZodOptional<z.ZodString>;
498
+ hooks: z.ZodArray<z.ZodObject<{
499
+ type: z.ZodEnum<["command", "http", "prompt", "agent"]>;
500
+ command: z.ZodOptional<z.ZodString>;
501
+ url: z.ZodOptional<z.ZodString>;
502
+ prompt: z.ZodOptional<z.ZodString>;
503
+ model: z.ZodOptional<z.ZodString>;
504
+ timeout: z.ZodOptional<z.ZodNumber>;
505
+ statusMessage: z.ZodOptional<z.ZodString>;
506
+ async: z.ZodOptional<z.ZodBoolean>;
507
+ once: z.ZodOptional<z.ZodBoolean>;
508
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
509
+ allowedEnvVars: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
510
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
511
+ type: z.ZodEnum<["command", "http", "prompt", "agent"]>;
512
+ command: z.ZodOptional<z.ZodString>;
513
+ url: z.ZodOptional<z.ZodString>;
514
+ prompt: z.ZodOptional<z.ZodString>;
515
+ model: z.ZodOptional<z.ZodString>;
516
+ timeout: z.ZodOptional<z.ZodNumber>;
517
+ statusMessage: z.ZodOptional<z.ZodString>;
518
+ async: z.ZodOptional<z.ZodBoolean>;
519
+ once: z.ZodOptional<z.ZodBoolean>;
520
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
521
+ allowedEnvVars: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
522
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
523
+ type: z.ZodEnum<["command", "http", "prompt", "agent"]>;
524
+ command: z.ZodOptional<z.ZodString>;
525
+ url: z.ZodOptional<z.ZodString>;
526
+ prompt: z.ZodOptional<z.ZodString>;
527
+ model: z.ZodOptional<z.ZodString>;
528
+ timeout: z.ZodOptional<z.ZodNumber>;
529
+ statusMessage: z.ZodOptional<z.ZodString>;
530
+ async: z.ZodOptional<z.ZodBoolean>;
531
+ once: z.ZodOptional<z.ZodBoolean>;
532
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
533
+ allowedEnvVars: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
534
+ }, z.ZodTypeAny, "passthrough">>, "many">;
535
+ }, z.ZodTypeAny, "passthrough">>, "many">>;
536
+ }, z.ZodTypeAny, "passthrough">>;
537
+ export type HookHandler = z.infer<typeof hookHandlerSchema>;
538
+ export type MatcherGroup = z.infer<typeof matcherGroupSchema>;
539
+ export type HookFile = z.infer<typeof hookFileSchema>;
540
+ /** Placeholder in hook commands that gets replaced with the distributed bundle path */
541
+ export declare const HOOK_DIR_PLACEHOLDER = "${HOOK_DIR}";
542
+ export {};
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Zod schemas for hook library entries.
3
+ *
4
+ * Hooks can be stored as:
5
+ * - **Bundles**: a directory containing `hook.json` + script files
6
+ * - **Single files**: a standalone `.json` file (no scripts to sync)
7
+ *
8
+ * In bundle mode, commands in hook.json can reference `${HOOK_DIR}` which
9
+ * gets replaced at distribution time with the absolute path to the
10
+ * distributed hook directory.
11
+ */
12
+ import { z } from 'zod';
13
+ const hookHandlerSchema = z
14
+ .object({
15
+ type: z.enum(['command', 'http', 'prompt', 'agent']),
16
+ command: z.string().optional(),
17
+ url: z.string().optional(),
18
+ prompt: z.string().optional(),
19
+ model: z.string().optional(),
20
+ timeout: z.number().optional(),
21
+ statusMessage: z.string().optional(),
22
+ async: z.boolean().optional(),
23
+ once: z.boolean().optional(),
24
+ headers: z.record(z.string()).optional(),
25
+ allowedEnvVars: z.array(z.string()).optional(),
26
+ })
27
+ .passthrough();
28
+ const matcherGroupSchema = z
29
+ .object({
30
+ matcher: z.string().optional(),
31
+ hooks: z.array(hookHandlerSchema).min(1),
32
+ })
33
+ .passthrough();
34
+ /**
35
+ * Schema for a hook library JSON file (both bundle hook.json and standalone .json).
36
+ * Top-level `name` and `description` are ASB metadata;
37
+ * `hooks` holds the Claude Code-native event map.
38
+ */
39
+ export const hookFileSchema = z
40
+ .object({
41
+ name: z.string().optional(),
42
+ description: z.string().optional(),
43
+ hooks: z.record(z.string(), z.array(matcherGroupSchema)),
44
+ })
45
+ .passthrough();
46
+ /** Placeholder in hook commands that gets replaced with the distributed bundle path */
47
+ // biome-ignore lint/suspicious/noTemplateCurlyInString: intentional literal placeholder
48
+ export const HOOK_DIR_PLACEHOLDER = '${HOOK_DIR}';
49
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/hooks/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,iBAAiB,GAAG,CAAC;KACxB,MAAM,CAAC;IACN,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IACpD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC7B,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC5B,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACxC,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CAC/C,CAAC;KACD,WAAW,EAAE,CAAC;AAEjB,MAAM,kBAAkB,GAAG,CAAC;KACzB,MAAM,CAAC;IACN,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;CACzC,CAAC;KACD,WAAW,EAAE,CAAC;AAEjB;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC;KAC5B,MAAM,CAAC;IACN,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;CACzD,CAAC;KACD,WAAW,EAAE,CAAC;AAMjB,uFAAuF;AACvF,wFAAwF;AACxF,MAAM,CAAC,MAAM,oBAAoB,GAAG,aAAa,CAAC"}