unitport — UnitPort local helper
Headless daemon that connects a local GPU / Isaac Lab host (workstation or the user's own cloud server) to the UnitPort cloud canvas. The canvas is the remote control (遥控器); this process has no GUI — only terminal output.
Authoritative design:
../knowledges/local_helper_design.md(rulings LH-D1…LH-D6, contracts C10 pairing / C11 control protocol).
What it is (and is not)
- Is: an outbound-only WebSocket agent exposing a fixed verb set to the cloud (report capabilities, publish an asset index, receive a bundle from the user's own canvas, start/stop a training run, stream telemetry).
- Is not: a shell, an exec server, or a GUI. The cloud can never send an arbitrary command — only the fixed verbs, only from a paired session of the same account, only bundles that originate from the user's own canvas (least-privilege red line, LH-D4 / C11).
The same binary serves execution target ① (UserServerTarget, user cloud
server) and ③ (LocalHelperTarget, local host) — only the host differs (LH-D5).
Install
pip install unitport
Cross-platform (Windows + Linux). Runtime deps: websockets (the live link) and,
on Python < 3.11, tomli (TOML reader). Everything else is stdlib.
CLI (headless — everything else is driven remotely from the canvas)
| Command | Purpose |
|---|---|
unitport login |
Browser-approve device pairing; stores a refreshable helper token |
unitport up (serve) |
Dial out to the cloud relay and serve the fixed verb set |
unitport status |
Connection / run state, paired account, config summary |
unitport config |
Declare Isaac/MuJoCo interpreter paths + resource roots |
unitport doctor |
Fail-loud self-check (interpreters, deps, cloud, token) |
There are deliberately no pull / train / push local subcommands — those
are remote verbs, triggered from the canvas (C11 §4).
Config
- Config dir:
%APPDATA%\unitport\(Windows) ·$XDG_CONFIG_HOME/unitport/or~/.config/unitport/(POSIX). Override withUNITPORT_HOME. config.toml— cloud base URL, engine interpreter paths,resource_roots, workspace dir. Human-editable; also managed byunitport config.token.json— the helper token (secret;chmod 600on POSIX). Never printed, never logged.device.json— the persistent (non-secret)device_id.
Status
Under active construction (phases LH-P1…LH-P8, Isaac Lab first). See the design
doc §12 for the phase map. This tree currently implements the local foundation
(config, capability detection, doctor, CLI) plus the pairing/transport clients;
the workers/relay Durable Object cloud side lives in ../workers/relay.
Release files for unitport 0.0.79
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| unitport-0.0.79.tar.gz | 679.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| unitport-0.0.79-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.3 MB
Release files / unitport-0.0.79.tar.gz
| Download URL | unitport-0.0.79.tar.gz |
|---|---|
| Size | 679.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
062d3cf75b3c1d3dde49d2c6160e99f1d4cc26415f89693e306fb50f1b71841c
|
|
BLAKE2b-256 checksum How to use checksums |
81489bb2b4699ccb4f445a9e08c50e5df8930a8ca2e6dc080b671d22d3cde526
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.7
|
Release files / unitport-0.0.79-py3-none-any.whl
| Download URL | unitport-0.0.79-py3-none-any.whl |
|---|---|
| Size | 663.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a1dbda553a8afc3882a8384f8b0cecfcb2e720c07088cd5855c70768b0111ac9
|
|
BLAKE2b-256 checksum How to use checksums |
e2763512cb9784a86302613ac9820cb4b37b278e054bcfee9ffe792bf0ae3db8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.7
|