Skip to content

Releases: drscrewdriver/dsh-thinking-levels

v4.4.5

Choose a tag to compare

@drscrewdriver drscrewdriver released this 22 Oct 12:26

v4.4.5

Fixed

  • A taken-over Responses / Anthropic route whose model carries a multi-level reasoningEfforts table no longer collapses its effort selector to Off/On. The fold lives in piAiPosture.thinkingOn, which previously keyed only on "table present + route in the takeover list"; but the physical reason for the fold (pi-ai rejecting a reasoning_effort string outside its fixed seven levels) is a completions-only concern, and on a non-completions route the supportsReasoningEffort escape hatch cannot even be written (4.4.4). piAiPosture now additionally requires the route's api to be openai-completions (or absent, pi-ai's default) — the same predicate as the card's completionsCompatConfigurable. This single gate fixes both the selector advertisement (advertiseModelCapability) and the request-time toggleOnly stripping (capabilityResolver), so a taken-over Responses route keeps its native thinkingLevelMap levels end to end.

Tests

  • 186/186: new piAiPosture protocol-gate matrix — Responses/Anthropic taken-over routes do NOT fold, completions (and absent-api) routes still DO fold, out-of-takeover Responses never folds, and a completions row declaring supportsReasoningEffort is not toggle-only.

Release backfilled on 2026-10-22 from git tag + CHANGELOG history.

v4.4.4

Choose a tag to compare

@drscrewdriver drscrewdriver released this 22 Oct 12:26

v4.4.4

Changed

  • The two openai-completions-only switches (支持 think effort / 思考格式) are no longer RENDERED on other protocols — they used to be shown greyed with a long note. They now appear only when the model is declared a thinking model AND the route speaks openai-completions; everywhere else they are absent from the DOM. Thinking itself stays live on every protocol (protocol-neutral reasoningEfforts).
  • The per-level wire editor is no longer trapped in completions (issue #8). It edits reasoningEfforts — the table the host turns into pi-ai's thinkingLevelMap, which every protocol reads (Anthropic thinking budget, Responses reasoning effort, completions reasoning_effort string). A thinking model now opens the grid on any protocol; only the completions toggle-style guard (needs 支持 think effort before offering effort levels) still applies there.
  • toggleEffortCapable refuses a non-completions entry outright, so no code path can write the field where the host would reject it.

Fixed

  • applyDraft used to auto-write compat.supportsReasoningEffort: true whenever a non-toggle level was ticked. On a Responses/Anthropic route that field makes the host reject the WHOLE providers payload — one tick and the entire save was lost. The side effect is now completions-only, so editing levels outside completions is safe.

Added

  • Leftover audit (staleThinkingCompatFields) + one-click cleanup (stripThinkingCompat): a model row still carrying thinkingFormat / supportsReasoningEffort from an older version (or a hand-edited cordis.yml) now shows which fields block the next write, with a per-row and a card-wide sweep. Sibling compat fields survive; an emptied compat object is deleted rather than left as {}.

Tests

  • 180/180: the issue-#7 render matrix (absent vs present by protocol × thinking), the issue-#8 grid-on-every-protocol matrix, the write-recorder bomb regression (mutation-verified: removing the guard fails it), the audit, and the strip writer's sibling/empty-object cases.

Release backfilled on 2026-10-22 from git tag + CHANGELOG history.

v4.4.3

Choose a tag to compare

@drscrewdriver drscrewdriver released this 22 Oct 12:26

v4.4.3

Fixed

  • Capability card: the 思考 (thinking) checkbox is selectable again on every wire protocol, not only openai-completions. It writes the protocol-neutral reasoningEfforts (host llm-pi-ai → reasoning: true + thinkingLevelMap, which pi-ai maps natively per protocol), so the prerequisite the effort selector needs is back on Responses/Anthropic routes too.
  • A non-completions thinking declaration no longer carries the completions-only thinkingFormat along: the qwen format autofill is skipped there (a model-level write of it made the host reject the WHOLE providers payload), and off keeps a real wire token (none) so the Off level stays selectable instead of being marked unsupported by pi-ai.
  • thinkingFormat / 支持 think effort remain gated to openai-completions — those two ARE completions-only compat fields — and the card note now says exactly that instead of claiming thinking itself is unconfigurable.
  • Host-side compat sync: an explicitly non-completions api is no longer treated as a custom openai-completions gateway (the baseURL heuristic applies only when no protocol is named), so the auto-sync cannot write completions-only compat into a Responses/Anthropic route.

Tests

  • 168/168: new writeThinkingRow protocol matrix (completions / responses / anthropic), the 4.4.x alias, and the sync gateway guard.

Release backfilled on 2026-10-22 from git tag + CHANGELOG history.

v4.4.2

Choose a tag to compare

@drscrewdriver drscrewdriver released this 22 Oct 12:26

v4.4.2

  • The settings-card checkboxes (启用 / 接管主控 / 允许降档 / 允许升档 / 模型界面接管) are now optimistic horizontal pill toggles — click flips instantly, a refused write rolls back.
  • The 模型界面接管 row gained a VISIBLE explainer under the row (previously tooltip-only): what ON replaces, what OFF keeps, and that the auto mask still arrives either way.

Release backfilled on 2026-10-22 from git tag + CHANGELOG history.

v4.4.1

Choose a tag to compare

@drscrewdriver drscrewdriver released this 22 Oct 12:26

v4.4.1

  • Fixed: takeoverUi now applies live, no reload. The 4.4.0 gate read the settings mirror once at seat-inject time; on the real desktop host the model-seat callback can fire BEFORE the settings channel binds or the mirror folds, so with the switch on the panel never seated (and the official popup stayed with no context chips). Seating is now a watchdog re-evaluated whenever the settings waist binds or any settings change lands: flipping the switch seats the ModelPanel — flipping back returns the shipped ModelSelect — immediately.
  • Card: the takeoverUi row is an optimistic horizontal pill toggle (flips on click, rolls back on a refused write).

Release backfilled on 2026-10-22 from git tag + CHANGELOG history.

v4.4.0

Choose a tag to compare

@drscrewdriver drscrewdriver released this 22 Oct 12:26

v4.4.0

Fixed

  • Capability card (#2): providers whose api is not openai-completions (openai-responses family, anthropic-messages …) now grey out the Thinking / Supports-effort / thinkingFormat controls with an explanatory note instead of failing the whole providers write with a generic card.writeError — the host's Responses compat gate never offers those model-level fields.
  • Load cost (#4): the resolveModel advertisement is idempotent again — repeated llm/adapters-updated used to STACK wrappers, each replaying a full settings readout (O(models × wrappers) on the model page). The readout is generation-cached (invalidated on settings commits) and the takeover mirror re-check only runs for namespaces that can move the judgment. Note: the 4.3.0 projection stateVersion bump keeps a ONE-TIME history re-fold on the first load after upgrading.
  • Effort chip (#5): with the level set to auto the panel chip keeps showing Auto and demotes the step's resolved level to a secondary → <level> hint, instead of being overwritten by the scheduler's wire value.

Added

  • takeoverUi setting (default OFF, #3/#4): the composer keeps the official model popup — native search and loading, and the auto mask still arrives through the server-side advertisement; official-model context editing lives on the settings card while it is OFF. Flip it ON to restore the ModelPanel takeover. Reload the page after changing.
  • ModelPanel popup search (#3): shown past four models, mirroring the shipped selector's rule.

Release backfilled on 2026-10-22 from git tag + CHANGELOG history.

v4.3.3

Choose a tag to compare

@drscrewdriver drscrewdriver released this 22 Oct 12:26

v4.3.3

  • 计价目录化上线:price-catalog 41 条(国内 30 CNY 峰谷/平价 + 海外 11 USD:Claude 4 官方页一手、GPT 4/Gemini 3 Copilot 计费文档×公告交叉核实),注入型号按目录实价入账、目录外走 estimate 典型价兜底并标「未校准·仅供参考」(免费档调用=按标准价折算的花费/白嫖额度感知)。
  • 凭证入账 stateVersion 2→3;设置卡目录外定价五档选择器(9 语);CATALOG_VERSION 1→2;golden 150/150 绿。

Release backfilled on 2026-10-22 from git tag + CHANGELOG history.

v4.3.2

Choose a tag to compare

@drscrewdriver drscrewdriver released this 22 Oct 12:26

v4.3.2

  • hosts: 追加 0.2.1-rc.2 声明面枚举(宿主 peer 逐包 npm 实测 rc.2 在版;不触 ctx.web provider 与 model.label 槽,代码零改动,纯元数据发版;农场 rc.2 格挂账待命)

All notable changes to dsh-thinking-levels are documented here.


Release backfilled on 2026-10-22 from git tag + CHANGELOG history.

v4.3.1

Choose a tag to compare

@drscrewdriver drscrewdriver released this 22 Oct 12:27

v4.3.1

Fixed

  • engines.dsh and the seven @deepseek-ai/dsh-* peers append || 0.2.1-rc.1 (exact 12-term enumeration, no ranges or carets), so the host compatibility gate accepts DSH 0.2.1-rc.1.
  • dsh.plugin.json engines.dsh carries the same 12-term enumeration — the gate only reads package.json, but the two lists must not diverge.
  • devDependencies @deepseek-ai/dsh-client-* moved 0.2.0-rc.1 → 0.2.1-rc.1; build and the full suite (140 tests) verified against the target line.
  • README compatibility statements (en/zh/ja/ko/de/es/fr/it/ru) synced to the enumeration. No behaviour change in this release.

Release backfilled on 2026-10-22 from git tag + CHANGELOG history.

v4.3.0

Choose a tag to compare

@drscrewdriver drscrewdriver released this 22 Oct 12:27

v4.3.0

Added

  • Price catalog (src/price-catalog.ts): 29 model entries x region — DeepSeek V4.1-Flash / V4-Flash / V4-Pro carry the official peak/off-peak pairs (Beijing 09-12 & 14-18 peak, schedule effective 2026-08-17); GLM / Kimi / Qwen / Doubao / MiniMax / Ernie carry flat CN rates. Every entry prices three slots per million tokens — non-cached input / cache-hit input / output — and ships asOf + source annotations. Overseas (USD) slots are structurally present but intentionally left empty until official pages can be re-verified: no fabricated numbers.
  • defaultPricing setting (cn / global / custom / off, default off): models outside the catalog are no longer estimated at Flash rates — they render as unpriced instead.
  • 2026 State Council holiday/make-up correction table (39 rows, shared provenance with dsh-session-guard): make-up-workday weekends count as workdays for peak gating; statutory holidays are off-peak all day. Unknown years degrade to natural-weekend rules.

Changed

  • Projection stateVersion 1 -> 2: each usage sample stores a pricing receipt settled at fold time; same-step replacement subtracts the recorded values (no mixed-rate recomputation, no negative ledgers); session/turn totals are bucketed per currency. After upgrading, old checkpoints are discarded and refolded against the CURRENT catalog — historical totals shift once; afterwards pricing edits only affect subsequent samples.
  • Billing popover: currency-aware symbols (¥ / $, unknown currency falls back to its ISO code), honest chips for flat/null tiers, "priced as " derived from the catalog label, and mixed-currency sessions list per-currency rows instead of a fake sum.
  • matchedModel / unitPricePerM deprecated (dual-written for one more generation).

Fixed

  • settings.describe() shape normalization: in-process array vs RPC {namespaces:[...]} envelope — exotic shapes now read as absent instead of throwing into a swallowed catch (the silent-freeze failure class).
  • Projection registration is try/catch-guarded: a billing-unit failure hides the billing section instead of poisoning the whole plugin fiber or cold session history.

Release backfilled on 2026-10-22 from git tag + CHANGELOG history.