@claudexor/schema 4.8.2 → 5.0.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 (190) hide show
  1. package/dist/account-resources.d.ts +325 -56
  2. package/dist/account-resources.d.ts.map +1 -1
  3. package/dist/account-resources.js +35 -5
  4. package/dist/account-resources.js.map +1 -1
  5. package/dist/account-routing-evidence.d.ts +253 -45
  6. package/dist/account-routing-evidence.d.ts.map +1 -1
  7. package/dist/account-target.d.ts +19 -5
  8. package/dist/account-target.d.ts.map +1 -1
  9. package/dist/account-target.js +14 -1
  10. package/dist/account-target.js.map +1 -1
  11. package/dist/agent-capabilities.d.ts +183 -0
  12. package/dist/agent-capabilities.d.ts.map +1 -1
  13. package/dist/agent-capabilities.js +2 -0
  14. package/dist/agent-capabilities.js.map +1 -1
  15. package/dist/budget.d.ts +3 -0
  16. package/dist/budget.d.ts.map +1 -1
  17. package/dist/budget.js +5 -1
  18. package/dist/budget.js.map +1 -1
  19. package/dist/capture-inventory.d.ts +60 -0
  20. package/dist/capture-inventory.d.ts.map +1 -0
  21. package/dist/capture-inventory.js +57 -0
  22. package/dist/capture-inventory.js.map +1 -0
  23. package/dist/control-harness-list.d.ts +102 -18
  24. package/dist/control-harness-list.d.ts.map +1 -1
  25. package/dist/control-harness-models.d.ts +299 -6
  26. package/dist/control-harness-models.d.ts.map +1 -1
  27. package/dist/control-harness-models.js +12 -3
  28. package/dist/control-harness-models.js.map +1 -1
  29. package/dist/control-operation-responses.d.ts +606 -23
  30. package/dist/control-operation-responses.d.ts.map +1 -1
  31. package/dist/control-operation-responses.js +3 -0
  32. package/dist/control-operation-responses.js.map +1 -1
  33. package/dist/control-run-detail.d.ts +1178 -72
  34. package/dist/control-run-detail.d.ts.map +1 -1
  35. package/dist/control-run-event-part.d.ts +3 -3
  36. package/dist/control-run-event-part.js +1 -1
  37. package/dist/control-run-event-part.js.map +1 -1
  38. package/dist/control-run-failure.d.ts +276 -12
  39. package/dist/control-run-failure.d.ts.map +1 -1
  40. package/dist/control-run-failure.js +54 -16
  41. package/dist/control-run-failure.js.map +1 -1
  42. package/dist/control-run-message.js +1 -1
  43. package/dist/control-run-message.js.map +1 -1
  44. package/dist/control-thread-apply.d.ts +165 -0
  45. package/dist/control-thread-apply.d.ts.map +1 -1
  46. package/dist/control-timeline.d.ts.map +1 -1
  47. package/dist/control-timeline.js +7 -3
  48. package/dist/control-timeline.js.map +1 -1
  49. package/dist/control.d.ts +383 -42
  50. package/dist/control.d.ts.map +1 -1
  51. package/dist/control.js +9 -5
  52. package/dist/control.js.map +1 -1
  53. package/dist/credential-profile-snapshot.d.ts +506 -90
  54. package/dist/credential-profile-snapshot.d.ts.map +1 -1
  55. package/dist/decision.d.ts +9 -9
  56. package/dist/decision.d.ts.map +1 -1
  57. package/dist/decision.js +4 -0
  58. package/dist/decision.js.map +1 -1
  59. package/dist/delivery.d.ts +162 -0
  60. package/dist/delivery.d.ts.map +1 -1
  61. package/dist/delivery.js +32 -0
  62. package/dist/delivery.js.map +1 -1
  63. package/dist/events.d.ts +7 -6
  64. package/dist/events.d.ts.map +1 -1
  65. package/dist/events.js +10 -8
  66. package/dist/events.js.map +1 -1
  67. package/dist/git-result.d.ts +99 -0
  68. package/dist/git-result.d.ts.map +1 -0
  69. package/dist/git-result.js +80 -0
  70. package/dist/git-result.js.map +1 -0
  71. package/dist/harness-model.d.ts +89 -0
  72. package/dist/harness-model.d.ts.map +1 -1
  73. package/dist/harness-model.js +83 -0
  74. package/dist/harness-model.js.map +1 -1
  75. package/dist/harness.d.ts +353 -35
  76. package/dist/harness.d.ts.map +1 -1
  77. package/dist/harness.js +4 -19
  78. package/dist/harness.js.map +1 -1
  79. package/dist/index.d.ts +4 -0
  80. package/dist/index.d.ts.map +1 -1
  81. package/dist/index.js +4 -0
  82. package/dist/index.js.map +1 -1
  83. package/dist/mcp-run-result.d.ts +620 -51
  84. package/dist/mcp-run-result.d.ts.map +1 -1
  85. package/dist/mcp-run-result.js +45 -5
  86. package/dist/mcp-run-result.js.map +1 -1
  87. package/dist/mcp-run-wait.d.ts +7 -7
  88. package/dist/primitives.d.ts.map +1 -1
  89. package/dist/primitives.js +3 -2
  90. package/dist/primitives.js.map +1 -1
  91. package/dist/project.d.ts +45 -1
  92. package/dist/project.d.ts.map +1 -1
  93. package/dist/project.js +26 -1
  94. package/dist/project.js.map +1 -1
  95. package/dist/quota-read.d.ts +6 -3
  96. package/dist/quota-read.d.ts.map +1 -1
  97. package/dist/quota-read.js +7 -1
  98. package/dist/quota-read.js.map +1 -1
  99. package/dist/quota-scope.d.ts +29 -0
  100. package/dist/quota-scope.d.ts.map +1 -0
  101. package/dist/quota-scope.js +95 -0
  102. package/dist/quota-scope.js.map +1 -0
  103. package/dist/rate-limit.d.ts +3 -0
  104. package/dist/rate-limit.d.ts.map +1 -1
  105. package/dist/rate-limit.js +5 -1
  106. package/dist/rate-limit.js.map +1 -1
  107. package/dist/raw.d.ts +223 -1
  108. package/dist/raw.d.ts.map +1 -1
  109. package/dist/raw.js +86 -0
  110. package/dist/raw.js.map +1 -1
  111. package/dist/readiness.d.ts +87 -18
  112. package/dist/readiness.d.ts.map +1 -1
  113. package/dist/readiness.js +7 -6
  114. package/dist/readiness.js.map +1 -1
  115. package/dist/route-health.d.ts +303 -0
  116. package/dist/route-health.d.ts.map +1 -0
  117. package/dist/route-health.js +71 -0
  118. package/dist/route-health.js.map +1 -0
  119. package/dist/run-continuity.d.ts +3 -0
  120. package/dist/run-continuity.d.ts.map +1 -1
  121. package/dist/run-continuity.js +4 -0
  122. package/dist/run-continuity.js.map +1 -1
  123. package/dist/run-facts.d.ts +5 -5
  124. package/dist/run-facts.d.ts.map +1 -1
  125. package/dist/run-facts.js +1 -0
  126. package/dist/run-facts.js.map +1 -1
  127. package/dist/setup-login.d.ts +1 -1
  128. package/dist/setup-login.js +1 -1
  129. package/dist/setup.d.ts +1 -1
  130. package/dist/setup.js +1 -1
  131. package/dist/status-projection.d.ts.map +1 -1
  132. package/dist/status-projection.js +3 -0
  133. package/dist/status-projection.js.map +1 -1
  134. package/dist/telemetry.d.ts +239 -7
  135. package/dist/telemetry.d.ts.map +1 -1
  136. package/dist/telemetry.js +4 -2
  137. package/dist/telemetry.js.map +1 -1
  138. package/dist/thread-history.d.ts +1109 -161
  139. package/dist/thread-history.d.ts.map +1 -1
  140. package/dist/thread-history.js +1 -1
  141. package/dist/thread-history.js.map +1 -1
  142. package/dist/tool-ref.d.ts +94 -3
  143. package/dist/tool-ref.d.ts.map +1 -1
  144. package/dist/tool-ref.js +98 -6
  145. package/dist/tool-ref.js.map +1 -1
  146. package/generated/AgentCapabilityCatalog.schema.json +54 -0
  147. package/generated/BudgetObservation.schema.json +8 -1
  148. package/generated/ControlAccountResetResponse.schema.json +60 -1
  149. package/generated/ControlAccountResourcesFreshnessResponse.schema.json +46 -2
  150. package/generated/ControlAccountResourcesResponse.schema.json +46 -2
  151. package/generated/ControlApplyCheckResponse.schema.json +47 -0
  152. package/generated/ControlCredentialProfilesQueryResponse.schema.json +105 -4
  153. package/generated/ControlCredentialProfilesResourcesResponse.schema.json +105 -4
  154. package/generated/ControlCredentialProfilesSnapshotResponse.schema.json +59 -2
  155. package/generated/ControlDeliveryResponse.schema.json +154 -0
  156. package/generated/ControlHarnessAccountCatalog.schema.json +13 -0
  157. package/generated/ControlHarnessAccountModelsResponse.schema.json +13 -0
  158. package/generated/ControlHarnessListResponse.schema.json +59 -2
  159. package/generated/ControlHarnessModelsQueryResponse.schema.json +97 -51
  160. package/generated/ControlHarnessModelsResponse.schema.json +96 -0
  161. package/generated/ControlProjectRemoveReceipt.schema.json +36 -0
  162. package/generated/ControlQuotaQueryResponse.schema.json +46 -2
  163. package/generated/ControlQuotaReadRequest.schema.json +4 -0
  164. package/generated/ControlQuotaRefreshRequest.schema.json +12 -3
  165. package/generated/ControlRouteHealth.schema.json +202 -0
  166. package/generated/ControlRunDetail.schema.json +344 -5
  167. package/generated/ControlRunEventPart.schema.json +3 -2
  168. package/generated/ControlRunListResponse.schema.json +341 -2
  169. package/generated/ControlRunMessageRequest.schema.json +1 -1
  170. package/generated/ControlRunSummary.schema.json +341 -2
  171. package/generated/ControlThreadApplyResponse.schema.json +154 -0
  172. package/generated/ControlThreadDetail.schema.json +1 -0
  173. package/generated/DecisionRecord.schema.json +1 -0
  174. package/generated/HarnessEvent.schema.json +189 -5
  175. package/generated/HarnessManifest.schema.json +57 -0
  176. package/generated/HarnessModel.schema.json +13 -0
  177. package/generated/HarnessStatusDto.schema.json +59 -2
  178. package/generated/JournaledRunCreatedPayload.schema.json +2 -2
  179. package/generated/McpAccountsToolResult.schema.json +105 -4
  180. package/generated/McpRunHandleResult.schema.json +279 -2
  181. package/generated/McpRunToolResult.schema.json +269 -0
  182. package/generated/McpRunWaitResult.schema.json +2 -1
  183. package/generated/RawContextPacket.schema.json +98 -0
  184. package/generated/RunContinuityReceipt.schema.json +8 -0
  185. package/generated/RunEvent.schema.json +2 -1
  186. package/generated/RunFacts.schema.json +1 -0
  187. package/generated/RunFailure.schema.json +201 -0
  188. package/generated/RunTelemetry.schema.json +123 -2
  189. package/generated/ThreadHistoryPage.schema.json +203 -1
  190. package/package.json +2 -2
@@ -391,8 +391,16 @@
391
391
  "minLength": 1
392
392
  },
393
393
  "profile_id": {
394
- "type": "string",
395
- "minLength": 1
394
+ "anyOf": [
395
+ {
396
+ "type": "string",
397
+ "minLength": 1
398
+ },
399
+ {
400
+ "type": "null"
401
+ }
402
+ ],
403
+ "description": "Registered account id; null names the harness's default API-key route, which is not an account."
396
404
  }
397
405
  },
398
406
  "required": [
@@ -401,6 +409,11 @@
401
409
  ],
402
410
  "additionalProperties": false
403
411
  },
412
+ "credential_fingerprint": {
413
+ "type": "string",
414
+ "pattern": "^[0-9a-f]{16}$",
415
+ "description": "Non-secret identity of the API key this row was read with. Present only on API-key rows; a row is published only while it matches the key requests would send now."
416
+ },
404
417
  "balances": {
405
418
  "type": "object",
406
419
  "properties": {
@@ -632,6 +645,37 @@
632
645
  "string",
633
646
  "null"
634
647
  ]
648
+ },
649
+ "capped": {
650
+ "type": [
651
+ "boolean",
652
+ "null"
653
+ ],
654
+ "description": "true: the provider reports a cap in limit; false: it reports no cap, so a null limit is not unknown and not unlimited money; null or absent: not established."
655
+ },
656
+ "remaining": {
657
+ "type": [
658
+ "string",
659
+ "null"
660
+ ],
661
+ "description": "Provider-reported amount left under limit in the current window, with its sign; null when not reported."
662
+ },
663
+ "window": {
664
+ "anyOf": [
665
+ {
666
+ "type": "string",
667
+ "enum": [
668
+ "day",
669
+ "week",
670
+ "month",
671
+ "lifetime"
672
+ ]
673
+ },
674
+ {
675
+ "type": "null"
676
+ }
677
+ ],
678
+ "description": "Provider calendar window that used counts (UTC); when capped, limit resets at its end and lifetime never resets. resets_at is set only from a provider-reported instant."
635
679
  }
636
680
  },
637
681
  "required": [
@@ -381,8 +381,16 @@
381
381
  "minLength": 1
382
382
  },
383
383
  "profile_id": {
384
- "type": "string",
385
- "minLength": 1
384
+ "anyOf": [
385
+ {
386
+ "type": "string",
387
+ "minLength": 1
388
+ },
389
+ {
390
+ "type": "null"
391
+ }
392
+ ],
393
+ "description": "Registered account id; null names the harness's default API-key route, which is not an account."
386
394
  }
387
395
  },
388
396
  "required": [
@@ -391,6 +399,11 @@
391
399
  ],
392
400
  "additionalProperties": false
393
401
  },
402
+ "credential_fingerprint": {
403
+ "type": "string",
404
+ "pattern": "^[0-9a-f]{16}$",
405
+ "description": "Non-secret identity of the API key this row was read with. Present only on API-key rows; a row is published only while it matches the key requests would send now."
406
+ },
394
407
  "balances": {
395
408
  "type": "object",
396
409
  "properties": {
@@ -622,6 +635,37 @@
622
635
  "string",
623
636
  "null"
624
637
  ]
638
+ },
639
+ "capped": {
640
+ "type": [
641
+ "boolean",
642
+ "null"
643
+ ],
644
+ "description": "true: the provider reports a cap in limit; false: it reports no cap, so a null limit is not unknown and not unlimited money; null or absent: not established."
645
+ },
646
+ "remaining": {
647
+ "type": [
648
+ "string",
649
+ "null"
650
+ ],
651
+ "description": "Provider-reported amount left under limit in the current window, with its sign; null when not reported."
652
+ },
653
+ "window": {
654
+ "anyOf": [
655
+ {
656
+ "type": "string",
657
+ "enum": [
658
+ "day",
659
+ "week",
660
+ "month",
661
+ "lifetime"
662
+ ]
663
+ },
664
+ {
665
+ "type": "null"
666
+ }
667
+ ],
668
+ "description": "Provider calendar window that used counts (UTC); when capped, limit resets at its end and lifetime never resets. resets_at is set only from a provider-reported instant."
625
669
  }
626
670
  },
627
671
  "required": [
@@ -24,6 +24,53 @@
24
24
  "type": "boolean",
25
25
  "default": false,
26
26
  "description": "True when the clean check is an already-applied idempotent no-op."
27
+ },
28
+ "refusal": {
29
+ "type": "object",
30
+ "properties": {
31
+ "code": {
32
+ "type": "string",
33
+ "enum": [
34
+ "result_objects_missing",
35
+ "delivery_conflict",
36
+ "delivery_pairing_mismatch",
37
+ "delivery_target_changed",
38
+ "delivery_path_occupied",
39
+ "delivery_outside_sparse_checkout",
40
+ "delivery_content_mismatch",
41
+ "revert_conflict",
42
+ "revert_target_changed",
43
+ "pr_unrendered_result",
44
+ "result_path_encoding",
45
+ "space_insufficient",
46
+ "git_stalled",
47
+ "git_signal",
48
+ "git_failed"
49
+ ]
50
+ },
51
+ "message": {
52
+ "type": "string"
53
+ },
54
+ "paths": {
55
+ "type": "array",
56
+ "items": {
57
+ "type": "string"
58
+ },
59
+ "maxItems": 200,
60
+ "default": []
61
+ },
62
+ "pathCount": {
63
+ "type": "integer",
64
+ "minimum": 0,
65
+ "default": 0
66
+ }
67
+ },
68
+ "required": [
69
+ "code",
70
+ "message"
71
+ ],
72
+ "additionalProperties": false,
73
+ "description": "Typed reason an object result's dry run refused (code, message, bounded paths); absent otherwise."
27
74
  }
28
75
  },
29
76
  "required": [
@@ -1023,6 +1023,63 @@
1023
1023
  ],
1024
1024
  "description": "Whether an absence from this harness's model lists (the live models() answer and the manifest known_models alike) proves a model is ABSENT; omitted = authoritative (an unlisted model is refused). advisory = absence is not proof, so an explicit model is forwarded to the vendor and disclosed instead of refused."
1025
1025
  },
1026
+ "model_routing_variants": {
1027
+ "type": "array",
1028
+ "items": {
1029
+ "type": "object",
1030
+ "properties": {
1031
+ "suffix": {
1032
+ "type": "string",
1033
+ "pattern": "^:[a-z][a-z0-9_-]*$",
1034
+ "description": "The suffix, colon included (e.g. ':nitro')."
1035
+ },
1036
+ "billing": {
1037
+ "type": "string",
1038
+ "enum": [
1039
+ "base",
1040
+ "service_tier"
1041
+ ],
1042
+ "description": "base = billed like the listed row; service_tier = the provider may serve it on another service tier billed at that tier's rate."
1043
+ }
1044
+ },
1045
+ "required": [
1046
+ "suffix",
1047
+ "billing"
1048
+ ],
1049
+ "additionalProperties": false,
1050
+ "description": "One declared request-time routing suffix and its billing effect."
1051
+ },
1052
+ "minItems": 1,
1053
+ "description": "Request-time routing suffixes this harness's provider accepts on a listed model id; an id ending in declared suffixes is admitted when the id without them is an exact catalog row. Omitted = exact catalog membership only."
1054
+ },
1055
+ "model_refused_variants": {
1056
+ "type": "array",
1057
+ "items": {
1058
+ "type": "object",
1059
+ "properties": {
1060
+ "suffix": {
1061
+ "type": "string",
1062
+ "pattern": "^:[a-z][a-z0-9_-]*$",
1063
+ "description": "The suffix, colon included (e.g. ':online')."
1064
+ },
1065
+ "reason": {
1066
+ "type": "string",
1067
+ "enum": [
1068
+ "provider_web_search"
1069
+ ],
1070
+ "description": "provider_web_search = the provider would search the web for the request, outside this route's web policy."
1071
+ }
1072
+ },
1073
+ "required": [
1074
+ "suffix",
1075
+ "reason"
1076
+ ],
1077
+ "additionalProperties": false,
1078
+ "description": "One declared request-time suffix this harness refuses, and why."
1079
+ },
1080
+ "minItems": 1,
1081
+ "description": "Request-time suffixes this harness refuses in any position after the base id, whether or not a catalog lists the id or could be read. Omitted = none."
1082
+ },
1026
1083
  "known_models": {
1027
1084
  "type": "array",
1028
1085
  "items": {
@@ -1124,7 +1181,7 @@
1124
1181
  "type": "string"
1125
1182
  },
1126
1183
  "default": [],
1127
- "description": "Intents the gateway will route to this harness."
1184
+ "description": "Intents an explicit selection of this harness may run: capability intents its doctor enables. A degraded harness keeps the intents its doctor still enables, with its reasons; an unavailable harness has none."
1128
1185
  },
1129
1186
  "routableIntents": {
1130
1187
  "type": "array",
@@ -1132,7 +1189,7 @@
1132
1189
  "type": "string"
1133
1190
  },
1134
1191
  "default": [],
1135
- "description": "Intents the harness is actually routable for right now (doctor-gated); the server-side availability truth surfaces must read instead of re-deriving."
1192
+ "description": "Intents the automatic (Auto pool) routing may choose this harness for: enabledIntents while the doctor reports ok, empty for a degraded or unavailable harness. Explicit selection reads enabledIntents instead."
1136
1193
  },
1137
1194
  "disabledIntents": {
1138
1195
  "type": "array",
@@ -1872,8 +1929,16 @@
1872
1929
  "minLength": 1
1873
1930
  },
1874
1931
  "profile_id": {
1875
- "type": "string",
1876
- "minLength": 1
1932
+ "anyOf": [
1933
+ {
1934
+ "type": "string",
1935
+ "minLength": 1
1936
+ },
1937
+ {
1938
+ "type": "null"
1939
+ }
1940
+ ],
1941
+ "description": "Registered account id; null names the harness's default API-key route, which is not an account."
1877
1942
  }
1878
1943
  },
1879
1944
  "required": [
@@ -1882,6 +1947,11 @@
1882
1947
  ],
1883
1948
  "additionalProperties": false
1884
1949
  },
1950
+ "credential_fingerprint": {
1951
+ "type": "string",
1952
+ "pattern": "^[0-9a-f]{16}$",
1953
+ "description": "Non-secret identity of the API key this row was read with. Present only on API-key rows; a row is published only while it matches the key requests would send now."
1954
+ },
1885
1955
  "balances": {
1886
1956
  "type": "object",
1887
1957
  "properties": {
@@ -2113,6 +2183,37 @@
2113
2183
  "string",
2114
2184
  "null"
2115
2185
  ]
2186
+ },
2187
+ "capped": {
2188
+ "type": [
2189
+ "boolean",
2190
+ "null"
2191
+ ],
2192
+ "description": "true: the provider reports a cap in limit; false: it reports no cap, so a null limit is not unknown and not unlimited money; null or absent: not established."
2193
+ },
2194
+ "remaining": {
2195
+ "type": [
2196
+ "string",
2197
+ "null"
2198
+ ],
2199
+ "description": "Provider-reported amount left under limit in the current window, with its sign; null when not reported."
2200
+ },
2201
+ "window": {
2202
+ "anyOf": [
2203
+ {
2204
+ "type": "string",
2205
+ "enum": [
2206
+ "day",
2207
+ "week",
2208
+ "month",
2209
+ "lifetime"
2210
+ ]
2211
+ },
2212
+ {
2213
+ "type": "null"
2214
+ }
2215
+ ],
2216
+ "description": "Provider calendar window that used counts (UTC); when capped, limit resets at its end and lifetime never resets. resets_at is set only from a provider-reported instant."
2116
2217
  }
2117
2218
  },
2118
2219
  "required": [
@@ -1002,6 +1002,63 @@
1002
1002
  ],
1003
1003
  "description": "Whether an absence from this harness's model lists (the live models() answer and the manifest known_models alike) proves a model is ABSENT; omitted = authoritative (an unlisted model is refused). advisory = absence is not proof, so an explicit model is forwarded to the vendor and disclosed instead of refused."
1004
1004
  },
1005
+ "model_routing_variants": {
1006
+ "type": "array",
1007
+ "items": {
1008
+ "type": "object",
1009
+ "properties": {
1010
+ "suffix": {
1011
+ "type": "string",
1012
+ "pattern": "^:[a-z][a-z0-9_-]*$",
1013
+ "description": "The suffix, colon included (e.g. ':nitro')."
1014
+ },
1015
+ "billing": {
1016
+ "type": "string",
1017
+ "enum": [
1018
+ "base",
1019
+ "service_tier"
1020
+ ],
1021
+ "description": "base = billed like the listed row; service_tier = the provider may serve it on another service tier billed at that tier's rate."
1022
+ }
1023
+ },
1024
+ "required": [
1025
+ "suffix",
1026
+ "billing"
1027
+ ],
1028
+ "additionalProperties": false,
1029
+ "description": "One declared request-time routing suffix and its billing effect."
1030
+ },
1031
+ "minItems": 1,
1032
+ "description": "Request-time routing suffixes this harness's provider accepts on a listed model id; an id ending in declared suffixes is admitted when the id without them is an exact catalog row. Omitted = exact catalog membership only."
1033
+ },
1034
+ "model_refused_variants": {
1035
+ "type": "array",
1036
+ "items": {
1037
+ "type": "object",
1038
+ "properties": {
1039
+ "suffix": {
1040
+ "type": "string",
1041
+ "pattern": "^:[a-z][a-z0-9_-]*$",
1042
+ "description": "The suffix, colon included (e.g. ':online')."
1043
+ },
1044
+ "reason": {
1045
+ "type": "string",
1046
+ "enum": [
1047
+ "provider_web_search"
1048
+ ],
1049
+ "description": "provider_web_search = the provider would search the web for the request, outside this route's web policy."
1050
+ }
1051
+ },
1052
+ "required": [
1053
+ "suffix",
1054
+ "reason"
1055
+ ],
1056
+ "additionalProperties": false,
1057
+ "description": "One declared request-time suffix this harness refuses, and why."
1058
+ },
1059
+ "minItems": 1,
1060
+ "description": "Request-time suffixes this harness refuses in any position after the base id, whether or not a catalog lists the id or could be read. Omitted = none."
1061
+ },
1005
1062
  "known_models": {
1006
1063
  "type": "array",
1007
1064
  "items": {
@@ -1103,7 +1160,7 @@
1103
1160
  "type": "string"
1104
1161
  },
1105
1162
  "default": [],
1106
- "description": "Intents the gateway will route to this harness."
1163
+ "description": "Intents an explicit selection of this harness may run: capability intents its doctor enables. A degraded harness keeps the intents its doctor still enables, with its reasons; an unavailable harness has none."
1107
1164
  },
1108
1165
  "routableIntents": {
1109
1166
  "type": "array",
@@ -1111,7 +1168,7 @@
1111
1168
  "type": "string"
1112
1169
  },
1113
1170
  "default": [],
1114
- "description": "Intents the harness is actually routable for right now (doctor-gated); the server-side availability truth surfaces must read instead of re-deriving."
1171
+ "description": "Intents the automatic (Auto pool) routing may choose this harness for: enabledIntents while the doctor reports ok, empty for a degraded or unavailable harness. Explicit selection reads enabledIntents instead."
1115
1172
  },
1116
1173
  "disabledIntents": {
1117
1174
  "type": "array",
@@ -1793,8 +1850,16 @@
1793
1850
  "minLength": 1
1794
1851
  },
1795
1852
  "profile_id": {
1796
- "type": "string",
1797
- "minLength": 1
1853
+ "anyOf": [
1854
+ {
1855
+ "type": "string",
1856
+ "minLength": 1
1857
+ },
1858
+ {
1859
+ "type": "null"
1860
+ }
1861
+ ],
1862
+ "description": "Registered account id; null names the harness's default API-key route, which is not an account."
1798
1863
  }
1799
1864
  },
1800
1865
  "required": [
@@ -1803,6 +1868,11 @@
1803
1868
  ],
1804
1869
  "additionalProperties": false
1805
1870
  },
1871
+ "credential_fingerprint": {
1872
+ "type": "string",
1873
+ "pattern": "^[0-9a-f]{16}$",
1874
+ "description": "Non-secret identity of the API key this row was read with. Present only on API-key rows; a row is published only while it matches the key requests would send now."
1875
+ },
1806
1876
  "balances": {
1807
1877
  "type": "object",
1808
1878
  "properties": {
@@ -2034,6 +2104,37 @@
2034
2104
  "string",
2035
2105
  "null"
2036
2106
  ]
2107
+ },
2108
+ "capped": {
2109
+ "type": [
2110
+ "boolean",
2111
+ "null"
2112
+ ],
2113
+ "description": "true: the provider reports a cap in limit; false: it reports no cap, so a null limit is not unknown and not unlimited money; null or absent: not established."
2114
+ },
2115
+ "remaining": {
2116
+ "type": [
2117
+ "string",
2118
+ "null"
2119
+ ],
2120
+ "description": "Provider-reported amount left under limit in the current window, with its sign; null when not reported."
2121
+ },
2122
+ "window": {
2123
+ "anyOf": [
2124
+ {
2125
+ "type": "string",
2126
+ "enum": [
2127
+ "day",
2128
+ "week",
2129
+ "month",
2130
+ "lifetime"
2131
+ ]
2132
+ },
2133
+ {
2134
+ "type": "null"
2135
+ }
2136
+ ],
2137
+ "description": "Provider calendar window that used counts (UTC); when capped, limit resets at its end and lifetime never resets. resets_at is set only from a provider-reported instant."
2037
2138
  }
2038
2139
  },
2039
2140
  "required": [
@@ -1002,6 +1002,63 @@
1002
1002
  ],
1003
1003
  "description": "Whether an absence from this harness's model lists (the live models() answer and the manifest known_models alike) proves a model is ABSENT; omitted = authoritative (an unlisted model is refused). advisory = absence is not proof, so an explicit model is forwarded to the vendor and disclosed instead of refused."
1004
1004
  },
1005
+ "model_routing_variants": {
1006
+ "type": "array",
1007
+ "items": {
1008
+ "type": "object",
1009
+ "properties": {
1010
+ "suffix": {
1011
+ "type": "string",
1012
+ "pattern": "^:[a-z][a-z0-9_-]*$",
1013
+ "description": "The suffix, colon included (e.g. ':nitro')."
1014
+ },
1015
+ "billing": {
1016
+ "type": "string",
1017
+ "enum": [
1018
+ "base",
1019
+ "service_tier"
1020
+ ],
1021
+ "description": "base = billed like the listed row; service_tier = the provider may serve it on another service tier billed at that tier's rate."
1022
+ }
1023
+ },
1024
+ "required": [
1025
+ "suffix",
1026
+ "billing"
1027
+ ],
1028
+ "additionalProperties": false,
1029
+ "description": "One declared request-time routing suffix and its billing effect."
1030
+ },
1031
+ "minItems": 1,
1032
+ "description": "Request-time routing suffixes this harness's provider accepts on a listed model id; an id ending in declared suffixes is admitted when the id without them is an exact catalog row. Omitted = exact catalog membership only."
1033
+ },
1034
+ "model_refused_variants": {
1035
+ "type": "array",
1036
+ "items": {
1037
+ "type": "object",
1038
+ "properties": {
1039
+ "suffix": {
1040
+ "type": "string",
1041
+ "pattern": "^:[a-z][a-z0-9_-]*$",
1042
+ "description": "The suffix, colon included (e.g. ':online')."
1043
+ },
1044
+ "reason": {
1045
+ "type": "string",
1046
+ "enum": [
1047
+ "provider_web_search"
1048
+ ],
1049
+ "description": "provider_web_search = the provider would search the web for the request, outside this route's web policy."
1050
+ }
1051
+ },
1052
+ "required": [
1053
+ "suffix",
1054
+ "reason"
1055
+ ],
1056
+ "additionalProperties": false,
1057
+ "description": "One declared request-time suffix this harness refuses, and why."
1058
+ },
1059
+ "minItems": 1,
1060
+ "description": "Request-time suffixes this harness refuses in any position after the base id, whether or not a catalog lists the id or could be read. Omitted = none."
1061
+ },
1005
1062
  "known_models": {
1006
1063
  "type": "array",
1007
1064
  "items": {
@@ -1103,7 +1160,7 @@
1103
1160
  "type": "string"
1104
1161
  },
1105
1162
  "default": [],
1106
- "description": "Intents the gateway will route to this harness."
1163
+ "description": "Intents an explicit selection of this harness may run: capability intents its doctor enables. A degraded harness keeps the intents its doctor still enables, with its reasons; an unavailable harness has none."
1107
1164
  },
1108
1165
  "routableIntents": {
1109
1166
  "type": "array",
@@ -1111,7 +1168,7 @@
1111
1168
  "type": "string"
1112
1169
  },
1113
1170
  "default": [],
1114
- "description": "Intents the harness is actually routable for right now (doctor-gated); the server-side availability truth surfaces must read instead of re-deriving."
1171
+ "description": "Intents the automatic (Auto pool) routing may choose this harness for: enabledIntents while the doctor reports ok, empty for a degraded or unavailable harness. Explicit selection reads enabledIntents instead."
1115
1172
  },
1116
1173
  "disabledIntents": {
1117
1174
  "type": "array",