mirror of
https://github.com/affaan-m/everything-claude-code.git
synced 2026-04-30 16:45:48 +08:00
fix: support windows insaits python shims
This commit is contained in:
parent
fe40a3d27b
commit
63485a26bf
@ -15,6 +15,7 @@ const path = require('path');
|
|||||||
const { spawnSync } = require('child_process');
|
const { spawnSync } = require('child_process');
|
||||||
|
|
||||||
const MAX_STDIN = 1024 * 1024;
|
const MAX_STDIN = 1024 * 1024;
|
||||||
|
const WINDOWS_SHELL_UNSAFE_PATH_CHARS = /[&|<>^%!]/;
|
||||||
|
|
||||||
function isEnabled(value) {
|
function isEnabled(value) {
|
||||||
return ['1', 'true', 'yes', 'on'].includes(String(value || '').toLowerCase());
|
return ['1', 'true', 'yes', 'on'].includes(String(value || '').toLowerCase());
|
||||||
@ -37,17 +38,33 @@ process.stdin.on('end', () => {
|
|||||||
const scriptDir = __dirname;
|
const scriptDir = __dirname;
|
||||||
const pyScript = path.join(scriptDir, 'insaits-security-monitor.py');
|
const pyScript = path.join(scriptDir, 'insaits-security-monitor.py');
|
||||||
|
|
||||||
// Try python3 first (macOS/Linux), fall back to python (Windows)
|
// Prefer real Windows executables before .cmd shims so shell execution is
|
||||||
const pythonCandidates = ['python3', 'python'];
|
// only used for wrapper scripts such as pyenv/npm-style shims.
|
||||||
|
const pythonCandidates = process.platform === 'win32'
|
||||||
|
? ['python3.exe', 'python.exe', 'python3.cmd', 'python.cmd', 'python3', 'python']
|
||||||
|
: ['python3', 'python'];
|
||||||
let result;
|
let result;
|
||||||
|
|
||||||
for (const pythonBin of pythonCandidates) {
|
for (const pythonBin of pythonCandidates) {
|
||||||
|
const useWindowsShell = process.platform === 'win32' && /\.(cmd|bat)$/i.test(pythonBin);
|
||||||
|
if (useWindowsShell && (
|
||||||
|
WINDOWS_SHELL_UNSAFE_PATH_CHARS.test(pythonBin)
|
||||||
|
|| WINDOWS_SHELL_UNSAFE_PATH_CHARS.test(pyScript)
|
||||||
|
)) {
|
||||||
|
result = {
|
||||||
|
error: new Error(`Unsafe Windows Python shim path: ${pythonBin}`),
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
result = spawnSync(pythonBin, [pyScript], {
|
result = spawnSync(pythonBin, [pyScript], {
|
||||||
input: raw,
|
input: raw,
|
||||||
encoding: 'utf8',
|
encoding: 'utf8',
|
||||||
env: process.env,
|
env: process.env,
|
||||||
cwd: process.cwd(),
|
cwd: process.cwd(),
|
||||||
timeout: 14000,
|
timeout: 14000,
|
||||||
|
shell: useWindowsShell,
|
||||||
|
windowsHide: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
// ENOENT means binary not found - try next candidate
|
// ENOENT means binary not found - try next candidate
|
||||||
|
|||||||
@ -21,8 +21,40 @@ function cleanup(dirPath) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function writeFakePython(binDir) {
|
function writeFakePython(binDir) {
|
||||||
const fakePython = path.join(binDir, 'python3');
|
|
||||||
fs.mkdirSync(binDir, { recursive: true });
|
fs.mkdirSync(binDir, { recursive: true });
|
||||||
|
if (process.platform === 'win32') {
|
||||||
|
const fakePythonJs = path.join(binDir, 'fake-python.js');
|
||||||
|
const fakePythonCmd = path.join(binDir, 'python3.cmd');
|
||||||
|
fs.writeFileSync(fakePythonJs, [
|
||||||
|
"'use strict';",
|
||||||
|
"const fs = require('fs');",
|
||||||
|
"const mode = process.env.FAKE_INSAITS_MODE || 'clean';",
|
||||||
|
"if (mode === 'clean') {",
|
||||||
|
" fs.readFileSync(0, 'utf8');",
|
||||||
|
" process.exit(0);",
|
||||||
|
"}",
|
||||||
|
"if (mode === 'echo') {",
|
||||||
|
" process.stdout.write(fs.readFileSync(0, 'utf8'));",
|
||||||
|
" process.exit(0);",
|
||||||
|
"}",
|
||||||
|
"if (mode === 'block') {",
|
||||||
|
" process.stdout.write('blocked by monitor\\n');",
|
||||||
|
" process.stderr.write('monitor warning\\n');",
|
||||||
|
" process.exit(2);",
|
||||||
|
"}",
|
||||||
|
"if (mode === 'error') {",
|
||||||
|
" process.stderr.write('spawned but failed\\n');",
|
||||||
|
" process.exit(1);",
|
||||||
|
"}",
|
||||||
|
].join('\n'), 'utf8');
|
||||||
|
fs.writeFileSync(fakePythonCmd, [
|
||||||
|
'@echo off',
|
||||||
|
`"${process.execPath}" "%~dp0fake-python.js" %*`,
|
||||||
|
].join('\r\n'), 'utf8');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const fakePython = path.join(binDir, 'python3');
|
||||||
fs.writeFileSync(fakePython, [
|
fs.writeFileSync(fakePython, [
|
||||||
'#!/bin/sh',
|
'#!/bin/sh',
|
||||||
'mode="${FAKE_INSAITS_MODE:-clean}"',
|
'mode="${FAKE_INSAITS_MODE:-clean}"',
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user