aa7f56e5d0
* fix(windows): complete System32 executable path fixes for where.exe and taskkill.exe Complete the Windows System32 executable path fixes started in #1659. The previous fix addressed where.exe in a few frontend files but missed several critical locations in both backend and frontend. Backend changes: - Add get_where_exe_path() helper in core/platform/__init__.py - Update auth.py, git_executable.py, gh_executable.py, glab_executable.py to use full path instead of bare 'where' command - Remove shell=True from subprocess calls (security improvement) Frontend changes: - Add getTaskkillExePath() helper in windows-paths.ts - Update platform/index.ts, subprocess-runner.ts, pty-daemon-client.ts to use full path for taskkill.exe - Update claude-code-handlers.ts to use getWhereExePath() - Add System32 to ESSENTIAL_SYSTEM_PATHS in env-utils.ts - Update process-kill.test.ts to mock the new helper Why full paths: - Works even when System32 isn't in PATH (GUI launch scenarios) - SystemRoot env var is a protected Windows system variable - Prevents PATH hijacking attacks - Removing shell=True prevents command injection Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: address PR review feedback for Windows System32 executable paths - Fix missed bare 'taskkill' at subprocess-runner.ts:174 (stopFn closure) - Fix missed bare 'where' at mcp-handlers.ts:198 (MCP health check) - Update stale comments in gh_executable.py and glab_executable.py (removed incorrect "shell=True" reference, now matches git_executable.py) - Add error logging callback for taskkill in stopFn (was empty callback) - Improve MCP health check error messages with actionable diagnostics for ENOENT and EACCES errors on both Windows and Unix Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: use getWhereExePath() for 'where gh' in validateGitHubModule Fix missed bare 'where gh' at line 617 in subprocess-runner.ts. This completes the System32 executable path refactoring. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: use execFileAsync for gh CLI detection consistency Replace shell string interpolation with execFileAsync for the gh CLI check in subprocess-runner.ts, matching the pattern used in claude-code-handlers.ts and mcp-handlers.ts. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(windows): address PR review findings for System32 path consistency - Use getTaskkillExePath() in claude-code-handlers.ts install commands instead of bare 'taskkill' (NEW-003) - Add ENOENT error handling in subprocess-runner.ts validateGitHubModule to distinguish missing where.exe from missing gh CLI (NEW-006) - Extract shared getSystemRoot() helper in windows-paths.ts to deduplicate SystemRoot resolution logic (NEW-002) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(windows): add tests, export getSystemRoot, add windowsHide to MCP spawn - Add unit tests for getWhereExePath/getTaskkillExePath with env fallback coverage - Export getSystemRoot() for reuse across modules - Add windowsHide: true to mcp-handlers spawn call (consistency with other sites) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com> Co-authored-by: Andy <119136210+AndyMik90@users.noreply.github.com>