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
..
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
2026-09-27 12:53:16 +08:00
2026-09-28 01:12:46 +08:00
2026-09-28 01:53:08 +08:00
2026-09-24 17:35:36 +08:00
2026-09-27 17:51:38 +08:00
2026-09-28 14:54:04 +08:00
2026-09-26 22:25:28 +08:00
2026-09-26 22:25:28 +08:00
2026-09-28 14:01:27 +08:00
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
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
windows: the desktop app no longer opens a console window for every command it runs (#54) — it is linked as a GUI program and has no console, so each console CLI it started (devin auth status and models list, devin acp for every Devin turn, claude, codex, cursor-agent and grok probes and runs, grok login) was given a new console by Windows, and a Windows Terminal window with it, some every few seconds while the app sat idle. Every command magpie runs is now made through internal/proc, which starts it with CREATE_NO_WINDOW when magpie has no console of its own: the child gets a console without a window, and its output, which magpie always pipes back, arrives as before. A magpie run in a terminal (magpie serve, the TUI, the desktop app started from one with a command) has one, and its children share it as they did, so Ctrl+C there still reaches them. The relaunch after an update keeps its DETACHED_PROCESS, added to rather than replacing the flags it was made with, and a test fails on any command made with os/exec directly, so a new one can't bring the windows back
2026-09-25 14:04:44 +08:00
2026-09-28 11:20:14 +08:00
providers: a provider's id can change — its editor has an ID field (magpie provider set <id> id=<new> in the CLI), and renaming it moves what named it by the old one: the agents on its models (each spelled its own way, recorded as magpie's), the routing groups' members, rules and classifier, other providers' fallbacks, which agents are shown it, and the vendor's fetched list. The old id stays with it, so an agent still running on the old config reaches it, a profile saved before applies to the new id, and its usage so far is counted under the new one. Asked on Discord
2026-09-26 20:22:30 +08:00
2026-09-28 16:31:11 +08:00
gateway: count_tokens counts the masked prompt, and a count that cannot be had is told apart — the count Claude Code asks for before every turn went to the vendor as the conversation was written, so Mask secrets was defeated on every one; it now goes masked, the same prompt the turn it counts sends. An endpoint that doesn't implement counting (404/405/501, or a 400 that says so, in English or Chinese) falls back to the local estimate as before; a limited key or a broken connection yields to the next checked key and rests the one that failed, as a generation would, while a client's own cancellation rests nothing; and a real error — a wrong key, a prompt past the model's context, an image it won't take — reaches the agent. The gateway tests are isolated from the machine now (a temp HOME, inert stubs for the sign-in CLIs and the keychain) so a cache that outlives a test can't reach a real login, and the redaction tests' cold starts run in parallel. (#103)
2026-09-27 18:58:23 +08:00
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
2026-09-28 09:27:49 +08:00
2026-09-28 00:07:47 +08:00
2026-09-27 19:39:45 +08:00
2026-09-27 23:02:36 +08:00