@claudexor/schema 3.0.4 → 3.1.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 (146) hide show
  1. package/dist/agent-capabilities.d.ts +45 -8
  2. package/dist/agent-capabilities.d.ts.map +1 -1
  3. package/dist/agent-capabilities.js +14 -0
  4. package/dist/agent-capabilities.js.map +1 -1
  5. package/dist/apply-eligibility.d.ts +384 -18
  6. package/dist/apply-eligibility.d.ts.map +1 -1
  7. package/dist/apply-eligibility.js +20 -1
  8. package/dist/apply-eligibility.js.map +1 -1
  9. package/dist/budget.d.ts +84 -9
  10. package/dist/budget.d.ts.map +1 -1
  11. package/dist/budget.js +46 -0
  12. package/dist/budget.js.map +1 -1
  13. package/dist/config.d.ts +97 -65
  14. package/dist/config.d.ts.map +1 -1
  15. package/dist/config.js +12 -1
  16. package/dist/config.js.map +1 -1
  17. package/dist/control-operation-responses.d.ts +311 -89
  18. package/dist/control-operation-responses.d.ts.map +1 -1
  19. package/dist/control-operation-responses.js +33 -3
  20. package/dist/control-operation-responses.js.map +1 -1
  21. package/dist/control-run-detail.d.ts +613 -163
  22. package/dist/control-run-detail.d.ts.map +1 -1
  23. package/dist/control-run-detail.js +28 -2
  24. package/dist/control-run-detail.js.map +1 -1
  25. package/dist/control-run-retry.d.ts +1 -1
  26. package/dist/control-run-scope.d.ts +1 -1
  27. package/dist/control-thread-apply.d.ts +10 -0
  28. package/dist/control-thread-apply.d.ts.map +1 -1
  29. package/dist/control.d.ts +791 -232
  30. package/dist/control.d.ts.map +1 -1
  31. package/dist/control.js +76 -2
  32. package/dist/control.js.map +1 -1
  33. package/dist/decision.d.ts +205 -9
  34. package/dist/decision.d.ts.map +1 -1
  35. package/dist/decision.js +69 -1
  36. package/dist/decision.js.map +1 -1
  37. package/dist/deep-scan.d.ts +27 -0
  38. package/dist/deep-scan.d.ts.map +1 -0
  39. package/dist/deep-scan.js +27 -0
  40. package/dist/deep-scan.js.map +1 -0
  41. package/dist/delivery.d.ts +13 -0
  42. package/dist/delivery.d.ts.map +1 -1
  43. package/dist/delivery.js +15 -0
  44. package/dist/delivery.js.map +1 -1
  45. package/dist/effort.d.ts +132 -0
  46. package/dist/effort.d.ts.map +1 -0
  47. package/dist/effort.js +167 -0
  48. package/dist/effort.js.map +1 -0
  49. package/dist/events.d.ts +59 -4
  50. package/dist/events.d.ts.map +1 -1
  51. package/dist/events.js +91 -0
  52. package/dist/events.js.map +1 -1
  53. package/dist/gate.d.ts +2 -2
  54. package/dist/harness.d.ts +209 -28
  55. package/dist/harness.d.ts.map +1 -1
  56. package/dist/harness.js +107 -14
  57. package/dist/harness.js.map +1 -1
  58. package/dist/index.d.ts +4 -0
  59. package/dist/index.d.ts.map +1 -1
  60. package/dist/index.js +4 -0
  61. package/dist/index.js.map +1 -1
  62. package/dist/operation.d.ts +193 -10
  63. package/dist/operation.d.ts.map +1 -1
  64. package/dist/operation.js +45 -0
  65. package/dist/operation.js.map +1 -1
  66. package/dist/output-schema-dialect.d.ts +22 -0
  67. package/dist/output-schema-dialect.d.ts.map +1 -0
  68. package/dist/output-schema-dialect.js +37 -0
  69. package/dist/output-schema-dialect.js.map +1 -0
  70. package/dist/output-schema.d.ts +26 -2
  71. package/dist/output-schema.d.ts.map +1 -1
  72. package/dist/output-schema.js +313 -16
  73. package/dist/output-schema.js.map +1 -1
  74. package/dist/plan.d.ts +2 -2
  75. package/dist/problem.d.ts +3 -3
  76. package/dist/project.d.ts +47 -12
  77. package/dist/project.d.ts.map +1 -1
  78. package/dist/project.js +32 -0
  79. package/dist/project.js.map +1 -1
  80. package/dist/readiness.d.ts +62 -7
  81. package/dist/readiness.d.ts.map +1 -1
  82. package/dist/recovery.d.ts +14 -14
  83. package/dist/review.d.ts +7 -7
  84. package/dist/route.d.ts +2 -2
  85. package/dist/setup.d.ts +288 -94
  86. package/dist/setup.d.ts.map +1 -1
  87. package/dist/setup.js +90 -6
  88. package/dist/setup.js.map +1 -1
  89. package/dist/status-projection.d.ts +79 -4
  90. package/dist/status-projection.d.ts.map +1 -1
  91. package/dist/status-projection.js +161 -4
  92. package/dist/status-projection.js.map +1 -1
  93. package/dist/task.d.ts +70 -53
  94. package/dist/task.d.ts.map +1 -1
  95. package/dist/task.js +18 -8
  96. package/dist/task.js.map +1 -1
  97. package/dist/telemetry.d.ts +795 -32
  98. package/dist/telemetry.d.ts.map +1 -1
  99. package/dist/telemetry.js +177 -4
  100. package/dist/telemetry.js.map +1 -1
  101. package/dist/tool-ref.d.ts +14 -0
  102. package/dist/tool-ref.d.ts.map +1 -1
  103. package/dist/tool-ref.js +15 -0
  104. package/dist/tool-ref.js.map +1 -1
  105. package/dist/work-report.d.ts +131 -0
  106. package/dist/work-report.d.ts.map +1 -0
  107. package/dist/work-report.js +124 -0
  108. package/dist/work-report.js.map +1 -0
  109. package/dist/workspace.d.ts +2 -2
  110. package/generated/AgentCapabilityCatalog.schema.json +39 -8
  111. package/generated/ControlApplyCheckResponse.schema.json +5 -0
  112. package/generated/ControlDeliveryResponse.schema.json +14 -0
  113. package/generated/ControlHarnessListResponse.schema.json +64 -9
  114. package/generated/ControlHarnessSettingsPatch.schema.json +4 -8
  115. package/generated/ControlOperationCatalog.schema.json +74 -0
  116. package/generated/ControlOperationDescriptor.schema.json +74 -0
  117. package/generated/ControlOperationParameter.schema.json +75 -0
  118. package/generated/ControlProjectRemoveReceipt.schema.json +58 -0
  119. package/generated/ControlRunAgainDraft.schema.json +14 -7
  120. package/generated/ControlRunDetail.schema.json +406 -16
  121. package/generated/ControlRunListResponse.schema.json +232 -10
  122. package/generated/ControlRunStartRequest.schema.json +14 -7
  123. package/generated/ControlRunSummary.schema.json +218 -9
  124. package/generated/ControlSettingsSnapshot.schema.json +4 -8
  125. package/generated/ControlSettingsUpdateRequest.schema.json +4 -8
  126. package/generated/ControlSetupJobCreateRequest.schema.json +2 -1
  127. package/generated/ControlSetupJobEvent.schema.json +28 -0
  128. package/generated/ControlSetupJobSnapshot.schema.json +28 -0
  129. package/generated/ControlThreadApplyResponse.schema.json +14 -0
  130. package/generated/ControlThreadDetail.schema.json +94 -1
  131. package/generated/ControlThreadTurnRequest.schema.json +14 -7
  132. package/generated/DecisionRecord.schema.json +178 -2
  133. package/generated/GlobalConfig.schema.json +4 -8
  134. package/generated/HarnessEvent.schema.json +79 -1
  135. package/generated/HarnessManifest.schema.json +64 -9
  136. package/generated/HarnessStatusDto.schema.json +64 -9
  137. package/generated/McpRunHandleResult.schema.json +286 -1
  138. package/generated/McpRunToolResult.schema.json +171 -1
  139. package/generated/ProjectConfig.schema.json +26 -0
  140. package/generated/RoutePoolDegradedPayload.schema.json +79 -0
  141. package/generated/RunEvent.schema.json +8 -1
  142. package/generated/RunFailure.schema.json +23 -1
  143. package/generated/RunTelemetry.schema.json +376 -1
  144. package/generated/StructuredOutputConformance.schema.json +83 -0
  145. package/generated/TaskContract.schema.json +13 -1
  146. package/package.json +2 -2
@@ -902,6 +902,34 @@
902
902
  ],
903
903
  "additionalProperties": false,
904
904
  "description": "Full authoritative setup-job snapshot at this cursor."
905
+ },
906
+ "deviceCode": {
907
+ "type": "object",
908
+ "properties": {
909
+ "flow": {
910
+ "type": "string",
911
+ "enum": [
912
+ "chatgptDeviceCode",
913
+ "chatgpt"
914
+ ]
915
+ },
916
+ "verificationUrl": {
917
+ "type": "string",
918
+ "format": "uri",
919
+ "description": "Where the operator completes the sign-in."
920
+ },
921
+ "userCode": {
922
+ "type": "string",
923
+ "description": "Transient one-time code (empty for the browser-callback flow); never journaled."
924
+ }
925
+ },
926
+ "required": [
927
+ "flow",
928
+ "verificationUrl",
929
+ "userCode"
930
+ ],
931
+ "additionalProperties": false,
932
+ "description": "Transient device-code disclosure overlaid at read time from the runner sidecar; never part of the journaled job."
905
933
  }
906
934
  },
907
935
  "required": [
@@ -864,6 +864,34 @@
864
864
  "minimum": -9007199254740991,
865
865
  "maximum": 9007199254740991,
866
866
  "description": "Global partition sequence fenced by the snapshot."
867
+ },
868
+ "deviceCode": {
869
+ "type": "object",
870
+ "properties": {
871
+ "flow": {
872
+ "type": "string",
873
+ "enum": [
874
+ "chatgptDeviceCode",
875
+ "chatgpt"
876
+ ]
877
+ },
878
+ "verificationUrl": {
879
+ "type": "string",
880
+ "format": "uri",
881
+ "description": "Where the operator completes the sign-in."
882
+ },
883
+ "userCode": {
884
+ "type": "string",
885
+ "description": "Transient one-time code (empty for the browser-callback flow); never journaled."
886
+ }
887
+ },
888
+ "required": [
889
+ "flow",
890
+ "verificationUrl",
891
+ "userCode"
892
+ ],
893
+ "additionalProperties": false,
894
+ "description": "Transient device-code disclosure overlaid at read time from the runner sidecar; never part of the journaled job."
867
895
  }
868
896
  },
869
897
  "required": [
@@ -69,6 +69,20 @@
69
69
  "refused": {
70
70
  "type": "boolean"
71
71
  },
72
+ "alreadyApplied": {
73
+ "type": "boolean",
74
+ "default": false,
75
+ "description": "True when delivery was an idempotent already-applied no-op (no files changed)."
76
+ },
77
+ "deliveryStatus": {
78
+ "type": "string",
79
+ "enum": [
80
+ "applied",
81
+ "already_applied",
82
+ "refused"
83
+ ],
84
+ "description": "Coarse typed delivery disposition (applied / already_applied / refused)."
85
+ },
72
86
  "finalVerify": {
73
87
  "type": "object",
74
88
  "properties": {
@@ -296,6 +296,19 @@
296
296
  "description": "Set when this turn implements an approved plan from an earlier run.",
297
297
  "default": null
298
298
  },
299
+ "planHash": {
300
+ "type": [
301
+ "string",
302
+ "null"
303
+ ],
304
+ "default": null,
305
+ "description": "SHA-256 of the frozen plan bytes this Implement turn materialized (INV-081); null on non-Implement/legacy turns (QA-046)."
306
+ },
307
+ "planReadinessOverridden": {
308
+ "type": "boolean",
309
+ "default": false,
310
+ "description": "True when the operator implemented a not-ready plan over open questions (INV-081); recorded for provenance, rendered on the card (QA-046)."
311
+ },
299
312
  "kind": {
300
313
  "type": "string",
301
314
  "enum": [
@@ -519,7 +532,11 @@
519
532
  "stuck_no_progress",
520
533
  "wall_clock_exceeded",
521
534
  "user_cancelled",
522
- "crash_interrupted"
535
+ "crash_interrupted",
536
+ "input_required",
537
+ "work_incomplete",
538
+ "context_capacity_exhausted",
539
+ "work_report_contract"
523
540
  ],
524
541
  "description": "Typed reason qualifying a non-clean terminal; null on a clean success."
525
542
  },
@@ -529,6 +546,82 @@
529
546
  ],
530
547
  "description": "Typed reason qualifying a non-clean terminal; null on a clean success.",
531
548
  "default": null
549
+ },
550
+ "work_state": {
551
+ "type": "object",
552
+ "properties": {
553
+ "state": {
554
+ "type": "string",
555
+ "enum": [
556
+ "completed",
557
+ "needs_input",
558
+ "incomplete",
559
+ "unverified"
560
+ ],
561
+ "description": "Folded work state: the WorkReport state, or unverified when no report was obtainable (transport unsupported / lane gated)."
562
+ },
563
+ "source": {
564
+ "type": "string",
565
+ "enum": [
566
+ "constrained",
567
+ "validated",
568
+ "absent"
569
+ ],
570
+ "description": "Provenance of a WorkReport: constrained (native schema transport), validated (whole-answer JSON), or absent (no transport could carry one — a disclosed absence, not a failure)."
571
+ },
572
+ "required_inputs": {
573
+ "type": "array",
574
+ "items": {
575
+ "type": "object",
576
+ "properties": {
577
+ "kind": {
578
+ "type": "string",
579
+ "enum": [
580
+ "file",
581
+ "context",
582
+ "credential",
583
+ "permission",
584
+ "decision",
585
+ "external_dependency"
586
+ ],
587
+ "description": "Category of a missing input a needs_input/incomplete report lists: a file, additional context, a credential, a permission, a human decision, or an external dependency."
588
+ },
589
+ "locator": {
590
+ "anyOf": [
591
+ {
592
+ "type": "string",
593
+ "maxLength": 512
594
+ },
595
+ {
596
+ "type": "null"
597
+ }
598
+ ],
599
+ "default": null,
600
+ "description": "Concrete pointer to the missing thing (path/url/name); null when unnameable."
601
+ },
602
+ "description": {
603
+ "type": "string",
604
+ "maxLength": 1024,
605
+ "description": "Human-readable description of what is needed and why."
606
+ }
607
+ },
608
+ "required": [
609
+ "kind",
610
+ "description"
611
+ ],
612
+ "additionalProperties": false,
613
+ "description": "One blocking input a needs_input/incomplete WorkReport lists."
614
+ },
615
+ "maxItems": 16,
616
+ "description": "Carried through from a needs_input/incomplete WorkReport for honest disclosure."
617
+ }
618
+ },
619
+ "required": [
620
+ "state",
621
+ "source"
622
+ ],
623
+ "additionalProperties": false,
624
+ "description": "D-16 model-attested work outcome, orthogonal to lifecycle; a needs_input/incomplete state vetoes applyability and exit 0. Absent on runs with no work_report transport."
532
625
  }
533
626
  },
534
627
  "required": [
@@ -82,15 +82,22 @@
82
82
  },
83
83
  "effort": {
84
84
  "type": "string",
85
- "enum": [
86
- "low",
87
- "medium",
88
- "high",
89
- "xhigh",
90
- "max"
91
- ],
85
+ "minLength": 1,
86
+ "maxLength": 32,
87
+ "pattern": "^[a-z0-9]+(?:[_-][a-z0-9]+)*$",
92
88
  "description": "Requested reasoning effort."
93
89
  },
90
+ "efforts": {
91
+ "type": "object",
92
+ "additionalProperties": {
93
+ "$ref": "#/definitions/ControlThreadTurnRequest/properties/effort"
94
+ },
95
+ "propertyNames": {
96
+ "minLength": 1,
97
+ "pattern": "\\S"
98
+ },
99
+ "description": "Harness-scoped effort map (harness id to effort); an entry here wins over the scalar effort and the per-harness settings default."
100
+ },
94
101
  "reviewerModels": {
95
102
  "type": "object",
96
103
  "additionalProperties": {
@@ -71,7 +71,11 @@
71
71
  "stuck_no_progress",
72
72
  "wall_clock_exceeded",
73
73
  "user_cancelled",
74
- "crash_interrupted"
74
+ "crash_interrupted",
75
+ "input_required",
76
+ "work_incomplete",
77
+ "context_capacity_exhausted",
78
+ "work_report_contract"
75
79
  ],
76
80
  "description": "Typed reason qualifying a non-clean terminal; null on a clean success."
77
81
  },
@@ -81,6 +85,82 @@
81
85
  ],
82
86
  "description": "Typed reason qualifying a non-clean terminal; null on a clean success.",
83
87
  "default": null
88
+ },
89
+ "work_state": {
90
+ "type": "object",
91
+ "properties": {
92
+ "state": {
93
+ "type": "string",
94
+ "enum": [
95
+ "completed",
96
+ "needs_input",
97
+ "incomplete",
98
+ "unverified"
99
+ ],
100
+ "description": "Folded work state: the WorkReport state, or unverified when no report was obtainable (transport unsupported / lane gated)."
101
+ },
102
+ "source": {
103
+ "type": "string",
104
+ "enum": [
105
+ "constrained",
106
+ "validated",
107
+ "absent"
108
+ ],
109
+ "description": "Provenance of a WorkReport: constrained (native schema transport), validated (whole-answer JSON), or absent (no transport could carry one — a disclosed absence, not a failure)."
110
+ },
111
+ "required_inputs": {
112
+ "type": "array",
113
+ "items": {
114
+ "type": "object",
115
+ "properties": {
116
+ "kind": {
117
+ "type": "string",
118
+ "enum": [
119
+ "file",
120
+ "context",
121
+ "credential",
122
+ "permission",
123
+ "decision",
124
+ "external_dependency"
125
+ ],
126
+ "description": "Category of a missing input a needs_input/incomplete report lists: a file, additional context, a credential, a permission, a human decision, or an external dependency."
127
+ },
128
+ "locator": {
129
+ "anyOf": [
130
+ {
131
+ "type": "string",
132
+ "maxLength": 512
133
+ },
134
+ {
135
+ "type": "null"
136
+ }
137
+ ],
138
+ "default": null,
139
+ "description": "Concrete pointer to the missing thing (path/url/name); null when unnameable."
140
+ },
141
+ "description": {
142
+ "type": "string",
143
+ "maxLength": 1024,
144
+ "description": "Human-readable description of what is needed and why."
145
+ }
146
+ },
147
+ "required": [
148
+ "kind",
149
+ "description"
150
+ ],
151
+ "additionalProperties": false,
152
+ "description": "One blocking input a needs_input/incomplete WorkReport lists."
153
+ },
154
+ "maxItems": 16,
155
+ "description": "Carried through from a needs_input/incomplete WorkReport for honest disclosure."
156
+ }
157
+ },
158
+ "required": [
159
+ "state",
160
+ "source"
161
+ ],
162
+ "additionalProperties": false,
163
+ "description": "D-16 model-attested work outcome, orthogonal to lifecycle; a needs_input/incomplete state vetoes applyability and exit 0. Absent on runs with no work_report transport."
84
164
  }
85
165
  },
86
166
  "required": [
@@ -102,6 +182,84 @@
102
182
  "default": {},
103
183
  "description": "Per-candidate reasons the others lost, keyed by candidate id."
104
184
  },
185
+ "ranking_policy_version": {
186
+ "type": "integer",
187
+ "exclusiveMinimum": 0,
188
+ "default": 1,
189
+ "description": "Version of the ranking axis registry the scorecard was produced under."
190
+ },
191
+ "score_axes": {
192
+ "type": "array",
193
+ "items": {
194
+ "type": "string"
195
+ },
196
+ "default": [],
197
+ "description": "Every compared ranking axis key, in precedence (best-first) order."
198
+ },
199
+ "ranking_scorecard": {
200
+ "type": "array",
201
+ "items": {
202
+ "type": "object",
203
+ "properties": {
204
+ "attempt_id": {
205
+ "type": "string",
206
+ "minLength": 1,
207
+ "description": "Candidate attempt id (stable key; labels may localize)."
208
+ },
209
+ "label": {
210
+ "type": "string",
211
+ "description": "Anonymized candidate label shown to the arbiter."
212
+ },
213
+ "axes": {
214
+ "type": "object",
215
+ "additionalProperties": {
216
+ "type": "string"
217
+ },
218
+ "description": "Formatted value for every ranking axis, keyed by axis key."
219
+ }
220
+ },
221
+ "required": [
222
+ "attempt_id",
223
+ "label",
224
+ "axes"
225
+ ],
226
+ "additionalProperties": false
227
+ },
228
+ "default": [],
229
+ "description": "Per-candidate full ranking scorecard, in final ranking order."
230
+ },
231
+ "decisive_axis": {
232
+ "anyOf": [
233
+ {
234
+ "type": "object",
235
+ "properties": {
236
+ "key": {
237
+ "type": "string",
238
+ "description": "The first ranking axis that separated winner from runner-up."
239
+ },
240
+ "winner_value": {
241
+ "type": "string",
242
+ "description": "The winner's formatted value on the decisive axis."
243
+ },
244
+ "runner_up_value": {
245
+ "type": "string",
246
+ "description": "The runner-up's formatted value on the decisive axis."
247
+ }
248
+ },
249
+ "required": [
250
+ "key",
251
+ "winner_value",
252
+ "runner_up_value"
253
+ ],
254
+ "additionalProperties": false
255
+ },
256
+ {
257
+ "type": "null"
258
+ }
259
+ ],
260
+ "default": null,
261
+ "description": "The axis that actually decided the winner vs the runner-up; null on an exact tie (route order decided, disclosed in final_checks)."
262
+ },
105
263
  "accepted_risks": {
106
264
  "type": "array",
107
265
  "items": {
@@ -141,12 +299,30 @@
141
299
  "type": "boolean",
142
300
  "default": false,
143
301
  "description": "True when any of the spend is token-derived rather than natively reported."
302
+ },
303
+ "cash_usd": {
304
+ "type": [
305
+ "number",
306
+ "null"
307
+ ],
308
+ "default": null,
309
+ "description": "Settled cash spend in USD (0 on native-subscription routes); null when unknown."
310
+ },
311
+ "valuation_usd": {
312
+ "type": [
313
+ "number",
314
+ "null"
315
+ ],
316
+ "default": null,
317
+ "description": "Settled subscription-equivalent valuation in USD (includes the reviewer panel); null when unknown."
144
318
  }
145
319
  },
146
320
  "additionalProperties": false,
147
321
  "default": {
148
322
  "spend_usd": null,
149
- "estimated": false
323
+ "estimated": false,
324
+ "cash_usd": null,
325
+ "valuation_usd": null
150
326
  },
151
327
  "description": "Settled spend for the run; estimates are disclosed, never presented as exact."
152
328
  },
@@ -94,14 +94,10 @@
94
94
  },
95
95
  "effort": {
96
96
  "type": "string",
97
- "enum": [
98
- "low",
99
- "medium",
100
- "high",
101
- "xhigh",
102
- "max"
103
- ],
104
- "description": "Cross-harness reasoning-effort level, weakest to strongest; adapters declare the subset they support and a shared normalizer clamps requests onto the nearest supported level."
97
+ "minLength": 1,
98
+ "maxLength": 32,
99
+ "pattern": "^[a-z0-9]+(?:[_-][a-z0-9]+)*$",
100
+ "description": "Cross-harness reasoning-effort level as a lowercase slug (open vocabulary, mirroring the vendor contract); adapters advertise the levels they accept per model, ordered weakest to strongest by the vendor itself, and a shared normalizer passes advertised levels through, clamps inside the vendor order, and refuses levels the advertised ladder has never seen."
105
101
  }
106
102
  },
107
103
  "required": [
@@ -18,9 +18,10 @@
18
18
  "usage",
19
19
  "error",
20
20
  "status",
21
+ "context",
21
22
  "completed"
22
23
  ],
23
- "description": "Normalized event type covering session lifecycle, output, tool use, interaction, file changes, usage, transient status, and errors."
24
+ "description": "Normalized event type covering session lifecycle, output, tool use, interaction, file changes, usage, transient status, context-management signals, and errors."
24
25
  },
25
26
  "session_id": {
26
27
  "type": "string",
@@ -88,6 +89,15 @@
88
89
  "exit_code": {
89
90
  "type": "integer",
90
91
  "description": "Process exit code for command tools, when known."
92
+ },
93
+ "web_retrieval": {
94
+ "type": "string",
95
+ "enum": [
96
+ "verified",
97
+ "dispatched",
98
+ "failed"
99
+ ],
100
+ "description": "Adapter-stamped web/browser retrieval outcome (verified/dispatched/failed), distinct from the tool-call status lifecycle."
91
101
  }
92
102
  },
93
103
  "required": [
@@ -581,6 +591,74 @@
581
591
  "additionalProperties": false,
582
592
  "description": "Typed transient-failure signal set by the adapter from native CLI/API error shapes, consumed for bounded retry policy."
583
593
  },
594
+ "context": {
595
+ "type": "object",
596
+ "properties": {
597
+ "kind": {
598
+ "type": "string",
599
+ "enum": [
600
+ "compaction_started",
601
+ "compaction_completed",
602
+ "capacity_exhausted"
603
+ ],
604
+ "description": "Kind of context signal: a compaction boundary starting/completing, or terminal capacity exhaustion."
605
+ },
606
+ "cause": {
607
+ "type": "string",
608
+ "enum": [
609
+ "prompt_too_long",
610
+ "repeated_refill",
611
+ "blocking_limit",
612
+ "window_exceeded",
613
+ "unknown"
614
+ ],
615
+ "default": "unknown",
616
+ "description": "Why the context signal fired, mapped onto a typed cause (never prose)."
617
+ },
618
+ "native_code": {
619
+ "type": [
620
+ "string",
621
+ "null"
622
+ ],
623
+ "default": null,
624
+ "description": "The vendor's own terminal/context code passed verbatim as evidence; null when none."
625
+ },
626
+ "trigger": {
627
+ "anyOf": [
628
+ {
629
+ "type": "string",
630
+ "enum": [
631
+ "manual",
632
+ "auto"
633
+ ]
634
+ },
635
+ {
636
+ "type": "null"
637
+ }
638
+ ],
639
+ "default": null,
640
+ "description": "Whether the compaction was manually or automatically triggered; null when unreported."
641
+ },
642
+ "pre_tokens": {
643
+ "anyOf": [
644
+ {
645
+ "type": "integer",
646
+ "minimum": 0
647
+ },
648
+ {
649
+ "type": "null"
650
+ }
651
+ ],
652
+ "default": null,
653
+ "description": "Token count before the compaction/exhaustion, when the vendor reports it; null otherwise."
654
+ }
655
+ },
656
+ "required": [
657
+ "kind"
658
+ ],
659
+ "additionalProperties": false,
660
+ "description": "Typed context-management signal (compaction boundary / capacity exhaustion) set by the adapter; orthogonal to the transient-retry taxonomy."
661
+ },
584
662
  "error": {
585
663
  "type": "string",
586
664
  "description": "Error text for error events."
@@ -326,21 +326,76 @@
326
326
  "default": false,
327
327
  "description": "The harness can constrain its final message to a caller-supplied JSON Schema (native structured-output flag)."
328
328
  },
329
+ "work_report_transport": {
330
+ "type": "string",
331
+ "enum": [
332
+ "constrained",
333
+ "validated",
334
+ "unsupported"
335
+ ],
336
+ "default": "unsupported",
337
+ "description": "How the harness carries the D-16 WorkReport envelope: constrained (native schema transport), validated (whole-answer JSON), or unsupported (work_state stays unverified)."
338
+ },
339
+ "structured_output_channel": {
340
+ "type": "string",
341
+ "enum": [
342
+ "side_tool",
343
+ "final_message"
344
+ ],
345
+ "default": "final_message",
346
+ "description": "Where a schema-constrained answer surfaces: side_tool (rides a tool; final message stays markdown) or final_message (constrains the final message itself)."
347
+ },
329
348
  "effort_levels": {
330
349
  "type": "array",
331
350
  "items": {
332
351
  "type": "string",
333
- "enum": [
334
- "low",
335
- "medium",
336
- "high",
337
- "xhigh",
338
- "max"
339
- ],
340
- "description": "Cross-harness reasoning-effort level, weakest to strongest; adapters declare the subset they support and a shared normalizer clamps requests onto the nearest supported level."
352
+ "minLength": 1,
353
+ "maxLength": 32,
354
+ "pattern": "^[a-z0-9]+(?:[_-][a-z0-9]+)*$",
355
+ "description": "Cross-harness reasoning-effort level as a lowercase slug (open vocabulary, mirroring the vendor contract); adapters advertise the levels they accept per model, ordered weakest to strongest by the vendor itself, and a shared normalizer passes advertised levels through, clamps inside the vendor order, and refuses levels the advertised ladder has never seen."
341
356
  },
342
357
  "default": [],
343
- "description": "Ordered (weakest to strongest) reasoning-effort levels this harness actually accepts; empty means effort is not a tunable surface."
358
+ "description": "Ordered (weakest to strongest) reasoning-effort levels this harness accepts across all its models; empty means effort is not a tunable surface."
359
+ },
360
+ "model_effort_levels": {
361
+ "type": "object",
362
+ "additionalProperties": {
363
+ "type": "object",
364
+ "properties": {
365
+ "levels": {
366
+ "type": "array",
367
+ "items": {
368
+ "$ref": "#/definitions/HarnessManifest/properties/capabilities/properties/effort_levels/items"
369
+ },
370
+ "default": [],
371
+ "description": "Ordered (weakest to strongest) reasoning-effort levels this model advertises, in the vendor's own order."
372
+ },
373
+ "default": {
374
+ "anyOf": [
375
+ {
376
+ "$ref": "#/definitions/HarnessManifest/properties/capabilities/properties/effort_levels/items"
377
+ },
378
+ {
379
+ "type": "null"
380
+ }
381
+ ],
382
+ "description": "The effort level the vendor uses for this model when none is requested.",
383
+ "default": null
384
+ }
385
+ },
386
+ "additionalProperties": false,
387
+ "description": "Reasoning-effort vocabulary a single model advertises."
388
+ },
389
+ "default": {},
390
+ "description": "Per-model advertised reasoning-effort vocabulary keyed by model id; a model absent here falls back to the harness-wide effort_levels union."
391
+ },
392
+ "effort_levels_verified_against": {
393
+ "type": [
394
+ "string",
395
+ "null"
396
+ ],
397
+ "default": null,
398
+ "description": "Vendor CLI version the effort ladders were last verified against; null = never verified / not applicable."
344
399
  },
345
400
  "known_models": {
346
401
  "type": "array",