johns-harness 2026.9.32 → 2026.9.34
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.
- package/CHANGELOG.md +10 -0
- package/README.md +1 -1
- package/dist/auth-profiles-5CHn7vq1.js +11 -0
- package/dist/channels/plugins/actions/telegram.js +5 -0
- package/dist/config-koj5M_EO.js +11 -0
- package/dist/daemon-cli.js +11 -0
- package/dist/model-selection-BGlGpPgM.js +21 -2
- package/dist/model-selection-BU6wl1le.js +21 -2
- package/dist/model-selection-L7RMwsG-.js +21 -2
- package/dist/models-config-CAmcg63r.js +12 -3
- package/dist/models-config-DXA5BkaM.js +12 -3
- package/dist/plugin-sdk/config-4Fgm-yEH.js +11 -0
- package/dist/plugin-sdk/config-Di-lyCdh.js +11 -0
- package/dist/plugin-sdk/discord.js +11 -0
- package/dist/plugin-sdk/mattermost.js +5 -0
- package/dist/plugin-sdk/model-auth-CX9cPHdC.js +11 -0
- package/dist/plugin-sdk/model-auth-Ciehz0x5.js +11 -0
- package/dist/plugin-sdk/model-auth-DVyo6JSX.js +11 -0
- package/dist/plugin-sdk/model-auth-kiHYHGrs.js +11 -0
- package/dist/plugin-sdk/model-selection-Dbj4jDYM.js +11 -0
- package/dist/plugin-sdk/thinking-B-rIrY_n.js +5 -0
- package/dist/plugin-sdk/thinking-CopbP_Cn.js +5 -0
- package/dist/plugin-sdk/thinking-WQ4Zq8Nl.js +5 -0
- package/dist/plugin-sdk/thinking-WXqkGljb.js +5 -0
- package/dist/plugin-sdk/thinking-_uXqFaFO.js +5 -0
- package/dist/plugin-sdk/thinking-pTdxk2dr.js +5 -0
- package/dist/thinking-B5B36ffe.js +5 -0
- package/dist/thinking-BYwvlJ3S.js +5 -0
- package/dist/thinking-CAzdgmNV.js +5 -0
- package/dist/thinking-DykY2Fzj.js +5 -0
- package/docs/PATCHES.md +20 -2
- package/docs/PROVIDER-CATALOG.md +27 -6
- package/node_modules/@mariozechner/pi-ai/dist/models.generated.js +111 -2
- package/node_modules/@mariozechner/pi-ai/dist/models.js +9 -0
- package/node_modules/@mariozechner/pi-ai/dist/providers/openai-codex-responses.js +3 -0
- package/node_modules/@mariozechner/pi-ai/dist/providers/openai-responses.js +3 -0
- package/package.json +1 -1
- package/vendor/patched-deps/@mariozechner/pi-ai/dist/models.generated.js +111 -2
- package/vendor/patched-deps/@mariozechner/pi-ai/dist/models.js +9 -0
- package/vendor/patched-deps/@mariozechner/pi-ai/dist/providers/openai-codex-responses.js +3 -0
- package/vendor/patched-deps/@mariozechner/pi-ai/dist/providers/openai-responses.js +3 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 2026.9.34
|
|
4
|
+
|
|
5
|
+
- Family 80 (daily model integration, 2026-09-24): GPT-6 Sol (`gpt-6-sol`) and GPT-6 Luna (`gpt-6-luna`) ship on `openai` and `openai-codex`, and xAI Grok 4.7 (`grok-4.7`) on `xai`. Card data from the official model pages checked 2026-09-24: GPT-6 Sol $2/$10 per MTok, Luna $0.10/$0.50, both 1.05M native context and 128K max output (272K harness window, like every GPT entry), efforts none through max; Grok 4.7 $2/$6, 500K native context (200K harness window and 64K max output, like Grok 4.6), efforts low through xhigh. All three allow `/think xhigh`. GPT-6 Sol/Luna drop `temperature` unless reasoning effort is `none` (the API rejects it otherwise, verified live).
|
|
6
|
+
- Aliases: `sol` and `gpt` now resolve to `openai-codex/gpt-6-sol`, `luna` to `openai-codex/gpt-6-luna`; `sol56` and `luna56` keep the GPT-5.6 models. `grok` joins the shipped aliases on Grok 4.7; `grok46` keeps Grok 4.6. Everything else is unchanged. User aliases that pin the older models under these shorthands move forward on the next config load (family 79) and keep the versioned alias.
|
|
7
|
+
- Exact replay `scripts/patch-daily-models-80.py` (31 files); verifier checks 80.1-80.17. Roll back with `npm i -g johns-harness@2026.9.33`.
|
|
8
|
+
|
|
9
|
+
## 2026.9.33
|
|
10
|
+
|
|
11
|
+
- Claude Opus 5.5 context window cap raised from 300K to 500K (`contextWindow: 500000` in the shipped catalog and in both owner-cap paths). Opus 4.8 and Opus 5 stay at 300K. The single 300K set is now a per-model cap map (`JOHNNESS_OPUS_CONTEXT_TOKENS_BY_MODEL`); compaction and preflight follow the resolved window automatically. Verifier 78.4-78.7. Roll back with `npm i -g johns-harness@2026.9.32`.
|
|
12
|
+
|
|
3
13
|
## 2026.9.32
|
|
4
14
|
|
|
5
15
|
- Family 79: recurring cron jobs retry transient errors (rate limit, overloaded, network, timeout, server error) at min(next natural slot, now + `cron.retry` backoff) up to `cron.retry.maxAttempts`, then return to the normal schedule, instead of burning the slot. Isolated cron runs always carry the default fallback chain, so a throttled job model falls through even when its provider differs from the default primary.
|
package/README.md
CHANGED
|
@@ -55,7 +55,7 @@ Expired ChatGPT credentials trigger an owner notice with the `/login` recovery c
|
|
|
55
55
|
|
|
56
56
|
<!-- JOHNNESS_PATCH_DEFAULTS_61 -->
|
|
57
57
|
### Batteries included
|
|
58
|
-
The harness ships the current model catalog and the short aliases `opus`, `sonnet`, `fable`, `astra`, `sol`, `luna`, `terra`, `gpt`, `flash`, `banana`, `image`, `deepseek`, `deepseek-pro`, `muse`, and `gemini-lite`, so `/model opus` works on a fresh install with no `models.providers` block. Channels you configure load without a `plugins.allow` list; only an explicit `enabled: false` or `plugins.deny` turns one off. Updating the harness updates the catalog and aliases for every agent. Any `openai-codex/<model>` primary that hits its ChatGPT usage limit fails over to `openai/<model>` on the API key first, then to your configured fallbacks, with no config (the sibling is skipped when no OpenAI API key is present). Image generation and editing use GPT Image 2 through the `image_generate` tool: `openai-codex/gpt-image-2` on the ChatGPT subscription first, `openai/gpt-image-2` on the API key second (`agents.defaults.imageGenerationModel`). Nano Banana Pro (`google/gemini-3-pro-image-preview`) ships in the catalog as a selectable image model, reachable with `model: "nano-banana"` and its own `aspectRatio` option; the default stays GPT Image 2 because the subscription path costs nothing.
|
|
58
|
+
The harness ships the current model catalog and the short aliases `opus`, `sonnet`, `fable`, `astra`, `sol`, `luna`, `terra`, `gpt`, `grok`, `flash`, `banana`, `image`, `deepseek`, `deepseek-pro`, `muse`, and `gemini-lite`, so `/model opus` works on a fresh install with no `models.providers` block. Channels you configure load without a `plugins.allow` list; only an explicit `enabled: false` or `plugins.deny` turns one off. Updating the harness updates the catalog and aliases for every agent. Any `openai-codex/<model>` primary that hits its ChatGPT usage limit fails over to `openai/<model>` on the API key first, then to your configured fallbacks, with no config (the sibling is skipped when no OpenAI API key is present). Image generation and editing use GPT Image 2 through the `image_generate` tool: `openai-codex/gpt-image-2` on the ChatGPT subscription first, `openai/gpt-image-2` on the API key second (`agents.defaults.imageGenerationModel`). Nano Banana Pro (`google/gemini-3-pro-image-preview`) ships in the catalog as a selectable image model, reachable with `model: "nano-banana"` and its own `aspectRatio` option; the default stays GPT Image 2 because the subscription path costs nothing.
|
|
59
59
|
|
|
60
60
|
**The alias contract.** Every shipped alias points at the newest model in its line, so an install or an `/update` moves every agent forward with zero per-instance config. Your own `agents.defaults.models[*].alias` entries are still consulted first and still win. Every catalog bump must move the matching alias; the verifier fails the release if it does not. `/model deepseek` always selects the newest DeepSeek model (currently V4.1 Flash); `deepseek-pro` the newest Pro.
|
|
61
61
|
|
|
@@ -5139,6 +5139,17 @@ Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
|
5139
5139
|
opus: "anthropic/claude-opus-5-5",
|
|
5140
5140
|
opus5: "anthropic/claude-opus-5"
|
|
5141
5141
|
});
|
|
5142
|
+
// JOHNNESS_PATCH_DAILY_MODELS_80: GPT-6 Sol/Luna are the newest Sol/Luna; `sol`, `luna` and `gpt` move to them and
|
|
5143
|
+
// the GPT-5.6 models keep sol56/luna56. `grok` names the newest Grok; grok46 keeps Grok 4.6.
|
|
5144
|
+
Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
5145
|
+
sol: "openai-codex/gpt-6-sol",
|
|
5146
|
+
luna: "openai-codex/gpt-6-luna",
|
|
5147
|
+
gpt: "openai-codex/gpt-6-sol",
|
|
5148
|
+
sol56: "openai-codex/gpt-5.6-sol",
|
|
5149
|
+
luna56: "openai-codex/gpt-5.6-luna",
|
|
5150
|
+
grok: "xai/grok-4.7",
|
|
5151
|
+
grok46: "xai/grok-4.6"
|
|
5152
|
+
});
|
|
5142
5153
|
const DEFAULT_MODEL_COST = {
|
|
5143
5154
|
input: 0,
|
|
5144
5155
|
output: 0,
|
|
@@ -2111,6 +2111,11 @@ const XHIGH_MODEL_REFS = [
|
|
|
2111
2111
|
"meta/muse-spark-1.3", // JOHNNESS_PATCH_MUSE_SPARK
|
|
2112
2112
|
"meta/muse-spark-1.2",
|
|
2113
2113
|
"anthropic/claude-opus-5-5", // JOHNNESS_PATCH_OPUS_55_MODEL
|
|
2114
|
+
"xai/grok-4.7", // JOHNNESS_PATCH_DAILY_MODELS_80
|
|
2115
|
+
"openai/gpt-6-sol",
|
|
2116
|
+
"openai-codex/gpt-6-sol",
|
|
2117
|
+
"openai/gpt-6-luna",
|
|
2118
|
+
"openai-codex/gpt-6-luna",
|
|
2114
2119
|
"xai/grok-4.6",
|
|
2115
2120
|
"openai/gpt-6-astra",
|
|
2116
2121
|
"openai-codex/gpt-6-astra",
|
package/dist/config-koj5M_EO.js
CHANGED
|
@@ -1834,6 +1834,17 @@ Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
|
1834
1834
|
opus: "anthropic/claude-opus-5-5",
|
|
1835
1835
|
opus5: "anthropic/claude-opus-5"
|
|
1836
1836
|
});
|
|
1837
|
+
// JOHNNESS_PATCH_DAILY_MODELS_80: GPT-6 Sol/Luna are the newest Sol/Luna; `sol`, `luna` and `gpt` move to them and
|
|
1838
|
+
// the GPT-5.6 models keep sol56/luna56. `grok` names the newest Grok; grok46 keeps Grok 4.6.
|
|
1839
|
+
Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
1840
|
+
sol: "openai-codex/gpt-6-sol",
|
|
1841
|
+
luna: "openai-codex/gpt-6-luna",
|
|
1842
|
+
gpt: "openai-codex/gpt-6-sol",
|
|
1843
|
+
sol56: "openai-codex/gpt-5.6-sol",
|
|
1844
|
+
luna56: "openai-codex/gpt-5.6-luna",
|
|
1845
|
+
grok: "xai/grok-4.7",
|
|
1846
|
+
grok46: "xai/grok-4.6"
|
|
1847
|
+
});
|
|
1837
1848
|
const DEFAULT_MODEL_COST = {
|
|
1838
1849
|
input: 0,
|
|
1839
1850
|
output: 0,
|
package/dist/daemon-cli.js
CHANGED
|
@@ -4986,6 +4986,17 @@ Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
|
4986
4986
|
opus: "anthropic/claude-opus-5-5",
|
|
4987
4987
|
opus5: "anthropic/claude-opus-5"
|
|
4988
4988
|
});
|
|
4989
|
+
// JOHNNESS_PATCH_DAILY_MODELS_80: GPT-6 Sol/Luna are the newest Sol/Luna; `sol`, `luna` and `gpt` move to them and
|
|
4990
|
+
// the GPT-5.6 models keep sol56/luna56. `grok` names the newest Grok; grok46 keeps Grok 4.6.
|
|
4991
|
+
Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
4992
|
+
sol: "openai-codex/gpt-6-sol",
|
|
4993
|
+
luna: "openai-codex/gpt-6-luna",
|
|
4994
|
+
gpt: "openai-codex/gpt-6-sol",
|
|
4995
|
+
sol56: "openai-codex/gpt-5.6-sol",
|
|
4996
|
+
luna56: "openai-codex/gpt-5.6-luna",
|
|
4997
|
+
grok: "xai/grok-4.7",
|
|
4998
|
+
grok46: "xai/grok-4.6"
|
|
4999
|
+
});
|
|
4989
5000
|
const DEFAULT_MODEL_COST = {
|
|
4990
5001
|
input: 0,
|
|
4991
5002
|
output: 0,
|
|
@@ -1691,6 +1691,17 @@ Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
|
1691
1691
|
opus: "anthropic/claude-opus-5-5",
|
|
1692
1692
|
opus5: "anthropic/claude-opus-5"
|
|
1693
1693
|
});
|
|
1694
|
+
// JOHNNESS_PATCH_DAILY_MODELS_80: GPT-6 Sol/Luna are the newest Sol/Luna; `sol`, `luna` and `gpt` move to them and
|
|
1695
|
+
// the GPT-5.6 models keep sol56/luna56. `grok` names the newest Grok; grok46 keeps Grok 4.6.
|
|
1696
|
+
Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
1697
|
+
sol: "openai-codex/gpt-6-sol",
|
|
1698
|
+
luna: "openai-codex/gpt-6-luna",
|
|
1699
|
+
gpt: "openai-codex/gpt-6-sol",
|
|
1700
|
+
sol56: "openai-codex/gpt-5.6-sol",
|
|
1701
|
+
luna56: "openai-codex/gpt-5.6-luna",
|
|
1702
|
+
grok: "xai/grok-4.7",
|
|
1703
|
+
grok46: "xai/grok-4.6"
|
|
1704
|
+
});
|
|
1694
1705
|
const DEFAULT_MODEL_COST = {
|
|
1695
1706
|
input: 0,
|
|
1696
1707
|
output: 0,
|
|
@@ -1802,11 +1813,19 @@ function applyTalkConfigNormalization(config) {
|
|
|
1802
1813
|
window, but this scoped local ceiling keeps catalog, compaction, preflight,
|
|
1803
1814
|
failover, and session snapshots on the same conservative budget. */
|
|
1804
1815
|
const JOHNNESS_OPUS_CONTEXT_TOKENS = 3e5;
|
|
1805
|
-
const JOHNNESS_OPUS_300K_MODEL_IDS = new Set(["claude-opus-4-8", "claude-opus-5"
|
|
1816
|
+
const JOHNNESS_OPUS_300K_MODEL_IDS = new Set(["claude-opus-4-8", "claude-opus-5"]);
|
|
1817
|
+
/* JOHNNESS_PATCH_OPUS_55_MODEL: per-model owner caps. Opus 4.8 and Opus 5 keep the family 30 300K budget;
|
|
1818
|
+
Claude Opus 5.5 is capped at 500K (1M native). Catalog, compaction and session snapshots
|
|
1819
|
+
all read the resolved contextWindow, so this map is the single source of the cap. */
|
|
1820
|
+
const JOHNNESS_OPUS_55_CONTEXT_TOKENS = 5e5;
|
|
1821
|
+
const JOHNNESS_OPUS_CONTEXT_TOKENS_BY_MODEL = new Map([
|
|
1822
|
+
...[...JOHNNESS_OPUS_300K_MODEL_IDS].map((id) => [id, JOHNNESS_OPUS_CONTEXT_TOKENS]),
|
|
1823
|
+
["claude-opus-5-5", JOHNNESS_OPUS_55_CONTEXT_TOKENS]
|
|
1824
|
+
]);
|
|
1806
1825
|
function resolveJohnnessOpusContextWindow(providerId, modelId) {
|
|
1807
1826
|
if (normalizeProviderId(String(providerId ?? "")) !== "anthropic") return;
|
|
1808
1827
|
const normalizedModelId = String(modelId ?? "").trim().toLowerCase();
|
|
1809
|
-
|
|
1828
|
+
return JOHNNESS_OPUS_CONTEXT_TOKENS_BY_MODEL.get(normalizedModelId); // JOHNNESS_PATCH_OPUS_55_MODEL
|
|
1810
1829
|
}
|
|
1811
1830
|
/* JOHNNESS_PATCH_ALIAS_LATEST_79: bare shorthands (DEFAULT_MODEL_ALIASES keys without digits) always resolve
|
|
1812
1831
|
* to the newest shipped model in their line. A user alias that claims one but pins an older model of the same
|
|
@@ -1666,6 +1666,17 @@ Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
|
1666
1666
|
opus: "anthropic/claude-opus-5-5",
|
|
1667
1667
|
opus5: "anthropic/claude-opus-5"
|
|
1668
1668
|
});
|
|
1669
|
+
// JOHNNESS_PATCH_DAILY_MODELS_80: GPT-6 Sol/Luna are the newest Sol/Luna; `sol`, `luna` and `gpt` move to them and
|
|
1670
|
+
// the GPT-5.6 models keep sol56/luna56. `grok` names the newest Grok; grok46 keeps Grok 4.6.
|
|
1671
|
+
Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
1672
|
+
sol: "openai-codex/gpt-6-sol",
|
|
1673
|
+
luna: "openai-codex/gpt-6-luna",
|
|
1674
|
+
gpt: "openai-codex/gpt-6-sol",
|
|
1675
|
+
sol56: "openai-codex/gpt-5.6-sol",
|
|
1676
|
+
luna56: "openai-codex/gpt-5.6-luna",
|
|
1677
|
+
grok: "xai/grok-4.7",
|
|
1678
|
+
grok46: "xai/grok-4.6"
|
|
1679
|
+
});
|
|
1669
1680
|
const DEFAULT_MODEL_COST = {
|
|
1670
1681
|
input: 0,
|
|
1671
1682
|
output: 0,
|
|
@@ -1777,11 +1788,19 @@ function applyTalkConfigNormalization(config) {
|
|
|
1777
1788
|
window, but this scoped local ceiling keeps catalog, compaction, preflight,
|
|
1778
1789
|
failover, and session snapshots on the same conservative budget. */
|
|
1779
1790
|
const JOHNNESS_OPUS_CONTEXT_TOKENS = 3e5;
|
|
1780
|
-
const JOHNNESS_OPUS_300K_MODEL_IDS = new Set(["claude-opus-4-8", "claude-opus-5"
|
|
1791
|
+
const JOHNNESS_OPUS_300K_MODEL_IDS = new Set(["claude-opus-4-8", "claude-opus-5"]);
|
|
1792
|
+
/* JOHNNESS_PATCH_OPUS_55_MODEL: per-model owner caps. Opus 4.8 and Opus 5 keep the family 30 300K budget;
|
|
1793
|
+
Claude Opus 5.5 is capped at 500K (1M native). Catalog, compaction and session snapshots
|
|
1794
|
+
all read the resolved contextWindow, so this map is the single source of the cap. */
|
|
1795
|
+
const JOHNNESS_OPUS_55_CONTEXT_TOKENS = 5e5;
|
|
1796
|
+
const JOHNNESS_OPUS_CONTEXT_TOKENS_BY_MODEL = new Map([
|
|
1797
|
+
...[...JOHNNESS_OPUS_300K_MODEL_IDS].map((id) => [id, JOHNNESS_OPUS_CONTEXT_TOKENS]),
|
|
1798
|
+
["claude-opus-5-5", JOHNNESS_OPUS_55_CONTEXT_TOKENS]
|
|
1799
|
+
]);
|
|
1781
1800
|
function resolveJohnnessOpusContextWindow(providerId, modelId) {
|
|
1782
1801
|
if (normalizeProviderId(String(providerId ?? "")) !== "anthropic") return;
|
|
1783
1802
|
const normalizedModelId = String(modelId ?? "").trim().toLowerCase();
|
|
1784
|
-
|
|
1803
|
+
return JOHNNESS_OPUS_CONTEXT_TOKENS_BY_MODEL.get(normalizedModelId); // JOHNNESS_PATCH_OPUS_55_MODEL
|
|
1785
1804
|
}
|
|
1786
1805
|
/* JOHNNESS_PATCH_ALIAS_LATEST_79: bare shorthands (DEFAULT_MODEL_ALIASES keys without digits) always resolve
|
|
1787
1806
|
* to the newest shipped model in their line. A user alias that claims one but pins an older model of the same
|
|
@@ -1597,6 +1597,17 @@ Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
|
1597
1597
|
opus: "anthropic/claude-opus-5-5",
|
|
1598
1598
|
opus5: "anthropic/claude-opus-5"
|
|
1599
1599
|
});
|
|
1600
|
+
// JOHNNESS_PATCH_DAILY_MODELS_80: GPT-6 Sol/Luna are the newest Sol/Luna; `sol`, `luna` and `gpt` move to them and
|
|
1601
|
+
// the GPT-5.6 models keep sol56/luna56. `grok` names the newest Grok; grok46 keeps Grok 4.6.
|
|
1602
|
+
Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
1603
|
+
sol: "openai-codex/gpt-6-sol",
|
|
1604
|
+
luna: "openai-codex/gpt-6-luna",
|
|
1605
|
+
gpt: "openai-codex/gpt-6-sol",
|
|
1606
|
+
sol56: "openai-codex/gpt-5.6-sol",
|
|
1607
|
+
luna56: "openai-codex/gpt-5.6-luna",
|
|
1608
|
+
grok: "xai/grok-4.7",
|
|
1609
|
+
grok46: "xai/grok-4.6"
|
|
1610
|
+
});
|
|
1600
1611
|
const DEFAULT_MODEL_COST = {
|
|
1601
1612
|
input: 0,
|
|
1602
1613
|
output: 0,
|
|
@@ -1708,11 +1719,19 @@ function applyTalkConfigNormalization(config) {
|
|
|
1708
1719
|
window, but this scoped local ceiling keeps catalog, compaction, preflight,
|
|
1709
1720
|
failover, and session snapshots on the same conservative budget. */
|
|
1710
1721
|
const JOHNNESS_OPUS_CONTEXT_TOKENS = 3e5;
|
|
1711
|
-
const JOHNNESS_OPUS_300K_MODEL_IDS = new Set(["claude-opus-4-8", "claude-opus-5"
|
|
1722
|
+
const JOHNNESS_OPUS_300K_MODEL_IDS = new Set(["claude-opus-4-8", "claude-opus-5"]);
|
|
1723
|
+
/* JOHNNESS_PATCH_OPUS_55_MODEL: per-model owner caps. Opus 4.8 and Opus 5 keep the family 30 300K budget;
|
|
1724
|
+
Claude Opus 5.5 is capped at 500K (1M native). Catalog, compaction and session snapshots
|
|
1725
|
+
all read the resolved contextWindow, so this map is the single source of the cap. */
|
|
1726
|
+
const JOHNNESS_OPUS_55_CONTEXT_TOKENS = 5e5;
|
|
1727
|
+
const JOHNNESS_OPUS_CONTEXT_TOKENS_BY_MODEL = new Map([
|
|
1728
|
+
...[...JOHNNESS_OPUS_300K_MODEL_IDS].map((id) => [id, JOHNNESS_OPUS_CONTEXT_TOKENS]),
|
|
1729
|
+
["claude-opus-5-5", JOHNNESS_OPUS_55_CONTEXT_TOKENS]
|
|
1730
|
+
]);
|
|
1712
1731
|
function resolveJohnnessOpusContextWindow(providerId, modelId) {
|
|
1713
1732
|
if (normalizeProviderId(String(providerId ?? "")) !== "anthropic") return;
|
|
1714
1733
|
const normalizedModelId = String(modelId ?? "").trim().toLowerCase();
|
|
1715
|
-
|
|
1734
|
+
return JOHNNESS_OPUS_CONTEXT_TOKENS_BY_MODEL.get(normalizedModelId); // JOHNNESS_PATCH_OPUS_55_MODEL
|
|
1716
1735
|
}
|
|
1717
1736
|
/* JOHNNESS_PATCH_ALIAS_LATEST_79: bare shorthands (DEFAULT_MODEL_ALIASES keys without digits) always resolve
|
|
1718
1737
|
* to the newest shipped model in their line. A user alias that claims one but pins an older model of the same
|
|
@@ -11,7 +11,15 @@ const MODELS_JSON_WRITE_LOCKS = /* @__PURE__ */ new Map();
|
|
|
11
11
|
models.json is generated from the raw source snapshot. Do not broaden older
|
|
12
12
|
Anthropic models or add aliases. */
|
|
13
13
|
const JOHNNESS_OPUS_CONTEXT_TOKENS = 3e5;
|
|
14
|
-
const JOHNNESS_OPUS_300K_MODEL_IDS = new Set(["claude-opus-4-8", "claude-opus-5"
|
|
14
|
+
const JOHNNESS_OPUS_300K_MODEL_IDS = new Set(["claude-opus-4-8", "claude-opus-5"]);
|
|
15
|
+
/* JOHNNESS_PATCH_OPUS_55_MODEL: per-model owner caps. Opus 4.8 and Opus 5 keep the family 30 300K budget;
|
|
16
|
+
Claude Opus 5.5 is capped at 500K (1M native). Catalog, compaction and session snapshots
|
|
17
|
+
all read the resolved contextWindow, so this map is the single source of the cap. */
|
|
18
|
+
const JOHNNESS_OPUS_55_CONTEXT_TOKENS = 5e5;
|
|
19
|
+
const JOHNNESS_OPUS_CONTEXT_TOKENS_BY_MODEL = new Map([
|
|
20
|
+
...[...JOHNNESS_OPUS_300K_MODEL_IDS].map((id) => [id, JOHNNESS_OPUS_CONTEXT_TOKENS]),
|
|
21
|
+
["claude-opus-5-5", JOHNNESS_OPUS_55_CONTEXT_TOKENS]
|
|
22
|
+
]);
|
|
15
23
|
function applyJohnnessOpusContextWindows(providers) {
|
|
16
24
|
const anthropicKey = Object.keys(providers).find((key) => key.trim().toLowerCase() === "anthropic");
|
|
17
25
|
if (!anthropicKey) return providers;
|
|
@@ -20,11 +28,12 @@ function applyJohnnessOpusContextWindows(providers) {
|
|
|
20
28
|
let mutated = false;
|
|
21
29
|
const models = anthropic.models.map((model) => {
|
|
22
30
|
const modelId = String(model?.id ?? "").trim().toLowerCase();
|
|
23
|
-
|
|
31
|
+
const johnnessOpusCap = JOHNNESS_OPUS_CONTEXT_TOKENS_BY_MODEL.get(modelId); // JOHNNESS_PATCH_OPUS_55_MODEL
|
|
32
|
+
if (!johnnessOpusCap || model.contextWindow === johnnessOpusCap) return model;
|
|
24
33
|
mutated = true;
|
|
25
34
|
return {
|
|
26
35
|
...model,
|
|
27
|
-
contextWindow:
|
|
36
|
+
contextWindow: johnnessOpusCap
|
|
28
37
|
};
|
|
29
38
|
});
|
|
30
39
|
if (!mutated) return providers;
|
|
@@ -11,7 +11,15 @@ const MODELS_JSON_WRITE_LOCKS = /* @__PURE__ */ new Map();
|
|
|
11
11
|
models.json is generated from the raw source snapshot. Do not broaden older
|
|
12
12
|
Anthropic models or add aliases. */
|
|
13
13
|
const JOHNNESS_OPUS_CONTEXT_TOKENS = 3e5;
|
|
14
|
-
const JOHNNESS_OPUS_300K_MODEL_IDS = new Set(["claude-opus-4-8", "claude-opus-5"
|
|
14
|
+
const JOHNNESS_OPUS_300K_MODEL_IDS = new Set(["claude-opus-4-8", "claude-opus-5"]);
|
|
15
|
+
/* JOHNNESS_PATCH_OPUS_55_MODEL: per-model owner caps. Opus 4.8 and Opus 5 keep the family 30 300K budget;
|
|
16
|
+
Claude Opus 5.5 is capped at 500K (1M native). Catalog, compaction and session snapshots
|
|
17
|
+
all read the resolved contextWindow, so this map is the single source of the cap. */
|
|
18
|
+
const JOHNNESS_OPUS_55_CONTEXT_TOKENS = 5e5;
|
|
19
|
+
const JOHNNESS_OPUS_CONTEXT_TOKENS_BY_MODEL = new Map([
|
|
20
|
+
...[...JOHNNESS_OPUS_300K_MODEL_IDS].map((id) => [id, JOHNNESS_OPUS_CONTEXT_TOKENS]),
|
|
21
|
+
["claude-opus-5-5", JOHNNESS_OPUS_55_CONTEXT_TOKENS]
|
|
22
|
+
]);
|
|
15
23
|
function applyJohnnessOpusContextWindows(providers) {
|
|
16
24
|
const anthropicKey = Object.keys(providers).find((key) => key.trim().toLowerCase() === "anthropic");
|
|
17
25
|
if (!anthropicKey) return providers;
|
|
@@ -20,11 +28,12 @@ function applyJohnnessOpusContextWindows(providers) {
|
|
|
20
28
|
let mutated = false;
|
|
21
29
|
const models = anthropic.models.map((model) => {
|
|
22
30
|
const modelId = String(model?.id ?? "").trim().toLowerCase();
|
|
23
|
-
|
|
31
|
+
const johnnessOpusCap = JOHNNESS_OPUS_CONTEXT_TOKENS_BY_MODEL.get(modelId); // JOHNNESS_PATCH_OPUS_55_MODEL
|
|
32
|
+
if (!johnnessOpusCap || model.contextWindow === johnnessOpusCap) return model;
|
|
24
33
|
mutated = true;
|
|
25
34
|
return {
|
|
26
35
|
...model,
|
|
27
|
-
contextWindow:
|
|
36
|
+
contextWindow: johnnessOpusCap
|
|
28
37
|
};
|
|
29
38
|
});
|
|
30
39
|
if (!mutated) return providers;
|
|
@@ -7084,6 +7084,17 @@ Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
|
7084
7084
|
opus: "anthropic/claude-opus-5-5",
|
|
7085
7085
|
opus5: "anthropic/claude-opus-5"
|
|
7086
7086
|
});
|
|
7087
|
+
// JOHNNESS_PATCH_DAILY_MODELS_80: GPT-6 Sol/Luna are the newest Sol/Luna; `sol`, `luna` and `gpt` move to them and
|
|
7088
|
+
// the GPT-5.6 models keep sol56/luna56. `grok` names the newest Grok; grok46 keeps Grok 4.6.
|
|
7089
|
+
Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
7090
|
+
sol: "openai-codex/gpt-6-sol",
|
|
7091
|
+
luna: "openai-codex/gpt-6-luna",
|
|
7092
|
+
gpt: "openai-codex/gpt-6-sol",
|
|
7093
|
+
sol56: "openai-codex/gpt-5.6-sol",
|
|
7094
|
+
luna56: "openai-codex/gpt-5.6-luna",
|
|
7095
|
+
grok: "xai/grok-4.7",
|
|
7096
|
+
grok46: "xai/grok-4.6"
|
|
7097
|
+
});
|
|
7087
7098
|
const DEFAULT_MODEL_COST = {
|
|
7088
7099
|
input: 0,
|
|
7089
7100
|
output: 0,
|
|
@@ -8085,6 +8085,17 @@ Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
|
8085
8085
|
opus: "anthropic/claude-opus-5-5",
|
|
8086
8086
|
opus5: "anthropic/claude-opus-5"
|
|
8087
8087
|
});
|
|
8088
|
+
// JOHNNESS_PATCH_DAILY_MODELS_80: GPT-6 Sol/Luna are the newest Sol/Luna; `sol`, `luna` and `gpt` move to them and
|
|
8089
|
+
// the GPT-5.6 models keep sol56/luna56. `grok` names the newest Grok; grok46 keeps Grok 4.6.
|
|
8090
|
+
Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
8091
|
+
sol: "openai-codex/gpt-6-sol",
|
|
8092
|
+
luna: "openai-codex/gpt-6-luna",
|
|
8093
|
+
gpt: "openai-codex/gpt-6-sol",
|
|
8094
|
+
sol56: "openai-codex/gpt-5.6-sol",
|
|
8095
|
+
luna56: "openai-codex/gpt-5.6-luna",
|
|
8096
|
+
grok: "xai/grok-4.7",
|
|
8097
|
+
grok46: "xai/grok-4.6"
|
|
8098
|
+
});
|
|
8088
8099
|
const DEFAULT_MODEL_COST = {
|
|
8089
8100
|
input: 0,
|
|
8090
8101
|
output: 0,
|
|
@@ -5214,6 +5214,17 @@ Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
|
5214
5214
|
opus: "anthropic/claude-opus-5-5",
|
|
5215
5215
|
opus5: "anthropic/claude-opus-5"
|
|
5216
5216
|
});
|
|
5217
|
+
// JOHNNESS_PATCH_DAILY_MODELS_80: GPT-6 Sol/Luna are the newest Sol/Luna; `sol`, `luna` and `gpt` move to them and
|
|
5218
|
+
// the GPT-5.6 models keep sol56/luna56. `grok` names the newest Grok; grok46 keeps Grok 4.6.
|
|
5219
|
+
Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
5220
|
+
sol: "openai-codex/gpt-6-sol",
|
|
5221
|
+
luna: "openai-codex/gpt-6-luna",
|
|
5222
|
+
gpt: "openai-codex/gpt-6-sol",
|
|
5223
|
+
sol56: "openai-codex/gpt-5.6-sol",
|
|
5224
|
+
luna56: "openai-codex/gpt-5.6-luna",
|
|
5225
|
+
grok: "xai/grok-4.7",
|
|
5226
|
+
grok46: "xai/grok-4.6"
|
|
5227
|
+
});
|
|
5217
5228
|
const DEFAULT_MODEL_COST = {
|
|
5218
5229
|
input: 0,
|
|
5219
5230
|
output: 0,
|
|
@@ -3136,6 +3136,11 @@ const XHIGH_MODEL_REFS = [
|
|
|
3136
3136
|
"meta/muse-spark-1.3", // JOHNNESS_PATCH_MUSE_SPARK
|
|
3137
3137
|
"meta/muse-spark-1.2",
|
|
3138
3138
|
"anthropic/claude-opus-5-5", // JOHNNESS_PATCH_OPUS_55_MODEL
|
|
3139
|
+
"xai/grok-4.7", // JOHNNESS_PATCH_DAILY_MODELS_80
|
|
3140
|
+
"openai/gpt-6-sol",
|
|
3141
|
+
"openai-codex/gpt-6-sol",
|
|
3142
|
+
"openai/gpt-6-luna",
|
|
3143
|
+
"openai-codex/gpt-6-luna",
|
|
3139
3144
|
"xai/grok-4.6",
|
|
3140
3145
|
"openai/gpt-6-astra",
|
|
3141
3146
|
"openai-codex/gpt-6-astra",
|
|
@@ -6005,6 +6005,17 @@ Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
|
6005
6005
|
opus: "anthropic/claude-opus-5-5",
|
|
6006
6006
|
opus5: "anthropic/claude-opus-5"
|
|
6007
6007
|
});
|
|
6008
|
+
// JOHNNESS_PATCH_DAILY_MODELS_80: GPT-6 Sol/Luna are the newest Sol/Luna; `sol`, `luna` and `gpt` move to them and
|
|
6009
|
+
// the GPT-5.6 models keep sol56/luna56. `grok` names the newest Grok; grok46 keeps Grok 4.6.
|
|
6010
|
+
Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
6011
|
+
sol: "openai-codex/gpt-6-sol",
|
|
6012
|
+
luna: "openai-codex/gpt-6-luna",
|
|
6013
|
+
gpt: "openai-codex/gpt-6-sol",
|
|
6014
|
+
sol56: "openai-codex/gpt-5.6-sol",
|
|
6015
|
+
luna56: "openai-codex/gpt-5.6-luna",
|
|
6016
|
+
grok: "xai/grok-4.7",
|
|
6017
|
+
grok46: "xai/grok-4.6"
|
|
6018
|
+
});
|
|
6008
6019
|
const DEFAULT_MODEL_COST = {
|
|
6009
6020
|
input: 0,
|
|
6010
6021
|
output: 0,
|
|
@@ -4974,6 +4974,17 @@ Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
|
4974
4974
|
opus: "anthropic/claude-opus-5-5",
|
|
4975
4975
|
opus5: "anthropic/claude-opus-5"
|
|
4976
4976
|
});
|
|
4977
|
+
// JOHNNESS_PATCH_DAILY_MODELS_80: GPT-6 Sol/Luna are the newest Sol/Luna; `sol`, `luna` and `gpt` move to them and
|
|
4978
|
+
// the GPT-5.6 models keep sol56/luna56. `grok` names the newest Grok; grok46 keeps Grok 4.6.
|
|
4979
|
+
Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
4980
|
+
sol: "openai-codex/gpt-6-sol",
|
|
4981
|
+
luna: "openai-codex/gpt-6-luna",
|
|
4982
|
+
gpt: "openai-codex/gpt-6-sol",
|
|
4983
|
+
sol56: "openai-codex/gpt-5.6-sol",
|
|
4984
|
+
luna56: "openai-codex/gpt-5.6-luna",
|
|
4985
|
+
grok: "xai/grok-4.7",
|
|
4986
|
+
grok46: "xai/grok-4.6"
|
|
4987
|
+
});
|
|
4977
4988
|
const DEFAULT_MODEL_COST = {
|
|
4978
4989
|
input: 0,
|
|
4979
4990
|
output: 0,
|
|
@@ -4978,6 +4978,17 @@ Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
|
4978
4978
|
opus: "anthropic/claude-opus-5-5",
|
|
4979
4979
|
opus5: "anthropic/claude-opus-5"
|
|
4980
4980
|
});
|
|
4981
|
+
// JOHNNESS_PATCH_DAILY_MODELS_80: GPT-6 Sol/Luna are the newest Sol/Luna; `sol`, `luna` and `gpt` move to them and
|
|
4982
|
+
// the GPT-5.6 models keep sol56/luna56. `grok` names the newest Grok; grok46 keeps Grok 4.6.
|
|
4983
|
+
Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
4984
|
+
sol: "openai-codex/gpt-6-sol",
|
|
4985
|
+
luna: "openai-codex/gpt-6-luna",
|
|
4986
|
+
gpt: "openai-codex/gpt-6-sol",
|
|
4987
|
+
sol56: "openai-codex/gpt-5.6-sol",
|
|
4988
|
+
luna56: "openai-codex/gpt-5.6-luna",
|
|
4989
|
+
grok: "xai/grok-4.7",
|
|
4990
|
+
grok46: "xai/grok-4.6"
|
|
4991
|
+
});
|
|
4981
4992
|
const DEFAULT_MODEL_COST = {
|
|
4982
4993
|
input: 0,
|
|
4983
4994
|
output: 0,
|
|
@@ -4978,6 +4978,17 @@ Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
|
4978
4978
|
opus: "anthropic/claude-opus-5-5",
|
|
4979
4979
|
opus5: "anthropic/claude-opus-5"
|
|
4980
4980
|
});
|
|
4981
|
+
// JOHNNESS_PATCH_DAILY_MODELS_80: GPT-6 Sol/Luna are the newest Sol/Luna; `sol`, `luna` and `gpt` move to them and
|
|
4982
|
+
// the GPT-5.6 models keep sol56/luna56. `grok` names the newest Grok; grok46 keeps Grok 4.6.
|
|
4983
|
+
Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
4984
|
+
sol: "openai-codex/gpt-6-sol",
|
|
4985
|
+
luna: "openai-codex/gpt-6-luna",
|
|
4986
|
+
gpt: "openai-codex/gpt-6-sol",
|
|
4987
|
+
sol56: "openai-codex/gpt-5.6-sol",
|
|
4988
|
+
luna56: "openai-codex/gpt-5.6-luna",
|
|
4989
|
+
grok: "xai/grok-4.7",
|
|
4990
|
+
grok46: "xai/grok-4.6"
|
|
4991
|
+
});
|
|
4981
4992
|
const DEFAULT_MODEL_COST = {
|
|
4982
4993
|
input: 0,
|
|
4983
4994
|
output: 0,
|
|
@@ -4787,6 +4787,17 @@ Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
|
4787
4787
|
opus: "anthropic/claude-opus-5-5",
|
|
4788
4788
|
opus5: "anthropic/claude-opus-5"
|
|
4789
4789
|
});
|
|
4790
|
+
// JOHNNESS_PATCH_DAILY_MODELS_80: GPT-6 Sol/Luna are the newest Sol/Luna; `sol`, `luna` and `gpt` move to them and
|
|
4791
|
+
// the GPT-5.6 models keep sol56/luna56. `grok` names the newest Grok; grok46 keeps Grok 4.6.
|
|
4792
|
+
Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
4793
|
+
sol: "openai-codex/gpt-6-sol",
|
|
4794
|
+
luna: "openai-codex/gpt-6-luna",
|
|
4795
|
+
gpt: "openai-codex/gpt-6-sol",
|
|
4796
|
+
sol56: "openai-codex/gpt-5.6-sol",
|
|
4797
|
+
luna56: "openai-codex/gpt-5.6-luna",
|
|
4798
|
+
grok: "xai/grok-4.7",
|
|
4799
|
+
grok46: "xai/grok-4.6"
|
|
4800
|
+
});
|
|
4790
4801
|
const DEFAULT_MODEL_COST = {
|
|
4791
4802
|
input: 0,
|
|
4792
4803
|
output: 0,
|
|
@@ -991,6 +991,11 @@ const XHIGH_MODEL_REFS = [
|
|
|
991
991
|
"meta/muse-spark-1.3", // JOHNNESS_PATCH_MUSE_SPARK
|
|
992
992
|
"meta/muse-spark-1.2",
|
|
993
993
|
"anthropic/claude-opus-5-5", // JOHNNESS_PATCH_OPUS_55_MODEL
|
|
994
|
+
"xai/grok-4.7", // JOHNNESS_PATCH_DAILY_MODELS_80
|
|
995
|
+
"openai/gpt-6-sol",
|
|
996
|
+
"openai-codex/gpt-6-sol",
|
|
997
|
+
"openai/gpt-6-luna",
|
|
998
|
+
"openai-codex/gpt-6-luna",
|
|
994
999
|
"xai/grok-4.6",
|
|
995
1000
|
"openai/gpt-6-astra",
|
|
996
1001
|
"openai-codex/gpt-6-astra",
|
|
@@ -991,6 +991,11 @@ const XHIGH_MODEL_REFS = [
|
|
|
991
991
|
"meta/muse-spark-1.3", // JOHNNESS_PATCH_MUSE_SPARK
|
|
992
992
|
"meta/muse-spark-1.2",
|
|
993
993
|
"anthropic/claude-opus-5-5", // JOHNNESS_PATCH_OPUS_55_MODEL
|
|
994
|
+
"xai/grok-4.7", // JOHNNESS_PATCH_DAILY_MODELS_80
|
|
995
|
+
"openai/gpt-6-sol",
|
|
996
|
+
"openai-codex/gpt-6-sol",
|
|
997
|
+
"openai/gpt-6-luna",
|
|
998
|
+
"openai-codex/gpt-6-luna",
|
|
994
999
|
"xai/grok-4.6",
|
|
995
1000
|
"openai/gpt-6-astra",
|
|
996
1001
|
"openai-codex/gpt-6-astra",
|
|
@@ -991,6 +991,11 @@ const XHIGH_MODEL_REFS = [
|
|
|
991
991
|
"meta/muse-spark-1.3", // JOHNNESS_PATCH_MUSE_SPARK
|
|
992
992
|
"meta/muse-spark-1.2",
|
|
993
993
|
"anthropic/claude-opus-5-5", // JOHNNESS_PATCH_OPUS_55_MODEL
|
|
994
|
+
"xai/grok-4.7", // JOHNNESS_PATCH_DAILY_MODELS_80
|
|
995
|
+
"openai/gpt-6-sol",
|
|
996
|
+
"openai-codex/gpt-6-sol",
|
|
997
|
+
"openai/gpt-6-luna",
|
|
998
|
+
"openai-codex/gpt-6-luna",
|
|
994
999
|
"xai/grok-4.6",
|
|
995
1000
|
"openai/gpt-6-astra",
|
|
996
1001
|
"openai-codex/gpt-6-astra",
|
|
@@ -991,6 +991,11 @@ const XHIGH_MODEL_REFS = [
|
|
|
991
991
|
"meta/muse-spark-1.3", // JOHNNESS_PATCH_MUSE_SPARK
|
|
992
992
|
"meta/muse-spark-1.2",
|
|
993
993
|
"anthropic/claude-opus-5-5", // JOHNNESS_PATCH_OPUS_55_MODEL
|
|
994
|
+
"xai/grok-4.7", // JOHNNESS_PATCH_DAILY_MODELS_80
|
|
995
|
+
"openai/gpt-6-sol",
|
|
996
|
+
"openai-codex/gpt-6-sol",
|
|
997
|
+
"openai/gpt-6-luna",
|
|
998
|
+
"openai-codex/gpt-6-luna",
|
|
994
999
|
"xai/grok-4.6",
|
|
995
1000
|
"openai/gpt-6-astra",
|
|
996
1001
|
"openai-codex/gpt-6-astra",
|
|
@@ -991,6 +991,11 @@ const XHIGH_MODEL_REFS = [
|
|
|
991
991
|
"meta/muse-spark-1.3", // JOHNNESS_PATCH_MUSE_SPARK
|
|
992
992
|
"meta/muse-spark-1.2",
|
|
993
993
|
"anthropic/claude-opus-5-5", // JOHNNESS_PATCH_OPUS_55_MODEL
|
|
994
|
+
"xai/grok-4.7", // JOHNNESS_PATCH_DAILY_MODELS_80
|
|
995
|
+
"openai/gpt-6-sol",
|
|
996
|
+
"openai-codex/gpt-6-sol",
|
|
997
|
+
"openai/gpt-6-luna",
|
|
998
|
+
"openai-codex/gpt-6-luna",
|
|
994
999
|
"xai/grok-4.6",
|
|
995
1000
|
"openai/gpt-6-astra",
|
|
996
1001
|
"openai-codex/gpt-6-astra",
|
|
@@ -1015,6 +1015,11 @@ const XHIGH_MODEL_REFS = [
|
|
|
1015
1015
|
"meta/muse-spark-1.3", // JOHNNESS_PATCH_MUSE_SPARK
|
|
1016
1016
|
"meta/muse-spark-1.2",
|
|
1017
1017
|
"anthropic/claude-opus-5-5", // JOHNNESS_PATCH_OPUS_55_MODEL
|
|
1018
|
+
"xai/grok-4.7", // JOHNNESS_PATCH_DAILY_MODELS_80
|
|
1019
|
+
"openai/gpt-6-sol",
|
|
1020
|
+
"openai-codex/gpt-6-sol",
|
|
1021
|
+
"openai/gpt-6-luna",
|
|
1022
|
+
"openai-codex/gpt-6-luna",
|
|
1018
1023
|
"xai/grok-4.6",
|
|
1019
1024
|
"openai/gpt-6-astra",
|
|
1020
1025
|
"openai-codex/gpt-6-astra",
|
|
@@ -992,6 +992,11 @@ const XHIGH_MODEL_REFS = [
|
|
|
992
992
|
"meta/muse-spark-1.3", // JOHNNESS_PATCH_MUSE_SPARK
|
|
993
993
|
"meta/muse-spark-1.2",
|
|
994
994
|
"anthropic/claude-opus-5-5", // JOHNNESS_PATCH_OPUS_55_MODEL
|
|
995
|
+
"xai/grok-4.7", // JOHNNESS_PATCH_DAILY_MODELS_80
|
|
996
|
+
"openai/gpt-6-sol",
|
|
997
|
+
"openai-codex/gpt-6-sol",
|
|
998
|
+
"openai/gpt-6-luna",
|
|
999
|
+
"openai-codex/gpt-6-luna",
|
|
995
1000
|
"xai/grok-4.6",
|
|
996
1001
|
"openai/gpt-6-astra",
|
|
997
1002
|
"openai-codex/gpt-6-astra",
|
|
@@ -19,6 +19,11 @@ const XHIGH_MODEL_REFS = [
|
|
|
19
19
|
"meta/muse-spark-1.3", // JOHNNESS_PATCH_MUSE_SPARK
|
|
20
20
|
"meta/muse-spark-1.2",
|
|
21
21
|
"anthropic/claude-opus-5-5", // JOHNNESS_PATCH_OPUS_55_MODEL
|
|
22
|
+
"xai/grok-4.7", // JOHNNESS_PATCH_DAILY_MODELS_80
|
|
23
|
+
"openai/gpt-6-sol",
|
|
24
|
+
"openai-codex/gpt-6-sol",
|
|
25
|
+
"openai/gpt-6-luna",
|
|
26
|
+
"openai-codex/gpt-6-luna",
|
|
22
27
|
"xai/grok-4.6",
|
|
23
28
|
"openai/gpt-6-astra",
|
|
24
29
|
"openai-codex/gpt-6-astra",
|
|
@@ -991,6 +991,11 @@ const XHIGH_MODEL_REFS = [
|
|
|
991
991
|
"meta/muse-spark-1.3", // JOHNNESS_PATCH_MUSE_SPARK
|
|
992
992
|
"meta/muse-spark-1.2",
|
|
993
993
|
"anthropic/claude-opus-5-5", // JOHNNESS_PATCH_OPUS_55_MODEL
|
|
994
|
+
"xai/grok-4.7", // JOHNNESS_PATCH_DAILY_MODELS_80
|
|
995
|
+
"openai/gpt-6-sol",
|
|
996
|
+
"openai-codex/gpt-6-sol",
|
|
997
|
+
"openai/gpt-6-luna",
|
|
998
|
+
"openai-codex/gpt-6-luna",
|
|
994
999
|
"xai/grok-4.6",
|
|
995
1000
|
"openai/gpt-6-astra",
|
|
996
1001
|
"openai-codex/gpt-6-astra",
|
|
@@ -19,6 +19,11 @@ const XHIGH_MODEL_REFS = [
|
|
|
19
19
|
"meta/muse-spark-1.3", // JOHNNESS_PATCH_MUSE_SPARK
|
|
20
20
|
"meta/muse-spark-1.2",
|
|
21
21
|
"anthropic/claude-opus-5-5", // JOHNNESS_PATCH_OPUS_55_MODEL
|
|
22
|
+
"xai/grok-4.7", // JOHNNESS_PATCH_DAILY_MODELS_80
|
|
23
|
+
"openai/gpt-6-sol",
|
|
24
|
+
"openai-codex/gpt-6-sol",
|
|
25
|
+
"openai/gpt-6-luna",
|
|
26
|
+
"openai-codex/gpt-6-luna",
|
|
22
27
|
"xai/grok-4.6",
|
|
23
28
|
"openai/gpt-6-astra",
|
|
24
29
|
"openai-codex/gpt-6-astra",
|
package/docs/PATCHES.md
CHANGED
|
@@ -17,7 +17,7 @@ they predate ~2026-06-06).
|
|
|
17
17
|
|
|
18
18
|
## Index
|
|
19
19
|
|
|
20
|
-
Family 01 is retired. Families 02 through 41, 43 through
|
|
20
|
+
Family 01 is retired. Families 02 through 41, 43 through 80, including the 65.1 amendment, are live on `main`; the `latest` and `extended` release lines converged at 2026.9.24. Family 42 is omitted; native Codex OAuth ownership is Family 58.
|
|
21
21
|
|
|
22
22
|
1. **01, announce queue TTL, retired:** Removed the five-minute age filter that could discard delayed sub-agent completion announcements. [Details](#01--announce-ttl-retired-2026-07-30)
|
|
23
23
|
2. **02, failover rotation:** Returns model selection to the highest-priority profile after its cooldown ends. [Details](#02--failover-rotation-undocumented)
|
|
@@ -102,6 +102,10 @@ Family 01 is retired. Families 02 through 41, 43 through 76, including the 65.1
|
|
|
102
102
|
74. **74, context-window compaction:** The local active-session pressure guard becomes single-trigger and model-aware: estimated active-context tokens against 70% of the active model's declared context window, floored at `max(compaction.reserveTokensFloor, 50000)`; the 1 MB byte, 220-message and 3 GiB heap triggers are removed. [Details](#family-74-context-window-compaction)
|
|
103
103
|
75. **75, crash-safe migration cutover:** gated native supervision before old-job bootout, detached forward completer, durable resume and independent health/failure proof. [Details](#75-crash-safe-forward-service-cutover)
|
|
104
104
|
76. **76, registration-safe launchd lifecycle:** `gateway restart` from a gateway child issues `kickstart -k` only, never bootout/unload; plist reloads and updaters hand off to an independently supervised completer with durable receipts; browser timeouts no longer suggest a whole-gateway restart. [Details](#family-76-registration-safe-launchd-lifecycle)
|
|
105
|
+
77. **77, weekly provider reasoning corrections:** DeepSeek V4 sends native low for minimal/low, Meta Muse omits effort when the caller does, Gemini Flash/Lite omit deprecated temperature. [Details](#77-weekly-provider-reasoning-corrections-2026-09-20)
|
|
106
|
+
78. **78, Claude Opus 5.5:** `anthropic/claude-opus-5-5` in the shipped catalog, `opus` moves to it, 500K owner cap since 2026.9.33. [Details](#family-78-claude-opus-55-20269331)
|
|
107
|
+
79. **79, cron reliability and shorthand freshness:** recurring cron transient retry, cron run fallbacks, `cron.failureLog`, and stale shorthand aliases move to the newest shipped model. [Details](#family-79-cron-reliability-and-shorthand-freshness-20269332)
|
|
108
|
+
80. **80, daily model integration:** GPT-6 Sol and GPT-6 Luna (openai + openai-codex) and xAI Grok 4.7 registered; `sol`/`gpt`/`luna` move to GPT-6 with `sol56`/`luna56` kept, `grok` ships on Grok 4.7 with `grok46` kept. [Details](#80---daily-models-80-2026-09-24)
|
|
105
109
|
|
|
106
110
|
---
|
|
107
111
|
|
|
@@ -2803,10 +2807,11 @@ and historical replay; verifier 77.1 checks installed adapter hashes exactly.
|
|
|
2803
2807
|
|
|
2804
2808
|
## Family 78: Claude Opus 5.5 (2026.9.31)
|
|
2805
2809
|
|
|
2806
|
-
- `anthropic/claude-opus-5-5` registered in the shipped pi-ai catalog (marker `JOHNNESS_PATCH_OPUS_55_MODEL`). Id, pricing ($4/$20, cache read $0.20, 5m write $5), 1M native context (
|
|
2810
|
+
- `anthropic/claude-opus-5-5` registered in the shipped pi-ai catalog (marker `JOHNNESS_PATCH_OPUS_55_MODEL`). Id, pricing ($4/$20, cache read $0.20, 5m write $5), 1M native context (500K owner cap since 2026.9.33, see below; 300K at 2026.9.31), 128K max output confirmed against `platform.claude.com/docs/en/models/opus-5-5` and its migration guide on 2026-09-23.
|
|
2807
2811
|
- Adaptive thinking is always on for Opus 5.5 (`thinking.type` disabled/enabled are 400s); the adapter already sends `thinking: {type: "adaptive"}` via the `opus-5` substring gate, and effort maps 1:1 (xhigh and max are distinct). Sampling temperature is dropped for the model. `XHIGH_MODEL_REFS` lists it in all 12 copies.
|
|
2808
2812
|
- `opus` alias moves to Opus 5.5 in all 14 alias copies through a second `Object.assign(DEFAULT_MODEL_ALIASES, ...)` block; `opus5` keeps Claude Opus 5 reachable and the opus-5 entry is untouched. `scripts/check-alias-contract.mjs` evaluates every contract block.
|
|
2809
2813
|
- Exact replay: `scripts/patch-opus-5-5-model.py` with `patches/opus-5-5/changes.json` (31 files, preimage/postimage hashes, `--check`, `--dependency-only`, `--present-only`). Families 53 and 67 reverse the family 78 edits before checking their historical hashes. Verifier 78.1-78.3; 63.12 now expects two contract blocks.
|
|
2814
|
+
- **500K owner cap for Opus 5.5 (2026.9.33).** The family 30 set `JOHNNESS_OPUS_300K_MODEL_IDS` is back to `["claude-opus-4-8", "claude-opus-5"]` and a per-model map `JOHNNESS_OPUS_CONTEXT_TOKENS_BY_MODEL` now drives both cap paths in all five copies: `resolveJohnnessOpusContextWindow` (resolved config, three `model-selection` bundles) and `applyJohnnessOpusContextWindows` (models.json generation, two `models-config` bundles). Opus 4.8 and Opus 5 map to `JOHNNESS_OPUS_CONTEXT_TOKENS = 3e5`; `claude-opus-5-5` maps to `JOHNNESS_OPUS_55_CONTEXT_TOKENS = 5e5`. The shipped catalog entry carries `contextWindow: 500000`. Family 74 compaction, preflight and session snapshots read the resolved `contextWindow`, so no separate budget constant changes; the compaction threshold scales with the cap. Folded into the family 78 exact replay (same 31 files, manifest regenerated from the original preimages). Verifier 78.4-78.7 assert 5e5 for Opus 5.5 and 300K for Opus 4.8/Opus 5 in every cap copy and in the catalog; `tests/opus-55-context-500k.test.mjs` executes both cap functions per bundle.
|
|
2810
2815
|
|
|
2811
2816
|
## Family 79: cron reliability and shorthand freshness (2026.9.32)
|
|
2812
2817
|
|
|
@@ -2816,3 +2821,16 @@ and historical replay; verifier 77.1 checks installed adapter hashes exactly.
|
|
|
2816
2821
|
- **Cron tool timeout noise.** The `cron` tool's gateway calls default to a 180s timeout (was 60s), and a cron `gateway timeout after <n>ms` error no longer appends the automatic "⚠️ ⏰ Cron failed" line to the chat reply; the model still sees the tool error. Other cron errors and other tools still warn. 10 reply/dispatch bundles.
|
|
2817
2822
|
- **Shorthand aliases stay latest** (marker `JOHNNESS_PATCH_ALIAS_LATEST_79`, all 14 alias copies). `johnnessMigrateStaleShorthands79` moves a user alias that claims a shipped bare shorthand (a `DEFAULT_MODEL_ALIASES` key with no digits: opus, sonnet, fable, gpt, gemini, flash, ...) but pins an older model of the same provider and line (every alias token appears in the model id; version tuple strictly lower) to the shipped default; the old model keeps a versioned alias (the shipped one when it exists, e.g. `opus5`, `sonnet46`, else alias + version digits, e.g. `gpt55`). Custom aliases, newer pins, cross-provider (openrouter/...) and cross-line choices are untouched. Applied in memory by `applyModelDefaults` on every config load, and durably at gateway start (config file rewrite through `writeConfigFile`, logged as `gateway: model shorthands moved to the newest shipped models`). Idempotent. Skipped in Nix mode.
|
|
2818
2823
|
- Exact replay: `scripts/patch-cron-reliability.py` with `patches/cron-reliability/changes.json` (37 files, exact before/after edits, `--check`, `--present-only`, `--record`). Families 53, 67 and 78 reverse the family 79 edits before their historical hash checks; the family 65.1 and 66/67 replay fixtures replay family 79 last. Verifier 79.1-79.8; tests `tests/cron-reliability.test.mjs` (27, behavioral: real `applyJobResult` and warning policy sliced from the shipped bundles).
|
|
2824
|
+
|
|
2825
|
+
## 80 - daily-models-80 (2026-09-24)
|
|
2826
|
+
|
|
2827
|
+
First run of the daily model integration. Three models appeared in the authenticated provider lists after the 2026-09-20 audit; each is registered from its official page (checked 2026-09-24) and was wire-probed live.
|
|
2828
|
+
|
|
2829
|
+
- **GPT-6 Sol** (`gpt-6-sol`) and **GPT-6 Luna** (`gpt-6-luna`) on `openai` (Responses, API key) and `openai-codex` (Codex Responses, subscription, cost 0). Sources: <https://developers.openai.com/api/docs/models/gpt-6-sol.md>, <https://developers.openai.com/api/docs/models/gpt-6-luna.md>. 1,050,000 native context (922,000 max input), 128,000 max output, text + image in, reasoning.effort none|low|medium (default)|high|xhigh|max. Sol $2/$10 per MTok (cached $0.20, cache write $2.50); Luna $0.10/$0.50 (cached $0.01, cache write $0.125). Prompts over 272K bill 2x input / 1.5x output, so `contextWindow` is 272,000 like every other GPT entry (marker `JOHNNESS_PATCH_GPT6_SOL_LUNA_CONTEXT_272K`, 4 entries). Live probes showed `minimal` is rejected and `temperature` is rejected unless effort is `none` (same as the GPT-5.6 line), so the Responses and Codex adapters drop `temperature` for GPT-6 Sol/Luna unless effort is `none`.
|
|
2830
|
+
- **Grok 4.7** (`grok-4.7`, xai, Chat Completions). Source: <https://docs.x.ai/developers/models/grok-4.7>. 500K native context, text + image in, function calling and structured outputs, efforts low|medium|high|xhigh (default high; `none` and `max` return 400 live, `minimal` is accepted), $2/$6 per MTok below 200K prompt tokens ($4/$12 at or above), cached input $0.50. The 4.7 page does not publish a max output, so the Grok 4.6 value (64,000) is kept; `contextWindow` is 200,000 like Grok 4.6 (family 46; marker `JOHNNESS_PATCH_GROK_47_CONTEXT_200K`). `compat.supportsReasoningEffort` as on 4.6.
|
|
2831
|
+
- **xhigh gates.** `supportsXhigh` gains two new branches (GPT-6 Sol/Luna on openai + openai-codex; Grok 4.7 on xai). The Grok 4.6 and Astra branches are untouched. `XHIGH_MODEL_REFS` lists `xai/grok-4.7` and the four GPT-6 refs in all 12 copies, directly after the family 78 Opus 5.5 ref.
|
|
2832
|
+
- **Aliases** (marker `JOHNNESS_PATCH_DAILY_MODELS_80`, a third `Object.assign(DEFAULT_MODEL_ALIASES, ...)` block in all 14 copies): `sol` and `gpt` -> `openai-codex/gpt-6-sol`, `luna` -> `openai-codex/gpt-6-luna`, `sol56`/`luna56` keep the GPT-5.6 models, `grok` -> `xai/grok-4.7` (new in the shipped table), `grok46` keeps Grok 4.6. `terra` (no GPT-6 Terra), `astra`, `opus`, `sonnet`, `deepseek` (Flash), `deepseek-pro`, `muse`, `gemini`, `banana` and `image` are unchanged. No `gpt56` is shipped; the family 79 migration creates it only for a legacy `gpt` pin. On the next config load the family 79 migration moves user aliases that pin `gpt-5.6-sol`/`gpt-5.6-luna`/`grok-4.6` under `sol`/`luna`/`grok` to the new models and gives the old model `sol56`/`luna56`/`grok46`.
|
|
2833
|
+
- **Exact replay.** `scripts/patch-daily-models-80.py` with `patches/daily-models-80/changes.json` (31 files: catalog, `models.js`, both Responses adapters, family 53's reviewed Responses snapshot, 12 thinking copies, 14 alias copies). Preimage/postimage sha256, all-file preflight, `--check`, `--record`, `--dependency-only`, `--present-only`. Families 53, 67, 77 and 78 reverse the family 80 edits before their historical hash checks (77 re-layers them after replaying its own edits); the family 67 replay fixture now replays 78, 79 and 80 in order, which also restores the `27 runtime surfaces` historical replay that had lacked the family 78 layer.
|
|
2834
|
+
- Verifier 80.1-80.17; 63.12 now expects three contract blocks. Tests: `tests/daily-models-80.test.mjs` (catalog in both the overlay and installed pi-ai, xhigh gates, temperature gate on the real adapter, 12 xhigh copies, 14 alias copies, the family 79 migration, exact replay and older-family replays). Counts pinned by `gpt-6-astra-model`, `grok-46-model` and the family 79 migration fixture were updated.
|
|
2835
|
+
- Live probes 2026-09-24 (16 max tokens, "Reply OK"): `gpt-6-sol` and `gpt-6-luna` 200 via the OpenAI API key (effort none, max); `grok-4.7` 200 via the xAI key (low, xhigh, minimal). The Codex subscription entries were not probed directly.
|
|
2836
|
+
- Roll back with `npm i -g johns-harness@2026.9.33`.
|
package/docs/PROVIDER-CATALOG.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Current provider catalog — checked 2026-09-20
|
|
1
|
+
# Current provider catalog — checked 2026-09-20, daily model update 2026-09-24
|
|
2
2
|
|
|
3
3
|
Family 67 audits general-purpose agent models against first-party documentation and
|
|
4
4
|
provider-authenticated model lists. It is a targeted registry/adapter refresh on the
|
|
@@ -11,9 +11,9 @@ pinned 2026.3.7 foundation, not an upstream upgrade or a default-model change.
|
|
|
11
11
|
| DeepSeek | `deepseek-flash`, `deepseek-v4-pro` | Chat Completions, `https://api.deepseek.com` | Flash: text/image; Pro: text | 1,048,576 context; 393,216 output |
|
|
12
12
|
| Meta | `muse-spark-1.3` (current), `muse-spark-1.2` (retained) | Responses, `https://api.meta.ai/v1` | text/image | 1,048,576 context; 131,072 output |
|
|
13
13
|
| Google | `gemini-3.8-flash`, `gemini-3.5-flash-lite`; `gemini-3.1-pro-preview` remains explicitly preview | native `generateContent` | text/image in pi-ai; native API also accepts other media | 1,048,576 input; 65,536 output |
|
|
14
|
-
| OpenAI | `gpt-6-astra`, `gpt-5.6-sol`, `gpt-5.6-terra`, `gpt-5.6-luna` | Responses on API-key provider; Codex Responses on subscription | text/image | Native API 1,050,000 context / 922,000 input / 128,000 output; existing 272,000 effective harness context retained |
|
|
14
|
+
| OpenAI | `gpt-6-astra`, `gpt-6-sol`, `gpt-6-luna` (Family 80), `gpt-5.6-sol`, `gpt-5.6-terra`, `gpt-5.6-luna` | Responses on API-key provider; Codex Responses on subscription | text/image | Native API 1,050,000 context / 922,000 input / 128,000 output; existing 272,000 effective harness context retained |
|
|
15
15
|
| Anthropic | `claude-fable-5-1`, `claude-opus-5`, `claude-sonnet-5` | native Messages | text/image | Native 1M context / 128,000 output; Fable/Opus 300K owner caps retained, Sonnet existing 175K effective context retained |
|
|
16
|
-
| xAI | `grok-4.6` | Chat Completions | text/image | Native 500K context; exactly 200K owner cap retained; 64K output |
|
|
16
|
+
| xAI | `grok-4.7` (Family 80, current), `grok-4.6` (retained) | Chat Completions | text/image | Native 500K context; exactly 200K owner cap retained; 64K output (4.7 does not publish a max output; the 4.6 value is kept) |
|
|
17
17
|
|
|
18
18
|
`deepseek-flash` is **DeepSeek V4.1 Flash**, not “V1-flash.” The authenticated
|
|
19
19
|
DeepSeek `/models` response returns exactly `deepseek-flash` and `deepseek-v4-pro`.
|
|
@@ -21,6 +21,13 @@ The latter currently points to DeepSeek V4 Pro 0813. Legacy upstream aliases
|
|
|
21
21
|
`deepseek-v4-flash` / `deepseek-v4-flash-vision-exp` are documented routing aliases,
|
|
22
22
|
not additional independently discovered models. No invented V1 ID is registered.
|
|
23
23
|
|
|
24
|
+
**Family 80 (2026-09-24 daily check).** `gpt-6-sol` and `gpt-6-luna` (openai and
|
|
25
|
+
openai-codex) and `grok-4.7` (xai) appeared in the authenticated model lists after the
|
|
26
|
+
Sep 20 audit and are registered. Shipped aliases: `sol` and `gpt` resolve to
|
|
27
|
+
`openai-codex/gpt-6-sol`, `luna` to `openai-codex/gpt-6-luna`; the 5.6 models keep
|
|
28
|
+
`sol56` and `luna56`; `grok` resolves to `xai/grok-4.7` and `grok46` keeps Grok 4.6.
|
|
29
|
+
`terra`, `astra`, Claude, DeepSeek, Gemini and Meta aliases are unchanged.
|
|
30
|
+
|
|
24
31
|
Existing older catalog IDs and saved-session references remain intact. No current
|
|
25
32
|
alias was swung to a less-capable preview. Contributor/training-enabled Meta tiers,
|
|
26
33
|
marketing-only releases, account-gated Mythos variants absent from this account's
|
|
@@ -60,9 +67,13 @@ Registry presence does not promise account entitlement.
|
|
|
60
67
|
with explicit low-level `reasoningEffort: "none"`; omission retains the model's
|
|
61
68
|
default reasoning. Native API supports max on Astra and the 5.6 family; the pinned
|
|
62
69
|
public thinking enum still tops out at xhigh. Transport token ceilings are not
|
|
63
|
-
raised merely because the provider advertises a larger native window.
|
|
70
|
+
raised merely because the provider advertises a larger native window. GPT-6 Sol
|
|
71
|
+
and Luna (Family 80) accept none|low|medium|high|xhigh|max (not minimal) and reject
|
|
72
|
+
`temperature` unless effort is none, verified live; the Responses and Codex
|
|
73
|
+
adapters drop it in that case, like the 5.6 line.
|
|
64
74
|
- **Grok:** existing native effort mapping and 200K owner cap retained; live low
|
|
65
|
-
and xhigh effort requests accepted by `grok-4.6
|
|
75
|
+
and xhigh effort requests accepted by `grok-4.6` and `grok-4.7` (minimal also
|
|
76
|
+
accepted by 4.7; none and max return 400).
|
|
66
77
|
|
|
67
78
|
The pinned high-level API represents `/think off` as an absent reasoning option on
|
|
68
79
|
some routes. Consequently omission and explicit off cannot be distinguished there;
|
|
@@ -80,12 +91,15 @@ change global thinking semantics.
|
|
|
80
91
|
| Muse Spark Standard 1.3 | 1.25 | 4.25 | 0.15 | n/a |
|
|
81
92
|
| Gemini 3.5 Flash-Lite | 0.30 | 2.50 | 0.03 | storage billed separately |
|
|
82
93
|
| GPT-6 Astra | 10 | 50 | 1 | 12.50 |
|
|
94
|
+
| GPT-6 Sol | 2 | 10 | 0.20 | 2.50 |
|
|
95
|
+
| GPT-6 Luna | 0.10 | 0.50 | 0.01 | 0.125 |
|
|
83
96
|
| GPT-5.6 Sol | 4 | 20 | 0.40 | 5 |
|
|
84
97
|
| GPT-5.6 Terra | 2 | 12 | 0.20 | 2.50 |
|
|
85
98
|
| GPT-5.6 Luna | 0.20 | 1.20 | 0.02 | 0.25 |
|
|
86
99
|
| Claude Sonnet 5 | 2 | 10 | 0.20 | 2.50 (5m) |
|
|
87
100
|
| Claude Opus 5 | 5 | 25 | 0.50 | 6.25 (5m) |
|
|
88
101
|
| Claude Fable 5.1 | 10 | 50 | 0.25 | 12.50 (5m) |
|
|
102
|
+
| Grok 4.7 | 2 | 6 | 0.50 | n/a |
|
|
89
103
|
| Grok 4.6 | 2 | 6 | 0.50 | n/a |
|
|
90
104
|
|
|
91
105
|
Family 61 originally copied Astra pricing into all OpenAI 5.6 entries; those values
|
|
@@ -118,6 +132,8 @@ requests were sent only to the relevant official host, with redirects disabled.
|
|
|
118
132
|
<https://ai.google.dev/gemini-api/docs/pricing>; redirect-loop pages recovered
|
|
119
133
|
through Exa. Authenticated native `v1beta/models` confirmed IDs and token limits.
|
|
120
134
|
- OpenAI: <https://developers.openai.com/api/docs/models/gpt-6-astra.md>,
|
|
135
|
+
<https://developers.openai.com/api/docs/models/gpt-6-sol.md>,
|
|
136
|
+
<https://developers.openai.com/api/docs/models/gpt-6-luna.md> (2026-09-24),
|
|
121
137
|
<https://developers.openai.com/api/docs/models/gpt-5.6-sol.md>,
|
|
122
138
|
<https://developers.openai.com/api/docs/models/gpt-5.6-terra.md>,
|
|
123
139
|
<https://developers.openai.com/api/docs/models/gpt-5.6-luna.md>,
|
|
@@ -132,12 +148,17 @@ requests were sent only to the relevant official host, with redirects disabled.
|
|
|
132
148
|
capabilities, and live xhigh inference agree they are now available. The old
|
|
133
149
|
historical note is not current capability policy.
|
|
134
150
|
- xAI: <https://docs.x.ai/developers/models>,
|
|
135
|
-
<https://docs.x.ai/developers/models/grok-4.6
|
|
151
|
+
<https://docs.x.ai/developers/models/grok-4.6>,
|
|
152
|
+
<https://docs.x.ai/developers/models/grok-4.7> (2026-09-24);
|
|
136
153
|
authenticated `GET https://api.x.ai/v1/models` confirmed current model, 500K native
|
|
137
154
|
context, prices and long-context threshold.
|
|
138
155
|
|
|
139
156
|
Harmless direct HTTP inference returned 200 on DeepSeek Flash/Pro, Astra API,
|
|
140
157
|
Gemini 3.8 Flash and 3.5 Flash-Lite, Grok 4.6, and Claude Fable 5.1/Opus 5/Sonnet 5.
|
|
158
|
+
On 2026-09-24 (Family 80) direct HTTP inference returned 200 on `gpt-6-sol` and
|
|
159
|
+
`gpt-6-luna` (OpenAI API key, Responses) and `grok-4.7` (xAI key, Chat Completions).
|
|
160
|
+
The Codex subscription entries were not probed directly; they share the Codex
|
|
161
|
+
Responses transport already used by the GPT-5.6 and Astra subscription entries.
|
|
141
162
|
Claude native xhigh and Gemini Lite MINIMAL were specifically exercised. Direct
|
|
142
163
|
provider probes are not represented as ChatGPT subscription entitlement checks.
|
|
143
164
|
Offline tests additionally cover actual local HTTP/SSE DeepSeek parsing, tool calls,
|
|
@@ -1670,7 +1670,8 @@ export const MODELS = {
|
|
|
1670
1670
|
date suffix) confirmed against platform.claude.com/docs/en/models/opus-5-5 on
|
|
1671
1671
|
2026-09-23: $4/$20 per MTok, cache reads $0.20, 5m cache writes $5, 1M native
|
|
1672
1672
|
context, 128K max output, adaptive thinking always on (effort is the only control,
|
|
1673
|
-
default medium). contextWindow capped at
|
|
1673
|
+
default medium). contextWindow capped at 500K (owner cap for Opus 5.5; Opus 4.8 and
|
|
1674
|
+
Opus 5 keep the family 30 300K budget). */
|
|
1674
1675
|
"claude-opus-5-5": {
|
|
1675
1676
|
id: "claude-opus-5-5",
|
|
1676
1677
|
name: "Claude Opus 5.5",
|
|
@@ -1685,7 +1686,7 @@ export const MODELS = {
|
|
|
1685
1686
|
cacheRead: 0.2,
|
|
1686
1687
|
cacheWrite: 5,
|
|
1687
1688
|
},
|
|
1688
|
-
contextWindow:
|
|
1689
|
+
contextWindow: 500000,
|
|
1689
1690
|
maxTokens: 128000,
|
|
1690
1691
|
},
|
|
1691
1692
|
/* JOHNNESS_PATCH_DEFAULTS_61 (family 61): Claude Opus 5; native 1M window; 300K per family 30 Opus budget. */
|
|
@@ -5691,6 +5692,52 @@ export const MODELS = {
|
|
|
5691
5692
|
contextWindow: 272000, // JOHNNESS_PATCH_GPT6_ASTRA_CONTEXT_272K
|
|
5692
5693
|
maxTokens: 128000,
|
|
5693
5694
|
},
|
|
5695
|
+
/* JOHNNESS_PATCH_GPT6_SOL_LUNA_MODEL (family 80, JOHNNESS_PATCH_DAILY_MODELS_80): GPT-6 Sol via the API-key provider.
|
|
5696
|
+
developers.openai.com/api/docs/models/gpt-6-sol (checked 2026-09-24): 1,050,000 native
|
|
5697
|
+
context (922,000 max input), 128,000 max output, text + image input, Responses +
|
|
5698
|
+
Chat Completions, reasoning.effort none|low|medium|high|xhigh|max. $2/$10 per MTok, cached $0.20,
|
|
5699
|
+
cache write $2.50.
|
|
5700
|
+
contextWindow capped at 272,000 (the 2x-price cliff; standing GPT-line cap). */
|
|
5701
|
+
"gpt-6-sol": {
|
|
5702
|
+
id: "gpt-6-sol",
|
|
5703
|
+
name: "GPT-6 Sol",
|
|
5704
|
+
api: "openai-responses",
|
|
5705
|
+
provider: "openai",
|
|
5706
|
+
baseUrl: "https://api.openai.com/v1",
|
|
5707
|
+
reasoning: true,
|
|
5708
|
+
input: ["text", "image"],
|
|
5709
|
+
cost: {
|
|
5710
|
+
input: 2,
|
|
5711
|
+
output: 10,
|
|
5712
|
+
cacheRead: 0.2,
|
|
5713
|
+
cacheWrite: 2.5,
|
|
5714
|
+
},
|
|
5715
|
+
contextWindow: 272000, // JOHNNESS_PATCH_GPT6_SOL_LUNA_CONTEXT_272K
|
|
5716
|
+
maxTokens: 128000,
|
|
5717
|
+
},
|
|
5718
|
+
/* JOHNNESS_PATCH_GPT6_SOL_LUNA_MODEL (family 80, JOHNNESS_PATCH_DAILY_MODELS_80): GPT-6 Luna via the API-key provider.
|
|
5719
|
+
developers.openai.com/api/docs/models/gpt-6-luna (checked 2026-09-24): 1,050,000 native
|
|
5720
|
+
context (922,000 max input), 128,000 max output, text + image input, Responses +
|
|
5721
|
+
Chat Completions, reasoning.effort none|low|medium|high|xhigh|max. $0.10/$0.50 per MTok, cached
|
|
5722
|
+
$0.01, cache write $0.125.
|
|
5723
|
+
contextWindow capped at 272,000 (the 2x-price cliff; standing GPT-line cap). */
|
|
5724
|
+
"gpt-6-luna": {
|
|
5725
|
+
id: "gpt-6-luna",
|
|
5726
|
+
name: "GPT-6 Luna",
|
|
5727
|
+
api: "openai-responses",
|
|
5728
|
+
provider: "openai",
|
|
5729
|
+
baseUrl: "https://api.openai.com/v1",
|
|
5730
|
+
reasoning: true,
|
|
5731
|
+
input: ["text", "image"],
|
|
5732
|
+
cost: {
|
|
5733
|
+
input: 0.1,
|
|
5734
|
+
output: 0.5,
|
|
5735
|
+
cacheRead: 0.01,
|
|
5736
|
+
cacheWrite: 0.125,
|
|
5737
|
+
},
|
|
5738
|
+
contextWindow: 272000, // JOHNNESS_PATCH_GPT6_SOL_LUNA_CONTEXT_272K
|
|
5739
|
+
maxTokens: 128000,
|
|
5740
|
+
},
|
|
5694
5741
|
/* JOHNNESS_PATCH_GPT_IMAGE_62 (family 62): GPT Image 2 via the API-key provider. Image generation and editing only
|
|
5695
5742
|
(Images API generations/edits); not a chat model. Cost per MTok: text+image input $5, image output $40. */
|
|
5696
5743
|
"gpt-image-2": {
|
|
@@ -6042,6 +6089,44 @@ export const MODELS = {
|
|
|
6042
6089
|
contextWindow: 128000,
|
|
6043
6090
|
maxTokens: 128000,
|
|
6044
6091
|
},
|
|
6092
|
+
/* JOHNNESS_PATCH_GPT6_SOL_LUNA_MODEL (family 80, JOHNNESS_PATCH_DAILY_MODELS_80): GPT-6 Sol (Codex) via the ChatGPT-subscription Codex OAuth
|
|
6093
|
+
provider (subscription-billed, cost 0, same shape as gpt-6-astra). */
|
|
6094
|
+
"gpt-6-sol": {
|
|
6095
|
+
id: "gpt-6-sol",
|
|
6096
|
+
name: "GPT-6 Sol (Codex)",
|
|
6097
|
+
api: "openai-codex-responses",
|
|
6098
|
+
provider: "openai-codex",
|
|
6099
|
+
baseUrl: "https://chatgpt.com/backend-api",
|
|
6100
|
+
reasoning: true,
|
|
6101
|
+
input: ["text", "image"],
|
|
6102
|
+
cost: {
|
|
6103
|
+
input: 0,
|
|
6104
|
+
output: 0,
|
|
6105
|
+
cacheRead: 0,
|
|
6106
|
+
cacheWrite: 0,
|
|
6107
|
+
},
|
|
6108
|
+
contextWindow: 272000, // JOHNNESS_PATCH_GPT6_SOL_LUNA_CONTEXT_272K
|
|
6109
|
+
maxTokens: 128000,
|
|
6110
|
+
},
|
|
6111
|
+
/* JOHNNESS_PATCH_GPT6_SOL_LUNA_MODEL (family 80, JOHNNESS_PATCH_DAILY_MODELS_80): GPT-6 Luna (Codex) via the ChatGPT-subscription Codex OAuth
|
|
6112
|
+
provider (subscription-billed, cost 0, same shape as gpt-6-astra). */
|
|
6113
|
+
"gpt-6-luna": {
|
|
6114
|
+
id: "gpt-6-luna",
|
|
6115
|
+
name: "GPT-6 Luna (Codex)",
|
|
6116
|
+
api: "openai-codex-responses",
|
|
6117
|
+
provider: "openai-codex",
|
|
6118
|
+
baseUrl: "https://chatgpt.com/backend-api",
|
|
6119
|
+
reasoning: true,
|
|
6120
|
+
input: ["text", "image"],
|
|
6121
|
+
cost: {
|
|
6122
|
+
input: 0,
|
|
6123
|
+
output: 0,
|
|
6124
|
+
cacheRead: 0,
|
|
6125
|
+
cacheWrite: 0,
|
|
6126
|
+
},
|
|
6127
|
+
contextWindow: 272000, // JOHNNESS_PATCH_GPT6_SOL_LUNA_CONTEXT_272K
|
|
6128
|
+
maxTokens: 128000,
|
|
6129
|
+
},
|
|
6045
6130
|
/* JOHNNESS_PATCH_GPT_IMAGE_62 (family 62): GPT Image 2 via the ChatGPT-subscription Codex OAuth provider (cost 0).
|
|
6046
6131
|
Preferred by image_generate; the tool falls back to openai/gpt-image-2 when the subscription
|
|
6047
6132
|
backend rejects the request (unsupported or usage limit). */
|
|
@@ -13206,6 +13291,30 @@ export const MODELS = {
|
|
|
13206
13291
|
contextWindow: 256000,
|
|
13207
13292
|
maxTokens: 64000,
|
|
13208
13293
|
},
|
|
13294
|
+
/* JOHNNESS_PATCH_GROK_47_MODEL (family 80, JOHNNESS_PATCH_DAILY_MODELS_80): xAI Grok 4.7. docs.x.ai/developers/models/grok-4.7
|
|
13295
|
+
(checked 2026-09-24): native 500K context, text + image input, function calling,
|
|
13296
|
+
structured outputs, reasoning_effort low|medium|high|xhigh (default high; none and
|
|
13297
|
+
max rejected live), $2/$6 per MTok below 200K prompt tokens ($4/$12 at or above),
|
|
13298
|
+
cached input $0.50. Max output is unpublished; the Grok 4.6 value is kept.
|
|
13299
|
+
contextWindow capped at 200K like Grok 4.6 (family 46). */
|
|
13300
|
+
"grok-4.7": {
|
|
13301
|
+
id: "grok-4.7",
|
|
13302
|
+
name: "Grok 4.7",
|
|
13303
|
+
api: "openai-completions",
|
|
13304
|
+
provider: "xai",
|
|
13305
|
+
baseUrl: "https://api.x.ai/v1",
|
|
13306
|
+
reasoning: true,
|
|
13307
|
+
input: ["text", "image"],
|
|
13308
|
+
cost: {
|
|
13309
|
+
input: 2,
|
|
13310
|
+
output: 6,
|
|
13311
|
+
cacheRead: 0.5,
|
|
13312
|
+
cacheWrite: 0,
|
|
13313
|
+
},
|
|
13314
|
+
contextWindow: 200000, // JOHNNESS_PATCH_GROK_47_CONTEXT_200K
|
|
13315
|
+
maxTokens: 64000,
|
|
13316
|
+
compat: { "supportsReasoningEffort": true },
|
|
13317
|
+
},
|
|
13209
13318
|
/* JOHNNESS_PATCH_GROK_46_MODEL: xAI Grok 4.6. Facts verified against the
|
|
13210
13319
|
live xAI API and docs on 2026-08-30. Native 500K context, text + image
|
|
13211
13320
|
input, function calling, and reasoning that cannot be disabled. Family
|
|
@@ -62,6 +62,15 @@ export function supportsXhigh(model) {
|
|
|
62
62
|
if (model.id.startsWith("gpt-5.6") && (model.provider === "openai" || model.provider === "openai-codex")) {
|
|
63
63
|
return true;
|
|
64
64
|
}
|
|
65
|
+
// JOHNNESS_PATCH_GPT6_SOL_LUNA_MODEL (JOHNNESS_PATCH_DAILY_MODELS_80): GPT-6 Sol and Luna document reasoning.effort
|
|
66
|
+
// none|low|medium|high|xhigh|max on both the API-key and Codex OAuth providers.
|
|
67
|
+
if ((model.id === "gpt-6-sol" || model.id === "gpt-6-luna") && (model.provider === "openai" || model.provider === "openai-codex")) {
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
// JOHNNESS_PATCH_GROK_47_MODEL (JOHNNESS_PATCH_DAILY_MODELS_80): xAI Grok 4.7 accepts reasoning_effort "xhigh" natively.
|
|
71
|
+
if (model.provider === "xai" && model.id === "grok-4.7") {
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
65
74
|
if (model.api === "anthropic-messages") {
|
|
66
75
|
return model.id.includes("opus-4-6") || model.id.includes("opus-4.6");
|
|
67
76
|
}
|
|
@@ -300,6 +300,9 @@ function buildRequestBody(model, context, options) {
|
|
|
300
300
|
(/^gpt-5\.6-(sol|terra|luna)$/.test(model.id) && options?.reasoningEffort !== "none"))) { // JOHNNESS_PATCH_PROVIDER_CATALOG_67
|
|
301
301
|
body.temperature = options.temperature;
|
|
302
302
|
}
|
|
303
|
+
// JOHNNESS_PATCH_DAILY_MODELS_80: GPT-6 Sol/Luna reject temperature unless reasoning.effort is none (live 400,
|
|
304
|
+
// 2026-09-24), the same rule as the GPT-5.6 line above.
|
|
305
|
+
if ((model.id === "gpt-6-sol" || model.id === "gpt-6-luna") && options?.reasoningEffort !== "none") delete body.temperature;
|
|
303
306
|
if (context.tools) {
|
|
304
307
|
body.tools = convertResponsesTools(context.tools, { strict: null });
|
|
305
308
|
}
|
|
@@ -145,6 +145,9 @@ function buildParams(model, context, options) {
|
|
|
145
145
|
(/^gpt-5\.6-(sol|terra|luna)$/.test(model.id) && options?.reasoningEffort !== "none"))) { // JOHNNESS_PATCH_PROVIDER_CATALOG_67
|
|
146
146
|
params.temperature = options?.temperature;
|
|
147
147
|
}
|
|
148
|
+
// JOHNNESS_PATCH_DAILY_MODELS_80: GPT-6 Sol/Luna reject temperature unless reasoning.effort is none (live 400,
|
|
149
|
+
// 2026-09-24), the same rule as the GPT-5.6 line above.
|
|
150
|
+
if ((model.id === "gpt-6-sol" || model.id === "gpt-6-luna") && options?.reasoningEffort !== "none") delete params.temperature;
|
|
148
151
|
if (options?.serviceTier !== undefined) {
|
|
149
152
|
params.service_tier = options.serviceTier;
|
|
150
153
|
}
|
package/package.json
CHANGED
|
@@ -1670,7 +1670,8 @@ export const MODELS = {
|
|
|
1670
1670
|
date suffix) confirmed against platform.claude.com/docs/en/models/opus-5-5 on
|
|
1671
1671
|
2026-09-23: $4/$20 per MTok, cache reads $0.20, 5m cache writes $5, 1M native
|
|
1672
1672
|
context, 128K max output, adaptive thinking always on (effort is the only control,
|
|
1673
|
-
default medium). contextWindow capped at
|
|
1673
|
+
default medium). contextWindow capped at 500K (owner cap for Opus 5.5; Opus 4.8 and
|
|
1674
|
+
Opus 5 keep the family 30 300K budget). */
|
|
1674
1675
|
"claude-opus-5-5": {
|
|
1675
1676
|
id: "claude-opus-5-5",
|
|
1676
1677
|
name: "Claude Opus 5.5",
|
|
@@ -1685,7 +1686,7 @@ export const MODELS = {
|
|
|
1685
1686
|
cacheRead: 0.2,
|
|
1686
1687
|
cacheWrite: 5,
|
|
1687
1688
|
},
|
|
1688
|
-
contextWindow:
|
|
1689
|
+
contextWindow: 500000,
|
|
1689
1690
|
maxTokens: 128000,
|
|
1690
1691
|
},
|
|
1691
1692
|
/* JOHNNESS_PATCH_DEFAULTS_61 (family 61): Claude Opus 5; native 1M window; 300K per family 30 Opus budget. */
|
|
@@ -5691,6 +5692,52 @@ export const MODELS = {
|
|
|
5691
5692
|
contextWindow: 272000, // JOHNNESS_PATCH_GPT6_ASTRA_CONTEXT_272K
|
|
5692
5693
|
maxTokens: 128000,
|
|
5693
5694
|
},
|
|
5695
|
+
/* JOHNNESS_PATCH_GPT6_SOL_LUNA_MODEL (family 80, JOHNNESS_PATCH_DAILY_MODELS_80): GPT-6 Sol via the API-key provider.
|
|
5696
|
+
developers.openai.com/api/docs/models/gpt-6-sol (checked 2026-09-24): 1,050,000 native
|
|
5697
|
+
context (922,000 max input), 128,000 max output, text + image input, Responses +
|
|
5698
|
+
Chat Completions, reasoning.effort none|low|medium|high|xhigh|max. $2/$10 per MTok, cached $0.20,
|
|
5699
|
+
cache write $2.50.
|
|
5700
|
+
contextWindow capped at 272,000 (the 2x-price cliff; standing GPT-line cap). */
|
|
5701
|
+
"gpt-6-sol": {
|
|
5702
|
+
id: "gpt-6-sol",
|
|
5703
|
+
name: "GPT-6 Sol",
|
|
5704
|
+
api: "openai-responses",
|
|
5705
|
+
provider: "openai",
|
|
5706
|
+
baseUrl: "https://api.openai.com/v1",
|
|
5707
|
+
reasoning: true,
|
|
5708
|
+
input: ["text", "image"],
|
|
5709
|
+
cost: {
|
|
5710
|
+
input: 2,
|
|
5711
|
+
output: 10,
|
|
5712
|
+
cacheRead: 0.2,
|
|
5713
|
+
cacheWrite: 2.5,
|
|
5714
|
+
},
|
|
5715
|
+
contextWindow: 272000, // JOHNNESS_PATCH_GPT6_SOL_LUNA_CONTEXT_272K
|
|
5716
|
+
maxTokens: 128000,
|
|
5717
|
+
},
|
|
5718
|
+
/* JOHNNESS_PATCH_GPT6_SOL_LUNA_MODEL (family 80, JOHNNESS_PATCH_DAILY_MODELS_80): GPT-6 Luna via the API-key provider.
|
|
5719
|
+
developers.openai.com/api/docs/models/gpt-6-luna (checked 2026-09-24): 1,050,000 native
|
|
5720
|
+
context (922,000 max input), 128,000 max output, text + image input, Responses +
|
|
5721
|
+
Chat Completions, reasoning.effort none|low|medium|high|xhigh|max. $0.10/$0.50 per MTok, cached
|
|
5722
|
+
$0.01, cache write $0.125.
|
|
5723
|
+
contextWindow capped at 272,000 (the 2x-price cliff; standing GPT-line cap). */
|
|
5724
|
+
"gpt-6-luna": {
|
|
5725
|
+
id: "gpt-6-luna",
|
|
5726
|
+
name: "GPT-6 Luna",
|
|
5727
|
+
api: "openai-responses",
|
|
5728
|
+
provider: "openai",
|
|
5729
|
+
baseUrl: "https://api.openai.com/v1",
|
|
5730
|
+
reasoning: true,
|
|
5731
|
+
input: ["text", "image"],
|
|
5732
|
+
cost: {
|
|
5733
|
+
input: 0.1,
|
|
5734
|
+
output: 0.5,
|
|
5735
|
+
cacheRead: 0.01,
|
|
5736
|
+
cacheWrite: 0.125,
|
|
5737
|
+
},
|
|
5738
|
+
contextWindow: 272000, // JOHNNESS_PATCH_GPT6_SOL_LUNA_CONTEXT_272K
|
|
5739
|
+
maxTokens: 128000,
|
|
5740
|
+
},
|
|
5694
5741
|
/* JOHNNESS_PATCH_GPT_IMAGE_62 (family 62): GPT Image 2 via the API-key provider. Image generation and editing only
|
|
5695
5742
|
(Images API generations/edits); not a chat model. Cost per MTok: text+image input $5, image output $40. */
|
|
5696
5743
|
"gpt-image-2": {
|
|
@@ -6042,6 +6089,44 @@ export const MODELS = {
|
|
|
6042
6089
|
contextWindow: 128000,
|
|
6043
6090
|
maxTokens: 128000,
|
|
6044
6091
|
},
|
|
6092
|
+
/* JOHNNESS_PATCH_GPT6_SOL_LUNA_MODEL (family 80, JOHNNESS_PATCH_DAILY_MODELS_80): GPT-6 Sol (Codex) via the ChatGPT-subscription Codex OAuth
|
|
6093
|
+
provider (subscription-billed, cost 0, same shape as gpt-6-astra). */
|
|
6094
|
+
"gpt-6-sol": {
|
|
6095
|
+
id: "gpt-6-sol",
|
|
6096
|
+
name: "GPT-6 Sol (Codex)",
|
|
6097
|
+
api: "openai-codex-responses",
|
|
6098
|
+
provider: "openai-codex",
|
|
6099
|
+
baseUrl: "https://chatgpt.com/backend-api",
|
|
6100
|
+
reasoning: true,
|
|
6101
|
+
input: ["text", "image"],
|
|
6102
|
+
cost: {
|
|
6103
|
+
input: 0,
|
|
6104
|
+
output: 0,
|
|
6105
|
+
cacheRead: 0,
|
|
6106
|
+
cacheWrite: 0,
|
|
6107
|
+
},
|
|
6108
|
+
contextWindow: 272000, // JOHNNESS_PATCH_GPT6_SOL_LUNA_CONTEXT_272K
|
|
6109
|
+
maxTokens: 128000,
|
|
6110
|
+
},
|
|
6111
|
+
/* JOHNNESS_PATCH_GPT6_SOL_LUNA_MODEL (family 80, JOHNNESS_PATCH_DAILY_MODELS_80): GPT-6 Luna (Codex) via the ChatGPT-subscription Codex OAuth
|
|
6112
|
+
provider (subscription-billed, cost 0, same shape as gpt-6-astra). */
|
|
6113
|
+
"gpt-6-luna": {
|
|
6114
|
+
id: "gpt-6-luna",
|
|
6115
|
+
name: "GPT-6 Luna (Codex)",
|
|
6116
|
+
api: "openai-codex-responses",
|
|
6117
|
+
provider: "openai-codex",
|
|
6118
|
+
baseUrl: "https://chatgpt.com/backend-api",
|
|
6119
|
+
reasoning: true,
|
|
6120
|
+
input: ["text", "image"],
|
|
6121
|
+
cost: {
|
|
6122
|
+
input: 0,
|
|
6123
|
+
output: 0,
|
|
6124
|
+
cacheRead: 0,
|
|
6125
|
+
cacheWrite: 0,
|
|
6126
|
+
},
|
|
6127
|
+
contextWindow: 272000, // JOHNNESS_PATCH_GPT6_SOL_LUNA_CONTEXT_272K
|
|
6128
|
+
maxTokens: 128000,
|
|
6129
|
+
},
|
|
6045
6130
|
/* JOHNNESS_PATCH_GPT_IMAGE_62 (family 62): GPT Image 2 via the ChatGPT-subscription Codex OAuth provider (cost 0).
|
|
6046
6131
|
Preferred by image_generate; the tool falls back to openai/gpt-image-2 when the subscription
|
|
6047
6132
|
backend rejects the request (unsupported or usage limit). */
|
|
@@ -13206,6 +13291,30 @@ export const MODELS = {
|
|
|
13206
13291
|
contextWindow: 256000,
|
|
13207
13292
|
maxTokens: 64000,
|
|
13208
13293
|
},
|
|
13294
|
+
/* JOHNNESS_PATCH_GROK_47_MODEL (family 80, JOHNNESS_PATCH_DAILY_MODELS_80): xAI Grok 4.7. docs.x.ai/developers/models/grok-4.7
|
|
13295
|
+
(checked 2026-09-24): native 500K context, text + image input, function calling,
|
|
13296
|
+
structured outputs, reasoning_effort low|medium|high|xhigh (default high; none and
|
|
13297
|
+
max rejected live), $2/$6 per MTok below 200K prompt tokens ($4/$12 at or above),
|
|
13298
|
+
cached input $0.50. Max output is unpublished; the Grok 4.6 value is kept.
|
|
13299
|
+
contextWindow capped at 200K like Grok 4.6 (family 46). */
|
|
13300
|
+
"grok-4.7": {
|
|
13301
|
+
id: "grok-4.7",
|
|
13302
|
+
name: "Grok 4.7",
|
|
13303
|
+
api: "openai-completions",
|
|
13304
|
+
provider: "xai",
|
|
13305
|
+
baseUrl: "https://api.x.ai/v1",
|
|
13306
|
+
reasoning: true,
|
|
13307
|
+
input: ["text", "image"],
|
|
13308
|
+
cost: {
|
|
13309
|
+
input: 2,
|
|
13310
|
+
output: 6,
|
|
13311
|
+
cacheRead: 0.5,
|
|
13312
|
+
cacheWrite: 0,
|
|
13313
|
+
},
|
|
13314
|
+
contextWindow: 200000, // JOHNNESS_PATCH_GROK_47_CONTEXT_200K
|
|
13315
|
+
maxTokens: 64000,
|
|
13316
|
+
compat: { "supportsReasoningEffort": true },
|
|
13317
|
+
},
|
|
13209
13318
|
/* JOHNNESS_PATCH_GROK_46_MODEL: xAI Grok 4.6. Facts verified against the
|
|
13210
13319
|
live xAI API and docs on 2026-08-30. Native 500K context, text + image
|
|
13211
13320
|
input, function calling, and reasoning that cannot be disabled. Family
|
|
@@ -62,6 +62,15 @@ export function supportsXhigh(model) {
|
|
|
62
62
|
if (model.id.startsWith("gpt-5.6") && (model.provider === "openai" || model.provider === "openai-codex")) {
|
|
63
63
|
return true;
|
|
64
64
|
}
|
|
65
|
+
// JOHNNESS_PATCH_GPT6_SOL_LUNA_MODEL (JOHNNESS_PATCH_DAILY_MODELS_80): GPT-6 Sol and Luna document reasoning.effort
|
|
66
|
+
// none|low|medium|high|xhigh|max on both the API-key and Codex OAuth providers.
|
|
67
|
+
if ((model.id === "gpt-6-sol" || model.id === "gpt-6-luna") && (model.provider === "openai" || model.provider === "openai-codex")) {
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
// JOHNNESS_PATCH_GROK_47_MODEL (JOHNNESS_PATCH_DAILY_MODELS_80): xAI Grok 4.7 accepts reasoning_effort "xhigh" natively.
|
|
71
|
+
if (model.provider === "xai" && model.id === "grok-4.7") {
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
65
74
|
if (model.api === "anthropic-messages") {
|
|
66
75
|
return model.id.includes("opus-4-6") || model.id.includes("opus-4.6");
|
|
67
76
|
}
|
|
@@ -300,6 +300,9 @@ function buildRequestBody(model, context, options) {
|
|
|
300
300
|
(/^gpt-5\.6-(sol|terra|luna)$/.test(model.id) && options?.reasoningEffort !== "none"))) { // JOHNNESS_PATCH_PROVIDER_CATALOG_67
|
|
301
301
|
body.temperature = options.temperature;
|
|
302
302
|
}
|
|
303
|
+
// JOHNNESS_PATCH_DAILY_MODELS_80: GPT-6 Sol/Luna reject temperature unless reasoning.effort is none (live 400,
|
|
304
|
+
// 2026-09-24), the same rule as the GPT-5.6 line above.
|
|
305
|
+
if ((model.id === "gpt-6-sol" || model.id === "gpt-6-luna") && options?.reasoningEffort !== "none") delete body.temperature;
|
|
303
306
|
if (context.tools) {
|
|
304
307
|
body.tools = convertResponsesTools(context.tools, { strict: null });
|
|
305
308
|
}
|
|
@@ -145,6 +145,9 @@ function buildParams(model, context, options) {
|
|
|
145
145
|
(/^gpt-5\.6-(sol|terra|luna)$/.test(model.id) && options?.reasoningEffort !== "none"))) { // JOHNNESS_PATCH_PROVIDER_CATALOG_67
|
|
146
146
|
params.temperature = options?.temperature;
|
|
147
147
|
}
|
|
148
|
+
// JOHNNESS_PATCH_DAILY_MODELS_80: GPT-6 Sol/Luna reject temperature unless reasoning.effort is none (live 400,
|
|
149
|
+
// 2026-09-24), the same rule as the GPT-5.6 line above.
|
|
150
|
+
if ((model.id === "gpt-6-sol" || model.id === "gpt-6-luna") && options?.reasoningEffort !== "none") delete params.temperature;
|
|
148
151
|
if (options?.serviceTier !== undefined) {
|
|
149
152
|
params.service_tier = options.serviceTier;
|
|
150
153
|
}
|