Skip to content

v0.7.1

Choose a tag to compare

@Wecury Wecury released this 04 Sep 13:23
· 17 commits to main since this release
3e405f2

Highlights

  • 🧩 One-click model & reasoning sync β€” the panel button scans the upstream
    through the proxy, auto-creates the model provider in ~/.dsh/settings.yaml
    when none points at the local proxy (inline auth header included, so no API key
    is ever asked for), adds every backend model that isn't declared yet, and
    writes reasoningEfforts for the models that accept the parameter. Fresh
    installs: log in once, click Sync, restart DSH β€” nothing to type in Settings.

  • πŸ›‘οΈ Credentials leave the plugin directory β€” the Open WebUI session token (a
    live JWT) now lives in ~/.dsh/dsh-owui-chat2api-token.json (via
    DSH_OWUI_TOKEN_FILE), never inside the install folder; a stray bundle-side
    token is migrated once and removed. token.json / usage.db / .chrome-profile
    / __pycache__ are hard-excluded from the package even when built from a
    working copy.

  • ⚑ Effort scan that survives real backends β€” probes run concurrently
    (8 workers, cache preserved) with a 20-minute host budget, so large model lists
    are no longer killed mid-scan; a Force re-scan button re-probes everything.

  • 🧠 Native reasoning levels in DSH β€” supported models show
    Off / Low / Medium / High in DSH's own model picker via auto-written
    reasoningEfforts entries.

  • πŸ” Dependable browser login β€” the token read from Open WebUI is validated
    before it's accepted; a stale token reopens the browser for a real sign-in
    instead of silently breaking every request with 502s.

Changelog

Features

  • ✨ sync: create the llm-pi-ai > providers chain in settings.yaml when no
    provider points at the local proxy β€” no manual "add provider + fill key" step
  • ✨ sync: auto-created provider carries an inline Authorization header, so DSH
    never prompts for a key (the proxy ignores incoming keys and uses its own token)
  • ✨ sync: declare missing backend models (- id: + name:) in the matching
    provider only; every other provider and byte of the file is untouched
  • ✨ sync: timestamped .bak-reasoning-* backup before any write; re-runs are
    idempotent
  • ✨ sync: Force re-scan re-probes every model, ignoring the cached results
  • ✨ login: prefer a long-lived Open WebUI API key when authenticating

Bug Fixes

  • πŸ› pack: files-allowlist negations + .npmignore/.gitignore β€” a JWT can no
    longer ride a tarball even if a login ran inside the repo copy
  • πŸ› scan: concurrency + explicit host timeout β€” large model lists aren't killed
    at 90s any more; results are collected in one run
  • πŸ› scan: host-side busy guard + long panel busy window β€” two clicks can't start
    a second concurrent scan that races the settings.yaml write
  • πŸ› settings: keep only the newest 4 .bak-reasoning-* files so ~/.dsh isn't
    buried over years
  • πŸ› settings: verify-after-write β€” the patched file is re-read and re-checked
    (provider exists / models present / efforts applied) and warns if not
  • πŸ› login: validate the saved token against the upstream instead of trusting
    localStorage β€” no more flash-and-close window followed by dead 502s
  • πŸ› login: keep the browser open until a valid token is stored; auto re-auth on
    401/403
  • πŸ› proxy: refuse oversized request bodies (>8 MiB) before reading
  • πŸ› panel: effort-scan and Save results show inline under the buttons instead of
    the top status banner
  • πŸ› panel: close/language controls respond to Enter/Space (keyboard a11y);
    overlay warns once when falling back to the page body and pauses while hidden
  • πŸ› panel: save / sync results surface in the single sticky notice bar (one
    notification language, consistent auto-clear)

Full Changelog: v0.5.1...v0.7.1