A Copilot account is now named "<login>" on github.com and
"<login>@<name>.ghe.com" on an enterprise's host (CopilotAccountName).
That name is its logins.json user, so addSideLogin, the own-account dup
check, switch, on/off, forget, the account lists, usage cards, routing
ids and per-account settings all go by login and host. The device-code
sign-in reports the account under that name, so the window opens the one
just added. Plan refresh for the editors' own account on an enterprise's
host matches it under the same name.
logins.json written before keeps working: a saved account on an
enterprise's host stored under its login alone (host only in its auth) is
read as login@host, keeping its id and token (copilotSavedName in
nameAlike). The editors' own account remembered by its login alone is
renamed in place, keeping its plan and its hidden mark (copilotRenamed).
github.com accounts are unchanged.
CLI: `magpie accounts switch|forget copilot` now works. It takes
login@<name>.ghe.com, the login with --host <name>.ghe.com (or
--host=), or the login alone when it names one account. An ambiguous
login lists the matches and asks for one. Switching says "magpie now
uses X", since the editors' own sign-in isn't changed.
Tests (new, each FAILs on the old code):
- TestCopilotSameLoginOnTwoHosts: mona on a.ghe.com and b.ghe.com,
through the device flow. Old: the sign-in reports "mona" and the second
overwrites the first.
- TestCopilotOwnAndSameNamedGHE: the editors' github.com mona plus
a.ghe.com's mona.
- TestCopilotLoginsBeforeHosts: an old-format logins.json. Old: listed
"mona* hubot".
- TestCopilotOwnGHERenamed. Old: own row still "mona".
- TestAccountsCopilotHosts. Old: "copilot": only Claude Code, Codex, ...
can be added and switched.
TestCopilotGHESignIn and TestCopilotCLIGHELogin now expect
mona_acme@acme.ghe.com.
Ran gofmt; go vet -tags nogui . ./internal/provider for GOOS=darwin,
linux and windows; go build ./...; GOOS=linux and windows go build
-tags nogui; go test -tags nogui -count=1 ./internal/provider
./internal/gui ./internal/gateway . under a temp HOME with pinned
caches, all ok; -race -count=5 on the Copilot account tests, ok. No GUI
asset changed, so no Playwright run. Not tried with a real GHE.com
account.