fix: harden cross-platform paths and child-process handling

Replace process.env.HOME fallbacks with os.homedir() in dashboard usage
probes and the hermes plugin profile resolver so unset HOME no longer
yields literal "~" paths. Skip POSIX process-group semantics on Windows
in engine/merger and dashboard-tui's pgrep-based vitest killer. Add
shell: true to npx spawns in CLI skills/extension so .cmd shims resolve
on Windows, and route test:build-exe through cross-env.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
gsxdsm
2026-04-27 23:27:27 -07:00
parent 02d68f945d
commit 2229815bad
8 changed files with 41 additions and 11 deletions

View File

@@ -272,6 +272,10 @@ export class DashboardTUI {
* gone by the time we send the signal).
*/
killVitestProcesses(): { killed: number; pids: number[] } {
// pgrep is POSIX-only; Windows path is a no-op above.
if (process.platform === "win32") {
return { killed: 0, pids: [] };
}
const selfPid = process.pid;
let pids: number[] = [];
try {

View File

@@ -187,6 +187,7 @@ export async function runSkillsInstall(
const child = spawn("npx", npxArgs, {
cwd: process.cwd(),
stdio: "inherit",
shell: true,
});
const exitCode = await new Promise<number>((resolve, reject) => {

View File

@@ -1791,6 +1791,7 @@ export default function kbExtension(pi: ExtensionAPI) {
const child = spawn("npx", npxArgs, {
cwd: resolveProjectRoot(ctx.cwd),
stdio: "pipe",
shell: true,
});
let stderr = "";
@@ -1895,6 +1896,7 @@ export default function kbExtension(pi: ExtensionAPI) {
stdio: ["ignore", "pipe", "pipe"],
detached: false,
env: { ...process.env },
shell: true,
});
dashboardProcess = child;