Skip to content

Releases: giienew/9router-pro

v0.5.109-pro.12

Choose a tag to compare

@giienew giienew released this 25 Oct 02:19

v0.5.109-pro.12

  • Packaging fix: this release ships the correct slim npm distribution. The pro.11 npm publish was staged from the wrong pack output and never went live — approve pro.12, not pro.11. No code changes from pro.11.

v0.5.109-pro.11

Choose a tag to compare

@giienew giienew released this 25 Oct 01:31

v0.5.109-pro.11

  • Prompt Injection, now variant-based: a prompt attaches to a custom variant name, not to the raw model. A variant is a custom name plus exactly one backing provider/model plus its prompt — picking the variant serves that model with its prompt, picking the raw model serves it without any prompt, so original model names are never disturbed. Variants resolve through an auto-created single-member combo of the same name, and renaming, re-backing or deleting a variant keeps that combo in sync. Model-coordinate injection is gone; entries from the old concept migrate to variants automatically, and a variant used inside another combo does not inject (use the variant directly).
  • Prompt Injection page crash, fixed: a leftover block from the removed copy-to-providers UI crashed the whole page on render. It is gone, and the page is verified loading in a real browser again.
  • Proxy Pools pagination: the page no longer downloads and renders every pool at once. The API pages server-side (10, 20 or 50 rows, with name search), so a fleet of thousands of pools opens as one small page instead of a multi-megabyte dump. Select-all is per page while cross-page picks persist, and bulk actions, health check and batch-import dedupe still cover the full filtered set.

v0.5.109-pro.10

Choose a tag to compare

@giienew giienew released this 24 Oct 21:51
  • Rotation, optimized for huge fleets: windowed-LRU pick now single-pass (about 200ms down to 5.6ms per pick at 18,719 accounts), duplicate-free overlay, mutex only for round-robin, deferred and batched lastUsedAt writes.
  • Prompt Injection, new concept: one prompt, one provider/model. Matching keys on resolved provider/model only; combo names and bare ids never match; labels display-only; injection page no longer creates or edits combos; API rejects targets without a slash; Copy to other providers; old keys auto-converted on import and at runtime.
  • Injection picker, filtered: the add-injection model picker lists provider models only.

v0.5.109-pro.9

Choose a tag to compare

@giienew giienew released this 23 Oct 20:24
  • Providers page, final layout: the page now reads top to bottom as Custom Providers (the OpenAI/Anthropic-compatible creation section), the All Connection Providers shelf, a dedicated Provider Custom section holding the custom providers you added, then OAuth, Free Tier and API Key providers. Every section carries its own Test All — the Provider Custom section included — so batch-testing parity holds across the whole page.
  • Custom provider icons, auto-detected: a custom provider's icon resolves itself — bundled artwork first, then the favicon of its base URL (walking up to the parent domain when needed), then initials. The Add Compatible modal shows a live icon preview as you type the Base URL.
  • OpenCode Free, aligned with the official CLI: the request wire format now mirrors OpenCode CLI 1.19.4 — user agent, the /inference endpoints and the per-request message id header — and the old placeholder note injected into free-model prompts is gone. Tool calls gain in-place fingerprint normalization (upstream PR #4972), so clients whose tool schemas would otherwise be rejected pass through unchanged in place.
  • Proxy rotation over a picked subset: a provider's random / round-robin proxy rotation can be pinned to a hand-picked subset of your pools instead of every active pool. The pool picker on the provider card is collapsible — it folds away with a selected-count summary once you're done choosing.
  • No-auth providers, honestly labelled: the ready-to-use card now states plainly that routing through a proxy pool uses your own IP credentials only — no proxies are included.
  • Indonesian dashboard translation, complete: all 1,827 dashboard strings are translated — every label, description, toast and help popover — in a trimmed, professional phrasing. No English leftovers anywhere in the dashboard.
  • Donate points home: the Donate modal now reads this project's own donate.json instead of upstream's endpoint — the Saweria channel is live.
  • README, refreshed and slimmed: new screenshots in the Dark Pro theme (orange accent) captured from a clean demo install, palette-compressed to a fraction of their former size; oversized bundled assets trimmed (a 2,700px provider icon shipped at 256px, the hero image cut from 758KB to 59KB).

v0.5.109-pro.8

Choose a tag to compare

@giienew giienew released this 23 Oct 16:46

v0.5.109-pro.8

  • Balanced account selection — a new default routing strategy: account selection is now health-aware and scale-proof, from a couple of accounts to tens of thousands. Clean accounts serve first; an account that just failed steps back as a suspect, serves only when no clean account is free, and heals automatically after an hour without proof of failure. Picks are windowed-LRU — a random choice among the 32 least-recently-used accounts — so no account is burned first and every account rests as long as possible. The "unavailable" dashboard label is honest now: it is only stamped for cooldowns of a minute or more, so a brief quota window or a proxy hiccup no longer brands a healthy key as dead. Fleets of 8 or fewer accounts get a rescue path — when everything is locked but the earliest lock lifts within 45 seconds, the request retries that account instead of failing outright. Round Robin and Fill First remain available under Profile → Routing Strategy.
  • Pairs rotate their backing models: a custom name carrying a prompt injection with several real models behind it (a pair) now rotates its starting model per request (round-robin), spreading traffic across the backing providers — the second model is no longer a passive stand-in that only wakes when the first one fails. A failure still falls through the remaining models in order, and any strategy set explicitly for the combo wins over this default.
  • Operator logs in plain words: one request now reads as one short story. The request line drops the FMT/MSG/THINK codes, the proxy line is a single line without pool UUIDs, errors are one line carrying the reason in plain words (402 quota exhausted, 429 rate limited) plus the upstream's own message instead of a raw JSON dump, and the completion line reads "done · 8.1s · first token 0.9s · in 45,231 · out 87".
  • Console Log panel, rebuilt logcat-style: log lines render as tidy rows — time, level badge (E/W/I/✓), short tag, session dot, message — with a Live indicator next to Clear, so the stream scans like a logcat viewer instead of a wall of green text.
  • Bulk Add progress: adding API keys in bulk now shows live progress (n of N, the current key, a progress bar) and locks the form until the run finishes, instead of a bare "Adding..." with no sense of scale. Single Save names its phase (Checking… / Saving…).

v0.5.109-pro.7

Choose a tag to compare

@giienew giienew released this 23 Oct 12:46

Base updated to upstream 9Router v0.5.109 — all 39 upstream commits since v0.5.104 merged in, with every Pro feature preserved (Prompt Injection, per-key limits & quotas, Anti-Flaky Guard, provider bulk tools, proxy pool health check, backup system).

Highlights:

  • Smart Router (System One) — adaptive combo routing with a decision model (Smart Switch / Strict Lock / Per-Turn)
  • Combo list search
  • Upstream custom system prompt in Settings (stacks after Prompt Injections)
  • Tougher combos: advance on out-of-credits, request-scoped 4xx, and empty streams
  • Streaming tool-call fixes for agentic clients
  • New upstream providers (SenseNova, web-cookie, Codex OAuth STT), Gemini reference images, OpenCode free reasoning-effort support
  • Security bumps: Node 22.23.4 (Docker), undici 7.30.1

Full details in CHANGELOG-PRO.md.

9Router Pro v0.5.104-pro.6 — Apply Proxy to all, Proxy Pools health-check job, All Connection Providers

Choose a tag to compare

@giienew giienew released this 22 Oct 23:01

Highlights

  • Apply Proxy to every connection — the provider page's Apply Proxy dialog gains a Loaded / All scope switch. All runs as one server-side pass in a single transaction (one pool for everyone, one-to-one rotation, or unbind all). The pool list in the dialog is searchable and capped for installs with thousands of pools.
  • Proxy Pools health check, rebuilt as a server job — one click tests every pool in the background (bounded concurrency, live progress, survives page refresh). Passing pools stay active; failing pools are deactivated and marked failed, the dashboard offers to delete the dead pools when the check finishes, and a Delete failed button is available whenever failed pools exist. Pools bound to a connection are never deleted.
  • All Connection Providers shelf — under Custom Providers, a shelf gathering every provider that is currently on from all categories (deduped, working toggles), with its own Test All that runs every active connection as one stoppable job.

Full notes in CHANGELOG-PRO.md.

9Router Pro v0.5.104-pro.5.1 — Default port 20127 & README refresh

Choose a tag to compare

@giienew giienew released this 22 Oct 07:25
  • Default port is now 20127: Pro's default port moves from the inherited 20128 to 20127, matching what npm run start already used. The Docker image and compose file, the CLI's default target, the dashboard's default self-addresses (CLI Tools cards, MITM, tunnels, SAML), the updater's app port, .env.example, and the README/CLAUDE/DOCKER docs all agree now. Existing installs are unaffected — an explicit PORT always wins; only new installs see the new default. The original 9Router stays on 20128, so the two can run side by side on one machine (see MIGRATION.md). Translated docs (gitbook, i18n READMEs) still show the old port in places and will catch up.
  • README refreshed: the screenshots are regenerated from the current build — the redesigned Prompt Injection page (Templates / Injections / Tester) and the current Providers page, captured on a clean demo install.

9Router Pro v0.5.104-pro.5 — Key Limits, Prompt Injection redesign & complete Backup

Choose a tag to compare

@giienew giienew released this 22 Oct 06:57
  • Backup, completed: the Settings page grows a dedicated Backup card. It shows what a backup actually contains (connections, API keys, combos, proxy pools, prompt injections, templates) and when the last one was taken; imports now open a preview of the file — version, date, contents — before anything is replaced. Auto-backup takes a full snapshot every day (on by default, keep the newest 7, adjustable 3–30), listed in the card with per-snapshot download and restore; restoring goes through the normal import path, so the pre-import safety backup still applies. Download/Import moved out of the Local Mode card into this one — one concern, one place.
  • Selective backup & restore: downloads can be scoped two ways — by section (providers & connections, API keys, combos, proxy pools, Prompt Injection, settings) and by provider (only the chosen providers' connections). A scoped file declares its scope and restores scoped: importing it replaces exactly the chosen sections, and a provider-scoped file replaces only those providers' connections, leaving everything else untouched. The import/snapshot preview offers the same section choice on the way in. Snapshots are always full backups.
  • Default password is now 9routerpro: fresh installs (no saved password hash, no INITIAL_PASSWORD) start with 9routerpro instead of the upstream 123456. Existing installs keep their own password — nothing changes for them. The remote-login guard is unchanged: the default password still cannot be used from a non-local address until it is changed.
  • Key Limits — per-API-key rate limits for reselling: every API key can now carry its own limits, set on the Endpoint page next to the existing token quota: requests per minute, tokens per minute, requests per hour, requests per day, and max concurrent requests. Every field is optional (empty = unlimited) and fully configurable per key, so sellers and renters can shape each key to the plan they sold. A key that crosses a limit gets HTTP 429 with a Retry-After header and a message naming the limit it hit. Request windows and concurrency are tracked in memory (they reset on restart, like most rate limiters); tokens-per-minute is a soft check over the last minute of recorded usage — the same fail-open philosophy as the token quota, so a limiter error never blocks a chat. Limits ride along in Settings backups (new keyLimits scope), are cleared when their key is deleted, and the Endpoint page shows each key's live usage (requests this minute, tokens this minute, requests in flight). The Create API Key dialog now includes the key settings (access restriction, token quota, limits) at creation time, and a new MIGRATION.md documents moving from the original 9Router to Pro via backup export/import.
  • Prompt Injection, redesigned: the page is rebuilt around one concept — attach a prompt to any name your clients call. Templates are a pure prompt library (using one copies its content into an injection; the template itself never runs, and applying is preview-first). Injections are one unified list — one prompt per target (Global, or a model/combo name, optionally scoped to a single API key) — with a live stack preview showing exactly what one request would receive, in order (global → key → model → model+key). Every row is labeled by name kind — Combo name / Real model / Custom name — matching is three-form (the name requested, the resolved provider/model, the bare model id; first hit wins), and every section carries a small info icon opening a detailed "How it works" modal written in the original's voice. The built-in tester sends a real request through the router (single or A/B) and returns a plain REFUSED / ANSWERED verdict. The page now lives in the header's page map like every original page (title and skull icon in the navbar), and carries a blue PRO badge in the sidebar.
  • Custom-name pairs: a custom name (a combo such as dpsk_un) and its prompt injection are edited together. In the injection form, a combo-backed name shows its Real models as an editable chip set — the same multi-model editor as the Combos page — and saving renames/remodels the combo and saves the prompt as one action; the reverse works too (start from a real model, give it a custom name). End users only ever see the name they called.
  • Auto proxy for connection tests: with the new toggle on the Providers page, a connection that has no proxy of its own borrows one from the active standard proxy pools when tested; if the borrowed proxy fails its pre-check, the test falls back to a direct connection instead of failing the key. Explicit per-connection proxies keep their hard-fail semantics. Chat traffic is untouched.
  • Usage page, hardened and completed: usage stats no longer expose full API keys (masked + hashed buckets), live updates carry only the fields that change, zero-token requests are shown honestly with an undercount footnote, and the page gains CSV export of the loaded breakdown, a custom date range, a reachable Logs tab, and model/status filters in Details.
  • Provider models, auto-detected: a compatible provider's model list is read from its /models endpoint — detected models appear as one-click chips (with Add all and Refresh) instead of a blind import; the model picker also lists every Prompt Injection name as its own section, so an injected name can join a combo without manual copying.
  • Interface polish, in the original's language: the Dark Pro theme goes flat — solid surfaces, hairline borders, shadows only as one soft layer on floating elements (faster to paint, easier to read); the header now shows your display name (fixed handwriting style) with theme/preset/accent — including a free custom accent color — gathered into the header menu; the sidebar's modder credit and socials sit beside the window controls; dialogs render through a portal and clamp to the viewport, so they can no longer be clipped by the header. On the Providers page, Test All is a real, stoppable job and not-yet-connected providers collapse into a compact list; on the Combos page, model chips expand in place, the header gains search + filters, and the Vision/Audio pools can be emptied.

9Router Pro v0.5.104-pro.4.3 — Key Health removed

Choose a tag to compare

@giienew giienew released this 21 Oct 03:39
  • Key Health page removed: at the owner's call — per-key testing and management already live on the Providers pages, and the standalone page duplicated them. The /dashboard/key-health page, its API route, and its repo helpers are gone; everything else from pro.4 (Anti-Flaky Guard, backup completeness, token-saver upgrades) is unchanged.