copa (2.2.15-1) noble; urgency=high

  * Harden KDE Plasma Wayland capture by preferring the XDG screenshot portal
    over Spectacle, which can crash on affected Plasma/Spectacle builds.
  * Extend interactive portal selection timeout and handle portal timeouts
    without crashing the capture path.
  * Harden XDG GlobalShortcuts registration across fast Plasma restarts.
  * Improve screenshot backend diagnostics and failure logging.
  * Store the freedesktop autostart entry with mode 0644.
  * Keep the Settings hotkey state synchronized with the registered shortcut.
  * Release as 2.2.15 so package managers distinguish this build from the
    previously published 2.2.11 package.

 -- AILinuX <support@ailinux.me>  Mon, 21 Sep 2026 08:35:00 +0200

copa (2.2.11-1) noble; urgency=high

  * Fix Settings UI so "Add / update global shortcut" enables and registers
    the shortcut even when the enable checkbox was previously unchecked.
  * Register the XDG GlobalShortcuts portal session before opening the desktop
    shortcut editor, avoiding "Register the shortcut before configuring it".
  * Keep the hotkey checkbox synchronized with compositor-confirmed shortcuts.
  * Add regression tests for both settings-dialog flows.

 -- AILinuX <support@ailinux.me>  Sat, 19 Sep 2026 08:45:00 +0200

copa (2.2.10-1) noble; urgency=high

  * Remove a stale copa.desktop/_launch shortcut only when it conflicts
    with the configured OCR hotkey during KDE Wayland portal registration.
  * Keep the XDG GlobalShortcuts portal as the authoritative binding path.
  * Add regression coverage for legacy launch-conflict migration.

 -- AILinuX <support@ailinux.me>  Sat, 19 Sep 2026 07:52:00 +0200

copa (2.2.9-1) noble; urgency=high

  * Restore robust KDE Plasma Wayland hotkeys through the XDG Global
    Shortcuts portal as the single registration authority.
  * Stop rewriting portal-owned bindings through KGlobalAccel after bind.
  * Follow compositor shortcut changes through ShortcutsChanged and sync
    the effective trigger back into Copa settings.
  * Add regression coverage for portal trigger round-tripping and updates.

 -- AILinuX <support@ailinux.me>  Sat, 19 Sep 2026 07:42:00 +0200

copa (2.2.8-1) noble; urgency=medium

  * Publish release binaries directly as GitHub release assets to avoid Actions artifact quota coupling.
  * Keep the browser-auth enabled 2.2.7 source unchanged apart from release plumbing.

 -- AILinuX <support@ailinux.me>  Fri, 11 Sep 2026 23:57:00 +0200

copa (2.2.7-1) noble; urgency=medium

  * Add secure browser login routing for the AILinux Google authentication broker.
  * Publish the current Linux and Windows release artifacts from the consolidated source.

 -- AILinuX <support@ailinux.me>  Fri, 11 Sep 2026 23:45:00 +0200

copa (2.2.5-1) noble; urgency=medium

  * Add a reproducible Windows x64 release build with bundled Tesseract.
  * Add an NSIS installer alongside the portable Windows ZIP artifact.
  * Move release CI to Python 3.12 for current NumPy compatibility.
  * Keep Linux, Windows and release metadata on one 2.2.5 version.

 -- AILinuX <support@ailinux.me>  Sun, 23 Aug 2026 17:25:00 +0200

copa (2.2.4-1) noble; urgency=medium

  * Improve Tesseract input with sharpening, stronger contrast and strict
    black-and-white Otsu binarisation.
  * Ensure the EasyOCR fallback receives Tesseract-specific preprocessing.
  * Add regression coverage for the generated 0/255 OCR source image.

 -- AILinuX <support@ailinux.me>  Thu, 16 Jul 2026 16:30:00 +0200

copa (2.2.3-1) noble; urgency=high

  * Make clipboard writes reliable for background Copa captures on KDE
    Wayland through Klipper's D-Bus API with verified read-back.
  * Keep Qt and wl-copy fallbacks for Windows, X11 and other Wayland desktops.
  * Report copy success only after the clipboard update has been verified.
  * Consolidate runtime, EasyOCR, development and packaging dependencies into
    one requirements.txt using CPU-only PyTorch wheels.

 -- AILinuX <support@ailinux.me>  Thu, 16 Jul 2026 14:30:00 +0200

copa (2.2.2-1) noble; urgency=medium

  * Add a reproducible standalone Linux build and Debian package workflow.
  * Rebuild the current Copa source with explicit release smoke checks.

 -- AILinuX <support@ailinux.me>  Thu, 16 Jul 2026 04:30:00 +0200

copa (2.2.1-1) noble; urgency=high

  * Make Copa's Settings the source of truth for adding, replacing, reading
    and deleting the global screenshot shortcut.
  * Replace stale KDE shortcut alternatives with the requested key through
    KGlobalAccel NoAutoloading semantics and verify the persisted result.
  * Add the XDG portal desktop shortcut editor for non-KDE Wayland desktops.
  * Re-exec repository launches in the project virtual environment so
    dbus-next and the Portal hotkey backend are available from IDE starts.
  * Add regression coverage for KDE shortcut replacement and deletion.

 -- AILinuX <support@ailinux.me>  Wed, 15 Jul 2026 20:45:00 +0200

copa (2.2.0-1) noble; urgency=high

  * Restore Ctrl+Alt+C registration on KDE Wayland through the XDG Global
    Shortcuts portal and automatically retry after transient dependency errors.
  * Prefer KDE Spectacle's native region selector on Plasma Wayland.
  * Add selectable capture backends and fallback chains across Wayland, X11,
    Windows GDI, MSS, Pillow, Qt, DXcam, PyAutoGUI and desktop screenshot tools.
  * Add multi-monitor Copa overlays for desktops where native selection is not
    used.
  * Expand Settings with capture inventory, screenshot/selection tests and
    live hotkey registration diagnostics.
  * Add optional PyAutoGUI and Windows DXcam dependencies and regression tests.

 -- AILinuX <support@ailinux.me>  Wed, 15 Jul 2026 20:05:00 +0200

copa (2.1.0-1) noble; urgency=medium

  * Add an adaptive, desktop-neutral Qt theme and polish all primary dialogs.
  * Select Wayland screenshot backends by desktop: Spectacle on KDE,
    XDG Desktop Portal on GNOME/generic desktops, and grim on wlroots.
  * Add Pillow ImageGrab fallback for Windows and X11 multi-monitor capture.
  * Make the XDG screenshot portal response subscription race-safe.
  * Prevent fast GlobalShortcuts portal responses from being lost.
  * Update runtime dependencies and separate EasyOCR/dev requirements.
  * Add cross-desktop backend, image-operation, and UI smoke tests.

 -- AILinuX <support@ailinux.me>  Wed, 15 Jul 2026 19:15:00 +0200

copa (2.0.10-1) noble; urgency=high

  * Store session tokens and optional user API keys atomically with mode 0600.
  * Handle Mistral proxy and worker failures correctly in freeze and live OCR.
  * Prompt for login when TriForce explicitly rejects an expired session token.
  * Label the keyless Mistral path correctly as the AILinuX backend proxy.
  * Generate a valid Linux autostart command when Copa runs as a module.
  * Replace unsafe manual test scripts with deterministic tests and diagnostics.

 -- AILinuX <support@ailinux.me>  Wed, 15 Jul 2026 18:40:00 +0200

copa (2.0.9-1) noble; urgency=medium

  * Demo quota reduced from 50 to 15 Mistral OCR scans per user per month,
    based on unit-economics analysis. Enough to evaluate the product, low
    enough to limit demo abuse costs.
  * UI strings and error messages updated accordingly.

 -- AILinuX <support@ailinux.me>  Sun, 19 Apr 2026 14:23:22 +0200

copa (2.0.8-1) noble; urgency=medium

  * Mistral API key option restored in Settings. Empty = use AILinuX backend
    proxy (demo-limited); filled = direct Mistral call with user's own key
    (unlimited, user pays).
  * Windows build now ships bundled Tesseract (binary, DLLs, English and
    German language data plus osd) in tesseract/ subfolder. Users no longer
    need to install Tesseract separately for the freeze-OCR workflow.

 -- AILinuX <support@ailinux.me>  Sun, 19 Apr 2026 13:18:25 +0200

copa (2.0.7-1) noble; urgency=high

  * Fix BindShortcuts failing with dbus-next marshaller error.
    dbus-next requires Python lists for DBus STRUCT types, not tuples.

 -- AILinuX <support@ailinux.me>  Sun, 19 Apr 2026 12:42:03 +0200

copa (2.0.6-1) noble; urgency=high

  * CRITICAL: Fix Wayland global hotkey completely broken in v2.0.3-v2.0.5.
    The previous Portal implementation used dbus-next introspection, which
    crashes against KDE Plasma 6 xdg-desktop-portal-kde because that portal
    exposes dbus member names containing dashes (e.g. power-saver-enabled),
    which dbus-next rejects as "invalid member name". Result: every Copa
    startup under KDE Wayland logged
      "org.freedesktop.portal.GlobalShortcuts not available:
       invalid member name: power-saver-enabled"
    and Ctrl+Alt+C did nothing.
  * Rewrote wayland_hotkeys.py using RAW dbus-next Messages + AddMatch,
    matching the pattern already proven in screen_capture._portal_screenshot_async.
    No introspection anywhere in the hotkey path now.
  * Fix check_tesseract_available() at startup — was running pytesseract
    without env=_system_env(), so the very first tesseract probe at launch
    failed with the LD_LIBRARY_PATH/libssl clash. Now uses subprocess.run
    directly with clean env.

 -- AILinuX <support@ailinux.me>  Sun, 19 Apr 2026 12:22:21 +0200

copa (2.0.6-1) noble; urgency=high

  * Fix Wayland global hotkey on KDE Plasma 6 / Ubuntu 26.04. The previous
    Portal code used dbus-next proxy objects, which introspect the entire
    portal Desktop object and then fail with InvalidMemberNameError on
    KDE properties containing hyphens (e.g. power-saver-enabled). We
    thought Portal was unavailable and bailed out silently — no dialog,
    no shortcut, no visible error.
  * Rewritten wayland_hotkeys.py to use low-level DBus Message calls
    (same pattern as screen_capture.portal_screenshot). Bypasses
    introspection entirely.
  * The KDE permission dialog now appears reliably on first launch.

 -- AILinuX <support@ailinux.me>  Sun, 19 Apr 2026 12:17:22 +0200

copa (2.0.5-1) noble; urgency=high

  * Fix Tesseract OCR under PyInstaller bundle. The bundle sets
    LD_LIBRARY_PATH to point into /opt/copa/_internal, causing external
    binaries (tesseract, grim, spectacle, xwd, gnome-screenshot) to load
    the bundled libssl 3.0 instead of system libssl 3.2, breaking against
    system libcurl. Added _system_env() helper that restores PyInstaller-saved
    LD_LIBRARY_PATH_ORIG for all external subprocess calls.
  * This means: after installing v2.0.4, the global hotkey trigger would
    successfully capture the screen but OCR would silently fail with
    "OPENSSL_3.2.0 not found". Fixed now.

 -- AILinuX <support@ailinux.me>  Sun, 19 Apr 2026 11:43:53 +0200

copa (2.0.4-1) noble; urgency=high

  * SECURITY: Remove hardcoded Mistral API key from source. Mistral OCR now
    routes through the AILinuX backend proxy at api.ailinux.me/v1/client/ocr,
    which holds the server-side key and enforces per-user monthly quotas
    (50 scans/month for demo, unlimited for Pro/Unlimited/copa_ocr entitled).
  * Default OCR backend reset to Tesseract (was: Mistral).
  * Settings dialog: Mistral API-Key input disabled; backend key is used.
  * New module copa/constants.py centralizes all API URLs and parameters.
  * Bug fixes:
    - live_ocr: stop-after-3-failures now notifies the user instead of
      dying silently
    - freeze_mode: demo-limit check moved BEFORE OCR work (no more wasted
      local OCR calls when limit is already reached)
    - freeze_mode: handle MistralProxyError (402/401/503) with user-visible
      tray messages
    - ocr_engine: _qimage_to_pil now captures pixel data before releasing
      the source QImage (prevents rare corruption under GC pressure)
    - ocr_engine: _ocr_easyocr now returns None consistently on ALL
      failures so the Tesseract fallback always engages
    - tray: global-hotkey failure message differentiates Wayland vs. pynput
    - tray: login success shows one consolidated notification instead of two
    - utils: RotatingFileHandler writes to <config>/copa.log (5MB x 3)
      so support tickets are debuggable
  * Cleanup:
    - Windows Tesseract path extracted to a single WINDOWS_TESSERACT constant
    - app.py dual-import block removed; uses relative imports only
    - __init__.py uses relative ssl_bootstrap import (safer under PyInstaller)
    - Removed dead files: set_backend.py, trial_expired_dialog.py

 -- AILinuX <support@ailinux.me>  Sun, 19 Apr 2026 11:16:38 +0200

copa (2.0.3-1) noble; urgency=medium

  * Fix Windows login SSL/certificate errors under PyInstaller bundles.
    PyInstaller on Windows cannot reliably access the system CA store,
    causing CERTIFICATE_VERIFY_FAILED when contacting api.ailinux.me.
    Added ssl_bootstrap module that forces certifi as CA source for
    all urllib/requests calls.
  * Bundle certifi package via --collect-all certifi.

 -- AILinuX <support@ailinux.me>  Sun, 19 Apr 2026 10:33:58 +0200

copa (2.0.2-1) noble; urgency=medium

  * Add Wayland-compatible global hotkey via org.freedesktop.portal.GlobalShortcuts.
    Under Wayland sessions (KDE Plasma 6, GNOME 45+) the hotkey is now
    registered with the compositor via XDG Desktop Portal. First launch
    shows the standard permission dialog.
  * hotkeys.py refactored into a factory that auto-selects Portal (Wayland)
    or pynput (X11/Windows) backend at runtime.

 -- AILinuX <support@ailinux.me>  Sun, 19 Apr 2026 10:29:36 +0200

copa (2.0.1-1) noble; urgency=medium

  * Python 3.14 compatibility: catch RuntimeError from torch/easyocr imports
  * Python 3.14 compatibility: replace deprecated locale.getdefaultlocale()
  * Python 3.14 compatibility: use asyncio.get_running_loop() instead of deprecated get_event_loop()
  * Fix: login dialog raise/activateWindow for Wayland visibility
  * Fix: terminal feedback when login is cancelled
  * Fix: settings dialog easyocr crash on Python 3.14

 -- AILinuX <support@ailinux.me>  Sun, 13 Apr 2026 21:00:00 +0200

copa (2.0.0-1) noble; urgency=medium

  * Public launch — beta phase ended.
  * Login required: no more anonymous trial mode.
  * Demo mode: 50 OCR scans/month for free accounts.
  * Watermark in demo mode clipboard output.
  * Copa OCR entitlement (copa_ocr) for full version activation.
  * Removed hardcoded Mistral API key.
  * New demo limit dialog with upgrade link.
  * Tray menu shows license/demo status.
  * Removed beta invite code system.

 -- Markus Leitermann <admin@ailinux.me>  Mon, 13 Apr 2026 17:53:43 +0200

copa (1.10.0-1) noble; urgency=medium

  * Bugfixes and stability improvements.
  * Setup Windows porting structure.

 -- AILinuX <support@ailinux.me>  Tue, 03 Mar 2026 00:05:00 +0100

copa (1.0.9-1) noble; urgency=medium

  * Removed Google Cloud Vision OCR backend and UI elements to eliminate unused API costs.

 -- AILinuX <support@ailinux.me>  Mon, 02 Mar 2026 19:40:00 +0100

copa (1.0.8-1) noble; urgency=medium

  * Fixed Wayland screenshot hang with Spectacle by removing interactive region flag.
  * Integrated robust single-instance lock file mechanism replacing QSharedMemory.
  * Added Mistral OCR integration as the default AI engine using /v1/ocr API.
  * Implemented smart background polarity detection and invert for Tesseract.
  * Fixed LiveOcrEngine runaway resource usage when window is hidden.

 -- AILinuX <support@ailinux.me>  Mon, 02 Mar 2026 14:00:00 +0100

copa (1.0.7-1) noble; urgency=medium

  * Implemented an auto-typing output feature to instantly write OCR results.
  * Added type_hotkey and tray options to enable/disable auto-type.
  * Refactored os-autostart system to use XDG autostart standards instead of a config boolean.
  * Fixed minor text error in freeze_mode fallback instructions.

 -- AILinuX <support@ailinux.me>  Mon, 02 Mar 2026 06:40:00 +0100

copa (1.0.6-1) noble; urgency=medium

  * 14-day trial system: no login required, trial_start tracked in session.
  * Trial expired dialog with buy/login options.
  * License status shown in tray menu (trial/expiring/full version).
  * Account management and logout in tray.
  * Game mode: extended screenshot backends for fullscreen games.
  * xwd backend for X11 fullscreen capture (games).
  * ImageMagick import backend as X11 fallback.
  * Black-image detection to skip failed game screenshots.
  * Game settings tab with dependency check.
  * German/English i18n for all new UI elements.

 -- AILinuX <support@ailinux.me>  Sat, 28 Feb 2026 14:30:00 +0100

copa (1.0.5-1) noble; urgency=medium

  * Multi-backend OCR engine: Tesseract, EasyOCR (neural), Google Vision (cloud).
  * Image preprocessing pipeline: upscaling, contrast, sharpening, adaptive
    binarisation for significantly improved text recognition accuracy.
  * Auto-detect optimal Tesseract PSM based on selection size.
  * OCR post-processing to clean up common artefacts.
  * Settings dialog with OCR backend, language, preprocessing, API key config.
  * Tray menu: engine selector, OCR language, preprocessing toggle.
  * Internationalisation: German and English UI with language selector.
  * License authentication via api.ailinux.me with browser login flow.
  * Grace period (7 days) for offline usage.

 -- AILinuX <support@ailinux.me>  Sat, 28 Feb 2026 12:00:00 +0100

copa (1.0.4-4) noble; urgency=medium

  * Fix installed paths for launcher, desktop file, and icon.

 -- AILinuX <support@ailinux.me>  Mon, 19 Jan 2026 18:30:32 +0100
