Commit Graph
289 Commits
Author SHA1 Message Date
elonnzhang a2cd79da96 fix(gui): align provider status dots on providers page (#146)
Give the .key status pill a fixed min-width and hidden overflow so its
left edge (and the green ::before dot) lands at the same x on every
provider row, instead of shifting with label length.
2026-09-28 17:49:50 +08:00
yetone b552027932 panel: a balance shows its provider's logo before its name (这里也要有Provider的Icon), the generic one for a provider without; the footer is even to the eye (底栏的上下间距是一致的吗) — its rule was a pixel of the space above and the panel's rim takes about one off the space below, 7 against 5 on the Mac, so it's 1+5 over and 7 under now; and a picker comes and goes like an iOS menu (Modal Selector的弹出跟关闭都要有丝滑的动画) — it grows out of the button's middle from .94 on a quick-to-answer curve with a long soft settle and no bounce, .42s, shown at once as it fades in over .18s, and closing leaves its likeness (scrolled and typed as it was, no ids, inert) to fade and sink back toward the button over .22s while the real one is put back at once; under reduced motion it only fades in 2026-09-28 17:49:07 +08:00
yetone 1ae838fc98 gateway: no Add to Cindy — the Gateway view's connect card no longer has a button for one app, which read as an advert and showed whether or not Cindy was installed; the link, its strings and the cindy:// allowance on /api/open go with it 2026-09-28 17:45:39 +08:00
yetone 23f1db6dba panel: the model's logo on a row's hover comes in on the row's spring (这里的icon出现的时候的动画有点太突兀了 / 像iOS的动画一样丝滑) — its box opens from nothing to a real width measured as the pointer comes onto the row, not a grid column going 0fr→1fr, which WebKit doesn't lay out frame by frame, so the logo jumped to its size over the words; the logo sits against the words and fades and grows in from their side a beat behind the box, .46s open, and goes first on the way out, .36s; the box's padding is counted in its width now, so the leftmost disc's ring is whole; none of it moves under reduced motion 2026-09-28 17:39:05 +08:00
yetone e6e09aa348 panel: nothing is shaved at an edge (竟然有裁边 / 上面这个border也被裁掉了) — the model's logo on a row's hover comes in as its column opens from nothing to its own width, so a stack of three is as whole as one, with its clip padded past the discs' rings; and the tab's view, which scrolls and so clips at its own top, has the 2px the card's ring outside its box needs, taken from the gap under the tabs. usage: an account's last allowance read is kept (quotas.json beside magpie's settings) and shown in place of one that can't be read for a reason that says nothing about the account — Anthropic rate limiting its usage endpoint, a 5xx, a timeout — across restarts too, with its windows that have reset since starting again from nothing and a tooltip saying when it was read; a reading that comes back is used at once, and a sign-in gone bad is still said (因为rate limit获取不到用量的情况下,能否先暂时用上一次获取到的用量顶替着) 2026-09-28 17:34:08 +08:00
yetone f8be98bc8a gui: a dialog's head and buttons stay put and only the fields between them scroll — openModal lays an editor out as head, body, bar (the fields moved into .ebody, the only part that scrolls, and a re-render keeps its place), and the head and the button bar are the same 48px with what's in them centred, so they sit the same above and below (上边栏跟下边栏要固定着,只有内容区可以上下滚动 / 上下间距要保持一致) 2026-09-28 17:30:39 +08:00
yetone 9661b8f302 gui(routing): on a wide window the request list and Accounts and keys sit side by side at the same width — they were 1.25fr to 1fr, the left wider than the right (reported by @duanckham on X) 2026-09-28 17:28:14 +08:00
yetone f6301b0837 panel: a shut agent row is its 36px again — the opening part now always there sat in a second grid row under the row's 9px row gap, so every row had a strip beneath it and its line sat high (每个Item的上下间距竟然不一致); the tab card glides — the panel's height changing on a tab was taken for a resize and the card put still, cutting its glide off, so now only the bar's width changing puts it; and a row opens and closes on a critically damped spring fitted to a cubic-bezier (.25,.3,.1,1), .48s open and .4s shut, with the panel's edge on the same curve and time: it sets off gently, settles without a tail, what's inside comes down into place as it clears and is gone first when it shuts (展开有点突兀,折叠有点油腻 / 像iOS动画一样) 2026-09-28 17:24:14 +08:00
yetone 3f3cdff119 stats: magpie counts its users — once a day a running app or magpie serve sends PostHog (the Magpie project) one "magpie active" event under a random id made up on this computer (~/.config/magpie/install-id), with the version, the system and the architecture and nothing else, no person profile kept; off in Settings → Privacy → Count me as a user, or with DO_NOT_TRACK=1 or MAGPIE_NO_STATS=1, and never from a build from source; the README says what goes 2026-09-28 17:23:41 +08:00
yetone 25aae87511 panel: things move as they change — the tab picked has a card that glides to it; an agent's effort is a drawn slider whose knob and fill glide from stop to stop; a row opens and closes by easing its height, the panel's edge moving with it over the same time and curve; hovering an agent brings in its model's logo beside the name; Add provider scrolls the window to the sheet it opens; and a reply that isn't JSON shows its own words rather than WebKit's "The string did not match the expected pattern" (切换Tab不是丝滑的左右滑动 / 这又是啥报错 / 展开折叠也要有丝滑的动画 / hover显示模型图标 / 自动滚动到展开内容顶部) 2026-09-28 17:08:29 +08:00
Leon Zhao 82b0239dd0 fix: keep session filter menus open while scrolling (#140) 2026-09-28 16:56:10 +08:00
yetone acd00dc4fb panel: an open agent's effort is the effort picker's slider — its name and level over a thin track with a dot per stop, the ends named under it; a level shows at once, the row's bars with it, and is written after in order, so the agent's slow config write no longer holds the control for a second and a half (巨卡 / 变成之前的那种滑轨样式) 2026-09-28 16:51:53 +08:00
yetone add95706d3 panel: the tabs lose their grey track — only the tab picked is a card, the others plain text on the panel (能否去掉背景的灰色) 2026-09-28 16:48:52 +08:00
yetone b990735823 agent: RTK isn't given to OpenCode 2 — rtk init --opencode writes a plugin shaped for OpenCode 1 (a named export, no default {id, effect|setup}), which OpenCode 2 refuses to load with 'Plugin must export a default definition with an id and an effect or setup function' (rtk-ai/rtk#4311, still so in rtk 0.50.0); with opencode --version at 2 or later the Library shows 'Not for OpenCode 2' and won't switch it on, while a plugin already there can still be switched off and taken out (ARNO) 2026-09-28 16:36:01 +08:00
yetone e753cbafc5 panel: as drawn in A and C, strictly — the tabs stay put above what scrolls; an agent's line is its icon, name, model in words, its effort as three bars (faint when default) and a chevron that turns down when open, all in fixed columns; open, it shows a Model field with its label and a segmented effort control under the name; Show N more sits left, as a quiet line; the footer is one hairline over even padding, with when usage was fetched on its left on the Usage tab; usage vendors are small caps headings with their accounts or plan on the right, each account a card with its reset times under it and a ring per window, balances two to a row (你没有严格按照设计稿来实现呀 / 底栏中上下间距竟然都不一致) 2026-09-28 16:34:58 +08:00
yetone 9687f3d297 provider: WorkBuddy is a subscription — Tencent's CodeBuddy plan, signed in as WorkBuddy does, its own account read too
WorkBuddy (CodeBuddy Code's desktop app) keeps its signed-in session in
<shared data>/auth/workbuddy-desktop.info, plain JSON while credential
protection is off (its default); magpie reads that account, never writes
it, and skips it when the tokens are encrypted at rest. Further accounts
are signed in with WorkBuddy's own external-link flow (auth/state, then
auth/token polled until ready, then login/account) and kept in
logins.json. The plan is served OpenAI-compatibly at copilot.tencent.com
/v2 under the account's access token, with its id and domain in headers
(X-User-Id, X-Domain), exactly as WorkBuddy sends them; a near-expired
JWT is refreshed as WorkBuddy does, and a magpie-signed-in one's refresh
is written back beside it while WorkBuddy's own file is left untouched.
The models are its CLI agent's coding picks, and the credits come from
its resource summary as one window.

A card in Providers' subscription list signs in and shows the accounts;
the Provider is one of the account ids and joins the usage rollup.
2026-09-28 16:31:11 +08:00
Ns2Kracy 3bc9a744c8 Fix Settings segmented controls replaying thumb animations (#135)
* Fix segmented-control animation replay in settings

Scope the sliding-thumb cache to each control instead of sharing it across controls with identical options. Keep an existing thumb in place during rapid clicks so CSS continues its transition from the current position; a newly rendered control starts from its own last selection.

* Preserve thumb slide across control redraws
2026-09-28 16:25:04 +08:00
yetone b9a240864b settings: a theme picked while the window's state was on its way stays picked — coming back to the window reads its state, which can take seconds, and a read that a change of settings overtook put the old theme back when it came in, the picker showing the new (Light chosen, still dark); such a read now keeps the settings the page has. Saves go one after another, each sending what the page was drawn with plus its own choice over those before it: two quick ones (a theme, then the language) each sent the page as drawn, the second undoing the first, and their answers could land in either order 2026-09-28 16:19:00 +08:00
yetone ebc33c721b tray: a click on the bird flaps it — the wing beats twice and the tail flicks up once, 16 frames over about half a second (build/icon/gen.go tray-flap bends the outline about the tail's root and the shoulder, eased, so it stays one line); and the usage beside it no longer sits hard against it, a thin space between (Image #13: 图标与用量之间没有任何的间距) 2026-09-28 16:15:40 +08:00
yetone ec10f99113 panel: three tabs — Agents, Usage, Profiles, the one last open kept; an agent is one quiet line, its model in words and its effort as bars, that opens in place to its pickers (one at a time); usage is each vendor's accounts as cards under its name, a ring per window (amber from 90%) with the plan and when each window starts again under the account, balances as figures two to a row; the Usage tab only when there is usage to show, and the window view is as it was (A+C) 2026-09-28 16:09:55 +08:00
yetone 9e0fbd6ef7 ui: a segmented control's thumb slides only when it is the one picked — where a thumb was is kept per control, known by its place, not per set of options: every Off/On on Settings had the same, so a click on one, or opening the page, slid the others in from where it had been 2026-09-28 16:03:36 +08:00
yetone 3472235772 panel: usage rows all the same height — the account over one quiet line (when the plan ends, when its fullest window starts again, or what went wrong), its windows' names and shares over their bars in two columns, a hairline between accounts; reset times per window and long errors move to the tooltips, and a balance spans both columns, right-aligned, so its label isn't cut (还是乱呀) 2026-09-28 15:52:33 +08:00
yetone 29c706d1e7 provider: Tencent Cloud Token Plan is a preset — TokenHub's coding subscription (its general and Hy plans on one sk-tp- key, from console.cloud.tencent.com/tokenhub/tokenplan), served at its own endpoints under api.lkeap.cloud.tencent.com/plan: v3 for chat completions and anthropic for messages, no Responses (its Codex page asks for wire_api chat); models.dev lists only its Hy models, so the preset gives the plan's (tc-code-latest, GLM 5–5.3, Kimi K3 and K2.7 Code, DeepSeek V4, MiniMax M3 and M2.7, hy4-preview, hy3) until the plan's own list is fetched, and an entry imported at those endpoints is the preset 2026-09-28 15:41:57 +08:00
yetone a285354560 panel: usage lines up — every account's windows sit in two columns shared down the list, each a name and share over its bar with when it starts again under it; one window takes the last column, a balance too, and what went wrong spans both, over two lines at most (Wey Gu: 有点点乱) 2026-09-28 15:36:10 +08:00
yetone 23847a8a56 library: hundreds of skills no longer make the Skills tab crawl — they're grouped by the GitHub repository they came from (owner/repo, how many, an Update N for those a check found changed, which agents have all or some of them, and a link to the repository), those on this computer in a group of their own, each group folded to its heading line and opened with a click, remembered in the browser; with more than 40 skills from several places the groups start folded. A filter over the skills (name, description, repository) shows when there are more than 8, opening the groups that have matches, and a filter or a fold draws only the groups again, not the page. Every row was drawn with a chip for each agent, 4400 icons for 400 skills, and each redraw, scroll and hover laid out and painted all of them: a row out of view is now skipped by the browser (content-visibility) and an agent's icon is made once and copied rather than made afresh (and probed) for every chip. On 400 skills from 6 repositories and 100 local ones, drawing the tab went from 131ms to 17ms folded (55ms with every group open), a pointer sweeping the list from 1.4–1.65s of main-thread work to 0.4s (0.67s all open), and a 6000px scroll from 0.65–0.71s to 0.29s (0.49s) 2026-09-28 15:35:54 +08:00
yetone cd373b19fb panel: the agents' names have their room back — since a row's squares sat side by side (af840b0) the pickers grew by Codex's second square, and on the tray's panel every name was cut to its first two letters (Co…, Ge…, Op…); there the pickers keep the width they had and the model's column gives the square its room 2026-09-28 15:24:59 +08:00
AronnaxandClaude Opus 5.5 7931723d79 cli: 新增 magpie webdav,在终端里开启、修改和触发 WebDAV 同步 / add magpie webdav to turn on, change and run WebDAV sync from the terminal (#127)
* cli: magpie webdav — WebDAV sync from the terminal, what Settings › WebDAV sync does, for a machine with no window (WSL, a server over SSH)

magpie webdav shows it; on <address> [user=…] [password=…] [keys=no] [agents=no] [library=no] turns it on and syncs at once, asking for the passphrase (and the password, when a user has none); set k=v… changes what is given and keeps the rest; now, dismiss and off are the page's Sync now, OK and Turn off. Through the same davsync.Configure, Now, Dismiss and Off.

A sync, Off and Dismiss hold a lock the system keeps on sync.lock (flock; LockFileEx on Windows): the gateway's sync every 3 minutes and one from a terminal — or from the app's window while magpie serve has the gateway — would each save sync-state.json over the other's. The system lets it go when the magpie holding it ends, however it ends.

Configure keeps the saved password only for the same server (scheme and host) and user: an address moved to another server, or another user, no longer takes it there — in the app too, where a new address with the password left empty was sent the old one.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* davsync, cli: from the review of #127 — the setup read again under the lock, Configure locked too, the password never an argument, one left behind asked for, a wait that runs out said in the status

Now reads the setup again once it has the lock: one that waited while another magpie turned sync off went on with the setup it had read, and saved sync-state.json back after the Off. Configure takes mu and the lock too, after a sync in progress.

magpie webdav takes neither the password nor the passphrase as an argument: password= asks for it, as passphrase= does.

Configure with the saved password left behind — another server or user, the password empty — says to type it and saves nothing, where the Settings page dropped it and the sync failed with 401 under a field that still said saved.

A wait for the lock that runs out is davsync.ErrBusy. Dismiss returns it, and the davsync routes put ErrBusy from a sync in the status they answer with, where the page shows a sync's failures; Save's own errors stay in its form, what was typed in it kept.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* davsync, cli: the lock before mu, a wait bounded under the page's, one called off not called busy, the password rule in one place, a bare address with = in it

The lock comes before mu everywhere, so a wait for another magpie never holds mu, and Configure, Off and Dismiss wait for it 30 seconds at most, less than the Settings page gives a request: before, a request could hang on mu and then on the lock for minutes.

A wait for the lock called off, as when the page is closed or the gateway stops, is its context's error, not ErrBusy: nothing said another magpie was syncing.

What becomes of the saved password is decided in one place, davsync.SavedPassword, which Configure and magpie webdav both go by, where the two had rules of their own that had come apart: an account with a password and no user name, moved to another server, had its password dropped with nothing asked, and the sync failed with 401. It is asked for now, as for an account with a user.

magpie webdav takes a bare argument with :// in it as the address, = in it or not: https://host/dav?token=… was read as a field.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-28 14:54:04 +08:00
yetone f3db861b63 agents: Codex's sign-in picker shows each choice's whole explanation, under its name, rather than cut off after a few words; the Chinese reads which one is the default and what the Codex app shows 2026-09-28 14:40:32 +08:00
yetone af840b012f agents: a row's small squares sit side by side — Codex's sign-in square wrapped under its subagents one (the extras column held one); the squares share one cell, the column as wide as the row with the most 2026-09-28 14:37:09 +08:00
yetone 91aacfba1c tray: the menu bar's usage says what the panel does — a subscription's quotas are served stale while they refresh behind, and the menu bar, reading them every few minutes, showed each refresh only a tick later (53% beside a panel's 57%); it reads them again the moment a refresh lands 2026-09-28 14:16:42 +08:00
yetone 6e677aabb6 codex: a thread started with magpie as Codex's provider opens again, and Codex can be kept in its API state (#129) — signed in to ChatGPT, a magpie model is routed with openai_base_url (c3931c9), and moving there from magpie as the provider (an older magpie's wiring, or one made while the account had used its allowance up, bd5bf42) took [model_providers.magpie] away, so the Codex app, which resumes a thread on the provider it was started on, said "Model provider magpie not found" for every one of them and came back signed in to ChatGPT. The table now stays once written, a base-URL wiring writes it too, and a sync puts back one an older magpie took away. Codex gets a sign-in field (magpie codex login api, a small square beside its pickers): api keeps magpie as Codex's provider while it is signed in, the app in its API state with magpie's models only; ChatGPT, the default, is as before 2026-09-28 14:11:17 +08:00
yetone e02d3f28d7 library: a project's agents can have some of the library's skills as the project's own — under Skills, In projects takes a folder (the system's picker in the app, a typed path anywhere) and each of its skills gets agents' chips; magpie links the skill into <project>/.claude/skills for Claude Code and <project>/.agents/skills for Codex, Gemini CLI, OpenCode, Pi, Cursor and Copilot (the agents documented to read it; MiMo Code, Crush, ZCode, DeepSeek Harness and oh-my-pi aren't, so they're left out), or copies it when the project asks for copies, a copy made again whenever the library's skill changes (updates included). What it places is listed between magpie's marks in the project's .gitignore, made if there was none; taking a skill or the project away removes only what magpie placed, its lines and the folders it made once empty, and a folder of the same name that isn't magpie's is left as it is and said so. The home folder, or one whose project skills folder is an agent's own, can't be added 2026-09-28 13:34:17 +08:00
yetone 87a8330115 ui: Hide emails, once on, is a shade darker and no more — the purple fill and ring made a page tool the loudest thing on Routing and Usage; its struck eye and its words already say it is on 2026-09-28 13:29:54 +08:00
yetone 41cbe54a14 library: which skills from GitHub have changed there can be checked — Check for updates asks GitHub for the last commit to each skill's folder (one request per folder, a repository's skills together; once GitHub limits requests the rest are left unknown, each skill's trouble its own) and a changed one carries an Update available pill whose tooltip has the commit's summary and date, a click opening the changes on GitHub; Update N fetches just those. The library keeps a hash of a skill's files as fetched and, once a check finds GitHub's files to be the same, the commit they're at, so a later check needs only the API; a skill installed before this is compared by its files, the repository fetched once 2026-09-28 13:11:25 +08:00
yetone c5e7955937 i18n: tokens reads token in Chinese on the usage tiles as well — a second entry for it, the routing rules', said tokens and won 2026-09-28 13:06:24 +08:00
yetone e3984b2442 sessions: history by day — the Sessions view gets a range (today, 7, 30, 90 days or all), model and folder pickers, tiles for the range's cost, tokens, cache read and active time, and a daily bar chart of tokens or cost (weekly past 92 days). Each session file's cached reading now keeps its usage per local date and model, a message counted on the day of its timestamp, so a session that runs past midnight splits across both days and a file read on from where it stopped adds only what's new; Claude Code's repeated usage for one message moves with it to its last block's day. Totals come from every session file in the range, not the latest 200 the list shows: GET /api/sessions/stats?days=N returns each day's rows by agent, folder and model with their cost, so the view filters without asking again, and files last written before the range aren't read at all. Active time is the sum of gaps under five minutes between one line and the next in a session's main file (subagents run alongside it, so theirs aren't added), credited to the later line's day. The cache is version 2 and records the time zone, a change of which reads the files again; the list no longer drops the cached readings of files it doesn't show, only of files that are gone, and changed files are parsed in parallel. On 4000 synthetic files (880MB, 180 days) a cold read takes 0.74s, a warm one 22ms, a reload from the 4.7MB cache 49ms 2026-09-28 13:05:56 +08:00
yetone c4596cf615 library: an agent's chip on a skill or MCP server row can be clicked again and again without waiting — each click lights or dims it at once, a row writes one list at a time and sends the clicks made meanwhile together, so the agents end up as last clicked; a chip clicked a second time no longer drew the whole page again (its handler, carried over from the redrawn chips, looked at a row no longer on the page), which made the window blink and the chips fold and spread under the pointer. A write magpie refuses takes back that row's clicks and says why, and coming back to the window redraws the page only when the library changed meanwhile 2026-09-28 12:54:23 +08:00
yetone 112471fb2d cursor: a model is put in Cursor's pool by its family — the server lists grok-4.8, the CLI asks for grok-4.8-high-fast, and the exact match put that one in Other Models; case and cursor- no longer matter, and a bare composer is Cursor's too. The pools read Cursor 模型 / 其他模型 in Chinese 2026-09-28 12:04:43 +08:00
SadWood 4425be9262 fix(gateway): 按模型匹配 Cursor 路由额度 (#125)
Cursor 的两个额度池和汇总值原先同时参与每个模型的路由计算,导致 Other Models 用尽时仍有额度的 Grok、Composer 和 Auto 也被判为用尽。按服务端名单及官方已确认的模型归属分别匹配额度池,汇总值仅用于展示,并统一额度名称。

路由用量按账号和模型分别保存,避免同一账号的不同模型覆盖用量及重置时间。补充额度池独立耗尽、模型别名、重置和路由排序的回归测试。
2026-09-28 12:03:58 +08:00
yetone 31169a17f6 agent: fx (fx.sh, Vercel Labs' coding agent) — its model picked in magpie like any agent's; a model through magpie adds magpie to ~/.fx/settings.json as a keyless provider of fx's own (openai-chat-completions at the gateway, auth none) with the catalog as its model_metadata, the model in use first so fx's 256-model limit never cuts it, and sets provider magpie and models.magpie; its own models stay as they are, and default takes magpie's entry out. fx sends no effort to such a provider, so there is none to pick. Tested live from a sandbox: fx 0.0.11 listed magpie's models and read and wrote files through several tool rounds on DeepSeek 2026-09-28 11:17:20 +08:00
yetone 880c755a2a gateway page: opened from a page that already had the providers, it is drawn from them at once rather than left as empty cards until the new list is in (#123) — the skeletons were only for a first load, so coming from Providers showed blank cards for as long as /api/providers took. And Claude Code's sign-in, asked of claude auth status (up to 5s) every 30s under a lock on that path, is served from the last answer while it is asked again behind it 2026-09-28 10:47:42 +08:00
yetone ddf2ef83f5 panel: a meter in the tray's panel turns used or left when clicked, as the Usage page's do, and says so when pointed at — the one setting for every meter and the menu bar (#124) 2026-09-28 10:11:42 +08:00
yetone e31a6a15b0 usage: the menu bar's usage is refreshed as often as asked — every 1, 3, 5, 10 or 30 minutes, 3 as before — and reads as used or left as the Usage page does; that choice is a setting now rather than the browser's, so the page, the panel and the menu bar agree, and Settings has it too; a browser's choice from before is carried over once (#122) 2026-09-28 09:27:49 +08:00
yetone 0686bdffa7 accounts: a magpie just started no longer holds every page and request for cursor-agent and devin — who their CLIs say is signed in is kept on disk (cli-identity.json), served at once on the next start and asked again behind it; only a first look ever, or one after a sign-in or out, waits for the CLI. The window's first read went from ~4s to ~0.15s here with both signed in, and the gateway page shows its skeleton, not blank cards, while the state loads (#123) 2026-09-28 09:21:24 +08:00
yetone 316803e260 warm-up: Claude accounts too — a Claude window, the 5-hour one and the weekly one, starts at the account's first request after it resets, so with Claude Code warm-up on (Settings: off, weekly, or weekly and 5-hour) the magpie serving the gateway sends each account one "hi" as its window starts over, through Claude Code itself (Haiku, none of its tools, settings or MCP servers, nothing kept on disk), a saved account with its own sign-in; once per reset, kept in claude-warmup.json, as Codex's is 2026-09-28 06:31:40 +08:00
yetone 1324b61fac quota: a relay's balance can be told by a sub2api panel, and one that tells none says so — a balance token that is a JWT (a sub2api panel's login token, for GET /api/v1/user/profile) is sent as a Bearer, a new-api access token still as it is, and the editor says which goes there; magpie quota <provider> on one with no balance endpoint gives a line saying it isn't configured and how, --json included, rather than an empty list, and an unknown name is an error 2026-09-28 03:28:17 +08:00
yetone 2d0058b9b9 providers: the context window field offers its usual sizes under it, one click each — 128K, 200K, 256K, 1M — and, where models take more than they are said to, each one's own most: Codex's GPT-6 and GPT-5.6 are said to hold 272K and take 872K when asked, a size nobody remembers, so one chip sets it for every such model (#120). The most is read from max_context_window in the list ChatGPT gives and in Codex CLI's cache 2026-09-28 01:53:08 +08:00
yetone de59782fba providers: Jev through Vercel's AI Gateway and Cloudflare's Workers AI — two presets, Jev · Vercel AI Gateway and Jev · Cloudflare Workers AI, route groups and pick their effort as TypeSafe's own does, each asked its own way: Vercel's evaluation-model with the model in a header, a noul asked as a boolean and a confidence taken from the probabilities; Workers AI's run of typesafe/jev at the account its API token works in, found once, out of Cloudflare's envelope. A key is checked by the gateway's free call (Vercel's credits, Cloudflare's accounts) 2026-09-28 01:43:09 +08:00
yetone 74cbac06ec gateway: the page is left as it is when nothing on it changed — coming back to the window no longer wipes it to placeholders and redraws, which put the reader back at the top; a reload draws again only what changed (the calls alone when only they did) and keeps where the reader was. The model list folds away under its heading, with its count, so Recent calls sits under Connect; the fold is remembered. Asked on Discord 2026-09-28 01:21:26 +08:00
yetone 6c9a0aa4d7 agents: OpenHanako — magpie is a provider there, chat completions at the gateway's /v1 under the key magpie-hanako with every model it serves, their windows, output, images and reasoning said; picking one makes it the primary agent's chat model, and default puts back the one it had and removes the provider, marked deleted as OpenHanako marks one it removes. While OpenHanako runs it goes through its local API (server-info.json's port and token), which reloads at once; otherwise into provider-catalog.json and agents/<id>/config.yaml for its next start. Asked on Discord; checked with OpenHanako's own provider registry and model manager, which list magpie's models and resolve the chat model to the gateway 2026-09-28 01:12:46 +08:00