@oneharness/sdk 0.23.1 → 0.25.2

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.
@@ -1661,6 +1661,29 @@
1661
1661
  "status"
1662
1662
  ]
1663
1663
  },
1664
+ "AppServerReport": {
1665
+ "description": "Which shared Codex app-server a pooled dispatch's turn ran on.",
1666
+ "type": "object",
1667
+ "properties": {
1668
+ "pid": {
1669
+ "description": "The pid the pool recorded for the server (its `server.json`): the\nprocess it launched, which is the launcher shim when Codex is one.",
1670
+ "type": "integer",
1671
+ "format": "uint32",
1672
+ "minimum": 1
1673
+ },
1674
+ "pool_key": {
1675
+ "description": "The pool entry the server belongs to — equal for every dispatch that\nshared it.",
1676
+ "type": "string",
1677
+ "maxLength": 128,
1678
+ "minLength": 1,
1679
+ "pattern": "^[A-Za-z0-9_-]+$"
1680
+ }
1681
+ },
1682
+ "required": [
1683
+ "pid",
1684
+ "pool_key"
1685
+ ]
1686
+ },
1664
1687
  "BatchReport": {
1665
1688
  "description": "Metadata for a same-prefix batch run (one harness, N prompts sharing a\ncacheable prefix). Present on [`RunReport::batch`] only in that mode.",
1666
1689
  "type": "object",
@@ -1782,6 +1805,17 @@
1782
1805
  "description": "The run report's `control` block: where the socket lived, which mechanism\nbacked it, and every request served over the run's lifetime.",
1783
1806
  "type": "object",
1784
1807
  "properties": {
1808
+ "app_server": {
1809
+ "description": "The shared Codex app-server the run's turn ran on, when it ran on one\n(`app_server = \"shared\"`). Absent for every other mechanism and for a\ndispatch's own `codex app-server` child.",
1810
+ "anyOf": [
1811
+ {
1812
+ "$ref": "#/$defs/AppServerReport"
1813
+ },
1814
+ {
1815
+ "type": "null"
1816
+ }
1817
+ ]
1818
+ },
1785
1819
  "interrupts": {
1786
1820
  "description": "Every control request served, in order.",
1787
1821
  "type": "array",
@@ -1940,7 +1974,7 @@
1940
1974
  ]
1941
1975
  },
1942
1976
  "FailureKind": {
1943
- "description": "The normalized, closed set of failure reasons oneharness can classify from a\nharness's output. It is the single source for the `failure_kind` contract\nvalue: serialized as the snake_case token a consumer reads in the report\n(`auth`, `rate_limit`, `model_not_found`, `quota`, `session_not_found`,\n`tool_deferred`, `server_overloaded`), so the wire shape is unchanged — modeling it as an enum\nkeeps a misspelled or invalid kind unrepresentable and gives every\nproducer/consumer (classifier, `is_failure`, the fallback fall-through rule,\nthe report, history) one definition to share instead of scattered string\nliterals.",
1977
+ "description": "The normalized, closed set of failure reasons oneharness can classify from a\nharness's output. It is the single source for the `failure_kind` contract\nvalue: serialized as the snake_case token a consumer reads in the report\n(`auth`, `rate_limit`, `model_not_found`, `quota`, `session_not_found`,\n`tool_deferred`, `server_overloaded`, `app_server_lost`), so the wire shape is unchanged — modeling it as an enum\nkeeps a misspelled or invalid kind unrepresentable and gives every\nproducer/consumer (classifier, `is_failure`, the fallback fall-through rule,\nthe report, history) one definition to share instead of scattered string\nliterals.",
1944
1978
  "oneOf": [
1945
1979
  {
1946
1980
  "description": "Authentication / authorization rejected the request (401/403, missing or\ninvalid credentials).",
@@ -1991,6 +2025,11 @@
1991
2025
  "description": "Codex's provider reported that serving capacity was exhausted. When the\nresult has no answer, tool event, or billed usage, oneharness may retry\nthis identity briefly and then try a fallback identity; work evidence\npreserves the classified failure without retry or fallback.",
1992
2026
  "type": "string",
1993
2027
  "const": "server_overloaded"
2028
+ },
2029
+ {
2030
+ "description": "The shared Codex app-server a pooled dispatch's turn ran on went away\nunder it: the connection reached EOF, was closed, or refused a write\n(`EPIPE`) while oneharness's own record showed a turn started and not\ncompleted. The server crashed or was restarted, not the turn — so it is\nnever a turn failure, and a fallback chain moves on to its next\ncandidate (`\"app-server-lost\"`).",
2031
+ "type": "string",
2032
+ "const": "app_server_lost"
1994
2033
  }
1995
2034
  ]
1996
2035
  },
@@ -2077,6 +2116,11 @@
2077
2116
  "description": "Codex serving capacity remained exhausted after local retries.",
2078
2117
  "type": "string",
2079
2118
  "const": "server-overloaded"
2119
+ },
2120
+ {
2121
+ "description": "The shared Codex app-server went away under the candidate's live turn.",
2122
+ "type": "string",
2123
+ "const": "app-server-lost"
2080
2124
  }
2081
2125
  ]
2082
2126
  },
@@ -2742,6 +2786,29 @@
2742
2786
  "status"
2743
2787
  ]
2744
2788
  },
2789
+ "AppServerReport": {
2790
+ "description": "Which shared Codex app-server a pooled dispatch's turn ran on.",
2791
+ "type": "object",
2792
+ "properties": {
2793
+ "pid": {
2794
+ "description": "The pid the pool recorded for the server (its `server.json`): the\nprocess it launched, which is the launcher shim when Codex is one.",
2795
+ "type": "integer",
2796
+ "format": "uint32",
2797
+ "minimum": 1
2798
+ },
2799
+ "pool_key": {
2800
+ "description": "The pool entry the server belongs to — equal for every dispatch that\nshared it.",
2801
+ "type": "string",
2802
+ "maxLength": 128,
2803
+ "minLength": 1,
2804
+ "pattern": "^[A-Za-z0-9_-]+$"
2805
+ }
2806
+ },
2807
+ "required": [
2808
+ "pid",
2809
+ "pool_key"
2810
+ ]
2811
+ },
2745
2812
  "BatchReport": {
2746
2813
  "description": "Metadata for a same-prefix batch run (one harness, N prompts sharing a\ncacheable prefix). Present on [`RunReport::batch`] only in that mode.",
2747
2814
  "type": "object",
@@ -2863,6 +2930,17 @@
2863
2930
  "description": "The run report's `control` block: where the socket lived, which mechanism\nbacked it, and every request served over the run's lifetime.",
2864
2931
  "type": "object",
2865
2932
  "properties": {
2933
+ "app_server": {
2934
+ "description": "The shared Codex app-server the run's turn ran on, when it ran on one\n(`app_server = \"shared\"`). Absent for every other mechanism and for a\ndispatch's own `codex app-server` child.",
2935
+ "anyOf": [
2936
+ {
2937
+ "$ref": "#/$defs/AppServerReport"
2938
+ },
2939
+ {
2940
+ "type": "null"
2941
+ }
2942
+ ]
2943
+ },
2866
2944
  "interrupts": {
2867
2945
  "description": "Every control request served, in order.",
2868
2946
  "type": "array",
@@ -3021,7 +3099,7 @@
3021
3099
  ]
3022
3100
  },
3023
3101
  "FailureKind": {
3024
- "description": "The normalized, closed set of failure reasons oneharness can classify from a\nharness's output. It is the single source for the `failure_kind` contract\nvalue: serialized as the snake_case token a consumer reads in the report\n(`auth`, `rate_limit`, `model_not_found`, `quota`, `session_not_found`,\n`tool_deferred`, `server_overloaded`), so the wire shape is unchanged — modeling it as an enum\nkeeps a misspelled or invalid kind unrepresentable and gives every\nproducer/consumer (classifier, `is_failure`, the fallback fall-through rule,\nthe report, history) one definition to share instead of scattered string\nliterals.",
3102
+ "description": "The normalized, closed set of failure reasons oneharness can classify from a\nharness's output. It is the single source for the `failure_kind` contract\nvalue: serialized as the snake_case token a consumer reads in the report\n(`auth`, `rate_limit`, `model_not_found`, `quota`, `session_not_found`,\n`tool_deferred`, `server_overloaded`, `app_server_lost`), so the wire shape is unchanged — modeling it as an enum\nkeeps a misspelled or invalid kind unrepresentable and gives every\nproducer/consumer (classifier, `is_failure`, the fallback fall-through rule,\nthe report, history) one definition to share instead of scattered string\nliterals.",
3025
3103
  "oneOf": [
3026
3104
  {
3027
3105
  "description": "Authentication / authorization rejected the request (401/403, missing or\ninvalid credentials).",
@@ -3072,6 +3150,11 @@
3072
3150
  "description": "Codex's provider reported that serving capacity was exhausted. When the\nresult has no answer, tool event, or billed usage, oneharness may retry\nthis identity briefly and then try a fallback identity; work evidence\npreserves the classified failure without retry or fallback.",
3073
3151
  "type": "string",
3074
3152
  "const": "server_overloaded"
3153
+ },
3154
+ {
3155
+ "description": "The shared Codex app-server a pooled dispatch's turn ran on went away\nunder it: the connection reached EOF, was closed, or refused a write\n(`EPIPE`) while oneharness's own record showed a turn started and not\ncompleted. The server crashed or was restarted, not the turn — so it is\nnever a turn failure, and a fallback chain moves on to its next\ncandidate (`\"app-server-lost\"`).",
3156
+ "type": "string",
3157
+ "const": "app_server_lost"
3075
3158
  }
3076
3159
  ]
3077
3160
  },
@@ -3158,6 +3241,11 @@
3158
3241
  "description": "Codex serving capacity remained exhausted after local retries.",
3159
3242
  "type": "string",
3160
3243
  "const": "server-overloaded"
3244
+ },
3245
+ {
3246
+ "description": "The shared Codex app-server went away under the candidate's live turn.",
3247
+ "type": "string",
3248
+ "const": "app-server-lost"
3161
3249
  }
3162
3250
  ]
3163
3251
  },
@@ -4616,7 +4704,8 @@
4616
4704
  "1.6",
4617
4705
  "1.7",
4618
4706
  "1.8",
4619
- "1.9"
4707
+ "1.9",
4708
+ "1.10"
4620
4709
  ]
4621
4710
  },
4622
4711
  "session_name": {
@@ -4759,7 +4848,8 @@
4759
4848
  "1.6",
4760
4849
  "1.7",
4761
4850
  "1.8",
4762
- "1.9"
4851
+ "1.9",
4852
+ "1.10"
4763
4853
  ]
4764
4854
  }
4765
4855
  },
@@ -4821,7 +4911,8 @@
4821
4911
  "enum": [
4822
4912
  "1.7",
4823
4913
  "1.8",
4824
- "1.9"
4914
+ "1.9",
4915
+ "1.10"
4825
4916
  ]
4826
4917
  },
4827
4918
  "status": {
@@ -4868,7 +4959,8 @@
4868
4959
  "type": "string",
4869
4960
  "enum": [
4870
4961
  "1.8",
4871
- "1.9"
4962
+ "1.9",
4963
+ "1.10"
4872
4964
  ]
4873
4965
  }
4874
4966
  },
@@ -4907,7 +4999,8 @@
4907
4999
  "1.6",
4908
5000
  "1.7",
4909
5001
  "1.8",
4910
- "1.9"
5002
+ "1.9",
5003
+ "1.10"
4911
5004
  ]
4912
5005
  }
4913
5006
  }
@@ -4932,6 +5025,7 @@
4932
5025
  "input_too_large",
4933
5026
  "model_mismatch",
4934
5027
  "server_overloaded",
5028
+ "app_server_lost",
4935
5029
  null
4936
5030
  ]
4937
5031
  }
@@ -4947,7 +5041,8 @@
4947
5041
  "1.6",
4948
5042
  "1.7",
4949
5043
  "1.8",
4950
- "1.9"
5044
+ "1.9",
5045
+ "1.10"
4951
5046
  ]
4952
5047
  }
4953
5048
  }
@@ -4969,6 +5064,7 @@
4969
5064
  "tool_deferred",
4970
5065
  "model_mismatch",
4971
5066
  "server_overloaded",
5067
+ "app_server_lost",
4972
5068
  null
4973
5069
  ]
4974
5070
  }
@@ -4983,7 +5079,8 @@
4983
5079
  "1.6",
4984
5080
  "1.7",
4985
5081
  "1.8",
4986
- "1.9"
5082
+ "1.9",
5083
+ "1.10"
4987
5084
  ]
4988
5085
  }
4989
5086
  }
@@ -5006,6 +5103,7 @@
5006
5103
  "untrusted_directory",
5007
5104
  "input_too_large",
5008
5105
  "server_overloaded",
5106
+ "app_server_lost",
5009
5107
  null
5010
5108
  ]
5011
5109
  }
@@ -5018,7 +5116,8 @@
5018
5116
  "type": "string",
5019
5117
  "enum": [
5020
5118
  "1.8",
5021
- "1.9"
5119
+ "1.9",
5120
+ "1.10"
5022
5121
  ]
5023
5122
  }
5024
5123
  }
@@ -5041,6 +5140,7 @@
5041
5140
  "untrusted_directory",
5042
5141
  "input_too_large",
5043
5142
  "model_mismatch",
5143
+ "app_server_lost",
5044
5144
  null
5045
5145
  ]
5046
5146
  }
@@ -5052,7 +5152,43 @@
5052
5152
  "schema_version": {
5053
5153
  "type": "string",
5054
5154
  "enum": [
5055
- "1.9"
5155
+ "1.9",
5156
+ "1.10"
5157
+ ]
5158
+ }
5159
+ }
5160
+ }
5161
+ ]
5162
+ },
5163
+ {
5164
+ "anyOf": [
5165
+ {
5166
+ "type": "object",
5167
+ "properties": {
5168
+ "failure_kind": {
5169
+ "enum": [
5170
+ "auth",
5171
+ "rate_limit",
5172
+ "model_not_found",
5173
+ "quota",
5174
+ "session_not_found",
5175
+ "tool_deferred",
5176
+ "untrusted_directory",
5177
+ "input_too_large",
5178
+ "model_mismatch",
5179
+ "server_overloaded",
5180
+ null
5181
+ ]
5182
+ }
5183
+ }
5184
+ },
5185
+ {
5186
+ "type": "object",
5187
+ "properties": {
5188
+ "schema_version": {
5189
+ "type": "string",
5190
+ "enum": [
5191
+ "1.10"
5056
5192
  ]
5057
5193
  }
5058
5194
  }
@@ -5162,7 +5298,8 @@
5162
5298
  "1.6",
5163
5299
  "1.7",
5164
5300
  "1.8",
5165
- "1.9"
5301
+ "1.9",
5302
+ "1.10"
5166
5303
  ]
5167
5304
  },
5168
5305
  "session": {
@@ -5367,7 +5504,8 @@
5367
5504
  "1.6",
5368
5505
  "1.7",
5369
5506
  "1.8",
5370
- "1.9"
5507
+ "1.9",
5508
+ "1.10"
5371
5509
  ]
5372
5510
  },
5373
5511
  "session": {
@@ -5570,7 +5708,8 @@
5570
5708
  "1.6",
5571
5709
  "1.7",
5572
5710
  "1.8",
5573
- "1.9"
5711
+ "1.9",
5712
+ "1.10"
5574
5713
  ]
5575
5714
  },
5576
5715
  "session": {
@@ -5754,7 +5893,8 @@
5754
5893
  "1.6",
5755
5894
  "1.7",
5756
5895
  "1.8",
5757
- "1.9"
5896
+ "1.9",
5897
+ "1.10"
5758
5898
  ]
5759
5899
  },
5760
5900
  "session": {
@@ -5937,7 +6077,8 @@
5937
6077
  "1.6",
5938
6078
  "1.7",
5939
6079
  "1.8",
5940
- "1.9"
6080
+ "1.9",
6081
+ "1.10"
5941
6082
  ]
5942
6083
  },
5943
6084
  "session": {
@@ -6137,7 +6278,8 @@
6137
6278
  "1.6",
6138
6279
  "1.7",
6139
6280
  "1.8",
6140
- "1.9"
6281
+ "1.9",
6282
+ "1.10"
6141
6283
  ]
6142
6284
  },
6143
6285
  "session": {
@@ -6327,7 +6469,7 @@
6327
6469
  ]
6328
6470
  },
6329
6471
  "FailureKind": {
6330
- "description": "The normalized, closed set of failure reasons oneharness can classify from a\nharness's output. It is the single source for the `failure_kind` contract\nvalue: serialized as the snake_case token a consumer reads in the report\n(`auth`, `rate_limit`, `model_not_found`, `quota`, `session_not_found`,\n`tool_deferred`, `server_overloaded`), so the wire shape is unchanged — modeling it as an enum\nkeeps a misspelled or invalid kind unrepresentable and gives every\nproducer/consumer (classifier, `is_failure`, the fallback fall-through rule,\nthe report, history) one definition to share instead of scattered string\nliterals.",
6472
+ "description": "The normalized, closed set of failure reasons oneharness can classify from a\nharness's output. It is the single source for the `failure_kind` contract\nvalue: serialized as the snake_case token a consumer reads in the report\n(`auth`, `rate_limit`, `model_not_found`, `quota`, `session_not_found`,\n`tool_deferred`, `server_overloaded`, `app_server_lost`), so the wire shape is unchanged — modeling it as an enum\nkeeps a misspelled or invalid kind unrepresentable and gives every\nproducer/consumer (classifier, `is_failure`, the fallback fall-through rule,\nthe report, history) one definition to share instead of scattered string\nliterals.",
6331
6473
  "oneOf": [
6332
6474
  {
6333
6475
  "description": "Authentication / authorization rejected the request (401/403, missing or\ninvalid credentials).",
@@ -6378,6 +6520,11 @@
6378
6520
  "description": "Codex's provider reported that serving capacity was exhausted. When the\nresult has no answer, tool event, or billed usage, oneharness may retry\nthis identity briefly and then try a fallback identity; work evidence\npreserves the classified failure without retry or fallback.",
6379
6521
  "type": "string",
6380
6522
  "const": "server_overloaded"
6523
+ },
6524
+ {
6525
+ "description": "The shared Codex app-server a pooled dispatch's turn ran on went away\nunder it: the connection reached EOF, was closed, or refused a write\n(`EPIPE`) while oneharness's own record showed a turn started and not\ncompleted. The server crashed or was restarted, not the turn — so it is\nnever a turn failure, and a fallback chain moves on to its next\ncandidate (`\"app-server-lost\"`).",
6526
+ "type": "string",
6527
+ "const": "app_server_lost"
6381
6528
  }
6382
6529
  ]
6383
6530
  },
@@ -6605,7 +6752,8 @@
6605
6752
  "1.6",
6606
6753
  "1.7",
6607
6754
  "1.8",
6608
- "1.9"
6755
+ "1.9",
6756
+ "1.10"
6609
6757
  ]
6610
6758
  }
6611
6759
  },
@@ -6667,7 +6815,8 @@
6667
6815
  "enum": [
6668
6816
  "1.7",
6669
6817
  "1.8",
6670
- "1.9"
6818
+ "1.9",
6819
+ "1.10"
6671
6820
  ]
6672
6821
  },
6673
6822
  "status": {
@@ -6714,7 +6863,8 @@
6714
6863
  "type": "string",
6715
6864
  "enum": [
6716
6865
  "1.8",
6717
- "1.9"
6866
+ "1.9",
6867
+ "1.10"
6718
6868
  ]
6719
6869
  }
6720
6870
  },
@@ -6753,7 +6903,8 @@
6753
6903
  "1.6",
6754
6904
  "1.7",
6755
6905
  "1.8",
6756
- "1.9"
6906
+ "1.9",
6907
+ "1.10"
6757
6908
  ]
6758
6909
  }
6759
6910
  }
@@ -6778,6 +6929,7 @@
6778
6929
  "input_too_large",
6779
6930
  "model_mismatch",
6780
6931
  "server_overloaded",
6932
+ "app_server_lost",
6781
6933
  null
6782
6934
  ]
6783
6935
  }
@@ -6793,7 +6945,8 @@
6793
6945
  "1.6",
6794
6946
  "1.7",
6795
6947
  "1.8",
6796
- "1.9"
6948
+ "1.9",
6949
+ "1.10"
6797
6950
  ]
6798
6951
  }
6799
6952
  }
@@ -6815,6 +6968,7 @@
6815
6968
  "tool_deferred",
6816
6969
  "model_mismatch",
6817
6970
  "server_overloaded",
6971
+ "app_server_lost",
6818
6972
  null
6819
6973
  ]
6820
6974
  }
@@ -6829,7 +6983,8 @@
6829
6983
  "1.6",
6830
6984
  "1.7",
6831
6985
  "1.8",
6832
- "1.9"
6986
+ "1.9",
6987
+ "1.10"
6833
6988
  ]
6834
6989
  }
6835
6990
  }
@@ -6852,6 +7007,7 @@
6852
7007
  "untrusted_directory",
6853
7008
  "input_too_large",
6854
7009
  "server_overloaded",
7010
+ "app_server_lost",
6855
7011
  null
6856
7012
  ]
6857
7013
  }
@@ -6864,7 +7020,8 @@
6864
7020
  "type": "string",
6865
7021
  "enum": [
6866
7022
  "1.8",
6867
- "1.9"
7023
+ "1.9",
7024
+ "1.10"
6868
7025
  ]
6869
7026
  }
6870
7027
  }
@@ -6887,6 +7044,7 @@
6887
7044
  "untrusted_directory",
6888
7045
  "input_too_large",
6889
7046
  "model_mismatch",
7047
+ "app_server_lost",
6890
7048
  null
6891
7049
  ]
6892
7050
  }
@@ -6898,7 +7056,43 @@
6898
7056
  "schema_version": {
6899
7057
  "type": "string",
6900
7058
  "enum": [
6901
- "1.9"
7059
+ "1.9",
7060
+ "1.10"
7061
+ ]
7062
+ }
7063
+ }
7064
+ }
7065
+ ]
7066
+ },
7067
+ {
7068
+ "anyOf": [
7069
+ {
7070
+ "type": "object",
7071
+ "properties": {
7072
+ "failure_kind": {
7073
+ "enum": [
7074
+ "auth",
7075
+ "rate_limit",
7076
+ "model_not_found",
7077
+ "quota",
7078
+ "session_not_found",
7079
+ "tool_deferred",
7080
+ "untrusted_directory",
7081
+ "input_too_large",
7082
+ "model_mismatch",
7083
+ "server_overloaded",
7084
+ null
7085
+ ]
7086
+ }
7087
+ }
7088
+ },
7089
+ {
7090
+ "type": "object",
7091
+ "properties": {
7092
+ "schema_version": {
7093
+ "type": "string",
7094
+ "enum": [
7095
+ "1.10"
6902
7096
  ]
6903
7097
  }
6904
7098
  }
@@ -7208,7 +7402,8 @@
7208
7402
  "1.6",
7209
7403
  "1.7",
7210
7404
  "1.8",
7211
- "1.9"
7405
+ "1.9",
7406
+ "1.10"
7212
7407
  ]
7213
7408
  },
7214
7409
  "session": {
@@ -7868,7 +8063,8 @@
7868
8063
  "1.6",
7869
8064
  "1.7",
7870
8065
  "1.8",
7871
- "1.9"
8066
+ "1.9",
8067
+ "1.10"
7872
8068
  ]
7873
8069
  },
7874
8070
  "session": {
@@ -8066,7 +8262,8 @@
8066
8262
  "1.6",
8067
8263
  "1.7",
8068
8264
  "1.8",
8069
- "1.9"
8265
+ "1.9",
8266
+ "1.10"
8070
8267
  ]
8071
8268
  },
8072
8269
  "session": {
@@ -8262,7 +8459,8 @@
8262
8459
  "1.6",
8263
8460
  "1.7",
8264
8461
  "1.8",
8265
- "1.9"
8462
+ "1.9",
8463
+ "1.10"
8266
8464
  ]
8267
8465
  },
8268
8466
  "session": {
@@ -8459,7 +8657,8 @@
8459
8657
  "1.6",
8460
8658
  "1.7",
8461
8659
  "1.8",
8462
- "1.9"
8660
+ "1.9",
8661
+ "1.10"
8463
8662
  ]
8464
8663
  },
8465
8664
  "session": {
@@ -9367,7 +9566,7 @@
9367
9566
  ]
9368
9567
  },
9369
9568
  "FailureKind": {
9370
- "description": "The normalized, closed set of failure reasons oneharness can classify from a\nharness's output. It is the single source for the `failure_kind` contract\nvalue: serialized as the snake_case token a consumer reads in the report\n(`auth`, `rate_limit`, `model_not_found`, `quota`, `session_not_found`,\n`tool_deferred`, `server_overloaded`), so the wire shape is unchanged — modeling it as an enum\nkeeps a misspelled or invalid kind unrepresentable and gives every\nproducer/consumer (classifier, `is_failure`, the fallback fall-through rule,\nthe report, history) one definition to share instead of scattered string\nliterals.",
9569
+ "description": "The normalized, closed set of failure reasons oneharness can classify from a\nharness's output. It is the single source for the `failure_kind` contract\nvalue: serialized as the snake_case token a consumer reads in the report\n(`auth`, `rate_limit`, `model_not_found`, `quota`, `session_not_found`,\n`tool_deferred`, `server_overloaded`, `app_server_lost`), so the wire shape is unchanged — modeling it as an enum\nkeeps a misspelled or invalid kind unrepresentable and gives every\nproducer/consumer (classifier, `is_failure`, the fallback fall-through rule,\nthe report, history) one definition to share instead of scattered string\nliterals.",
9371
9570
  "oneOf": [
9372
9571
  {
9373
9572
  "description": "Authentication / authorization rejected the request (401/403, missing or\ninvalid credentials).",
@@ -9418,6 +9617,11 @@
9418
9617
  "description": "Codex's provider reported that serving capacity was exhausted. When the\nresult has no answer, tool event, or billed usage, oneharness may retry\nthis identity briefly and then try a fallback identity; work evidence\npreserves the classified failure without retry or fallback.",
9419
9618
  "type": "string",
9420
9619
  "const": "server_overloaded"
9620
+ },
9621
+ {
9622
+ "description": "The shared Codex app-server a pooled dispatch's turn ran on went away\nunder it: the connection reached EOF, was closed, or refused a write\n(`EPIPE`) while oneharness's own record showed a turn started and not\ncompleted. The server crashed or was restarted, not the turn — so it is\nnever a turn failure, and a fallback chain moves on to its next\ncandidate (`\"app-server-lost\"`).",
9623
+ "type": "string",
9624
+ "const": "app_server_lost"
9421
9625
  }
9422
9626
  ]
9423
9627
  },
@@ -9751,7 +9955,7 @@
9751
9955
  ]
9752
9956
  },
9753
9957
  "FailureKind": {
9754
- "description": "The normalized, closed set of failure reasons oneharness can classify from a\nharness's output. It is the single source for the `failure_kind` contract\nvalue: serialized as the snake_case token a consumer reads in the report\n(`auth`, `rate_limit`, `model_not_found`, `quota`, `session_not_found`,\n`tool_deferred`, `server_overloaded`), so the wire shape is unchanged — modeling it as an enum\nkeeps a misspelled or invalid kind unrepresentable and gives every\nproducer/consumer (classifier, `is_failure`, the fallback fall-through rule,\nthe report, history) one definition to share instead of scattered string\nliterals.",
9958
+ "description": "The normalized, closed set of failure reasons oneharness can classify from a\nharness's output. It is the single source for the `failure_kind` contract\nvalue: serialized as the snake_case token a consumer reads in the report\n(`auth`, `rate_limit`, `model_not_found`, `quota`, `session_not_found`,\n`tool_deferred`, `server_overloaded`, `app_server_lost`), so the wire shape is unchanged — modeling it as an enum\nkeeps a misspelled or invalid kind unrepresentable and gives every\nproducer/consumer (classifier, `is_failure`, the fallback fall-through rule,\nthe report, history) one definition to share instead of scattered string\nliterals.",
9755
9959
  "oneOf": [
9756
9960
  {
9757
9961
  "description": "Authentication / authorization rejected the request (401/403, missing or\ninvalid credentials).",
@@ -9802,6 +10006,11 @@
9802
10006
  "description": "Codex's provider reported that serving capacity was exhausted. When the\nresult has no answer, tool event, or billed usage, oneharness may retry\nthis identity briefly and then try a fallback identity; work evidence\npreserves the classified failure without retry or fallback.",
9803
10007
  "type": "string",
9804
10008
  "const": "server_overloaded"
10009
+ },
10010
+ {
10011
+ "description": "The shared Codex app-server a pooled dispatch's turn ran on went away\nunder it: the connection reached EOF, was closed, or refused a write\n(`EPIPE`) while oneharness's own record showed a turn started and not\ncompleted. The server crashed or was restarted, not the turn — so it is\nnever a turn failure, and a fallback chain moves on to its next\ncandidate (`\"app-server-lost\"`).",
10012
+ "type": "string",
10013
+ "const": "app_server_lost"
9805
10014
  }
9806
10015
  ]
9807
10016
  },
@@ -9841,7 +10050,8 @@
9841
10050
  "1.6",
9842
10051
  "1.7",
9843
10052
  "1.8",
9844
- "1.9"
10053
+ "1.9",
10054
+ "1.10"
9845
10055
  ]
9846
10056
  },
9847
10057
  "session_name": {
@@ -9990,7 +10200,8 @@
9990
10200
  "1.6",
9991
10201
  "1.7",
9992
10202
  "1.8",
9993
- "1.9"
10203
+ "1.9",
10204
+ "1.10"
9994
10205
  ]
9995
10206
  }
9996
10207
  },
@@ -10052,7 +10263,8 @@
10052
10263
  "enum": [
10053
10264
  "1.7",
10054
10265
  "1.8",
10055
- "1.9"
10266
+ "1.9",
10267
+ "1.10"
10056
10268
  ]
10057
10269
  },
10058
10270
  "status": {
@@ -10099,7 +10311,8 @@
10099
10311
  "type": "string",
10100
10312
  "enum": [
10101
10313
  "1.8",
10102
- "1.9"
10314
+ "1.9",
10315
+ "1.10"
10103
10316
  ]
10104
10317
  }
10105
10318
  },
@@ -10138,7 +10351,8 @@
10138
10351
  "1.6",
10139
10352
  "1.7",
10140
10353
  "1.8",
10141
- "1.9"
10354
+ "1.9",
10355
+ "1.10"
10142
10356
  ]
10143
10357
  }
10144
10358
  }
@@ -10163,6 +10377,7 @@
10163
10377
  "input_too_large",
10164
10378
  "model_mismatch",
10165
10379
  "server_overloaded",
10380
+ "app_server_lost",
10166
10381
  null
10167
10382
  ]
10168
10383
  }
@@ -10178,7 +10393,8 @@
10178
10393
  "1.6",
10179
10394
  "1.7",
10180
10395
  "1.8",
10181
- "1.9"
10396
+ "1.9",
10397
+ "1.10"
10182
10398
  ]
10183
10399
  }
10184
10400
  }
@@ -10200,6 +10416,7 @@
10200
10416
  "tool_deferred",
10201
10417
  "model_mismatch",
10202
10418
  "server_overloaded",
10419
+ "app_server_lost",
10203
10420
  null
10204
10421
  ]
10205
10422
  }
@@ -10214,7 +10431,8 @@
10214
10431
  "1.6",
10215
10432
  "1.7",
10216
10433
  "1.8",
10217
- "1.9"
10434
+ "1.9",
10435
+ "1.10"
10218
10436
  ]
10219
10437
  }
10220
10438
  }
@@ -10237,6 +10455,7 @@
10237
10455
  "untrusted_directory",
10238
10456
  "input_too_large",
10239
10457
  "server_overloaded",
10458
+ "app_server_lost",
10240
10459
  null
10241
10460
  ]
10242
10461
  }
@@ -10249,7 +10468,8 @@
10249
10468
  "type": "string",
10250
10469
  "enum": [
10251
10470
  "1.8",
10252
- "1.9"
10471
+ "1.9",
10472
+ "1.10"
10253
10473
  ]
10254
10474
  }
10255
10475
  }
@@ -10272,6 +10492,7 @@
10272
10492
  "untrusted_directory",
10273
10493
  "input_too_large",
10274
10494
  "model_mismatch",
10495
+ "app_server_lost",
10275
10496
  null
10276
10497
  ]
10277
10498
  }
@@ -10283,7 +10504,43 @@
10283
10504
  "schema_version": {
10284
10505
  "type": "string",
10285
10506
  "enum": [
10286
- "1.9"
10507
+ "1.9",
10508
+ "1.10"
10509
+ ]
10510
+ }
10511
+ }
10512
+ }
10513
+ ]
10514
+ },
10515
+ {
10516
+ "anyOf": [
10517
+ {
10518
+ "type": "object",
10519
+ "properties": {
10520
+ "failure_kind": {
10521
+ "enum": [
10522
+ "auth",
10523
+ "rate_limit",
10524
+ "model_not_found",
10525
+ "quota",
10526
+ "session_not_found",
10527
+ "tool_deferred",
10528
+ "untrusted_directory",
10529
+ "input_too_large",
10530
+ "model_mismatch",
10531
+ "server_overloaded",
10532
+ null
10533
+ ]
10534
+ }
10535
+ }
10536
+ },
10537
+ {
10538
+ "type": "object",
10539
+ "properties": {
10540
+ "schema_version": {
10541
+ "type": "string",
10542
+ "enum": [
10543
+ "1.10"
10287
10544
  ]
10288
10545
  }
10289
10546
  }
@@ -10593,7 +10850,8 @@
10593
10850
  "1.6",
10594
10851
  "1.7",
10595
10852
  "1.8",
10596
- "1.9"
10853
+ "1.9",
10854
+ "1.10"
10597
10855
  ]
10598
10856
  },
10599
10857
  "session": {
@@ -11253,7 +11511,8 @@
11253
11511
  "1.6",
11254
11512
  "1.7",
11255
11513
  "1.8",
11256
- "1.9"
11514
+ "1.9",
11515
+ "1.10"
11257
11516
  ]
11258
11517
  },
11259
11518
  "session": {
@@ -11451,7 +11710,8 @@
11451
11710
  "1.6",
11452
11711
  "1.7",
11453
11712
  "1.8",
11454
- "1.9"
11713
+ "1.9",
11714
+ "1.10"
11455
11715
  ]
11456
11716
  },
11457
11717
  "session": {
@@ -11647,7 +11907,8 @@
11647
11907
  "1.6",
11648
11908
  "1.7",
11649
11909
  "1.8",
11650
- "1.9"
11910
+ "1.9",
11911
+ "1.10"
11651
11912
  ]
11652
11913
  },
11653
11914
  "session": {
@@ -11844,7 +12105,8 @@
11844
12105
  "1.6",
11845
12106
  "1.7",
11846
12107
  "1.8",
11847
- "1.9"
12108
+ "1.9",
12109
+ "1.10"
11848
12110
  ]
11849
12111
  },
11850
12112
  "session": {
@@ -12933,7 +13195,7 @@
12933
13195
  ]
12934
13196
  },
12935
13197
  "FailureKind": {
12936
- "description": "The normalized, closed set of failure reasons oneharness can classify from a\nharness's output. It is the single source for the `failure_kind` contract\nvalue: serialized as the snake_case token a consumer reads in the report\n(`auth`, `rate_limit`, `model_not_found`, `quota`, `session_not_found`,\n`tool_deferred`, `server_overloaded`), so the wire shape is unchanged — modeling it as an enum\nkeeps a misspelled or invalid kind unrepresentable and gives every\nproducer/consumer (classifier, `is_failure`, the fallback fall-through rule,\nthe report, history) one definition to share instead of scattered string\nliterals.",
13198
+ "description": "The normalized, closed set of failure reasons oneharness can classify from a\nharness's output. It is the single source for the `failure_kind` contract\nvalue: serialized as the snake_case token a consumer reads in the report\n(`auth`, `rate_limit`, `model_not_found`, `quota`, `session_not_found`,\n`tool_deferred`, `server_overloaded`, `app_server_lost`), so the wire shape is unchanged — modeling it as an enum\nkeeps a misspelled or invalid kind unrepresentable and gives every\nproducer/consumer (classifier, `is_failure`, the fallback fall-through rule,\nthe report, history) one definition to share instead of scattered string\nliterals.",
12937
13199
  "oneOf": [
12938
13200
  {
12939
13201
  "description": "Authentication / authorization rejected the request (401/403, missing or\ninvalid credentials).",
@@ -12984,6 +13246,11 @@
12984
13246
  "description": "Codex's provider reported that serving capacity was exhausted. When the\nresult has no answer, tool event, or billed usage, oneharness may retry\nthis identity briefly and then try a fallback identity; work evidence\npreserves the classified failure without retry or fallback.",
12985
13247
  "type": "string",
12986
13248
  "const": "server_overloaded"
13249
+ },
13250
+ {
13251
+ "description": "The shared Codex app-server a pooled dispatch's turn ran on went away\nunder it: the connection reached EOF, was closed, or refused a write\n(`EPIPE`) while oneharness's own record showed a turn started and not\ncompleted. The server crashed or was restarted, not the turn — so it is\nnever a turn failure, and a fallback chain moves on to its next\ncandidate (`\"app-server-lost\"`).",
13252
+ "type": "string",
13253
+ "const": "app_server_lost"
12987
13254
  }
12988
13255
  ]
12989
13256
  },
@@ -13036,7 +13303,8 @@
13036
13303
  "1.6",
13037
13304
  "1.7",
13038
13305
  "1.8",
13039
- "1.9"
13306
+ "1.9",
13307
+ "1.10"
13040
13308
  ]
13041
13309
  }
13042
13310
  },
@@ -13098,7 +13366,8 @@
13098
13366
  "enum": [
13099
13367
  "1.7",
13100
13368
  "1.8",
13101
- "1.9"
13369
+ "1.9",
13370
+ "1.10"
13102
13371
  ]
13103
13372
  },
13104
13373
  "status": {
@@ -13145,7 +13414,8 @@
13145
13414
  "type": "string",
13146
13415
  "enum": [
13147
13416
  "1.8",
13148
- "1.9"
13417
+ "1.9",
13418
+ "1.10"
13149
13419
  ]
13150
13420
  }
13151
13421
  },
@@ -13184,7 +13454,8 @@
13184
13454
  "1.6",
13185
13455
  "1.7",
13186
13456
  "1.8",
13187
- "1.9"
13457
+ "1.9",
13458
+ "1.10"
13188
13459
  ]
13189
13460
  }
13190
13461
  }
@@ -13209,6 +13480,7 @@
13209
13480
  "input_too_large",
13210
13481
  "model_mismatch",
13211
13482
  "server_overloaded",
13483
+ "app_server_lost",
13212
13484
  null
13213
13485
  ]
13214
13486
  }
@@ -13224,7 +13496,8 @@
13224
13496
  "1.6",
13225
13497
  "1.7",
13226
13498
  "1.8",
13227
- "1.9"
13499
+ "1.9",
13500
+ "1.10"
13228
13501
  ]
13229
13502
  }
13230
13503
  }
@@ -13246,6 +13519,7 @@
13246
13519
  "tool_deferred",
13247
13520
  "model_mismatch",
13248
13521
  "server_overloaded",
13522
+ "app_server_lost",
13249
13523
  null
13250
13524
  ]
13251
13525
  }
@@ -13260,7 +13534,8 @@
13260
13534
  "1.6",
13261
13535
  "1.7",
13262
13536
  "1.8",
13263
- "1.9"
13537
+ "1.9",
13538
+ "1.10"
13264
13539
  ]
13265
13540
  }
13266
13541
  }
@@ -13283,6 +13558,7 @@
13283
13558
  "untrusted_directory",
13284
13559
  "input_too_large",
13285
13560
  "server_overloaded",
13561
+ "app_server_lost",
13286
13562
  null
13287
13563
  ]
13288
13564
  }
@@ -13295,7 +13571,44 @@
13295
13571
  "type": "string",
13296
13572
  "enum": [
13297
13573
  "1.8",
13298
- "1.9"
13574
+ "1.9",
13575
+ "1.10"
13576
+ ]
13577
+ }
13578
+ }
13579
+ }
13580
+ ]
13581
+ },
13582
+ {
13583
+ "anyOf": [
13584
+ {
13585
+ "type": "object",
13586
+ "properties": {
13587
+ "failure_kind": {
13588
+ "enum": [
13589
+ "auth",
13590
+ "rate_limit",
13591
+ "model_not_found",
13592
+ "quota",
13593
+ "session_not_found",
13594
+ "tool_deferred",
13595
+ "untrusted_directory",
13596
+ "input_too_large",
13597
+ "model_mismatch",
13598
+ "app_server_lost",
13599
+ null
13600
+ ]
13601
+ }
13602
+ }
13603
+ },
13604
+ {
13605
+ "type": "object",
13606
+ "properties": {
13607
+ "schema_version": {
13608
+ "type": "string",
13609
+ "enum": [
13610
+ "1.9",
13611
+ "1.10"
13299
13612
  ]
13300
13613
  }
13301
13614
  }
@@ -13318,6 +13631,7 @@
13318
13631
  "untrusted_directory",
13319
13632
  "input_too_large",
13320
13633
  "model_mismatch",
13634
+ "server_overloaded",
13321
13635
  null
13322
13636
  ]
13323
13637
  }
@@ -13329,7 +13643,7 @@
13329
13643
  "schema_version": {
13330
13644
  "type": "string",
13331
13645
  "enum": [
13332
- "1.9"
13646
+ "1.10"
13333
13647
  ]
13334
13648
  }
13335
13649
  }
@@ -13639,7 +13953,8 @@
13639
13953
  "1.6",
13640
13954
  "1.7",
13641
13955
  "1.8",
13642
- "1.9"
13956
+ "1.9",
13957
+ "1.10"
13643
13958
  ]
13644
13959
  },
13645
13960
  "session": {
@@ -14299,7 +14614,8 @@
14299
14614
  "1.6",
14300
14615
  "1.7",
14301
14616
  "1.8",
14302
- "1.9"
14617
+ "1.9",
14618
+ "1.10"
14303
14619
  ]
14304
14620
  },
14305
14621
  "session": {
@@ -14497,7 +14813,8 @@
14497
14813
  "1.6",
14498
14814
  "1.7",
14499
14815
  "1.8",
14500
- "1.9"
14816
+ "1.9",
14817
+ "1.10"
14501
14818
  ]
14502
14819
  },
14503
14820
  "session": {
@@ -14693,7 +15010,8 @@
14693
15010
  "1.6",
14694
15011
  "1.7",
14695
15012
  "1.8",
14696
- "1.9"
15013
+ "1.9",
15014
+ "1.10"
14697
15015
  ]
14698
15016
  },
14699
15017
  "session": {
@@ -14890,7 +15208,8 @@
14890
15208
  "1.6",
14891
15209
  "1.7",
14892
15210
  "1.8",
14893
- "1.9"
15211
+ "1.9",
15212
+ "1.10"
14894
15213
  ]
14895
15214
  },
14896
15215
  "session": {
@@ -16628,6 +16947,21 @@
16628
16947
  "harness"
16629
16948
  ],
16630
16949
  "$defs": {
16950
+ "AppServerMode": {
16951
+ "description": "Where a controlled (`--control`) Codex dispatch's turn runs: the\n`app_server` key of `[harness.codex]` and `[harness.codex.variant.<name>]`.\n\nResolved variant, then harness, then [`AppServerMode::Shared`] on every\nplatform, apart from `args` exactly as `plugins` is\n([`FileConfig::app_server_for`]). Accepted only for `codex`.",
16952
+ "oneOf": [
16953
+ {
16954
+ "description": "One `codex app-server --listen unix://…` per pool key, shared by every\nconcurrent dispatch with that key and managed by oneharness's server\npool. The default.",
16955
+ "type": "string",
16956
+ "const": "shared"
16957
+ },
16958
+ {
16959
+ "description": "The dispatch's own `codex app-server` stdio child, started for it and\ntorn down with it — the behavior before pooling.",
16960
+ "type": "string",
16961
+ "const": "per-dispatch"
16962
+ }
16963
+ ]
16964
+ },
16631
16965
  "Field": {
16632
16966
  "description": "One resolved field in the `oneharness config` report: the effective value\nplus where it came from (a config file path, or [`DEFAULT_SOURCE`]). Both\nare `null` when the field is unset everywhere and has no built-in default.",
16633
16967
  "type": "object",
@@ -16675,6 +17009,32 @@
16675
17009
  "source"
16676
17010
  ]
16677
17011
  },
17012
+ "Field11": {
17013
+ "description": "One resolved field in the `oneharness config` report: the effective value\nplus where it came from (a config file path, or [`DEFAULT_SOURCE`]). Both\nare `null` when the field is unset everywhere and has no built-in default.",
17014
+ "type": "object",
17015
+ "properties": {
17016
+ "source": {
17017
+ "type": [
17018
+ "string",
17019
+ "null"
17020
+ ]
17021
+ },
17022
+ "value": {
17023
+ "anyOf": [
17024
+ {
17025
+ "$ref": "#/$defs/AppServerMode"
17026
+ },
17027
+ {
17028
+ "type": "null"
17029
+ }
17030
+ ]
17031
+ }
17032
+ },
17033
+ "required": [
17034
+ "value",
17035
+ "source"
17036
+ ]
17037
+ },
16678
17038
  "Field2": {
16679
17039
  "description": "One resolved field in the `oneharness config` report: the effective value\nplus where it came from (a config file path, or [`DEFAULT_SOURCE`]). Both\nare `null` when the field is unset everywhere and has no built-in default.",
16680
17040
  "type": "object",
@@ -16879,6 +17239,39 @@
16879
17239
  "allowed_tools": {
16880
17240
  "$ref": "#/$defs/Field2"
16881
17241
  },
17242
+ "analytics": {
17243
+ "description": "The resolved `analytics` (`false` by default), present only for `codex`.",
17244
+ "anyOf": [
17245
+ {
17246
+ "$ref": "#/$defs/Field"
17247
+ },
17248
+ {
17249
+ "type": "null"
17250
+ }
17251
+ ]
17252
+ },
17253
+ "app_server": {
17254
+ "description": "The resolved `app_server` (`\"shared\"` by default), present only for\n`codex`.",
17255
+ "anyOf": [
17256
+ {
17257
+ "$ref": "#/$defs/Field11"
17258
+ },
17259
+ {
17260
+ "type": "null"
17261
+ }
17262
+ ]
17263
+ },
17264
+ "apps": {
17265
+ "description": "The resolved `apps` opt-in (`false` by default), present only for\n`codex`.",
17266
+ "anyOf": [
17267
+ {
17268
+ "$ref": "#/$defs/Field"
17269
+ },
17270
+ {
17271
+ "type": "null"
17272
+ }
17273
+ ]
17274
+ },
16882
17275
  "args": {
16883
17276
  "$ref": "#/$defs/Field2"
16884
17277
  },
@@ -16901,6 +17294,17 @@
16901
17294
  "model": {
16902
17295
  "$ref": "#/$defs/Field3"
16903
17296
  },
17297
+ "model_catalog_refresh_seconds": {
17298
+ "description": "The resolved `model_catalog_refresh_seconds` (`3600` by default),\npresent only for `codex`.",
17299
+ "anyOf": [
17300
+ {
17301
+ "$ref": "#/$defs/Field5"
17302
+ },
17303
+ {
17304
+ "type": "null"
17305
+ }
17306
+ ]
17307
+ },
16904
17308
  "plugins": {
16905
17309
  "description": "The resolved plugins opt-in (`false` by default), present only for a\nharness with a plugins feature (`codex`).",
16906
17310
  "anyOf": [
@@ -16919,6 +17323,17 @@
16919
17323
  "type": "object",
16920
17324
  "additionalProperties": true
16921
17325
  },
17326
+ "shared_model_catalog": {
17327
+ "description": "The resolved `shared_model_catalog` (`true` by default), present only\nfor `codex`.",
17328
+ "anyOf": [
17329
+ {
17330
+ "$ref": "#/$defs/Field"
17331
+ },
17332
+ {
17333
+ "type": "null"
17334
+ }
17335
+ ]
17336
+ },
16922
17337
  "variant": {
16923
17338
  "type": "object",
16924
17339
  "additionalProperties": {
@@ -17066,6 +17481,39 @@
17066
17481
  "allowed_tools": {
17067
17482
  "$ref": "#/$defs/Field2"
17068
17483
  },
17484
+ "analytics": {
17485
+ "description": "The `analytics` a launch of this variant resolves to: the variant's own,\nelse its harness's, else `false`. Present only for `codex`.",
17486
+ "anyOf": [
17487
+ {
17488
+ "$ref": "#/$defs/Field"
17489
+ },
17490
+ {
17491
+ "type": "null"
17492
+ }
17493
+ ]
17494
+ },
17495
+ "app_server": {
17496
+ "description": "The `app_server` a launch of this variant resolves to: the variant's\nown, else its harness's, else `\"shared\"`. Present only for `codex`.",
17497
+ "anyOf": [
17498
+ {
17499
+ "$ref": "#/$defs/Field11"
17500
+ },
17501
+ {
17502
+ "type": "null"
17503
+ }
17504
+ ]
17505
+ },
17506
+ "apps": {
17507
+ "description": "The apps opt-in a launch of this variant resolves to: the variant's\nown, else its harness's, else `false`. Present only for `codex`.",
17508
+ "anyOf": [
17509
+ {
17510
+ "$ref": "#/$defs/Field"
17511
+ },
17512
+ {
17513
+ "type": "null"
17514
+ }
17515
+ ]
17516
+ },
17069
17517
  "args": {
17070
17518
  "$ref": "#/$defs/Field2"
17071
17519
  },
@@ -17097,6 +17545,17 @@
17097
17545
  "model": {
17098
17546
  "$ref": "#/$defs/Field3"
17099
17547
  },
17548
+ "model_catalog_refresh_seconds": {
17549
+ "description": "The `model_catalog_refresh_seconds` a launch of this variant resolves\nto: the variant's own, else its harness's, else `3600`. Present only for\n`codex`.",
17550
+ "anyOf": [
17551
+ {
17552
+ "$ref": "#/$defs/Field5"
17553
+ },
17554
+ {
17555
+ "type": "null"
17556
+ }
17557
+ ]
17558
+ },
17100
17559
  "plugins": {
17101
17560
  "description": "The plugins opt-in a launch of this variant resolves to: the variant's\nown, else its harness's, else `false`. Present only for a harness with\na plugins feature (`codex`).",
17102
17561
  "anyOf": [
@@ -17115,6 +17574,17 @@
17115
17574
  "type": "object",
17116
17575
  "additionalProperties": true
17117
17576
  },
17577
+ "shared_model_catalog": {
17578
+ "description": "The `shared_model_catalog` a launch of this variant resolves to: the\nvariant's own, else its harness's, else `true`. Present only for `codex`.",
17579
+ "anyOf": [
17580
+ {
17581
+ "$ref": "#/$defs/Field"
17582
+ },
17583
+ {
17584
+ "type": "null"
17585
+ }
17586
+ ]
17587
+ },
17118
17588
  "unset_env": {
17119
17589
  "$ref": "#/$defs/Field2"
17120
17590
  }