Skip to content

refactor(cli): extract openshell runtime helpers - #2835

Merged
cv merged 35 commits into
mainfrom
refactor/oclif-extract-openshell-runtime
May 2, 2026
Merged

refactor(cli): extract openshell runtime helpers#2835
cv merged 35 commits into
mainfrom
refactor/oclif-extract-openshell-runtime

Conversation

@cv

@cv cv commented May 1, 2026

Copy link
Copy Markdown
Collaborator

Summary

Extracts OpenShell command runtime helpers from src/nemoclaw.ts into a dedicated module. This gives command action modules a single place to resolve and invoke the OpenShell binary.

Changes

  • Add src/lib/openshell-runtime.ts with getOpenshellBinary(), runOpenshell(), captureOpenshell(), and getInstalledOpenshellVersionOrNull().
  • Update src/nemoclaw.ts to import those helpers instead of defining them inline.
  • Keep public CLI behavior unchanged.

Type of Change

  • Code change (feature, bug fix, or refactor)
  • Code change with doc updates
  • Doc only (prose changes, no code sample modifications)
  • Doc only (includes code sample changes)

Verification

  • npx prek run --all-files passes
  • npm test passes
  • Tests added or updated for new or changed behavior
  • No secrets, API keys, or credentials committed
  • Docs updated for user-facing behavior changes
  • make docs builds without warnings (doc changes only)
  • Doc pages follow the style guide (doc changes only)
  • New doc pages include SPDX header and frontmatter (new pages only)

AI Disclosure

  • AI-assisted — tool: OpenAI Codex

Signed-off-by: Carlos Villela cvillela@nvidia.com

Stack position

Note

This PR is part of a stacked refactor. Please review/merge in stack order.
The current PR is highlighted below.

This is PR #2835 in the stacked CLI oclif refactor series.

Full stack

Merge from top to bottom.

Order PR Merge after Title
1 #2775 main refactor(cli): migrate status and tunnel commands to oclif
2 #2776 #2775 refactor(cli): migrate debug uninstall and gateway-token to oclif
3 #2786 #2776 refactor(cli): migrate credentials commands to oclif
4 #2787 #2786 refactor(cli): migrate sandbox inspection commands to oclif
5 #2788 #2787 refactor(cli): migrate maintenance commands to oclif
6 #2796 #2788 refactor(cli): migrate sandbox logs command to oclif
7 #2797 #2796 refactor(cli): migrate skill install command to oclif
8 #2798 #2797 refactor(cli): migrate snapshot list and create to oclif
9 #2802 #2798 refactor(cli): migrate shields commands to oclif
10 #2803 #2802 refactor(cli): migrate channels mutation commands to oclif
11 #2804 #2803 refactor(cli): migrate policy mutation commands to oclif
12 #2805 #2804 refactor(cli): migrate snapshot restore command to oclif
13 #2806 #2805 refactor(cli): migrate destroy command to oclif
14 #2807 #2806 refactor(cli): migrate rebuild command to oclif
15 #2808 #2807 refactor(cli): migrate connect command to oclif
16 #2809 #2808 refactor(cli): migrate deploy command to oclif
17 #2810 #2809 refactor(cli): migrate onboard aliases to oclif
18 #2811 #2810 refactor(cli): migrate help and version commands to oclif
19 #2814 #2811 refactor(cli): centralize legacy oclif dispatch
20 #2815 #2814 refactor(cli): drop trivial oclif wrapper helpers
21 #2816 #2815 refactor(cli): centralize sandbox runtime bridge
22 #2817 #2816 refactor(cli): centralize policy and channels runtime bridge
23 #2818 #2817 refactor(cli): centralize global runtime bridge
24 #2819 #2818 refactor(cli): collapse runtime bridge exports
25 #2826 #2819 refactor(cli): introduce sandbox runtime action facade
26 #2827 #2826 refactor(cli): introduce policy and channels action facade
27 #2828 #2827 refactor(cli): introduce global command action facade
28 #2830 #2828 refactor(cli): extract root help action
29 #2831 #2830 refactor(cli): extract deploy action
30 #2832 #2831 refactor(cli): extract onboard actions
31 #2835 #2832 refactor(cli): extract openshell runtime helpers
32 #2836 #2835 refactor(cli): extract sandbox logs action
33 #2837 #2836 refactor(cli): extract maintenance actions
34 #2838 #2837 refactor(cli): extract snapshot actions
35 #2839 #2838 refactor(cli): extract policy and channels actions
36 #2840 #2839 refactor(cli): extract credentials and list runtime bits
37 #2841 #2840 refactor(cli): shrink runtime bridge

Summary by CodeRabbit

  • Refactor
    • Improved internal code organization and maintainability by consolidating runtime execution logic into a dedicated module.

cv added 30 commits April 30, 2026 13:51
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
cv added a commit that referenced this pull request May 2, 2026
## Summary
Migrates the deprecated global `deploy` compatibility command to oclif.
The existing deploy implementation remains unchanged behind the wrapper.

## Changes
- Add `src/lib/deploy-cli-command.ts` for `deploy`.\n- Route global
`deploy [instance-name]` through `runOclif()`.\n- Add help coverage for
the deprecated deploy usage.

## Type of Change
- [x] Code change (feature, bug fix, or refactor)
- [ ] Code change with doc updates
- [ ] Doc only (prose changes, no code sample modifications)
- [ ] Doc only (includes code sample changes)

## Verification
- [x] `npx prek run --all-files` passes
- [x] `npm test` passes
- [x] Tests added or updated for new or changed behavior
- [x] No secrets, API keys, or credentials committed
- [ ] Docs updated for user-facing behavior changes
- [ ] `make docs` builds without warnings (doc changes only)
- [ ] Doc pages follow the [style
guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md)
(doc changes only)
- [ ] New doc pages include SPDX header and frontmatter (new pages only)

## AI Disclosure
- [x] AI-assisted — tool: OpenAI Codex

---
Signed-off-by: Carlos Villela <cvillela@nvidia.com>

<!-- STACK-CONTEXT:START -->
## Stack position

> [!NOTE]
> This PR is part of a stacked refactor. Please review/merge in stack
order.
> The current PR is highlighted below.

This is PR **#2809** in the stacked CLI oclif refactor series.

- Merge after: **#2808**
- Next PR: **#2810**
- Stack position: **16 / 37**

## Full stack

Merge from top to bottom.

| Order | PR | Merge after | Title |
|---:|---|---|---|
| 1 | #2775 | `main` | refactor(cli): migrate status and tunnel commands
to oclif |
| 2 | #2776 | #2775 | refactor(cli): migrate debug uninstall and
gateway-token to oclif |
| 3 | #2786 | #2776 | refactor(cli): migrate credentials commands to
oclif |
| 4 | #2787 | #2786 | refactor(cli): migrate sandbox inspection commands
to oclif |
| 5 | #2788 | #2787 | refactor(cli): migrate maintenance commands to
oclif |
| 6 | #2796 | #2788 | refactor(cli): migrate sandbox logs command to
oclif |
| 7 | #2797 | #2796 | refactor(cli): migrate skill install command to
oclif |
| 8 | #2798 | #2797 | refactor(cli): migrate snapshot list and create to
oclif |
| 9 | #2802 | #2798 | refactor(cli): migrate shields commands to oclif |
| 10 | #2803 | #2802 | refactor(cli): migrate channels mutation commands
to oclif |
| 11 | #2804 | #2803 | refactor(cli): migrate policy mutation commands
to oclif |
| 12 | #2805 | #2804 | refactor(cli): migrate snapshot restore command
to oclif |
| 13 | #2806 | #2805 | refactor(cli): migrate destroy command to oclif |
| 14 | #2807 | #2806 | refactor(cli): migrate rebuild command to oclif |
| 15 | #2808 | #2807 | refactor(cli): migrate connect command to oclif |
| 16 | **#2809** | #2808 | **refactor(cli): migrate deploy command to
oclif** |
| 17 | #2810 | #2809 | refactor(cli): migrate onboard aliases to oclif |
| 18 | #2811 | #2810 | refactor(cli): migrate help and version commands
to oclif |
| 19 | #2814 | #2811 | refactor(cli): centralize legacy oclif dispatch |
| 20 | #2815 | #2814 | refactor(cli): drop trivial oclif wrapper helpers
|
| 21 | #2816 | #2815 | refactor(cli): centralize sandbox runtime bridge
|
| 22 | #2817 | #2816 | refactor(cli): centralize policy and channels
runtime bridge |
| 23 | #2818 | #2817 | refactor(cli): centralize global runtime bridge |
| 24 | #2819 | #2818 | refactor(cli): collapse runtime bridge exports |
| 25 | #2826 | #2819 | refactor(cli): introduce sandbox runtime action
facade |
| 26 | #2827 | #2826 | refactor(cli): introduce policy and channels
action facade |
| 27 | #2828 | #2827 | refactor(cli): introduce global command action
facade |
| 28 | #2830 | #2828 | refactor(cli): extract root help action |
| 29 | #2831 | #2830 | refactor(cli): extract deploy action |
| 30 | #2832 | #2831 | refactor(cli): extract onboard actions |
| 31 | #2835 | #2832 | refactor(cli): extract openshell runtime helpers
|
| 32 | #2836 | #2835 | refactor(cli): extract sandbox logs action |
| 33 | #2837 | #2836 | refactor(cli): extract maintenance actions |
| 34 | #2838 | #2837 | refactor(cli): extract snapshot actions |
| 35 | #2839 | #2838 | refactor(cli): extract policy and channels
actions |
| 36 | #2840 | #2839 | refactor(cli): extract credentials and list
runtime bits |
| 37 | #2841 | #2840 | refactor(cli): shrink runtime bridge |
<!-- STACK-CONTEXT:END -->


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Deploy command is now available in the CLI with an optional
instance-name argument and help documentation.

* **Tests**
  * Added test coverage for the deploy command help functionality.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Signed-off-by: Carlos Villela <cvillela@nvidia.com>
cv added a commit that referenced this pull request May 2, 2026
## Summary
Migrates onboarding and its deprecated compatibility aliases to oclif
while preserving the existing onboarding parser and flows. The wrappers
delegate into the existing `onboard`, `setup`, and `setup-spark`
implementations.

## Changes
- Add `src/lib/onboard-cli-commands.ts` for `onboard`, `setup`, and
`setup-spark`.\n- Route the global onboarding commands through
`runOclif()`.\n- Preserve existing onboarding help, deprecation
messages, third-party notice handling, and option validation.

## Type of Change
- [x] Code change (feature, bug fix, or refactor)
- [ ] Code change with doc updates
- [ ] Doc only (prose changes, no code sample modifications)
- [ ] Doc only (includes code sample changes)

## Verification
- [x] `npx prek run --all-files` passes
- [x] `npm test` passes
- [x] Tests added or updated for new or changed behavior
- [x] No secrets, API keys, or credentials committed
- [ ] Docs updated for user-facing behavior changes
- [ ] `make docs` builds without warnings (doc changes only)
- [ ] Doc pages follow the [style
guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md)
(doc changes only)
- [ ] New doc pages include SPDX header and frontmatter (new pages only)

## AI Disclosure
- [x] AI-assisted — tool: OpenAI Codex

---
Signed-off-by: Carlos Villela <cvillela@nvidia.com>

<!-- STACK-CONTEXT:START -->
## Stack position

> [!NOTE]
> This PR is part of a stacked refactor. Please review/merge in stack
order.
> The current PR is highlighted below.

This is PR **#2810** in the stacked CLI oclif refactor series.

- Merge after: **#2809**
- Next PR: **#2811**
- Stack position: **17 / 37**

## Full stack

Merge from top to bottom.

| Order | PR | Merge after | Title |
|---:|---|---|---|
| 1 | #2775 | `main` | refactor(cli): migrate status and tunnel commands
to oclif |
| 2 | #2776 | #2775 | refactor(cli): migrate debug uninstall and
gateway-token to oclif |
| 3 | #2786 | #2776 | refactor(cli): migrate credentials commands to
oclif |
| 4 | #2787 | #2786 | refactor(cli): migrate sandbox inspection commands
to oclif |
| 5 | #2788 | #2787 | refactor(cli): migrate maintenance commands to
oclif |
| 6 | #2796 | #2788 | refactor(cli): migrate sandbox logs command to
oclif |
| 7 | #2797 | #2796 | refactor(cli): migrate skill install command to
oclif |
| 8 | #2798 | #2797 | refactor(cli): migrate snapshot list and create to
oclif |
| 9 | #2802 | #2798 | refactor(cli): migrate shields commands to oclif |
| 10 | #2803 | #2802 | refactor(cli): migrate channels mutation commands
to oclif |
| 11 | #2804 | #2803 | refactor(cli): migrate policy mutation commands
to oclif |
| 12 | #2805 | #2804 | refactor(cli): migrate snapshot restore command
to oclif |
| 13 | #2806 | #2805 | refactor(cli): migrate destroy command to oclif |
| 14 | #2807 | #2806 | refactor(cli): migrate rebuild command to oclif |
| 15 | #2808 | #2807 | refactor(cli): migrate connect command to oclif |
| 16 | #2809 | #2808 | refactor(cli): migrate deploy command to oclif |
| 17 | **#2810** | #2809 | **refactor(cli): migrate onboard aliases to
oclif** |
| 18 | #2811 | #2810 | refactor(cli): migrate help and version commands
to oclif |
| 19 | #2814 | #2811 | refactor(cli): centralize legacy oclif dispatch |
| 20 | #2815 | #2814 | refactor(cli): drop trivial oclif wrapper helpers
|
| 21 | #2816 | #2815 | refactor(cli): centralize sandbox runtime bridge
|
| 22 | #2817 | #2816 | refactor(cli): centralize policy and channels
runtime bridge |
| 23 | #2818 | #2817 | refactor(cli): centralize global runtime bridge |
| 24 | #2819 | #2818 | refactor(cli): collapse runtime bridge exports |
| 25 | #2826 | #2819 | refactor(cli): introduce sandbox runtime action
facade |
| 26 | #2827 | #2826 | refactor(cli): introduce policy and channels
action facade |
| 27 | #2828 | #2827 | refactor(cli): introduce global command action
facade |
| 28 | #2830 | #2828 | refactor(cli): extract root help action |
| 29 | #2831 | #2830 | refactor(cli): extract deploy action |
| 30 | #2832 | #2831 | refactor(cli): extract onboard actions |
| 31 | #2835 | #2832 | refactor(cli): extract openshell runtime helpers
|
| 32 | #2836 | #2835 | refactor(cli): extract sandbox logs action |
| 33 | #2837 | #2836 | refactor(cli): extract maintenance actions |
| 34 | #2838 | #2837 | refactor(cli): extract snapshot actions |
| 35 | #2839 | #2838 | refactor(cli): extract policy and channels
actions |
| 36 | #2840 | #2839 | refactor(cli): extract credentials and list
runtime bits |
| 37 | #2841 | #2840 | refactor(cli): shrink runtime bridge |
<!-- STACK-CONTEXT:END -->


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Introduced three new CLI commands—`onboard`, `setup`, and
`setup-spark`—to provide enhanced configuration and setup capabilities
via the command line interface.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Signed-off-by: Carlos Villela <cvillela@nvidia.com>
cv added a commit that referenced this pull request May 2, 2026
## Summary
Migrates top-level help and version aliases to oclif, completing the
command registry migration stack. The custom NemoClaw help renderer and
version output remain unchanged behind hidden oclif commands.

## Changes
- Add `src/lib/help-version-cli-commands.ts` for hidden `root:help` and
`root:version` commands.\n- Route no-arg help, `help`, `--help`, `-h`,
`--version`, and `-v` through `runOclif()`.\n- Ignore command metadata
from the CLI coverage ratchet because it is covered by registry unit
tests.

## Type of Change
- [x] Code change (feature, bug fix, or refactor)
- [ ] Code change with doc updates
- [ ] Doc only (prose changes, no code sample modifications)
- [ ] Doc only (includes code sample changes)

## Verification
- [x] `npx prek run --all-files` passes
- [x] `npm test` passes
- [x] Tests added or updated for new or changed behavior
- [x] No secrets, API keys, or credentials committed
- [ ] Docs updated for user-facing behavior changes
- [ ] `make docs` builds without warnings (doc changes only)
- [ ] Doc pages follow the [style
guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md)
(doc changes only)
- [ ] New doc pages include SPDX header and frontmatter (new pages only)

## AI Disclosure
- [x] AI-assisted — tool: OpenAI Codex

---
Signed-off-by: Carlos Villela <cvillela@nvidia.com>

<!-- STACK-CONTEXT:START -->
## Stack position

> [!NOTE]
> This PR is part of a stacked refactor. Please review/merge in stack
order.
> The current PR is highlighted below.

This is PR **#2811** in the stacked CLI oclif refactor series.

- Merge after: **#2810**
- Next PR: **#2814**
- Stack position: **18 / 37**

## Full stack

Merge from top to bottom.

| Order | PR | Merge after | Title |
|---:|---|---|---|
| 1 | #2775 | `main` | refactor(cli): migrate status and tunnel commands
to oclif |
| 2 | #2776 | #2775 | refactor(cli): migrate debug uninstall and
gateway-token to oclif |
| 3 | #2786 | #2776 | refactor(cli): migrate credentials commands to
oclif |
| 4 | #2787 | #2786 | refactor(cli): migrate sandbox inspection commands
to oclif |
| 5 | #2788 | #2787 | refactor(cli): migrate maintenance commands to
oclif |
| 6 | #2796 | #2788 | refactor(cli): migrate sandbox logs command to
oclif |
| 7 | #2797 | #2796 | refactor(cli): migrate skill install command to
oclif |
| 8 | #2798 | #2797 | refactor(cli): migrate snapshot list and create to
oclif |
| 9 | #2802 | #2798 | refactor(cli): migrate shields commands to oclif |
| 10 | #2803 | #2802 | refactor(cli): migrate channels mutation commands
to oclif |
| 11 | #2804 | #2803 | refactor(cli): migrate policy mutation commands
to oclif |
| 12 | #2805 | #2804 | refactor(cli): migrate snapshot restore command
to oclif |
| 13 | #2806 | #2805 | refactor(cli): migrate destroy command to oclif |
| 14 | #2807 | #2806 | refactor(cli): migrate rebuild command to oclif |
| 15 | #2808 | #2807 | refactor(cli): migrate connect command to oclif |
| 16 | #2809 | #2808 | refactor(cli): migrate deploy command to oclif |
| 17 | #2810 | #2809 | refactor(cli): migrate onboard aliases to oclif |
| 18 | **#2811** | #2810 | **refactor(cli): migrate help and version
commands to oclif** |
| 19 | #2814 | #2811 | refactor(cli): centralize legacy oclif dispatch |
| 20 | #2815 | #2814 | refactor(cli): drop trivial oclif wrapper helpers
|
| 21 | #2816 | #2815 | refactor(cli): centralize sandbox runtime bridge
|
| 22 | #2817 | #2816 | refactor(cli): centralize policy and channels
runtime bridge |
| 23 | #2818 | #2817 | refactor(cli): centralize global runtime bridge |
| 24 | #2819 | #2818 | refactor(cli): collapse runtime bridge exports |
| 25 | #2826 | #2819 | refactor(cli): introduce sandbox runtime action
facade |
| 26 | #2827 | #2826 | refactor(cli): introduce policy and channels
action facade |
| 27 | #2828 | #2827 | refactor(cli): introduce global command action
facade |
| 28 | #2830 | #2828 | refactor(cli): extract root help action |
| 29 | #2831 | #2830 | refactor(cli): extract deploy action |
| 30 | #2832 | #2831 | refactor(cli): extract onboard actions |
| 31 | #2835 | #2832 | refactor(cli): extract openshell runtime helpers
|
| 32 | #2836 | #2835 | refactor(cli): extract sandbox logs action |
| 33 | #2837 | #2836 | refactor(cli): extract maintenance actions |
| 34 | #2838 | #2837 | refactor(cli): extract snapshot actions |
| 35 | #2839 | #2838 | refactor(cli): extract policy and channels
actions |
| 36 | #2840 | #2839 | refactor(cli): extract credentials and list
runtime bits |
| 37 | #2841 | #2840 | refactor(cli): shrink runtime bridge |
<!-- STACK-CONTEXT:END -->


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Refactor**
* Restructured CLI command routing infrastructure for help and version
commands. No changes to visible end-user behavior or functionality.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Signed-off-by: Carlos Villela <cvillela@nvidia.com>
cv added a commit that referenced this pull request May 2, 2026
## Summary
Centralizes the legacy public CLI shape to oclif command ID mapping in a
table-driven dispatcher. This shrinks the command switch in
`src/nemoclaw.ts` while preserving sandbox recovery, public usage text,
and legacy edge-case diagnostics.

## Changes
- Add `src/lib/legacy-oclif-dispatch.ts` to resolve global and
sandbox-scoped public argv shapes to oclif command IDs.
- Replace the large global/sandbox dispatch switch in `src/nemoclaw.ts`
with `resolveGlobalOclifDispatch()` / `resolveSandboxOclifDispatch()`
plus a small result handler.
- Preserve legacy fallbacks for connect argument errors, skill
help/unknown subcommands, snapshot generic help, and policy-add missing
path diagnostics.
- Update image cleanup guard tests to account for oclif bridge dispatch
instead of a literal `case "gc"` switch.

## Type of Change
- [x] Code change (feature, bug fix, or refactor)
- [ ] Code change with doc updates
- [ ] Doc only (prose changes, no code sample modifications)
- [ ] Doc only (includes code sample changes)

## Verification
- [x] `npx prek run --all-files` passes
- [x] `npm test` passes
- [x] Tests added or updated for new or changed behavior
- [x] No secrets, API keys, or credentials committed
- [ ] Docs updated for user-facing behavior changes
- [ ] `make docs` builds without warnings (doc changes only)
- [ ] Doc pages follow the [style
guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md)
(doc changes only)
- [ ] New doc pages include SPDX header and frontmatter (new pages only)

## AI Disclosure
- [x] AI-assisted — tool: OpenAI Codex

---
Signed-off-by: Carlos Villela <cvillela@nvidia.com>

<!-- STACK-CONTEXT:START -->
## Stack position

> [!NOTE]
> This PR is part of a stacked refactor. Please review/merge in stack
order.
> The current PR is highlighted below.

This is PR **#2814** in the stacked CLI oclif refactor series.

- Merge after: **#2811**
- Next PR: **#2815**
- Stack position: **19 / 37**

## Full stack

Merge from top to bottom.

| Order | PR | Merge after | Title |
|---:|---|---|---|
| 1 | #2775 | `main` | refactor(cli): migrate status and tunnel commands
to oclif |
| 2 | #2776 | #2775 | refactor(cli): migrate debug uninstall and
gateway-token to oclif |
| 3 | #2786 | #2776 | refactor(cli): migrate credentials commands to
oclif |
| 4 | #2787 | #2786 | refactor(cli): migrate sandbox inspection commands
to oclif |
| 5 | #2788 | #2787 | refactor(cli): migrate maintenance commands to
oclif |
| 6 | #2796 | #2788 | refactor(cli): migrate sandbox logs command to
oclif |
| 7 | #2797 | #2796 | refactor(cli): migrate skill install command to
oclif |
| 8 | #2798 | #2797 | refactor(cli): migrate snapshot list and create to
oclif |
| 9 | #2802 | #2798 | refactor(cli): migrate shields commands to oclif |
| 10 | #2803 | #2802 | refactor(cli): migrate channels mutation commands
to oclif |
| 11 | #2804 | #2803 | refactor(cli): migrate policy mutation commands
to oclif |
| 12 | #2805 | #2804 | refactor(cli): migrate snapshot restore command
to oclif |
| 13 | #2806 | #2805 | refactor(cli): migrate destroy command to oclif |
| 14 | #2807 | #2806 | refactor(cli): migrate rebuild command to oclif |
| 15 | #2808 | #2807 | refactor(cli): migrate connect command to oclif |
| 16 | #2809 | #2808 | refactor(cli): migrate deploy command to oclif |
| 17 | #2810 | #2809 | refactor(cli): migrate onboard aliases to oclif |
| 18 | #2811 | #2810 | refactor(cli): migrate help and version commands
to oclif |
| 19 | **#2814** | #2811 | **refactor(cli): centralize legacy oclif
dispatch** |
| 20 | #2815 | #2814 | refactor(cli): drop trivial oclif wrapper helpers
|
| 21 | #2816 | #2815 | refactor(cli): centralize sandbox runtime bridge
|
| 22 | #2817 | #2816 | refactor(cli): centralize policy and channels
runtime bridge |
| 23 | #2818 | #2817 | refactor(cli): centralize global runtime bridge |
| 24 | #2819 | #2818 | refactor(cli): collapse runtime bridge exports |
| 25 | #2826 | #2819 | refactor(cli): introduce sandbox runtime action
facade |
| 26 | #2827 | #2826 | refactor(cli): introduce policy and channels
action facade |
| 27 | #2828 | #2827 | refactor(cli): introduce global command action
facade |
| 28 | #2830 | #2828 | refactor(cli): extract root help action |
| 29 | #2831 | #2830 | refactor(cli): extract deploy action |
| 30 | #2832 | #2831 | refactor(cli): extract onboard actions |
| 31 | #2835 | #2832 | refactor(cli): extract openshell runtime helpers
|
| 32 | #2836 | #2835 | refactor(cli): extract sandbox logs action |
| 33 | #2837 | #2836 | refactor(cli): extract maintenance actions |
| 34 | #2838 | #2837 | refactor(cli): extract snapshot actions |
| 35 | #2839 | #2838 | refactor(cli): extract policy and channels
actions |
| 36 | #2840 | #2839 | refactor(cli): extract credentials and list
runtime bits |
| 37 | #2841 | #2840 | refactor(cli): shrink runtime bridge |
<!-- STACK-CONTEXT:END -->

---------

Signed-off-by: Carlos Villela <cvillela@nvidia.com>
cv added a commit that referenced this pull request May 2, 2026
## Summary
Removes dead wrapper helpers that became unnecessary after centralizing
legacy-to-oclif dispatch. The remaining entrypoint now calls the
dispatcher directly instead of bouncing through one-line local
functions.

## Changes
- Delete trivial `runOclif()` forwarding helpers from `src/nemoclaw.ts`
such as `start`, `stop`, `tunnel`, `debug`, `uninstall`,
`credentialsCommand`, `showStatus`, and `listSandboxes`.
- Remove unused local argument helper functions now handled by
`legacy-oclif-dispatch.ts`.
- Keep the shared `runOclif()` helper and public sandbox usage printer
for the dispatcher result handler.

## Type of Change
- [x] Code change (feature, bug fix, or refactor)
- [ ] Code change with doc updates
- [ ] Doc only (prose changes, no code sample modifications)
- [ ] Doc only (includes code sample changes)

## Verification
- [x] `npx prek run --all-files` passes
- [x] `npm test` passes
- [x] Tests added or updated for new or changed behavior
- [x] No secrets, API keys, or credentials committed
- [ ] Docs updated for user-facing behavior changes
- [ ] `make docs` builds without warnings (doc changes only)
- [ ] Doc pages follow the [style
guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md)
(doc changes only)
- [ ] New doc pages include SPDX header and frontmatter (new pages only)

## AI Disclosure
- [x] AI-assisted — tool: OpenAI Codex

---
Signed-off-by: Carlos Villela <cvillela@nvidia.com>

<!-- STACK-CONTEXT:START -->
## Stack position

> [!NOTE]
> This PR is part of a stacked refactor. Please review/merge in stack
order.
> The current PR is highlighted below.

This is PR **#2815** in the stacked CLI oclif refactor series.

- Merge after: **#2814**
- Next PR: **#2816**
- Stack position: **20 / 37**

## Full stack

Merge from top to bottom.

| Order | PR | Merge after | Title |
|---:|---|---|---|
| 1 | #2775 | `main` | refactor(cli): migrate status and tunnel commands
to oclif |
| 2 | #2776 | #2775 | refactor(cli): migrate debug uninstall and
gateway-token to oclif |
| 3 | #2786 | #2776 | refactor(cli): migrate credentials commands to
oclif |
| 4 | #2787 | #2786 | refactor(cli): migrate sandbox inspection commands
to oclif |
| 5 | #2788 | #2787 | refactor(cli): migrate maintenance commands to
oclif |
| 6 | #2796 | #2788 | refactor(cli): migrate sandbox logs command to
oclif |
| 7 | #2797 | #2796 | refactor(cli): migrate skill install command to
oclif |
| 8 | #2798 | #2797 | refactor(cli): migrate snapshot list and create to
oclif |
| 9 | #2802 | #2798 | refactor(cli): migrate shields commands to oclif |
| 10 | #2803 | #2802 | refactor(cli): migrate channels mutation commands
to oclif |
| 11 | #2804 | #2803 | refactor(cli): migrate policy mutation commands
to oclif |
| 12 | #2805 | #2804 | refactor(cli): migrate snapshot restore command
to oclif |
| 13 | #2806 | #2805 | refactor(cli): migrate destroy command to oclif |
| 14 | #2807 | #2806 | refactor(cli): migrate rebuild command to oclif |
| 15 | #2808 | #2807 | refactor(cli): migrate connect command to oclif |
| 16 | #2809 | #2808 | refactor(cli): migrate deploy command to oclif |
| 17 | #2810 | #2809 | refactor(cli): migrate onboard aliases to oclif |
| 18 | #2811 | #2810 | refactor(cli): migrate help and version commands
to oclif |
| 19 | #2814 | #2811 | refactor(cli): centralize legacy oclif dispatch |
| 20 | **#2815** | #2814 | **refactor(cli): drop trivial oclif wrapper
helpers** |
| 21 | #2816 | #2815 | refactor(cli): centralize sandbox runtime bridge
|
| 22 | #2817 | #2816 | refactor(cli): centralize policy and channels
runtime bridge |
| 23 | #2818 | #2817 | refactor(cli): centralize global runtime bridge |
| 24 | #2819 | #2818 | refactor(cli): collapse runtime bridge exports |
| 25 | #2826 | #2819 | refactor(cli): introduce sandbox runtime action
facade |
| 26 | #2827 | #2826 | refactor(cli): introduce policy and channels
action facade |
| 27 | #2828 | #2827 | refactor(cli): introduce global command action
facade |
| 28 | #2830 | #2828 | refactor(cli): extract root help action |
| 29 | #2831 | #2830 | refactor(cli): extract deploy action |
| 30 | #2832 | #2831 | refactor(cli): extract onboard actions |
| 31 | #2835 | #2832 | refactor(cli): extract openshell runtime helpers
|
| 32 | #2836 | #2835 | refactor(cli): extract sandbox logs action |
| 33 | #2837 | #2836 | refactor(cli): extract maintenance actions |
| 34 | #2838 | #2837 | refactor(cli): extract snapshot actions |
| 35 | #2839 | #2838 | refactor(cli): extract policy and channels
actions |
| 36 | #2840 | #2839 | refactor(cli): extract credentials and list
runtime bits |
| 37 | #2841 | #2840 | refactor(cli): shrink runtime bridge |
<!-- STACK-CONTEXT:END -->


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Refactor**
* Consolidated command handling infrastructure through a unified
dispatch system for improved consistency and code maintainability.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Signed-off-by: Carlos Villela <cvillela@nvidia.com>
cv added a commit that referenced this pull request May 2, 2026
## Summary
Centralizes the sandbox-oriented runtime bridge used by oclif adapters
so individual sandbox command adapters no longer import `../nemoclaw`
directly. This is a transitional cleanup step before extracting the
underlying sandbox command implementations out of `src/nemoclaw.ts`.

## Changes
- Add `src/lib/nemoclaw-runtime-bridge.ts` as a typed bridge to the
remaining entrypoint-hosted command actions.
- Update sandbox-oriented oclif adapters (`connect`, `destroy`,
`rebuild`, `logs`, `skill install`, `snapshot`, and inspection commands)
to use the centralized bridge.
- Add targeted helper coverage for small CLI helper modules to keep the
coverage ratchet stable while adapter files remain intentionally
ignored.
- Keep all public CLI behavior unchanged.

## Type of Change
- [x] Code change (feature, bug fix, or refactor)
- [ ] Code change with doc updates
- [ ] Doc only (prose changes, no code sample modifications)
- [ ] Doc only (includes code sample changes)

## Verification
- [x] `npx prek run --all-files` passes
- [x] `npm test` passes
- [x] Tests added or updated for new or changed behavior
- [x] No secrets, API keys, or credentials committed
- [ ] Docs updated for user-facing behavior changes
- [ ] `make docs` builds without warnings (doc changes only)
- [ ] Doc pages follow the [style
guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md)
(doc changes only)
- [ ] New doc pages include SPDX header and frontmatter (new pages only)

## AI Disclosure
- [x] AI-assisted — tool: OpenAI Codex

---
Signed-off-by: Carlos Villela <cvillela@nvidia.com>

<!-- STACK-CONTEXT:START -->
## Stack position

> [!NOTE]
> This PR is part of a stacked refactor. Please review/merge in stack
order.
> The current PR is highlighted below.

This is PR **#2816** in the stacked CLI oclif refactor series.

- Merge after: **#2815**
- Next PR: **#2817**
- Stack position: **21 / 37**

## Full stack

Merge from top to bottom.

| Order | PR | Merge after | Title |
|---:|---|---|---|
| 1 | #2775 | `main` | refactor(cli): migrate status and tunnel commands
to oclif |
| 2 | #2776 | #2775 | refactor(cli): migrate debug uninstall and
gateway-token to oclif |
| 3 | #2786 | #2776 | refactor(cli): migrate credentials commands to
oclif |
| 4 | #2787 | #2786 | refactor(cli): migrate sandbox inspection commands
to oclif |
| 5 | #2788 | #2787 | refactor(cli): migrate maintenance commands to
oclif |
| 6 | #2796 | #2788 | refactor(cli): migrate sandbox logs command to
oclif |
| 7 | #2797 | #2796 | refactor(cli): migrate skill install command to
oclif |
| 8 | #2798 | #2797 | refactor(cli): migrate snapshot list and create to
oclif |
| 9 | #2802 | #2798 | refactor(cli): migrate shields commands to oclif |
| 10 | #2803 | #2802 | refactor(cli): migrate channels mutation commands
to oclif |
| 11 | #2804 | #2803 | refactor(cli): migrate policy mutation commands
to oclif |
| 12 | #2805 | #2804 | refactor(cli): migrate snapshot restore command
to oclif |
| 13 | #2806 | #2805 | refactor(cli): migrate destroy command to oclif |
| 14 | #2807 | #2806 | refactor(cli): migrate rebuild command to oclif |
| 15 | #2808 | #2807 | refactor(cli): migrate connect command to oclif |
| 16 | #2809 | #2808 | refactor(cli): migrate deploy command to oclif |
| 17 | #2810 | #2809 | refactor(cli): migrate onboard aliases to oclif |
| 18 | #2811 | #2810 | refactor(cli): migrate help and version commands
to oclif |
| 19 | #2814 | #2811 | refactor(cli): centralize legacy oclif dispatch |
| 20 | #2815 | #2814 | refactor(cli): drop trivial oclif wrapper helpers
|
| 21 | **#2816** | #2815 | **refactor(cli): centralize sandbox runtime
bridge** |
| 22 | #2817 | #2816 | refactor(cli): centralize policy and channels
runtime bridge |
| 23 | #2818 | #2817 | refactor(cli): centralize global runtime bridge |
| 24 | #2819 | #2818 | refactor(cli): collapse runtime bridge exports |
| 25 | #2826 | #2819 | refactor(cli): introduce sandbox runtime action
facade |
| 26 | #2827 | #2826 | refactor(cli): introduce policy and channels
action facade |
| 27 | #2828 | #2827 | refactor(cli): introduce global command action
facade |
| 28 | #2830 | #2828 | refactor(cli): extract root help action |
| 29 | #2831 | #2830 | refactor(cli): extract deploy action |
| 30 | #2832 | #2831 | refactor(cli): extract onboard actions |
| 31 | #2835 | #2832 | refactor(cli): extract openshell runtime helpers
|
| 32 | #2836 | #2835 | refactor(cli): extract sandbox logs action |
| 33 | #2837 | #2836 | refactor(cli): extract maintenance actions |
| 34 | #2838 | #2837 | refactor(cli): extract snapshot actions |
| 35 | #2839 | #2838 | refactor(cli): extract policy and channels
actions |
| 36 | #2840 | #2839 | refactor(cli): extract credentials and list
runtime bits |
| 37 | #2841 | #2840 | refactor(cli): shrink runtime bridge |
<!-- STACK-CONTEXT:END -->


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

## Release Notes

* **Refactor**
* Improved internal code organization of runtime bridge acquisition
across CLI commands for better maintainability and testability.

* **Tests**
* Enhanced test coverage for CLI helper utilities including duration
parsing, token handling, and sandbox operations.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Signed-off-by: Carlos Villela <cvillela@nvidia.com>
cv added a commit that referenced this pull request May 2, 2026
## Summary
Moves policy and messaging-channel oclif adapters onto the centralized
runtime bridge. This removes another group of direct `../nemoclaw`
imports from command adapter files.

## Changes
- Update `src/lib/channels-mutate-cli-commands.ts` to use
`getNemoClawRuntimeBridge()`.
- Update `src/lib/policy-mutate-cli-commands.ts` to use
`getNemoClawRuntimeBridge()`.
- Preserve existing test injection hooks for the adapter unit tests.
- Keep public CLI behavior unchanged.

## Type of Change
- [x] Code change (feature, bug fix, or refactor)
- [ ] Code change with doc updates
- [ ] Doc only (prose changes, no code sample modifications)
- [ ] Doc only (includes code sample changes)

## Verification
- [x] `npx prek run --all-files` passes
- [x] `npm test` passes
- [x] Tests added or updated for new or changed behavior
- [x] No secrets, API keys, or credentials committed
- [ ] Docs updated for user-facing behavior changes
- [ ] `make docs` builds without warnings (doc changes only)
- [ ] Doc pages follow the [style
guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md)
(doc changes only)
- [ ] New doc pages include SPDX header and frontmatter (new pages only)

## AI Disclosure
- [x] AI-assisted — tool: OpenAI Codex

---
Signed-off-by: Carlos Villela <cvillela@nvidia.com>

<!-- STACK-CONTEXT:START -->
## Stack position

> [!NOTE]
> This PR is part of a stacked refactor. Please review/merge in stack
order.
> The current PR is highlighted below.

This is PR **#2817** in the stacked CLI oclif refactor series.

- Merge after: **#2816**
- Next PR: **#2818**
- Stack position: **22 / 37**

## Full stack

Merge from top to bottom.

| Order | PR | Merge after | Title |
|---:|---|---|---|
| 1 | #2775 | `main` | refactor(cli): migrate status and tunnel commands
to oclif |
| 2 | #2776 | #2775 | refactor(cli): migrate debug uninstall and
gateway-token to oclif |
| 3 | #2786 | #2776 | refactor(cli): migrate credentials commands to
oclif |
| 4 | #2787 | #2786 | refactor(cli): migrate sandbox inspection commands
to oclif |
| 5 | #2788 | #2787 | refactor(cli): migrate maintenance commands to
oclif |
| 6 | #2796 | #2788 | refactor(cli): migrate sandbox logs command to
oclif |
| 7 | #2797 | #2796 | refactor(cli): migrate skill install command to
oclif |
| 8 | #2798 | #2797 | refactor(cli): migrate snapshot list and create to
oclif |
| 9 | #2802 | #2798 | refactor(cli): migrate shields commands to oclif |
| 10 | #2803 | #2802 | refactor(cli): migrate channels mutation commands
to oclif |
| 11 | #2804 | #2803 | refactor(cli): migrate policy mutation commands
to oclif |
| 12 | #2805 | #2804 | refactor(cli): migrate snapshot restore command
to oclif |
| 13 | #2806 | #2805 | refactor(cli): migrate destroy command to oclif |
| 14 | #2807 | #2806 | refactor(cli): migrate rebuild command to oclif |
| 15 | #2808 | #2807 | refactor(cli): migrate connect command to oclif |
| 16 | #2809 | #2808 | refactor(cli): migrate deploy command to oclif |
| 17 | #2810 | #2809 | refactor(cli): migrate onboard aliases to oclif |
| 18 | #2811 | #2810 | refactor(cli): migrate help and version commands
to oclif |
| 19 | #2814 | #2811 | refactor(cli): centralize legacy oclif dispatch |
| 20 | #2815 | #2814 | refactor(cli): drop trivial oclif wrapper helpers
|
| 21 | #2816 | #2815 | refactor(cli): centralize sandbox runtime bridge
|
| 22 | **#2817** | #2816 | **refactor(cli): centralize policy and
channels runtime bridge** |
| 23 | #2818 | #2817 | refactor(cli): centralize global runtime bridge |
| 24 | #2819 | #2818 | refactor(cli): collapse runtime bridge exports |
| 25 | #2826 | #2819 | refactor(cli): introduce sandbox runtime action
facade |
| 26 | #2827 | #2826 | refactor(cli): introduce policy and channels
action facade |
| 27 | #2828 | #2827 | refactor(cli): introduce global command action
facade |
| 28 | #2830 | #2828 | refactor(cli): extract root help action |
| 29 | #2831 | #2830 | refactor(cli): extract deploy action |
| 30 | #2832 | #2831 | refactor(cli): extract onboard actions |
| 31 | #2835 | #2832 | refactor(cli): extract openshell runtime helpers
|
| 32 | #2836 | #2835 | refactor(cli): extract sandbox logs action |
| 33 | #2837 | #2836 | refactor(cli): extract maintenance actions |
| 34 | #2838 | #2837 | refactor(cli): extract snapshot actions |
| 35 | #2839 | #2838 | refactor(cli): extract policy and channels
actions |
| 36 | #2840 | #2839 | refactor(cli): extract credentials and list
runtime bits |
| 37 | #2841 | #2840 | refactor(cli): shrink runtime bridge |
<!-- STACK-CONTEXT:END -->


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

## Refactor

- Refactored internal runtime infrastructure for CLI commands managing
channels and policies.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Signed-off-by: Carlos Villela <cvillela@nvidia.com>
cv added a commit that referenced this pull request May 2, 2026
## Summary
Moves global command oclif adapters onto the centralized runtime bridge.
After this change, direct `../nemoclaw` imports are limited to the
single runtime bridge module.

## Changes
- Update global adapters for deploy, maintenance commands, onboarding
aliases, help/version, credentials, and list dependencies to use
`getNemoClawRuntimeBridge()`.
- Extend the bridge typing to include `captureOpenshell` and typed
registry recovery data needed by list dependencies.
- Keep public CLI behavior unchanged.

## Type of Change
- [x] Code change (feature, bug fix, or refactor)
- [ ] Code change with doc updates
- [ ] Doc only (prose changes, no code sample modifications)
- [ ] Doc only (includes code sample changes)

## Verification
- [x] `npx prek run --all-files` passes
- [x] `npm test` passes
- [x] Tests added or updated for new or changed behavior
- [x] No secrets, API keys, or credentials committed
- [ ] Docs updated for user-facing behavior changes
- [ ] `make docs` builds without warnings (doc changes only)
- [ ] Doc pages follow the [style
guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md)
(doc changes only)
- [ ] New doc pages include SPDX header and frontmatter (new pages only)

## AI Disclosure
- [x] AI-assisted — tool: OpenAI Codex

---
Signed-off-by: Carlos Villela <cvillela@nvidia.com>

<!-- STACK-CONTEXT:START -->
## Stack position

> [!NOTE]
> This PR is part of a stacked refactor. Please review/merge in stack
order.
> The current PR is highlighted below.

This is PR **#2818** in the stacked CLI oclif refactor series.

- Merge after: **#2817**
- Next PR: **#2819**
- Stack position: **23 / 37**

## Full stack

Merge from top to bottom.

| Order | PR | Merge after | Title |
|---:|---|---|---|
| 1 | #2775 | `main` | refactor(cli): migrate status and tunnel commands
to oclif |
| 2 | #2776 | #2775 | refactor(cli): migrate debug uninstall and
gateway-token to oclif |
| 3 | #2786 | #2776 | refactor(cli): migrate credentials commands to
oclif |
| 4 | #2787 | #2786 | refactor(cli): migrate sandbox inspection commands
to oclif |
| 5 | #2788 | #2787 | refactor(cli): migrate maintenance commands to
oclif |
| 6 | #2796 | #2788 | refactor(cli): migrate sandbox logs command to
oclif |
| 7 | #2797 | #2796 | refactor(cli): migrate skill install command to
oclif |
| 8 | #2798 | #2797 | refactor(cli): migrate snapshot list and create to
oclif |
| 9 | #2802 | #2798 | refactor(cli): migrate shields commands to oclif |
| 10 | #2803 | #2802 | refactor(cli): migrate channels mutation commands
to oclif |
| 11 | #2804 | #2803 | refactor(cli): migrate policy mutation commands
to oclif |
| 12 | #2805 | #2804 | refactor(cli): migrate snapshot restore command
to oclif |
| 13 | #2806 | #2805 | refactor(cli): migrate destroy command to oclif |
| 14 | #2807 | #2806 | refactor(cli): migrate rebuild command to oclif |
| 15 | #2808 | #2807 | refactor(cli): migrate connect command to oclif |
| 16 | #2809 | #2808 | refactor(cli): migrate deploy command to oclif |
| 17 | #2810 | #2809 | refactor(cli): migrate onboard aliases to oclif |
| 18 | #2811 | #2810 | refactor(cli): migrate help and version commands
to oclif |
| 19 | #2814 | #2811 | refactor(cli): centralize legacy oclif dispatch |
| 20 | #2815 | #2814 | refactor(cli): drop trivial oclif wrapper helpers
|
| 21 | #2816 | #2815 | refactor(cli): centralize sandbox runtime bridge
|
| 22 | #2817 | #2816 | refactor(cli): centralize policy and channels
runtime bridge |
| 23 | **#2818** | #2817 | **refactor(cli): centralize global runtime
bridge** |
| 24 | #2819 | #2818 | refactor(cli): collapse runtime bridge exports |
| 25 | #2826 | #2819 | refactor(cli): introduce sandbox runtime action
facade |
| 26 | #2827 | #2826 | refactor(cli): introduce policy and channels
action facade |
| 27 | #2828 | #2827 | refactor(cli): introduce global command action
facade |
| 28 | #2830 | #2828 | refactor(cli): extract root help action |
| 29 | #2831 | #2830 | refactor(cli): extract deploy action |
| 30 | #2832 | #2831 | refactor(cli): extract onboard actions |
| 31 | #2835 | #2832 | refactor(cli): extract openshell runtime helpers
|
| 32 | #2836 | #2835 | refactor(cli): extract sandbox logs action |
| 33 | #2837 | #2836 | refactor(cli): extract maintenance actions |
| 34 | #2838 | #2837 | refactor(cli): extract snapshot actions |
| 35 | #2839 | #2838 | refactor(cli): extract policy and channels
actions |
| 36 | #2840 | #2839 | refactor(cli): extract credentials and list
runtime bits |
| 37 | #2841 | #2840 | refactor(cli): shrink runtime bridge |
<!-- STACK-CONTEXT:END -->


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **New Features**
  * Added `captureOpenshell` capability to the runtime bridge.

* **Refactor**
* Consolidated CLI command implementations to use a centralized runtime
bridge accessor, removing duplicate local bridge definitions across
multiple command modules.
* Enhanced runtime bridge method signatures for improved flexibility in
environment and timeout configuration.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Signed-off-by: Carlos Villela <cvillela@nvidia.com>
cv added a commit that referenced this pull request May 2, 2026
## Summary
Collapses the many transitional `exports.*` bridge entries in
`src/nemoclaw.ts` into a single exported `runtimeBridge` object. This
reduces entrypoint export surface while preserving the remaining
centralized bridge until command implementations are fully extracted
into library modules.

## Changes
- Replace dozens of individual `exports.foo = foo` assignments with one
`exports.runtimeBridge = { ... }` object.
- Update `src/lib/nemoclaw-runtime-bridge.ts` to read the single
`runtimeBridge` export.
- Keep `mainPromise` exported for existing subprocess test harnesses.
- Keep public CLI behavior unchanged.

## Type of Change
- [x] Code change (feature, bug fix, or refactor)
- [ ] Code change with doc updates
- [ ] Doc only (prose changes, no code sample modifications)
- [ ] Doc only (includes code sample changes)

## Verification
- [x] `npx prek run --all-files` passes
- [x] `npm test` passes
- [x] Tests added or updated for new or changed behavior
- [x] No secrets, API keys, or credentials committed
- [ ] Docs updated for user-facing behavior changes
- [ ] `make docs` builds without warnings (doc changes only)
- [ ] Doc pages follow the [style
guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md)
(doc changes only)
- [ ] New doc pages include SPDX header and frontmatter (new pages only)

## AI Disclosure
- [x] AI-assisted — tool: OpenAI Codex

---
Signed-off-by: Carlos Villela <cvillela@nvidia.com>

<!-- STACK-CONTEXT:START -->
## Stack position

> [!NOTE]
> This PR is part of a stacked refactor. Please review/merge in stack
order.
> The current PR is highlighted below.

This is PR **#2819** in the stacked CLI oclif refactor series.

- Merge after: **#2818**
- Next PR: **#2826**
- Stack position: **24 / 37**

## Full stack

Merge from top to bottom.

| Order | PR | Merge after | Title |
|---:|---|---|---|
| 1 | #2775 | `main` | refactor(cli): migrate status and tunnel commands
to oclif |
| 2 | #2776 | #2775 | refactor(cli): migrate debug uninstall and
gateway-token to oclif |
| 3 | #2786 | #2776 | refactor(cli): migrate credentials commands to
oclif |
| 4 | #2787 | #2786 | refactor(cli): migrate sandbox inspection commands
to oclif |
| 5 | #2788 | #2787 | refactor(cli): migrate maintenance commands to
oclif |
| 6 | #2796 | #2788 | refactor(cli): migrate sandbox logs command to
oclif |
| 7 | #2797 | #2796 | refactor(cli): migrate skill install command to
oclif |
| 8 | #2798 | #2797 | refactor(cli): migrate snapshot list and create to
oclif |
| 9 | #2802 | #2798 | refactor(cli): migrate shields commands to oclif |
| 10 | #2803 | #2802 | refactor(cli): migrate channels mutation commands
to oclif |
| 11 | #2804 | #2803 | refactor(cli): migrate policy mutation commands
to oclif |
| 12 | #2805 | #2804 | refactor(cli): migrate snapshot restore command
to oclif |
| 13 | #2806 | #2805 | refactor(cli): migrate destroy command to oclif |
| 14 | #2807 | #2806 | refactor(cli): migrate rebuild command to oclif |
| 15 | #2808 | #2807 | refactor(cli): migrate connect command to oclif |
| 16 | #2809 | #2808 | refactor(cli): migrate deploy command to oclif |
| 17 | #2810 | #2809 | refactor(cli): migrate onboard aliases to oclif |
| 18 | #2811 | #2810 | refactor(cli): migrate help and version commands
to oclif |
| 19 | #2814 | #2811 | refactor(cli): centralize legacy oclif dispatch |
| 20 | #2815 | #2814 | refactor(cli): drop trivial oclif wrapper helpers
|
| 21 | #2816 | #2815 | refactor(cli): centralize sandbox runtime bridge
|
| 22 | #2817 | #2816 | refactor(cli): centralize policy and channels
runtime bridge |
| 23 | #2818 | #2817 | refactor(cli): centralize global runtime bridge |
| 24 | **#2819** | #2818 | **refactor(cli): collapse runtime bridge
exports** |
| 25 | #2826 | #2819 | refactor(cli): introduce sandbox runtime action
facade |
| 26 | #2827 | #2826 | refactor(cli): introduce policy and channels
action facade |
| 27 | #2828 | #2827 | refactor(cli): introduce global command action
facade |
| 28 | #2830 | #2828 | refactor(cli): extract root help action |
| 29 | #2831 | #2830 | refactor(cli): extract deploy action |
| 30 | #2832 | #2831 | refactor(cli): extract onboard actions |
| 31 | #2835 | #2832 | refactor(cli): extract openshell runtime helpers
|
| 32 | #2836 | #2835 | refactor(cli): extract sandbox logs action |
| 33 | #2837 | #2836 | refactor(cli): extract maintenance actions |
| 34 | #2838 | #2837 | refactor(cli): extract snapshot actions |
| 35 | #2839 | #2838 | refactor(cli): extract policy and channels
actions |
| 36 | #2840 | #2839 | refactor(cli): extract credentials and list
runtime bits |
| 37 | #2841 | #2840 | refactor(cli): shrink runtime bridge |
<!-- STACK-CONTEXT:END -->


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Refactor**
* Reorganized internal module structure to improve runtime bridge
initialization and module resolution without affecting the public API.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Signed-off-by: Carlos Villela <cvillela@nvidia.com>
@cv cv added v0.0.34 and removed v0.0.33 labels May 2, 2026
cv added a commit that referenced this pull request May 2, 2026
## Summary
Introduces a sandbox runtime action facade between oclif adapters and
the temporary NemoClaw runtime bridge. This prepares the sandbox command
implementations for a later physical extraction from `src/nemoclaw.ts`
without changing public behavior.

## Changes
- Add `src/lib/sandbox-runtime-actions.ts` for
connect/status/logs/destroy/rebuild/skill/snapshot sandbox actions.
- Update sandbox-oriented oclif adapters to call the action facade
instead of the runtime bridge directly.
- Preserve existing test injection hooks for logs, skill install, and
snapshot wrappers.
- Keep public CLI behavior unchanged.

## Type of Change
- [x] Code change (feature, bug fix, or refactor)
- [ ] Code change with doc updates
- [ ] Doc only (prose changes, no code sample modifications)
- [ ] Doc only (includes code sample changes)

## Verification
- [x] `npx prek run --all-files` passes
- [x] `npm test` passes
- [x] Tests added or updated for new or changed behavior
- [x] No secrets, API keys, or credentials committed
- [ ] Docs updated for user-facing behavior changes
- [ ] `make docs` builds without warnings (doc changes only)
- [ ] Doc pages follow the [style
guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md)
(doc changes only)
- [ ] New doc pages include SPDX header and frontmatter (new pages only)

## AI Disclosure
- [x] AI-assisted — tool: OpenAI Codex

---
Signed-off-by: Carlos Villela <cvillela@nvidia.com>

<!-- STACK-CONTEXT:START -->
## Stack position

> [!NOTE]
> This PR is part of a stacked refactor. Please review/merge in stack
order.
> The current PR is highlighted below.

This is PR **#2826** in the stacked CLI oclif refactor series.

- Merge after: **#2819**
- Next PR: **#2827**
- Stack position: **25 / 37**

## Full stack

Merge from top to bottom.

| Order | PR | Merge after | Title |
|---:|---|---|---|
| 1 | #2775 | `main` | refactor(cli): migrate status and tunnel commands
to oclif |
| 2 | #2776 | #2775 | refactor(cli): migrate debug uninstall and
gateway-token to oclif |
| 3 | #2786 | #2776 | refactor(cli): migrate credentials commands to
oclif |
| 4 | #2787 | #2786 | refactor(cli): migrate sandbox inspection commands
to oclif |
| 5 | #2788 | #2787 | refactor(cli): migrate maintenance commands to
oclif |
| 6 | #2796 | #2788 | refactor(cli): migrate sandbox logs command to
oclif |
| 7 | #2797 | #2796 | refactor(cli): migrate skill install command to
oclif |
| 8 | #2798 | #2797 | refactor(cli): migrate snapshot list and create to
oclif |
| 9 | #2802 | #2798 | refactor(cli): migrate shields commands to oclif |
| 10 | #2803 | #2802 | refactor(cli): migrate channels mutation commands
to oclif |
| 11 | #2804 | #2803 | refactor(cli): migrate policy mutation commands
to oclif |
| 12 | #2805 | #2804 | refactor(cli): migrate snapshot restore command
to oclif |
| 13 | #2806 | #2805 | refactor(cli): migrate destroy command to oclif |
| 14 | #2807 | #2806 | refactor(cli): migrate rebuild command to oclif |
| 15 | #2808 | #2807 | refactor(cli): migrate connect command to oclif |
| 16 | #2809 | #2808 | refactor(cli): migrate deploy command to oclif |
| 17 | #2810 | #2809 | refactor(cli): migrate onboard aliases to oclif |
| 18 | #2811 | #2810 | refactor(cli): migrate help and version commands
to oclif |
| 19 | #2814 | #2811 | refactor(cli): centralize legacy oclif dispatch |
| 20 | #2815 | #2814 | refactor(cli): drop trivial oclif wrapper helpers
|
| 21 | #2816 | #2815 | refactor(cli): centralize sandbox runtime bridge
|
| 22 | #2817 | #2816 | refactor(cli): centralize policy and channels
runtime bridge |
| 23 | #2818 | #2817 | refactor(cli): centralize global runtime bridge |
| 24 | #2819 | #2818 | refactor(cli): collapse runtime bridge exports |
| 25 | **#2826** | #2819 | **refactor(cli): introduce sandbox runtime
action facade** |
| 26 | #2827 | #2826 | refactor(cli): introduce policy and channels
action facade |
| 27 | #2828 | #2827 | refactor(cli): introduce global command action
facade |
| 28 | #2830 | #2828 | refactor(cli): extract root help action |
| 29 | #2831 | #2830 | refactor(cli): extract deploy action |
| 30 | #2832 | #2831 | refactor(cli): extract onboard actions |
| 31 | #2835 | #2832 | refactor(cli): extract openshell runtime helpers
|
| 32 | #2836 | #2835 | refactor(cli): extract sandbox logs action |
| 33 | #2837 | #2836 | refactor(cli): extract maintenance actions |
| 34 | #2838 | #2837 | refactor(cli): extract snapshot actions |
| 35 | #2839 | #2838 | refactor(cli): extract policy and channels
actions |
| 36 | #2840 | #2839 | refactor(cli): extract credentials and list
runtime bits |
| 37 | #2841 | #2840 | refactor(cli): shrink runtime bridge |
<!-- STACK-CONTEXT:END -->


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Refactor**
* Reorganized internal sandbox runtime operation handling for improved
code maintainability. CLI command behavior remains unchanged—all sandbox
operations (connect, destroy, rebuild, status, logs, skill installation,
snapshots) continue to function as before.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Signed-off-by: Carlos Villela <cvillela@nvidia.com>
cv added a commit that referenced this pull request May 2, 2026
## Summary
Introduces a policy and channels action facade between oclif adapters
and the temporary NemoClaw runtime bridge. This prepares those command
families for later extraction from `src/nemoclaw.ts` while preserving
behavior.

## Changes
- Add `src/lib/policy-channel-actions.ts` for policy and messaging
channel action calls.
- Update policy/channel mutation adapters to call the facade.
- Update sandbox inspection channel/policy list commands to call the
facade.
- Preserve existing adapter test hooks and public CLI behavior.

## Type of Change
- [x] Code change (feature, bug fix, or refactor)
- [ ] Code change with doc updates
- [ ] Doc only (prose changes, no code sample modifications)
- [ ] Doc only (includes code sample changes)

## Verification
- [x] `npx prek run --all-files` passes
- [x] `npm test` passes
- [x] Tests added or updated for new or changed behavior
- [x] No secrets, API keys, or credentials committed
- [ ] Docs updated for user-facing behavior changes
- [ ] `make docs` builds without warnings (doc changes only)
- [ ] Doc pages follow the [style
guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md)
(doc changes only)
- [ ] New doc pages include SPDX header and frontmatter (new pages only)

## AI Disclosure
- [x] AI-assisted — tool: OpenAI Codex

---
Signed-off-by: Carlos Villela <cvillela@nvidia.com>

<!-- STACK-CONTEXT:START -->
## Stack position

> [!NOTE]
> This PR is part of a stacked refactor. Please review/merge in stack
order.
> The current PR is highlighted below.

This is PR **#2827** in the stacked CLI oclif refactor series.

- Merge after: **#2826**
- Next PR: **#2828**
- Stack position: **26 / 37**

## Full stack

Merge from top to bottom.

| Order | PR | Merge after | Title |
|---:|---|---|---|
| 1 | #2775 | `main` | refactor(cli): migrate status and tunnel commands
to oclif |
| 2 | #2776 | #2775 | refactor(cli): migrate debug uninstall and
gateway-token to oclif |
| 3 | #2786 | #2776 | refactor(cli): migrate credentials commands to
oclif |
| 4 | #2787 | #2786 | refactor(cli): migrate sandbox inspection commands
to oclif |
| 5 | #2788 | #2787 | refactor(cli): migrate maintenance commands to
oclif |
| 6 | #2796 | #2788 | refactor(cli): migrate sandbox logs command to
oclif |
| 7 | #2797 | #2796 | refactor(cli): migrate skill install command to
oclif |
| 8 | #2798 | #2797 | refactor(cli): migrate snapshot list and create to
oclif |
| 9 | #2802 | #2798 | refactor(cli): migrate shields commands to oclif |
| 10 | #2803 | #2802 | refactor(cli): migrate channels mutation commands
to oclif |
| 11 | #2804 | #2803 | refactor(cli): migrate policy mutation commands
to oclif |
| 12 | #2805 | #2804 | refactor(cli): migrate snapshot restore command
to oclif |
| 13 | #2806 | #2805 | refactor(cli): migrate destroy command to oclif |
| 14 | #2807 | #2806 | refactor(cli): migrate rebuild command to oclif |
| 15 | #2808 | #2807 | refactor(cli): migrate connect command to oclif |
| 16 | #2809 | #2808 | refactor(cli): migrate deploy command to oclif |
| 17 | #2810 | #2809 | refactor(cli): migrate onboard aliases to oclif |
| 18 | #2811 | #2810 | refactor(cli): migrate help and version commands
to oclif |
| 19 | #2814 | #2811 | refactor(cli): centralize legacy oclif dispatch |
| 20 | #2815 | #2814 | refactor(cli): drop trivial oclif wrapper helpers
|
| 21 | #2816 | #2815 | refactor(cli): centralize sandbox runtime bridge
|
| 22 | #2817 | #2816 | refactor(cli): centralize policy and channels
runtime bridge |
| 23 | #2818 | #2817 | refactor(cli): centralize global runtime bridge |
| 24 | #2819 | #2818 | refactor(cli): collapse runtime bridge exports |
| 25 | #2826 | #2819 | refactor(cli): introduce sandbox runtime action
facade |
| 26 | **#2827** | #2826 | **refactor(cli): introduce policy and
channels action facade** |
| 27 | #2828 | #2827 | refactor(cli): introduce global command action
facade |
| 28 | #2830 | #2828 | refactor(cli): extract root help action |
| 29 | #2831 | #2830 | refactor(cli): extract deploy action |
| 30 | #2832 | #2831 | refactor(cli): extract onboard actions |
| 31 | #2835 | #2832 | refactor(cli): extract openshell runtime helpers
|
| 32 | #2836 | #2835 | refactor(cli): extract sandbox logs action |
| 33 | #2837 | #2836 | refactor(cli): extract maintenance actions |
| 34 | #2838 | #2837 | refactor(cli): extract snapshot actions |
| 35 | #2839 | #2838 | refactor(cli): extract policy and channels
actions |
| 36 | #2840 | #2839 | refactor(cli): extract credentials and list
runtime bits |
| 37 | #2841 | #2840 | refactor(cli): shrink runtime bridge |
<!-- STACK-CONTEXT:END -->


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Refactor**
* Improved internal architecture by introducing a facade layer for
sandbox policy and channel management operations.
* Simplified command adapter structure for enhanced testability and
maintainability.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Signed-off-by: Carlos Villela <cvillela@nvidia.com>
cv added a commit that referenced this pull request May 2, 2026
## Summary
Introduces a global command action facade between oclif adapters and the
temporary NemoClaw runtime bridge. This groups
onboard/deploy/maintenance/help/credentials bridge calls in one place
ahead of moving the actual implementations out of `src/nemoclaw.ts`.

## Changes
- Add `src/lib/global-cli-actions.ts` for global command action calls.
- Update deploy, maintenance, onboard alias, help/version, and
credentials adapters to call the facade.
- Keep public CLI behavior unchanged.

## Type of Change
- [x] Code change (feature, bug fix, or refactor)
- [ ] Code change with doc updates
- [ ] Doc only (prose changes, no code sample modifications)
- [ ] Doc only (includes code sample changes)

## Verification
- [x] `npx prek run --all-files` passes
- [x] `npm test` passes
- [x] Tests added or updated for new or changed behavior
- [x] No secrets, API keys, or credentials committed
- [ ] Docs updated for user-facing behavior changes
- [ ] `make docs` builds without warnings (doc changes only)
- [ ] Doc pages follow the [style
guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md)
(doc changes only)
- [ ] New doc pages include SPDX header and frontmatter (new pages only)

## AI Disclosure
- [x] AI-assisted — tool: OpenAI Codex

---
Signed-off-by: Carlos Villela <cvillela@nvidia.com>

<!-- STACK-CONTEXT:START -->
## Stack position

> [!NOTE]
> This PR is part of a stacked refactor. Please review/merge in stack
order.
> The current PR is highlighted below.

This is PR **#2828** in the stacked CLI oclif refactor series.

- Merge after: **#2827**
- Next PR: **#2830**
- Stack position: **27 / 37**

## Full stack

Merge from top to bottom.

| Order | PR | Merge after | Title |
|---:|---|---|---|
| 1 | #2775 | `main` | refactor(cli): migrate status and tunnel commands
to oclif |
| 2 | #2776 | #2775 | refactor(cli): migrate debug uninstall and
gateway-token to oclif |
| 3 | #2786 | #2776 | refactor(cli): migrate credentials commands to
oclif |
| 4 | #2787 | #2786 | refactor(cli): migrate sandbox inspection commands
to oclif |
| 5 | #2788 | #2787 | refactor(cli): migrate maintenance commands to
oclif |
| 6 | #2796 | #2788 | refactor(cli): migrate sandbox logs command to
oclif |
| 7 | #2797 | #2796 | refactor(cli): migrate skill install command to
oclif |
| 8 | #2798 | #2797 | refactor(cli): migrate snapshot list and create to
oclif |
| 9 | #2802 | #2798 | refactor(cli): migrate shields commands to oclif |
| 10 | #2803 | #2802 | refactor(cli): migrate channels mutation commands
to oclif |
| 11 | #2804 | #2803 | refactor(cli): migrate policy mutation commands
to oclif |
| 12 | #2805 | #2804 | refactor(cli): migrate snapshot restore command
to oclif |
| 13 | #2806 | #2805 | refactor(cli): migrate destroy command to oclif |
| 14 | #2807 | #2806 | refactor(cli): migrate rebuild command to oclif |
| 15 | #2808 | #2807 | refactor(cli): migrate connect command to oclif |
| 16 | #2809 | #2808 | refactor(cli): migrate deploy command to oclif |
| 17 | #2810 | #2809 | refactor(cli): migrate onboard aliases to oclif |
| 18 | #2811 | #2810 | refactor(cli): migrate help and version commands
to oclif |
| 19 | #2814 | #2811 | refactor(cli): centralize legacy oclif dispatch |
| 20 | #2815 | #2814 | refactor(cli): drop trivial oclif wrapper helpers
|
| 21 | #2816 | #2815 | refactor(cli): centralize sandbox runtime bridge
|
| 22 | #2817 | #2816 | refactor(cli): centralize policy and channels
runtime bridge |
| 23 | #2818 | #2817 | refactor(cli): centralize global runtime bridge |
| 24 | #2819 | #2818 | refactor(cli): collapse runtime bridge exports |
| 25 | #2826 | #2819 | refactor(cli): introduce sandbox runtime action
facade |
| 26 | #2827 | #2826 | refactor(cli): introduce policy and channels
action facade |
| 27 | **#2828** | #2827 | **refactor(cli): introduce global command
action facade** |
| 28 | #2830 | #2828 | refactor(cli): extract root help action |
| 29 | #2831 | #2830 | refactor(cli): extract deploy action |
| 30 | #2832 | #2831 | refactor(cli): extract onboard actions |
| 31 | #2835 | #2832 | refactor(cli): extract openshell runtime helpers
|
| 32 | #2836 | #2835 | refactor(cli): extract sandbox logs action |
| 33 | #2837 | #2836 | refactor(cli): extract maintenance actions |
| 34 | #2838 | #2837 | refactor(cli): extract snapshot actions |
| 35 | #2839 | #2838 | refactor(cli): extract policy and channels
actions |
| 36 | #2840 | #2839 | refactor(cli): extract credentials and list
runtime bits |
| 37 | #2841 | #2840 | refactor(cli): shrink runtime bridge |
<!-- STACK-CONTEXT:END -->


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Refactor**
* Restructured internal command execution framework to centralize CLI
action handling and improve code organization across multiple commands.
  * All user-facing functionality and CLI behavior remain unchanged.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Signed-off-by: Carlos Villela <cvillela@nvidia.com>
cv added a commit that referenced this pull request May 2, 2026
## Summary
Extracts the root help and version actions from `src/nemoclaw.ts` into a
dedicated library module. This removes another chunk of entrypoint-owned
command behavior while preserving the existing custom help renderer.

## Changes
- Add `src/lib/root-help-action.ts` with `help()` and `version()`
implementations.
- Update global action facade and `src/nemoclaw.ts` to call the
extracted root help module.
- Remove help/version entries from the temporary runtime bridge.
- Update image cleanup guard tests to look for help rendering in the new
module.

## Type of Change
- [x] Code change (feature, bug fix, or refactor)
- [ ] Code change with doc updates
- [ ] Doc only (prose changes, no code sample modifications)
- [ ] Doc only (includes code sample changes)

## Verification
- [x] `npx prek run --all-files` passes
- [x] `npm test` passes
- [x] Tests added or updated for new or changed behavior
- [x] No secrets, API keys, or credentials committed
- [ ] Docs updated for user-facing behavior changes
- [ ] `make docs` builds without warnings (doc changes only)
- [ ] Doc pages follow the [style
guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md)
(doc changes only)
- [ ] New doc pages include SPDX header and frontmatter (new pages only)

## AI Disclosure
- [x] AI-assisted — tool: OpenAI Codex

---
Signed-off-by: Carlos Villela <cvillela@nvidia.com>

<!-- STACK-CONTEXT:START -->
## Stack position

> [!NOTE]
> This PR is part of a stacked refactor. Please review/merge in stack
order.
> The current PR is highlighted below.

This is PR **#2830** in the stacked CLI oclif refactor series.

- Merge after: **#2828**
- Next PR: **#2831**
- Stack position: **28 / 37**

## Full stack

Merge from top to bottom.

| Order | PR | Merge after | Title |
|---:|---|---|---|
| 1 | #2775 | `main` | refactor(cli): migrate status and tunnel commands
to oclif |
| 2 | #2776 | #2775 | refactor(cli): migrate debug uninstall and
gateway-token to oclif |
| 3 | #2786 | #2776 | refactor(cli): migrate credentials commands to
oclif |
| 4 | #2787 | #2786 | refactor(cli): migrate sandbox inspection commands
to oclif |
| 5 | #2788 | #2787 | refactor(cli): migrate maintenance commands to
oclif |
| 6 | #2796 | #2788 | refactor(cli): migrate sandbox logs command to
oclif |
| 7 | #2797 | #2796 | refactor(cli): migrate skill install command to
oclif |
| 8 | #2798 | #2797 | refactor(cli): migrate snapshot list and create to
oclif |
| 9 | #2802 | #2798 | refactor(cli): migrate shields commands to oclif |
| 10 | #2803 | #2802 | refactor(cli): migrate channels mutation commands
to oclif |
| 11 | #2804 | #2803 | refactor(cli): migrate policy mutation commands
to oclif |
| 12 | #2805 | #2804 | refactor(cli): migrate snapshot restore command
to oclif |
| 13 | #2806 | #2805 | refactor(cli): migrate destroy command to oclif |
| 14 | #2807 | #2806 | refactor(cli): migrate rebuild command to oclif |
| 15 | #2808 | #2807 | refactor(cli): migrate connect command to oclif |
| 16 | #2809 | #2808 | refactor(cli): migrate deploy command to oclif |
| 17 | #2810 | #2809 | refactor(cli): migrate onboard aliases to oclif |
| 18 | #2811 | #2810 | refactor(cli): migrate help and version commands
to oclif |
| 19 | #2814 | #2811 | refactor(cli): centralize legacy oclif dispatch |
| 20 | #2815 | #2814 | refactor(cli): drop trivial oclif wrapper helpers
|
| 21 | #2816 | #2815 | refactor(cli): centralize sandbox runtime bridge
|
| 22 | #2817 | #2816 | refactor(cli): centralize policy and channels
runtime bridge |
| 23 | #2818 | #2817 | refactor(cli): centralize global runtime bridge |
| 24 | #2819 | #2818 | refactor(cli): collapse runtime bridge exports |
| 25 | #2826 | #2819 | refactor(cli): introduce sandbox runtime action
facade |
| 26 | #2827 | #2826 | refactor(cli): introduce policy and channels
action facade |
| 27 | #2828 | #2827 | refactor(cli): introduce global command action
facade |
| 28 | **#2830** | #2828 | **refactor(cli): extract root help action** |
| 29 | #2831 | #2830 | refactor(cli): extract deploy action |
| 30 | #2832 | #2831 | refactor(cli): extract onboard actions |
| 31 | #2835 | #2832 | refactor(cli): extract openshell runtime helpers
|
| 32 | #2836 | #2835 | refactor(cli): extract sandbox logs action |
| 33 | #2837 | #2836 | refactor(cli): extract maintenance actions |
| 34 | #2838 | #2837 | refactor(cli): extract snapshot actions |
| 35 | #2839 | #2838 | refactor(cli): extract policy and channels
actions |
| 36 | #2840 | #2839 | refactor(cli): extract credentials and list
runtime bits |
| 37 | #2841 | #2840 | refactor(cli): shrink runtime bridge |
<!-- STACK-CONTEXT:END -->


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Refactor**
* Help and version commands consolidated into a dedicated module; CLI
now uses that module for displayed help and version output. Help text
rendering improved (grouped commands, per-command flags, deprecated
styling, uninstall and reconfiguration notes, powered-by and gateway/URL
lines, respects NO_COLOR/TTY/truecolor).

* **Tests**
* Updated tests to validate rendered help output instead of internal
wiring.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Signed-off-by: Carlos Villela <cvillela@nvidia.com>
cv added a commit that referenced this pull request May 2, 2026
## Summary
Extracts the deploy action wiring from `src/nemoclaw.ts` into a
dedicated library module. The deploy oclif adapter now reaches the
deployment implementation through `global-cli-actions` without the
temporary runtime bridge.

## Changes
- Add `src/lib/deploy-action.ts` to assemble `executeDeploy()`
dependencies outside the entrypoint.
- Update `src/lib/global-cli-actions.ts` to call the extracted deploy
action directly.
- Remove `deploy` from the temporary runtime bridge and from
`src/nemoclaw.ts`.
- Update runner guard tests to look for deploy wiring in the new action
module.

## Type of Change
- [x] Code change (feature, bug fix, or refactor)
- [ ] Code change with doc updates
- [ ] Doc only (prose changes, no code sample modifications)
- [ ] Doc only (includes code sample changes)

## Verification
- [x] `npx prek run --all-files` passes
- [x] `npm test` passes
- [x] Tests added or updated for new or changed behavior
- [x] No secrets, API keys, or credentials committed
- [ ] Docs updated for user-facing behavior changes
- [ ] `make docs` builds without warnings (doc changes only)
- [ ] Doc pages follow the [style
guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md)
(doc changes only)
- [ ] New doc pages include SPDX header and frontmatter (new pages only)

## AI Disclosure
- [x] AI-assisted — tool: OpenAI Codex

---
Signed-off-by: Carlos Villela <cvillela@nvidia.com>

<!-- STACK-CONTEXT:START -->
## Stack position

> [!NOTE]
> This PR is part of a stacked refactor. Please review/merge in stack
order.
> The current PR is highlighted below.

This is PR **#2831** in the stacked CLI oclif refactor series.

- Merge after: **#2830**
- Next PR: **#2832**
- Stack position: **29 / 37**

## Full stack

Merge from top to bottom.

| Order | PR | Merge after | Title |
|---:|---|---|---|
| 1 | #2775 | `main` | refactor(cli): migrate status and tunnel commands
to oclif |
| 2 | #2776 | #2775 | refactor(cli): migrate debug uninstall and
gateway-token to oclif |
| 3 | #2786 | #2776 | refactor(cli): migrate credentials commands to
oclif |
| 4 | #2787 | #2786 | refactor(cli): migrate sandbox inspection commands
to oclif |
| 5 | #2788 | #2787 | refactor(cli): migrate maintenance commands to
oclif |
| 6 | #2796 | #2788 | refactor(cli): migrate sandbox logs command to
oclif |
| 7 | #2797 | #2796 | refactor(cli): migrate skill install command to
oclif |
| 8 | #2798 | #2797 | refactor(cli): migrate snapshot list and create to
oclif |
| 9 | #2802 | #2798 | refactor(cli): migrate shields commands to oclif |
| 10 | #2803 | #2802 | refactor(cli): migrate channels mutation commands
to oclif |
| 11 | #2804 | #2803 | refactor(cli): migrate policy mutation commands
to oclif |
| 12 | #2805 | #2804 | refactor(cli): migrate snapshot restore command
to oclif |
| 13 | #2806 | #2805 | refactor(cli): migrate destroy command to oclif |
| 14 | #2807 | #2806 | refactor(cli): migrate rebuild command to oclif |
| 15 | #2808 | #2807 | refactor(cli): migrate connect command to oclif |
| 16 | #2809 | #2808 | refactor(cli): migrate deploy command to oclif |
| 17 | #2810 | #2809 | refactor(cli): migrate onboard aliases to oclif |
| 18 | #2811 | #2810 | refactor(cli): migrate help and version commands
to oclif |
| 19 | #2814 | #2811 | refactor(cli): centralize legacy oclif dispatch |
| 20 | #2815 | #2814 | refactor(cli): drop trivial oclif wrapper helpers
|
| 21 | #2816 | #2815 | refactor(cli): centralize sandbox runtime bridge
|
| 22 | #2817 | #2816 | refactor(cli): centralize policy and channels
runtime bridge |
| 23 | #2818 | #2817 | refactor(cli): centralize global runtime bridge |
| 24 | #2819 | #2818 | refactor(cli): collapse runtime bridge exports |
| 25 | #2826 | #2819 | refactor(cli): introduce sandbox runtime action
facade |
| 26 | #2827 | #2826 | refactor(cli): introduce policy and channels
action facade |
| 27 | #2828 | #2827 | refactor(cli): introduce global command action
facade |
| 28 | #2830 | #2828 | refactor(cli): extract root help action |
| 29 | **#2831** | #2830 | **refactor(cli): extract deploy action** |
| 30 | #2832 | #2831 | refactor(cli): extract onboard actions |
| 31 | #2835 | #2832 | refactor(cli): extract openshell runtime helpers
|
| 32 | #2836 | #2835 | refactor(cli): extract sandbox logs action |
| 33 | #2837 | #2836 | refactor(cli): extract maintenance actions |
| 34 | #2838 | #2837 | refactor(cli): extract snapshot actions |
| 35 | #2839 | #2838 | refactor(cli): extract policy and channels
actions |
| 36 | #2840 | #2839 | refactor(cli): extract credentials and list
runtime bits |
| 37 | #2841 | #2840 | refactor(cli): shrink runtime bridge |
<!-- STACK-CONTEXT:END -->


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Refactor**
* Reorganized the internal deployment system architecture for improved
code structure and maintainability.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Signed-off-by: Carlos Villela <cvillela@nvidia.com>
cv added a commit that referenced this pull request May 2, 2026
## Summary
Extracts onboard, setup, and setup-spark action wiring from
`src/nemoclaw.ts` into a dedicated library module. The onboarding oclif
adapters now call the extracted action facade directly instead of
routing through the temporary runtime bridge.

## Changes
- Add `src/lib/onboard-action.ts` for onboarding and deprecated setup
alias actions.
- Update `src/lib/global-cli-actions.ts` to call the extracted onboard
actions directly.
- Remove onboard/setup/setup-spark from the temporary runtime bridge and
from `src/nemoclaw.ts`.
- Update runner guard tests to look for setup-spark alias behavior in
the new action module.

## Type of Change
- [x] Code change (feature, bug fix, or refactor)
- [ ] Code change with doc updates
- [ ] Doc only (prose changes, no code sample modifications)
- [ ] Doc only (includes code sample changes)

## Verification
- [x] `npx prek run --all-files` passes
- [x] `npm test` passes
- [x] Tests added or updated for new or changed behavior
- [x] No secrets, API keys, or credentials committed
- [ ] Docs updated for user-facing behavior changes
- [ ] `make docs` builds without warnings (doc changes only)
- [ ] Doc pages follow the [style
guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md)
(doc changes only)
- [ ] New doc pages include SPDX header and frontmatter (new pages only)

## AI Disclosure
- [x] AI-assisted — tool: OpenAI Codex

---
Signed-off-by: Carlos Villela <cvillela@nvidia.com>

<!-- STACK-CONTEXT:START -->
## Stack position

> [!NOTE]
> This PR is part of a stacked refactor. Please review/merge in stack
order.
> The current PR is highlighted below.

This is PR **#2832** in the stacked CLI oclif refactor series.

- Merge after: **#2831**
- Next PR: **#2835**
- Stack position: **30 / 37**

## Full stack

Merge from top to bottom.

| Order | PR | Merge after | Title |
|---:|---|---|---|
| 1 | #2775 | `main` | refactor(cli): migrate status and tunnel commands
to oclif |
| 2 | #2776 | #2775 | refactor(cli): migrate debug uninstall and
gateway-token to oclif |
| 3 | #2786 | #2776 | refactor(cli): migrate credentials commands to
oclif |
| 4 | #2787 | #2786 | refactor(cli): migrate sandbox inspection commands
to oclif |
| 5 | #2788 | #2787 | refactor(cli): migrate maintenance commands to
oclif |
| 6 | #2796 | #2788 | refactor(cli): migrate sandbox logs command to
oclif |
| 7 | #2797 | #2796 | refactor(cli): migrate skill install command to
oclif |
| 8 | #2798 | #2797 | refactor(cli): migrate snapshot list and create to
oclif |
| 9 | #2802 | #2798 | refactor(cli): migrate shields commands to oclif |
| 10 | #2803 | #2802 | refactor(cli): migrate channels mutation commands
to oclif |
| 11 | #2804 | #2803 | refactor(cli): migrate policy mutation commands
to oclif |
| 12 | #2805 | #2804 | refactor(cli): migrate snapshot restore command
to oclif |
| 13 | #2806 | #2805 | refactor(cli): migrate destroy command to oclif |
| 14 | #2807 | #2806 | refactor(cli): migrate rebuild command to oclif |
| 15 | #2808 | #2807 | refactor(cli): migrate connect command to oclif |
| 16 | #2809 | #2808 | refactor(cli): migrate deploy command to oclif |
| 17 | #2810 | #2809 | refactor(cli): migrate onboard aliases to oclif |
| 18 | #2811 | #2810 | refactor(cli): migrate help and version commands
to oclif |
| 19 | #2814 | #2811 | refactor(cli): centralize legacy oclif dispatch |
| 20 | #2815 | #2814 | refactor(cli): drop trivial oclif wrapper helpers
|
| 21 | #2816 | #2815 | refactor(cli): centralize sandbox runtime bridge
|
| 22 | #2817 | #2816 | refactor(cli): centralize policy and channels
runtime bridge |
| 23 | #2818 | #2817 | refactor(cli): centralize global runtime bridge |
| 24 | #2819 | #2818 | refactor(cli): collapse runtime bridge exports |
| 25 | #2826 | #2819 | refactor(cli): introduce sandbox runtime action
facade |
| 26 | #2827 | #2826 | refactor(cli): introduce policy and channels
action facade |
| 27 | #2828 | #2827 | refactor(cli): introduce global command action
facade |
| 28 | #2830 | #2828 | refactor(cli): extract root help action |
| 29 | #2831 | #2830 | refactor(cli): extract deploy action |
| 30 | **#2832** | #2831 | **refactor(cli): extract onboard actions** |
| 31 | #2835 | #2832 | refactor(cli): extract openshell runtime helpers
|
| 32 | #2836 | #2835 | refactor(cli): extract sandbox logs action |
| 33 | #2837 | #2836 | refactor(cli): extract maintenance actions |
| 34 | #2838 | #2837 | refactor(cli): extract snapshot actions |
| 35 | #2839 | #2838 | refactor(cli): extract policy and channels
actions |
| 36 | #2840 | #2839 | refactor(cli): extract credentials and list
runtime bits |
| 37 | #2841 | #2840 | refactor(cli): shrink runtime bridge |
<!-- STACK-CONTEXT:END -->


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Refactor**
* Reorganized CLI command handling to consolidate onboarding and setup
operations into a unified architecture for improved code organization.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Signed-off-by: Carlos Villela <cvillela@nvidia.com>
@cv
cv changed the base branch from refactor/oclif-extract-onboard-actions to main May 2, 2026 17:23
@cv
cv marked this pull request as ready for review May 2, 2026 17:30
@cv
cv merged commit 2783a97 into main May 2, 2026
11 checks passed
cv added a commit that referenced this pull request May 2, 2026
## Summary
Extracts sandbox log handling from `src/nemoclaw.ts` into a dedicated
action module. This moves log source setup, audit-log enabling,
follow-mode process handling, and log argument construction out of the
CLI entrypoint.

## Changes
- Add `src/lib/sandbox-logs-action.ts` with the existing sandbox log
implementation.
- Update `src/lib/sandbox-runtime-actions.ts` to call the extracted logs
action directly.
- Remove the inline sandbox log helpers from `src/nemoclaw.ts`.
- Keep the existing CLI log behavior unchanged, including `--follow`
signal semantics and audit-log warnings.

## Type of Change
- [x] Code change (feature, bug fix, or refactor)
- [ ] Code change with doc updates
- [ ] Doc only (prose changes, no code sample modifications)
- [ ] Doc only (includes code sample changes)

## Verification
- [x] `npx prek run --all-files` passes
- [x] `npm test` passes
- [x] Tests added or updated for new or changed behavior
- [x] No secrets, API keys, or credentials committed
- [ ] Docs updated for user-facing behavior changes
- [ ] `make docs` builds without warnings (doc changes only)
- [ ] Doc pages follow the [style
guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md)
(doc changes only)
- [ ] New doc pages include SPDX header and frontmatter (new pages only)

## AI Disclosure
- [x] AI-assisted — tool: OpenAI Codex

---
Signed-off-by: Carlos Villela <cvillela@nvidia.com>

<!-- STACK-CONTEXT:START -->
## Stack position

> [!NOTE]
> This PR is part of a stacked refactor. Please review/merge in stack
order.
> The current PR is highlighted below.

This is PR **#2836** in the stacked CLI oclif refactor series.

- Merge after: **#2835**
- Next PR: **#2837**
- Stack position: **32 / 37**

## Full stack

Merge from top to bottom.

| Order | PR | Merge after | Title |
|---:|---|---|---|
| 1 | #2775 | `main` | refactor(cli): migrate status and tunnel commands
to oclif |
| 2 | #2776 | #2775 | refactor(cli): migrate debug uninstall and
gateway-token to oclif |
| 3 | #2786 | #2776 | refactor(cli): migrate credentials commands to
oclif |
| 4 | #2787 | #2786 | refactor(cli): migrate sandbox inspection commands
to oclif |
| 5 | #2788 | #2787 | refactor(cli): migrate maintenance commands to
oclif |
| 6 | #2796 | #2788 | refactor(cli): migrate sandbox logs command to
oclif |
| 7 | #2797 | #2796 | refactor(cli): migrate skill install command to
oclif |
| 8 | #2798 | #2797 | refactor(cli): migrate snapshot list and create to
oclif |
| 9 | #2802 | #2798 | refactor(cli): migrate shields commands to oclif |
| 10 | #2803 | #2802 | refactor(cli): migrate channels mutation commands
to oclif |
| 11 | #2804 | #2803 | refactor(cli): migrate policy mutation commands
to oclif |
| 12 | #2805 | #2804 | refactor(cli): migrate snapshot restore command
to oclif |
| 13 | #2806 | #2805 | refactor(cli): migrate destroy command to oclif |
| 14 | #2807 | #2806 | refactor(cli): migrate rebuild command to oclif |
| 15 | #2808 | #2807 | refactor(cli): migrate connect command to oclif |
| 16 | #2809 | #2808 | refactor(cli): migrate deploy command to oclif |
| 17 | #2810 | #2809 | refactor(cli): migrate onboard aliases to oclif |
| 18 | #2811 | #2810 | refactor(cli): migrate help and version commands
to oclif |
| 19 | #2814 | #2811 | refactor(cli): centralize legacy oclif dispatch |
| 20 | #2815 | #2814 | refactor(cli): drop trivial oclif wrapper helpers
|
| 21 | #2816 | #2815 | refactor(cli): centralize sandbox runtime bridge
|
| 22 | #2817 | #2816 | refactor(cli): centralize policy and channels
runtime bridge |
| 23 | #2818 | #2817 | refactor(cli): centralize global runtime bridge |
| 24 | #2819 | #2818 | refactor(cli): collapse runtime bridge exports |
| 25 | #2826 | #2819 | refactor(cli): introduce sandbox runtime action
facade |
| 26 | #2827 | #2826 | refactor(cli): introduce policy and channels
action facade |
| 27 | #2828 | #2827 | refactor(cli): introduce global command action
facade |
| 28 | #2830 | #2828 | refactor(cli): extract root help action |
| 29 | #2831 | #2830 | refactor(cli): extract deploy action |
| 30 | #2832 | #2831 | refactor(cli): extract onboard actions |
| 31 | #2835 | #2832 | refactor(cli): extract openshell runtime helpers
|
| 32 | **#2836** | #2835 | **refactor(cli): extract sandbox logs
action** |
| 33 | #2837 | #2836 | refactor(cli): extract maintenance actions |
| 34 | #2838 | #2837 | refactor(cli): extract snapshot actions |
| 35 | #2839 | #2838 | refactor(cli): extract policy and channels
actions |
| 36 | #2840 | #2839 | refactor(cli): extract credentials and list
runtime bits |
| 37 | #2841 | #2840 | refactor(cli): shrink runtime bridge |
<!-- STACK-CONTEXT:END -->


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Tests**
  * Improved test coverage tracking for runtime components.

* **Refactor**
* Extracted sandbox logging functionality into a dedicated module to
improve code organization and maintainability.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Signed-off-by: Carlos Villela <cvillela@nvidia.com>
cv added a commit that referenced this pull request May 2, 2026
## Summary
Extracts backup-all and garbage-collection maintenance actions from
`src/nemoclaw.ts` into a dedicated module. The maintenance oclif
adapters now call the extracted actions instead of reaching through the
runtime bridge for these commands.

## Changes
- Add `src/lib/maintenance-actions.ts` with `backupAll()` and
`garbageCollectImages()`.
- Update `src/lib/global-cli-actions.ts` to call extracted maintenance
actions directly.
- Remove backup/gc entries from the temporary runtime bridge and remove
inline implementations from `src/nemoclaw.ts`.
- Update image cleanup tests to inspect the new maintenance action
module.

## Type of Change
- [x] Code change (feature, bug fix, or refactor)
- [ ] Code change with doc updates
- [ ] Doc only (prose changes, no code sample modifications)
- [ ] Doc only (includes code sample changes)

## Verification
- [x] `npx prek run --all-files` passes
- [x] `npm test` passes
- [x] Tests added or updated for new or changed behavior
- [x] No secrets, API keys, or credentials committed
- [ ] Docs updated for user-facing behavior changes
- [ ] `make docs` builds without warnings (doc changes only)
- [ ] Doc pages follow the [style
guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md)
(doc changes only)
- [ ] New doc pages include SPDX header and frontmatter (new pages only)

## AI Disclosure
- [x] AI-assisted — tool: OpenAI Codex

---
Signed-off-by: Carlos Villela <cvillela@nvidia.com>

<!-- STACK-CONTEXT:START -->
## Stack position

> [!NOTE]
> This PR is part of a stacked refactor. Please review/merge in stack
order.
> The current PR is highlighted below.

This is PR **#2837** in the stacked CLI oclif refactor series.

- Merge after: **#2836**
- Next PR: **#2838**
- Stack position: **33 / 37**

## Full stack

Merge from top to bottom.

| Order | PR | Merge after | Title |
|---:|---|---|---|
| 1 | #2775 | `main` | refactor(cli): migrate status and tunnel commands
to oclif |
| 2 | #2776 | #2775 | refactor(cli): migrate debug uninstall and
gateway-token to oclif |
| 3 | #2786 | #2776 | refactor(cli): migrate credentials commands to
oclif |
| 4 | #2787 | #2786 | refactor(cli): migrate sandbox inspection commands
to oclif |
| 5 | #2788 | #2787 | refactor(cli): migrate maintenance commands to
oclif |
| 6 | #2796 | #2788 | refactor(cli): migrate sandbox logs command to
oclif |
| 7 | #2797 | #2796 | refactor(cli): migrate skill install command to
oclif |
| 8 | #2798 | #2797 | refactor(cli): migrate snapshot list and create to
oclif |
| 9 | #2802 | #2798 | refactor(cli): migrate shields commands to oclif |
| 10 | #2803 | #2802 | refactor(cli): migrate channels mutation commands
to oclif |
| 11 | #2804 | #2803 | refactor(cli): migrate policy mutation commands
to oclif |
| 12 | #2805 | #2804 | refactor(cli): migrate snapshot restore command
to oclif |
| 13 | #2806 | #2805 | refactor(cli): migrate destroy command to oclif |
| 14 | #2807 | #2806 | refactor(cli): migrate rebuild command to oclif |
| 15 | #2808 | #2807 | refactor(cli): migrate connect command to oclif |
| 16 | #2809 | #2808 | refactor(cli): migrate deploy command to oclif |
| 17 | #2810 | #2809 | refactor(cli): migrate onboard aliases to oclif |
| 18 | #2811 | #2810 | refactor(cli): migrate help and version commands
to oclif |
| 19 | #2814 | #2811 | refactor(cli): centralize legacy oclif dispatch |
| 20 | #2815 | #2814 | refactor(cli): drop trivial oclif wrapper helpers
|
| 21 | #2816 | #2815 | refactor(cli): centralize sandbox runtime bridge
|
| 22 | #2817 | #2816 | refactor(cli): centralize policy and channels
runtime bridge |
| 23 | #2818 | #2817 | refactor(cli): centralize global runtime bridge |
| 24 | #2819 | #2818 | refactor(cli): collapse runtime bridge exports |
| 25 | #2826 | #2819 | refactor(cli): introduce sandbox runtime action
facade |
| 26 | #2827 | #2826 | refactor(cli): introduce policy and channels
action facade |
| 27 | #2828 | #2827 | refactor(cli): introduce global command action
facade |
| 28 | #2830 | #2828 | refactor(cli): extract root help action |
| 29 | #2831 | #2830 | refactor(cli): extract deploy action |
| 30 | #2832 | #2831 | refactor(cli): extract onboard actions |
| 31 | #2835 | #2832 | refactor(cli): extract openshell runtime helpers
|
| 32 | #2836 | #2835 | refactor(cli): extract sandbox logs action |
| 33 | **#2837** | #2836 | **refactor(cli): extract maintenance
actions** |
| 34 | #2838 | #2837 | refactor(cli): extract snapshot actions |
| 35 | #2839 | #2838 | refactor(cli): extract policy and channels
actions |
| 36 | #2840 | #2839 | refactor(cli): extract credentials and list
runtime bits |
| 37 | #2841 | #2840 | refactor(cli): shrink runtime bridge |
<!-- STACK-CONTEXT:END -->


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Refactor**
* Reorganized internal structure of backup and image cleanup operations
for improved code maintainability and organization.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Signed-off-by: Carlos Villela <cvillela@nvidia.com>
cv added a commit that referenced this pull request May 2, 2026
## Summary
Extracts the snapshot command implementation from `src/nemoclaw.ts` into
a dedicated action module. Snapshot list/create/restore wrappers now
call the extracted action instead of the temporary runtime bridge.

## Changes
- Add `src/lib/snapshot-action.ts` with snapshot create/list/restore
logic and helpers.
- Update `src/lib/sandbox-runtime-actions.ts` to invoke the extracted
snapshot action.
- Remove inline snapshot helpers and `sandboxSnapshot` from the runtime
bridge in `src/nemoclaw.ts`.
- Keep public snapshot CLI behavior unchanged.

## Type of Change
- [x] Code change (feature, bug fix, or refactor)
- [ ] Code change with doc updates
- [ ] Doc only (prose changes, no code sample modifications)
- [ ] Doc only (includes code sample changes)

## Verification
- [x] `npx prek run --all-files` passes
- [x] `npm test` passes
- [x] Tests added or updated for new or changed behavior
- [x] No secrets, API keys, or credentials committed
- [ ] Docs updated for user-facing behavior changes
- [ ] `make docs` builds without warnings (doc changes only)
- [ ] Doc pages follow the [style
guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md)
(doc changes only)
- [ ] New doc pages include SPDX header and frontmatter (new pages only)

## AI Disclosure
- [x] AI-assisted — tool: OpenAI Codex

---
Signed-off-by: Carlos Villela <cvillela@nvidia.com>

<!-- STACK-CONTEXT:START -->
## Stack position

> [!NOTE]
> This PR is part of a stacked refactor. Please review/merge in stack
order.
> The current PR is highlighted below.

This is PR **#2838** in the stacked CLI oclif refactor series.

- Merge after: **#2837**
- Next PR: **#2839**
- Stack position: **34 / 37**

## Full stack

Merge from top to bottom.

| Order | PR | Merge after | Title |
|---:|---|---|---|
| 1 | #2775 | `main` | refactor(cli): migrate status and tunnel commands
to oclif |
| 2 | #2776 | #2775 | refactor(cli): migrate debug uninstall and
gateway-token to oclif |
| 3 | #2786 | #2776 | refactor(cli): migrate credentials commands to
oclif |
| 4 | #2787 | #2786 | refactor(cli): migrate sandbox inspection commands
to oclif |
| 5 | #2788 | #2787 | refactor(cli): migrate maintenance commands to
oclif |
| 6 | #2796 | #2788 | refactor(cli): migrate sandbox logs command to
oclif |
| 7 | #2797 | #2796 | refactor(cli): migrate skill install command to
oclif |
| 8 | #2798 | #2797 | refactor(cli): migrate snapshot list and create to
oclif |
| 9 | #2802 | #2798 | refactor(cli): migrate shields commands to oclif |
| 10 | #2803 | #2802 | refactor(cli): migrate channels mutation commands
to oclif |
| 11 | #2804 | #2803 | refactor(cli): migrate policy mutation commands
to oclif |
| 12 | #2805 | #2804 | refactor(cli): migrate snapshot restore command
to oclif |
| 13 | #2806 | #2805 | refactor(cli): migrate destroy command to oclif |
| 14 | #2807 | #2806 | refactor(cli): migrate rebuild command to oclif |
| 15 | #2808 | #2807 | refactor(cli): migrate connect command to oclif |
| 16 | #2809 | #2808 | refactor(cli): migrate deploy command to oclif |
| 17 | #2810 | #2809 | refactor(cli): migrate onboard aliases to oclif |
| 18 | #2811 | #2810 | refactor(cli): migrate help and version commands
to oclif |
| 19 | #2814 | #2811 | refactor(cli): centralize legacy oclif dispatch |
| 20 | #2815 | #2814 | refactor(cli): drop trivial oclif wrapper helpers
|
| 21 | #2816 | #2815 | refactor(cli): centralize sandbox runtime bridge
|
| 22 | #2817 | #2816 | refactor(cli): centralize policy and channels
runtime bridge |
| 23 | #2818 | #2817 | refactor(cli): centralize global runtime bridge |
| 24 | #2819 | #2818 | refactor(cli): collapse runtime bridge exports |
| 25 | #2826 | #2819 | refactor(cli): introduce sandbox runtime action
facade |
| 26 | #2827 | #2826 | refactor(cli): introduce policy and channels
action facade |
| 27 | #2828 | #2827 | refactor(cli): introduce global command action
facade |
| 28 | #2830 | #2828 | refactor(cli): extract root help action |
| 29 | #2831 | #2830 | refactor(cli): extract deploy action |
| 30 | #2832 | #2831 | refactor(cli): extract onboard actions |
| 31 | #2835 | #2832 | refactor(cli): extract openshell runtime helpers
|
| 32 | #2836 | #2835 | refactor(cli): extract sandbox logs action |
| 33 | #2837 | #2836 | refactor(cli): extract maintenance actions |
| 34 | **#2838** | #2837 | **refactor(cli): extract snapshot actions** |
| 35 | #2839 | #2838 | refactor(cli): extract policy and channels
actions |
| 36 | #2840 | #2839 | refactor(cli): extract credentials and list
runtime bits |
| 37 | #2841 | #2840 | refactor(cli): shrink runtime bridge |
<!-- STACK-CONTEXT:END -->


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Refactor**
* Reorganized snapshot functionality implementation to improve code
organization and maintainability.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Signed-off-by: Carlos Villela <cvillela@nvidia.com>
cv added a commit that referenced this pull request May 2, 2026
## Summary
Extracts policy and messaging-channel command implementations from
`src/nemoclaw.ts` into the policy/channel action module. This moves
policy add/remove/list and channels list/add/remove/start/stop behavior
out of the entrypoint.

## Changes
- Expand `src/lib/policy-channel-actions.ts` from a facade into the home
for policy and channel command actions.
- Update policy/channel oclif adapters and sandbox inspection commands
to call the extracted action functions.
- Remove policy/channel implementations and runtime bridge entries from
`src/nemoclaw.ts`.
- Keep public policy and channel CLI behavior unchanged.

## Type of Change
- [x] Code change (feature, bug fix, or refactor)
- [ ] Code change with doc updates
- [ ] Doc only (prose changes, no code sample modifications)
- [ ] Doc only (includes code sample changes)

## Verification
- [x] `npx prek run --all-files` passes
- [x] `npm test` passes
- [x] Tests added or updated for new or changed behavior
- [x] No secrets, API keys, or credentials committed
- [ ] Docs updated for user-facing behavior changes
- [ ] `make docs` builds without warnings (doc changes only)
- [ ] Doc pages follow the [style
guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md)
(doc changes only)
- [ ] New doc pages include SPDX header and frontmatter (new pages only)

## AI Disclosure
- [x] AI-assisted — tool: OpenAI Codex

---
Signed-off-by: Carlos Villela <cvillela@nvidia.com>

<!-- STACK-CONTEXT:START -->
## Stack position

> [!NOTE]
> This PR is part of a stacked refactor. Please review/merge in stack
order.
> The current PR is highlighted below.

This is PR **#2839** in the stacked CLI oclif refactor series.

- Merge after: **#2838**
- Next PR: **#2840**
- Stack position: **35 / 37**

## Full stack

Merge from top to bottom.

| Order | PR | Merge after | Title |
|---:|---|---|---|
| 1 | #2775 | `main` | refactor(cli): migrate status and tunnel commands
to oclif |
| 2 | #2776 | #2775 | refactor(cli): migrate debug uninstall and
gateway-token to oclif |
| 3 | #2786 | #2776 | refactor(cli): migrate credentials commands to
oclif |
| 4 | #2787 | #2786 | refactor(cli): migrate sandbox inspection commands
to oclif |
| 5 | #2788 | #2787 | refactor(cli): migrate maintenance commands to
oclif |
| 6 | #2796 | #2788 | refactor(cli): migrate sandbox logs command to
oclif |
| 7 | #2797 | #2796 | refactor(cli): migrate skill install command to
oclif |
| 8 | #2798 | #2797 | refactor(cli): migrate snapshot list and create to
oclif |
| 9 | #2802 | #2798 | refactor(cli): migrate shields commands to oclif |
| 10 | #2803 | #2802 | refactor(cli): migrate channels mutation commands
to oclif |
| 11 | #2804 | #2803 | refactor(cli): migrate policy mutation commands
to oclif |
| 12 | #2805 | #2804 | refactor(cli): migrate snapshot restore command
to oclif |
| 13 | #2806 | #2805 | refactor(cli): migrate destroy command to oclif |
| 14 | #2807 | #2806 | refactor(cli): migrate rebuild command to oclif |
| 15 | #2808 | #2807 | refactor(cli): migrate connect command to oclif |
| 16 | #2809 | #2808 | refactor(cli): migrate deploy command to oclif |
| 17 | #2810 | #2809 | refactor(cli): migrate onboard aliases to oclif |
| 18 | #2811 | #2810 | refactor(cli): migrate help and version commands
to oclif |
| 19 | #2814 | #2811 | refactor(cli): centralize legacy oclif dispatch |
| 20 | #2815 | #2814 | refactor(cli): drop trivial oclif wrapper helpers
|
| 21 | #2816 | #2815 | refactor(cli): centralize sandbox runtime bridge
|
| 22 | #2817 | #2816 | refactor(cli): centralize policy and channels
runtime bridge |
| 23 | #2818 | #2817 | refactor(cli): centralize global runtime bridge |
| 24 | #2819 | #2818 | refactor(cli): collapse runtime bridge exports |
| 25 | #2826 | #2819 | refactor(cli): introduce sandbox runtime action
facade |
| 26 | #2827 | #2826 | refactor(cli): introduce policy and channels
action facade |
| 27 | #2828 | #2827 | refactor(cli): introduce global command action
facade |
| 28 | #2830 | #2828 | refactor(cli): extract root help action |
| 29 | #2831 | #2830 | refactor(cli): extract deploy action |
| 30 | #2832 | #2831 | refactor(cli): extract onboard actions |
| 31 | #2835 | #2832 | refactor(cli): extract openshell runtime helpers
|
| 32 | #2836 | #2835 | refactor(cli): extract sandbox logs action |
| 33 | #2837 | #2836 | refactor(cli): extract maintenance actions |
| 34 | #2838 | #2837 | refactor(cli): extract snapshot actions |
| 35 | **#2839** | #2838 | **refactor(cli): extract policy and channels
actions** |
| 36 | #2840 | #2839 | refactor(cli): extract credentials and list
runtime bits |
| 37 | #2841 | #2840 | refactor(cli): shrink runtime bridge |
<!-- STACK-CONTEXT:END -->


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Refactor**
* Consolidated internal architecture for policy and channel management
operations, improving code organization and maintainability.
* Restructured runtime bridge wiring to use dynamic module loading
instead of static imports, enabling better separation of concerns.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Signed-off-by: Carlos Villela <cvillela@nvidia.com>
cv added a commit that referenced this pull request May 2, 2026
## Summary
Extracts credentials and list runtime support out of `src/nemoclaw.ts`.
Gateway recovery and registry recovery logic now live in library action
modules used by credentials and list command paths.

## Changes
- Add `src/lib/gateway-runtime-action.ts` for named NemoClaw gateway
recovery.
- Add `src/lib/registry-recovery-action.ts` for list/sandbox registry
recovery.
- Update credentials and list dependency wiring to use extracted runtime
modules instead of the temporary runtime bridge.
- Remove gateway/registry recovery entries from the runtime bridge.
- Keep public credentials and list behavior unchanged.

## Type of Change
- [x] Code change (feature, bug fix, or refactor)
- [ ] Code change with doc updates
- [ ] Doc only (prose changes, no code sample modifications)
- [ ] Doc only (includes code sample changes)

## Verification
- [x] `npx prek run --all-files` passes
- [x] `npm test` passes
- [x] Tests added or updated for new or changed behavior
- [x] No secrets, API keys, or credentials committed
- [ ] Docs updated for user-facing behavior changes
- [ ] `make docs` builds without warnings (doc changes only)
- [ ] Doc pages follow the [style
guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md)
(doc changes only)
- [ ] New doc pages include SPDX header and frontmatter (new pages only)

## AI Disclosure
- [x] AI-assisted — tool: OpenAI Codex

---
Signed-off-by: Carlos Villela <cvillela@nvidia.com>

<!-- STACK-CONTEXT:START -->
## Stack position

> [!NOTE]
> This PR is part of a stacked refactor. Please review/merge in stack
order.
> The current PR is highlighted below.

This is PR **#2840** in the stacked CLI oclif refactor series.

- Merge after: **#2839**
- Next PR: **#2841**
- Stack position: **36 / 37**

## Full stack

Merge from top to bottom.

| Order | PR | Merge after | Title |
|---:|---|---|---|
| 1 | #2775 | `main` | refactor(cli): migrate status and tunnel commands
to oclif |
| 2 | #2776 | #2775 | refactor(cli): migrate debug uninstall and
gateway-token to oclif |
| 3 | #2786 | #2776 | refactor(cli): migrate credentials commands to
oclif |
| 4 | #2787 | #2786 | refactor(cli): migrate sandbox inspection commands
to oclif |
| 5 | #2788 | #2787 | refactor(cli): migrate maintenance commands to
oclif |
| 6 | #2796 | #2788 | refactor(cli): migrate sandbox logs command to
oclif |
| 7 | #2797 | #2796 | refactor(cli): migrate skill install command to
oclif |
| 8 | #2798 | #2797 | refactor(cli): migrate snapshot list and create to
oclif |
| 9 | #2802 | #2798 | refactor(cli): migrate shields commands to oclif |
| 10 | #2803 | #2802 | refactor(cli): migrate channels mutation commands
to oclif |
| 11 | #2804 | #2803 | refactor(cli): migrate policy mutation commands
to oclif |
| 12 | #2805 | #2804 | refactor(cli): migrate snapshot restore command
to oclif |
| 13 | #2806 | #2805 | refactor(cli): migrate destroy command to oclif |
| 14 | #2807 | #2806 | refactor(cli): migrate rebuild command to oclif |
| 15 | #2808 | #2807 | refactor(cli): migrate connect command to oclif |
| 16 | #2809 | #2808 | refactor(cli): migrate deploy command to oclif |
| 17 | #2810 | #2809 | refactor(cli): migrate onboard aliases to oclif |
| 18 | #2811 | #2810 | refactor(cli): migrate help and version commands
to oclif |
| 19 | #2814 | #2811 | refactor(cli): centralize legacy oclif dispatch |
| 20 | #2815 | #2814 | refactor(cli): drop trivial oclif wrapper helpers
|
| 21 | #2816 | #2815 | refactor(cli): centralize sandbox runtime bridge
|
| 22 | #2817 | #2816 | refactor(cli): centralize policy and channels
runtime bridge |
| 23 | #2818 | #2817 | refactor(cli): centralize global runtime bridge |
| 24 | #2819 | #2818 | refactor(cli): collapse runtime bridge exports |
| 25 | #2826 | #2819 | refactor(cli): introduce sandbox runtime action
facade |
| 26 | #2827 | #2826 | refactor(cli): introduce policy and channels
action facade |
| 27 | #2828 | #2827 | refactor(cli): introduce global command action
facade |
| 28 | #2830 | #2828 | refactor(cli): extract root help action |
| 29 | #2831 | #2830 | refactor(cli): extract deploy action |
| 30 | #2832 | #2831 | refactor(cli): extract onboard actions |
| 31 | #2835 | #2832 | refactor(cli): extract openshell runtime helpers
|
| 32 | #2836 | #2835 | refactor(cli): extract sandbox logs action |
| 33 | #2837 | #2836 | refactor(cli): extract maintenance actions |
| 34 | #2838 | #2837 | refactor(cli): extract snapshot actions |
| 35 | #2839 | #2838 | refactor(cli): extract policy and channels
actions |
| 36 | **#2840** | #2839 | **refactor(cli): extract credentials and list
runtime bits** |
| 37 | #2841 | #2840 | refactor(cli): shrink runtime bridge |
<!-- STACK-CONTEXT:END -->


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Improved automatic detection and recovery of a selected OpenShell
gateway, including setting the active gateway when recovery succeeds.
* Registry repopulation from session and live gateway state to restore
missing sandbox entries.

* **Refactor**
* Moved gateway lifecycle and registry recovery logic into dedicated
modules for clearer behavior and easier maintenance.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Signed-off-by: Carlos Villela <cvillela@nvidia.com>
cv added a commit that referenced this pull request May 2, 2026
## Summary
Shrinks the temporary NemoClaw runtime bridge to only the remaining
command actions that still live in `src/nemoclaw.ts`. Credentials
provider operations now call the extracted OpenShell runtime directly.

## Changes
- Remove `runOpenshell` from `NemoClawRuntimeBridge`.
- Update `src/lib/global-cli-actions.ts` to call `runOpenshell()`
directly for provider operations.
- Remove `runOpenshell` from the `runtimeBridge` object exported by
`src/nemoclaw.ts`.
- Keep public CLI behavior unchanged.

## Type of Change
- [x] Code change (feature, bug fix, or refactor)
- [ ] Code change with doc updates
- [ ] Doc only (prose changes, no code sample modifications)
- [ ] Doc only (includes code sample changes)

## Verification
- [x] `npx prek run --all-files` passes
- [x] `npm test` passes
- [x] Tests added or updated for new or changed behavior
- [x] No secrets, API keys, or credentials committed
- [ ] Docs updated for user-facing behavior changes
- [ ] `make docs` builds without warnings (doc changes only)
- [ ] Doc pages follow the [style
guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md)
(doc changes only)
- [ ] New doc pages include SPDX header and frontmatter (new pages only)

## AI Disclosure
- [x] AI-assisted — tool: OpenAI Codex

---
Signed-off-by: Carlos Villela <cvillela@nvidia.com>

<!-- STACK-CONTEXT:START -->
## Stack position

> [!NOTE]
> This PR is part of a stacked refactor. Please review/merge in stack
order.
> The current PR is highlighted below.

This is PR **#2841** in the stacked CLI oclif refactor series.

- Merge after: **#2840**
- Next PR: **None — this is the last PR in the stack.**
- Stack position: **37 / 37**

## Full stack

Merge from top to bottom.

| Order | PR | Merge after | Title |
|---:|---|---|---|
| 1 | #2775 | `main` | refactor(cli): migrate status and tunnel commands
to oclif |
| 2 | #2776 | #2775 | refactor(cli): migrate debug uninstall and
gateway-token to oclif |
| 3 | #2786 | #2776 | refactor(cli): migrate credentials commands to
oclif |
| 4 | #2787 | #2786 | refactor(cli): migrate sandbox inspection commands
to oclif |
| 5 | #2788 | #2787 | refactor(cli): migrate maintenance commands to
oclif |
| 6 | #2796 | #2788 | refactor(cli): migrate sandbox logs command to
oclif |
| 7 | #2797 | #2796 | refactor(cli): migrate skill install command to
oclif |
| 8 | #2798 | #2797 | refactor(cli): migrate snapshot list and create to
oclif |
| 9 | #2802 | #2798 | refactor(cli): migrate shields commands to oclif |
| 10 | #2803 | #2802 | refactor(cli): migrate channels mutation commands
to oclif |
| 11 | #2804 | #2803 | refactor(cli): migrate policy mutation commands
to oclif |
| 12 | #2805 | #2804 | refactor(cli): migrate snapshot restore command
to oclif |
| 13 | #2806 | #2805 | refactor(cli): migrate destroy command to oclif |
| 14 | #2807 | #2806 | refactor(cli): migrate rebuild command to oclif |
| 15 | #2808 | #2807 | refactor(cli): migrate connect command to oclif |
| 16 | #2809 | #2808 | refactor(cli): migrate deploy command to oclif |
| 17 | #2810 | #2809 | refactor(cli): migrate onboard aliases to oclif |
| 18 | #2811 | #2810 | refactor(cli): migrate help and version commands
to oclif |
| 19 | #2814 | #2811 | refactor(cli): centralize legacy oclif dispatch |
| 20 | #2815 | #2814 | refactor(cli): drop trivial oclif wrapper helpers
|
| 21 | #2816 | #2815 | refactor(cli): centralize sandbox runtime bridge
|
| 22 | #2817 | #2816 | refactor(cli): centralize policy and channels
runtime bridge |
| 23 | #2818 | #2817 | refactor(cli): centralize global runtime bridge |
| 24 | #2819 | #2818 | refactor(cli): collapse runtime bridge exports |
| 25 | #2826 | #2819 | refactor(cli): introduce sandbox runtime action
facade |
| 26 | #2827 | #2826 | refactor(cli): introduce policy and channels
action facade |
| 27 | #2828 | #2827 | refactor(cli): introduce global command action
facade |
| 28 | #2830 | #2828 | refactor(cli): extract root help action |
| 29 | #2831 | #2830 | refactor(cli): extract deploy action |
| 30 | #2832 | #2831 | refactor(cli): extract onboard actions |
| 31 | #2835 | #2832 | refactor(cli): extract openshell runtime helpers
|
| 32 | #2836 | #2835 | refactor(cli): extract sandbox logs action |
| 33 | #2837 | #2836 | refactor(cli): extract maintenance actions |
| 34 | #2838 | #2837 | refactor(cli): extract snapshot actions |
| 35 | #2839 | #2838 | refactor(cli): extract policy and channels
actions |
| 36 | #2840 | #2839 | refactor(cli): extract credentials and list
runtime bits |
| 37 | **#2841** | #2840 | **refactor(cli): shrink runtime bridge** |
<!-- STACK-CONTEXT:END -->


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Breaking Changes**
* Removed `runOpenshell` method from the runtime bridge API. External
consumers can no longer invoke this operation through the bridge
interface.

* **Refactor**
* Refactored shell command execution to implement fallback logic,
preferring local implementations when runtime bridge support is
unavailable.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Signed-off-by: Carlos Villela <cvillela@nvidia.com>
@cv
cv deleted the refactor/oclif-extract-openshell-runtime branch May 27, 2026 21:18
@wscurran wscurran added area: cli Command line interface, flags, terminal UX, or output and removed NemoClaw CLI labels Jun 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: cli Command line interface, flags, terminal UX, or output refactor PR restructures code without intended behavior change

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants