Skip to content

Releases

v0.8.5

Choose a tag to compare

@github-actions github-actions released this 03 Oct 07:49
cd6c04a

0.8.5 — 2026-10-03

Added

  • A local troubleshooting workspace with port checks, scan history, saved reports, JSON export, and comparisons against earlier reports.
  • Optional AI explanations linked to captured evidence, with a payload preview before each request and support for all seven interface languages.
  • Saved AI connections for OpenAI, DeepSeek, OpenCode Go, and custom OpenAI-compatible services. Each connection can be edited, tested, selected, or deleted independently.
  • TCP/UDP observation snapshots and change events for troubleshooting and report comparisons.
  • A UI navigation hook for applications that add pages to the dashboard.

Changed

  • Organize settings by topic, group machine controls, and adapt the custom palette editor to the available width.
  • Show port-management lists before editors and keep navigation visible. Prioritize failed and warning diagnostics above routine checks.
  • Group consecutive ports, separate affected ports from related project ports, and show scan details as labeled fields.
  • Shorten troubleshooting copy, localize sample values, and use green for successful connection and save results.
  • Improve Automation setup, report actions, and layouts on smaller screens.

Fixed

  • Keep browser session credentials out of provider requests and reject keys mistakenly entered as model IDs.
  • Preserve pending check conditions and expanded records during navigation and AI analysis; offer a retry when startup requests fail.
  • Honor explicit proxy settings for provider connections and reserve OpenCode Go DeepSeek Flash output capacity for complete answers.
  • Report incomplete model responses separately, remove internal source pointers from model input, and combine duplicate AI check suggestions.
  • Preserve numeric capture order when limiting events recorded within the same second.

v0.8.4

Choose a tag to compare

@github-actions github-actions released this 13 Sep 14:51

0.8.4 — 2026-09-13

Added

  • AI integration setup instructions and skill documents, available from Settings → Automation and included in the Docker image.
  • A port-light-mcp entry point in the CLI package, plus doctor and reserve_ports tools. Reservations default to one hour and save release tokens locally.
  • mcp-config to generate Codex and Claude Code configuration, and verify to check the adapter and instance without reserving ports.

Changed

  • The Automation panel starts with setup and usage examples. Manual configuration is expandable, with a copy fallback when the clipboard is unavailable.
  • MCP can release reservations using saved credentials and recover pending requests after a connection failure.

Fixed

  • Refresh AI setup prompts immediately when switching the interface language.
  • Recover after malformed or oversized MCP input, validate the initialization lifecycle, and negotiate only supported protocol versions.
  • Forward connection and authentication variables into Docker MCP processes instead of setting only their parent process environment.
  • Identify Docker Hub authentication and repository-update failures separately and document the token permissions needed to synchronize the description.

v0.8.3

Choose a tag to compare

@github-actions github-actions released this 09 Sep 08:19

0.8.3 — 2026-09-09

Added

  • Compose project/service grouping with expandable contiguous port ranges.
  • A local management page for Compose conflicts, replacement mapping snippets, reservations, and named port rules.
  • Browser reservation recovery after a lost response, with release credentials retained in the current tab.
  • Project range checks and rule selection in the allocation API, CLI (--rule), and MCP.
  • Disposable single-machine and four-machine development previews and a shared local test command.
  • Docker Hub README synchronization after release and repository metadata for Unraid Community Applications submission.

Fixed

  • Preserve rule identity when renaming and reject collisions with another rule.
  • Disable local-only port actions when a remote machine is selected.
  • Keep the search field usable on narrow screens with translated header labels.
  • Escape quotes in dynamic HTML attributes so names and group identifiers cannot break their markup.
  • Keep waterfall boards across the available width when their heights differ.
  • Preserve card columns and mobile density inside expanded Compose ranges.
  • Apply name and status sorting within grouped views and refresh the active management page from the toolbar.

Changed

  • Split API routes by domain, Compose decoding and port parsing into separate modules, and the peer editor out of the settings controller.
  • Organize Python tests by domain.
  • Align management page navigation, forms, and lists with the settings UI.
  • Group port operations in the Manage ports dropdown and move setup diagnostics to Settings → Advanced.
  • Shorten README feature lists, move installation instructions forward, and retain the dashboard screenshot.
  • Update the Unraid template to v0.8.3 and document current submission requirements.

v0.8.2

Choose a tag to compare

@github-actions github-actions released this 08 Sep 06:19

0.8.2 — 2026-09-08

Upgrade notes

Upgrade the server and CLI/MCP together. Reservation creation now requires
POST /api/reservations with an Idempotency-Key; legacy GET mutations return
405. Stateless CLI reservations also require PORT_LIGHT_REQUEST_KEY.
Both Basic Auth variables must be nonempty, or both must be unset.

Fixed

  • Compose ranges support up to 4096 ports per declaration, with a 65536-mapping
    scan budget shared across files/includes. Exceeding either limit marks the scan
    incomplete instead of silently advertising dropped ports as free. Paired
    short-syntax ranges preserve corresponding container ports.
  • Health responses omit diagnostic file paths while Basic Auth or hidden-port
    access is locked, including invalid authentication configurations.
  • Partial or explicitly empty Basic Auth configuration fails closed with 503;
    Unicode credentials and hidden-unlock passwords compare safely as UTF-8.
  • Reservations now atomically persist an idempotent receipt with the claim.
    CLI/MCP save a private recovery key before sending and recover the same claim
    and release credentials after a lost response by retrying identical arguments.

Added

  • port-light requests lists non-secret pending-request metadata;
    port-light recover <ID> retrieves still-active claims using GET only, even
    beyond the automatic retry window. Failed recovery/token saves retain the journal.
  • Scan warnings identify the Compose file, range and resource limit with repair
    guidance in all seven languages. Diagnostics respect the hidden-data gate.
  • Client error codes distinguish authentication misconfiguration, unavailable
    occupancy, and obsolete mutation interfaces.

Changed

  • Partially released requests can recover their remaining claims through GET;
    replaying POST still refuses reallocation. Malformed receipts fail closed.
  • Creating reservations requires POST /api/reservations with a secret
    Idempotency-Key. Legacy mutating GET suggestions return 405. Upgrade CLI/MCP
    alongside the server; read-only GET suggestions continue working.
  • Stateless CLI reservations (--no-save --json) require a caller-retained
    PORT_LIGHT_REQUEST_KEY. See the CLI guide for recovery and retention limits.

v0.8.1

Choose a tag to compare

@github-actions github-actions released this 07 Sep 04:15

0.8.1 — 2026-09-07

Added

  • A dependency-free port-light command-line client with doctor, check,
    atomic reserve, and token-authenticated release commands. It supports
    human or versioned JSON output, stable exit categories, Basic Auth, agent
    tokens, custom CA bundles, one-hour leases by default, explicit persistent
    reservations, and self or all-peer checks.
  • Private local reservation-token storage partitioned by server and port, with
    stateless JSON/stdin/environment alternatives for automation. The published
    container includes the port-light command, and the Python package installs
    with pipx or uv tool; releases attach a matching wheel to the same tag.
    Container-side tokens default to persistent /data/cli-state storage.
  • /api/meta now advertises named client capabilities. Port suggestions accept
    require_count=true for an all-or-none requested count.

Changed

  • The MCP stdio server and CLI now share one tested HTTP client, response
    validator, and error model. Direct python /path/to/mcp/server.py startup
    remains supported from outside the repository.
  • The backend, MCP server, CLI, Python package, and release gate now read one
    product version. JSON mode also covers argument-parser failures, and long
    options no longer accept unstable abbreviations.
  • CI lints and tests the command-line package alongside the server, including a
    live server round trip for doctor, check, reserve, and release. It installs
    the built wheel in an isolated environment and builds the image to smoke-test
    both the CLI and MCP entry points.

Fixed

  • CLI and MCP responses now reject mismatched ports, invalid diagnostic data,
    malformed occupancy data, and unverified reservation scopes. Exact CLI
    reservations require the server capability that guarantees all-or-none
    allocation, preventing an older server from silently creating a partial
    reservation.
  • CLI and MCP environment configuration now uses one shared client factory.
    Local token-directory creation failures use the documented error category,
    and unexpected MCP failures no longer expose internal exception details.

v0.8.0

Choose a tag to compare

@github-actions github-actions released this 04 Sep 13:48

0.8.0 — 2026-09-04

Added

  • Setup / Doctor checks settings storage, snapshot freshness, host-listener trust, Docker access, Compose discovery completeness, and recent degraded events.
  • Doctor reports can be copied or downloaded as JSON. Reports use an aggregate allowlist and omit machine identity, peer details, ports, paths, credentials, environment values, and degradation scopes.

Changed

  • Settings writes now contain only changed fields. Saved overrides can be removed to restore their environment or default value.
  • Settings and peer edits use independent save queues and status messages. The settings page keeps drafts, confirmed values, and in-flight revisions separate.
  • Settings page event handling and save coordination now live behind a mounted page controller.

Fixed

  • Older settings or peer responses no longer replace edits made while a request is in flight.
  • Reverting a setting to its confirmed value clears its pending state, and switching Settings categories returns the page to the top.
  • Custom palette save, import, and delete failures are reported in the palette editor instead of the general autosave status.
  • Doctor prioritizes current Docker and Compose access failures over older scan results, and report copying falls back when the Clipboard API is unavailable.

v0.7.9

Choose a tag to compare

@github-actions github-actions released this 03 Sep 16:58

0.7.9 — 2026-09-04

Changed

  • Settings changes now save automatically. Writes are debounced and serialized, and newer edits remain pending until their own save completes.
  • The default waterfall layout caps its column count at the number of displayed machines, allowing one- and two-machine dashboards to use available desktop width.
  • The English and Simplified Chinese READMEs now include a dashboard screenshot made with fictional host and service data.

Fixed

  • Pending settings edits survive navigation and custom-theme changes. Responses from earlier saves no longer replace newer machine credentials or theme choices.
  • Incomplete machine entries remain editable instead of being silently removed during automatic saves.
  • Saved-setting source hints and scanner status badges update without resetting the form.

Development

  • Consolidated GitHub Actions into CI and Release. CI runs on main pushes and pull requests targeting main, cancels superseded runs, and runs Ruff once while retaining all Python and frontend checks.
  • Release requires successful CI for the exact tagged commit on main, publishes the multi-architecture images, then creates the GitHub Release. Version tags no longer trigger a duplicate test run, and manual dev image publishing has been removed.

v0.7.8

Choose a tag to compare

@github-actions github-actions released this 03 Sep 09:21

0.7.8 — 2026-09-03

Added

  • Light variants for Nord, Dracula, Tokyo Night, One Dark, Everforest, Rosé Pine, and Kanagawa. All ten built-in palette families now support both light and dark modes, including system-mode changes and cached startup appearance.
  • A refresh-interval slider in Settings shows the recommended peer capacity for each cadence while preserving custom values loaded from configuration.
  • Optional machine descriptions appear below host titles. Both the local machine and saved peers support notes of up to 120 characters.

Changed

  • Multi-host dashboards now accept up to 32 peers. Settings offers a responsive waterfall (default) and an optional tabbed view, on desktop and mobile alike.
  • Refresh intervals at or beyond the recommended 32-peer capacity explicitly explain that slower polling reduces traffic without increasing the product limit.
  • Peer refreshes use bounded concurrency and overlapping refresh triggers coalesce into one pending round. scope=all peer checks are also capped at six concurrent requests.
  • Saved peer rows are collapsed by default in Settings so larger fleets remain manageable.
  • Multi-machine layout lives under Appearance → Cards, with miniature layout previews and an explicit checkmark and selected label.

Fixed

  • The refresh slider no longer inherits the rectangular text-field focus shadow; keyboard focus is shown around its circular thumb.
  • Choice controls no longer show a clipped vertical focus line on pointer clicks. Layout cards and segmented choices retain a separate keyboard-only focus outline.
  • Local event notifications refresh only the hub; remote polling follows the selected interval. Full-fleet refresh requests retain priority when events overlap.
  • Superseded refresh queues cannot cancel a newer hidden-port unlock request.
  • The Catppuccin light preview now uses its palette colors instead of the default dark swatch.
  • System appearance changes no longer re-enable palette controls when settings are read-only.
  • Occupancy warning guidance now opens on pointer hover only from the info icon, rather than from the entire warning row. Focus and click controls are unchanged.

v0.7.7

Choose a tag to compare

@github-actions github-actions released this 03 Sep 03:30

0.7.7 — 2026-09-03

Added

  • Local machine name, scanner selection, Compose scan depth, excluded folder names, and file limit can be managed from Settings. Deployment paths, mounts, and permissions remain deployment configuration.
  • Occupancy warnings open troubleshooting guidance on hover, focus, or click, including checks for scanner failures and instructions for upgrading from v0.7.6.

Changed

  • Card summaries omit wildcard addresses (0.0.0.0 and ::) while preserving specific addresses. Full bindings remain in port details, with clearer descriptions of wildcard listeners.
  • Updated scanner settings, diagnostics, and bind-address copy in all seven interface languages. Technical troubleshooting documentation is maintained in English.

Fixed

  • Compose discovery no longer enters directories beyond the selected scan depth. Excluded folder names prevent discovery in unrelated data directories.
  • Repeated scanner failures are rate-limited independently of recent health-event history, including when more than 20 distinct failures occur.
  • Invalid scanner selections no longer silently enable every scanner. Occupancy checks and allocation fail closed while the settings page remains available for repair.

Upgrade notes

  • No mandatory configuration migration is required. Keep latest if already in use, or update a pinned image tag to v0.7.7, then pull and recreate the container.
  • Image updates do not grant Docker socket or directory permissions. Apply deployment changes with docker compose up -d port-light; docker compose restart does not apply changed environment variables, groups, or mounts. See Troubleshooting.

v0.7.6

Choose a tag to compare

@github-actions github-actions released this 02 Sep 17:59

0.7.6 — 2026-09-03

Added

  • Cards can optionally show compact bind-address summaries, with independent IPv4 and IPv6 controls. Wildcard listeners are labeled as all interfaces, multiple addresses collapse to +N, and full values remain in the port details and card tooltip.

Changed

  • A background occupancy monitor now owns scanning, snapshot/ETag caching, history, webhooks, and SSE notifications. HTTP routes read completed snapshots; manual and hidden-port writes update stored state without rescanning host sources.
  • scope=all fetches peers concurrently. Peer requests validate every DNS answer, disable environment proxies, and still reject redirects. DNS rebinding limits are documented in the security policy.
  • The frontend API module returns data without importing views. The app coordinates polling, SSE, grid/detail rendering, and detail refresh callbacks.

Fixed

  • Bind-address switches no longer repeat the environment or saved-setting source below each control.
  • Card bind summaries exclude manual reservations without bind information, include implicit Compose wildcard bindings, and normalize IPv4-mapped IPv6 consistently. IPv6 elision preserves leading and trailing ::.
  • Enabled scanner failures retain previous observations, suppress history/webhook transitions, and block allocation. Unknown occupancy is shown explicitly; health exposes readiness and scanner state.
  • Unreadable or invalid port data is preserved and returns 503, preventing later writes from replacing existing entries.
  • The free-port planner reserves a whole range atomically and reports conflicts and storage failures without closing the dialog.
  • Slow background scans no longer hold the publication lock or ASGI event loop. Refresh deadlines bound startup and shutdown; timed-out workers cannot accumulate or publish late results.
  • History database failures appear in health degradations; failed history reads return 503.
  • Truncated Compose scans cannot produce reservations or advance the history baseline.
  • Detail lookups outside a previously cached grid range use the requested port's snapshot data.

Development

  • Added a Chromium smoke flow with two temporary instances covering startup, details, a saved label, bind-address settings, batch reservation conflicts and retries, and host switching; frontend CI runs it after module tests.
  • The background-observation test waits for history completion independently of SSE publication, avoiding a race on slower systems.