fix: improve Windows compatibility for CLI commands and sandbox (#261)
## Fix Windows compatibility issues (#248) This PR addresses the Windows compatibility issues reported in #248: 1. **Fix sandbox initialization failure on Windows** - Modified `getSandbox()` to return `SandboxType.NONE` on Windows instead of throwing an error - Added a warning log message to inform the user that sandbox is not available on Windows 2. **Fix Unix commands not working on Windows** - Created a new module [platform-commands.ts](cci:7://file:///c:/Users/HP%20840%20G6/workflow/codex/codex-cli/src/utils/agent/platform-commands.ts:0:0-0:0) that automatically adapts Unix commands to their Windows equivalents - Implemented a mapping table for common commands and their options - Integrated this functionality into the command execution process ### Testing Tested on Windows 10 with the following commands: - `ls -R .` (now automatically translates to `dir /s .`) - Other Unix commands like `grep`, `cat`, etc. The CLI no longer crashes when running these commands on Windows. I have read the CLA Document and I hereby sign the CLA --------- Signed-off-by: Alpha Diop <alphakhoss@gmail.com>
This commit is contained in:
@@ -8,6 +8,7 @@ import type {
|
||||
} from "child_process";
|
||||
|
||||
import { log, isLoggingEnabled } from "../log.js";
|
||||
import { adaptCommandForPlatform } from "../platform-commands.js";
|
||||
import { spawn } from "child_process";
|
||||
import * as os from "os";
|
||||
|
||||
@@ -23,7 +24,21 @@ export function exec(
|
||||
_writableRoots: Array<string>,
|
||||
abortSignal?: AbortSignal,
|
||||
): Promise<ExecResult> {
|
||||
const prog = command[0];
|
||||
// Adapt command for the current platform (e.g., convert 'ls' to 'dir' on Windows)
|
||||
const adaptedCommand = adaptCommandForPlatform(command);
|
||||
|
||||
if (
|
||||
isLoggingEnabled() &&
|
||||
JSON.stringify(adaptedCommand) !== JSON.stringify(command)
|
||||
) {
|
||||
log(
|
||||
`Command adapted for platform: ${command.join(
|
||||
" ",
|
||||
)} -> ${adaptedCommand.join(" ")}`,
|
||||
);
|
||||
}
|
||||
|
||||
const prog = adaptedCommand[0];
|
||||
if (typeof prog !== "string") {
|
||||
return Promise.resolve({
|
||||
stdout: "",
|
||||
@@ -72,7 +87,7 @@ export function exec(
|
||||
detached: true,
|
||||
};
|
||||
|
||||
const child: ChildProcess = spawn(prog, command.slice(1), fullOptions);
|
||||
const child: ChildProcess = spawn(prog, adaptedCommand.slice(1), fullOptions);
|
||||
// If an AbortSignal is provided, ensure the spawned process is terminated
|
||||
// when the signal is triggered so that cancellations propagate down to any
|
||||
// long‑running child processes. We default to SIGTERM to give the process a
|
||||
|
||||
Reference in New Issue
Block a user