@wenathlan/devthink 2.0.14 → 2.0.19

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 (444) hide show
  1. package/CHANGELOG.md +60 -0
  2. package/{dist/bridge.d.ts → bridge.d.ts} +1 -1
  3. package/bridge.d.ts.map +1 -0
  4. package/bridge.js +1877 -0
  5. package/bun.d.ts.map +1 -0
  6. package/bun.js +52329 -0
  7. package/caps/background.json +712 -0
  8. package/caps/cli.json +360 -0
  9. package/caps/library.json +3611 -0
  10. package/caps/mcp.json +126 -0
  11. package/caps/pagebridge.json +377 -0
  12. package/caps/popup.json +51 -0
  13. package/caps/sidepanel.json +522 -0
  14. package/checksums.txt +142 -0
  15. package/cli.d.ts.map +1 -0
  16. package/{dist/cli.js → cli.js} +2 -2
  17. package/companion.d.ts.map +1 -0
  18. package/companion.js +389 -0
  19. package/crossbrowser.d.ts.map +1 -0
  20. package/crossbrowser.js +1191 -0
  21. package/dashdone.d.ts.map +1 -0
  22. package/dashdone.js +368 -0
  23. package/deno.d.ts.map +1 -0
  24. package/deno.js +52325 -0
  25. package/devthink.umd.js +52346 -0
  26. package/fixtures/bun.ts +7 -0
  27. package/fixtures/cjs.js +6 -0
  28. package/fixtures/deno.ts +6 -0
  29. package/fixtures/example-org-pagestate.json +22 -0
  30. package/fixtures/importers/automa-workflow.json +18 -0
  31. package/fixtures/importers/selenium-side.json +20 -0
  32. package/fixtures/importers/tabular-plan.csv +7 -0
  33. package/fixtures/importers/uivision-macro.json +10 -0
  34. package/fixtures/importers/v1-plan.json +13 -0
  35. package/fixtures/mcp-client.mjs +14 -0
  36. package/fixtures/pages/checkout.html +192 -0
  37. package/fixtures/pages/dashboard.html +110 -0
  38. package/fixtures/pages/feed.html +113 -0
  39. package/fixtures/pages/product-grid.html +150 -0
  40. package/fixtures/plans/form-inventory-plan.json +11 -0
  41. package/fixtures/plans/release-notes-plan.json +11 -0
  42. package/fixtures/recipes/agentscompete.json +11 -0
  43. package/fixtures/recipes/agentsforms.json +11 -0
  44. package/fixtures/recipes/agentsmonitor.json +11 -0
  45. package/fixtures/recipes/agentsreview.json +29 -0
  46. package/fixtures/recipes/agentswarm.json +11 -0
  47. package/fixtures/recipes/fillcalendar.json +12 -0
  48. package/fixtures/recipes/fillcheckout.json +13 -0
  49. package/fixtures/recipes/filldependentdropdowns.json +12 -0
  50. package/fixtures/recipes/fillfromcsv.json +13 -0
  51. package/fixtures/recipes/fillloginform.json +12 -0
  52. package/fixtures/recipes/fillmultistepwizard.json +13 -0
  53. package/fixtures/recipes/fillregistration.json +12 -0
  54. package/fixtures/recipes/fillsearchfilters.json +12 -0
  55. package/fixtures/recipes/filltypeahead.json +11 -0
  56. package/fixtures/recipes/monitoralerts.json +12 -0
  57. package/fixtures/recipes/monitoravailability.json +11 -0
  58. package/fixtures/recipes/monitornetworkquiet.json +12 -0
  59. package/fixtures/recipes/monitorpagechanges.json +11 -0
  60. package/fixtures/recipes/monitorpricechange.json +11 -0
  61. package/fixtures/recipes/monitorschedule.json +12 -0
  62. package/fixtures/recipes/scrapedynamicprices.json +13 -0
  63. package/fixtures/recipes/scrapeimagegallery.json +12 -0
  64. package/fixtures/recipes/scrapeinfinitefeed.json +13 -0
  65. package/fixtures/recipes/scrapenestedlists.json +12 -0
  66. package/fixtures/recipes/scrapeproductgrid.json +12 -0
  67. package/fixtures/recipes/scrapereviews.json +12 -0
  68. package/fixtures/recipes/scrapesearchresults.json +12 -0
  69. package/fixtures/recipes/scrapetablepagination.json +12 -0
  70. package/fixtures/recipes/testaccessibility.json +34 -0
  71. package/fixtures/recipes/testconsoleerrors.json +12 -0
  72. package/fixtures/recipes/testdeeplinks.json +12 -0
  73. package/fixtures/recipes/testformvalidation.json +13 -0
  74. package/fixtures/recipes/testlayoutshift.json +12 -0
  75. package/fixtures/recipes/testlinkcheck.json +12 -0
  76. package/fixtures/recipes/testloadtiming.json +12 -0
  77. package/fixtures/recipes/testvisualdiff.json +12 -0
  78. package/fixtures/workflows/changelog-digest-workflow.json +13 -0
  79. package/fixtures/workflows/form-survey-workflow.json +13 -0
  80. package/gallery.json +706 -0
  81. package/hardening.d.ts.map +1 -0
  82. package/hardening.js +188 -0
  83. package/headless.d.ts.map +1 -0
  84. package/headless.js +11522 -0
  85. package/http.d.ts.map +1 -0
  86. package/http.js +2165 -0
  87. package/index.cjs +54682 -0
  88. package/index.d.ts.map +1 -0
  89. package/index.js +52310 -0
  90. package/index.neutral.js +46343 -0
  91. package/{web/manifest.json → manifest.json} +1 -1
  92. package/mcp.d.ts.map +1 -0
  93. package/mcp.js +20515 -0
  94. package/memory.d.ts.map +1 -0
  95. package/{memory.ts → memory.js} +2310 -3834
  96. package/nativehost.template.json +10 -0
  97. package/node.cjs +54686 -0
  98. package/node.d.ts.map +1 -0
  99. package/pack.d.ts.map +1 -0
  100. package/pack.js +805 -0
  101. package/package.json +83 -176
  102. package/policy.d.ts.map +1 -0
  103. package/{policy.ts → policy.js} +4679 -5073
  104. package/progress.d.ts.map +1 -0
  105. package/progress.js +645 -0
  106. package/protocol.d.ts.map +1 -0
  107. package/protocol.js +8334 -0
  108. package/schemas/audit.schema.json +226 -0
  109. package/schemas/capability.schema.json +113 -0
  110. package/schemas/envelope.schema.json +162 -0
  111. package/schemas/memory.schema.json +51 -0
  112. package/schemas/observation.schema.json +113 -0
  113. package/schemas/plan.schema.json +208 -0
  114. package/schemas/progress.schema.json +126 -0
  115. package/schemas/proposal.schema.json +68 -0
  116. package/schemas/session.schema.json +82 -0
  117. package/schemas/tool.schema.json +94 -0
  118. package/server.d.ts.map +1 -0
  119. package/server.js +28877 -0
  120. package/umd-example.html +18 -0
  121. package/umd.d.ts.map +1 -0
  122. package/accounts.ts +0 -2087
  123. package/agent.ts +0 -2331
  124. package/antigravity.ts +0 -2139
  125. package/apifreeze.ts +0 -4146
  126. package/auth.ts +0 -642
  127. package/background.ts +0 -16837
  128. package/bridge.ts +0 -2080
  129. package/build.ts +0 -54
  130. package/bun.ts +0 -26
  131. package/capture.ts +0 -1614
  132. package/checksecrets.ts +0 -72
  133. package/cjs.ts +0 -9
  134. package/cli.ts +0 -3500
  135. package/commands.ts +0 -1101
  136. package/companion.ts +0 -450
  137. package/compatibility.ts +0 -37
  138. package/config.ts +0 -3137
  139. package/constants.ts +0 -943
  140. package/core.ts +0 -1473
  141. package/crossbrowser.ts +0 -1359
  142. package/dashdone.ts +0 -605
  143. package/data.ts +0 -943
  144. package/database.ts +0 -133
  145. package/debug.ts +0 -850
  146. package/deno.ts +0 -27
  147. package/devthink.ts +0 -707
  148. package/dist/accounts.d.ts +0 -409
  149. package/dist/agent.d.ts +0 -837
  150. package/dist/antigravity.d.ts +0 -380
  151. package/dist/apifreeze.d.ts +0 -113
  152. package/dist/auth.d.ts +0 -224
  153. package/dist/capture.d.ts +0 -595
  154. package/dist/cjs.d.ts +0 -6
  155. package/dist/commands.d.ts +0 -310
  156. package/dist/compatibility.d.ts +0 -17
  157. package/dist/config.d.ts +0 -1853
  158. package/dist/constants.d.ts +0 -637
  159. package/dist/core.d.ts +0 -361
  160. package/dist/data.d.ts +0 -330
  161. package/dist/database.d.ts +0 -24
  162. package/dist/debug.d.ts +0 -270
  163. package/dist/engine.d.ts +0 -74
  164. package/dist/environments.d.ts +0 -244
  165. package/dist/evidence.d.ts +0 -277
  166. package/dist/export.d.ts +0 -311
  167. package/dist/fingerprint.d.ts +0 -594
  168. package/dist/flow.d.ts +0 -300
  169. package/dist/gates.d.ts +0 -103
  170. package/dist/identity.d.ts +0 -51
  171. package/dist/ids.d.ts +0 -7
  172. package/dist/llm.d.ts +0 -652
  173. package/dist/models.d.ts +0 -1807
  174. package/dist/net.d.ts +0 -325
  175. package/dist/neutral.d.ts +0 -41
  176. package/dist/oauth.d.ts +0 -703
  177. package/dist/page.d.ts +0 -1166
  178. package/dist/perf.d.ts +0 -481
  179. package/dist/plan.d.ts +0 -134
  180. package/dist/project.d.ts +0 -395
  181. package/dist/providers.d.ts +0 -37
  182. package/dist/quota.d.ts +0 -453
  183. package/dist/recovery.d.ts +0 -621
  184. package/dist/request.d.ts +0 -1492
  185. package/dist/run.d.ts +0 -779
  186. package/dist/runtime.d.ts +0 -212
  187. package/dist/search.d.ts +0 -375
  188. package/dist/security.d.ts +0 -534
  189. package/dist/serve.d.ts +0 -136
  190. package/dist/session.d.ts +0 -296
  191. package/dist/storage.d.ts +0 -53
  192. package/dist/streaming.d.ts +0 -1119
  193. package/dist/swarm.d.ts +0 -328
  194. package/dist/tools.d.ts +0 -170
  195. package/dist/types.d.ts +0 -8357
  196. package/dist/utils.d.ts +0 -82
  197. package/dist/version.d.ts +0 -7
  198. package/dist/versionregistry.d.ts +0 -406
  199. package/dist/views.d.ts +0 -579
  200. package/dist/workbenchsession.d.ts +0 -69
  201. package/dist/workflow.d.ts +0 -649
  202. package/docs/readme.md +0 -92
  203. package/docs/schemas/antigravity.json +0 -192
  204. package/engine.ts +0 -1524
  205. package/environments.ts +0 -1005
  206. package/evidence.ts +0 -643
  207. package/export.ts +0 -889
  208. package/fingerprint.ts +0 -1458
  209. package/flow.ts +0 -1190
  210. package/gates.ts +0 -307
  211. package/gateway.ts +0 -34
  212. package/hardening.ts +0 -191
  213. package/headless.ts +0 -369
  214. package/http.ts +0 -2110
  215. package/identity.ts +0 -246
  216. package/ids.ts +0 -26
  217. package/index.ts +0 -369
  218. package/llm.ts +0 -2682
  219. package/mcp.ts +0 -1835
  220. package/models.ts +0 -3805
  221. package/modes.ts +0 -43
  222. package/net.ts +0 -1214
  223. package/neutral.ts +0 -362
  224. package/node.ts +0 -26
  225. package/oauth.ts +0 -2216
  226. package/offscreen.ts +0 -170
  227. package/pack.ts +0 -956
  228. package/page.ts +0 -7824
  229. package/pagebridge.ts +0 -1116
  230. package/perf.ts +0 -957
  231. package/plan.ts +0 -672
  232. package/plugin.ts +0 -76
  233. package/prisma.config.ts +0 -27
  234. package/progress.ts +0 -1308
  235. package/project.ts +0 -1291
  236. package/protocol.ts +0 -4187
  237. package/providers.ts +0 -246
  238. package/quota.ts +0 -1887
  239. package/recovery.ts +0 -2433
  240. package/request.ts +0 -4482
  241. package/run.ts +0 -2135
  242. package/runtime.ts +0 -526
  243. package/search.ts +0 -1760
  244. package/security.ts +0 -1673
  245. package/serve.ts +0 -419
  246. package/server.ts +0 -5538
  247. package/session.ts +0 -1162
  248. package/storage.ts +0 -182
  249. package/streaming.ts +0 -4101
  250. package/swarm.ts +0 -884
  251. package/sync.ts +0 -56
  252. package/tests/agentcert.test.ts +0 -128
  253. package/tests/agentfleet.test.ts +0 -214
  254. package/tests/agentreview.test.ts +0 -241
  255. package/tests/agentstream.test.ts +0 -335
  256. package/tests/agentwork.test.ts +0 -356
  257. package/tests/apifreeze.test.ts +0 -290
  258. package/tests/apimap.test.ts +0 -112
  259. package/tests/approvalgate.test.ts +0 -175
  260. package/tests/artifactmanifest.test.ts +0 -204
  261. package/tests/attentionfeed.test.ts +0 -163
  262. package/tests/backgroundruns.test.ts +0 -100
  263. package/tests/batchscheduling.test.ts +0 -131
  264. package/tests/blackboard.test.ts +0 -238
  265. package/tests/bridge.test.ts +0 -1088
  266. package/tests/browsercoverage.test.ts +0 -134
  267. package/tests/browserpolyfills.test.ts +0 -124
  268. package/tests/build.mjs +0 -1260
  269. package/tests/clientauth.test.ts +0 -223
  270. package/tests/clitools.test.ts +0 -578
  271. package/tests/confirmgates.test.ts +0 -190
  272. package/tests/containerpack.test.ts +0 -143
  273. package/tests/controlflow.test.ts +0 -2120
  274. package/tests/coordination.test.ts +0 -345
  275. package/tests/copyscreen.test.ts +0 -139
  276. package/tests/core.test.ts +0 -417
  277. package/tests/costcert.test.ts +0 -95
  278. package/tests/crossbrowser.test.ts +0 -115
  279. package/tests/cspaudit.test.ts +0 -79
  280. package/tests/dashdone.test.ts +0 -615
  281. package/tests/datagrid.test.ts +0 -137
  282. package/tests/doccheck.test.ts +0 -107
  283. package/tests/dombatch.test.ts +0 -109
  284. package/tests/emulation.test.ts +0 -282
  285. package/tests/environments.test.ts +0 -259
  286. package/tests/evidenceviews.test.ts +0 -88
  287. package/tests/exporttools.test.ts +0 -185
  288. package/tests/firefoxprep.test.ts +0 -134
  289. package/tests/flowlibrary.test.ts +0 -242
  290. package/tests/flowrun.test.ts +0 -303
  291. package/tests/forensics.test.ts +0 -439
  292. package/tests/gateway.test.ts +0 -939
  293. package/tests/headlesslib.test.ts +0 -171
  294. package/tests/httpstream.test.ts +0 -277
  295. package/tests/immutablelog.test.ts +0 -157
  296. package/tests/inboundguard.test.ts +0 -177
  297. package/tests/lazyload.test.ts +0 -72
  298. package/tests/librarymodes.test.ts +0 -623
  299. package/tests/llm.test.ts +0 -696
  300. package/tests/manifest.test.ts +0 -226
  301. package/tests/maskinputs.test.ts +0 -150
  302. package/tests/matrixverify.test.ts +0 -111
  303. package/tests/mavenpack.test.ts +0 -75
  304. package/tests/mcpserver.test.ts +0 -704
  305. package/tests/memory.test.ts +0 -4155
  306. package/tests/memorycare.test.ts +0 -230
  307. package/tests/migrateplan.test.ts +0 -349
  308. package/tests/minimization.test.ts +0 -414
  309. package/tests/modelroute.test.ts +0 -112
  310. package/tests/multiagent.test.ts +0 -440
  311. package/tests/nativebridge.test.ts +0 -807
  312. package/tests/navigation.test.ts +0 -284
  313. package/tests/nugetpack.test.ts +0 -83
  314. package/tests/orchestration.test.ts +0 -449
  315. package/tests/originpolicy.test.ts +0 -405
  316. package/tests/outputcompare.test.ts +0 -97
  317. package/tests/package.test.ts +0 -91
  318. package/tests/pagebridge.test.ts +0 -5909
  319. package/tests/pentest.test.ts +0 -75
  320. package/tests/perfrecords.test.ts +0 -257
  321. package/tests/permdiff.test.ts +0 -85
  322. package/tests/phishguard.test.ts +0 -128
  323. package/tests/pickerviews.test.ts +0 -155
  324. package/tests/pipelines.test.ts +0 -381
  325. package/tests/planlint.test.ts +0 -240
  326. package/tests/planreview.test.ts +0 -383
  327. package/tests/platformtargets.test.ts +0 -56
  328. package/tests/policy.test.ts +0 -8284
  329. package/tests/portability.test.ts +0 -96
  330. package/tests/progress.test.ts +0 -1036
  331. package/tests/promptlibrary.test.ts +0 -116
  332. package/tests/protocol.test.ts +0 -4793
  333. package/tests/publishingpipeline.test.ts +0 -314
  334. package/tests/quickactions.test.ts +0 -164
  335. package/tests/readiness.test.ts +0 -78
  336. package/tests/recipes.test.ts +0 -163
  337. package/tests/redactshots.test.ts +0 -216
  338. package/tests/registernvidiakeys.ts +0 -51
  339. package/tests/relayserve.test.ts +0 -304
  340. package/tests/releasenotes.test.ts +0 -276
  341. package/tests/resilience.test.ts +0 -467
  342. package/tests/resourceaware.test.ts +0 -187
  343. package/tests/runbudget.test.ts +0 -125
  344. package/tests/runhistory.test.ts +0 -299
  345. package/tests/runreplay.test.ts +0 -113
  346. package/tests/runresume.test.ts +0 -184
  347. package/tests/runstate.test.ts +0 -288
  348. package/tests/runtimeadapters.test.ts +0 -251
  349. package/tests/safariskeleton.test.ts +0 -115
  350. package/tests/sandboxframe.test.ts +0 -196
  351. package/tests/sbom.test.ts +0 -105
  352. package/tests/secretvault.test.ts +0 -188
  353. package/tests/selcache.test.ts +0 -111
  354. package/tests/sessioninterface.test.ts +0 -791
  355. package/tests/sessions.test.ts +0 -591
  356. package/tests/siteprefs.test.ts +0 -228
  357. package/tests/snapshotdelta.test.ts +0 -165
  358. package/tests/statusviews.test.ts +0 -237
  359. package/tests/stepmeter.test.ts +0 -200
  360. package/tests/streamparse.test.ts +0 -163
  361. package/tests/stylepruning.test.ts +0 -90
  362. package/tests/surfaces.test.ts +0 -282
  363. package/tests/sweep.test.ts +0 -78
  364. package/tests/syncbridge.test.ts +0 -164
  365. package/tests/taskqueue.test.ts +0 -206
  366. package/tests/toolcalls.test.ts +0 -336
  367. package/tests/toolcatalog.test.ts +0 -201
  368. package/tests/torture-agent.test.ts +0 -706
  369. package/tests/torture-auth.test.ts +0 -461
  370. package/tests/torture-commands.test.ts +0 -895
  371. package/tests/torture-data.test.ts +0 -923
  372. package/tests/torture-environments.test.ts +0 -285
  373. package/tests/torture-export.test.ts +0 -263
  374. package/tests/torture-http.test.ts +0 -1379
  375. package/tests/torture-llm.test.ts +0 -808
  376. package/tests/torture-memory.test.ts +0 -1084
  377. package/tests/torture-plan.test.ts +0 -829
  378. package/tests/torture-run.test.ts +0 -626
  379. package/tests/torture-session.test.ts +0 -928
  380. package/tests/torture-swarm.test.ts +0 -1245
  381. package/tests/torture-tools.test.ts +0 -964
  382. package/tests/torture-workflow.test.ts +0 -2354
  383. package/tests/tourviews.test.ts +0 -52
  384. package/tests/transparency.test.ts +0 -147
  385. package/tests/trigger.test.ts +0 -941
  386. package/tests/v1sunset.test.ts +0 -428
  387. package/tests/virtlist.test.ts +0 -94
  388. package/tests/vision.test.ts +0 -540
  389. package/tests/vsixpack.test.ts +0 -145
  390. package/tests/webapi.test.ts +0 -523
  391. package/tests/workflow.test.ts +0 -1785
  392. package/tests/workfloweditor.test.ts +0 -759
  393. package/tests/xpipack.test.ts +0 -128
  394. package/tools.ts +0 -734
  395. package/types.ts +0 -9908
  396. package/umd.ts +0 -9
  397. package/utils.ts +0 -249
  398. package/version.ts +0 -8
  399. package/versionregistry.ts +0 -1310
  400. package/views.ts +0 -2153
  401. package/vitest.config.ts +0 -12
  402. package/web/App.tsx +0 -78
  403. package/web/README.md +0 -47
  404. package/web/capacitor.config.ts +0 -46
  405. package/web/const.ts +0 -19
  406. package/web/control.shell.tsx +0 -66
  407. package/web/dashboardpage.ts +0 -554
  408. package/web/db.ts +0 -493
  409. package/web/design.html +0 -541
  410. package/web/gatewayview/Gateway.tsx +0 -345
  411. package/web/gatewayview/config.ts +0 -1042
  412. package/web/gatewayview/definition.ts +0 -174
  413. package/web/icons.ts +0 -15
  414. package/web/optionspage.ts +0 -691
  415. package/web/popup.ts +0 -1651
  416. package/web/schema.prisma +0 -176
  417. package/web/sidepanel.ts +0 -7941
  418. package/web/sitemanifest.json +0 -13
  419. package/web/terminal-ui.tsx +0 -622
  420. package/web/transparencypage.ts +0 -541
  421. package/web/vite.config.ts +0 -39
  422. package/web/workspace.ts +0 -23
  423. package/workbenchmemory.ts +0 -104
  424. package/workbenchsession.ts +0 -304
  425. package/workflow.ts +0 -4495
  426. /package/{dist/bun.d.ts → bun.d.ts} +0 -0
  427. /package/{dist/cli.d.ts → cli.d.ts} +0 -0
  428. /package/{dist/companion.d.ts → companion.d.ts} +0 -0
  429. /package/{dist/crossbrowser.d.ts → crossbrowser.d.ts} +0 -0
  430. /package/{dist/dashdone.d.ts → dashdone.d.ts} +0 -0
  431. /package/{dist/deno.d.ts → deno.d.ts} +0 -0
  432. /package/{dist/hardening.d.ts → hardening.d.ts} +0 -0
  433. /package/{dist/headless.d.ts → headless.d.ts} +0 -0
  434. /package/{dist/http.d.ts → http.d.ts} +0 -0
  435. /package/{dist/index.d.ts → index.d.ts} +0 -0
  436. /package/{dist/mcp.d.ts → mcp.d.ts} +0 -0
  437. /package/{dist/memory.d.ts → memory.d.ts} +0 -0
  438. /package/{dist/node.d.ts → node.d.ts} +0 -0
  439. /package/{dist/pack.d.ts → pack.d.ts} +0 -0
  440. /package/{dist/policy.d.ts → policy.d.ts} +0 -0
  441. /package/{dist/progress.d.ts → progress.d.ts} +0 -0
  442. /package/{dist/protocol.d.ts → protocol.d.ts} +0 -0
  443. /package/{dist/server.d.ts → server.d.ts} +0 -0
  444. /package/{dist/umd.d.ts → umd.d.ts} +0 -0
package/models.ts DELETED
@@ -1,3805 +0,0 @@
1
- /**
2
- * @file models.ts
3
- * @module provider/models
4
- * @description
5
- * Third-person observer view - library-first root-first, production-ready.
6
- * Complete merged model catalog frozen at 25/08/2026.
7
- *
8
- * v2.1.15 Phase A consolidation (models + project domain merge):
9
- * this file is now THE single owner of every model-identification family —
10
- * catalogs (MODELS_2026, MODELS_2026_BASE, MODELS_2026_08_25,
11
- * ALL_MODELS_2026, ANTIGRAVITY_MODELS_2026, ANTIGRAVITY_MODELS,
12
- * ANTIGRAVITY_MODEL_IDS_2026, GEMINI_CLI_ONLY_MODELS, BYPASS/SUPPORTED/
13
- * LEGACY lists), types (ModelDefinition, LegacyModelDefinition,
14
- * AntigravityModelDefinition, Model2026, ModelId2026, ThinkingLevel),
15
- * classifiers (isGeminiCLIOnlyModel, isCLIOnly, isThinkingModel,
16
- * isImageModel, isImageGenModel, normalizeModelId, mapModelToGroup),
17
- * thinking tables (THINKING_LEVELS, THINKING_BUDGET_MAP, ceilings),
18
- * search/default model ids (SEARCH_MODEL*, DEFAULT_MODEL), image-gen
19
- * helpers (buildImageGenConfig) and endpoint routing constants
20
- * (CODE_ASSIST_ENDPOINTS host map + ENDPOINT_ORDER* derived from the
21
- * constants.ts ENDPOINTS raw map, getEndpointsForModel, endpointsForModel).
22
- * The project-discovery block that used to live here (loadCodeAssist,
23
- * onboardUser, project-id caches, resolveProjectId*) relocated to
24
- * project.ts — this module is completely project-free.
25
- *
26
- * v2.1.16 single-owner fix: absorbed the cli.ts MODELS_2026_CATALOG family
27
- * (the 8-entry rich provider catalog + ModelCatalogEntry interface) — cli.ts
28
- * imports and re-exports them under the historical names.
29
- *
30
- * MERGED CATALOG - superset of every previous duplicate:
31
- * - Base schema: rich ModelDefinition catalog (models-2026.ts lineage).
32
- * - Added every missing id from the flat catalogs:
33
- * whole gemini-3.7-flash family (GA Aug 13 2026): gemini-3.7-flash,
34
- * -high, -low, -medium, -tiered, -preview, -minimal,
35
- * antigravity-gemini-3.7-flash, antigravity-gemini-3.7-flash-high;
36
- * antigravity-gemini-3.6-flash(-high), antigravity-gemini-3.5-flash,
37
- * antigravity-claude-sonnet-4-6, antigravity-claude-opus-4-6-thinking,
38
- * antigravity-gemini-3.1-flash-image, antigravity-gpt-oss-120b-medium/-high,
39
- * claude-sonnet-4-6, claude-opus-4-6, claude-sonnet-4-6-thinking,
40
- * gemini-2.5-pro-preview, gemini-3.5-flash-low/-preview,
41
- * gemini-3.6-flash-minimal/-preview, gemini-3.7-flash-minimal, gpt-oss-120b.
42
- * - Ported flat-catalog exports: MODELS_2026_08_25 (modelDef[]),
43
- * ALL_MODELS_WITH_PREFIX, ANTIGRAVITY_MODELS, GEMINICLI_MODELS, isCLIOnly,
44
- * DEFAULT_MODEL, SEARCH_MODEL, FALLBACKS, modelDef/thinkingVariant and
45
- * ModelDef/ThinkingVariant types.
46
- *
47
- * The observer watched:
48
- * - opencode.txt timeline (original repo + 5 waves) showing ban of antagravity/1.11.5,
49
- * dynamic version fallback to 1.19.2, and requirement of direct cloudcode-pa
50
- * without localhost v1 proxy.
51
- * - Gemini CLI binary behavior for Project ID bypass: it NEVER sets
52
- * x-goog-user-project, calls v1internal:loadCodeAssist directly on
53
- * https://cloudcode-pa.googleapis.com to obtain cloudaicompanionProject,
54
- * falls back to onboardUser tier FREE, then loadCodeAssist again.
55
- * For gemini-3+ / preview models it MUST skip SANDBOX to avoid 403/404 cascade
56
- * (issue #233, pi-mono #1830).
57
- * - pi-antigravity-auth: reference implementation of bypass via loadCodeAssist
58
- * + stripped headers, compatible with 9router and OmniRoute routing layers.
59
- * - 9router (github.com/9router): model routing table that maps logical ids like
60
- * gemini-3.6-flash-high to physical cloudcode-pa endpoints.
61
- * - OmniRoute: layer that decides group antigravity vs gemini-cli and endpoint order.
62
- * - Wikipedia timeline:
63
- * - Gemini 2.5 Pro - Dec 10 2025
64
- * - Gemini 3 family - Feb 12 2026
65
- * - Gemini 3.1 Pro - Feb 19 2026 [Wikipedia Gemini 3.1 Pro Feb 19 2026]
66
- * - Gemini 3.6 Flash family - July 21 2026 [Wikipedia Gemini 3.6 Flash July 21 2026]
67
- * - Gemini 3.7 Flash GA - Aug 13 2026
68
- * - Catalog freeze - Aug 25 2026 - this file.
69
- *
70
- * Constraints:
71
- * - Only node:* builtins + global fetch (Node >=18). Zero external deps.
72
- * - Direct cloudcode-pa: PROD https://cloudcode-pa.googleapis.com,
73
- * DAILY https://daily-cloudcode-pa.googleapis.com,
74
- * SANDBOX https://daily-cloudcode-pa.sandbox.googleapis.com,
75
- * AUTOPUSH https://autopush-cloudcode-pa.sandbox.googleapis.com
76
- * - No localhost v1 proxy (explicit WAVE 5 requirement).
77
- * - Project ID bypass exactly as Gemini CLI would act.
78
- *
79
- * Model metadata:
80
- * - context window: Gemini 1048576, Claude/GPT-OSS 200000
81
- * - output limit: Gemini 65535, Claude/GPT-OSS 64000
82
- * - thinkingLevel variants: minimal/low/medium/high/tiered/max
83
- * - group: antigravity vs gemini-cli
84
- * - provider: google (routed via google cloudaicompanion), with originalProvider hint
85
- * - modalities: input [text,image,pdf], output [text] or [text,image] for image models
86
- * - bilingual pt/en description
87
- * - isPreview flag for -preview / -lite-preview models
88
- * - aliases for OmniRoute / 9router compatibility
89
- *
90
- * @author devthink
91
- * @license MIT
92
- * @version 3.0.0
93
- * @date 2026-08-25
94
- * @references pi-antigravity-auth, 9router, OmniRoute,
95
- * Wikipedia Gemini 3.1 Pro Feb 19 2026,
96
- * Wikipedia Gemini 3.6 Flash July 21 2026
97
- */
98
-
99
- import { createHash, randomInt } from "node:crypto";
100
- import { platform as osPlatform, arch as osArch } from "node:os";
101
- // v2.1.15 Phase A: models.ts owns every model substrate locally (flat id
102
- // lists, rich definition lists, the v1 routing catalog). Only generic
103
- // non-model constants come from constants.ts (layer 0).
104
- import { fnv1a32 } from "./core.js";
105
- import {
106
- ANTIGRAVITY_USER_AGENT_FALLBACK,
107
- ANTIGRAVITY_VERSION_FALLBACK,
108
- CODE_ASSIST_PATH_MAP,
109
- ENDPOINTS,
110
- FNV_OFFSET_BASIS,
111
- FNV_PRIME,
112
- PROJECT_FALLBACK,
113
- } from "./constants.js";
114
- import type { AntigravityVersion, CodeAssistEndpointPath, QuotaGroup } from "./constants.js";
115
-
116
- // ===========================================================================
117
- // Raw model substrates (v2.1.15 Phase A — moved from constants.ts so that
118
- // model identification lives ONLY in models.ts; values byte-identical)
119
- // ===========================================================================
120
-
121
- // ---------------------------------------------------------------------------
122
- // Models 2026-08-25 — complete taxonomy
123
- // ---------------------------------------------------------------------------
124
- // Gemini 3.6 Flash
125
- export const GEMINI_36_MODELS = [
126
- "gemini-3.6-flash-high",
127
- "gemini-3.6-flash-medium",
128
- "gemini-3.6-flash-low",
129
- "gemini-3.6-flash-tiered",
130
- "gemini-3.6-flash",
131
- "antigravity-gemini-3.6-flash-high",
132
- "antigravity-gemini-3.6-flash-medium",
133
- "antigravity-gemini-3.6-flash-low",
134
- "antigravity-gemini-3.6-flash-tiered",
135
- "antigravity-gemini-3.6-flash",
136
- ] as const;
137
-
138
- export const GEMINI_36_MODEL_DEFINITIONS: readonly AntigravityModelDefinition[] = [
139
- {
140
- id: "gemini-3.6-flash-high",
141
- displayName: "Gemini 3.6 Flash High",
142
- group: "antigravity",
143
- contextWindow: 1_048_576,
144
- outputLimit: 65_535,
145
- supportsThinking: true,
146
- supportsTools: true,
147
- supportsVision: true,
148
- isPreview: false,
149
- isClaude: false,
150
- },
151
- {
152
- id: "gemini-3.6-flash-medium",
153
- displayName: "Gemini 3.6 Flash Medium",
154
- group: "antigravity",
155
- contextWindow: 1_048_576,
156
- outputLimit: 65_535,
157
- supportsThinking: true,
158
- supportsTools: true,
159
- supportsVision: true,
160
- isPreview: false,
161
- isClaude: false,
162
- },
163
- {
164
- id: "gemini-3.6-flash-low",
165
- displayName: "Gemini 3.6 Flash Low",
166
- group: "antigravity",
167
- contextWindow: 1_048_576,
168
- outputLimit: 65_535,
169
- supportsThinking: false,
170
- supportsTools: true,
171
- supportsVision: true,
172
- isPreview: false,
173
- isClaude: false,
174
- },
175
- {
176
- id: "gemini-3.6-flash-tiered",
177
- displayName: "Gemini 3.6 Flash Tiered",
178
- group: "antigravity",
179
- contextWindow: 1_048_576,
180
- outputLimit: 65_535,
181
- supportsThinking: true,
182
- supportsTools: true,
183
- supportsVision: true,
184
- isPreview: false,
185
- isClaude: false,
186
- },
187
- {
188
- id: "gemini-3.6-flash",
189
- displayName: "Gemini 3.6 Flash",
190
- group: "antigravity",
191
- contextWindow: 1_048_576,
192
- outputLimit: 65_535,
193
- supportsThinking: true,
194
- supportsTools: true,
195
- supportsVision: true,
196
- isPreview: false,
197
- isClaude: false,
198
- },
199
- {
200
- id: "antigravity-gemini-3.6-flash",
201
- displayName: "Gemini 3.6 Flash (Antigravity)",
202
- group: "antigravity",
203
- contextWindow: 1_048_576,
204
- outputLimit: 65_535,
205
- supportsThinking: true,
206
- supportsTools: true,
207
- supportsVision: true,
208
- isPreview: false,
209
- isClaude: false,
210
- },
211
- {
212
- id: "antigravity-gemini-3.6-flash-high",
213
- displayName: "Gemini 3.6 Flash High (Antigravity)",
214
- group: "antigravity",
215
- contextWindow: 1_048_576,
216
- outputLimit: 65_535,
217
- supportsThinking: true,
218
- supportsTools: true,
219
- supportsVision: true,
220
- isPreview: false,
221
- isClaude: false,
222
- },
223
- ] as const;
224
-
225
- // Gemini 3.5 Flash
226
- export const GEMINI_35_MODELS = [
227
- "gemini-3.5-flash-high",
228
- "gemini-3.5-flash-medium",
229
- "gemini-3.5-flash",
230
- "gemini-3.5-flash-lite",
231
- "gemini-3.5-flash-lite-preview",
232
- "antigravity-gemini-3.5-flash-high",
233
- "antigravity-gemini-3.5-flash-medium",
234
- "antigravity-gemini-3.5-flash",
235
- "antigravity-gemini-3.5-flash-lite",
236
- "antigravity-gemini-3.5-flash-lite-preview",
237
- ] as const;
238
-
239
- export const GEMINI_35_MODEL_DEFINITIONS: readonly AntigravityModelDefinition[] = [
240
- {
241
- id: "gemini-3.5-flash-high",
242
- displayName: "Gemini 3.5 Flash High",
243
- group: "antigravity",
244
- contextWindow: 1_048_576,
245
- outputLimit: 65_535,
246
- supportsThinking: true,
247
- supportsTools: true,
248
- supportsVision: true,
249
- isPreview: false,
250
- isClaude: false,
251
- },
252
- {
253
- id: "gemini-3.5-flash-medium",
254
- displayName: "Gemini 3.5 Flash Medium",
255
- group: "antigravity",
256
- contextWindow: 1_048_576,
257
- outputLimit: 65_535,
258
- supportsThinking: true,
259
- supportsTools: true,
260
- supportsVision: true,
261
- isPreview: false,
262
- isClaude: false,
263
- },
264
- {
265
- id: "gemini-3.5-flash",
266
- displayName: "Gemini 3.5 Flash",
267
- group: "antigravity",
268
- contextWindow: 1_048_576,
269
- outputLimit: 65_535,
270
- supportsThinking: true,
271
- supportsTools: true,
272
- supportsVision: true,
273
- isPreview: false,
274
- isClaude: false,
275
- },
276
- {
277
- id: "gemini-3.5-flash-lite",
278
- displayName: "Gemini 3.5 Flash Lite",
279
- group: "antigravity",
280
- contextWindow: 1_048_576,
281
- outputLimit: 32_768,
282
- supportsThinking: false,
283
- supportsTools: true,
284
- supportsVision: true,
285
- isPreview: false,
286
- isClaude: false,
287
- },
288
- {
289
- id: "gemini-3.5-flash-lite-preview",
290
- displayName: "Gemini 3.5 Flash Lite Preview",
291
- group: "gemini-cli",
292
- contextWindow: 1_048_576,
293
- outputLimit: 32_768,
294
- supportsThinking: false,
295
- supportsTools: true,
296
- supportsVision: true,
297
- isPreview: true,
298
- isClaude: false,
299
- },
300
- {
301
- id: "antigravity-gemini-3.5-flash",
302
- displayName: "Gemini 3.5 Flash (Antigravity)",
303
- group: "antigravity",
304
- contextWindow: 1_048_576,
305
- outputLimit: 65_535,
306
- supportsThinking: true,
307
- supportsTools: true,
308
- supportsVision: true,
309
- isPreview: false,
310
- isClaude: false,
311
- },
312
- ] as const;
313
-
314
- // Gemini 3.1
315
- export const GEMINI_31_MODELS = [
316
- "gemini-3.1-pro-high",
317
- "gemini-3.1-pro-low",
318
- "gemini-3.1-pro",
319
- "gemini-3.1-flash-image",
320
- "gemini-3.1-flash-lite",
321
- "antigravity-gemini-3.1-pro-high",
322
- "antigravity-gemini-3.1-pro-low",
323
- "antigravity-gemini-3.1-pro",
324
- "antigravity-gemini-3.1-flash-image",
325
- "antigravity-gemini-3.1-flash-lite",
326
- ] as const;
327
-
328
- export const GEMINI_31_MODEL_DEFINITIONS: readonly AntigravityModelDefinition[] = [
329
- {
330
- id: "gemini-3.1-pro-high",
331
- displayName: "Gemini 3.1 Pro High",
332
- group: "antigravity",
333
- contextWindow: 1_048_576,
334
- outputLimit: 65_535,
335
- supportsThinking: true,
336
- supportsTools: true,
337
- supportsVision: true,
338
- isPreview: false,
339
- isClaude: false,
340
- },
341
- {
342
- id: "gemini-3.1-pro-low",
343
- displayName: "Gemini 3.1 Pro Low",
344
- group: "antigravity",
345
- contextWindow: 1_048_576,
346
- outputLimit: 65_535,
347
- supportsThinking: false,
348
- supportsTools: true,
349
- supportsVision: true,
350
- isPreview: false,
351
- isClaude: false,
352
- },
353
- {
354
- id: "gemini-3.1-pro",
355
- displayName: "Gemini 3.1 Pro",
356
- group: "antigravity",
357
- contextWindow: 1_048_576,
358
- outputLimit: 65_535,
359
- supportsThinking: true,
360
- supportsTools: true,
361
- supportsVision: true,
362
- isPreview: false,
363
- isClaude: false,
364
- },
365
- {
366
- id: "gemini-3.1-flash-image",
367
- displayName: "Gemini 3.1 Flash Image",
368
- group: "antigravity",
369
- contextWindow: 1_048_576,
370
- outputLimit: 65_535,
371
- supportsThinking: false,
372
- supportsTools: false,
373
- supportsVision: true,
374
- isPreview: false,
375
- isClaude: false,
376
- },
377
- {
378
- id: "gemini-3.1-flash-lite",
379
- displayName: "Gemini 3.1 Flash Lite",
380
- group: "antigravity",
381
- contextWindow: 1_048_576,
382
- outputLimit: 32_768,
383
- supportsThinking: false,
384
- supportsTools: true,
385
- supportsVision: true,
386
- isPreview: false,
387
- isClaude: false,
388
- },
389
- {
390
- id: "antigravity-gemini-3.1-pro",
391
- displayName: "Gemini 3.1 Pro (Antigravity)",
392
- group: "antigravity",
393
- contextWindow: 1_048_576,
394
- outputLimit: 65_535,
395
- supportsThinking: true,
396
- supportsTools: true,
397
- supportsVision: true,
398
- isPreview: false,
399
- isClaude: false,
400
- },
401
- ] as const;
402
-
403
- // Gemini 3
404
- export const GEMINI_3_MODELS = [
405
- "gemini-3-flash",
406
- "gemini-3-pro",
407
- "gemini-3-deep-think",
408
- "antigravity-gemini-3-flash",
409
- "antigravity-gemini-3-pro",
410
- "antigravity-gemini-3-deep-think",
411
- ] as const;
412
-
413
- export const GEMINI_3_MODEL_DEFINITIONS: readonly AntigravityModelDefinition[] = [
414
- {
415
- id: "gemini-3-flash",
416
- displayName: "Gemini 3 Flash",
417
- group: "antigravity",
418
- contextWindow: 1_048_576,
419
- outputLimit: 65_535,
420
- supportsThinking: false,
421
- supportsTools: true,
422
- supportsVision: true,
423
- isPreview: false,
424
- isClaude: false,
425
- },
426
- {
427
- id: "gemini-3-pro",
428
- displayName: "Gemini 3 Pro",
429
- group: "antigravity",
430
- contextWindow: 1_048_576,
431
- outputLimit: 65_535,
432
- supportsThinking: true,
433
- supportsTools: true,
434
- supportsVision: true,
435
- isPreview: false,
436
- isClaude: false,
437
- },
438
- {
439
- id: "gemini-3-deep-think",
440
- displayName: "Gemini 3 Deep Think",
441
- group: "antigravity",
442
- contextWindow: 1_048_576,
443
- outputLimit: 65_535,
444
- supportsThinking: true,
445
- supportsTools: true,
446
- supportsVision: true,
447
- isPreview: false,
448
- isClaude: false,
449
- },
450
- {
451
- id: "antigravity-gemini-3-pro",
452
- displayName: "Gemini 3 Pro (Antigravity)",
453
- group: "antigravity",
454
- contextWindow: 1_048_576,
455
- outputLimit: 65_535,
456
- supportsThinking: true,
457
- supportsTools: true,
458
- supportsVision: true,
459
- isPreview: false,
460
- isClaude: false,
461
- },
462
- {
463
- id: "antigravity-gemini-3-flash",
464
- displayName: "Gemini 3 Flash (Antigravity)",
465
- group: "antigravity",
466
- contextWindow: 1_048_576,
467
- outputLimit: 65_535,
468
- supportsThinking: false,
469
- supportsTools: true,
470
- supportsVision: true,
471
- isPreview: false,
472
- isClaude: false,
473
- },
474
- ] as const;
475
-
476
- // Gemini 2.5
477
- export const GEMINI_25_MODELS = [
478
- "gemini-2.5-pro",
479
- "gemini-2.5-flash",
480
- "gemini-2.5-flash-lite",
481
- "antigravity-gemini-2.5-pro",
482
- "antigravity-gemini-2.5-flash",
483
- "antigravity-gemini-2.5-flash-lite",
484
- "gemini-2.5",
485
- ] as const;
486
-
487
- export const GEMINI_25_MODEL_DEFINITIONS: readonly AntigravityModelDefinition[] = [
488
- {
489
- id: "gemini-2.5-pro",
490
- displayName: "Gemini 2.5 Pro",
491
- group: "antigravity",
492
- contextWindow: 1_048_576,
493
- outputLimit: 65_535,
494
- supportsThinking: true,
495
- supportsTools: true,
496
- supportsVision: true,
497
- isPreview: false,
498
- isClaude: false,
499
- },
500
- {
501
- id: "gemini-2.5-flash",
502
- displayName: "Gemini 2.5 Flash",
503
- group: "antigravity",
504
- contextWindow: 1_048_576,
505
- outputLimit: 65_535,
506
- supportsThinking: true,
507
- supportsTools: true,
508
- supportsVision: true,
509
- isPreview: false,
510
- isClaude: false,
511
- },
512
- {
513
- id: "gemini-2.5-flash-lite",
514
- displayName: "Gemini 2.5 Flash Lite",
515
- group: "antigravity",
516
- contextWindow: 1_048_576,
517
- outputLimit: 32_768,
518
- supportsThinking: false,
519
- supportsTools: true,
520
- supportsVision: true,
521
- isPreview: false,
522
- isClaude: false,
523
- },
524
- ] as const;
525
-
526
- // Claude 4.6
527
- export const CLAUDE_46_MODELS = [
528
- "claude-sonnet-4-6-thinking",
529
- "claude-sonnet-4-6-thinking-low",
530
- "claude-sonnet-4-6-thinking-high",
531
- "claude-sonnet-4-6",
532
- "claude-opus-4-6-thinking",
533
- "claude-opus-4-6-thinking-low",
534
- "claude-opus-4-6-thinking-high",
535
- "claude-opus-4-6-thinking-max",
536
- "claude-opus-4-6",
537
- "antigravity-claude-sonnet-4-6",
538
- "antigravity-claude-sonnet-4-6-thinking",
539
- "antigravity-claude-opus-4-6-thinking",
540
- "antigravity-claude-opus-4-6-thinking-low",
541
- "antigravity-claude-opus-4-6-thinking-max",
542
- ] as const;
543
-
544
- export const CLAUDE_46_MODEL_DEFINITIONS: readonly AntigravityModelDefinition[] = [
545
- {
546
- id: "claude-sonnet-4-6-thinking",
547
- displayName: "Claude Sonnet 4.6 Thinking",
548
- group: "antigravity",
549
- contextWindow: 200_000,
550
- outputLimit: 64_000,
551
- supportsThinking: true,
552
- supportsTools: true,
553
- supportsVision: true,
554
- isPreview: false,
555
- isClaude: true,
556
- },
557
- {
558
- id: "claude-sonnet-4-6-thinking-low",
559
- displayName: "Claude Sonnet 4.6 Thinking Low",
560
- group: "antigravity",
561
- contextWindow: 200_000,
562
- outputLimit: 64_000,
563
- supportsThinking: true,
564
- supportsTools: true,
565
- supportsVision: true,
566
- isPreview: false,
567
- isClaude: true,
568
- },
569
- {
570
- id: "claude-sonnet-4-6-thinking-high",
571
- displayName: "Claude Sonnet 4.6 Thinking High",
572
- group: "antigravity",
573
- contextWindow: 200_000,
574
- outputLimit: 64_000,
575
- supportsThinking: true,
576
- supportsTools: true,
577
- supportsVision: true,
578
- isPreview: false,
579
- isClaude: true,
580
- },
581
- {
582
- id: "claude-sonnet-4-6",
583
- displayName: "Claude Sonnet 4.6",
584
- group: "antigravity",
585
- contextWindow: 200_000,
586
- outputLimit: 64_000,
587
- supportsThinking: false,
588
- supportsTools: true,
589
- supportsVision: true,
590
- isPreview: false,
591
- isClaude: true,
592
- },
593
- {
594
- id: "claude-opus-4-6-thinking",
595
- displayName: "Claude Opus 4.6 Thinking",
596
- group: "antigravity",
597
- contextWindow: 200_000,
598
- outputLimit: 64_000,
599
- supportsThinking: true,
600
- supportsTools: true,
601
- supportsVision: true,
602
- isPreview: false,
603
- isClaude: true,
604
- },
605
- {
606
- id: "claude-opus-4-6-thinking-low",
607
- displayName: "Claude Opus 4.6 Thinking Low",
608
- group: "antigravity",
609
- contextWindow: 200_000,
610
- outputLimit: 64_000,
611
- supportsThinking: true,
612
- supportsTools: true,
613
- supportsVision: true,
614
- isPreview: false,
615
- isClaude: true,
616
- },
617
- {
618
- id: "claude-opus-4-6-thinking-high",
619
- displayName: "Claude Opus 4.6 Thinking High",
620
- group: "antigravity",
621
- contextWindow: 200_000,
622
- outputLimit: 64_000,
623
- supportsThinking: true,
624
- supportsTools: true,
625
- supportsVision: true,
626
- isPreview: false,
627
- isClaude: true,
628
- },
629
- {
630
- id: "claude-opus-4-6-thinking-max",
631
- displayName: "Claude Opus 4.6 Thinking Max",
632
- group: "antigravity",
633
- contextWindow: 200_000,
634
- outputLimit: 64_000,
635
- supportsThinking: true,
636
- supportsTools: true,
637
- supportsVision: true,
638
- isPreview: false,
639
- isClaude: true,
640
- },
641
- {
642
- id: "antigravity-claude-sonnet-4-6",
643
- displayName: "Claude Sonnet 4.6 (Antigravity)",
644
- group: "antigravity",
645
- contextWindow: 200_000,
646
- outputLimit: 64_000,
647
- supportsThinking: true,
648
- supportsTools: true,
649
- supportsVision: true,
650
- isPreview: false,
651
- isClaude: true,
652
- },
653
- {
654
- id: "antigravity-claude-opus-4-6-thinking",
655
- displayName: "Claude Opus 4.6 Thinking (Antigravity)",
656
- group: "antigravity",
657
- contextWindow: 200_000,
658
- outputLimit: 64_000,
659
- supportsThinking: true,
660
- supportsTools: true,
661
- supportsVision: true,
662
- isPreview: false,
663
- isClaude: true,
664
- },
665
- ] as const;
666
-
667
- // Claude 4.5 legacy
668
- export const CLAUDE_45_MODELS = [
669
- "claude-sonnet-4-5",
670
- "claude-sonnet-4-5-thinking",
671
- "claude-opus-4-5-thinking",
672
- "claude-opus-4-5-thinking-low",
673
- "claude-opus-4-5",
674
- ] as const;
675
-
676
- export const CLAUDE_45_MODEL_DEFINITIONS: readonly AntigravityModelDefinition[] = [
677
- {
678
- id: "claude-sonnet-4-5",
679
- displayName: "Claude Sonnet 4.5",
680
- group: "antigravity",
681
- contextWindow: 200_000,
682
- outputLimit: 64_000,
683
- supportsThinking: false,
684
- supportsTools: true,
685
- supportsVision: true,
686
- isPreview: false,
687
- isClaude: true,
688
- },
689
- {
690
- id: "claude-sonnet-4-5-thinking",
691
- displayName: "Claude Sonnet 4.5 Thinking",
692
- group: "antigravity",
693
- contextWindow: 200_000,
694
- outputLimit: 64_000,
695
- supportsThinking: true,
696
- supportsTools: true,
697
- supportsVision: true,
698
- isPreview: false,
699
- isClaude: true,
700
- },
701
- {
702
- id: "claude-opus-4-5-thinking",
703
- displayName: "Claude Opus 4.5 Thinking (Legacy)",
704
- group: "antigravity",
705
- contextWindow: 200_000,
706
- outputLimit: 64_000,
707
- supportsThinking: true,
708
- supportsTools: true,
709
- supportsVision: true,
710
- isPreview: false,
711
- isClaude: true,
712
- },
713
- {
714
- id: "claude-opus-4-5-thinking-low",
715
- displayName: "Claude Opus 4.5 Thinking Low",
716
- group: "antigravity",
717
- contextWindow: 200_000,
718
- outputLimit: 64_000,
719
- supportsThinking: true,
720
- supportsTools: true,
721
- supportsVision: true,
722
- isPreview: false,
723
- isClaude: true,
724
- },
725
- ] as const;
726
-
727
- // gpt-oss-120b
728
- export const GPT_OSS_MODELS = [
729
- "gpt-oss-120b-medium",
730
- "gpt-oss-120b-high",
731
- "gpt-oss-120b",
732
- "antigravity-gpt-oss-120b-medium",
733
- "antigravity-gpt-oss-120b-high",
734
- ] as const;
735
-
736
- export const GPT_OSS_MODEL_DEFINITIONS: readonly AntigravityModelDefinition[] = [
737
- {
738
- id: "gpt-oss-120b-medium",
739
- displayName: "GPT OSS 120B Medium",
740
- group: "antigravity",
741
- contextWindow: 131_072,
742
- outputLimit: 32_768,
743
- supportsThinking: true,
744
- supportsTools: true,
745
- supportsVision: false,
746
- isPreview: false,
747
- isClaude: false,
748
- isGptOss: true,
749
- },
750
- {
751
- id: "gpt-oss-120b-high",
752
- displayName: "GPT OSS 120B High",
753
- group: "antigravity",
754
- contextWindow: 131_072,
755
- outputLimit: 32_768,
756
- supportsThinking: true,
757
- supportsTools: true,
758
- supportsVision: false,
759
- isPreview: false,
760
- isClaude: false,
761
- isGptOss: true,
762
- },
763
- {
764
- id: "gpt-oss-120b",
765
- displayName: "GPT OSS 120B",
766
- group: "antigravity",
767
- contextWindow: 131_072,
768
- outputLimit: 32_768,
769
- supportsThinking: true,
770
- supportsTools: true,
771
- supportsVision: false,
772
- isPreview: false,
773
- isClaude: false,
774
- isGptOss: true,
775
- },
776
- ] as const;
777
-
778
- // Preview models
779
- export const PREVIEW_MODELS_2026_08 = [
780
- "gemini-3-pro-preview",
781
- "gemini-3-flash-preview",
782
- "gemini-3.1-pro-preview",
783
- "gemini-3.1-pro-preview-customtools",
784
- "gemini-3.5-flash-lite-preview",
785
- "gemini-3.6-flash-preview",
786
- "antigravity-gemini-3-pro-preview",
787
- "antigravity-gemini-3-flash-preview",
788
- "antigravity-gemini-3.1-pro-preview",
789
- ] as const;
790
-
791
- export const PREVIEW_MODEL_DEFINITIONS: readonly AntigravityModelDefinition[] = [
792
- {
793
- id: "gemini-3-pro-preview",
794
- displayName: "Gemini 3 Pro Preview",
795
- group: "gemini-cli",
796
- contextWindow: 1_048_576,
797
- outputLimit: 65_535,
798
- supportsThinking: true,
799
- supportsTools: true,
800
- supportsVision: true,
801
- isPreview: true,
802
- isClaude: false,
803
- },
804
- {
805
- id: "gemini-3-flash-preview",
806
- displayName: "Gemini 3 Flash Preview",
807
- group: "gemini-cli",
808
- contextWindow: 1_048_576,
809
- outputLimit: 65_535,
810
- supportsThinking: false,
811
- supportsTools: true,
812
- supportsVision: true,
813
- isPreview: true,
814
- isClaude: false,
815
- },
816
- {
817
- id: "gemini-3.1-pro-preview",
818
- displayName: "Gemini 3.1 Pro Preview",
819
- group: "gemini-cli",
820
- contextWindow: 1_048_576,
821
- outputLimit: 65_535,
822
- supportsThinking: true,
823
- supportsTools: true,
824
- supportsVision: true,
825
- isPreview: true,
826
- isClaude: false,
827
- },
828
- {
829
- id: "gemini-3.1-pro-preview-customtools",
830
- displayName: "Gemini 3.1 Pro Preview CustomTools",
831
- group: "gemini-cli",
832
- contextWindow: 1_048_576,
833
- outputLimit: 65_535,
834
- supportsThinking: true,
835
- supportsTools: true,
836
- supportsVision: true,
837
- isPreview: true,
838
- isClaude: false,
839
- },
840
- {
841
- id: "gemini-3.6-flash-preview",
842
- displayName: "Gemini 3.6 Flash Preview",
843
- group: "gemini-cli",
844
- contextWindow: 1_048_576,
845
- outputLimit: 65_535,
846
- supportsThinking: true,
847
- supportsTools: true,
848
- supportsVision: true,
849
- isPreview: true,
850
- isClaude: false,
851
- },
852
- ] as const;
853
-
854
- // v2.1.15 Phase A: the exported family names MODELS_2026_08_25 (flat modelDef
855
- // projection), ANTIGRAVITY_MODELS_2026, ANTIGRAVITY_MODELS,
856
- // ANTIGRAVITY_MODEL_IDS_2026, GEMINI_CLI_ONLY_MODELS and
857
- // isGeminiCLIOnlyModel moved to models.ts. The raw aggregates below keep
858
- // their exact values as the layer-0 substrate models.ts derives from.
859
-
860
- /** Raw flat string-id aggregate of the 2026-08-25 catalog (bare + antigravity aliases). */
861
- const MODELS_2026_08_25_IDS = [
862
- ...GEMINI_36_MODELS,
863
- ...GEMINI_35_MODELS,
864
- ...GEMINI_31_MODELS,
865
- ...GEMINI_3_MODELS,
866
- ...GEMINI_25_MODELS,
867
- ...PREVIEW_MODELS_2026_08,
868
- ...CLAUDE_46_MODELS,
869
- ...CLAUDE_45_MODELS,
870
- ...GPT_OSS_MODELS,
871
- ] as const;
872
-
873
- export const MODELS_2026_08_25_DEDUP = Array.from(
874
- new Set<string>(MODELS_2026_08_25_IDS),
875
- ) as unknown as readonly string[];
876
-
877
- /** Raw rich-definition aggregate consumed by models.ts (ANTIGRAVITY_MODELS_2026 family). */
878
- export const MODEL_DEFINITIONS_2026 = [
879
- ...GEMINI_36_MODEL_DEFINITIONS,
880
- ...GEMINI_35_MODEL_DEFINITIONS,
881
- ...GEMINI_31_MODEL_DEFINITIONS,
882
- ...GEMINI_3_MODEL_DEFINITIONS,
883
- ...GEMINI_25_MODEL_DEFINITIONS,
884
- ...PREVIEW_MODEL_DEFINITIONS,
885
- ...CLAUDE_46_MODEL_DEFINITIONS,
886
- ...CLAUDE_45_MODEL_DEFINITIONS,
887
- ...GPT_OSS_MODEL_DEFINITIONS,
888
- ] as const satisfies readonly AntigravityModelDefinition[];
889
-
890
- export const ANTIGRAVITY_MODELS_2026_08 = MODEL_DEFINITIONS_2026;
891
-
892
- export const MODEL_IDS_2026_08_25 = MODELS_2026_08_25_DEDUP;
893
-
894
- /**
895
- * Quota module model roster (v2.1.15 Phase A move from quota.ts — model data
896
- * lives only in models.ts). Lineage B subset used by the quota grouping map;
897
- * values byte-identical to the former quota.ts ANTIGRAVITY_MODELS_2026.
898
- */
899
- export const QUOTA_MODEL_ROSTER: readonly AntigravityModelDefinition[] = [
900
- {
901
- id: "antigravity-gemini-3-pro",
902
- displayName: "Gemini 3 Pro (Antigravity)",
903
- group: "antigravity",
904
- contextWindow: 1_048_576,
905
- outputLimit: 65_535,
906
- supportsThinking: true,
907
- supportsTools: true,
908
- supportsVision: true,
909
- isPreview: false,
910
- isClaude: false,
911
- },
912
- {
913
- id: "antigravity-gemini-3-flash",
914
- displayName: "Gemini 3 Flash (Antigravity)",
915
- group: "antigravity",
916
- contextWindow: 1_048_576,
917
- outputLimit: 65_535,
918
- supportsThinking: true,
919
- supportsTools: true,
920
- supportsVision: true,
921
- isPreview: false,
922
- isClaude: false,
923
- },
924
- {
925
- id: "antigravity-gemini-3.1-pro",
926
- displayName: "Gemini 3.1 Pro (Antigravity)",
927
- group: "antigravity",
928
- contextWindow: 1_048_576,
929
- outputLimit: 65_535,
930
- supportsThinking: true,
931
- supportsTools: true,
932
- supportsVision: true,
933
- isPreview: false,
934
- isClaude: false,
935
- },
936
- {
937
- id: "gemini-2.5-flash",
938
- displayName: "Gemini 2.5 Flash",
939
- group: "antigravity",
940
- contextWindow: 1_048_576,
941
- outputLimit: 65_535,
942
- supportsThinking: true,
943
- supportsTools: true,
944
- supportsVision: true,
945
- isPreview: false,
946
- isClaude: false,
947
- },
948
- {
949
- id: "gemini-2.5-pro",
950
- displayName: "Gemini 2.5 Pro",
951
- group: "antigravity",
952
- contextWindow: 1_048_576,
953
- outputLimit: 65_535,
954
- supportsThinking: true,
955
- supportsTools: true,
956
- supportsVision: true,
957
- isPreview: false,
958
- isClaude: false,
959
- },
960
- {
961
- id: "gemini-3-flash-preview",
962
- displayName: "Gemini 3 Flash Preview",
963
- group: "gemini-cli",
964
- contextWindow: 1_048_576,
965
- outputLimit: 65_535,
966
- supportsThinking: true,
967
- supportsTools: true,
968
- supportsVision: true,
969
- isPreview: true,
970
- isClaude: false,
971
- },
972
- {
973
- id: "gemini-3-pro-preview",
974
- displayName: "Gemini 3 Pro Preview",
975
- group: "gemini-cli",
976
- contextWindow: 1_048_576,
977
- outputLimit: 65_535,
978
- supportsThinking: true,
979
- supportsTools: true,
980
- supportsVision: true,
981
- isPreview: true,
982
- isClaude: false,
983
- },
984
- {
985
- id: "gemini-3.1-pro-preview",
986
- displayName: "Gemini 3.1 Pro Preview",
987
- group: "gemini-cli",
988
- contextWindow: 1_048_576,
989
- outputLimit: 65_535,
990
- supportsThinking: true,
991
- supportsTools: true,
992
- supportsVision: true,
993
- isPreview: true,
994
- isClaude: false,
995
- },
996
- {
997
- id: "gemini-3.1-pro-preview-customtools",
998
- displayName: "Gemini 3.1 Pro Preview CustomTools",
999
- group: "gemini-cli",
1000
- contextWindow: 1_048_576,
1001
- outputLimit: 65_535,
1002
- supportsThinking: true,
1003
- supportsTools: true,
1004
- supportsVision: true,
1005
- isPreview: true,
1006
- isClaude: false,
1007
- },
1008
- {
1009
- id: "claude-opus-4-6-thinking",
1010
- displayName: "Claude Opus 4.6 Thinking",
1011
- group: "antigravity",
1012
- contextWindow: 200_000,
1013
- outputLimit: 64_000,
1014
- supportsThinking: true,
1015
- supportsTools: true,
1016
- supportsVision: true,
1017
- isPreview: false,
1018
- isClaude: true,
1019
- },
1020
- {
1021
- id: "claude-opus-4-6-thinking-low",
1022
- displayName: "Claude Opus 4.6 Thinking Low",
1023
- group: "antigravity",
1024
- contextWindow: 200_000,
1025
- outputLimit: 64_000,
1026
- supportsThinking: true,
1027
- supportsTools: true,
1028
- supportsVision: true,
1029
- isPreview: false,
1030
- isClaude: true,
1031
- },
1032
- {
1033
- id: "claude-opus-4-6-thinking-max",
1034
- displayName: "Claude Opus 4.6 Thinking Max",
1035
- group: "antigravity",
1036
- contextWindow: 200_000,
1037
- outputLimit: 64_000,
1038
- supportsThinking: true,
1039
- supportsTools: true,
1040
- supportsVision: true,
1041
- isPreview: false,
1042
- isClaude: true,
1043
- },
1044
- {
1045
- id: "claude-sonnet-4-6",
1046
- displayName: "Claude Sonnet 4.6",
1047
- group: "antigravity",
1048
- contextWindow: 200_000,
1049
- outputLimit: 64_000,
1050
- supportsThinking: true,
1051
- supportsTools: true,
1052
- supportsVision: true,
1053
- isPreview: false,
1054
- isClaude: true,
1055
- },
1056
- {
1057
- id: "claude-opus-4-5-thinking",
1058
- displayName: "Claude Opus 4.5 Thinking (Legacy)",
1059
- group: "antigravity",
1060
- contextWindow: 200_000,
1061
- outputLimit: 64_000,
1062
- supportsThinking: true,
1063
- supportsTools: true,
1064
- supportsVision: true,
1065
- isPreview: false,
1066
- isClaude: true,
1067
- },
1068
- // Aliases bare gemini-3-* without antigravity- prefix - server accepts both
1069
- {
1070
- id: "gemini-3-flash",
1071
- displayName: "Gemini 3 Flash",
1072
- group: "gemini-cli",
1073
- contextWindow: 1_048_576,
1074
- outputLimit: 65_535,
1075
- supportsThinking: true,
1076
- supportsTools: true,
1077
- supportsVision: true,
1078
- isPreview: false,
1079
- isClaude: false,
1080
- },
1081
- {
1082
- id: "gemini-3-pro",
1083
- displayName: "Gemini 3 Pro",
1084
- group: "gemini-cli",
1085
- contextWindow: 1_048_576,
1086
- outputLimit: 65_535,
1087
- supportsThinking: true,
1088
- supportsTools: true,
1089
- supportsVision: true,
1090
- isPreview: false,
1091
- isClaude: false,
1092
- },
1093
- {
1094
- id: "gemini-3.1-pro",
1095
- displayName: "Gemini 3.1 Pro",
1096
- group: "gemini-cli",
1097
- contextWindow: 1_048_576,
1098
- outputLimit: 65_535,
1099
- supportsThinking: true,
1100
- supportsTools: true,
1101
- supportsVision: true,
1102
- isPreview: false,
1103
- isClaude: false,
1104
- },
1105
- ];
1106
-
1107
- // v2.1.15 Phase A: isThinkingModel and normalizeModelId moved to models.ts
1108
- // (single canonical implementations; these local variants had no consumers).
1109
-
1110
- export function isGemini36Model(modelId: string): boolean {
1111
- return modelId.toLowerCase().includes("gemini-3.6");
1112
- }
1113
- export function isGemini35Model(modelId: string): boolean {
1114
- return modelId.toLowerCase().includes("gemini-3.5");
1115
- }
1116
- export function isGemini31Model(modelId: string): boolean {
1117
- return modelId.toLowerCase().includes("gemini-3.1");
1118
- }
1119
- export function isClaude46Model(modelId: string): boolean {
1120
- const l = modelId.toLowerCase();
1121
- return l.includes("claude") && (l.includes("4-6") || l.includes("4.6"));
1122
- }
1123
- export function isClaude45Model(modelId: string): boolean {
1124
- const l = modelId.toLowerCase();
1125
- return l.includes("claude") && (l.includes("4-5") || l.includes("4.5"));
1126
- }
1127
- export function isGptOssModel(modelId: string): boolean {
1128
- return modelId.toLowerCase().includes("gpt-oss");
1129
- }
1130
- export function isPreviewModel(modelId: string): boolean {
1131
- return modelId.toLowerCase().includes("preview") || modelId.toLowerCase().includes("customtools");
1132
- }
1133
- export const MODEL_ALIASES_2026: Record<string, string> = {
1134
- "gemini-3-pro": "antigravity-gemini-3-pro",
1135
- "gemini-3-flash": "antigravity-gemini-3-flash",
1136
- "gemini-3.1-pro": "antigravity-gemini-3.1-pro",
1137
- "claude-opus-4-6": "claude-opus-4-6-thinking",
1138
- "claude-sonnet-4-6": "antigravity-claude-sonnet-4-6",
1139
- "claude-opus-4-5": "claude-opus-4-5-thinking",
1140
- "gemini-3.6-flash-high": "antigravity-gemini-3.6-flash-high",
1141
- "gemini-3.5-flash-high": "antigravity-gemini-3.5-flash-high",
1142
- "gemini-3.1-pro-high": "antigravity-gemini-3.1-pro-high",
1143
- } as const;
1144
-
1145
- // v2.1.15 Phase A: SEARCH_MODEL, SEARCH_MODEL_PREVIEW, SEARCH_MODEL_FALLBACKS
1146
- // and DEFAULT_MODEL moved to models.ts. The two unlisted fallback names below
1147
- // keep their historical values here.
1148
- export const DEFAULT_MODEL_FALLBACK = "gemini-3-flash-preview" as const;
1149
- export const DEFAULT_MODEL_2026_08 = "antigravity-gemini-3.6-flash" as const;
1150
-
1151
- // ---------------------------------------------------------------------------
1152
- // V1-05. Model catalog 2026 — Antigravity + Gemini CLI routing definitions
1153
- // ---------------------------------------------------------------------------
1154
-
1155
- export type ApiProvider = "antigravity" | "gemini-cli";
1156
- // v2.1.15 Phase A: this whole V1-05 block (ApiProvider, ModelVendor and the
1157
- // raw catalog) moved from constants.ts into models.ts — model data lives
1158
- // ONLY in models.ts. The legacy catalog shape is LegacyModelDefinition.
1159
- export type ModelVendor = "google" | "anthropic";
1160
-
1161
- /**
1162
- * Raw v1 routing catalog (11 rich entries). models.ts imports this list and
1163
- * owns the family name ALL_MODELS_2026; the legacy shape is LegacyModelDefinition.
1164
- */
1165
- export const V1_CATALOG_MODELS = [
1166
- {
1167
- id: "antigravity-gemini-3-pro",
1168
- name: "Antigravity Gemini 3.0 Pro",
1169
- context: 1_048_576,
1170
- output: 65_536,
1171
- provider: "google",
1172
- api: "antigravity",
1173
- family: "gemini-3-pro",
1174
- quotaGroup: "gemini-3-pro",
1175
- },
1176
- {
1177
- id: "antigravity-gemini-3.1-pro",
1178
- name: "Antigravity Gemini 3.1 Pro",
1179
- context: 2_097_152,
1180
- output: 65_536,
1181
- provider: "google",
1182
- api: "antigravity",
1183
- family: "gemini-3.1-pro",
1184
- preview: true,
1185
- quotaGroup: "gemini-3.1-pro",
1186
- },
1187
- {
1188
- id: "antigravity-gemini-3-flash",
1189
- name: "Antigravity Gemini 3.0 Flash",
1190
- context: 1_048_576,
1191
- output: 32_768,
1192
- provider: "google",
1193
- api: "antigravity",
1194
- family: "gemini-3-flash",
1195
- quotaGroup: "gemini-3-flash",
1196
- },
1197
- {
1198
- id: "antigravity-claude-sonnet-4-6",
1199
- name: "Antigravity Claude Sonnet 4.6",
1200
- context: 200_000,
1201
- output: 32_768,
1202
- provider: "google",
1203
- api: "antigravity",
1204
- family: "claude-sonnet-4-6",
1205
- quotaGroup: "claude-sonnet",
1206
- },
1207
- {
1208
- id: "antigravity-claude-opus-4-6-thinking",
1209
- name: "Antigravity Claude Opus 4.6 Thinking",
1210
- context: 200_000,
1211
- output: 65_536,
1212
- provider: "google",
1213
- api: "antigravity",
1214
- family: "claude-opus-4-6",
1215
- thinking: true,
1216
- quotaGroup: "claude-opus",
1217
- },
1218
- {
1219
- id: "gemini-2.5-flash",
1220
- name: "Gemini 2.5 Flash",
1221
- context: 1_048_576,
1222
- output: 8_192,
1223
- provider: "google",
1224
- api: "gemini-cli",
1225
- family: "gemini-2.5-flash",
1226
- quotaGroup: "gemini-2.5-flash",
1227
- },
1228
- {
1229
- id: "gemini-2.5-pro",
1230
- name: "Gemini 2.5 Pro",
1231
- context: 1_048_576,
1232
- output: 32_768,
1233
- provider: "google",
1234
- api: "gemini-cli",
1235
- family: "gemini-2.5-pro",
1236
- quotaGroup: "gemini-2.5-pro",
1237
- },
1238
- {
1239
- id: "gemini-3-flash-preview",
1240
- name: "Gemini 3.0 Flash Preview",
1241
- context: 1_048_576,
1242
- output: 32_768,
1243
- provider: "google",
1244
- api: "gemini-cli",
1245
- family: "gemini-3-flash",
1246
- preview: true,
1247
- quotaGroup: "gemini-3-flash",
1248
- },
1249
- {
1250
- id: "gemini-3-pro-preview",
1251
- name: "Gemini 3.0 Pro Preview",
1252
- context: 1_048_576,
1253
- output: 65_536,
1254
- provider: "google",
1255
- api: "gemini-cli",
1256
- family: "gemini-3-pro",
1257
- preview: true,
1258
- quotaGroup: "gemini-3-pro",
1259
- },
1260
- {
1261
- id: "gemini-3.1-pro-preview",
1262
- name: "Gemini 3.1 Pro Preview",
1263
- context: 2_097_152,
1264
- output: 65_536,
1265
- provider: "google",
1266
- api: "gemini-cli",
1267
- family: "gemini-3.1-pro",
1268
- preview: true,
1269
- quotaGroup: "gemini-3.1-pro",
1270
- },
1271
- {
1272
- id: "gemini-3.1-pro-preview-customtools",
1273
- name: "Gemini 3.1 Pro Preview Custom Tools",
1274
- context: 2_097_152,
1275
- output: 65_536,
1276
- provider: "google",
1277
- api: "gemini-cli",
1278
- family: "gemini-3.1-pro",
1279
- preview: true,
1280
- customTools: true,
1281
- quotaGroup: "gemini-3.1-pro",
1282
- },
1283
- ] as const satisfies readonly LegacyModelDefinition[];
1284
-
1285
- // v2.1.15 Phase A: MODEL_BY_ID (fast catalog lookup) and the V1-06 model
1286
- // routing map (RoutingConfig + MODEL_ROUTING) moved to models.ts — model
1287
- // identification lives only in models.ts. The raw V1_CATALOG_MODELS list
1288
- // stays here as the layer-0 substrate models.ts indexes.
1289
-
1290
- export const DEFAULT_MODEL_ID = "antigravity-gemini-3-pro" as const;
1291
- export const DEFAULT_FALLBACK_MODEL_IDS = [
1292
- "gemini-3-pro-preview",
1293
- "gemini-3-flash-preview",
1294
- "gemini-2.5-pro",
1295
- "gemini-2.5-flash",
1296
- ] as const;
1297
-
1298
- /**
1299
- * Default model id embedded in the Gemini CLI User-Agent masquerade
1300
- * (`GeminiCLI/0.57.0/<model> ...`). v2.1.16 single-owner fix: the
1301
- * "gemini-3-pro-preview" literal used to be repeated as a default parameter
1302
- * across fingerprint.ts, auth.ts and streaming.ts — those sites now import
1303
- * this constant (model identification lives only in models.ts).
1304
- */
1305
- export const UA_DEFAULT_MODEL = "gemini-3-pro-preview" as const;
1306
-
1307
- /**
1308
- * Linear-time trailing-slash strip (regex-free; safe on uncontrolled input —
1309
- * the former /\/+$/.replace was polynomial and flagged as ReDoS-prone).
1310
- */
1311
- function stripTrailingSlashes(value: string): string {
1312
- let end = value.length;
1313
- while (end > 0 && value.charCodeAt(end - 1) === 47 /* "/" */) end--;
1314
- return end === value.length ? value : value.slice(0, end);
1315
- }
1316
-
1317
- // ---------------------------------------------------------------------------
1318
- // Section 01. Governance dates & references
1319
- // ---------------------------------------------------------------------------
1320
-
1321
- export const CATALOG_DATE_ISO = "2026-08-25" as const;
1322
- export const CATALOG_DATE_BR = "25/08/2026" as const;
1323
- export const CATALOG_VERSION = "3.0.0" as const;
1324
- export const WIKIPEDIA_GEMINI_3_1_PRO_DATE = "2026-02-19" as const;
1325
- export const WIKIPEDIA_GEMINI_3_6_FLASH_DATE = "2026-07-21" as const;
1326
-
1327
- export const REFERENCES = [
1328
- "pi-antigravity-auth - bypass Project ID via loadCodeAssist without x-goog-user-project",
1329
- "9router - github.com/9router - routing table for logical -> physical model ids",
1330
- "OmniRoute - routing layer for antigravity vs gemini-cli endpoint order",
1331
- "Wikipedia Gemini 3.1 Pro - Feb 19 2026 release",
1332
- "Wikipedia Gemini 3.6 Flash - July 21 2026 release",
1333
- "Gemini CLI binary - loadCodeAssist + onboardUser, direct cloudcode-pa",
1334
- "the upstream research lineage - 11k stars, original failure User-Agent 1.11.5",
1335
- "cloudcode-pa.googleapis.com - PROD authoritative per 2026-08-25",
1336
- ] as const;
1337
-
1338
- export const OPENCODE_TXT_TIMELINE = [
1339
- {
1340
- date: "2024-11-10",
1341
- event: { pt: "Lançamento inicial da linhagem provedora", en: "Initial provider lineage release" },
1342
- detail: "Antigravity IDE auth via cloudcode-pa, User-Agent antigravity/1.11.5",
1343
- source: "the upstream research repository",
1344
- models: ["antigravity-gemini-2.0", "claude-3.5-sonnet"],
1345
- },
1346
- {
1347
- date: "2025-01-15",
1348
- event: { pt: "Ban em massa versoes <1.15.8", en: "Mass ban versions <1.15.8" },
1349
- detail: "Google returned 'This version of Antigravity is no longer supported' - UA fix required",
1350
- source: "GitHub Issues #233, #411",
1351
- models: ["gemini-2.0-pro", "gemini-2.0-flash"],
1352
- },
1353
- {
1354
- date: "2025-03-20",
1355
- event: { pt: "Dual quota Antigravity + Gemini CLI", en: "Dual quota Antigravity + Gemini CLI pools" },
1356
- detail: "cli_first routing, pid_offset_enabled, round-robin multi-account",
1357
- source: "pi-antigravity-auth, RESEARCH.md",
1358
- models: ["gemini-2.5-pro", "gemini-2.5-flash", "claude-opus-4-5-thinking"],
1359
- },
1360
- {
1361
- date: "2026-02-19",
1362
- event: { pt: "Gemini 3.1 Pro lancamento (Wikipedia)", en: "Gemini 3.1 Pro release (Wikipedia)" },
1363
- detail: "Wikipedia registers Gemini 3.1 Pro on February 19 2026, context 1M, thinking high/low variants",
1364
- source: "Wikipedia Gemini 3.1 Pro Feb 19 2026",
1365
- models: ["gemini-3.1-pro-high", "gemini-3.1-pro-low", "gemini-3.1-pro", "gemini-3.1-pro-preview"],
1366
- },
1367
- {
1368
- date: "2026-05-11",
1369
- event: { pt: "Gemini 3 Pro/Flash e Deep Think", en: "Gemini 3 Pro/Flash and Deep Think" },
1370
- detail: "Gemini 3 family GA, deep-think variant with mandatory thinkingLevel high",
1371
- source: "Google Blog, Antigravity Manager binary",
1372
- models: ["gemini-3-pro", "gemini-3-flash", "gemini-3-deep-think", "gemini-3-pro-preview", "gemini-3-flash-preview"],
1373
- },
1374
- {
1375
- date: "2026-07-21",
1376
- event: { pt: "Familia Gemini 3.6 Flash (Wikipedia)", en: "Gemini 3.6 Flash family (Wikipedia)" },
1377
- detail: "Wikipedia registers Gemini 3.6 Flash on July 21 2026 - variants high/medium/low/tiered, 1M window",
1378
- source: "Wikipedia Gemini 3.6 Flash July 21 2026",
1379
- models: [
1380
- "gemini-3.6-flash-high",
1381
- "gemini-3.6-flash-medium",
1382
- "gemini-3.6-flash-low",
1383
- "gemini-3.6-flash-tiered",
1384
- "gemini-3.6-flash",
1385
- ],
1386
- },
1387
- {
1388
- date: "2026-08-01",
1389
- event: { pt: "Integracao 9router + OmniRoute", en: "9router + OmniRoute integration" },
1390
- detail:
1391
- "Routing table: antigravity- prefix forces Antigravity pool, preview forces Gemini CLI PROD-only, strip x-goog-user-project",
1392
- source: "9router github, OmniRoute docs, pi-antigravity-auth",
1393
- models: ["antigravity-gemini-3.6-flash", "antigravity-gemini-3-flash", "antigravity-claude-opus-4-6-thinking"],
1394
- },
1395
- {
1396
- date: "2026-08-13",
1397
- event: { pt: "Gemini 3.7 Flash GA", en: "Gemini 3.7 Flash GA" },
1398
- detail:
1399
- "Gemini 3.7 Flash general availability Aug 13 2026 - most intelligent workhorse, minimal/low/medium/high/tiered variants, intro pricing until Dec 31 2026",
1400
- source: "Google Blog, Antigravity Manager binary, flat catalogs v3/v4/v5",
1401
- models: [
1402
- "gemini-3.7-flash",
1403
- "gemini-3.7-flash-high",
1404
- "gemini-3.7-flash-medium",
1405
- "gemini-3.7-flash-low",
1406
- "gemini-3.7-flash-tiered",
1407
- "gemini-3.7-flash-minimal",
1408
- "gemini-3.7-flash-preview",
1409
- "antigravity-gemini-3.7-flash",
1410
- "antigravity-gemini-3.7-flash-high",
1411
- ],
1412
- },
1413
- {
1414
- date: "2026-08-25",
1415
- event: { pt: "Freeze catalogo v3 - ONDA 5 CORRECAO V3", en: "Catalog freeze v3 - WAVE 5 FIX V3" },
1416
- detail:
1417
- "Merged complete list at 25/08/2026: full 3.6/3.5/3.1/3/2.5 families + gemini-3.7-flash family + Claude 4.5/4.6 (+ non-thinking) + GPT-OSS 120B (+bare) + previews. Bypass Project ID as Gemini CLI via loadCodeAssist, direct cloudcode-pa without localhost v1.",
1418
- source: "opencode.txt timeline, pi-antigravity-auth, 9router, OmniRoute, flat catalogs v3/v4/v5",
1419
- models: [
1420
- "gemini-3.7-flash",
1421
- "gemini-3.7-flash-high",
1422
- "gemini-3.7-flash-medium",
1423
- "gemini-3.7-flash-low",
1424
- "gemini-3.7-flash-minimal",
1425
- "gemini-3.7-flash-preview",
1426
- "gemini-3.6-flash-high",
1427
- "gemini-3.6-flash-medium",
1428
- "gemini-3.6-flash-low",
1429
- "gemini-3.6-flash-tiered",
1430
- "gemini-3.6-flash",
1431
- "gemini-3.5-flash-high",
1432
- "gemini-3.5-flash-medium",
1433
- "gemini-3.5-flash-low",
1434
- "gemini-3.5-flash",
1435
- "gemini-3.5-flash-lite",
1436
- "gemini-3.5-flash-lite-preview",
1437
- "gemini-3.1-pro-high",
1438
- "gemini-3.1-pro-low",
1439
- "gemini-3.1-pro",
1440
- "gemini-3.1-flash-image",
1441
- "gemini-3.1-flash-lite",
1442
- "gemini-3-flash",
1443
- "gemini-3-pro",
1444
- "gemini-3-deep-think",
1445
- "gemini-2.5-pro",
1446
- "gemini-2.5-flash",
1447
- "gemini-2.5-flash-lite",
1448
- "claude-sonnet-4-6",
1449
- "claude-sonnet-4-6-thinking",
1450
- "claude-opus-4-6",
1451
- "claude-opus-4-6-thinking",
1452
- "claude-sonnet-4-5",
1453
- "claude-opus-4-5-thinking",
1454
- "gpt-oss-120b",
1455
- "gpt-oss-120b-medium",
1456
- "gpt-oss-120b-high",
1457
- "gemini-2.5-pro-preview",
1458
- "gemini-3.5-flash-preview",
1459
- "gemini-3.6-flash-preview",
1460
- "gemini-3-pro-preview",
1461
- "gemini-3-flash-preview",
1462
- "gemini-3.1-pro-preview",
1463
- "gemini-3.1-pro-preview-customtools",
1464
- ],
1465
- },
1466
- ] as const;
1467
-
1468
- // ---------------------------------------------------------------------------
1469
- // Section 02. Cloud Code Endpoints - direct, no localhost v1 proxy
1470
- // v2.1.15 Phase A: canonical host map (aliased to the constants.ts ENDPOINTS
1471
- // raw map) plus the three per-family routing orders owned by this module.
1472
- // ---------------------------------------------------------------------------
1473
-
1474
- /**
1475
- * Canonical Cloud Code Assist host map (PROD/DAILY/SANDBOX/AUTOPUSH).
1476
- * Merged in v2.1.15 from the constants.ts (5-key with the dead
1477
- * DAILY_SANDBOX alias), models.ts and request.ts variants — the raw value
1478
- * lives in constants.ts as ENDPOINTS and this is the family-name alias.
1479
- */
1480
- export const CODE_ASSIST_ENDPOINTS: typeof ENDPOINTS = ENDPOINTS;
1481
-
1482
- /**
1483
- * Default cascade for the Antigravity pool: PROD, DAILY then SANDBOX.
1484
- * Merged from constants.ts/models.ts/plugin.ts/project.ts/request.ts
1485
- * variants (all identical values).
1486
- */
1487
- export const ENDPOINT_ORDER: readonly string[] = [ENDPOINTS.PROD, ENDPOINTS.DAILY, ENDPOINTS.SANDBOX] as const;
1488
-
1489
- /** Cascade for the Antigravity pool: PROD, DAILY then SANDBOX (fallback project allowed). */
1490
- export const ENDPOINT_ORDER_ANTIGRAVITY: readonly string[] = [
1491
- ENDPOINTS.PROD,
1492
- ENDPOINTS.DAILY,
1493
- ENDPOINTS.SANDBOX,
1494
- ] as const;
1495
-
1496
- /** Cascade for the Gemini CLI pool — sandbox is explicitly skipped for preview/gemini-3. */
1497
- export const ENDPOINT_ORDER_GEMINI_CLI: readonly string[] = [ENDPOINTS.PROD, ENDPOINTS.DAILY] as const;
1498
-
1499
- // v2.1.15 Phase B: PROJECT_FALLBACK and ANTIGRAVITY_VERSION_FALLBACK moved
1500
- // to constants.js (raw value owner) — imported at the top of this file.
1501
- export const ANTIGRAVITY_VERSION_MIN = "1.15.8" as const;
1502
-
1503
- // v2.1.15 Phase B: FETCH_TIMEOUT_MS and QUOTA_TIMEOUT_MS moved to
1504
- // constants.js (generic timeout values); the 6-entry strict FORBIDDEN_HEADERS
1505
- // variant lost its last consumer when the identity helpers left this module
1506
- // and was deleted — constants.js owns the header-strip lists.
1507
-
1508
- // ---------------------------------------------------------------------------
1509
- // Section 03. Thinking levels & budgets - Gemini + Claude + GPT-OSS
1510
- // ---------------------------------------------------------------------------
1511
-
1512
- export const THINKING_LEVELS = ["minimal", "low", "medium", "high", "tiered", "max"] as const;
1513
- export type ThinkingLevel = (typeof THINKING_LEVELS)[number];
1514
-
1515
- export const THINKING_BUDGET_MAP: Record<ThinkingLevel, number> = {
1516
- minimal: 1024,
1517
- low: 8192,
1518
- medium: 16384,
1519
- high: 32768,
1520
- tiered: 24576, // adaptive tiered - observer sees OmniRoute uses 24k as middle tier
1521
- max: 64000, // Claude max + GPT-OSS high
1522
- } as const;
1523
-
1524
- export const CONTEXT_WINDOW_GEMINI = 1_048_576 as const;
1525
- export const CONTEXT_WINDOW_CLAUDE = 200_000 as const;
1526
- export const CONTEXT_WINDOW_GPT_OSS = 200_000 as const;
1527
- export const OUTPUT_LIMIT_GEMINI = 65_535 as const;
1528
- export const OUTPUT_LIMIT_CLAUDE = 64_000 as const;
1529
- export const OUTPUT_LIMIT_GPT_OSS = 64_000 as const;
1530
-
1531
- /**
1532
- * Maximum thinking budget for Claude-family models (v2.1.15 Phase A merge
1533
- * of the identical constants.ts and request.ts variants).
1534
- */
1535
- export const THINKING_BUDGET_MAX_CLAUDE = 64_000 as const;
1536
-
1537
- /**
1538
- * Maximum thinking budget ceiling for Gemini-family models (v2.1.15 Phase A
1539
- * merge of the identical constants.ts and request.ts variants).
1540
- */
1541
- export const THINKING_BUDGET_MAX_GEMINI = 32_768 as const;
1542
-
1543
- export type ModelGroup = "antigravity" | "gemini-cli";
1544
- export type Provider = "google";
1545
- export type OriginalProvider = "google" | "anthropic" | "openai-oss";
1546
- export type Modality = "text" | "image" | "pdf";
1547
-
1548
- /**
1549
- * Rich canonical model definition - single source of truth for the catalog.
1550
- */
1551
- export interface ModelDefinition {
1552
- /** Canonical id - ex: gemini-3.6-flash-high */
1553
- id: string;
1554
- /** Display name */
1555
- displayName: string;
1556
- /** Family: gemini-3.7, gemini-3.6, gemini-3.5, gemini-3.1, gemini-3, gemini-2.5, claude-4-6, gpt-oss-120b ... */
1557
- family: string;
1558
- /** Version / catalog date */
1559
- catalogDate: typeof CATALOG_DATE_ISO;
1560
- /** Release date ISO (Wikipedia dates for 3.1 Pro Feb 19 2026, 3.6 Flash July 21 2026) */
1561
- releaseDate: string;
1562
- /** Context window tokens */
1563
- contextWindow: number;
1564
- /** Output limit tokens */
1565
- outputLimit: number;
1566
- /** Provider routed via Google */
1567
- provider: Provider;
1568
- /** Original lab */
1569
- originalProvider: OriginalProvider;
1570
- /** Routing group */
1571
- group: ModelGroup;
1572
- /** Thinking level variant */
1573
- thinkingLevel: ThinkingLevel;
1574
- /** Budget in tokens */
1575
- thinkingBudget: number;
1576
- /** Is thinking required? */
1577
- isThinking: boolean;
1578
- /** Is preview? */
1579
- isPreview: boolean;
1580
- /** Is image output? ex: gemini-3.1-flash-image */
1581
- isImage: boolean;
1582
- /** Modalities */
1583
- modalities: { input: Modality[]; output: Modality[] };
1584
- /** Bilingual description */
1585
- description: { pt: string; en: string };
1586
- /** Aliases for 9router / OmniRoute */
1587
- aliases: string[];
1588
- /** Endpoint hints - third-person observer notes */
1589
- endpointHints: {
1590
- prodOnly: boolean; // gemini-3+ preview MUST be prod-only (+ daily), skip sandbox
1591
- skipSandbox: boolean;
1592
- fallbackProjectAllowed: boolean; // rising-fact-p41fc works for antigravity, fails 403 for gemini-cli
1593
- allowedEndpoints: readonly string[];
1594
- defaultEndpoint: string;
1595
- };
1596
- /** Tags for search */
1597
- tags: string[];
1598
- /** References */
1599
- references: string[];
1600
- /** Deprecated? */
1601
- deprecated?: boolean | undefined;
1602
- }
1603
-
1604
- /**
1605
- * Rich per-model routing/quota definition used by the layered definition
1606
- * substrate lists (GEMINI_36_MODEL_DEFINITIONS ... GPT_OSS_MODEL_DEFINITIONS
1607
- * in constants.ts) and by the quota group routing table
1608
- * (QUOTA_GROUP_MODEL_DEFINITIONS below). Absorbed from constants.ts and
1609
- * quota.ts in v2.1.15 Phase A (identical field set in both lineages;
1610
- * isGptOss stayed optional).
1611
- */
1612
- export interface AntigravityModelDefinition {
1613
- readonly id: string;
1614
- readonly displayName: string;
1615
- readonly group: QuotaGroup;
1616
- readonly contextWindow: number;
1617
- readonly outputLimit: number;
1618
- readonly supportsThinking: boolean;
1619
- readonly supportsTools: boolean;
1620
- readonly supportsVision: boolean;
1621
- readonly isPreview: boolean;
1622
- readonly isClaude: boolean;
1623
- readonly isGptOss?: boolean;
1624
- }
1625
-
1626
- /**
1627
- * v1 flat routing-catalog entry (historical name: ModelDefinition) used by
1628
- * ALL_MODELS_2026 / V1_CATALOG_MODELS. Renamed LegacyModelDefinition in
1629
- * v2.1.15 Phase A so the rich catalog ModelDefinition above keeps the bare
1630
- * name (one name, one meaning).
1631
- */
1632
- export interface LegacyModelDefinition {
1633
- /** internal ID used for routing */
1634
- id: string;
1635
- /** display name */
1636
- name: string;
1637
- /** context window in tokens */
1638
- context: number;
1639
- /** max output tokens */
1640
- output: number;
1641
- /** billing provider — always google for bypass */
1642
- provider: "google" | "anthropic";
1643
- /** which API routes the call */
1644
- api: "antigravity" | "gemini-cli";
1645
- /** base family */
1646
- family: string;
1647
- /** preview / thinking flag */
1648
- preview?: boolean;
1649
- /** thinking / extended reasoning */
1650
- thinking?: boolean;
1651
- /** custom tools support */
1652
- customTools?: boolean;
1653
- /** label for quota group */
1654
- quotaGroup: string;
1655
- }
1656
-
1657
- // ---------------------------------------------------------------------------
1658
- // Section 04. Flat catalog compat types (ported from flat catalogs)
1659
- // ---------------------------------------------------------------------------
1660
-
1661
- /** Flat thinking variant union - identical value set as ThinkingLevel */
1662
- export type thinkingVariant = "minimal" | "low" | "medium" | "high" | "max" | "tiered";
1663
-
1664
- /** Flat model definition shape used by MODELS_2026_08_25 consumers */
1665
- export type modelDef = {
1666
- id: string;
1667
- name: string;
1668
- context: number;
1669
- output: number;
1670
- group: ModelGroup;
1671
- provider: Provider;
1672
- thinking: thinkingVariant[];
1673
- modalities: { input: string[]; output: string[] };
1674
- preview: boolean;
1675
- release: string;
1676
- notes: string;
1677
- };
1678
-
1679
- /**
1680
- * Sandbox-skip classifier for the fetch cascade (v2.1.15 Phase D move from
1681
- * plugin.ts — model classification lives only in models.ts). Distinct from
1682
- * shouldSkipSandboxForModel: this variant also flags the deep-think and
1683
- * flash-image families.
1684
- */
1685
- export function shouldSkipSandbox(modelId: string): boolean {
1686
- const lower = (modelId ?? "").toLowerCase();
1687
- return (
1688
- lower.includes("3.6") ||
1689
- lower.includes("3.5") ||
1690
- lower.includes("preview") ||
1691
- lower.includes("gemini-3-flash") ||
1692
- lower.includes("gemini-3-pro") ||
1693
- lower.includes("gemini-3.1") ||
1694
- lower.includes("deep-think") ||
1695
- lower.includes("flash-image")
1696
- );
1697
- }
1698
-
1699
- /** PascalCase aliases kept for flat-catalog import compatibility */
1700
- export type ThinkingVariant = thinkingVariant;
1701
- export type ModelDef = modelDef;
1702
-
1703
- // ---------------------------------------------------------------------------
1704
- // Section 05. Observer helpers - FNV-1a, hash, headers, jitter, UA
1705
- // ---------------------------------------------------------------------------
1706
-
1707
- // v2.1.15 Phase B: FNV_OFFSET_BASIS and FNV_PRIME moved to constants.js
1708
- // (raw value owner).
1709
-
1710
- function hashToken(token: string): string {
1711
- try {
1712
- return createHash("sha256").update(token).digest("hex").slice(0, 32);
1713
- } catch {
1714
- return fnv1a32(token).toString(16).padStart(8, "0");
1715
- }
1716
- }
1717
-
1718
- function normalizeArch(a: string): string {
1719
- switch (a) {
1720
- case "arm64":
1721
- return "arm64";
1722
- case "x64":
1723
- return "x64";
1724
- case "ia32":
1725
- return "ia32";
1726
- default:
1727
- return a;
1728
- }
1729
- }
1730
-
1731
- // ---------------------------------------------------------------------------
1732
- // v2.1.15 Phase A: the entire project-discovery block (ProjectDiscoveryError,
1733
- // loadCodeAssist, onboardUser, the project-id cache, resolveProjectIdAsGeminiCliBypass
1734
- // and fetchAvailableModelsDirect) RELOCATED to project.ts — the single owner of
1735
- // project discovery. models.ts is completely project-free by design.
1736
- // ---------------------------------------------------------------------------
1737
-
1738
- // ---------------------------------------------------------------------------
1739
- // Section 08. Model helpers - normalize, thinking, context
1740
- // ---------------------------------------------------------------------------
1741
-
1742
- export function normalizeModelId(id: string): string {
1743
- return String(id ?? "")
1744
- .trim()
1745
- .toLowerCase()
1746
- .replace(/^antigravity-/, "");
1747
- }
1748
-
1749
- export function parseThinkingLevelFromId(id: string): ThinkingLevel {
1750
- const lower = String(id).toLowerCase();
1751
- if (lower.endsWith("-high")) return "high";
1752
- if (lower.endsWith("-medium")) return "medium";
1753
- if (lower.endsWith("-low")) return "low";
1754
- if (lower.endsWith("-tiered")) return "tiered";
1755
- if (lower.endsWith("-minimal")) return "minimal";
1756
- if (lower.endsWith("-lite")) return "low";
1757
- if (lower.includes("deep-think")) return "high";
1758
- if (lower.includes("flash-image")) return "minimal";
1759
- if (lower.includes("thinking")) return "high";
1760
- if (lower.includes("lite")) return "low";
1761
- if (lower.includes("preview") && lower.includes("flash")) return "medium";
1762
- return "medium";
1763
- }
1764
-
1765
- export function getThinkingBudgetForLevel(level: ThinkingLevel, originalProvider: OriginalProvider = "google"): number {
1766
- if (originalProvider === "anthropic" && level === "high") return 32768; // Claude high observed 32k, max 64k optional
1767
- if (originalProvider === "anthropic" && level === "max") return 64000;
1768
- return THINKING_BUDGET_MAP[level] ?? THINKING_BUDGET_MAP.medium;
1769
- }
1770
-
1771
- export function isGeminiCliOnlyId(id: string): boolean {
1772
- const lower = String(id).toLowerCase();
1773
- // Observer: preview, gemini-3, gemini-3.1, gemini-3.5, gemini-3.6, gemini-3.7 MUST be prod-only (+ daily) - skip sandbox
1774
- return (
1775
- lower.includes("preview") ||
1776
- lower.startsWith("gemini-3.") ||
1777
- lower.startsWith("gemini-3-") ||
1778
- lower === "gemini-3-flash" ||
1779
- lower === "gemini-3-pro" ||
1780
- lower.includes("gemini-3.5") ||
1781
- lower.includes("gemini-3.6") ||
1782
- lower.includes("gemini-3.7") ||
1783
- lower.includes("deep-think")
1784
- );
1785
- }
1786
-
1787
- // ---------------------------------------------------------------------------
1788
- // Section 09. Factory for ModelDefinition - bilingual pt/en
1789
- // ---------------------------------------------------------------------------
1790
-
1791
- function makeDescription(
1792
- id: string,
1793
- family: string,
1794
- thinking: ThinkingLevel,
1795
- isPreview: boolean,
1796
- isImage: boolean,
1797
- group: ModelGroup,
1798
- releaseDate: string,
1799
- ): { pt: string; en: string } {
1800
- const previewTagPt = isPreview ? " (preview - pode mudar, sem SLA)" : "";
1801
- const previewTagEn = isPreview ? " (preview - may change, no SLA)" : "";
1802
- const imageTagPt = isImage ? " Saida imagem + texto." : "";
1803
- const imageTagEn = isImage ? " Image + text output." : "";
1804
- const groupPt =
1805
- group === "gemini-cli"
1806
- ? "grupo gemini-cli (PROD-only, bypass Project ID via loadCodeAssist)"
1807
- : "grupo antigravity (PROD/DAILY/SANDBOX, fallback rising-fact-p41fc)";
1808
- const groupEn =
1809
- group === "gemini-cli"
1810
- ? "gemini-cli group (PROD-only, bypasses Project ID via loadCodeAssist)"
1811
- : "antigravity group (PROD/DAILY/SANDBOX, fallback rising-fact-p41fc)";
1812
- const windowPt = family.includes("claude") || family.includes("gpt-oss") ? "janela 200k" : "janela 1.048.576";
1813
- const windowEn = family.includes("claude") || family.includes("gpt-oss") ? "200k window" : "1,048,576 window";
1814
- const outPt = family.includes("claude") || family.includes("gpt-oss") ? "saida 64k" : "saida 65.535";
1815
- const outEn = family.includes("claude") || family.includes("gpt-oss") ? "64k output" : "65,535 output";
1816
- const thinkingPt = `thinking ${thinking}`;
1817
- const thinkingEn = `thinking ${thinking}`;
1818
-
1819
- const pt = `${id} - ${family}${previewTagPt} - ${windowPt}, ${outPt}, ${thinkingPt}, ${groupPt}. Multimodal texto/imagem/PDF${imageTagPt}. Bypass Project ID direto cloudcode-pa.googleapis.com sem localhost v1 proxy. Ref: pi-antigravity-auth, 9router, OmniRoute. Release ${releaseDate}. Catalogo ${CATALOG_DATE_BR}.`;
1820
- const en = `${id} - ${family}${previewTagEn} - ${windowEn}, ${outEn}, ${thinkingEn}, ${groupEn}. Multimodal text/image/PDF${imageTagEn}. Bypasses Project ID directly via cloudcode-pa.googleapis.com without localhost v1 proxy. Ref: pi-antigravity-auth, 9router, OmniRoute. Release ${releaseDate}. Catalog ${CATALOG_DATE_ISO}.`;
1821
- return { pt, en };
1822
- }
1823
-
1824
- function defineModel(
1825
- id: string,
1826
- family: string,
1827
- originalProvider: OriginalProvider,
1828
- group: ModelGroup,
1829
- releaseDate: string,
1830
- opts: {
1831
- thinkingLevel?: ThinkingLevel | undefined;
1832
- isPreview?: boolean | undefined;
1833
- isImage?: boolean | undefined;
1834
- isThinking?: boolean | undefined;
1835
- contextWindow?: number | undefined;
1836
- outputLimit?: number | undefined;
1837
- aliases?: string[] | undefined;
1838
- tags?: string[] | undefined;
1839
- deprecated?: boolean | undefined;
1840
- } = {},
1841
- ): ModelDefinition {
1842
- const thinkingLevel = opts.thinkingLevel ?? parseThinkingLevelFromId(id);
1843
- const isPreview = opts.isPreview ?? id.toLowerCase().includes("preview");
1844
- const isImage =
1845
- opts.isImage ??
1846
- (id.toLowerCase().includes("flash-image") ||
1847
- (id.toLowerCase().includes("image") && !id.toLowerCase().includes("lite")));
1848
- const isThinking =
1849
- opts.isThinking ??
1850
- (thinkingLevel !== "minimal" ||
1851
- id.toLowerCase().includes("thinking") ||
1852
- id.toLowerCase().includes("deep-think") ||
1853
- id.toLowerCase().includes("high") ||
1854
- id.toLowerCase().includes("low") ||
1855
- id.toLowerCase().includes("medium") ||
1856
- id.toLowerCase().includes("tiered"));
1857
- const contextWindow =
1858
- opts.contextWindow ??
1859
- (originalProvider === "google"
1860
- ? CONTEXT_WINDOW_GEMINI
1861
- : originalProvider === "anthropic"
1862
- ? CONTEXT_WINDOW_CLAUDE
1863
- : CONTEXT_WINDOW_GPT_OSS);
1864
- const outputLimit =
1865
- opts.outputLimit ??
1866
- (originalProvider === "google"
1867
- ? OUTPUT_LIMIT_GEMINI
1868
- : originalProvider === "anthropic"
1869
- ? OUTPUT_LIMIT_CLAUDE
1870
- : OUTPUT_LIMIT_GPT_OSS);
1871
- const thinkingBudget = getThinkingBudgetForLevel(thinkingLevel, originalProvider);
1872
- const prodOnly = group === "gemini-cli" || isGeminiCliOnlyId(id);
1873
- const allowedEndpoints = prodOnly ? ENDPOINT_ORDER_GEMINI_CLI : ENDPOINT_ORDER_ANTIGRAVITY;
1874
- const fallbackAllowed = group === "antigravity";
1875
-
1876
- const description = makeDescription(id, family, thinkingLevel, isPreview, isImage, group, releaseDate);
1877
-
1878
- const baseAliases = opts.aliases ?? [];
1879
- // OmniRoute / 9router aliases
1880
- const omniAliases = [
1881
- normalizeModelId(id),
1882
- id.toLowerCase(),
1883
- `google/${normalizeModelId(id)}`,
1884
- `antigravity/${normalizeModelId(id)}`,
1885
- `9router/${normalizeModelId(id)}`,
1886
- ];
1887
-
1888
- return {
1889
- id,
1890
- displayName: id,
1891
- family,
1892
- catalogDate: CATALOG_DATE_ISO,
1893
- releaseDate,
1894
- contextWindow,
1895
- outputLimit,
1896
- provider: "google",
1897
- originalProvider,
1898
- group,
1899
- thinkingLevel,
1900
- thinkingBudget,
1901
- isThinking,
1902
- isPreview,
1903
- isImage,
1904
- modalities: {
1905
- input: ["text", "image", "pdf"],
1906
- output: isImage ? ["text", "image"] : ["text"],
1907
- },
1908
- description,
1909
- aliases: Array.from(new Set([...baseAliases, ...omniAliases, id])),
1910
- endpointHints: {
1911
- prodOnly,
1912
- skipSandbox: prodOnly,
1913
- fallbackProjectAllowed: fallbackAllowed,
1914
- allowedEndpoints,
1915
- defaultEndpoint: CODE_ASSIST_ENDPOINTS.PROD,
1916
- },
1917
- tags: [
1918
- family,
1919
- group,
1920
- originalProvider,
1921
- thinkingLevel,
1922
- isPreview ? "preview" : "stable",
1923
- isImage ? "image" : "text",
1924
- isThinking ? "thinking" : "no-thinking",
1925
- `release-${releaseDate}`,
1926
- "direct-cloudcode-pa",
1927
- "no-localhost-proxy",
1928
- "bypass-project-id-loadCodeAssist",
1929
- "pi-antigravity-auth",
1930
- "9router",
1931
- "OmniRoute",
1932
- ...(opts.tags ?? []),
1933
- ],
1934
- references: [...REFERENCES],
1935
- deprecated: opts.deprecated,
1936
- };
1937
- }
1938
-
1939
- // ---------------------------------------------------------------------------
1940
- // Section 10. COMPLETE CATALOG frozen at 25/08/2026 - WAVE 5 FIX V3
1941
- // Base list (incl. merged flat-catalog ids) + antigravity- variants
1942
- // ---------------------------------------------------------------------------
1943
-
1944
- // Helper to create antigravity variant id
1945
- function antigravityId(baseId: string): string {
1946
- return baseId.startsWith("antigravity-") ? baseId : `antigravity-${baseId}`;
1947
- }
1948
-
1949
- // Release date mapping based on Wikipedia + timeline + flat catalogs
1950
- const RELEASE_DATES: Record<string, string> = {
1951
- // Aug 13 2026 - Gemini 3.7 Flash family GA
1952
- "gemini-3.7-flash": "2026-08-13",
1953
- "gemini-3.7-flash-high": "2026-08-13",
1954
- "gemini-3.7-flash-medium": "2026-08-13",
1955
- "gemini-3.7-flash-low": "2026-08-13",
1956
- "gemini-3.7-flash-tiered": "2026-08-13",
1957
- "gemini-3.7-flash-minimal": "2026-08-13",
1958
- "gemini-3.7-flash-preview": "2026-08-13",
1959
- // July 21 2026 - Gemini 3.6 Flash family
1960
- "gemini-3.6-flash-high": WIKIPEDIA_GEMINI_3_6_FLASH_DATE,
1961
- "gemini-3.6-flash-medium": WIKIPEDIA_GEMINI_3_6_FLASH_DATE,
1962
- "gemini-3.6-flash-low": WIKIPEDIA_GEMINI_3_6_FLASH_DATE,
1963
- "gemini-3.6-flash-tiered": WIKIPEDIA_GEMINI_3_6_FLASH_DATE,
1964
- "gemini-3.6-flash-minimal": WIKIPEDIA_GEMINI_3_6_FLASH_DATE,
1965
- "gemini-3.6-flash-preview": WIKIPEDIA_GEMINI_3_6_FLASH_DATE,
1966
- "gemini-3.6-flash": WIKIPEDIA_GEMINI_3_6_FLASH_DATE,
1967
- // Gemini 3.5 - approx June 2026
1968
- "gemini-3.5-flash-high": "2026-06-15",
1969
- "gemini-3.5-flash-medium": "2026-06-15",
1970
- "gemini-3.5-flash-low": "2026-06-15",
1971
- "gemini-3.5-flash-preview": "2026-06-20",
1972
- "gemini-3.5-flash": "2026-06-15",
1973
- "gemini-3.5-flash-lite": "2026-06-15",
1974
- "gemini-3.5-flash-lite-preview": "2026-06-20",
1975
- // Gemini 3.1 Pro - Feb 19 2026 Wikipedia
1976
- "gemini-3.1-pro-high": WIKIPEDIA_GEMINI_3_1_PRO_DATE,
1977
- "gemini-3.1-pro-low": WIKIPEDIA_GEMINI_3_1_PRO_DATE,
1978
- "gemini-3.1-pro": WIKIPEDIA_GEMINI_3_1_PRO_DATE,
1979
- "gemini-3.1-flash-image": "2026-03-10",
1980
- "gemini-3.1-flash-lite": "2026-03-10",
1981
- // Gemini 3
1982
- "gemini-3-flash": "2026-05-11",
1983
- "gemini-3-pro": "2026-05-11",
1984
- "gemini-3-deep-think": "2026-05-20",
1985
- "gemini-3-pro-preview": "2026-04-20",
1986
- "gemini-3-flash-preview": "2026-04-20",
1987
- "gemini-3.1-pro-preview": "2026-02-19",
1988
- "gemini-3.1-pro-preview-customtools": "2026-02-25",
1989
- // Gemini 2.5
1990
- "gemini-2.5-pro": "2025-12-10",
1991
- "gemini-2.5-pro-preview": "2025-12-10",
1992
- "gemini-2.5-flash": "2025-12-10",
1993
- "gemini-2.5-flash-lite": "2025-12-15",
1994
- // Claude 4.5 / 4.6 - 2026 Q2
1995
- "claude-sonnet-4-6": "2026-04-15",
1996
- "claude-sonnet-4-6-thinking": "2026-04-15",
1997
- "claude-opus-4-6": "2026-04-15",
1998
- "claude-opus-4-6-thinking": "2026-04-15",
1999
- "claude-sonnet-4-5": "2026-02-10",
2000
- "claude-opus-4-5-thinking": "2026-02-10",
2001
- // GPT-OSS 120B - 2026
2002
- "gpt-oss-120b": "2026-05-01",
2003
- "gpt-oss-120b-medium": "2026-05-01",
2004
- "gpt-oss-120b-high": "2026-05-01",
2005
- };
2006
-
2007
- function releaseDateFor(id: string): string {
2008
- const base = normalizeModelId(id);
2009
- return RELEASE_DATES[base] ?? RELEASE_DATES[id] ?? "2026-08-25";
2010
- }
2011
-
2012
- // Build base models list - includes every id merged from flat catalogs v3/v4/v5
2013
-
2014
- const BASE_MODELS: Array<{
2015
- id: string;
2016
- family: string;
2017
- originalProvider: OriginalProvider;
2018
- group: ModelGroup;
2019
- thinkingLevel?: ThinkingLevel;
2020
- isPreview?: boolean;
2021
- isImage?: boolean;
2022
- isThinking?: boolean;
2023
- }> = [
2024
- // Gemini 3.7 Flash - GA Aug 13 2026 - most intelligent workhorse
2025
- {
2026
- id: "gemini-3.7-flash",
2027
- family: "gemini-3.7-flash",
2028
- originalProvider: "google",
2029
- group: "antigravity",
2030
- thinkingLevel: "medium",
2031
- },
2032
- {
2033
- id: "gemini-3.7-flash-high",
2034
- family: "gemini-3.7-flash",
2035
- originalProvider: "google",
2036
- group: "antigravity",
2037
- thinkingLevel: "high",
2038
- },
2039
- {
2040
- id: "gemini-3.7-flash-medium",
2041
- family: "gemini-3.7-flash",
2042
- originalProvider: "google",
2043
- group: "antigravity",
2044
- thinkingLevel: "medium",
2045
- },
2046
- {
2047
- id: "gemini-3.7-flash-low",
2048
- family: "gemini-3.7-flash",
2049
- originalProvider: "google",
2050
- group: "antigravity",
2051
- thinkingLevel: "low",
2052
- },
2053
- {
2054
- id: "gemini-3.7-flash-tiered",
2055
- family: "gemini-3.7-flash",
2056
- originalProvider: "google",
2057
- group: "antigravity",
2058
- thinkingLevel: "tiered",
2059
- },
2060
- {
2061
- id: "gemini-3.7-flash-minimal",
2062
- family: "gemini-3.7-flash",
2063
- originalProvider: "google",
2064
- group: "antigravity",
2065
- thinkingLevel: "minimal",
2066
- },
2067
- {
2068
- id: "gemini-3.7-flash-preview",
2069
- family: "gemini-3.7-flash",
2070
- originalProvider: "google",
2071
- group: "gemini-cli",
2072
- thinkingLevel: "medium",
2073
- isPreview: true,
2074
- },
2075
-
2076
- // Gemini 3.6 Flash - 7 variants - Wikipedia July 21 2026
2077
- {
2078
- id: "gemini-3.6-flash-high",
2079
- family: "gemini-3.6-flash",
2080
- originalProvider: "google",
2081
- group: "gemini-cli",
2082
- thinkingLevel: "high",
2083
- },
2084
- {
2085
- id: "gemini-3.6-flash-medium",
2086
- family: "gemini-3.6-flash",
2087
- originalProvider: "google",
2088
- group: "gemini-cli",
2089
- thinkingLevel: "medium",
2090
- },
2091
- {
2092
- id: "gemini-3.6-flash-low",
2093
- family: "gemini-3.6-flash",
2094
- originalProvider: "google",
2095
- group: "gemini-cli",
2096
- thinkingLevel: "low",
2097
- },
2098
- {
2099
- id: "gemini-3.6-flash-tiered",
2100
- family: "gemini-3.6-flash",
2101
- originalProvider: "google",
2102
- group: "gemini-cli",
2103
- thinkingLevel: "tiered",
2104
- },
2105
- {
2106
- id: "gemini-3.6-flash-minimal",
2107
- family: "gemini-3.6-flash",
2108
- originalProvider: "google",
2109
- group: "gemini-cli",
2110
- thinkingLevel: "minimal",
2111
- },
2112
- {
2113
- id: "gemini-3.6-flash-preview",
2114
- family: "gemini-3.6-flash",
2115
- originalProvider: "google",
2116
- group: "gemini-cli",
2117
- thinkingLevel: "medium",
2118
- isPreview: true,
2119
- },
2120
- {
2121
- id: "gemini-3.6-flash",
2122
- family: "gemini-3.6-flash",
2123
- originalProvider: "google",
2124
- group: "gemini-cli",
2125
- thinkingLevel: "medium",
2126
- },
2127
-
2128
- // Gemini 3.5 Flash - 7 variants
2129
- {
2130
- id: "gemini-3.5-flash-high",
2131
- family: "gemini-3.5-flash",
2132
- originalProvider: "google",
2133
- group: "gemini-cli",
2134
- thinkingLevel: "high",
2135
- },
2136
- {
2137
- id: "gemini-3.5-flash-medium",
2138
- family: "gemini-3.5-flash",
2139
- originalProvider: "google",
2140
- group: "gemini-cli",
2141
- thinkingLevel: "medium",
2142
- },
2143
- {
2144
- id: "gemini-3.5-flash-low",
2145
- family: "gemini-3.5-flash",
2146
- originalProvider: "google",
2147
- group: "gemini-cli",
2148
- thinkingLevel: "low",
2149
- },
2150
- {
2151
- id: "gemini-3.5-flash",
2152
- family: "gemini-3.5-flash",
2153
- originalProvider: "google",
2154
- group: "gemini-cli",
2155
- thinkingLevel: "medium",
2156
- },
2157
- {
2158
- id: "gemini-3.5-flash-lite",
2159
- family: "gemini-3.5-flash",
2160
- originalProvider: "google",
2161
- group: "gemini-cli",
2162
- thinkingLevel: "low",
2163
- },
2164
- {
2165
- id: "gemini-3.5-flash-lite-preview",
2166
- family: "gemini-3.5-flash",
2167
- originalProvider: "google",
2168
- group: "gemini-cli",
2169
- thinkingLevel: "low",
2170
- isPreview: true,
2171
- },
2172
- {
2173
- id: "gemini-3.5-flash-preview",
2174
- family: "gemini-3.5-flash",
2175
- originalProvider: "google",
2176
- group: "gemini-cli",
2177
- thinkingLevel: "medium",
2178
- isPreview: true,
2179
- },
2180
-
2181
- // Gemini 3.1 Pro / Flash - Feb 19 2026 Wikipedia
2182
- {
2183
- id: "gemini-3.1-pro-high",
2184
- family: "gemini-3.1-pro",
2185
- originalProvider: "google",
2186
- group: "gemini-cli",
2187
- thinkingLevel: "high",
2188
- },
2189
- {
2190
- id: "gemini-3.1-pro-low",
2191
- family: "gemini-3.1-pro",
2192
- originalProvider: "google",
2193
- group: "gemini-cli",
2194
- thinkingLevel: "low",
2195
- },
2196
- {
2197
- id: "gemini-3.1-pro",
2198
- family: "gemini-3.1-pro",
2199
- originalProvider: "google",
2200
- group: "gemini-cli",
2201
- thinkingLevel: "medium",
2202
- },
2203
- {
2204
- id: "gemini-3.1-flash-image",
2205
- family: "gemini-3.1-flash",
2206
- originalProvider: "google",
2207
- group: "gemini-cli",
2208
- thinkingLevel: "minimal",
2209
- isImage: true,
2210
- },
2211
- {
2212
- id: "gemini-3.1-flash-lite",
2213
- family: "gemini-3.1-flash",
2214
- originalProvider: "google",
2215
- group: "gemini-cli",
2216
- thinkingLevel: "low",
2217
- },
2218
-
2219
- // Gemini 3 family - May 2026
2220
- {
2221
- id: "gemini-3-flash",
2222
- family: "gemini-3-flash",
2223
- originalProvider: "google",
2224
- group: "gemini-cli",
2225
- thinkingLevel: "medium",
2226
- },
2227
- {
2228
- id: "gemini-3-pro",
2229
- family: "gemini-3-pro",
2230
- originalProvider: "google",
2231
- group: "gemini-cli",
2232
- thinkingLevel: "medium",
2233
- },
2234
- {
2235
- id: "gemini-3-deep-think",
2236
- family: "gemini-3-deep-think",
2237
- originalProvider: "google",
2238
- group: "gemini-cli",
2239
- thinkingLevel: "high",
2240
- },
2241
-
2242
- // Gemini 2.5 - Dec 2025, routed via antigravity pool but also valid via gemini-cli
2243
- {
2244
- id: "gemini-2.5-pro",
2245
- family: "gemini-2.5-pro",
2246
- originalProvider: "google",
2247
- group: "antigravity",
2248
- thinkingLevel: "medium",
2249
- },
2250
- {
2251
- id: "gemini-2.5-pro-preview",
2252
- family: "gemini-2.5-pro",
2253
- originalProvider: "google",
2254
- group: "gemini-cli",
2255
- thinkingLevel: "medium",
2256
- isPreview: true,
2257
- },
2258
- {
2259
- id: "gemini-2.5-flash",
2260
- family: "gemini-2.5-flash",
2261
- originalProvider: "google",
2262
- group: "antigravity",
2263
- thinkingLevel: "medium",
2264
- },
2265
- {
2266
- id: "gemini-2.5-flash-lite",
2267
- family: "gemini-2.5-flash",
2268
- originalProvider: "google",
2269
- group: "antigravity",
2270
- thinkingLevel: "low",
2271
- },
2272
-
2273
- // Claude Sonnet/Opus 4.6 (plain + thinking) / 4.5
2274
- {
2275
- id: "claude-sonnet-4-6",
2276
- family: "claude-4-6-sonnet",
2277
- originalProvider: "anthropic",
2278
- group: "antigravity",
2279
- thinkingLevel: "medium",
2280
- isThinking: false,
2281
- },
2282
- {
2283
- id: "claude-sonnet-4-6-thinking",
2284
- family: "claude-4-6-sonnet",
2285
- originalProvider: "anthropic",
2286
- group: "antigravity",
2287
- thinkingLevel: "high",
2288
- },
2289
- {
2290
- id: "claude-opus-4-6",
2291
- family: "claude-4-6-opus",
2292
- originalProvider: "anthropic",
2293
- group: "antigravity",
2294
- thinkingLevel: "medium",
2295
- isThinking: false,
2296
- },
2297
- {
2298
- id: "claude-opus-4-6-thinking",
2299
- family: "claude-4-6-opus",
2300
- originalProvider: "anthropic",
2301
- group: "antigravity",
2302
- thinkingLevel: "high",
2303
- },
2304
- {
2305
- id: "claude-sonnet-4-5",
2306
- family: "claude-4-5-sonnet",
2307
- originalProvider: "anthropic",
2308
- group: "antigravity",
2309
- thinkingLevel: "medium",
2310
- },
2311
- {
2312
- id: "claude-opus-4-5-thinking",
2313
- family: "claude-4-5-opus",
2314
- originalProvider: "anthropic",
2315
- group: "antigravity",
2316
- thinkingLevel: "high",
2317
- },
2318
-
2319
- // GPT-OSS 120B (bare + variants) - routed via Antigravity as gpt-oss
2320
- {
2321
- id: "gpt-oss-120b",
2322
- family: "gpt-oss-120b",
2323
- originalProvider: "openai-oss",
2324
- group: "antigravity",
2325
- thinkingLevel: "minimal",
2326
- isThinking: false,
2327
- },
2328
- {
2329
- id: "gpt-oss-120b-medium",
2330
- family: "gpt-oss-120b",
2331
- originalProvider: "openai-oss",
2332
- group: "antigravity",
2333
- thinkingLevel: "medium",
2334
- },
2335
- {
2336
- id: "gpt-oss-120b-high",
2337
- family: "gpt-oss-120b",
2338
- originalProvider: "openai-oss",
2339
- group: "antigravity",
2340
- thinkingLevel: "high",
2341
- },
2342
-
2343
- // Preview - April 2026 - prod-only
2344
- {
2345
- id: "gemini-3-pro-preview",
2346
- family: "gemini-3-pro",
2347
- originalProvider: "google",
2348
- group: "gemini-cli",
2349
- thinkingLevel: "medium",
2350
- isPreview: true,
2351
- },
2352
- {
2353
- id: "gemini-3-flash-preview",
2354
- family: "gemini-3-flash",
2355
- originalProvider: "google",
2356
- group: "gemini-cli",
2357
- thinkingLevel: "medium",
2358
- isPreview: true,
2359
- },
2360
- {
2361
- id: "gemini-3.1-pro-preview",
2362
- family: "gemini-3.1-pro",
2363
- originalProvider: "google",
2364
- group: "gemini-cli",
2365
- thinkingLevel: "medium",
2366
- isPreview: true,
2367
- },
2368
- {
2369
- id: "gemini-3.1-pro-preview-customtools",
2370
- family: "gemini-3.1-pro",
2371
- originalProvider: "google",
2372
- group: "gemini-cli",
2373
- thinkingLevel: "medium",
2374
- isPreview: true,
2375
- },
2376
- ];
2377
-
2378
- function buildCatalog(): ModelDefinition[] {
2379
- const list: ModelDefinition[] = [];
2380
-
2381
- for (const b of BASE_MODELS) {
2382
- const rd = releaseDateFor(b.id);
2383
- list.push(
2384
- defineModel(b.id, b.family, b.originalProvider, b.group, rd, {
2385
- thinkingLevel: b.thinkingLevel,
2386
- isPreview: b.isPreview,
2387
- isImage: b.isImage,
2388
- isThinking: b.isThinking,
2389
- }),
2390
- );
2391
- // antigravity- variant - same metadata but forced antigravity group for compatibility with the older lineage
2392
- // Observer: 9router maps antigravity-* to antigravity pool, skipping gemini-cli prod-only rule for fallback
2393
- const agId = antigravityId(b.id);
2394
- if (agId !== b.id) {
2395
- // For antigravity- variants, group forced to antigravity, but keep prodOnly hint if original was prodOnly
2396
- // This allows cli_first: false to still work with fallback project
2397
- const agGroup: ModelGroup = "antigravity";
2398
- list.push(
2399
- defineModel(agId, b.family, b.originalProvider, agGroup, rd, {
2400
- thinkingLevel: b.thinkingLevel,
2401
- isPreview: b.isPreview,
2402
- isImage: b.isImage,
2403
- isThinking: b.isThinking,
2404
- aliases: [b.id, normalizeModelId(b.id)],
2405
- }),
2406
- );
2407
- }
2408
- }
2409
-
2410
- // Add extra historical models that opencode.txt mentions as supported (to avoid missing timeline)
2411
- const extraHistorical: Array<{
2412
- id: string;
2413
- family: string;
2414
- originalProvider: OriginalProvider;
2415
- group: ModelGroup;
2416
- rd: string;
2417
- }> = [
2418
- { id: "gemini-2.5", family: "gemini-2.5", originalProvider: "google", group: "antigravity", rd: "2025-12-01" },
2419
- {
2420
- id: "antigravity-gemini-3-pro",
2421
- family: "gemini-3-pro",
2422
- originalProvider: "google",
2423
- group: "antigravity",
2424
- rd: "2026-05-11",
2425
- },
2426
- {
2427
- id: "antigravity-gemini-3-flash",
2428
- family: "gemini-3-flash",
2429
- originalProvider: "google",
2430
- group: "antigravity",
2431
- rd: "2026-05-11",
2432
- },
2433
- {
2434
- id: "antigravity-gemini-3.1-pro",
2435
- family: "gemini-3.1-pro",
2436
- originalProvider: "google",
2437
- group: "antigravity",
2438
- rd: "2026-02-19",
2439
- },
2440
- ];
2441
-
2442
- for (const h of extraHistorical) {
2443
- if (!list.some((m) => m.id === h.id)) {
2444
- list.push(defineModel(h.id, h.family, h.originalProvider, h.group, h.rd, { thinkingLevel: "medium" }));
2445
- }
2446
- }
2447
-
2448
- // Deduplicate by id (keep first)
2449
- const seen = new Set<string>();
2450
- const deduped: ModelDefinition[] = [];
2451
- for (const m of list) {
2452
- if (seen.has(m.id)) continue;
2453
- seen.add(m.id);
2454
- deduped.push(m);
2455
- }
2456
-
2457
- // Sort by release date desc then id asc for deterministic catalog freeze
2458
- deduped.sort((a, b) => {
2459
- if (a.releaseDate !== b.releaseDate) return b.releaseDate.localeCompare(a.releaseDate);
2460
- return a.id.localeCompare(b.id);
2461
- });
2462
-
2463
- return deduped;
2464
- }
2465
-
2466
- // Frozen catalog - single source of truth at 25/08/2026
2467
- export const MODEL_CATALOG_2026_08_25: readonly ModelDefinition[] = Object.freeze(
2468
- buildCatalog(),
2469
- ) as readonly ModelDefinition[];
2470
-
2471
- // MAP - id lowercase + aliases -> definition
2472
- export const MODEL_MAP_2026_08_25: ReadonlyMap<string, ModelDefinition> = (() => {
2473
- const map = new Map<string, ModelDefinition>();
2474
- for (const m of MODEL_CATALOG_2026_08_25) {
2475
- map.set(m.id.toLowerCase(), m);
2476
- map.set(m.id, m);
2477
- for (const alias of m.aliases) {
2478
- if (!alias) continue;
2479
- const low = alias.toLowerCase();
2480
- if (!map.has(low)) map.set(low, m);
2481
- // also bare normalized
2482
- const norm = normalizeModelId(alias).toLowerCase();
2483
- if (!map.has(norm)) map.set(norm, m);
2484
- }
2485
- }
2486
- return map;
2487
- })();
2488
-
2489
- // Aliases map for 9router / OmniRoute routing
2490
- export const MODEL_ALIASES_2026_08_25: ReadonlyMap<string, string> = (() => {
2491
- const map = new Map<string, string>();
2492
- for (const m of MODEL_CATALOG_2026_08_25) {
2493
- for (const alias of m.aliases) {
2494
- if (!alias) continue;
2495
- map.set(alias.toLowerCase(), m.id);
2496
- }
2497
- }
2498
- return map;
2499
- })();
2500
-
2501
- // ---------------------------------------------------------------------------
2502
- // Section 11. Public getters - production-ready, library-first
2503
- // ---------------------------------------------------------------------------
2504
-
2505
- export function getModel(id: string): ModelDefinition | undefined {
2506
- if (!id) return undefined;
2507
- const low = String(id).trim().toLowerCase();
2508
- return MODEL_MAP_2026_08_25.get(low) ?? MODEL_MAP_2026_08_25.get(normalizeModelId(low));
2509
- }
2510
-
2511
- export function hasModel(id: string): boolean {
2512
- return !!getModel(id);
2513
- }
2514
-
2515
- export function isPreview(id: string): boolean {
2516
- const m = getModel(id);
2517
- return m ? m.isPreview : String(id).toLowerCase().includes("preview");
2518
- }
2519
-
2520
- export function isThinkingModel(id: string): boolean {
2521
- const m = getModel(id);
2522
- if (m) return m.isThinking;
2523
- const lower = String(id).toLowerCase();
2524
- return (
2525
- lower.includes("thinking") ||
2526
- lower.includes("high") ||
2527
- lower.includes("medium") ||
2528
- lower.includes("low") ||
2529
- lower.includes("tiered") ||
2530
- lower.includes("deep-think") ||
2531
- lower.includes("claude") ||
2532
- lower.includes("gpt-oss")
2533
- );
2534
- }
2535
-
2536
- export function isImageModel(id: string): boolean {
2537
- const m = getModel(id);
2538
- if (m) return m.isImage;
2539
- return String(id).toLowerCase().includes("image") || String(id).toLowerCase().includes("flash-image");
2540
- }
2541
-
2542
- export function isAntagravityGroup(id: string): boolean {
2543
- const m = getModel(id);
2544
- if (!m)
2545
- return (
2546
- String(id).toLowerCase().startsWith("antigravity-") ||
2547
- String(id).toLowerCase().includes("claude") ||
2548
- String(id).toLowerCase().includes("gpt-oss")
2549
- );
2550
- return m.group === "antigravity";
2551
- }
2552
-
2553
- export function isGeminiCliGroup(id: string): boolean {
2554
- const m = getModel(id);
2555
- if (!m) return isGeminiCliOnlyId(id);
2556
- return m.group === "gemini-cli";
2557
- }
2558
-
2559
- export function getModelsByGroup(group: ModelGroup): readonly ModelDefinition[] {
2560
- return MODEL_CATALOG_2026_08_25.filter((m) => m.group === group);
2561
- }
2562
-
2563
- export function getModelsByThinkingLevel(level: ThinkingLevel): readonly ModelDefinition[] {
2564
- return MODEL_CATALOG_2026_08_25.filter((m) => m.thinkingLevel === level);
2565
- }
2566
-
2567
- export function getPreviewModels(): readonly ModelDefinition[] {
2568
- return MODEL_CATALOG_2026_08_25.filter((m) => m.isPreview);
2569
- }
2570
-
2571
- export function getStableModels(): readonly ModelDefinition[] {
2572
- return MODEL_CATALOG_2026_08_25.filter((m) => !m.isPreview);
2573
- }
2574
-
2575
- export function getAntagravityModels(): readonly ModelDefinition[] {
2576
- return getModelsByGroup("antigravity");
2577
- }
2578
-
2579
- export function getGeminiCliModels(): readonly ModelDefinition[] {
2580
- return getModelsByGroup("gemini-cli");
2581
- }
2582
-
2583
- export function getThinkingBudget(id: string): number {
2584
- const m = getModel(id);
2585
- if (m) return m.thinkingBudget;
2586
- const lvl = parseThinkingLevelFromId(id);
2587
- return THINKING_BUDGET_MAP[lvl] ?? THINKING_BUDGET_MAP.medium;
2588
- }
2589
-
2590
- export function getContextWindow(id: string): number {
2591
- const m = getModel(id);
2592
- if (m) return m.contextWindow;
2593
- const low = String(id).toLowerCase();
2594
- if (low.includes("claude") || low.includes("gpt-oss")) return CONTEXT_WINDOW_CLAUDE;
2595
- return CONTEXT_WINDOW_GEMINI;
2596
- }
2597
-
2598
- export function getOutputLimit(id: string): number {
2599
- const m = getModel(id);
2600
- if (m) return m.outputLimit;
2601
- const low = String(id).toLowerCase();
2602
- if (low.includes("claude") || low.includes("gpt-oss")) return OUTPUT_LIMIT_CLAUDE;
2603
- return OUTPUT_LIMIT_GEMINI;
2604
- }
2605
-
2606
- export function getEndpointForModel(id: string, overrides?: string[]): readonly string[] {
2607
- const m = getModel(id);
2608
- if (overrides && overrides.length > 0) return overrides;
2609
- if (m) return m.endpointHints.allowedEndpoints;
2610
- // fallback logic: gemini-cli only -> prod+daily
2611
- if (isGeminiCliOnlyId(id)) return ENDPOINT_ORDER_GEMINI_CLI;
2612
- return ENDPOINT_ORDER_ANTIGRAVITY;
2613
- }
2614
-
2615
- export function shouldSkipSandboxForModel(id: string): boolean {
2616
- const m = getModel(id);
2617
- if (m) return m.endpointHints.skipSandbox;
2618
- return isGeminiCliOnlyId(id);
2619
- }
2620
-
2621
- export function listModelIds(): readonly string[] {
2622
- return MODEL_CATALOG_2026_08_25.map((m) => m.id);
2623
- }
2624
-
2625
- export function listBareModelIds(): readonly string[] {
2626
- // Without antigravity- prefix - for OmniRoute base routing
2627
- return BASE_MODELS.map((b) => b.id);
2628
- }
2629
-
2630
- export function searchModels(query: string): readonly ModelDefinition[] {
2631
- if (!query) return MODEL_CATALOG_2026_08_25;
2632
- const q = query.trim().toLowerCase();
2633
- return MODEL_CATALOG_2026_08_25.filter((m) => {
2634
- return (
2635
- m.id.toLowerCase().includes(q) ||
2636
- m.family.toLowerCase().includes(q) ||
2637
- m.tags.some((t) => t.toLowerCase().includes(q)) ||
2638
- m.aliases.some((a) => a.toLowerCase().includes(q)) ||
2639
- m.description.en.toLowerCase().includes(q) ||
2640
- m.description.pt.toLowerCase().includes(q)
2641
- );
2642
- });
2643
- }
2644
-
2645
- // OmniRoute compatible routing: returns physical model id + endpoint hint
2646
- export function routeModelViaOmniRoute(logicalId: string): {
2647
- physicalId: string;
2648
- group: ModelGroup;
2649
- endpoints: readonly string[];
2650
- prodOnly: boolean;
2651
- fallbackAllowed: boolean;
2652
- } {
2653
- const m = getModel(logicalId);
2654
- if (!m) {
2655
- // unknown - fallback to the GA workhorse per OMNIROUTE_FALLBACK_MODEL
2656
- return {
2657
- physicalId: OMNIROUTE_FALLBACK_MODEL,
2658
- group: "gemini-cli",
2659
- endpoints: ENDPOINT_ORDER_GEMINI_CLI,
2660
- prodOnly: true,
2661
- fallbackAllowed: false,
2662
- };
2663
- }
2664
- return {
2665
- physicalId: m.id,
2666
- group: m.group,
2667
- endpoints: m.endpointHints.allowedEndpoints,
2668
- prodOnly: m.endpointHints.prodOnly,
2669
- fallbackAllowed: m.endpointHints.fallbackProjectAllowed,
2670
- };
2671
- }
2672
-
2673
- // 9router compatible mapper
2674
- export function mapModelFor9Router(id: string): { provider: string; model: string; group: ModelGroup } {
2675
- const m = getModel(id);
2676
- if (!m) return { provider: "google", model: normalizeModelId(id), group: "gemini-cli" };
2677
- return { provider: m.provider, model: m.id, group: m.group };
2678
- }
2679
-
2680
- // ---------------------------------------------------------------------------
2681
- // Section 12. Catalog grouped exports for convenience
2682
- // ---------------------------------------------------------------------------
2683
-
2684
- export const MODEL_CATALOG_GROUPED = {
2685
- antigravity: getAntagravityModels(),
2686
- "gemini-cli": getGeminiCliModels(),
2687
- preview: getPreviewModels(),
2688
- stable: getStableModels(),
2689
- high: getModelsByThinkingLevel("high"),
2690
- medium: getModelsByThinkingLevel("medium"),
2691
- low: getModelsByThinkingLevel("low"),
2692
- tiered: getModelsByThinkingLevel("tiered"),
2693
- minimal: getModelsByThinkingLevel("minimal"),
2694
- max: getModelsByThinkingLevel("max"),
2695
- image: MODEL_CATALOG_2026_08_25.filter((m) => m.isImage),
2696
- thinking: MODEL_CATALOG_2026_08_25.filter((m) => m.isThinking),
2697
- } as const;
2698
-
2699
- // ---------------------------------------------------------------------------
2700
- // Section 13. Flat-catalog compat exports (ported from flat catalogs v3/v4/v5)
2701
- // ---------------------------------------------------------------------------
2702
-
2703
- /**
2704
- * Default model - Antigravity wrapper of the GA workhorse (Aug 13 2026).
2705
- */
2706
- export const DEFAULT_MODEL = "antigravity-gemini-3.7-flash" as const;
2707
-
2708
- /**
2709
- * Search-grounding default model. v2.1.15 Phase A merge: the constants.ts /
2710
- * request.ts / search.ts variants (all "gemini-3-flash") win the family name
2711
- * — the live-validated search-chain value; this module's former local
2712
- * meaning (OmniRoute unknown-id fallback "gemini-3.7-flash") moved to
2713
- * {@link OMNIROUTE_FALLBACK_MODEL} (same name, different semantics split).
2714
- */
2715
- export const SEARCH_MODEL = "gemini-3-flash" as const;
2716
-
2717
- /**
2718
- * Preview variant of the search model (constants.ts + request.ts lineage —
2719
- * identical value in both).
2720
- */
2721
- export const SEARCH_MODEL_PREVIEW = "gemini-3-flash-preview" as const;
2722
-
2723
- /**
2724
- * Fallback chain tried when the primary search model is unavailable.
2725
- * v2.1.15 Phase A merge: canonical is the search.ts live-iteration order
2726
- * (preview first, dated -2026 tail); the constants.ts variant (led with
2727
- * gemini-3.6-flash, no -2026 tail) had zero consumers and was dropped.
2728
- */
2729
- export const SEARCH_MODEL_FALLBACKS = [
2730
- "gemini-3-flash-preview",
2731
- "gemini-3-flash",
2732
- "antigravity-gemini-3-flash",
2733
- "gemini-3-flash-preview-2026",
2734
- ] as const;
2735
-
2736
- /**
2737
- * OmniRoute unknown-id fallback (the former local SEARCH_MODEL semantic of
2738
- * this module): the bare GA workhorse id.
2739
- */
2740
- export const OMNIROUTE_FALLBACK_MODEL = "gemini-3.7-flash" as const;
2741
-
2742
- /**
2743
- * Hardened fallbacks - project id, antigravity version and User-Agent.
2744
- */
2745
- export const FALLBACKS = {
2746
- project: PROJECT_FALLBACK,
2747
- version: ANTIGRAVITY_VERSION_FALLBACK,
2748
- ua: ANTIGRAVITY_USER_AGENT_FALLBACK,
2749
- } as const;
2750
-
2751
- /**
2752
- * Flat model list (modelDef[]) derived from the rich frozen catalog.
2753
- * Single source of truth stays MODEL_CATALOG_2026_08_25; this is the
2754
- * lightweight projection consumed by cli/plugin modules.
2755
- */
2756
- export const MODELS_2026_08_25: modelDef[] = MODEL_CATALOG_2026_08_25.map((m) => ({
2757
- id: m.id,
2758
- name: m.displayName,
2759
- context: m.contextWindow,
2760
- output: m.outputLimit,
2761
- group: m.group,
2762
- provider: m.provider,
2763
- thinking: [m.thinkingLevel],
2764
- modalities: { input: [...m.modalities.input], output: [...m.modalities.output] },
2765
- preview: m.isPreview,
2766
- release: m.releaseDate,
2767
- notes: m.description.en,
2768
- }));
2769
-
2770
- /**
2771
- * All antigravity-group ids normalized to antigravity- prefixed form.
2772
- */
2773
- export const ANTIGRAVITY_MODELS: string[] = MODELS_2026_08_25.filter((m) => m.group === "antigravity").map(
2774
- (m) => `antigravity-${m.id.replace(/^antigravity-/, "")}`,
2775
- );
2776
-
2777
- /**
2778
- * All gemini-cli-group ids (CLI-quota only).
2779
- */
2780
- export const GEMINICLI_MODELS: string[] = MODELS_2026_08_25.filter((m) => m.group === "gemini-cli").map((m) => m.id);
2781
-
2782
- /**
2783
- * Every routable id: plain ids + antigravity-prefixed + google/ prefixed.
2784
- */
2785
- export const ALL_MODELS_WITH_PREFIX: string[] = [
2786
- ...MODELS_2026_08_25.map((m) => m.id),
2787
- ...ANTIGRAVITY_MODELS,
2788
- ...MODELS_2026_08_25.map((m) => `google/${m.id}`),
2789
- ];
2790
-
2791
- /**
2792
- * True when an id is restricted to the Gemini CLI pool
2793
- * (previews and gemini-3.x families are PROD/DAILY only - skip sandbox).
2794
- */
2795
- export function isCLIOnly(id: string): boolean {
2796
- const l = String(id ?? "").toLowerCase();
2797
- return (
2798
- l.includes("preview") ||
2799
- l.startsWith("gemini-3.7") ||
2800
- l.startsWith("gemini-3.6") ||
2801
- l.startsWith("gemini-3.5") ||
2802
- l.startsWith("gemini-3.1") ||
2803
- l.startsWith("gemini-3") ||
2804
- l.includes("customtools")
2805
- );
2806
- }
2807
-
2808
- // ---------------------------------------------------------------------------
2809
- // Section 14. Absorbed flat catalogs + legacy compat exports (v2.1.15 Phase A)
2810
- // Every flat model-id list that used to be duplicated under one name across
2811
- // plugin.ts, project.ts, accounts.ts, config.ts, fingerprint.ts, quota.ts,
2812
- // recovery.ts, streaming.ts, auth.ts, request.ts and constants.ts lives here
2813
- // exactly once, under an accurate name (one name, one meaning). Consumers
2814
- // import their exact list and re-export their historical alias.
2815
- // ---------------------------------------------------------------------------
2816
-
2817
- /**
2818
- * Canonical MODELS_2026 family value: the full catalog union — bare gemini
2819
- * ids plus antigravity aliases — derived from the ModelDefinition catalog
2820
- * (plan-mandated canonical). The former models.ts local value
2821
- * (listBareModelIds(), bare ids only) moved to GEMINI_BARE_MODEL_IDS.
2822
- */
2823
- export const MODELS_2026 = listModelIds() as unknown as readonly string[];
2824
-
2825
- /**
2826
- * Bare catalog ids without the antigravity- prefix (the pre-Phase-A local
2827
- * MODELS_2026 semantic of this module; projection of listBareModelIds()).
2828
- */
2829
- export const GEMINI_BARE_MODEL_IDS = listBareModelIds() as unknown as readonly string[];
2830
-
2831
- /**
2832
- * Bare base list up to 2026-08-25 (31 ids; best-effort validated via
2833
- * fetchAvailableModels). Shared verbatim by the former plugin.ts and
2834
- * project.ts MODELS_2026_BASE copies.
2835
- */
2836
- export const MODELS_2026_BASE = [
2837
- // gemini-3.6 family (new ONDA5)
2838
- "gemini-3.6-flash-high",
2839
- "gemini-3.6-flash-medium",
2840
- "gemini-3.6-flash-low",
2841
- "gemini-3.6-flash-tiered",
2842
- "gemini-3.6-flash",
2843
- // gemini-3.5 family
2844
- "gemini-3.5-flash-high",
2845
- "gemini-3.5-flash-medium",
2846
- "gemini-3.5-flash",
2847
- "gemini-3.5-flash-lite",
2848
- "gemini-3.5-flash-lite-preview",
2849
- // gemini-3.1 family
2850
- "gemini-3.1-pro-high",
2851
- "gemini-3.1-pro-low",
2852
- "gemini-3.1-pro",
2853
- "gemini-3.1-flash-image",
2854
- "gemini-3.1-flash-lite",
2855
- // gemini-3 family
2856
- "gemini-3-flash",
2857
- "gemini-3-pro",
2858
- "gemini-3-deep-think",
2859
- // gemini-2.5 family
2860
- "gemini-2.5-pro",
2861
- "gemini-2.5-flash",
2862
- "gemini-2.5-flash-lite",
2863
- // claude 4.5 / 4.6 thinking
2864
- "claude-sonnet-4-6-thinking",
2865
- "claude-opus-4-6-thinking",
2866
- "claude-sonnet-4-5",
2867
- "claude-opus-4-5-thinking",
2868
- // gpt-oss open models via Antigravity router
2869
- "gpt-oss-120b-medium",
2870
- "gpt-oss-120b-high",
2871
- // preview
2872
- "gemini-3-pro-preview",
2873
- "gemini-3-flash-preview",
2874
- "gemini-3.1-pro-preview",
2875
- "gemini-3.1-pro-preview-customtools",
2876
- ] as const;
2877
-
2878
- /**
2879
- * Antigravity alias list of the former plugin.ts copy (36 entries, kept
2880
- * verbatim including the two historical duplicate ids; router convention
2881
- * antigravity- prefix plus short legacy aliases).
2882
- */
2883
- export const MODELS_2026_ANTIGRAVITY_ALIAS = [
2884
- // antigravity- prefix for all gemini + claude (router convention)
2885
- "antigravity-gemini-3.6-flash-high",
2886
- "antigravity-gemini-3.6-flash-medium",
2887
- "antigravity-gemini-3.6-flash-low",
2888
- "antigravity-gemini-3.6-flash-tiered",
2889
- "antigravity-gemini-3.6-flash",
2890
- "antigravity-gemini-3.5-flash-high",
2891
- "antigravity-gemini-3.5-flash-medium",
2892
- "antigravity-gemini-3.5-flash",
2893
- "antigravity-gemini-3.5-flash-lite",
2894
- "antigravity-gemini-3.5-flash-lite-preview",
2895
- "antigravity-gemini-3.1-pro-high",
2896
- "antigravity-gemini-3.1-pro-low",
2897
- "antigravity-gemini-3.1-pro",
2898
- "antigravity-gemini-3.1-flash-image",
2899
- "antigravity-gemini-3.1-flash-lite",
2900
- "antigravity-gemini-3-flash",
2901
- "antigravity-gemini-3-pro",
2902
- "antigravity-gemini-3-deep-think",
2903
- "antigravity-gemini-2.5-pro",
2904
- "antigravity-gemini-2.5-flash",
2905
- "antigravity-gemini-2.5-flash-lite",
2906
- "antigravity-gemini-3-pro-preview",
2907
- "antigravity-gemini-3-flash-preview",
2908
- "antigravity-gemini-3.1-pro-preview",
2909
- "antigravity-gemini-3.1-pro-preview-customtools",
2910
- "antigravity-claude-sonnet-4-6-thinking",
2911
- "antigravity-claude-opus-4-6-thinking",
2912
- "antigravity-claude-sonnet-4-5",
2913
- "antigravity-claude-opus-4-5-thinking",
2914
- "antigravity-claude-sonnet-4-6",
2915
- "antigravity-claude-opus-4-6",
2916
- // short aliases legacy
2917
- "antigravity-gemini-3-pro",
2918
- "antigravity-gemini-3-flash",
2919
- "antigravity-gemini-3.1-pro",
2920
- "antigravity-claude-opus-4-6-thinking",
2921
- "antigravity-claude-sonnet-4-6",
2922
- ] as const;
2923
-
2924
- /**
2925
- * Provider injection union of the former plugin.ts MODELS_2026 (67 entries =
2926
- * MODELS_2026_BASE + MODELS_2026_ANTIGRAVITY_ALIAS, duplicates preserved so
2927
- * the opencode provider models list stays byte-identical).
2928
- */
2929
- export const MODELS_2026_PROVIDER = [...MODELS_2026_BASE, ...MODELS_2026_ANTIGRAVITY_ALIAS] as const;
2930
-
2931
- /**
2932
- * Antigravity alias list of the former project.ts copy (31 prefixed base ids
2933
- * plus 7 legacy variants still seen in 07/2026 traffic dumps).
2934
- */
2935
- export const MODELS_2026_ANTIGRAVITY = [
2936
- ...MODELS_2026_BASE.map((m) => `antigravity-${m}` as const),
2937
- // Legacy variants still seen in traffic dumps 07/2026
2938
- "antigravity-gemini-3-pro",
2939
- "antigravity-gemini-3-flash",
2940
- "antigravity-gemini-3.1-pro",
2941
- "antigravity-claude-opus-4-6-thinking",
2942
- "antigravity-claude-sonnet-4-6",
2943
- "antigravity-claude-sonnet-4-5",
2944
- "antigravity-claude-opus-4-5-thinking",
2945
- ] as const;
2946
-
2947
- /**
2948
- * Full union of the former project.ts MODELS_2026_ALL (69 entries =
2949
- * MODELS_2026_BASE + MODELS_2026_ANTIGRAVITY).
2950
- */
2951
- export const MODELS_2026_ALL = [...MODELS_2026_BASE, ...MODELS_2026_ANTIGRAVITY] as const;
2952
-
2953
- /**
2954
- * v1 static fallback bypass list (11 ids — antigravity customs plus native
2955
- * gemini/claude). Formerly duplicated as MODELS_2026 in accounts.ts,
2956
- * config.ts, fingerprint.ts, quota.ts, recovery.ts and streaming.ts and as
2957
- * MODELS_2026_LEGACY in project.ts (all byte-identical); also equals the id
2958
- * projection of the V1_CATALOG_MODELS rich substrate.
2959
- */
2960
- export const MODELS_2026_LEGACY = [
2961
- // Antigravity custom - Gemini
2962
- "antigravity-gemini-3-pro",
2963
- "antigravity-gemini-3.1-pro",
2964
- "antigravity-gemini-3-flash",
2965
- // Antigravity custom - Claude via bypass
2966
- "antigravity-claude-sonnet-4-6",
2967
- "antigravity-claude-opus-4-6-thinking",
2968
- // Google Native - 2.5
2969
- "gemini-2.5-flash",
2970
- "gemini-2.5-pro",
2971
- // Google Native - 3.x preview
2972
- "gemini-3-flash-preview",
2973
- "gemini-3-pro-preview",
2974
- "gemini-3.1-pro-preview",
2975
- "gemini-3.1-pro-preview-customtools",
2976
- ] as const;
2977
-
2978
- /**
2979
- * Auth-module supported list (13 ids): the legacy bypass list plus the two
2980
- * bare claude ids folded in from the former oauth(2).ts
2981
- * SUPPORTED_MODELS_2026 (auth.ts v2.1.14 merge).
2982
- */
2983
- export const SUPPORTED_MODELS_2026 = [...MODELS_2026_LEGACY, "claude-opus-4-6-thinking", "claude-sonnet-4-6"] as const;
2984
-
2985
- /**
2986
- * Models observed live through fetchAvailableModels on 2026-08-25 (22 ids;
2987
- * the former request.ts MODELS_2026 — the live-validated E2E list, strict
2988
- * superset of the 11-id legacy list).
2989
- */
2990
- export const FETCH_AVAILABLE_MODELS_2026 = [
2991
- "gemini-3-pro-preview",
2992
- "gemini-3-flash-preview",
2993
- "gemini-3.1-pro-preview",
2994
- "gemini-3.1-pro-preview-customtools",
2995
- "gemini-3-flash",
2996
- "gemini-3-pro",
2997
- "gemini-2.5-pro",
2998
- "gemini-2.5-flash",
2999
- "gemini-2.5",
3000
- "claude-opus-4-6-thinking",
3001
- "claude-opus-4-6-thinking-low",
3002
- "claude-opus-4-6-thinking-max",
3003
- "claude-sonnet-4-6",
3004
- "claude-sonnet-4-6-thinking",
3005
- "claude-opus-4-5-thinking",
3006
- "antigravity-gemini-3-pro",
3007
- "antigravity-gemini-3-flash",
3008
- "antigravity-gemini-3.1-pro",
3009
- "antigravity-gemini-3-pro-preview",
3010
- "antigravity-gemini-3-flash-preview",
3011
- "antigravity-claude-opus-4-6-thinking",
3012
- "antigravity-claude-sonnet-4-6",
3013
- ] as const;
3014
-
3015
- /**
3016
- * v1 rich routing catalog (constants.ts lineage, 11 entries with
3017
- * context/output/provider/api/family/quotaGroup metadata). Owner value of
3018
- * the ALL_MODELS_2026 family; ids equal MODELS_2026_LEGACY.
3019
- */
3020
- export const ALL_MODELS_2026: readonly LegacyModelDefinition[] = V1_CATALOG_MODELS;
3021
-
3022
- /**
3023
- * Fast lookup by model id over the v1 routing catalog (v2.1.15 Phase A move
3024
- * from constants.ts — model identification lives only in models.ts).
3025
- */
3026
- export const MODEL_BY_ID: Readonly<Record<string, LegacyModelDefinition>> = Object.fromEntries(
3027
- V1_CATALOG_MODELS.map((m) => [m.id, m]),
3028
- ) as Record<string, LegacyModelDefinition>;
3029
-
3030
- /**
3031
- * Per-model routing configuration (v2.1.15 Phase A move from constants.ts
3032
- * V1-06 block; values byte-identical). Endpoint paths come from the
3033
- * constants.ts CODE_ASSIST_PATH_MAP raw substrate.
3034
- */
3035
- export interface RoutingConfig {
3036
- endpoint: CodeAssistEndpointPath;
3037
- antigravityVersion: AntigravityVersion;
3038
- requiresOnboard: boolean;
3039
- stream: boolean;
3040
- api: ApiProvider;
3041
- /** internal model mapped to the Cloud API (some need aliasing) */
3042
- cloudModelId: string;
3043
- }
3044
-
3045
- export const MODEL_ROUTING: Readonly<Record<string, RoutingConfig>> = {
3046
- "antigravity-gemini-3-pro": {
3047
- endpoint: CODE_ASSIST_PATH_MAP.STREAM_GENERATE_CONTENT,
3048
- antigravityVersion: "v1internal",
3049
- requiresOnboard: true,
3050
- stream: true,
3051
- api: "antigravity",
3052
- cloudModelId: "gemini-3-pro-preview",
3053
- },
3054
- "antigravity-gemini-3.1-pro": {
3055
- endpoint: CODE_ASSIST_PATH_MAP.STREAM_GENERATE_CONTENT,
3056
- antigravityVersion: "v1internal",
3057
- requiresOnboard: true,
3058
- stream: true,
3059
- api: "antigravity",
3060
- cloudModelId: "gemini-3.1-pro-preview",
3061
- },
3062
- "antigravity-gemini-3-flash": {
3063
- endpoint: CODE_ASSIST_PATH_MAP.STREAM_GENERATE_CONTENT,
3064
- antigravityVersion: "v1internal",
3065
- requiresOnboard: true,
3066
- stream: true,
3067
- api: "antigravity",
3068
- cloudModelId: "gemini-3-flash-preview",
3069
- },
3070
- "antigravity-claude-sonnet-4-6": {
3071
- endpoint: CODE_ASSIST_PATH_MAP.STREAM_GENERATE_CONTENT,
3072
- antigravityVersion: "daily-v1internal",
3073
- requiresOnboard: true,
3074
- stream: true,
3075
- api: "antigravity",
3076
- cloudModelId: "claude-sonnet-4-6",
3077
- },
3078
- "antigravity-claude-opus-4-6-thinking": {
3079
- endpoint: CODE_ASSIST_PATH_MAP.STREAM_GENERATE_CONTENT,
3080
- antigravityVersion: "daily-v1internal",
3081
- requiresOnboard: true,
3082
- stream: true,
3083
- api: "antigravity",
3084
- cloudModelId: "claude-opus-4-6-thinking",
3085
- },
3086
- "gemini-2.5-flash": {
3087
- endpoint: CODE_ASSIST_PATH_MAP.GENERATE_CONTENT,
3088
- antigravityVersion: "v1internal",
3089
- requiresOnboard: true,
3090
- stream: false,
3091
- api: "gemini-cli",
3092
- cloudModelId: "gemini-2.5-flash",
3093
- },
3094
- "gemini-2.5-pro": {
3095
- endpoint: CODE_ASSIST_PATH_MAP.GENERATE_CONTENT,
3096
- antigravityVersion: "v1internal",
3097
- requiresOnboard: true,
3098
- stream: false,
3099
- api: "gemini-cli",
3100
- cloudModelId: "gemini-2.5-pro",
3101
- },
3102
- "gemini-3-flash-preview": {
3103
- endpoint: CODE_ASSIST_PATH_MAP.STREAM_GENERATE_CONTENT,
3104
- antigravityVersion: "v1internal",
3105
- requiresOnboard: true,
3106
- stream: true,
3107
- api: "gemini-cli",
3108
- cloudModelId: "gemini-3-flash-preview",
3109
- },
3110
- "gemini-3-pro-preview": {
3111
- endpoint: CODE_ASSIST_PATH_MAP.STREAM_GENERATE_CONTENT,
3112
- antigravityVersion: "v1internal",
3113
- requiresOnboard: true,
3114
- stream: true,
3115
- api: "gemini-cli",
3116
- cloudModelId: "gemini-3-pro-preview",
3117
- },
3118
- "gemini-3.1-pro-preview": {
3119
- endpoint: CODE_ASSIST_PATH_MAP.STREAM_GENERATE_CONTENT,
3120
- antigravityVersion: "v1internal",
3121
- requiresOnboard: true,
3122
- stream: true,
3123
- api: "gemini-cli",
3124
- cloudModelId: "gemini-3.1-pro-preview",
3125
- },
3126
- "gemini-3.1-pro-preview-customtools": {
3127
- endpoint: CODE_ASSIST_PATH_MAP.STREAM_GENERATE_CONTENT,
3128
- antigravityVersion: "v1internal",
3129
- requiresOnboard: true,
3130
- stream: true,
3131
- api: "gemini-cli",
3132
- cloudModelId: "gemini-3.1-pro-preview-customtools",
3133
- },
3134
- };
3135
-
3136
- /**
3137
- * One entry of the 2026 antigravity model catalog (rich provider metadata
3138
- * consumed by the opencode.json configure flow).
3139
- * v2.1.16 single-owner fix: moved from cli.ts — model identification lives
3140
- * only in models.ts; cli.ts imports and re-exports it under the historical
3141
- * name.
3142
- */
3143
- export interface ModelCatalogEntry {
3144
- id: string;
3145
- name: string;
3146
- provider: "antigravity";
3147
- family: "gemini" | "claude";
3148
- context: number;
3149
- output: number;
3150
- thinking: boolean;
3151
- variants: string[];
3152
- aliases: string[];
3153
- }
3154
-
3155
- /**
3156
- * 2026 awareness catalog (8 entries; former cli.ts MODELS_2026_CATALOG,
3157
- * originally ported there from cli(2).ts).
3158
- * v2.1.16 single-owner fix: moved from cli.ts to models.ts — model
3159
- * identification lives only in models.ts; cli.ts keeps
3160
- * buildOpenCodeModelDefinitions (entry orchestration) and re-exports this
3161
- * catalog under the historical exported name. Data byte-identical to the
3162
- * former cli.ts literal.
3163
- */
3164
- export const MODELS_2026_CATALOG: readonly ModelCatalogEntry[] = [
3165
- {
3166
- id: "gemini-3-pro-preview",
3167
- name: "Gemini 3 Pro Preview (Antigravity)",
3168
- provider: "antigravity",
3169
- family: "gemini",
3170
- context: 1_048_576,
3171
- output: 65_535,
3172
- thinking: true,
3173
- variants: ["antigravity-gemini-3-pro-preview", "antigravity-gemini-3-pro"],
3174
- aliases: ["gemini-3-pro", "antigravity-gemini-3-pro"],
3175
- },
3176
- {
3177
- id: "gemini-3-flash-preview",
3178
- name: "Gemini 3 Flash Preview (Antigravity)",
3179
- provider: "antigravity",
3180
- family: "gemini",
3181
- context: 1_048_576,
3182
- output: 65_535,
3183
- thinking: false,
3184
- variants: ["antigravity-gemini-3-flash-preview", "antigravity-gemini-3-flash"],
3185
- aliases: ["gemini-3-flash", "antigravity-gemini-3-flash"],
3186
- },
3187
- {
3188
- id: "gemini-3.1-pro-preview",
3189
- name: "Gemini 3.1 Pro Preview (Antigravity)",
3190
- provider: "antigravity",
3191
- family: "gemini",
3192
- context: 1_048_576,
3193
- output: 65_535,
3194
- thinking: true,
3195
- variants: ["antigravity-gemini-3.1-pro-preview", "antigravity-gemini-3.1-pro"],
3196
- aliases: ["gemini-3.1-pro-preview", "gemini-3.1-pro", "antigravity-gemini-3.1-pro"],
3197
- },
3198
- {
3199
- id: "gemini-3.1-pro-preview-customtools",
3200
- name: "Gemini 3.1 Pro Preview CustomTools (Antigravity)",
3201
- provider: "antigravity",
3202
- family: "gemini",
3203
- context: 1_048_576,
3204
- output: 65_535,
3205
- thinking: true,
3206
- variants: [],
3207
- aliases: [],
3208
- },
3209
- {
3210
- id: "gemini-2.5-pro",
3211
- name: "Gemini 2.5 Pro (Antigravity)",
3212
- provider: "antigravity",
3213
- family: "gemini",
3214
- context: 1_048_576,
3215
- output: 65_535,
3216
- thinking: true,
3217
- variants: ["antigravity-gemini-2.5-pro"],
3218
- aliases: ["gemini-2.5", "gemini-2.5-pro-preview"],
3219
- },
3220
- {
3221
- id: "gemini-2.5-flash",
3222
- name: "Gemini 2.5 Flash (Antigravity)",
3223
- provider: "antigravity",
3224
- family: "gemini",
3225
- context: 1_048_576,
3226
- output: 65_535,
3227
- thinking: false,
3228
- variants: ["antigravity-gemini-2.5-flash"],
3229
- aliases: ["gemini-2.5-flash-preview"],
3230
- },
3231
- {
3232
- id: "claude-opus-4-6-thinking",
3233
- name: "Claude Opus 4.6 Thinking (Antigravity)",
3234
- provider: "antigravity",
3235
- family: "claude",
3236
- context: 200_000,
3237
- output: 64_000,
3238
- thinking: true,
3239
- variants: ["antigravity-claude-opus-4-6-thinking", "claude-opus-4-6-thinking-low", "claude-opus-4-6-thinking-max"],
3240
- aliases: ["claude-opus-4-6", "antigravity-claude-opus-4-6"],
3241
- },
3242
- {
3243
- id: "claude-sonnet-4-6",
3244
- name: "Claude Sonnet 4.6 (Antigravity)",
3245
- provider: "antigravity",
3246
- family: "claude",
3247
- context: 200_000,
3248
- output: 64_000,
3249
- thinking: false,
3250
- variants: ["antigravity-claude-sonnet-4-6", "claude-sonnet-4-6-thinking"],
3251
- aliases: ["claude-sonnet-4-6", "antigravity-claude-sonnet-4-6"],
3252
- },
3253
- ];
3254
-
3255
- /**
3256
- * Id projection of the constants.ts rich definition substrate
3257
- * (MODEL_DEFINITIONS_2026, 49 entries) — the former constants.ts
3258
- * ANTIGRAVITY_MODEL_IDS_2026 semantic.
3259
- */
3260
- export const ANTIGRAVITY_MODEL_IDS_2026 = MODEL_DEFINITIONS_2026.map((m) => m.id) as unknown as readonly string[];
3261
-
3262
- /**
3263
- * Explicit prod-only list of the former plugin.ts copy (43 ids — the most
3264
- * complete explicit GEMINI_CLI_ONLY_MODELS variant; strict superset of the
3265
- * request.ts 8-entry and quota.ts derived lists).
3266
- */
3267
- export const GEMINI_CLI_ONLY_MODELS = [
3268
- "gemini-3.6-flash-high",
3269
- "gemini-3.6-flash-medium",
3270
- "gemini-3.6-flash-low",
3271
- "gemini-3.6-flash-tiered",
3272
- "gemini-3.6-flash",
3273
- "gemini-3.5-flash-high",
3274
- "gemini-3.5-flash-medium",
3275
- "gemini-3.5-flash",
3276
- "gemini-3.5-flash-lite",
3277
- "gemini-3.5-flash-lite-preview",
3278
- "gemini-3.1-pro-high",
3279
- "gemini-3.1-pro-low",
3280
- "gemini-3.1-pro",
3281
- "gemini-3.1-flash-image",
3282
- "gemini-3.1-flash-lite",
3283
- "gemini-3-flash",
3284
- "gemini-3-pro",
3285
- "gemini-3-deep-think",
3286
- "gemini-3-pro-preview",
3287
- "gemini-3-flash-preview",
3288
- "gemini-3.1-pro-preview",
3289
- "gemini-3.1-pro-preview-customtools",
3290
- "antigravity-gemini-3.6-flash-high",
3291
- "antigravity-gemini-3.6-flash-medium",
3292
- "antigravity-gemini-3.6-flash-low",
3293
- "antigravity-gemini-3.6-flash-tiered",
3294
- "antigravity-gemini-3.6-flash",
3295
- "antigravity-gemini-3.5-flash-high",
3296
- "antigravity-gemini-3.5-flash-medium",
3297
- "antigravity-gemini-3.5-flash",
3298
- "antigravity-gemini-3.5-flash-lite",
3299
- "antigravity-gemini-3.5-flash-lite-preview",
3300
- "antigravity-gemini-3.1-pro-high",
3301
- "antigravity-gemini-3.1-pro-low",
3302
- "antigravity-gemini-3.1-pro",
3303
- "antigravity-gemini-3.1-flash-image",
3304
- "antigravity-gemini-3.1-flash-lite",
3305
- "antigravity-gemini-3-flash",
3306
- "antigravity-gemini-3-pro",
3307
- "antigravity-gemini-3-deep-think",
3308
- "antigravity-gemini-3-pro-preview",
3309
- "antigravity-gemini-3-flash-preview",
3310
- "antigravity-gemini-3.1-pro-preview",
3311
- ] as const;
3312
-
3313
- /**
3314
- * Quota-group routing table (the former quota.ts ANTIGRAVITY_MODELS_2026 —
3315
- * 17 rich entries with quota-pool group assignments that diverge from the
3316
- * constants.ts catalog lineage, so it keeps its own accurate name). Drives
3317
- * quota pool resolution; verbatim value merge.
3318
- */
3319
- export const QUOTA_GROUP_MODEL_DEFINITIONS = [
3320
- {
3321
- id: "antigravity-gemini-3-pro",
3322
- displayName: "Gemini 3 Pro (Antigravity)",
3323
- group: "antigravity",
3324
- contextWindow: 1_048_576,
3325
- outputLimit: 65_535,
3326
- supportsThinking: true,
3327
- supportsTools: true,
3328
- supportsVision: true,
3329
- isPreview: false,
3330
- isClaude: false,
3331
- },
3332
- {
3333
- id: "antigravity-gemini-3-flash",
3334
- displayName: "Gemini 3 Flash (Antigravity)",
3335
- group: "antigravity",
3336
- contextWindow: 1_048_576,
3337
- outputLimit: 65_535,
3338
- supportsThinking: true,
3339
- supportsTools: true,
3340
- supportsVision: true,
3341
- isPreview: false,
3342
- isClaude: false,
3343
- },
3344
- {
3345
- id: "antigravity-gemini-3.1-pro",
3346
- displayName: "Gemini 3.1 Pro (Antigravity)",
3347
- group: "antigravity",
3348
- contextWindow: 1_048_576,
3349
- outputLimit: 65_535,
3350
- supportsThinking: true,
3351
- supportsTools: true,
3352
- supportsVision: true,
3353
- isPreview: false,
3354
- isClaude: false,
3355
- },
3356
- {
3357
- id: "gemini-2.5-flash",
3358
- displayName: "Gemini 2.5 Flash",
3359
- group: "antigravity",
3360
- contextWindow: 1_048_576,
3361
- outputLimit: 65_535,
3362
- supportsThinking: true,
3363
- supportsTools: true,
3364
- supportsVision: true,
3365
- isPreview: false,
3366
- isClaude: false,
3367
- },
3368
- {
3369
- id: "gemini-2.5-pro",
3370
- displayName: "Gemini 2.5 Pro",
3371
- group: "antigravity",
3372
- contextWindow: 1_048_576,
3373
- outputLimit: 65_535,
3374
- supportsThinking: true,
3375
- supportsTools: true,
3376
- supportsVision: true,
3377
- isPreview: false,
3378
- isClaude: false,
3379
- },
3380
- {
3381
- id: "gemini-3-flash-preview",
3382
- displayName: "Gemini 3 Flash Preview",
3383
- group: "gemini-cli",
3384
- contextWindow: 1_048_576,
3385
- outputLimit: 65_535,
3386
- supportsThinking: true,
3387
- supportsTools: true,
3388
- supportsVision: true,
3389
- isPreview: true,
3390
- isClaude: false,
3391
- },
3392
- {
3393
- id: "gemini-3-pro-preview",
3394
- displayName: "Gemini 3 Pro Preview",
3395
- group: "gemini-cli",
3396
- contextWindow: 1_048_576,
3397
- outputLimit: 65_535,
3398
- supportsThinking: true,
3399
- supportsTools: true,
3400
- supportsVision: true,
3401
- isPreview: true,
3402
- isClaude: false,
3403
- },
3404
- {
3405
- id: "gemini-3.1-pro-preview",
3406
- displayName: "Gemini 3.1 Pro Preview",
3407
- group: "gemini-cli",
3408
- contextWindow: 1_048_576,
3409
- outputLimit: 65_535,
3410
- supportsThinking: true,
3411
- supportsTools: true,
3412
- supportsVision: true,
3413
- isPreview: true,
3414
- isClaude: false,
3415
- },
3416
- {
3417
- id: "gemini-3.1-pro-preview-customtools",
3418
- displayName: "Gemini 3.1 Pro Preview CustomTools",
3419
- group: "gemini-cli",
3420
- contextWindow: 1_048_576,
3421
- outputLimit: 65_535,
3422
- supportsThinking: true,
3423
- supportsTools: true,
3424
- supportsVision: true,
3425
- isPreview: true,
3426
- isClaude: false,
3427
- },
3428
- {
3429
- id: "claude-opus-4-6-thinking",
3430
- displayName: "Claude Opus 4.6 Thinking",
3431
- group: "antigravity",
3432
- contextWindow: 200_000,
3433
- outputLimit: 64_000,
3434
- supportsThinking: true,
3435
- supportsTools: true,
3436
- supportsVision: true,
3437
- isPreview: false,
3438
- isClaude: true,
3439
- },
3440
- {
3441
- id: "claude-opus-4-6-thinking-low",
3442
- displayName: "Claude Opus 4.6 Thinking Low",
3443
- group: "antigravity",
3444
- contextWindow: 200_000,
3445
- outputLimit: 64_000,
3446
- supportsThinking: true,
3447
- supportsTools: true,
3448
- supportsVision: true,
3449
- isPreview: false,
3450
- isClaude: true,
3451
- },
3452
- {
3453
- id: "claude-opus-4-6-thinking-max",
3454
- displayName: "Claude Opus 4.6 Thinking Max",
3455
- group: "antigravity",
3456
- contextWindow: 200_000,
3457
- outputLimit: 64_000,
3458
- supportsThinking: true,
3459
- supportsTools: true,
3460
- supportsVision: true,
3461
- isPreview: false,
3462
- isClaude: true,
3463
- },
3464
- {
3465
- id: "claude-sonnet-4-6",
3466
- displayName: "Claude Sonnet 4.6",
3467
- group: "antigravity",
3468
- contextWindow: 200_000,
3469
- outputLimit: 64_000,
3470
- supportsThinking: true,
3471
- supportsTools: true,
3472
- supportsVision: true,
3473
- isPreview: false,
3474
- isClaude: true,
3475
- },
3476
- {
3477
- id: "claude-opus-4-5-thinking",
3478
- displayName: "Claude Opus 4.5 Thinking (Legacy)",
3479
- group: "antigravity",
3480
- contextWindow: 200_000,
3481
- outputLimit: 64_000,
3482
- supportsThinking: true,
3483
- supportsTools: true,
3484
- supportsVision: true,
3485
- isPreview: false,
3486
- isClaude: true,
3487
- },
3488
- // Aliases bare gemini-3-* without antigravity- prefix - server accepts both
3489
- {
3490
- id: "gemini-3-flash",
3491
- displayName: "Gemini 3 Flash",
3492
- group: "gemini-cli",
3493
- contextWindow: 1_048_576,
3494
- outputLimit: 65_535,
3495
- supportsThinking: true,
3496
- supportsTools: true,
3497
- supportsVision: true,
3498
- isPreview: false,
3499
- isClaude: false,
3500
- },
3501
- {
3502
- id: "gemini-3-pro",
3503
- displayName: "Gemini 3 Pro",
3504
- group: "gemini-cli",
3505
- contextWindow: 1_048_576,
3506
- outputLimit: 65_535,
3507
- supportsThinking: true,
3508
- supportsTools: true,
3509
- supportsVision: true,
3510
- isPreview: false,
3511
- isClaude: false,
3512
- },
3513
- {
3514
- id: "gemini-3.1-pro",
3515
- displayName: "Gemini 3.1 Pro",
3516
- group: "gemini-cli",
3517
- contextWindow: 1_048_576,
3518
- outputLimit: 65_535,
3519
- supportsThinking: true,
3520
- supportsTools: true,
3521
- supportsVision: true,
3522
- isPreview: false,
3523
- isClaude: false,
3524
- },
3525
- ] as const satisfies readonly AntigravityModelDefinition[];
3526
-
3527
- /**
3528
- * Id projection of the quota group routing table (the former quota.ts
3529
- * ANTIGRAVITY_MODEL_IDS_2026).
3530
- */
3531
- export const QUOTA_GROUP_MODEL_IDS_2026 = QUOTA_GROUP_MODEL_DEFINITIONS.map(
3532
- (m) => m.id,
3533
- ) as unknown as readonly string[];
3534
-
3535
- /**
3536
- * Gemini-CLI-pool subset of the quota group routing table (the former
3537
- * quota.ts GEMINI_CLI_ONLY_MODELS).
3538
- */
3539
- export const QUOTA_GROUP_GEMINI_CLI_ONLY_MODELS = QUOTA_GROUP_MODEL_DEFINITIONS.filter(
3540
- (m) => m.group === "gemini-cli",
3541
- ).map((m) => m.id) as unknown as readonly string[];
3542
-
3543
- /**
3544
- * Catalog id list (93 ids — bare + antigravity aliases of the frozen
3545
- * catalog); the historical models.ts ANTIGRAVITY_MODELS_2026 semantic.
3546
- */
3547
- export const ANTIGRAVITY_MODELS_2026 = MODEL_CATALOG_2026_08_25.map((m) => m.id) as unknown as readonly string[];
3548
-
3549
- /**
3550
- * Catalog prodOnly projection — the historical models.ts
3551
- * GEMINI_CLI_ONLY_MODELS_2026 semantic (distinct name from the explicit
3552
- * plugin-lineage GEMINI_CLI_ONLY_MODELS above).
3553
- */
3554
- export const GEMINI_CLI_ONLY_MODELS_2026 = MODEL_CATALOG_2026_08_25.filter((m) => m.endpointHints.prodOnly).map(
3555
- (m) => m.id,
3556
- ) as unknown as readonly string[];
3557
-
3558
- /**
3559
- * Preview slice of the catalog (id projection).
3560
- */
3561
- export const PREVIEW_MODELS_2026 = getPreviewModels().map((m) => m.id) as unknown as readonly string[];
3562
-
3563
- /**
3564
- * Union of the legacy bypass list ids (the former accounts.ts / config.ts /
3565
- * project.ts / quota.ts Model2026 and fingerprint.ts / recovery.ts /
3566
- * streaming.ts ModelId2026 semantics — 11 literals).
3567
- */
3568
- export type Model2026 = (typeof MODELS_2026_LEGACY)[number];
3569
-
3570
- /** Historical alias of {@link Model2026} (same union, parallel name). */
3571
- export type ModelId2026 = Model2026;
3572
-
3573
- /** Union of {@link SUPPORTED_MODELS_2026} (auth lineage). */
3574
- export type SupportedModel2026 = (typeof SUPPORTED_MODELS_2026)[number];
3575
-
3576
- /** Union of {@link FETCH_AVAILABLE_MODELS_2026} (request lineage). */
3577
- export type FetchAvailableModel2026 = (typeof FETCH_AVAILABLE_MODELS_2026)[number];
3578
-
3579
- export const MODEL_CATALOG = MODEL_CATALOG_2026_08_25;
3580
- export const MODEL_MAP = MODEL_MAP_2026_08_25;
3581
-
3582
- // ---------------------------------------------------------------------------
3583
- // Section 15. Absorbed classifiers (plugin.ts / request.ts / search.ts /
3584
- // auth.ts lineage — v2.1.15 Phase A)
3585
- // ---------------------------------------------------------------------------
3586
-
3587
- /**
3588
- * Determines whether a model must use the prod-only Gemini CLI pool (skip
3589
- * sandbox). Canonical merge of the constants.ts, plugin.ts, quota.ts and
3590
- * request.ts variants: the request.ts implementation wins (live-validated
3591
- * v2.1.14 E2E chain and classification superset — it adds the customtools
3592
- * policy and matches every gemini-3* form anywhere in the id). The explicit
3593
- * GEMINI_CLI_ONLY_MODELS list is retained above for documentation/surface;
3594
- * every entry of every historical variant is also covered by the policy
3595
- * checks, so all consumers keep their exact classification behavior.
3596
- *
3597
- * Rule from RESEARCH:
3598
- * - any model containing preview → cli only
3599
- * - any gemini-3 or gemini-3.1 → cli only (2026 policy)
3600
- * - explicit list GEMINI_CLI_ONLY_MODELS
3601
- * Third-person observer: emulates behavior that fixed #233
3602
- *
3603
- * @param modelId - model id to test
3604
- * @returns true if must skip sandbox
3605
- */
3606
- export function isGeminiCLIOnlyModel(modelId: string): boolean {
3607
- if (!modelId || typeof modelId !== "string") return false;
3608
- const lower = modelId.trim().toLowerCase();
3609
- if (!lower) return false;
3610
-
3611
- // explicit list match
3612
- if ((GEMINI_CLI_ONLY_MODELS as readonly string[]).includes(lower as any)) return true;
3613
- if ((GEMINI_CLI_ONLY_MODELS as readonly string[]).some((m) => lower.includes(m))) return true;
3614
-
3615
- // policy: preview → prod only
3616
- if (lower.includes("preview")) return true;
3617
-
3618
- // policy: customtools variants are Antigravity 2026 features — prod only
3619
- // (union merged from request-helpers.ts in v2.1.14)
3620
- if (lower.includes("customtools")) return true;
3621
-
3622
- // policy: gemini-3+ only prod — covers gemini-3-pro-preview, gemini-3-flash, gemini-3.1-pro-preview, antigravity-gemini-3-*
3623
- if (lower.includes("gemini-3") || lower.startsWith("antigravity-gemini-3")) return true;
3624
-
3625
- // also antigravity-gemini-3 aliases
3626
- if (lower.includes("gemini-3.") || lower.includes("antigravity-gemini-3.")) return true;
3627
-
3628
- return false;
3629
- }
3630
-
3631
- /**
3632
- * Detects image-generation-capable models (image variants and flash-image /
3633
- * imagen families). Merged from plugin.ts (image || imagen, null-safe) and
3634
- * search.ts (image || 3.1-flash-image — the second clause is subsumed by
3635
- * the first, so the union is behavior-identical for both consumers).
3636
- */
3637
- export function isImageGenModel(modelId: string): boolean {
3638
- const l = String(modelId ?? "").toLowerCase();
3639
- return l.includes("image") || l.includes("imagen");
3640
- }
3641
-
3642
- /**
3643
- * Builds the Gemini image-generation request fragment: aspect ratio from
3644
- * argument or OPENCODE_IMAGE_ASPECT_RATIO env (default 1:1), TEXT+IMAGE
3645
- * modalities and permissive safety settings. Canonical is the plugin.ts
3646
- * shape (top-level responseModalities — the live-used variant); the
3647
- * search.ts variant wrapped them in generationConfig and had no in-repo
3648
- * consumers.
3649
- */
3650
- export function buildImageGenConfig(aspect?: string): any {
3651
- const ar = aspect || process.env.OPENCODE_IMAGE_ASPECT_RATIO || "1:1";
3652
- return {
3653
- imageConfig: { aspectRatio: ar },
3654
- responseModalities: ["TEXT", "IMAGE"],
3655
- safetySettings: [
3656
- { category: "HARM_CATEGORY_HARASSMENT", threshold: "BLOCK_NONE" },
3657
- { category: "HARM_CATEGORY_HATE_SPEECH", threshold: "BLOCK_NONE" },
3658
- { category: "HARM_CATEGORY_SEXUALLY_EXPLICIT", threshold: "BLOCK_NONE" },
3659
- { category: "HARM_CATEGORY_DANGEROUS_CONTENT", threshold: "BLOCK_NONE" },
3660
- ],
3661
- };
3662
- }
3663
-
3664
- /**
3665
- * Maps a model id to its routing group ("gemini-cli" when the model contains
3666
- * "preview" or starts with a gemini-3.x prefix (3, 3.1, 3.5, 3.6, 3.7);
3667
- * otherwise "antigravity" — claude and gpt-oss always antigravity).
3668
- * Canonical merge of the auth.ts (gemini-3.7-aware) and plugin.ts
3669
- * (claude/gpt-oss precedence) variants: equivalent on every real catalog id
3670
- * and a classification superset of both on synthetic ids.
3671
- */
3672
- export const mapModelToGroup = (m: string): "antigravity" | "gemini-cli" => {
3673
- const l = String(m ?? "").toLowerCase();
3674
- if (l.includes("claude") || l.includes("gpt-oss")) return "antigravity";
3675
- if (l.includes("gemini")) {
3676
- return l.includes("preview") ||
3677
- l.includes("3-") ||
3678
- l.startsWith("gemini-3.7") ||
3679
- l.startsWith("gemini-3.6") ||
3680
- l.startsWith("gemini-3.5") ||
3681
- l.startsWith("gemini-3.1") ||
3682
- l.startsWith("gemini-3")
3683
- ? "gemini-cli"
3684
- : "antigravity";
3685
- }
3686
- return "antigravity";
3687
- };
3688
-
3689
- /**
3690
- * Ordered endpoint cascade for a model: explicit overrides win; Gemini-CLI
3691
- * -only models get the PROD+DAILY order; everything else gets the full
3692
- * PROD/DAILY/SANDBOX order. Canonical is the request.ts variant
3693
- * (live-validated E2E chain); the plugin.ts variant's extra shouldSkipSandbox
3694
- * consultation is subsumed by the canonical isGeminiCLIOnlyModel classifier.
3695
- */
3696
- export function getEndpointsForModel(modelId: string, overrides?: string[]): string[] {
3697
- if (overrides && overrides.length > 0) {
3698
- return overrides.map((e) => stripTrailingSlashes(e)).filter(Boolean);
3699
- }
3700
- if (isGeminiCLIOnlyModel(modelId)) {
3701
- return [...ENDPOINT_ORDER_GEMINI_CLI];
3702
- }
3703
- return [...ENDPOINT_ORDER_ANTIGRAVITY];
3704
- }
3705
-
3706
- // ---------------------------------------------------------------------------
3707
- // Section 16. Barrel export for library-first root-first usage
3708
- // ---------------------------------------------------------------------------
3709
-
3710
- export const ModelsModule = {
3711
- CATALOG_DATE_ISO,
3712
- CATALOG_DATE_BR,
3713
- CATALOG_VERSION,
3714
- REFERENCES,
3715
- TIMELINE: OPENCODE_TXT_TIMELINE,
3716
- ENDPOINTS: CODE_ASSIST_ENDPOINTS,
3717
- ENDPOINT_ORDER,
3718
- ENDPOINT_ORDER_ANTIGRAVITY,
3719
- ENDPOINT_ORDER_GEMINI_CLI,
3720
- PROJECT_FALLBACK,
3721
- ANTIGRAVITY_VERSION_FALLBACK,
3722
- THINKING_LEVELS,
3723
- THINKING_BUDGET_MAP,
3724
- CONTEXT_WINDOW_GEMINI,
3725
- CONTEXT_WINDOW_CLAUDE,
3726
- OUTPUT_LIMIT_GEMINI,
3727
- OUTPUT_LIMIT_CLAUDE,
3728
- CATALOG: MODEL_CATALOG_2026_08_25,
3729
- MAP: MODEL_MAP_2026_08_25,
3730
- ALIASES: MODEL_ALIASES_2026_08_25,
3731
- GROUPED: MODEL_CATALOG_GROUPED,
3732
- FLAT: MODELS_2026_08_25,
3733
- DEFAULT_MODEL,
3734
- SEARCH_MODEL,
3735
- SEARCH_MODEL_PREVIEW,
3736
- SEARCH_MODEL_FALLBACKS,
3737
- OMNIROUTE_FALLBACK_MODEL,
3738
- FALLBACKS,
3739
- MODELS_2026,
3740
- GEMINI_BARE_MODEL_IDS,
3741
- MODELS_2026_BASE,
3742
- MODELS_2026_ANTIGRAVITY_ALIAS,
3743
- MODELS_2026_PROVIDER,
3744
- MODELS_2026_ANTIGRAVITY,
3745
- MODELS_2026_ALL,
3746
- MODELS_2026_LEGACY,
3747
- SUPPORTED_MODELS_2026,
3748
- FETCH_AVAILABLE_MODELS_2026,
3749
- ALL_MODELS_2026,
3750
- ANTIGRAVITY_MODEL_IDS_2026,
3751
- ANTIGRAVITY_MODELS_2026,
3752
- GEMINI_CLI_ONLY_MODELS,
3753
- GEMINI_CLI_ONLY_MODELS_2026,
3754
- PREVIEW_MODELS_2026,
3755
- QUOTA_GROUP_MODEL_DEFINITIONS,
3756
- QUOTA_GROUP_MODEL_IDS_2026,
3757
- QUOTA_GROUP_GEMINI_CLI_ONLY_MODELS,
3758
- // getters
3759
- getModel,
3760
- hasModel,
3761
- isPreview,
3762
- isThinkingModel,
3763
- isImageModel,
3764
- isAntagravityGroup,
3765
- isGeminiCliGroup,
3766
- isCLIOnly,
3767
- getModelsByGroup,
3768
- getModelsByThinkingLevel,
3769
- getPreviewModels,
3770
- getStableModels,
3771
- getAntagravityModels,
3772
- getGeminiCliModels,
3773
- getThinkingBudget,
3774
- getContextWindow,
3775
- getOutputLimit,
3776
- getEndpointForModel,
3777
- shouldSkipSandboxForModel,
3778
- listModelIds,
3779
- listBareModelIds,
3780
- searchModels,
3781
- routeModelViaOmniRoute,
3782
- mapModelFor9Router,
3783
- normalizeModelId,
3784
- parseThinkingLevelFromId,
3785
- getThinkingBudgetForLevel,
3786
- isGeminiCliOnlyId,
3787
- isGeminiCLIOnlyModel,
3788
- isImageGenModel,
3789
- buildImageGenConfig,
3790
- mapModelToGroup,
3791
- getEndpointsForModel,
3792
- fnv1a32,
3793
- };
3794
-
3795
- /** Back-compat alias of ModelsModule (previous barrel name). */
3796
- export const Models2026Module = ModelsModule;
3797
-
3798
- export default ModelsModule;
3799
-
3800
- // v2.1.15 Phase B: the identity-masquerade helpers (getDynamicUserAgent,
3801
- // normalizePlatform, normalizeArch, buildAntagravityHeaders), the header
3802
- // stripper, isRetryableStatus, getJitterMs and fetchWithTimeout moved out —
3803
- // identity logic lives in fingerprint.ts, generic utilities in core.ts,
3804
- // request utilities in request.ts. models.ts contains model identification
3805
- // ONLY.