johns-harness 2026.9.29 → 2026.9.31
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 +11 -1
- package/dist/auth-profiles-5CHn7vq1.js +5 -0
- package/dist/channels/plugins/actions/telegram.js +1 -0
- package/dist/config-koj5M_EO.js +5 -0
- package/dist/daemon-cli.js +5 -0
- package/dist/model-selection-BGlGpPgM.js +6 -1
- package/dist/model-selection-BU6wl1le.js +6 -1
- package/dist/model-selection-L7RMwsG-.js +6 -1
- package/dist/models-config-CAmcg63r.js +1 -1
- package/dist/models-config-DXA5BkaM.js +1 -1
- package/dist/plugin-sdk/config-4Fgm-yEH.js +5 -0
- package/dist/plugin-sdk/config-Di-lyCdh.js +5 -0
- package/dist/plugin-sdk/discord.js +5 -0
- package/dist/plugin-sdk/mattermost.js +1 -0
- package/dist/plugin-sdk/model-auth-CX9cPHdC.js +5 -0
- package/dist/plugin-sdk/model-auth-Ciehz0x5.js +5 -0
- package/dist/plugin-sdk/model-auth-DVyo6JSX.js +5 -0
- package/dist/plugin-sdk/model-auth-kiHYHGrs.js +5 -0
- package/dist/plugin-sdk/model-selection-Dbj4jDYM.js +5 -0
- package/dist/plugin-sdk/thinking-B-rIrY_n.js +1 -0
- package/dist/plugin-sdk/thinking-CopbP_Cn.js +1 -0
- package/dist/plugin-sdk/thinking-WQ4Zq8Nl.js +1 -0
- package/dist/plugin-sdk/thinking-WXqkGljb.js +1 -0
- package/dist/plugin-sdk/thinking-_uXqFaFO.js +1 -0
- package/dist/plugin-sdk/thinking-pTdxk2dr.js +1 -0
- package/dist/thinking-B5B36ffe.js +1 -0
- package/dist/thinking-BYwvlJ3S.js +1 -0
- package/dist/thinking-CAzdgmNV.js +1 -0
- package/dist/thinking-DykY2Fzj.js +1 -0
- package/docs/PATCHES.md +34 -0
- package/docs/PROVIDER-AUDIT-2026-09-20.md +137 -0
- package/docs/PROVIDER-CATALOG.md +7 -4
- package/node_modules/@mariozechner/pi-ai/dist/models.generated.js +22 -0
- package/node_modules/@mariozechner/pi-ai/dist/models.js +1 -0
- package/node_modules/@mariozechner/pi-ai/dist/providers/anthropic.js +2 -2
- package/node_modules/@mariozechner/pi-ai/dist/providers/google.js +2 -1
- package/node_modules/@mariozechner/pi-ai/dist/providers/openai-completions.js +4 -1
- package/node_modules/@mariozechner/pi-ai/dist/providers/openai-responses.js +4 -3
- package/package.json +1 -1
- package/vendor/patched-deps/@mariozechner/pi-ai/dist/models.generated.js +22 -0
- package/vendor/patched-deps/@mariozechner/pi-ai/dist/models.js +1 -0
- package/vendor/patched-deps/@mariozechner/pi-ai/dist/providers/anthropic.js +2 -2
- package/vendor/patched-deps/@mariozechner/pi-ai/dist/providers/google.js +2 -1
- package/vendor/patched-deps/@mariozechner/pi-ai/dist/providers/openai-completions.js +4 -1
- package/vendor/patched-deps/@mariozechner/pi-ai/dist/providers/openai-responses.js +4 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 2026.9.31
|
|
4
|
+
|
|
5
|
+
- Family 78: Claude Opus 5.5 (`anthropic/claude-opus-5-5`) is a first-class model. Id, $4/$20 pricing, $0.20 cache reads, 1M native context (300K owner cap), 128K max output and always-on adaptive thinking confirmed against the Anthropic model docs on 2026-09-23. Effort maps 1:1 (xhigh and max are distinct), temperature is dropped, and `opus` now resolves to Opus 5.5 on every install; `opus5` keeps Claude Opus 5 reachable and the opus-5 catalog entry is unchanged. Exact replay via `scripts/patch-opus-5-5-model.py`; verifier checks 78.1-78.3. Roll back with `npm i -g johns-harness@2026.9.30`.
|
|
6
|
+
|
|
7
|
+
## 2026.9.30
|
|
8
|
+
|
|
9
|
+
- Family 77: weekly official six-provider audit. DeepSeek V4 Flash/Pro now transmit native low for minimal/low instead of silently using high. Meta Standard Muse 1.2/1.3 preserve provider-default effort when the caller omits it instead of forcing minimal. Gemini 3.8 Flash and 3.5 Flash-Lite omit deprecated/ignored sampling temperature. Preserve all aliases, saved model IDs, owner context caps and default selections.
|
|
10
|
+
- Astra native Responses max, Fable 5.1 max and Grok 4.6 xhigh were already correct and were independently wire-verified. Meta inference remains account-dependent; no configured account was available for this audit. New Gemini Live/Interactions models are not mislabeled as working generateContent chat models.
|
|
11
|
+
- Exact preimage/postimage replay, three actual-adapter regression surfaces and installed-artifact verification. See `docs/PROVIDER-AUDIT-2026-09-20.md`. Roll back with `npm i -g johns-harness@2026.9.29`; focused adapter installs use their recorded pre-patch backups.
|
|
12
|
+
|
|
3
13
|
## 2026.9.29
|
|
4
14
|
|
|
5
15
|
- Family 76.1: the registration-safe reload worker waits for `launchctl bootout` teardown to finish before bootstrapping the staged plist. A gateway that shuts down gracefully on SIGTERM stays registered for a moment after `bootout`; 2026.9.28 mistook that lingering registration for the replacement, skipped `bootstrap`, and reported `Service removed while waiting for health` with the job left unloaded (observed on the first live fleet reload). The wait is bounded at 30 seconds and a timeout is a retryable worker error, not an advanced checkpoint. Ordinary `kickstart -k` restarts were unaffected. The real macOS self-restart fixture now exits gracefully so the reload cases reproduce the race; two unit cases cover the wait and the timeout.
|
|
@@ -34,7 +44,7 @@
|
|
|
34
44
|
- New packed-artifact gate `scripts/check-packed-artifact.mjs` inspects the real `npm pack` output (and registry tarballs) and fails closed unless all ten plugin-loader copies carry the Family 68 option. Releases 2026.9.22 and 2026.9.23 were cut from the pre-68 base, so their tarballs lacked it while main carried it; this gate makes that impossible to repeat.
|
|
35
45
|
- Roll back with `npm i -g johns-harness@2026.9.23`.
|
|
36
46
|
|
|
37
|
-
## 2026.9.
|
|
47
|
+
## 2026.9.31
|
|
38
48
|
|
|
39
49
|
- Family 70: ship the `orchestrator` skill as a bundled, always-eligible skill so every harness install loads the delegation and briefing protocol implicitly (pass the user's words through when they are clear, expand when they are vague, keep briefings brief). Workspace overrides, `enabled: false` and `allowBundled` still apply. `RULES.md` points at the bundled copy.
|
|
40
50
|
|
|
@@ -5134,6 +5134,11 @@ Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
|
5134
5134
|
"nano-banana": "google/gemini-3-pro-image-preview",
|
|
5135
5135
|
image: "openai-codex/gpt-image-2"
|
|
5136
5136
|
});
|
|
5137
|
+
// JOHNNESS_PATCH_OPUS_55_MODEL: Claude Opus 5.5 is the newest Opus; `opus` moves to it, opus-5 stays in the catalog.
|
|
5138
|
+
Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
5139
|
+
opus: "anthropic/claude-opus-5-5",
|
|
5140
|
+
opus5: "anthropic/claude-opus-5"
|
|
5141
|
+
});
|
|
5137
5142
|
const DEFAULT_MODEL_COST = {
|
|
5138
5143
|
input: 0,
|
|
5139
5144
|
output: 0,
|
|
@@ -2110,6 +2110,7 @@ const XHIGH_MODEL_REFS = [
|
|
|
2110
2110
|
"anthropic/claude-fable-5-1",
|
|
2111
2111
|
"meta/muse-spark-1.3", // JOHNNESS_PATCH_MUSE_SPARK
|
|
2112
2112
|
"meta/muse-spark-1.2",
|
|
2113
|
+
"anthropic/claude-opus-5-5", // JOHNNESS_PATCH_OPUS_55_MODEL
|
|
2113
2114
|
"xai/grok-4.6",
|
|
2114
2115
|
"openai/gpt-6-astra",
|
|
2115
2116
|
"openai-codex/gpt-6-astra",
|
package/dist/config-koj5M_EO.js
CHANGED
|
@@ -1829,6 +1829,11 @@ Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
|
1829
1829
|
"nano-banana": "google/gemini-3-pro-image-preview",
|
|
1830
1830
|
image: "openai-codex/gpt-image-2"
|
|
1831
1831
|
});
|
|
1832
|
+
// JOHNNESS_PATCH_OPUS_55_MODEL: Claude Opus 5.5 is the newest Opus; `opus` moves to it, opus-5 stays in the catalog.
|
|
1833
|
+
Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
1834
|
+
opus: "anthropic/claude-opus-5-5",
|
|
1835
|
+
opus5: "anthropic/claude-opus-5"
|
|
1836
|
+
});
|
|
1832
1837
|
const DEFAULT_MODEL_COST = {
|
|
1833
1838
|
input: 0,
|
|
1834
1839
|
output: 0,
|
package/dist/daemon-cli.js
CHANGED
|
@@ -4981,6 +4981,11 @@ Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
|
4981
4981
|
"nano-banana": "google/gemini-3-pro-image-preview",
|
|
4982
4982
|
image: "openai-codex/gpt-image-2"
|
|
4983
4983
|
});
|
|
4984
|
+
// JOHNNESS_PATCH_OPUS_55_MODEL: Claude Opus 5.5 is the newest Opus; `opus` moves to it, opus-5 stays in the catalog.
|
|
4985
|
+
Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
4986
|
+
opus: "anthropic/claude-opus-5-5",
|
|
4987
|
+
opus5: "anthropic/claude-opus-5"
|
|
4988
|
+
});
|
|
4984
4989
|
const DEFAULT_MODEL_COST = {
|
|
4985
4990
|
input: 0,
|
|
4986
4991
|
output: 0,
|
|
@@ -1686,6 +1686,11 @@ Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
|
1686
1686
|
"nano-banana": "google/gemini-3-pro-image-preview",
|
|
1687
1687
|
image: "openai-codex/gpt-image-2"
|
|
1688
1688
|
});
|
|
1689
|
+
// JOHNNESS_PATCH_OPUS_55_MODEL: Claude Opus 5.5 is the newest Opus; `opus` moves to it, opus-5 stays in the catalog.
|
|
1690
|
+
Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
1691
|
+
opus: "anthropic/claude-opus-5-5",
|
|
1692
|
+
opus5: "anthropic/claude-opus-5"
|
|
1693
|
+
});
|
|
1689
1694
|
const DEFAULT_MODEL_COST = {
|
|
1690
1695
|
input: 0,
|
|
1691
1696
|
output: 0,
|
|
@@ -1797,7 +1802,7 @@ function applyTalkConfigNormalization(config) {
|
|
|
1797
1802
|
window, but this scoped local ceiling keeps catalog, compaction, preflight,
|
|
1798
1803
|
failover, and session snapshots on the same conservative budget. */
|
|
1799
1804
|
const JOHNNESS_OPUS_CONTEXT_TOKENS = 3e5;
|
|
1800
|
-
const JOHNNESS_OPUS_300K_MODEL_IDS = new Set(["claude-opus-4-8", "claude-opus-5"]);
|
|
1805
|
+
const JOHNNESS_OPUS_300K_MODEL_IDS = new Set(["claude-opus-4-8", "claude-opus-5", "claude-opus-5-5"]); // JOHNNESS_PATCH_OPUS_55_MODEL
|
|
1801
1806
|
function resolveJohnnessOpusContextWindow(providerId, modelId) {
|
|
1802
1807
|
if (normalizeProviderId(String(providerId ?? "")) !== "anthropic") return;
|
|
1803
1808
|
const normalizedModelId = String(modelId ?? "").trim().toLowerCase();
|
|
@@ -1661,6 +1661,11 @@ Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
|
1661
1661
|
"nano-banana": "google/gemini-3-pro-image-preview",
|
|
1662
1662
|
image: "openai-codex/gpt-image-2"
|
|
1663
1663
|
});
|
|
1664
|
+
// JOHNNESS_PATCH_OPUS_55_MODEL: Claude Opus 5.5 is the newest Opus; `opus` moves to it, opus-5 stays in the catalog.
|
|
1665
|
+
Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
1666
|
+
opus: "anthropic/claude-opus-5-5",
|
|
1667
|
+
opus5: "anthropic/claude-opus-5"
|
|
1668
|
+
});
|
|
1664
1669
|
const DEFAULT_MODEL_COST = {
|
|
1665
1670
|
input: 0,
|
|
1666
1671
|
output: 0,
|
|
@@ -1772,7 +1777,7 @@ function applyTalkConfigNormalization(config) {
|
|
|
1772
1777
|
window, but this scoped local ceiling keeps catalog, compaction, preflight,
|
|
1773
1778
|
failover, and session snapshots on the same conservative budget. */
|
|
1774
1779
|
const JOHNNESS_OPUS_CONTEXT_TOKENS = 3e5;
|
|
1775
|
-
const JOHNNESS_OPUS_300K_MODEL_IDS = new Set(["claude-opus-4-8", "claude-opus-5"]);
|
|
1780
|
+
const JOHNNESS_OPUS_300K_MODEL_IDS = new Set(["claude-opus-4-8", "claude-opus-5", "claude-opus-5-5"]); // JOHNNESS_PATCH_OPUS_55_MODEL
|
|
1776
1781
|
function resolveJohnnessOpusContextWindow(providerId, modelId) {
|
|
1777
1782
|
if (normalizeProviderId(String(providerId ?? "")) !== "anthropic") return;
|
|
1778
1783
|
const normalizedModelId = String(modelId ?? "").trim().toLowerCase();
|
|
@@ -1592,6 +1592,11 @@ Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
|
1592
1592
|
"nano-banana": "google/gemini-3-pro-image-preview",
|
|
1593
1593
|
image: "openai-codex/gpt-image-2"
|
|
1594
1594
|
});
|
|
1595
|
+
// JOHNNESS_PATCH_OPUS_55_MODEL: Claude Opus 5.5 is the newest Opus; `opus` moves to it, opus-5 stays in the catalog.
|
|
1596
|
+
Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
1597
|
+
opus: "anthropic/claude-opus-5-5",
|
|
1598
|
+
opus5: "anthropic/claude-opus-5"
|
|
1599
|
+
});
|
|
1595
1600
|
const DEFAULT_MODEL_COST = {
|
|
1596
1601
|
input: 0,
|
|
1597
1602
|
output: 0,
|
|
@@ -1703,7 +1708,7 @@ function applyTalkConfigNormalization(config) {
|
|
|
1703
1708
|
window, but this scoped local ceiling keeps catalog, compaction, preflight,
|
|
1704
1709
|
failover, and session snapshots on the same conservative budget. */
|
|
1705
1710
|
const JOHNNESS_OPUS_CONTEXT_TOKENS = 3e5;
|
|
1706
|
-
const JOHNNESS_OPUS_300K_MODEL_IDS = new Set(["claude-opus-4-8", "claude-opus-5"]);
|
|
1711
|
+
const JOHNNESS_OPUS_300K_MODEL_IDS = new Set(["claude-opus-4-8", "claude-opus-5", "claude-opus-5-5"]); // JOHNNESS_PATCH_OPUS_55_MODEL
|
|
1707
1712
|
function resolveJohnnessOpusContextWindow(providerId, modelId) {
|
|
1708
1713
|
if (normalizeProviderId(String(providerId ?? "")) !== "anthropic") return;
|
|
1709
1714
|
const normalizedModelId = String(modelId ?? "").trim().toLowerCase();
|
|
@@ -11,7 +11,7 @@ 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", "claude-opus-5-5"]); // JOHNNESS_PATCH_OPUS_55_MODEL
|
|
15
15
|
function applyJohnnessOpusContextWindows(providers) {
|
|
16
16
|
const anthropicKey = Object.keys(providers).find((key) => key.trim().toLowerCase() === "anthropic");
|
|
17
17
|
if (!anthropicKey) return providers;
|
|
@@ -11,7 +11,7 @@ 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", "claude-opus-5-5"]); // JOHNNESS_PATCH_OPUS_55_MODEL
|
|
15
15
|
function applyJohnnessOpusContextWindows(providers) {
|
|
16
16
|
const anthropicKey = Object.keys(providers).find((key) => key.trim().toLowerCase() === "anthropic");
|
|
17
17
|
if (!anthropicKey) return providers;
|
|
@@ -7079,6 +7079,11 @@ Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
|
7079
7079
|
"nano-banana": "google/gemini-3-pro-image-preview",
|
|
7080
7080
|
image: "openai-codex/gpt-image-2"
|
|
7081
7081
|
});
|
|
7082
|
+
// JOHNNESS_PATCH_OPUS_55_MODEL: Claude Opus 5.5 is the newest Opus; `opus` moves to it, opus-5 stays in the catalog.
|
|
7083
|
+
Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
7084
|
+
opus: "anthropic/claude-opus-5-5",
|
|
7085
|
+
opus5: "anthropic/claude-opus-5"
|
|
7086
|
+
});
|
|
7082
7087
|
const DEFAULT_MODEL_COST = {
|
|
7083
7088
|
input: 0,
|
|
7084
7089
|
output: 0,
|
|
@@ -8080,6 +8080,11 @@ Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
|
8080
8080
|
"nano-banana": "google/gemini-3-pro-image-preview",
|
|
8081
8081
|
image: "openai-codex/gpt-image-2"
|
|
8082
8082
|
});
|
|
8083
|
+
// JOHNNESS_PATCH_OPUS_55_MODEL: Claude Opus 5.5 is the newest Opus; `opus` moves to it, opus-5 stays in the catalog.
|
|
8084
|
+
Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
8085
|
+
opus: "anthropic/claude-opus-5-5",
|
|
8086
|
+
opus5: "anthropic/claude-opus-5"
|
|
8087
|
+
});
|
|
8083
8088
|
const DEFAULT_MODEL_COST = {
|
|
8084
8089
|
input: 0,
|
|
8085
8090
|
output: 0,
|
|
@@ -5209,6 +5209,11 @@ Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
|
5209
5209
|
"nano-banana": "google/gemini-3-pro-image-preview",
|
|
5210
5210
|
image: "openai-codex/gpt-image-2"
|
|
5211
5211
|
});
|
|
5212
|
+
// JOHNNESS_PATCH_OPUS_55_MODEL: Claude Opus 5.5 is the newest Opus; `opus` moves to it, opus-5 stays in the catalog.
|
|
5213
|
+
Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
5214
|
+
opus: "anthropic/claude-opus-5-5",
|
|
5215
|
+
opus5: "anthropic/claude-opus-5"
|
|
5216
|
+
});
|
|
5212
5217
|
const DEFAULT_MODEL_COST = {
|
|
5213
5218
|
input: 0,
|
|
5214
5219
|
output: 0,
|
|
@@ -3135,6 +3135,7 @@ const XHIGH_MODEL_REFS = [
|
|
|
3135
3135
|
"anthropic/claude-fable-5-1",
|
|
3136
3136
|
"meta/muse-spark-1.3", // JOHNNESS_PATCH_MUSE_SPARK
|
|
3137
3137
|
"meta/muse-spark-1.2",
|
|
3138
|
+
"anthropic/claude-opus-5-5", // JOHNNESS_PATCH_OPUS_55_MODEL
|
|
3138
3139
|
"xai/grok-4.6",
|
|
3139
3140
|
"openai/gpt-6-astra",
|
|
3140
3141
|
"openai-codex/gpt-6-astra",
|
|
@@ -6000,6 +6000,11 @@ Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
|
6000
6000
|
"nano-banana": "google/gemini-3-pro-image-preview",
|
|
6001
6001
|
image: "openai-codex/gpt-image-2"
|
|
6002
6002
|
});
|
|
6003
|
+
// JOHNNESS_PATCH_OPUS_55_MODEL: Claude Opus 5.5 is the newest Opus; `opus` moves to it, opus-5 stays in the catalog.
|
|
6004
|
+
Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
6005
|
+
opus: "anthropic/claude-opus-5-5",
|
|
6006
|
+
opus5: "anthropic/claude-opus-5"
|
|
6007
|
+
});
|
|
6003
6008
|
const DEFAULT_MODEL_COST = {
|
|
6004
6009
|
input: 0,
|
|
6005
6010
|
output: 0,
|
|
@@ -4969,6 +4969,11 @@ Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
|
4969
4969
|
"nano-banana": "google/gemini-3-pro-image-preview",
|
|
4970
4970
|
image: "openai-codex/gpt-image-2"
|
|
4971
4971
|
});
|
|
4972
|
+
// JOHNNESS_PATCH_OPUS_55_MODEL: Claude Opus 5.5 is the newest Opus; `opus` moves to it, opus-5 stays in the catalog.
|
|
4973
|
+
Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
4974
|
+
opus: "anthropic/claude-opus-5-5",
|
|
4975
|
+
opus5: "anthropic/claude-opus-5"
|
|
4976
|
+
});
|
|
4972
4977
|
const DEFAULT_MODEL_COST = {
|
|
4973
4978
|
input: 0,
|
|
4974
4979
|
output: 0,
|
|
@@ -4973,6 +4973,11 @@ Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
|
4973
4973
|
"nano-banana": "google/gemini-3-pro-image-preview",
|
|
4974
4974
|
image: "openai-codex/gpt-image-2"
|
|
4975
4975
|
});
|
|
4976
|
+
// JOHNNESS_PATCH_OPUS_55_MODEL: Claude Opus 5.5 is the newest Opus; `opus` moves to it, opus-5 stays in the catalog.
|
|
4977
|
+
Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
4978
|
+
opus: "anthropic/claude-opus-5-5",
|
|
4979
|
+
opus5: "anthropic/claude-opus-5"
|
|
4980
|
+
});
|
|
4976
4981
|
const DEFAULT_MODEL_COST = {
|
|
4977
4982
|
input: 0,
|
|
4978
4983
|
output: 0,
|
|
@@ -4973,6 +4973,11 @@ Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
|
4973
4973
|
"nano-banana": "google/gemini-3-pro-image-preview",
|
|
4974
4974
|
image: "openai-codex/gpt-image-2"
|
|
4975
4975
|
});
|
|
4976
|
+
// JOHNNESS_PATCH_OPUS_55_MODEL: Claude Opus 5.5 is the newest Opus; `opus` moves to it, opus-5 stays in the catalog.
|
|
4977
|
+
Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
4978
|
+
opus: "anthropic/claude-opus-5-5",
|
|
4979
|
+
opus5: "anthropic/claude-opus-5"
|
|
4980
|
+
});
|
|
4976
4981
|
const DEFAULT_MODEL_COST = {
|
|
4977
4982
|
input: 0,
|
|
4978
4983
|
output: 0,
|
|
@@ -4782,6 +4782,11 @@ Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
|
4782
4782
|
"nano-banana": "google/gemini-3-pro-image-preview",
|
|
4783
4783
|
image: "openai-codex/gpt-image-2"
|
|
4784
4784
|
});
|
|
4785
|
+
// JOHNNESS_PATCH_OPUS_55_MODEL: Claude Opus 5.5 is the newest Opus; `opus` moves to it, opus-5 stays in the catalog.
|
|
4786
|
+
Object.assign(DEFAULT_MODEL_ALIASES, {
|
|
4787
|
+
opus: "anthropic/claude-opus-5-5",
|
|
4788
|
+
opus5: "anthropic/claude-opus-5"
|
|
4789
|
+
});
|
|
4785
4790
|
const DEFAULT_MODEL_COST = {
|
|
4786
4791
|
input: 0,
|
|
4787
4792
|
output: 0,
|
|
@@ -990,6 +990,7 @@ const XHIGH_MODEL_REFS = [
|
|
|
990
990
|
"anthropic/claude-fable-5-1",
|
|
991
991
|
"meta/muse-spark-1.3", // JOHNNESS_PATCH_MUSE_SPARK
|
|
992
992
|
"meta/muse-spark-1.2",
|
|
993
|
+
"anthropic/claude-opus-5-5", // JOHNNESS_PATCH_OPUS_55_MODEL
|
|
993
994
|
"xai/grok-4.6",
|
|
994
995
|
"openai/gpt-6-astra",
|
|
995
996
|
"openai-codex/gpt-6-astra",
|
|
@@ -990,6 +990,7 @@ const XHIGH_MODEL_REFS = [
|
|
|
990
990
|
"anthropic/claude-fable-5-1",
|
|
991
991
|
"meta/muse-spark-1.3", // JOHNNESS_PATCH_MUSE_SPARK
|
|
992
992
|
"meta/muse-spark-1.2",
|
|
993
|
+
"anthropic/claude-opus-5-5", // JOHNNESS_PATCH_OPUS_55_MODEL
|
|
993
994
|
"xai/grok-4.6",
|
|
994
995
|
"openai/gpt-6-astra",
|
|
995
996
|
"openai-codex/gpt-6-astra",
|
|
@@ -990,6 +990,7 @@ const XHIGH_MODEL_REFS = [
|
|
|
990
990
|
"anthropic/claude-fable-5-1",
|
|
991
991
|
"meta/muse-spark-1.3", // JOHNNESS_PATCH_MUSE_SPARK
|
|
992
992
|
"meta/muse-spark-1.2",
|
|
993
|
+
"anthropic/claude-opus-5-5", // JOHNNESS_PATCH_OPUS_55_MODEL
|
|
993
994
|
"xai/grok-4.6",
|
|
994
995
|
"openai/gpt-6-astra",
|
|
995
996
|
"openai-codex/gpt-6-astra",
|
|
@@ -990,6 +990,7 @@ const XHIGH_MODEL_REFS = [
|
|
|
990
990
|
"anthropic/claude-fable-5-1",
|
|
991
991
|
"meta/muse-spark-1.3", // JOHNNESS_PATCH_MUSE_SPARK
|
|
992
992
|
"meta/muse-spark-1.2",
|
|
993
|
+
"anthropic/claude-opus-5-5", // JOHNNESS_PATCH_OPUS_55_MODEL
|
|
993
994
|
"xai/grok-4.6",
|
|
994
995
|
"openai/gpt-6-astra",
|
|
995
996
|
"openai-codex/gpt-6-astra",
|
|
@@ -990,6 +990,7 @@ const XHIGH_MODEL_REFS = [
|
|
|
990
990
|
"anthropic/claude-fable-5-1",
|
|
991
991
|
"meta/muse-spark-1.3", // JOHNNESS_PATCH_MUSE_SPARK
|
|
992
992
|
"meta/muse-spark-1.2",
|
|
993
|
+
"anthropic/claude-opus-5-5", // JOHNNESS_PATCH_OPUS_55_MODEL
|
|
993
994
|
"xai/grok-4.6",
|
|
994
995
|
"openai/gpt-6-astra",
|
|
995
996
|
"openai-codex/gpt-6-astra",
|
|
@@ -1014,6 +1014,7 @@ const XHIGH_MODEL_REFS = [
|
|
|
1014
1014
|
"anthropic/claude-fable-5-1",
|
|
1015
1015
|
"meta/muse-spark-1.3", // JOHNNESS_PATCH_MUSE_SPARK
|
|
1016
1016
|
"meta/muse-spark-1.2",
|
|
1017
|
+
"anthropic/claude-opus-5-5", // JOHNNESS_PATCH_OPUS_55_MODEL
|
|
1017
1018
|
"xai/grok-4.6",
|
|
1018
1019
|
"openai/gpt-6-astra",
|
|
1019
1020
|
"openai-codex/gpt-6-astra",
|
|
@@ -991,6 +991,7 @@ const XHIGH_MODEL_REFS = [
|
|
|
991
991
|
"anthropic/claude-fable-5-1",
|
|
992
992
|
"meta/muse-spark-1.3", // JOHNNESS_PATCH_MUSE_SPARK
|
|
993
993
|
"meta/muse-spark-1.2",
|
|
994
|
+
"anthropic/claude-opus-5-5", // JOHNNESS_PATCH_OPUS_55_MODEL
|
|
994
995
|
"xai/grok-4.6",
|
|
995
996
|
"openai/gpt-6-astra",
|
|
996
997
|
"openai-codex/gpt-6-astra",
|
|
@@ -18,6 +18,7 @@ const XHIGH_MODEL_REFS = [
|
|
|
18
18
|
"anthropic/claude-fable-5-1",
|
|
19
19
|
"meta/muse-spark-1.3", // JOHNNESS_PATCH_MUSE_SPARK
|
|
20
20
|
"meta/muse-spark-1.2",
|
|
21
|
+
"anthropic/claude-opus-5-5", // JOHNNESS_PATCH_OPUS_55_MODEL
|
|
21
22
|
"xai/grok-4.6",
|
|
22
23
|
"openai/gpt-6-astra",
|
|
23
24
|
"openai-codex/gpt-6-astra",
|
|
@@ -990,6 +990,7 @@ const XHIGH_MODEL_REFS = [
|
|
|
990
990
|
"anthropic/claude-fable-5-1",
|
|
991
991
|
"meta/muse-spark-1.3", // JOHNNESS_PATCH_MUSE_SPARK
|
|
992
992
|
"meta/muse-spark-1.2",
|
|
993
|
+
"anthropic/claude-opus-5-5", // JOHNNESS_PATCH_OPUS_55_MODEL
|
|
993
994
|
"xai/grok-4.6",
|
|
994
995
|
"openai/gpt-6-astra",
|
|
995
996
|
"openai-codex/gpt-6-astra",
|
|
@@ -18,6 +18,7 @@ const XHIGH_MODEL_REFS = [
|
|
|
18
18
|
"anthropic/claude-fable-5-1",
|
|
19
19
|
"meta/muse-spark-1.3", // JOHNNESS_PATCH_MUSE_SPARK
|
|
20
20
|
"meta/muse-spark-1.2",
|
|
21
|
+
"anthropic/claude-opus-5-5", // JOHNNESS_PATCH_OPUS_55_MODEL
|
|
21
22
|
"xai/grok-4.6",
|
|
22
23
|
"openai/gpt-6-astra",
|
|
23
24
|
"openai-codex/gpt-6-astra",
|
package/docs/PATCHES.md
CHANGED
|
@@ -2773,3 +2773,37 @@ restart` uses the safe worker. For a real plist change, use the new version's
|
|
|
2773
2773
|
`gateway install --force`, which stages the change before handoff. Rolling back to
|
|
2774
2774
|
2026.9.27 or earlier restores the old restart defect; if necessary install it externally and
|
|
2775
2775
|
use kickstart, never its gateway restart CLI from a gateway child.
|
|
2776
|
+
|
|
2777
|
+
|
|
2778
|
+
## 77. Weekly provider reasoning corrections (2026-09-20)
|
|
2779
|
+
|
|
2780
|
+
The six-provider audit changes only the DeepSeek, Meta Responses and Gemini adapters.
|
|
2781
|
+
Both DeepSeek V4 models now send native `low` for harness `minimal`/`low`, rather
|
|
2782
|
+
than silently spending at `high`. The existing `xhigh` to `max` compatibility
|
|
2783
|
+
mapping, explicit off, server-default omission, limits and aliases are preserved.
|
|
2784
|
+
Meta Standard Muse 1.2/1.3 now omit `reasoning.effort` when the caller omits it,
|
|
2785
|
+
instead of forcing `minimal`; explicit efforts, validation, encrypted replay and
|
|
2786
|
+
`store: false` are unchanged. Meta account access was not available for live inference.
|
|
2787
|
+
|
|
2788
|
+
`patches/provider-audit-20260920/changes.json` owns the exact three adapter pre/post
|
|
2789
|
+
images plus Meta's historical replay snapshot. Gemini 3.8 Flash and 3.5 Flash-Lite also omit deprecated/ignored temperature.
|
|
2790
|
+
The patcher preflights every target
|
|
2791
|
+
before writing, refuses drift, supports alternate roots and a dependency-only
|
|
2792
|
+
focused refresh. Family 67 reverses only these exact edits during historical hash
|
|
2793
|
+
validation. Both the modern and old Meta replay tests remain byte-identical.
|
|
2794
|
+
|
|
2795
|
+
No model IDs, aliases, config, credentials, default model or owner context caps
|
|
2796
|
+
change. Astra Responses already supports native `max`; Grok native `xhigh` and
|
|
2797
|
+
modern Claude native `max` were already correct. The global `/think max` synonym
|
|
2798
|
+
still means harness `xhigh`; it is not a new distinct UI level in this patch.
|
|
2799
|
+
|
|
2800
|
+
Evidence and official sources: [weekly audit](PROVIDER-AUDIT-2026-09-20.md).
|
|
2801
|
+
Tests: `tests/provider-audit-20260920.test.mjs`, provider catalog, Muse transport
|
|
2802
|
+
and historical replay; verifier 77.1 checks installed adapter hashes exactly.
|
|
2803
|
+
|
|
2804
|
+
## Family 78: Claude Opus 5.5 (2026.9.31)
|
|
2805
|
+
|
|
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 (300K owner cap via `JOHNNESS_OPUS_300K_MODEL_IDS`), 128K max output confirmed against `platform.claude.com/docs/en/models/opus-5-5` and its migration guide on 2026-09-23.
|
|
2807
|
+
- 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
|
+
- `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
|
+
- 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.
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
# Six-provider official API audit: 2026-09-20
|
|
2
|
+
|
|
3
|
+
This weekly audit builds on the successful September 13 catalog release, not on
|
|
4
|
+
upstream OpenClaw. Registry IDs, aliases, saved-session IDs, owner context caps,
|
|
5
|
+
credentials and the selected default are unchanged. Family 77 is a focused
|
|
6
|
+
provider-parameter patch prepared for `johns-harness@2026.9.30`. Release availability
|
|
7
|
+
is established by npm registry metadata and matching artifact integrity, not by
|
|
8
|
+
a successful publish-upload exit alone.
|
|
9
|
+
|
|
10
|
+
## Changes
|
|
11
|
+
|
|
12
|
+
1. **DeepSeek:** `minimal`/`low` now serialize as native `low` on `deepseek-flash`
|
|
13
|
+
and `deepseek-v4-pro`, rather than silently increasing effort to `high`.
|
|
14
|
+
Omission remains omitted; explicit low-level off disables thinking. Preserve
|
|
15
|
+
the existing harness `xhigh`/`max` -> native `max` compatibility mapping for
|
|
16
|
+
saved sessions. DeepSeek's own raw `xhigh` synonym maps to `high`; that is not
|
|
17
|
+
a reason to silently lower the harness's established highest-effort behavior.
|
|
18
|
+
2. **Meta Muse:** omitted effort stays absent instead of forcing `minimal`.
|
|
19
|
+
Explicit effort validation, `store:false`, encrypted reasoning replay and
|
|
20
|
+
tool commentary phases are unchanged. No Contributor/training-consent models.
|
|
21
|
+
3. **Gemini:** omit deprecated/ignored temperature for `gemini-3.8-flash` and
|
|
22
|
+
`gemini-3.5-flash-lite`. Older model behavior is unchanged. The live API still
|
|
23
|
+
accepts this field, but the official migration guide says to remove it and
|
|
24
|
+
warns that future models reject it. No topP/topK are generated by this adapter.
|
|
25
|
+
|
|
26
|
+
No new supported general-purpose model ID was identified since the prior audit.
|
|
27
|
+
No model was removed and no alias was upgraded to a preview.
|
|
28
|
+
|
|
29
|
+
## Independent provider results
|
|
30
|
+
|
|
31
|
+
| Provider | Official/account result | Decision |
|
|
32
|
+
|---|---|---|
|
|
33
|
+
| DeepSeek | `/models` HTTP 200, two IDs: `deepseek-flash`, `deepseek-v4-pro`. Latest changelog release September 10, V4.1 Flash. Native low/high/max documented. Flash omission/low/high/xhigh/max and Pro low each HTTP 200. | Correct low serialization; retain all limits and prices. |
|
|
34
|
+
| Meta | Official Standard API confirms Muse 1.3 and retained 1.2 on `https://api.meta.ai/v1/responses`; 1.3 adds native max. No configured Meta credential. | Correct omission from official schema/reasoning docs and actual offline adapter tests; do not claim authenticated inference. |
|
|
35
|
+
| Google | Native model listing HTTP 200 (58 records); 3.8 Flash and 3.5 Flash-Lite confirmed, each 1,048,576 input / 65,536 output. 3.8 minimal smoke HTTP 200. | Omit deprecated temperature; preserve thinking-level mapping. New September 15 Live audio models require a Live adapter, not generateContent chat registration. September 17 Antigravity preview is an agent/Interactions API, not a drop-in model. |
|
|
36
|
+
| OpenAI | Native `/models` HTTP 200. Astra Responses omission/xhigh/max HTTP 200; none HTTP 400 explicitly reports supported low/medium/high/xhigh/max. | Existing native Responses max support is correct. Do not import another application's Chat Completions limitations. No catalog change. |
|
|
37
|
+
| Anthropic | Native `/v1/models` HTTP 200 (11 records) confirms Fable 5.1, Opus 5 and Sonnet 5. Fable adaptive thinking + output_config.effort=max HTTP 200. | Native max was already preserved by the adapter; no change. Account-gated models are not inferred from announcements. |
|
|
38
|
+
| xAI | Native `/v1/models` HTTP 200 (12 records) includes Grok 4.6. Omitted effort and xhigh Chat Completions requests HTTP 200. | xhigh was already supported. Keep exactly 200K owner context cap, 64K output, existing aliases. |
|
|
39
|
+
|
|
40
|
+
The model listing counts are account/time-specific, not availability promises.
|
|
41
|
+
No API list had an unconsumed pagination indicator. No 429 occurred and no
|
|
42
|
+
credential was printed or persisted in evidence. Minimal inference probes used
|
|
43
|
+
synthetic "Reply with OK only" prompts and at most 64 output tokens. Successful
|
|
44
|
+
HTTP parameter acceptance is not a long-output, all-modality or full tool-loop
|
|
45
|
+
inference certification. Offline existing tests separately cover streaming,
|
|
46
|
+
reasoning/signature/encrypted replay, tool calls and errors.
|
|
47
|
+
|
|
48
|
+
## Metadata and compatibility
|
|
49
|
+
|
|
50
|
+
- DeepSeek Flash is V4.1 Flash (text/image), Pro is V4 Pro 0813 (text).
|
|
51
|
+
Both have 1,048,576 context / 393,216 maximum output. Native default is
|
|
52
|
+
thinking enabled/high. Nonthinking default max output is 8K; thinking high is
|
|
53
|
+
64K and max is 128K. Temperature has no effect in thinking mode and remains
|
|
54
|
+
omitted. The adapter sends `max_tokens`, not `max_completion_tokens`, and
|
|
55
|
+
does not invent developer-role, store, or strict-tool support.
|
|
56
|
+
- Meta Standard 1.3/1.2 retain 1,048,576 context / 131,072 output and text/image
|
|
57
|
+
input in the harness. Models always reason. Omission lets the model choose
|
|
58
|
+
effort; none/off are invalid. Max is exclusive to Standard 1.3. Standard
|
|
59
|
+
pricing remains $1.25 input / $4.25 output / $0.15 cached input per million.
|
|
60
|
+
- Google current Flash/Lite use native thinking levels rather than a synthetic
|
|
61
|
+
budget. 3.8 MINIMAL remains mapped to LOW by the previously verified adapter;
|
|
62
|
+
3.5 Lite supports MINIMAL. Omission stays omitted. Native API supports more
|
|
63
|
+
media than the pinned text/image agent interface; this patch does not claim
|
|
64
|
+
Live audio, Interactions, image/video output or unrelated tool adapters.
|
|
65
|
+
- OpenAI native context is 1,050,000 with 128K max output; conservative existing
|
|
66
|
+
harness budgets remain unchanged. Astra cannot disable reasoning. The native
|
|
67
|
+
Responses adapter already passes max exactly. The global `/think max` spelling
|
|
68
|
+
still normalizes to harness xhigh; adding a separate UI enum is not this patch.
|
|
69
|
+
- Modern Claude native effort levels include distinct xhigh and max. Adaptive
|
|
70
|
+
thinking omits manual budgets and sampling. Fable/Opus retain 300K owner caps;
|
|
71
|
+
Sonnet's conservative existing budget remains untouched.
|
|
72
|
+
- Grok 4.6 documents 500K native context / 64K output; the harness deliberately
|
|
73
|
+
retains 200K. Its reasoning_effort xhigh is transmitted exactly. Prices remain
|
|
74
|
+
$2 input / $6 output / $0.50 cached input per million; native long-prompt
|
|
75
|
+
multipliers are not represented by the basic catalog cost estimator.
|
|
76
|
+
|
|
77
|
+
Prices/limits not changed in this release remain at their last verified values;
|
|
78
|
+
there is no blanket claim of re-pricing every legacy registry entry. DeepSeek
|
|
79
|
+
current pricing and Meta Standard pricing were independently rechecked. No price,
|
|
80
|
+
context or output-limit diff was required on the changed entries.
|
|
81
|
+
|
|
82
|
+
## First-party sources checked
|
|
83
|
+
|
|
84
|
+
- DeepSeek: [catalog/pricing](https://api-docs.deepseek.com/quick_start/pricing/),
|
|
85
|
+
[thinking](https://api-docs.deepseek.com/guides/thinking_mode/),
|
|
86
|
+
[complete Chat Completions reference](https://api-docs.deepseek.com/api/create-chat-completion/),
|
|
87
|
+
[changelog](https://api-docs.deepseek.com/updates).
|
|
88
|
+
- Meta: [models](https://ai.developer.meta.com/docs/models.md),
|
|
89
|
+
[reasoning](https://ai.developer.meta.com/docs/reasoning.md),
|
|
90
|
+
[Responses protocol](https://ai.developer.meta.com/docs/protocols/responses.md),
|
|
91
|
+
[create response](https://ai.developer.meta.com/docs/api-reference/responses/create-response.md),
|
|
92
|
+
[pricing](https://ai.developer.meta.com/docs/pricing-rate-limits.md).
|
|
93
|
+
HTML indexes intermittently returned HTTP 500; official `.md` pages succeeded.
|
|
94
|
+
- Google: [model catalog](https://ai.google.dev/gemini-api/docs/models),
|
|
95
|
+
[thinking](https://ai.google.dev/gemini-api/docs/thinking.md.txt),
|
|
96
|
+
[latest-model migration](https://ai.google.dev/gemini-api/docs/generate-content/latest-model),
|
|
97
|
+
[changelog](https://ai.google.dev/gemini-api/docs/changelog).
|
|
98
|
+
Some index requests redirected repeatedly; native model listing and direct
|
|
99
|
+
content fetch supplied the data. Locale variants do not alter exact API IDs.
|
|
100
|
+
- OpenAI: [catalog](https://developers.openai.com/api/docs/models/),
|
|
101
|
+
[Astra model reference](https://developers.openai.com/api/docs/models/gpt-6-astra.md).
|
|
102
|
+
- Anthropic: [overview](https://platform.claude.com/docs/en/models/overview),
|
|
103
|
+
[Fable 5.1](https://platform.claude.com/docs/en/models/fable-5-1/overview),
|
|
104
|
+
[effort](https://platform.claude.com/docs/en/build-with-claude/effort).
|
|
105
|
+
- xAI: [catalog](https://docs.x.ai/developers/models),
|
|
106
|
+
[Grok 4.6](https://docs.x.ai/developers/models/grok-4.6).
|
|
107
|
+
|
|
108
|
+
## Verification and recovery
|
|
109
|
+
|
|
110
|
+
Family 77 has exact preimage/postimage hashes, all-file preflight before writes,
|
|
111
|
+
read-only checks, alternate-root and dependency-only modes, and idempotent replay.
|
|
112
|
+
Family 67 validates its historical surface after reversing only the exact new
|
|
113
|
+
edits. Meta's Family 53 snapshot is synchronized. Payload tests exercise actual
|
|
114
|
+
installed adapters, not string-only fixtures. Existing alias contract tests and
|
|
115
|
+
all prior catalog/transport replay tests remain part of the release gates.
|
|
116
|
+
|
|
117
|
+
The release is a three-adapter patch on 2026.9.29. Roll back a standard package
|
|
118
|
+
installation to `johns-harness@2026.9.29`; focused installations must restore their
|
|
119
|
+
recorded pre-patch adapter files, not overwrite state or migrate directories.
|
|
120
|
+
A running gateway caches provider modules. Disk validation is not activation:
|
|
121
|
+
coordinate a safe restart after active work finishes, never interrupt jobs merely
|
|
122
|
+
to report a refreshed version.
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
## Verification and documentation notes
|
|
126
|
+
|
|
127
|
+
The source verifier passes 469 checks. A fresh local-prefix install passes 468
|
|
128
|
+
checks directly; its legacy check05 assumes nested playwright-core, while npm
|
|
129
|
+
hoists that dependency. Resolving playwright-core from the installed package and
|
|
130
|
+
comparing the actual `lib/server/dialog.js` with the complete reviewed vendored
|
|
131
|
+
file confirms the exact patch bytes and guard marker. This is a verifier path
|
|
132
|
+
limitation, not a missing runtime patch. No verifier assertion was weakened.
|
|
133
|
+
|
|
134
|
+
Documentation correction after packing: the September20 authenticated list
|
|
135
|
+
counts are Google **58**, Anthropic **11**, xAI **12**. The initial packed audit
|
|
136
|
+
narrative contained incorrect counts; no catalog entries or adapter logic were
|
|
137
|
+
based on those counts. This source document is the corrected audit record.
|
package/docs/PROVIDER-CATALOG.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Current provider catalog — checked 2026-09-
|
|
1
|
+
# Current provider catalog — checked 2026-09-20
|
|
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
|
|
@@ -31,7 +31,7 @@ Registry presence does not promise account entitlement.
|
|
|
31
31
|
|
|
32
32
|
- **DeepSeek V4:** omitted effort leaves `thinking` and `reasoning_effort` absent,
|
|
33
33
|
preserving the server's default enabled/high. Explicit low-level `off`/`none`
|
|
34
|
-
sets `thinking: {type: "disabled"}`. Minimal/low
|
|
34
|
+
sets `thinking: {type: "disabled"}`. Minimal/low map to native `low`; medium/high map to native `high`;
|
|
35
35
|
xhigh/max map to native `max`. Unknown efforts fail before HTTP. Disabled thinking
|
|
36
36
|
must not carry `reasoning_effort`. In enabled/default mode temperature is omitted
|
|
37
37
|
because the API ignores sampling controls. Use `max_tokens`, not
|
|
@@ -43,10 +43,12 @@ Registry presence does not promise account entitlement.
|
|
|
43
43
|
reasoning replay, and tool-loop commentary `phase`. Always-reasoning;
|
|
44
44
|
minimal/low/medium/high/xhigh, with native max only on Standard 1.3. The pinned
|
|
45
45
|
high-level `/think max` spelling still normalizes to xhigh, not a new global enum.
|
|
46
|
+
Omitted effort stays absent and provider-controlled rather than forcing minimal.
|
|
46
47
|
- **Gemini:** Flash-Lite now enters the native thinking-level branch instead of
|
|
47
48
|
the legacy thinking-budget branch. It supports MINIMAL/LOW/MEDIUM/HIGH; omission
|
|
48
49
|
preserves its native minimal default. 3.8 Flash still maps minimal to LOW because
|
|
49
50
|
the live API rejects MINIMAL (Family 50). No synthetic thinkingBudget is sent.
|
|
51
|
+
Deprecated/ignored temperature is omitted on 3.8 Flash and 3.5 Flash-Lite.
|
|
50
52
|
- **Claude:** current Fable 5/5.1, Opus 5 and Sonnet 5 preserve native xhigh rather
|
|
51
53
|
than silently downgrading it to high or promoting it to max. Low-level max remains
|
|
52
54
|
distinct. Minimal maps to low. Adaptive thinking has no manual token budget.
|
|
@@ -60,7 +62,7 @@ Registry presence does not promise account entitlement.
|
|
|
60
62
|
public thinking enum still tops out at xhigh. Transport token ceilings are not
|
|
61
63
|
raised merely because the provider advertises a larger native window.
|
|
62
64
|
- **Grok:** existing native effort mapping and 200K owner cap retained; live low
|
|
63
|
-
effort
|
|
65
|
+
and xhigh effort requests accepted by `grok-4.6`.
|
|
64
66
|
|
|
65
67
|
The pinned high-level API represents `/think off` as an absent reasoning option on
|
|
66
68
|
some routes. Consequently omission and explicit off cannot be distinguished there;
|
|
@@ -96,7 +98,8 @@ Subscription cost entries remain zero (subscription-billed), not API-price estim
|
|
|
96
98
|
|
|
97
99
|
## Evidence and sources
|
|
98
100
|
|
|
99
|
-
|
|
101
|
+
Baseline sources checked 2026-09-13; six-provider re-audit 2026-09-20 is in
|
|
102
|
+
[the dated audit](PROVIDER-AUDIT-2026-09-20.md). First-party pages unless noted. Credential-bearing API
|
|
100
103
|
requests were sent only to the relevant official host, with redirects disabled.
|
|
101
104
|
|
|
102
105
|
- DeepSeek: <https://api-docs.deepseek.com/quick_start/pricing/>,
|
|
@@ -1666,6 +1666,28 @@ export const MODELS = {
|
|
|
1666
1666
|
contextWindow: 300000, // JOHNNESS_PATCH_FABLE_51_CONTEXT_300K
|
|
1667
1667
|
maxTokens: 128000,
|
|
1668
1668
|
},
|
|
1669
|
+
/* JOHNNESS_PATCH_OPUS_55_MODEL (family 78): Claude Opus 5.5. API id "claude-opus-5-5" (fixed id, no
|
|
1670
|
+
date suffix) confirmed against platform.claude.com/docs/en/models/opus-5-5 on
|
|
1671
|
+
2026-09-23: $4/$20 per MTok, cache reads $0.20, 5m cache writes $5, 1M native
|
|
1672
|
+
context, 128K max output, adaptive thinking always on (effort is the only control,
|
|
1673
|
+
default medium). contextWindow capped at 300K per the family 30 Opus budget. */
|
|
1674
|
+
"claude-opus-5-5": {
|
|
1675
|
+
id: "claude-opus-5-5",
|
|
1676
|
+
name: "Claude Opus 5.5",
|
|
1677
|
+
api: "anthropic-messages",
|
|
1678
|
+
provider: "anthropic",
|
|
1679
|
+
baseUrl: "https://api.anthropic.com",
|
|
1680
|
+
reasoning: true,
|
|
1681
|
+
input: ["text", "image"],
|
|
1682
|
+
cost: {
|
|
1683
|
+
input: 4,
|
|
1684
|
+
output: 20,
|
|
1685
|
+
cacheRead: 0.2,
|
|
1686
|
+
cacheWrite: 5,
|
|
1687
|
+
},
|
|
1688
|
+
contextWindow: 300000,
|
|
1689
|
+
maxTokens: 128000,
|
|
1690
|
+
},
|
|
1669
1691
|
/* JOHNNESS_PATCH_DEFAULTS_61 (family 61): Claude Opus 5; native 1M window; 300K per family 30 Opus budget. */
|
|
1670
1692
|
"claude-opus-5": {
|
|
1671
1693
|
id: "claude-opus-5",
|
|
@@ -38,6 +38,7 @@ export function supportsXhigh(model) {
|
|
|
38
38
|
// JOHNNESS_PATCH_PROVIDER_CATALOG_67
|
|
39
39
|
if (model.provider === "deepseek" && ["deepseek-flash", "deepseek-v4-pro"].includes(model.id)) return true;
|
|
40
40
|
if (model.provider === "anthropic" && ["claude-opus-5", "claude-sonnet-5", "claude-fable-5", "claude-fable-5-1"].includes(model.id)) return true;
|
|
41
|
+
if (model.provider === "anthropic" && model.id === "claude-opus-5-5") return true; // JOHNNESS_PATCH_OPUS_55_MODEL
|
|
41
42
|
// JOHNNESS_PATCH_MUSE_SPARK
|
|
42
43
|
if (model.provider === "meta" && ["muse-spark-1.3", "muse-spark-1.2"].includes(model.id)) return true;
|
|
43
44
|
if (model.id.includes("gpt-5.2") || model.id.includes("gpt-5.3")) {
|
|
@@ -353,7 +353,7 @@ function supportsAdaptiveThinking(modelId) {
|
|
|
353
353
|
*/
|
|
354
354
|
function mapThinkingLevelToEffort(level, modelId) {
|
|
355
355
|
// JOHNNESS_PATCH_PROVIDER_CATALOG_67: modern Claude supports distinct xhigh/max.
|
|
356
|
-
if (["claude-opus-5", "claude-sonnet-5", "claude-fable-5", "claude-fable-5-1"].includes(modelId)) {
|
|
356
|
+
if (["claude-opus-5", "claude-sonnet-5", "claude-fable-5", "claude-fable-5-1", "claude-opus-5-5"].includes(modelId)) { // JOHNNESS_PATCH_OPUS_55_MODEL
|
|
357
357
|
if (["low", "medium", "high", "xhigh", "max"].includes(level)) return level;
|
|
358
358
|
return level === "minimal" ? "low" : "high";
|
|
359
359
|
}
|
|
@@ -533,7 +533,7 @@ function buildParams(model, context, isOAuthToken, options) {
|
|
|
533
533
|
}
|
|
534
534
|
// Temperature is incompatible with extended thinking (adaptive or budget-based).
|
|
535
535
|
if (options?.temperature !== undefined && !options?.thinkingEnabled &&
|
|
536
|
-
!["claude-opus-5", "claude-sonnet-5", "claude-fable-5", "claude-fable-5-1", "claude-opus-4-8", "claude-opus-4-7"].includes(model.id)) { // JOHNNESS_PATCH_PROVIDER_CATALOG_67
|
|
536
|
+
!["claude-opus-5", "claude-sonnet-5", "claude-fable-5", "claude-fable-5-1", "claude-opus-4-8", "claude-opus-4-7", "claude-opus-5-5"].includes(model.id)) { // JOHNNESS_PATCH_PROVIDER_CATALOG_67 JOHNNESS_PATCH_OPUS_55_MODEL
|
|
537
537
|
params.temperature = options.temperature;
|
|
538
538
|
}
|
|
539
539
|
if (context.tools) {
|
|
@@ -252,7 +252,8 @@ function createClient(model, apiKey, optionsHeaders) {
|
|
|
252
252
|
function buildParams(model, context, options = {}) {
|
|
253
253
|
const contents = convertMessages(model, context);
|
|
254
254
|
const generationConfig = {};
|
|
255
|
-
|
|
255
|
+
// JOHNNESS_PATCH_PROVIDER_AUDIT_77: sampling is deprecated/ignored on these models.
|
|
256
|
+
if (options.temperature !== undefined && !["gemini-3.8-flash", "gemini-3.5-flash-lite"].includes(model.id)) {
|
|
256
257
|
generationConfig.temperature = options.temperature;
|
|
257
258
|
}
|
|
258
259
|
if (options.maxTokens !== undefined) {
|
|
@@ -364,7 +364,10 @@ function buildParams(model, context, options) {
|
|
|
364
364
|
} else {
|
|
365
365
|
if (effort !== undefined) {
|
|
366
366
|
params.thinking = { type: "enabled" };
|
|
367
|
-
|
|
367
|
+
// JOHNNESS_PATCH_PROVIDER_AUDIT_77: low is native on both V4 routes (2026-09-20).
|
|
368
|
+
// Preserve the harness's existing xhigh -> max compatibility mapping.
|
|
369
|
+
params.reasoning_effort = ["minimal", "low"].includes(effort) ? "low"
|
|
370
|
+
: ["xhigh", "max"].includes(effort) ? "max" : "high";
|
|
368
371
|
}
|
|
369
372
|
// Sampling controls have no effect in thinking mode; never imply they do.
|
|
370
373
|
delete params.temperature;
|
|
@@ -176,11 +176,12 @@ function buildParams(model, context, options) {
|
|
|
176
176
|
}
|
|
177
177
|
// JOHNNESS_PATCH_MUSE_SPARK: always-reasoning, stateless encrypted replay.
|
|
178
178
|
if (model.provider === "meta") {
|
|
179
|
-
|
|
180
|
-
const
|
|
179
|
+
// JOHNNESS_PATCH_PROVIDER_AUDIT_77: omission keeps Meta's model-selected effort.
|
|
180
|
+
const effort = options?.reasoningEffort;
|
|
181
|
+
const allowed = [undefined, "minimal", "low", "medium", "high", "xhigh"];
|
|
181
182
|
if (model.id === "muse-spark-1.3") allowed.push("max");
|
|
182
183
|
if (!allowed.includes(effort)) throw new Error("Muse Spark always reasons. Use minimal, low, medium, high or xhigh (max only on Standard 1.3); none/off is not supported.");
|
|
183
|
-
params.reasoning = { effort, summary: options?.reasoningSummary || "auto" };
|
|
184
|
+
params.reasoning = { ...(effort === undefined ? {} : { effort }), summary: options?.reasoningSummary || "auto" };
|
|
184
185
|
params.include = ["reasoning.encrypted_content"];
|
|
185
186
|
params.store = false;
|
|
186
187
|
// Avoid inventing Meta pricing multipliers from OpenAI service tiers.
|
package/package.json
CHANGED
|
@@ -1666,6 +1666,28 @@ export const MODELS = {
|
|
|
1666
1666
|
contextWindow: 300000, // JOHNNESS_PATCH_FABLE_51_CONTEXT_300K
|
|
1667
1667
|
maxTokens: 128000,
|
|
1668
1668
|
},
|
|
1669
|
+
/* JOHNNESS_PATCH_OPUS_55_MODEL (family 78): Claude Opus 5.5. API id "claude-opus-5-5" (fixed id, no
|
|
1670
|
+
date suffix) confirmed against platform.claude.com/docs/en/models/opus-5-5 on
|
|
1671
|
+
2026-09-23: $4/$20 per MTok, cache reads $0.20, 5m cache writes $5, 1M native
|
|
1672
|
+
context, 128K max output, adaptive thinking always on (effort is the only control,
|
|
1673
|
+
default medium). contextWindow capped at 300K per the family 30 Opus budget. */
|
|
1674
|
+
"claude-opus-5-5": {
|
|
1675
|
+
id: "claude-opus-5-5",
|
|
1676
|
+
name: "Claude Opus 5.5",
|
|
1677
|
+
api: "anthropic-messages",
|
|
1678
|
+
provider: "anthropic",
|
|
1679
|
+
baseUrl: "https://api.anthropic.com",
|
|
1680
|
+
reasoning: true,
|
|
1681
|
+
input: ["text", "image"],
|
|
1682
|
+
cost: {
|
|
1683
|
+
input: 4,
|
|
1684
|
+
output: 20,
|
|
1685
|
+
cacheRead: 0.2,
|
|
1686
|
+
cacheWrite: 5,
|
|
1687
|
+
},
|
|
1688
|
+
contextWindow: 300000,
|
|
1689
|
+
maxTokens: 128000,
|
|
1690
|
+
},
|
|
1669
1691
|
/* JOHNNESS_PATCH_DEFAULTS_61 (family 61): Claude Opus 5; native 1M window; 300K per family 30 Opus budget. */
|
|
1670
1692
|
"claude-opus-5": {
|
|
1671
1693
|
id: "claude-opus-5",
|
|
@@ -38,6 +38,7 @@ export function supportsXhigh(model) {
|
|
|
38
38
|
// JOHNNESS_PATCH_PROVIDER_CATALOG_67
|
|
39
39
|
if (model.provider === "deepseek" && ["deepseek-flash", "deepseek-v4-pro"].includes(model.id)) return true;
|
|
40
40
|
if (model.provider === "anthropic" && ["claude-opus-5", "claude-sonnet-5", "claude-fable-5", "claude-fable-5-1"].includes(model.id)) return true;
|
|
41
|
+
if (model.provider === "anthropic" && model.id === "claude-opus-5-5") return true; // JOHNNESS_PATCH_OPUS_55_MODEL
|
|
41
42
|
// JOHNNESS_PATCH_MUSE_SPARK
|
|
42
43
|
if (model.provider === "meta" && ["muse-spark-1.3", "muse-spark-1.2"].includes(model.id)) return true;
|
|
43
44
|
if (model.id.includes("gpt-5.2") || model.id.includes("gpt-5.3")) {
|
|
@@ -353,7 +353,7 @@ function supportsAdaptiveThinking(modelId) {
|
|
|
353
353
|
*/
|
|
354
354
|
function mapThinkingLevelToEffort(level, modelId) {
|
|
355
355
|
// JOHNNESS_PATCH_PROVIDER_CATALOG_67: modern Claude supports distinct xhigh/max.
|
|
356
|
-
if (["claude-opus-5", "claude-sonnet-5", "claude-fable-5", "claude-fable-5-1"].includes(modelId)) {
|
|
356
|
+
if (["claude-opus-5", "claude-sonnet-5", "claude-fable-5", "claude-fable-5-1", "claude-opus-5-5"].includes(modelId)) { // JOHNNESS_PATCH_OPUS_55_MODEL
|
|
357
357
|
if (["low", "medium", "high", "xhigh", "max"].includes(level)) return level;
|
|
358
358
|
return level === "minimal" ? "low" : "high";
|
|
359
359
|
}
|
|
@@ -533,7 +533,7 @@ function buildParams(model, context, isOAuthToken, options) {
|
|
|
533
533
|
}
|
|
534
534
|
// Temperature is incompatible with extended thinking (adaptive or budget-based).
|
|
535
535
|
if (options?.temperature !== undefined && !options?.thinkingEnabled &&
|
|
536
|
-
!["claude-opus-5", "claude-sonnet-5", "claude-fable-5", "claude-fable-5-1", "claude-opus-4-8", "claude-opus-4-7"].includes(model.id)) { // JOHNNESS_PATCH_PROVIDER_CATALOG_67
|
|
536
|
+
!["claude-opus-5", "claude-sonnet-5", "claude-fable-5", "claude-fable-5-1", "claude-opus-4-8", "claude-opus-4-7", "claude-opus-5-5"].includes(model.id)) { // JOHNNESS_PATCH_PROVIDER_CATALOG_67 JOHNNESS_PATCH_OPUS_55_MODEL
|
|
537
537
|
params.temperature = options.temperature;
|
|
538
538
|
}
|
|
539
539
|
if (context.tools) {
|
|
@@ -252,7 +252,8 @@ function createClient(model, apiKey, optionsHeaders) {
|
|
|
252
252
|
function buildParams(model, context, options = {}) {
|
|
253
253
|
const contents = convertMessages(model, context);
|
|
254
254
|
const generationConfig = {};
|
|
255
|
-
|
|
255
|
+
// JOHNNESS_PATCH_PROVIDER_AUDIT_77: sampling is deprecated/ignored on these models.
|
|
256
|
+
if (options.temperature !== undefined && !["gemini-3.8-flash", "gemini-3.5-flash-lite"].includes(model.id)) {
|
|
256
257
|
generationConfig.temperature = options.temperature;
|
|
257
258
|
}
|
|
258
259
|
if (options.maxTokens !== undefined) {
|
|
@@ -364,7 +364,10 @@ function buildParams(model, context, options) {
|
|
|
364
364
|
} else {
|
|
365
365
|
if (effort !== undefined) {
|
|
366
366
|
params.thinking = { type: "enabled" };
|
|
367
|
-
|
|
367
|
+
// JOHNNESS_PATCH_PROVIDER_AUDIT_77: low is native on both V4 routes (2026-09-20).
|
|
368
|
+
// Preserve the harness's existing xhigh -> max compatibility mapping.
|
|
369
|
+
params.reasoning_effort = ["minimal", "low"].includes(effort) ? "low"
|
|
370
|
+
: ["xhigh", "max"].includes(effort) ? "max" : "high";
|
|
368
371
|
}
|
|
369
372
|
// Sampling controls have no effect in thinking mode; never imply they do.
|
|
370
373
|
delete params.temperature;
|
|
@@ -176,11 +176,12 @@ function buildParams(model, context, options) {
|
|
|
176
176
|
}
|
|
177
177
|
// JOHNNESS_PATCH_MUSE_SPARK: always-reasoning, stateless encrypted replay.
|
|
178
178
|
if (model.provider === "meta") {
|
|
179
|
-
|
|
180
|
-
const
|
|
179
|
+
// JOHNNESS_PATCH_PROVIDER_AUDIT_77: omission keeps Meta's model-selected effort.
|
|
180
|
+
const effort = options?.reasoningEffort;
|
|
181
|
+
const allowed = [undefined, "minimal", "low", "medium", "high", "xhigh"];
|
|
181
182
|
if (model.id === "muse-spark-1.3") allowed.push("max");
|
|
182
183
|
if (!allowed.includes(effort)) throw new Error("Muse Spark always reasons. Use minimal, low, medium, high or xhigh (max only on Standard 1.3); none/off is not supported.");
|
|
183
|
-
params.reasoning = { effort, summary: options?.reasoningSummary || "auto" };
|
|
184
|
+
params.reasoning = { ...(effort === undefined ? {} : { effort }), summary: options?.reasoningSummary || "auto" };
|
|
184
185
|
params.include = ["reasoning.encrypted_content"];
|
|
185
186
|
params.store = false;
|
|
186
187
|
// Avoid inventing Meta pricing multipliers from OpenAI service tiers.
|