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.84
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.84.tar.gz | 688.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| unitport-0.0.84-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.4 MB
Release files / unitport-0.0.84.tar.gz
| Download URL | unitport-0.0.84.tar.gz |
|---|---|
| Size | 688.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
84ba3dc11d4d4c08b4f35e37e876154657f80123a2ba7c633c72c7af06c447c0
|
|
BLAKE2b-256 checksum How to use checksums |
8c4daf41d652631c9c382bbc54567db09e280c435e4ffb38a921ac4abca2038a
|
| 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.84-py3-none-any.whl
| Download URL | unitport-0.0.84-py3-none-any.whl |
|---|---|
| Size | 672.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b1dfc2007ff3a8519d8dc99cea04c90d2dec221fe160c82ccac18fa91c4d9af6
|
|
BLAKE2b-256 checksum How to use checksums |
b82d2956898f91cef288996774616a2e2879eb531efbcfcab7ad7d726c5da53a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.7
|