@@ -191,6 +191,23 @@ export const FREEBUFF_GLM_V52_MODEL_ID = 'z-ai/glm-5.2'
191191 * (agents/constants.ts) is this same model id, so keying either off the model
192192 * alone would change Codebuff's paid lite mode as a side effect. */
193193export const FREEBUFF_GPT_5_6_LUNA_MODEL_ID = 'openai/gpt-5.6-luna'
194+ /**
195+ * The Novita `-es` route. GOD-ONLY, and NOT a cheaper GPT-5.6 Luna.
196+ *
197+ * Its own id rather than a second lane under Luna's, because it is a different
198+ * model: measured 2026-08-21 it answers "I'm Codex, an OpenAI coding agent
199+ * based on GPT-5", volunteers Codex's internal tool names, and carries a fixed
200+ * ~4,450-token Codex system prompt we did not send. Serving that under Luna's
201+ * row would be the silent substitution the DeepSeek legacy/GA split exists to
202+ * prevent — and here the model says the quiet part out loud to any user who
203+ * asks what it is.
204+ *
205+ * A SECOND ID FOR THE SAME MODEL IS NORMALLY THE BUG (see GLM's note above:
206+ * an extra id is an extra door onto a quota pool). This is the opposite case —
207+ * one id per distinct model, kept apart precisely so neither can be mistaken
208+ * for the other. It is god-only, so it opens no pool.
209+ */
210+ export const FREEBUFF_GPT_5_6_LUNA_ES_MODEL_ID = 'openai/gpt-5.6-luna-es'
194211/** OpenRouter provider slug Luna prefers (first in `provider.order`). */
195212export const FREEBUFF_GPT_5_6_LUNA_PROVIDER_ROUTE = 'openai'
196213/** Price ceiling for Luna, USD per million tokens. Sent as OpenRouter's
@@ -722,6 +739,10 @@ export const FREEBUFF_MODEL_CONTEXT_WINDOWS: Record<string, number> = {
722739 // summarize rewrites history from the front and throws away the prompt cache
723740 // with it.
724741 [ FREEBUFF_GPT_5_6_LUNA_MODEL_ID ] : 1_000_000 ,
742+ // Novita publishes 372k for the `-es` route (their /v1/models, 2026-08-21),
743+ // far below Luna's own 1M — it is a Codex session, not the Luna API model.
744+ // Sized from what the provider states rather than inherited from the name.
745+ [ FREEBUFF_GPT_5_6_LUNA_ES_MODEL_ID ] : 372_000 ,
725746 // Meta publishes 1,048,576 for every Muse Spark variant. Entered as 1_000_000
726747 // for the same reason Luna is: it stays on the safe side of the asymmetry
727748 // above while remaining an honest order of magnitude, where falling through
@@ -1067,6 +1088,27 @@ const GLM_V52_MODEL = {
10671088 * routing, billing, and the CROF_MODEL_MAP entry. If the full K3 is ever added
10681089 * as its own row, this label has to be disambiguated at that point.
10691090 */
1091+ const GPT_5_6_LUNA_ES_MODEL = {
1092+ id : FREEBUFF_GPT_5_6_LUNA_ES_MODEL_ID ,
1093+ // Named for what it IS. "Luna" appears nowhere: the route answers "Codex" when
1094+ // asked, so a row calling it Luna would be contradicted by the model itself.
1095+ displayName : 'Codex (test)' ,
1096+ tagline : 'Novita route — evaluation only' ,
1097+ availability : 'always' ,
1098+ // No AI-training claim either way: the supplier has no resale agreement for
1099+ // this route, so we have no data-use terms to pass on. `service` is the
1100+ // conservative reading — we are not asserting a training warning we cannot
1101+ // substantiate, and not asserting safety we cannot either.
1102+ dataUse : 'service' ,
1103+ // TRUE so it cannot fall into FREEBUFF_STANDARD_MODEL_IDS, which is derived
1104+ // as `WEB_ALL.filter(m => !m.premium)` — the UNMETERED pool. God-only is the
1105+ // gate; this flag is what stops the row becoming free inference if the gate
1106+ // is ever widened.
1107+ premium : true ,
1108+ multimodal : false ,
1109+ reasoningEffort : FREEBUFF_GPT_5_6_LUNA_REASONING_EFFORT ,
1110+ } as const satisfies FreebuffModelOption
1111+
10701112const KIMI_K3_ECO_MODEL = {
10711113 id : FREEBUFF_KIMI_K3_ECO_MODEL_ID ,
10721114 displayName : 'Kimi K3' ,
@@ -1451,6 +1493,7 @@ export const FREEBUFF_WEB_MODELS = [
14511493
14521494export const FREEBUFF_WEB_GOD_ONLY_MODELS = [
14531495 KIMI_K3_ECO_MODEL ,
1496+ GPT_5_6_LUNA_ES_MODEL ,
14541497] as const satisfies readonly FreebuffModelOption [ ]
14551498
14561499export const FREEBUFF_WEB_ALL_MODELS = [
0 commit comments