contractspec 3.7.16 → 4.0.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.
@@ -0,0 +1,1206 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "type": "object",
4
+ "properties": {
5
+ "$schema": {
6
+ "type": "string",
7
+ "format": "uri-reference",
8
+ "description": "JSON Schema location for editor validation and completions."
9
+ },
10
+ "aiProvider": {
11
+ "default": "claude",
12
+ "type": "string",
13
+ "enum": ["claude", "openai", "ollama", "mistral", "custom"]
14
+ },
15
+ "aiModel": {
16
+ "type": "string"
17
+ },
18
+ "agentMode": {
19
+ "default": "simple",
20
+ "type": "string",
21
+ "enum": [
22
+ "simple",
23
+ "cursor",
24
+ "claude-code",
25
+ "openai-codex",
26
+ "claude-agent-sdk",
27
+ "opencode",
28
+ "opencode-sdk"
29
+ ]
30
+ },
31
+ "customEndpoint": {
32
+ "anyOf": [
33
+ {
34
+ "type": "string",
35
+ "format": "uri"
36
+ },
37
+ {
38
+ "type": "null"
39
+ }
40
+ ]
41
+ },
42
+ "customApiKey": {
43
+ "anyOf": [
44
+ {
45
+ "type": "string"
46
+ },
47
+ {
48
+ "type": "null"
49
+ }
50
+ ]
51
+ },
52
+ "outputDir": {
53
+ "default": "./src",
54
+ "type": "string"
55
+ },
56
+ "conventions": {
57
+ "type": "object",
58
+ "properties": {
59
+ "models": {
60
+ "default": "models",
61
+ "type": "string"
62
+ },
63
+ "operations": {
64
+ "default": "operations/commands|queries",
65
+ "type": "string"
66
+ },
67
+ "events": {
68
+ "default": "events",
69
+ "type": "string"
70
+ },
71
+ "presentations": {
72
+ "default": "presentations",
73
+ "type": "string"
74
+ },
75
+ "forms": {
76
+ "default": "forms",
77
+ "type": "string"
78
+ },
79
+ "groupByFeature": {
80
+ "default": true,
81
+ "type": "boolean"
82
+ },
83
+ "operationsGrouping": {
84
+ "type": "object",
85
+ "properties": {
86
+ "strategy": {
87
+ "type": "string",
88
+ "enum": [
89
+ "by-tag",
90
+ "by-owner",
91
+ "by-domain",
92
+ "by-url-path-single",
93
+ "by-url-path-multi",
94
+ "by-feature",
95
+ "none"
96
+ ]
97
+ },
98
+ "urlPathLevel": {
99
+ "type": "number"
100
+ },
101
+ "pattern": {
102
+ "type": "string"
103
+ }
104
+ },
105
+ "required": ["strategy"],
106
+ "additionalProperties": false
107
+ },
108
+ "modelsGrouping": {
109
+ "type": "object",
110
+ "properties": {
111
+ "strategy": {
112
+ "type": "string",
113
+ "enum": [
114
+ "by-tag",
115
+ "by-owner",
116
+ "by-domain",
117
+ "by-url-path-single",
118
+ "by-url-path-multi",
119
+ "by-feature",
120
+ "none"
121
+ ]
122
+ },
123
+ "urlPathLevel": {
124
+ "type": "number"
125
+ },
126
+ "pattern": {
127
+ "type": "string"
128
+ }
129
+ },
130
+ "required": ["strategy"],
131
+ "additionalProperties": false
132
+ },
133
+ "eventsGrouping": {
134
+ "type": "object",
135
+ "properties": {
136
+ "strategy": {
137
+ "type": "string",
138
+ "enum": [
139
+ "by-tag",
140
+ "by-owner",
141
+ "by-domain",
142
+ "by-url-path-single",
143
+ "by-url-path-multi",
144
+ "by-feature",
145
+ "none"
146
+ ]
147
+ },
148
+ "urlPathLevel": {
149
+ "type": "number"
150
+ },
151
+ "pattern": {
152
+ "type": "string"
153
+ }
154
+ },
155
+ "required": ["strategy"],
156
+ "additionalProperties": false
157
+ }
158
+ },
159
+ "additionalProperties": false
160
+ },
161
+ "defaultOwners": {
162
+ "default": [],
163
+ "type": "array",
164
+ "items": {
165
+ "type": "string"
166
+ }
167
+ },
168
+ "defaultTags": {
169
+ "default": [],
170
+ "type": "array",
171
+ "items": {
172
+ "type": "string"
173
+ }
174
+ },
175
+ "packages": {
176
+ "type": "array",
177
+ "items": {
178
+ "type": "string"
179
+ }
180
+ },
181
+ "excludePackages": {
182
+ "type": "array",
183
+ "items": {
184
+ "type": "string"
185
+ }
186
+ },
187
+ "recursive": {
188
+ "type": "boolean"
189
+ },
190
+ "openapi": {
191
+ "type": "object",
192
+ "properties": {
193
+ "sources": {
194
+ "type": "array",
195
+ "items": {
196
+ "type": "object",
197
+ "properties": {
198
+ "name": {
199
+ "type": "string"
200
+ },
201
+ "url": {
202
+ "type": "string",
203
+ "format": "uri"
204
+ },
205
+ "file": {
206
+ "type": "string"
207
+ },
208
+ "syncMode": {
209
+ "default": "validate",
210
+ "type": "string",
211
+ "enum": ["import", "sync", "validate"]
212
+ },
213
+ "tags": {
214
+ "type": "array",
215
+ "items": {
216
+ "type": "string"
217
+ }
218
+ },
219
+ "exclude": {
220
+ "type": "array",
221
+ "items": {
222
+ "type": "string"
223
+ }
224
+ },
225
+ "include": {
226
+ "type": "array",
227
+ "items": {
228
+ "type": "string"
229
+ }
230
+ },
231
+ "prefix": {
232
+ "type": "string"
233
+ },
234
+ "defaultStability": {
235
+ "type": "string",
236
+ "enum": ["experimental", "beta", "stable", "deprecated"]
237
+ },
238
+ "defaultAuth": {
239
+ "type": "string",
240
+ "enum": ["anonymous", "user", "admin"]
241
+ },
242
+ "defaultOwners": {
243
+ "type": "array",
244
+ "items": {
245
+ "type": "string"
246
+ }
247
+ },
248
+ "schemaFormat": {
249
+ "default": "contractspec",
250
+ "type": "string",
251
+ "enum": ["contractspec", "zod", "json-schema", "graphql"]
252
+ }
253
+ },
254
+ "required": ["name"],
255
+ "additionalProperties": false
256
+ }
257
+ },
258
+ "export": {
259
+ "type": "object",
260
+ "properties": {
261
+ "outputPath": {
262
+ "default": "./openapi.json",
263
+ "type": "string"
264
+ },
265
+ "format": {
266
+ "default": "json",
267
+ "type": "string",
268
+ "enum": ["json", "yaml"]
269
+ },
270
+ "title": {
271
+ "type": "string"
272
+ },
273
+ "version": {
274
+ "type": "string"
275
+ },
276
+ "description": {
277
+ "type": "string"
278
+ },
279
+ "servers": {
280
+ "type": "array",
281
+ "items": {
282
+ "type": "object",
283
+ "properties": {
284
+ "url": {
285
+ "type": "string"
286
+ },
287
+ "description": {
288
+ "type": "string"
289
+ }
290
+ },
291
+ "required": ["url"],
292
+ "additionalProperties": false
293
+ }
294
+ }
295
+ },
296
+ "additionalProperties": false
297
+ }
298
+ },
299
+ "additionalProperties": false
300
+ },
301
+ "ci": {
302
+ "type": "object",
303
+ "properties": {
304
+ "checks": {
305
+ "default": ["structure", "integrity", "deps"],
306
+ "type": "array",
307
+ "items": {
308
+ "type": "string"
309
+ }
310
+ },
311
+ "skipChecks": {
312
+ "type": "array",
313
+ "items": {
314
+ "type": "string"
315
+ }
316
+ },
317
+ "failOnWarnings": {
318
+ "default": false,
319
+ "type": "boolean"
320
+ },
321
+ "uploadSarif": {
322
+ "default": true,
323
+ "type": "boolean"
324
+ },
325
+ "prComment": {
326
+ "type": "object",
327
+ "properties": {
328
+ "enabled": {
329
+ "default": true,
330
+ "type": "boolean"
331
+ },
332
+ "template": {
333
+ "default": "detailed",
334
+ "type": "string",
335
+ "enum": ["minimal", "detailed"]
336
+ },
337
+ "updateExisting": {
338
+ "default": true,
339
+ "type": "boolean"
340
+ }
341
+ },
342
+ "additionalProperties": false
343
+ },
344
+ "checkRun": {
345
+ "type": "object",
346
+ "properties": {
347
+ "enabled": {
348
+ "default": true,
349
+ "type": "boolean"
350
+ },
351
+ "name": {
352
+ "default": "ContractSpec Impact",
353
+ "type": "string"
354
+ },
355
+ "failOnBreaking": {
356
+ "default": true,
357
+ "type": "boolean"
358
+ },
359
+ "failOnChanges": {
360
+ "default": false,
361
+ "type": "boolean"
362
+ }
363
+ },
364
+ "additionalProperties": false
365
+ },
366
+ "impact": {
367
+ "type": "object",
368
+ "properties": {
369
+ "baseline": {
370
+ "default": "default-branch",
371
+ "type": "string"
372
+ },
373
+ "include": {
374
+ "type": "array",
375
+ "items": {
376
+ "type": "string"
377
+ }
378
+ },
379
+ "exclude": {
380
+ "type": "array",
381
+ "items": {
382
+ "type": "string"
383
+ }
384
+ }
385
+ },
386
+ "additionalProperties": false
387
+ }
388
+ },
389
+ "additionalProperties": false
390
+ },
391
+ "metaRepo": {
392
+ "type": "object",
393
+ "properties": {
394
+ "activeScope": {
395
+ "type": "string"
396
+ },
397
+ "externalWorkspaces": {
398
+ "type": "array",
399
+ "items": {
400
+ "type": "object",
401
+ "properties": {
402
+ "alias": {
403
+ "type": "string"
404
+ },
405
+ "submodule": {
406
+ "type": "string"
407
+ },
408
+ "packages": {
409
+ "type": "array",
410
+ "items": {
411
+ "type": "string"
412
+ }
413
+ },
414
+ "autoResolve": {
415
+ "default": true,
416
+ "type": "boolean"
417
+ }
418
+ },
419
+ "required": ["alias", "submodule"],
420
+ "additionalProperties": false
421
+ }
422
+ },
423
+ "crossWorkspaceSearch": {
424
+ "default": false,
425
+ "type": "boolean"
426
+ }
427
+ },
428
+ "additionalProperties": false
429
+ },
430
+ "rules": {
431
+ "type": "object",
432
+ "properties": {
433
+ "defaults": {
434
+ "type": "object",
435
+ "properties": {
436
+ "require-acceptance": {
437
+ "type": "string",
438
+ "enum": ["off", "warn", "error"]
439
+ },
440
+ "require-examples": {
441
+ "type": "string",
442
+ "enum": ["off", "warn", "error"]
443
+ },
444
+ "require-stability": {
445
+ "type": "string",
446
+ "enum": ["off", "warn", "error"]
447
+ },
448
+ "require-owners-format": {
449
+ "type": "string",
450
+ "enum": ["off", "warn", "error"]
451
+ },
452
+ "event-past-tense": {
453
+ "type": "string",
454
+ "enum": ["off", "warn", "error"]
455
+ },
456
+ "no-todo": {
457
+ "type": "string",
458
+ "enum": ["off", "warn", "error"]
459
+ },
460
+ "workflow-transitions": {
461
+ "type": "string",
462
+ "enum": ["off", "warn", "error"]
463
+ },
464
+ "telemetry-privacy": {
465
+ "type": "string",
466
+ "enum": ["off", "warn", "error"]
467
+ },
468
+ "experiment-allocation": {
469
+ "type": "string",
470
+ "enum": ["off", "warn", "error"]
471
+ },
472
+ "app-config-appid": {
473
+ "type": "string",
474
+ "enum": ["off", "warn", "error"]
475
+ },
476
+ "app-config-capabilities": {
477
+ "type": "string",
478
+ "enum": ["off", "warn", "error"]
479
+ },
480
+ "data-view-fields": {
481
+ "type": "string",
482
+ "enum": ["off", "warn", "error"]
483
+ }
484
+ },
485
+ "additionalProperties": false
486
+ },
487
+ "overrides": {
488
+ "type": "object",
489
+ "propertyNames": {
490
+ "type": "string",
491
+ "enum": [
492
+ "operation",
493
+ "event",
494
+ "presentation",
495
+ "feature",
496
+ "workflow",
497
+ "data-view",
498
+ "migration",
499
+ "telemetry",
500
+ "experiment",
501
+ "app-config",
502
+ "integration",
503
+ "knowledge",
504
+ "policy",
505
+ "form",
506
+ "capability",
507
+ "job",
508
+ "translation"
509
+ ]
510
+ },
511
+ "additionalProperties": {
512
+ "type": "object",
513
+ "properties": {
514
+ "require-acceptance": {
515
+ "type": "string",
516
+ "enum": ["off", "warn", "error"]
517
+ },
518
+ "require-examples": {
519
+ "type": "string",
520
+ "enum": ["off", "warn", "error"]
521
+ },
522
+ "require-stability": {
523
+ "type": "string",
524
+ "enum": ["off", "warn", "error"]
525
+ },
526
+ "require-owners-format": {
527
+ "type": "string",
528
+ "enum": ["off", "warn", "error"]
529
+ },
530
+ "event-past-tense": {
531
+ "type": "string",
532
+ "enum": ["off", "warn", "error"]
533
+ },
534
+ "no-todo": {
535
+ "type": "string",
536
+ "enum": ["off", "warn", "error"]
537
+ },
538
+ "workflow-transitions": {
539
+ "type": "string",
540
+ "enum": ["off", "warn", "error"]
541
+ },
542
+ "telemetry-privacy": {
543
+ "type": "string",
544
+ "enum": ["off", "warn", "error"]
545
+ },
546
+ "experiment-allocation": {
547
+ "type": "string",
548
+ "enum": ["off", "warn", "error"]
549
+ },
550
+ "app-config-appid": {
551
+ "type": "string",
552
+ "enum": ["off", "warn", "error"]
553
+ },
554
+ "app-config-capabilities": {
555
+ "type": "string",
556
+ "enum": ["off", "warn", "error"]
557
+ },
558
+ "data-view-fields": {
559
+ "type": "string",
560
+ "enum": ["off", "warn", "error"]
561
+ }
562
+ },
563
+ "additionalProperties": false
564
+ },
565
+ "required": [
566
+ "operation",
567
+ "event",
568
+ "presentation",
569
+ "feature",
570
+ "workflow",
571
+ "data-view",
572
+ "migration",
573
+ "telemetry",
574
+ "experiment",
575
+ "app-config",
576
+ "integration",
577
+ "knowledge",
578
+ "policy",
579
+ "form",
580
+ "capability",
581
+ "job",
582
+ "translation"
583
+ ]
584
+ }
585
+ },
586
+ "additionalProperties": false
587
+ },
588
+ "testing": {
589
+ "type": "object",
590
+ "properties": {
591
+ "runner": {
592
+ "default": "internal",
593
+ "type": "string",
594
+ "enum": ["internal", "jest", "vitest", "bun"]
595
+ },
596
+ "testMatch": {
597
+ "default": ["**/*.{test,spec}.{ts,js}"],
598
+ "type": "array",
599
+ "items": {
600
+ "type": "string"
601
+ }
602
+ },
603
+ "autoGenerate": {
604
+ "default": false,
605
+ "type": "boolean"
606
+ },
607
+ "integrity": {
608
+ "type": "object",
609
+ "properties": {
610
+ "requireTestsFor": {
611
+ "type": "array",
612
+ "items": {
613
+ "type": "string",
614
+ "enum": [
615
+ "operation",
616
+ "event",
617
+ "presentation",
618
+ "feature",
619
+ "workflow",
620
+ "data-view",
621
+ "migration",
622
+ "telemetry",
623
+ "experiment",
624
+ "app-config",
625
+ "integration",
626
+ "knowledge",
627
+ "policy",
628
+ "form",
629
+ "capability",
630
+ "job",
631
+ "translation"
632
+ ]
633
+ }
634
+ },
635
+ "minCoverage": {
636
+ "type": "number"
637
+ }
638
+ },
639
+ "additionalProperties": false
640
+ },
641
+ "testLinking": {
642
+ "type": "object",
643
+ "properties": {
644
+ "strategy": {
645
+ "default": "both",
646
+ "type": "string",
647
+ "enum": ["target-first", "convention-only", "both"]
648
+ },
649
+ "warnOnConvention": {
650
+ "default": false,
651
+ "type": "boolean"
652
+ }
653
+ },
654
+ "additionalProperties": false
655
+ }
656
+ },
657
+ "additionalProperties": false
658
+ },
659
+ "hooks": {
660
+ "type": "object",
661
+ "propertyNames": {
662
+ "type": "string"
663
+ },
664
+ "additionalProperties": {
665
+ "type": "array",
666
+ "items": {
667
+ "type": "string"
668
+ }
669
+ }
670
+ },
671
+ "schemaFormat": {
672
+ "default": "contractspec",
673
+ "type": "string",
674
+ "enum": ["contractspec", "zod", "json-schema", "graphql"]
675
+ },
676
+ "formatter": {
677
+ "type": "object",
678
+ "properties": {
679
+ "enabled": {
680
+ "default": true,
681
+ "type": "boolean"
682
+ },
683
+ "type": {
684
+ "type": "string",
685
+ "enum": ["biome", "dprint", "custom"]
686
+ },
687
+ "command": {
688
+ "type": "string"
689
+ },
690
+ "args": {
691
+ "type": "array",
692
+ "items": {
693
+ "type": "string"
694
+ }
695
+ },
696
+ "timeout": {
697
+ "default": 30000,
698
+ "type": "number"
699
+ }
700
+ },
701
+ "additionalProperties": false
702
+ },
703
+ "versioning": {
704
+ "type": "object",
705
+ "properties": {
706
+ "autoBump": {
707
+ "default": false,
708
+ "type": "boolean"
709
+ },
710
+ "bumpStrategy": {
711
+ "default": "impact",
712
+ "type": "string",
713
+ "enum": ["impact", "conventional"]
714
+ },
715
+ "integrateWithChangesets": {
716
+ "default": false,
717
+ "type": "boolean"
718
+ },
719
+ "changelogTiers": {
720
+ "default": ["spec", "library", "monorepo"],
721
+ "type": "array",
722
+ "items": {
723
+ "type": "string",
724
+ "enum": ["spec", "library", "monorepo"]
725
+ }
726
+ },
727
+ "format": {
728
+ "default": "keep-a-changelog",
729
+ "type": "string",
730
+ "enum": ["keep-a-changelog", "conventional", "custom"]
731
+ },
732
+ "commitChanges": {
733
+ "default": false,
734
+ "type": "boolean"
735
+ },
736
+ "commitMessage": {
737
+ "default": "chore: bump spec versions",
738
+ "type": "string"
739
+ },
740
+ "createTags": {
741
+ "default": false,
742
+ "type": "boolean"
743
+ },
744
+ "tagPrefix": {
745
+ "default": "v",
746
+ "type": "string"
747
+ },
748
+ "include": {
749
+ "type": "array",
750
+ "items": {
751
+ "type": "string"
752
+ }
753
+ },
754
+ "exclude": {
755
+ "type": "array",
756
+ "items": {
757
+ "type": "string"
758
+ }
759
+ }
760
+ },
761
+ "additionalProperties": false
762
+ },
763
+ "release": {
764
+ "type": "object",
765
+ "properties": {
766
+ "enforceOn": {
767
+ "default": "release-branch",
768
+ "type": "string",
769
+ "enum": ["release-branch", "always", "never"]
770
+ },
771
+ "requireChangesetForPublished": {
772
+ "default": true,
773
+ "type": "boolean"
774
+ },
775
+ "requireReleaseCapsule": {
776
+ "default": true,
777
+ "type": "boolean"
778
+ },
779
+ "publishArtifacts": {
780
+ "default": [
781
+ "manifest.json",
782
+ "patch-notes.md",
783
+ "customer-guide.md",
784
+ "upgrade-manifest.json"
785
+ ],
786
+ "type": "array",
787
+ "items": {
788
+ "type": "string"
789
+ }
790
+ },
791
+ "agentTargets": {
792
+ "default": ["codex"],
793
+ "type": "array",
794
+ "items": {
795
+ "type": "string",
796
+ "enum": ["codex", "opencode", "claude-code"]
797
+ }
798
+ }
799
+ },
800
+ "additionalProperties": false
801
+ },
802
+ "upgrade": {
803
+ "type": "object",
804
+ "properties": {
805
+ "manifestPaths": {
806
+ "default": ["generated/releases/upgrade-manifest.json"],
807
+ "type": "array",
808
+ "items": {
809
+ "type": "string"
810
+ }
811
+ },
812
+ "defaultAgentTarget": {
813
+ "default": "codex",
814
+ "type": "string",
815
+ "enum": ["codex", "opencode", "claude-code"]
816
+ },
817
+ "enableInteractiveGuidance": {
818
+ "default": true,
819
+ "type": "boolean"
820
+ },
821
+ "applyCodemods": {
822
+ "default": true,
823
+ "type": "boolean"
824
+ }
825
+ },
826
+ "additionalProperties": false
827
+ },
828
+ "ruleSync": {
829
+ "type": "object",
830
+ "properties": {
831
+ "enabled": {
832
+ "default": false,
833
+ "type": "boolean"
834
+ },
835
+ "rulesDir": {
836
+ "default": "./.rules",
837
+ "type": "string"
838
+ },
839
+ "rules": {
840
+ "default": ["**/*.rule.md"],
841
+ "type": "array",
842
+ "items": {
843
+ "type": "string"
844
+ }
845
+ },
846
+ "targets": {
847
+ "default": ["cursor", "windsurf"],
848
+ "type": "array",
849
+ "items": {
850
+ "type": "string",
851
+ "enum": [
852
+ "cursor",
853
+ "windsurf",
854
+ "cline",
855
+ "claude-code",
856
+ "copilot",
857
+ "subagent",
858
+ "skill"
859
+ ]
860
+ }
861
+ },
862
+ "autoSync": {
863
+ "default": true,
864
+ "type": "boolean"
865
+ },
866
+ "ejectMode": {
867
+ "default": false,
868
+ "type": "boolean"
869
+ }
870
+ },
871
+ "additionalProperties": false
872
+ },
873
+ "externalAgents": {
874
+ "type": "object",
875
+ "properties": {
876
+ "claudeAgent": {
877
+ "type": "object",
878
+ "properties": {
879
+ "enabled": {
880
+ "default": false,
881
+ "type": "boolean"
882
+ },
883
+ "apiKey": {
884
+ "type": "string"
885
+ },
886
+ "model": {
887
+ "default": "claude-sonnet-4-6",
888
+ "type": "string"
889
+ },
890
+ "computerUse": {
891
+ "default": false,
892
+ "type": "boolean"
893
+ },
894
+ "extendedThinking": {
895
+ "default": false,
896
+ "type": "boolean"
897
+ }
898
+ },
899
+ "additionalProperties": false
900
+ },
901
+ "openCode": {
902
+ "type": "object",
903
+ "properties": {
904
+ "enabled": {
905
+ "default": false,
906
+ "type": "boolean"
907
+ },
908
+ "serverUrl": {
909
+ "type": "string"
910
+ },
911
+ "port": {
912
+ "type": "number"
913
+ },
914
+ "agentType": {
915
+ "default": "general",
916
+ "type": "string",
917
+ "enum": ["build", "plan", "general", "explore"]
918
+ },
919
+ "model": {
920
+ "type": "string"
921
+ }
922
+ },
923
+ "additionalProperties": false
924
+ }
925
+ },
926
+ "additionalProperties": false
927
+ },
928
+ "builder": {
929
+ "type": "object",
930
+ "properties": {
931
+ "enabled": {
932
+ "default": false,
933
+ "type": "boolean"
934
+ },
935
+ "runtimeMode": {
936
+ "default": "managed",
937
+ "type": "string",
938
+ "enum": ["managed", "local", "hybrid"]
939
+ },
940
+ "bootstrapPreset": {
941
+ "default": "managed_mvp",
942
+ "type": "string",
943
+ "enum": ["managed_mvp", "local_daemon_mvp", "hybrid_mvp"]
944
+ },
945
+ "api": {
946
+ "type": "object",
947
+ "properties": {
948
+ "baseUrl": {
949
+ "type": "string",
950
+ "format": "uri"
951
+ },
952
+ "controlPlaneTokenEnvVar": {
953
+ "default": "CONTROL_PLANE_API_TOKEN",
954
+ "type": "string"
955
+ }
956
+ },
957
+ "additionalProperties": false
958
+ },
959
+ "localRuntime": {
960
+ "type": "object",
961
+ "properties": {
962
+ "runtimeId": {
963
+ "default": "rt_local_daemon",
964
+ "type": "string"
965
+ },
966
+ "grantedTo": {
967
+ "default": "local:operator",
968
+ "type": "string"
969
+ },
970
+ "providerIds": {
971
+ "default": ["provider.codex", "provider.local.model"],
972
+ "type": "array",
973
+ "items": {
974
+ "type": "string"
975
+ }
976
+ }
977
+ },
978
+ "additionalProperties": false
979
+ }
980
+ },
981
+ "additionalProperties": false
982
+ },
983
+ "connect": {
984
+ "type": "object",
985
+ "properties": {
986
+ "enabled": {
987
+ "default": false,
988
+ "type": "boolean"
989
+ },
990
+ "adapters": {
991
+ "type": "object",
992
+ "properties": {
993
+ "cursor": {
994
+ "type": "object",
995
+ "properties": {
996
+ "enabled": {
997
+ "default": false,
998
+ "type": "boolean"
999
+ },
1000
+ "mode": {
1001
+ "default": "plugin",
1002
+ "type": "string",
1003
+ "enum": ["plugin", "rule", "wrapper"]
1004
+ },
1005
+ "packageRef": {
1006
+ "type": "string"
1007
+ }
1008
+ },
1009
+ "additionalProperties": false
1010
+ },
1011
+ "codex": {
1012
+ "type": "object",
1013
+ "properties": {
1014
+ "enabled": {
1015
+ "default": false,
1016
+ "type": "boolean"
1017
+ },
1018
+ "mode": {
1019
+ "default": "plugin",
1020
+ "type": "string",
1021
+ "enum": ["plugin", "rule", "wrapper"]
1022
+ },
1023
+ "packageRef": {
1024
+ "type": "string"
1025
+ }
1026
+ },
1027
+ "additionalProperties": false
1028
+ },
1029
+ "claude-code": {
1030
+ "type": "object",
1031
+ "properties": {
1032
+ "enabled": {
1033
+ "default": false,
1034
+ "type": "boolean"
1035
+ },
1036
+ "mode": {
1037
+ "default": "plugin",
1038
+ "type": "string",
1039
+ "enum": ["plugin", "rule", "wrapper"]
1040
+ },
1041
+ "packageRef": {
1042
+ "type": "string"
1043
+ }
1044
+ },
1045
+ "additionalProperties": false
1046
+ }
1047
+ },
1048
+ "additionalProperties": false
1049
+ },
1050
+ "storage": {
1051
+ "type": "object",
1052
+ "properties": {
1053
+ "root": {
1054
+ "default": ".contractspec/connect",
1055
+ "type": "string"
1056
+ },
1057
+ "contextPack": {
1058
+ "default": ".contractspec/connect/context-pack.json",
1059
+ "type": "string"
1060
+ },
1061
+ "planPacket": {
1062
+ "default": ".contractspec/connect/plan-packet.json",
1063
+ "type": "string"
1064
+ },
1065
+ "patchVerdict": {
1066
+ "default": ".contractspec/connect/patch-verdict.json",
1067
+ "type": "string"
1068
+ },
1069
+ "auditFile": {
1070
+ "default": ".contractspec/connect/audit.ndjson",
1071
+ "type": "string"
1072
+ },
1073
+ "reviewPacketsDir": {
1074
+ "default": ".contractspec/connect/review-packets",
1075
+ "type": "string"
1076
+ }
1077
+ },
1078
+ "additionalProperties": false
1079
+ },
1080
+ "policy": {
1081
+ "type": "object",
1082
+ "properties": {
1083
+ "protectedPaths": {
1084
+ "type": "array",
1085
+ "items": {
1086
+ "type": "string"
1087
+ }
1088
+ },
1089
+ "immutablePaths": {
1090
+ "type": "array",
1091
+ "items": {
1092
+ "type": "string"
1093
+ }
1094
+ },
1095
+ "generatedPaths": {
1096
+ "type": "array",
1097
+ "items": {
1098
+ "type": "string"
1099
+ }
1100
+ },
1101
+ "smokeChecks": {
1102
+ "type": "array",
1103
+ "items": {
1104
+ "type": "string"
1105
+ }
1106
+ },
1107
+ "reviewThresholds": {
1108
+ "type": "object",
1109
+ "properties": {
1110
+ "protectedPathWrite": {
1111
+ "type": "string",
1112
+ "enum": ["permit", "rewrite", "require_review", "deny"]
1113
+ },
1114
+ "unknownImpact": {
1115
+ "type": "string",
1116
+ "enum": ["permit", "rewrite", "require_review", "deny"]
1117
+ },
1118
+ "contractDrift": {
1119
+ "type": "string",
1120
+ "enum": ["permit", "rewrite", "require_review", "deny"]
1121
+ },
1122
+ "breakingChange": {
1123
+ "type": "string",
1124
+ "enum": ["permit", "rewrite", "require_review", "deny"]
1125
+ },
1126
+ "destructiveCommand": {
1127
+ "type": "string",
1128
+ "enum": ["permit", "rewrite", "require_review", "deny"]
1129
+ }
1130
+ },
1131
+ "additionalProperties": false
1132
+ }
1133
+ },
1134
+ "additionalProperties": false
1135
+ },
1136
+ "commands": {
1137
+ "type": "object",
1138
+ "properties": {
1139
+ "allow": {
1140
+ "type": "array",
1141
+ "items": {
1142
+ "type": "string"
1143
+ }
1144
+ },
1145
+ "review": {
1146
+ "type": "array",
1147
+ "items": {
1148
+ "type": "string"
1149
+ }
1150
+ },
1151
+ "deny": {
1152
+ "type": "array",
1153
+ "items": {
1154
+ "type": "string"
1155
+ }
1156
+ }
1157
+ },
1158
+ "additionalProperties": false
1159
+ },
1160
+ "canonPacks": {
1161
+ "type": "array",
1162
+ "items": {
1163
+ "type": "object",
1164
+ "properties": {
1165
+ "ref": {
1166
+ "type": "string"
1167
+ },
1168
+ "readOnly": {
1169
+ "default": true,
1170
+ "type": "boolean"
1171
+ }
1172
+ },
1173
+ "required": ["ref"],
1174
+ "additionalProperties": false
1175
+ }
1176
+ },
1177
+ "studio": {
1178
+ "type": "object",
1179
+ "properties": {
1180
+ "enabled": {
1181
+ "default": false,
1182
+ "type": "boolean"
1183
+ },
1184
+ "mode": {
1185
+ "default": "off",
1186
+ "type": "string",
1187
+ "enum": ["off", "review-bridge"]
1188
+ },
1189
+ "endpoint": {
1190
+ "type": "string",
1191
+ "format": "uri"
1192
+ },
1193
+ "queue": {
1194
+ "type": "string"
1195
+ }
1196
+ },
1197
+ "additionalProperties": false
1198
+ }
1199
+ },
1200
+ "additionalProperties": false
1201
+ }
1202
+ },
1203
+ "additionalProperties": false,
1204
+ "title": "ContractSpec CLI Configuration",
1205
+ "description": "Configuration file for ContractSpec CLI and tooling. Supports single projects, monorepos, and meta-repos."
1206
+ }