Commit Graph
439 Commits
Author SHA1 Message Date
yetone 7a030fa91c provider: a Grok subscription shows its allowance — the account row and the Usage page read the CLI's own /billing credits: this period's share used (weekly for SuperGrok) with when it resets, and on-demand spending against its cap when there is one 2026-09-24 17:49:11 +08:00
yetone 20948e596f gateway: a Grok subscription (SuperGrok, X Premium+) works like a Cursor one — magpie runs the signed-in Grok Build CLI in a home of its own (none of the user's hooks, skills, rules or MCP servers; only search_tool/use_tool, reaching magpie's MCP tools), borrowing the user's token through magpie grok-token without touching their sign-in; the add sheet has a Grok tile that signs in with grok login's device code 2026-09-24 17:35:36 +08:00
yetone eaf0b55de1 site: the worker adds the Web Analytics beacon to each page itself — Cloudflare's automatic injection skips responses a worker returns, and since the www redirect every page is one 2026-09-24 17:34:37 +08:00
yetone c2a6d0bf8e site: www.usemagpie.ai redirects to usemagpie.ai on every page — the worker now sees each request, not only /api and /download, so the static pages stopped being served twice 2026-09-24 17:33:44 +08:00
yetone 545506e875 provider: an import link can name the vendor's own icon
magpie://import now takes icon=<https picture>: the vendor's logo, PNG,
JPEG, GIF, WebP, ICO or SVG. It is fetched once, when the user opens the
confirm dialog — never at parse time — into magpie's icons folder, and
falls back to the catalog's logo or a plain mark when the fetch fails.
An explicit icon= wins over whatever catalog or preset gave.

The fetch is guarded on the way out: https only, at most 1 MB, the type
checked, and the host is resolved at connect time with loopback, private,
link-local and reserved addresses refused, so a name that points back at
the user's own machine (or a DNS-rebinding trick) never connects. The
page and the dialog never load a remote picture themselves.

IconURL is a carrier between parsing and that fetch only; Save drops it,
so it never reaches providers.json.
2026-09-24 17:13:03 +08:00
yetone ecb084aa4e window: when a newer magpie is out, an Update pill sits before the header's icons — hover says which version, a click installs it (or restarts into one already downloaded); an open window checks again every 15 minutes 2026-09-24 16:46:06 +08:00
he_sk c879d8fffe provider: normalize Codex system input messages to developer 2026-09-24 16:44:07 +08:00
yetone c8130269c6 gateway: a Cursor subscription works like a Claude one — magpie runs the signed-in cursor-agent in a home of its own (no user hooks, only magpie's MCP tools allowed), streams its thinking and text, hands tool calls to the client one answer at a time, and a slow tool is collected with magpie_wait; the add sheet has a Cursor tile that signs in through cursor-agent login 2026-09-24 15:49:47 +08:00
yetone 4445d94042 window: the tabs and buttons in the header are plain clicks — only the header's empty space drags the window, instead of a native strip that dragged from anywhere across the top 2026-09-24 15:27:35 +08:00
yetone e00083a3f7 gateway: the model list can be searched — words match the id, the name and the provider, Escape clears it 2026-09-24 15:20:57 +08:00
yetone 65fdcb1a14 update: the download shows how far along it is — percent and megabytes in Settings — a dropped connection is tried twice more, and a failure says why instead of only that it failed (#21) 2026-09-24 15:07:35 +08:00
yetone fb19c5d246 gateway: parallel tool calls turned into Responses keep their own call ids — each one took the next call's id and the last two shared one, which upstreams then refused as a duplicate tool_call_id; a thought sent under both reasoning_content and reasoning comes out once (#18) 2026-09-24 15:04:58 +08:00
yetone b9a591d22b gui: take back the update pill and import-icon hunks that went out with the last commit — they are still being worked on 2026-09-24 15:02:39 +08:00
yetone 407afee63d providers: a key's protocol is picked from a small menu that says what each choice is for, instead of the system popup; opening a provider no longer folds the add-provider gallery under it, and closing its dialog keeps the page where it was 2026-09-24 15:01:48 +08:00
yetone f3b66c4784 provider: a key can be made for one protocol — for relays that hand out one key for Anthropic and another for OpenAI; the gateway uses each key on its own endpoint only and sends Claude models to the Anthropic key, GPT models to the OpenAI one, translating when it must 2026-09-24 14:54:56 +08:00
yetone 64d3a1c23a provider: several subscription accounts in use at once, each with its usage — tick more Claude or ChatGPT accounts and the gateway moves to the next when the first is out of quota; every account row shows how much of its 5-hour and weekly allowance is used 2026-09-24 14:46:26 +08:00
yetone 6514b559aa provider: several accounts of one provider in use at once — tick every key to use; requests go to the first, and when it is out of quota or rate limited the next ticked key takes over before any fallback model 2026-09-24 14:36:39 +08:00
yetone abc5962600 provider: every provider can hold several accounts — keep more than one API key, name them, and switch which one is in use from the editor 2026-09-24 14:32:54 +08:00
yetone b19f3dbabe provider: add a Claude or ChatGPT subscription from magpie itself — it opens the vendor's sign-in, takes the account when it comes back and lists it with the others, one click from being in use; magpie accounts add <agent> on the command line (#15) 2026-09-24 14:26:37 +08:00
yetone 829d52f75a provider: a custom provider can name several catalogs (catalog=openai, deepseek) — a gateway reselling many vendors gets names and reasoning levels for all of them, prefixed ids like deepseek/deepseek-chat included (#17) 2026-09-24 14:10:53 +08:00
yetone 08c3d1ff4c gui: the refresh icon spins cleanly — on a layer of its own, so WebKit leaves no ghost arrows, and it finishes its turn instead of snapping back (#16) 2026-09-24 14:08:57 +08:00
yetone 435d65882b gateway: fallback — when a provider is out of quota, rate limited or down, a request goes to the next model you listed for it, before any of the reply is sent; set it in the provider editor or with magpie provider fallback 2026-09-24 14:04:42 +08:00
yetone 5da0d0d973 provider: several Claude Code and Codex subscriptions — magpie remembers each account it sees signed in, and switches the agent between them in the editor or with magpie accounts (#15) 2026-09-24 13:55:25 +08:00
yetone a6a3ffbe4b site: a sponsor spot under the hero, with 鱼鱼连线 (YYLX AI Router) 2026-09-24 13:47:54 +08:00
yetone 61004668ac provider: a custom provider can have its own icon — a picture of yours (PNG, JPEG, SVG…) or any built-in one, in the editor or with magpie provider icon (#12) 2026-09-24 13:10:45 +08:00
yetone 931b16604e gui: the provider editor keeps what you typed when the window comes back (#13), and shows save errors inside itself (#14) 2026-09-24 12:55:13 +08:00
yetone 240e687ea3 gui: gofmt 2026-09-24 12:50:51 +08:00
elonnzhang 3ffebeebb6 provider: custom request headers for custom providers
Extra HTTP headers, typed by the user, ride on every request magpie makes
to a plain key+URL provider — forwarded calls, connectivity tests, and
model-list fetches — applied after the auth headers. Presets and signed-in
agent accounts ignore them. Editable in the GUI (with a JSON value mode) and
via the CLI as header.X-Foo=bar.
2026-09-24 12:50:51 +08:00
yetone 2a90ed1030 usage: the page no longer waits on subscription quotas — they load on their own, in parallel, stale-while-revalidate (#6) 2026-09-24 12:49:51 +08:00
yetone 1f72ac82f0 net: requests go through a proxy — Settings → Proxy, or the environment's, or the system's (#8) 2026-09-24 12:48:01 +08:00
yetone fa0ff18643 gui: Settings → Tray icon chooses whether a click opens the quick panel or the main window (#7) 2026-09-24 12:43:21 +08:00
yetone d77e14701b provider: a signed-out Claude Code account goes away, and any account can be removed (#9)
Logging out of Claude Code can leave its credentials behind; claude auth status
now decides. Removing a Claude, Codex or Copilot account hides it from magpie
(the agent stays signed in); Add it back, or magpie provider add <id>, restores it.
2026-09-24 12:42:14 +08:00
yetone 14663c3a65 agent: Claude Code's opus, sonnet, haiku and fable tiers can each take their own model (#3)
Through magpie, each tier follows the main model until it is given one of
its own (ANTHROPIC_DEFAULT_*_MODEL; haiku also sets ANTHROPIC_SMALL_FAST_MODEL).
The GUI shows them under one tiers menu; the CLI takes magpie claude haiku <model>.
2026-09-24 12:38:41 +08:00
yetone 4069e955c1 site: import links need 0.1.8 2026-09-24 12:21:32 +08:00
yetone 3d4d4b9c2b site: Add to magpie docs, the /import landing page and badges
usemagpie.ai/docs/import explains import links, with a link builder and
buttons to copy; usemagpie.ai/import#… turns the fragment into a
magpie:// link and offers the download. install.sh registers the scheme
on Linux.
2026-09-24 12:17:47 +08:00
yetone 4bd3f3a4b5 import: magpie://import links add a provider after the user confirms
A vendor or relay can hand out a ready-made provider as a link. The app
registers the magpie scheme (Info.plist on macOS, HKCU on Windows, a
.desktop handler on Linux), a second launch hands the link to the running
one, and the window shows what the link would add, with the hosts the
prompts and key would go to, before anything is saved. `magpie import`
does the same in a terminal.
2026-09-24 12:17:45 +08:00
yetone 084480beec provider: OpenCode Go and Zen presets, with the session header OpenCode requires (#2)
OpenCode's gateway turns away requests that do not name their conversation
in x-opencode-session ('Request is missing x-opencode-session and cannot be
routed efficiently'), and magpie never sent it. Requests to opencode.ai now
carry the agent's own session id (OpenCode's x-session-affinity, Pi's,
Codex's session_id, Claude Code's) or, when the agent sends none, an id
derived from the conversation's first user message, stable across turns;
the provider test sends one too. OpenCode's docs ask exactly this of
third-party clients, along with their own User-Agent, which magpie already
sends.
2026-09-24 11:49:06 +08:00
yetone 1786bc3c3d agent: Pi offers xhigh and max for models that have them
Pi shows xhigh and max only for models whose thinkingLevelMap names them,
and magpie wrote just "reasoning", so a model whose top level is max (GLM-5.3,
DeepSeek) stopped at high and a max setting was sent as high (#5). Checked on
the wire: --thinking max sent reasoning_effort high before, max after. Picking
the model or thinking level in magpie again rewrites Pi's models.json.
2026-09-24 11:15:59 +08:00
yetone 24f9edafa1 gateway: relay developer messages to Chat Completions backends as system
Pi sends the developer role to reasoning models; relayed unchanged, DeepSeek
rejected every request (422 unknown variant `developer`), so Pi got no reply
at any thinking level above off (#1). Every backend, OpenAI included, accepts
system.
2026-09-24 10:10:37 +08:00
yetone 489c9fa431 site: screenshots keep their shape on narrow screens 2026-09-24 03:59:12 +08:00
yetone 2789e8ee67 gui: import sync 2026-09-24 03:37:14 +08:00
yetone 2bc760d86a gui: on Windows, show the window once its webview has loaded
Wails' 3s visibility fallback calls into WebView2 before a slow first
start has made the controller, and crashes on the nil pointer.
2026-09-24 03:36:50 +08:00
yetone 1e0d034ce5 gui: log the webview's errors
Wails exits on some WebView2 errors after handing them to the error
handler; the default one said nothing.
2026-09-24 03:31:31 +08:00
yetone 01e1971a7b site: downloads for Windows and Linux
The download button follows the visitor's OS, a platform list sits under
the final call to action, /download/{windows,linux}[-arm64] redirect to
the builds, and install.sh installs the Linux desktop app, with a menu
entry, when WebKitGTK 4.1 is present.
2026-09-24 03:22:02 +08:00
yetone 75cb192647 Desktop app for Windows and Linux
The Windows app cross-compiles (WebView2, no cgo) as a GUI program with an
icon, version info and a DPI-aware manifest; run from a terminal with a
command it borrows the console. The Linux app links GTK 3 and WebKitGTK
4.1. Off the Mac the app updates its own binary from its own build:
downloaded in the background, swapped in on restart or quit, and the
relaunched process waits for the old one before taking the gateway. The
window leaves room for traffic lights only on a Mac.
2026-09-24 03:22:02 +08:00
yetone b98af9acc6 site: the GitHub link no longer switches the theme
It shares the .theme style with the theme button, so the click handler
went on both. The handler and the tooltip now bind to button.theme only.
2026-09-24 03:04:09 +08:00
yetone 7198ba218d Revert "site: reshoot the panel, picker and providers on the current build"
This reverts commit 82e25aa2d7.
2026-09-24 02:56:46 +08:00
yetone 82e25aa2d7 site: reshoot the panel, picker and providers on the current build
The screenshots still showed the row's + and an older control column. New
shots, dark and light, off a throwaway demo config (the same DeepSeek/Kimi/
GLM/Qwen/MiniMax/OpenRouter/Anthropic/Gemini set). The panel is a hair taller
now, so its height goes 470 -> 476.
2026-09-24 02:54:41 +08:00
yetone 1fcd539f29 agents: keep the tray panel's control-sized pills
The lined-up columns only suit the wide window: in the narrow menu bar
panel a solo control spanning both columns is what keeps a long model id
readable, so scope the fill to body.window and leave the panel as it was.
2026-09-24 02:44:02 +08:00
yetone 07533b7f02 agents: line the model and setting controls up in two columns
The controls hugged their text and right-aligned, so a model pill sat in
a different place on every row and the chevrons never lined up. They now
fill a fixed two-column grid — model (or large model) on the left, the
second setting on the right — so every chip and chevron lines up down the
list. A single control keeps the left column, so the model always sits in
the same place.
2026-09-24 02:40:29 +08:00