feat(coding-agent): expand ~ in shellPath setting (#6470)

getShellPath() now runs the configured shellPath through the existing
normalizePath() helper, mirroring getSessionDir(). This lets shellPath
point at a home-directory-relative shell wrapper (e.g.
~/.local/bin/agent-shell-sandbox) and resolves consistently across
machines and OSes with different home directories.

refs #6458
This commit is contained in:
Aaron Ky-Riesenbach
2026-07-09 14:23:06 -07:00
committed by GitHub
parent 3664806f2f
commit 1a2542b11b
3 changed files with 33 additions and 3 deletions
@@ -479,4 +479,33 @@ describe("SettingsManager", () => {
expect(manager.getSessionDir()).toBe(join(homedir(), "sessions"));
});
});
describe("getShellPath", () => {
it("should return undefined when not set", () => {
writeFileSync(join(agentDir, "settings.json"), JSON.stringify({ theme: "dark" }));
const manager = SettingsManager.create(projectDir, agentDir);
expect(manager.getShellPath()).toBeUndefined();
});
it("should return an absolute shellPath unchanged", () => {
writeFileSync(join(agentDir, "settings.json"), JSON.stringify({ shellPath: "/bin/zsh" }));
const manager = SettingsManager.create(projectDir, agentDir);
expect(manager.getShellPath()).toBe("/bin/zsh");
});
it("should expand ~ in shellPath", () => {
writeFileSync(
join(agentDir, "settings.json"),
JSON.stringify({ shellPath: "~/.local/bin/agent-shell-sandbox" }),
);
const manager = SettingsManager.create(projectDir, agentDir);
expect(manager.getShellPath()).toBe(join(homedir(), ".local/bin/agent-shell-sandbox"));
});
it("should expand a bare ~ in shellPath", () => {
writeFileSync(join(agentDir, "settings.json"), JSON.stringify({ shellPath: "~" }));
const manager = SettingsManager.create(projectDir, agentDir);
expect(manager.getShellPath()).toBe(homedir());
});
});
});