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.80
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.80.tar.gz | 680.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| unitport-0.0.80-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.3 MB
Release files / unitport-0.0.80.tar.gz
| Download URL | unitport-0.0.80.tar.gz |
|---|---|
| Size | 680.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9d83d1d32d8d924330f81dc0dd00a45378051b529534124fdbe7edbf9b5d73b5
|
|
BLAKE2b-256 checksum How to use checksums |
da964ca6e5a39b135e11bbf6a9d88ce9924043c4773e7df39f1b37a13715bb62
|
| 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.80-py3-none-any.whl
| Download URL | unitport-0.0.80-py3-none-any.whl |
|---|---|
| Size | 664.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f6b36d18747c5c44b10342b0a5f6faebfbf7fba73b71ba1a102390c5c39e7415
|
|
BLAKE2b-256 checksum How to use checksums |
95e478f6abf6d5883dd85df9c63114fff2e91c0897a9c53fce7c1298b66532d6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.7
|