Skip to content

v6.0 — Quarantine, Honest 502s, Hardened Multi-Arch Images

Latest

Choose a tag to compare

@AmanCode22 AmanCode22 released this 22 Oct 13:10
· 89 commits to main since this release
afe8d26

The release that stops lying. Every terminal failure now returns a designed error instead of a fake success; the token pool is self-healing with a quarantine lifecycle; the container ships hardened, bootable and multi-arch on GHCR — and there's an explicit exit door to the official API if the bridge ever breaks.

v5.0...v6.0: 155+ commits · 7 contributors

Highlights

Token pool lifecycle (PR #58, closes #32) — a 401 quarantines a token immediately; repeated 403s escalate to quarantine (DEEPSEEKER_QUARANTINE_AFTER_403); nothing leaves quarantine except Restore on the dashboard, and a stale in-flight success can no longer lift it. Pool selection is least-in-flight with idle-oldest tie-break under a soft per-token concurrency cap — rate-limited tokens recover by cooldown instead of starving. New pool-state view on the dashboard with masked aliases.

Honest failures (PR #59, closes #33) — every blocking terminal empty-SSE now returns a designed OpenAI/Anthropic 502 with a trace id (error.request_id / [trace: …]) and a redacted body; retries rotate tokens with jittered backoff and a bounded budget instead of re-rolling the same poisoned session. Upstream SSE errors are parsed and surfaced with their real status instead of being misreported as context-limit failures. Client aborts purge stored session rows; rollover decisions serialize under the per-chat lock; blocking SQLite helpers run off the event loop; token billing uses the cleaned completion text.

Client compatibility — one completion id/created per OpenAI stream with strict chunk fields (index, model), so Vercel AI SDK clients (Trilium, Zed) stop rejecting frames (PR #38, #39); usage chunk emitted in streaming so gateways (New API, sub2api) bill correctly (PR #31); bare DSML markers and plural function_calls containers no longer leak into replies, and chunks carry a per-chunk index (PR #36); context rollover restores system prompt + tools and keeps continuity across sessions (PR #34, #35); proper Responses-API format instead of chat completions (PR #42); dsh recovers agent-harness context-limit failures with summary rollover (PR #67).

Security defaults (PR #60) — an unset API key is generated, printed once and persisted; default admin credentials are refused on non-loopback binds and startup names the fix (DEEPSEEKER_ALLOW_DEFAULT_ADMIN=1 is the explicit override). The container runs as an unprivileged user (uid 10001) with only /app/data writable — and the entrypoint is fixed, so CMD ["deeperseeker"] resolves via /app/.venv/bin on PATH: the image boots as-is for the first time.

Multi-arch release images on GHCR (PR #61) — every v* tag publishes linux/amd64 + linux/arm64 images to ghcr.io/amancode22/deeperseeker (tags 6.0 / 6 / latest), digest printed in the run log, with image HEALTHCHECK and a startup identity line (version + build commit). Version is single-sourced from pyproject.toml (PR #66).

Deep health probe + honest status (PR #62) — GET /health?deep=1 (auth required) performs one real upstream round trip including PoW and reports reachability + latency; the shallow check stays public. The README gains the risk banner, no-public-relays stance, takedown policy, a status table backed by the deep probe, and the client compatibility matrix.

Dashboard usage stats (PR #63) — requests, input/output tokens and estimated cost per day × per masked key for the last 30 days; streamed retries count once; cost labeled as a flat-tariff estimate.

Official-API passthrough — the exit door (PR #64) — DEEPSEEKER_MODE=official + DEEPSEEKER_OFFICIAL_API_KEY serves chat/messages/models from the official DeepSeek API. Explicit mode, no silent fallback.

Project infrastructure (PR #65, #66) — CHANGELOG, issue templates (bug / ban report / feature / deploy-help), SECURITY.md, CONTRIBUTING.md; English-only README with a separate README.md.cn. Supply chain rebuilt on uv + requirements*.in lockfile flow, ruff enforcement, CI and Dependabot (PR #40 plus 15 dependency bumps).

Images — pull by digest

v6.0 is published multi-arch (linux/amd64 + linux/arm64) at ghcr.io/amancode22/deeperseeker, tags 6.0 / 6 / latest. For reproducible pulls, pin the per-platform digests of this release:

# linux/amd64
docker pull ghcr.io/amancode22/deeperseeker:6.0@sha256:6c0a33b2a730c632db8389f97e6af0d639d8ca3545fa6f3a4d4db744dba46de4

# linux/arm64
docker pull ghcr.io/amancode22/deeperseeker:6.0@sha256:55a78323aeeeed81023fce26942137b3b67501aa35946fc63e3d3332cbb44cde

The same digests also pin latest (e.g. ghcr.io/amancode22/deeperseeker:latest@sha256:6c0a…). Or just pull the tag and let Docker select your platform from the manifest list: docker pull ghcr.io/amancode22/deeperseeker:6.0.

Upgrading

  • Pull ghcr.io/amancode22/deeperseeker:6.0 (digests above).
  • If you bind to a non-loopback interface, set real admin credentials — startup refuses defaults and names the fix — or pass DEEPSEEKER_ALLOW_DEFAULT_ADMIN=1 deliberately.
  • Quarantined tokens stay quarantined until you hit Restore on the dashboard. That is by design.
  • New optional environment: DEEPSEEKER_QUARANTINE_AFTER_403, DEEPSEEKER_ALLOW_DEFAULT_ADMIN, DEEPSEEKER_MODE, DEEPSEEKER_OFFICIAL_API_KEY.
  • Keep GET /health for liveness; use /health?deep=1 (auth) when you want a real upstream verification.

What's Changed

  • Stage 0 — Guardrails: request identity, proxy trust, and failover by @AmanCode22 in #26
  • Show token alias in access logs by @A-Alomari in #25
  • Fix DSML tool-call start-token leakage with a plausibility check by @A-Alomari in #28
  • fix: emit usage chunk in OpenAI streaming responses by @Horizon00001 in #31
  • fix: parse upstream SSE errors instead of blaming the context limit by @A-Alomari in #34
  • Fix/context rollover by @A-Alomari in #35
  • fix: stop leaking bare DSML markers and plural function_calls containers into streamed text by @Horizon00001 in #36
  • Stage 1 of revamp by @AmanCode22 in #39
  • fix: add index to chat completions streaming chunks by @ymf2317-tech in #38
  • chore(supply-chain): migrate to uv + pyproject.toml with hatchling; add CI, Dependabot, and ruff by @AmanCode22 in #40
  • chore(deps): bump astral-sh/setup-uv from 10.1.0 to 10.2.0 by @dependabot[bot] in #41
  • chore(deps-dev): bump pip-tools from 7.6.1 to 7.6.2 by @dependabot[bot] in #49
  • chore(deps): bump aiohttp from 3.14.3 to 3.14.4 by @dependabot[bot] in #48
  • chore(deps): bump astral-sh/setup-uv from 10.2.0 to 10.3.0 by @dependabot[bot] in #43
  • chore(deps): bump fastapi from 0.142.2 to 0.143.0 by @dependabot[bot] in #44
  • chore(deps-dev): bump pip-tools from 7.6.1 to 7.6.2 by @dependabot[bot] in #45
  • chore(deps): bump fastapi from 0.142.2 to 0.143.0 by @dependabot[bot] in #46
  • chore(deps): bump aiohttp from 3.14.3 to 3.14.5 by @dependabot[bot] in #47
  • fix: return proper openai responses format instead of chat completions by @artyom08-dev in #42
  • chore(deps): bump fastapi from 0.143.0 to 0.143.2 by @dependabot[bot] in #51
  • chore(deps-dev): bump ruff from 0.16.10 to 0.17.1 by @dependabot[bot] in #52
  • chore(deps): bump fastapi from 0.142.2 to 0.143.2 by @dependabot[bot] in #53
  • chore(deps): bump playwright from 1.63.0 to 1.64.0 by @dependabot[bot] in #54
  • chore(deps): bump playwright from 1.63.0 to 1.64.0 by @dependabot[bot] in #55
  • chore(deps-dev): bump ruff from 0.16.10 to 0.17.1 by @dependabot[bot] in #56
  • chore(deps): bump aiohttp from 3.14.3 to 3.14.4 by @dependabot[bot] in #57
  • 401/403 pool lifecycle + quarantine + dashboard pool view by @AmanCode22 in #58
  • Shaped 502 on terminal empty-SSE by @AmanCode22 in #59
  • Refuse exposed default credentials + non-root container by @AmanCode22 in #60
  • Multi-arch release workflow → ghcr.io by @AmanCode22 in #61
  • Deep health probe + honest status table by @AmanCode22 in #62
  • Dashboard usage stats page by @AmanCode22 in #63
  • Official-API passthrough mode by @AmanCode22 in #64
  • Changelog, issue templates, SECURITY + CONTRIBUTING by @AmanCode22 in #65
  • Image version single-sourced from pyproject.toml (yaml-only builds) + English-only README + separate README.md.cn by @AmanCode22 in #66
  • dsh fix: recover agent-harness context-limit failures with summary rollover by @AmanCode22 in #67
  • chore(deps): bump certifi from 2026.7.22 to 2026.10.19 by @dependabot[bot] in #68

New Contributors

Full Changelog: v5.0...v6.0