@moxxy/config 0.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/LICENSE +21 -0
  2. package/dist/config-writer.d.ts +30 -0
  3. package/dist/config-writer.d.ts.map +1 -0
  4. package/dist/config-writer.js +57 -0
  5. package/dist/config-writer.js.map +1 -0
  6. package/dist/define.d.ts +17 -0
  7. package/dist/define.d.ts.map +1 -0
  8. package/dist/define.js +18 -0
  9. package/dist/define.js.map +1 -0
  10. package/dist/index.d.ts +9 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +11 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/loader.d.ts +28 -0
  15. package/dist/loader.d.ts.map +1 -0
  16. package/dist/loader.js +210 -0
  17. package/dist/loader.js.map +1 -0
  18. package/dist/merge.d.ts +9 -0
  19. package/dist/merge.d.ts.map +1 -0
  20. package/dist/merge.js +45 -0
  21. package/dist/merge.js.map +1 -0
  22. package/dist/plugin-settings-schema.d.ts +24 -0
  23. package/dist/plugin-settings-schema.d.ts.map +1 -0
  24. package/dist/plugin-settings-schema.js +17 -0
  25. package/dist/plugin-settings-schema.js.map +1 -0
  26. package/dist/plugin.d.ts +21 -0
  27. package/dist/plugin.d.ts.map +1 -0
  28. package/dist/plugin.js +329 -0
  29. package/dist/plugin.js.map +1 -0
  30. package/dist/plugins-tree-schema.d.ts +444 -0
  31. package/dist/plugins-tree-schema.d.ts.map +1 -0
  32. package/dist/plugins-tree-schema.js +93 -0
  33. package/dist/plugins-tree-schema.js.map +1 -0
  34. package/dist/schema.d.ts +1200 -0
  35. package/dist/schema.d.ts.map +1 -0
  36. package/dist/schema.js +198 -0
  37. package/dist/schema.js.map +1 -0
  38. package/dist/user-config.d.ts +77 -0
  39. package/dist/user-config.d.ts.map +1 -0
  40. package/dist/user-config.js +265 -0
  41. package/dist/user-config.js.map +1 -0
  42. package/package.json +56 -0
  43. package/src/config-writer.test.ts +52 -0
  44. package/src/config-writer.ts +88 -0
  45. package/src/define.ts +19 -0
  46. package/src/index.ts +64 -0
  47. package/src/loader.test.ts +122 -0
  48. package/src/loader.ts +232 -0
  49. package/src/loader.yaml.test.ts +149 -0
  50. package/src/merge.test.ts +78 -0
  51. package/src/merge.ts +44 -0
  52. package/src/plugin-settings-schema.ts +18 -0
  53. package/src/plugin.test.ts +310 -0
  54. package/src/plugin.ts +360 -0
  55. package/src/plugins-tree-schema.test.ts +25 -0
  56. package/src/plugins-tree-schema.ts +103 -0
  57. package/src/schema.ts +218 -0
  58. package/src/security-config.test.ts +30 -0
  59. package/src/user-config.test.ts +113 -0
  60. package/src/user-config.ts +359 -0
@@ -0,0 +1,1200 @@
1
+ import { z } from 'zod';
2
+ import { pluginSettingsSchema } from './plugin-settings-schema.js';
3
+ export declare const watcherModeSchema: z.ZodEnum<["auto", "manual", "off"]>;
4
+ export declare const permissionsConfigSchema: z.ZodObject<{
5
+ policyPath: z.ZodOptional<z.ZodString>;
6
+ allow: z.ZodOptional<z.ZodArray<z.ZodObject<{
7
+ name: z.ZodString;
8
+ inputMatches: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
9
+ reason: z.ZodOptional<z.ZodString>;
10
+ }, "strip", z.ZodTypeAny, {
11
+ name: string;
12
+ inputMatches?: Record<string, string> | undefined;
13
+ reason?: string | undefined;
14
+ }, {
15
+ name: string;
16
+ inputMatches?: Record<string, string> | undefined;
17
+ reason?: string | undefined;
18
+ }>, "many">>;
19
+ deny: z.ZodOptional<z.ZodArray<z.ZodObject<{
20
+ name: z.ZodString;
21
+ inputMatches: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
22
+ reason: z.ZodOptional<z.ZodString>;
23
+ }, "strip", z.ZodTypeAny, {
24
+ name: string;
25
+ inputMatches?: Record<string, string> | undefined;
26
+ reason?: string | undefined;
27
+ }, {
28
+ name: string;
29
+ inputMatches?: Record<string, string> | undefined;
30
+ reason?: string | undefined;
31
+ }>, "many">>;
32
+ }, "strip", z.ZodTypeAny, {
33
+ policyPath?: string | undefined;
34
+ allow?: {
35
+ name: string;
36
+ inputMatches?: Record<string, string> | undefined;
37
+ reason?: string | undefined;
38
+ }[] | undefined;
39
+ deny?: {
40
+ name: string;
41
+ inputMatches?: Record<string, string> | undefined;
42
+ reason?: string | undefined;
43
+ }[] | undefined;
44
+ }, {
45
+ policyPath?: string | undefined;
46
+ allow?: {
47
+ name: string;
48
+ inputMatches?: Record<string, string> | undefined;
49
+ reason?: string | undefined;
50
+ }[] | undefined;
51
+ deny?: {
52
+ name: string;
53
+ inputMatches?: Record<string, string> | undefined;
54
+ reason?: string | undefined;
55
+ }[] | undefined;
56
+ }>;
57
+ export declare const securityConfigSchema: z.ZodObject<{
58
+ /**
59
+ * Master toggle. When omitted or false (the default), `@moxxy/plugin-security`
60
+ * is a no-op even if registered — every tool runs exactly as it does
61
+ * without the plugin. Per-tool `isolation: { ... }` declarations
62
+ * remain as documentation but are not enforced. Optional so a partial
63
+ * `security:` block (e.g. only `isolator`) validates and config_set can
64
+ * write one field at a time; consumers default it to false.
65
+ */
66
+ enabled: z.ZodOptional<z.ZodBoolean>;
67
+ /**
68
+ * Per-tool isolator overrides keyed by tool name. e.g.
69
+ * `{ bash: 'subprocess', memory_save: 'none' }`. Falls back to the
70
+ * default isolator above when a tool isn't listed.
71
+ */
72
+ perTool: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
73
+ /**
74
+ * Per-plugin isolator overrides keyed by plugin name. Applies to
75
+ * every tool the plugin contributes unless overridden in `perTool`.
76
+ */
77
+ perPlugin: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
78
+ /**
79
+ * When true, tools without a declared `isolation` field are denied
80
+ * outright (instead of falling through to the default isolator).
81
+ * Useful for hardening once every in-use tool has been audited.
82
+ */
83
+ requireDeclaration: z.ZodOptional<z.ZodBoolean>;
84
+ /**
85
+ * The requireDeclaration ratchet for THIRD-PARTY plugins only — packages
86
+ * outside the trusted `@moxxy/` scope. Applies when a tool has no
87
+ * `isolation` declaration and the global `requireDeclaration` above did
88
+ * not already deny it:
89
+ * - 'off' — third-party tools are treated like first-party ones.
90
+ * - 'warn' — grace mode (the default while `security.enabled`): the
91
+ * call runs, but a structured warning is logged once per
92
+ * tool per process.
93
+ * - 'enforce' — the call is denied with a reason naming this flag.
94
+ * Tools with no resolvable owning plugin (e.g. runtime-attached MCP
95
+ * tools) are exempt — the npm-scope test is meaningless for them.
96
+ * Consumed by `@moxxy/plugin-security`
97
+ * (`SecurityPluginConfig.thirdPartyRequireDeclaration`).
98
+ */
99
+ thirdPartyRequireDeclaration: z.ZodOptional<z.ZodEnum<["off", "warn", "enforce"]>>;
100
+ /**
101
+ * Tighten the in-process input cap-check from best-effort to fail-closed.
102
+ * By default the fs/net checks only inspect string values under a recognized
103
+ * key name (`file`, `path`, `url`, …), so a path/URL carried by an
104
+ * unrecognized field (`config`, `manifest`, `webhook`) is not checked. With
105
+ * `strict: true`, any string value that is unambiguously an absolute path or a
106
+ * bare http(s) URL is treated as in-scope-required regardless of key name, so
107
+ * an unrecognized carrier fails closed. Consumed by `@moxxy/plugin-security`
108
+ * (`SecurityPluginConfig.strict`); without this field the loader's schema would
109
+ * silently strip a user's `security.strict: true` and the hardening would be
110
+ * lost. Defaults to false at the consumer.
111
+ */
112
+ strict: z.ZodOptional<z.ZodBoolean>;
113
+ }, "strip", z.ZodTypeAny, {
114
+ enabled?: boolean | undefined;
115
+ strict?: boolean | undefined;
116
+ perTool?: Record<string, string> | undefined;
117
+ perPlugin?: Record<string, string> | undefined;
118
+ requireDeclaration?: boolean | undefined;
119
+ thirdPartyRequireDeclaration?: "off" | "warn" | "enforce" | undefined;
120
+ }, {
121
+ enabled?: boolean | undefined;
122
+ strict?: boolean | undefined;
123
+ perTool?: Record<string, string> | undefined;
124
+ perPlugin?: Record<string, string> | undefined;
125
+ requireDeclaration?: boolean | undefined;
126
+ thirdPartyRequireDeclaration?: "off" | "warn" | "enforce" | undefined;
127
+ }>;
128
+ export declare const embeddingsConfigSchema: z.ZodObject<{
129
+ /**
130
+ * 'tfidf' (default, zero deps) | 'openai' (text-embedding-3-*)
131
+ * | 'transformers' (local, @huggingface/transformers) | 'none' (disable).
132
+ * Optional so a partial `embeddings:` block (e.g. only `model`) validates and
133
+ * config_set can write one field at a time; consumers default it to 'tfidf'.
134
+ */
135
+ provider: z.ZodOptional<z.ZodEnum<["tfidf", "openai", "transformers", "none"]>>;
136
+ model: z.ZodOptional<z.ZodString>;
137
+ dimensions: z.ZodOptional<z.ZodNumber>;
138
+ apiKey: z.ZodOptional<z.ZodString>;
139
+ batchSize: z.ZodOptional<z.ZodNumber>;
140
+ cacheDir: z.ZodOptional<z.ZodString>;
141
+ /** Persist computed embeddings to ~/.moxxy/memory/.embeddings.json. */
142
+ persistIndex: z.ZodOptional<z.ZodBoolean>;
143
+ }, "strip", z.ZodTypeAny, {
144
+ model?: string | undefined;
145
+ provider?: "tfidf" | "openai" | "transformers" | "none" | undefined;
146
+ dimensions?: number | undefined;
147
+ apiKey?: string | undefined;
148
+ batchSize?: number | undefined;
149
+ cacheDir?: string | undefined;
150
+ persistIndex?: boolean | undefined;
151
+ }, {
152
+ model?: string | undefined;
153
+ provider?: "tfidf" | "openai" | "transformers" | "none" | undefined;
154
+ dimensions?: number | undefined;
155
+ apiKey?: string | undefined;
156
+ batchSize?: number | undefined;
157
+ cacheDir?: string | undefined;
158
+ persistIndex?: boolean | undefined;
159
+ }>;
160
+ /**
161
+ * Turn-boundary elision settings (context-on-demand). Off-by-floor safety:
162
+ * `keepRecentTurns` never drops below 2 and elision is skipped while the
163
+ * context is under `minContextRatioToElide` full.
164
+ */
165
+ export declare const elisionConfigSchema: z.ZodObject<{
166
+ enabled: z.ZodOptional<z.ZodBoolean>;
167
+ keepRecentTurns: z.ZodOptional<z.ZodNumber>;
168
+ minContextRatioToElide: z.ZodOptional<z.ZodNumber>;
169
+ /** Also collapse old user/assistant text turns (not just bulky tool results). */
170
+ elideConversational: z.ZodOptional<z.ZodBoolean>;
171
+ /** Auto-disable conversational elision after this many `recall({seq})` calls. */
172
+ conversationalRecallThreshold: z.ZodOptional<z.ZodNumber>;
173
+ maxRecallBytes: z.ZodOptional<z.ZodNumber>;
174
+ neverElideTools: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
175
+ }, "strip", z.ZodTypeAny, {
176
+ enabled?: boolean | undefined;
177
+ keepRecentTurns?: number | undefined;
178
+ minContextRatioToElide?: number | undefined;
179
+ elideConversational?: boolean | undefined;
180
+ conversationalRecallThreshold?: number | undefined;
181
+ maxRecallBytes?: number | undefined;
182
+ neverElideTools?: string[] | undefined;
183
+ }, {
184
+ enabled?: boolean | undefined;
185
+ keepRecentTurns?: number | undefined;
186
+ minContextRatioToElide?: number | undefined;
187
+ elideConversational?: boolean | undefined;
188
+ conversationalRecallThreshold?: number | undefined;
189
+ maxRecallBytes?: number | undefined;
190
+ neverElideTools?: string[] | undefined;
191
+ }>;
192
+ /** Context-window / token-efficiency settings. */
193
+ export declare const contextConfigSchema: z.ZodObject<{
194
+ /** Master switch for prompt caching. Default true (lossless). */
195
+ caching: z.ZodOptional<z.ZodBoolean>;
196
+ elision: z.ZodOptional<z.ZodObject<{
197
+ enabled: z.ZodOptional<z.ZodBoolean>;
198
+ keepRecentTurns: z.ZodOptional<z.ZodNumber>;
199
+ minContextRatioToElide: z.ZodOptional<z.ZodNumber>;
200
+ /** Also collapse old user/assistant text turns (not just bulky tool results). */
201
+ elideConversational: z.ZodOptional<z.ZodBoolean>;
202
+ /** Auto-disable conversational elision after this many `recall({seq})` calls. */
203
+ conversationalRecallThreshold: z.ZodOptional<z.ZodNumber>;
204
+ maxRecallBytes: z.ZodOptional<z.ZodNumber>;
205
+ neverElideTools: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
206
+ }, "strip", z.ZodTypeAny, {
207
+ enabled?: boolean | undefined;
208
+ keepRecentTurns?: number | undefined;
209
+ minContextRatioToElide?: number | undefined;
210
+ elideConversational?: boolean | undefined;
211
+ conversationalRecallThreshold?: number | undefined;
212
+ maxRecallBytes?: number | undefined;
213
+ neverElideTools?: string[] | undefined;
214
+ }, {
215
+ enabled?: boolean | undefined;
216
+ keepRecentTurns?: number | undefined;
217
+ minContextRatioToElide?: number | undefined;
218
+ elideConversational?: boolean | undefined;
219
+ conversationalRecallThreshold?: number | undefined;
220
+ maxRecallBytes?: number | undefined;
221
+ neverElideTools?: string[] | undefined;
222
+ }>>;
223
+ /** Lazy tool loading: send only core + loaded tool schemas, index the rest. Default false. */
224
+ lazyTools: z.ZodOptional<z.ZodBoolean>;
225
+ /**
226
+ * Reasoning/thinking preview. `true` enables it at the model's default depth;
227
+ * `{ effort }` sets the depth. Honored only by providers/models that support
228
+ * reasoning (Anthropic adaptive thinking, OpenAI/Codex reasoning). Default off.
229
+ */
230
+ reasoning: z.ZodOptional<z.ZodUnion<[z.ZodBoolean, z.ZodObject<{
231
+ effort: z.ZodOptional<z.ZodEnum<["low", "medium", "high"]>>;
232
+ }, "strip", z.ZodTypeAny, {
233
+ effort?: "low" | "medium" | "high" | undefined;
234
+ }, {
235
+ effort?: "low" | "medium" | "high" | undefined;
236
+ }>]>>;
237
+ /**
238
+ * Stuck-loop guard tuning. The guard bails a turn early when the model keeps
239
+ * making the same tool call; `maxIterations` is the hard backstop. Raise the
240
+ * thresholds if legitimately-repeated work is being cut short, or set
241
+ * `enabled: false` to disable the guard and rely on `maxIterations` alone.
242
+ */
243
+ loopGuard: z.ZodOptional<z.ZodObject<{
244
+ enabled: z.ZodOptional<z.ZodBoolean>;
245
+ windowSize: z.ZodOptional<z.ZodNumber>;
246
+ repeatThreshold: z.ZodOptional<z.ZodNumber>;
247
+ nearWindowSize: z.ZodOptional<z.ZodNumber>;
248
+ nearThreshold: z.ZodOptional<z.ZodNumber>;
249
+ }, "strict", z.ZodTypeAny, {
250
+ enabled?: boolean | undefined;
251
+ windowSize?: number | undefined;
252
+ repeatThreshold?: number | undefined;
253
+ nearWindowSize?: number | undefined;
254
+ nearThreshold?: number | undefined;
255
+ }, {
256
+ enabled?: boolean | undefined;
257
+ windowSize?: number | undefined;
258
+ repeatThreshold?: number | undefined;
259
+ nearWindowSize?: number | undefined;
260
+ nearThreshold?: number | undefined;
261
+ }>>;
262
+ }, "strip", z.ZodTypeAny, {
263
+ caching?: boolean | undefined;
264
+ elision?: {
265
+ enabled?: boolean | undefined;
266
+ keepRecentTurns?: number | undefined;
267
+ minContextRatioToElide?: number | undefined;
268
+ elideConversational?: boolean | undefined;
269
+ conversationalRecallThreshold?: number | undefined;
270
+ maxRecallBytes?: number | undefined;
271
+ neverElideTools?: string[] | undefined;
272
+ } | undefined;
273
+ lazyTools?: boolean | undefined;
274
+ reasoning?: boolean | {
275
+ effort?: "low" | "medium" | "high" | undefined;
276
+ } | undefined;
277
+ loopGuard?: {
278
+ enabled?: boolean | undefined;
279
+ windowSize?: number | undefined;
280
+ repeatThreshold?: number | undefined;
281
+ nearWindowSize?: number | undefined;
282
+ nearThreshold?: number | undefined;
283
+ } | undefined;
284
+ }, {
285
+ caching?: boolean | undefined;
286
+ elision?: {
287
+ enabled?: boolean | undefined;
288
+ keepRecentTurns?: number | undefined;
289
+ minContextRatioToElide?: number | undefined;
290
+ elideConversational?: boolean | undefined;
291
+ conversationalRecallThreshold?: number | undefined;
292
+ maxRecallBytes?: number | undefined;
293
+ neverElideTools?: string[] | undefined;
294
+ } | undefined;
295
+ lazyTools?: boolean | undefined;
296
+ reasoning?: boolean | {
297
+ effort?: "low" | "medium" | "high" | undefined;
298
+ } | undefined;
299
+ loopGuard?: {
300
+ enabled?: boolean | undefined;
301
+ windowSize?: number | undefined;
302
+ repeatThreshold?: number | undefined;
303
+ nearWindowSize?: number | undefined;
304
+ nearThreshold?: number | undefined;
305
+ } | undefined;
306
+ }>;
307
+ export declare const moxxyConfigSchema: z.ZodObject<{
308
+ /**
309
+ * The unified plugins manifest — the single source of truth for what's
310
+ * installed/enabled (`plugins.packages`) and the active default per category
311
+ * (`plugins.<category>.default`). Replaces the legacy flat
312
+ * provider/mode/compactor/workflowExecutor keys, the old `plugins:` map, and
313
+ * `preferences.json`.
314
+ */
315
+ plugins: z.ZodOptional<z.ZodObject<{
316
+ packages: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
317
+ enabled: z.ZodOptional<z.ZodBoolean>;
318
+ options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
319
+ exclude: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
320
+ }, "strict", z.ZodTypeAny, {
321
+ enabled?: boolean | undefined;
322
+ options?: Record<string, unknown> | undefined;
323
+ exclude?: string[] | undefined;
324
+ }, {
325
+ enabled?: boolean | undefined;
326
+ options?: Record<string, unknown> | undefined;
327
+ exclude?: string[] | undefined;
328
+ }>>>;
329
+ provider: z.ZodOptional<z.ZodObject<{
330
+ default: z.ZodOptional<z.ZodString>;
331
+ fallbacks: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
332
+ items: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
333
+ model: z.ZodOptional<z.ZodString>;
334
+ config: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
335
+ enabled: z.ZodOptional<z.ZodBoolean>;
336
+ }, "strict", z.ZodTypeAny, {
337
+ enabled?: boolean | undefined;
338
+ model?: string | undefined;
339
+ config?: Record<string, unknown> | undefined;
340
+ }, {
341
+ enabled?: boolean | undefined;
342
+ model?: string | undefined;
343
+ config?: Record<string, unknown> | undefined;
344
+ }>>>;
345
+ }, "strict", z.ZodTypeAny, {
346
+ default?: string | undefined;
347
+ fallbacks?: string[] | undefined;
348
+ items?: Record<string, {
349
+ enabled?: boolean | undefined;
350
+ model?: string | undefined;
351
+ config?: Record<string, unknown> | undefined;
352
+ }> | undefined;
353
+ }, {
354
+ default?: string | undefined;
355
+ fallbacks?: string[] | undefined;
356
+ items?: Record<string, {
357
+ enabled?: boolean | undefined;
358
+ model?: string | undefined;
359
+ config?: Record<string, unknown> | undefined;
360
+ }> | undefined;
361
+ }>>;
362
+ mode: z.ZodOptional<z.ZodObject<{
363
+ default: z.ZodOptional<z.ZodString>;
364
+ items: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
365
+ }, "strict", z.ZodTypeAny, {
366
+ default?: string | undefined;
367
+ items?: Record<string, Record<string, unknown>> | undefined;
368
+ }, {
369
+ default?: string | undefined;
370
+ items?: Record<string, Record<string, unknown>> | undefined;
371
+ }>>;
372
+ compactor: z.ZodOptional<z.ZodObject<{
373
+ default: z.ZodOptional<z.ZodString>;
374
+ items: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
375
+ }, "strict", z.ZodTypeAny, {
376
+ default?: string | undefined;
377
+ items?: Record<string, Record<string, unknown>> | undefined;
378
+ }, {
379
+ default?: string | undefined;
380
+ items?: Record<string, Record<string, unknown>> | undefined;
381
+ }>>;
382
+ cacheStrategy: z.ZodOptional<z.ZodObject<{
383
+ default: z.ZodOptional<z.ZodString>;
384
+ items: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
385
+ }, "strict", z.ZodTypeAny, {
386
+ default?: string | undefined;
387
+ items?: Record<string, Record<string, unknown>> | undefined;
388
+ }, {
389
+ default?: string | undefined;
390
+ items?: Record<string, Record<string, unknown>> | undefined;
391
+ }>>;
392
+ workflowExecutor: z.ZodOptional<z.ZodObject<{
393
+ default: z.ZodOptional<z.ZodString>;
394
+ items: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
395
+ }, "strict", z.ZodTypeAny, {
396
+ default?: string | undefined;
397
+ items?: Record<string, Record<string, unknown>> | undefined;
398
+ }, {
399
+ default?: string | undefined;
400
+ items?: Record<string, Record<string, unknown>> | undefined;
401
+ }>>;
402
+ transcriber: z.ZodOptional<z.ZodObject<{
403
+ default: z.ZodOptional<z.ZodString>;
404
+ items: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
405
+ }, "strict", z.ZodTypeAny, {
406
+ default?: string | undefined;
407
+ items?: Record<string, Record<string, unknown>> | undefined;
408
+ }, {
409
+ default?: string | undefined;
410
+ items?: Record<string, Record<string, unknown>> | undefined;
411
+ }>>;
412
+ synthesizer: z.ZodOptional<z.ZodObject<{
413
+ default: z.ZodOptional<z.ZodString>;
414
+ items: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
415
+ }, "strict", z.ZodTypeAny, {
416
+ default?: string | undefined;
417
+ items?: Record<string, Record<string, unknown>> | undefined;
418
+ }, {
419
+ default?: string | undefined;
420
+ items?: Record<string, Record<string, unknown>> | undefined;
421
+ }>>;
422
+ embedder: z.ZodOptional<z.ZodObject<{
423
+ default: z.ZodOptional<z.ZodString>;
424
+ items: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
425
+ }, "strict", z.ZodTypeAny, {
426
+ default?: string | undefined;
427
+ items?: Record<string, Record<string, unknown>> | undefined;
428
+ }, {
429
+ default?: string | undefined;
430
+ items?: Record<string, Record<string, unknown>> | undefined;
431
+ }>>;
432
+ isolator: z.ZodOptional<z.ZodObject<{
433
+ default: z.ZodOptional<z.ZodString>;
434
+ items: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
435
+ }, "strict", z.ZodTypeAny, {
436
+ default?: string | undefined;
437
+ items?: Record<string, Record<string, unknown>> | undefined;
438
+ }, {
439
+ default?: string | undefined;
440
+ items?: Record<string, Record<string, unknown>> | undefined;
441
+ }>>;
442
+ viewRenderer: z.ZodOptional<z.ZodObject<{
443
+ default: z.ZodOptional<z.ZodString>;
444
+ items: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
445
+ }, "strict", z.ZodTypeAny, {
446
+ default?: string | undefined;
447
+ items?: Record<string, Record<string, unknown>> | undefined;
448
+ }, {
449
+ default?: string | undefined;
450
+ items?: Record<string, Record<string, unknown>> | undefined;
451
+ }>>;
452
+ tunnelProvider: z.ZodOptional<z.ZodObject<{
453
+ default: z.ZodOptional<z.ZodString>;
454
+ items: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
455
+ }, "strict", z.ZodTypeAny, {
456
+ default?: string | undefined;
457
+ items?: Record<string, Record<string, unknown>> | undefined;
458
+ }, {
459
+ default?: string | undefined;
460
+ items?: Record<string, Record<string, unknown>> | undefined;
461
+ }>>;
462
+ eventStore: z.ZodOptional<z.ZodObject<{
463
+ default: z.ZodOptional<z.ZodString>;
464
+ items: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
465
+ }, "strict", z.ZodTypeAny, {
466
+ default?: string | undefined;
467
+ items?: Record<string, Record<string, unknown>> | undefined;
468
+ }, {
469
+ default?: string | undefined;
470
+ items?: Record<string, Record<string, unknown>> | undefined;
471
+ }>>;
472
+ reflector: z.ZodOptional<z.ZodObject<{
473
+ default: z.ZodOptional<z.ZodString>;
474
+ items: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
475
+ }, "strict", z.ZodTypeAny, {
476
+ default?: string | undefined;
477
+ items?: Record<string, Record<string, unknown>> | undefined;
478
+ }, {
479
+ default?: string | undefined;
480
+ items?: Record<string, Record<string, unknown>> | undefined;
481
+ }>>;
482
+ channel: z.ZodOptional<z.ZodObject<{
483
+ default: z.ZodOptional<z.ZodString>;
484
+ items: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
485
+ }, "strict", z.ZodTypeAny, {
486
+ default?: string | undefined;
487
+ items?: Record<string, Record<string, unknown>> | undefined;
488
+ }, {
489
+ default?: string | undefined;
490
+ items?: Record<string, Record<string, unknown>> | undefined;
491
+ }>>;
492
+ }, "strict", z.ZodTypeAny, {
493
+ packages?: Record<string, {
494
+ enabled?: boolean | undefined;
495
+ options?: Record<string, unknown> | undefined;
496
+ exclude?: string[] | undefined;
497
+ }> | undefined;
498
+ provider?: {
499
+ default?: string | undefined;
500
+ fallbacks?: string[] | undefined;
501
+ items?: Record<string, {
502
+ enabled?: boolean | undefined;
503
+ model?: string | undefined;
504
+ config?: Record<string, unknown> | undefined;
505
+ }> | undefined;
506
+ } | undefined;
507
+ mode?: {
508
+ default?: string | undefined;
509
+ items?: Record<string, Record<string, unknown>> | undefined;
510
+ } | undefined;
511
+ compactor?: {
512
+ default?: string | undefined;
513
+ items?: Record<string, Record<string, unknown>> | undefined;
514
+ } | undefined;
515
+ cacheStrategy?: {
516
+ default?: string | undefined;
517
+ items?: Record<string, Record<string, unknown>> | undefined;
518
+ } | undefined;
519
+ workflowExecutor?: {
520
+ default?: string | undefined;
521
+ items?: Record<string, Record<string, unknown>> | undefined;
522
+ } | undefined;
523
+ transcriber?: {
524
+ default?: string | undefined;
525
+ items?: Record<string, Record<string, unknown>> | undefined;
526
+ } | undefined;
527
+ synthesizer?: {
528
+ default?: string | undefined;
529
+ items?: Record<string, Record<string, unknown>> | undefined;
530
+ } | undefined;
531
+ embedder?: {
532
+ default?: string | undefined;
533
+ items?: Record<string, Record<string, unknown>> | undefined;
534
+ } | undefined;
535
+ isolator?: {
536
+ default?: string | undefined;
537
+ items?: Record<string, Record<string, unknown>> | undefined;
538
+ } | undefined;
539
+ viewRenderer?: {
540
+ default?: string | undefined;
541
+ items?: Record<string, Record<string, unknown>> | undefined;
542
+ } | undefined;
543
+ tunnelProvider?: {
544
+ default?: string | undefined;
545
+ items?: Record<string, Record<string, unknown>> | undefined;
546
+ } | undefined;
547
+ eventStore?: {
548
+ default?: string | undefined;
549
+ items?: Record<string, Record<string, unknown>> | undefined;
550
+ } | undefined;
551
+ reflector?: {
552
+ default?: string | undefined;
553
+ items?: Record<string, Record<string, unknown>> | undefined;
554
+ } | undefined;
555
+ channel?: {
556
+ default?: string | undefined;
557
+ items?: Record<string, Record<string, unknown>> | undefined;
558
+ } | undefined;
559
+ }, {
560
+ packages?: Record<string, {
561
+ enabled?: boolean | undefined;
562
+ options?: Record<string, unknown> | undefined;
563
+ exclude?: string[] | undefined;
564
+ }> | undefined;
565
+ provider?: {
566
+ default?: string | undefined;
567
+ fallbacks?: string[] | undefined;
568
+ items?: Record<string, {
569
+ enabled?: boolean | undefined;
570
+ model?: string | undefined;
571
+ config?: Record<string, unknown> | undefined;
572
+ }> | undefined;
573
+ } | undefined;
574
+ mode?: {
575
+ default?: string | undefined;
576
+ items?: Record<string, Record<string, unknown>> | undefined;
577
+ } | undefined;
578
+ compactor?: {
579
+ default?: string | undefined;
580
+ items?: Record<string, Record<string, unknown>> | undefined;
581
+ } | undefined;
582
+ cacheStrategy?: {
583
+ default?: string | undefined;
584
+ items?: Record<string, Record<string, unknown>> | undefined;
585
+ } | undefined;
586
+ workflowExecutor?: {
587
+ default?: string | undefined;
588
+ items?: Record<string, Record<string, unknown>> | undefined;
589
+ } | undefined;
590
+ transcriber?: {
591
+ default?: string | undefined;
592
+ items?: Record<string, Record<string, unknown>> | undefined;
593
+ } | undefined;
594
+ synthesizer?: {
595
+ default?: string | undefined;
596
+ items?: Record<string, Record<string, unknown>> | undefined;
597
+ } | undefined;
598
+ embedder?: {
599
+ default?: string | undefined;
600
+ items?: Record<string, Record<string, unknown>> | undefined;
601
+ } | undefined;
602
+ isolator?: {
603
+ default?: string | undefined;
604
+ items?: Record<string, Record<string, unknown>> | undefined;
605
+ } | undefined;
606
+ viewRenderer?: {
607
+ default?: string | undefined;
608
+ items?: Record<string, Record<string, unknown>> | undefined;
609
+ } | undefined;
610
+ tunnelProvider?: {
611
+ default?: string | undefined;
612
+ items?: Record<string, Record<string, unknown>> | undefined;
613
+ } | undefined;
614
+ eventStore?: {
615
+ default?: string | undefined;
616
+ items?: Record<string, Record<string, unknown>> | undefined;
617
+ } | undefined;
618
+ reflector?: {
619
+ default?: string | undefined;
620
+ items?: Record<string, Record<string, unknown>> | undefined;
621
+ } | undefined;
622
+ channel?: {
623
+ default?: string | undefined;
624
+ items?: Record<string, Record<string, unknown>> | undefined;
625
+ } | undefined;
626
+ }>>;
627
+ context: z.ZodOptional<z.ZodObject<{
628
+ /** Master switch for prompt caching. Default true (lossless). */
629
+ caching: z.ZodOptional<z.ZodBoolean>;
630
+ elision: z.ZodOptional<z.ZodObject<{
631
+ enabled: z.ZodOptional<z.ZodBoolean>;
632
+ keepRecentTurns: z.ZodOptional<z.ZodNumber>;
633
+ minContextRatioToElide: z.ZodOptional<z.ZodNumber>;
634
+ /** Also collapse old user/assistant text turns (not just bulky tool results). */
635
+ elideConversational: z.ZodOptional<z.ZodBoolean>;
636
+ /** Auto-disable conversational elision after this many `recall({seq})` calls. */
637
+ conversationalRecallThreshold: z.ZodOptional<z.ZodNumber>;
638
+ maxRecallBytes: z.ZodOptional<z.ZodNumber>;
639
+ neverElideTools: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
640
+ }, "strip", z.ZodTypeAny, {
641
+ enabled?: boolean | undefined;
642
+ keepRecentTurns?: number | undefined;
643
+ minContextRatioToElide?: number | undefined;
644
+ elideConversational?: boolean | undefined;
645
+ conversationalRecallThreshold?: number | undefined;
646
+ maxRecallBytes?: number | undefined;
647
+ neverElideTools?: string[] | undefined;
648
+ }, {
649
+ enabled?: boolean | undefined;
650
+ keepRecentTurns?: number | undefined;
651
+ minContextRatioToElide?: number | undefined;
652
+ elideConversational?: boolean | undefined;
653
+ conversationalRecallThreshold?: number | undefined;
654
+ maxRecallBytes?: number | undefined;
655
+ neverElideTools?: string[] | undefined;
656
+ }>>;
657
+ /** Lazy tool loading: send only core + loaded tool schemas, index the rest. Default false. */
658
+ lazyTools: z.ZodOptional<z.ZodBoolean>;
659
+ /**
660
+ * Reasoning/thinking preview. `true` enables it at the model's default depth;
661
+ * `{ effort }` sets the depth. Honored only by providers/models that support
662
+ * reasoning (Anthropic adaptive thinking, OpenAI/Codex reasoning). Default off.
663
+ */
664
+ reasoning: z.ZodOptional<z.ZodUnion<[z.ZodBoolean, z.ZodObject<{
665
+ effort: z.ZodOptional<z.ZodEnum<["low", "medium", "high"]>>;
666
+ }, "strip", z.ZodTypeAny, {
667
+ effort?: "low" | "medium" | "high" | undefined;
668
+ }, {
669
+ effort?: "low" | "medium" | "high" | undefined;
670
+ }>]>>;
671
+ /**
672
+ * Stuck-loop guard tuning. The guard bails a turn early when the model keeps
673
+ * making the same tool call; `maxIterations` is the hard backstop. Raise the
674
+ * thresholds if legitimately-repeated work is being cut short, or set
675
+ * `enabled: false` to disable the guard and rely on `maxIterations` alone.
676
+ */
677
+ loopGuard: z.ZodOptional<z.ZodObject<{
678
+ enabled: z.ZodOptional<z.ZodBoolean>;
679
+ windowSize: z.ZodOptional<z.ZodNumber>;
680
+ repeatThreshold: z.ZodOptional<z.ZodNumber>;
681
+ nearWindowSize: z.ZodOptional<z.ZodNumber>;
682
+ nearThreshold: z.ZodOptional<z.ZodNumber>;
683
+ }, "strict", z.ZodTypeAny, {
684
+ enabled?: boolean | undefined;
685
+ windowSize?: number | undefined;
686
+ repeatThreshold?: number | undefined;
687
+ nearWindowSize?: number | undefined;
688
+ nearThreshold?: number | undefined;
689
+ }, {
690
+ enabled?: boolean | undefined;
691
+ windowSize?: number | undefined;
692
+ repeatThreshold?: number | undefined;
693
+ nearWindowSize?: number | undefined;
694
+ nearThreshold?: number | undefined;
695
+ }>>;
696
+ }, "strip", z.ZodTypeAny, {
697
+ caching?: boolean | undefined;
698
+ elision?: {
699
+ enabled?: boolean | undefined;
700
+ keepRecentTurns?: number | undefined;
701
+ minContextRatioToElide?: number | undefined;
702
+ elideConversational?: boolean | undefined;
703
+ conversationalRecallThreshold?: number | undefined;
704
+ maxRecallBytes?: number | undefined;
705
+ neverElideTools?: string[] | undefined;
706
+ } | undefined;
707
+ lazyTools?: boolean | undefined;
708
+ reasoning?: boolean | {
709
+ effort?: "low" | "medium" | "high" | undefined;
710
+ } | undefined;
711
+ loopGuard?: {
712
+ enabled?: boolean | undefined;
713
+ windowSize?: number | undefined;
714
+ repeatThreshold?: number | undefined;
715
+ nearWindowSize?: number | undefined;
716
+ nearThreshold?: number | undefined;
717
+ } | undefined;
718
+ }, {
719
+ caching?: boolean | undefined;
720
+ elision?: {
721
+ enabled?: boolean | undefined;
722
+ keepRecentTurns?: number | undefined;
723
+ minContextRatioToElide?: number | undefined;
724
+ elideConversational?: boolean | undefined;
725
+ conversationalRecallThreshold?: number | undefined;
726
+ maxRecallBytes?: number | undefined;
727
+ neverElideTools?: string[] | undefined;
728
+ } | undefined;
729
+ lazyTools?: boolean | undefined;
730
+ reasoning?: boolean | {
731
+ effort?: "low" | "medium" | "high" | undefined;
732
+ } | undefined;
733
+ loopGuard?: {
734
+ enabled?: boolean | undefined;
735
+ windowSize?: number | undefined;
736
+ repeatThreshold?: number | undefined;
737
+ nearWindowSize?: number | undefined;
738
+ nearThreshold?: number | undefined;
739
+ } | undefined;
740
+ }>>;
741
+ systemPrompt: z.ZodOptional<z.ZodString>;
742
+ maxIterations: z.ZodOptional<z.ZodNumber>;
743
+ hookTimeoutMs: z.ZodOptional<z.ZodNumber>;
744
+ watcher: z.ZodOptional<z.ZodEnum<["auto", "manual", "off"]>>;
745
+ skills: z.ZodOptional<z.ZodObject<{
746
+ projectDir: z.ZodOptional<z.ZodString>;
747
+ userDir: z.ZodOptional<z.ZodString>;
748
+ extraDirs: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
749
+ }, "strip", z.ZodTypeAny, {
750
+ projectDir?: string | undefined;
751
+ userDir?: string | undefined;
752
+ extraDirs?: string[] | undefined;
753
+ }, {
754
+ projectDir?: string | undefined;
755
+ userDir?: string | undefined;
756
+ extraDirs?: string[] | undefined;
757
+ }>>;
758
+ security: z.ZodOptional<z.ZodObject<{
759
+ /**
760
+ * Master toggle. When omitted or false (the default), `@moxxy/plugin-security`
761
+ * is a no-op even if registered — every tool runs exactly as it does
762
+ * without the plugin. Per-tool `isolation: { ... }` declarations
763
+ * remain as documentation but are not enforced. Optional so a partial
764
+ * `security:` block (e.g. only `isolator`) validates and config_set can
765
+ * write one field at a time; consumers default it to false.
766
+ */
767
+ enabled: z.ZodOptional<z.ZodBoolean>;
768
+ /**
769
+ * Per-tool isolator overrides keyed by tool name. e.g.
770
+ * `{ bash: 'subprocess', memory_save: 'none' }`. Falls back to the
771
+ * default isolator above when a tool isn't listed.
772
+ */
773
+ perTool: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
774
+ /**
775
+ * Per-plugin isolator overrides keyed by plugin name. Applies to
776
+ * every tool the plugin contributes unless overridden in `perTool`.
777
+ */
778
+ perPlugin: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
779
+ /**
780
+ * When true, tools without a declared `isolation` field are denied
781
+ * outright (instead of falling through to the default isolator).
782
+ * Useful for hardening once every in-use tool has been audited.
783
+ */
784
+ requireDeclaration: z.ZodOptional<z.ZodBoolean>;
785
+ /**
786
+ * The requireDeclaration ratchet for THIRD-PARTY plugins only — packages
787
+ * outside the trusted `@moxxy/` scope. Applies when a tool has no
788
+ * `isolation` declaration and the global `requireDeclaration` above did
789
+ * not already deny it:
790
+ * - 'off' — third-party tools are treated like first-party ones.
791
+ * - 'warn' — grace mode (the default while `security.enabled`): the
792
+ * call runs, but a structured warning is logged once per
793
+ * tool per process.
794
+ * - 'enforce' — the call is denied with a reason naming this flag.
795
+ * Tools with no resolvable owning plugin (e.g. runtime-attached MCP
796
+ * tools) are exempt — the npm-scope test is meaningless for them.
797
+ * Consumed by `@moxxy/plugin-security`
798
+ * (`SecurityPluginConfig.thirdPartyRequireDeclaration`).
799
+ */
800
+ thirdPartyRequireDeclaration: z.ZodOptional<z.ZodEnum<["off", "warn", "enforce"]>>;
801
+ /**
802
+ * Tighten the in-process input cap-check from best-effort to fail-closed.
803
+ * By default the fs/net checks only inspect string values under a recognized
804
+ * key name (`file`, `path`, `url`, …), so a path/URL carried by an
805
+ * unrecognized field (`config`, `manifest`, `webhook`) is not checked. With
806
+ * `strict: true`, any string value that is unambiguously an absolute path or a
807
+ * bare http(s) URL is treated as in-scope-required regardless of key name, so
808
+ * an unrecognized carrier fails closed. Consumed by `@moxxy/plugin-security`
809
+ * (`SecurityPluginConfig.strict`); without this field the loader's schema would
810
+ * silently strip a user's `security.strict: true` and the hardening would be
811
+ * lost. Defaults to false at the consumer.
812
+ */
813
+ strict: z.ZodOptional<z.ZodBoolean>;
814
+ }, "strip", z.ZodTypeAny, {
815
+ enabled?: boolean | undefined;
816
+ strict?: boolean | undefined;
817
+ perTool?: Record<string, string> | undefined;
818
+ perPlugin?: Record<string, string> | undefined;
819
+ requireDeclaration?: boolean | undefined;
820
+ thirdPartyRequireDeclaration?: "off" | "warn" | "enforce" | undefined;
821
+ }, {
822
+ enabled?: boolean | undefined;
823
+ strict?: boolean | undefined;
824
+ perTool?: Record<string, string> | undefined;
825
+ perPlugin?: Record<string, string> | undefined;
826
+ requireDeclaration?: boolean | undefined;
827
+ thirdPartyRequireDeclaration?: "off" | "warn" | "enforce" | undefined;
828
+ }>>;
829
+ channels: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
830
+ permissions: z.ZodOptional<z.ZodObject<{
831
+ policyPath: z.ZodOptional<z.ZodString>;
832
+ allow: z.ZodOptional<z.ZodArray<z.ZodObject<{
833
+ name: z.ZodString;
834
+ inputMatches: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
835
+ reason: z.ZodOptional<z.ZodString>;
836
+ }, "strip", z.ZodTypeAny, {
837
+ name: string;
838
+ inputMatches?: Record<string, string> | undefined;
839
+ reason?: string | undefined;
840
+ }, {
841
+ name: string;
842
+ inputMatches?: Record<string, string> | undefined;
843
+ reason?: string | undefined;
844
+ }>, "many">>;
845
+ deny: z.ZodOptional<z.ZodArray<z.ZodObject<{
846
+ name: z.ZodString;
847
+ inputMatches: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
848
+ reason: z.ZodOptional<z.ZodString>;
849
+ }, "strip", z.ZodTypeAny, {
850
+ name: string;
851
+ inputMatches?: Record<string, string> | undefined;
852
+ reason?: string | undefined;
853
+ }, {
854
+ name: string;
855
+ inputMatches?: Record<string, string> | undefined;
856
+ reason?: string | undefined;
857
+ }>, "many">>;
858
+ }, "strip", z.ZodTypeAny, {
859
+ policyPath?: string | undefined;
860
+ allow?: {
861
+ name: string;
862
+ inputMatches?: Record<string, string> | undefined;
863
+ reason?: string | undefined;
864
+ }[] | undefined;
865
+ deny?: {
866
+ name: string;
867
+ inputMatches?: Record<string, string> | undefined;
868
+ reason?: string | undefined;
869
+ }[] | undefined;
870
+ }, {
871
+ policyPath?: string | undefined;
872
+ allow?: {
873
+ name: string;
874
+ inputMatches?: Record<string, string> | undefined;
875
+ reason?: string | undefined;
876
+ }[] | undefined;
877
+ deny?: {
878
+ name: string;
879
+ inputMatches?: Record<string, string> | undefined;
880
+ reason?: string | undefined;
881
+ }[] | undefined;
882
+ }>>;
883
+ env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
884
+ /** TUI presentation preferences (read at TUI boot; edited via /settings). */
885
+ tui: z.ZodOptional<z.ZodObject<{
886
+ /** `mono` drops color like NO_COLOR; `default` is the standard palette. */
887
+ theme: z.ZodOptional<z.ZodEnum<["default", "mono"]>>;
888
+ /** Hide the footer key-hint row when false. */
889
+ hints: z.ZodOptional<z.ZodBoolean>;
890
+ /**
891
+ * Ctrl+<letter> overrides for the input-editor command hotkeys. Values
892
+ * are single letters; unknown/conflicting letters are ignored at boot.
893
+ */
894
+ keys: z.ZodOptional<z.ZodObject<{
895
+ forceSend: z.ZodOptional<z.ZodString>;
896
+ dropQueued: z.ZodOptional<z.ZodString>;
897
+ toggleTools: z.ZodOptional<z.ZodString>;
898
+ }, "strict", z.ZodTypeAny, {
899
+ forceSend?: string | undefined;
900
+ dropQueued?: string | undefined;
901
+ toggleTools?: string | undefined;
902
+ }, {
903
+ forceSend?: string | undefined;
904
+ dropQueued?: string | undefined;
905
+ toggleTools?: string | undefined;
906
+ }>>;
907
+ }, "strict", z.ZodTypeAny, {
908
+ keys?: {
909
+ forceSend?: string | undefined;
910
+ dropQueued?: string | undefined;
911
+ toggleTools?: string | undefined;
912
+ } | undefined;
913
+ theme?: "default" | "mono" | undefined;
914
+ hints?: boolean | undefined;
915
+ }, {
916
+ keys?: {
917
+ forceSend?: string | undefined;
918
+ dropQueued?: string | undefined;
919
+ toggleTools?: string | undefined;
920
+ } | undefined;
921
+ theme?: "default" | "mono" | undefined;
922
+ hints?: boolean | undefined;
923
+ }>>;
924
+ }, "strip", z.ZodTypeAny, {
925
+ plugins?: {
926
+ packages?: Record<string, {
927
+ enabled?: boolean | undefined;
928
+ options?: Record<string, unknown> | undefined;
929
+ exclude?: string[] | undefined;
930
+ }> | undefined;
931
+ provider?: {
932
+ default?: string | undefined;
933
+ fallbacks?: string[] | undefined;
934
+ items?: Record<string, {
935
+ enabled?: boolean | undefined;
936
+ model?: string | undefined;
937
+ config?: Record<string, unknown> | undefined;
938
+ }> | undefined;
939
+ } | undefined;
940
+ mode?: {
941
+ default?: string | undefined;
942
+ items?: Record<string, Record<string, unknown>> | undefined;
943
+ } | undefined;
944
+ compactor?: {
945
+ default?: string | undefined;
946
+ items?: Record<string, Record<string, unknown>> | undefined;
947
+ } | undefined;
948
+ cacheStrategy?: {
949
+ default?: string | undefined;
950
+ items?: Record<string, Record<string, unknown>> | undefined;
951
+ } | undefined;
952
+ workflowExecutor?: {
953
+ default?: string | undefined;
954
+ items?: Record<string, Record<string, unknown>> | undefined;
955
+ } | undefined;
956
+ transcriber?: {
957
+ default?: string | undefined;
958
+ items?: Record<string, Record<string, unknown>> | undefined;
959
+ } | undefined;
960
+ synthesizer?: {
961
+ default?: string | undefined;
962
+ items?: Record<string, Record<string, unknown>> | undefined;
963
+ } | undefined;
964
+ embedder?: {
965
+ default?: string | undefined;
966
+ items?: Record<string, Record<string, unknown>> | undefined;
967
+ } | undefined;
968
+ isolator?: {
969
+ default?: string | undefined;
970
+ items?: Record<string, Record<string, unknown>> | undefined;
971
+ } | undefined;
972
+ viewRenderer?: {
973
+ default?: string | undefined;
974
+ items?: Record<string, Record<string, unknown>> | undefined;
975
+ } | undefined;
976
+ tunnelProvider?: {
977
+ default?: string | undefined;
978
+ items?: Record<string, Record<string, unknown>> | undefined;
979
+ } | undefined;
980
+ eventStore?: {
981
+ default?: string | undefined;
982
+ items?: Record<string, Record<string, unknown>> | undefined;
983
+ } | undefined;
984
+ reflector?: {
985
+ default?: string | undefined;
986
+ items?: Record<string, Record<string, unknown>> | undefined;
987
+ } | undefined;
988
+ channel?: {
989
+ default?: string | undefined;
990
+ items?: Record<string, Record<string, unknown>> | undefined;
991
+ } | undefined;
992
+ } | undefined;
993
+ context?: {
994
+ caching?: boolean | undefined;
995
+ elision?: {
996
+ enabled?: boolean | undefined;
997
+ keepRecentTurns?: number | undefined;
998
+ minContextRatioToElide?: number | undefined;
999
+ elideConversational?: boolean | undefined;
1000
+ conversationalRecallThreshold?: number | undefined;
1001
+ maxRecallBytes?: number | undefined;
1002
+ neverElideTools?: string[] | undefined;
1003
+ } | undefined;
1004
+ lazyTools?: boolean | undefined;
1005
+ reasoning?: boolean | {
1006
+ effort?: "low" | "medium" | "high" | undefined;
1007
+ } | undefined;
1008
+ loopGuard?: {
1009
+ enabled?: boolean | undefined;
1010
+ windowSize?: number | undefined;
1011
+ repeatThreshold?: number | undefined;
1012
+ nearWindowSize?: number | undefined;
1013
+ nearThreshold?: number | undefined;
1014
+ } | undefined;
1015
+ } | undefined;
1016
+ systemPrompt?: string | undefined;
1017
+ maxIterations?: number | undefined;
1018
+ hookTimeoutMs?: number | undefined;
1019
+ watcher?: "auto" | "manual" | "off" | undefined;
1020
+ skills?: {
1021
+ projectDir?: string | undefined;
1022
+ userDir?: string | undefined;
1023
+ extraDirs?: string[] | undefined;
1024
+ } | undefined;
1025
+ security?: {
1026
+ enabled?: boolean | undefined;
1027
+ strict?: boolean | undefined;
1028
+ perTool?: Record<string, string> | undefined;
1029
+ perPlugin?: Record<string, string> | undefined;
1030
+ requireDeclaration?: boolean | undefined;
1031
+ thirdPartyRequireDeclaration?: "off" | "warn" | "enforce" | undefined;
1032
+ } | undefined;
1033
+ channels?: Record<string, Record<string, unknown>> | undefined;
1034
+ permissions?: {
1035
+ policyPath?: string | undefined;
1036
+ allow?: {
1037
+ name: string;
1038
+ inputMatches?: Record<string, string> | undefined;
1039
+ reason?: string | undefined;
1040
+ }[] | undefined;
1041
+ deny?: {
1042
+ name: string;
1043
+ inputMatches?: Record<string, string> | undefined;
1044
+ reason?: string | undefined;
1045
+ }[] | undefined;
1046
+ } | undefined;
1047
+ env?: Record<string, string> | undefined;
1048
+ tui?: {
1049
+ keys?: {
1050
+ forceSend?: string | undefined;
1051
+ dropQueued?: string | undefined;
1052
+ toggleTools?: string | undefined;
1053
+ } | undefined;
1054
+ theme?: "default" | "mono" | undefined;
1055
+ hints?: boolean | undefined;
1056
+ } | undefined;
1057
+ }, {
1058
+ plugins?: {
1059
+ packages?: Record<string, {
1060
+ enabled?: boolean | undefined;
1061
+ options?: Record<string, unknown> | undefined;
1062
+ exclude?: string[] | undefined;
1063
+ }> | undefined;
1064
+ provider?: {
1065
+ default?: string | undefined;
1066
+ fallbacks?: string[] | undefined;
1067
+ items?: Record<string, {
1068
+ enabled?: boolean | undefined;
1069
+ model?: string | undefined;
1070
+ config?: Record<string, unknown> | undefined;
1071
+ }> | undefined;
1072
+ } | undefined;
1073
+ mode?: {
1074
+ default?: string | undefined;
1075
+ items?: Record<string, Record<string, unknown>> | undefined;
1076
+ } | undefined;
1077
+ compactor?: {
1078
+ default?: string | undefined;
1079
+ items?: Record<string, Record<string, unknown>> | undefined;
1080
+ } | undefined;
1081
+ cacheStrategy?: {
1082
+ default?: string | undefined;
1083
+ items?: Record<string, Record<string, unknown>> | undefined;
1084
+ } | undefined;
1085
+ workflowExecutor?: {
1086
+ default?: string | undefined;
1087
+ items?: Record<string, Record<string, unknown>> | undefined;
1088
+ } | undefined;
1089
+ transcriber?: {
1090
+ default?: string | undefined;
1091
+ items?: Record<string, Record<string, unknown>> | undefined;
1092
+ } | undefined;
1093
+ synthesizer?: {
1094
+ default?: string | undefined;
1095
+ items?: Record<string, Record<string, unknown>> | undefined;
1096
+ } | undefined;
1097
+ embedder?: {
1098
+ default?: string | undefined;
1099
+ items?: Record<string, Record<string, unknown>> | undefined;
1100
+ } | undefined;
1101
+ isolator?: {
1102
+ default?: string | undefined;
1103
+ items?: Record<string, Record<string, unknown>> | undefined;
1104
+ } | undefined;
1105
+ viewRenderer?: {
1106
+ default?: string | undefined;
1107
+ items?: Record<string, Record<string, unknown>> | undefined;
1108
+ } | undefined;
1109
+ tunnelProvider?: {
1110
+ default?: string | undefined;
1111
+ items?: Record<string, Record<string, unknown>> | undefined;
1112
+ } | undefined;
1113
+ eventStore?: {
1114
+ default?: string | undefined;
1115
+ items?: Record<string, Record<string, unknown>> | undefined;
1116
+ } | undefined;
1117
+ reflector?: {
1118
+ default?: string | undefined;
1119
+ items?: Record<string, Record<string, unknown>> | undefined;
1120
+ } | undefined;
1121
+ channel?: {
1122
+ default?: string | undefined;
1123
+ items?: Record<string, Record<string, unknown>> | undefined;
1124
+ } | undefined;
1125
+ } | undefined;
1126
+ context?: {
1127
+ caching?: boolean | undefined;
1128
+ elision?: {
1129
+ enabled?: boolean | undefined;
1130
+ keepRecentTurns?: number | undefined;
1131
+ minContextRatioToElide?: number | undefined;
1132
+ elideConversational?: boolean | undefined;
1133
+ conversationalRecallThreshold?: number | undefined;
1134
+ maxRecallBytes?: number | undefined;
1135
+ neverElideTools?: string[] | undefined;
1136
+ } | undefined;
1137
+ lazyTools?: boolean | undefined;
1138
+ reasoning?: boolean | {
1139
+ effort?: "low" | "medium" | "high" | undefined;
1140
+ } | undefined;
1141
+ loopGuard?: {
1142
+ enabled?: boolean | undefined;
1143
+ windowSize?: number | undefined;
1144
+ repeatThreshold?: number | undefined;
1145
+ nearWindowSize?: number | undefined;
1146
+ nearThreshold?: number | undefined;
1147
+ } | undefined;
1148
+ } | undefined;
1149
+ systemPrompt?: string | undefined;
1150
+ maxIterations?: number | undefined;
1151
+ hookTimeoutMs?: number | undefined;
1152
+ watcher?: "auto" | "manual" | "off" | undefined;
1153
+ skills?: {
1154
+ projectDir?: string | undefined;
1155
+ userDir?: string | undefined;
1156
+ extraDirs?: string[] | undefined;
1157
+ } | undefined;
1158
+ security?: {
1159
+ enabled?: boolean | undefined;
1160
+ strict?: boolean | undefined;
1161
+ perTool?: Record<string, string> | undefined;
1162
+ perPlugin?: Record<string, string> | undefined;
1163
+ requireDeclaration?: boolean | undefined;
1164
+ thirdPartyRequireDeclaration?: "off" | "warn" | "enforce" | undefined;
1165
+ } | undefined;
1166
+ channels?: Record<string, Record<string, unknown>> | undefined;
1167
+ permissions?: {
1168
+ policyPath?: string | undefined;
1169
+ allow?: {
1170
+ name: string;
1171
+ inputMatches?: Record<string, string> | undefined;
1172
+ reason?: string | undefined;
1173
+ }[] | undefined;
1174
+ deny?: {
1175
+ name: string;
1176
+ inputMatches?: Record<string, string> | undefined;
1177
+ reason?: string | undefined;
1178
+ }[] | undefined;
1179
+ } | undefined;
1180
+ env?: Record<string, string> | undefined;
1181
+ tui?: {
1182
+ keys?: {
1183
+ forceSend?: string | undefined;
1184
+ dropQueued?: string | undefined;
1185
+ toggleTools?: string | undefined;
1186
+ } | undefined;
1187
+ theme?: "default" | "mono" | undefined;
1188
+ hints?: boolean | undefined;
1189
+ } | undefined;
1190
+ }>;
1191
+ export type MoxxyConfig = z.infer<typeof moxxyConfigSchema>;
1192
+ export type ContextConfig = z.infer<typeof contextConfigSchema>;
1193
+ export type ElisionConfig = z.infer<typeof elisionConfigSchema>;
1194
+ export type WatcherMode = z.infer<typeof watcherModeSchema>;
1195
+ export type PermissionsConfig = z.infer<typeof permissionsConfigSchema>;
1196
+ export type EmbeddingsConfig = z.infer<typeof embeddingsConfigSchema>;
1197
+ export type SecurityConfig = z.infer<typeof securityConfigSchema>;
1198
+ export { pluginSettingsSchema };
1199
+ export type { PluginSettings } from './plugin-settings-schema.js';
1200
+ //# sourceMappingURL=schema.d.ts.map