Files
magpie/docs/subsystems
yetone 62d7cd7be3 sessions: recording gateway conversations is a setting card over the list, with what it keeps and where, and a labelled delete that shows only when text is kept (lee on Discord)
What changed: c9b82633 (#1355) put a bare "Record gateway conversations"
checkbox and an unlabelled trash icon on lines of their own under the agent
tabs, on every agent. They are now one card in the list's column, as wide
as the list: a switch (the app's lib-switch), its title, and a line that
says what is kept and where ("on this computer only, for up to 7 days
(256 MiB)", worded for on and off). "Delete saved conversations…" sits in
the card, says what it deletes, and asks in magpie's own dialog as before.
The card shows only where it applies: on an agent whose list has gateway
sessions, in gateway mode, or while recording is on or text is kept; not on
an agent without gateway sessions, nor in the Trash. The delete shows only
while some text is kept.

To know that, /api/sessions/manage marks gateway-only rows `gateway` and
says `recorded` (sessions.HasGatewayConversations: any file under
gateway-conversations; a folder that can't be read counts as holding some,
so it can still be cleared). New strings in zh, zh-TW, ja and de.
docs/subsystems/gateway-sessions.md says where the switch is and when it
shows.

Why: lee (Discord feedback, 1558248607751344220) said the controls' look
and place need a redesign: they read as stray, unaligned controls, and the
icon didn't say what it deletes.

Run: gofmt -l (nothing); go vet, GOOS=linux go vet -tags nogui,
GOOS=windows go vet (with and without -tags nogui) on ./internal/gui/...
./internal/sessions/...; go test ./internal/gui/... and go test -tags nogui
./internal/gui/... ./internal/sessions/... under a sandbox HOME: ok.
GUI: gateway-conversations (both tests, en/zh/zh-TW/ja/de, 1000/1400 and
390px) plus checkbox-look, click-scroll, gateway-mode, i18n-keys,
old-webkit, sess-agent-strip, every sessions-* test and
usage-sessions-agents-fit: 221/221 (default run) and 114/114 with
BROWSER=webkit. Not run: the whole GUI suite.
Fails without the change: with origin/main's sessions_manage.go,
TestGatewayConversationAPI fails "listing: …" (no gateway/recorded); with
origin/main's sessions.js/.css, every gateway-conversations case fails
(no .sm-record switch; "no bare checkbox bar under the tabs 2 !== 0").
2026-10-10 07:40:03 +08:00
..

Subsystem design references

These pages describe current responsibilities, runtime paths, state, and contracts. Start with the subsystem relevant to your task, then follow its source links to verify the implementation you change.

Subsystem Reference
Built-in subscriptions moving to plugins Provider and plugin ownership
Plugins that run on the gateway's requests and replies Gateway middleware
Claude subscription turns across Claude Code runs Claude subscription bridge
How the gateway picks a provider, key or account, and falls back Gateway routing and fallback
Gateway Session Aggregation Gateway Session Aggregation
Connecting an agent's config to the gateway, drift, disconnect, WSL twins Agent wiring
Providers, keys, subscription accounts, refresh and allowance Providers and accounts
Instructions, MCP servers, skills and RTK written into agents Library
Tray, panel, window, magpie web and the page's JSON API GUI app shell

A subsystem can span several packages or repositories. Its reference describes the behavior those parts provide together; it does not need to list every function.

Maintain a reference

Update the owning reference in the same PR when a change alters a documented responsibility, interface, state transition, runtime path, compatibility rule, or failure behavior. An internal refactor that preserves these contracts does not require a prose change.

Keep each fact in one reference and link to it from agent instructions or other pages. Link to source files and named symbols rather than copying implementation details that change frequently. Explain field meanings and constraints that signatures alone do not express.

For a new reference, include the responsibilities and boundaries, source of truth, main runtime paths, state transitions, important constraints, and existing verification commands. Include failure and compatibility behavior where relevant. Document current behavior separately from proposed changes; the proposal belongs in its issue or PR.

Describe a PR's semantic changes

For each affected subsystem, explain the observable change with its trigger and before/after behavior. Include changes to interfaces, state, compatibility, and failure behavior when relevant. Link the affected reference, implementation, and verification evidence. State when a refactor preserves the documented behavior.

For example, a change to plugin adoption should explain which migration state and account condition trigger it, which implementation handles requests before and after adoption, and which test exercises that transition.

This is an author-provided explanation that a reviewer verifies against the diff and surrounding code. It is not an automatically proven compatibility verdict.

Review a change

  1. Identify the affected subsystem and the actual runtime path, including plugin or built-in ownership.
  2. Compare the claimed before/after behavior with the base and head implementation. Trace relevant callers and state transitions beyond the changed lines.
  3. Check that changed contracts appear in the owning reference and that source links still resolve.
  4. Check that the cited tests or runtime evidence exercise the claimed behavior. Report checks that were not run.

A documentation update alone does not prove the implementation. Existing tests and runtime evidence remain necessary for behavior changes.