@@ -5,6 +5,7 @@
|
|||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
- Fixed tail truncation for oversized single-line output that ends with a trailing newline ([#4715](https://github.com/earendil-works/pi/issues/4715)).
|
- Fixed tail truncation for oversized single-line output that ends with a trailing newline ([#4715](https://github.com/earendil-works/pi/issues/4715)).
|
||||||
|
- Fixed Windows Node execution environment command spawns to hide helper console windows from background processes ([#4699](https://github.com/earendil-works/pi/issues/4699)).
|
||||||
|
|
||||||
## [0.75.3] - 2026-05-18
|
## [0.75.3] - 2026-05-18
|
||||||
|
|
||||||
|
|||||||
7
packages/agent/src/harness/env/nodejs.ts
vendored
7
packages/agent/src/harness/env/nodejs.ts
vendored
@@ -108,7 +108,10 @@ async function runCommand(
|
|||||||
let stdout = "";
|
let stdout = "";
|
||||||
let child: ReturnType<typeof spawn>;
|
let child: ReturnType<typeof spawn>;
|
||||||
try {
|
try {
|
||||||
child = spawn(command, args, { stdio: ["ignore", "pipe", "ignore"] });
|
child = spawn(command, args, {
|
||||||
|
stdio: ["ignore", "pipe", "ignore"],
|
||||||
|
windowsHide: true,
|
||||||
|
});
|
||||||
} catch {
|
} catch {
|
||||||
resolve({ stdout: "", status: null });
|
resolve({ stdout: "", status: null });
|
||||||
return;
|
return;
|
||||||
@@ -192,6 +195,7 @@ function killProcessTree(pid: number): void {
|
|||||||
spawn("taskkill", ["/F", "/T", "/PID", String(pid)], {
|
spawn("taskkill", ["/F", "/T", "/PID", String(pid)], {
|
||||||
stdio: "ignore",
|
stdio: "ignore",
|
||||||
detached: true,
|
detached: true,
|
||||||
|
windowsHide: true,
|
||||||
});
|
});
|
||||||
} catch {
|
} catch {
|
||||||
// Ignore errors.
|
// Ignore errors.
|
||||||
@@ -275,6 +279,7 @@ export class NodeExecutionEnv implements ExecutionEnv {
|
|||||||
detached: process.platform !== "win32",
|
detached: process.platform !== "win32",
|
||||||
env: getShellEnv(this.shellEnv, options?.env),
|
env: getShellEnv(this.shellEnv, options?.env),
|
||||||
stdio: ["ignore", "pipe", "pipe"],
|
stdio: ["ignore", "pipe", "pipe"],
|
||||||
|
windowsHide: true,
|
||||||
});
|
});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
const cause = toError(error);
|
const cause = toError(error);
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
- Fixed the subagent extension's parallel mode to return useful per-task output and failed-task diagnostics to the parent model instead of 100-character previews ([#4710](https://github.com/earendil-works/pi/issues/4710)).
|
- Fixed the subagent extension's parallel mode to return useful per-task output and failed-task diagnostics to the parent model instead of 100-character previews ([#4710](https://github.com/earendil-works/pi/issues/4710)).
|
||||||
|
- Fixed Windows local bash execution to hide helper console windows when launched from background SDK processes ([#4699](https://github.com/earendil-works/pi/issues/4699)).
|
||||||
|
|
||||||
## [0.75.3] - 2026-05-18
|
## [0.75.3] - 2026-05-18
|
||||||
|
|
||||||
|
|||||||
@@ -76,6 +76,7 @@ export function createLocalBashOperations(options?: { shellPath?: string }): Bas
|
|||||||
detached: process.platform !== "win32",
|
detached: process.platform !== "win32",
|
||||||
env: env ?? getShellEnv(),
|
env: env ?? getShellEnv(),
|
||||||
stdio: ["ignore", "pipe", "pipe"],
|
stdio: ["ignore", "pipe", "pipe"],
|
||||||
|
windowsHide: true,
|
||||||
});
|
});
|
||||||
if (child.pid) trackDetachedChildPid(child.pid);
|
if (child.pid) trackDetachedChildPid(child.pid);
|
||||||
let timedOut = false;
|
let timedOut = false;
|
||||||
|
|||||||
@@ -15,7 +15,11 @@ function findBashOnPath(): string | null {
|
|||||||
if (process.platform === "win32") {
|
if (process.platform === "win32") {
|
||||||
// Windows: Use 'where' and verify file exists (where can return non-existent paths)
|
// Windows: Use 'where' and verify file exists (where can return non-existent paths)
|
||||||
try {
|
try {
|
||||||
const result = spawnSync("where", ["bash.exe"], { encoding: "utf-8", timeout: 5000 });
|
const result = spawnSync("where", ["bash.exe"], {
|
||||||
|
encoding: "utf-8",
|
||||||
|
timeout: 5000,
|
||||||
|
windowsHide: true,
|
||||||
|
});
|
||||||
if (result.status === 0 && result.stdout) {
|
if (result.status === 0 && result.stdout) {
|
||||||
const firstMatch = result.stdout.trim().split(/\r?\n/)[0];
|
const firstMatch = result.stdout.trim().split(/\r?\n/)[0];
|
||||||
if (firstMatch && existsSync(firstMatch)) {
|
if (firstMatch && existsSync(firstMatch)) {
|
||||||
@@ -190,6 +194,7 @@ export function killProcessTree(pid: number): void {
|
|||||||
spawn("taskkill", ["/F", "/T", "/PID", String(pid)], {
|
spawn("taskkill", ["/F", "/T", "/PID", String(pid)], {
|
||||||
stdio: "ignore",
|
stdio: "ignore",
|
||||||
detached: true,
|
detached: true,
|
||||||
|
windowsHide: true,
|
||||||
});
|
});
|
||||||
} catch {
|
} catch {
|
||||||
// Ignore errors if taskkill fails
|
// Ignore errors if taskkill fails
|
||||||
|
|||||||
Reference in New Issue
Block a user