@yanlinglabs/winter-provider-catalog 0.0.10 → 0.0.11

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.
@@ -34,6 +34,19 @@ export type SlotNameResolution = {
34
34
  /** WS-13c §3 acceptance: active set first; the Claude names always into `claude`; a unique foreign name; else ambiguous/unknown. */
35
35
  export declare function resolveSlotName(name: string, activeFamilyId: string | undefined, families: readonly ModelFamilyDescriptor[]): SlotNameResolution;
36
36
  export declare function familyOfModelKey(catalog: WinterCatalog, modelKey: string): ModelFamilyDescriptor | undefined;
37
+ /**
38
+ * WS-13c model-family (lineage) id of one endpoint's model -- Sonnet/Opus/Haiku/Fable are ALL
39
+ * `"claude"`, on any host; the analogous fact holds for GPT/Gemini/DeepSeek/GLM. This is `row.modelFamily`
40
+ * directly, never `WinterProviderDescriptor.family` (the wire/adapter dialect a provider speaks --
41
+ * `zai`, `deepseek` and `openai` are all `"openai"` there, R13c-1's own distinction).
42
+ *
43
+ * Resolved by the endpoint's model IDENTITY: `modelKey` first (the stable `<providerId>/<upstreamId>`
44
+ * catalog key every `ContinuityEndpoint` carries once resolved through a real registry), falling back
45
+ * to `${providerId}/${modelKey}` for a caller holding a bare provider-local id. `undefined` when
46
+ * NEITHER form resolves to a catalog row -- an honest "unknown", never a guess: a caller comparing two
47
+ * unknowns (or comparing against the `"other"` catch-all bucket) must never treat them as one family.
48
+ */
49
+ export declare function modelFamilyOf(catalog: WinterCatalog, providerId: string, modelKey: string): string | undefined;
37
50
  /**
38
51
  * Can this row serve a slot at all? (WS-13c §4 step 1.)
39
52
  *
package/dist/families.js CHANGED
@@ -10,9 +10,10 @@ import {
10
10
  stampFamilyFields2,
11
11
  resolveSlotName2,
12
12
  familyOfModelKey2,
13
+ modelFamilyOf2,
13
14
  isSlotServableRow2,
14
15
  rowsForCanonicalId2
15
- } from "./index-t40pzh81.js";
16
+ } from "./index-kmd3gebk.js";
16
17
  export {
17
18
  CLAUDE_FAMILY_ID2 as CLAUDE_FAMILY_ID,
18
19
  CLAUDE_RESERVED_SLOT_NAMES2 as CLAUDE_RESERVED_SLOT_NAMES,
@@ -24,6 +25,7 @@ export {
24
25
  familyIdOf2 as familyIdOf,
25
26
  familyOfModelKey2 as familyOfModelKey,
26
27
  isSlotServableRow2 as isSlotServableRow,
28
+ modelFamilyOf2 as modelFamilyOf,
27
29
  resolveSlotName2 as resolveSlotName,
28
30
  rowsForCanonicalId2 as rowsForCanonicalId,
29
31
  stampFamilyFields2 as stampFamilyFields
@@ -84,6 +84,10 @@ function familyOfModelKey2(catalog, modelKey) {
84
84
  return;
85
85
  return catalog.families.find((f) => f.id === row.modelFamily);
86
86
  }
87
+ function modelFamilyOf2(catalog, providerId, modelKey) {
88
+ const row = catalog.models.find((m) => m.key === modelKey) ?? catalog.models.find((m) => m.key === `${providerId}/${modelKey}`);
89
+ return row?.modelFamily;
90
+ }
87
91
  function isSlotServableRow2(row) {
88
92
  return row.status !== "blocked" && row.status !== "deprecated" && (row.endpoints.includes("chat") || row.endpoints.includes("responses"));
89
93
  }
@@ -91,4 +95,4 @@ function rowsForCanonicalId2(catalog, canonicalModelId) {
91
95
  return catalog.models.filter((m) => m.canonicalModelId === canonicalModelId && isSlotServableRow2(m));
92
96
  }
93
97
 
94
- export { SLOT_NAME_RE2, FAMILY_ID_RE2, CLAUDE_FAMILY_ID2, OTHER_FAMILY_ID2, CLAUDE_RESERVED_SLOT_NAMES2, CURRENCY_RE2, canonicalModelIdOf2, familyIdOf2, stampFamilyFields2, resolveSlotName2, familyOfModelKey2, isSlotServableRow2, rowsForCanonicalId2 };
98
+ export { SLOT_NAME_RE2, FAMILY_ID_RE2, CLAUDE_FAMILY_ID2, OTHER_FAMILY_ID2, CLAUDE_RESERVED_SLOT_NAMES2, CURRENCY_RE2, canonicalModelIdOf2, familyIdOf2, stampFamilyFields2, resolveSlotName2, familyOfModelKey2, modelFamilyOf2, isSlotServableRow2, rowsForCanonicalId2 };
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  export type { CapabilityEvidence, CatalogValidationResult, EvidenceConfidence, EvidenceSource, FamilySlot, ModelFamilyDescriptor, ModelPricing, ModelStatus, ProviderAuthKind, ProviderProtocol, ReasoningCapabilities, SlotBasis, SlotStatus, ToolCalling, WinterCatalog, WinterModelDescriptor, WinterProviderDescriptor, } from "./types.js";
2
2
  export { CATALOG_VOCABULARIES, scanForSecrets, validateCatalog } from "./validate.js";
3
- export { CLAUDE_FAMILY_ID, CLAUDE_RESERVED_SLOT_NAMES, CURRENCY_RE, FAMILY_ID_RE, OTHER_FAMILY_ID, SLOT_NAME_RE, canonicalModelIdOf, familyIdOf, familyOfModelKey, isSlotServableRow, resolveSlotName, rowsForCanonicalId, stampFamilyFields, } from "./families.js";
3
+ export { CLAUDE_FAMILY_ID, CLAUDE_RESERVED_SLOT_NAMES, CURRENCY_RE, FAMILY_ID_RE, OTHER_FAMILY_ID, SLOT_NAME_RE, canonicalModelIdOf, familyIdOf, familyOfModelKey, isSlotServableRow, modelFamilyOf, resolveSlotName, rowsForCanonicalId, stampFamilyFields, } from "./families.js";
4
4
  export type { SlotNameResolution } from "./families.js";
5
5
  import type { WinterCatalog } from "./types.js";
6
6
  /**
package/dist/index.js CHANGED
@@ -10,9 +10,10 @@ import {
10
10
  stampFamilyFields2,
11
11
  resolveSlotName2,
12
12
  familyOfModelKey2,
13
+ modelFamilyOf2,
13
14
  isSlotServableRow2,
14
15
  rowsForCanonicalId2
15
- } from "./index-t40pzh81.js";
16
+ } from "./index-kmd3gebk.js";
16
17
 
17
18
  // src/validate.ts
18
19
  var PROTOCOLS = [
@@ -38772,6 +38773,38 @@ var catalog_default = {
38772
38773
  },
38773
38774
  unsupportedParameters: [],
38774
38775
  status: "candidate",
38776
+ reasoning: {
38777
+ supported: {
38778
+ value: true,
38779
+ source: "official-doc",
38780
+ sourceRef: "https://docs.z.ai/guides/capabilities/thinking — “The Deep Thinking feature currently supports the latest models in the GLM-5.3, GLM-5.3-FLASH, GLM-5.2, GLM-5.1, GLM-5, GLM-4.5, GLM-4.6, GLM-4.7 series”; https://docs.z.ai/api-reference/llm/chat-completion — `reasoning_content`: “Reasoning content, supports by GLM-4.5 series”",
38781
+ confidence: "declared",
38782
+ observedAt: "2026-09-14T00:00:00Z"
38783
+ },
38784
+ efforts: [],
38785
+ continuation: "plaintext",
38786
+ readableState: {
38787
+ value: "full-exposed",
38788
+ source: "official-doc",
38789
+ sourceRef: "https://docs.z.ai/guides/capabilities/thinking — the non-streaming response example carries the assistant message's ordinary `content` alongside a sibling `reasoning_content` string field (both plain readable text); streaming deltas carry the same split via `delta.reasoning_content` / `delta.content`",
38790
+ confidence: "declared",
38791
+ observedAt: "2026-09-14T00:00:00Z"
38792
+ },
38793
+ replayScope: {
38794
+ value: "all-turns",
38795
+ source: "official-doc",
38796
+ sourceRef: "https://docs.z.ai/api-reference/llm/chat-completion — `ChatThinking.clear_thinking`: “`false`: Retains `reasoning_content` from prior turns and includes it in the context sent to the model. To enable Preserved Thinking, you must forward the full, unmodified, and correctly ordered historical `reasoning_content` in `messages`”",
38797
+ confidence: "declared",
38798
+ observedAt: "2026-09-14T00:00:00Z"
38799
+ },
38800
+ toolLoopRequirement: {
38801
+ value: "silent-degradation",
38802
+ source: "official-doc",
38803
+ sourceRef: "https://docs.z.ai/api-reference/llm/chat-completion — `clear_thinking`: “Missing, truncated, rewritten, or reordered blocks may degrade performance or prevent the feature from taking effect”; https://docs.z.ai/guides/capabilities/thinking-mode — interleaved thinking: “thinking blocks should be explicitly preserved and returned together with the tool results” (never stated as a hard error/4xx, unlike DeepSeek's documented 400)",
38804
+ confidence: "declared",
38805
+ observedAt: "2026-09-14T00:00:00Z"
38806
+ }
38807
+ },
38775
38808
  canonicalModelId: "glm-4.7",
38776
38809
  modelFamily: "glm"
38777
38810
  },
@@ -38818,6 +38851,38 @@ var catalog_default = {
38818
38851
  },
38819
38852
  unsupportedParameters: [],
38820
38853
  status: "candidate",
38854
+ reasoning: {
38855
+ supported: {
38856
+ value: true,
38857
+ source: "official-doc",
38858
+ sourceRef: "https://docs.z.ai/guides/capabilities/thinking — “The Deep Thinking feature currently supports the latest models in the GLM-5.3, GLM-5.3-FLASH, GLM-5.2, GLM-5.1, GLM-5, GLM-4.5, GLM-4.6, GLM-4.7 series”; https://docs.z.ai/api-reference/llm/chat-completion — `reasoning_content`: “Reasoning content, supports by GLM-4.5 series”",
38859
+ confidence: "declared",
38860
+ observedAt: "2026-09-14T00:00:00Z"
38861
+ },
38862
+ efforts: [],
38863
+ continuation: "plaintext",
38864
+ readableState: {
38865
+ value: "full-exposed",
38866
+ source: "official-doc",
38867
+ sourceRef: "https://docs.z.ai/guides/capabilities/thinking — the non-streaming response example carries the assistant message's ordinary `content` alongside a sibling `reasoning_content` string field (both plain readable text); streaming deltas carry the same split via `delta.reasoning_content` / `delta.content`",
38868
+ confidence: "declared",
38869
+ observedAt: "2026-09-14T00:00:00Z"
38870
+ },
38871
+ replayScope: {
38872
+ value: "all-turns",
38873
+ source: "official-doc",
38874
+ sourceRef: "https://docs.z.ai/api-reference/llm/chat-completion — `ChatThinking.clear_thinking`: “`false`: Retains `reasoning_content` from prior turns and includes it in the context sent to the model. To enable Preserved Thinking, you must forward the full, unmodified, and correctly ordered historical `reasoning_content` in `messages`”",
38875
+ confidence: "declared",
38876
+ observedAt: "2026-09-14T00:00:00Z"
38877
+ },
38878
+ toolLoopRequirement: {
38879
+ value: "silent-degradation",
38880
+ source: "official-doc",
38881
+ sourceRef: "https://docs.z.ai/api-reference/llm/chat-completion — `clear_thinking`: “Missing, truncated, rewritten, or reordered blocks may degrade performance or prevent the feature from taking effect”; https://docs.z.ai/guides/capabilities/thinking-mode — interleaved thinking: “thinking blocks should be explicitly preserved and returned together with the tool results” (never stated as a hard error/4xx, unlike DeepSeek's documented 400)",
38882
+ confidence: "declared",
38883
+ observedAt: "2026-09-14T00:00:00Z"
38884
+ }
38885
+ },
38821
38886
  canonicalModelId: "glm-4.7-flash",
38822
38887
  modelFamily: "glm"
38823
38888
  },
@@ -38864,6 +38929,38 @@ var catalog_default = {
38864
38929
  },
38865
38930
  unsupportedParameters: [],
38866
38931
  status: "candidate",
38932
+ reasoning: {
38933
+ supported: {
38934
+ value: true,
38935
+ source: "official-doc",
38936
+ sourceRef: "https://docs.z.ai/guides/capabilities/thinking — “The Deep Thinking feature currently supports the latest models in the GLM-5.3, GLM-5.3-FLASH, GLM-5.2, GLM-5.1, GLM-5, GLM-4.5, GLM-4.6, GLM-4.7 series”; https://docs.z.ai/api-reference/llm/chat-completion — `reasoning_content`: “Reasoning content, supports by GLM-4.5 series”",
38937
+ confidence: "declared",
38938
+ observedAt: "2026-09-14T00:00:00Z"
38939
+ },
38940
+ efforts: [],
38941
+ continuation: "plaintext",
38942
+ readableState: {
38943
+ value: "full-exposed",
38944
+ source: "official-doc",
38945
+ sourceRef: "https://docs.z.ai/guides/capabilities/thinking — the non-streaming response example carries the assistant message's ordinary `content` alongside a sibling `reasoning_content` string field (both plain readable text); streaming deltas carry the same split via `delta.reasoning_content` / `delta.content`",
38946
+ confidence: "declared",
38947
+ observedAt: "2026-09-14T00:00:00Z"
38948
+ },
38949
+ replayScope: {
38950
+ value: "all-turns",
38951
+ source: "official-doc",
38952
+ sourceRef: "https://docs.z.ai/api-reference/llm/chat-completion — `ChatThinking.clear_thinking`: “`false`: Retains `reasoning_content` from prior turns and includes it in the context sent to the model. To enable Preserved Thinking, you must forward the full, unmodified, and correctly ordered historical `reasoning_content` in `messages`”",
38953
+ confidence: "declared",
38954
+ observedAt: "2026-09-14T00:00:00Z"
38955
+ },
38956
+ toolLoopRequirement: {
38957
+ value: "silent-degradation",
38958
+ source: "official-doc",
38959
+ sourceRef: "https://docs.z.ai/api-reference/llm/chat-completion — `clear_thinking`: “Missing, truncated, rewritten, or reordered blocks may degrade performance or prevent the feature from taking effect”; https://docs.z.ai/guides/capabilities/thinking-mode — interleaved thinking: “thinking blocks should be explicitly preserved and returned together with the tool results” (never stated as a hard error/4xx, unlike DeepSeek's documented 400)",
38960
+ confidence: "declared",
38961
+ observedAt: "2026-09-14T00:00:00Z"
38962
+ }
38963
+ },
38867
38964
  canonicalModelId: "glm-5",
38868
38965
  modelFamily: "glm"
38869
38966
  },
@@ -38910,6 +39007,38 @@ var catalog_default = {
38910
39007
  },
38911
39008
  unsupportedParameters: [],
38912
39009
  status: "candidate",
39010
+ reasoning: {
39011
+ supported: {
39012
+ value: true,
39013
+ source: "official-doc",
39014
+ sourceRef: "https://docs.z.ai/guides/capabilities/thinking — “The Deep Thinking feature currently supports the latest models in the GLM-5.3, GLM-5.3-FLASH, GLM-5.2, GLM-5.1, GLM-5, GLM-4.5, GLM-4.6, GLM-4.7 series”; https://docs.z.ai/api-reference/llm/chat-completion — `reasoning_content`: “Reasoning content, supports by GLM-4.5 series”",
39015
+ confidence: "declared",
39016
+ observedAt: "2026-09-14T00:00:00Z"
39017
+ },
39018
+ efforts: [],
39019
+ continuation: "plaintext",
39020
+ readableState: {
39021
+ value: "full-exposed",
39022
+ source: "official-doc",
39023
+ sourceRef: "https://docs.z.ai/guides/capabilities/thinking — the non-streaming response example carries the assistant message's ordinary `content` alongside a sibling `reasoning_content` string field (both plain readable text); streaming deltas carry the same split via `delta.reasoning_content` / `delta.content`",
39024
+ confidence: "declared",
39025
+ observedAt: "2026-09-14T00:00:00Z"
39026
+ },
39027
+ replayScope: {
39028
+ value: "all-turns",
39029
+ source: "official-doc",
39030
+ sourceRef: "https://docs.z.ai/api-reference/llm/chat-completion — `ChatThinking.clear_thinking`: “`false`: Retains `reasoning_content` from prior turns and includes it in the context sent to the model. To enable Preserved Thinking, you must forward the full, unmodified, and correctly ordered historical `reasoning_content` in `messages`”",
39031
+ confidence: "declared",
39032
+ observedAt: "2026-09-14T00:00:00Z"
39033
+ },
39034
+ toolLoopRequirement: {
39035
+ value: "silent-degradation",
39036
+ source: "official-doc",
39037
+ sourceRef: "https://docs.z.ai/api-reference/llm/chat-completion — `clear_thinking`: “Missing, truncated, rewritten, or reordered blocks may degrade performance or prevent the feature from taking effect”; https://docs.z.ai/guides/capabilities/thinking-mode — interleaved thinking: “thinking blocks should be explicitly preserved and returned together with the tool results” (never stated as a hard error/4xx, unlike DeepSeek's documented 400)",
39038
+ confidence: "declared",
39039
+ observedAt: "2026-09-14T00:00:00Z"
39040
+ }
39041
+ },
38913
39042
  canonicalModelId: "glm-5-turbo",
38914
39043
  modelFamily: "glm"
38915
39044
  },
@@ -38956,6 +39085,38 @@ var catalog_default = {
38956
39085
  },
38957
39086
  unsupportedParameters: [],
38958
39087
  status: "candidate",
39088
+ reasoning: {
39089
+ supported: {
39090
+ value: true,
39091
+ source: "official-doc",
39092
+ sourceRef: "https://docs.z.ai/guides/capabilities/thinking — “The Deep Thinking feature currently supports the latest models in the GLM-5.3, GLM-5.3-FLASH, GLM-5.2, GLM-5.1, GLM-5, GLM-4.5, GLM-4.6, GLM-4.7 series”; https://docs.z.ai/api-reference/llm/chat-completion — `reasoning_content`: “Reasoning content, supports by GLM-4.5 series”",
39093
+ confidence: "declared",
39094
+ observedAt: "2026-09-14T00:00:00Z"
39095
+ },
39096
+ efforts: [],
39097
+ continuation: "plaintext",
39098
+ readableState: {
39099
+ value: "full-exposed",
39100
+ source: "official-doc",
39101
+ sourceRef: "https://docs.z.ai/guides/capabilities/thinking — the non-streaming response example carries the assistant message's ordinary `content` alongside a sibling `reasoning_content` string field (both plain readable text); streaming deltas carry the same split via `delta.reasoning_content` / `delta.content`",
39102
+ confidence: "declared",
39103
+ observedAt: "2026-09-14T00:00:00Z"
39104
+ },
39105
+ replayScope: {
39106
+ value: "all-turns",
39107
+ source: "official-doc",
39108
+ sourceRef: "https://docs.z.ai/api-reference/llm/chat-completion — `ChatThinking.clear_thinking`: “`false`: Retains `reasoning_content` from prior turns and includes it in the context sent to the model. To enable Preserved Thinking, you must forward the full, unmodified, and correctly ordered historical `reasoning_content` in `messages`”",
39109
+ confidence: "declared",
39110
+ observedAt: "2026-09-14T00:00:00Z"
39111
+ },
39112
+ toolLoopRequirement: {
39113
+ value: "silent-degradation",
39114
+ source: "official-doc",
39115
+ sourceRef: "https://docs.z.ai/api-reference/llm/chat-completion — `clear_thinking`: “Missing, truncated, rewritten, or reordered blocks may degrade performance or prevent the feature from taking effect”; https://docs.z.ai/guides/capabilities/thinking-mode — interleaved thinking: “thinking blocks should be explicitly preserved and returned together with the tool results” (never stated as a hard error/4xx, unlike DeepSeek's documented 400)",
39116
+ confidence: "declared",
39117
+ observedAt: "2026-09-14T00:00:00Z"
39118
+ }
39119
+ },
38959
39120
  canonicalModelId: "glm-5.1",
38960
39121
  modelFamily: "glm"
38961
39122
  },
@@ -39002,6 +39163,38 @@ var catalog_default = {
39002
39163
  },
39003
39164
  unsupportedParameters: [],
39004
39165
  status: "candidate",
39166
+ reasoning: {
39167
+ supported: {
39168
+ value: true,
39169
+ source: "official-doc",
39170
+ sourceRef: "https://docs.z.ai/guides/capabilities/thinking — “The Deep Thinking feature currently supports the latest models in the GLM-5.3, GLM-5.3-FLASH, GLM-5.2, GLM-5.1, GLM-5, GLM-4.5, GLM-4.6, GLM-4.7 series”; https://docs.z.ai/api-reference/llm/chat-completion — `reasoning_content`: “Reasoning content, supports by GLM-4.5 series”",
39171
+ confidence: "declared",
39172
+ observedAt: "2026-09-14T00:00:00Z"
39173
+ },
39174
+ efforts: [],
39175
+ continuation: "plaintext",
39176
+ readableState: {
39177
+ value: "full-exposed",
39178
+ source: "official-doc",
39179
+ sourceRef: "https://docs.z.ai/guides/capabilities/thinking — the non-streaming response example carries the assistant message's ordinary `content` alongside a sibling `reasoning_content` string field (both plain readable text); streaming deltas carry the same split via `delta.reasoning_content` / `delta.content`",
39180
+ confidence: "declared",
39181
+ observedAt: "2026-09-14T00:00:00Z"
39182
+ },
39183
+ replayScope: {
39184
+ value: "all-turns",
39185
+ source: "official-doc",
39186
+ sourceRef: "https://docs.z.ai/api-reference/llm/chat-completion — `ChatThinking.clear_thinking`: “`false`: Retains `reasoning_content` from prior turns and includes it in the context sent to the model. To enable Preserved Thinking, you must forward the full, unmodified, and correctly ordered historical `reasoning_content` in `messages`”",
39187
+ confidence: "declared",
39188
+ observedAt: "2026-09-14T00:00:00Z"
39189
+ },
39190
+ toolLoopRequirement: {
39191
+ value: "silent-degradation",
39192
+ source: "official-doc",
39193
+ sourceRef: "https://docs.z.ai/api-reference/llm/chat-completion — `clear_thinking`: “Missing, truncated, rewritten, or reordered blocks may degrade performance or prevent the feature from taking effect”; https://docs.z.ai/guides/capabilities/thinking-mode — interleaved thinking: “thinking blocks should be explicitly preserved and returned together with the tool results” (never stated as a hard error/4xx, unlike DeepSeek's documented 400)",
39194
+ confidence: "declared",
39195
+ observedAt: "2026-09-14T00:00:00Z"
39196
+ }
39197
+ },
39005
39198
  canonicalModelId: "glm-5.2",
39006
39199
  modelFamily: "glm"
39007
39200
  },
@@ -39048,6 +39241,38 @@ var catalog_default = {
39048
39241
  },
39049
39242
  unsupportedParameters: [],
39050
39243
  status: "candidate",
39244
+ reasoning: {
39245
+ supported: {
39246
+ value: true,
39247
+ source: "official-doc",
39248
+ sourceRef: "https://docs.z.ai/guides/capabilities/thinking — “The Deep Thinking feature currently supports the latest models in the GLM-5.3, GLM-5.3-FLASH, GLM-5.2, GLM-5.1, GLM-5, GLM-4.5, GLM-4.6, GLM-4.7 series”; https://docs.z.ai/api-reference/llm/chat-completion — `reasoning_content`: “Reasoning content, supports by GLM-4.5 series”. GLM-5.3/GLM-5.3-FLASH additionally use FORCED thinking — “GLM-5.3 and GLM-5.3-FLASH no longer support disabling thinking” (same page) — so `supported` is unconditional for this row, never gated on a `thinking.type` request.",
39249
+ confidence: "declared",
39250
+ observedAt: "2026-09-14T00:00:00Z"
39251
+ },
39252
+ efforts: [],
39253
+ continuation: "plaintext",
39254
+ readableState: {
39255
+ value: "full-exposed",
39256
+ source: "official-doc",
39257
+ sourceRef: "https://docs.z.ai/guides/capabilities/thinking — the non-streaming response example carries the assistant message's ordinary `content` alongside a sibling `reasoning_content` string field (both plain readable text); streaming deltas carry the same split via `delta.reasoning_content` / `delta.content`",
39258
+ confidence: "declared",
39259
+ observedAt: "2026-09-14T00:00:00Z"
39260
+ },
39261
+ replayScope: {
39262
+ value: "all-turns",
39263
+ source: "official-doc",
39264
+ sourceRef: "https://docs.z.ai/api-reference/llm/chat-completion — `ChatThinking.clear_thinking`: “`false`: Retains `reasoning_content` from prior turns and includes it in the context sent to the model. To enable Preserved Thinking, you must forward the full, unmodified, and correctly ordered historical `reasoning_content` in `messages`”",
39265
+ confidence: "declared",
39266
+ observedAt: "2026-09-14T00:00:00Z"
39267
+ },
39268
+ toolLoopRequirement: {
39269
+ value: "silent-degradation",
39270
+ source: "official-doc",
39271
+ sourceRef: "https://docs.z.ai/api-reference/llm/chat-completion — `clear_thinking`: “Missing, truncated, rewritten, or reordered blocks may degrade performance or prevent the feature from taking effect”; https://docs.z.ai/guides/capabilities/thinking-mode — interleaved thinking: “thinking blocks should be explicitly preserved and returned together with the tool results” (never stated as a hard error/4xx, unlike DeepSeek's documented 400)",
39272
+ confidence: "declared",
39273
+ observedAt: "2026-09-14T00:00:00Z"
39274
+ }
39275
+ },
39051
39276
  canonicalModelId: "glm-5.3",
39052
39277
  modelFamily: "glm"
39053
39278
  },
@@ -40227,6 +40452,7 @@ export {
40227
40452
  familyOfModelKey2 as familyOfModelKey,
40228
40453
  isSlotServableRow2 as isSlotServableRow,
40229
40454
  loadCatalog,
40455
+ modelFamilyOf2 as modelFamilyOf,
40230
40456
  resolveSlotName2 as resolveSlotName,
40231
40457
  rowsForCanonicalId2 as rowsForCanonicalId,
40232
40458
  scanForSecrets,
@@ -38065,6 +38065,38 @@
38065
38065
  },
38066
38066
  "unsupportedParameters": [],
38067
38067
  "status": "candidate",
38068
+ "reasoning": {
38069
+ "supported": {
38070
+ "value": true,
38071
+ "source": "official-doc",
38072
+ "sourceRef": "https://docs.z.ai/guides/capabilities/thinking — “The Deep Thinking feature currently supports the latest models in the GLM-5.3, GLM-5.3-FLASH, GLM-5.2, GLM-5.1, GLM-5, GLM-4.5, GLM-4.6, GLM-4.7 series”; https://docs.z.ai/api-reference/llm/chat-completion — `reasoning_content`: “Reasoning content, supports by GLM-4.5 series”",
38073
+ "confidence": "declared",
38074
+ "observedAt": "2026-09-14T00:00:00Z"
38075
+ },
38076
+ "efforts": [],
38077
+ "continuation": "plaintext",
38078
+ "readableState": {
38079
+ "value": "full-exposed",
38080
+ "source": "official-doc",
38081
+ "sourceRef": "https://docs.z.ai/guides/capabilities/thinking — the non-streaming response example carries the assistant message's ordinary `content` alongside a sibling `reasoning_content` string field (both plain readable text); streaming deltas carry the same split via `delta.reasoning_content` / `delta.content`",
38082
+ "confidence": "declared",
38083
+ "observedAt": "2026-09-14T00:00:00Z"
38084
+ },
38085
+ "replayScope": {
38086
+ "value": "all-turns",
38087
+ "source": "official-doc",
38088
+ "sourceRef": "https://docs.z.ai/api-reference/llm/chat-completion — `ChatThinking.clear_thinking`: “`false`: Retains `reasoning_content` from prior turns and includes it in the context sent to the model. To enable Preserved Thinking, you must forward the full, unmodified, and correctly ordered historical `reasoning_content` in `messages`”",
38089
+ "confidence": "declared",
38090
+ "observedAt": "2026-09-14T00:00:00Z"
38091
+ },
38092
+ "toolLoopRequirement": {
38093
+ "value": "silent-degradation",
38094
+ "source": "official-doc",
38095
+ "sourceRef": "https://docs.z.ai/api-reference/llm/chat-completion — `clear_thinking`: “Missing, truncated, rewritten, or reordered blocks may degrade performance or prevent the feature from taking effect”; https://docs.z.ai/guides/capabilities/thinking-mode — interleaved thinking: “thinking blocks should be explicitly preserved and returned together with the tool results” (never stated as a hard error/4xx, unlike DeepSeek's documented 400)",
38096
+ "confidence": "declared",
38097
+ "observedAt": "2026-09-14T00:00:00Z"
38098
+ }
38099
+ },
38068
38100
  "canonicalModelId": "glm-4.7",
38069
38101
  "modelFamily": "glm"
38070
38102
  },
@@ -38111,6 +38143,38 @@
38111
38143
  },
38112
38144
  "unsupportedParameters": [],
38113
38145
  "status": "candidate",
38146
+ "reasoning": {
38147
+ "supported": {
38148
+ "value": true,
38149
+ "source": "official-doc",
38150
+ "sourceRef": "https://docs.z.ai/guides/capabilities/thinking — “The Deep Thinking feature currently supports the latest models in the GLM-5.3, GLM-5.3-FLASH, GLM-5.2, GLM-5.1, GLM-5, GLM-4.5, GLM-4.6, GLM-4.7 series”; https://docs.z.ai/api-reference/llm/chat-completion — `reasoning_content`: “Reasoning content, supports by GLM-4.5 series”",
38151
+ "confidence": "declared",
38152
+ "observedAt": "2026-09-14T00:00:00Z"
38153
+ },
38154
+ "efforts": [],
38155
+ "continuation": "plaintext",
38156
+ "readableState": {
38157
+ "value": "full-exposed",
38158
+ "source": "official-doc",
38159
+ "sourceRef": "https://docs.z.ai/guides/capabilities/thinking — the non-streaming response example carries the assistant message's ordinary `content` alongside a sibling `reasoning_content` string field (both plain readable text); streaming deltas carry the same split via `delta.reasoning_content` / `delta.content`",
38160
+ "confidence": "declared",
38161
+ "observedAt": "2026-09-14T00:00:00Z"
38162
+ },
38163
+ "replayScope": {
38164
+ "value": "all-turns",
38165
+ "source": "official-doc",
38166
+ "sourceRef": "https://docs.z.ai/api-reference/llm/chat-completion — `ChatThinking.clear_thinking`: “`false`: Retains `reasoning_content` from prior turns and includes it in the context sent to the model. To enable Preserved Thinking, you must forward the full, unmodified, and correctly ordered historical `reasoning_content` in `messages`”",
38167
+ "confidence": "declared",
38168
+ "observedAt": "2026-09-14T00:00:00Z"
38169
+ },
38170
+ "toolLoopRequirement": {
38171
+ "value": "silent-degradation",
38172
+ "source": "official-doc",
38173
+ "sourceRef": "https://docs.z.ai/api-reference/llm/chat-completion — `clear_thinking`: “Missing, truncated, rewritten, or reordered blocks may degrade performance or prevent the feature from taking effect”; https://docs.z.ai/guides/capabilities/thinking-mode — interleaved thinking: “thinking blocks should be explicitly preserved and returned together with the tool results” (never stated as a hard error/4xx, unlike DeepSeek's documented 400)",
38174
+ "confidence": "declared",
38175
+ "observedAt": "2026-09-14T00:00:00Z"
38176
+ }
38177
+ },
38114
38178
  "canonicalModelId": "glm-4.7-flash",
38115
38179
  "modelFamily": "glm"
38116
38180
  },
@@ -38157,6 +38221,38 @@
38157
38221
  },
38158
38222
  "unsupportedParameters": [],
38159
38223
  "status": "candidate",
38224
+ "reasoning": {
38225
+ "supported": {
38226
+ "value": true,
38227
+ "source": "official-doc",
38228
+ "sourceRef": "https://docs.z.ai/guides/capabilities/thinking — “The Deep Thinking feature currently supports the latest models in the GLM-5.3, GLM-5.3-FLASH, GLM-5.2, GLM-5.1, GLM-5, GLM-4.5, GLM-4.6, GLM-4.7 series”; https://docs.z.ai/api-reference/llm/chat-completion — `reasoning_content`: “Reasoning content, supports by GLM-4.5 series”",
38229
+ "confidence": "declared",
38230
+ "observedAt": "2026-09-14T00:00:00Z"
38231
+ },
38232
+ "efforts": [],
38233
+ "continuation": "plaintext",
38234
+ "readableState": {
38235
+ "value": "full-exposed",
38236
+ "source": "official-doc",
38237
+ "sourceRef": "https://docs.z.ai/guides/capabilities/thinking — the non-streaming response example carries the assistant message's ordinary `content` alongside a sibling `reasoning_content` string field (both plain readable text); streaming deltas carry the same split via `delta.reasoning_content` / `delta.content`",
38238
+ "confidence": "declared",
38239
+ "observedAt": "2026-09-14T00:00:00Z"
38240
+ },
38241
+ "replayScope": {
38242
+ "value": "all-turns",
38243
+ "source": "official-doc",
38244
+ "sourceRef": "https://docs.z.ai/api-reference/llm/chat-completion — `ChatThinking.clear_thinking`: “`false`: Retains `reasoning_content` from prior turns and includes it in the context sent to the model. To enable Preserved Thinking, you must forward the full, unmodified, and correctly ordered historical `reasoning_content` in `messages`”",
38245
+ "confidence": "declared",
38246
+ "observedAt": "2026-09-14T00:00:00Z"
38247
+ },
38248
+ "toolLoopRequirement": {
38249
+ "value": "silent-degradation",
38250
+ "source": "official-doc",
38251
+ "sourceRef": "https://docs.z.ai/api-reference/llm/chat-completion — `clear_thinking`: “Missing, truncated, rewritten, or reordered blocks may degrade performance or prevent the feature from taking effect”; https://docs.z.ai/guides/capabilities/thinking-mode — interleaved thinking: “thinking blocks should be explicitly preserved and returned together with the tool results” (never stated as a hard error/4xx, unlike DeepSeek's documented 400)",
38252
+ "confidence": "declared",
38253
+ "observedAt": "2026-09-14T00:00:00Z"
38254
+ }
38255
+ },
38160
38256
  "canonicalModelId": "glm-5",
38161
38257
  "modelFamily": "glm"
38162
38258
  },
@@ -38203,6 +38299,38 @@
38203
38299
  },
38204
38300
  "unsupportedParameters": [],
38205
38301
  "status": "candidate",
38302
+ "reasoning": {
38303
+ "supported": {
38304
+ "value": true,
38305
+ "source": "official-doc",
38306
+ "sourceRef": "https://docs.z.ai/guides/capabilities/thinking — “The Deep Thinking feature currently supports the latest models in the GLM-5.3, GLM-5.3-FLASH, GLM-5.2, GLM-5.1, GLM-5, GLM-4.5, GLM-4.6, GLM-4.7 series”; https://docs.z.ai/api-reference/llm/chat-completion — `reasoning_content`: “Reasoning content, supports by GLM-4.5 series”",
38307
+ "confidence": "declared",
38308
+ "observedAt": "2026-09-14T00:00:00Z"
38309
+ },
38310
+ "efforts": [],
38311
+ "continuation": "plaintext",
38312
+ "readableState": {
38313
+ "value": "full-exposed",
38314
+ "source": "official-doc",
38315
+ "sourceRef": "https://docs.z.ai/guides/capabilities/thinking — the non-streaming response example carries the assistant message's ordinary `content` alongside a sibling `reasoning_content` string field (both plain readable text); streaming deltas carry the same split via `delta.reasoning_content` / `delta.content`",
38316
+ "confidence": "declared",
38317
+ "observedAt": "2026-09-14T00:00:00Z"
38318
+ },
38319
+ "replayScope": {
38320
+ "value": "all-turns",
38321
+ "source": "official-doc",
38322
+ "sourceRef": "https://docs.z.ai/api-reference/llm/chat-completion — `ChatThinking.clear_thinking`: “`false`: Retains `reasoning_content` from prior turns and includes it in the context sent to the model. To enable Preserved Thinking, you must forward the full, unmodified, and correctly ordered historical `reasoning_content` in `messages`”",
38323
+ "confidence": "declared",
38324
+ "observedAt": "2026-09-14T00:00:00Z"
38325
+ },
38326
+ "toolLoopRequirement": {
38327
+ "value": "silent-degradation",
38328
+ "source": "official-doc",
38329
+ "sourceRef": "https://docs.z.ai/api-reference/llm/chat-completion — `clear_thinking`: “Missing, truncated, rewritten, or reordered blocks may degrade performance or prevent the feature from taking effect”; https://docs.z.ai/guides/capabilities/thinking-mode — interleaved thinking: “thinking blocks should be explicitly preserved and returned together with the tool results” (never stated as a hard error/4xx, unlike DeepSeek's documented 400)",
38330
+ "confidence": "declared",
38331
+ "observedAt": "2026-09-14T00:00:00Z"
38332
+ }
38333
+ },
38206
38334
  "canonicalModelId": "glm-5-turbo",
38207
38335
  "modelFamily": "glm"
38208
38336
  },
@@ -38249,6 +38377,38 @@
38249
38377
  },
38250
38378
  "unsupportedParameters": [],
38251
38379
  "status": "candidate",
38380
+ "reasoning": {
38381
+ "supported": {
38382
+ "value": true,
38383
+ "source": "official-doc",
38384
+ "sourceRef": "https://docs.z.ai/guides/capabilities/thinking — “The Deep Thinking feature currently supports the latest models in the GLM-5.3, GLM-5.3-FLASH, GLM-5.2, GLM-5.1, GLM-5, GLM-4.5, GLM-4.6, GLM-4.7 series”; https://docs.z.ai/api-reference/llm/chat-completion — `reasoning_content`: “Reasoning content, supports by GLM-4.5 series”",
38385
+ "confidence": "declared",
38386
+ "observedAt": "2026-09-14T00:00:00Z"
38387
+ },
38388
+ "efforts": [],
38389
+ "continuation": "plaintext",
38390
+ "readableState": {
38391
+ "value": "full-exposed",
38392
+ "source": "official-doc",
38393
+ "sourceRef": "https://docs.z.ai/guides/capabilities/thinking — the non-streaming response example carries the assistant message's ordinary `content` alongside a sibling `reasoning_content` string field (both plain readable text); streaming deltas carry the same split via `delta.reasoning_content` / `delta.content`",
38394
+ "confidence": "declared",
38395
+ "observedAt": "2026-09-14T00:00:00Z"
38396
+ },
38397
+ "replayScope": {
38398
+ "value": "all-turns",
38399
+ "source": "official-doc",
38400
+ "sourceRef": "https://docs.z.ai/api-reference/llm/chat-completion — `ChatThinking.clear_thinking`: “`false`: Retains `reasoning_content` from prior turns and includes it in the context sent to the model. To enable Preserved Thinking, you must forward the full, unmodified, and correctly ordered historical `reasoning_content` in `messages`”",
38401
+ "confidence": "declared",
38402
+ "observedAt": "2026-09-14T00:00:00Z"
38403
+ },
38404
+ "toolLoopRequirement": {
38405
+ "value": "silent-degradation",
38406
+ "source": "official-doc",
38407
+ "sourceRef": "https://docs.z.ai/api-reference/llm/chat-completion — `clear_thinking`: “Missing, truncated, rewritten, or reordered blocks may degrade performance or prevent the feature from taking effect”; https://docs.z.ai/guides/capabilities/thinking-mode — interleaved thinking: “thinking blocks should be explicitly preserved and returned together with the tool results” (never stated as a hard error/4xx, unlike DeepSeek's documented 400)",
38408
+ "confidence": "declared",
38409
+ "observedAt": "2026-09-14T00:00:00Z"
38410
+ }
38411
+ },
38252
38412
  "canonicalModelId": "glm-5.1",
38253
38413
  "modelFamily": "glm"
38254
38414
  },
@@ -38295,6 +38455,38 @@
38295
38455
  },
38296
38456
  "unsupportedParameters": [],
38297
38457
  "status": "candidate",
38458
+ "reasoning": {
38459
+ "supported": {
38460
+ "value": true,
38461
+ "source": "official-doc",
38462
+ "sourceRef": "https://docs.z.ai/guides/capabilities/thinking — “The Deep Thinking feature currently supports the latest models in the GLM-5.3, GLM-5.3-FLASH, GLM-5.2, GLM-5.1, GLM-5, GLM-4.5, GLM-4.6, GLM-4.7 series”; https://docs.z.ai/api-reference/llm/chat-completion — `reasoning_content`: “Reasoning content, supports by GLM-4.5 series”",
38463
+ "confidence": "declared",
38464
+ "observedAt": "2026-09-14T00:00:00Z"
38465
+ },
38466
+ "efforts": [],
38467
+ "continuation": "plaintext",
38468
+ "readableState": {
38469
+ "value": "full-exposed",
38470
+ "source": "official-doc",
38471
+ "sourceRef": "https://docs.z.ai/guides/capabilities/thinking — the non-streaming response example carries the assistant message's ordinary `content` alongside a sibling `reasoning_content` string field (both plain readable text); streaming deltas carry the same split via `delta.reasoning_content` / `delta.content`",
38472
+ "confidence": "declared",
38473
+ "observedAt": "2026-09-14T00:00:00Z"
38474
+ },
38475
+ "replayScope": {
38476
+ "value": "all-turns",
38477
+ "source": "official-doc",
38478
+ "sourceRef": "https://docs.z.ai/api-reference/llm/chat-completion — `ChatThinking.clear_thinking`: “`false`: Retains `reasoning_content` from prior turns and includes it in the context sent to the model. To enable Preserved Thinking, you must forward the full, unmodified, and correctly ordered historical `reasoning_content` in `messages`”",
38479
+ "confidence": "declared",
38480
+ "observedAt": "2026-09-14T00:00:00Z"
38481
+ },
38482
+ "toolLoopRequirement": {
38483
+ "value": "silent-degradation",
38484
+ "source": "official-doc",
38485
+ "sourceRef": "https://docs.z.ai/api-reference/llm/chat-completion — `clear_thinking`: “Missing, truncated, rewritten, or reordered blocks may degrade performance or prevent the feature from taking effect”; https://docs.z.ai/guides/capabilities/thinking-mode — interleaved thinking: “thinking blocks should be explicitly preserved and returned together with the tool results” (never stated as a hard error/4xx, unlike DeepSeek's documented 400)",
38486
+ "confidence": "declared",
38487
+ "observedAt": "2026-09-14T00:00:00Z"
38488
+ }
38489
+ },
38298
38490
  "canonicalModelId": "glm-5.2",
38299
38491
  "modelFamily": "glm"
38300
38492
  },
@@ -38341,6 +38533,38 @@
38341
38533
  },
38342
38534
  "unsupportedParameters": [],
38343
38535
  "status": "candidate",
38536
+ "reasoning": {
38537
+ "supported": {
38538
+ "value": true,
38539
+ "source": "official-doc",
38540
+ "sourceRef": "https://docs.z.ai/guides/capabilities/thinking — “The Deep Thinking feature currently supports the latest models in the GLM-5.3, GLM-5.3-FLASH, GLM-5.2, GLM-5.1, GLM-5, GLM-4.5, GLM-4.6, GLM-4.7 series”; https://docs.z.ai/api-reference/llm/chat-completion — `reasoning_content`: “Reasoning content, supports by GLM-4.5 series”. GLM-5.3/GLM-5.3-FLASH additionally use FORCED thinking — “GLM-5.3 and GLM-5.3-FLASH no longer support disabling thinking” (same page) — so `supported` is unconditional for this row, never gated on a `thinking.type` request.",
38541
+ "confidence": "declared",
38542
+ "observedAt": "2026-09-14T00:00:00Z"
38543
+ },
38544
+ "efforts": [],
38545
+ "continuation": "plaintext",
38546
+ "readableState": {
38547
+ "value": "full-exposed",
38548
+ "source": "official-doc",
38549
+ "sourceRef": "https://docs.z.ai/guides/capabilities/thinking — the non-streaming response example carries the assistant message's ordinary `content` alongside a sibling `reasoning_content` string field (both plain readable text); streaming deltas carry the same split via `delta.reasoning_content` / `delta.content`",
38550
+ "confidence": "declared",
38551
+ "observedAt": "2026-09-14T00:00:00Z"
38552
+ },
38553
+ "replayScope": {
38554
+ "value": "all-turns",
38555
+ "source": "official-doc",
38556
+ "sourceRef": "https://docs.z.ai/api-reference/llm/chat-completion — `ChatThinking.clear_thinking`: “`false`: Retains `reasoning_content` from prior turns and includes it in the context sent to the model. To enable Preserved Thinking, you must forward the full, unmodified, and correctly ordered historical `reasoning_content` in `messages`”",
38557
+ "confidence": "declared",
38558
+ "observedAt": "2026-09-14T00:00:00Z"
38559
+ },
38560
+ "toolLoopRequirement": {
38561
+ "value": "silent-degradation",
38562
+ "source": "official-doc",
38563
+ "sourceRef": "https://docs.z.ai/api-reference/llm/chat-completion — `clear_thinking`: “Missing, truncated, rewritten, or reordered blocks may degrade performance or prevent the feature from taking effect”; https://docs.z.ai/guides/capabilities/thinking-mode — interleaved thinking: “thinking blocks should be explicitly preserved and returned together with the tool results” (never stated as a hard error/4xx, unlike DeepSeek's documented 400)",
38564
+ "confidence": "declared",
38565
+ "observedAt": "2026-09-14T00:00:00Z"
38566
+ }
38567
+ },
38344
38568
  "canonicalModelId": "glm-5.3",
38345
38569
  "modelFamily": "glm"
38346
38570
  },
@@ -3689,7 +3689,7 @@
3689
3689
  "upstreamId": "glm-4.7",
3690
3690
  "displayName": "GLM 4.7 (OpenAI dialect)",
3691
3691
  "aliases": [],
3692
- "$comment": "R6b-5: duplicated from the `zai-anthropic` sibling's upstream facts with its own key. `toolCalling` fails CLOSED because upstream states no flag for these rows — see WS-13 §8.1.",
3692
+ "$comment": "R6b-5: duplicated from the `zai-anthropic` sibling's upstream facts with its own key. `toolCalling` fails CLOSED because upstream states no flag for these rows — see WS-13 §8.1. Reasoning evidence added for SDK 0.0.11 (R-10b-8/W18-16, router review findings): GLM exposes readable `reasoning_content` (full-exposed, like DeepSeek), so this row must never be treated as a model with nothing to lose, and its own carriage (as a SOURCE, cross-family) must render `kind=\"exposed\"`, not `kind=\"summary\"`. `continuation` is `plaintext`: Z.ai's own Preserved Thinking / Interleaved Thinking docs (docs.z.ai/guides/capabilities/thinking-mode, and `ChatThinking.clear_thinking` on docs.z.ai/api-reference/llm/chat-completion) document forwarding the full historical `reasoning_content` back in `messages` verbatim and in order — the textual passback contract the schema's `plaintext` value exists for, exactly as `deepseek/deepseek-reasoner` already carries. This ALSO fixes same-domain carriage: `capabilitiesFrom`'s `readableState` gates the OpenAI chat-completions adapter's own `captureExposedReasoning` flag (`chat-completions.ts`), which — with `reasoning: null` — was silently disabling GLM's own tool-loop reasoning replay, contrary to Z.ai's default-on Interleaved Thinking. Passback is opt-in (`clear_thinking` defaults `true` = cleared on the standard API endpoint; the Coding Plan endpoint defaults it `false`) — this row states what the documented contract IS once engaged, not that Winter enables it by default. `toolLoopRequirement` is `silent-degradation`, not DeepSeek's `hard-error`: Z.ai's own wording is “may degrade performance ... or prevent the feature from taking effect”, never a stated error response; nothing in this codebase reads `toolLoopRequirement` for behavior today, so this is evidentiary only. No `zai-anthropic/*` sibling gets this: no official Z.ai documentation of an Anthropic-dialect (`/v1/messages`) thinking contract was found (docs.z.ai's own site index carries no such page as of 2026-09-14) — WS-13 §8.2 forbids assuming one dialect's contract on another, so those rows stay untouched.",
3693
3693
  "endpoints": [
3694
3694
  "chat"
3695
3695
  ],
@@ -3726,7 +3726,39 @@
3726
3726
  "observedAt": "2026-09-06T00:00:00Z"
3727
3727
  },
3728
3728
  "unsupportedParameters": [],
3729
- "status": "candidate"
3729
+ "status": "candidate",
3730
+ "reasoning": {
3731
+ "supported": {
3732
+ "value": true,
3733
+ "source": "official-doc",
3734
+ "sourceRef": "https://docs.z.ai/guides/capabilities/thinking — “The Deep Thinking feature currently supports the latest models in the GLM-5.3, GLM-5.3-FLASH, GLM-5.2, GLM-5.1, GLM-5, GLM-4.5, GLM-4.6, GLM-4.7 series”; https://docs.z.ai/api-reference/llm/chat-completion — `reasoning_content`: “Reasoning content, supports by GLM-4.5 series”",
3735
+ "confidence": "declared",
3736
+ "observedAt": "2026-09-14T00:00:00Z"
3737
+ },
3738
+ "efforts": [],
3739
+ "continuation": "plaintext",
3740
+ "readableState": {
3741
+ "value": "full-exposed",
3742
+ "source": "official-doc",
3743
+ "sourceRef": "https://docs.z.ai/guides/capabilities/thinking — the non-streaming response example carries the assistant message's ordinary `content` alongside a sibling `reasoning_content` string field (both plain readable text); streaming deltas carry the same split via `delta.reasoning_content` / `delta.content`",
3744
+ "confidence": "declared",
3745
+ "observedAt": "2026-09-14T00:00:00Z"
3746
+ },
3747
+ "replayScope": {
3748
+ "value": "all-turns",
3749
+ "source": "official-doc",
3750
+ "sourceRef": "https://docs.z.ai/api-reference/llm/chat-completion — `ChatThinking.clear_thinking`: “`false`: Retains `reasoning_content` from prior turns and includes it in the context sent to the model. To enable Preserved Thinking, you must forward the full, unmodified, and correctly ordered historical `reasoning_content` in `messages`”",
3751
+ "confidence": "declared",
3752
+ "observedAt": "2026-09-14T00:00:00Z"
3753
+ },
3754
+ "toolLoopRequirement": {
3755
+ "value": "silent-degradation",
3756
+ "source": "official-doc",
3757
+ "sourceRef": "https://docs.z.ai/api-reference/llm/chat-completion — `clear_thinking`: “Missing, truncated, rewritten, or reordered blocks may degrade performance or prevent the feature from taking effect”; https://docs.z.ai/guides/capabilities/thinking-mode — interleaved thinking: “thinking blocks should be explicitly preserved and returned together with the tool results” (never stated as a hard error/4xx, unlike DeepSeek's documented 400)",
3758
+ "confidence": "declared",
3759
+ "observedAt": "2026-09-14T00:00:00Z"
3760
+ }
3761
+ }
3730
3762
  },
3731
3763
  {
3732
3764
  "key": "zai/glm-4.7-flash",
@@ -3734,7 +3766,7 @@
3734
3766
  "upstreamId": "glm-4.7-flash",
3735
3767
  "displayName": "GLM 4.7 Flash (OpenAI dialect)",
3736
3768
  "aliases": [],
3737
- "$comment": "R6b-5: duplicated from the `zai-anthropic` sibling's upstream facts with its own key. `toolCalling` fails CLOSED because upstream states no flag for these rows — see WS-13 §8.1.",
3769
+ "$comment": "R6b-5: duplicated from the `zai-anthropic` sibling's upstream facts with its own key. `toolCalling` fails CLOSED because upstream states no flag for these rows — see WS-13 §8.1. Reasoning evidence added for SDK 0.0.11 (R-10b-8/W18-16, router review findings): GLM exposes readable `reasoning_content` (full-exposed, like DeepSeek), so this row must never be treated as a model with nothing to lose, and its own carriage (as a SOURCE, cross-family) must render `kind=\"exposed\"`, not `kind=\"summary\"`. `continuation` is `plaintext`: Z.ai's own Preserved Thinking / Interleaved Thinking docs (docs.z.ai/guides/capabilities/thinking-mode, and `ChatThinking.clear_thinking` on docs.z.ai/api-reference/llm/chat-completion) document forwarding the full historical `reasoning_content` back in `messages` verbatim and in order — the textual passback contract the schema's `plaintext` value exists for, exactly as `deepseek/deepseek-reasoner` already carries. This ALSO fixes same-domain carriage: `capabilitiesFrom`'s `readableState` gates the OpenAI chat-completions adapter's own `captureExposedReasoning` flag (`chat-completions.ts`), which — with `reasoning: null` — was silently disabling GLM's own tool-loop reasoning replay, contrary to Z.ai's default-on Interleaved Thinking. Passback is opt-in (`clear_thinking` defaults `true` = cleared on the standard API endpoint; the Coding Plan endpoint defaults it `false`) — this row states what the documented contract IS once engaged, not that Winter enables it by default. `toolLoopRequirement` is `silent-degradation`, not DeepSeek's `hard-error`: Z.ai's own wording is “may degrade performance ... or prevent the feature from taking effect”, never a stated error response; nothing in this codebase reads `toolLoopRequirement` for behavior today, so this is evidentiary only. No `zai-anthropic/*` sibling gets this: no official Z.ai documentation of an Anthropic-dialect (`/v1/messages`) thinking contract was found (docs.z.ai's own site index carries no such page as of 2026-09-14) — WS-13 §8.2 forbids assuming one dialect's contract on another, so those rows stay untouched.",
3738
3770
  "endpoints": [
3739
3771
  "chat"
3740
3772
  ],
@@ -3771,7 +3803,39 @@
3771
3803
  "observedAt": "2026-09-06T00:00:00Z"
3772
3804
  },
3773
3805
  "unsupportedParameters": [],
3774
- "status": "candidate"
3806
+ "status": "candidate",
3807
+ "reasoning": {
3808
+ "supported": {
3809
+ "value": true,
3810
+ "source": "official-doc",
3811
+ "sourceRef": "https://docs.z.ai/guides/capabilities/thinking — “The Deep Thinking feature currently supports the latest models in the GLM-5.3, GLM-5.3-FLASH, GLM-5.2, GLM-5.1, GLM-5, GLM-4.5, GLM-4.6, GLM-4.7 series”; https://docs.z.ai/api-reference/llm/chat-completion — `reasoning_content`: “Reasoning content, supports by GLM-4.5 series”",
3812
+ "confidence": "declared",
3813
+ "observedAt": "2026-09-14T00:00:00Z"
3814
+ },
3815
+ "efforts": [],
3816
+ "continuation": "plaintext",
3817
+ "readableState": {
3818
+ "value": "full-exposed",
3819
+ "source": "official-doc",
3820
+ "sourceRef": "https://docs.z.ai/guides/capabilities/thinking — the non-streaming response example carries the assistant message's ordinary `content` alongside a sibling `reasoning_content` string field (both plain readable text); streaming deltas carry the same split via `delta.reasoning_content` / `delta.content`",
3821
+ "confidence": "declared",
3822
+ "observedAt": "2026-09-14T00:00:00Z"
3823
+ },
3824
+ "replayScope": {
3825
+ "value": "all-turns",
3826
+ "source": "official-doc",
3827
+ "sourceRef": "https://docs.z.ai/api-reference/llm/chat-completion — `ChatThinking.clear_thinking`: “`false`: Retains `reasoning_content` from prior turns and includes it in the context sent to the model. To enable Preserved Thinking, you must forward the full, unmodified, and correctly ordered historical `reasoning_content` in `messages`”",
3828
+ "confidence": "declared",
3829
+ "observedAt": "2026-09-14T00:00:00Z"
3830
+ },
3831
+ "toolLoopRequirement": {
3832
+ "value": "silent-degradation",
3833
+ "source": "official-doc",
3834
+ "sourceRef": "https://docs.z.ai/api-reference/llm/chat-completion — `clear_thinking`: “Missing, truncated, rewritten, or reordered blocks may degrade performance or prevent the feature from taking effect”; https://docs.z.ai/guides/capabilities/thinking-mode — interleaved thinking: “thinking blocks should be explicitly preserved and returned together with the tool results” (never stated as a hard error/4xx, unlike DeepSeek's documented 400)",
3835
+ "confidence": "declared",
3836
+ "observedAt": "2026-09-14T00:00:00Z"
3837
+ }
3838
+ }
3775
3839
  },
3776
3840
  {
3777
3841
  "key": "zai/glm-5",
@@ -3779,7 +3843,7 @@
3779
3843
  "upstreamId": "glm-5",
3780
3844
  "displayName": "GLM 5 (OpenAI dialect)",
3781
3845
  "aliases": [],
3782
- "$comment": "R6b-5: duplicated from the `zai-anthropic` sibling's upstream facts with its own key. `toolCalling` fails CLOSED because upstream states no flag for these rows — see WS-13 §8.1.",
3846
+ "$comment": "R6b-5: duplicated from the `zai-anthropic` sibling's upstream facts with its own key. `toolCalling` fails CLOSED because upstream states no flag for these rows — see WS-13 §8.1. Reasoning evidence added for SDK 0.0.11 (R-10b-8/W18-16, router review findings): GLM exposes readable `reasoning_content` (full-exposed, like DeepSeek), so this row must never be treated as a model with nothing to lose, and its own carriage (as a SOURCE, cross-family) must render `kind=\"exposed\"`, not `kind=\"summary\"`. `continuation` is `plaintext`: Z.ai's own Preserved Thinking / Interleaved Thinking docs (docs.z.ai/guides/capabilities/thinking-mode, and `ChatThinking.clear_thinking` on docs.z.ai/api-reference/llm/chat-completion) document forwarding the full historical `reasoning_content` back in `messages` verbatim and in order — the textual passback contract the schema's `plaintext` value exists for, exactly as `deepseek/deepseek-reasoner` already carries. This ALSO fixes same-domain carriage: `capabilitiesFrom`'s `readableState` gates the OpenAI chat-completions adapter's own `captureExposedReasoning` flag (`chat-completions.ts`), which — with `reasoning: null` — was silently disabling GLM's own tool-loop reasoning replay, contrary to Z.ai's default-on Interleaved Thinking. Passback is opt-in (`clear_thinking` defaults `true` = cleared on the standard API endpoint; the Coding Plan endpoint defaults it `false`) — this row states what the documented contract IS once engaged, not that Winter enables it by default. `toolLoopRequirement` is `silent-degradation`, not DeepSeek's `hard-error`: Z.ai's own wording is “may degrade performance ... or prevent the feature from taking effect”, never a stated error response; nothing in this codebase reads `toolLoopRequirement` for behavior today, so this is evidentiary only. No `zai-anthropic/*` sibling gets this: no official Z.ai documentation of an Anthropic-dialect (`/v1/messages`) thinking contract was found (docs.z.ai's own site index carries no such page as of 2026-09-14) — WS-13 §8.2 forbids assuming one dialect's contract on another, so those rows stay untouched.",
3783
3847
  "endpoints": [
3784
3848
  "chat"
3785
3849
  ],
@@ -3816,7 +3880,39 @@
3816
3880
  "observedAt": "2026-09-06T00:00:00Z"
3817
3881
  },
3818
3882
  "unsupportedParameters": [],
3819
- "status": "candidate"
3883
+ "status": "candidate",
3884
+ "reasoning": {
3885
+ "supported": {
3886
+ "value": true,
3887
+ "source": "official-doc",
3888
+ "sourceRef": "https://docs.z.ai/guides/capabilities/thinking — “The Deep Thinking feature currently supports the latest models in the GLM-5.3, GLM-5.3-FLASH, GLM-5.2, GLM-5.1, GLM-5, GLM-4.5, GLM-4.6, GLM-4.7 series”; https://docs.z.ai/api-reference/llm/chat-completion — `reasoning_content`: “Reasoning content, supports by GLM-4.5 series”",
3889
+ "confidence": "declared",
3890
+ "observedAt": "2026-09-14T00:00:00Z"
3891
+ },
3892
+ "efforts": [],
3893
+ "continuation": "plaintext",
3894
+ "readableState": {
3895
+ "value": "full-exposed",
3896
+ "source": "official-doc",
3897
+ "sourceRef": "https://docs.z.ai/guides/capabilities/thinking — the non-streaming response example carries the assistant message's ordinary `content` alongside a sibling `reasoning_content` string field (both plain readable text); streaming deltas carry the same split via `delta.reasoning_content` / `delta.content`",
3898
+ "confidence": "declared",
3899
+ "observedAt": "2026-09-14T00:00:00Z"
3900
+ },
3901
+ "replayScope": {
3902
+ "value": "all-turns",
3903
+ "source": "official-doc",
3904
+ "sourceRef": "https://docs.z.ai/api-reference/llm/chat-completion — `ChatThinking.clear_thinking`: “`false`: Retains `reasoning_content` from prior turns and includes it in the context sent to the model. To enable Preserved Thinking, you must forward the full, unmodified, and correctly ordered historical `reasoning_content` in `messages`”",
3905
+ "confidence": "declared",
3906
+ "observedAt": "2026-09-14T00:00:00Z"
3907
+ },
3908
+ "toolLoopRequirement": {
3909
+ "value": "silent-degradation",
3910
+ "source": "official-doc",
3911
+ "sourceRef": "https://docs.z.ai/api-reference/llm/chat-completion — `clear_thinking`: “Missing, truncated, rewritten, or reordered blocks may degrade performance or prevent the feature from taking effect”; https://docs.z.ai/guides/capabilities/thinking-mode — interleaved thinking: “thinking blocks should be explicitly preserved and returned together with the tool results” (never stated as a hard error/4xx, unlike DeepSeek's documented 400)",
3912
+ "confidence": "declared",
3913
+ "observedAt": "2026-09-14T00:00:00Z"
3914
+ }
3915
+ }
3820
3916
  },
3821
3917
  {
3822
3918
  "key": "zai/glm-5-turbo",
@@ -3824,7 +3920,7 @@
3824
3920
  "upstreamId": "glm-5-turbo",
3825
3921
  "displayName": "GLM 5 Turbo (OpenAI dialect)",
3826
3922
  "aliases": [],
3827
- "$comment": "R6b-5: duplicated from the `zai-anthropic` sibling's upstream facts with its own key. `toolCalling` fails CLOSED because upstream states no flag for these rows — see WS-13 §8.1.",
3923
+ "$comment": "R6b-5: duplicated from the `zai-anthropic` sibling's upstream facts with its own key. `toolCalling` fails CLOSED because upstream states no flag for these rows — see WS-13 §8.1. Reasoning evidence added for SDK 0.0.11 (R-10b-8/W18-16, router review findings): GLM exposes readable `reasoning_content` (full-exposed, like DeepSeek), so this row must never be treated as a model with nothing to lose, and its own carriage (as a SOURCE, cross-family) must render `kind=\"exposed\"`, not `kind=\"summary\"`. `continuation` is `plaintext`: Z.ai's own Preserved Thinking / Interleaved Thinking docs (docs.z.ai/guides/capabilities/thinking-mode, and `ChatThinking.clear_thinking` on docs.z.ai/api-reference/llm/chat-completion) document forwarding the full historical `reasoning_content` back in `messages` verbatim and in order — the textual passback contract the schema's `plaintext` value exists for, exactly as `deepseek/deepseek-reasoner` already carries. This ALSO fixes same-domain carriage: `capabilitiesFrom`'s `readableState` gates the OpenAI chat-completions adapter's own `captureExposedReasoning` flag (`chat-completions.ts`), which — with `reasoning: null` — was silently disabling GLM's own tool-loop reasoning replay, contrary to Z.ai's default-on Interleaved Thinking. Passback is opt-in (`clear_thinking` defaults `true` = cleared on the standard API endpoint; the Coding Plan endpoint defaults it `false`) — this row states what the documented contract IS once engaged, not that Winter enables it by default. `toolLoopRequirement` is `silent-degradation`, not DeepSeek's `hard-error`: Z.ai's own wording is “may degrade performance ... or prevent the feature from taking effect”, never a stated error response; nothing in this codebase reads `toolLoopRequirement` for behavior today, so this is evidentiary only. No `zai-anthropic/*` sibling gets this: no official Z.ai documentation of an Anthropic-dialect (`/v1/messages`) thinking contract was found (docs.z.ai's own site index carries no such page as of 2026-09-14) — WS-13 §8.2 forbids assuming one dialect's contract on another, so those rows stay untouched.",
3828
3924
  "endpoints": [
3829
3925
  "chat"
3830
3926
  ],
@@ -3861,7 +3957,39 @@
3861
3957
  "observedAt": "2026-09-06T00:00:00Z"
3862
3958
  },
3863
3959
  "unsupportedParameters": [],
3864
- "status": "candidate"
3960
+ "status": "candidate",
3961
+ "reasoning": {
3962
+ "supported": {
3963
+ "value": true,
3964
+ "source": "official-doc",
3965
+ "sourceRef": "https://docs.z.ai/guides/capabilities/thinking — “The Deep Thinking feature currently supports the latest models in the GLM-5.3, GLM-5.3-FLASH, GLM-5.2, GLM-5.1, GLM-5, GLM-4.5, GLM-4.6, GLM-4.7 series”; https://docs.z.ai/api-reference/llm/chat-completion — `reasoning_content`: “Reasoning content, supports by GLM-4.5 series”",
3966
+ "confidence": "declared",
3967
+ "observedAt": "2026-09-14T00:00:00Z"
3968
+ },
3969
+ "efforts": [],
3970
+ "continuation": "plaintext",
3971
+ "readableState": {
3972
+ "value": "full-exposed",
3973
+ "source": "official-doc",
3974
+ "sourceRef": "https://docs.z.ai/guides/capabilities/thinking — the non-streaming response example carries the assistant message's ordinary `content` alongside a sibling `reasoning_content` string field (both plain readable text); streaming deltas carry the same split via `delta.reasoning_content` / `delta.content`",
3975
+ "confidence": "declared",
3976
+ "observedAt": "2026-09-14T00:00:00Z"
3977
+ },
3978
+ "replayScope": {
3979
+ "value": "all-turns",
3980
+ "source": "official-doc",
3981
+ "sourceRef": "https://docs.z.ai/api-reference/llm/chat-completion — `ChatThinking.clear_thinking`: “`false`: Retains `reasoning_content` from prior turns and includes it in the context sent to the model. To enable Preserved Thinking, you must forward the full, unmodified, and correctly ordered historical `reasoning_content` in `messages`”",
3982
+ "confidence": "declared",
3983
+ "observedAt": "2026-09-14T00:00:00Z"
3984
+ },
3985
+ "toolLoopRequirement": {
3986
+ "value": "silent-degradation",
3987
+ "source": "official-doc",
3988
+ "sourceRef": "https://docs.z.ai/api-reference/llm/chat-completion — `clear_thinking`: “Missing, truncated, rewritten, or reordered blocks may degrade performance or prevent the feature from taking effect”; https://docs.z.ai/guides/capabilities/thinking-mode — interleaved thinking: “thinking blocks should be explicitly preserved and returned together with the tool results” (never stated as a hard error/4xx, unlike DeepSeek's documented 400)",
3989
+ "confidence": "declared",
3990
+ "observedAt": "2026-09-14T00:00:00Z"
3991
+ }
3992
+ }
3865
3993
  },
3866
3994
  {
3867
3995
  "key": "zai/glm-5.1",
@@ -3869,7 +3997,7 @@
3869
3997
  "upstreamId": "glm-5.1",
3870
3998
  "displayName": "GLM 5.1 (OpenAI dialect)",
3871
3999
  "aliases": [],
3872
- "$comment": "R6b-5: duplicated from the `zai-anthropic` sibling's upstream facts with its own key. `toolCalling` fails CLOSED because upstream states no flag for these rows — see WS-13 §8.1.",
4000
+ "$comment": "R6b-5: duplicated from the `zai-anthropic` sibling's upstream facts with its own key. `toolCalling` fails CLOSED because upstream states no flag for these rows — see WS-13 §8.1. Reasoning evidence added for SDK 0.0.11 (R-10b-8/W18-16, router review findings): GLM exposes readable `reasoning_content` (full-exposed, like DeepSeek), so this row must never be treated as a model with nothing to lose, and its own carriage (as a SOURCE, cross-family) must render `kind=\"exposed\"`, not `kind=\"summary\"`. `continuation` is `plaintext`: Z.ai's own Preserved Thinking / Interleaved Thinking docs (docs.z.ai/guides/capabilities/thinking-mode, and `ChatThinking.clear_thinking` on docs.z.ai/api-reference/llm/chat-completion) document forwarding the full historical `reasoning_content` back in `messages` verbatim and in order — the textual passback contract the schema's `plaintext` value exists for, exactly as `deepseek/deepseek-reasoner` already carries. This ALSO fixes same-domain carriage: `capabilitiesFrom`'s `readableState` gates the OpenAI chat-completions adapter's own `captureExposedReasoning` flag (`chat-completions.ts`), which — with `reasoning: null` — was silently disabling GLM's own tool-loop reasoning replay, contrary to Z.ai's default-on Interleaved Thinking. Passback is opt-in (`clear_thinking` defaults `true` = cleared on the standard API endpoint; the Coding Plan endpoint defaults it `false`) — this row states what the documented contract IS once engaged, not that Winter enables it by default. `toolLoopRequirement` is `silent-degradation`, not DeepSeek's `hard-error`: Z.ai's own wording is “may degrade performance ... or prevent the feature from taking effect”, never a stated error response; nothing in this codebase reads `toolLoopRequirement` for behavior today, so this is evidentiary only. No `zai-anthropic/*` sibling gets this: no official Z.ai documentation of an Anthropic-dialect (`/v1/messages`) thinking contract was found (docs.z.ai's own site index carries no such page as of 2026-09-14) — WS-13 §8.2 forbids assuming one dialect's contract on another, so those rows stay untouched.",
3873
4001
  "endpoints": [
3874
4002
  "chat"
3875
4003
  ],
@@ -3906,7 +4034,39 @@
3906
4034
  "observedAt": "2026-09-06T00:00:00Z"
3907
4035
  },
3908
4036
  "unsupportedParameters": [],
3909
- "status": "candidate"
4037
+ "status": "candidate",
4038
+ "reasoning": {
4039
+ "supported": {
4040
+ "value": true,
4041
+ "source": "official-doc",
4042
+ "sourceRef": "https://docs.z.ai/guides/capabilities/thinking — “The Deep Thinking feature currently supports the latest models in the GLM-5.3, GLM-5.3-FLASH, GLM-5.2, GLM-5.1, GLM-5, GLM-4.5, GLM-4.6, GLM-4.7 series”; https://docs.z.ai/api-reference/llm/chat-completion — `reasoning_content`: “Reasoning content, supports by GLM-4.5 series”",
4043
+ "confidence": "declared",
4044
+ "observedAt": "2026-09-14T00:00:00Z"
4045
+ },
4046
+ "efforts": [],
4047
+ "continuation": "plaintext",
4048
+ "readableState": {
4049
+ "value": "full-exposed",
4050
+ "source": "official-doc",
4051
+ "sourceRef": "https://docs.z.ai/guides/capabilities/thinking — the non-streaming response example carries the assistant message's ordinary `content` alongside a sibling `reasoning_content` string field (both plain readable text); streaming deltas carry the same split via `delta.reasoning_content` / `delta.content`",
4052
+ "confidence": "declared",
4053
+ "observedAt": "2026-09-14T00:00:00Z"
4054
+ },
4055
+ "replayScope": {
4056
+ "value": "all-turns",
4057
+ "source": "official-doc",
4058
+ "sourceRef": "https://docs.z.ai/api-reference/llm/chat-completion — `ChatThinking.clear_thinking`: “`false`: Retains `reasoning_content` from prior turns and includes it in the context sent to the model. To enable Preserved Thinking, you must forward the full, unmodified, and correctly ordered historical `reasoning_content` in `messages`”",
4059
+ "confidence": "declared",
4060
+ "observedAt": "2026-09-14T00:00:00Z"
4061
+ },
4062
+ "toolLoopRequirement": {
4063
+ "value": "silent-degradation",
4064
+ "source": "official-doc",
4065
+ "sourceRef": "https://docs.z.ai/api-reference/llm/chat-completion — `clear_thinking`: “Missing, truncated, rewritten, or reordered blocks may degrade performance or prevent the feature from taking effect”; https://docs.z.ai/guides/capabilities/thinking-mode — interleaved thinking: “thinking blocks should be explicitly preserved and returned together with the tool results” (never stated as a hard error/4xx, unlike DeepSeek's documented 400)",
4066
+ "confidence": "declared",
4067
+ "observedAt": "2026-09-14T00:00:00Z"
4068
+ }
4069
+ }
3910
4070
  },
3911
4071
  {
3912
4072
  "key": "zai/glm-5.2",
@@ -3914,7 +4074,7 @@
3914
4074
  "upstreamId": "glm-5.2",
3915
4075
  "displayName": "GLM 5.2 (OpenAI dialect)",
3916
4076
  "aliases": [],
3917
- "$comment": "R6b-5: duplicated from the `zai-anthropic` sibling's upstream facts with its own key. `toolCalling` fails CLOSED because upstream states no flag for these rows — see WS-13 §8.1.",
4077
+ "$comment": "R6b-5: duplicated from the `zai-anthropic` sibling's upstream facts with its own key. `toolCalling` fails CLOSED because upstream states no flag for these rows — see WS-13 §8.1. Reasoning evidence added for SDK 0.0.11 (R-10b-8/W18-16, router review findings): GLM exposes readable `reasoning_content` (full-exposed, like DeepSeek), so this row must never be treated as a model with nothing to lose, and its own carriage (as a SOURCE, cross-family) must render `kind=\"exposed\"`, not `kind=\"summary\"`. `continuation` is `plaintext`: Z.ai's own Preserved Thinking / Interleaved Thinking docs (docs.z.ai/guides/capabilities/thinking-mode, and `ChatThinking.clear_thinking` on docs.z.ai/api-reference/llm/chat-completion) document forwarding the full historical `reasoning_content` back in `messages` verbatim and in order — the textual passback contract the schema's `plaintext` value exists for, exactly as `deepseek/deepseek-reasoner` already carries. This ALSO fixes same-domain carriage: `capabilitiesFrom`'s `readableState` gates the OpenAI chat-completions adapter's own `captureExposedReasoning` flag (`chat-completions.ts`), which — with `reasoning: null` — was silently disabling GLM's own tool-loop reasoning replay, contrary to Z.ai's default-on Interleaved Thinking. Passback is opt-in (`clear_thinking` defaults `true` = cleared on the standard API endpoint; the Coding Plan endpoint defaults it `false`) — this row states what the documented contract IS once engaged, not that Winter enables it by default. `toolLoopRequirement` is `silent-degradation`, not DeepSeek's `hard-error`: Z.ai's own wording is “may degrade performance ... or prevent the feature from taking effect”, never a stated error response; nothing in this codebase reads `toolLoopRequirement` for behavior today, so this is evidentiary only. No `zai-anthropic/*` sibling gets this: no official Z.ai documentation of an Anthropic-dialect (`/v1/messages`) thinking contract was found (docs.z.ai's own site index carries no such page as of 2026-09-14) — WS-13 §8.2 forbids assuming one dialect's contract on another, so those rows stay untouched.",
3918
4078
  "endpoints": [
3919
4079
  "chat"
3920
4080
  ],
@@ -3951,7 +4111,39 @@
3951
4111
  "observedAt": "2026-09-06T00:00:00Z"
3952
4112
  },
3953
4113
  "unsupportedParameters": [],
3954
- "status": "candidate"
4114
+ "status": "candidate",
4115
+ "reasoning": {
4116
+ "supported": {
4117
+ "value": true,
4118
+ "source": "official-doc",
4119
+ "sourceRef": "https://docs.z.ai/guides/capabilities/thinking — “The Deep Thinking feature currently supports the latest models in the GLM-5.3, GLM-5.3-FLASH, GLM-5.2, GLM-5.1, GLM-5, GLM-4.5, GLM-4.6, GLM-4.7 series”; https://docs.z.ai/api-reference/llm/chat-completion — `reasoning_content`: “Reasoning content, supports by GLM-4.5 series”",
4120
+ "confidence": "declared",
4121
+ "observedAt": "2026-09-14T00:00:00Z"
4122
+ },
4123
+ "efforts": [],
4124
+ "continuation": "plaintext",
4125
+ "readableState": {
4126
+ "value": "full-exposed",
4127
+ "source": "official-doc",
4128
+ "sourceRef": "https://docs.z.ai/guides/capabilities/thinking — the non-streaming response example carries the assistant message's ordinary `content` alongside a sibling `reasoning_content` string field (both plain readable text); streaming deltas carry the same split via `delta.reasoning_content` / `delta.content`",
4129
+ "confidence": "declared",
4130
+ "observedAt": "2026-09-14T00:00:00Z"
4131
+ },
4132
+ "replayScope": {
4133
+ "value": "all-turns",
4134
+ "source": "official-doc",
4135
+ "sourceRef": "https://docs.z.ai/api-reference/llm/chat-completion — `ChatThinking.clear_thinking`: “`false`: Retains `reasoning_content` from prior turns and includes it in the context sent to the model. To enable Preserved Thinking, you must forward the full, unmodified, and correctly ordered historical `reasoning_content` in `messages`”",
4136
+ "confidence": "declared",
4137
+ "observedAt": "2026-09-14T00:00:00Z"
4138
+ },
4139
+ "toolLoopRequirement": {
4140
+ "value": "silent-degradation",
4141
+ "source": "official-doc",
4142
+ "sourceRef": "https://docs.z.ai/api-reference/llm/chat-completion — `clear_thinking`: “Missing, truncated, rewritten, or reordered blocks may degrade performance or prevent the feature from taking effect”; https://docs.z.ai/guides/capabilities/thinking-mode — interleaved thinking: “thinking blocks should be explicitly preserved and returned together with the tool results” (never stated as a hard error/4xx, unlike DeepSeek's documented 400)",
4143
+ "confidence": "declared",
4144
+ "observedAt": "2026-09-14T00:00:00Z"
4145
+ }
4146
+ }
3955
4147
  },
3956
4148
  {
3957
4149
  "key": "zai/glm-5.3",
@@ -3959,7 +4151,7 @@
3959
4151
  "upstreamId": "glm-5.3",
3960
4152
  "displayName": "GLM 5.3 (OpenAI dialect)",
3961
4153
  "aliases": [],
3962
- "$comment": "R6b-5: duplicated from the `zai-anthropic` sibling's upstream facts with its own key. `toolCalling` fails CLOSED because upstream states no flag for these rows — see WS-13 §8.1.",
4154
+ "$comment": "R6b-5: duplicated from the `zai-anthropic` sibling's upstream facts with its own key. `toolCalling` fails CLOSED because upstream states no flag for these rows — see WS-13 §8.1. Reasoning evidence added for SDK 0.0.11 (R-10b-8/W18-16, router review findings): GLM exposes readable `reasoning_content` (full-exposed, like DeepSeek), so this row must never be treated as a model with nothing to lose, and its own carriage (as a SOURCE, cross-family) must render `kind=\"exposed\"`, not `kind=\"summary\"`. `continuation` is `plaintext`: Z.ai's own Preserved Thinking / Interleaved Thinking docs (docs.z.ai/guides/capabilities/thinking-mode, and `ChatThinking.clear_thinking` on docs.z.ai/api-reference/llm/chat-completion) document forwarding the full historical `reasoning_content` back in `messages` verbatim and in order — the textual passback contract the schema's `plaintext` value exists for, exactly as `deepseek/deepseek-reasoner` already carries. This ALSO fixes same-domain carriage: `capabilitiesFrom`'s `readableState` gates the OpenAI chat-completions adapter's own `captureExposedReasoning` flag (`chat-completions.ts`), which — with `reasoning: null` — was silently disabling GLM's own tool-loop reasoning replay, contrary to Z.ai's default-on Interleaved Thinking. Passback is opt-in (`clear_thinking` defaults `true` = cleared on the standard API endpoint; the Coding Plan endpoint defaults it `false`) — this row states what the documented contract IS once engaged, not that Winter enables it by default. `toolLoopRequirement` is `silent-degradation`, not DeepSeek's `hard-error`: Z.ai's own wording is “may degrade performance ... or prevent the feature from taking effect”, never a stated error response; nothing in this codebase reads `toolLoopRequirement` for behavior today, so this is evidentiary only. No `zai-anthropic/*` sibling gets this: no official Z.ai documentation of an Anthropic-dialect (`/v1/messages`) thinking contract was found (docs.z.ai's own site index carries no such page as of 2026-09-14) — WS-13 §8.2 forbids assuming one dialect's contract on another, so those rows stay untouched.",
3963
4155
  "endpoints": [
3964
4156
  "chat"
3965
4157
  ],
@@ -3996,7 +4188,39 @@
3996
4188
  "observedAt": "2026-09-06T00:00:00Z"
3997
4189
  },
3998
4190
  "unsupportedParameters": [],
3999
- "status": "candidate"
4191
+ "status": "candidate",
4192
+ "reasoning": {
4193
+ "supported": {
4194
+ "value": true,
4195
+ "source": "official-doc",
4196
+ "sourceRef": "https://docs.z.ai/guides/capabilities/thinking — “The Deep Thinking feature currently supports the latest models in the GLM-5.3, GLM-5.3-FLASH, GLM-5.2, GLM-5.1, GLM-5, GLM-4.5, GLM-4.6, GLM-4.7 series”; https://docs.z.ai/api-reference/llm/chat-completion — `reasoning_content`: “Reasoning content, supports by GLM-4.5 series”. GLM-5.3/GLM-5.3-FLASH additionally use FORCED thinking — “GLM-5.3 and GLM-5.3-FLASH no longer support disabling thinking” (same page) — so `supported` is unconditional for this row, never gated on a `thinking.type` request.",
4197
+ "confidence": "declared",
4198
+ "observedAt": "2026-09-14T00:00:00Z"
4199
+ },
4200
+ "efforts": [],
4201
+ "continuation": "plaintext",
4202
+ "readableState": {
4203
+ "value": "full-exposed",
4204
+ "source": "official-doc",
4205
+ "sourceRef": "https://docs.z.ai/guides/capabilities/thinking — the non-streaming response example carries the assistant message's ordinary `content` alongside a sibling `reasoning_content` string field (both plain readable text); streaming deltas carry the same split via `delta.reasoning_content` / `delta.content`",
4206
+ "confidence": "declared",
4207
+ "observedAt": "2026-09-14T00:00:00Z"
4208
+ },
4209
+ "replayScope": {
4210
+ "value": "all-turns",
4211
+ "source": "official-doc",
4212
+ "sourceRef": "https://docs.z.ai/api-reference/llm/chat-completion — `ChatThinking.clear_thinking`: “`false`: Retains `reasoning_content` from prior turns and includes it in the context sent to the model. To enable Preserved Thinking, you must forward the full, unmodified, and correctly ordered historical `reasoning_content` in `messages`”",
4213
+ "confidence": "declared",
4214
+ "observedAt": "2026-09-14T00:00:00Z"
4215
+ },
4216
+ "toolLoopRequirement": {
4217
+ "value": "silent-degradation",
4218
+ "source": "official-doc",
4219
+ "sourceRef": "https://docs.z.ai/api-reference/llm/chat-completion — `clear_thinking`: “Missing, truncated, rewritten, or reordered blocks may degrade performance or prevent the feature from taking effect”; https://docs.z.ai/guides/capabilities/thinking-mode — interleaved thinking: “thinking blocks should be explicitly preserved and returned together with the tool results” (never stated as a hard error/4xx, unlike DeepSeek's documented 400)",
4220
+ "confidence": "declared",
4221
+ "observedAt": "2026-09-14T00:00:00Z"
4222
+ }
4223
+ }
4000
4224
  },
4001
4225
  {
4002
4226
  "key": "xai-oauth/grok-4.6",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yanlinglabs/winter-provider-catalog",
3
- "version": "0.0.10",
3
+ "version": "0.0.11",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "engines": {