dsh-coding-subscription-oauth 0.7.1 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +313 -297
- package/CONTRIBUTING.md +138 -138
- package/INSTALL.md +249 -243
- package/LICENSE +19 -19
- package/NOTICE +11 -11
- package/README.de.md +309 -303
- package/README.es.md +310 -304
- package/README.fr.md +310 -304
- package/README.ja.md +310 -304
- package/README.ko.md +310 -304
- package/README.md +327 -321
- package/README.pt-BR.md +310 -304
- package/README.ru.md +310 -304
- package/README.zh-CN.md +325 -319
- package/compatibility/dsh-bom.json +36 -36
- package/cordis.patch.yml +13 -13
- package/docs/00-project-rules.md +213 -213
- package/docs/02-architecture.md +139 -138
- package/docs/02-architecture.zh-CN.md +139 -138
- package/lib/bin.js +13 -6
- package/lib/bin.js.map +3 -3
- package/lib/client.js +3 -3
- package/lib/client.js.map +4 -4
- package/lib/gateway-auth.d.ts +1 -0
- package/lib/gateway-auth.d.ts.map +1 -1
- package/lib/gateway-config.d.ts +4 -0
- package/lib/gateway-config.d.ts.map +1 -1
- package/lib/gateway-http.d.ts +5 -0
- package/lib/gateway-http.d.ts.map +1 -1
- package/lib/gateway-opencode-go.d.ts +22 -0
- package/lib/gateway-opencode-go.d.ts.map +1 -0
- package/lib/gateway.d.ts +2 -0
- package/lib/gateway.d.ts.map +1 -1
- package/lib/index.js +276 -63
- package/lib/index.js.map +4 -4
- package/lib/invariant.js.map +1 -1
- package/package.json +226 -226
- package/patches/dsh-agy@0.1.2.patch +25 -25
- package/scripts/release.mjs +187 -187
- package/scripts/smoke-deployed-routes.mjs +146 -146
- package/scripts/verify-adapter-host.mjs +70 -70
- package/scripts/verify-deployed-catalog.mjs +87 -87
package/CHANGELOG.md
CHANGED
|
@@ -1,302 +1,318 @@
|
|
|
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
|
-
## v0.
|
|
8
|
-
|
|
9
|
-
### Fixed
|
|
10
|
-
|
|
11
|
-
- Initialize empty `modelErrors` on OAuth provider profiles so DSH `0.1.5-rc.1` model resolution no longer throws `Cannot read properties of undefined (reading 'get')` before a provider request (`#38`, thanks [@warc0s](https://github.com/warc0s) via #37).
|
|
12
|
-
|
|
13
|
-
## v0.7.0 - 2026-09-10
|
|
14
|
-
|
|
15
|
-
### Added
|
|
16
|
-
|
|
17
|
-
- Adopt Hub-aligned AuthDocument v2 multi-account store: read v1 and migrate under file lock, hard cap of 8 accounts, `upsertAccount` / `setActiveAccount` / `removeAccount` / `listAccounts` (token-free summaries).
|
|
18
|
-
- Minimal Accounts UI (zh-CN + en): list / set-default / remove on each signed-in provider card; status includes token-free `accounts` + `activeAccountId`; HTTP `…/oauth/accounts/set-active` and `…/oauth/accounts/remove` (`#30`).
|
|
19
|
-
- Record DeepSeek Harness `0.1.5-rc.1` as an **unverified** BOM candidate in `compatibility/dsh-bom.json` (verified pin remains `0.1.1-rc.2`).
|
|
20
|
-
|
|
21
|
-
### Changed
|
|
22
|
-
|
|
23
|
-
- Consume published `dsh-coding-oauth-core@0.1.2` helper subpaths (`http-json`, `grok-errors`, `kimi-errors`, `gateway-protocol`); remove the temporary `vendor/runtime-slice/` mirror and `src/runtime/` copies. Historical `src/*.ts` facades now re-export from npm core.
|
|
24
|
-
- Replace `pnpm run assert:runtime-slice` with `pnpm run assert:oauth-core` (version pin + subpath resolve).
|
|
25
|
-
- Drop `@deepseek-ai/dsh-client-runtime` from client Cordis inject / BOM / devDependencies; resolve `ClientContext` from `@deepseek-ai/cordis` so candidate host `0.1.5-rc.1` (no client-runtime package) does not leave a stale inject requirement.
|
|
26
|
-
|
|
27
|
-
### Documentation
|
|
28
|
-
|
|
29
|
-
- Update `docs/02-architecture.md` / `docs/02-architecture.zh-CN.md` for the published-core import path (no local runtime-slice mirror).
|
|
30
|
-
- Document verified vs candidate DSH BOM and the client-runtime inject change in `INSTALL.md`, `docs/03-dsh-alpha-smoke.md`, and README Requirements.
|
|
31
|
-
|
|
32
|
-
## v0.6.5 - 2026-09-02
|
|
33
|
-
|
|
34
|
-
### Fixed
|
|
35
|
-
|
|
36
|
-
- Restrict gateway key reveal/rotate to `accessMode === "loopback"`, matching the Settings UI which already hides those controls on ssh-tunnel and trusted-https-proxy.
|
|
37
|
-
|
|
38
|
-
### Changed
|
|
39
|
-
|
|
40
|
-
- Stop shipping `src/` in the npm `files` allowlist. Runtime remains the generated `lib/` bundle.
|
|
41
|
-
- Add `.nvmrc`, `pnpm run assert:node`, `release:inspect`, and `release:publish`. Cloud Agent verification is `pnpm run check` with optional Docker.
|
|
42
|
-
|
|
43
|
-
### Documentation
|
|
44
|
-
|
|
45
|
-
- Add `AGENTS.md` (cloud environment as the primary path; Docker optional; isolated `DSH_HOME`; operator-only npm publish).
|
|
46
|
-
- 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.
|
|
47
|
-
- 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.
|
|
48
|
-
|
|
49
|
-
## v0.6.4 - 2026-08-29
|
|
50
|
-
|
|
51
|
-
- 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.
|
|
52
|
-
|
|
53
|
-
### Documentation
|
|
54
|
-
|
|
55
|
-
- 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.
|
|
56
|
-
|
|
57
|
-
## v0.6.3 - 2026-08-28
|
|
58
|
-
|
|
59
|
-
### Added
|
|
60
|
-
|
|
61
|
-
- 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.
|
|
62
|
-
|
|
63
|
-
### Fixed
|
|
64
|
-
|
|
65
|
-
- 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).
|
|
66
|
-
|
|
67
|
-
### Documentation
|
|
68
|
-
|
|
69
|
-
- 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`.
|
|
70
|
-
- 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.
|
|
71
|
-
- 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.
|
|
72
|
-
|
|
73
|
-
## v0.6.2 - 2026-08-25
|
|
74
|
-
|
|
75
|
-
`0.6.1` was never published or packed; its unreleased changes are folded into this release.
|
|
76
|
-
|
|
77
|
-
### Fixed
|
|
78
|
-
|
|
79
|
-
- 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.
|
|
80
|
-
- Require only `webServer` at plugin activation and register owner OAuth, capability, gateway, and import routes directly so optional services may arrive and leave independently.
|
|
81
|
-
- 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.
|
|
82
|
-
|
|
83
|
-
### Changed
|
|
84
|
-
|
|
85
|
-
- 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.
|
|
86
|
-
|
|
87
|
-
## v0.6.0 - 2026-08-22
|
|
88
|
-
|
|
89
|
-
### Added
|
|
90
|
-
|
|
91
|
-
- 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.
|
|
92
|
-
|
|
93
|
-
### Changed
|
|
94
|
-
|
|
95
|
-
- 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.
|
|
96
|
-
- Keep OAuth/Web ownership independent from optional LLM services and wait for required Web routes before reporting the standalone runtime active.
|
|
97
|
-
|
|
98
|
-
### Fixed
|
|
99
|
-
|
|
100
|
-
- 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.
|
|
101
|
-
|
|
102
|
-
## v0.5.8 - 2026-08-22
|
|
103
|
-
|
|
104
|
-
### Fixed
|
|
105
|
-
|
|
106
|
-
- 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.
|
|
107
|
-
- Skip npm publish when the exact version is already on the registry, then verify `npm view` matches the tag.
|
|
108
|
-
- 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.
|
|
109
|
-
|
|
110
|
-
### Changed
|
|
111
|
-
|
|
112
|
-
- 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.
|
|
113
|
-
- Extend `release.mjs` version checks to `INSTALL.md` and `README.zh-CN.md`.
|
|
114
|
-
- Document npm Trusted Publishing binding steps in `CONTRIBUTING.md`.
|
|
115
|
-
|
|
116
|
-
## v0.5.7 - 2026-08-22
|
|
117
|
-
|
|
118
|
-
### Fixed
|
|
119
|
-
|
|
120
|
-
- 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).
|
|
121
|
-
- 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`.
|
|
122
|
-
|
|
123
|
-
## v0.5.6 - 2026-08-19
|
|
124
|
-
|
|
125
|
-
### Fixed
|
|
126
|
-
|
|
127
|
-
- 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.
|
|
128
|
-
- Improve the settings screenshot capture script so isolated DSH preview overlays (Continue, internal testing notice, modal masks) are dismissed before opening **Settings → Coding OAuth**.
|
|
129
|
-
|
|
130
|
-
### Documentation
|
|
131
|
-
|
|
132
|
-
- 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.
|
|
133
|
-
- Record npm publication confirmation for `dsh-coding-subscription-oauth@0.5.5` and keep README install commands on the latest release.
|
|
134
|
-
|
|
135
|
-
## v0.5.5 - 2026-08-19
|
|
136
|
-
|
|
137
|
-
### Changed
|
|
138
|
-
|
|
139
|
-
- 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.
|
|
140
|
-
|
|
141
|
-
## v0.5.4 - 2026-08-19
|
|
142
|
-
|
|
143
|
-
### Changed
|
|
144
|
-
|
|
145
|
-
- 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.
|
|
146
|
-
- 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.
|
|
147
|
-
- Split the Settings client into tab/components modules with display/parser Vitest coverage, and make `promote-release` resilient to overlay `EXDEV` renames.
|
|
148
|
-
|
|
149
|
-
### Documentation
|
|
150
|
-
|
|
151
|
-
- 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).
|
|
152
|
-
- Record previously unreleased screenshot gallery work (Accounts / Gateway / Capabilities under `media/`, three-column README layout) in this release.
|
|
153
|
-
|
|
154
|
-
## v0.5.3 - 2026-08-19
|
|
155
|
-
|
|
156
|
-
### Changed
|
|
157
|
-
|
|
158
|
-
- 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).
|
|
159
|
-
- 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.
|
|
160
|
-
|
|
161
|
-
## v0.5.2 - 2026-08-18
|
|
162
|
-
|
|
163
|
-
### Documentation
|
|
164
|
-
|
|
165
|
-
- Make the published npm package the first installation path for normal users; keep GitHub and local-directory installs explicitly as development or fallback options.
|
|
166
|
-
|
|
167
|
-
## v0.5.1 - 2026-08-18
|
|
168
|
-
|
|
169
|
-
### Documentation
|
|
170
|
-
|
|
171
|
-
- 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.
|
|
172
|
-
|
|
173
|
-
## v0.5.0 - 2026-08-17
|
|
174
|
-
|
|
175
|
-
### Added
|
|
176
|
-
|
|
177
|
-
- 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.
|
|
178
|
-
- 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.
|
|
179
|
-
- 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.
|
|
180
|
-
|
|
181
|
-
### Changed
|
|
182
|
-
|
|
183
|
-
- 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.
|
|
184
|
-
|
|
185
|
-
## v0.4.1 - 2026-08-17
|
|
186
|
-
|
|
187
|
-
### Added
|
|
188
|
-
|
|
189
|
-
- 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.
|
|
190
|
-
- Add a fast `check:next` Docker development gate (`lint` + `typecheck` + tests) before the full release build gate.
|
|
191
|
-
|
|
192
|
-
### Changed
|
|
193
|
-
|
|
194
|
-
- 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.
|
|
195
|
-
- 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`.
|
|
196
|
-
- Raise the `undici` floor to `^7.24.8` so scoped `socks5://` proxies are supported.
|
|
197
|
-
- Document the first public install path as `dsh plugin --profile web add dsh-coding-subscription-oauth@0.4.1`, matching other DSH plugins.
|
|
198
|
-
|
|
199
|
-
### Fixed
|
|
200
|
-
|
|
201
|
-
- 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.
|
|
202
|
-
- 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.
|
|
203
|
-
- 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.
|
|
204
|
-
- 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.
|
|
205
|
-
- 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.
|
|
206
|
-
- Make generated media download filenames safe for `Content-Disposition` while preserving opaque DSH attachment ids.
|
|
207
|
-
- 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.
|
|
208
|
-
- Finish Settings disposal even when an injected watch disposer throws, while reporting the contained failure.
|
|
209
|
-
- Reject owner-only or group/world-writable npm package entries and require the packed CLI to remain executable.
|
|
210
|
-
- Close preview-proxy WebSocket halves when either side ends so isolated proxy tests and shutdown cannot hang on leftover upgrade pipes.
|
|
211
|
-
|
|
212
|
-
### Security
|
|
213
|
-
|
|
214
|
-
- 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.
|
|
215
|
-
- Reject unknown, secret-shaped, mistyped, fractional, and out-of-range capability writes instead of silently coercing or clamping caller-authored values.
|
|
216
|
-
- 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.
|
|
217
|
-
|
|
218
|
-
## v0.4.0 - 2026-08-16
|
|
219
|
-
|
|
220
|
-
### Added
|
|
221
|
-
|
|
222
|
-
- 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.
|
|
223
|
-
- 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.
|
|
224
|
-
- 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.
|
|
225
|
-
- 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.
|
|
226
|
-
- 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).
|
|
227
|
-
- 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.
|
|
228
|
-
|
|
229
|
-
### Changed
|
|
230
|
-
|
|
231
|
-
- Add a tracked multi-stage Docker sandbox for networkless check/verify, generated artifact export, local candidate packaging, and a script-disabled isolated consumer install.
|
|
232
|
-
- 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.
|
|
233
|
-
- Capability switches apply live; turning one off withdraws the matching search provider, tools, or Fast route without a restart.
|
|
234
|
-
|
|
235
|
-
### Fixed
|
|
236
|
-
|
|
237
|
-
- 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.
|
|
238
|
-
|
|
239
|
-
### Security
|
|
240
|
-
|
|
241
|
-
- 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.
|
|
242
|
-
- 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.
|
|
243
|
-
|
|
244
|
-
## v0.3.0
|
|
245
|
-
|
|
246
|
-
### Added
|
|
247
|
-
|
|
248
|
-
- 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.
|
|
249
|
-
- 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.
|
|
250
|
-
- Add an optional `retryPolicy` plugin config (harness `RetryPolicySchema`) to override the built-in policy per deployment.
|
|
7
|
+
## v0.8.1 - 2026-09-11
|
|
251
8
|
|
|
252
9
|
### Changed
|
|
253
10
|
|
|
254
|
-
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
-
|
|
277
|
-
-
|
|
278
|
-
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
-
|
|
289
|
-
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
-
|
|
301
|
-
|
|
302
|
-
|
|
11
|
+
- When co-installed with and managed by Usage Center (`uiOwner === "hub"`), the compact placeholder button now directly dispatches `usage-stats:open-settings` with `{ detail: { tab: "accounts" } }` and is relabeled "Manage subscription accounts" (管理订阅账号), taking operators straight to Settings → Subscription accounts. Note: requires `dsh-hub-oauth-gateway >= 1.10.0`.
|
|
12
|
+
|
|
13
|
+
## v0.8.0 - 2026-09-11
|
|
14
|
+
|
|
15
|
+
### Added
|
|
16
|
+
|
|
17
|
+
- Opt-in **OpenCode Go** chat compatibility on the local gateway (`gateway.opencodeGo.enabled`, default off): when enabled, `POST /v1/chat/completions` is forwarded to pinned `https://opencode.ai/zen/go/v1/chat/completions` with a sticky `x-opencode-session`, so clients that omit OpenCode session affinity (for example DSH / pi-ai style callers that hit `MissingSessionID`) can still chat through the loopback gateway. Toggle from the Gateway tab, YAML, or `PATCH` `{ "opencodeGoEnabled": true }`; set the gateway Bearer key to your OpenCode API key. No restart required.
|
|
18
|
+
|
|
19
|
+
### Documentation
|
|
20
|
+
|
|
21
|
+
- Document OpenCode Go compatibility in README locales, INSTALL, and architecture notes (session header priority, default-off behavior, and that this is not a public relay).
|
|
22
|
+
|
|
23
|
+
## v0.7.1 - 2026-09-10
|
|
24
|
+
|
|
25
|
+
### Fixed
|
|
26
|
+
|
|
27
|
+
- Initialize empty `modelErrors` on OAuth provider profiles so DSH `0.1.5-rc.1` model resolution no longer throws `Cannot read properties of undefined (reading 'get')` before a provider request (`#38`, thanks [@warc0s](https://github.com/warc0s) via #37).
|
|
28
|
+
|
|
29
|
+
## v0.7.0 - 2026-09-10
|
|
30
|
+
|
|
31
|
+
### Added
|
|
32
|
+
|
|
33
|
+
- Adopt Hub-aligned AuthDocument v2 multi-account store: read v1 and migrate under file lock, hard cap of 8 accounts, `upsertAccount` / `setActiveAccount` / `removeAccount` / `listAccounts` (token-free summaries).
|
|
34
|
+
- Minimal Accounts UI (zh-CN + en): list / set-default / remove on each signed-in provider card; status includes token-free `accounts` + `activeAccountId`; HTTP `…/oauth/accounts/set-active` and `…/oauth/accounts/remove` (`#30`).
|
|
35
|
+
- Record DeepSeek Harness `0.1.5-rc.1` as an **unverified** BOM candidate in `compatibility/dsh-bom.json` (verified pin remains `0.1.1-rc.2`).
|
|
36
|
+
|
|
37
|
+
### Changed
|
|
38
|
+
|
|
39
|
+
- Consume published `dsh-coding-oauth-core@0.1.2` helper subpaths (`http-json`, `grok-errors`, `kimi-errors`, `gateway-protocol`); remove the temporary `vendor/runtime-slice/` mirror and `src/runtime/` copies. Historical `src/*.ts` facades now re-export from npm core.
|
|
40
|
+
- Replace `pnpm run assert:runtime-slice` with `pnpm run assert:oauth-core` (version pin + subpath resolve).
|
|
41
|
+
- Drop `@deepseek-ai/dsh-client-runtime` from client Cordis inject / BOM / devDependencies; resolve `ClientContext` from `@deepseek-ai/cordis` so candidate host `0.1.5-rc.1` (no client-runtime package) does not leave a stale inject requirement.
|
|
42
|
+
|
|
43
|
+
### Documentation
|
|
44
|
+
|
|
45
|
+
- Update `docs/02-architecture.md` / `docs/02-architecture.zh-CN.md` for the published-core import path (no local runtime-slice mirror).
|
|
46
|
+
- Document verified vs candidate DSH BOM and the client-runtime inject change in `INSTALL.md`, `docs/03-dsh-alpha-smoke.md`, and README Requirements.
|
|
47
|
+
|
|
48
|
+
## v0.6.5 - 2026-09-02
|
|
49
|
+
|
|
50
|
+
### Fixed
|
|
51
|
+
|
|
52
|
+
- Restrict gateway key reveal/rotate to `accessMode === "loopback"`, matching the Settings UI which already hides those controls on ssh-tunnel and trusted-https-proxy.
|
|
53
|
+
|
|
54
|
+
### Changed
|
|
55
|
+
|
|
56
|
+
- Stop shipping `src/` in the npm `files` allowlist. Runtime remains the generated `lib/` bundle.
|
|
57
|
+
- Add `.nvmrc`, `pnpm run assert:node`, `release:inspect`, and `release:publish`. Cloud Agent verification is `pnpm run check` with optional Docker.
|
|
58
|
+
|
|
59
|
+
### Documentation
|
|
60
|
+
|
|
61
|
+
- Add `AGENTS.md` (cloud environment as the primary path; Docker optional; isolated `DSH_HOME`; operator-only npm publish).
|
|
62
|
+
- 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.
|
|
63
|
+
- 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.
|
|
64
|
+
|
|
65
|
+
## v0.6.4 - 2026-08-29
|
|
66
|
+
|
|
67
|
+
- 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.
|
|
68
|
+
|
|
69
|
+
### Documentation
|
|
70
|
+
|
|
71
|
+
- 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.
|
|
72
|
+
|
|
73
|
+
## v0.6.3 - 2026-08-28
|
|
74
|
+
|
|
75
|
+
### Added
|
|
76
|
+
|
|
77
|
+
- 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.
|
|
78
|
+
|
|
79
|
+
### Fixed
|
|
80
|
+
|
|
81
|
+
- 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).
|
|
82
|
+
|
|
83
|
+
### Documentation
|
|
84
|
+
|
|
85
|
+
- 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`.
|
|
86
|
+
- 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.
|
|
87
|
+
- 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.
|
|
88
|
+
|
|
89
|
+
## v0.6.2 - 2026-08-25
|
|
90
|
+
|
|
91
|
+
`0.6.1` was never published or packed; its unreleased changes are folded into this release.
|
|
92
|
+
|
|
93
|
+
### Fixed
|
|
94
|
+
|
|
95
|
+
- 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.
|
|
96
|
+
- Require only `webServer` at plugin activation and register owner OAuth, capability, gateway, and import routes directly so optional services may arrive and leave independently.
|
|
97
|
+
- 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.
|
|
98
|
+
|
|
99
|
+
### Changed
|
|
100
|
+
|
|
101
|
+
- 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.
|
|
102
|
+
|
|
103
|
+
## v0.6.0 - 2026-08-22
|
|
104
|
+
|
|
105
|
+
### Added
|
|
106
|
+
|
|
107
|
+
- 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.
|
|
108
|
+
|
|
109
|
+
### Changed
|
|
110
|
+
|
|
111
|
+
- 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.
|
|
112
|
+
- Keep OAuth/Web ownership independent from optional LLM services and wait for required Web routes before reporting the standalone runtime active.
|
|
113
|
+
|
|
114
|
+
### Fixed
|
|
115
|
+
|
|
116
|
+
- 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.
|
|
117
|
+
|
|
118
|
+
## v0.5.8 - 2026-08-22
|
|
119
|
+
|
|
120
|
+
### Fixed
|
|
121
|
+
|
|
122
|
+
- 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.
|
|
123
|
+
- Skip npm publish when the exact version is already on the registry, then verify `npm view` matches the tag.
|
|
124
|
+
- 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.
|
|
125
|
+
|
|
126
|
+
### Changed
|
|
127
|
+
|
|
128
|
+
- 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.
|
|
129
|
+
- Extend `release.mjs` version checks to `INSTALL.md` and `README.zh-CN.md`.
|
|
130
|
+
- Document npm Trusted Publishing binding steps in `CONTRIBUTING.md`.
|
|
131
|
+
|
|
132
|
+
## v0.5.7 - 2026-08-22
|
|
133
|
+
|
|
134
|
+
### Fixed
|
|
135
|
+
|
|
136
|
+
- 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).
|
|
137
|
+
- 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`.
|
|
138
|
+
|
|
139
|
+
## v0.5.6 - 2026-08-19
|
|
140
|
+
|
|
141
|
+
### Fixed
|
|
142
|
+
|
|
143
|
+
- 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.
|
|
144
|
+
- Improve the settings screenshot capture script so isolated DSH preview overlays (Continue, internal testing notice, modal masks) are dismissed before opening **Settings → Coding OAuth**.
|
|
145
|
+
|
|
146
|
+
### Documentation
|
|
147
|
+
|
|
148
|
+
- 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.
|
|
149
|
+
- Record npm publication confirmation for `dsh-coding-subscription-oauth@0.5.5` and keep README install commands on the latest release.
|
|
150
|
+
|
|
151
|
+
## v0.5.5 - 2026-08-19
|
|
152
|
+
|
|
153
|
+
### Changed
|
|
154
|
+
|
|
155
|
+
- 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.
|
|
156
|
+
|
|
157
|
+
## v0.5.4 - 2026-08-19
|
|
158
|
+
|
|
159
|
+
### Changed
|
|
160
|
+
|
|
161
|
+
- 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.
|
|
162
|
+
- 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.
|
|
163
|
+
- Split the Settings client into tab/components modules with display/parser Vitest coverage, and make `promote-release` resilient to overlay `EXDEV` renames.
|
|
164
|
+
|
|
165
|
+
### Documentation
|
|
166
|
+
|
|
167
|
+
- 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).
|
|
168
|
+
- Record previously unreleased screenshot gallery work (Accounts / Gateway / Capabilities under `media/`, three-column README layout) in this release.
|
|
169
|
+
|
|
170
|
+
## v0.5.3 - 2026-08-19
|
|
171
|
+
|
|
172
|
+
### Changed
|
|
173
|
+
|
|
174
|
+
- 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).
|
|
175
|
+
- 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.
|
|
176
|
+
|
|
177
|
+
## v0.5.2 - 2026-08-18
|
|
178
|
+
|
|
179
|
+
### Documentation
|
|
180
|
+
|
|
181
|
+
- Make the published npm package the first installation path for normal users; keep GitHub and local-directory installs explicitly as development or fallback options.
|
|
182
|
+
|
|
183
|
+
## v0.5.1 - 2026-08-18
|
|
184
|
+
|
|
185
|
+
### Documentation
|
|
186
|
+
|
|
187
|
+
- 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.
|
|
188
|
+
|
|
189
|
+
## v0.5.0 - 2026-08-17
|
|
190
|
+
|
|
191
|
+
### Added
|
|
192
|
+
|
|
193
|
+
- 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.
|
|
194
|
+
- 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.
|
|
195
|
+
- 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.
|
|
196
|
+
|
|
197
|
+
### Changed
|
|
198
|
+
|
|
199
|
+
- 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.
|
|
200
|
+
|
|
201
|
+
## v0.4.1 - 2026-08-17
|
|
202
|
+
|
|
203
|
+
### Added
|
|
204
|
+
|
|
205
|
+
- 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.
|
|
206
|
+
- Add a fast `check:next` Docker development gate (`lint` + `typecheck` + tests) before the full release build gate.
|
|
207
|
+
|
|
208
|
+
### Changed
|
|
209
|
+
|
|
210
|
+
- 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.
|
|
211
|
+
- 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`.
|
|
212
|
+
- Raise the `undici` floor to `^7.24.8` so scoped `socks5://` proxies are supported.
|
|
213
|
+
- Document the first public install path as `dsh plugin --profile web add dsh-coding-subscription-oauth@0.4.1`, matching other DSH plugins.
|
|
214
|
+
|
|
215
|
+
### Fixed
|
|
216
|
+
|
|
217
|
+
- 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.
|
|
218
|
+
- 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.
|
|
219
|
+
- 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.
|
|
220
|
+
- 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.
|
|
221
|
+
- 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.
|
|
222
|
+
- Make generated media download filenames safe for `Content-Disposition` while preserving opaque DSH attachment ids.
|
|
223
|
+
- 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.
|
|
224
|
+
- Finish Settings disposal even when an injected watch disposer throws, while reporting the contained failure.
|
|
225
|
+
- Reject owner-only or group/world-writable npm package entries and require the packed CLI to remain executable.
|
|
226
|
+
- Close preview-proxy WebSocket halves when either side ends so isolated proxy tests and shutdown cannot hang on leftover upgrade pipes.
|
|
227
|
+
|
|
228
|
+
### Security
|
|
229
|
+
|
|
230
|
+
- 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.
|
|
231
|
+
- Reject unknown, secret-shaped, mistyped, fractional, and out-of-range capability writes instead of silently coercing or clamping caller-authored values.
|
|
232
|
+
- 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.
|
|
233
|
+
|
|
234
|
+
## v0.4.0 - 2026-08-16
|
|
235
|
+
|
|
236
|
+
### Added
|
|
237
|
+
|
|
238
|
+
- 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.
|
|
239
|
+
- 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.
|
|
240
|
+
- 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.
|
|
241
|
+
- 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.
|
|
242
|
+
- 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).
|
|
243
|
+
- 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.
|
|
244
|
+
|
|
245
|
+
### Changed
|
|
246
|
+
|
|
247
|
+
- Add a tracked multi-stage Docker sandbox for networkless check/verify, generated artifact export, local candidate packaging, and a script-disabled isolated consumer install.
|
|
248
|
+
- 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.
|
|
249
|
+
- Capability switches apply live; turning one off withdraws the matching search provider, tools, or Fast route without a restart.
|
|
250
|
+
|
|
251
|
+
### Fixed
|
|
252
|
+
|
|
253
|
+
- 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.
|
|
254
|
+
|
|
255
|
+
### Security
|
|
256
|
+
|
|
257
|
+
- 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.
|
|
258
|
+
- 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.
|
|
259
|
+
|
|
260
|
+
## v0.3.0
|
|
261
|
+
|
|
262
|
+
### Added
|
|
263
|
+
|
|
264
|
+
- 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.
|
|
265
|
+
- 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.
|
|
266
|
+
- Add an optional `retryPolicy` plugin config (harness `RetryPolicySchema`) to override the built-in policy per deployment.
|
|
267
|
+
|
|
268
|
+
### Changed
|
|
269
|
+
|
|
270
|
+
- 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.
|
|
271
|
+
- Require Node.js 22.19+ (or 24+) for the TypeScript 6/esbuild release pipeline and runtime bundle.
|
|
272
|
+
- 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.
|
|
273
|
+
- 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.
|
|
274
|
+
- 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.
|
|
275
|
+
- 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".
|
|
276
|
+
- 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.
|
|
277
|
+
- 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.
|
|
278
|
+
|
|
279
|
+
### Fixed
|
|
280
|
+
|
|
281
|
+
- 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.
|
|
282
|
+
- 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.
|
|
283
|
+
- 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.
|
|
284
|
+
- 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.
|
|
285
|
+
- Contain startup cache/catalog failures and redact token-like material from refresh diagnostics instead of retaining it in user-visible errors or error causes.
|
|
286
|
+
|
|
287
|
+
## v0.2.0
|
|
288
|
+
|
|
289
|
+
### Added
|
|
290
|
+
|
|
291
|
+
- Add unified `/plugins/dsh-grok-build/oauth/*` API across Grok, Codex, Kimi and Claude.
|
|
292
|
+
- Add `codex-oauth`, `kimi-code-oauth` and `claude-code-oauth` routes alongside the preserved Grok Build and native API-key routes.
|
|
293
|
+
- Add the Coding OAuth settings page with per-provider sign-in, model selection and status cards.
|
|
294
|
+
- Add pinned `dsh-agy@0.1.2` integration for Google Antigravity and a safe patch that hides unauthenticated models and labels the provider `(OAuth)`.
|
|
295
|
+
- Add authentication-gated model discovery: unauthenticated OAuth routes expose no models, while authenticated providers are explicitly labelled `(OAuth)`.
|
|
296
|
+
- Add `verify:deployed` and `smoke:deployed` scripts for live-deployment verification.
|
|
297
|
+
- Add plugin-level scoped proxy configuration (`config.proxy`) and Kimi direct-connect default.
|
|
298
|
+
- Add high-contrast settings actions and localized community README translations.
|
|
299
|
+
|
|
300
|
+
### Fixed
|
|
301
|
+
|
|
302
|
+
- Fix Kimi OAuth wire authentication so the final request uses `Authorization: Bearer` without an extra Anthropic `x-api-key`.
|
|
303
|
+
- Fix OAuth catalog refresh so listeners cannot make a successful login/logout appear failed, and cleanup failures cannot leave stale models visible.
|
|
304
|
+
- Fix OAuth route replay state so Codex/Kimi assistant messages keep the Harness route provider id and remain replayable across multi-turn conversations.
|
|
305
|
+
- Heal older poisoned OAuth replay metadata at request time and strip replay state when switching between sibling OAuth routes.
|
|
306
|
+
- Make deployment smoke require explicit `DSH_RESTORE_PROVIDER`/`DSH_RESTORE_MODEL`, then restore that default after testing.
|
|
307
|
+
|
|
308
|
+
### Security
|
|
309
|
+
|
|
310
|
+
- Store all OAuth credential files as owner-only `0600` with atomic writes and cross-process locks.
|
|
311
|
+
- Keep OAuth tokens out of HTTP status responses, logs and the settings UI.
|
|
312
|
+
- Document disabling the unauthenticated `dsh-agy-web` dashboard on trusted-host deployments.
|
|
313
|
+
|
|
314
|
+
## v0.1.0
|
|
315
|
+
|
|
316
|
+
- Initial release: Grok Build device OAuth, `import`, dynamic `/v1/models-v2` catalog and Responses streaming inference.
|
|
317
|
+
- `dsh-grok-build` CLI with login/import/status/logout.
|
|
318
|
+
- Web settings section for Grok Build account.
|