61 lines
3.2 KiB
Go
61 lines
3.2 KiB
Go
// Package agentenv names the environment variables through which an agent
|
|
// really installed on this machine reaches magpie: the one list a test
|
|
// sandbox clears, so that a test meets only the agents it put there itself.
|
|
//
|
|
// A sandbox fakes magpie's own folders through HOME, USERPROFILE and the XDG
|
|
// variables (appdir decides those), and an agent's folder through the
|
|
// variable that agent's own CLI reads before it falls back to its folder in
|
|
// the home: CLAUDE_CONFIG_DIR, CODEX_HOME, QODER_CONFIG_DIR and the rest.
|
|
// Any one of them left over from the developer's shell points magpie at a
|
|
// real agent, whose sessions and settings a test then reads — and, where
|
|
// magpie writes what it wires, writes into (#522). Qoder's CLI sets both of
|
|
// its variables for every child it starts, and magpie manages Qoder, so
|
|
// writing magpie from inside Qoder was one way to meet this.
|
|
//
|
|
// Each package keeps its own sandbox, because a test in internal/sessions
|
|
// cannot import internal/agent, which imports it, to ask which variables
|
|
// there are; this is the list they all clear. A name here is one magpie
|
|
// reads, and TestVarsAreRead says so, so a variable magpie stopped reading
|
|
// does not linger — that is how GEMINI_CLI_HOME and OPENCODE_CONFIG came to
|
|
// be cleared by a sandbox while OPENCODE_CONFIG_DIR, the one magpie reads,
|
|
// was not. What is deliberately not here: APPDATA and LOCALAPPDATA, Windows'
|
|
// folders rather than an agent's, which a sandbox sets to a folder of its
|
|
// own instead of clearing; and CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC, a
|
|
// behaviour flag whose one test sets it on purpose to read what magpie then
|
|
// does.
|
|
package agentenv
|
|
|
|
// Vars are the variables, by the agent they belong to. A sandbox clears all
|
|
// of them, and sets back the ones its own fixtures need.
|
|
var Vars = []string{
|
|
// Claude Code, Codex and Copilot CLI
|
|
"CLAUDE_CONFIG_DIR", "CODEX_HOME", "COPILOT_HOME",
|
|
// Gemini CLI's session/config home
|
|
"GEMINI_CLI_HOME",
|
|
// Cline: its folder, its data, its sessions and its MCP settings file
|
|
"CLINE_DIR", "CLINE_DATA_DIR", "CLINE_SESSION_DATA_DIR", "CLINE_MCP_SETTINGS_PATH",
|
|
// Pi and its forks (OmO, Senpi), whose profile and config are apart
|
|
"PI_CODING_AGENT_DIR", "PI_CODING_AGENT_SESSION_DIR", "PI_CONFIG_DIR", "PI_PROFILE",
|
|
"OMO_CODING_AGENT_DIR", "SENPI_CODING_AGENT_DIR",
|
|
// omp
|
|
"OMP_PROFILE",
|
|
// Qoder's two builds, the global site's and China's
|
|
"QODER_CONFIG_DIR", "QODERCN_CONFIG_DIR",
|
|
// Grok: its home, and where its CLI is installed
|
|
"GROK_HOME", "GROK_BIN_DIR",
|
|
// Kimi Code and its shared folder
|
|
"KIMI_CODE_HOME", "KIMI_SHARE_DIR",
|
|
// MiMo Code, MiniMax Code, OpenHanako, Hermes, dsh, WorkBuddy
|
|
"MIMOCODE_HOME", "MINIMAX_DATA_DIR", "HANA_HOME", "HERMES_HOME", "DSH_HOME",
|
|
"WORKBUDDY_CONFIG_DIR",
|
|
// T3 Code's base folder (its settings in userdata/)
|
|
"T3CODE_HOME",
|
|
// Cursor's CLI: its config folder (its chats) and its data folder
|
|
"CURSOR_CONFIG_DIR", "CURSOR_DATA_DIR",
|
|
// OpenCode and OpenChamber
|
|
"OPENCODE_CONFIG_DIR", "OPENCODE_DB", "OPENCHAMBER_DATA_DIR",
|
|
// Droid's home, Windsurf's API server, ZCode's credential seed: what
|
|
// makes an account or an installation visible that the test didn't make
|
|
"FACTORY_HOME_OVERRIDE", "WINDSURF_API_SERVER_URL", "ZCODE_CREDENTIAL_SECRET",
|
|
}
|