refactor(cli): migrate skill install command to oclif - #2797
Conversation
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>
|
Auto-sync is disabled for draft pull requests in this repository. Workflows must be run manually. Contributors can view more details about this message here. |
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Enterprise Run ID: 📒 Files selected for processing (1)
📝 WalkthroughWalkthroughAdds several oclif CLI commands for sandbox operations (logs, skill install, gateway token, inspection, maintenance), registers them in the command registry, refactors nemoclaw routing to delegate to oclif where appropriate, exposes sandbox helper exports, and annotates thin oclif adapters with V8 coverage-ignore comments. Tests and CI workflow adjustments included. ChangesCLI commands, registry, and routing
Sequence Diagram(s)sequenceDiagram
autonumber
Client->>CLI (oclif): user invokes public sandbox command
CLI (oclif)->>Runtime Bridge Factory: getRuntimeBridge()
Runtime Bridge Factory->>nemoclaw module: require("../nemoclaw")
CLI (oclif)->>nemoclaw module: invoke exported helper (e.g., sandboxLogs / sandboxSkillInstall) or runOclif delegation
nemoclaw module->>External Systems: perform sandbox operation (gateway, logs, install, status)
External Systems-->>nemoclaw module: results/stream
nemoclaw module-->>CLI (oclif): return / stream output
CLI (oclif)-->>Client: stdout / exit code
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Review rate limit: 9/10 reviews remaining, refill in 6 minutes. Comment |
## Summary Migrates policy add/remove to oclif while preserving the existing policy mutation implementation. This keeps interactive selection, custom preset file/directory handling, dry-run, yes/force flags, and non-interactive behavior intact. ## Changes - Add `src/lib/policy-mutate-cli-commands.ts` for `sandbox:policy-add` and `sandbox:policy-remove`.\n- Route `<name> policy-add` and `<name> policy-remove` through `runOclif()`.\n- Preserve missing `--from-file`/`--from-dir` value diagnostics and existing policy test harness behavior.\n- Export the CLI main promise through bin shims so subprocess harnesses can wait for async oclif dispatch.\n- Add unit and CLI coverage for policy mutation wrappers. ## 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 **#2804** in the stacked CLI oclif refactor series. - Merge after: **#2803** - Next PR: **#2805** - Stack position: **11 / 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 new CLI commands for sandbox policy management, enabling users to add and remove policies directly through the command line interface alongside the existing list functionality. * **Tests** * Improved test coverage for policy-related CLI functionality, including validation of help output and dry-run behavior for policy mutation commands. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Carlos Villela <cvillela@nvidia.com>
## Summary Migrates `snapshot restore` to oclif, completing the snapshot family after list/create. The restore implementation remains unchanged behind the wrapper so existing auto-create and policy reconcile behavior are preserved. ## Changes - Add `sandbox:snapshot:restore` to `src/lib/snapshot-cli-commands.ts`.\n- Route `<name> snapshot restore [selector] [--to <dst>]` through `runOclif()`.\n- Preserve public help output and legacy fallback paths for generic snapshot help.\n- Add unit coverage for restore argument mapping. ## 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 **#2805** in the stacked CLI oclif refactor series. - Merge after: **#2804** - Next PR: **#2806** - Stack position: **12 / 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 snapshot restore capability to recover sandbox workspaces from saved snapshots * Option to restore snapshots into a different sandbox using the `--to` flag * **Tests** * Added test coverage for snapshot restore functionality <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Carlos Villela <cvillela@nvidia.com>
## Summary Migrates the destructive `destroy` sandbox command to oclif while preserving the existing destroy implementation. Confirmation prompts, active-session warnings, NIM cleanup, sandbox deletion, registry cleanup, and gateway cleanup stay unchanged. ## Changes - Add `src/lib/destroy-cli-command.ts` for `sandbox:destroy`.\n- Route `<name> destroy [--yes|--force]` through `runOclif()`.\n- Preserve public help output for the sandbox-scoped command.\n- Reuse the existing `sandboxDestroy()` implementation behind the wrapper. ## 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 **#2806** in the stacked CLI oclif refactor series. - Merge after: **#2805** - Next PR: **#2807** - Stack position: **13 / 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 a new sandbox destroy command that allows users to delete sandboxes. The command includes a `--yes` flag to automatically confirm deletion without prompting and a `--force` flag to override safety restrictions. * **Tests** * Added CLI command test coverage for the destroy functionality to ensure proper help output and usage information display. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Carlos Villela <cvillela@nvidia.com>
## Summary Migrates the sandbox `rebuild` command to oclif while preserving the existing backup/delete/recreate/restore flow. This keeps confirmation prompts, verbose diagnostics, credential preflight, and upgrade integration unchanged. ## Changes - Add `src/lib/rebuild-cli-command.ts` for `sandbox:rebuild`.\n- Route `<name> rebuild [--yes|--force] [--verbose|-v]` through `runOclif()`.\n- Preserve public help output and existing rebuild 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 **#2807** in the stacked CLI oclif refactor series. - Merge after: **#2806** - Next PR: **#2808** - Stack position: **14 / 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 a new sandbox rebuild command to upgrade sandboxes to the current agent version. Requires a sandbox name and supports --yes, --force, and --verbose/-v flags. CLI help now shows the public sandbox rebuild usage. * **Tests** * Added regression tests for rebuild help output and new child-process lifecycle helpers to normalize and assert expected CLI runtime behavior. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Carlos Villela <cvillela@nvidia.com>
## Summary Migrates the sandbox `connect` command to oclif, including the default `<name>` action path. The existing runtime recovery and connection implementation remains behind the oclif wrapper. ## Changes - Add `src/lib/connect-cli-command.ts` for `sandbox:connect`.\n- Route `<name> connect` and the default sandbox action through `runOclif()`.\n- Preserve public help output and the removed `--dangerously-skip-permissions` diagnostic path. ## 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 **#2808** in the stacked CLI oclif refactor series. - Merge after: **#2807** - Next PR: **#2809** - Stack position: **15 / 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 `sandbox:connect` command to connect to running sandboxes with an optional `--probe-only` flag for probe-only connections. * **Tests** * Added help text assertions to verify connect command documentation displays correctly. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Carlos Villela <cvillela@nvidia.com>
## 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>
## 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>
## 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>
## 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>
## 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>
## 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>
## 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>
## 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>
## 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>
## 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>
## 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>
## 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>
## 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>
## 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>
## 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>
## 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 - [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 **#2835** in the stacked CLI oclif refactor series. - Merge after: **#2832** - Next PR: **#2836** - Stack position: **31 / 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 code organization and maintainability by consolidating runtime execution logic into a dedicated module. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Carlos Villela <cvillela@nvidia.com>
## 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>
## 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>
## 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>
## 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>
## 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>
## 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>
Summary
Migrates
nemoclaw <name> skill install <path>to oclif while retaining the existing skill validation and upload implementation. The legacy dispatcher continues to preserve public help and plugin-hint behavior.This continues the stacked CLI migration after #2796. Next: #2798.
Changes
src/lib/skill-install-cli-command.tsfor the internalsandbox:skill:installoclif command.<name> skill install ...throughrunOclif()while leaving top-level skill help and unknown subcommand handling compatible.sandboxSkillInstall()implementation so SKILL.md validation, plugin-shaped directory hints, SSH upload, and post-install refresh behavior remain unchanged.Type of Change
Verification
npx prek run --all-filespassesnpm testpassesmake docsbuilds without warnings (doc changes only)AI Disclosure
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 #2797 in the stacked CLI oclif refactor series.
Full stack
Merge from top to bottom.
mainSummary by CodeRabbit
New Features
Bug Fixes