pow-cli 0.2.0rc2__tar.gz → 0.4.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. pow_cli-0.4.0/CHANGELOG.md +382 -0
  2. {pow_cli-0.2.0rc2 → pow_cli-0.4.0}/PKG-INFO +3 -5
  3. {pow_cli-0.2.0rc2 → pow_cli-0.4.0}/pow_cli/cli/init.py +282 -124
  4. {pow_cli-0.2.0rc2 → pow_cli-0.4.0}/pow_cli/cli/lint.py +3 -9
  5. {pow_cli-0.2.0rc2 → pow_cli-0.4.0}/pow_cli/cli/main.py +2 -4
  6. {pow_cli-0.2.0rc2 → pow_cli-0.4.0}/pow_cli/cli/ros.py +3 -0
  7. pow_cli-0.4.0/pow_cli/cli/sim.py +217 -0
  8. pow_cli-0.4.0/pow_cli/common/installation.py +97 -0
  9. pow_cli-0.4.0/pow_cli/common/jsonc.py +332 -0
  10. pow_cli-0.4.0/pow_cli/common/prompt.py +282 -0
  11. {pow_cli-0.2.0rc2 → pow_cli-0.4.0}/pow_cli/core/asset_manager.py +9 -2
  12. pow_cli-0.4.0/pow_cli/core/initializer.py +734 -0
  13. {pow_cli-0.2.0rc2 → pow_cli-0.4.0}/pow_cli/core/linter.py +149 -27
  14. {pow_cli-0.2.0rc2 → pow_cli-0.4.0}/pow_cli/core/models/pow_config.py +180 -6
  15. {pow_cli-0.2.0rc2 → pow_cli-0.4.0}/pow_cli/core/models/system_config.py +26 -4
  16. {pow_cli-0.2.0rc2 → pow_cli-0.4.0}/pow_cli/core/ros_manager.py +230 -41
  17. {pow_cli-0.2.0rc2 → pow_cli-0.4.0}/pow_cli/core/runner.py +112 -56
  18. pow_cli-0.4.0/pow_cli/core/vscode_settings.py +294 -0
  19. {pow_cli-0.2.0rc2 → pow_cli-0.4.0}/pow_cli/data/pow.template.toml +1 -1
  20. {pow_cli-0.2.0rc2 → pow_cli-0.4.0}/pow_cli/data/system.template.toml +5 -0
  21. {pow_cli-0.2.0rc2 → pow_cli-0.4.0}/pow_cli/docker/Dockerfile.simros_jazzy +9 -4
  22. {pow_cli-0.2.0rc2 → pow_cli-0.4.0}/pyproject.toml +2 -4
  23. pow_cli-0.4.0/tests/conftest.py +11 -0
  24. pow_cli-0.4.0/tests/test_bump.py +30 -0
  25. {pow_cli-0.2.0rc2 → pow_cli-0.4.0}/tests/test_config.py +171 -7
  26. pow_cli-0.4.0/tests/test_init_cmd.py +482 -0
  27. pow_cli-0.4.0/tests/test_initializer.py +423 -0
  28. pow_cli-0.4.0/tests/test_isaacsim_6_1_0.py +188 -0
  29. pow_cli-0.4.0/tests/test_linter.py +161 -0
  30. {pow_cli-0.2.0rc2 → pow_cli-0.4.0}/tests/test_prompt.py +149 -1
  31. {pow_cli-0.2.0rc2 → pow_cli-0.4.0}/tests/test_ros_cmd.py +8 -0
  32. pow_cli-0.4.0/tests/test_ros_image_recovery.py +135 -0
  33. {pow_cli-0.2.0rc2 → pow_cli-0.4.0}/tests/test_ros_manager.py +78 -4
  34. {pow_cli-0.2.0rc2 → pow_cli-0.4.0}/tests/test_runner.py +180 -4
  35. pow_cli-0.4.0/tests/test_sim_cmd.py +240 -0
  36. pow_cli-0.4.0/tests/test_sim_setup.py +238 -0
  37. pow_cli-0.4.0/tests/test_verify_isaacsim.py +156 -0
  38. pow_cli-0.4.0/tests/test_vscode_settings.py +370 -0
  39. pow_cli-0.4.0/tests/test_xauthority.py +105 -0
  40. pow_cli-0.2.0rc2/CHANGELOG.md +0 -170
  41. pow_cli-0.2.0rc2/pow_cli/cli/check.py +0 -25
  42. pow_cli-0.2.0rc2/pow_cli/cli/sim.py +0 -67
  43. pow_cli-0.2.0rc2/pow_cli/common/prompt.py +0 -136
  44. pow_cli-0.2.0rc2/pow_cli/core/initializer.py +0 -535
  45. pow_cli-0.2.0rc2/tests/test_check_cmd.py +0 -47
  46. pow_cli-0.2.0rc2/tests/test_init_cmd.py +0 -117
  47. pow_cli-0.2.0rc2/tests/test_initializer.py +0 -83
  48. pow_cli-0.2.0rc2/tests/test_sim_cmd.py +0 -71
  49. pow_cli-0.2.0rc2/tests/test_verify_isaacsim.py +0 -82
  50. {pow_cli-0.2.0rc2 → pow_cli-0.4.0}/.gitignore +0 -0
  51. {pow_cli-0.2.0rc2 → pow_cli-0.4.0}/LICENSE +0 -0
  52. {pow_cli-0.2.0rc2 → pow_cli-0.4.0}/NOTICE +0 -0
  53. {pow_cli-0.2.0rc2 → pow_cli-0.4.0}/README.md +0 -0
  54. {pow_cli-0.2.0rc2 → pow_cli-0.4.0}/pow_cli/__init__.py +0 -0
  55. {pow_cli-0.2.0rc2 → pow_cli-0.4.0}/pow_cli/cli/__init__.py +0 -0
  56. {pow_cli-0.2.0rc2 → pow_cli-0.4.0}/pow_cli/cli/asset.py +0 -0
  57. {pow_cli-0.2.0rc2 → pow_cli-0.4.0}/pow_cli/cli/python.py +0 -0
  58. {pow_cli-0.2.0rc2 → pow_cli-0.4.0}/pow_cli/cli/run.py +0 -0
  59. {pow_cli-0.2.0rc2 → pow_cli-0.4.0}/pow_cli/common/__init__.py +0 -0
  60. {pow_cli-0.2.0rc2 → pow_cli-0.4.0}/pow_cli/common/utils.py +0 -0
  61. {pow_cli-0.2.0rc2 → pow_cli-0.4.0}/pow_cli/core/__init__.py +0 -0
  62. {pow_cli-0.2.0rc2 → pow_cli-0.4.0}/pow_cli/core/models/asset_profile.py +0 -0
  63. {pow_cli-0.2.0rc2 → pow_cli-0.4.0}/pow_cli/data/asset-registry/isaacsim_assets_5_1_0.toml +0 -0
  64. {pow_cli-0.2.0rc2 → pow_cli-0.4.0}/pow_cli/data/asset-registry/omniverse_assets.toml +0 -0
  65. {pow_cli-0.2.0rc2 → pow_cli-0.4.0}/pow_cli/data/example/asset-profile.example.toml +0 -0
  66. {pow_cli-0.2.0rc2 → pow_cli-0.4.0}/pow_cli/data/gitignore.template +0 -0
  67. {pow_cli-0.2.0rc2 → pow_cli-0.4.0}/pow_cli/main.py +0 -0
  68. {pow_cli-0.2.0rc2 → pow_cli-0.4.0}/scripts/check_assets_urls.py +0 -0
  69. {pow_cli-0.2.0rc2 → pow_cli-0.4.0}/tests/test_version.py +0 -0
@@ -0,0 +1,382 @@
1
+ # Changelog
2
+
3
+ All notable changes to the `pow-cli` package will be documented in this file.
4
+
5
+ ## [0.4.0] - 2026-09-14
6
+
7
+ ### Added
8
+
9
+ - **Isaac Sim 6.1.0 support.** `pow init` now offers 6.1.0, downloads its standalone
10
+ archive and selects the matching ROS workspace tag. Asset references use
11
+ `Assets/Isaac/6.1`. Isaac Sim 5.1.0 remains supported.
12
+ - **Linux aarch64 support.** `pow init` and `pow sim` download the
13
+ aarch64 build of 6.1.0 or 5.1.0 on ARM hosts such as DGX Spark, and the simulator launch and
14
+ compatibility-check commands accept that architecture. The bundled ROS Docker image remains
15
+ amd64-only: `pow init` skips its build on aarch64, and `pow ros` / `pow ros build`
16
+ report that limitation.
17
+ - **`pow sim` / `pow sim check` install missing prerequisites.** Both commands
18
+ now create missing global folders and `system.toml`, install the selected
19
+ supported release when absent, and prepare the asset-browser cache before
20
+ launching. No project or confirmation prompt is required. Incomplete installs
21
+ are backed up before repair; a failed repair restores the original contents.
22
+ - **ROS image rebuild prompt in `pow init`.** An existing `pow_simros_jazzy`
23
+ image without a matching simulator-version label used to stop initialization
24
+ with no rebuild option. Init now asks whether to rebuild it (default: No).
25
+ Accepting updates the existing tag using Docker's cache and preserves existing
26
+ containers and workspace files. Recreate containers explicitly to use the new image.
27
+
28
+ ### Changed
29
+
30
+ - `pow init` defaults new projects to `6.1.0` unless a global preference is set.
31
+ Explicit version selection takes precedence; keeping an existing project
32
+ configuration preserves its selected version.
33
+ - A missing version pinned in global `system.toml` is now installed by `pow sim`
34
+ and `pow sim check`, rather than falling back to another installed version.
35
+ - **ROS workspace and container compatibility checks.** Setup and launching now
36
+ check the selected 6.1.0 workspace, image label and running-container mount.
37
+ Unknown or incompatible state is reported with recovery guidance. Stale
38
+ container-mounted build directories are no longer deleted automatically.
39
+ - `pow lint` asset-version fixes use verified release mappings. Unknown versions are
40
+ not rewritten; changes to scenes still require `pow lint fix` and do not migrate
41
+ renamed assets or application APIs.
42
+ - The optional simulator lookup reads matching distribution metadata without
43
+ importing `isaacsim`, avoiding simulator startup during path discovery.
44
+ - Python 3.10 installs `tomli` for the existing `tomllib` fallback.
45
+
46
+ ### Fixed
47
+
48
+ - **`pow init` could not upgrade an existing project's simulator version.**
49
+ Choosing to update the project now opens the version picker instead of keeping
50
+ the old version. Explicit `--sim-version` changes are saved with the
51
+ corresponding simulator link and editor paths while preserving unrelated TOML
52
+ settings, profiles, and comments.
53
+ - **`pow sim check` accepted unsuccessful verdicts.** A `System checking result:`
54
+ line now succeeds only when its verdict is `PASSED`; failed or unrecognized
55
+ verdicts are errors, alongside missing results and nonzero process exits.
56
+ - **Docker inspection errors were treated as missing or incompatible images.**
57
+ Daemon and permission failures now report the underlying error without offering
58
+ a rebuild. Failed ROS builds stop initialization before custom-image building
59
+ and finalization.
60
+ - **`setup.py install is deprecated` warnings during colcon builds** — suppressed
61
+ in both automatic and manual builds inside the bundled ROS container
62
+ (requires rebuilding the image).
63
+ - `pow asset set` now suggests `pow asset unset` when the assets symlink already
64
+ exists, instead of telling the user to remove it manually.
65
+
66
+ ### Removed
67
+
68
+ - **Isaac Sim 6.0.1 installation support.** Projects pinned to it must select
69
+ 6.1.0 or 5.1.0 for initialization; an existing complete 6.0.1 installation can
70
+ still launch through `pow sim -v 6.0.1`.
71
+ - The mandatory `isaacsim` runtime dependency — installing and starting pow-cli
72
+ no longer requires a simulator package.
73
+
74
+ Automated coverage uses mocked simulator, GPU, network, and Docker operations.
75
+ Actual 6.1.0 checker output, GUI/headless launches, standalone Python, ROS topic
76
+ delivery, and DGX Spark workflows still require hardware validation.
77
+
78
+ ---
79
+
80
+ ## [0.3.0] - 2026-09-07
81
+
82
+ ### Added
83
+
84
+ - **`pow lint` rule 4 — Isaac asset version mismatch.** Asset references pointing
85
+ at an `Assets/Isaac/<major>.<minor>` tree other than the one `[sim] version`
86
+ reads from are reported, and rewritten by `pow lint fix` (`version = "6.0.1"`
87
+ → `Assets/Isaac/6.0`). NVIDIA keeps every release's asset tree online, so a
88
+ stage authored against 5.1 kept loading 5.1 assets after the project moved to
89
+ 6.0.1 with nothing to show for it. The target version is derived from the
90
+ configured version rather than tabulated, applies to every reference form (S3
91
+ URLs, `pow-assets`/`user-home` aliases, relative paths), and is skipped when
92
+ `pow.toml` sets no version
93
+
94
+ - **Isaac Sim 6.0.1 support.** `pow init` step 4 now offers the installable
95
+ versions as an arrow-key picker — latest first, marking the latest release and
96
+ any already installed — or takes the version from the new `--sim-version`
97
+ flag, or from `[sim] version` in an existing `pow.toml` you chose to keep. The
98
+ picker falls back to a typed prompt when there is no terminal (piped stdin,
99
+ CI), so the command stays scriptable. Releases live in
100
+ `PowConfig.ISAACSIM_RELEASES`, which pins each version's download URL — 6.0.1
101
+ is served from `downloads.isaacsim.nvidia.com`, not the host used for 5.1.0 —
102
+ and the matching `IsaacSim-<version>` ROS workspace ref cloned during setup.
103
+ - `pow sim` / `pow sim check` default `-v` to the Isaac Sim version actually
104
+ installed under `.pow/isaacsim/` instead of a fixed constant.
105
+ - **`[sim] default_version` in `~/.pow/system.toml`** — pin the version `pow sim`
106
+ and `pow sim check` use when `-v` is omitted. Resolution order is `-v`, then
107
+ this key, then the newest version installed under `.pow/isaacsim/`; an empty
108
+ value means auto-detect. A pinned version that is not installed prints a
109
+ warning and falls back to the newest installed one. New `system.toml` files
110
+ are created with the key present and empty; existing files are left untouched
111
+ and read as unset.
112
+ - `pow sim --help` now lists the options bare `pow sim` accepts (`-v/--version`,
113
+ `--ros`, `--no-ros`), which previously showed up only under
114
+ `pow sim launch --help`.
115
+ - **`pow sim check`** — run the Isaac Sim compatibility check from the managed
116
+ installation (`.pow/isaacsim/<version>/isaac-sim.compatibility_check.sh`), with
117
+ `-v/--version` to pick the version. Needs no project and no extra pip
118
+ dependency; the script sets up its own ROS environment (forward
119
+ `-- --no-ros-env` to skip it). `pow sim` is now a command group whose default
120
+ subcommand is `launch` — bare `pow sim [args...]` still launches Isaac Sim and
121
+ forwards raw arguments exactly as before, and `pow sim launch` is the explicit
122
+ form
123
+
124
+ ### Changed
125
+
126
+ - **`pow init` no longer replaces an existing `pow.toml`.** Choosing to update
127
+ the configuration used to overwrite the file with the bundled template, losing
128
+ custom `exts`, `raw_args`, `ros_bridge`, every `[[profiles]]` block and all
129
+ comments. It now patches only the three settings init asks about — `version`,
130
+ `enable_ros`, `isaacsim_ros_ws` — and leaves the rest of the document, key
131
+ order and comments included, exactly as written. Step 10 lists what changed
132
+ (`version: 5.1.0 → 6.0.1`), and says the file is already up to date when
133
+ nothing moved, in which case it is not rewritten at all. Keys the template has
134
+ and your file lacks are deliberately not back-filled. The step-2 prompt is
135
+ reworded from "override" to "Update settings in existing pow.toml?" to match.
136
+ - The `_isaacsim` symlink is re-pointed when `pow init` installs a different
137
+ version, instead of being left on the previous installation. A real directory
138
+ at `_isaacsim` is never deleted; it is reported as an error.
139
+ - `pow init` writes the selected `version` into the generated `pow.toml`.
140
+ - Isaac Sim's bundled ROS 2 libraries are located by probing
141
+ `exts/isaacsim.ros2.core/<distro>/lib` and then
142
+ `exts/isaacsim.ros2.bridge/<distro>/lib`, so ROS works on 6.0.1, which renamed
143
+ the extension.
144
+
145
+ ### Security
146
+
147
+ - **ROS containers no longer disable X11 access control with `xhost +`.** When
148
+ `DISPLAY` is set, `pow ros` now copies only the current display's Xauthority
149
+ record into a private temporary file, mounts it read-only in the container,
150
+ and sets the container's `XAUTHORITY` to that file. The host's authority file
151
+ and X server access-control settings are left unchanged, and the temporary
152
+ credentials are removed when the Docker client exits. Headless launches skip
153
+ X11 setup; GUI launches fail with an actionable message when `xauth` or valid
154
+ display credentials are unavailable. Existing running containers must be
155
+ recreated to receive the new authentication mount.
156
+ - An Isaac Sim version can no longer escape `.pow/isaacsim/`: versions used as a
157
+ path component are validated, and download URLs are only ever read from the
158
+ release registry, never built from a supplied version string.
159
+ - Archive members are chmod-ed via the path `zipfile` actually wrote rather than
160
+ a recomputed one, so a crafted zip cannot change permissions outside the
161
+ install directory; setuid/setgid bits in the archive are dropped.
162
+
163
+ ### Fixed
164
+
165
+ - A `pow.toml` that is not valid TOML is reported as
166
+ `pow.toml is not valid TOML: <parse error>` with a pointer to fix or delete it,
167
+ instead of a raw `tomllib` traceback. No command rewrites the file to make it
168
+ parse.
169
+ - An interrupted Isaac Sim download no longer leaves a truncated zip that the
170
+ next `pow init` mistakes for a complete archive: downloads land on a `.part`
171
+ file and are renamed only once finished.
172
+ - Execute permissions are restored before `post_install.sh` runs, so an archive
173
+ without Unix mode bits no longer fails the install.
174
+ - `pow asset` resolves the `.kit` file from the project's configured Isaac Sim
175
+ version instead of a hardcoded `5.1.0` path.
176
+ - **`pow sim check` could report nothing at all** — inside Isaac Sim's bundled
177
+ Python the check extension failed with `ModuleNotFoundError: No module named
178
+ 'packaging'` (then `'setuptools'`) and never produced a verdict. The vendor
179
+ launcher `isaac-sim.compatibility_check.sh` never sources
180
+ `setup_python_env.sh`, so whether `packaging` was importable depended on kit's
181
+ extension load order. pow now puts the installation's own bundled module
182
+ directories on `PYTHONPATH` and no longer forwards the host `PYTHONPATH` (which
183
+ typically targets another Python version, the same reason the ROS bridge
184
+ environment strips it)
185
+ - **`pow sim check` exited 0 when the check produced no result** — Isaac Sim exits
186
+ 0 even when the check app fails to start. The command now streams the output and
187
+ fails with a clear message if no `System checking result:` line appears; a
188
+ non-zero exit code from the check still takes priority
189
+
190
+ ### Removed
191
+
192
+ - **`pow check`** — the standalone Isaac Sim compatibility check command has been
193
+ removed, replaced by `pow sim check` above. It ran the check through the pip
194
+ `isaacsim` entry point, so pow-cli no longer depends on the
195
+ `isaacsim[compatibility-check]` extra and `isaacsim-app` is no longer installed
196
+ as a transitive dependency
197
+ - The `packaging` and `setuptools` runtime dependencies, which existed only for
198
+ that pip-based check. `pow sim check` reads those modules from the Isaac Sim
199
+ installation instead
200
+
201
+ ---
202
+
203
+ ## [0.2.0] - 2026-07-28
204
+
205
+ Stable release of the 0.2.0 line, promoted from `0.2.0-rc.2` with no functional
206
+ changes.
207
+
208
+ Everything new since `0.1.1` is listed in the two release candidate entries
209
+ below — headline items: the new `pow sim` and `pow ros build` commands, the
210
+ `ros_bridge` and `ros_docker_image` config keys, Jazzy-only ROS 2 support
211
+ (Humble removed), a faster `pow init` that no longer builds the ROS workspace,
212
+ and fixes for `rosdep install`, `cpu_performance_mode`, and `ros2` tab
213
+ completion inside the container.
214
+
215
+ ---
216
+
217
+ ## [0.2.0-rc.2] - 2026-07-28
218
+
219
+ ### Added
220
+
221
+ - **`pow sim`** — run Isaac Sim from any directory, with no project required: no `pyproject.toml` check and `pow.toml` is never read. Launches the default version (`5.1.0`, override with `-v/--version`) and forwards raw arguments straight to `isaac-sim.sh` (`pow sim -- --no-window`). The ROS 2 bridge environment is loaded by default (`--ros jazzy`); pass `--no-ros` to launch with the inherited environment instead
222
+ - **`pow ros build`** — build the custom image from `ros_dockerfile` without re-running `pow init`; builds the `pow_simros_jazzy` base image first if it is missing, and supports `--no-cache`. `pow ros` is now a command group (bare `pow ros [args...]` usage is unchanged; `pow ros launch` is the explicit form)
223
+ - **`ros_bridge` config in `pow.toml`** — choose which Isaac Sim internal ROS 2 bridge libs to load (`jazzy` or `humble`, default `jazzy`), i.e. which `exts/isaacsim.ros2.bridge/<distro>/lib` is added to `LD_LIBRARY_PATH` when `enable_ros = true`. Overridable per profile. Previously the bridge was inferred from the host Ubuntu version with no way to override it; an unsupported value is now rejected with a clear error
224
+ - **Tab completion for the `pow init` ROS workspace path** — step 6's "Path to clone IsaacSim-ros_workspaces" prompt now completes filesystem paths on <kbd>Tab</kbd> like a shell: unique directories complete inline (no stray trailing space, so the next segment can be typed straight away), ambiguous prefixes list candidates, and `~` is kept in the stored path. Trailing separators and whitespace are trimmed before the value is written to `pow.toml`
225
+
226
+ ### Changed
227
+
228
+ - **Breaking (vs 0.2.0-rc.1):** the `ros_container_name` config key was renamed to `ros_docker_image`. The container name is no longer configured directly — it is derived from the image name (`/` and `:` replaced with `_`), so default setups now get a container named `pow_simros_jazzy` instead of `pow_simros`
229
+ - **Breaking (vs 0.2.0-rc.1):** ROS 2 Humble support was removed — the ROS workspace and docker integration now support Jazzy only (`Dockerfile.simros_humble` deleted). Isaac Sim itself still runs on Ubuntu 22.04 and 24.04; Jazzy workspaces build on both
230
+ - **`pow init` no longer builds the Isaac Sim ROS workspace.** Step 6 only clones `IsaacSim-ros_workspaces`; the ROS 2 bridge comes from Isaac Sim's own prebuilt libs (selected by `ros_bridge`), so init is much faster and no longer runs a Docker build for the workspace. It reports the bridge distro in use instead of a build result
231
+ - `pow init` no longer creates the `scripts/`, `.assets/`, and `standalone/` project folders (only `exts/`, `.modules/`, `usda/`). A manually created `scripts/` folder is still mounted into the ROS container when present
232
+ - The `pow_simros_jazzy` image now resolves workspace dependencies with `rosdep install` at build time instead of building the workspace, and source-only packages (`topic_based_ros2_control`) are staged in `/opt/pow/extra_src` and copied into `/jazzy_ws/src` at container start, so the runtime volume mount no longer shadows them
233
+
234
+ ### Fixed
235
+
236
+ - **`rosdep install` failed inside the Jazzy container** — three causes, all fixed (requires rebuilding the image): the Ubuntu 24.04 base image's stock `ubuntu` user took UID 1000 and collided with the mapped host user, so `HOME` pointed at `/home/ubuntu` while the host `~/.ros` was mounted at `/home/hostuser/.ros`; the per-user rosdep cache was empty because `rosdep update` had run as root at build time, giving "your rosdep installation has not been initialized"; and `ros-jazzy-ros-testing` was missing from the image
237
+ - **`cpu_performance_mode` asked for the sudo password on every launch** — `pow run` / `pow python` now read the current CPU governor from `/sys/devices/system/cpu/cpu*/cpufreq/scaling_governor` first and run no `sudo` at all when it is already `performance`, so the password is normally needed once instead of every launch. When sudo credentials are still cached the governor is set without the "requires sudo" notice, and hosts without `cpupower` or without cpufreq support now report and skip rather than prompting for a password to no purpose. The interactive prompt itself is unchanged when the governor really has to be switched
238
+ - **`ros2` tab completion inside the `pow_simros` container** — the entrypoint sourced ROS before exec'ing bash, which carried environment variables but not bash completion functions. Interactive shells now re-source `/opt/ros/jazzy/setup.bash` and the workspace overlay via `/etc/bash.bashrc`, so `ros2` / `colcon` autocomplete works without manually sourcing `setup.bash` (requires rebuilding the image)
239
+
240
+ ---
241
+
242
+ ## [0.2.0-rc.1] - 2026-06-14
243
+
244
+ ### Added
245
+
246
+ - **Custom ROS Dockerfile (`pow init`)**
247
+ - New `ros_dockerfile` config in `pow.toml` — point to a project-local Dockerfile that layers on top of the bundled `pow_simros_<distro>` base image
248
+ - New `ros_container_name` config in `pow.toml` — set a custom container/image name (defaults to `pow_simros`)
249
+ - `pow init` now builds the custom image automatically after the base image when `ros_dockerfile` is set
250
+ - `pow ros` launches the custom image when configured, otherwise falls back to the base image
251
+ - **Version flag (`pow --version` / `pow -v`)** — quickly check the installed `pow-cli` version from the command line
252
+
253
+ ### Changed
254
+
255
+ - Updated CLI description to *"Manage Isaac Sim projects and simplify the development workflow"*
256
+ - Renamed status messages from *"Isaac ROS workspace"* to *"Isaac Sim ROS workspace"* for clarity
257
+ - Container name is now read from `ros_container_name` config instead of being hard-coded
258
+
259
+ ---
260
+
261
+ ## [0.1.1] - 2026-06-14
262
+
263
+ ### Fixed
264
+
265
+ - **ROS Docker container: `colcon build` fails for new packages** — The container
266
+ entrypoint now detects stale build artifacts (left from a host-path build) and
267
+ cleans `build/`, `install/`, and `log/` automatically before rebuilding.
268
+
269
+ ---
270
+
271
+ ## [0.1.0] - 2026-06-05
272
+
273
+ First stable release of `pow-cli`, promoted from `0.1.0-rc.1` with documentation improvements.
274
+
275
+
276
+ ### Fixed
277
+
278
+ - Installation guide referenced incorrect `pow-cli` version
279
+
280
+ ### Changed
281
+
282
+ - Improved README wording, tagline, and Profiles section
283
+
284
+ ---
285
+
286
+ ## [0.1.0-rc.1] - 2026-05-11
287
+
288
+ ### Added
289
+
290
+ - **Asset Management (`pow asset`)**
291
+ - `pow asset list` — list available Isaac Sim & Omniverse assets
292
+ - `pow asset add` — download and register assets into the local asset folder (only support `isaacsim_5_1_0` for now)
293
+ - `pow asset set / unset` — set/unset target local asset folder
294
+ - `pow asset info` — display current local asset folder information
295
+ - **Linter (`pow lint`)**
296
+ - New `pow lint` and `pow lint --fix` commands for `.usda` files
297
+ - Detects absolute/relative local asset paths and rewrites them with correct aliases or asset urls (`user-home`, `pow-assets`)
298
+ - Rule for validating `simros_ws` relative paths
299
+ - **ROS Integration (`pow ros`)**
300
+ - `pow ros` command to build, launch, and attach to ROS 2 Docker containers
301
+ - Verbose mode (`--verbose`) for runtime diagnostics
302
+ - Separate Dockerfiles for ROS Humble and Jazzy distributions
303
+ - Project `scripts/` directory mounted into the container
304
+ - PyTorch with CUDA support available inside the container
305
+ - `isaacsim_ros_ws` working directory configurable in `pow.toml`
306
+ - **Runner Improvements**
307
+ - (experimental) `pow run --open <file>` option to open a USD stage on launch
308
+ - Non-existent `ext_folders` entries are now silently skipped instead of auto-created
309
+ - **Other**
310
+ - `pow python` command with `--profile` flag for running standalone app under specified version of Isaac Sim's Python
311
+ - `user-home` aliases automatically configured during `pow init`
312
+ - `usda/` folder added to default project structure
313
+ - `extends` support in `pow.toml` for profile-based configuration
314
+
315
+ ### Fixed
316
+
317
+ - ROS Jazzy container build failure on Ubuntu 24.04
318
+ - CUDA version pinned to 12.1 for deterministic ROS builds
319
+ - `.ros` / `.ros2` mount and permission issues in the SimROS container
320
+ - SimROS entrypoint no longer warns when host-user directory already exists
321
+ - `pow run` no longer calls `open_stage` when no path is provided
322
+ - `pow asset unset` no longer accidentally removes `user-home` alias
323
+ - Duplicate and deprecated keys in generated `.vscode/settings.json`
324
+ - `pow init` now respects existing `isaacsim_ros_ws` value in existing `pow.toml`
325
+ - `pow ros` correctly attaches to an already-running container
326
+
327
+ ### Changed
328
+
329
+ - Rewrite and refactor all core functionality of pow-cli
330
+ - Move commands under group `pow sim` to root `pow` command instead
331
+ - Remove pow-foxglove from repository
332
+ - ROS-related logic extracted into dedicated `ros_manager.py` module
333
+ - CLI and core layers refactored for clearer separation of concerns
334
+
335
+ ## [0.1.0a3] - 2026-01-27
336
+
337
+ ### Fixed
338
+
339
+ - Fixed incorrect Ubuntu base Docker image version in `pow sim init` ROS workspace setup. Now correctly uses Ubuntu 22.04 for ROS Humble and Ubuntu 24.04 for ROS Jazzy (previously hardcoded to 22.04 for both).
340
+
341
+ ## [0.1.0a2] - 2025-12-25
342
+
343
+ ### Fixed
344
+
345
+ - `pow sim init` now allows overwriting existing VS Code settings to resolve Pylance `reportMissingImports` errors for Isaac Sim packages.
346
+ - Fixed an issue where the `ros_enable` flag did not correctly disable ROS workspace sourcing when set to `false` in an existing `pow.toml`.
347
+
348
+ ## [0.1.0a1] - 2025-12-23
349
+
350
+ ### Added
351
+
352
+ - Initial alpha release of Isaac Powerpack CLI (`pow`)
353
+ - **Core CLI Structure**
354
+ - Main entry point with Click-based command group architecture
355
+ - Hierarchical command organization under `pow sim` namespace
356
+
357
+ - **Simulation Commands (`pow sim`)**
358
+ - `pow sim run` - Run Isaac Sim applications with automatic environment setup
359
+ - Auto-discovery of project root via `pow.toml` configuration
360
+ - ROS 2 workspace sourcing support
361
+ - Isaac Sim setup file sourcing
362
+ - Configurable app path and extension loading
363
+ - `pow sim init` - Initialize Isaac Sim development environment
364
+ - VS Code settings generation for Isaac Sim development
365
+ - Asset browser cache fix utility
366
+ - Project configuration scaffolding
367
+ - `pow sim check` - Run Isaac Sim compatibility checker
368
+ - Validates system compatibility with Isaac Sim requirements
369
+ - `pow sim info` - Display Isaac Sim configuration information
370
+ - Show local assets path configuration (`-l, --local-assets` flag)
371
+
372
+ - **Resource Management (`pow sim add`)**
373
+ - `pow sim add local-assets` - Configure local Isaac Sim assets
374
+ - Updates `isaacsim.exp.base.kit` with local asset paths
375
+ - Configures asset browser and content browser folders
376
+ - Supports versioned asset directories
377
+
378
+ ### Dependencies
379
+
380
+ - `click>=8.1.7` - Command line interface framework
381
+ - `toml>=0.10.2` - TOML configuration file parsing
382
+ - Python 3.10+ required
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.5
2
2
  Name: pow-cli
3
- Version: 0.2.0rc2
3
+ Version: 0.4.0
4
4
  Summary: Command line interface for Isaac Powerpack
5
5
  Author: Titiwat Munintravong, Isaac Powerpack Contributors
6
6
  License-Expression: Apache-2.0
@@ -10,10 +10,8 @@ Requires-Python: >=3.10
10
10
  Requires-Dist: aiohttp>=3.11.11
11
11
  Requires-Dist: click>=8.1.7
12
12
  Requires-Dist: distro>=1.9.0
13
- Requires-Dist: isaacsim[compatibility-check]>=5.1.0.0
14
- Requires-Dist: packaging>=26.0
15
13
  Requires-Dist: rich
16
- Requires-Dist: setuptools>=82.0.1
14
+ Requires-Dist: tomli>=2; python_version < '3.11'
17
15
  Requires-Dist: tomlkit>=0.14.0
18
16
  Description-Content-Type: text/markdown
19
17