@claudexor/schema 4.8.1 → 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 (217) 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-gc.d.ts +377 -0
  24. package/dist/control-gc.d.ts.map +1 -1
  25. package/dist/control-gc.js +74 -1
  26. package/dist/control-gc.js.map +1 -1
  27. package/dist/control-harness-list.d.ts +102 -18
  28. package/dist/control-harness-list.d.ts.map +1 -1
  29. package/dist/control-harness-models.d.ts +299 -6
  30. package/dist/control-harness-models.d.ts.map +1 -1
  31. package/dist/control-harness-models.js +12 -3
  32. package/dist/control-harness-models.js.map +1 -1
  33. package/dist/control-operation-responses.d.ts +606 -23
  34. package/dist/control-operation-responses.d.ts.map +1 -1
  35. package/dist/control-operation-responses.js +3 -0
  36. package/dist/control-operation-responses.js.map +1 -1
  37. package/dist/control-run-detail.d.ts +1193 -72
  38. package/dist/control-run-detail.d.ts.map +1 -1
  39. package/dist/control-run-event-part.d.ts +3 -3
  40. package/dist/control-run-event-part.js +1 -1
  41. package/dist/control-run-event-part.js.map +1 -1
  42. package/dist/control-run-failure.d.ts +276 -12
  43. package/dist/control-run-failure.d.ts.map +1 -1
  44. package/dist/control-run-failure.js +54 -16
  45. package/dist/control-run-failure.js.map +1 -1
  46. package/dist/control-run-message.js +1 -1
  47. package/dist/control-run-message.js.map +1 -1
  48. package/dist/control-thread-apply.d.ts +165 -0
  49. package/dist/control-thread-apply.d.ts.map +1 -1
  50. package/dist/control-timeline.d.ts +9 -0
  51. package/dist/control-timeline.d.ts.map +1 -1
  52. package/dist/control-timeline.js +20 -3
  53. package/dist/control-timeline.js.map +1 -1
  54. package/dist/control.d.ts +392 -42
  55. package/dist/control.d.ts.map +1 -1
  56. package/dist/control.js +13 -7
  57. package/dist/control.js.map +1 -1
  58. package/dist/credential-profile-snapshot.d.ts +506 -90
  59. package/dist/credential-profile-snapshot.d.ts.map +1 -1
  60. package/dist/daemon-status.d.ts +492 -0
  61. package/dist/daemon-status.d.ts.map +1 -1
  62. package/dist/daemon-status.js +22 -0
  63. package/dist/daemon-status.js.map +1 -1
  64. package/dist/decision.d.ts +9 -9
  65. package/dist/decision.d.ts.map +1 -1
  66. package/dist/decision.js +4 -0
  67. package/dist/decision.js.map +1 -1
  68. package/dist/delivery.d.ts +162 -0
  69. package/dist/delivery.d.ts.map +1 -1
  70. package/dist/delivery.js +32 -0
  71. package/dist/delivery.js.map +1 -1
  72. package/dist/events.d.ts +7 -6
  73. package/dist/events.d.ts.map +1 -1
  74. package/dist/events.js +10 -8
  75. package/dist/events.js.map +1 -1
  76. package/dist/git-result.d.ts +99 -0
  77. package/dist/git-result.d.ts.map +1 -0
  78. package/dist/git-result.js +80 -0
  79. package/dist/git-result.js.map +1 -0
  80. package/dist/harness-model.d.ts +89 -0
  81. package/dist/harness-model.d.ts.map +1 -1
  82. package/dist/harness-model.js +83 -0
  83. package/dist/harness-model.js.map +1 -1
  84. package/dist/harness-speech.d.ts +36 -0
  85. package/dist/harness-speech.d.ts.map +1 -0
  86. package/dist/harness-speech.js +27 -0
  87. package/dist/harness-speech.js.map +1 -0
  88. package/dist/harness.d.ts +371 -35
  89. package/dist/harness.d.ts.map +1 -1
  90. package/dist/harness.js +7 -21
  91. package/dist/harness.js.map +1 -1
  92. package/dist/index.d.ts +5 -0
  93. package/dist/index.d.ts.map +1 -1
  94. package/dist/index.js +5 -0
  95. package/dist/index.js.map +1 -1
  96. package/dist/mcp-run-result.d.ts +620 -51
  97. package/dist/mcp-run-result.d.ts.map +1 -1
  98. package/dist/mcp-run-result.js +45 -5
  99. package/dist/mcp-run-result.js.map +1 -1
  100. package/dist/mcp-run-wait.d.ts +7 -7
  101. package/dist/primitives.d.ts.map +1 -1
  102. package/dist/primitives.js +3 -2
  103. package/dist/primitives.js.map +1 -1
  104. package/dist/project.d.ts +45 -1
  105. package/dist/project.d.ts.map +1 -1
  106. package/dist/project.js +26 -1
  107. package/dist/project.js.map +1 -1
  108. package/dist/quota-read.d.ts +6 -3
  109. package/dist/quota-read.d.ts.map +1 -1
  110. package/dist/quota-read.js +7 -1
  111. package/dist/quota-read.js.map +1 -1
  112. package/dist/quota-scope.d.ts +29 -0
  113. package/dist/quota-scope.d.ts.map +1 -0
  114. package/dist/quota-scope.js +95 -0
  115. package/dist/quota-scope.js.map +1 -0
  116. package/dist/rate-limit.d.ts +3 -0
  117. package/dist/rate-limit.d.ts.map +1 -1
  118. package/dist/rate-limit.js +5 -1
  119. package/dist/rate-limit.js.map +1 -1
  120. package/dist/raw.d.ts +223 -1
  121. package/dist/raw.d.ts.map +1 -1
  122. package/dist/raw.js +86 -0
  123. package/dist/raw.js.map +1 -1
  124. package/dist/readiness.d.ts +87 -18
  125. package/dist/readiness.d.ts.map +1 -1
  126. package/dist/readiness.js +7 -6
  127. package/dist/readiness.js.map +1 -1
  128. package/dist/route-health.d.ts +303 -0
  129. package/dist/route-health.d.ts.map +1 -0
  130. package/dist/route-health.js +71 -0
  131. package/dist/route-health.js.map +1 -0
  132. package/dist/run-continuity.d.ts +3 -0
  133. package/dist/run-continuity.d.ts.map +1 -1
  134. package/dist/run-continuity.js +4 -0
  135. package/dist/run-continuity.js.map +1 -1
  136. package/dist/run-facts.d.ts +5 -5
  137. package/dist/run-facts.d.ts.map +1 -1
  138. package/dist/run-facts.js +1 -0
  139. package/dist/run-facts.js.map +1 -1
  140. package/dist/run-observation.d.ts +6 -6
  141. package/dist/run-observation.d.ts.map +1 -1
  142. package/dist/run-observation.js +7 -1
  143. package/dist/run-observation.js.map +1 -1
  144. package/dist/setup-login.d.ts +1 -1
  145. package/dist/setup-login.js +1 -1
  146. package/dist/setup.d.ts +1 -1
  147. package/dist/setup.js +1 -1
  148. package/dist/status-projection.d.ts.map +1 -1
  149. package/dist/status-projection.js +3 -0
  150. package/dist/status-projection.js.map +1 -1
  151. package/dist/task-group-runs.d.ts +1 -0
  152. package/dist/task-group-runs.d.ts.map +1 -1
  153. package/dist/task-group-runs.js +6 -3
  154. package/dist/task-group-runs.js.map +1 -1
  155. package/dist/telemetry.d.ts +239 -7
  156. package/dist/telemetry.d.ts.map +1 -1
  157. package/dist/telemetry.js +4 -2
  158. package/dist/telemetry.js.map +1 -1
  159. package/dist/thread-history.d.ts +1109 -161
  160. package/dist/thread-history.d.ts.map +1 -1
  161. package/dist/thread-history.js +1 -1
  162. package/dist/thread-history.js.map +1 -1
  163. package/dist/tool-ref.d.ts +94 -3
  164. package/dist/tool-ref.d.ts.map +1 -1
  165. package/dist/tool-ref.js +98 -6
  166. package/dist/tool-ref.js.map +1 -1
  167. package/generated/AgentCapabilityCatalog.schema.json +54 -0
  168. package/generated/BudgetObservation.schema.json +8 -1
  169. package/generated/ControlAccountResetResponse.schema.json +60 -1
  170. package/generated/ControlAccountResourcesFreshnessResponse.schema.json +46 -2
  171. package/generated/ControlAccountResourcesResponse.schema.json +46 -2
  172. package/generated/ControlApplyCheckResponse.schema.json +47 -0
  173. package/generated/ControlCredentialProfilesQueryResponse.schema.json +105 -4
  174. package/generated/ControlCredentialProfilesResourcesResponse.schema.json +105 -4
  175. package/generated/ControlCredentialProfilesSnapshotResponse.schema.json +59 -2
  176. package/generated/ControlDaemonStatus.schema.json +112 -43
  177. package/generated/ControlDeliveryResponse.schema.json +154 -0
  178. package/generated/ControlGcLastResponse.schema.json +184 -0
  179. package/generated/ControlGcReceipt.schema.json +60 -1
  180. package/generated/ControlGcRequest.schema.json +4 -0
  181. package/generated/ControlHarnessAccountCatalog.schema.json +13 -0
  182. package/generated/ControlHarnessAccountModelsResponse.schema.json +13 -0
  183. package/generated/ControlHarnessListResponse.schema.json +59 -2
  184. package/generated/ControlHarnessModelsQueryResponse.schema.json +97 -51
  185. package/generated/ControlHarnessModelsResponse.schema.json +96 -0
  186. package/generated/ControlProjectRemoveReceipt.schema.json +36 -0
  187. package/generated/ControlQuotaQueryResponse.schema.json +46 -2
  188. package/generated/ControlQuotaReadRequest.schema.json +4 -0
  189. package/generated/ControlQuotaRefreshRequest.schema.json +12 -3
  190. package/generated/ControlRouteHealth.schema.json +202 -0
  191. package/generated/ControlRunDecisionResponse.schema.json +14 -0
  192. package/generated/ControlRunDetail.schema.json +376 -6
  193. package/generated/ControlRunEventPart.schema.json +3 -2
  194. package/generated/ControlRunListResponse.schema.json +342 -3
  195. package/generated/ControlRunMessageRequest.schema.json +1 -1
  196. package/generated/ControlRunSummary.schema.json +342 -3
  197. package/generated/ControlThreadApplyResponse.schema.json +154 -0
  198. package/generated/ControlThreadDetail.schema.json +2 -1
  199. package/generated/DecisionRecord.schema.json +1 -0
  200. package/generated/HarnessEvent.schema.json +214 -5
  201. package/generated/HarnessManifest.schema.json +57 -0
  202. package/generated/HarnessModel.schema.json +13 -0
  203. package/generated/HarnessStatusDto.schema.json +59 -2
  204. package/generated/JournaledRunCreatedPayload.schema.json +2 -2
  205. package/generated/McpAccountsToolResult.schema.json +105 -4
  206. package/generated/McpRunHandleResult.schema.json +279 -2
  207. package/generated/McpRunToolResult.schema.json +269 -0
  208. package/generated/McpRunWaitResult.schema.json +2 -1
  209. package/generated/RawContextPacket.schema.json +98 -0
  210. package/generated/RunContinuityReceipt.schema.json +8 -0
  211. package/generated/RunEvent.schema.json +2 -1
  212. package/generated/RunFacts.schema.json +1 -0
  213. package/generated/RunFailure.schema.json +201 -0
  214. package/generated/RunTelemetry.schema.json +123 -2
  215. package/generated/RunWaitManyInput.schema.json +11 -4
  216. package/generated/ThreadHistoryPage.schema.json +204 -2
  217. package/package.json +2 -2
@@ -492,6 +492,31 @@
492
492
  "type": "boolean",
493
493
  "description": "True on the harness's typed final-answer message (vendor terminal result); mid-run narration never sets it."
494
494
  },
495
+ "speech": {
496
+ "type": "object",
497
+ "properties": {
498
+ "key": {
499
+ "type": "string",
500
+ "minLength": 1,
501
+ "description": "Opaque adapter-issued key of one observed text block; equality only."
502
+ },
503
+ "op": {
504
+ "type": "string",
505
+ "enum": [
506
+ "fragment",
507
+ "complete",
508
+ "abandoned"
509
+ ],
510
+ "description": "fragment: a verbatim streamed piece of the keyed text block; complete: the harness's complete text of that block (at most once per key); abandoned: the harness stated the block will never be completed (partial fragments stay as emitted)."
511
+ }
512
+ },
513
+ "required": [
514
+ "key",
515
+ "op"
516
+ ],
517
+ "additionalProperties": false,
518
+ "description": "Adapter-issued speech identity of a text event (fragment/complete on messages, abandoned on a status event); absent when no block lifecycle was exactly observed. A typed final never carries it unless the adapter proves the link."
519
+ },
495
520
  "tool": {
496
521
  "type": "object",
497
522
  "properties": {
@@ -518,7 +543,7 @@
518
543
  },
519
544
  "target": {
520
545
  "type": "string",
521
- "description": "Redacted, bounded human-readable target (query/url/path/command)."
546
+ "description": "Bounded human-readable target (query/url/path/command), as the agent issued it."
522
547
  },
523
548
  "status": {
524
549
  "type": "string",
@@ -530,18 +555,74 @@
530
555
  ],
531
556
  "description": "Outcome of the tool use; required on tool_result events (a missing status is never treated as ok)."
532
557
  },
558
+ "phase": {
559
+ "type": "string",
560
+ "enum": [
561
+ "started",
562
+ "completed"
563
+ ],
564
+ "description": "Native lifecycle frame of a file_change (started or completed); absent when the adapter does not type it. Completion is not success: the outcome stays in status."
565
+ },
533
566
  "error_summary": {
534
567
  "type": "string",
535
- "description": "Redacted, bounded error detail for status=error results."
568
+ "description": "Error detail for status=error results: the tool's own output, unmasked, within the adapter's bound and whitespace normalization."
536
569
  },
537
570
  "content_summary": {
538
571
  "type": "string",
539
- "description": "Redacted, bounded content detail for results (success or failure)."
572
+ "description": "Content detail for results (success or failure), unmasked, within the adapter's bound and whitespace normalization."
540
573
  },
541
574
  "exit_code": {
542
575
  "type": "integer",
543
576
  "description": "Process exit code for command tools, when known."
544
577
  },
578
+ "command_outcome": {
579
+ "type": "object",
580
+ "properties": {
581
+ "state": {
582
+ "type": "string",
583
+ "enum": [
584
+ "exited",
585
+ "timed_out",
586
+ "backgrounded",
587
+ "unknown"
588
+ ],
589
+ "description": "exited: the tool observed the command end; timed_out: the tool's timeout elapsed before an observed end (the process may still run or may have been signalled); backgrounded: the command was handed to a background shell and was still running when the result returned; unknown: the native result established none of these."
590
+ },
591
+ "signal": {
592
+ "type": "string",
593
+ "minLength": 1,
594
+ "description": "Vendor-reported signal name of an exited command."
595
+ },
596
+ "timeout_ms": {
597
+ "type": "integer",
598
+ "minimum": 0,
599
+ "description": "The elapsed tool timeout behind timed_out or a timeout-driven background handoff."
600
+ },
601
+ "background_reason": {
602
+ "type": "string",
603
+ "enum": [
604
+ "timeout",
605
+ "requested"
606
+ ],
607
+ "description": "Why a backgrounded command left the foreground: its timeout or a request."
608
+ },
609
+ "shell_id": {
610
+ "type": "string",
611
+ "minLength": 1,
612
+ "description": "Vendor handle of the background shell that kept the command."
613
+ },
614
+ "pid": {
615
+ "type": "integer",
616
+ "exclusiveMinimum": 0,
617
+ "description": "Vendor-reported process id."
618
+ }
619
+ },
620
+ "required": [
621
+ "state"
622
+ ],
623
+ "additionalProperties": false,
624
+ "description": "Command process facts (#450), separate from status; absent means not reported."
625
+ },
545
626
  "web_retrieval": {
546
627
  "type": "string",
547
628
  "enum": [
@@ -723,10 +804,131 @@
723
804
  "raw_patch_stale_preimage",
724
805
  "raw_patch_binary_unsupported",
725
806
  "raw_patch_truncated",
726
- "raw_patch_apply_failed"
807
+ "raw_patch_apply_failed",
808
+ "raw_context_exceeds_window"
727
809
  ],
728
810
  "description": "Typed refusal code for a rejected raw patch contract."
729
811
  },
812
+ "raw_context": {
813
+ "type": "object",
814
+ "properties": {
815
+ "model": {
816
+ "type": "string",
817
+ "minLength": 1,
818
+ "description": "Model the request named."
819
+ },
820
+ "estimated_request_tokens": {
821
+ "type": "integer",
822
+ "minimum": 0,
823
+ "description": "Estimated tokens of the whole rendered request (chars/4, plus a fixed figure per image); never a tokenizer count."
824
+ },
825
+ "budget": {
826
+ "type": "object",
827
+ "properties": {
828
+ "estimator": {
829
+ "type": "string",
830
+ "const": "chars_div_4"
831
+ },
832
+ "basis": {
833
+ "type": "string",
834
+ "enum": [
835
+ "model_context_window",
836
+ "assumed_ceiling"
837
+ ]
838
+ },
839
+ "model": {
840
+ "anyOf": [
841
+ {
842
+ "type": "string",
843
+ "minLength": 1
844
+ },
845
+ {
846
+ "type": "null"
847
+ }
848
+ ],
849
+ "description": "Model whose catalog row was consulted; null when the producer reported none."
850
+ },
851
+ "context_window": {
852
+ "anyOf": [
853
+ {
854
+ "type": "integer",
855
+ "exclusiveMinimum": 0
856
+ },
857
+ {
858
+ "type": "null"
859
+ }
860
+ ]
861
+ },
862
+ "output_allowance_tokens": {
863
+ "anyOf": [
864
+ {
865
+ "type": "integer",
866
+ "minimum": 0
867
+ },
868
+ {
869
+ "type": "null"
870
+ }
871
+ ]
872
+ },
873
+ "framing_tokens": {
874
+ "anyOf": [
875
+ {
876
+ "type": "integer",
877
+ "minimum": 0
878
+ },
879
+ {
880
+ "type": "null"
881
+ }
882
+ ],
883
+ "description": "Estimated tokens of the request outside this packet; null when unmeasured."
884
+ },
885
+ "selection_limit_tokens": {
886
+ "type": "integer",
887
+ "exclusiveMinimum": 0,
888
+ "description": "Limit the optional selection honoured: the packet's share of the window, or the assumed ceiling on file contents."
889
+ },
890
+ "estimated_packet_tokens": {
891
+ "type": "integer",
892
+ "minimum": 0
893
+ },
894
+ "omitted_for_budget": {
895
+ "type": "integer",
896
+ "minimum": 0,
897
+ "description": "Optional files left out to honour selection_limit_tokens (listed in omissions)."
898
+ },
899
+ "mandatory_paths": {
900
+ "type": "array",
901
+ "items": {
902
+ "type": "string",
903
+ "minLength": 1
904
+ },
905
+ "description": "Project mandatory files, each delivered complete in readable_files."
906
+ }
907
+ },
908
+ "required": [
909
+ "estimator",
910
+ "basis",
911
+ "model",
912
+ "context_window",
913
+ "output_allowance_tokens",
914
+ "framing_tokens",
915
+ "selection_limit_tokens",
916
+ "estimated_packet_tokens",
917
+ "omitted_for_budget",
918
+ "mandatory_paths"
919
+ ],
920
+ "additionalProperties": false,
921
+ "description": "Sizing evidence for a raw context packet; disclosed, never a tokenizer count."
922
+ }
923
+ },
924
+ "required": [
925
+ "model",
926
+ "estimated_request_tokens",
927
+ "budget"
928
+ ],
929
+ "additionalProperties": false,
930
+ "description": "Set on the status event that discloses, just before the POST, how a raw-api request was sized (#147)."
931
+ },
730
932
  "permission_denial": {
731
933
  "type": "object",
732
934
  "properties": {
@@ -1153,7 +1355,14 @@
1153
1355
  "type": "null"
1154
1356
  }
1155
1357
  ],
1156
- "description": "Canonical model ids/aliases this rejection applies to; omitted/null means every model."
1358
+ "description": "Canonical model ids/aliases this rejection applies to; omitted/null (with no prefixes) means every model."
1359
+ },
1360
+ "applies_to_model_prefixes": {
1361
+ "type": "array",
1362
+ "items": {
1363
+ "$ref": "#/definitions/HarnessEvent/properties/credential_profile_id"
1364
+ },
1365
+ "description": "Producer-declared model-family prefixes this rejection also applies to, as on QuotaConstraint."
1157
1366
  },
1158
1367
  "resets_at": {
1159
1368
  "type": [
@@ -607,6 +607,63 @@
607
607
  ],
608
608
  "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."
609
609
  },
610
+ "model_routing_variants": {
611
+ "type": "array",
612
+ "items": {
613
+ "type": "object",
614
+ "properties": {
615
+ "suffix": {
616
+ "type": "string",
617
+ "pattern": "^:[a-z][a-z0-9_-]*$",
618
+ "description": "The suffix, colon included (e.g. ':nitro')."
619
+ },
620
+ "billing": {
621
+ "type": "string",
622
+ "enum": [
623
+ "base",
624
+ "service_tier"
625
+ ],
626
+ "description": "base = billed like the listed row; service_tier = the provider may serve it on another service tier billed at that tier's rate."
627
+ }
628
+ },
629
+ "required": [
630
+ "suffix",
631
+ "billing"
632
+ ],
633
+ "additionalProperties": false,
634
+ "description": "One declared request-time routing suffix and its billing effect."
635
+ },
636
+ "minItems": 1,
637
+ "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."
638
+ },
639
+ "model_refused_variants": {
640
+ "type": "array",
641
+ "items": {
642
+ "type": "object",
643
+ "properties": {
644
+ "suffix": {
645
+ "type": "string",
646
+ "pattern": "^:[a-z][a-z0-9_-]*$",
647
+ "description": "The suffix, colon included (e.g. ':online')."
648
+ },
649
+ "reason": {
650
+ "type": "string",
651
+ "enum": [
652
+ "provider_web_search"
653
+ ],
654
+ "description": "provider_web_search = the provider would search the web for the request, outside this route's web policy."
655
+ }
656
+ },
657
+ "required": [
658
+ "suffix",
659
+ "reason"
660
+ ],
661
+ "additionalProperties": false,
662
+ "description": "One declared request-time suffix this harness refuses, and why."
663
+ },
664
+ "minItems": 1,
665
+ "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."
666
+ },
610
667
  "known_models": {
611
668
  "type": "array",
612
669
  "items": {
@@ -118,6 +118,19 @@
118
118
  "default": null,
119
119
  "description": "Context window in tokens; null when the enumeration source does not report it."
120
120
  },
121
+ "input_modalities": {
122
+ "type": "array",
123
+ "items": {
124
+ "$ref": "#/definitions/HarnessModel/properties/processing/properties/nativeModes/items/properties/id"
125
+ },
126
+ "minItems": 1,
127
+ "description": "Input modalities the live catalog declares for this model, verbatim (e.g. text, image, file); absent = unknown, never an empty or 'none' claim. Declared metadata that refuses no request."
128
+ },
129
+ "max_output_tokens": {
130
+ "type": "integer",
131
+ "exclusiveMinimum": 0,
132
+ "description": "Largest completion the live catalog declares for this model (OpenRouter top_provider.max_completion_tokens); absent = unknown. Input and output share the context window, so the effective maximum can be lower."
133
+ },
121
134
  "routes": {
122
135
  "anyOf": [
123
136
  {
@@ -625,6 +625,63 @@
625
625
  ],
626
626
  "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."
627
627
  },
628
+ "model_routing_variants": {
629
+ "type": "array",
630
+ "items": {
631
+ "type": "object",
632
+ "properties": {
633
+ "suffix": {
634
+ "type": "string",
635
+ "pattern": "^:[a-z][a-z0-9_-]*$",
636
+ "description": "The suffix, colon included (e.g. ':nitro')."
637
+ },
638
+ "billing": {
639
+ "type": "string",
640
+ "enum": [
641
+ "base",
642
+ "service_tier"
643
+ ],
644
+ "description": "base = billed like the listed row; service_tier = the provider may serve it on another service tier billed at that tier's rate."
645
+ }
646
+ },
647
+ "required": [
648
+ "suffix",
649
+ "billing"
650
+ ],
651
+ "additionalProperties": false,
652
+ "description": "One declared request-time routing suffix and its billing effect."
653
+ },
654
+ "minItems": 1,
655
+ "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."
656
+ },
657
+ "model_refused_variants": {
658
+ "type": "array",
659
+ "items": {
660
+ "type": "object",
661
+ "properties": {
662
+ "suffix": {
663
+ "type": "string",
664
+ "pattern": "^:[a-z][a-z0-9_-]*$",
665
+ "description": "The suffix, colon included (e.g. ':online')."
666
+ },
667
+ "reason": {
668
+ "type": "string",
669
+ "enum": [
670
+ "provider_web_search"
671
+ ],
672
+ "description": "provider_web_search = the provider would search the web for the request, outside this route's web policy."
673
+ }
674
+ },
675
+ "required": [
676
+ "suffix",
677
+ "reason"
678
+ ],
679
+ "additionalProperties": false,
680
+ "description": "One declared request-time suffix this harness refuses, and why."
681
+ },
682
+ "minItems": 1,
683
+ "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."
684
+ },
628
685
  "known_models": {
629
686
  "type": "array",
630
687
  "items": {
@@ -726,7 +783,7 @@
726
783
  "type": "string"
727
784
  },
728
785
  "default": [],
729
- "description": "Intents the gateway will route to this harness."
786
+ "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."
730
787
  },
731
788
  "routableIntents": {
732
789
  "type": "array",
@@ -734,7 +791,7 @@
734
791
  "type": "string"
735
792
  },
736
793
  "default": [],
737
- "description": "Intents the harness is actually routable for right now (doctor-gated); the server-side availability truth surfaces must read instead of re-deriving."
794
+ "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."
738
795
  },
739
796
  "disabledIntents": {
740
797
  "type": "array",
@@ -16,12 +16,12 @@
16
16
  "prompt_sha256": {
17
17
  "type": "string",
18
18
  "pattern": "^[0-9a-f]{64}$",
19
- "description": "sha256 hex digest of the redacted prompt text."
19
+ "description": "sha256 hex digest of the prompt text."
20
20
  },
21
21
  "prompt_bytes": {
22
22
  "type": "integer",
23
23
  "minimum": 0,
24
- "description": "UTF-8 byte length of the redacted prompt text."
24
+ "description": "UTF-8 byte length of the prompt text."
25
25
  }
26
26
  },
27
27
  "required": [
@@ -1188,6 +1188,63 @@
1188
1188
  ],
1189
1189
  "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."
1190
1190
  },
1191
+ "model_routing_variants": {
1192
+ "type": "array",
1193
+ "items": {
1194
+ "type": "object",
1195
+ "properties": {
1196
+ "suffix": {
1197
+ "type": "string",
1198
+ "pattern": "^:[a-z][a-z0-9_-]*$",
1199
+ "description": "The suffix, colon included (e.g. ':nitro')."
1200
+ },
1201
+ "billing": {
1202
+ "type": "string",
1203
+ "enum": [
1204
+ "base",
1205
+ "service_tier"
1206
+ ],
1207
+ "description": "base = billed like the listed row; service_tier = the provider may serve it on another service tier billed at that tier's rate."
1208
+ }
1209
+ },
1210
+ "required": [
1211
+ "suffix",
1212
+ "billing"
1213
+ ],
1214
+ "additionalProperties": false,
1215
+ "description": "One declared request-time routing suffix and its billing effect."
1216
+ },
1217
+ "minItems": 1,
1218
+ "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."
1219
+ },
1220
+ "model_refused_variants": {
1221
+ "type": "array",
1222
+ "items": {
1223
+ "type": "object",
1224
+ "properties": {
1225
+ "suffix": {
1226
+ "type": "string",
1227
+ "pattern": "^:[a-z][a-z0-9_-]*$",
1228
+ "description": "The suffix, colon included (e.g. ':online')."
1229
+ },
1230
+ "reason": {
1231
+ "type": "string",
1232
+ "enum": [
1233
+ "provider_web_search"
1234
+ ],
1235
+ "description": "provider_web_search = the provider would search the web for the request, outside this route's web policy."
1236
+ }
1237
+ },
1238
+ "required": [
1239
+ "suffix",
1240
+ "reason"
1241
+ ],
1242
+ "additionalProperties": false,
1243
+ "description": "One declared request-time suffix this harness refuses, and why."
1244
+ },
1245
+ "minItems": 1,
1246
+ "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."
1247
+ },
1191
1248
  "known_models": {
1192
1249
  "type": "array",
1193
1250
  "items": {
@@ -1289,7 +1346,7 @@
1289
1346
  "type": "string"
1290
1347
  },
1291
1348
  "default": [],
1292
- "description": "Intents the gateway will route to this harness."
1349
+ "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."
1293
1350
  },
1294
1351
  "routableIntents": {
1295
1352
  "type": "array",
@@ -1297,7 +1354,7 @@
1297
1354
  "type": "string"
1298
1355
  },
1299
1356
  "default": [],
1300
- "description": "Intents the harness is actually routable for right now (doctor-gated); the server-side availability truth surfaces must read instead of re-deriving."
1357
+ "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."
1301
1358
  },
1302
1359
  "disabledIntents": {
1303
1360
  "type": "array",
@@ -2043,8 +2100,16 @@
2043
2100
  "minLength": 1
2044
2101
  },
2045
2102
  "profile_id": {
2046
- "type": "string",
2047
- "minLength": 1
2103
+ "anyOf": [
2104
+ {
2105
+ "type": "string",
2106
+ "minLength": 1
2107
+ },
2108
+ {
2109
+ "type": "null"
2110
+ }
2111
+ ],
2112
+ "description": "Registered account id; null names the harness's default API-key route, which is not an account."
2048
2113
  }
2049
2114
  },
2050
2115
  "required": [
@@ -2053,6 +2118,11 @@
2053
2118
  ],
2054
2119
  "additionalProperties": false
2055
2120
  },
2121
+ "credential_fingerprint": {
2122
+ "type": "string",
2123
+ "pattern": "^[0-9a-f]{16}$",
2124
+ "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."
2125
+ },
2056
2126
  "balances": {
2057
2127
  "type": "object",
2058
2128
  "properties": {
@@ -2284,6 +2354,37 @@
2284
2354
  "string",
2285
2355
  "null"
2286
2356
  ]
2357
+ },
2358
+ "capped": {
2359
+ "type": [
2360
+ "boolean",
2361
+ "null"
2362
+ ],
2363
+ "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."
2364
+ },
2365
+ "remaining": {
2366
+ "type": [
2367
+ "string",
2368
+ "null"
2369
+ ],
2370
+ "description": "Provider-reported amount left under limit in the current window, with its sign; null when not reported."
2371
+ },
2372
+ "window": {
2373
+ "anyOf": [
2374
+ {
2375
+ "type": "string",
2376
+ "enum": [
2377
+ "day",
2378
+ "week",
2379
+ "month",
2380
+ "lifetime"
2381
+ ]
2382
+ },
2383
+ {
2384
+ "type": "null"
2385
+ }
2386
+ ],
2387
+ "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."
2287
2388
  }
2288
2389
  },
2289
2390
  "required": [