@bitkyc08/opencodex 2.26.0 → 2.27.0

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 (55) hide show
  1. package/gui/dist/assets/{index-RL6b1bTV.js → index-7jlKgmJd.js} +14 -14
  2. package/gui/dist/index.html +1 -1
  3. package/package.json +1 -1
  4. package/src/adapters/anthropic.ts +1 -1
  5. package/src/adapters/base.ts +14 -2
  6. package/src/adapters/command-code.ts +4 -3
  7. package/src/adapters/cursor/cursor-errors.ts +15 -0
  8. package/src/adapters/cursor/live-transport.ts +14 -1
  9. package/src/adapters/google.ts +1 -1
  10. package/src/adapters/openai-chat.ts +38 -6
  11. package/src/adapters/tool-catalog-nudge.ts +1 -1
  12. package/src/bridge.ts +11 -5
  13. package/src/cli/doctor.ts +76 -0
  14. package/src/cli/help.ts +2 -0
  15. package/src/cli/models.ts +13 -6
  16. package/src/codex/app-server-processes.ts +269 -37
  17. package/src/codex/auth-context.ts +53 -1
  18. package/src/codex/catalog/aggregation.ts +3 -0
  19. package/src/codex/catalog/parsing.ts +20 -3
  20. package/src/codex/catalog/provider-fetch.ts +8 -0
  21. package/src/codex/catalog/sync.ts +6 -4
  22. package/src/codex/log-guard/path-safety.ts +52 -3
  23. package/src/codex/native-profile-startup.ts +100 -2
  24. package/src/codex/user-identity.ts +21 -1
  25. package/src/config/provider-name.ts +24 -0
  26. package/src/config.ts +11 -24
  27. package/src/generated/compatibility-version.json +73 -45
  28. package/src/images/loop.ts +11 -4
  29. package/src/lib/state-store-registrations.ts +8 -2
  30. package/src/providers/antigravity-models.ts +70 -5
  31. package/src/providers/derive.ts +12 -2
  32. package/src/providers/registry.ts +46 -1
  33. package/src/providers/service-tier.ts +34 -7
  34. package/src/responses/parser.ts +56 -2
  35. package/src/responses/state.ts +162 -5
  36. package/src/router.ts +10 -3
  37. package/src/routing/compatibility/behavior.ts +3 -3
  38. package/src/routing/profile.ts +1 -1
  39. package/src/server/index.ts +5 -0
  40. package/src/server/management/shared.ts +3 -1
  41. package/src/server/responses/collaboration.ts +34 -9
  42. package/src/server/responses/core.ts +13 -4
  43. package/src/server/responses/input-admission.ts +7 -2
  44. package/src/service-manager-probe.ts +99 -0
  45. package/src/service.ts +86 -6
  46. package/src/tray/windows.ts +25 -5
  47. package/src/types/accounts.ts +37 -0
  48. package/src/types/config.ts +818 -0
  49. package/src/types/provider.ts +521 -0
  50. package/src/types/request.ts +358 -0
  51. package/src/types/tools.ts +131 -0
  52. package/src/types/wire.ts +80 -0
  53. package/src/types.ts +103 -1883
  54. package/src/usage/cost.ts +37 -1
  55. package/src/web-search/loop.ts +11 -4
@@ -10,7 +10,7 @@
10
10
  },
11
11
  {
12
12
  "path": "package.json",
13
- "sha256": "6f5cf9089f862aa882d31d789900771e9be0157832471cf91cc5fc2069a4b3c6"
13
+ "sha256": "f51abeea3f3868735b479d9b97b58e7cbdc452e9e5cc4937dfa794a40d9e10c7"
14
14
  },
15
15
  {
16
16
  "path": "scripts/model-metadata.source.json",
@@ -34,7 +34,7 @@
34
34
  },
35
35
  {
36
36
  "path": "src/adapters/anthropic.ts",
37
- "sha256": "afd6f5ef9fab45811c67067bdb6731fc8efa3abb7bc2a7bee109445ca9c06467"
37
+ "sha256": "1d332a1ca8a265bd1e2f534fafed109c5fffc0b60fabd721b52e374c36482230"
38
38
  },
39
39
  {
40
40
  "path": "src/adapters/azure.ts",
@@ -42,7 +42,7 @@
42
42
  },
43
43
  {
44
44
  "path": "src/adapters/base.ts",
45
- "sha256": "24c1f585b7d6523e4b83f275e58d1228721952ed90f4d3c002250a10a3346dbe"
45
+ "sha256": "e3371fb84f8af57cc772bb3b79b1b5af08a6158cb7bdb815b4c8fafb5eaf91e5"
46
46
  },
47
47
  {
48
48
  "path": "src/adapters/client-fingerprint.ts",
@@ -54,7 +54,7 @@
54
54
  },
55
55
  {
56
56
  "path": "src/adapters/command-code.ts",
57
- "sha256": "9b4a9eb9ab8c37541d0478ee50d28ea94b9dee127f75fbc85004ca264af67aaa"
57
+ "sha256": "de5e96d0c8d15ae11c7db6332b73387fe56d12ea38b87e8f2a9d8b805c3dc94d"
58
58
  },
59
59
  {
60
60
  "path": "src/adapters/cursor.ts",
@@ -70,7 +70,7 @@
70
70
  },
71
71
  {
72
72
  "path": "src/adapters/cursor/cursor-errors.ts",
73
- "sha256": "aa27cf53056f48c4ed4ccc2262d5a84c0b96b79a3a77db5be7ca27256dfba9c4"
73
+ "sha256": "0b84e2a511c90a66d68b6a995cdc8c6a1fdcfe3a0337b06cd14b93d2e18d66c9"
74
74
  },
75
75
  {
76
76
  "path": "src/adapters/cursor/discovery.ts",
@@ -110,7 +110,7 @@
110
110
  },
111
111
  {
112
112
  "path": "src/adapters/cursor/live-transport.ts",
113
- "sha256": "bc198c05ee076de046e67a58b32ab8fce4d95466204bf6f7c999c2dd754e59a5"
113
+ "sha256": "ec9d1312299bdf29460813effa8871e52d51a2ebf803f54820031952b693b806"
114
114
  },
115
115
  {
116
116
  "path": "src/adapters/cursor/mcp-config.ts",
@@ -222,7 +222,7 @@
222
222
  },
223
223
  {
224
224
  "path": "src/adapters/google.ts",
225
- "sha256": "2519534dbf0366c695fc4f9618068ba1e6938182e5e929d295a05d6bad19ac40"
225
+ "sha256": "e773b9fc6481ad14b075ceebf4fa950405fe9d775454408d8df37044b17a5aaf"
226
226
  },
227
227
  {
228
228
  "path": "src/adapters/identity.ts",
@@ -286,7 +286,7 @@
286
286
  },
287
287
  {
288
288
  "path": "src/adapters/openai-chat.ts",
289
- "sha256": "d5d5d11129918b1862f80024ef3f84b0c39d005177792838aa0289a9a7427b96"
289
+ "sha256": "da14137945b5df7764ef9c40e24b0ebce284bf2d91acf620921041eeff61e7cb"
290
290
  },
291
291
  {
292
292
  "path": "src/adapters/openai-responses-url.ts",
@@ -314,7 +314,7 @@
314
314
  },
315
315
  {
316
316
  "path": "src/adapters/tool-catalog-nudge.ts",
317
- "sha256": "9750e8b4ce000ac452482141bfe27add3577341cc30d1403c05a509bee11044c"
317
+ "sha256": "1958bac97f4072669e398ca123f7e035fde883fc583aa63b7104c8a7c38f5250"
318
318
  },
319
319
  {
320
320
  "path": "src/adapters/upstream-http-error.ts",
@@ -322,7 +322,7 @@
322
322
  },
323
323
  {
324
324
  "path": "src/bridge.ts",
325
- "sha256": "6027aa6b1bb8f05b99c5419cd6d55832622ce3a9ff5fa33e531ea54207f9ba90"
325
+ "sha256": "0397dbcf209d86d074223cd81b3d66c900a76f1d482713b67c08acc88b077a0e"
326
326
  },
327
327
  {
328
328
  "path": "src/chat/inbound.ts",
@@ -478,7 +478,7 @@
478
478
  },
479
479
  {
480
480
  "path": "src/cli/doctor.ts",
481
- "sha256": "fa21147f61cfaf78e5b23e22638cf679e939d54e5377f9a37d4973dbd0b828b3"
481
+ "sha256": "ce42bf3a086291ff48d4456f16b77cfc77100e0996cff32983ef137235a4b7cb"
482
482
  },
483
483
  {
484
484
  "path": "src/cli/export-command.ts",
@@ -486,7 +486,7 @@
486
486
  },
487
487
  {
488
488
  "path": "src/cli/help.ts",
489
- "sha256": "ba2f6e629dabc3e8f58a69963cae267cc188d9acad6460828c7eb3e570b6497c"
489
+ "sha256": "70385569ae5922bdbff7a3bb2bca81fbb5c913a54440fc30ad19433151764517"
490
490
  },
491
491
  {
492
492
  "path": "src/cli/index.ts",
@@ -522,7 +522,7 @@
522
522
  },
523
523
  {
524
524
  "path": "src/cli/models.ts",
525
- "sha256": "a7ddece988af02fc1ebbf4f97bbed882ab70713048c65b094b62bba42b99036f"
525
+ "sha256": "2fc87036bf9fcce60d90a55dfcf5f91487a038cfb3bad8956ead28ec9058c858"
526
526
  },
527
527
  {
528
528
  "path": "src/cli/observe.ts",
@@ -638,7 +638,7 @@
638
638
  },
639
639
  {
640
640
  "path": "src/codex/app-server-processes.ts",
641
- "sha256": "0218c4e432ad02a814d818e04fc5ba8c36864f8fcfd592ef674f9c476e56cb77"
641
+ "sha256": "74d7a0e50b11a977270faffd481b9996abaea3d1239bc09e477b85d3c13b83c5"
642
642
  },
643
643
  {
644
644
  "path": "src/codex/app-server-restart-service.ts",
@@ -654,7 +654,7 @@
654
654
  },
655
655
  {
656
656
  "path": "src/codex/auth-context.ts",
657
- "sha256": "7fe1b5593315309532b6f25d53de17ccf4f01677366f1e69c0b94f83e0c6329a"
657
+ "sha256": "4ee0af8ad36c280e74055ed0b6a4652e3f56f1aa76b97d95d97ddd67e9f91465"
658
658
  },
659
659
  {
660
660
  "path": "src/codex/autostart-health.ts",
@@ -682,7 +682,7 @@
682
682
  },
683
683
  {
684
684
  "path": "src/codex/catalog/aggregation.ts",
685
- "sha256": "71ccd782c527179ae5ffd324bdb966e1f6b838d1e87ef4c6f115bb8d76bb7684"
685
+ "sha256": "4c3ee463d05c005b0127926d756f81e7d01adbbd68be3130724410c428bda6f7"
686
686
  },
687
687
  {
688
688
  "path": "src/codex/catalog/bundled.ts",
@@ -710,15 +710,15 @@
710
710
  },
711
711
  {
712
712
  "path": "src/codex/catalog/parsing.ts",
713
- "sha256": "18f9a24b0770c52d203f8acc446e43e7fba9e42408cc29b612470acd1f0fee8b"
713
+ "sha256": "fcc5e9dd4a6d8bffcc1aa30f5ffb4f1808c6aac986d1a5542305b946e44546e7"
714
714
  },
715
715
  {
716
716
  "path": "src/codex/catalog/provider-fetch.ts",
717
- "sha256": "a943c7b1d879f4e3da3211043e636583f5be7f7357ac9d71db93bb49c25dccd3"
717
+ "sha256": "2f79fd574e5bbd1da13b42d68013c0137a0718fa2234ad877e3ca3118494cd46"
718
718
  },
719
719
  {
720
720
  "path": "src/codex/catalog/sync.ts",
721
- "sha256": "e965307acfa331e50e4ce5f9df5232c6016168219b84c45565ec98cfc70d7aab"
721
+ "sha256": "c0fa454b88d4efa4109039a33510cbdc0e547499d6d521debb2f7f2f614c0dfe"
722
722
  },
723
723
  {
724
724
  "path": "src/codex/codex-write-lock.ts",
@@ -826,7 +826,7 @@
826
826
  },
827
827
  {
828
828
  "path": "src/codex/log-guard/path-safety.ts",
829
- "sha256": "8df1c28dafbe16417dcc474fe06c63ec0d6b8367d47971569b4a80a17a614e16"
829
+ "sha256": "4c967fe1e04202d44d2e23df99d0f8935350025c3c28e7d23546821218616e9a"
830
830
  },
831
831
  {
832
832
  "path": "src/codex/log-guard/policy.ts",
@@ -902,7 +902,7 @@
902
902
  },
903
903
  {
904
904
  "path": "src/codex/native-profile-startup.ts",
905
- "sha256": "1417a440aa78a84f04c4e45dbcd6c3d47c04270844275292b9dbd1bf9b6c8146"
905
+ "sha256": "2a21187577eb53bb818c5170ba49aa7ba43df203c700fbb435deb5a7ac8c413b"
906
906
  },
907
907
  {
908
908
  "path": "src/codex/native-profile-store.ts",
@@ -1002,7 +1002,7 @@
1002
1002
  },
1003
1003
  {
1004
1004
  "path": "src/codex/user-identity.ts",
1005
- "sha256": "9641f00a7213ea6cb85cdc38adcbab1615815ca1eda878d5bfc3513e023243c7"
1005
+ "sha256": "ada727e575a421b2571bd4af616a5707042d686e2a36b3847c35c6c128d122b6"
1006
1006
  },
1007
1007
  {
1008
1008
  "path": "src/codex/warmup.ts",
@@ -1038,7 +1038,11 @@
1038
1038
  },
1039
1039
  {
1040
1040
  "path": "src/config.ts",
1041
- "sha256": "47a45addede39075329436bc21c271908a05d961c34a131241f86db1a9183620"
1041
+ "sha256": "503fa58079502d808a568a1f11ac757208efae01307f7ac55783493cbc4ab7c8"
1042
+ },
1043
+ {
1044
+ "path": "src/config/provider-name.ts",
1045
+ "sha256": "3b19ad53e350808174a5e40fc1c873054e8b869c3ae463d984ee608e9d5bbcb3"
1042
1046
  },
1043
1047
  {
1044
1048
  "path": "src/generated/model-metadata.ts",
@@ -1082,7 +1086,7 @@
1082
1086
  },
1083
1087
  {
1084
1088
  "path": "src/images/loop.ts",
1085
- "sha256": "ef661e3dac6da842d62d681899e0e4e797182b7d3f690550edd713aa98bc8df5"
1089
+ "sha256": "c5b684bfd9aea1553cdb84e66af89d61fa5eee02bc45ae19996a071fca5c3892"
1086
1090
  },
1087
1091
  {
1088
1092
  "path": "src/images/plan.ts",
@@ -1826,7 +1830,7 @@
1826
1830
  },
1827
1831
  {
1828
1832
  "path": "src/lib/state-store-registrations.ts",
1829
- "sha256": "ded3bb3afd740d5b3e551a71bb910e25eab68d6546c7b635cc270f82a0b700e2"
1833
+ "sha256": "3bfa6dd9ce8e2211ad65db0957d0767fddce95567ac531a2b5c0d9659fe7b26f"
1830
1834
  },
1831
1835
  {
1832
1836
  "path": "src/lib/state-store-sweeper.ts",
@@ -2030,7 +2034,7 @@
2030
2034
  },
2031
2035
  {
2032
2036
  "path": "src/providers/antigravity-models.ts",
2033
- "sha256": "7ad7659f17b3782bbf114e46cdfefba7d8894d4d5f71332f30865c07bcbd3076"
2037
+ "sha256": "81535ac49237b29eac0197350a3e11b09006dec8b7a20c03cf582b201f8b0350"
2034
2038
  },
2035
2039
  {
2036
2040
  "path": "src/providers/api-keys.ts",
@@ -2054,7 +2058,7 @@
2054
2058
  },
2055
2059
  {
2056
2060
  "path": "src/providers/derive.ts",
2057
- "sha256": "928ce1accf9505c0cea8edd0f07af35236f6763beac8e03b9178c15e5486b1d8"
2061
+ "sha256": "62ba3d34ca466b56fa5dc9c8efa911ac7e02f0f2d65863bafda5a5b778b94653"
2058
2062
  },
2059
2063
  {
2060
2064
  "path": "src/providers/fastwire.ts",
@@ -2134,7 +2138,7 @@
2134
2138
  },
2135
2139
  {
2136
2140
  "path": "src/providers/registry.ts",
2137
- "sha256": "4cf5a3638f38b615c8b2f5bab22aeec1e07c6538b5f51739c00da978eac707d8"
2141
+ "sha256": "336fd0d6d81354a69b8c577e162dd73dd69e196b13ef82d51720897fc16d9fa5"
2138
2142
  },
2139
2143
  {
2140
2144
  "path": "src/providers/request-pacing.ts",
@@ -2142,7 +2146,7 @@
2142
2146
  },
2143
2147
  {
2144
2148
  "path": "src/providers/service-tier.ts",
2145
- "sha256": "3090e35a061cb40f76e271728845c4a38309a2679f4a755de6813603bf8f9631"
2149
+ "sha256": "ebfb65e1e4983d60504a91ed4c97bb5df541b6307bbec1436f9999e2ff524545"
2146
2150
  },
2147
2151
  {
2148
2152
  "path": "src/providers/slug-codec.ts",
@@ -2174,7 +2178,7 @@
2174
2178
  },
2175
2179
  {
2176
2180
  "path": "src/responses/parser.ts",
2177
- "sha256": "a0fb93855724c9308d3423890decc13c9c4bbc6d2ec9abd09793edc3df0e9d26"
2181
+ "sha256": "ad950568ee4f921b33a94acfaf214ddabe31c9701f6e7d4d73923f34a1b466e3"
2178
2182
  },
2179
2183
  {
2180
2184
  "path": "src/responses/provider-opaque-metadata.ts",
@@ -2198,7 +2202,7 @@
2198
2202
  },
2199
2203
  {
2200
2204
  "path": "src/responses/state.ts",
2201
- "sha256": "761a96f2839ee22f7cea11f037424a13bd1dedb0f747f1bc35a81c91ca9b0bbd"
2205
+ "sha256": "701ce7f64b4e647bb2b1ebf79620addab5eaf1284855e9c5c50d446144d455fa"
2202
2206
  },
2203
2207
  {
2204
2208
  "path": "src/responses/thought-signature-replay.ts",
@@ -2214,7 +2218,7 @@
2214
2218
  },
2215
2219
  {
2216
2220
  "path": "src/router.ts",
2217
- "sha256": "25b244da940b140d379f3cb2ded590519690436c08459fa356972bce95aa2b9f"
2221
+ "sha256": "9eb5c0ea04fcb51150d91308138d3fab25dd19a85bc7bb273295c7924e1b128e"
2218
2222
  },
2219
2223
  {
2220
2224
  "path": "src/routing/analytics.ts",
@@ -2230,7 +2234,7 @@
2230
2234
  },
2231
2235
  {
2232
2236
  "path": "src/routing/compatibility/behavior.ts",
2233
- "sha256": "8227f4e7a177bd628e8226ea6e4fa88d8f2a4a6c1e919989fab9c8bbf1724508"
2237
+ "sha256": "e7006c3aebe1d36b6d7a9cd97f287599fc231ba0ddb7163c7a502ac67ad6d84f"
2234
2238
  },
2235
2239
  {
2236
2240
  "path": "src/routing/compatibility/catalog.ts",
@@ -2298,7 +2302,7 @@
2298
2302
  },
2299
2303
  {
2300
2304
  "path": "src/routing/profile.ts",
2301
- "sha256": "5e8cd20b9f8a9c0ef3537c96158b59e93c13593ad07841e18b71ee36923bb867"
2305
+ "sha256": "3ce7c68aff2b8b646d48c5c14b10336f0cf699df46ccd7abe0bbaf97fb939e06"
2302
2306
  },
2303
2307
  {
2304
2308
  "path": "src/routing/quota.ts",
@@ -2366,7 +2370,7 @@
2366
2370
  },
2367
2371
  {
2368
2372
  "path": "src/server/index.ts",
2369
- "sha256": "3d0cbcbb1a2e99d1cba0b26f316ceedc56fa29d9cb2e535d22bebee1b9539b60"
2373
+ "sha256": "a7276cdfd8dd11936c52c5235378d2ea7bc8d47ee64ba8ef07a5738cb34bcb28"
2370
2374
  },
2371
2375
  {
2372
2376
  "path": "src/server/lifecycle.ts",
@@ -2474,7 +2478,7 @@
2474
2478
  },
2475
2479
  {
2476
2480
  "path": "src/server/management/shared.ts",
2477
- "sha256": "0f8c6ae6d1e88d1b060ee964271df1b52bb92808c2916b0a9949eda5a0134736"
2481
+ "sha256": "20d037194bf445da81fc3e266885344c5c3f8e252cabe46d11c4de68a71748ab"
2478
2482
  },
2479
2483
  {
2480
2484
  "path": "src/server/management/sidebar-routes.ts",
@@ -2598,7 +2602,7 @@
2598
2602
  },
2599
2603
  {
2600
2604
  "path": "src/server/responses/collaboration.ts",
2601
- "sha256": "bfeef4d9bf5538d850446d5805769779518b62f8ef33693ecfd1c48f8545093e"
2605
+ "sha256": "415d0d0f754e8cf5c511628d2801fb3ca7b31e68356d0b6a2832d5582d555dda"
2602
2606
  },
2603
2607
  {
2604
2608
  "path": "src/server/responses/compact.ts",
@@ -2606,7 +2610,7 @@
2606
2610
  },
2607
2611
  {
2608
2612
  "path": "src/server/responses/core.ts",
2609
- "sha256": "bc67a30bfccd34b1781acdd96a0277a39ce9271a217bfd25f06e9f391e0095ee"
2613
+ "sha256": "1d3e6811caa5bd45bc89673102a53663308f9dea7d8054ff1f7aaa65428e5840"
2610
2614
  },
2611
2615
  {
2612
2616
  "path": "src/server/responses/empty-completion-guard.ts",
@@ -2622,7 +2626,7 @@
2622
2626
  },
2623
2627
  {
2624
2628
  "path": "src/server/responses/input-admission.ts",
2625
- "sha256": "cb04a5dea34d8e997c842626bad39d02baf1c64e6bcf614227bf3d49a2270131"
2629
+ "sha256": "b1f22e78cc089c5f950807f7ffc4b669e1d84ddfced448421ab1539dda749e55"
2626
2630
  },
2627
2631
  {
2628
2632
  "path": "src/server/responses/pacing-overload.ts",
@@ -2690,11 +2694,11 @@
2690
2694
  },
2691
2695
  {
2692
2696
  "path": "src/service-manager-probe.ts",
2693
- "sha256": "debddd154561e93532edb423bf53dc917c6619ea980d7061368c22a512b29200"
2697
+ "sha256": "72531f30feb9d9979758b39d90092c5589c541d85b1b0e858d3644d59303aade"
2694
2698
  },
2695
2699
  {
2696
2700
  "path": "src/service.ts",
2697
- "sha256": "5f30baf3c2b3ef7ecc709de3810eec3bbbf26ba8dea236119ecc15bf9530c857"
2701
+ "sha256": "a9babc47b0d3fd5e3f1fcd31f9be8438071ebad6d86fa716f52cecfc4d4a14e3"
2698
2702
  },
2699
2703
  {
2700
2704
  "path": "src/stall-timeout.ts",
@@ -2766,11 +2770,35 @@
2766
2770
  },
2767
2771
  {
2768
2772
  "path": "src/tray/windows.ts",
2769
- "sha256": "dafcac7e9d79ebdbb0afc33607b6342a9e41243245ef1f7be1f4ced4b3e65474"
2773
+ "sha256": "710652e095d176bdfef69d8926949dcba8b652e7eb3e008376d90375af6ccc26"
2770
2774
  },
2771
2775
  {
2772
2776
  "path": "src/types.ts",
2773
- "sha256": "f8f1f93aeacaf40799f1af471836cc9118b68abfc8aaa872d06a3aec78418d44"
2777
+ "sha256": "080ba71673e40c75d7b83d99a59b19ef3309cf7089f0f6888db01e99b52c6afb"
2778
+ },
2779
+ {
2780
+ "path": "src/types/accounts.ts",
2781
+ "sha256": "8037e50f3e8660279b085e3cf252a757ae01269925f96144ae972c5ac514bff0"
2782
+ },
2783
+ {
2784
+ "path": "src/types/config.ts",
2785
+ "sha256": "99feba50e45494608d13af6affb5db2389480ebbf02376e0cd324f7a493a3f6b"
2786
+ },
2787
+ {
2788
+ "path": "src/types/provider.ts",
2789
+ "sha256": "f164d467b022826f1ce73ee9e2809d7bb79fcd1257742296a41b9472a7af6424"
2790
+ },
2791
+ {
2792
+ "path": "src/types/request.ts",
2793
+ "sha256": "1f690d581676005a86a280dc80104687c41c58f1639f9770fd4d26f6c9ba7781"
2794
+ },
2795
+ {
2796
+ "path": "src/types/tools.ts",
2797
+ "sha256": "eb4b0526fcdf2ce220d731ed0eb4da539681262d13f6b3fec06e0d80a0429e8b"
2798
+ },
2799
+ {
2800
+ "path": "src/types/wire.ts",
2801
+ "sha256": "ce5d1a7fabef76c800b469bea4a08db0e45259e54e19b60b7b00fbfb85d28973"
2774
2802
  },
2775
2803
  {
2776
2804
  "path": "src/update/badge.ts",
@@ -2822,7 +2850,7 @@
2822
2850
  },
2823
2851
  {
2824
2852
  "path": "src/usage/cost.ts",
2825
- "sha256": "f9a731f1967985e78f3ca07c4326a6bdde1c5651e19c9cf37f0c48e54df766b5"
2853
+ "sha256": "ccd83889f7cbed904d70c01fc37ea86e0d9761571d7e5bcda4f17c9093800883"
2826
2854
  },
2827
2855
  {
2828
2856
  "path": "src/usage/debug.ts",
@@ -2894,7 +2922,7 @@
2894
2922
  },
2895
2923
  {
2896
2924
  "path": "src/web-search/loop.ts",
2897
- "sha256": "a9c911108de03ec2ef1dce18d221b255f6015ce05a7949c38a33b1b6ac1fbff2"
2925
+ "sha256": "bac74547ac57eff8b4b9b4e5a9880f4371f59f72827d6f182ceeef68b23a5a9d"
2898
2926
  },
2899
2927
  {
2900
2928
  "path": "src/web-search/parse.ts",
@@ -676,13 +676,20 @@ export async function runWithImageBridge(deps: ImageBridgeDeps): Promise<Respons
676
676
  }
677
677
  }
678
678
 
679
- const toolNsMap = new Map<string, { namespace: string; name: string }>();
679
+ const toolNsMap = new Map<string, { namespace: string; name: string; freeform?: true }>();
680
680
  const freeform = new Set<string>();
681
681
  const toolSearch = new Set<string>();
682
- const toolAllowed = toolChoiceToolPredicate(parsed.options.toolChoice);
683
- for (const t of parsed.context.tools ?? []) {
682
+ const requestedTools = parsed.context.tools ?? [];
683
+ const toolAllowed = toolChoiceToolPredicate(parsed.options.toolChoice, requestedTools);
684
+ for (const t of requestedTools) {
684
685
  if (!toolAllowed(t)) continue;
685
- if (t.namespace) toolNsMap.set(namespacedToolName(t.namespace, t.name), { namespace: t.namespace, name: t.name });
686
+ if (t.namespace) {
687
+ toolNsMap.set(namespacedToolName(t.namespace, t.name), {
688
+ namespace: t.namespace,
689
+ name: t.name,
690
+ ...(t.freeform ? { freeform: true } : {}),
691
+ });
692
+ }
686
693
  if (t.freeform) freeform.add(t.name);
687
694
  if (t.toolSearch) toolSearch.add(t.name);
688
695
  }
@@ -35,7 +35,7 @@ import { listLiveOAuthAccountKeys, reconcileOAuthReauthState } from "../oauth/st
35
35
  import { reconcileGuardianBackoff } from "../oauth/token-guardian";
36
36
  import { sweepExpiredApiKeyCooldowns } from "../providers/key-failover";
37
37
  import { reconcileProviderRequestPacing } from "../providers/request-pacing";
38
- import { sweepExpiredResponseStates } from "../responses/state";
38
+ import { sweepAbandonedResponseStateTemps, sweepExpiredResponseStates } from "../responses/state";
39
39
  import { sweepExpiredAntigravityReplay } from "../adapters/google-antigravity-replay";
40
40
  import { reconcileProviderAccountQuotaRows } from "../providers/quota";
41
41
  import { reconcileRouterWarningMemos } from "../router";
@@ -84,7 +84,13 @@ export const STATE_STORE_REGISTRATIONS = [
84
84
  },
85
85
  { name: "anthropic-routing-health", sweepExpired: sweepExpiredAnthropicRoutingHealth },
86
86
  { name: "xai-refresh-verdicts", sweepExpired: sweepExpiredXaiPermanentFailureVerdicts },
87
- { name: "responses-continuation", sweepExpired: sweepExpiredResponseStates },
87
+ {
88
+ name: "responses-continuation",
89
+ sweepExpired: sweepExpiredResponseStates,
90
+ // Disk reclaim rides the liveness tick, not the TTL tick: sweepExpiredOnWrite puts
91
+ // sweepExpired on hot write paths, where a directory scan does not belong.
92
+ sweepLiveness: sweepAbandonedResponseStateTemps,
93
+ },
88
94
  { name: "antigravity-replay", sweepExpired: sweepExpiredAntigravityReplay },
89
95
  { name: "config-warning-memos", reconcileGeneration: (context: GenerationContext) => reconcileConfigWarningMemos(context.generation) },
90
96
  { name: "catalog-warning-memos", reconcileGeneration: (context: GenerationContext) => reconcileCatalogWarningMemos(context.generation) },
@@ -72,6 +72,12 @@ const ANTIGRAVITY_WIRE_IDS_BY_PICKER_MODEL: Record<string, string[]> = Object.en
72
72
  }, {});
73
73
 
74
74
  const ANTIGRAVITY_DISCOVERY_EFFORTS = ["low", "medium", "high"] as const;
75
+ type AntigravityDiscoveryEffort = typeof ANTIGRAVITY_DISCOVERY_EFFORTS[number];
76
+ type AntigravityEffortWireModelIds = Partial<Record<AntigravityDiscoveryEffort, string>>;
77
+
78
+ function isAntigravityDiscoveryEffort(value: string): value is AntigravityDiscoveryEffort {
79
+ return (ANTIGRAVITY_DISCOVERY_EFFORTS as readonly string[]).includes(value);
80
+ }
75
81
 
76
82
  function pickerModelIdForDiscoveredWireId(
77
83
  wireId: string,
@@ -151,6 +157,25 @@ const ANTIGRAVITY_EFFORT_WIRE_MAP: Record<string, Record<string, string>> = {
151
157
  },
152
158
  };
153
159
 
160
+ function completeDiscoveredEffortWireModelIds(
161
+ pickerId: string,
162
+ available: ReadonlyMap<string, Record<string, unknown>>,
163
+ ): AntigravityEffortWireModelIds | undefined {
164
+ const explicitEffortMap = ANTIGRAVITY_EFFORT_WIRE_MAP[pickerId];
165
+ if (explicitEffortMap && Object.values(explicitEffortMap).every(wireId => available.has(wireId))) {
166
+ return { ...explicitEffortMap };
167
+ }
168
+
169
+ if (!isKnownAntigravityPickerModelId(pickerId)) return undefined;
170
+ const suffixEffortMap: AntigravityEffortWireModelIds = {};
171
+ for (const effort of ANTIGRAVITY_DISCOVERY_EFFORTS) {
172
+ const wireId = `${pickerId}-${effort}`;
173
+ if (!available.has(wireId)) return undefined;
174
+ suffixEffortMap[effort] = wireId;
175
+ }
176
+ return suffixEffortMap;
177
+ }
178
+
154
179
  // ── Default effort per Gemini base model ──
155
180
  const ANTIGRAVITY_DEFAULT_EFFORT: Record<string, string> = {
156
181
  "gemini-3.1-pro": "high",
@@ -270,6 +295,8 @@ export interface AntigravityAvailableModel {
270
295
  id: string;
271
296
  /** CCA model id used by the agent envelope when `id` comes from display metadata. */
272
297
  wireModelId: string;
298
+ /** Complete effort-to-wire mapping retained for collapsed discovered tier sets. */
299
+ effortWireModelIds?: AntigravityEffortWireModelIds;
273
300
  contextWindow?: number;
274
301
  inputModalities?: string[];
275
302
  }
@@ -286,6 +313,7 @@ function antigravityPositiveInteger(value: unknown): number | undefined {
286
313
 
287
314
  interface DiscoveredWireModelMapping {
288
315
  readonly models: ReadonlyMap<string, string>;
316
+ readonly effortModels: ReadonlyMap<string, AntigravityEffortWireModelIds>;
289
317
  readonly generation?: { provider: string; cacheGeneration: string };
290
318
  }
291
319
 
@@ -327,17 +355,21 @@ export function registerAntigravityDiscoveredWireModels(
327
355
  const key = antigravityBaseUrlKey(baseUrl);
328
356
  if (!key) return;
329
357
  const wireModels = new Map<string, string>();
330
- for (const model of models) wireModels.set(model.id, model.wireModelId);
358
+ const effortModels = new Map<string, AntigravityEffortWireModelIds>();
359
+ for (const model of models) {
360
+ wireModels.set(model.id, model.wireModelId);
361
+ if (model.effortWireModelIds) effortModels.set(model.id, { ...model.effortWireModelIds });
362
+ }
331
363
  discoveredWireModelsByBaseUrl.set(key, {
332
364
  models: wireModels,
365
+ effortModels,
333
366
  ...(generation ? { generation } : {}),
334
367
  });
335
368
  }
336
369
 
337
- function discoveredAntigravityWireModelId(
338
- modelId: string,
370
+ function discoveredAntigravityMapping(
339
371
  baseUrl: string | undefined,
340
- ): string | undefined {
372
+ ): DiscoveredWireModelMapping | undefined {
341
373
  const key = antigravityBaseUrlKey(baseUrl);
342
374
  if (!key) return undefined;
343
375
  const mapping = discoveredWireModelsByBaseUrl.get(key);
@@ -347,7 +379,35 @@ function discoveredAntigravityWireModelId(
347
379
  discoveredWireModelsByBaseUrl.delete(key);
348
380
  return undefined;
349
381
  }
350
- return mapping.models.get(modelId);
382
+ return mapping;
383
+ }
384
+
385
+ function discoveredAntigravityWireModelId(
386
+ modelId: string,
387
+ baseUrl: string | undefined,
388
+ ): string | undefined {
389
+ return discoveredAntigravityMapping(baseUrl)?.models.get(modelId);
390
+ }
391
+
392
+ function discoveredAntigravityEffortWireModelId(
393
+ modelId: string,
394
+ effort: string | undefined,
395
+ baseUrl: string | undefined,
396
+ ): string | undefined {
397
+ const effortMap = discoveredAntigravityMapping(baseUrl)?.effortModels.get(modelId);
398
+ if (!effortMap) return undefined;
399
+
400
+ const requestedEffort = effort ? resolveAntigravityThinkingLevel(effort) : undefined;
401
+ if (requestedEffort && isAntigravityDiscoveryEffort(requestedEffort) && effortMap[requestedEffort]) {
402
+ return effortMap[requestedEffort];
403
+ }
404
+
405
+ const defaultEffort = ANTIGRAVITY_DEFAULT_EFFORT[modelId]
406
+ ?? ANTIGRAVITY_THINKING_LEVEL_MODELS[modelId];
407
+ if (defaultEffort && isAntigravityDiscoveryEffort(defaultEffort) && effortMap[defaultEffort]) {
408
+ return effortMap[defaultEffort];
409
+ }
410
+ return Object.values(effortMap)[0];
351
411
  }
352
412
 
353
413
  /**
@@ -465,9 +525,11 @@ export function parseAntigravityAvailableModels(
465
525
  const id = pickerModelIdForDiscoveredWireId(wireId, info, available);
466
526
  if (seen.has(id)) continue;
467
527
  seen.add(id);
528
+ const effortWireModelIds = completeDiscoveredEffortWireModelIds(id, available);
468
529
  out.push({
469
530
  id,
470
531
  wireModelId: wireId,
532
+ ...(effortWireModelIds ? { effortWireModelIds } : {}),
471
533
  ...(antigravityPositiveInteger(info.maxTokens) ? { contextWindow: antigravityPositiveInteger(info.maxTokens) } : {}),
472
534
  // Tri-state, deliberately not a ternary: `true` asserts image support,
473
535
  // `false` asserts against it, and ABSENT is unknown. Collapsing absent into
@@ -522,6 +584,9 @@ export function resolveAntigravityEffortWireModel(
522
584
  effort?: string,
523
585
  baseUrl?: string,
524
586
  ): { wireModelId: string; thinkingLevel?: string } {
587
+ const discoveredEffortWireModelId = discoveredAntigravityEffortWireModelId(modelId, effort, baseUrl);
588
+ if (discoveredEffortWireModelId) return { wireModelId: discoveredEffortWireModelId };
589
+
525
590
  // A collapsed picker row reports ONE representative wire id (whichever tier CCA
526
591
  // listed first), so live discovery cannot describe a ladder — it can only name a
527
592
  // single rung. Letting it answer for a base model we already have a ladder for
@@ -3,6 +3,7 @@ import { cloneFastWire } from "./fastwire";
3
3
  import {
4
4
  PROVIDER_REGISTRY,
5
5
  registryEntryForProviderDestination,
6
+ registryModelServiceTierCapabilityApplies,
6
7
  type ProviderRegistryEntry,
7
8
  } from "./registry";
8
9
  import {
@@ -377,6 +378,15 @@ function applyServiceTierModelDefaults(
377
378
  };
378
379
  }
379
380
 
381
+ function serviceTierModelDefaultsFor(
382
+ entry: ProviderRegistryEntry | undefined,
383
+ prov: OcxProviderConfig,
384
+ ): Readonly<Record<string, boolean>> | undefined {
385
+ return entry && registryModelServiceTierCapabilityApplies(entry, prov)
386
+ ? entry.modelSupportsServiceTier
387
+ : undefined;
388
+ }
389
+
380
390
  /**
381
391
  * Last-resort enrichment for a provider whose NAME matches no registry id.
382
392
  *
@@ -412,7 +422,7 @@ export function enrichProviderFromRegistry(name: string, prov: OcxProviderConfig
412
422
  // which vendor endpoint is this row talking to — and is already restricted to fixed key
413
423
  // destinations, so a templated or overridable base URL cannot be claimed by it.
414
424
  enrichReasoningSummariesByDestination(prov);
415
- applyServiceTierModelDefaults(prov, registryEntryForProviderDestination(prov)?.modelSupportsServiceTier);
425
+ applyServiceTierModelDefaults(prov, serviceTierModelDefaultsFor(registryEntryForProviderDestination(prov), prov));
416
426
  return;
417
427
  }
418
428
  const explicitDirectReasoning: DirectReasoningEffortOverrides = {
@@ -466,7 +476,7 @@ export function enrichProviderFromRegistry(name: string, prov: OcxProviderConfig
466
476
  if (prov.supportsServiceTier === undefined && entry.supportsServiceTier !== undefined) prov.supportsServiceTier = entry.supportsServiceTier;
467
477
  if (prov.preserveResponsesReasoningContent === undefined && entry.preserveResponsesReasoningContent !== undefined) prov.preserveResponsesReasoningContent = entry.preserveResponsesReasoningContent;
468
478
  applyReasoningSummaryDefaults(prov, entry.modelSupportsReasoningSummaries);
469
- applyServiceTierModelDefaults(prov, entry.modelSupportsServiceTier);
479
+ applyServiceTierModelDefaults(prov, serviceTierModelDefaultsFor(entry, prov));
470
480
  // Registry-only repair policy (#938): fill only when the runtime provider has
471
481
  // no explicit policy, and deep-clone so saved/user values never alias the
472
482
  // registry constant.