johns-harness 2026.9.30 → 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 +5 -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 +7 -0
- package/docs/PROVIDER-AUDIT-2026-09-20.md +21 -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/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/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
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
|
+
|
|
3
7
|
## 2026.9.30
|
|
4
8
|
|
|
5
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.
|
|
@@ -40,7 +44,7 @@
|
|
|
40
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.
|
|
41
45
|
- Roll back with `npm i -g johns-harness@2026.9.23`.
|
|
42
46
|
|
|
43
|
-
## 2026.9.
|
|
47
|
+
## 2026.9.31
|
|
44
48
|
|
|
45
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.
|
|
46
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
|
@@ -2800,3 +2800,10 @@ still means harness `xhigh`; it is not a new distinct UI level in this patch.
|
|
|
2800
2800
|
Evidence and official sources: [weekly audit](PROVIDER-AUDIT-2026-09-20.md).
|
|
2801
2801
|
Tests: `tests/provider-audit-20260920.test.mjs`, provider catalog, Muse transport
|
|
2802
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.
|
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
This weekly audit builds on the successful September 13 catalog release, not on
|
|
4
4
|
upstream OpenClaw. Registry IDs, aliases, saved-session IDs, owner context caps,
|
|
5
5
|
credentials and the selected default are unchanged. Family 77 is a focused
|
|
6
|
-
provider-parameter patch
|
|
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.
|
|
7
9
|
|
|
8
10
|
## Changes
|
|
9
11
|
|
|
@@ -30,10 +32,10 @@ No model was removed and no alias was upgraded to a preview.
|
|
|
30
32
|
|---|---|---|
|
|
31
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. |
|
|
32
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. |
|
|
33
|
-
| Google | Native model listing HTTP 200 (
|
|
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. |
|
|
34
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. |
|
|
35
|
-
| Anthropic | Native `/v1/models` HTTP 200 (
|
|
36
|
-
| xAI | Native `/v1/models` HTTP 200 (
|
|
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. |
|
|
37
39
|
|
|
38
40
|
The model listing counts are account/time-specific, not availability promises.
|
|
39
41
|
No API list had an unconsumed pagination indicator. No 429 occurred and no
|
|
@@ -118,3 +120,18 @@ recorded pre-patch adapter files, not overwrite state or migrate directories.
|
|
|
118
120
|
A running gateway caches provider modules. Disk validation is not activation:
|
|
119
121
|
coordinate a safe restart after active work finishes, never interrupt jobs merely
|
|
120
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.
|
|
@@ -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) {
|
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) {
|