dsh-coding-subscription-oauth 0.6.4 → 0.6.5

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 (144) hide show
  1. package/CHANGELOG.md +280 -255
  2. package/CONTRIBUTING.md +138 -129
  3. package/INSTALL.md +256 -255
  4. package/LICENSE +19 -19
  5. package/NOTICE +11 -11
  6. package/README.de.md +303 -303
  7. package/README.es.md +304 -304
  8. package/README.fr.md +304 -304
  9. package/README.ja.md +304 -304
  10. package/README.ko.md +304 -304
  11. package/README.md +320 -320
  12. package/README.pt-BR.md +304 -304
  13. package/README.ru.md +304 -304
  14. package/README.zh-CN.md +318 -318
  15. package/compatibility/dsh-bom.json +30 -30
  16. package/cordis.patch.yml +13 -13
  17. package/docs/00-project-rules.md +212 -212
  18. package/docs/02-architecture.md +141 -137
  19. package/docs/02-architecture.zh-CN.md +141 -137
  20. package/lib/bin.js.map +1 -1
  21. package/lib/client.js +1 -1
  22. package/lib/client.js.map +1 -1
  23. package/lib/gateway-protocol.d.ts +3 -46
  24. package/lib/gateway-protocol.d.ts.map +1 -1
  25. package/lib/gateway-routes.d.ts.map +1 -1
  26. package/lib/grok-errors.d.ts +2 -12
  27. package/lib/grok-errors.d.ts.map +1 -1
  28. package/lib/grok-imagine/client.d.ts +73 -0
  29. package/lib/grok-imagine/client.d.ts.map +1 -0
  30. package/lib/grok-imagine/index.d.ts +8 -0
  31. package/lib/grok-imagine/index.d.ts.map +1 -0
  32. package/lib/grok-imagine/net.d.ts +10 -0
  33. package/lib/grok-imagine/net.d.ts.map +1 -0
  34. package/lib/grok-imagine/parse.d.ts +20 -0
  35. package/lib/grok-imagine/parse.d.ts.map +1 -0
  36. package/lib/grok-imagine/types.d.ts +191 -0
  37. package/lib/grok-imagine/types.d.ts.map +1 -0
  38. package/lib/grok-imagine.d.ts +3 -263
  39. package/lib/grok-imagine.d.ts.map +1 -1
  40. package/lib/http-json.d.ts +2 -9
  41. package/lib/http-json.d.ts.map +1 -1
  42. package/lib/index.js +57 -37
  43. package/lib/index.js.map +4 -4
  44. package/lib/invariant.js.map +1 -1
  45. package/lib/kimi-errors.d.ts +2 -12
  46. package/lib/kimi-errors.d.ts.map +1 -1
  47. package/lib/runtime/gateway-protocol.d.ts +47 -0
  48. package/lib/runtime/gateway-protocol.d.ts.map +1 -0
  49. package/lib/runtime/grok-errors.d.ts +13 -0
  50. package/lib/runtime/grok-errors.d.ts.map +1 -0
  51. package/lib/runtime/http-json.d.ts +10 -0
  52. package/lib/runtime/http-json.d.ts.map +1 -0
  53. package/lib/runtime/kimi-errors.d.ts +13 -0
  54. package/lib/runtime/kimi-errors.d.ts.map +1 -0
  55. package/media/en/settings_accounts.png +0 -0
  56. package/media/en/settings_capabilities.png +0 -0
  57. package/media/en/settings_gateway.png +0 -0
  58. package/media/settings_accounts.png +0 -0
  59. package/media/settings_capabilities.png +0 -0
  60. package/media/settings_gateway.png +0 -0
  61. package/media/settings_overview.png +0 -0
  62. package/media/zh-CN/settings_accounts.png +0 -0
  63. package/media/zh-CN/settings_capabilities.png +0 -0
  64. package/media/zh-CN/settings_gateway.png +0 -0
  65. package/package.json +225 -220
  66. package/patches/dsh-agy@0.1.2.patch +25 -25
  67. package/scripts/release.mjs +187 -186
  68. package/scripts/smoke-deployed-routes.mjs +146 -146
  69. package/scripts/verify-deployed-catalog.mjs +87 -87
  70. package/src/adapter.ts +0 -348
  71. package/src/alias-adapter.ts +0 -147
  72. package/src/auth-routes.ts +0 -921
  73. package/src/auth.ts +0 -67
  74. package/src/bin.ts +0 -350
  75. package/src/capability-routes.ts +0 -279
  76. package/src/capability-runtime.ts +0 -314
  77. package/src/capability-settings.ts +0 -671
  78. package/src/capability-tools.ts +0 -685
  79. package/src/catalog.ts +0 -271
  80. package/src/client/GrokBuildSettings.tsx +0 -771
  81. package/src/client/api.ts +0 -88
  82. package/src/client/components/AboutTab.tsx +0 -30
  83. package/src/client/components/AccountsTab.tsx +0 -241
  84. package/src/client/components/Badge.tsx +0 -33
  85. package/src/client/components/CapabilitiesTab.tsx +0 -265
  86. package/src/client/components/CliPullPreview.tsx +0 -116
  87. package/src/client/components/CopyButton.tsx +0 -57
  88. package/src/client/components/GatewayTab.tsx +0 -469
  89. package/src/client/components/NoticeBanner.tsx +0 -46
  90. package/src/client/components/ProgressBar.tsx +0 -53
  91. package/src/client/components/ProviderCard.tsx +0 -606
  92. package/src/client/components/SettingsTabs.tsx +0 -75
  93. package/src/client/components/ToggleSwitch.tsx +0 -71
  94. package/src/client/constants.ts +0 -230
  95. package/src/client/display.ts +0 -61
  96. package/src/client/dshClientAdapter.ts +0 -127
  97. package/src/client/gatewaySnippets.ts +0 -37
  98. package/src/client/index.tsx +0 -156
  99. package/src/client/locales.ts +0 -540
  100. package/src/client/microStyles.ts +0 -52
  101. package/src/client/parsers.ts +0 -398
  102. package/src/client/styles.ts +0 -325
  103. package/src/client/types.ts +0 -199
  104. package/src/codex-http.ts +0 -447
  105. package/src/codex-images.ts +0 -503
  106. package/src/codex-model-capabilities.ts +0 -320
  107. package/src/codex-search.ts +0 -245
  108. package/src/codex-usage.ts +0 -263
  109. package/src/compatibility.ts +0 -55
  110. package/src/dsh-host-adapter.ts +0 -173
  111. package/src/gateway-anthropic-messages.ts +0 -84
  112. package/src/gateway-auth.ts +0 -102
  113. package/src/gateway-backend.ts +0 -274
  114. package/src/gateway-body.ts +0 -49
  115. package/src/gateway-config.ts +0 -76
  116. package/src/gateway-http.ts +0 -104
  117. package/src/gateway-openai-chat.ts +0 -124
  118. package/src/gateway-openai-responses.ts +0 -53
  119. package/src/gateway-parse.ts +0 -224
  120. package/src/gateway-protocol.ts +0 -52
  121. package/src/gateway-routes.ts +0 -158
  122. package/src/gateway.ts +0 -258
  123. package/src/grok-errors.ts +0 -24
  124. package/src/grok-imagine.ts +0 -1627
  125. package/src/grok-import.ts +0 -151
  126. package/src/http-json.ts +0 -82
  127. package/src/ids.ts +0 -59
  128. package/src/imagine-routes.ts +0 -463
  129. package/src/index.ts +0 -735
  130. package/src/invariant.ts +0 -17
  131. package/src/kimi-errors.ts +0 -26
  132. package/src/media-store.ts +0 -927
  133. package/src/oauth-import-routes.ts +0 -324
  134. package/src/oauth-providers.ts +0 -152
  135. package/src/oauth-session.ts +0 -183
  136. package/src/oauth-sources.ts +0 -1104
  137. package/src/oauth.ts +0 -620
  138. package/src/provider.ts +0 -128
  139. package/src/proxy.ts +0 -11
  140. package/src/redact.ts +0 -72
  141. package/src/session.ts +0 -218
  142. package/src/store.ts +0 -217
  143. package/src/web-origin.ts +0 -296
  144. package/src/web-routes.ts +0 -38
package/CHANGELOG.md CHANGED
@@ -1,260 +1,285 @@
1
- # Changelog
2
-
3
- All notable changes to `dsh-coding-subscription-oauth` are documented here, following the release loop in `docs/00-project-rules.md`. Format: [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). Versioning follows [SemVer](https://semver.org/).
4
-
1
+ # Changelog
2
+
3
+ All notable changes to `dsh-coding-subscription-oauth` are documented here, following the release loop in `docs/00-project-rules.md`. Format: [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). Versioning follows [SemVer](https://semver.org/).
4
+
5
5
  ## Unreleased
6
6
 
7
+ ### Changed
8
+
9
+ - Mirror Hub’s first shared-runtime extract (`http-json`, `grok-errors`, `kimi-errors`, `gateway-protocol`) under `vendor/runtime-slice/` with build copies in `src/runtime/` and thin facades at the historical module paths. Add `pnpm run assert:runtime-slice` with `SYNC_HASHES.json` so isolated CI can verify the mirror without a Hub checkout; when Hub is present the script also compares live Hub files.
10
+
11
+ ### Documentation
12
+
13
+ - Document the temporary runtime-slice mirror and the planned drop after the next core npm release in `docs/02-architecture.md` / `docs/02-architecture.zh-CN.md`.
14
+
15
+ ## v0.6.5 - 2026-09-02
16
+
17
+ ### Fixed
18
+
19
+ - Restrict gateway key reveal/rotate to `accessMode === "loopback"`, matching the Settings UI which already hides those controls on ssh-tunnel and trusted-https-proxy.
20
+
21
+ ### Changed
22
+
23
+ - Stop shipping `src/` in the npm `files` allowlist. Runtime remains the generated `lib/` bundle.
24
+ - Add `.nvmrc`, `pnpm run assert:node`, `release:inspect`, and `release:publish`. Cloud Agent verification is `pnpm run check` with optional Docker.
25
+
26
+ ### Documentation
27
+
28
+ - Add `AGENTS.md` (cloud environment as the primary path; Docker optional; isolated `DSH_HOME`; operator-only npm publish).
29
+ - Align `CONTRIBUTING.md` and `docs/00-project-rules.md` so contributors are not Docker-only; Cursor Cloud / isolated `DSH_HOME` is the primary verification path.
30
+ - Localize community README upgrade banners (ja/ko/pt-BR/es/fr/de/ru) so they are not English-only under bilingual headings, keeping Cordis fix in `0.6.2+` and DSH `0.1.1-rc.2` facts accurate.
31
+
7
32
  ## v0.6.4 - 2026-08-29
8
33
 
9
34
  - Pin Subscription, its shared core dependency, and both production/development dispatcher dependencies to `undici@7.29.0` with `dsh-coding-oauth-core@0.1.1`, preventing a co-installed Undici major split while preserving the proxy-store ABI and Grok Imagine's explicit pinned dispatcher.
10
-
11
- ### Documentation
12
-
13
- - Correct the README upgrade callout so Cordis/DSH `0.1.1-rc.2` support is attributed to `0.6.2+`, and name `0.6.3` for default-off `codexImagesAnyModel`; add the any-model route-gate boundary sentence across README translations and an `INSTALL.md` `0.6.2` → `0.6.3` upgrade note.
14
-
15
- ## v0.6.3 - 2026-08-28
16
-
17
- ### Added
18
-
19
- - Add a default-off `codexImagesAnyModel` capability that lets non-Codex model routes call Codex image generate/edit tools without bypassing Codex authentication, capability gates, current-session attachment ownership, or edit authorization.
20
-
21
- ### Fixed
22
-
23
- - Clear `codexImagesAnyModel` in `normalizeCapabilitySettings` whenever resolved `codexImages` is false, so the any-model flag cannot remain on after images are disabled at the admit layer (UI cascade alone is insufficient).
24
-
25
- ### Documentation
26
-
27
- - Align the Hub co-install matrix in `INSTALL.md` to `dsh-hub-oauth-gateway@1.10.0` with Subscription `0.6.3` and `dsh-coding-oauth-core@0.1.0`.
28
- - Add a maintainer smoke checklist for new DeepSeek Harness releases in `CONTRIBUTING.md`, and point the open migration profile-verification todo at that checklist plus the green Docker `isolated-install` / `rc2-compatibility` sandbox evidence.
29
- - Sync capability inventory lines to eight switches (`codexImagesAnyModel` included) across README translations and architecture docs; document editing the hardcoded DSH pin in `Dockerfile` for smoke builds.
30
-
31
- ## v0.6.2 - 2026-08-25
32
-
33
- `0.6.1` was never published or packed; its unreleased changes are folded into this release.
34
-
35
- ### Fixed
36
-
37
- - Probe optional DSH host services without eagerly reading Cordis properties, so a missing injection degrades safely instead of failing the complete plugin tree during startup.
38
- - Require only `webServer` at plugin activation and register owner OAuth, capability, gateway, and import routes directly so optional services may arrive and leave independently.
39
- - Inject rc.2-required pi-ai credential storage/auth context through the existing owner-locked OAuth files, fail closed for unknown provider writes, and retain image attachments under the provider request policy.
40
-
41
- ### Changed
42
-
43
- - Verify the exact DeepSeek Harness `0.1.1-rc.2` BOM and resolve `dsh-coding-oauth-core@0.1.0` from npm rather than a sibling workspace path.
44
-
45
- ## v0.6.0 - 2026-08-22
46
-
47
- ### Added
48
-
49
- - Add exact DSH BOM/client platform gates, host/client compatibility adapters, trusted remote owner policy, and shared `dsh-coding-oauth-core` owner election for standalone/Hub co-installation.
50
-
51
- ### Changed
52
-
53
- - Redesign Provider management around summaries, local model drafts with batch apply, in-card CLI Pull preview, real Gateway models, explicit confirmations, retryable loading states, and compact Hub-owned co-install UI.
54
- - Keep OAuth/Web ownership independent from optional LLM services and wait for required Web routes before reporting the standalone runtime active.
55
-
56
- ### Fixed
57
-
58
- - Restore focus after CLI previews and logout confirmation, remove ARIA relationships to unmounted panels, and verify release client imports against the official DSH `PLATFORM_MODULES` contract.
59
-
60
- ## v0.5.8 - 2026-08-22
61
-
62
- ### Fixed
63
-
64
- - Make the tag Release workflow idempotent for GitHub Releases (create or edit) and run npm provenance publish in a separate job so a pre-existing release no longer skips publishing.
65
- - Skip npm publish when the exact version is already on the registry, then verify `npm view` matches the tag.
66
- - Finish Settings theme polish: Gateway enable uses ToggleSwitch, OpenAI/Anthropic copy actions share CopyButton, snippet tabs get keyboard/ARIA parity, About gains a real heading and docs link, ProgressBar uses `button-info-fill`, and warn banners use warn-colored styling.
67
-
68
- ### Changed
69
-
70
- - Relax Docker preview seed/`run-preview.sh` so they accept the installed `@deepseek-ai/dsh` version instead of a hard-coded `0.1.0-rc.6` pin.
71
- - Extend `release.mjs` version checks to `INSTALL.md` and `README.zh-CN.md`.
72
- - Document npm Trusted Publishing binding steps in `CONTRIBUTING.md`.
73
-
74
- ## v0.5.7 - 2026-08-22
75
-
76
- ### Fixed
77
-
78
- - Make Settings primary CTAs, active step markers, and toggle thumbs follow DSH `button-primary-fill` + `label-primary-foreground` so dark theme (where brand-primary inverts to near-white) no longer renders white-on-white buttons (#13).
79
- - Use readable `label-tertiary` for neutral badges/status dots instead of near-invisible `label-dimmed`, and correct the warn token spelling to `state-warn-primary`.
80
-
81
- ## v0.5.6 - 2026-08-19
82
-
83
- ### Fixed
84
-
85
- - Relax Docker preview seed checks so `web-preview` images build against the current plugin version and installed DSH peer packages instead of hard-coded semver pins.
86
- - Improve the settings screenshot capture script so isolated DSH preview overlays (Continue, internal testing notice, modal masks) are dismissed before opening **Settings → Coding OAuth**.
87
-
88
- ### Documentation
89
-
90
- - Refresh Settings product screenshots under `media/` for the v0.5.5 UI redesign: segmented tabs with live hints, semantic status badges, sign-in step flow, toggle switches on Capabilities, and gateway quick-setup snippets on Gateway.
91
- - Record npm publication confirmation for `dsh-coding-subscription-oauth@0.5.5` and keep README install commands on the latest release.
92
-
93
- ## v0.5.5 - 2026-08-19
94
-
95
- ### Changed
96
-
97
- - Redesign the Coding OAuth Settings client: semantic status badges, segmented tabs with live hints, toggle switches for capabilities, sign-in step flow with copy actions, model search/filter controls, Codex usage progress bars, gateway quick-setup snippets (cURL / Python / IDE), skeleton pulse animations, and auto-dismiss success notices.
98
-
99
- ## v0.5.4 - 2026-08-19
100
-
101
- ### Changed
102
-
103
- - Improve remote/headless Settings UX: prefer device-code CTAs on non-loopback hosts, collapse noisy per-card CLI-missing hints into one neutral tip, shorten Capabilities copy, move Antigravity onto Accounts, and enrich About with remote-login help plus plugin version.
104
- - Load Gateway and Imagine status only when their tabs open; soft-fetch Capabilities when Codex is signed in so quota can still appear on Accounts.
105
- - Split the Settings client into tab/components modules with display/parser Vitest coverage, and make `promote-release` resilient to overlay `EXDEV` renames.
106
-
107
- ### Documentation
108
-
109
- - Refresh Settings product screenshots under `media/` for the remote-host Accounts tip, device-code-first CTAs, quieter CLI-missing banner, Gateway loopback hint, and shortened Capabilities copy; keep the three-column README gallery (Accounts / Gateway / Capabilities).
110
- - Record previously unreleased screenshot gallery work (Accounts / Gateway / Capabilities under `media/`, three-column README layout) in this release.
111
-
112
- ## v0.5.3 - 2026-08-19
113
-
114
- ### Changed
115
-
116
- - Raise the default OAuth route retry policy to 5 stacked exponential delays (5 s → 10 s → 20 s → 40 s → 80 s, ~155 s total, 10% jitter).
117
- - Remap xAI “at capacity / high demand / priority processing / overloaded” finish messages to `RATE_LIMIT` so harness retries run instead of failing as `PI_AI_ERROR` when upstream `error.code` is null.
118
-
119
- ## v0.5.2 - 2026-08-18
120
-
121
- ### Documentation
122
-
123
- - Make the published npm package the first installation path for normal users; keep GitHub and local-directory installs explicitly as development or fallback options.
124
-
125
- ## v0.5.1 - 2026-08-18
126
-
127
- ### Documentation
128
-
129
- - Sync the English and translated READMEs with the v0.5.0 Settings tabs, collapsed account cards, local gateway copy/reveal/rotation controls, persisted listen-port controls, and npm installation path.
130
-
131
- ## v0.5.0 - 2026-08-17
132
-
133
- ### Added
134
-
135
- - Add an opt-in local API gateway (`gateway.enabled`, default off) that binds loopback-only and serves `/healthz`, `/v1/models`, streaming `POST /v1/chat/completions`, `POST /v1/responses`, and `POST /v1/messages` from signed-in subscription sessions.
136
- - Let Settings copy the OpenAI/Anthropic base URLs and the current Bearer key. Loopback `POST /gateway/reveal` returns the current key without rotating it; rotate stays a confirmed destructive action.
137
- - Let Settings change the gateway listen port with Apply or Random (18100–18999). The chosen port is stored in the owner-only gateway document and the listener rebinds when it is already running.
138
-
139
- ### Changed
140
-
141
- - Rebuild Settings as four top tabs (Accounts, Gateway, Capabilities, About). Signed-in account cards stay collapsed until expanded, CLI pull preview is full-width, and Imagine status sits on Capabilities.
142
-
143
- ## v0.4.1 - 2026-08-17
144
-
145
- ### Added
146
-
147
- - Add accessible live numeric controls for `searchResults`, `imageCount`, and video artifact retention (shown as 1–168 hours), using the same compare-and-swap conflict handling as capability switches. Lowering retention rewrites and cleans existing expiries; raising it affects only new artifacts.
148
- - Add a fast `check:next` Docker development gate (`lint` + `typecheck` + tests) before the full release build gate.
149
-
150
- ### Changed
151
-
152
- - Resolve the Codex search model at call time so sign-in, sign-out, and live catalog changes do not leave a stale model captured by an existing provider.
153
- - Clarify browser, device-code, and manual redirect/code sign-in guidance; use the profile-aware Antigravity command `dsh plugin --profile web exec dsh-agy login --headless`.
154
- - Raise the `undici` floor to `^7.24.8` so scoped `socks5://` proxies are supported.
155
- - Document the first public install path as `dsh plugin --profile web add dsh-coding-subscription-oauth@0.4.1`, matching other DSH plugins.
156
-
157
- ### Fixed
158
-
159
- - Declare image input on the Grok 4.5 and Grok 4.6 baseline descriptors so both fallback and live-derived catalog entries accept image attachments instead of failing locally as unsupported.
160
- - Resolve subscription requests from the refreshed access token persisted by each OAuth session. This prevents Kimi's header-only `Authorization: Bearer` auth result from being misclassified as “not signed in” merely because it has no `auth.apiKey` field.
161
- - Treat Kimi Code's HTTP 401 `authentication_error` that says a model `supports only 256K context` as `CONTEXT_WINDOW_EXCEEDED`. The previous AUTH classification invalidated a still-valid token and retried a request that cannot succeed.
162
- - Strip `user:pass@` from the CLI proxy line, and when a scoped proxy is installed append a `CODING_OAUTH_PROXY` reachability hint to Grok discovery, token, and live-catalog transport errors.
163
- - Preserve composition capability defaults before Settings is injected and after a Settings service is replaced or disposed; contain asynchronous settings-listener failures; keep empty PATCH writes revision-checked but side-effect free.
164
- - Make generated media download filenames safe for `Content-Disposition` while preserving opaque DSH attachment ids.
165
- - Dispose in-flight Grok Imagine API/download work before awaiting media cleanup, isolate caller-owned video-poll cancellation, and remove an artifact if cancellation wins during persistence.
166
- - Finish Settings disposal even when an injected watch disposer throws, while reporting the contained failure.
167
- - Reject owner-only or group/world-writable npm package entries and require the packed CLI to remain executable.
168
- - Close preview-proxy WebSocket halves when either side ends so isolated proxy tests and shutdown cannot hang on leftover upgrade pipes.
169
-
170
- ### Security
171
-
172
- - Require Grok discovery to declare the exact configured issuer identity, pin authorization/token endpoints to its approved origin, refuse redirects, bound discovery/token responses and pasted authorization codes, and redact every repeated opaque credential-shaped diagnostic.
173
- - Reject unknown, secret-shaped, mistyped, fractional, and out-of-range capability writes instead of silently coercing or clamping caller-authored values.
174
- - Add a 60-second Codex request ceiling that covers response streaming, plus cancellation-aware stream cleanup; strengthen Imagine request-id, prompt, base64, redirect, MIME, size, and cancellation boundaries.
175
-
176
- ## v0.4.0 - 2026-08-16
177
-
178
- ### Added
179
-
180
- - Add read-only Settings discovery of allowlisted official Grok / Codex / Kimi / Claude CLI OAuth files, plus an explicit one-way manual Pull: discover → preview → conflict/fingerprint check → overwrite confirmation. Official CLI files are never written.
181
- - Add default-off live optional capabilities: Codex search, usage/quota, image generation/edit, Fast, and Grok Imagine image/video. Limits: search results 1–20, image count 1–4, artifact TTL 1 hour–7 days. A secret-free `capabilities` composition base is optional; user settings override it.
182
- - Advertise `codex-oauth-fast` only after a fresh live catalog lists at least one `priority`-eligible model. Requests send `service_tier: priority` and a routing hint. The UI says **Fast requested** and does not guarantee latency or upstream honor.
183
- - Add opt-in Codex private `chatgpt.com/backend-api` endpoints. Image generation uses the fixed model `gpt-image-2`. Image edit requires current-session top-level attachment ownership.
184
- - Add Grok Imagine against official `https://api.x.ai` with `grok-imagine-image-2.0` and `grok-imagine-video-1.5`, using a separate DSH credential reference `XAI_API_KEY` (never Grok OAuth, never a process-env fallback).
185
- - Serve generated outputs on same-origin loopback routes under `/plugins/dsh-grok-build/imagine/*`. Remote downloads apply MIME / size / time / redirect / DNS controls from frozen hosts `imgen.x.ai`, `videogen.x.ai`, and `vidgen.x.ai`. The private artifact store hard-caps both one object and aggregate unique object bytes at 256 MiB, with retention capped at seven days.
186
-
187
- ### Changed
188
-
189
- - Add a tracked multi-stage Docker sandbox for networkless check/verify, generated artifact export, local candidate packaging, and a script-disabled isolated consumer install.
190
- - Settings CLI synchronization is a manual Pull, not auto-import. Discovery stays automatic and read-only; writing the dsh store still requires preview and an explicit confirm.
191
- - Capability switches apply live; turning one off withdraws the matching search provider, tools, or Fast route without a restart.
192
-
193
- ### Fixed
194
-
195
- - Bound in-memory Pull preview tickets to one-use, a five-minute TTL, and a process maximum of 32 so credential-bearing preview material cannot accumulate.
196
-
197
- ### Security
198
-
199
- - Harden official CLI reads: reject symlinks, non-regular files, non-owner files, group/other access, and oversized documents; open with `O_NOFOLLOW`; never write the official CLI path.
200
- - Keep Imagine media on frozen xAI output hosts with DNS pinning and blocked private/loopback addresses; never return a signed upstream URL to the client.
201
-
202
- ## v0.3.0
203
-
204
- ### Added
205
-
206
- - Add a provider retry policy for the four OAuth routes: transient failures (`RATE_LIMIT`/`SERVER`/`TIMEOUT`/`TRANSPORT`/`EMPTY_RESPONSE`) **and `AUTH`** now retry with exponential backoff (default 2 retries, 500 ms → 10 s, 10% jitter) instead of killing the turn.
207
- - Add AUTH-failure credential invalidation: when an upstream rejects a locally-valid token with 401/403, the stored credential's expiry is backdated so the retried step refreshes before reuse — recovering the stale-token 401 race without user-visible failure.
208
- - Add an optional `retryPolicy` plugin config (harness `RetryPolicySchema`) to override the built-in policy per deployment.
209
-
210
- ### Changed
211
-
212
- - Migrate the package toolchain from npm/tsdown to pnpm 11, TypeScript 6, Biome, and an esbuild multi-entry server/client build with declaration emit, promote/verify, and CI. Published package identity, dual CLI, Cordis/HTTP/credential identifiers, and `pi-ai` 0.84.2 stay unchanged.
213
- - Require Node.js 22.19+ (or 24+) for the TypeScript 6/esbuild release pipeline and runtime bundle.
214
- - Upgrade `@earendil-works/pi-ai` to `^0.84.2`: OAuth access tokens now refresh proactively five minutes before the stored expiry (previously only at the exact expiry instant, which raced server-side revocation on the Kimi/Codex routes), with a 15 s refresh timeout.
215
- - Request OAuth access tokens with an explicit minimum remaining validity (60 s); a refresh that returns an even-shorter-lived token hard-fails instead of being handed to a request.
216
- - Translate a rejected token refresh (revoked refresh token / dead grant) into `MISSING_CREDENTIAL` with a sign-in prompt rather than surfacing a bare upstream 401, and never retry it.
217
- - Quota exhaustion stays outside the retryable set so a billing-limit response fails fast with its real message instead of the generic "API key is invalid".
218
- - Expand README (all languages) with a searchable “problems this plugin solves” table covering SuperGrok vs `api.x.ai`, AUTH/`API key is invalid`, `INVALID_REPLAY_STATE`, grok-4.6 `xhigh`, Kimi Bearer vs `x-api-key`, remote device login and China-direct Kimi.
219
- - Rename the published project to **`dsh-coding-subscription-oauth`**. The old `dsh-grok-build` name only covered the first provider. Cordis id, HTTP `/plugins/dsh-grok-build/*` paths, credential files and the `dsh-grok-build` CLI alias stay compatible.
220
-
221
- ### Fixed
222
-
223
- - Fix the stale-token 401 turn failure (`API key is invalid` banner) observed on the Kimi Code OAuth route when an access token expired mid-session: the turn now refreshes and retries transparently.
224
- - Expose Grok 4.6 `xhigh` reasoning effort. Live `/models-v2` already returns `reasoning_efforts` including xhigh, but the plugin previously kept only model ids and materialized grok-4.6 from the grok-4.5 template. pi-ai hides xhigh unless that key is an explicit non-null mapping. The catalog now applies live effort lists; the baseline ships grok-4.6 with xhigh while grok-4.5 stays low/medium/high.
225
- - Invalidate credentials on an `AUTH` finish even when that same finish also carries replay state, then rewrite the replay provider without skipping the refresh path.
226
- - Bound OAuth JSON request bodies to 64 KiB (400 for malformed JSON, 413 for oversized bodies) and stream the live model catalog through a real 4 MiB ceiling.
227
- - Contain startup cache/catalog failures and redact token-like material from refresh diagnostics instead of retaining it in user-visible errors or error causes.
228
-
229
- ## v0.2.0
230
-
231
- ### Added
232
-
233
- - Add unified `/plugins/dsh-grok-build/oauth/*` API across Grok, Codex, Kimi and Claude.
234
- - Add `codex-oauth`, `kimi-code-oauth` and `claude-code-oauth` routes alongside the preserved Grok Build and native API-key routes.
235
- - Add the Coding OAuth settings page with per-provider sign-in, model selection and status cards.
236
- - Add pinned `dsh-agy@0.1.2` integration for Google Antigravity and a safe patch that hides unauthenticated models and labels the provider `(OAuth)`.
237
- - Add authentication-gated model discovery: unauthenticated OAuth routes expose no models, while authenticated providers are explicitly labelled `(OAuth)`.
238
- - Add `verify:deployed` and `smoke:deployed` scripts for live-deployment verification.
239
- - Add plugin-level scoped proxy configuration (`config.proxy`) and Kimi direct-connect default.
240
- - Add high-contrast settings actions and localized community README translations.
241
-
242
- ### Fixed
243
-
244
- - Fix Kimi OAuth wire authentication so the final request uses `Authorization: Bearer` without an extra Anthropic `x-api-key`.
245
- - Fix OAuth catalog refresh so listeners cannot make a successful login/logout appear failed, and cleanup failures cannot leave stale models visible.
246
- - Fix OAuth route replay state so Codex/Kimi assistant messages keep the Harness route provider id and remain replayable across multi-turn conversations.
247
- - Heal older poisoned OAuth replay metadata at request time and strip replay state when switching between sibling OAuth routes.
248
- - Make deployment smoke require explicit `DSH_RESTORE_PROVIDER`/`DSH_RESTORE_MODEL`, then restore that default after testing.
249
-
250
- ### Security
251
-
252
- - Store all OAuth credential files as owner-only `0600` with atomic writes and cross-process locks.
253
- - Keep OAuth tokens out of HTTP status responses, logs and the settings UI.
254
- - Document disabling the unauthenticated `dsh-agy-web` dashboard on trusted-host deployments.
255
-
256
- ## v0.1.0
257
-
258
- - Initial release: Grok Build device OAuth, `import`, dynamic `/v1/models-v2` catalog and Responses streaming inference.
259
- - `dsh-grok-build` CLI with login/import/status/logout.
260
- - Web settings section for Grok Build account.
35
+
36
+ ### Documentation
37
+
38
+ - Correct the README upgrade callout so Cordis/DSH `0.1.1-rc.2` support is attributed to `0.6.2+`, and name `0.6.3` for default-off `codexImagesAnyModel`; add the any-model route-gate boundary sentence across README translations and an `INSTALL.md` `0.6.2` → `0.6.3` upgrade note.
39
+
40
+ ## v0.6.3 - 2026-08-28
41
+
42
+ ### Added
43
+
44
+ - Add a default-off `codexImagesAnyModel` capability that lets non-Codex model routes call Codex image generate/edit tools without bypassing Codex authentication, capability gates, current-session attachment ownership, or edit authorization.
45
+
46
+ ### Fixed
47
+
48
+ - Clear `codexImagesAnyModel` in `normalizeCapabilitySettings` whenever resolved `codexImages` is false, so the any-model flag cannot remain on after images are disabled at the admit layer (UI cascade alone is insufficient).
49
+
50
+ ### Documentation
51
+
52
+ - Align the Hub co-install matrix in `INSTALL.md` to `dsh-hub-oauth-gateway@1.10.0` with Subscription `0.6.3` and `dsh-coding-oauth-core@0.1.0`.
53
+ - Add a maintainer smoke checklist for new DeepSeek Harness releases in `CONTRIBUTING.md`, and point the open migration profile-verification todo at that checklist plus the green Docker `isolated-install` / `rc2-compatibility` sandbox evidence.
54
+ - Sync capability inventory lines to eight switches (`codexImagesAnyModel` included) across README translations and architecture docs; document editing the hardcoded DSH pin in `Dockerfile` for smoke builds.
55
+
56
+ ## v0.6.2 - 2026-08-25
57
+
58
+ `0.6.1` was never published or packed; its unreleased changes are folded into this release.
59
+
60
+ ### Fixed
61
+
62
+ - Probe optional DSH host services without eagerly reading Cordis properties, so a missing injection degrades safely instead of failing the complete plugin tree during startup.
63
+ - Require only `webServer` at plugin activation and register owner OAuth, capability, gateway, and import routes directly so optional services may arrive and leave independently.
64
+ - Inject rc.2-required pi-ai credential storage/auth context through the existing owner-locked OAuth files, fail closed for unknown provider writes, and retain image attachments under the provider request policy.
65
+
66
+ ### Changed
67
+
68
+ - Verify the exact DeepSeek Harness `0.1.1-rc.2` BOM and resolve `dsh-coding-oauth-core@0.1.0` from npm rather than a sibling workspace path.
69
+
70
+ ## v0.6.0 - 2026-08-22
71
+
72
+ ### Added
73
+
74
+ - Add exact DSH BOM/client platform gates, host/client compatibility adapters, trusted remote owner policy, and shared `dsh-coding-oauth-core` owner election for standalone/Hub co-installation.
75
+
76
+ ### Changed
77
+
78
+ - Redesign Provider management around summaries, local model drafts with batch apply, in-card CLI Pull preview, real Gateway models, explicit confirmations, retryable loading states, and compact Hub-owned co-install UI.
79
+ - Keep OAuth/Web ownership independent from optional LLM services and wait for required Web routes before reporting the standalone runtime active.
80
+
81
+ ### Fixed
82
+
83
+ - Restore focus after CLI previews and logout confirmation, remove ARIA relationships to unmounted panels, and verify release client imports against the official DSH `PLATFORM_MODULES` contract.
84
+
85
+ ## v0.5.8 - 2026-08-22
86
+
87
+ ### Fixed
88
+
89
+ - Make the tag Release workflow idempotent for GitHub Releases (create or edit) and run npm provenance publish in a separate job so a pre-existing release no longer skips publishing.
90
+ - Skip npm publish when the exact version is already on the registry, then verify `npm view` matches the tag.
91
+ - Finish Settings theme polish: Gateway enable uses ToggleSwitch, OpenAI/Anthropic copy actions share CopyButton, snippet tabs get keyboard/ARIA parity, About gains a real heading and docs link, ProgressBar uses `button-info-fill`, and warn banners use warn-colored styling.
92
+
93
+ ### Changed
94
+
95
+ - Relax Docker preview seed/`run-preview.sh` so they accept the installed `@deepseek-ai/dsh` version instead of a hard-coded `0.1.0-rc.6` pin.
96
+ - Extend `release.mjs` version checks to `INSTALL.md` and `README.zh-CN.md`.
97
+ - Document npm Trusted Publishing binding steps in `CONTRIBUTING.md`.
98
+
99
+ ## v0.5.7 - 2026-08-22
100
+
101
+ ### Fixed
102
+
103
+ - Make Settings primary CTAs, active step markers, and toggle thumbs follow DSH `button-primary-fill` + `label-primary-foreground` so dark theme (where brand-primary inverts to near-white) no longer renders white-on-white buttons (#13).
104
+ - Use readable `label-tertiary` for neutral badges/status dots instead of near-invisible `label-dimmed`, and correct the warn token spelling to `state-warn-primary`.
105
+
106
+ ## v0.5.6 - 2026-08-19
107
+
108
+ ### Fixed
109
+
110
+ - Relax Docker preview seed checks so `web-preview` images build against the current plugin version and installed DSH peer packages instead of hard-coded semver pins.
111
+ - Improve the settings screenshot capture script so isolated DSH preview overlays (Continue, internal testing notice, modal masks) are dismissed before opening **Settings → Coding OAuth**.
112
+
113
+ ### Documentation
114
+
115
+ - Refresh Settings product screenshots under `media/` for the v0.5.5 UI redesign: segmented tabs with live hints, semantic status badges, sign-in step flow, toggle switches on Capabilities, and gateway quick-setup snippets on Gateway.
116
+ - Record npm publication confirmation for `dsh-coding-subscription-oauth@0.5.5` and keep README install commands on the latest release.
117
+
118
+ ## v0.5.5 - 2026-08-19
119
+
120
+ ### Changed
121
+
122
+ - Redesign the Coding OAuth Settings client: semantic status badges, segmented tabs with live hints, toggle switches for capabilities, sign-in step flow with copy actions, model search/filter controls, Codex usage progress bars, gateway quick-setup snippets (cURL / Python / IDE), skeleton pulse animations, and auto-dismiss success notices.
123
+
124
+ ## v0.5.4 - 2026-08-19
125
+
126
+ ### Changed
127
+
128
+ - Improve remote/headless Settings UX: prefer device-code CTAs on non-loopback hosts, collapse noisy per-card CLI-missing hints into one neutral tip, shorten Capabilities copy, move Antigravity onto Accounts, and enrich About with remote-login help plus plugin version.
129
+ - Load Gateway and Imagine status only when their tabs open; soft-fetch Capabilities when Codex is signed in so quota can still appear on Accounts.
130
+ - Split the Settings client into tab/components modules with display/parser Vitest coverage, and make `promote-release` resilient to overlay `EXDEV` renames.
131
+
132
+ ### Documentation
133
+
134
+ - Refresh Settings product screenshots under `media/` for the remote-host Accounts tip, device-code-first CTAs, quieter CLI-missing banner, Gateway loopback hint, and shortened Capabilities copy; keep the three-column README gallery (Accounts / Gateway / Capabilities).
135
+ - Record previously unreleased screenshot gallery work (Accounts / Gateway / Capabilities under `media/`, three-column README layout) in this release.
136
+
137
+ ## v0.5.3 - 2026-08-19
138
+
139
+ ### Changed
140
+
141
+ - Raise the default OAuth route retry policy to 5 stacked exponential delays (5 s → 10 s → 20 s → 40 s → 80 s, ~155 s total, 10% jitter).
142
+ - Remap xAI “at capacity / high demand / priority processing / overloaded” finish messages to `RATE_LIMIT` so harness retries run instead of failing as `PI_AI_ERROR` when upstream `error.code` is null.
143
+
144
+ ## v0.5.2 - 2026-08-18
145
+
146
+ ### Documentation
147
+
148
+ - Make the published npm package the first installation path for normal users; keep GitHub and local-directory installs explicitly as development or fallback options.
149
+
150
+ ## v0.5.1 - 2026-08-18
151
+
152
+ ### Documentation
153
+
154
+ - Sync the English and translated READMEs with the v0.5.0 Settings tabs, collapsed account cards, local gateway copy/reveal/rotation controls, persisted listen-port controls, and npm installation path.
155
+
156
+ ## v0.5.0 - 2026-08-17
157
+
158
+ ### Added
159
+
160
+ - Add an opt-in local API gateway (`gateway.enabled`, default off) that binds loopback-only and serves `/healthz`, `/v1/models`, streaming `POST /v1/chat/completions`, `POST /v1/responses`, and `POST /v1/messages` from signed-in subscription sessions.
161
+ - Let Settings copy the OpenAI/Anthropic base URLs and the current Bearer key. Loopback `POST /gateway/reveal` returns the current key without rotating it; rotate stays a confirmed destructive action.
162
+ - Let Settings change the gateway listen port with Apply or Random (18100–18999). The chosen port is stored in the owner-only gateway document and the listener rebinds when it is already running.
163
+
164
+ ### Changed
165
+
166
+ - Rebuild Settings as four top tabs (Accounts, Gateway, Capabilities, About). Signed-in account cards stay collapsed until expanded, CLI pull preview is full-width, and Imagine status sits on Capabilities.
167
+
168
+ ## v0.4.1 - 2026-08-17
169
+
170
+ ### Added
171
+
172
+ - Add accessible live numeric controls for `searchResults`, `imageCount`, and video artifact retention (shown as 1–168 hours), using the same compare-and-swap conflict handling as capability switches. Lowering retention rewrites and cleans existing expiries; raising it affects only new artifacts.
173
+ - Add a fast `check:next` Docker development gate (`lint` + `typecheck` + tests) before the full release build gate.
174
+
175
+ ### Changed
176
+
177
+ - Resolve the Codex search model at call time so sign-in, sign-out, and live catalog changes do not leave a stale model captured by an existing provider.
178
+ - Clarify browser, device-code, and manual redirect/code sign-in guidance; use the profile-aware Antigravity command `dsh plugin --profile web exec dsh-agy login --headless`.
179
+ - Raise the `undici` floor to `^7.24.8` so scoped `socks5://` proxies are supported.
180
+ - Document the first public install path as `dsh plugin --profile web add dsh-coding-subscription-oauth@0.4.1`, matching other DSH plugins.
181
+
182
+ ### Fixed
183
+
184
+ - Declare image input on the Grok 4.5 and Grok 4.6 baseline descriptors so both fallback and live-derived catalog entries accept image attachments instead of failing locally as unsupported.
185
+ - Resolve subscription requests from the refreshed access token persisted by each OAuth session. This prevents Kimi's header-only `Authorization: Bearer` auth result from being misclassified as “not signed in” merely because it has no `auth.apiKey` field.
186
+ - Treat Kimi Code's HTTP 401 `authentication_error` that says a model `supports only 256K context` as `CONTEXT_WINDOW_EXCEEDED`. The previous AUTH classification invalidated a still-valid token and retried a request that cannot succeed.
187
+ - Strip `user:pass@` from the CLI proxy line, and when a scoped proxy is installed append a `CODING_OAUTH_PROXY` reachability hint to Grok discovery, token, and live-catalog transport errors.
188
+ - Preserve composition capability defaults before Settings is injected and after a Settings service is replaced or disposed; contain asynchronous settings-listener failures; keep empty PATCH writes revision-checked but side-effect free.
189
+ - Make generated media download filenames safe for `Content-Disposition` while preserving opaque DSH attachment ids.
190
+ - Dispose in-flight Grok Imagine API/download work before awaiting media cleanup, isolate caller-owned video-poll cancellation, and remove an artifact if cancellation wins during persistence.
191
+ - Finish Settings disposal even when an injected watch disposer throws, while reporting the contained failure.
192
+ - Reject owner-only or group/world-writable npm package entries and require the packed CLI to remain executable.
193
+ - Close preview-proxy WebSocket halves when either side ends so isolated proxy tests and shutdown cannot hang on leftover upgrade pipes.
194
+
195
+ ### Security
196
+
197
+ - Require Grok discovery to declare the exact configured issuer identity, pin authorization/token endpoints to its approved origin, refuse redirects, bound discovery/token responses and pasted authorization codes, and redact every repeated opaque credential-shaped diagnostic.
198
+ - Reject unknown, secret-shaped, mistyped, fractional, and out-of-range capability writes instead of silently coercing or clamping caller-authored values.
199
+ - Add a 60-second Codex request ceiling that covers response streaming, plus cancellation-aware stream cleanup; strengthen Imagine request-id, prompt, base64, redirect, MIME, size, and cancellation boundaries.
200
+
201
+ ## v0.4.0 - 2026-08-16
202
+
203
+ ### Added
204
+
205
+ - Add read-only Settings discovery of allowlisted official Grok / Codex / Kimi / Claude CLI OAuth files, plus an explicit one-way manual Pull: discover → preview → conflict/fingerprint check → overwrite confirmation. Official CLI files are never written.
206
+ - Add default-off live optional capabilities: Codex search, usage/quota, image generation/edit, Fast, and Grok Imagine image/video. Limits: search results 1–20, image count 1–4, artifact TTL 1 hour–7 days. A secret-free `capabilities` composition base is optional; user settings override it.
207
+ - Advertise `codex-oauth-fast` only after a fresh live catalog lists at least one `priority`-eligible model. Requests send `service_tier: priority` and a routing hint. The UI says **Fast requested** and does not guarantee latency or upstream honor.
208
+ - Add opt-in Codex private `chatgpt.com/backend-api` endpoints. Image generation uses the fixed model `gpt-image-2`. Image edit requires current-session top-level attachment ownership.
209
+ - Add Grok Imagine against official `https://api.x.ai` with `grok-imagine-image-2.0` and `grok-imagine-video-1.5`, using a separate DSH credential reference `XAI_API_KEY` (never Grok OAuth, never a process-env fallback).
210
+ - Serve generated outputs on same-origin loopback routes under `/plugins/dsh-grok-build/imagine/*`. Remote downloads apply MIME / size / time / redirect / DNS controls from frozen hosts `imgen.x.ai`, `videogen.x.ai`, and `vidgen.x.ai`. The private artifact store hard-caps both one object and aggregate unique object bytes at 256 MiB, with retention capped at seven days.
211
+
212
+ ### Changed
213
+
214
+ - Add a tracked multi-stage Docker sandbox for networkless check/verify, generated artifact export, local candidate packaging, and a script-disabled isolated consumer install.
215
+ - Settings CLI synchronization is a manual Pull, not auto-import. Discovery stays automatic and read-only; writing the dsh store still requires preview and an explicit confirm.
216
+ - Capability switches apply live; turning one off withdraws the matching search provider, tools, or Fast route without a restart.
217
+
218
+ ### Fixed
219
+
220
+ - Bound in-memory Pull preview tickets to one-use, a five-minute TTL, and a process maximum of 32 so credential-bearing preview material cannot accumulate.
221
+
222
+ ### Security
223
+
224
+ - Harden official CLI reads: reject symlinks, non-regular files, non-owner files, group/other access, and oversized documents; open with `O_NOFOLLOW`; never write the official CLI path.
225
+ - Keep Imagine media on frozen xAI output hosts with DNS pinning and blocked private/loopback addresses; never return a signed upstream URL to the client.
226
+
227
+ ## v0.3.0
228
+
229
+ ### Added
230
+
231
+ - Add a provider retry policy for the four OAuth routes: transient failures (`RATE_LIMIT`/`SERVER`/`TIMEOUT`/`TRANSPORT`/`EMPTY_RESPONSE`) **and `AUTH`** now retry with exponential backoff (default 2 retries, 500 ms → 10 s, 10% jitter) instead of killing the turn.
232
+ - Add AUTH-failure credential invalidation: when an upstream rejects a locally-valid token with 401/403, the stored credential's expiry is backdated so the retried step refreshes before reuse — recovering the stale-token 401 race without user-visible failure.
233
+ - Add an optional `retryPolicy` plugin config (harness `RetryPolicySchema`) to override the built-in policy per deployment.
234
+
235
+ ### Changed
236
+
237
+ - Migrate the package toolchain from npm/tsdown to pnpm 11, TypeScript 6, Biome, and an esbuild multi-entry server/client build with declaration emit, promote/verify, and CI. Published package identity, dual CLI, Cordis/HTTP/credential identifiers, and `pi-ai` 0.84.2 stay unchanged.
238
+ - Require Node.js 22.19+ (or 24+) for the TypeScript 6/esbuild release pipeline and runtime bundle.
239
+ - Upgrade `@earendil-works/pi-ai` to `^0.84.2`: OAuth access tokens now refresh proactively five minutes before the stored expiry (previously only at the exact expiry instant, which raced server-side revocation on the Kimi/Codex routes), with a 15 s refresh timeout.
240
+ - Request OAuth access tokens with an explicit minimum remaining validity (60 s); a refresh that returns an even-shorter-lived token hard-fails instead of being handed to a request.
241
+ - Translate a rejected token refresh (revoked refresh token / dead grant) into `MISSING_CREDENTIAL` with a sign-in prompt rather than surfacing a bare upstream 401, and never retry it.
242
+ - Quota exhaustion stays outside the retryable set so a billing-limit response fails fast with its real message instead of the generic "API key is invalid".
243
+ - Expand README (all languages) with a searchable “problems this plugin solves” table covering SuperGrok vs `api.x.ai`, AUTH/`API key is invalid`, `INVALID_REPLAY_STATE`, grok-4.6 `xhigh`, Kimi Bearer vs `x-api-key`, remote device login and China-direct Kimi.
244
+ - Rename the published project to **`dsh-coding-subscription-oauth`**. The old `dsh-grok-build` name only covered the first provider. Cordis id, HTTP `/plugins/dsh-grok-build/*` paths, credential files and the `dsh-grok-build` CLI alias stay compatible.
245
+
246
+ ### Fixed
247
+
248
+ - Fix the stale-token 401 turn failure (`API key is invalid` banner) observed on the Kimi Code OAuth route when an access token expired mid-session: the turn now refreshes and retries transparently.
249
+ - Expose Grok 4.6 `xhigh` reasoning effort. Live `/models-v2` already returns `reasoning_efforts` including xhigh, but the plugin previously kept only model ids and materialized grok-4.6 from the grok-4.5 template. pi-ai hides xhigh unless that key is an explicit non-null mapping. The catalog now applies live effort lists; the baseline ships grok-4.6 with xhigh while grok-4.5 stays low/medium/high.
250
+ - Invalidate credentials on an `AUTH` finish even when that same finish also carries replay state, then rewrite the replay provider without skipping the refresh path.
251
+ - Bound OAuth JSON request bodies to 64 KiB (400 for malformed JSON, 413 for oversized bodies) and stream the live model catalog through a real 4 MiB ceiling.
252
+ - Contain startup cache/catalog failures and redact token-like material from refresh diagnostics instead of retaining it in user-visible errors or error causes.
253
+
254
+ ## v0.2.0
255
+
256
+ ### Added
257
+
258
+ - Add unified `/plugins/dsh-grok-build/oauth/*` API across Grok, Codex, Kimi and Claude.
259
+ - Add `codex-oauth`, `kimi-code-oauth` and `claude-code-oauth` routes alongside the preserved Grok Build and native API-key routes.
260
+ - Add the Coding OAuth settings page with per-provider sign-in, model selection and status cards.
261
+ - Add pinned `dsh-agy@0.1.2` integration for Google Antigravity and a safe patch that hides unauthenticated models and labels the provider `(OAuth)`.
262
+ - Add authentication-gated model discovery: unauthenticated OAuth routes expose no models, while authenticated providers are explicitly labelled `(OAuth)`.
263
+ - Add `verify:deployed` and `smoke:deployed` scripts for live-deployment verification.
264
+ - Add plugin-level scoped proxy configuration (`config.proxy`) and Kimi direct-connect default.
265
+ - Add high-contrast settings actions and localized community README translations.
266
+
267
+ ### Fixed
268
+
269
+ - Fix Kimi OAuth wire authentication so the final request uses `Authorization: Bearer` without an extra Anthropic `x-api-key`.
270
+ - Fix OAuth catalog refresh so listeners cannot make a successful login/logout appear failed, and cleanup failures cannot leave stale models visible.
271
+ - Fix OAuth route replay state so Codex/Kimi assistant messages keep the Harness route provider id and remain replayable across multi-turn conversations.
272
+ - Heal older poisoned OAuth replay metadata at request time and strip replay state when switching between sibling OAuth routes.
273
+ - Make deployment smoke require explicit `DSH_RESTORE_PROVIDER`/`DSH_RESTORE_MODEL`, then restore that default after testing.
274
+
275
+ ### Security
276
+
277
+ - Store all OAuth credential files as owner-only `0600` with atomic writes and cross-process locks.
278
+ - Keep OAuth tokens out of HTTP status responses, logs and the settings UI.
279
+ - Document disabling the unauthenticated `dsh-agy-web` dashboard on trusted-host deployments.
280
+
281
+ ## v0.1.0
282
+
283
+ - Initial release: Grok Build device OAuth, `import`, dynamic `/v1/models-v2` catalog and Responses streaming inference.
284
+ - `dsh-grok-build` CLI with login/import/status/logout.
285
+ - Web settings section for Grok Build account.