Skip to content

v1.2.1

Choose a tag to compare

@code-with-zeeshan code-with-zeeshan released this 28 Jun 08:20

[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