Skip to content

Releases

v1.3.0

Choose a tag to compare

@Xractz Xractz released this 03 Nov 02:15

Minor release.

[1.3.0] - 2026-11-03

Added

  • The bridge now mirrors the web client's device-session check,
    POST /users/auth_token/check_device, piggybacked on completions
    and throttled to once per token per six hours. That endpoint is
    where the backend delivers a rotated session token (in a
    rotate field) when it rotates one; a client that never checks
    can be left holding a retired token. A delivered rotation is
    kept in memory only and substituted for the retired token on
    later requests, so a rotation does not break connected clients;
    the mapping is never written to disk and is lost on restart.
    Counters are reported in /stats as device_checks, and
    rotations are logged under DS_LOG. Set DS_CHECK_DEVICE=0
    to disable the checks, or DS_CHECK_DEVICE_INTERVAL (seconds)
    to change the spacing.

Assets

  • ds-server.zip: the full source tree. Unzip anywhere, then follow
    the install steps in the README (pip install -r requirements.txt
    and python ds_server.py).

Warning

Unofficial project, not affiliated with DeepSeek. It automates the
DeepSeek web chat, may violate DeepSeek's Terms of Service, and your
account may be permanently banned. Use at your own risk; the author
is not liable for any loss. See the disclaimer in the README.

Full changelog: https://github.com/Xractz/ds-server/blob/main/CHANGELOG.md

v1.2.4

Choose a tag to compare

@Xractz Xractz released this 31 Oct 11:20

Patch release.

[1.2.4] - 2026-10-31

Fixed

  • A completion that is still empty after the fresh-session retry
    (the backend intermittently produces replies that never
    materialize, and the empties cluster) is now surfaced as a
    retryable 502 upstream_error instead of an empty 200, so
    routers and agent loops retry at their own layer instead of
    reading a completed, empty turn.
  • The empty-retry no longer relabels the chain outcome as reset
    in DS_LOG and /stats; the label describes the conversation
    (hit, new, or a genuine divergence reset), so divergence
    counters stay truthful.
  • Search answers no longer leak [citation:N] markers; they are
    stripped on every answer path, like the [reference:N] family.

Assets

  • ds-server.zip: the full source tree. Unzip anywhere, then follow
    the install steps in the README (pip install -r requirements.txt
    and python ds_server.py).

Warning

Unofficial project, not affiliated with DeepSeek. It automates the
DeepSeek web chat, may violate DeepSeek's Terms of Service, and your
account may be permanently banned. Use at your own risk; the author
is not liable for any loss. See the disclaimer in the README.

Full changelog: https://github.com/Xractz/ds-server/blob/main/CHANGELOG.md

v1.2.3

Choose a tag to compare

@Xractz Xractz released this 31 Oct 09:53

Patch release.

[1.2.3] - 2026-10-31

Added

  • File attachments: OpenAI file content parts (a base64 data URL
    plus a filename) are uploaded to the web backend and attached to
    the completion, so clients without a coding agent can send PDF,
    text, and office documents the model then reads.
  • Remote image URLs: an image_url part pointing at an http(s)
    URL is downloaded by the server (15 second timeout, 10 MB cap)
    and uploaded like a data-URL image; an unreachable or oversized
    image is skipped instead of failing the request.

Assets

  • ds-server.zip: the full source tree. Unzip anywhere, then follow
    the install steps in the README (pip install -r requirements.txt
    and python ds_server.py).

Warning

Unofficial project, not affiliated with DeepSeek. It automates the
DeepSeek web chat, may violate DeepSeek's Terms of Service, and your
account may be permanently banned. Use at your own risk; the author
is not liable for any loss. See the disclaimer in the README.

Full changelog: https://github.com/Xractz/ds-server/blob/main/CHANGELOG.md

v1.2.2

Choose a tag to compare

@Xractz Xractz released this 31 Oct 09:29

Patch release.

[1.2.2] - 2026-10-31

Fixed

  • Chain continuation now verifies the fingerprints of the whole
    recorded prefix, not only the boundary message. Edits behind the
    boundary (an edit, a rollback, a head-preserving compaction) went
    undetected and the backend kept answering from the pre-edit
    context; they now reset the chain like any other divergence.
    Records written before this change reset once and are rewritten.
  • A completion whose final answer is completely empty (the backend
    intermittently produces a session with no reply, observed under
    the tool-catalog prompt) is retried once on a fresh session
    instead of being returned as an empty success.
  • File upload business errors now carry the backend's biz_msg
    (for example "rate limit reached") instead of an empty detail,
    and a rate-limit business error is surfaced as HTTP 429 so
    routers back off.
  • The DS_LOG chain label for a divergence on an existing chain now
    reads reset, matching the behavior (it read new before).
  • The README now states that OpenAI sampling parameters
    (temperature, max_tokens, stop, n) are accepted and ignored,
    because the web backend has no equivalents.

Assets

  • ds-server.zip: the full source tree. Unzip anywhere, then follow
    the install steps in the README (pip install -r requirements.txt
    and python ds_server.py).

Warning

Unofficial project, not affiliated with DeepSeek. It automates the
DeepSeek web chat, may violate DeepSeek's Terms of Service, and your
account may be permanently banned. Use at your own risk; the author
is not liable for any loss. See the disclaimer in the README.

Full changelog: https://github.com/Xractz/ds-server/blob/main/CHANGELOG.md

v1.2.1

Choose a tag to compare

@Xractz Xractz released this 31 Oct 06:14

Patch release.

[1.2.1] - 2026-10-31

Changed

  • Upstream session auto-delete is now on by default: a chain's
    backend session is deleted once the chain is replaced or evicted.
    Set DS_DELETE_SESSIONS=0 to keep retired sessions. The feature
    only ever touches sessions the server itself created.
  • Authoritative history mode is now on by default (the per-request
    history_mode flag and DS_HISTORY_MODE=0 still turn it off).
    The shipped defaults now follow the bridge's main deployment:
    behind a router, serving agent workloads whose requests are
    buffered anyway.

Assets

  • ds-server.zip: the complete source package

Warning

Unofficial project. Automating the DeepSeek web interface may violate DeepSeek's Terms of Service and can get your account restricted or permanently banned. Use at your own risk. See the Disclaimer in the README.

Full history: CHANGELOG.md

v1.2.0

Choose a tag to compare

@Xractz Xractz released this 31 Oct 05:08

Minor release, delivered through pull request #4.

[1.2.0] - 2026-10-31

Added

  • response_format is honored at prompt level: json_object
    instructs the model to answer with a single JSON object, and
    json_schema carries the client's schema along with the
    instruction. The web backend cannot enforce a format at decode
    time, so conformance rests on the model following the instruction.
  • Opt-in authoritative history mode: history_mode: true in the
    request body (or DS_HISTORY_MODE=1 as the default) makes the
    reply stored in the backend's history the answer of record, read
    back after the completion instead of the assembled stream text.
    Streamed requests are buffered in this mode.
  • Opt-in upstream session auto-delete (DS_DELETE_SESSIONS=1): a
    chain's backend session is deleted once the chain is replaced or
    evicted, so retired conversations do not pile up in the account's
    chat list.
  • GET /stats: in-process completion counters (totals by outcome,
    chain outcomes, estimated token totals, and a per-model breakdown
    with retries and durations). Always on, memory only.

Assets

  • ds-server.zip: the complete source package

Warning

Unofficial project. Automating the DeepSeek web interface may violate DeepSeek's Terms of Service and can get your account restricted or permanently banned. Use at your own risk. See the Disclaimer in the README.

Full history: CHANGELOG.md

v1.1.2

Choose a tag to compare

@Xractz Xractz released this 31 Oct 02:50

Patch release.

[1.1.2] - 2026-10-31

Changed

  • The README now documents the one-time caps setup for 9Router
    users: 9Router reads a custom model's capabilities from the caps
    saved on the model row, not from the provider's /v1/models, so
    the guide ships a console snippet that declares them once per
    model.

Removed

  • The capabilities and architecture metadata on /v1/models
    entries is gone. It was added in 1.1.1, but the router this bridge
    serves does not read capability metadata from a provider's model
    list, so the declaration had no consumer.

Assets

  • ds-server.zip: the complete source package

Warning

Unofficial project. Automating the DeepSeek web interface may violate DeepSeek's Terms of Service and can get your account restricted or permanently banned. Use at your own risk. See the Disclaimer in the README.

Full history: CHANGELOG.md

v1.1.1

Choose a tag to compare

@Xractz Xractz released this 30 Oct 22:59

Patch release, delivered through pull request #3.

[1.1.1] - 2026-10-31

Added

  • Adaptive pacing: whenever the backend answers 429 and a request has
    to be retried, the pacer widens its minimum intervals automatically
    (the penalty doubles from 2 seconds up to a 30 second cap) and then
    relaxes with a 60 second half-life. Set DS_ADAPTIVE_PACING=0 to
    keep the intervals fixed.
  • The server version is now reported by the /health endpoint and in
    the startup line, from a single __version__ constant in the
    package.
  • /v1/models now declares each model's capabilities (vision,
    reasoning, tools, search) and its input and output modalities,
    so routers and clients can display and route on them instead of
    guessing from the model name. The declaration follows each model's
    own mode: deepseek-chat is the plain mode and declares no
    reasoning, deepseek-reasoner is the thinking mode.
  • Regression fixture corpus under tests/fixtures covering the
    historical parser failure shapes: SSE patch sequences for thinking
    routed through the -1 fragment selector, fragment lists appended
    and batched at the response level, transition chunks with no
    operation plus standalone [reference:N] markers, and
    mixed-dialect tool replies including mojibake-damaged DSML.

Changed

  • The model labels in the README and the module docs no longer call
    the web chat models DeepSeek V3 and R1. The web chat has run the
    DeepSeek V4 family since April 2026 (the vendor replaces the web
    checkpoint without notice, and the web API does not report which
    one served a request), so the models are now described as the web
    chat model in its plain and thinking modes.

Removed

  • The legacy model aliases deepseek-v3 and deepseek-r1 are gone.
    Only deepseek-chat and deepseek-reasoner are served: lookups of
    any other model name return a model_not_found error, and chat
    completions reject unknown model names the same way instead of
    silently treating them as deepseek-chat.

Fixed

  • A streamed request whose parsing produced no text now delivers the
    history fallback through the stream as one content piece, matching
    the buffered path; before, streaming clients silently received an
    empty reply in that case.
  • Tool replies with fused dialects no longer leak markup into the
    visible text: a DSML invoke block closed by a tool_call tag (or
    by its calls wrapper) is now parsed as a call, and any orphaned
    DSML or tool_call tag debris left after extraction is stripped
    by a final sweep. Long fenced code blocks in tool-carrying
    replies stay capped at 10 lines plus a trimmed note, while plain
    replies are untouched; both behaviors are now covered by tests.
  • The stream parser now handles fragment updates that arrive at
    the response level itself: lists appended with APPEND and bare
    fragment dicts inside BATCH updates are routed to the correct
    channel instead of being dropped. Standalone [reference:N]
    markers are now filtered from every channel, not only from
    fragment batch updates.
  • Streaming cancellation now reacts even when the upstream stalls
    completely: the completion stream read re-checks the cancel event
    at least every 2 seconds, so a disconnected client no longer
    waits out a silent upstream. Normal streaming behavior and the
    pacing design are unchanged.

Assets

  • ds-server.zip: the complete source package

Warning

Unofficial project. Automating the DeepSeek web interface may violate DeepSeek's Terms of Service and can get your account restricted or permanently banned. Use at your own risk. See the Disclaimer in the README.

Full history: CHANGELOG.md

v1.1.0

Choose a tag to compare

@Xractz Xractz released this 30 Oct 07:03

Minor release, delivered through pull request #2.

Added

  • True streaming for plain streaming requests: tokens are relayed live
    from the backend instead of being buffered and replayed. If the
    client disconnects mid-stream, the upstream read is aborted and the
    pacing slot is released immediately, instead of completing a reply
    nobody is waiting for. Requests with tools still use the buffered
    path, because tool calls are parsed from the complete reply.
  • Optional request logging with DS_LOG=1: one line per completion on
    stderr carrying the model, the chain outcome (hit, new or reset),
    the duration, the upstream retry count, and the final status (ok,
    cancelled, or the mapped error status).

Assets

  • ds-server.zip: the complete source package

Warning

Unofficial project. Automating the DeepSeek web interface may violate DeepSeek's Terms of Service and can get your account restricted or permanently banned. Use at your own risk. See the Disclaimer in the README.

Full history: CHANGELOG.md

v1.0.2

Choose a tag to compare

@Xractz Xractz released this 30 Oct 06:42
f2f1714

Patch release, delivered through pull request #1.

Fixed

  • Upstream failures are now mapped to correct client-facing HTTP status
    codes and OpenAI-style error types instead of a generic 502: rate
    limits stay 429 (rate_limit_error), rejected userTokens become 401
    (authentication_error), other upstream 4xx pass through, and
    upstream 5xx or connection failures become 502 (upstream_error).
    Routers and agents can now back off or report credential problems
    correctly.

Changed

  • Dependencies in requirements.txt are pinned to the minimum versions
    this release was tested with (Flask 3.1, requests 2.34, wasmtime 50),
    so a fresh install can no longer silently pull an untested major
    version.

Assets

  • ds-server.zip: the complete source package

Warning

Unofficial project. Automating the DeepSeek web interface may violate DeepSeek's Terms of Service and can get your account restricted or permanently banned. Use at your own risk. See the Disclaimer in the README.

Full history: CHANGELOG.md