Probe modern pipx homes, buffer install stdout for JSON, and clean up
failed venv creates so Install Markitdown retries reliably.
Co-authored-by: Cursor <cursoragent@cursor.com>
Probe versioned Homebrew Pythons and pipx venvs, and install into a
plugin-local .venv so PEP 668 no longer blocks the Install button.
Co-authored-by: Cursor <cursoragent@cursor.com>
- Debounce Python path input (1.5s) to stop firing on every keystroke
- Guard against empty paths crashing spawn()
- Cancel debounce timer on settings tab hide/re-render
- Fire pending refreshDependencies() on hide so status stays current
- Add platform-specific Python fallback paths (Homebrew, Framework, Windows AppData)
- Prefer the first Python where markitdown actually imports over stale metadata
- Verify actual MarkItDown import in check_install.py, not just package metadata
- Add ALLOWED_PACKAGES allowlist to check_install.py
- Remove APPDATA path traversal in favor of LOCALAPPDATA
## Summary
- **Security**: Replaced shell injection-vulnerable `exec()` calls with `spawn()` using argument arrays and `shell: false`, bundling Python wrapper scripts that use `argparse`
- **Architecture**: Decomposed monolithic 735-line `main.ts` into 12 focused modules across `src/` and `python/`
- **Features**: Added image extraction from PDFs, plugin arguments editor, context menu conversion, batch progress indicators, setup wizard, and Unicode support via `PYTHONUTF8=1`
- **Compatibility**: Reverted minAppVersion to 0.15.0, python3 fallback for macOS/Linux
Closes ENG-533