tickmarkr 2.6.1 → 2.6.3

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