diff --git a/src/lib/onboard.ts b/src/lib/onboard.ts index 5edbca63c0a..a906be0c07b 100644 --- a/src/lib/onboard.ts +++ b/src/lib/onboard.ts @@ -7895,7 +7895,7 @@ async function setupMessagingChannels(): Promise { output.write(` [${i + 1}] ${marker} ${ch.name} — ${ch.description}${status}\n`); }); output.write("\n"); - output.write(` Press 1-${MESSAGING_CHANNELS.length} to toggle, Enter when done: `); + output.write(` Press 1-${MESSAGING_CHANNELS.length} to toggle, Enter when done (none selected skips): `); }; showList(); diff --git a/test/onboard.test.ts b/test/onboard.test.ts index 36759f976bb..3ac23bf525f 100644 --- a/test/onboard.test.ts +++ b/test/onboard.test.ts @@ -1353,6 +1353,18 @@ const { setupInference } = require(${onboardPath}); assert.ok(cleanupPos < createPos, "fresh cleanup should run before createSandbox allocates a port"); }); + it("tells users that selecting no messaging channels skips the step", () => { + const source = fs.readFileSync( + path.join(import.meta.dirname, "..", "src", "lib", "onboard.ts"), + "utf-8", + ); + + assert.match( + source, + /Press 1-\$\{MESSAGING_CHANNELS\.length\} to toggle, Enter when done \(none selected skips\):/, + ); + }); + it("migrates a legacy credentials.json into env so setupInference can register the provider", () => { const repoRoot = path.join(import.meta.dirname, ".."); const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "nemoclaw-onboard-resume-cred-"));