Releases
v1.2.1
Compare
Sorry, something went wrong.
No results found
[1.2.1] - 2026-06-28
Added
Desktop Electron app : Bundled Python backend via PyInstaller, electron-builder config, installer icons (NSIS/dmg/deb), system tray, auto-update, notifications
Self-contained desktop HTML : Replaced Vue.js SPA with inline index.html — 6 tabs (Resolve, Install, Restore, Settings, About, Logs), no build step required
backend/settings/ package : Replaced monolithic 831-line settings.py with modular package structure
backend/api/helpers/ : Extracted shared API utilities from bloated route handlers
Lazy client creation : DataAggregator creates 13 HTTP clients on demand, not at import time
CLI startup optimization : import z3 deferred to inside methods, all data source imports lazy
Concurrent package fetching : asyncio.gather in API routes, CLI resolve, and CLI lock
System info caching : 5-minute TTL on API resolve requests
DictCache fallback : Automatic fallback when Redis is unavailable
COMPONENTS.md : New documentation explaining 3-component model (CLI, API, Desktop) and use cases
Changed
Frontend/ directory DELETED : Entire Vue.js SPA removed (21,563-line package-lock.json deleted) — replaced by self-contained desktop index.html
PostgreSQL and Redis → optional : SQLite + DictCache cover all standalone/desktop use cases
All package_exists() → async aiohttp : 7 synchronous methods converted
Registry URL constants inlined : Moved from settings into get_ecosystem_config() and 9 data source clients
Settings trimmed : 595 → ~200 lines — removed Celery, Email, Webhooks, WebSockets, File upload, Prometheus/Sentry/OTEL
Integration tests → SQLite : No PostgreSQL needed on the host
FastAPI pinned : >=0.115.0,<0.116 for pydantic 2.x compatibility
273 unused imports removed : Ruff F401 auto-fixed across codebase
Removed
Entire frontend/ directory (Vue.js SPA, package-lock.json, ESLint config, etc.)
monitoring/ directory (Prometheus, Grafana, Loki, Promtail)
alembic/ directory — Base.metadata.create_all() handles schema
scripts/ — only sync-version.py kept
backend/Dockerfile and build-docker CI job
All docker-compose files, .dockerignore, start_dev.sh, sonar-project.properties
Dead test files: load_test.js, TestSystemBenchmark, TestVerifiedCombination, test_middleware.py
Dead API endpoints: /compatibility/report, /compare, /gpu/info, /runtime/{runtime}, /analyze-environment, /benchmarks
requests dependency — all usage replaced with aiohttp
10 intermediate versions : v1.1.1 through v1.1.20 + v1.2.0 — skipped in final v1.2.1 release
Fixed
Desktop PyInstaller bundling : Hidden imports for jose.jwt, passlib.bcrypt, z3, cpuinfo; --collect-all for critical packages
Desktop SECRET_KEY crash : Added auto_generated_secret_key() fallback
Desktop cwd bug : Platform-aware working directory detection (macOS .app bundle, Linux PyInstaller)
Desktop blank screen : extraResources for frontend dist, correct dev/prod URL switching
Desktop version mismatch : Auto-version-sync from package.json
Desktop NSIS uninstall loop : Proper closeApp handling
Desktop macOS ARM64 : Native ARM runner, z3-solver<4.15.5 pin for macOS ARM compatibility
Cross-platform hints : macOS .app bundle detection, Linux platform fallback
libz3.dll missing : Added z3 DLL to PyInstaller bundle
Integration test isolation : db_session fixture cleans tables between tests
SQLite foreign keys : PRAGMA foreign_keys=ON event listener
All 21 tests : Updated for async package_exists() conversions
Settings tests : Fixed importlib.reload + clear=True poisoning bug
Route collision : Package details moved from /{ecosystem}/{name} to /{ecosystem}/{name}/details
export_generator.py : Uses PackageLoader for frozen-packaged compatibility
CLI _parse_package_spec : Uses rsplit("@", 1) for npm scoped packages
You can’t perform that action at this time.