Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
56 commits
Select commit Hold shift + click to select a range
9ee6cfa
refactor(cli): add onboard FSM transition types
cv May 20, 2026
450716b
Merge remote-tracking branch 'origin/main' into refactor/3802-1/types
cv May 20, 2026
b9e4545
refactor(cli): emit onboard session machine events
cv May 20, 2026
651e2a0
refactor(cli): persist onboard machine snapshots
cv May 20, 2026
f756907
refactor(cli): add onboard runtime shell
cv May 20, 2026
702454b
refactor(cli): route onboard step boundaries through runtime
cv May 20, 2026
60acb65
refactor(cli): add observe-only onboard hooks
cv May 20, 2026
c2a58e6
refactor(cli): extract onboard preflight handler
cv May 20, 2026
f17000a
refactor(cli): extract onboard gateway handler
cv May 20, 2026
3038da4
refactor(cli): extract provider inference handlers
cv May 20, 2026
18ef7e7
refactor(cli): extract onboard sandbox handler
cv May 20, 2026
7fe9e1c
refactor(cli): extract onboard agent setup handler
cv May 20, 2026
b9daca0
refactor(cli): extract onboard policies handler
cv May 20, 2026
d658552
refactor(cli): extract onboard finalization handler
cv May 20, 2026
4385d20
refactor(cli): route agent setup session writes through context
cv May 20, 2026
98ac89e
refactor(cli): emit resume skip repair events
cv May 20, 2026
c025e4a
refactor(cli): route final machine transitions
cv May 20, 2026
c90747b
refactor(cli): extract onboard shell helpers
cv May 20, 2026
ce1a645
refactor(cli): extract sandbox agent helpers
cv May 20, 2026
7a07d8c
refactor(cli): extract messaging config helpers
cv May 20, 2026
9d92891
refactor(cli): extract resume conflict helpers
cv May 20, 2026
df8a52e
refactor(cli): extract openshell version helpers
cv May 20, 2026
fcb3e36
refactor(cli): extract known hosts pruning
cv May 20, 2026
cdd19fd
refactor(cli): extract gateway reuse helpers
cv May 20, 2026
9ba83f7
Potential fix for pull request finding 'CodeQL / Unused variable, imp…
cv May 20, 2026
0201b4d
Apply suggestions from code review
cv May 20, 2026
8d74472
refactor(cli): extract sandbox reuse helpers
cv May 20, 2026
c47e5b8
refactor(cli): extract messaging credential helpers
cv May 20, 2026
6668902
refactor(cli): extract sandbox registry metadata helpers
cv May 20, 2026
a485eec
refactor(cli): extract openclaw setup helper
cv May 20, 2026
46039e1
refactor(cli): extract sandbox name prompt
cv May 20, 2026
3f6e041
refactor(cli): move telegram mention helper
cv May 20, 2026
534f0d8
refactor(cli): extract onboard base image helpers
cv May 20, 2026
cd29f01
refactor(cli): extract prompt helpers
cv May 20, 2026
3fe2205
refactor(cli): extract sandbox gpu preflight helpers
cv May 20, 2026
5545222
refactor(cli): extract remediation helpers
cv May 20, 2026
b0734c5
refactor(cli): extract provider recovery helpers
cv May 20, 2026
5afd680
refactor(cli): move Hermes tool gateway normalization
cv May 20, 2026
ae593a8
refactor(cli): move affirmative prompt helper
cv May 20, 2026
3b270a0
refactor(cli): extract sandbox lifecycle helpers
cv May 20, 2026
e5503b4
refactor(cli): extract openshell CLI helpers
cv May 20, 2026
bceab13
refactor(cli): move prompt navigation helpers
cv May 21, 2026
973ff5b
refactor(cli): extract Hermes auth method helpers
cv May 21, 2026
48e8053
refactor(cli): extract Hermes auth flow helpers
cv May 21, 2026
b217981
refactor(cli): extract onboard agent selection
cv May 21, 2026
9e442d1
refactor(cli): extract require value helper
cv May 21, 2026
58f38f7
refactor(cli): move onboard step banner helper
cv May 21, 2026
7b2d0de
refactor(cli): extract validation recovery prompts
cv May 21, 2026
eef5254
refactor(cli): remove duplicate onboard sleep helper
cv May 21, 2026
5bfa612
refactor(cli): extract web search flow helpers
cv May 22, 2026
826d82a
refactor(cli): extract inference selection validation
cv May 22, 2026
a7fe203
refactor(cli): move direct sandbox gpu verifier
cv May 22, 2026
d5c8549
Merge remote-tracking branch 'origin/main' into refactor/3802-15-mode…
ericksoa May 23, 2026
ab9a8d1
fix(ci): address code scanning alerts in onboard refactor
ericksoa May 23, 2026
bc85d63
fix(ci): place codeql suppressions on alert lines
ericksoa May 23, 2026
80cb164
fix(onboard): preserve Brave credential prompt navigation
ericksoa May 23, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions src/lib/core/require-value.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
// SPDX-License-Identifier: Apache-2.0

export function requireValue<T>(value: T | null | undefined, message: string): T {
if (value === null || value === undefined) {
throw new Error(message);
}
return value;
}
3,200 changes: 529 additions & 2,671 deletions src/lib/onboard.ts

Large diffs are not rendered by default.

33 changes: 33 additions & 0 deletions src/lib/onboard/agent-selection.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
// SPDX-License-Identifier: Apache-2.0

import type { AgentDefinition } from "../agent/defs";

export interface SelectOnboardAgentDeps {
resolveAgent(options: {
agentFlag?: string | null;
session?: { agent?: string | null } | null;
}): AgentDefinition | null;
loadAgent(name: string): AgentDefinition;
isNonInteractive(): boolean;
note(message: string): void;
}

export function createSelectOnboardAgent(deps: SelectOnboardAgentDeps) {
return async function selectOnboardAgent({
agentFlag = null,
session = null,
}: {
agentFlag?: string | null;
session?: { agent?: string | null } | null;
resume?: boolean;
canPrompt?: boolean;
} = {}): Promise<AgentDefinition | null> {
const agent = deps.resolveAgent({ agentFlag, session });
if (deps.isNonInteractive()) {
const displayName = agent?.displayName || deps.loadAgent("openclaw").displayName;
deps.note(` [non-interactive] Agent: ${displayName}`);
}
return agent;
};
}
37 changes: 37 additions & 0 deletions src/lib/onboard/base-image.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
// SPDX-License-Identifier: Apache-2.0

import { ROOT } from "../runner";
import {
buildLocalBaseTag,
defaultOpenclawBaseDockerfile,
resolveSandboxBaseImage,
OPENCLAW_SANDBOX_BASE_IMAGE as SANDBOX_BASE_IMAGE,
} from "../sandbox-base-image";
import { getInstalledOpenshellVersion } from "./openshell-version";

/**
* Resolve a compatible sandbox-base image and pin it to a repo digest when
* possible. PR-branch validation first tries a source-SHA tag, then latest,
* and finally a local Dockerfile.base build when the OpenShell Docker driver
* requires a newer glibc than the published image provides.
*/
export function pullAndResolveBaseImageDigest(
options: { requireOpenshellSandboxAbi?: boolean } = {},
): { digest: string | null; ref: string; source?: string; glibcVersion?: string | null } | null {
return resolveSandboxBaseImage({
imageName: SANDBOX_BASE_IMAGE,
dockerfilePath: defaultOpenclawBaseDockerfile(ROOT),
localTag: buildLocalBaseTag("nemoclaw-sandbox-base-local", ROOT),
envVar: "NEMOCLAW_SANDBOX_BASE_IMAGE_REF",
label: "OpenClaw sandbox base image",
requireOpenshellSandboxAbi: options.requireOpenshellSandboxAbi === true,
rootDir: ROOT,
});
}

export function getStableGatewayImageRef(versionOutput: string | null = null): string | null {
const version = getInstalledOpenshellVersion(versionOutput);
if (!version) return null;
return `ghcr.io/nvidia/openshell/cluster:${version}`;
}
Loading
Loading