fix(ollama): warm unloaded model after daemon restart#6482
Conversation
Signed-off-by: Ho Lim <subhoya@gmail.com> Signed-off-by: cjagwani <cjagwani@nvidia.com>
Code Coverage OverviewLanguages: TypeScript TypeScript / code-coverage/pluginThe overall coverage remains at 96%, unchanged from the branch. TypeScript / code-coverage/cliThe overall coverage in the branch remains at 76%, unchanged from the branch. Show a code coverage summary of the most impacted files.
Updated |
|
🌿 Preview your docs: https://nvidia-preview-pr-6482.docs.buildwithfern.com/nemoclaw |
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
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)
🚧 Files skipped from review as they are similar to previous changes (1)
📝 WalkthroughWalkthroughAdds Ollama restart recovery for OpenClaw passthroughs, including host resolution, bounded warm-up, dispatch wiring, tests, an e2e restart scenario, and docs updates. ChangesOllama Restart Recovery
Estimated code review effort: 4 (Complex) | ~60 minutes Suggested labels: Suggested reviewers: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
PR Review Advisor (Nemotron Ultra) — Changes requestedMerge posture: Do not merge yet Action checklist
Findings index
Review findings by urgency: 0 required fixes, 3 items to resolve/justify, 3 in-scope improvements
|
E2E Advisor RecommendationRequired E2E: Dispatch hint: Full advisor summaryE2E Recommendation AdvisorBase: Required E2E
Optional E2E
New E2E recommendations
Dispatch hint
|
E2E Target RecommendationRequired E2E targets: Dispatch required E2E targets:
Full E2E target advisor summaryE2E Target AdvisorBase: Required E2E targets
Optional E2E targets
Relevant changed files
|
PR Review Advisor — No blocking findingsMerge posture: No blocking advisor findings Action checklist
Test follow-ups to resolve or justifyIf these cover changed behavior, prefer adding them in this PR; otherwise state why existing coverage is enough or link the follow-up.
This is an automated, non-binding review; it still expects maintainers and agents to respond to each required or warning item. Treat suggestions as current-PR improvements when they touch changed code; defer only with maintainer rationale or a linked follow-up. A human maintainer must make the final merge decision. |
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (3)
docs/inference/use-local-inference.mdx (1)
95-96: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winWording implies only the "first" passthrough checks readiness, but the check runs on every dispatch.
Per the implementation in
passthrough.ts, the readiness check runs on every OpenClaw passthrough command to an Ollama-backed sandbox, not only the first one after a restart (it just no-ops quickly once the model is already loaded). Saying "the first agent passthrough checks" could lead users to expect the check/message to disappear after one command, when it actually recurs on every invocation.✏️ Suggested wording
-After an Ollama daemon restart, the first agent passthrough checks the registered route to see whether the selected model is still loaded. +Every agent passthrough checks the registered route to see whether the selected model is still loaded. If the daemon is reachable but the model is unloaded, NemoClaw sends a bounded warm-up request before dispatching to OpenClaw.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/inference/use-local-inference.mdx` around lines 95 - 96, The wording in the local inference docs is too specific about “the first” passthrough, while the readiness check in passthrough.ts runs on every OpenClaw passthrough invocation to an Ollama-backed sandbox. Update the surrounding text to describe the check as happening on each dispatch, with the model-load warm-up only occurring when needed after restart or unload, so readers don’t expect the behavior to stop after one request.src/lib/actions/sandbox/agent/passthrough.test.ts (1)
125-211: 🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick winMissing coverage for the unexpected-exception catch branch.
runAgentPassthroughwrapsrecoverOllama(route)/reportOllamaRestartRecoveryin a try/catch that emits "Ollama restart recovery failed unexpectedly; continuing to OpenClaw dispatch." (passthrough.ts Lines 510-516). None of the three new tests exercise amaybeWarmOllamaAfterDaemonRestartthat throws. Since this catch is the safeguard that preserves OpenClaw's canonical error behavior when recovery itself breaks (a core PR objective), it's worth covering directly.✅ Suggested additional test
it("continues to OpenClaw dispatch when Ollama recovery throws unexpectedly", async () => { const maybeWarmOllamaAfterDaemonRestart = vi.fn(() => { throw new Error("boom"); }); getSandboxMock.mockReturnValueOnce({ agent: "openclaw", provider: "ollama-local", model: "qwen3.6:35b", endpointUrl: "http://host.openshell.internal:11434/v1", }); const { writes, proc } = makeProcMock(); await runAgentPassthrough( "alpha", { extraArgs: ["--agent", "work", "-m", "ping"] }, { maybeWarmOllamaAfterDaemonRestart, process: proc }, ); expect(writes.join("")).toContain("Ollama restart recovery failed unexpectedly"); expect(execMock).toHaveBeenCalledOnce(); });🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/lib/actions/sandbox/agent/passthrough.test.ts` around lines 125 - 211, Add a test in passthrough.test.ts that makes maybeWarmOllamaAfterDaemonRestart throw for an ollama-local route and verifies runAgentPassthrough still continues to OpenClaw dispatch. Use the existing runAgentPassthrough, getSandboxMock, makeProcMock, and execMock setup, and assert the stderr writes contain the unexpected-recovery failure message while execMock is still called once. This directly covers the try/catch branch around recoverOllama/reportOllamaRestartRecovery.src/lib/actions/sandbox/agent/passthrough.ts (1)
505-517: 🚀 Performance & Scalability | 🔵 TrivialEvery OpenClaw passthrough dispatch now performs an Ollama readiness probe, not just the first one after a restart.
The recovery check runs unconditionally on every
isOpenClawPassthroughCommanddispatch to an Ollama-backed sandbox (there's no state tracking of "was there a restart"), so each command incurs an extra probe round-trip and always writes at least two stderr lines ("Checking Ollama model readiness..." plus a skip/success message), even in steady state with no restart involved. This is likely an intentional trade-off given there's no reliable restart signal, but it's worth confirming the added per-command latency and stderr noise are acceptable, and considering caching a "known loaded" flag or suppressing the routine "already-loaded" message to reduce noise on the common path.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/lib/actions/sandbox/agent/passthrough.ts` around lines 505 - 517, The passthrough recovery path in getOllamaRestartRecoveryRoute/reportOllamaRestartRecovery is being run on every isOpenClawPassthroughCommand dispatch, which adds unnecessary probe latency and stderr noise in the common steady-state case. Update the logic in passthrough.ts so the Ollama readiness check only runs when a restart/recovery is actually needed, or gate the success/skip logging behind a cached “already loaded” state; keep the fallback behavior to OpenClaw dispatch intact if the recovery probe fails.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src/lib/actions/sandbox/agent/passthrough.ts`:
- Around line 188-197: The Ollama provider check in
getOllamaRestartRecoveryRoute is duplicating the provider identifier instead of
using the shared source of truth. Export OLLAMA_PROVIDER from
ollama-restart-recovery.ts and import it into passthrough.ts, then replace the
hardcoded "ollama-local" comparison in getOllamaRestartRecoveryRoute with that
constant so the route-building logic stays aligned with
maybeWarmOllamaAfterDaemonRestart.
---
Nitpick comments:
In `@docs/inference/use-local-inference.mdx`:
- Around line 95-96: The wording in the local inference docs is too specific
about “the first” passthrough, while the readiness check in passthrough.ts runs
on every OpenClaw passthrough invocation to an Ollama-backed sandbox. Update the
surrounding text to describe the check as happening on each dispatch, with the
model-load warm-up only occurring when needed after restart or unload, so
readers don’t expect the behavior to stop after one request.
In `@src/lib/actions/sandbox/agent/passthrough.test.ts`:
- Around line 125-211: Add a test in passthrough.test.ts that makes
maybeWarmOllamaAfterDaemonRestart throw for an ollama-local route and verifies
runAgentPassthrough still continues to OpenClaw dispatch. Use the existing
runAgentPassthrough, getSandboxMock, makeProcMock, and execMock setup, and
assert the stderr writes contain the unexpected-recovery failure message while
execMock is still called once. This directly covers the try/catch branch around
recoverOllama/reportOllamaRestartRecovery.
In `@src/lib/actions/sandbox/agent/passthrough.ts`:
- Around line 505-517: The passthrough recovery path in
getOllamaRestartRecoveryRoute/reportOllamaRestartRecovery is being run on every
isOpenClawPassthroughCommand dispatch, which adds unnecessary probe latency and
stderr noise in the common steady-state case. Update the logic in passthrough.ts
so the Ollama readiness check only runs when a restart/recovery is actually
needed, or gate the success/skip logging behind a cached “already loaded” state;
keep the fallback behavior to OpenClaw dispatch intact if the recovery probe
fails.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: fe28430c-c68d-46fe-bb5b-8415a0229cdf
📒 Files selected for processing (6)
docs/inference/use-local-inference.mdxdocs/reference/troubleshooting.mdxsrc/lib/actions/sandbox/agent/ollama-restart-recovery.test.tssrc/lib/actions/sandbox/agent/ollama-restart-recovery.tssrc/lib/actions/sandbox/agent/passthrough.test.tssrc/lib/actions/sandbox/agent/passthrough.ts
Keep passthrough dispatch focused while preserving route ordering, reporting, and graceful fallback in a dedicated module. Signed-off-by: cjagwani <cjagwani@nvidia.com>
|
Addressed the advisor findings in exact head
Validation: 65 focused tests, build/typecheck, Biome, repository checks, and test-size guard all pass. Real daemon restart validation remains a release/runtime follow-up because it requires a host Ollama + OpenShell sandbox boundary; the exact route translation and dispatch ordering are covered here without adding a new broad E2E framework. |
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (1)
src/lib/actions/sandbox/agent/passthrough-ollama-recovery.test.ts (1)
16-109: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick winNo test coverage for
"missing-model"or"not-ollama"skip reasons.The suite covers
already-loadedandunreachableskip reasons plus allwarmedoutcomes, but never exercises{ kind: "skipped", reason: "missing-model" }or"not-ollama". The latter is also the case with no handling branch inreportRecovery(see companion comment inpassthrough-ollama-recovery.ts); a test would have caught that gap.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/lib/actions/sandbox/agent/passthrough-ollama-recovery.test.ts` around lines 16 - 109, Add test coverage in runOllamaRestartRecovery for the skipped recovery paths that are currently untested: exercise recoverOllama returning { kind: "skipped", reason: "missing-model" } and { kind: "skipped", reason: "not-ollama" }. Use the existing makeProcMock, runOllamaRestartRecovery, and writes assertions to verify the expected log/output behavior for each case, so the suite covers all skip reasons handled by reportRecovery.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src/lib/actions/sandbox/agent/passthrough-ollama-recovery.test.ts`:
- Around line 111-134: The `makePassthroughDeps` helper’s `getSandbox` mock has
the wrong signature and return shape, causing the type assertion to fail. Update
the `getSandbox` stub to accept the sandbox-name argument (use an unused
`_sandboxName` parameter) and return a `SandboxEntry`-compatible object that
includes the required `name` field along with the existing route data. Keep the
fix localized to `makePassthroughDeps` in `passthrough-ollama-recovery.test.ts`,
and only use an `unknown` cast if you intentionally want to bypass the type
check.
In `@src/lib/actions/sandbox/agent/passthrough-ollama-recovery.ts`:
- Around line 34-62: The reportRecovery function is missing handling for the
"not-ollama" skipped result, so a valid OllamaRestartRecoveryResult can be
ignored without any stderr output. Update the OllamaRestartRecoveryResult branch
in reportRecovery to explicitly cover all skipped reasons, including
"not-ollama", and prefer an exhaustive switch over the current else-if chain so
TypeScript can catch future missing cases in this logic.
---
Nitpick comments:
In `@src/lib/actions/sandbox/agent/passthrough-ollama-recovery.test.ts`:
- Around line 16-109: Add test coverage in runOllamaRestartRecovery for the
skipped recovery paths that are currently untested: exercise recoverOllama
returning { kind: "skipped", reason: "missing-model" } and { kind: "skipped",
reason: "not-ollama" }. Use the existing makeProcMock, runOllamaRestartRecovery,
and writes assertions to verify the expected log/output behavior for each case,
so the suite covers all skip reasons handled by reportRecovery.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: 65eb40b5-59ca-44ad-8cba-e8a154a4d4b8
📒 Files selected for processing (5)
src/lib/actions/sandbox/agent/ollama-restart-recovery.tssrc/lib/actions/sandbox/agent/passthrough-ollama-recovery.test.tssrc/lib/actions/sandbox/agent/passthrough-ollama-recovery.tssrc/lib/actions/sandbox/agent/passthrough.test.tssrc/lib/actions/sandbox/agent/passthrough.ts
💤 Files with no reviewable changes (1)
- src/lib/actions/sandbox/agent/passthrough.test.ts
🚧 Files skipped from review as they are similar to previous changes (1)
- src/lib/actions/sandbox/agent/ollama-restart-recovery.ts
Signed-off-by: cjagwani <cjagwani@nvidia.com>
|
CI follow-up at exact signed head The other failed CLI shard was unrelated: |
|
Thanks for consolidating the work into this PR! I'm happy to see the improvements you've made. @cjagwani |
Signed-off-by: cjagwani <cjagwani@nvidia.com>
|
Advisor follow-up at exact signed head
Verification: 66 focused tests, Biome, |
cv
left a comment
There was a problem hiding this comment.
Contributor-compliance blocker at exact head b23e769b: the PR body does not contain the contributor's valid Signed-off-by: declaration. Please add the declaration matching the contributor identity. The current head also retains an unresolved major CodeRabbit finding in src/lib/actions/sandbox/agent/passthrough.ts (use the shared Ollama route constant rather than a duplicated "ollama-local" literal), and the canonical advisor remains merge_after_fixes; resolve that thread and provide the requested exact-head Ollama runtime evidence before re-review.
Signed-off-by: cjagwani <cjagwani@nvidia.com>
Signed-off-by: cjagwani <cjagwani@nvidia.com>
E2E Target Results —
|
| Job | Result |
|---|---|
| gpu-e2e | |
| ollama-auth-proxy | ✅ success |
| sandbox-operations |
E2E Target Results — ❌ Some jobs failedRun: 28972554824
|
Signed-off-by: cjagwani <cjagwani@nvidia.com>
E2E Target Results — ❌ Some jobs failedRun: 28974072349
|
Signed-off-by: cjagwani <cjagwani@nvidia.com>
Signed-off-by: cjagwani <cjagwani@nvidia.com>
|
@coderabbitai review |
✅ Action performedReview finished.
|
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@test/e2e/live/gpu-e2e.test.ts`:
- Around line 287-290: The recovered Ollama readiness assertion is matching
against combined output text, so an echoed prompt can falsely satisfy the pong
check. Update the GPU E2E test around the recovered result assertions to parse
the JSON assistant reply first, using the same assistant-content path as the
earlier chatContent(chat.stdout) check, and then assert on the parsed response
instead of resultText(recovered).
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: de09b447-d7f3-45bc-979b-20cdfdfcbe1a
📒 Files selected for processing (6)
src/lib/actions/sandbox/agent/ollama-restart-recovery.test.tssrc/lib/actions/sandbox/agent/ollama-restart-recovery.tssrc/lib/actions/sandbox/agent/passthrough-ollama-recovery.test.tssrc/lib/actions/sandbox/agent/passthrough-ollama-recovery.tssrc/lib/actions/sandbox/agent/passthrough.tstest/e2e/live/gpu-e2e.test.ts
🚧 Files skipped from review as they are similar to previous changes (5)
- src/lib/actions/sandbox/agent/passthrough-ollama-recovery.ts
- src/lib/actions/sandbox/agent/ollama-restart-recovery.test.ts
- src/lib/actions/sandbox/agent/passthrough-ollama-recovery.test.ts
- src/lib/actions/sandbox/agent/passthrough.ts
- src/lib/actions/sandbox/agent/ollama-restart-recovery.ts
E2E Target Results — ✅ All requested jobs passedRun: 28975828212
|
E2E Target Results — ✅ All requested jobs passedRun: 28975973693
|
…-restart-recovery Signed-off-by: cjagwani <cjagwani@nvidia.com> # Conflicts: # docs/reference/troubleshooting.mdx
|
Maintainer follow-up at exact head The requested implementation and compliance changes are addressed:
This PR is not fully cleared yet:
Please treat this as blocked until the exact-head gates settle and the human change request is cleared. |
Parse assistant JSON so an echoed prompt cannot satisfy the recovery assertion. Align the docs with the per-dispatch readiness probe. Signed-off-by: Apurv Kumaria <akumaria@nvidia.com> Co-authored-by: cjagwani <cjagwani@nvidia.com> Co-authored-by: Ho Lim <subhoya@gmail.com>
E2E Target Results — ✅ All requested jobs passedRun: 28976373729
|
|
Maintainer salvage pushed in 4bf4193.
The per-dispatch probe is intentional: NemoClaw has no reliable host-side Ollama restart signal, and caching an already-loaded result would miss a later daemon restart. The /api/ps probe is bounded, and the warm request runs only when the registered model is unloaded. Contributor credit is retained for cjagwani and Ho Lim through Co-authored-by trailers; the maintainer commit is signed and signed off, and GitHub marks it Verified. Validation completed: 71 focused restart-recovery/passthrough tests; plugin and CLI builds; CLI type-check; pinned Fern docs build with 0 errors; Biome; test-title and test-size checks; staged diff checks; commit and pre-push hooks. The exact-head standard checks and required live GPU E2E are being monitored now. |
|
@coderabbitai review |
✅ Action performedReview finished.
|
|
Exact-head advisor disposition for 4bf4193:
Both exact-head advisors report merge_as_is with zero required fixes or warnings. The strengthened gpu-e2e run remains in progress. |
E2E Target Results — ❌ Some jobs failedRun: 28977269843
|
Use the shared OpenClaw envelope parser proven against the failed-run artifact. Signed-off-by: Apurv Kumaria <akumaria@nvidia.com> Co-authored-by: cjagwani <cjagwani@nvidia.com> Co-authored-by: Ho Lim <subhoya@gmail.com>
|
Live GPU follow-up: run 28977269843 proved runtime recovery succeeded (exit 0, model loaded, assistant payload PONG), but the strengthened assertion used the OpenAI chat-completions parser against NemoClaw's agent envelope and correctly failed with an empty extraction. Commit 4df8145 now uses the existing unit-tested OpenClaw agent-envelope parser for result.payloads text. The downloaded exact-run artifact parses to PONG with this helper. Local validation: 4 parser support tests, CLI type-check, Biome, test-size/title checks, diff checks, commit hooks, and pre-push hooks. Both contributor credit trailers are retained. I am rerunning the exact-head live gpu-e2e now. |
|
@coderabbitai review |
✅ Action performedReview finished.
|
E2E Target Results — ✅ All requested jobs passedRun: 28978030598
|
|
Exact-head final validation for
No merge was performed. |
<!-- markdownlint-disable MD041 --> ## Summary Prepares the user documentation for NemoClaw v0.0.78 by replacing the unreleased section with release highlights and synchronizing the affected inference, lifecycle, messaging, and CLI reference pages with merged behavior. ## Changes - Publish the v0.0.78 release-notes section with links to the most specific user guides for each shipped behavior. - Document authoritative Deep Agents route health, Nemotron Ultra profile behavior, and Hermes compatible-endpoint context metadata. - Document forced rebuild recovery after total backup failure and the ownership-safe tunnel/full-stop behavior. - Keep command examples and shared agent variants aligned with the current OpenClaw, Hermes, and Deep Agents interfaces. Source mapping: - [#3787](#3787) -> `docs/about/release-notes.mdx`: Record reliable workspace template seeding during sandbox startup. - [#4960](#4960) -> `docs/about/release-notes.mdx`: Record safer detection of rewritten OpenClaw gateway processes. - [#5676](#5676) -> `docs/about/release-notes.mdx`: Record warning-tolerant agent-list JSON handling. - [#5857](#5857) -> `docs/about/release-notes.mdx`: Record synchronization of explicit OpenClaw main-agent model state. - [#5929](#5929) -> `docs/about/release-notes.mdx`: Record copyable SSH port-forward guidance for remote dashboards. - [#6068](#6068) -> `docs/about/release-notes.mdx`: Record custom-image plugin provenance reconciliation. - [#6116](#6116) -> `docs/about/release-notes.mdx`: Record live-loopback dashboard-forward recovery. - [#6122](#6122) -> `docs/about/release-notes.mdx`: Announce validated, round-trippable policy YAML output. - [#6211](#6211) -> `docs/manage-sandboxes/lifecycle.mdx`, `docs/reference/commands.mdx`, `docs/about/release-notes.mdx`: Explain the explicit no-backup `rebuild --force` recovery boundary. - [#6283](#6283) -> `docs/about/release-notes.mdx`: Record Hermes WebUI port alignment. - [#6293](#6293) -> `docs/inference/switch-inference-providers.mdx`, `docs/about/release-notes.mdx`: Document compatible-endpoint context-length probing for Hermes. - [#6320](#6320) -> `docs/about/release-notes.mdx`: Record bounded gateway-recovery waits. - [#6377](#6377) -> `docs/reference/commands.mdx`, `docs/about/release-notes.mdx`: Explain rebuild diagnostics and prepared MCP-destroy recovery. - [#6412](#6412) -> `docs/get-started/quickstart-langchain-deepagents-code.mdx`, `docs/about/release-notes.mdx`: Document authoritative agent-visible inference route health. - [#6421](#6421) -> `docs/about/release-notes.mdx`: Record the longer quiet-pull window for managed vLLM images. - [#6431](#6431) -> `docs/inference/model-capability-audit.mdx`, `docs/about/release-notes.mdx`: Document the version-pinned Nemotron Ultra profile plugin. - [#6439](#6439) -> `docs/about/release-notes.mdx`: Summarize the authenticated, pinned credential-capture helper boundary. - [#6450](#6450) -> `docs/manage-sandboxes/messaging-channels.mdx`, `docs/reference/commands.mdx`, `docs/about/release-notes.mdx`: Document host-forward cleanup and ownership-safe gateway-port release. - [#6474](#6474) -> `docs/manage-sandboxes/messaging-channels.mdx`, `docs/about/release-notes.mdx`: Record composable OpenClaw messaging runtime loaders. - [#6475](#6475) -> `docs/about/release-notes.mdx`: Record removal of the unavailable Kimi K2.6 production endpoint option. - [#6480](#6480) -> `docs/about/release-notes.mdx`: Record stderr routing for the plugin registration banner. - [#6481](#6481) -> `docs/about/release-notes.mdx`: Record post-pull Ollama model discovery checks. - [#6482](#6482) -> `docs/about/release-notes.mdx`: Record Ollama model warm-up after daemon restart. - [#6486](#6486) -> `docs/about/release-notes.mdx`: Publish the opt-in, thread-scoped Deep Agents auto-approval boundary. - [#6490](#6490) -> `docs/about/release-notes.mdx`: Record diagnostics for custom images missing the managed runtime. - [#6494](#6494) -> `docs/inference/model-capability-audit.mdx`, `docs/about/release-notes.mdx`: Document nonempty tool-call content preservation and placeholder rejection. - [#6497](#6497) -> `docs/get-started/quickstart-langchain-deepagents-code.mdx`, `docs/about/release-notes.mdx`: Document isolated Deep Agents route-probe output. - [#6506](#6506) -> `docs/get-started/quickstart-langchain-deepagents-code.mdx`, `docs/about/release-notes.mdx`: Document observability-preserving managed route probes. - [#6508](#6508) -> `docs/about/release-notes.mdx`: Link the new extension taxonomy and SDK-readiness reference from the release summary. Release-source verification: GitHub reports all 29 cited source PRs as merged with base `main`, and every merge commit is an ancestor of `origin/main` at `17bf9a6a9688b3b1d69cf4b37d3f23110acb055e`. No source-mapping mismatches were found. ## Type of Change - [ ] Code change (feature, bug fix, or refactor) - [ ] Code change with doc updates - [ ] Doc only (prose changes, no code sample modifications) - [x] Doc only (includes code sample changes) ## Quality Gates <!-- Check exactly one tests line and one docs line. Check other lines when applicable. Add every requested justification or approval reference. --> - [ ] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [x] Tests not applicable — justification: Documentation-only release-prep changes; `npm run docs` validates variants, routes, and Fern content. - [x] Docs updated for user-facing behavior changes - [ ] Docs not applicable — justification: - [ ] Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging) - [ ] Sensitive-path review completed or maintainer-approved waiver recorded — reviewer/approval link/justification: - [ ] Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue: ## Verification <!-- Check each applicable item only when supported by the requested evidence. Run targeted tests once per relevant change set and rerun after later edits or hook autofixes that can affect the tested behavior. Do not rerun hook-covered checks. --> - [x] PR description includes the DCO sign-off declaration and every commit appears as `Verified` in GitHub - [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — command/result or justification: Tests are not applicable to this documentation-only change set. - [ ] Applicable broad gate passed — `npm test` for broad runtime/test-harness changes; `npm run check` for repo-wide validation/coverage changes — command/result: - [x] Quality Gates section completed with required justifications or waivers - [x] No secrets, API keys, or credentials committed - [ ] `npm run docs` builds without warnings (doc changes only) — exited 0 with zero errors; Fern reported the existing unauthenticated redirect-check and light-mode contrast warnings. - [x] 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) --- <!-- DCO sign-off is required in this PR description, and every commit must appear as Verified in GitHub. Run: git config user.name && git config user.email --> Signed-off-by: Charan Jagwani <cjagwani@nvidia.com> --------- Signed-off-by: cjagwani <cjagwani@nvidia.com>
## Summary - check the registered Ollama route before OpenClaw agent passthrough - translate persisted proxy and WSL bridge routes back to an allowlisted host daemon - require a successful, semantically valid Ollama warm response while preserving OpenClaw canonical errors on failure ## Validation - `npx vitest run --project cli src/lib/actions/sandbox/agent/ollama-restart-recovery.test.ts src/lib/actions/sandbox/agent/passthrough.test.ts` - `npm run build:cli` - `npm run typecheck` - `npx @biomejs/biome check ...` (touched TypeScript files) - `npm run checks` - `npm run test-size:check` - `npm run docs:check-agent-variants` Supersedes NVIDIA#6076. Fixes NVIDIA#6039. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added best-effort Ollama “restart recovery” during OpenClaw agent passthrough, including a bounded warm-up when models may be unloaded after a daemon restart. * **Documentation** * Updated local inference and troubleshooting guidance with Ollama-specific warm-up/timeout and continued-dispatch behavior. * **Bug Fixes** * Reduces post-restart failures by safely probing model availability, warming with routed requests, and continuing dispatch when warm-up times out or fails. * **Tests** * Expanded unit, integration, and GPU end-to-end coverage for warm-up skip/warm/warn outcomes and correct recovery-before-dispatch ordering. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --- Signed-off-by: cjagwani <cjagwani@nvidia.com> --------- Signed-off-by: cjagwani <cjagwani@nvidia.com> Signed-off-by: Apurv Kumaria <akumaria@nvidia.com> Co-authored-by: Ho Lim <subhoya@gmail.com> Co-authored-by: Apurv Kumaria <akumaria@nvidia.com>
<!-- markdownlint-disable MD041 --> ## Summary Prepares the user documentation for NemoClaw v0.0.78 by replacing the unreleased section with release highlights and synchronizing the affected inference, lifecycle, messaging, and CLI reference pages with merged behavior. ## Changes - Publish the v0.0.78 release-notes section with links to the most specific user guides for each shipped behavior. - Document authoritative Deep Agents route health, Nemotron Ultra profile behavior, and Hermes compatible-endpoint context metadata. - Document forced rebuild recovery after total backup failure and the ownership-safe tunnel/full-stop behavior. - Keep command examples and shared agent variants aligned with the current OpenClaw, Hermes, and Deep Agents interfaces. Source mapping: - [NVIDIA#3787](NVIDIA#3787) -> `docs/about/release-notes.mdx`: Record reliable workspace template seeding during sandbox startup. - [NVIDIA#4960](NVIDIA#4960) -> `docs/about/release-notes.mdx`: Record safer detection of rewritten OpenClaw gateway processes. - [NVIDIA#5676](NVIDIA#5676) -> `docs/about/release-notes.mdx`: Record warning-tolerant agent-list JSON handling. - [NVIDIA#5857](NVIDIA#5857) -> `docs/about/release-notes.mdx`: Record synchronization of explicit OpenClaw main-agent model state. - [NVIDIA#5929](NVIDIA#5929) -> `docs/about/release-notes.mdx`: Record copyable SSH port-forward guidance for remote dashboards. - [NVIDIA#6068](NVIDIA#6068) -> `docs/about/release-notes.mdx`: Record custom-image plugin provenance reconciliation. - [NVIDIA#6116](NVIDIA#6116) -> `docs/about/release-notes.mdx`: Record live-loopback dashboard-forward recovery. - [NVIDIA#6122](NVIDIA#6122) -> `docs/about/release-notes.mdx`: Announce validated, round-trippable policy YAML output. - [NVIDIA#6211](NVIDIA#6211) -> `docs/manage-sandboxes/lifecycle.mdx`, `docs/reference/commands.mdx`, `docs/about/release-notes.mdx`: Explain the explicit no-backup `rebuild --force` recovery boundary. - [NVIDIA#6283](NVIDIA#6283) -> `docs/about/release-notes.mdx`: Record Hermes WebUI port alignment. - [NVIDIA#6293](NVIDIA#6293) -> `docs/inference/switch-inference-providers.mdx`, `docs/about/release-notes.mdx`: Document compatible-endpoint context-length probing for Hermes. - [NVIDIA#6320](NVIDIA#6320) -> `docs/about/release-notes.mdx`: Record bounded gateway-recovery waits. - [NVIDIA#6377](NVIDIA#6377) -> `docs/reference/commands.mdx`, `docs/about/release-notes.mdx`: Explain rebuild diagnostics and prepared MCP-destroy recovery. - [NVIDIA#6412](NVIDIA#6412) -> `docs/get-started/quickstart-langchain-deepagents-code.mdx`, `docs/about/release-notes.mdx`: Document authoritative agent-visible inference route health. - [NVIDIA#6421](NVIDIA#6421) -> `docs/about/release-notes.mdx`: Record the longer quiet-pull window for managed vLLM images. - [NVIDIA#6431](NVIDIA#6431) -> `docs/inference/model-capability-audit.mdx`, `docs/about/release-notes.mdx`: Document the version-pinned Nemotron Ultra profile plugin. - [NVIDIA#6439](NVIDIA#6439) -> `docs/about/release-notes.mdx`: Summarize the authenticated, pinned credential-capture helper boundary. - [NVIDIA#6450](NVIDIA#6450) -> `docs/manage-sandboxes/messaging-channels.mdx`, `docs/reference/commands.mdx`, `docs/about/release-notes.mdx`: Document host-forward cleanup and ownership-safe gateway-port release. - [NVIDIA#6474](NVIDIA#6474) -> `docs/manage-sandboxes/messaging-channels.mdx`, `docs/about/release-notes.mdx`: Record composable OpenClaw messaging runtime loaders. - [NVIDIA#6475](NVIDIA#6475) -> `docs/about/release-notes.mdx`: Record removal of the unavailable Kimi K2.6 production endpoint option. - [NVIDIA#6480](NVIDIA#6480) -> `docs/about/release-notes.mdx`: Record stderr routing for the plugin registration banner. - [NVIDIA#6481](NVIDIA#6481) -> `docs/about/release-notes.mdx`: Record post-pull Ollama model discovery checks. - [NVIDIA#6482](NVIDIA#6482) -> `docs/about/release-notes.mdx`: Record Ollama model warm-up after daemon restart. - [NVIDIA#6486](NVIDIA#6486) -> `docs/about/release-notes.mdx`: Publish the opt-in, thread-scoped Deep Agents auto-approval boundary. - [NVIDIA#6490](NVIDIA#6490) -> `docs/about/release-notes.mdx`: Record diagnostics for custom images missing the managed runtime. - [NVIDIA#6494](NVIDIA#6494) -> `docs/inference/model-capability-audit.mdx`, `docs/about/release-notes.mdx`: Document nonempty tool-call content preservation and placeholder rejection. - [NVIDIA#6497](NVIDIA#6497) -> `docs/get-started/quickstart-langchain-deepagents-code.mdx`, `docs/about/release-notes.mdx`: Document isolated Deep Agents route-probe output. - [NVIDIA#6506](NVIDIA#6506) -> `docs/get-started/quickstart-langchain-deepagents-code.mdx`, `docs/about/release-notes.mdx`: Document observability-preserving managed route probes. - [NVIDIA#6508](NVIDIA#6508) -> `docs/about/release-notes.mdx`: Link the new extension taxonomy and SDK-readiness reference from the release summary. Release-source verification: GitHub reports all 29 cited source PRs as merged with base `main`, and every merge commit is an ancestor of `origin/main` at `17bf9a6a9688b3b1d69cf4b37d3f23110acb055e`. No source-mapping mismatches were found. ## Type of Change - [ ] Code change (feature, bug fix, or refactor) - [ ] Code change with doc updates - [ ] Doc only (prose changes, no code sample modifications) - [x] Doc only (includes code sample changes) ## Quality Gates <!-- Check exactly one tests line and one docs line. Check other lines when applicable. Add every requested justification or approval reference. --> - [ ] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [x] Tests not applicable — justification: Documentation-only release-prep changes; `npm run docs` validates variants, routes, and Fern content. - [x] Docs updated for user-facing behavior changes - [ ] Docs not applicable — justification: - [ ] Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging) - [ ] Sensitive-path review completed or maintainer-approved waiver recorded — reviewer/approval link/justification: - [ ] Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue: ## Verification <!-- Check each applicable item only when supported by the requested evidence. Run targeted tests once per relevant change set and rerun after later edits or hook autofixes that can affect the tested behavior. Do not rerun hook-covered checks. --> - [x] PR description includes the DCO sign-off declaration and every commit appears as `Verified` in GitHub - [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — command/result or justification: Tests are not applicable to this documentation-only change set. - [ ] Applicable broad gate passed — `npm test` for broad runtime/test-harness changes; `npm run check` for repo-wide validation/coverage changes — command/result: - [x] Quality Gates section completed with required justifications or waivers - [x] No secrets, API keys, or credentials committed - [ ] `npm run docs` builds without warnings (doc changes only) — exited 0 with zero errors; Fern reported the existing unauthenticated redirect-check and light-mode contrast warnings. - [x] 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) --- <!-- DCO sign-off is required in this PR description, and every commit must appear as Verified in GitHub. Run: git config user.name && git config user.email --> Signed-off-by: Charan Jagwani <cjagwani@nvidia.com> --------- Signed-off-by: cjagwani <cjagwani@nvidia.com>
Summary
Validation
npx vitest run --project cli src/lib/actions/sandbox/agent/ollama-restart-recovery.test.ts src/lib/actions/sandbox/agent/passthrough.test.tsnpm run build:clinpm run typechecknpx @biomejs/biome check ...(touched TypeScript files)npm run checksnpm run test-size:checknpm run docs:check-agent-variantsSupersedes #6076.
Fixes #6039.
Summary by CodeRabbit
Signed-off-by: cjagwani cjagwani@nvidia.com