tickmarkr 2.6.0 → 2.6.2

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 (103) hide show
  1. package/README.md +14 -3
  2. package/dist/adapters/catalog-remote.js +89 -47
  3. package/dist/adapters/claude-code.js +9 -6
  4. package/dist/adapters/codex.js +7 -4
  5. package/dist/adapters/prompt.d.ts +3 -1
  6. package/dist/adapters/prompt.js +21 -3
  7. package/dist/adapters/registry.js +3 -3
  8. package/dist/adapters/types.d.ts +13 -4
  9. package/dist/adapters/types.js +16 -0
  10. package/dist/cli/commands/approve.d.ts +5 -1
  11. package/dist/cli/commands/approve.js +66 -23
  12. package/dist/cli/commands/compile.js +13 -3
  13. package/dist/cli/commands/doctor.d.ts +2 -0
  14. package/dist/cli/commands/doctor.js +11 -3
  15. package/dist/cli/commands/fleet.js +71 -8
  16. package/dist/cli/commands/plan.js +7 -3
  17. package/dist/cli/commands/report.js +18 -2
  18. package/dist/cli/commands/resume.js +4 -2
  19. package/dist/cli/commands/status.js +37 -22
  20. package/dist/cli/help.d.ts +4 -0
  21. package/dist/cli/help.js +11 -2
  22. package/dist/config/config.d.ts +20 -0
  23. package/dist/config/config.js +47 -8
  24. package/dist/config/fleet-overlay.d.ts +1 -0
  25. package/dist/config/fleet-overlay.js +56 -0
  26. package/dist/drivers/orca.d.ts +26 -1
  27. package/dist/drivers/orca.js +199 -61
  28. package/dist/eval/canary.d.ts +2 -1
  29. package/dist/eval/canary.js +2 -2
  30. package/dist/eval/dispatch.js +1 -0
  31. package/dist/gates/acceptance.d.ts +2 -1
  32. package/dist/gates/acceptance.js +7 -2
  33. package/dist/gates/baseline.d.ts +12 -1
  34. package/dist/gates/baseline.js +11 -4
  35. package/dist/gates/cache.d.ts +3 -1
  36. package/dist/gates/cache.js +10 -3
  37. package/dist/gates/llm.d.ts +5 -4
  38. package/dist/gates/llm.js +17 -14
  39. package/dist/gates/review.d.ts +8 -0
  40. package/dist/gates/review.js +47 -15
  41. package/dist/gates/run-gates.d.ts +6 -1
  42. package/dist/gates/run-gates.js +34 -17
  43. package/dist/gates/test-manifest.d.ts +14 -0
  44. package/dist/gates/test-manifest.js +33 -6
  45. package/dist/graph/graph.d.ts +6 -2
  46. package/dist/graph/graph.js +15 -4
  47. package/dist/graph/schema.d.ts +2 -0
  48. package/dist/graph/schema.js +2 -0
  49. package/dist/plan/scope.js +2 -2
  50. package/dist/route/preference.d.ts +20 -2
  51. package/dist/route/preference.js +48 -13
  52. package/dist/route/role-pick.d.ts +16 -0
  53. package/dist/route/role-pick.js +15 -0
  54. package/dist/route/router.d.ts +14 -0
  55. package/dist/route/router.js +39 -16
  56. package/dist/run/consult.d.ts +13 -1
  57. package/dist/run/consult.js +19 -14
  58. package/dist/run/daemon.d.ts +46 -2
  59. package/dist/run/daemon.js +964 -190
  60. package/dist/run/git.d.ts +44 -1
  61. package/dist/run/git.js +103 -5
  62. package/dist/run/host-health.d.ts +20 -0
  63. package/dist/run/host-health.js +64 -0
  64. package/dist/run/journal.d.ts +126 -3
  65. package/dist/run/journal.js +418 -36
  66. package/dist/run/merge.d.ts +3 -1
  67. package/dist/run/merge.js +3 -2
  68. package/dist/run/operator-state.d.ts +24 -2
  69. package/dist/run/operator-state.js +41 -5
  70. package/dist/run/operator-summary.d.ts +3 -0
  71. package/dist/run/operator-summary.js +3 -1
  72. package/dist/run/protocol.d.ts +31 -1
  73. package/dist/run/protocol.js +3 -1
  74. package/dist/run/stall.d.ts +38 -2
  75. package/dist/run/stall.js +276 -6
  76. package/dist/run/supervision.d.ts +7 -1
  77. package/dist/run/supervision.js +5 -2
  78. package/dist/tui/cockpit/board.d.ts +1 -1
  79. package/dist/tui/cockpit/board.js +30 -22
  80. package/dist/tui/cockpit/decision-actions.d.ts +8 -5
  81. package/dist/tui/cockpit/decision-actions.js +55 -32
  82. package/dist/tui/cockpit/derive.d.ts +2 -0
  83. package/dist/tui/cockpit/derive.js +17 -2
  84. package/dist/tui/cockpit/live-runtime.d.ts +10 -0
  85. package/dist/tui/cockpit/live-runtime.js +50 -3
  86. package/dist/tui/cockpit/live-store.d.ts +1 -0
  87. package/dist/tui/cockpit/live-store.js +31 -8
  88. package/dist/tui/cockpit/run-cockpit.d.ts +3 -0
  89. package/dist/tui/cockpit/run-cockpit.js +28 -2
  90. package/dist/tui/cockpit/run-view.d.ts +11 -7
  91. package/dist/tui/cockpit/run-view.js +69 -15
  92. package/dist/tui/cockpit/setup-cockpit.d.ts +4 -0
  93. package/dist/tui/cockpit/setup-cockpit.js +6 -3
  94. package/dist/tui/ink/fleet-app.d.ts +15 -3
  95. package/dist/tui/ink/fleet-app.js +91 -22
  96. package/package.json +2 -1
  97. package/schema/config.schema.json +818 -0
  98. package/skills/tickmarkr-loop/SKILL.md +8 -2
  99. package/skills/tickmarkr-overseer/SKILL.md +85 -6
  100. package/skills/tickmarkr-overseer/scripts/classify-vitest-log.sh +88 -0
  101. package/skills/tickmarkr-overseer/scripts/context-statusline.sh +81 -0
  102. package/skills/tickmarkr-overseer/scripts/grade-ci.sh +36 -34
  103. package/skills/tickmarkr-overseer/scripts/watch-journal.sh +6 -4
@@ -0,0 +1,818 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "type": "object",
4
+ "properties": {
5
+ "executionPolicy": {
6
+ "type": "object",
7
+ "properties": {
8
+ "boundedInfrastructure": {
9
+ "default": false,
10
+ "type": "boolean"
11
+ },
12
+ "repairSelection": {
13
+ "default": false,
14
+ "type": "boolean"
15
+ },
16
+ "taskExecutionLimitMs": {
17
+ "type": "integer",
18
+ "exclusiveMinimum": 0,
19
+ "maximum": 9007199254740991
20
+ }
21
+ },
22
+ "required": [
23
+ "taskExecutionLimitMs"
24
+ ],
25
+ "additionalProperties": false
26
+ },
27
+ "concurrency": {
28
+ "type": "integer",
29
+ "exclusiveMinimum": 0,
30
+ "maximum": 9007199254740991
31
+ },
32
+ "driver": {
33
+ "type": "string",
34
+ "enum": [
35
+ "auto",
36
+ "herdr",
37
+ "subprocess",
38
+ "orca"
39
+ ]
40
+ },
41
+ "integrationBranchPrefix": {
42
+ "type": "string",
43
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._/-]*$"
44
+ },
45
+ "taskTimeoutMinutes": {
46
+ "type": "number",
47
+ "exclusiveMinimum": 0
48
+ },
49
+ "contextWarnTokens": {
50
+ "type": "integer",
51
+ "exclusiveMinimum": 0,
52
+ "maximum": 9007199254740991
53
+ },
54
+ "setup": {
55
+ "type": "string"
56
+ },
57
+ "routing": {
58
+ "type": "object",
59
+ "properties": {
60
+ "mode": {
61
+ "type": "string",
62
+ "enum": [
63
+ "partner-led",
64
+ "risk-based",
65
+ "staff-led"
66
+ ]
67
+ },
68
+ "map": {
69
+ "type": "object",
70
+ "propertyNames": {
71
+ "type": "string"
72
+ },
73
+ "additionalProperties": {
74
+ "type": "object",
75
+ "properties": {
76
+ "pin": {
77
+ "type": "object",
78
+ "properties": {
79
+ "via": {
80
+ "type": "string"
81
+ },
82
+ "model": {
83
+ "type": "string"
84
+ }
85
+ },
86
+ "required": [
87
+ "via",
88
+ "model"
89
+ ]
90
+ },
91
+ "pool": {
92
+ "type": "object",
93
+ "properties": {
94
+ "mode": {
95
+ "type": "string",
96
+ "enum": [
97
+ "any",
98
+ "ordered"
99
+ ]
100
+ },
101
+ "channels": {
102
+ "minItems": 1,
103
+ "type": "array",
104
+ "items": {
105
+ "type": "string",
106
+ "pattern": "^[^:\\s]+:\\S.*$"
107
+ }
108
+ }
109
+ },
110
+ "required": [
111
+ "mode",
112
+ "channels"
113
+ ]
114
+ },
115
+ "tier": {
116
+ "type": "null"
117
+ },
118
+ "prefer": {
119
+ "type": "array",
120
+ "items": {
121
+ "type": "string"
122
+ }
123
+ },
124
+ "escalate": {
125
+ "type": "boolean"
126
+ }
127
+ }
128
+ }
129
+ },
130
+ "floors": {
131
+ "type": "object",
132
+ "propertyNames": {
133
+ "type": "string"
134
+ },
135
+ "additionalProperties": {
136
+ "type": "string",
137
+ "enum": [
138
+ "cheap",
139
+ "mid",
140
+ "frontier"
141
+ ]
142
+ }
143
+ },
144
+ "learned": {
145
+ "type": "string",
146
+ "enum": [
147
+ "on",
148
+ "off"
149
+ ]
150
+ },
151
+ "escalateTier": {
152
+ "default": "on",
153
+ "type": "string",
154
+ "enum": [
155
+ "on",
156
+ "off"
157
+ ]
158
+ },
159
+ "learnedTuning": {
160
+ "type": "object",
161
+ "properties": {
162
+ "halfLifeRuns": {
163
+ "type": "number",
164
+ "exclusiveMinimum": 0
165
+ },
166
+ "availWeight": {
167
+ "type": "number",
168
+ "minimum": 0
169
+ }
170
+ }
171
+ },
172
+ "explore": {
173
+ "type": "object",
174
+ "properties": {
175
+ "mode": {
176
+ "type": "string",
177
+ "enum": [
178
+ "on",
179
+ "off"
180
+ ]
181
+ },
182
+ "excludeShapes": {
183
+ "type": "array",
184
+ "items": {
185
+ "type": "string"
186
+ }
187
+ },
188
+ "excludeComplexityAtOrAbove": {
189
+ "anyOf": [
190
+ {
191
+ "type": "integer",
192
+ "minimum": 1,
193
+ "maximum": 10
194
+ },
195
+ {
196
+ "type": "null"
197
+ }
198
+ ]
199
+ },
200
+ "cap": {
201
+ "type": "integer",
202
+ "exclusiveMinimum": 0,
203
+ "maximum": 9007199254740991
204
+ }
205
+ }
206
+ },
207
+ "sla": {
208
+ "type": "object",
209
+ "propertyNames": {
210
+ "type": "string"
211
+ },
212
+ "additionalProperties": {
213
+ "type": "number",
214
+ "exclusiveMinimum": 0
215
+ }
216
+ },
217
+ "allowUnverifiedModels": {
218
+ "type": "boolean"
219
+ },
220
+ "allow": {
221
+ "type": "object",
222
+ "properties": {
223
+ "adapters": {
224
+ "type": "array",
225
+ "items": {
226
+ "type": "string"
227
+ }
228
+ },
229
+ "models": {
230
+ "type": "array",
231
+ "items": {
232
+ "type": "string"
233
+ }
234
+ }
235
+ }
236
+ },
237
+ "deny": {
238
+ "type": "object",
239
+ "properties": {
240
+ "adapters": {
241
+ "type": "array",
242
+ "items": {
243
+ "type": "string"
244
+ }
245
+ },
246
+ "models": {
247
+ "type": "array",
248
+ "items": {
249
+ "type": "string"
250
+ }
251
+ },
252
+ "workers": {
253
+ "type": "object",
254
+ "properties": {
255
+ "adapters": {
256
+ "type": "array",
257
+ "items": {
258
+ "type": "string"
259
+ }
260
+ },
261
+ "models": {
262
+ "type": "array",
263
+ "items": {
264
+ "type": "string"
265
+ }
266
+ }
267
+ }
268
+ }
269
+ }
270
+ }
271
+ },
272
+ "required": [
273
+ "map",
274
+ "floors",
275
+ "learned",
276
+ "allowUnverifiedModels"
277
+ ]
278
+ },
279
+ "tiers": {
280
+ "type": "object",
281
+ "properties": {
282
+ "claude-code": {
283
+ "type": "object",
284
+ "properties": {
285
+ "vendor": {
286
+ "anyOf": [
287
+ {
288
+ "type": "string",
289
+ "minLength": 1
290
+ },
291
+ {
292
+ "type": "null"
293
+ }
294
+ ]
295
+ },
296
+ "channel": {
297
+ "type": "string",
298
+ "enum": [
299
+ "sub",
300
+ "api"
301
+ ]
302
+ },
303
+ "models": {
304
+ "type": "object",
305
+ "propertyNames": {
306
+ "type": "string"
307
+ },
308
+ "additionalProperties": {
309
+ "type": "string",
310
+ "enum": [
311
+ "cheap",
312
+ "mid",
313
+ "frontier"
314
+ ]
315
+ }
316
+ },
317
+ "modelOverrides": {
318
+ "type": "object",
319
+ "propertyNames": {
320
+ "type": "string"
321
+ },
322
+ "additionalProperties": {
323
+ "type": "object",
324
+ "properties": {
325
+ "vendor": {
326
+ "type": "string",
327
+ "minLength": 1
328
+ },
329
+ "channel": {
330
+ "type": "string",
331
+ "enum": [
332
+ "sub",
333
+ "api"
334
+ ]
335
+ },
336
+ "effort": {
337
+ "type": "string",
338
+ "enum": [
339
+ "low",
340
+ "medium",
341
+ "high"
342
+ ]
343
+ }
344
+ }
345
+ }
346
+ },
347
+ "windows": {
348
+ "type": "object",
349
+ "propertyNames": {
350
+ "type": "string"
351
+ },
352
+ "additionalProperties": {
353
+ "type": "integer",
354
+ "exclusiveMinimum": 0,
355
+ "maximum": 9007199254740991
356
+ }
357
+ }
358
+ },
359
+ "required": [
360
+ "vendor",
361
+ "channel",
362
+ "models"
363
+ ]
364
+ },
365
+ "codex": {
366
+ "type": "object",
367
+ "properties": {
368
+ "vendor": {
369
+ "anyOf": [
370
+ {
371
+ "type": "string",
372
+ "minLength": 1
373
+ },
374
+ {
375
+ "type": "null"
376
+ }
377
+ ]
378
+ },
379
+ "channel": {
380
+ "type": "string",
381
+ "enum": [
382
+ "sub",
383
+ "api"
384
+ ]
385
+ },
386
+ "models": {
387
+ "type": "object",
388
+ "propertyNames": {
389
+ "type": "string"
390
+ },
391
+ "additionalProperties": {
392
+ "type": "string",
393
+ "enum": [
394
+ "cheap",
395
+ "mid",
396
+ "frontier"
397
+ ]
398
+ }
399
+ },
400
+ "modelOverrides": {
401
+ "type": "object",
402
+ "propertyNames": {
403
+ "type": "string"
404
+ },
405
+ "additionalProperties": {
406
+ "type": "object",
407
+ "properties": {
408
+ "vendor": {
409
+ "type": "string",
410
+ "minLength": 1
411
+ },
412
+ "channel": {
413
+ "type": "string",
414
+ "enum": [
415
+ "sub",
416
+ "api"
417
+ ]
418
+ },
419
+ "effort": {
420
+ "type": "string",
421
+ "enum": [
422
+ "low",
423
+ "medium",
424
+ "high"
425
+ ]
426
+ }
427
+ }
428
+ }
429
+ },
430
+ "windows": {
431
+ "type": "object",
432
+ "propertyNames": {
433
+ "type": "string"
434
+ },
435
+ "additionalProperties": {
436
+ "type": "integer",
437
+ "exclusiveMinimum": 0,
438
+ "maximum": 9007199254740991
439
+ }
440
+ }
441
+ },
442
+ "required": [
443
+ "vendor",
444
+ "channel",
445
+ "models"
446
+ ]
447
+ }
448
+ },
449
+ "additionalProperties": {
450
+ "type": "object",
451
+ "properties": {
452
+ "vendor": {
453
+ "anyOf": [
454
+ {
455
+ "type": "string",
456
+ "minLength": 1
457
+ },
458
+ {
459
+ "type": "null"
460
+ }
461
+ ]
462
+ },
463
+ "channel": {
464
+ "type": "string",
465
+ "enum": [
466
+ "sub",
467
+ "api"
468
+ ]
469
+ },
470
+ "models": {
471
+ "type": "object",
472
+ "propertyNames": {
473
+ "type": "string"
474
+ },
475
+ "additionalProperties": {
476
+ "type": "string",
477
+ "enum": [
478
+ "cheap",
479
+ "mid",
480
+ "frontier"
481
+ ]
482
+ }
483
+ },
484
+ "modelOverrides": {
485
+ "type": "object",
486
+ "propertyNames": {
487
+ "type": "string"
488
+ },
489
+ "additionalProperties": {
490
+ "type": "object",
491
+ "properties": {
492
+ "vendor": {
493
+ "type": "string",
494
+ "minLength": 1
495
+ },
496
+ "channel": {
497
+ "type": "string",
498
+ "enum": [
499
+ "sub",
500
+ "api"
501
+ ]
502
+ },
503
+ "effort": {
504
+ "not": {}
505
+ }
506
+ }
507
+ }
508
+ },
509
+ "windows": {
510
+ "type": "object",
511
+ "propertyNames": {
512
+ "type": "string"
513
+ },
514
+ "additionalProperties": {
515
+ "type": "integer",
516
+ "exclusiveMinimum": 0,
517
+ "maximum": 9007199254740991
518
+ }
519
+ }
520
+ },
521
+ "required": [
522
+ "vendor",
523
+ "channel",
524
+ "models"
525
+ ]
526
+ }
527
+ },
528
+ "pricing": {
529
+ "type": "object",
530
+ "propertyNames": {
531
+ "type": "string"
532
+ },
533
+ "additionalProperties": {
534
+ "type": "number"
535
+ }
536
+ },
537
+ "cost": {
538
+ "type": "object",
539
+ "properties": {
540
+ "models": {
541
+ "type": "object",
542
+ "propertyNames": {
543
+ "type": "string"
544
+ },
545
+ "additionalProperties": {
546
+ "type": "object",
547
+ "properties": {
548
+ "inPerMtok": {
549
+ "type": "number",
550
+ "minimum": 0
551
+ },
552
+ "outPerMtok": {
553
+ "type": "number",
554
+ "minimum": 0
555
+ },
556
+ "cacheReadPerMtok": {
557
+ "type": "number",
558
+ "minimum": 0
559
+ },
560
+ "rateDate": {
561
+ "type": "string"
562
+ }
563
+ },
564
+ "required": [
565
+ "inPerMtok",
566
+ "outPerMtok"
567
+ ]
568
+ }
569
+ },
570
+ "subs": {
571
+ "type": "object",
572
+ "propertyNames": {
573
+ "type": "string"
574
+ },
575
+ "additionalProperties": {
576
+ "type": "object",
577
+ "properties": {
578
+ "planMonthly": {
579
+ "type": "number",
580
+ "exclusiveMinimum": 0
581
+ },
582
+ "windowsPerMonthLow": {
583
+ "type": "integer",
584
+ "exclusiveMinimum": 0,
585
+ "maximum": 9007199254740991
586
+ },
587
+ "windowsPerMonthHigh": {
588
+ "type": "integer",
589
+ "exclusiveMinimum": 0,
590
+ "maximum": 9007199254740991
591
+ }
592
+ },
593
+ "required": [
594
+ "planMonthly",
595
+ "windowsPerMonthLow",
596
+ "windowsPerMonthHigh"
597
+ ]
598
+ }
599
+ }
600
+ }
601
+ },
602
+ "gates": {
603
+ "type": "object",
604
+ "properties": {
605
+ "build": {
606
+ "type": "string"
607
+ },
608
+ "test": {
609
+ "type": "string"
610
+ },
611
+ "tipTest": {
612
+ "type": "string"
613
+ },
614
+ "lint": {
615
+ "type": "string"
616
+ },
617
+ "diffCap": {
618
+ "type": "integer",
619
+ "exclusiveMinimum": 0,
620
+ "maximum": 9007199254740991
621
+ },
622
+ "byShape": {
623
+ "type": "object",
624
+ "propertyNames": {
625
+ "type": "string",
626
+ "enum": [
627
+ "plan",
628
+ "spec",
629
+ "implement",
630
+ "tests",
631
+ "docs",
632
+ "migration",
633
+ "ui",
634
+ "refactor",
635
+ "chore"
636
+ ]
637
+ },
638
+ "additionalProperties": {
639
+ "type": "object",
640
+ "properties": {
641
+ "acceptance": {
642
+ "type": "boolean"
643
+ },
644
+ "review": {
645
+ "type": "boolean"
646
+ }
647
+ },
648
+ "additionalProperties": {}
649
+ }
650
+ }
651
+ }
652
+ },
653
+ "scope": {
654
+ "type": "object",
655
+ "properties": {
656
+ "allowDeviations": {
657
+ "type": "array",
658
+ "items": {
659
+ "type": "string"
660
+ }
661
+ }
662
+ }
663
+ },
664
+ "judge": {
665
+ "type": "object",
666
+ "properties": {
667
+ "adapter": {
668
+ "type": "string"
669
+ },
670
+ "model": {
671
+ "type": "string"
672
+ }
673
+ },
674
+ "required": [
675
+ "adapter",
676
+ "model"
677
+ ]
678
+ },
679
+ "review": {
680
+ "type": "object",
681
+ "properties": {
682
+ "complexityThreshold": {
683
+ "type": "number"
684
+ },
685
+ "timeoutMs": {
686
+ "type": "integer",
687
+ "exclusiveMinimum": 0,
688
+ "maximum": 9007199254740991
689
+ },
690
+ "required": {
691
+ "type": "boolean"
692
+ },
693
+ "prefer": {
694
+ "type": "array",
695
+ "items": {
696
+ "type": "string"
697
+ }
698
+ },
699
+ "policy": {
700
+ "type": "string",
701
+ "enum": [
702
+ "full",
703
+ "judge-only"
704
+ ]
705
+ },
706
+ "criticalPaths": {
707
+ "type": "array",
708
+ "items": {
709
+ "type": "string"
710
+ }
711
+ },
712
+ "floor": {
713
+ "default": "worker",
714
+ "anyOf": [
715
+ {
716
+ "type": "string",
717
+ "const": "worker"
718
+ },
719
+ {
720
+ "type": "string",
721
+ "enum": [
722
+ "cheap",
723
+ "mid",
724
+ "frontier"
725
+ ]
726
+ }
727
+ ]
728
+ }
729
+ },
730
+ "required": [
731
+ "complexityThreshold",
732
+ "timeoutMs",
733
+ "required"
734
+ ]
735
+ },
736
+ "consult": {
737
+ "type": "object",
738
+ "properties": {
739
+ "adapter": {
740
+ "type": "string"
741
+ },
742
+ "model": {
743
+ "type": "string"
744
+ },
745
+ "stallMinutes": {
746
+ "type": "number",
747
+ "exclusiveMinimum": 0
748
+ },
749
+ "prefer": {
750
+ "type": "array",
751
+ "items": {
752
+ "type": "string",
753
+ "pattern": "^[^:]+:.+$"
754
+ }
755
+ }
756
+ },
757
+ "required": [
758
+ "adapter",
759
+ "model",
760
+ "stallMinutes"
761
+ ]
762
+ },
763
+ "visibility": {
764
+ "type": "object",
765
+ "properties": {
766
+ "llm": {
767
+ "type": "string",
768
+ "enum": [
769
+ "pane",
770
+ "headless"
771
+ ]
772
+ },
773
+ "keepPanes": {
774
+ "type": "string",
775
+ "enum": [
776
+ "run",
777
+ "attempt",
778
+ "forever"
779
+ ]
780
+ },
781
+ "worker": {
782
+ "type": "string",
783
+ "enum": [
784
+ "interactive",
785
+ "print"
786
+ ]
787
+ },
788
+ "workersPerTab": {
789
+ "type": "integer",
790
+ "exclusiveMinimum": 0,
791
+ "maximum": 9007199254740991
792
+ }
793
+ },
794
+ "required": [
795
+ "llm",
796
+ "keepPanes",
797
+ "worker",
798
+ "workersPerTab"
799
+ ]
800
+ }
801
+ },
802
+ "required": [
803
+ "concurrency",
804
+ "driver",
805
+ "integrationBranchPrefix",
806
+ "taskTimeoutMinutes",
807
+ "contextWarnTokens",
808
+ "routing",
809
+ "tiers",
810
+ "pricing",
811
+ "gates",
812
+ "judge",
813
+ "review",
814
+ "consult",
815
+ "visibility"
816
+ ],
817
+ "$comment": "Structural schema of the merged (defaults + overlays) config; cross-field refinements live in loadConfig()."
818
+ }