Skip to content

fix(inference): keep /v1 base URL for OpenAI-only agents on Anthropic-compatible endpoints - #6298

Merged
cv merged 8 commits into
mainfrom
fix/6294-dcode-anthropic-base-url-v1
Jul 6, 2026
Merged

fix(inference): keep /v1 base URL for OpenAI-only agents on Anthropic-compatible endpoints#6298
cv merged 8 commits into
mainfrom
fix/6294-dcode-anthropic-base-url-v1

Conversation

@Dongni-Yang

@Dongni-Yang Dongni-Yang commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

Summary

Onboarding a Deep Agents (dcode / langchain-deepagents-code) sandbox with the Custom Anthropic-compatible provider resolved the probed inference API to anthropic-messages, baking config.toml base_url without the /v1 suffix and registering a gateway provider whose OpenShell route cannot serve dcode's OpenAI-protocol traffic. This PR fixes both halves: agents whose manifest declares provider_type: openai_compatible are coerced onto the managed openai-completions route (config.toml keeps base_url = "https://inference.local/v1"), and the gateway provider is registered --type openai on the endpoint's verified /v1 OpenAI surface so OpenShell routes openai_chat_completions end to end. Endpoints that serve only the Anthropic Messages API fail onboarding with an actionable error instead of producing a sandbox that cannot infer.

Related Issue

Fixes #6294

Changes

Sandbox-side route coercion

  • Add pure helper coerceAgentInferenceApi() in src/lib/inference/config.ts: returns openai-completions when the agent's manifest provider_type is openai_compatible and the resolved API is anthropic-messages; pass-through otherwise. Applied at setupNim's return (net-neutral +1/−1 in onboard.ts) and at the resumed session seed, so config.toml bakes base_url = "https://inference.local/v1" with inference/openai-completions metadata.
  • OpenClaw (gateway_managed) and Hermes (custom) keep negotiating Anthropic Messages natively; the Anthropic endpoint probe still validates the real endpoint before the coercion applies.

Gateway-side OpenAI-surface registration (closes the runtime gap: OpenShell routes protocols per provider type — anthropic-type routes serve only anthropic_messages, and no OpenAI↔Anthropic translation exists)

  • Thread the coerced inference API through setupInference into setupRemoteProviderInference; when it resolves openai-completions for compatible-anthropic-endpoint (only the agent coercion produces this; Bedrock short-circuits earlier), register the provider --type openai.
  • Probe the endpoint's OpenAI surface first, on <origin>/v1 with the same Bearer credential the gateway will use — the anthropic-flavor URL normalization strips a trailing /v1 while OpenShell appends the /v1 protocol path (with dedup), so re-adding the suffix keeps the probed URL identical to the runtime URL. Anthropic-only endpoints fail onboarding with an actionable message.
  • Replace a stale anthropic-type registration (provider update cannot change --type), failing closed with a named-sandbox message when the provider is attached to other live sandboxes, so their Anthropic routing is never silently broken.
  • Resumed pre-fix sessions self-heal: the coerced seed forces one inference-setup pass; the coerced value is persisted only after that setup succeeds, so a failed heal (e.g. keyless resume) re-arms next time instead of stranding the sandbox.
  • The keyless credential-reuse identity gate expects the OpenAI surface for coerced routes (Bedrock endpoints excluded, legacy behavior pinned by test) and names the exact export needed to heal when rejecting a stale registration.

Test & CI hygiene

  • Integration test wiring the real fresh-onboard chain (real dcode manifest → coercion → managed route → real config generator subprocess) asserting the issue's expected base_url; registration tests covering type=openai argv, the /v1 surface, stale-flip containment (unattached / own-sandbox / foreign-sandbox), actionable probe failure, native-Anthropic and keyless-reuse pass-throughs; resume heal/re-arm tests; reuse-gate matrix.
  • Refresh the ci/platform-matrix.json file:line citation shifted by the new tests and regenerate the two synced docs tables (fixes the earlier cli-test-shards (5) failure).

Type of Change

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

Quality Gates

  • Tests added or updated for changed behavior
  • Existing tests cover changed behavior — justification:
  • Tests not applicable — justification:
  • Docs updated for user-facing behavior changes
  • Docs not applicable — justification: no user-facing behavior contract change to document (the fix makes the documented Deep Agents + Anthropic-compatible flow work); the two mdx table diffs are mechanical regenerations of a ci/platform-matrix.json citation line-number refresh via scripts/generate-platform-docs.py.
  • 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: the coercion is a pure function gated on the agent manifest provider_type and the exact probed API value; the gateway registration switch is double-gated (provider name + coerced API), verified against the endpoint's real /v1 OpenAI surface with the same credential binding before registering, cannot loosen egress policy, and fails closed (named-sandbox message) rather than force-detaching a provider other live sandboxes use. Credential handling is unchanged (--credential COMPATIBLE_ANTHROPIC_API_KEY, value never in argv). OpenClaw/Hermes/Bedrock/nim/ollama/vllm paths verified untouched by tests.
  • Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue:

Verification

  • PR description includes the DCO sign-off declaration and every commit appears as Verified in GitHub
  • Normal pre-commit, commit-msg, and pre-push hooks passed, or npm run check:diff passed when hooks were skipped or unavailable
  • Targeted behavior tests pass for the current change set, or tests are marked not applicable above — command/result: npx vitest run test/onboard-anthropic-compatible-openai-agent.test.ts src/lib/onboard/machine/handlers/provider-inference.test.ts src/lib/onboard/recovered-provider-reuse.test.ts src/lib/actions/sandbox/rebuild-provider-preflight.test.ts test/onboard-inference-failure-paths.test.ts src/lib/inference/config.test.ts src/lib/onboard/setup-nim-selection.test.ts test/langchain-deepagents-code-config.test.ts test/generate-platform-docs.test.ts → 9 files, 176/176 passed; npm run typecheck:cli → clean. Advisor-required live E2E green on the config-fix head: onboard-resume, onboard-repair (run 28772422788), ubuntu-repo-cloud-langchain-deepagents-code (run 28772424828); re-dispatched against the current head (see PR comments for scorecards).
  • Applicable broad gate passed — npm test for broad runtime/test-harness changes; npm run check for repo-wide validation/coverage changes — command/result:
  • Quality Gates section completed with required justifications or waivers
  • No secrets, API keys, or credentials committed
  • npm run docs builds without warnings (doc changes only) — 0 errors; the 2 reported warnings are pre-existing and environmental (fern auth-gated redirects check, theme accent-contrast ratio), unrelated to the regenerated tables
  • Doc pages follow the style guide (doc changes only) — generated tables only, emitted by scripts/generate-platform-docs.py
  • New doc pages include SPDX header and frontmatter (new pages only)

Signed-off-by: Dongni Yang dongniy@nvidia.com

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features

    • Enhanced onboarding for OpenAI-compatible agents with automatic inference API coercion and consistent sandbox inference routing.
    • Added probing-driven registration for OpenAI-surface compatible endpoints, including safer gateway provider replacement.
  • Bug Fixes

    • Fixed resume/onboarding recovery so coerced inference preferences are honored and persisted only when appropriate.
    • Improved stale provider credential recovery across inference surfaces.
  • Documentation

    • Updated provider support references to the latest validation examples.

Dongni-Yang and others added 2 commits July 6, 2026 14:15
… endpoints

Onboarding a Deep Agents (langchain-deepagents-code / dcode) sandbox with
the Custom Anthropic-compatible provider probes the endpoint, resolves the
inference API to anthropic-messages, and routes getSandboxInferenceConfig()
through the raw Anthropic branch. That branch drops the /v1 suffix from the
baked config.toml base_url and wires the sandbox for a contract the
OpenAI-/chat/completions-only dcode client cannot speak. The sandbox egress
policy then rejects every /chat/completions request (no /v1 path) with a
403, surfaced by langgraph as PermissionDeniedError.

Coerce the resolved inference API to openai-completions at setupNim's
return for agents whose manifest declares provider_type: openai_compatible,
mirroring the existing Bedrock Runtime custom-Anthropic route. The managed
sub-branch keeps the /v1 base URL, so dcode onboards against an
Anthropic-compatible endpoint exactly like the already-working openai-type
path. OpenClaw (gateway_managed) and Hermes (custom) still negotiate
Anthropic Messages natively; endpoint validation still probes the real
Anthropic API before the coercion applies.

Fixes #6294

Signed-off-by: Dongni Yang <dongniy@nvidia.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
A session persisted before the #6294 fix can carry anthropic-messages for
an agent whose manifest declares provider_type: openai_compatible. The
resume shortcut in handleProviderInferenceState skips setupNim — the
fresh-onboard coercion point — so a resume or rebuild would re-bake the
sandbox base_url without its /v1 suffix. Coerce the persisted seed at the
handler too, so pre-fix sessions self-heal on resume.

Refs #6294

Signed-off-by: Dongni Yang <dongniy@nvidia.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It 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 reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds routing coercion for OpenAI-compatible agents, applies it in onboarding and resume handling, and extends remote provider setup and credential reuse logic for OpenAI-surface probing and stale provider replacement.

Changes

Inference route coercion and onboarding

Layer / File(s) Summary
Helper and config tests
src/lib/inference/config.ts, src/lib/inference/config.test.ts, test/langchain-deepagents-code-config.test.ts, ci/platform-matrix.json, docs/inference/inference-options.mdx, docs/reference/platform-support.mdx
Adds coerceAgentInferenceApi(agent, preferredInferenceApi), covers sandbox/config-generation paths that use it, and updates source-location references in docs and platform metadata.
Onboarding and resume normalization
src/lib/onboard.ts, src/lib/onboard/machine/handlers/provider-inference.ts, src/lib/onboard/machine/handlers/provider-inference.test.ts, src/lib/onboard/setup-inference.ts
Normalizes preferredInferenceApi during onboarding and resume handling, forwards it through setup calls, and updates tests for coercion, persistence, retries, and no-op cases.
Remote provider OpenAI surface setup
src/lib/onboard/inference-providers/types.ts, src/lib/onboard/inference-providers/remote.ts, test/onboard-anthropic-compatible-openai-agent.test.ts
Adds OpenAI-surface probing and gateway-provider replacement paths, threads the new dependency hooks through setup inference, and covers the new onboarding flows in tests.
Recovered provider reuse
src/lib/onboard/recovered-provider-reuse.ts, src/lib/onboard/recovered-provider-reuse.test.ts
Adjusts recovered-credential reuse checks for coerced OpenAI-compatible routes and updates the matching acceptance/rejection coverage.

Estimated code review effort: 4 (Complex) | ~60 minutes

Possibly related issues

Possibly related PRs

  • NVIDIA/NemoClaw#4471: Both PRs modify handleProviderInferenceState in src/lib/onboard/machine/handlers/provider-inference.ts.

Suggested labels: bug-fix

Suggested reviewers: cv

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately captures the core fix: preserving the /v1 OpenAI-compatible path for OpenAI-only agents on Anthropic-compatible endpoints.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/6294-dcode-anthropic-base-url-v1

Comment @coderabbitai help to get the list of available commands.

@github-code-quality

github-code-quality Bot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Overview

Languages: TypeScript

TypeScript / code-coverage/plugin

The overall coverage in the fix/6294-dcode-anthr... branch is 96%. Coverage data for the main branch is not yet available.

Show a code coverage summary of the most covered files.
File main fix/6294-dcode-anthr... 31ab337 +/-
nemoclaw/src/se...cret-scanner.ts 100%
nemoclaw/src/commands/slash.ts 100%
nemoclaw/src/li...bprocess-env.ts 100%
nemoclaw/src/bl...eprint/state.ts 98%
nemoclaw/src/onboard/config.ts 98%
nemoclaw/src/bl...int/snapshot.ts 97%
nemoclaw/src/bl...print/runner.ts 95%
nemoclaw/src/co...ration-state.ts 94%
nemoclaw/src/bl...ate-networks.ts 94%
nemoclaw/src/index.ts 94%

TypeScript / code-coverage/cli

The overall coverage in the fix/6294-dcode-anthr... branch is 73%. Coverage data for the main branch is not yet available.

Show a code coverage summary of the most covered files.
File main fix/6294-dcode-anthr... 31ab337 +/-
src/lib/shields...nsition-lock.ts 87%
src/lib/onboard/preflight.ts 83%
src/lib/actions...all/run-plan.ts 81%
src/lib/state/o...oard-session.ts 81%
src/lib/state/sandbox.ts 71%
src/lib/onboard...er-gpu-patch.ts 69%
src/lib/shields/index.ts 68%
src/lib/policy/index.ts 66%
src/lib/actions...licy-channel.ts 63%
src/lib/onboard.ts 24%

Updated July 06, 2026 16:42 UTC
Code Coverage is in Public Preview. Learn more and provide us with your feedback.

@github-actions

github-actions Bot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

E2E Advisor Recommendation

Required E2E: onboard-resume, onboard-repair, cloud-onboard, openclaw-inference-switch, ubuntu-repo-cloud-langchain-deepagents-code
Optional E2E: cloud-inference, bedrock-runtime-compatible-anthropic, messaging-compatible-endpoint

Dispatch hint: targets=onboard-resume,onboard-repair,cloud-onboard,openclaw-inference-switch,ubuntu-repo-cloud-langchain-deepagents-code

Workflow run

Full advisor summary

E2E Recommendation Advisor

Base: origin/main
Head: HEAD
Confidence: high

Required E2E

  • onboard-resume (medium): Required by the onboarding resume rule because the PR changes provider-inference machine handling and resumed preferredInferenceApi repair behavior. This must not be covered only by unit tests.
  • onboard-repair (medium-high): Required by the onboarding resume rule alongside onboard-resume because the PR changes resume repair/heal behavior for stale provider-selection state and forced inference setup.
  • cloud-onboard (high): The changes affect full hosted onboarding: provider selection now coerces preferredInferenceApi, setupInference receives that API, and remote provider setup may register providers differently. Hosted onboarding should be merge-blocking.
  • openclaw-inference-switch (high): Exercises real OpenClaw inference switching, including the compatible-anthropic endpoint path that must remain on Anthropic Messages for Anthropic-capable agents while the new OpenAI-compatible-agent coercion path is introduced.
  • ubuntu-repo-cloud-langchain-deepagents-code (high): Runs the existing live typed target for the langchain-deepagents-code/dcode assistant. The PR changes OpenAI-compatible agent inference wiring and setupInference option propagation that can affect this real agent flow.

Optional E2E

  • cloud-inference (medium): Useful narrower confidence check for hosted routed inference after changes to getSandboxInferenceConfig, preferredInferenceApi handling, and remote provider setup.
  • bedrock-runtime-compatible-anthropic (medium-high): Adjacent coverage for compatible-anthropic endpoint behavior. The Bedrock branch should still short-circuit before the new OpenAI-surface registration path.
  • messaging-compatible-endpoint (medium): Optional regression signal for compatible endpoint onboarding plus inference.local smoke through a real sandbox and messaging-enabled configuration.

New E2E recommendations

  • langchain-deepagents-code-compatible-anthropic-onboarding (high): No existing live E2E appears to cover langchain-deepagents-code onboarded against compatible-anthropic-endpoint where the endpoint serves /v1/chat/completions and preferredInferenceApi is coerced from anthropic-messages to openai-completions.
    • Suggested test: Add a live E2E job or registry target that starts a fake endpoint exposing both Anthropic and OpenAI-compatible surfaces, onboards langchain-deepagents-code with provider compatible-anthropic-endpoint, verifies the gateway provider is registered as type=openai with a /v1 base URL, and performs a dcode inference smoke through inference.local.
  • provider-replacement-cross-sandbox-containment (high): The new stale provider replacement path has security-sensitive fail-closed behavior when a provider is attached to a sandbox other than the one being onboarded. Unit tests help, but a gateway-backed E2E would catch OpenShell diagnostic format or detach semantics drift.
    • Suggested test: Add a live E2E scenario that creates a stale compatible-anthropic-endpoint provider attached to one sandbox, attempts OpenAI-surface onboarding for another sandbox, and asserts onboarding fails without detaching the foreign sandbox.

Dispatch hint

  • Workflow: .github/workflows/e2e.yaml
  • jobs input: targets=onboard-resume,onboard-repair,cloud-onboard,openclaw-inference-switch,ubuntu-repo-cloud-langchain-deepagents-code

@github-actions

github-actions Bot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

E2E Target Recommendation

Required E2E targets: onboard-resume, onboard-repair, inference-routing, ubuntu-repo-cloud-langchain-deepagents-code
Optional E2E targets: None

Dispatch required E2E targets:

  • gh workflow run e2e.yaml --ref <pr-head-ref> --field jobs=onboard-resume
  • gh workflow run e2e.yaml --ref <pr-head-ref> --field jobs=onboard-repair
  • gh workflow run e2e.yaml --ref <pr-head-ref> --field jobs=inference-routing
  • gh workflow run e2e.yaml --ref <pr-head-ref> --field targets=ubuntu-repo-cloud-langchain-deepagents-code

Workflow run

Full E2E target advisor summary

E2E Target Advisor

Base: origin/main
Head: HEAD
Confidence: high

Required E2E targets

  • onboard-resume: Changes touch src/lib/onboard/machine provider-inference resume handling and coerce persisted preferredInferenceApi state for OpenAI-compatible agents, so the onboarding resume live job is required by the resume-state policy.
    • Dispatch: gh workflow run e2e.yaml --ref <pr-head-ref> --field jobs=onboard-resume
  • onboard-repair: The resume-state change can force inference setup repair from persisted sessions, and provider replacement now uses sandbox-provider cleanup/recovery paths; onboard-repair is required for repair/backstop execution from resumed state.
    • Dispatch: gh workflow run e2e.yaml --ref <pr-head-ref> --field jobs=onboard-repair
  • inference-routing: Remote provider setup now probes/re-registers compatible-anthropic endpoints for OpenAI-compatible traffic and changes provider cleanup safety; the inference-routing live job directly exercises provider routing and failure/cleanup contracts.
    • Dispatch: gh workflow run e2e.yaml --ref <pr-head-ref> --field jobs=inference-routing
  • ubuntu-repo-cloud-langchain-deepagents-code: The PR changes inference API coercion for manifest provider_type=openai_compatible agents, specifically LangChain Deep Agents Code, so the live-supported typed dcode target is the smallest registry target that exercises that agent onboarding surface.
    • Dispatch: gh workflow run e2e.yaml --ref <pr-head-ref> --field targets=ubuntu-repo-cloud-langchain-deepagents-code

Optional E2E targets

  • None.

Relevant changed files

  • src/lib/inference/config.ts
  • src/lib/onboard.ts
  • src/lib/onboard/inference-providers/remote.ts
  • src/lib/onboard/inference-providers/types.ts
  • src/lib/onboard/machine/handlers/provider-inference.ts
  • src/lib/onboard/recovered-provider-reuse.ts
  • src/lib/onboard/sandbox-provider-cleanup.ts
  • src/lib/onboard/setup-inference.ts
  • test/onboard-anthropic-compatible-openai-agent.test.ts

@github-actions

github-actions Bot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

PR Review Advisor — Changes requested

Merge posture: Do not merge yet
Primary next action: Resolve or justify PRA-1: Source-of-truth review needed: src/lib/inference/config.ts coerceAgentInferenceApi() comment and route coercion.
Open items: 0 required · 3 warnings · 0 suggestions · 8 test follow-ups
Since last review: 1 prior item resolved · 3 still apply · 0 new items found

Action checklist

  • PRA-1 Resolve or justify: Source-of-truth review needed: src/lib/inference/config.ts coerceAgentInferenceApi() comment and route coercion
  • PRA-2 Resolve or justify: Add or justify runtime dcode/OpenShell policy validation for the fixed route in test/langchain-deepagents-code-config.test.ts:124
  • PRA-3 Resolve or justify: Update stale source-of-truth comment for compatible-Anthropic OpenAI-surface routing in src/lib/inference/config.ts:280
  • PRA-T1 Add or justify test follow-up: Runtime validation
  • PRA-T2 Add or justify test follow-up: Add or justify runtime dcode/OpenShell policy validation for the fixed route
  • PRA-T3 Add or justify test follow-up: Acceptance clause
  • PRA-T4 Add or justify test follow-up: Acceptance clause
  • PRA-T5 Add or justify test follow-up: Acceptance clause
  • PRA-T6 Add or justify test follow-up: Acceptance clause
  • PRA-T7 Add or justify test follow-up: Acceptance clause
  • PRA-T8 Add or justify test follow-up: src/lib/inference/config.ts coerceAgentInferenceApi() comment and route coercion

Findings index

ID Severity Category Location Required action
PRA-1 Resolve/justify architecture Identify the invalid state, source boundary, source-fix constraint, regression test, and removal condition before merging the localized behavior.
PRA-2 Resolve/justify tests test/langchain-deepagents-code-config.test.ts:124 Add a narrow runtime/integration smoke if practical, or record a concrete maintainer justification identifying an existing test that exercises this exact runtime boundary. Keep it focused on a Deep Agents Code Custom Anthropic-compatible route and the `https://inference.local/v1/chat/completions\` request path.
PRA-3 Resolve/justify correctness src/lib/inference/config.ts:280 Revise the comment to describe the current split accurately: `coerceAgentInferenceApi()` selects the sandbox contract for `openai_compatible` agents, while `setupRemoteProviderInference()` registers `compatible-anthropic-endpoint` as `type=openai` after the OpenAI-surface probe or fails onboarding. Remove the claim that #6294 still needs a separate gateway-side answer, and update the removal condition to match the implemented design.
Review findings by urgency: 0 required fixes, 3 items to resolve/justify, 0 in-scope improvements

⚠️ Resolve or justify before merge

Investigate these in the current review; either fix them, explain why they are not applicable, or document the accepted risk.

PRA-1 Resolve/justify — Source-of-truth review needed: src/lib/inference/config.ts coerceAgentInferenceApi() comment and route coercion

  • Location: not file-specific
  • Category: architecture
  • Problem: The advisor marked localized patch analysis as needs_followup.
  • Impact: A localized workaround can preserve or hide an invalid state when the source boundary is unclear.
  • Recommended action: Identify the invalid state, source boundary, source-fix constraint, regression test, and removal condition before merging the localized behavior.
  • Expected follow-up: Resolve in this PR or explain why the risk is acceptable.
  • Verification: Inspect the localized patch and source-of-truth review fields for a concrete invalid state, source boundary, source-fix constraint, regression test, and removal condition.
  • Missing regression test: `src/lib/inference/config.test.ts` covers the coercion matrix, and `test/onboard-anthropic-compatible-openai-agent.test.ts` covers OpenAI-surface provider registration/rejection.
  • Done when: The risk is fixed or explicitly justified in the PR. Verification: Inspect the localized patch and source-of-truth review fields for a concrete invalid state, source boundary, source-fix constraint, regression test, and removal condition.
  • Evidence: `config.ts` says `the gateway provider ... is still registered as type=anthropic`, while `remote.ts` calls `upsertProvider(provider, "openai", ...)` for the coerced route.

PRA-2 Resolve/justify — Add or justify runtime dcode/OpenShell policy validation for the fixed route

  • Location: test/langchain-deepagents-code-config.test.ts:124
  • Category: tests
  • Problem: The changed tests strongly cover static route selection, the real dcode config generator, OpenShell provider-registration argv, endpoint probing, stale provider replacement, and resume healing. They do not exercise the user-visible failure path from issue [Ubuntu 26.04][Onboard] Deep Agents (dcode) onboard via Anthropic-compatible provider writes config.toml base_url without /v1 — every dcode run fails with PermissionDeniedError #6294: a sandbox-side `dcode -n` request traversing OpenShell's inference proxy and no longer receiving the pre-fix `PermissionDeniedError` / policy 403.
  • Impact: A mismatch between generated config, dcode's real OpenAI client path construction, and OpenShell's runtime L7 inference policy could still preserve the issue's user-visible failure even though unit and direct-harness tests pass.
  • Recommended action: Add a narrow runtime/integration smoke if practical, or record a concrete maintainer justification identifying an existing test that exercises this exact runtime boundary. Keep it focused on a Deep Agents Code Custom Anthropic-compatible route and the `https://inference.local/v1/chat/completions\` request path.
  • Expected follow-up: Resolve in this PR or explain why the risk is acceptable.
  • Verification: Read-only check: inspect `test/langchain-deepagents-code-config.test.ts` and `test/onboard-anthropic-compatible-openai-agent.test.ts`; they generate TOML and assert provider argv/probe behavior, but neither starts a sandbox, invokes `dcode -n`, nor asserts an OpenShell inference-policy decision.
  • Missing regression test: Add or identify `dcode custom anthropic-compatible route sends chat completions through inference.local/v1 without policy denial`: synthesize/onboard a Deep Agents Code Custom Anthropic-compatible route, run a minimal headless dcode request, and assert it reaches `https://inference.local/v1/chat/completions\` without the prior proxy 403 / `PermissionDeniedError`.
  • Done when: The risk is fixed or explicitly justified in the PR. Verification: Read-only check: inspect `test/langchain-deepagents-code-config.test.ts` and `test/onboard-anthropic-compatible-openai-agent.test.ts`; they generate TOML and assert provider argv/probe behavior, but neither starts a sandbox, invokes `dcode -n`, nor asserts an OpenShell inference-policy decision.
  • Evidence: Issue [Ubuntu 26.04][Onboard] Deep Agents (dcode) onboard via Anthropic-compatible provider writes config.toml base_url without /v1 — every dcode run fails with PermissionDeniedError #6294's Expected Result says `dcode completes the task and exits 0`; current changed tests assert `base_url = "https://inference.local/v1"\`, OpenAI provider registration, and endpoint-probe behavior, but not the sandbox-side dcode/OpenShell policy path.

PRA-3 Resolve/justify — Update stale source-of-truth comment for compatible-Anthropic OpenAI-surface routing

💡 In-scope improvements

These are lower-risk, not throwaway. Prefer fixing them in this PR when they are local to changed code; defer only with rationale or a linked follow-up.

  • None.
Simplification opportunities: 1 possible cut, net -8 lines possible

These are safe simplification checks only. Do not remove validation, security controls, data-loss prevention, or required tests.

Test follow-ups to resolve or justify

If these cover changed behavior, prefer adding them in this PR; otherwise state why existing coverage is enough or link the follow-up.

  • PRA-T1 Runtime validation — dcode custom anthropic-compatible route sends chat completions through inference.local/v1 without policy denial. Changed unit/direct-harness tests are broad and targeted for pure logic, setup wiring, provider registration, stale recovery, and keyless reuse. The remaining confidence gap is the real runtime boundary from issue [Ubuntu 26.04][Onboard] Deep Agents (dcode) onboard via Anthropic-compatible provider writes config.toml base_url without /v1 — every dcode run fails with PermissionDeniedError #6294: dcode inside a sandbox traversing OpenShell's L7 inference proxy without the previous policy 403.
  • PRA-T2 Add or justify runtime dcode/OpenShell policy validation for the fixed route — Add a narrow runtime/integration smoke if practical, or record a concrete maintainer justification identifying an existing test that exercises this exact runtime boundary. Keep it focused on a Deep Agents Code Custom Anthropic-compatible route and the `https://inference.local/v1/chat/completions\` request path.
  • PRA-T3 Acceptance clause — dcode follows the openai-completions contract and calls `<base_url>/chat/completions`; the sandbox egress proxy only allows the `/v1` path, so the request is rejected with a 403 and langgraph surfaces it as **`PermissionDeniedError`**. — add test evidence or identify existing coverage. The diff fixes the static route and gateway provider type (`remote.ts` probes `/v1/chat/completions` and registers `type=openai`), but changed tests do not run dcode inside a sandbox or assert the OpenShell L7 inference policy decision.
  • PRA-T4 Acceptance clause — Every dcode run on this route fails in ~6s. — add test evidence or identify existing coverage. The PR targets the route that produced this failure and adds direct setup/config tests, but there is no changed runtime test showing a dcode run now succeeds on that route.
  • PRA-T5 Acceptance clause — `config.toml` `base_url` ends with `/v1` (as the openai-type onboard path already does); dcode completes the task and exits 0. — add test evidence or identify existing coverage. The `/v1` config portion is covered by `test/langchain-deepagents-code-config.test.ts`; the `dcode completes the task and exits 0` portion lacks in-diff runtime/sandbox evidence.
  • PRA-T6 Acceptance clause — `dcode -n "say hi"`: — add test evidence or identify existing coverage. No changed test invokes `dcode -n`; current evidence is limited to generated config and provider setup behavior.
  • PRA-T7 Acceptance clause — nemoclaw: recent network policy denial detected for inference.local:443 inside sandbox 'issue1fresh'. — add test evidence or identify existing coverage. The route/path fix should avoid the missing-`/v1` policy denial, but no changed test asserts absence of the sandbox network-policy denial.
  • PRA-T8 src/lib/inference/config.ts coerceAgentInferenceApi() comment and route coercion — `src/lib/inference/config.test.ts` covers the coercion matrix, and `test/onboard-anthropic-compatible-openai-agent.test.ts` covers OpenAI-surface provider registration/rejection.. `config.ts` says `the gateway provider ... is still registered as type=anthropic`, while `remote.ts` calls `upsertProvider(provider, "openai", ...)` for the coerced route.
Since last review details

Current findings, using the urgency labels above:

PRA-1 Resolve/justify — Source-of-truth review needed: src/lib/inference/config.ts coerceAgentInferenceApi() comment and route coercion

  • Location: not file-specific
  • Category: architecture
  • Problem: The advisor marked localized patch analysis as needs_followup.
  • Impact: A localized workaround can preserve or hide an invalid state when the source boundary is unclear.
  • Recommended action: Identify the invalid state, source boundary, source-fix constraint, regression test, and removal condition before merging the localized behavior.
  • Expected follow-up: Resolve in this PR or explain why the risk is acceptable.
  • Verification: Inspect the localized patch and source-of-truth review fields for a concrete invalid state, source boundary, source-fix constraint, regression test, and removal condition.
  • Missing regression test: `src/lib/inference/config.test.ts` covers the coercion matrix, and `test/onboard-anthropic-compatible-openai-agent.test.ts` covers OpenAI-surface provider registration/rejection.
  • Done when: The risk is fixed or explicitly justified in the PR. Verification: Inspect the localized patch and source-of-truth review fields for a concrete invalid state, source boundary, source-fix constraint, regression test, and removal condition.
  • Evidence: `config.ts` says `the gateway provider ... is still registered as type=anthropic`, while `remote.ts` calls `upsertProvider(provider, "openai", ...)` for the coerced route.

PRA-2 Resolve/justify — Add or justify runtime dcode/OpenShell policy validation for the fixed route

  • Location: test/langchain-deepagents-code-config.test.ts:124
  • Category: tests
  • Problem: The changed tests strongly cover static route selection, the real dcode config generator, OpenShell provider-registration argv, endpoint probing, stale provider replacement, and resume healing. They do not exercise the user-visible failure path from issue [Ubuntu 26.04][Onboard] Deep Agents (dcode) onboard via Anthropic-compatible provider writes config.toml base_url without /v1 — every dcode run fails with PermissionDeniedError #6294: a sandbox-side `dcode -n` request traversing OpenShell's inference proxy and no longer receiving the pre-fix `PermissionDeniedError` / policy 403.
  • Impact: A mismatch between generated config, dcode's real OpenAI client path construction, and OpenShell's runtime L7 inference policy could still preserve the issue's user-visible failure even though unit and direct-harness tests pass.
  • Recommended action: Add a narrow runtime/integration smoke if practical, or record a concrete maintainer justification identifying an existing test that exercises this exact runtime boundary. Keep it focused on a Deep Agents Code Custom Anthropic-compatible route and the `https://inference.local/v1/chat/completions\` request path.
  • Expected follow-up: Resolve in this PR or explain why the risk is acceptable.
  • Verification: Read-only check: inspect `test/langchain-deepagents-code-config.test.ts` and `test/onboard-anthropic-compatible-openai-agent.test.ts`; they generate TOML and assert provider argv/probe behavior, but neither starts a sandbox, invokes `dcode -n`, nor asserts an OpenShell inference-policy decision.
  • Missing regression test: Add or identify `dcode custom anthropic-compatible route sends chat completions through inference.local/v1 without policy denial`: synthesize/onboard a Deep Agents Code Custom Anthropic-compatible route, run a minimal headless dcode request, and assert it reaches `https://inference.local/v1/chat/completions\` without the prior proxy 403 / `PermissionDeniedError`.
  • Done when: The risk is fixed or explicitly justified in the PR. Verification: Read-only check: inspect `test/langchain-deepagents-code-config.test.ts` and `test/onboard-anthropic-compatible-openai-agent.test.ts`; they generate TOML and assert provider argv/probe behavior, but neither starts a sandbox, invokes `dcode -n`, nor asserts an OpenShell inference-policy decision.
  • Evidence: Issue [Ubuntu 26.04][Onboard] Deep Agents (dcode) onboard via Anthropic-compatible provider writes config.toml base_url without /v1 — every dcode run fails with PermissionDeniedError #6294's Expected Result says `dcode completes the task and exits 0`; current changed tests assert `base_url = "https://inference.local/v1"\`, OpenAI provider registration, and endpoint-probe behavior, but not the sandbox-side dcode/OpenShell policy path.

PRA-3 Resolve/justify — Update stale source-of-truth comment for compatible-Anthropic OpenAI-surface routing

Workflow run details

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.

@github-actions

github-actions Bot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

PR Review Advisor (Nemotron Ultra) — Changes requested

Merge posture: Do not merge yet
Primary next action: Fix PRA-1: Test file monolith growth +113 lines (886→999) requires extraction; then add or justify PRA-T1.
Open items: 5 required · 3 warnings · 1 suggestion · 5 test follow-ups
Since last review: 3 prior items resolved · 1 still applies · 4 new items found

Action checklist

  • PRA-1 Fix: Test file monolith growth +113 lines (886→999) requires extraction in src/lib/onboard/machine/handlers/provider-inference.test.ts:1
  • PRA-2 Fix: Test file monolith growth +61 lines (473→534) requires extraction in src/lib/inference/config.test.ts:1
  • PRA-3 Fix: Test file monolith growth +53 lines (430→483) requires extraction in src/lib/onboard/recovered-provider-reuse.test.ts:1
  • PRA-4 Fix: Missing integration test for keyless coerced provider recovery (PRA-4) in test/onboard-anthropic-compatible-openai-agent.test.ts:200
  • PRA-5 Fix: Missing negative test for partial provider replacement failure (PRA-6) in src/lib/inference/config.test.ts:384
  • PRA-6 Resolve or justify: Duplicated upsertProvider logic in useOpenAiSurface branch in src/lib/onboard/inference-providers/remote.ts:170
  • PRA-7 Resolve or justify: Type assertions bridge nominal type mismatches in RemoteProviderDeps in src/lib/onboard/inference-providers/remote.ts:130
  • PRA-8 Resolve or justify: Implementation file growth +34 lines (595→629) trending upward in src/lib/onboard/machine/handlers/provider-inference.ts:172
  • PRA-T1 Add or justify test follow-up: Runtime validation
  • PRA-T2 Add or justify test follow-up: Runtime validation
  • PRA-T3 Add or justify test follow-up: Runtime validation
  • PRA-T4 Add or justify test follow-up: Missing negative test for partial provider replacement failure (PRA-6)
  • PRA-T5 Add or justify test follow-up: Implementation file growth +34 lines (595→629) trending upward
  • PRA-9 In-scope improvement: Workaround for OpenShell sandbox deletion lifecycle properly documented in src/lib/onboard/sandbox-provider-cleanup.ts:90

Findings index

ID Severity Category Location Required action
PRA-1 Required architecture src/lib/onboard/machine/handlers/provider-inference.test.ts:1 Extract the 3 #6294 coercion resume tests (lines ~347-460) into src/lib/onboard/machine/handlers/provider-inference-coercion.test.ts
PRA-2 Required architecture src/lib/inference/config.test.ts:1 Extract the describe('coerceAgentInferenceApi') block (lines ~262-325) into src/lib/inference/coerce-agent-inference-api.test.ts
PRA-3 Required architecture src/lib/onboard/recovered-provider-reuse.test.ts:1 Extract the 3 new #6294 tests (accepts coerced recovery, rejects stale Anthropic identity, keeps legacy Bedrock) into a separate test file or consolidate with the extracted coercion tests
PRA-4 Required acceptance test/onboard-anthropic-compatible-openai-agent.test.ts:200 Add an integration test in test/onboard-anthropic-compatible-openai-agent.test.ts that: 1) Creates a real gateway provider registered as type=openai for compatible-anthropic-endpoint, 2) Simulates resume with keyless reuse (no host credential), 3) Verifies the reuse gate accepts the OpenAI-surface identity and skips the probe. Extend the existing harness to register a real provider first.
PRA-5 Required tests src/lib/inference/config.test.ts:384 Add a test in test/onboard-anthropic-compatible-openai-agent.test.ts that mocks provider delete = success, provider create = failure, and verifies the error is actionable and no partial state persists.
PRA-6 Resolve/justify correctness src/lib/onboard/inference-providers/remote.ts:170 Factor the common upsert logic into a helper function that accepts providerType and baseUrl as parameters. Can be done in this PR or follow-up.
PRA-7 Resolve/justify correctness src/lib/onboard/inference-providers/remote.ts:130 Update RemoteProviderDeps in types.ts to include readGatewayProviderMetadata and deleteGatewayProvider as required (not optional) when the #6294 feature is used, or create a sub-interface. Eliminates the type assertions.
PRA-8 Resolve/justify tests src/lib/onboard/machine/handlers/provider-inference.ts:172 Extract the resume-path coercion logic (lines ~172-190) into a small helper function applyResumeCoercion(agent, initialPreferredInferenceApi, preferredInferenceApi). This is a suggestion, not a blocker.
PRA-9 Improvement correctness src/lib/onboard/sandbox-provider-cleanup.ts:90 No action needed. The workaround is well-documented with removal condition tracked in OpenShell.

🚨 Required before merge

Address these before merging unless a maintainer explicitly overrides the advisor with rationale.

PRA-1 Required — Test file monolith growth +113 lines (886→999) requires extraction

  • Location: src/lib/onboard/machine/handlers/provider-inference.test.ts:1
  • Category: architecture
  • Problem: The file grew by 113 lines due to 3 new [Ubuntu 26.04][Onboard] Deep Agents (dcode) onboard via Anthropic-compatible provider writes config.toml base_url without /v1 — every dcode run fails with PermissionDeniedError #6294 coercion resume tests (coerced heal, heal re-arm, native agent passthrough). This exceeds the 20-line monolith growth threshold and blocks merge per policy.
  • Impact: Merge blocked until test file growth is extracted or offset. The 3 new tests are cohesive and can be moved to a separate file.
  • Required action: Extract the 3 [Ubuntu 26.04][Onboard] Deep Agents (dcode) onboard via Anthropic-compatible provider writes config.toml base_url without /v1 — every dcode run fails with PermissionDeniedError #6294 coercion resume tests (lines ~347-460) into src/lib/onboard/machine/handlers/provider-inference-coercion.test.ts
  • Expected follow-up: Fix before merge or get explicit maintainer override.
  • Verification: Count lines in provider-inference.test.ts and locate the 3 new test blocks: 'coerces a resumed anthropic-messages seed for an OpenAI-only agent', 're-arms the heal when the forced inference setup does not complete', 'keeps a resumed anthropic-messages seed for agents that speak Anthropic natively'
  • Missing regression test: N/A - this is a test architecture issue; the tests themselves are the regression coverage
  • Done when: The required change is committed and verification passes: Count lines in provider-inference.test.ts and locate the 3 new test blocks: 'coerces a resumed anthropic-messages seed for an OpenAI-only agent', 're-arms the heal when the forced inference setup does not complete', 'keeps a resumed anthropic-messages seed for agents that speak Anthropic natively'.
  • Evidence: Monolith delta from drift context: +113 lines, severity=blocker

PRA-2 Required — Test file monolith growth +61 lines (473→534) requires extraction

  • Location: src/lib/inference/config.test.ts:1
  • Category: architecture
  • Problem: The file grew by 61 lines due to new describe('coerceAgentInferenceApi') block with 7 tests. This exceeds the 20-line threshold.
  • Impact: Merge blocked until test file growth is extracted. The coercion tests are a cohesive unit.
  • Required action: Extract the describe('coerceAgentInferenceApi') block (lines ~262-325) into src/lib/inference/coerce-agent-inference-api.test.ts
  • Expected follow-up: Fix before merge or get explicit maintainer override.
  • Verification: Count lines in config.test.ts and locate the coerceAgentInferenceApi describe block starting around line 262
  • Missing regression test: N/A - test architecture issue
  • Done when: The required change is committed and verification passes: Count lines in config.test.ts and locate the coerceAgentInferenceApi describe block starting around line 262.
  • Evidence: Monolith delta from drift context: +61 lines, severity=blocker

PRA-3 Required — Test file monolith growth +53 lines (430→483) requires extraction

PRA-4 Required — Missing integration test for keyless coerced provider recovery (PRA-4)

  • Location: test/onboard-anthropic-compatible-openai-agent.test.ts:200
  • Category: acceptance
  • Problem: Previous review PRA-4 requested an integration test for recovery of coerced provider with keyless gateway-credential reuse: fresh onboard → resume with provider get=success, readGatewayProviderMetadata=type=openai. Current test 'skips the surface probe on keyless gateway-credential reuse' mocks the entire openshell layer and does not exercise the real reuse gate (assessRecoveredProviderCredentialReuse → resolveRecoveredProviderCredentialReuse).
  • Impact: Without a true integration test, the keyless reuse path for coerced providers lacks end-to-end verification that the reuse gate accepts the OpenAI-surface identity and skips the probe.
  • Required action: Add an integration test in test/onboard-anthropic-compatible-openai-agent.test.ts that: 1) Creates a real gateway provider registered as type=openai for compatible-anthropic-endpoint, 2) Simulates resume with keyless reuse (no host credential), 3) Verifies the reuse gate accepts the OpenAI-surface identity and skips the probe. Extend the existing harness to register a real provider first.
  • Expected follow-up: Fix before merge or get explicit maintainer override.
  • Verification: Check test/onboard-anthropic-compatible-openai-agent.test.ts for any test that creates a real gateway provider (not mocked) before the reuse scenario
  • Missing regression test: Integration test for keyless recovery of coerced provider with OpenAI-surface gateway identity (real openshell provider registration)
  • Done when: The required change is committed and verification passes: Check test/onboard-anthropic-compatible-openai-agent.test.ts for any test that creates a real gateway provider (not mocked) before the reuse scenario.
  • Evidence: Prior review PRA-4 marked 'Resolve/justify'; unit test exists but mocks entire openshell layer; security Category 8 WARNING for this gap

PRA-5 Required — Missing negative test for partial provider replacement failure (PRA-6)

  • Location: src/lib/inference/config.test.ts:384
  • Category: tests
  • Problem: Previous review PRA-6 requested a test where provider delete succeeds but provider create fails, verifying the error is actionable and no partial state persists. This tests the replaceStaleAnthropicProviderForOpenAiSurface error path where deleteGatewayProvider succeeds but upsertProvider fails.
  • Impact: Error path for partial replacement failure is untested. Could leave sandbox in inconsistent state if create fails after successful delete.
  • Required action: Add a test in test/onboard-anthropic-compatible-openai-agent.test.ts that mocks provider delete = success, provider create = failure, and verifies the error is actionable and no partial state persists.
  • Expected follow-up: Fix before merge or get explicit maintainer override.
  • Verification: Check test/onboard-anthropic-compatible-openai-agent.test.ts for any test mocking deleteGatewayProvider=ok and upsertProvider=failure
  • Missing regression test: Negative test for partial provider replacement failure (delete succeeds, create fails) in the [Ubuntu 26.04][Onboard] Deep Agents (dcode) onboard via Anthropic-compatible provider writes config.toml base_url without /v1 — every dcode run fails with PermissionDeniedError #6294 coercion path
  • Done when: The required change is committed and verification passes: Check test/onboard-anthropic-compatible-openai-agent.test.ts for any test mocking deleteGatewayProvider=ok and upsertProvider=failure.
  • Evidence: Prior review PRA-6 marked 'Improvement'; no such test exists in current test suite
Review findings by urgency: 5 required fixes, 3 items to resolve/justify, 1 in-scope improvement

⚠️ Resolve or justify before merge

Investigate these in the current review; either fix them, explain why they are not applicable, or document the accepted risk.

PRA-6 Resolve/justify — Duplicated upsertProvider logic in useOpenAiSurface branch

  • Location: src/lib/onboard/inference-providers/remote.ts:170
  • Category: correctness
  • Problem: The useOpenAiSurface branch re-implements provider upsert logic (probe → replace stale → upsert with type=openai) instead of delegating to a shared helper. This duplicates the upsertProvider call pattern from the else branch, creating maintenance surface.
  • Impact: Future changes to upsert logic must be made in two places. Increases risk of divergence.
  • Recommended action: Factor the common upsert logic into a helper function that accepts providerType and baseUrl as parameters. Can be done in this PR or follow-up.
  • Expected follow-up: Resolve in this PR or explain why the risk is acceptable.
  • Verification: Compare the upsertProvider calls in the useOpenAiSurface branch (line ~220) vs the else branch (line ~235)
  • Missing regression test: N/A - refactoring, behavior unchanged
  • Done when: The risk is fixed or explicitly justified in the PR. Verification: Compare the upsertProvider calls in the useOpenAiSurface branch (line ~220) vs the else branch (line ~235).
  • Evidence: QUAL-1 signal from validation context; code inspection confirms duplication

PRA-7 Resolve/justify — Type assertions bridge nominal type mismatches in RemoteProviderDeps

PRA-8 Resolve/justify — Implementation file growth +34 lines (595→629) trending upward

  • Location: src/lib/onboard/machine/handlers/provider-inference.ts:172
  • Category: tests
  • Problem: The [Ubuntu 26.04][Onboard] Deep Agents (dcode) onboard via Anthropic-compatible provider writes config.toml base_url without /v1 — every dcode run fails with PermissionDeniedError #6294 coercion logic adds ~20 lines of resume-path handling in the main function. While not a current hotspot blocker, the file is growing and the coercion application on resume could be factored into a small helper.
  • Impact: Main function becoming harder to read; resume coercion logic mixed with other resume logic.
  • Recommended action: Extract the resume-path coercion logic (lines ~172-190) into a small helper function applyResumeCoercion(agent, initialPreferredInferenceApi, preferredInferenceApi). This is a suggestion, not a blocker.
  • Expected follow-up: Resolve in this PR or explain why the risk is acceptable.
  • Verification: Read provider-inference.ts lines 172-190 for the resume coercion block
  • Missing regression test: N/A
  • Done when: The risk is fixed or explicitly justified in the PR. Verification: Read provider-inference.ts lines 172-190 for the resume coercion block.
  • Evidence: Monolith delta from drift context: +34 lines, severity=none (warning only)

💡 In-scope improvements

These are lower-risk, not throwaway. Prefer fixing them in this PR when they are local to changed code; defer only with rationale or a linked follow-up.

PRA-9 Improvement — Workaround for OpenShell sandbox deletion lifecycle properly documented

  • Location: src/lib/onboard/sandbox-provider-cleanup.ts:90
  • Category: correctness
  • Problem: sandbox-provider-cleanup.ts is a localized workaround for OpenShell's sandbox deletion lifecycle (sandbox delete doesn't auto-detach providers). The file documents the source boundary and removal condition clearly: removable when OpenShell guarantees cascade delete or structured detach-on-delete signal. This follows the source-of-truth review pattern correctly.
  • Impact: Positive - the workaround is well-contained and documented with removal condition tracked in OpenShell.
  • Suggested action: No action needed. The workaround is well-documented with removal condition tracked in OpenShell.
  • Expected follow-up: Prefer a current-PR fix when local to changed code; defer only with rationale or linked follow-up.
  • Verification: Read sandbox-provider-cleanup.ts lines 60-95 for the source-of-truth comment
  • Missing regression test: Existing tests cover the detach/recovery flows; no additional test needed for the workaround itself
  • Done when: The local improvement is applied, or the PR notes why it should be deferred.
  • Evidence: Source-of-truth comment at sandbox-provider-cleanup.ts:60-95 documents invalid state, source boundary, source fix location, and removal condition
Simplification opportunities: 6 possible cuts, net -252 lines possible

These are safe simplification checks only. Do not remove validation, security controls, data-loss prevention, or required tests.

  • PRA-1 shrink (src/lib/onboard/machine/handlers/provider-inference.test.ts:1): Three test cases in describe('handleProviderInferenceState') for [Ubuntu 26.04][Onboard] Deep Agents (dcode) onboard via Anthropic-compatible provider writes config.toml base_url without /v1 — every dcode run fails with PermissionDeniedError #6294 resume coercion (approx lines 347-460)
    • Replacement: New file src/lib/onboard/machine/handlers/provider-inference-coercion.test.ts importing the same test utilities
    • Net: -113 lines
    • Safety boundary: Test behavior must remain identical; only file location changes
  • PRA-2 shrink (src/lib/inference/config.test.ts:1): Entire describe('coerceAgentInferenceApi') block with 7 test cases (approx lines 262-325)
    • Replacement: New file src/lib/inference/coerce-agent-inference-api.test.ts
    • Net: -61 lines
    • Safety boundary: All 7 coercion tests must pass; coerceAgentInferenceApi import path updated
  • PRA-3 shrink (src/lib/onboard/recovered-provider-reuse.test.ts:1): Three test cases in describe('assessRecoveredProviderCredentialReuse') for [Ubuntu 26.04][Onboard] Deep Agents (dcode) onboard via Anthropic-compatible provider writes config.toml base_url without /v1 — every dcode run fails with PermissionDeniedError #6294 (approx lines 185-265)
    • Replacement: Consolidate with extracted coercion tests or new file src/lib/onboard/recovered-provider-reuse-coercion.test.ts
    • Net: -53 lines
    • Safety boundary: All 3 recovery decision tests must pass
  • PRA-6 shrink (src/lib/onboard/inference-providers/remote.ts:170): Duplicated upsertProvider call and env construction in useOpenAiSurface branch (lines ~215-225)
    • Replacement: Shared helper function upsertWithType(provider, type, credentialEnv, baseUrl, env)
    • Net: -15 lines
    • Safety boundary: Both branches must continue to pass all existing tests; helper must handle both anthropic and openai types
  • PRA-7 native (src/lib/onboard/inference-providers/remote.ts:130): Type assertions: (readGatewayProviderMetadata as unknown as NonNullable<...>) and (deleteProviderWithRecovery as unknown as NonNullable<...>)
  • PRA-8 shrink (src/lib/onboard/machine/handlers/provider-inference.ts:172): Inline resume coercion logic (lines 172-190: healCoercedInferenceApi flag, forceInferenceSetup logic, comment block)
    • Replacement: Helper function applyResumeCoercion(agent, initialApi, currentApi) returning { coercedApi, forceSetup, healFlag }
    • Net: -10 lines
    • Safety boundary: Resume behavior for coerced vs non-coerced sessions must remain identical
Test follow-ups to resolve or justify

If these cover changed behavior, prefer adding them in this PR; otherwise state why existing coverage is enough or link the follow-up.

  • PRA-T1 Runtime validation — Add or identify targeted runtime/integration validation for the changed behavior: full fresh onboard of dcode with Anthropic-compatible endpoint verifying config.toml base_url and successful dcode task execution. PR changes sandbox config generation (config.toml base_url) and gateway provider registration (type=openai vs type=anthropic) — runtime/sandbox/infrastructure paths need behavioral runtime validation. Unit tests cover logic but E2E verification of the full chain (agent manifest → coercion → config.toml → gateway registration → inference call) is recommended.
  • PRA-T2 Runtime validation — Keyless coerced provider reuse integration test with real gateway provider (PRA-4). PR changes sandbox config generation (config.toml base_url) and gateway provider registration (type=openai vs type=anthropic) — runtime/sandbox/infrastructure paths need behavioral runtime validation. Unit tests cover logic but E2E verification of the full chain (agent manifest → coercion → config.toml → gateway registration → inference call) is recommended.
  • PRA-T3 Runtime validation — Partial provider replacement failure negative test (PRA-6). PR changes sandbox config generation (config.toml base_url) and gateway provider registration (type=openai vs type=anthropic) — runtime/sandbox/infrastructure paths need behavioral runtime validation. Unit tests cover logic but E2E verification of the full chain (agent manifest → coercion → config.toml → gateway registration → inference call) is recommended.
  • PRA-T4 Missing negative test for partial provider replacement failure (PRA-6) — Add a test in test/onboard-anthropic-compatible-openai-agent.test.ts that mocks provider delete = success, provider create = failure, and verifies the error is actionable and no partial state persists.
  • PRA-T5 Implementation file growth +34 lines (595→629) trending upward — Extract the resume-path coercion logic (lines ~172-190) into a small helper function applyResumeCoercion(agent, initialPreferredInferenceApi, preferredInferenceApi). This is a suggestion, not a blocker.
Since last review details

Current findings, using the urgency labels above:

PRA-1 Required — Test file monolith growth +113 lines (886→999) requires extraction

  • Location: src/lib/onboard/machine/handlers/provider-inference.test.ts:1
  • Category: architecture
  • Problem: The file grew by 113 lines due to 3 new [Ubuntu 26.04][Onboard] Deep Agents (dcode) onboard via Anthropic-compatible provider writes config.toml base_url without /v1 — every dcode run fails with PermissionDeniedError #6294 coercion resume tests (coerced heal, heal re-arm, native agent passthrough). This exceeds the 20-line monolith growth threshold and blocks merge per policy.
  • Impact: Merge blocked until test file growth is extracted or offset. The 3 new tests are cohesive and can be moved to a separate file.
  • Required action: Extract the 3 [Ubuntu 26.04][Onboard] Deep Agents (dcode) onboard via Anthropic-compatible provider writes config.toml base_url without /v1 — every dcode run fails with PermissionDeniedError #6294 coercion resume tests (lines ~347-460) into src/lib/onboard/machine/handlers/provider-inference-coercion.test.ts
  • Expected follow-up: Fix before merge or get explicit maintainer override.
  • Verification: Count lines in provider-inference.test.ts and locate the 3 new test blocks: 'coerces a resumed anthropic-messages seed for an OpenAI-only agent', 're-arms the heal when the forced inference setup does not complete', 'keeps a resumed anthropic-messages seed for agents that speak Anthropic natively'
  • Missing regression test: N/A - this is a test architecture issue; the tests themselves are the regression coverage
  • Done when: The required change is committed and verification passes: Count lines in provider-inference.test.ts and locate the 3 new test blocks: 'coerces a resumed anthropic-messages seed for an OpenAI-only agent', 're-arms the heal when the forced inference setup does not complete', 'keeps a resumed anthropic-messages seed for agents that speak Anthropic natively'.
  • Evidence: Monolith delta from drift context: +113 lines, severity=blocker

PRA-2 Required — Test file monolith growth +61 lines (473→534) requires extraction

  • Location: src/lib/inference/config.test.ts:1
  • Category: architecture
  • Problem: The file grew by 61 lines due to new describe('coerceAgentInferenceApi') block with 7 tests. This exceeds the 20-line threshold.
  • Impact: Merge blocked until test file growth is extracted. The coercion tests are a cohesive unit.
  • Required action: Extract the describe('coerceAgentInferenceApi') block (lines ~262-325) into src/lib/inference/coerce-agent-inference-api.test.ts
  • Expected follow-up: Fix before merge or get explicit maintainer override.
  • Verification: Count lines in config.test.ts and locate the coerceAgentInferenceApi describe block starting around line 262
  • Missing regression test: N/A - test architecture issue
  • Done when: The required change is committed and verification passes: Count lines in config.test.ts and locate the coerceAgentInferenceApi describe block starting around line 262.
  • Evidence: Monolith delta from drift context: +61 lines, severity=blocker

PRA-3 Required — Test file monolith growth +53 lines (430→483) requires extraction

PRA-4 Required — Missing integration test for keyless coerced provider recovery (PRA-4)

  • Location: test/onboard-anthropic-compatible-openai-agent.test.ts:200
  • Category: acceptance
  • Problem: Previous review PRA-4 requested an integration test for recovery of coerced provider with keyless gateway-credential reuse: fresh onboard → resume with provider get=success, readGatewayProviderMetadata=type=openai. Current test 'skips the surface probe on keyless gateway-credential reuse' mocks the entire openshell layer and does not exercise the real reuse gate (assessRecoveredProviderCredentialReuse → resolveRecoveredProviderCredentialReuse).
  • Impact: Without a true integration test, the keyless reuse path for coerced providers lacks end-to-end verification that the reuse gate accepts the OpenAI-surface identity and skips the probe.
  • Required action: Add an integration test in test/onboard-anthropic-compatible-openai-agent.test.ts that: 1) Creates a real gateway provider registered as type=openai for compatible-anthropic-endpoint, 2) Simulates resume with keyless reuse (no host credential), 3) Verifies the reuse gate accepts the OpenAI-surface identity and skips the probe. Extend the existing harness to register a real provider first.
  • Expected follow-up: Fix before merge or get explicit maintainer override.
  • Verification: Check test/onboard-anthropic-compatible-openai-agent.test.ts for any test that creates a real gateway provider (not mocked) before the reuse scenario
  • Missing regression test: Integration test for keyless recovery of coerced provider with OpenAI-surface gateway identity (real openshell provider registration)
  • Done when: The required change is committed and verification passes: Check test/onboard-anthropic-compatible-openai-agent.test.ts for any test that creates a real gateway provider (not mocked) before the reuse scenario.
  • Evidence: Prior review PRA-4 marked 'Resolve/justify'; unit test exists but mocks entire openshell layer; security Category 8 WARNING for this gap

PRA-5 Required — Missing negative test for partial provider replacement failure (PRA-6)

  • Location: src/lib/inference/config.test.ts:384
  • Category: tests
  • Problem: Previous review PRA-6 requested a test where provider delete succeeds but provider create fails, verifying the error is actionable and no partial state persists. This tests the replaceStaleAnthropicProviderForOpenAiSurface error path where deleteGatewayProvider succeeds but upsertProvider fails.
  • Impact: Error path for partial replacement failure is untested. Could leave sandbox in inconsistent state if create fails after successful delete.
  • Required action: Add a test in test/onboard-anthropic-compatible-openai-agent.test.ts that mocks provider delete = success, provider create = failure, and verifies the error is actionable and no partial state persists.
  • Expected follow-up: Fix before merge or get explicit maintainer override.
  • Verification: Check test/onboard-anthropic-compatible-openai-agent.test.ts for any test mocking deleteGatewayProvider=ok and upsertProvider=failure
  • Missing regression test: Negative test for partial provider replacement failure (delete succeeds, create fails) in the [Ubuntu 26.04][Onboard] Deep Agents (dcode) onboard via Anthropic-compatible provider writes config.toml base_url without /v1 — every dcode run fails with PermissionDeniedError #6294 coercion path
  • Done when: The required change is committed and verification passes: Check test/onboard-anthropic-compatible-openai-agent.test.ts for any test mocking deleteGatewayProvider=ok and upsertProvider=failure.
  • Evidence: Prior review PRA-6 marked 'Improvement'; no such test exists in current test suite

PRA-6 Resolve/justify — Duplicated upsertProvider logic in useOpenAiSurface branch

  • Location: src/lib/onboard/inference-providers/remote.ts:170
  • Category: correctness
  • Problem: The useOpenAiSurface branch re-implements provider upsert logic (probe → replace stale → upsert with type=openai) instead of delegating to a shared helper. This duplicates the upsertProvider call pattern from the else branch, creating maintenance surface.
  • Impact: Future changes to upsert logic must be made in two places. Increases risk of divergence.
  • Recommended action: Factor the common upsert logic into a helper function that accepts providerType and baseUrl as parameters. Can be done in this PR or follow-up.
  • Expected follow-up: Resolve in this PR or explain why the risk is acceptable.
  • Verification: Compare the upsertProvider calls in the useOpenAiSurface branch (line ~220) vs the else branch (line ~235)
  • Missing regression test: N/A - refactoring, behavior unchanged
  • Done when: The risk is fixed or explicitly justified in the PR. Verification: Compare the upsertProvider calls in the useOpenAiSurface branch (line ~220) vs the else branch (line ~235).
  • Evidence: QUAL-1 signal from validation context; code inspection confirms duplication

PRA-7 Resolve/justify — Type assertions bridge nominal type mismatches in RemoteProviderDeps

PRA-8 Resolve/justify — Implementation file growth +34 lines (595→629) trending upward

  • Location: src/lib/onboard/machine/handlers/provider-inference.ts:172
  • Category: tests
  • Problem: The [Ubuntu 26.04][Onboard] Deep Agents (dcode) onboard via Anthropic-compatible provider writes config.toml base_url without /v1 — every dcode run fails with PermissionDeniedError #6294 coercion logic adds ~20 lines of resume-path handling in the main function. While not a current hotspot blocker, the file is growing and the coercion application on resume could be factored into a small helper.
  • Impact: Main function becoming harder to read; resume coercion logic mixed with other resume logic.
  • Recommended action: Extract the resume-path coercion logic (lines ~172-190) into a small helper function applyResumeCoercion(agent, initialPreferredInferenceApi, preferredInferenceApi). This is a suggestion, not a blocker.
  • Expected follow-up: Resolve in this PR or explain why the risk is acceptable.
  • Verification: Read provider-inference.ts lines 172-190 for the resume coercion block
  • Missing regression test: N/A
  • Done when: The risk is fixed or explicitly justified in the PR. Verification: Read provider-inference.ts lines 172-190 for the resume coercion block.
  • Evidence: Monolith delta from drift context: +34 lines, severity=none (warning only)

PRA-9 Improvement — Workaround for OpenShell sandbox deletion lifecycle properly documented

  • Location: src/lib/onboard/sandbox-provider-cleanup.ts:90
  • Category: correctness
  • Problem: sandbox-provider-cleanup.ts is a localized workaround for OpenShell's sandbox deletion lifecycle (sandbox delete doesn't auto-detach providers). The file documents the source boundary and removal condition clearly: removable when OpenShell guarantees cascade delete or structured detach-on-delete signal. This follows the source-of-truth review pattern correctly.
  • Impact: Positive - the workaround is well-contained and documented with removal condition tracked in OpenShell.
  • Suggested action: No action needed. The workaround is well-documented with removal condition tracked in OpenShell.
  • Expected follow-up: Prefer a current-PR fix when local to changed code; defer only with rationale or linked follow-up.
  • Verification: Read sandbox-provider-cleanup.ts lines 60-95 for the source-of-truth comment
  • Missing regression test: Existing tests cover the detach/recovery flows; no additional test needed for the workaround itself
  • Done when: The local improvement is applied, or the PR notes why it should be deferred.
  • Evidence: Source-of-truth comment at sandbox-provider-cleanup.ts:60-95 documents invalid state, source boundary, source fix location, and removal condition

Workflow run details

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.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/lib/onboard.ts (1)

4141-4154: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Fresh-onboard integration point lacks direct test coverage.

The PR adds tests for the coerceAgentInferenceApi helper (config.test.ts) and the resume bridge (provider-inference.test.ts), but no test appears to exercise setupNim's own wiring of the coercion for a openai_compatible agent on the fresh path. As per path instructions ("When updating behavior across onboarding “fresh” vs “resume” paths, use targeted mechanical changes rather than broad refactors, and add/extend tests near the helper/handler you changed"), consider adding a focused test asserting setupNim(...).preferredInferenceApi is coerced for this scenario, mirroring the resume-path tests already added.

#!/bin/bash
# Description: Check whether an existing test already covers setupNim's coercion wiring.
fd -e test.ts -e test.mts . src/lib | xargs rg -l "setupNim" 
rg -n "setupNim" src/lib/onboard.test.ts 2>/dev/null | head -30
🤖 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/onboard.ts` around lines 4141 - 4154, The fresh onboarding path in
setupNim is missing direct test coverage for preferredInferenceApi coercion. Add
a focused test near setupNim in onboard tests that exercises an
openai_compatible agent on the fresh path and asserts
setupNim(...).preferredInferenceApi is coerced via
inferenceConfig.coerceAgentInferenceApi, mirroring the resume-path coverage
already added.

Source: Path instructions

🤖 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/onboard/machine/handlers/provider-inference.ts`:
- Around line 245-250: Persist the coerced inference API for resumed sessions,
because `preferredInferenceApi` is currently only updated in memory in
`onboard/machine/handlers/provider-inference.ts` and never written back to
session state. Update the resume path around `coerceAgentInferenceApi` and the
subsequent `provider_selection`/`inference` persistence so
`session.preferredInferenceApi` is saved after coercion. Make sure
`resolveRuntimeInferenceApi()` sees the stored value, not the stale pre-resume
one, when later config is generated.

---

Outside diff comments:
In `@src/lib/onboard.ts`:
- Around line 4141-4154: The fresh onboarding path in setupNim is missing direct
test coverage for preferredInferenceApi coercion. Add a focused test near
setupNim in onboard tests that exercises an openai_compatible agent on the fresh
path and asserts setupNim(...).preferredInferenceApi is coerced via
inferenceConfig.coerceAgentInferenceApi, mirroring the resume-path coverage
already added.
🪄 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: ec886770-b313-49cb-bfc3-aca84a37afa8

📥 Commits

Reviewing files that changed from the base of the PR and between f0d2549 and 30c242d.

📒 Files selected for processing (5)
  • src/lib/inference/config.test.ts
  • src/lib/inference/config.ts
  • src/lib/onboard.ts
  • src/lib/onboard/machine/handlers/provider-inference.test.ts
  • src/lib/onboard/machine/handlers/provider-inference.ts

Comment thread src/lib/onboard/machine/handlers/provider-inference.ts
@github-actions

github-actions Bot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

E2E Target Results — ✅ All selected jobs passed

Run: 28772424828
Workflow ref: fix/6294-dcode-anthropic-base-url-v1
Requested targets: ubuntu-repo-cloud-langchain-deepagents-code
Requested jobs: (default — all default-enabled free-standing jobs; explicit-only jobs openshell-gateway-auth-contract, mcp-bridge-dev, hermes-gpu-startup, sandbox-rlimits-connect, and jetson-nvmap-gpu are skipped unless selected)
Summary: 1 passed, 0 failed, 0 cancelled, 0 skipped

Job Result
live ✅ success

@github-actions

github-actions Bot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

E2E Target Results — ✅ All requested jobs passed

Run: 28772422788
Workflow ref: fix/6294-dcode-anthropic-base-url-v1
Requested targets: (default — all supported)
Requested jobs: onboard-resume,onboard-repair
Summary: 2 passed, 0 failed, 0 cancelled, 0 skipped

Job Result
onboard-repair ✅ success
onboard-resume ✅ success

Dongni-Yang and others added 2 commits July 6, 2026 14:38
The resume-seed coercion kept the corrected openai-completions value in
memory only: on a plain resume the provider_selection step write is
skipped, so session.preferredInferenceApi stayed anthropic-messages and
later readers such as resolveRuntimeInferenceApi kept feeding the stale
value into config generation. Re-record the provider selection when the
coercion changed the persisted seed, reusing the existing step write; an
unchanged seed keeps the plain-resume shortcut with no extra write.

Refs #6294

Signed-off-by: Dongni Yang <dongniy@nvidia.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add an integration-style test that wires the real fresh-onboard chain for
issue #6294: the langchain-deepagents-code manifest loader, the
anthropic-messages coercion, getSandboxInferenceConfig's managed route,
and the actual config generator subprocess — asserting the baked
config.toml carries base_url "https://inference.local/v1" with the
inference/openai-completions route metadata (PRA-1).

Also refresh the platform-matrix citation into
src/lib/inference/config.test.ts, which the new #6294 tests shifted by
one line, and regenerate the synced docs tables.

Refs #6294

Signed-off-by: Dongni Yang <dongniy@nvidia.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@github-actions

github-actions Bot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

@Dongni-Yang

Copy link
Copy Markdown
Contributor Author

PRA-1 / test follow-ups — resolution

PRA-1 (runtime validation for the fresh dcode Anthropic-compatible path):

  1. Targeted integration-style test added (8e2198a): test/langchain-deepagents-code-config.test.ts now wires the real fresh-onboard chain — the actual langchain-deepagents-code manifest via loadAgent(), the anthropic-messages probe-result coercion, getSandboxInferenceConfig()'s managed route, and the actual config generator subprocess — and asserts the baked .deepagents/config.toml contains exactly the PRA-1 minimum: base_url = "https://inference.local/v1" plus the inference / openai-completions managed-route metadata. It also encodes the pre-fix failure shape (un-coerced anthropic-messageshttps://inference.local, no /v1) as a contrast assertion.

  2. Live runtime validation dispatched per the E2E target advisor (all three required items):

    Both were dispatched with pr_number=6298, so selective-dispatch scorecards will post back here.

CodeRabbit (persist coerced value on resume): fixed in 3a08e8b — the resume branch re-records provider_selection when the seed coercion changed the persisted value, so session.preferredInferenceApi self-heals and resolveRuntimeInferenceApi() no longer reads the stale anthropic-messages.

cli-test-shards (5) failure: root-caused and fixed in 8e2198a — the new #6294 tests shifted src/lib/inference/config.test.ts line numbers, invalidating the ci/platform-matrix.json citation (config.test.ts:119:120); citation updated and the synced docs tables regenerated (test/generate-platform-docs.test.ts 18/18 locally).

Advisor-noted coverage gap (follow-up): no live E2E target exists today for exactly openai_compatible agent + compatible-anthropic-endpoint; the advisor suggests adding one covering fresh onboard and --resume/rebuild. Happy to file a follow-up issue for the new target after this PR lands.

Signed-off-by: Dongni Yang dongniy@nvidia.com

@Dongni-Yang

Copy link
Copy Markdown
Contributor Author

PRA-2 — acknowledged as justified

Finding: src/lib/inference/config.test.ts grew 473 → 528 lines (+55).

Justification (per the finding's own required action): the growth is exactly the regression coverage for the #6294 fix — a new describe("coerceAgentInferenceApi") block exercising the full agent-type matrix (OpenAI-only coerced; OpenClaw gateway_managed and Hermes custom untouched; null/absent-agent and null-API pass-throughs) plus one route-level test asserting the coerced value keeps INFERENCE_ROUTE_URL (/v1) through getSandboxInferenceConfig. The tests are co-located with the helper they cover; no extraction warranted at this size.

Verification: git diff main...HEAD -- src/lib/inference/config.test.ts | wc -l → 80 (diff lines incl. context; net file delta +55, 473→528). The repo's Test file size budget pre-commit hook passes on the file.

No code change required; recording this as the explicit justification for the merge gate.

Signed-off-by: Dongni Yang dongniy@nvidia.com

The coerceAgentInferenceApi comment attributed the pre-fix 403 to the
egress policy and implied the coercion fully restores the route. The
OpenShell sandbox L7 proxy's fixed /v1 path patterns produce that 403,
and the coercion fixes the sandbox-side wiring only — the gateway
provider is still registered type=anthropic, whose route accepts only
the anthropic_messages protocol. State both accurately so the remaining
gateway-side work on #6294 is visible from the code.

Refs #6294

Signed-off-by: Dongni Yang <dongniy@nvidia.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@Dongni-Yang

Copy link
Copy Markdown
Contributor Author

Scope correction: FixesRefs #6294 (gateway-layer gap found)

While verifying the exact repro end-to-end, I traced the OpenShell side (verified against current OpenShell main, not just a local checkout) and found this PR resolves the issue's config expectation but not the full runtime repro:

What this PR proves fixedconfig.toml base_url ends with /v1 with inference/openai-completions route metadata (the issue's step-2 expected result), for fresh onboards, resumes, and rebuilds. Executed locally through the real chain: dcode manifest → coercion → patchStagedDockerfile on the real dcode Dockerfile → real generate-config.tsbase_url = "https://inference.local/v1".

What remains — the pre-fix 403 was OpenShell's sandbox L7 proxy rejecting /chat/completions because it matches no known /v1 inference pattern (crates/openshell-sandbox/src/l7/inference.rs fixed pattern set; not the NemoClaw egress YAML, which allows /** on inference.local). Post-fix, /v1/chat/completions maps to the openai_chat_completions protocol — but the gateway provider for compatible-anthropic-endpoint is registered --type anthropic, and ANTHROPIC_PROTOCOLS = ["anthropic_messages", "model_discovery"] (crates/openshell-core/src/inference.rs) doesn't include it. No OpenAI↔Anthropic translation exists in the OpenShell workspace, so the router returns 400 no compatible inference route available. dcode still fails — with a truthful route error instead of the misleading PermissionDeniedError, but it fails.

(This also explains why only dcode was broken on this provider: OpenClaw/Hermes speak /v1/messages natively, which the anthropic route accepts and path-passes-through.)

Options for the remaining gap (follow-up scope, likely maintainer decision):

  1. OpenShell feature: accept openai_chat_completions on anthropic routes with body translation (mirrors what the Bedrock adapter does host-side).
  2. NemoClaw-side: for openai_compatible agents on anthropicCompatible, additionally probe the endpoint's OpenAI surface; if it serves /v1/chat/completions (the repro's Inference Hub does — the same hub works via the openai-type onboard), register the gateway provider as type=openai. If not, fail onboarding with an actionable error instead of producing a sandbox that can't infer.
  3. Minimal: onboarding rejection only — refuse openai_compatible agent + anthropic-messages-only endpoint with a clear message.

I've updated the PR body accordingly (Refs #6294, scope note) and corrected the code comment (789b79b) so the sandbox-side-only scope is visible from the code. Happy to file the follow-up issue and/or take option 2 as a next PR — maintainer preference welcome.

Signed-off-by: Dongni Yang dongniy@nvidia.com

…outes

The #6294 coercion fixed the sandbox-side config, but the gateway provider
for compatible-anthropic-endpoint was still registered type=anthropic,
whose OpenShell route serves only the anthropic_messages protocol — so a
Deep Agents sandbox's /v1/chat/completions requests were rejected with
400 no-compatible-route instead of the old 403.

Thread the coerced inference API through setupInference into the remote
provider registration. When it resolves openai-completions for
compatible-anthropic-endpoint (only the openai_compatible-agent coercion
produces that combination; Bedrock short-circuits earlier), the branch:

- probes the endpoint's OpenAI surface on <origin>/v1 with the same Bearer
  credential the gateway will use — the anthropic-flavor normalization
  strips a trailing /v1 while OpenShell appends the /v1 protocol path with
  dedup, so re-adding the suffix keeps the probe and the runtime route on
  the identical URL; endpoints that answer only the Anthropic Messages API
  fail onboarding with an actionable message instead of a sandbox that
  cannot infer,
- replaces a stale anthropic-type registration (provider update cannot
  change --type), failing closed when the provider is attached to other
  live sandboxes so their Anthropic routing is never silently broken, and
- registers type=openai so the route carries openai_chat_completions.

Resumed pre-fix sessions self-heal: the coerced seed forces one inference
setup pass, and the coerced value is persisted only after that setup
succeeds, so a failed heal (e.g. keyless resume) re-arms on the next
attempt instead of stranding the sandbox. The keyless credential-reuse
identity gate now expects the OpenAI surface for coerced routes (Bedrock
endpoints excluded) and names the export needed to heal when it rejects a
stale Anthropic-surface registration.

Fixes #6294

Signed-off-by: Dongni Yang <dongniy@nvidia.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@Dongni-Yang

Copy link
Copy Markdown
Contributor Author

Gateway-layer gap closed — back to Fixes #6294 (supersedes my scope-correction comment above)

Commit 8b743f9 extends the PR with the gateway-side half, so the full repro now resolves end to end:

What was missing: the sandbox config fix alone left the gateway provider registered --type anthropic, whose OpenShell route serves only anthropic_messages — dcode's /v1/chat/completions got 400 no-compatible-route.

What the extension does (all in budget-exempt dirs; onboard.ts untouched):

  1. Threads the coerced inference API into the remote-provider registration; the coerced combination (compatible-anthropic-endpoint + openai-completions, non-Bedrock) registers --type openai so the route carries openai_chat_completions.
  2. Probe-before-register on the exact runtime URL: the anthropic-flavor normalization strips a trailing /v1 while OpenShell appends the /v1 protocol path with dedup — the branch re-adds the suffix so the pre-registration probe (<origin>/v1, Bearer, same credential binding) exercises the identical URL the gateway will call. Anthropic-only endpoints fail onboarding with an actionable message.
  3. Contained type flip: a stale anthropic-type registration is replaced (provider update can't change --type), but only when its attachments belong to the onboarding sandbox — if other live sandboxes share the provider, onboarding fails closed with a named-sandbox message instead of silently breaking their Anthropic routing.
  4. Self-healing resumes that re-arm: pre-fix sessions force one inference-setup pass; the coerced value is persisted only after success, so a failed heal (e.g. keyless resume) re-arms next time instead of stranding the sandbox. The keyless reuse gate expects the OpenAI surface for coerced routes (Bedrock excluded) and names the exact export needed to heal.

Verification: 3-skeptic adversarial review against both this repo and the OpenShell source found two blockers pre-push (the /v1 probe/runtime URL divergence, and a persist-before-heal dead-end) plus a shared-provider blast-radius issue — all three are fixed in this commit with dedicated regression tests. 176/176 across the 9 affected suites, typecheck:cli clean. Advisor-required live E2E re-dispatched against this head:

PR body updated: RefsFixes #6294 with the full-fix scope.

Signed-off-by: Dongni Yang dongniy@nvidia.com

The test-conditionals gate rejects if statements added to changed test
files. Replace the branching openshell stub runners with a declarative
lookup-table helper keyed on the first two argv tokens.

Refs #6294

Signed-off-by: Dongni Yang <dongniy@nvidia.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@github-actions

github-actions Bot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

E2E Target Results — ✅ All selected jobs passed

Run: 28778686708
Workflow ref: fix/6294-dcode-anthropic-base-url-v1
Requested targets: ubuntu-repo-cloud-langchain-deepagents-code
Requested jobs: (default — all default-enabled free-standing jobs; explicit-only jobs openshell-gateway-auth-contract, mcp-bridge-dev, hermes-gpu-startup, sandbox-rlimits-connect, and jetson-nvmap-gpu are skipped unless selected)
Summary: 1 passed, 0 failed, 0 cancelled, 0 skipped

Job Result
live ✅ success

@github-actions

github-actions Bot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

E2E Target Results — ✅ All requested jobs passed

Run: 28778671576
Workflow ref: fix/6294-dcode-anthropic-base-url-v1
Requested targets: (default — all supported)
Requested jobs: onboard-resume,onboard-repair
Summary: 2 passed, 0 failed, 0 cancelled, 0 skipped

Job Result
onboard-repair ✅ success
onboard-resume ✅ success

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/lib/onboard/machine/handlers/provider-inference.ts (1)

277-297: 🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift

Delay provider_selection persistence until the heal succeeds src/lib/onboard/machine/handlers/provider-inference.ts:287-408

In the authoritative rebuild path, the coerced preferredInferenceApi is written with provider_selection before the forced inference setup runs. If that setup fails or is aborted, a later resume will see the already-coerced seed and won’t re-arm the refresh, while the route check only looks at provider/model. Keep this write behind the successful inference step, or gate it the same way as the heal 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/onboard/machine/handlers/provider-inference.ts` around lines 277 -
297, The authoritative rebuild path in provider-inference.ts is persisting the
coerced preferredInferenceApi to provider_selection too early, before the forced
inference setup/heal succeeds. Move or gate the provider_selection write so it
only happens after the inference step completes successfully, matching the heal
path behavior in provider-inference and preserving re-arm on failed or aborted
resumes.

Source: Path instructions

🤖 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.

Outside diff comments:
In `@src/lib/onboard/machine/handlers/provider-inference.ts`:
- Around line 277-297: The authoritative rebuild path in provider-inference.ts
is persisting the coerced preferredInferenceApi to provider_selection too early,
before the forced inference setup/heal succeeds. Move or gate the
provider_selection write so it only happens after the inference step completes
successfully, matching the heal path behavior in provider-inference and
preserving re-arm on failed or aborted resumes.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 85add59a-c9d7-4b7b-b16d-5cc1048828a8

📥 Commits

Reviewing files that changed from the base of the PR and between 789b79b and 457fb42.

📒 Files selected for processing (8)
  • src/lib/onboard/inference-providers/remote.ts
  • src/lib/onboard/inference-providers/types.ts
  • src/lib/onboard/machine/handlers/provider-inference.test.ts
  • src/lib/onboard/machine/handlers/provider-inference.ts
  • src/lib/onboard/recovered-provider-reuse.test.ts
  • src/lib/onboard/recovered-provider-reuse.ts
  • src/lib/onboard/setup-inference.ts
  • test/onboard-anthropic-compatible-openai-agent.test.ts

@prekshivyas prekshivyas self-assigned this Jul 6, 2026
…et (#6298)

Address PR-advisor items on the #6294 dcode Anthropic-base-url fix.

PRA-2 (security): deleteProviderWithRecovery gains an allowedSandboxes
option. When supplied, the parsed attachment list is revalidated against
the authorized set before any detach and fails closed if a sandbox
outside the set appears, so a stale/racing/mis-parsed diagnostic cannot
force-detach an unrelated sandbox. The stale-provider replacement path is
extracted into replaceStaleAnthropicProviderForOpenAiSurface, which
passes the confirmed sandbox as the sole authorized entry and refuses
force-detach recovery entirely when no target sandbox is confirmed
(sandboxName === null), surfacing an actionable error instead.

PRA-2/acceptance: add source-of-truth review JSDoc to
coerceAgentInferenceApi documenting the invalid state, source boundary,
gateway-side real fix (#6294), regression tests, and removal condition.

PRA-3 (tests): cover the no-provider_type no-coerce case and the
allowed-set force-detach / fail-closed recovery paths.

Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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/sandbox-provider-cleanup.test.ts`:
- Line 440: Update the affected root-level integration test titles in
sandbox-provider-cleanup.test.ts so they end with the required local issue
reference suffix. Rename the behavior-oriented titles in the relevant it()
blocks to include a trailing “(`#1234`)” while keeping the existing behavior
description intact, and apply the same change to the other affected title
mentioned in the review.
🪄 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: 72103ed3-f57f-4ea6-9070-f6e3b6dcb838

📥 Commits

Reviewing files that changed from the base of the PR and between 457fb42 and 31ab337.

📒 Files selected for processing (6)
  • src/lib/inference/config.test.ts
  • src/lib/inference/config.ts
  • src/lib/onboard/inference-providers/remote.ts
  • src/lib/onboard/inference-providers/types.ts
  • src/lib/onboard/sandbox-provider-cleanup.ts
  • test/sandbox-provider-cleanup.test.ts
🚧 Files skipped from review as they are similar to previous changes (4)
  • src/lib/inference/config.ts
  • src/lib/onboard/inference-providers/types.ts
  • src/lib/inference/config.test.ts
  • src/lib/onboard/inference-providers/remote.ts

]);
});

it("force-detaches when every attached sandbox is inside the allowed set", () => {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick win

Test titles missing local issue-ref suffix.

Both new test titles are behavior-oriented but don't include a trailing (#1234) issue reference.

As per coding guidelines, "Root-level integration tests under test/ should import source code, use ESM imports, and use behavior-oriented titles with local issue refs in a final (#1234) suffix."

Also applies to: 467-467

🤖 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 `@test/sandbox-provider-cleanup.test.ts` at line 440, Update the affected
root-level integration test titles in sandbox-provider-cleanup.test.ts so they
end with the required local issue reference suffix. Rename the behavior-oriented
titles in the relevant it() blocks to include a trailing “(`#1234`)” while keeping
the existing behavior description intact, and apply the same change to the other
affected title mentioned in the review.

Source: Coding guidelines

@prekshivyas prekshivyas left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approving on current head 31ab337. The security fix from PR review is landed — deleteProviderWithRecovery is now constrained by an allowedSandboxes allowlist (default = confirmed sandbox, fail-closed if null), and replaceStaleAnthropicProviderForOpenAiSurface is extracted with the reuse-gate JSDoc. All required CI is green. The advisor's two remaining Required items (PRA-4 keyless-recovery integration test, PRA-5/6 delete-ok/create-fail negative test) are non-binding test-coverage additions, not correctness gaps; a follow-up can add them. Signed-off-by: Prekshi Vyas prekshiv@nvidia.com

@cv
cv merged commit 022c394 into main Jul 6, 2026
47 checks passed
@cv
cv deleted the fix/6294-dcode-anthropic-base-url-v1 branch July 6, 2026 17:14
cv pushed a commit that referenced this pull request Jul 6, 2026
## Summary

Fix Hermes custom Anthropic routing by using the endpoint's verified
OpenAI Chat Completions surface end to end. NemoClaw selects
`https://inference.local/v1`, verifies `/v1/chat/completions`, and
aligns the OpenShell provider to `type=openai` with `OPENAI_BASE_URL`,
avoiding the duplicate Anthropic SSE `message_start` sequence that
caused `hermes -z` to finish with `no final response`.

The core managed-frontend direction was first proposed by @chengjiew in
#6295, and Chengjie Wang is included as a commit co-author.
@TonyLuo-NV's #6297 contributed streaming-failure investigation and
regression analysis. Thanks to @hulynn for the reproducible
managed-proxy report.

## Related Issue

Fixes #6289

## Changes

- Resolve Hermes `compatible-anthropic-endpoint` routes to the managed
`openai-completions` frontend and reuse #6298's verified OpenAI-surface
provider registration while retaining `COMPATIBLE_ANTHROPIC_API_KEY` as
the credential binding.
- Persist the normalized frontend during fresh onboarding; repair stale
provider identity, registry metadata, and sandbox configuration during
rebuild or resume.
- Reject conflicting explicit API choices and legacy `type=anthropic`
runtime switches before mutating OpenShell, registry, or in-sandbox
state.
- Preserve native Anthropic Messages routing for OpenClaw custom
endpoints and first-party Anthropic routes; preserve the existing AWS
Bedrock adapter behavior.
- Extend unit, integration, command-shape, and live E2E coverage,
including the reported `hermes -z` path; document the verified-surface
requirement and rebuild migration.

## Type of Change

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

## Quality Gates

- [x] Tests added or updated for changed behavior
- [ ] Existing tests cover changed behavior — justification:
- [ ] Tests not applicable — justification:
- [x] Docs updated for user-facing behavior changes
- [ ] Docs not applicable — justification:
- [x] Sensitive paths changed (security, policy, credentials, preflight,
onboarding, inference, runner, sandbox, or messaging)
- [x] Sensitive-path review completed or maintainer-approved waiver
recorded — reviewer/approval link/justification: independent final
review found no blockers. Endpoint probing and provider replacement
reuse the fail-closed #6298 boundary; this PR adds exact non-secret
provider identity checks and introduces no credential values. Human
maintainer approval remains required.
- [ ] Non-success, skipped, or missing CI check accepted by maintainer —
check name, approval link, and follow-up issue:

## Verification

- [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 — 289 CLI tests, 7 OpenAI-surface
onboarding integration tests, 1 focused Hermes config integration test,
and 18 E2E support tests passed
- [ ] Applicable broad gate passed — `npm test` for broad
runtime/test-harness changes; `npm run check` for repo-wide
validation/coverage changes — required GitHub Actions checks pending
- [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) —
completed with 0 errors and 2 existing Fern 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)

Additional local verification:

- `npm run build:cli`
- `npm run typecheck:cli`
- `npm run checks`
- `npm run test-size:check`
- `npm run test:titles:check`
- `npm run source-shape:check`
- `npm run test:projects:check`
- `npm run test:imports:check`
- `npm run docs` (0 errors; 2 existing warnings)

---
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>

---------

Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Signed-off-by: Chengjie Wang <chengjiew@nvidia.com>
Co-authored-by: Chengjie Wang <chengjiew@nvidia.com>
cv pushed a commit that referenced this pull request Jul 7, 2026
## Summary
Add the v0.0.75 release-notes entry for the release train, summarizing
the user-facing fixes merged since v0.0.74. Release-prep docs for the
`nemoclaw-maintainer-cut-release-tag` gate.

## Related Issue
Release prep for v0.0.75. Remove this section if none.

## Changes
- `docs/about/release-notes.mdx`: add the `## v0.0.75` section (themed
intro + grouped bullets with source-page links), matching the existing
v0.0.74 style.

### Source summary (doc-impacting PRs → doc page)
- #6370 -> `docs/about/release-notes.mdx`: prepared-backup recovery
restores gateway state and defers the live route check to onboarding, so
upgrade recovery no longer fails on an unset gateway route.
- #6305 -> `docs/about/release-notes.mdx`: in-place upgrades recover
gateway-orphaned sandboxes.
- #6332 -> `docs/about/release-notes.mdx`: same-name `--fresh`
re-onboard preserves fresh LangChain Deep Agents Code routing.
- #6335 -> `docs/about/release-notes.mdx`: custom Anthropic-compatible
inference uses the OpenAI frontend.
- #6298 -> `docs/about/release-notes.mdx`: OpenAI-only agents keep the
`/v1` base URL on Anthropic-compatible endpoints.
- #6304 -> `docs/about/release-notes.mdx`: local docker-driver gateway
credentials no longer expire.
- #6261 -> `docs/about/release-notes.mdx`: Hermes runtime and managed
MCP state reconcile after a runtime change.
- #6318 -> `docs/about/release-notes.mdx`: Hermes installs accept a
pinned base platform digest.
- #6291 -> `docs/about/release-notes.mdx`: OpenClaw local CLI pairing
restores its previous connection path.

Test-performance, CI, and chore commits since v0.0.74 are excluded as
non-user-facing.

## Type of Change
- [x] Doc only (prose changes, no code sample modifications)

## Quality Gates
- [x] Tests not applicable — justification: documentation-only change
(release notes prose).
- [x] Docs updated for user-facing behavior changes

## Verification
- [x] PR description includes the DCO sign-off declaration and every
commit appears as `Verified` in GitHub
- [x] `npm run docs` builds without warnings introduced by this change —
command/result: "Found 0 errors and 2 warnings" (the 2 warnings
pre-exist this change).
- [x] Doc pages follow the style guide (active voice, no numbered/colon
titles, correct NVIDIA/NemoClaw/OpenShell capitalization; skip-terms
avoided).
- [x] No secrets, API keys, or credentials committed

---
Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com>


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

* **Documentation**
* Added a new **v0.0.75** section to the release notes, highlighting
improved sandbox upgrade hardening and prepared-backup recovery, updated
inference routing for Anthropic-compatible endpoints, longer-lasting
local gateway credential handling, and restored CLI pairing reconnection
without re-pairing. Also includes cross-links to related NemoClaw CLI
and documentation pages.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
ericksoa added a commit that referenced this pull request Jul 7, 2026
<!-- markdownlint-disable MD041 -->
## Summary
<!-- 1-3 sentences: what this PR does and why. -->
Correct the v0.0.75 release-note entry merged in #6371 before the
release tag is cut.
This follow-up restores the omitted OpenClaw `2026.6.10` upgrade and
narrows three claims to the runtime contracts that actually shipped.

## Changes
<!-- Bullet list of key changes. -->
- #5595 -> `docs/about/release-notes.mdx`: add the bundled OpenClaw
`2026.6.10` upgrade and its reviewed package, pairing, and recovery
boundaries.
- #6370 -> `docs/about/release-notes.mdx`: state that authoritative
onboarding restores the gateway provider and inference route during
rebuild, before sandbox recreation.
- #6335 and #6298 -> `docs/about/release-notes.mdx`: scope the OpenAI
frontend to Hermes while retaining the separate OpenAI-only-agent
behavior.
- #6304 -> `docs/about/release-notes.mdx`: name the non-expiring local
Docker-driver sandbox JWT contract precisely and link its gateway-auth
review.

## Type of Change

- [ ] Code change (feature, bug fix, or refactor)
- [ ] Code change with doc updates
- [x] Doc only (prose changes, no code sample modifications)
- [ ] 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: prose-only release-note
corrections with no runtime behavior or code samples.
- [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; `npm run docs` passed with 0 errors and 2
pre-existing warnings.
- [ ] 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) —
result: 0 errors and 2 pre-existing warnings (missing authenticated
redirects check and existing light-theme accent contrast).
- [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: Aaron Erickson <aerickson@nvidia.com>


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

## Summary by CodeRabbit

* **Documentation**
* Updated the `v0.0.75` release notes with clearer wording and expanded
details.
* Added more specific notes about the runtime upgrade, sandbox recovery
behavior, and routing safeguards.
* Refined the description of inference routing behavior and local
Docker-driver sandbox authentication handling.
* Adjusted the linked references and final release-note wording for
consistency.

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

Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
@wscurran wscurran added area: inference Inference routing, serving, model selection, or outputs area: providers Inference provider integrations and provider behavior area: routing Request routing, policy routing, model selection, or fallback logic bug-fix PR fixes a bug or regression integration: dcode LangChain Deep Code integration behavior labels Jul 7, 2026
Hadar301 pushed a commit to Hadar301/NemoClaw-OpenShift that referenced this pull request Jul 12, 2026
…-compatible endpoints (NVIDIA#6298)

<!-- markdownlint-disable MD041 -->
## Summary
Onboarding a Deep Agents (`dcode` / `langchain-deepagents-code`) sandbox
with the Custom Anthropic-compatible provider resolved the probed
inference API to `anthropic-messages`, baking `config.toml` `base_url`
without the `/v1` suffix **and** registering a gateway provider whose
OpenShell route cannot serve dcode's OpenAI-protocol traffic. This PR
fixes both halves: agents whose manifest declares `provider_type:
openai_compatible` are coerced onto the managed `openai-completions`
route (config.toml keeps `base_url = "https://inference.local/v1"`), and
the gateway provider is registered `--type openai` on the endpoint's
verified `/v1` OpenAI surface so OpenShell routes
`openai_chat_completions` end to end. Endpoints that serve only the
Anthropic Messages API fail onboarding with an actionable error instead
of producing a sandbox that cannot infer.

## Related Issue
Fixes NVIDIA#6294

## Changes
**Sandbox-side route coercion**
- Add pure helper `coerceAgentInferenceApi()` in
`src/lib/inference/config.ts`: returns `openai-completions` when the
agent's manifest `provider_type` is `openai_compatible` and the resolved
API is `anthropic-messages`; pass-through otherwise. Applied at
`setupNim`'s return (net-neutral +1/−1 in `onboard.ts`) and at the
resumed session seed, so `config.toml` bakes `base_url =
"https://inference.local/v1"` with `inference`/`openai-completions`
metadata.
- OpenClaw (`gateway_managed`) and Hermes (`custom`) keep negotiating
Anthropic Messages natively; the Anthropic endpoint probe still
validates the real endpoint before the coercion applies.

**Gateway-side OpenAI-surface registration** (closes the runtime gap:
OpenShell routes protocols per provider *type* — anthropic-type routes
serve only `anthropic_messages`, and no OpenAI↔Anthropic translation
exists)
- Thread the coerced inference API through `setupInference` into
`setupRemoteProviderInference`; when it resolves `openai-completions`
for `compatible-anthropic-endpoint` (only the agent coercion produces
this; Bedrock short-circuits earlier), register the provider `--type
openai`.
- Probe the endpoint's OpenAI surface first, on `<origin>/v1` with the
same Bearer credential the gateway will use — the anthropic-flavor URL
normalization strips a trailing `/v1` while OpenShell appends the `/v1`
protocol path (with dedup), so re-adding the suffix keeps the probed URL
identical to the runtime URL. Anthropic-only endpoints fail onboarding
with an actionable message.
- Replace a stale anthropic-type registration (`provider update` cannot
change `--type`), failing closed with a named-sandbox message when the
provider is attached to *other* live sandboxes, so their Anthropic
routing is never silently broken.
- Resumed pre-fix sessions self-heal: the coerced seed forces one
inference-setup pass; the coerced value is persisted only after that
setup succeeds, so a failed heal (e.g. keyless resume) re-arms next time
instead of stranding the sandbox.
- The keyless credential-reuse identity gate expects the OpenAI surface
for coerced routes (Bedrock endpoints excluded, legacy behavior pinned
by test) and names the exact export needed to heal when rejecting a
stale registration.

**Test & CI hygiene**
- Integration test wiring the real fresh-onboard chain (real dcode
manifest → coercion → managed route → real config generator subprocess)
asserting the issue's expected `base_url`; registration tests covering
type=openai argv, the `/v1` surface, stale-flip containment (unattached
/ own-sandbox / foreign-sandbox), actionable probe failure,
native-Anthropic and keyless-reuse pass-throughs; resume heal/re-arm
tests; reuse-gate matrix.
- Refresh the `ci/platform-matrix.json` file:line citation shifted by
the new tests and regenerate the two synced docs tables (fixes the
earlier `cli-test-shards (5)` failure).

## Type of Change

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

## Quality Gates
- [x] Tests added or updated for changed behavior
- [ ] Existing tests cover changed behavior — justification:
- [ ] Tests not applicable — justification:
- [ ] Docs updated for user-facing behavior changes
- [x] Docs not applicable — justification: no user-facing behavior
contract change to document (the fix makes the documented Deep Agents +
Anthropic-compatible flow work); the two mdx table diffs are mechanical
regenerations of a `ci/platform-matrix.json` citation line-number
refresh via `scripts/generate-platform-docs.py`.
- [x] Sensitive paths changed (security, policy, credentials, preflight,
onboarding, inference, runner, sandbox, or messaging)
- [x] Sensitive-path review completed or maintainer-approved waiver
recorded — reviewer/approval link/justification: the coercion is a pure
function gated on the agent manifest `provider_type` and the exact
probed API value; the gateway registration switch is double-gated
(provider name + coerced API), verified against the endpoint's real
`/v1` OpenAI surface with the same credential binding before
registering, cannot loosen egress policy, and fails closed
(named-sandbox message) rather than force-detaching a provider other
live sandboxes use. Credential handling is unchanged (`--credential
COMPATIBLE_ANTHROPIC_API_KEY`, value never in argv).
OpenClaw/Hermes/Bedrock/nim/ollama/vllm paths verified untouched by
tests.
- [ ] Non-success, skipped, or missing CI check accepted by maintainer —
check name, approval link, and follow-up issue:

## Verification
- [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: `npx vitest run
test/onboard-anthropic-compatible-openai-agent.test.ts
src/lib/onboard/machine/handlers/provider-inference.test.ts
src/lib/onboard/recovered-provider-reuse.test.ts
src/lib/actions/sandbox/rebuild-provider-preflight.test.ts
test/onboard-inference-failure-paths.test.ts
src/lib/inference/config.test.ts
src/lib/onboard/setup-nim-selection.test.ts
test/langchain-deepagents-code-config.test.ts
test/generate-platform-docs.test.ts` → 9 files, 176/176 passed; `npm run
typecheck:cli` → clean. Advisor-required live E2E green on the
config-fix head: `onboard-resume`, `onboard-repair` (run 28772422788),
`ubuntu-repo-cloud-langchain-deepagents-code` (run 28772424828);
re-dispatched against the current head (see PR comments for scorecards).
- [ ] 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
- [x] `npm run docs` builds without warnings (doc changes only) — 0
errors; the 2 reported warnings are pre-existing and environmental (fern
auth-gated redirects check, theme accent-contrast ratio), unrelated to
the regenerated tables
- [x] Doc pages follow the [style
guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md)
(doc changes only) — generated tables only, emitted by
`scripts/generate-platform-docs.py`
- [ ] New doc pages include SPDX header and frontmatter (new pages only)

---
Signed-off-by: Dongni Yang <dongniy@nvidia.com>

🤖 Generated with [Claude Code](https://claude.com/claude-code)


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

* **New Features**
* Enhanced onboarding for OpenAI-compatible agents with automatic
inference API coercion and consistent sandbox inference routing.
* Added probing-driven registration for OpenAI-surface compatible
endpoints, including safer gateway provider replacement.

* **Bug Fixes**
* Fixed resume/onboarding recovery so coerced inference preferences are
honored and persisted only when appropriate.
* Improved stale provider credential recovery across inference surfaces.

* **Documentation**
* Updated provider support references to the latest validation examples.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Signed-off-by: Dongni Yang <dongniy@nvidia.com>
Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Prekshi Vyas <prekshiv@nvidia.com>
Hadar301 pushed a commit to Hadar301/NemoClaw-OpenShift that referenced this pull request Jul 12, 2026
## Summary

Fix Hermes custom Anthropic routing by using the endpoint's verified
OpenAI Chat Completions surface end to end. NemoClaw selects
`https://inference.local/v1`, verifies `/v1/chat/completions`, and
aligns the OpenShell provider to `type=openai` with `OPENAI_BASE_URL`,
avoiding the duplicate Anthropic SSE `message_start` sequence that
caused `hermes -z` to finish with `no final response`.

The core managed-frontend direction was first proposed by @chengjiew in
NVIDIA#6295, and Chengjie Wang is included as a commit co-author.
@TonyLuo-NV's NVIDIA#6297 contributed streaming-failure investigation and
regression analysis. Thanks to @hulynn for the reproducible
managed-proxy report.

## Related Issue

Fixes NVIDIA#6289

## Changes

- Resolve Hermes `compatible-anthropic-endpoint` routes to the managed
`openai-completions` frontend and reuse NVIDIA#6298's verified OpenAI-surface
provider registration while retaining `COMPATIBLE_ANTHROPIC_API_KEY` as
the credential binding.
- Persist the normalized frontend during fresh onboarding; repair stale
provider identity, registry metadata, and sandbox configuration during
rebuild or resume.
- Reject conflicting explicit API choices and legacy `type=anthropic`
runtime switches before mutating OpenShell, registry, or in-sandbox
state.
- Preserve native Anthropic Messages routing for OpenClaw custom
endpoints and first-party Anthropic routes; preserve the existing AWS
Bedrock adapter behavior.
- Extend unit, integration, command-shape, and live E2E coverage,
including the reported `hermes -z` path; document the verified-surface
requirement and rebuild migration.

## Type of Change

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

## Quality Gates

- [x] Tests added or updated for changed behavior
- [ ] Existing tests cover changed behavior — justification:
- [ ] Tests not applicable — justification:
- [x] Docs updated for user-facing behavior changes
- [ ] Docs not applicable — justification:
- [x] Sensitive paths changed (security, policy, credentials, preflight,
onboarding, inference, runner, sandbox, or messaging)
- [x] Sensitive-path review completed or maintainer-approved waiver
recorded — reviewer/approval link/justification: independent final
review found no blockers. Endpoint probing and provider replacement
reuse the fail-closed NVIDIA#6298 boundary; this PR adds exact non-secret
provider identity checks and introduces no credential values. Human
maintainer approval remains required.
- [ ] Non-success, skipped, or missing CI check accepted by maintainer —
check name, approval link, and follow-up issue:

## Verification

- [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 — 289 CLI tests, 7 OpenAI-surface
onboarding integration tests, 1 focused Hermes config integration test,
and 18 E2E support tests passed
- [ ] Applicable broad gate passed — `npm test` for broad
runtime/test-harness changes; `npm run check` for repo-wide
validation/coverage changes — required GitHub Actions checks pending
- [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) —
completed with 0 errors and 2 existing Fern 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)

Additional local verification:

- `npm run build:cli`
- `npm run typecheck:cli`
- `npm run checks`
- `npm run test-size:check`
- `npm run test:titles:check`
- `npm run source-shape:check`
- `npm run test:projects:check`
- `npm run test:imports:check`
- `npm run docs` (0 errors; 2 existing warnings)

---
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>

---------

Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Signed-off-by: Chengjie Wang <chengjiew@nvidia.com>
Co-authored-by: Chengjie Wang <chengjiew@nvidia.com>
Hadar301 pushed a commit to Hadar301/NemoClaw-OpenShift that referenced this pull request Jul 12, 2026
## Summary
Add the v0.0.75 release-notes entry for the release train, summarizing
the user-facing fixes merged since v0.0.74. Release-prep docs for the
`nemoclaw-maintainer-cut-release-tag` gate.

## Related Issue
Release prep for v0.0.75. Remove this section if none.

## Changes
- `docs/about/release-notes.mdx`: add the `## v0.0.75` section (themed
intro + grouped bullets with source-page links), matching the existing
v0.0.74 style.

### Source summary (doc-impacting PRs → doc page)
- NVIDIA#6370 -> `docs/about/release-notes.mdx`: prepared-backup recovery
restores gateway state and defers the live route check to onboarding, so
upgrade recovery no longer fails on an unset gateway route.
- NVIDIA#6305 -> `docs/about/release-notes.mdx`: in-place upgrades recover
gateway-orphaned sandboxes.
- NVIDIA#6332 -> `docs/about/release-notes.mdx`: same-name `--fresh`
re-onboard preserves fresh LangChain Deep Agents Code routing.
- NVIDIA#6335 -> `docs/about/release-notes.mdx`: custom Anthropic-compatible
inference uses the OpenAI frontend.
- NVIDIA#6298 -> `docs/about/release-notes.mdx`: OpenAI-only agents keep the
`/v1` base URL on Anthropic-compatible endpoints.
- NVIDIA#6304 -> `docs/about/release-notes.mdx`: local docker-driver gateway
credentials no longer expire.
- NVIDIA#6261 -> `docs/about/release-notes.mdx`: Hermes runtime and managed
MCP state reconcile after a runtime change.
- NVIDIA#6318 -> `docs/about/release-notes.mdx`: Hermes installs accept a
pinned base platform digest.
- NVIDIA#6291 -> `docs/about/release-notes.mdx`: OpenClaw local CLI pairing
restores its previous connection path.

Test-performance, CI, and chore commits since v0.0.74 are excluded as
non-user-facing.

## Type of Change
- [x] Doc only (prose changes, no code sample modifications)

## Quality Gates
- [x] Tests not applicable — justification: documentation-only change
(release notes prose).
- [x] Docs updated for user-facing behavior changes

## Verification
- [x] PR description includes the DCO sign-off declaration and every
commit appears as `Verified` in GitHub
- [x] `npm run docs` builds without warnings introduced by this change —
command/result: "Found 0 errors and 2 warnings" (the 2 warnings
pre-exist this change).
- [x] Doc pages follow the style guide (active voice, no numbered/colon
titles, correct NVIDIA/NemoClaw/OpenShell capitalization; skip-terms
avoided).
- [x] No secrets, API keys, or credentials committed

---
Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com>


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

* **Documentation**
* Added a new **v0.0.75** section to the release notes, highlighting
improved sandbox upgrade hardening and prepared-backup recovery, updated
inference routing for Anthropic-compatible endpoints, longer-lasting
local gateway credential handling, and restored CLI pairing reconnection
without re-pairing. Also includes cross-links to related NemoClaw CLI
and documentation pages.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Hadar301 pushed a commit to Hadar301/NemoClaw-OpenShift that referenced this pull request Jul 12, 2026
<!-- markdownlint-disable MD041 -->
## Summary
<!-- 1-3 sentences: what this PR does and why. -->
Correct the v0.0.75 release-note entry merged in NVIDIA#6371 before the
release tag is cut.
This follow-up restores the omitted OpenClaw `2026.6.10` upgrade and
narrows three claims to the runtime contracts that actually shipped.

## Changes
<!-- Bullet list of key changes. -->
- NVIDIA#5595 -> `docs/about/release-notes.mdx`: add the bundled OpenClaw
`2026.6.10` upgrade and its reviewed package, pairing, and recovery
boundaries.
- NVIDIA#6370 -> `docs/about/release-notes.mdx`: state that authoritative
onboarding restores the gateway provider and inference route during
rebuild, before sandbox recreation.
- NVIDIA#6335 and NVIDIA#6298 -> `docs/about/release-notes.mdx`: scope the OpenAI
frontend to Hermes while retaining the separate OpenAI-only-agent
behavior.
- NVIDIA#6304 -> `docs/about/release-notes.mdx`: name the non-expiring local
Docker-driver sandbox JWT contract precisely and link its gateway-auth
review.

## Type of Change

- [ ] Code change (feature, bug fix, or refactor)
- [ ] Code change with doc updates
- [x] Doc only (prose changes, no code sample modifications)
- [ ] 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: prose-only release-note
corrections with no runtime behavior or code samples.
- [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; `npm run docs` passed with 0 errors and 2
pre-existing warnings.
- [ ] 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) —
result: 0 errors and 2 pre-existing warnings (missing authenticated
redirects check and existing light-theme accent contrast).
- [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: Aaron Erickson <aerickson@nvidia.com>


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

## Summary by CodeRabbit

* **Documentation**
* Updated the `v0.0.75` release notes with clearer wording and expanded
details.
* Added more specific notes about the runtime upgrade, sandbox recovery
behavior, and routing safeguards.
* Refined the description of inference routing behavior and local
Docker-driver sandbox authentication handling.
* Adjusted the linked references and final release-note wording for
consistency.

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

Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: inference Inference routing, serving, model selection, or outputs area: providers Inference provider integrations and provider behavior area: routing Request routing, policy routing, model selection, or fallback logic bug-fix PR fixes a bug or regression integration: dcode LangChain Deep Code integration behavior

Projects

None yet

5 participants