johns-harness 2026.9.35 → 2026.9.36

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/auth-profiles-5CHn7vq1.js +6 -0
  3. package/dist/channels/plugins/actions/telegram.js +1 -0
  4. package/dist/config-koj5M_EO.js +6 -0
  5. package/dist/daemon-cli.js +6 -0
  6. package/dist/model-selection-BGlGpPgM.js +6 -0
  7. package/dist/model-selection-BU6wl1le.js +6 -0
  8. package/dist/model-selection-L7RMwsG-.js +6 -0
  9. package/dist/plugin-sdk/config-4Fgm-yEH.js +6 -0
  10. package/dist/plugin-sdk/config-Di-lyCdh.js +6 -0
  11. package/dist/plugin-sdk/discord.js +6 -0
  12. package/dist/plugin-sdk/mattermost.js +1 -0
  13. package/dist/plugin-sdk/model-auth-CX9cPHdC.js +6 -0
  14. package/dist/plugin-sdk/model-auth-Ciehz0x5.js +6 -0
  15. package/dist/plugin-sdk/model-auth-DVyo6JSX.js +6 -0
  16. package/dist/plugin-sdk/model-auth-kiHYHGrs.js +6 -0
  17. package/dist/plugin-sdk/model-selection-Dbj4jDYM.js +6 -0
  18. package/dist/plugin-sdk/thinking-B-rIrY_n.js +1 -0
  19. package/dist/plugin-sdk/thinking-CopbP_Cn.js +1 -0
  20. package/dist/plugin-sdk/thinking-WQ4Zq8Nl.js +1 -0
  21. package/dist/plugin-sdk/thinking-WXqkGljb.js +1 -0
  22. package/dist/plugin-sdk/thinking-_uXqFaFO.js +1 -0
  23. package/dist/plugin-sdk/thinking-pTdxk2dr.js +1 -0
  24. package/dist/thinking-B5B36ffe.js +1 -0
  25. package/dist/thinking-BYwvlJ3S.js +1 -0
  26. package/dist/thinking-CAzdgmNV.js +1 -0
  27. package/dist/thinking-DykY2Fzj.js +1 -0
  28. package/docs/PATCHES.md +13 -0
  29. package/docs/PROVIDER-CATALOG.md +12 -6
  30. package/node_modules/@mariozechner/pi-ai/dist/models.generated.js +24 -0
  31. package/node_modules/@mariozechner/pi-ai/dist/models.js +1 -0
  32. package/node_modules/@mariozechner/pi-ai/dist/providers/anthropic.js +2 -2
  33. package/package.json +1 -1
  34. package/vendor/patched-deps/@mariozechner/pi-ai/dist/models.generated.js +24 -0
  35. package/vendor/patched-deps/@mariozechner/pi-ai/dist/models.js +1 -0
  36. package/vendor/patched-deps/@mariozechner/pi-ai/dist/providers/anthropic.js +2 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 2026.9.36
4
+
5
+ - Family 82 (daily model integration, 2026-09-29): Claude Sonnet 5.5 (`claude-sonnet-5-5`) ships on `anthropic`. Card data from the official model page checked 2026-09-29: $2/$10 per MTok, cache read $0.20, 5m write $2.50, 1h write $4, 1M native context and 128K max output, adaptive thinking on by default (effort `low` through `max`, default `high`; `between_tools` is the lowest setting), and non-default `temperature`/`top_p`/`top_k` are rejected. `contextWindow` stays the standing 175K Sonnet window (owner caps do not change). Live probe 2026-09-29: the default request and the `thinking: adaptive` + `output_config.effort: xhigh` request both returned 200.
6
+ - Aliases: `sonnet` now resolves to `anthropic/claude-sonnet-5-5`; `sonnet5` keeps Claude Sonnet 5. Everything else is unchanged. A user alias that pins Sonnet 5 under `sonnet` moves forward on the next config load (family 79) and keeps `sonnet5`.
7
+ - Exact replay `scripts/patch-sonnet-5-5-model.py` (29 files); verifier checks 82.1-82.12. Roll back with `npm i -g johns-harness@2026.9.35`.
8
+
3
9
  ## 2026.9.35
4
10
 
5
11
  - Family 81 (session store memory, 2026-09-28): the gateway no longer runs out of memory every few days. `sessions.json` stops storing `skillsSnapshot` and `systemPromptReport` in every entry (they are rebuilt in memory on demand); existing stores shrink on the first write after the update (the live main store: 27 MB to 0.3 MB). Writes are compact JSON with one fewer full clone per load: 347 ms to 5 ms per session update on the live store copy.
@@ -5134,6 +5134,12 @@ 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_SONNET_55_MODEL: Claude Sonnet 5.5 is the newest Sonnet; `sonnet` moves to it and
5138
+ // Sonnet 5 keeps the versioned alias sonnet5.
5139
+ Object.assign(DEFAULT_MODEL_ALIASES, {
5140
+ sonnet: "anthropic/claude-sonnet-5-5",
5141
+ sonnet5: "anthropic/claude-sonnet-5"
5142
+ });
5137
5143
  // JOHNNESS_PATCH_OPUS_55_MODEL: Claude Opus 5.5 is the newest Opus; `opus` moves to it, opus-5 stays in the catalog.
5138
5144
  Object.assign(DEFAULT_MODEL_ALIASES, {
5139
5145
  opus: "anthropic/claude-opus-5-5",
@@ -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-sonnet-5-5", // JOHNNESS_PATCH_SONNET_55_MODEL
2113
2114
  "anthropic/claude-opus-5-5", // JOHNNESS_PATCH_OPUS_55_MODEL
2114
2115
  "xai/grok-4.7", // JOHNNESS_PATCH_DAILY_MODELS_80
2115
2116
  "openai/gpt-6-sol",
@@ -1829,6 +1829,12 @@ 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_SONNET_55_MODEL: Claude Sonnet 5.5 is the newest Sonnet; `sonnet` moves to it and
1833
+ // Sonnet 5 keeps the versioned alias sonnet5.
1834
+ Object.assign(DEFAULT_MODEL_ALIASES, {
1835
+ sonnet: "anthropic/claude-sonnet-5-5",
1836
+ sonnet5: "anthropic/claude-sonnet-5"
1837
+ });
1832
1838
  // JOHNNESS_PATCH_OPUS_55_MODEL: Claude Opus 5.5 is the newest Opus; `opus` moves to it, opus-5 stays in the catalog.
1833
1839
  Object.assign(DEFAULT_MODEL_ALIASES, {
1834
1840
  opus: "anthropic/claude-opus-5-5",
@@ -4981,6 +4981,12 @@ 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_SONNET_55_MODEL: Claude Sonnet 5.5 is the newest Sonnet; `sonnet` moves to it and
4985
+ // Sonnet 5 keeps the versioned alias sonnet5.
4986
+ Object.assign(DEFAULT_MODEL_ALIASES, {
4987
+ sonnet: "anthropic/claude-sonnet-5-5",
4988
+ sonnet5: "anthropic/claude-sonnet-5"
4989
+ });
4984
4990
  // JOHNNESS_PATCH_OPUS_55_MODEL: Claude Opus 5.5 is the newest Opus; `opus` moves to it, opus-5 stays in the catalog.
4985
4991
  Object.assign(DEFAULT_MODEL_ALIASES, {
4986
4992
  opus: "anthropic/claude-opus-5-5",
@@ -1686,6 +1686,12 @@ 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_SONNET_55_MODEL: Claude Sonnet 5.5 is the newest Sonnet; `sonnet` moves to it and
1690
+ // Sonnet 5 keeps the versioned alias sonnet5.
1691
+ Object.assign(DEFAULT_MODEL_ALIASES, {
1692
+ sonnet: "anthropic/claude-sonnet-5-5",
1693
+ sonnet5: "anthropic/claude-sonnet-5"
1694
+ });
1689
1695
  // JOHNNESS_PATCH_OPUS_55_MODEL: Claude Opus 5.5 is the newest Opus; `opus` moves to it, opus-5 stays in the catalog.
1690
1696
  Object.assign(DEFAULT_MODEL_ALIASES, {
1691
1697
  opus: "anthropic/claude-opus-5-5",
@@ -1661,6 +1661,12 @@ 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_SONNET_55_MODEL: Claude Sonnet 5.5 is the newest Sonnet; `sonnet` moves to it and
1665
+ // Sonnet 5 keeps the versioned alias sonnet5.
1666
+ Object.assign(DEFAULT_MODEL_ALIASES, {
1667
+ sonnet: "anthropic/claude-sonnet-5-5",
1668
+ sonnet5: "anthropic/claude-sonnet-5"
1669
+ });
1664
1670
  // JOHNNESS_PATCH_OPUS_55_MODEL: Claude Opus 5.5 is the newest Opus; `opus` moves to it, opus-5 stays in the catalog.
1665
1671
  Object.assign(DEFAULT_MODEL_ALIASES, {
1666
1672
  opus: "anthropic/claude-opus-5-5",
@@ -1592,6 +1592,12 @@ 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_SONNET_55_MODEL: Claude Sonnet 5.5 is the newest Sonnet; `sonnet` moves to it and
1596
+ // Sonnet 5 keeps the versioned alias sonnet5.
1597
+ Object.assign(DEFAULT_MODEL_ALIASES, {
1598
+ sonnet: "anthropic/claude-sonnet-5-5",
1599
+ sonnet5: "anthropic/claude-sonnet-5"
1600
+ });
1595
1601
  // JOHNNESS_PATCH_OPUS_55_MODEL: Claude Opus 5.5 is the newest Opus; `opus` moves to it, opus-5 stays in the catalog.
1596
1602
  Object.assign(DEFAULT_MODEL_ALIASES, {
1597
1603
  opus: "anthropic/claude-opus-5-5",
@@ -7079,6 +7079,12 @@ 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_SONNET_55_MODEL: Claude Sonnet 5.5 is the newest Sonnet; `sonnet` moves to it and
7083
+ // Sonnet 5 keeps the versioned alias sonnet5.
7084
+ Object.assign(DEFAULT_MODEL_ALIASES, {
7085
+ sonnet: "anthropic/claude-sonnet-5-5",
7086
+ sonnet5: "anthropic/claude-sonnet-5"
7087
+ });
7082
7088
  // JOHNNESS_PATCH_OPUS_55_MODEL: Claude Opus 5.5 is the newest Opus; `opus` moves to it, opus-5 stays in the catalog.
7083
7089
  Object.assign(DEFAULT_MODEL_ALIASES, {
7084
7090
  opus: "anthropic/claude-opus-5-5",
@@ -8080,6 +8080,12 @@ 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_SONNET_55_MODEL: Claude Sonnet 5.5 is the newest Sonnet; `sonnet` moves to it and
8084
+ // Sonnet 5 keeps the versioned alias sonnet5.
8085
+ Object.assign(DEFAULT_MODEL_ALIASES, {
8086
+ sonnet: "anthropic/claude-sonnet-5-5",
8087
+ sonnet5: "anthropic/claude-sonnet-5"
8088
+ });
8083
8089
  // JOHNNESS_PATCH_OPUS_55_MODEL: Claude Opus 5.5 is the newest Opus; `opus` moves to it, opus-5 stays in the catalog.
8084
8090
  Object.assign(DEFAULT_MODEL_ALIASES, {
8085
8091
  opus: "anthropic/claude-opus-5-5",
@@ -5209,6 +5209,12 @@ 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_SONNET_55_MODEL: Claude Sonnet 5.5 is the newest Sonnet; `sonnet` moves to it and
5213
+ // Sonnet 5 keeps the versioned alias sonnet5.
5214
+ Object.assign(DEFAULT_MODEL_ALIASES, {
5215
+ sonnet: "anthropic/claude-sonnet-5-5",
5216
+ sonnet5: "anthropic/claude-sonnet-5"
5217
+ });
5212
5218
  // JOHNNESS_PATCH_OPUS_55_MODEL: Claude Opus 5.5 is the newest Opus; `opus` moves to it, opus-5 stays in the catalog.
5213
5219
  Object.assign(DEFAULT_MODEL_ALIASES, {
5214
5220
  opus: "anthropic/claude-opus-5-5",
@@ -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-sonnet-5-5", // JOHNNESS_PATCH_SONNET_55_MODEL
3138
3139
  "anthropic/claude-opus-5-5", // JOHNNESS_PATCH_OPUS_55_MODEL
3139
3140
  "xai/grok-4.7", // JOHNNESS_PATCH_DAILY_MODELS_80
3140
3141
  "openai/gpt-6-sol",
@@ -6000,6 +6000,12 @@ 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_SONNET_55_MODEL: Claude Sonnet 5.5 is the newest Sonnet; `sonnet` moves to it and
6004
+ // Sonnet 5 keeps the versioned alias sonnet5.
6005
+ Object.assign(DEFAULT_MODEL_ALIASES, {
6006
+ sonnet: "anthropic/claude-sonnet-5-5",
6007
+ sonnet5: "anthropic/claude-sonnet-5"
6008
+ });
6003
6009
  // JOHNNESS_PATCH_OPUS_55_MODEL: Claude Opus 5.5 is the newest Opus; `opus` moves to it, opus-5 stays in the catalog.
6004
6010
  Object.assign(DEFAULT_MODEL_ALIASES, {
6005
6011
  opus: "anthropic/claude-opus-5-5",
@@ -4969,6 +4969,12 @@ 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_SONNET_55_MODEL: Claude Sonnet 5.5 is the newest Sonnet; `sonnet` moves to it and
4973
+ // Sonnet 5 keeps the versioned alias sonnet5.
4974
+ Object.assign(DEFAULT_MODEL_ALIASES, {
4975
+ sonnet: "anthropic/claude-sonnet-5-5",
4976
+ sonnet5: "anthropic/claude-sonnet-5"
4977
+ });
4972
4978
  // JOHNNESS_PATCH_OPUS_55_MODEL: Claude Opus 5.5 is the newest Opus; `opus` moves to it, opus-5 stays in the catalog.
4973
4979
  Object.assign(DEFAULT_MODEL_ALIASES, {
4974
4980
  opus: "anthropic/claude-opus-5-5",
@@ -4973,6 +4973,12 @@ 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_SONNET_55_MODEL: Claude Sonnet 5.5 is the newest Sonnet; `sonnet` moves to it and
4977
+ // Sonnet 5 keeps the versioned alias sonnet5.
4978
+ Object.assign(DEFAULT_MODEL_ALIASES, {
4979
+ sonnet: "anthropic/claude-sonnet-5-5",
4980
+ sonnet5: "anthropic/claude-sonnet-5"
4981
+ });
4976
4982
  // JOHNNESS_PATCH_OPUS_55_MODEL: Claude Opus 5.5 is the newest Opus; `opus` moves to it, opus-5 stays in the catalog.
4977
4983
  Object.assign(DEFAULT_MODEL_ALIASES, {
4978
4984
  opus: "anthropic/claude-opus-5-5",
@@ -4973,6 +4973,12 @@ 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_SONNET_55_MODEL: Claude Sonnet 5.5 is the newest Sonnet; `sonnet` moves to it and
4977
+ // Sonnet 5 keeps the versioned alias sonnet5.
4978
+ Object.assign(DEFAULT_MODEL_ALIASES, {
4979
+ sonnet: "anthropic/claude-sonnet-5-5",
4980
+ sonnet5: "anthropic/claude-sonnet-5"
4981
+ });
4976
4982
  // JOHNNESS_PATCH_OPUS_55_MODEL: Claude Opus 5.5 is the newest Opus; `opus` moves to it, opus-5 stays in the catalog.
4977
4983
  Object.assign(DEFAULT_MODEL_ALIASES, {
4978
4984
  opus: "anthropic/claude-opus-5-5",
@@ -4782,6 +4782,12 @@ 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_SONNET_55_MODEL: Claude Sonnet 5.5 is the newest Sonnet; `sonnet` moves to it and
4786
+ // Sonnet 5 keeps the versioned alias sonnet5.
4787
+ Object.assign(DEFAULT_MODEL_ALIASES, {
4788
+ sonnet: "anthropic/claude-sonnet-5-5",
4789
+ sonnet5: "anthropic/claude-sonnet-5"
4790
+ });
4785
4791
  // JOHNNESS_PATCH_OPUS_55_MODEL: Claude Opus 5.5 is the newest Opus; `opus` moves to it, opus-5 stays in the catalog.
4786
4792
  Object.assign(DEFAULT_MODEL_ALIASES, {
4787
4793
  opus: "anthropic/claude-opus-5-5",
@@ -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-sonnet-5-5", // JOHNNESS_PATCH_SONNET_55_MODEL
993
994
  "anthropic/claude-opus-5-5", // JOHNNESS_PATCH_OPUS_55_MODEL
994
995
  "xai/grok-4.7", // JOHNNESS_PATCH_DAILY_MODELS_80
995
996
  "openai/gpt-6-sol",
@@ -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-sonnet-5-5", // JOHNNESS_PATCH_SONNET_55_MODEL
993
994
  "anthropic/claude-opus-5-5", // JOHNNESS_PATCH_OPUS_55_MODEL
994
995
  "xai/grok-4.7", // JOHNNESS_PATCH_DAILY_MODELS_80
995
996
  "openai/gpt-6-sol",
@@ -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-sonnet-5-5", // JOHNNESS_PATCH_SONNET_55_MODEL
993
994
  "anthropic/claude-opus-5-5", // JOHNNESS_PATCH_OPUS_55_MODEL
994
995
  "xai/grok-4.7", // JOHNNESS_PATCH_DAILY_MODELS_80
995
996
  "openai/gpt-6-sol",
@@ -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-sonnet-5-5", // JOHNNESS_PATCH_SONNET_55_MODEL
993
994
  "anthropic/claude-opus-5-5", // JOHNNESS_PATCH_OPUS_55_MODEL
994
995
  "xai/grok-4.7", // JOHNNESS_PATCH_DAILY_MODELS_80
995
996
  "openai/gpt-6-sol",
@@ -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-sonnet-5-5", // JOHNNESS_PATCH_SONNET_55_MODEL
993
994
  "anthropic/claude-opus-5-5", // JOHNNESS_PATCH_OPUS_55_MODEL
994
995
  "xai/grok-4.7", // JOHNNESS_PATCH_DAILY_MODELS_80
995
996
  "openai/gpt-6-sol",
@@ -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-sonnet-5-5", // JOHNNESS_PATCH_SONNET_55_MODEL
1017
1018
  "anthropic/claude-opus-5-5", // JOHNNESS_PATCH_OPUS_55_MODEL
1018
1019
  "xai/grok-4.7", // JOHNNESS_PATCH_DAILY_MODELS_80
1019
1020
  "openai/gpt-6-sol",
@@ -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-sonnet-5-5", // JOHNNESS_PATCH_SONNET_55_MODEL
994
995
  "anthropic/claude-opus-5-5", // JOHNNESS_PATCH_OPUS_55_MODEL
995
996
  "xai/grok-4.7", // JOHNNESS_PATCH_DAILY_MODELS_80
996
997
  "openai/gpt-6-sol",
@@ -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-sonnet-5-5", // JOHNNESS_PATCH_SONNET_55_MODEL
21
22
  "anthropic/claude-opus-5-5", // JOHNNESS_PATCH_OPUS_55_MODEL
22
23
  "xai/grok-4.7", // JOHNNESS_PATCH_DAILY_MODELS_80
23
24
  "openai/gpt-6-sol",
@@ -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-sonnet-5-5", // JOHNNESS_PATCH_SONNET_55_MODEL
993
994
  "anthropic/claude-opus-5-5", // JOHNNESS_PATCH_OPUS_55_MODEL
994
995
  "xai/grok-4.7", // JOHNNESS_PATCH_DAILY_MODELS_80
995
996
  "openai/gpt-6-sol",
@@ -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-sonnet-5-5", // JOHNNESS_PATCH_SONNET_55_MODEL
21
22
  "anthropic/claude-opus-5-5", // JOHNNESS_PATCH_OPUS_55_MODEL
22
23
  "xai/grok-4.7", // JOHNNESS_PATCH_DAILY_MODELS_80
23
24
  "openai/gpt-6-sol",
package/docs/PATCHES.md CHANGED
@@ -2848,3 +2848,16 @@ The gateway heap grew about 65 MB an hour and hit the Node default limit (about
2848
2848
  - **Exact replay.** `scripts/patch-session-store-memory-81.py` with `patches/session-store-memory-81/changes.json` (11 files: the 10 session store copies and `dist/entry.js`; the `v8` import sits outside family 59's CLI hunk). Verifier 81.1-81.7. Tests: `tests/session-store-memory-81.test.mjs`.
2849
2849
  - **Next family (not in this release):** swarm queue persistence. Queued `swarm_spawn` members live only in gateway memory, so a gateway restart drops them and the swarm never finishes launching.
2850
2850
  - Roll back with `npm i -g johns-harness@2026.9.34`.
2851
+
2852
+ ## 82 - sonnet-5-5 (2026-09-29)
2853
+
2854
+ Second run of the daily model integration. One new model appeared in the authenticated provider lists since the 2026-09-28 run (Anthropic 12 -> 13: `claude-sonnet-5-5`); it is registered from its official page (checked 2026-09-29) and was wire-probed live.
2855
+
2856
+ - **Claude Sonnet 5.5** (`claude-sonnet-5-5`, anthropic, native Messages). Source: <https://platform.claude.com/docs/en/models/sonnet-5-5/overview> (checked 2026-09-29). Fixed API id, no date suffix (Bedrock `anthropic.claude-sonnet-5-5`); released 2026-09-28. 1,000,000-token native context, 128,000 max output (300K on the Message Batches API with the `output-300k-2026-03-24` beta header), text + images in and text out, knowledge cutoff Jun 2026. Adaptive thinking is on by default: the manual-budget thinking type is not accepted, effort is `low|medium|high|xhigh|max` with default `high`, and `between_tools` is the lowest setting (turns up-front thinking off at high or below). Non-default `temperature`/`top_p`/`top_k` return 400. Pricing $2/$10 per MTok, cache reads $0.20, 5m cache writes $2.50, 1h cache writes $4, Batch API 50% off. The authenticated Models API list agrees (max_input_tokens 1,000,000; max_tokens 128,000; adaptive thinking with `enabled: false`; effort incl. xhigh/max).
2857
+ - **Context cap.** `contextWindow` ships at 175000, the standing Sonnet window (the Sonnet 5 value retained; owner caps do not change and a new model in a family keeps the latest cap of that family). `maxTokens` 128000. Sonnet 5's entry is untouched.
2858
+ - **Gates.** `supportsXhigh` gains an exact branch for `claude-sonnet-5-5` on anthropic; the Anthropic adapter's effort map accepts the id with 1:1 low/medium/high/xhigh/max (minimal -> low) and the temperature gate includes it, because non-default sampling params are 400s on this model. Adaptive thinking needs no new code: the existing `sonnet-5` substring gate already covers it. `XHIGH_MODEL_REFS` lists `anthropic/claude-sonnet-5-5` in all 12 copies, directly in front of the family 78 Opus 5.5 ref (families 78/80 refs stay contiguous).
2859
+ - **Aliases** (marker `JOHNNESS_PATCH_SONNET_55_MODEL`, a fourth `Object.assign(DEFAULT_MODEL_ALIASES, ...)` block in all 14 copies): `sonnet` -> `anthropic/claude-sonnet-5-5`, `sonnet5` -> `anthropic/claude-sonnet-5` (the previous version stays reachable). `opus`/`opus5`, the GPT-6/GPT-5.6 lines, `grok`, `astra`, `fable`, `sonnet46`, `deepseek` (Flash), `deepseek-pro`, `muse`, `gemini`, `banana`, `terra` and `image` are unchanged. On the next config load the family 79 migration moves a user alias that pins Sonnet 5 under `sonnet` to Sonnet 5.5 and gives the old model `sonnet5`; cross-line pins (e.g. `sonnet` on a Fable model) stay.
2860
+ - **Exact replay.** `scripts/patch-sonnet-5-5-model.py` with `patches/sonnet-5-5/changes.json` (29 files: catalog, `models.js`, the Anthropic adapter, 12 thinking copies, 14 alias copies). Preimage/postimage sha256, all-file preflight, `--check`, `--record`, `--dependency-only`, `--present-only`. Families 67, 78 and 80 reverse the family 82 edits before their historical hash checks (80 re-layers them after replaying its own edits); the family 67 replay fixture now replays 78, 79, 80 and 82 in order.
2861
+ - Verifier 82.1-82.12; 63.12 now expects four contract blocks. Tests: `tests/sonnet-5-5-model.test.mjs` (catalog in both the overlay and installed pi-ai, the adaptive effort/temperature wire path, 12 xhigh copies, 14 alias copies, the family 79 migration, exact replay and older-family replays). Counts pinned by `fable-51-model` (anthropic catalog 30 -> 31) and the family 79 migration fixture were updated.
2862
+ - Live probes 2026-09-29 (128 max tokens, "Answer with the single word: OK"): the default request and the harness-shaped `thinking: {type: "adaptive"}` + `output_config: {effort: "xhigh"}` request both returned HTTP 200 with `stop_reason: end_turn`.
2863
+ - Roll back with `npm i -g johns-harness@2026.9.35`.
@@ -12,7 +12,7 @@ pinned 2026.3.7 foundation, not an upstream upgrade or a default-model change.
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
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
- | 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 |
15
+ | Anthropic | `claude-sonnet-5-5` (Family 82, current), `claude-opus-5-5` (Family 78), `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 and Opus 5.5's 500K cap retained, Sonnet 175K effective context retained (Sonnet 5.5 keeps it) |
16
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
@@ -56,9 +56,9 @@ Registry presence does not promise account entitlement.
56
56
  preserves its native minimal default. 3.8 Flash still maps minimal to LOW because
57
57
  the live API rejects MINIMAL (Family 50). No synthetic thinkingBudget is sent.
58
58
  Deprecated/ignored temperature is omitted on 3.8 Flash and 3.5 Flash-Lite.
59
- - **Claude:** current Fable 5/5.1, Opus 5 and Sonnet 5 preserve native xhigh rather
60
- than silently downgrading it to high or promoting it to max. Low-level max remains
61
- distinct. Minimal maps to low. Adaptive thinking has no manual token budget.
59
+ - **Claude:** current Fable 5/5.1, Opus 5/5.5 and Sonnet 5/5.5 preserve native xhigh
60
+ rather than silently downgrading it to high or promoting it to max. Low-level max
61
+ remains distinct. Minimal maps to low. Adaptive thinking has no manual token budget.
62
62
  Missing effort/thinking stays omitted (current provider defaults). Unsupported
63
63
  sampling temperature is omitted even when the caller supplies no thinking field.
64
64
  Earlier Claude mappings remain untouched. Fable is always-thinking; Opus 5 now
@@ -96,6 +96,7 @@ change global thinking semantics.
96
96
  | GPT-5.6 Sol | 4 | 20 | 0.40 | 5 |
97
97
  | GPT-5.6 Terra | 2 | 12 | 0.20 | 2.50 |
98
98
  | GPT-5.6 Luna | 0.20 | 1.20 | 0.02 | 0.25 |
99
+ | Claude Sonnet 5.5 | 2 | 10 | 0.20 | 2.50 (5m) |
99
100
  | Claude Sonnet 5 | 2 | 10 | 0.20 | 2.50 (5m) |
100
101
  | Claude Opus 5 | 5 | 25 | 0.50 | 6.25 (5m) |
101
102
  | Claude Fable 5.1 | 10 | 50 | 0.25 | 12.50 (5m) |
@@ -140,6 +141,7 @@ requests were sent only to the relevant official host, with redirects disabled.
140
141
  <https://developers.openai.com/api/docs/models/gpt-5.5.md>;
141
142
  authenticated `GET https://api.openai.com/v1/models`.
142
143
  - Anthropic: <https://platform.claude.com/docs/en/models/overview>,
144
+ <https://platform.claude.com/docs/en/models/sonnet-5-5/overview> (2026-09-29),
143
145
  <https://platform.claude.com/docs/en/models/fable-5-1/overview>,
144
146
  <https://platform.claude.com/docs/en/build-with-claude/effort>,
145
147
  <https://platform.claude.com/docs/en/models/opus-5/migration-guide>;
@@ -157,8 +159,12 @@ Harmless direct HTTP inference returned 200 on DeepSeek Flash/Pro, Astra API,
157
159
  Gemini 3.8 Flash and 3.5 Flash-Lite, Grok 4.6, and Claude Fable 5.1/Opus 5/Sonnet 5.
158
160
  On 2026-09-24 (Family 80) direct HTTP inference returned 200 on `gpt-6-sol` and
159
161
  `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.
162
+ On 2026-09-29 (Family 82) direct HTTP inference returned 200 on `claude-sonnet-5-5`
163
+ (Anthropic API key, Messages): the default request and the harness-shaped
164
+ `thinking: {type: "adaptive"}` + `output_config.effort: "xhigh"` request both
165
+ completed with `stop_reason: end_turn`. The Codex subscription entries were not
166
+ probed directly; they share the Codex Responses transport already used by the
167
+ GPT-5.6 and Astra subscription entries.
162
168
  Claude native xhigh and Gemini Lite MINIMAL were specifically exercised. Direct
163
169
  provider probes are not represented as ChatGPT subscription entitlement checks.
164
170
  Offline tests additionally cover actual local HTTP/SSE DeepSeek parsing, tool calls,
@@ -1666,6 +1666,30 @@ export const MODELS = {
1666
1666
  contextWindow: 300000, // JOHNNESS_PATCH_FABLE_51_CONTEXT_300K
1667
1667
  maxTokens: 128000,
1668
1668
  },
1669
+ /* JOHNNESS_PATCH_SONNET_55_MODEL (family 82): Claude Sonnet 5.5. API id "claude-sonnet-5-5" (fixed id, no
1670
+ date suffix) confirmed against platform.claude.com/docs/en/models/sonnet-5-5/overview on
1671
+ 2026-09-29: $2/$10 per MTok, cache reads $0.20, 5m cache writes $2.50, 1h writes $4,
1672
+ 1M native context, 128K max output, adaptive thinking on by default (effort low through
1673
+ max, default high; between_tools turns up-front thinking off). temperature/top_p/top_k
1674
+ non-default values return 400. contextWindow capped at 175000, the standing Sonnet
1675
+ window (Sonnet 5 value retained; owner caps do not change). */
1676
+ "claude-sonnet-5-5": {
1677
+ id: "claude-sonnet-5-5",
1678
+ name: "Claude Sonnet 5.5",
1679
+ api: "anthropic-messages",
1680
+ provider: "anthropic",
1681
+ baseUrl: "https://api.anthropic.com",
1682
+ reasoning: true,
1683
+ input: ["text", "image"],
1684
+ cost: {
1685
+ input: 2,
1686
+ output: 10,
1687
+ cacheRead: 0.2,
1688
+ cacheWrite: 2.5,
1689
+ },
1690
+ contextWindow: 175000,
1691
+ maxTokens: 128000,
1692
+ },
1669
1693
  /* JOHNNESS_PATCH_OPUS_55_MODEL (family 78): Claude Opus 5.5. API id "claude-opus-5-5" (fixed id, no
1670
1694
  date suffix) confirmed against platform.claude.com/docs/en/models/opus-5-5 on
1671
1695
  2026-09-23: $4/$20 per MTok, cache reads $0.20, 5m cache writes $5, 1M native
@@ -39,6 +39,7 @@ export function supportsXhigh(model) {
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
41
  if (model.provider === "anthropic" && model.id === "claude-opus-5-5") return true; // JOHNNESS_PATCH_OPUS_55_MODEL
42
+ if (model.provider === "anthropic" && model.id === "claude-sonnet-5-5") return true; // JOHNNESS_PATCH_SONNET_55_MODEL
42
43
  // JOHNNESS_PATCH_MUSE_SPARK
43
44
  if (model.provider === "meta" && ["muse-spark-1.3", "muse-spark-1.2"].includes(model.id)) return true;
44
45
  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", "claude-opus-5-5"].includes(modelId)) { // JOHNNESS_PATCH_OPUS_55_MODEL
356
+ if (["claude-opus-5", "claude-sonnet-5", "claude-fable-5", "claude-fable-5-1", "claude-opus-5-5", "claude-sonnet-5-5"].includes(modelId)) { // JOHNNESS_PATCH_OPUS_55_MODEL JOHNNESS_PATCH_SONNET_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", "claude-opus-5-5"].includes(model.id)) { // JOHNNESS_PATCH_PROVIDER_CATALOG_67 JOHNNESS_PATCH_OPUS_55_MODEL
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", "claude-sonnet-5-5"].includes(model.id)) { // JOHNNESS_PATCH_PROVIDER_CATALOG_67 JOHNNESS_PATCH_OPUS_55_MODEL JOHNNESS_PATCH_SONNET_55_MODEL
537
537
  params.temperature = options.temperature;
538
538
  }
539
539
  if (context.tools) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "johns-harness",
3
- "version": "2026.9.35",
3
+ "version": "2026.9.36",
4
4
  "description": "John's Harness: a production agent harness that runs autonomous coding agents as one cooperative swarm.",
5
5
  "keywords": [
6
6
  "ai-agents",
@@ -1666,6 +1666,30 @@ export const MODELS = {
1666
1666
  contextWindow: 300000, // JOHNNESS_PATCH_FABLE_51_CONTEXT_300K
1667
1667
  maxTokens: 128000,
1668
1668
  },
1669
+ /* JOHNNESS_PATCH_SONNET_55_MODEL (family 82): Claude Sonnet 5.5. API id "claude-sonnet-5-5" (fixed id, no
1670
+ date suffix) confirmed against platform.claude.com/docs/en/models/sonnet-5-5/overview on
1671
+ 2026-09-29: $2/$10 per MTok, cache reads $0.20, 5m cache writes $2.50, 1h writes $4,
1672
+ 1M native context, 128K max output, adaptive thinking on by default (effort low through
1673
+ max, default high; between_tools turns up-front thinking off). temperature/top_p/top_k
1674
+ non-default values return 400. contextWindow capped at 175000, the standing Sonnet
1675
+ window (Sonnet 5 value retained; owner caps do not change). */
1676
+ "claude-sonnet-5-5": {
1677
+ id: "claude-sonnet-5-5",
1678
+ name: "Claude Sonnet 5.5",
1679
+ api: "anthropic-messages",
1680
+ provider: "anthropic",
1681
+ baseUrl: "https://api.anthropic.com",
1682
+ reasoning: true,
1683
+ input: ["text", "image"],
1684
+ cost: {
1685
+ input: 2,
1686
+ output: 10,
1687
+ cacheRead: 0.2,
1688
+ cacheWrite: 2.5,
1689
+ },
1690
+ contextWindow: 175000,
1691
+ maxTokens: 128000,
1692
+ },
1669
1693
  /* JOHNNESS_PATCH_OPUS_55_MODEL (family 78): Claude Opus 5.5. API id "claude-opus-5-5" (fixed id, no
1670
1694
  date suffix) confirmed against platform.claude.com/docs/en/models/opus-5-5 on
1671
1695
  2026-09-23: $4/$20 per MTok, cache reads $0.20, 5m cache writes $5, 1M native
@@ -39,6 +39,7 @@ export function supportsXhigh(model) {
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
41
  if (model.provider === "anthropic" && model.id === "claude-opus-5-5") return true; // JOHNNESS_PATCH_OPUS_55_MODEL
42
+ if (model.provider === "anthropic" && model.id === "claude-sonnet-5-5") return true; // JOHNNESS_PATCH_SONNET_55_MODEL
42
43
  // JOHNNESS_PATCH_MUSE_SPARK
43
44
  if (model.provider === "meta" && ["muse-spark-1.3", "muse-spark-1.2"].includes(model.id)) return true;
44
45
  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", "claude-opus-5-5"].includes(modelId)) { // JOHNNESS_PATCH_OPUS_55_MODEL
356
+ if (["claude-opus-5", "claude-sonnet-5", "claude-fable-5", "claude-fable-5-1", "claude-opus-5-5", "claude-sonnet-5-5"].includes(modelId)) { // JOHNNESS_PATCH_OPUS_55_MODEL JOHNNESS_PATCH_SONNET_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", "claude-opus-5-5"].includes(model.id)) { // JOHNNESS_PATCH_PROVIDER_CATALOG_67 JOHNNESS_PATCH_OPUS_55_MODEL
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", "claude-sonnet-5-5"].includes(model.id)) { // JOHNNESS_PATCH_PROVIDER_CATALOG_67 JOHNNESS_PATCH_OPUS_55_MODEL JOHNNESS_PATCH_SONNET_55_MODEL
537
537
  params.temperature = options.temperature;
538
538
  }
539
539
  if (context.tools) {