micro-contracts 0.14.4 → 0.15.1

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 (92) hide show
  1. package/README.md +62 -0
  2. package/cli-contract.yaml +706 -69
  3. package/dist/agents/context-builder.d.ts +5 -0
  4. package/dist/agents/context-builder.d.ts.map +1 -0
  5. package/dist/agents/context-builder.js +239 -0
  6. package/dist/agents/context-builder.js.map +1 -0
  7. package/dist/agents/formatter.d.ts +9 -0
  8. package/dist/agents/formatter.d.ts.map +1 -0
  9. package/dist/agents/formatter.js +124 -0
  10. package/dist/agents/formatter.js.map +1 -0
  11. package/dist/agents/index.d.ts +5 -0
  12. package/dist/agents/index.d.ts.map +1 -0
  13. package/dist/agents/index.js +3 -0
  14. package/dist/agents/index.js.map +1 -0
  15. package/dist/agents/orchestrator.d.ts +5 -0
  16. package/dist/agents/orchestrator.d.ts.map +1 -0
  17. package/dist/agents/orchestrator.js +105 -0
  18. package/dist/agents/orchestrator.js.map +1 -0
  19. package/dist/agents/types.d.ts +21 -0
  20. package/dist/agents/types.d.ts.map +1 -0
  21. package/dist/agents/types.js +2 -0
  22. package/dist/agents/types.js.map +1 -0
  23. package/dist/cli.d.ts +0 -6
  24. package/dist/cli.d.ts.map +1 -1
  25. package/dist/cli.js +814 -1161
  26. package/dist/cli.js.map +1 -1
  27. package/dist/commands/audit-guardrails.d.ts +13 -0
  28. package/dist/commands/audit-guardrails.d.ts.map +1 -0
  29. package/dist/commands/audit-guardrails.js +32 -0
  30. package/dist/commands/audit-guardrails.js.map +1 -0
  31. package/dist/commands/audit-openapi.d.ts +13 -0
  32. package/dist/commands/audit-openapi.d.ts.map +1 -0
  33. package/dist/commands/audit-openapi.js +32 -0
  34. package/dist/commands/audit-openapi.js.map +1 -0
  35. package/dist/commands/propose-overlays.d.ts +13 -0
  36. package/dist/commands/propose-overlays.d.ts.map +1 -0
  37. package/dist/commands/propose-overlays.js +32 -0
  38. package/dist/commands/propose-overlays.js.map +1 -0
  39. package/dist/commands/review-published.d.ts +13 -0
  40. package/dist/commands/review-published.d.ts.map +1 -0
  41. package/dist/commands/review-published.js +32 -0
  42. package/dist/commands/review-published.js.map +1 -0
  43. package/dist/generated/commands.d.ts +2 -0
  44. package/dist/generated/commands.d.ts.map +1 -0
  45. package/dist/generated/commands.js +2 -0
  46. package/dist/generated/commands.js.map +1 -0
  47. package/dist/generated/dsl/agents.d.ts +34 -0
  48. package/dist/generated/dsl/agents.d.ts.map +1 -0
  49. package/dist/generated/dsl/agents.js +98 -0
  50. package/dist/generated/dsl/agents.js.map +1 -0
  51. package/dist/generated/dsl/handoffs.d.ts +1209 -0
  52. package/dist/generated/dsl/handoffs.d.ts.map +1 -0
  53. package/dist/generated/dsl/handoffs.js +205 -0
  54. package/dist/generated/dsl/handoffs.js.map +1 -0
  55. package/dist/generated/dsl/index.d.ts +13 -0
  56. package/dist/generated/dsl/index.d.ts.map +1 -0
  57. package/dist/generated/dsl/index.js +10 -0
  58. package/dist/generated/dsl/index.js.map +1 -0
  59. package/dist/generated/dsl/tasks.d.ts +26 -0
  60. package/dist/generated/dsl/tasks.d.ts.map +1 -0
  61. package/dist/generated/dsl/tasks.js +133 -0
  62. package/dist/generated/dsl/tasks.js.map +1 -0
  63. package/dist/generated/dsl/workflows.d.ts +34 -0
  64. package/dist/generated/dsl/workflows.d.ts.map +1 -0
  65. package/dist/generated/dsl/workflows.js +84 -0
  66. package/dist/generated/dsl/workflows.js.map +1 -0
  67. package/dist/generated/index.d.ts +7 -0
  68. package/dist/generated/index.d.ts.map +1 -0
  69. package/dist/generated/index.js +7 -0
  70. package/dist/generated/index.js.map +1 -0
  71. package/dist/generated/policy-runtime.d.ts +114 -0
  72. package/dist/generated/policy-runtime.d.ts.map +1 -0
  73. package/dist/generated/policy-runtime.js +195 -0
  74. package/dist/generated/policy-runtime.js.map +1 -0
  75. package/dist/generated/policy.d.ts +619 -0
  76. package/dist/generated/policy.d.ts.map +1 -0
  77. package/dist/generated/policy.js +802 -0
  78. package/dist/generated/policy.js.map +1 -0
  79. package/dist/generated/program.d.ts +112 -0
  80. package/dist/generated/program.d.ts.map +1 -0
  81. package/dist/generated/program.js +266 -0
  82. package/dist/generated/program.js.map +1 -0
  83. package/dist/generated/schemas.d.ts +778 -0
  84. package/dist/generated/schemas.d.ts.map +1 -0
  85. package/dist/generated/schemas.js +1005 -0
  86. package/dist/generated/schemas.js.map +1 -0
  87. package/dist/generated/types.d.ts +395 -0
  88. package/dist/generated/types.d.ts.map +1 -0
  89. package/dist/generated/types.js +3 -0
  90. package/dist/generated/types.js.map +1 -0
  91. package/docs/cli-reference.md +328 -28
  92. package/package.json +21 -3
package/cli-contract.yaml CHANGED
@@ -1,9 +1,9 @@
1
1
  # yaml-language-server: $schema=./node_modules/cli-contracts/schemas/cli-contract.schema.json
2
- cliContracts: 0.1.0
2
+ cli_contracts: 0.1.0
3
3
 
4
4
  info:
5
5
  title: micro-contracts CLI
6
- version: 0.14.2
6
+ version: 0.15.0
7
7
  description: >-
8
8
  Contract-first OpenAPI toolchain for TypeScript Web/API systems.
9
9
  Generates contract packages, server routes, and frontend clients
@@ -14,12 +14,29 @@ info:
14
14
  name: foo-ogawa
15
15
  url: https://github.com/foo-ogawa/micro-contracts
16
16
 
17
- commandSets:
17
+ artifact_slots:
18
+ openapi-specs:
19
+ direction: read
20
+ description: OpenAPI specification files
21
+ config:
22
+ direction: read
23
+ description: micro-contracts.config.yaml configuration
24
+ generated-packages:
25
+ direction: write
26
+ description: Generated contract packages, server routes, and frontend clients
27
+ guardrails-config:
28
+ direction: read
29
+ description: guardrails.yaml configuration
30
+ manifest:
31
+ direction: write
32
+ description: Generated manifest (.generated-manifest.json)
33
+
34
+ command_sets:
18
35
  micro-contracts:
19
36
  summary: Contract-first OpenAPI toolchain for TypeScript.
20
37
  executable: micro-contracts
21
38
 
22
- globalOptions:
39
+ global_options:
23
40
  - name: version
24
41
  aliases: [V]
25
42
  description: Print version and exit.
@@ -52,19 +69,19 @@ commandSets:
52
69
  - name: config
53
70
  aliases: [c]
54
71
  description: Path to config file (micro-contracts.config.yaml).
55
- valueName: path
72
+ value_name: path
56
73
  schema:
57
74
  type: string
58
75
  file:
59
76
  mode: read
60
77
  exists: false
61
- mediaType: application/yaml
78
+ media_type: application/yaml
62
79
  encoding: utf-8
63
80
 
64
81
  - name: module
65
82
  aliases: [m]
66
83
  description: Module names, comma-separated. Generates all modules if omitted.
67
- valueName: names
84
+ value_name: names
68
85
  schema:
69
86
  type: string
70
87
 
@@ -108,7 +125,7 @@ commandSets:
108
125
 
109
126
  - name: manifest-dir
110
127
  description: Directory for manifest output.
111
- valueName: path
128
+ value_name: path
112
129
  schema:
113
130
  type: string
114
131
  default: packages/
@@ -135,12 +152,12 @@ commandSets:
135
152
  files:
136
153
  - path: packages/contract/{module}/**/*.ts
137
154
  required: true
138
- mediaType: text/x-typescript
155
+ media_type: text/x-typescript
139
156
  encoding: utf-8
140
157
  description: Generated contract packages.
141
158
  - path: packages/contract-published/{module}/**/*.ts
142
159
  required: false
143
- mediaType: text/x-typescript
160
+ media_type: text/x-typescript
144
161
  encoding: utf-8
145
162
  description: Generated public contract packages.
146
163
 
@@ -150,12 +167,12 @@ commandSets:
150
167
  format: text
151
168
 
152
169
  x-agent:
153
- riskLevel: medium
154
- requiresConfirmation: false
170
+ risk_level: medium
171
+ requires_confirmation: false
155
172
  idempotent: true
156
- sideEffects:
173
+ side_effects:
157
174
  - file_write
158
- recommendedBeforeUse:
175
+ recommended_before_use:
159
176
  - Ensure micro-contracts.config.yaml exists.
160
177
  - Verify OpenAPI specs are valid.
161
178
 
@@ -179,7 +196,7 @@ commandSets:
179
196
  file:
180
197
  mode: read
181
198
  exists: true
182
- mediaType: application/yaml
199
+ media_type: application/yaml
183
200
  encoding: utf-8
184
201
 
185
202
  options:
@@ -201,10 +218,10 @@ commandSets:
201
218
  format: text
202
219
 
203
220
  x-agent:
204
- riskLevel: low
205
- requiresConfirmation: false
221
+ risk_level: low
222
+ requires_confirmation: false
206
223
  idempotent: true
207
- sideEffects: []
224
+ side_effects: []
208
225
 
209
226
  # ── init ─────────────────────────────────────────
210
227
  init:
@@ -232,7 +249,7 @@ commandSets:
232
249
  - name: dir
233
250
  aliases: [d]
234
251
  description: Base directory for server/frontend files.
235
- valueName: path
252
+ value_name: path
236
253
  schema:
237
254
  type: string
238
255
  default: src
@@ -240,19 +257,19 @@ commandSets:
240
257
  - name: openapi
241
258
  aliases: [i]
242
259
  description: OpenAPI spec to process (auto-adds x-micro-contracts-service/method extensions).
243
- valueName: path
260
+ value_name: path
244
261
  schema:
245
262
  type: string
246
263
  file:
247
264
  mode: read
248
265
  exists: true
249
- mediaType: application/yaml
266
+ media_type: application/yaml
250
267
  encoding: utf-8
251
268
 
252
269
  - name: output
253
270
  aliases: [o]
254
271
  description: Output path for processed OpenAPI. Defaults to spec/{name}/openapi/{name}.yaml.
255
- valueName: path
272
+ value_name: path
256
273
  schema:
257
274
  type: string
258
275
 
@@ -276,17 +293,17 @@ commandSets:
276
293
  files:
277
294
  - path: spec/{name}/openapi/{name}.yaml
278
295
  required: false
279
- mediaType: application/yaml
296
+ media_type: application/yaml
280
297
  encoding: utf-8
281
298
  description: OpenAPI spec (created when --openapi provided or --screens used).
282
299
  - path: spec/default/templates/*.hbs
283
300
  required: false
284
- mediaType: text/x-handlebars-template
301
+ media_type: text/x-handlebars-template
285
302
  encoding: utf-8
286
303
  description: Starter Handlebars templates.
287
304
  - path: micro-contracts.config.yaml
288
305
  required: false
289
- mediaType: application/yaml
306
+ media_type: application/yaml
290
307
  encoding: utf-8
291
308
  description: Config file (created if not already present).
292
309
 
@@ -296,10 +313,10 @@ commandSets:
296
313
  format: text
297
314
 
298
315
  x-agent:
299
- riskLevel: medium
300
- requiresConfirmation: false
316
+ risk_level: medium
317
+ requires_confirmation: false
301
318
  idempotent: true
302
- sideEffects:
319
+ side_effects:
303
320
  - file_write
304
321
  - directory_create
305
322
 
@@ -321,19 +338,19 @@ commandSets:
321
338
  options:
322
339
  - name: only
323
340
  description: Run only specific checks (comma-separated check names).
324
- valueName: checks
341
+ value_name: checks
325
342
  schema:
326
343
  type: string
327
344
 
328
345
  - name: skip
329
346
  description: Skip specific checks (comma-separated check names).
330
- valueName: checks
347
+ value_name: checks
331
348
  schema:
332
349
  type: string
333
350
 
334
351
  - name: gate
335
352
  description: Run checks for specific gates only (comma-separated, 1-5).
336
- valueName: gates
353
+ value_name: gates
337
354
  schema:
338
355
  type: string
339
356
 
@@ -353,32 +370,32 @@ commandSets:
353
370
  - name: guardrails
354
371
  aliases: [g]
355
372
  description: Path to guardrails.yaml.
356
- valueName: path
373
+ value_name: path
357
374
  schema:
358
375
  type: string
359
376
  file:
360
377
  mode: read
361
378
  exists: false
362
- mediaType: application/yaml
379
+ media_type: application/yaml
363
380
  encoding: utf-8
364
381
 
365
382
  - name: generated-dir
366
383
  aliases: [d]
367
384
  description: Path to generated files directory.
368
- valueName: path
385
+ value_name: path
369
386
  schema:
370
387
  type: string
371
388
  default: packages/
372
389
 
373
390
  - name: changed-files
374
391
  description: Path to file containing list of changed files (for CI).
375
- valueName: path
392
+ value_name: path
376
393
  schema:
377
394
  type: string
378
395
  file:
379
396
  mode: read
380
397
  exists: true
381
- mediaType: text/plain
398
+ media_type: text/plain
382
399
  encoding: utf-8
383
400
 
384
401
  - name: list
@@ -408,11 +425,11 @@ commandSets:
408
425
  format: text
409
426
 
410
427
  x-agent:
411
- riskLevel: low
412
- requiresConfirmation: false
428
+ risk_level: low
429
+ requires_confirmation: false
413
430
  idempotent: true
414
- sideEffects: []
415
- recommendedBeforeUse:
431
+ side_effects: []
432
+ recommended_before_use:
416
433
  - Run generate first so generated files exist.
417
434
 
418
435
  # ── pipeline ─────────────────────────────────────
@@ -433,13 +450,13 @@ commandSets:
433
450
  - name: config
434
451
  aliases: [c]
435
452
  description: Path to config file (micro-contracts.config.yaml).
436
- valueName: path
453
+ value_name: path
437
454
  schema:
438
455
  type: string
439
456
  file:
440
457
  mode: read
441
458
  exists: false
442
- mediaType: application/yaml
459
+ media_type: application/yaml
443
460
  encoding: utf-8
444
461
 
445
462
  - name: verbose
@@ -451,7 +468,7 @@ commandSets:
451
468
 
452
469
  - name: skip
453
470
  description: Skip specific checks (comma-separated).
454
- valueName: checks
471
+ value_name: checks
455
472
  schema:
456
473
  type: string
457
474
 
@@ -464,19 +481,19 @@ commandSets:
464
481
  - name: guardrails
465
482
  aliases: [g]
466
483
  description: Path to guardrails.yaml.
467
- valueName: path
484
+ value_name: path
468
485
  schema:
469
486
  type: string
470
487
  file:
471
488
  mode: read
472
489
  exists: false
473
- mediaType: application/yaml
490
+ media_type: application/yaml
474
491
  encoding: utf-8
475
492
 
476
493
  - name: generated-dir
477
494
  aliases: [d]
478
495
  description: Path to generated files directory.
479
- valueName: path
496
+ value_name: path
480
497
  schema:
481
498
  type: string
482
499
  default: packages/
@@ -548,12 +565,12 @@ commandSets:
548
565
  format: text
549
566
 
550
567
  x-agent:
551
- riskLevel: medium
552
- requiresConfirmation: false
568
+ risk_level: medium
569
+ requires_confirmation: false
553
570
  idempotent: true
554
- sideEffects:
571
+ side_effects:
555
572
  - file_write
556
- recommendedBeforeUse:
573
+ recommended_before_use:
557
574
  - Ensure micro-contracts.config.yaml and guardrails.yaml exist.
558
575
  - Verify OpenAPI specs are valid.
559
576
 
@@ -576,19 +593,19 @@ commandSets:
576
593
  - name: config
577
594
  aliases: [c]
578
595
  description: Path to config file.
579
- valueName: path
596
+ value_name: path
580
597
  schema:
581
598
  type: string
582
599
  file:
583
600
  mode: read
584
601
  exists: false
585
- mediaType: application/yaml
602
+ media_type: application/yaml
586
603
  encoding: utf-8
587
604
 
588
605
  - name: module
589
606
  aliases: [m]
590
607
  description: Module to analyze.
591
- valueName: name
608
+ value_name: name
592
609
  schema:
593
610
  type: string
594
611
 
@@ -600,13 +617,13 @@ commandSets:
600
617
 
601
618
  - name: impact
602
619
  description: Analyze impact of changing a specific API (e.g., core.User.getUsers).
603
- valueName: ref
620
+ value_name: ref
604
621
  schema:
605
622
  type: string
606
623
 
607
624
  - name: who-depends-on
608
625
  description: Find modules that depend on a specific API.
609
- valueName: ref
626
+ value_name: ref
610
627
  schema:
611
628
  type: string
612
629
 
@@ -628,10 +645,10 @@ commandSets:
628
645
  format: text
629
646
 
630
647
  x-agent:
631
- riskLevel: low
632
- requiresConfirmation: false
648
+ risk_level: low
649
+ requires_confirmation: false
633
650
  idempotent: true
634
- sideEffects: []
651
+ side_effects: []
635
652
 
636
653
  # ── guardrails-init ──────────────────────────────
637
654
  guardrails-init:
@@ -648,7 +665,7 @@ commandSets:
648
665
  - name: output
649
666
  aliases: [o]
650
667
  description: Output path for guardrails.yaml.
651
- valueName: path
668
+ value_name: path
652
669
  schema:
653
670
  type: string
654
671
  default: guardrails.yaml
@@ -661,7 +678,7 @@ commandSets:
661
678
  files:
662
679
  - path: '{options.output}'
663
680
  required: true
664
- mediaType: application/yaml
681
+ media_type: application/yaml
665
682
  encoding: utf-8
666
683
 
667
684
  '1':
@@ -670,10 +687,10 @@ commandSets:
670
687
  format: text
671
688
 
672
689
  x-agent:
673
- riskLevel: low
674
- requiresConfirmation: false
690
+ risk_level: low
691
+ requires_confirmation: false
675
692
  idempotent: false
676
- sideEffects:
693
+ side_effects:
677
694
  - file_write
678
695
 
679
696
  # ── manifest ─────────────────────────────────────
@@ -693,7 +710,7 @@ commandSets:
693
710
  - name: dir
694
711
  aliases: [d]
695
712
  description: Directory to scan.
696
- valueName: path
713
+ value_name: path
697
714
  schema:
698
715
  type: string
699
716
  default: packages/
@@ -707,7 +724,7 @@ commandSets:
707
724
  - name: output
708
725
  aliases: [o]
709
726
  description: Output manifest path. Defaults to {dir}/.generated-manifest.json.
710
- valueName: path
727
+ value_name: path
711
728
  schema:
712
729
  type: string
713
730
 
@@ -719,7 +736,7 @@ commandSets:
719
736
  files:
720
737
  - path: '{options.dir}/.generated-manifest.json'
721
738
  required: false
722
- mediaType: application/json
739
+ media_type: application/json
723
740
  encoding: utf-8
724
741
  description: Generated manifest (not created in verify mode).
725
742
 
@@ -729,8 +746,628 @@ commandSets:
729
746
  format: text
730
747
 
731
748
  x-agent:
732
- riskLevel: low
733
- requiresConfirmation: false
749
+ risk_level: low
750
+ requires_confirmation: false
734
751
  idempotent: true
735
- sideEffects:
752
+ side_effects:
736
753
  - file_write
754
+
755
+ # ── audit-openapi ──────────────────────────────
756
+ audit-openapi:
757
+ path: [audit-openapi]
758
+ summary: Run LLM-based OpenAPI design quality audit.
759
+ description: >-
760
+ Performs a semantic review of OpenAPI specification design quality
761
+ using an LLM agent. Evaluates path design, module boundary alignment,
762
+ schema bloat, CRUD vs use-case orientation, and cross-cutting
763
+ concern coverage. Requires agent-contracts-runtime.
764
+ usage:
765
+ - micro-contracts audit-openapi
766
+ - micro-contracts audit-openapi -m core
767
+ - micro-contracts audit-openapi --adapter cursor --report-format text
768
+ - micro-contracts audit-openapi --show-prompt
769
+
770
+ options:
771
+ - name: config
772
+ aliases: [c]
773
+ description: Path to config file (micro-contracts.config.yaml).
774
+ value_name: path
775
+ schema:
776
+ type: string
777
+ file:
778
+ mode: read
779
+ exists: false
780
+ media_type: application/yaml
781
+ encoding: utf-8
782
+
783
+ - name: module
784
+ aliases: [m]
785
+ description: Module name to audit (default is all modules).
786
+ value_name: name
787
+ schema:
788
+ type: string
789
+
790
+ - name: adapter
791
+ aliases: [a]
792
+ description: SDK adapter to use for LLM execution.
793
+ value_name: name
794
+ schema:
795
+ type: string
796
+ enum: [cursor, claude, openai, gemini, mock]
797
+
798
+ - name: model
799
+ description: LLM model override.
800
+ value_name: name
801
+ schema:
802
+ type: string
803
+
804
+ - name: fail-on
805
+ description: Minimum severity that causes a non-zero exit.
806
+ value_name: level
807
+ schema:
808
+ type: string
809
+ enum: [warning, error, critical]
810
+ default: error
811
+
812
+ - name: output
813
+ aliases: [o]
814
+ description: Write result to a file instead of stdout.
815
+ value_name: file
816
+ schema:
817
+ type: string
818
+ file:
819
+ mode: write
820
+ media_type: application/json
821
+ encoding: utf-8
822
+
823
+ - name: report-format
824
+ description: Output format for the audit report.
825
+ value_name: fmt
826
+ schema:
827
+ type: string
828
+ enum: [json, text, yaml]
829
+ default: text
830
+
831
+ exits:
832
+ '0':
833
+ description: Audit completed, no blocking findings.
834
+ stdout:
835
+ format: '{options.report-format}'
836
+ schema:
837
+ $ref: '#/components/schemas/OpenApiAuditResult'
838
+
839
+ '1':
840
+ description: Unexpected error.
841
+ stderr:
842
+ format: text
843
+
844
+ '3':
845
+ description: Input validation failed (config not found, spec invalid).
846
+ stderr:
847
+ format: text
848
+
849
+ '10':
850
+ description: Completed with blocking findings.
851
+ stdout:
852
+ format: '{options.report-format}'
853
+ schema:
854
+ $ref: '#/components/schemas/OpenApiAuditResult'
855
+
856
+ '11':
857
+ description: Runtime dependency missing (agent-contracts-runtime).
858
+ stderr:
859
+ format: text
860
+
861
+ '12':
862
+ description: LLM provider or adapter error.
863
+ stderr:
864
+ format: text
865
+
866
+ effects:
867
+ reads: [openapi-specs, config]
868
+ writes: []
869
+ network:
870
+ description: LLM API calls when adapter is not mock
871
+ requires_secrets: []
872
+ idempotent: true
873
+
874
+ x-agent:
875
+ risk_level: low
876
+ requires_confirmation: false
877
+ idempotent: true
878
+ side_effects: [network]
879
+ sideEffectNote: >-
880
+ Network calls to LLM provider when adapter is not mock.
881
+ Filesystem write only when --output is specified.
882
+ safe_dry_run_option: show-prompt
883
+ expectedDurationMs: 120000
884
+ retryableExitCodes: [12]
885
+
886
+ # ── review-published ───────────────────────────
887
+ review-published:
888
+ path: [review-published]
889
+ summary: Review published API surface for internal leakage.
890
+ description: >-
891
+ Analyzes the published (public-facing) API specification for
892
+ internal type leakage, backward compatibility risks, and
893
+ x-micro-contracts-non-exportable violations.
894
+ Requires agent-contracts-runtime.
895
+ usage:
896
+ - micro-contracts review-published
897
+ - micro-contracts review-published -m billing
898
+ - micro-contracts review-published --adapter claude --report-format json
899
+
900
+ options:
901
+ - name: config
902
+ aliases: [c]
903
+ description: Path to config file (micro-contracts.config.yaml).
904
+ value_name: path
905
+ schema:
906
+ type: string
907
+ file:
908
+ mode: read
909
+ exists: false
910
+ media_type: application/yaml
911
+ encoding: utf-8
912
+
913
+ - name: module
914
+ aliases: [m]
915
+ description: Module name to review (default is all modules).
916
+ value_name: name
917
+ schema:
918
+ type: string
919
+
920
+ - name: adapter
921
+ aliases: [a]
922
+ description: SDK adapter to use for LLM execution.
923
+ value_name: name
924
+ schema:
925
+ type: string
926
+ enum: [cursor, claude, openai, gemini, mock]
927
+
928
+ - name: model
929
+ description: LLM model override.
930
+ value_name: name
931
+ schema:
932
+ type: string
933
+
934
+ - name: fail-on
935
+ description: Minimum severity that causes a non-zero exit.
936
+ value_name: level
937
+ schema:
938
+ type: string
939
+ enum: [warning, error, critical]
940
+ default: error
941
+
942
+ - name: output
943
+ aliases: [o]
944
+ description: Write result to a file instead of stdout.
945
+ value_name: file
946
+ schema:
947
+ type: string
948
+ file:
949
+ mode: write
950
+ media_type: application/json
951
+ encoding: utf-8
952
+
953
+ - name: report-format
954
+ description: Output format for the review report.
955
+ value_name: fmt
956
+ schema:
957
+ type: string
958
+ enum: [json, text, yaml]
959
+ default: text
960
+
961
+ exits:
962
+ '0':
963
+ description: Review completed, no blocking findings.
964
+ stdout:
965
+ format: '{options.report-format}'
966
+ schema:
967
+ $ref: '#/components/schemas/PublishedReviewResult'
968
+
969
+ '1':
970
+ description: Unexpected error.
971
+ stderr:
972
+ format: text
973
+
974
+ '3':
975
+ description: Input validation failed.
976
+ stderr:
977
+ format: text
978
+
979
+ '10':
980
+ description: Completed with blocking findings.
981
+ stdout:
982
+ format: '{options.report-format}'
983
+ schema:
984
+ $ref: '#/components/schemas/PublishedReviewResult'
985
+
986
+ '11':
987
+ description: Runtime dependency missing (agent-contracts-runtime).
988
+ stderr:
989
+ format: text
990
+
991
+ '12':
992
+ description: LLM provider or adapter error.
993
+ stderr:
994
+ format: text
995
+
996
+ effects:
997
+ reads: [openapi-specs, config, generated-packages]
998
+ writes: []
999
+ network:
1000
+ description: LLM API calls when adapter is not mock
1001
+ requires_secrets: []
1002
+ idempotent: true
1003
+
1004
+ x-agent:
1005
+ risk_level: low
1006
+ requires_confirmation: false
1007
+ idempotent: true
1008
+ side_effects: [network]
1009
+ sideEffectNote: >-
1010
+ Network calls to LLM provider when adapter is not mock.
1011
+ Filesystem write only when --output is specified.
1012
+ safe_dry_run_option: show-prompt
1013
+ expectedDurationMs: 120000
1014
+ retryableExitCodes: [12]
1015
+
1016
+ # ── propose-overlays ───────────────────────────
1017
+ propose-overlays:
1018
+ path: [propose-overlays]
1019
+ summary: Propose cross-cutting overlay candidates.
1020
+ description: >-
1021
+ Analyzes the OpenAPI specification and proposes cross-cutting
1022
+ overlay candidates for authentication, tenancy, rate limiting,
1023
+ audit logging, and other patterns. Verifies proposals do not
1024
+ conflict with existing overlay definitions.
1025
+ Requires agent-contracts-runtime.
1026
+ usage:
1027
+ - micro-contracts propose-overlays
1028
+ - micro-contracts propose-overlays -m core
1029
+ - micro-contracts propose-overlays --adapter openai --report-format json
1030
+
1031
+ options:
1032
+ - name: config
1033
+ aliases: [c]
1034
+ description: Path to config file (micro-contracts.config.yaml).
1035
+ value_name: path
1036
+ schema:
1037
+ type: string
1038
+ file:
1039
+ mode: read
1040
+ exists: false
1041
+ media_type: application/yaml
1042
+ encoding: utf-8
1043
+
1044
+ - name: module
1045
+ aliases: [m]
1046
+ description: Module name to analyze (default is all modules).
1047
+ value_name: name
1048
+ schema:
1049
+ type: string
1050
+
1051
+ - name: adapter
1052
+ aliases: [a]
1053
+ description: SDK adapter to use for LLM execution.
1054
+ value_name: name
1055
+ schema:
1056
+ type: string
1057
+ enum: [cursor, claude, openai, gemini, mock]
1058
+
1059
+ - name: model
1060
+ description: LLM model override.
1061
+ value_name: name
1062
+ schema:
1063
+ type: string
1064
+
1065
+ - name: fail-on
1066
+ description: Minimum severity that causes a non-zero exit.
1067
+ value_name: level
1068
+ schema:
1069
+ type: string
1070
+ enum: [warning, error, critical]
1071
+ default: error
1072
+
1073
+ - name: output
1074
+ aliases: [o]
1075
+ description: Write result to a file instead of stdout.
1076
+ value_name: file
1077
+ schema:
1078
+ type: string
1079
+ file:
1080
+ mode: write
1081
+ media_type: application/json
1082
+ encoding: utf-8
1083
+
1084
+ - name: report-format
1085
+ description: Output format for the proposal report.
1086
+ value_name: fmt
1087
+ schema:
1088
+ type: string
1089
+ enum: [json, text, yaml]
1090
+ default: json
1091
+
1092
+ exits:
1093
+ '0':
1094
+ description: Proposal generated successfully.
1095
+ stdout:
1096
+ format: '{options.report-format}'
1097
+ schema:
1098
+ $ref: '#/components/schemas/OverlayProposalResult'
1099
+
1100
+ '1':
1101
+ description: Unexpected error.
1102
+ stderr:
1103
+ format: text
1104
+
1105
+ '3':
1106
+ description: Input validation failed.
1107
+ stderr:
1108
+ format: text
1109
+
1110
+ '10':
1111
+ description: Completed with blocking findings.
1112
+ stdout:
1113
+ format: '{options.report-format}'
1114
+ schema:
1115
+ $ref: '#/components/schemas/OverlayProposalResult'
1116
+
1117
+ '11':
1118
+ description: Runtime dependency missing (agent-contracts-runtime).
1119
+ stderr:
1120
+ format: text
1121
+
1122
+ '12':
1123
+ description: LLM provider or adapter error.
1124
+ stderr:
1125
+ format: text
1126
+
1127
+ effects:
1128
+ reads: [openapi-specs, config]
1129
+ writes: []
1130
+ network:
1131
+ description: LLM API calls when adapter is not mock
1132
+ requires_secrets: []
1133
+ idempotent: true
1134
+
1135
+ x-agent:
1136
+ risk_level: low
1137
+ requires_confirmation: false
1138
+ idempotent: true
1139
+ side_effects: [network]
1140
+ sideEffectNote: >-
1141
+ Network calls to LLM provider when adapter is not mock.
1142
+ Filesystem write only when --output is specified.
1143
+ safe_dry_run_option: show-prompt
1144
+ expectedDurationMs: 120000
1145
+ retryableExitCodes: [12]
1146
+
1147
+ # ── audit-guardrails ───────────────────────────
1148
+ audit-guardrails:
1149
+ path: [audit-guardrails]
1150
+ summary: Audit guardrails configuration for drift and lint coverage.
1151
+ description: >-
1152
+ Checks that guardrails.yaml configuration covers all generated
1153
+ output directories for drift detection and that OpenAPI lint
1154
+ rules are properly configured. Note: file permission and
1155
+ editing checks have been moved to artifact-contracts.
1156
+ Requires agent-contracts-runtime.
1157
+ usage:
1158
+ - micro-contracts audit-guardrails
1159
+ - micro-contracts audit-guardrails --adapter mock --report-format json
1160
+
1161
+ options:
1162
+ - name: config
1163
+ aliases: [c]
1164
+ description: Path to config file (micro-contracts.config.yaml).
1165
+ value_name: path
1166
+ schema:
1167
+ type: string
1168
+ file:
1169
+ mode: read
1170
+ exists: false
1171
+ media_type: application/yaml
1172
+ encoding: utf-8
1173
+
1174
+ - name: guardrails
1175
+ aliases: [g]
1176
+ description: Path to guardrails.yaml.
1177
+ value_name: path
1178
+ schema:
1179
+ type: string
1180
+ file:
1181
+ mode: read
1182
+ exists: false
1183
+ media_type: application/yaml
1184
+ encoding: utf-8
1185
+
1186
+ - name: adapter
1187
+ aliases: [a]
1188
+ description: SDK adapter to use for LLM execution.
1189
+ value_name: name
1190
+ schema:
1191
+ type: string
1192
+ enum: [cursor, claude, openai, gemini, mock]
1193
+
1194
+ - name: model
1195
+ description: LLM model override.
1196
+ value_name: name
1197
+ schema:
1198
+ type: string
1199
+
1200
+ - name: fail-on
1201
+ description: Minimum severity that causes a non-zero exit.
1202
+ value_name: level
1203
+ schema:
1204
+ type: string
1205
+ enum: [warning, error, critical]
1206
+ default: error
1207
+
1208
+ - name: output
1209
+ aliases: [o]
1210
+ description: Write result to a file instead of stdout.
1211
+ value_name: file
1212
+ schema:
1213
+ type: string
1214
+ file:
1215
+ mode: write
1216
+ media_type: application/json
1217
+ encoding: utf-8
1218
+
1219
+ - name: report-format
1220
+ description: Output format for the audit report.
1221
+ value_name: fmt
1222
+ schema:
1223
+ type: string
1224
+ enum: [json, text, yaml]
1225
+ default: text
1226
+
1227
+ exits:
1228
+ '0':
1229
+ description: Audit completed, no blocking findings.
1230
+ stdout:
1231
+ format: '{options.report-format}'
1232
+ schema:
1233
+ $ref: '#/components/schemas/GuardrailsAuditResult'
1234
+
1235
+ '1':
1236
+ description: Unexpected error.
1237
+ stderr:
1238
+ format: text
1239
+
1240
+ '3':
1241
+ description: Input validation failed (guardrails.yaml not found).
1242
+ stderr:
1243
+ format: text
1244
+
1245
+ '10':
1246
+ description: Completed with blocking findings.
1247
+ stdout:
1248
+ format: '{options.report-format}'
1249
+ schema:
1250
+ $ref: '#/components/schemas/GuardrailsAuditResult'
1251
+
1252
+ '11':
1253
+ description: Runtime dependency missing (agent-contracts-runtime).
1254
+ stderr:
1255
+ format: text
1256
+
1257
+ '12':
1258
+ description: LLM provider or adapter error.
1259
+ stderr:
1260
+ format: text
1261
+
1262
+ effects:
1263
+ reads: [guardrails-config, config]
1264
+ writes: []
1265
+ network:
1266
+ description: LLM API calls when adapter is not mock
1267
+ requires_secrets: []
1268
+ idempotent: true
1269
+
1270
+ x-agent:
1271
+ risk_level: low
1272
+ requires_confirmation: false
1273
+ idempotent: true
1274
+ side_effects: [network]
1275
+ sideEffectNote: >-
1276
+ Network calls to LLM provider when adapter is not mock.
1277
+ Filesystem write only when --output is specified.
1278
+ safe_dry_run_option: show-prompt
1279
+ expectedDurationMs: 120000
1280
+ retryableExitCodes: [12]
1281
+
1282
+ components:
1283
+ schemas:
1284
+ # ── AI Agent Interoperability Schemas ──────────────────
1285
+ AgentEvidence:
1286
+ $ref: 'components.yaml#/schemas/agent-evidence'
1287
+ AgentFinding:
1288
+ $ref: 'components.yaml#/schemas/agent-finding'
1289
+ AgentRecommendedAction:
1290
+ $ref: 'components.yaml#/schemas/agent-recommended-action'
1291
+ OpenApiAuditResult:
1292
+ $ref: 'components.yaml#/schemas/agent-audit-result'
1293
+
1294
+ PublishedReviewResult:
1295
+ type: object
1296
+ description: >-
1297
+ Result from review-published command. Contains published endpoint
1298
+ enumeration and internal type leakage analysis.
1299
+ allOf:
1300
+ - $ref: 'components.yaml#/schemas/agent-audit-result'
1301
+ - type: object
1302
+ required: [publishedEndpoints, leakedInternalTypes]
1303
+ properties:
1304
+ publishedEndpoints:
1305
+ type: array
1306
+ items:
1307
+ type: object
1308
+ required: [operationId, path, method]
1309
+ properties:
1310
+ operationId:
1311
+ type: string
1312
+ path:
1313
+ type: string
1314
+ method:
1315
+ type: string
1316
+ leakedInternalTypes:
1317
+ type: array
1318
+ items:
1319
+ type: object
1320
+ required: [schemaName, referencedBy, reason]
1321
+ properties:
1322
+ schemaName:
1323
+ type: string
1324
+ referencedBy:
1325
+ type: string
1326
+ reason:
1327
+ type: string
1328
+
1329
+ OverlayProposalResult:
1330
+ type: object
1331
+ description: >-
1332
+ Result from propose-overlays command. Contains overlay candidate
1333
+ proposals with endpoint, type, rationale, and suggested config.
1334
+ allOf:
1335
+ - $ref: 'components.yaml#/schemas/agent-audit-result'
1336
+ - type: object
1337
+ required: [overlayCandidates]
1338
+ properties:
1339
+ overlayCandidates:
1340
+ type: array
1341
+ items:
1342
+ type: object
1343
+ required: [endpoint, overlayType, rationale]
1344
+ properties:
1345
+ endpoint:
1346
+ type: string
1347
+ overlayType:
1348
+ type: string
1349
+ enum: [auth, tenancy, rateLimit, auditLog, custom]
1350
+ rationale:
1351
+ type: string
1352
+ suggestedConfig:
1353
+ type: object
1354
+ additionalProperties: true
1355
+
1356
+ GuardrailsAuditResult:
1357
+ type: object
1358
+ description: >-
1359
+ Result from audit-guardrails command. Contains drift detection
1360
+ and lint rule coverage analysis.
1361
+ allOf:
1362
+ - $ref: 'components.yaml#/schemas/agent-audit-result'
1363
+ - type: object
1364
+ required: [coveredPaths, uncoveredPaths]
1365
+ properties:
1366
+ coveredPaths:
1367
+ type: array
1368
+ items:
1369
+ type: string
1370
+ uncoveredPaths:
1371
+ type: array
1372
+ items:
1373
+ type: string