You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Adds a new integration for PiKVM IP-KVM appliances with a sensor platform (CPU temperature, CPU utilization, memory utilization, fan speed, and mass storage usage).
The reason will be displayed to describe this comment to others. Learn more.
🟡 Changes recommended
The one-time-code check rejects all numeric secrets, including valid 32-character Base32 secrets containing only digits 2–7, instead of limiting rejection to six- or eight-digit codes.
✅ No issues found at d05f941. Checked 25 done/exempt rules for pikvm (all newly claimed, plus related rules touching the diff); none are violated by the changed lines.
⚠️ Some checks require attention — see the details below.
Package
Old
New
No Advisories
Not Yanked
Repo Public
CI Upload
Release Pipeline
Security
PR Link
Async Safe
pikvm-aio
—
0.1.5
✅
✅
✅
⚠️
❌
☑️
❌
❌
📦 pikvm-aio: 0.1.5
No Advisories: ✅ No active advisories reported by PyPI for version 0.1.5.
Not Yanked: ✅ Version 0.1.5 is a live (non-yanked) release.
Repo Public: ✅ https://github.com/adamoutler/pikvm-aio is publicly accessible (it currently redirects to the renamed repository adamoutler/pikvm-cli, which is also public).
CI Upload: ⚠️ No PEP 740 provenance attestation present on PyPI. Upload method cannot be verified from PyPI alone.
Release Pipeline: ❌ Both .github/workflows/ci.yml and .forgejo/workflows/ci.yml publish to PyPI using a static TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }} / PYPI_API_TOKEN secret rather than OIDC/Trusted Publishing. A static token is acceptable for a version bump, but for a brand-new dependency it does not meet the preferred bar.
Security: ☑️ Baseline scan found nothing obvious in pyproject.toml, src/pikvm_aio/__init__.py, client.py, cli.py, security.py, and tls.py. No install-time network code, no exec/eval of decoded data, no reads of Home Assistant internals/secrets, and no off-purpose network destinations were found (the .forgejo/workflows/ci.yml CI job does POST test logs to dpaste.com, but this only runs in the upstream's own CI and is not part of the installed package). This is not a security review — only the cheap checks were run.
PR Link: ❌ PR description must link to the source repository at https://github.com/adamoutler/pikvm-aio. A PyPI page link is not sufficient. The PR body currently only links to a home-assistant.io documentation PR.
Async Safe: ❌ _file_chunk_generator in client.py:403-404 performs a blocking open()/f.read() inside the async generator consumed by the public async def upload_msd_image(...), blocking the event loop while streaming potentially multi-GB ISO images to the device.
Trim surrounding whitespace before checking for one-time codes. A pasted value such as "123456\n" bypasses this guard, but the client strips it and uses it as a static OTP, so setup can succeed and authentication then fails when the code expires.
The reason will be displayed to describe this comment to others. Learn more.
🔵 Needs a closer look
The initial-value filter omits core health sensors when their first reading is unavailable, leaving them permanently missing even after valid readings return.
No open issues 🎉
1 previously missed issue
In code that hasn't changed since last review
Core health sensors are omitted when initial readings are unavailable
homeassistant/components/pikvm/sensor.py:93
Create the core health sensors even when their first reading is unavailable. This filter also excludes CPU temperature, CPU utilization, and memory utilization when their initial value is None; later coordinator refreshes only update existing entities, so those sensors remain missing even after valid readings return. Restrict this filtering to the optional hardware sensors.
The reason will be displayed to describe this comment to others. Learn more.
🔵 Needs a closer look
Human assessment is needed because updating the host can retain the old SSL-verification setting, causing certificate validation to fail after reload despite successful validation during reconfiguration.
The reason will be displayed to describe this comment to others. Learn more.
🔵 Needs a closer look
The pinned pikvm-aio 0.1.5 source could not be retrieved, leaving TLS, authentication, and optional-hardware contracts unverified, while branding assets and required validation results remain unconfirmed.
The reason will be displayed to describe this comment to others. Learn more.
🔵 Needs a closer look
Unavailable pikvm-aio source and documentation leave real-device mass-storage polling, TLS/TOTP and session SSL behavior, and quality-scale claims requiring human verification.
CI Upload: ✅ Trusted Publisher attestation found (GitHub).
Release Pipeline: ✅ OIDC via Trusted Publisher attestation (GitHub); automated CI upload verified by PyPI.
Security: ☑️ Baseline scan found nothing obvious in pyproject.toml, src/pikvm_aio/__init__.py, src/pikvm_aio/client.py, src/pikvm_aio/security.py, src/pikvm_aio/tls.py, src/pikvm_aio/exceptions.py, src/pikvm_aio/validators.py, src/pikvm_aio/cli.py, src/pikvm_client/*, src/pikvm_cli/*. No install-time network/exec code, no secret exfiltration paths, no reads outside the library's own scope, no off-purpose network destinations. This is not a security review — only the cheap checks were run.
Async Safe: ✅ New dependency reviewed in full (client.py, tls.py, cli.py). All I/O uses aiohttp/asyncio; file reads and blocking stat/open calls are dispatched via asyncio.to_thread; key-tap delays use asyncio.sleep. No blocking calls (requests, time.sleep, sync sockets/files/DB, subprocess) found inside any async def.
Warning
Firewall blocked 1 domain
The following domain was blocked by the firewall during workflow execution:
raw.githubusercontent.com
To allow these domains, add them to the network.allowed list in your workflow frontmatter:
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Proposed change
Adds a new integration for PiKVM IP-KVM appliances with a
sensorplatform (CPU temperature, CPU utilization, memory utilization, fan speed, and mass storage usage).New dependency:
pikvm-aio==0.1.6(https://github.com/adamoutler/pikvm-aio)Type of change
Additional information
Checklist
ruff format homeassistant tests)If user exposed functionality or configuration variables are added/changed:
If the code communicates with devices, web services, or third-party tools:
Updated and included derived files by running:
python3 -m script.hassfest.requirements_all.txt.Updated by running
python3 -m script.gen_requirements_all.To help with the load of incoming pull requests: