fix(security): keep API keys out of curl probe argv - #5975
Conversation
Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughRoutes curl credentials through temp config files, rejects inline credential leakage in curl arguments, and updates inference/provider probe flows, tests, and harnesses to use ChangesCredential Isolation via curl --config
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes Suggested reviewers
🚥 Pre-merge checks | ✅ 3 | ❌ 2❌ Failed checks (2 warnings)
✅ Passed checks (3 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
Code Coverage OverviewLanguages: TypeScript TypeScript / code-coverage/pluginThe overall coverage in the Show a code coverage summary of the most covered files.
TypeScript / code-coverage/cliThe overall coverage in the Show a code coverage summary of the most covered files.
Updated |
PR Review Advisor (Nemotron Ultra) — Changes requestedMerge posture: Do not merge yet Action checklist
Findings index
🚨 Required before mergeAddress these before merging unless a maintainer explicitly overrides the advisor with rationale.
|
E2E Advisor RecommendationRequired E2E: Dispatch hint: Full advisor summaryE2E Recommendation AdvisorBase: Required E2E
Optional E2E
New E2E recommendations
Dispatch hint
|
Vitest E2E Scenario RecommendationRequired Vitest E2E scenarios: Dispatch required Vitest E2E scenarios:
Full Vitest E2E advisor summaryVitest E2E Scenario AdvisorBase: Required Vitest E2E scenarios
Optional Vitest E2E scenarios
Relevant changed files
|
PR Review Advisor — Changes requestedMerge posture: Do not merge yet Action checklist
Findings index
Review findings by urgency: 0 required fixes, 9 items to resolve/justify, 1 in-scope improvement
|
There was a problem hiding this comment.
Actionable comments posted: 4
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
src/lib/inference/provider-models.ts (1)
100-122: 🩺 Stability & Availability | 🟠 Major | ⚡ Quick winCatch temp-config creation failures in the fetch-result path.
createBearerAuthConfig,buildOpenAiLikeAuthConfig, andcreateXApiKeyAuthConfigcreate temp files before thetry, so filesystem failures bypass the existingModelCatalogFetchResulterror return and throw to callers. Move creation inside thetryand cleanup conditionally. Based on learnings, filesystem boundaries are a realistic place for actionable error handling.Proposed fix pattern
- const authConfig = createBearerAuthConfig(normalizeCredentialValue(apiKey)); + let authConfig: CurlAuthConfig | undefined; try { + authConfig = createBearerAuthConfig(normalizeCredentialValue(apiKey)); const result = runCurlProbeImpl( @@ } finally { - authConfig.cleanup(); + authConfig?.cleanup(); }Apply the same pattern in
fetchOpenAiLikeModelsandfetchAnthropicModels.Also applies to: 159-173, 183-205
🤖 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/inference/provider-models.ts` around lines 100 - 122, The fetch-result paths in `fetchOpenAiLikeModels`, `fetchAnthropicModels`, and the shown `fetch...` helper create temp auth config files before entering the `try`, so failures in `createBearerAuthConfig`, `buildOpenAiLikeAuthConfig`, or `createXApiKeyAuthConfig` bypass the `ModelCatalogFetchResult` error handling. Move each auth-config creation into the `try`, keep the `runCurlProbeImpl` call wrapped the same way, and make `authConfig.cleanup()` conditional in `finally` so cleanup only runs after a config was successfully created.Source: Learnings
🧹 Nitpick comments (1)
src/lib/inference/provider-models.ts (1)
28-35: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winCentralize the OpenAI-like auth-mode builder.
buildOpenAiLikeAuthConfigis duplicated insrc/lib/inference/onboard-probes.ts; keep one shared helper so bearer/query-param behavior cannot drift between model catalog and onboarding probes. As per path instructions,src/lib/{actions,domain,adapters,state}/**should flag duplicate sources of truth and keep host/process details in adapters.🤖 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/inference/provider-models.ts` around lines 28 - 35, `buildOpenAiLikeAuthConfig` is duplicated and the bearer/query-param logic can drift between `provider-models.ts` and the onboarding probe flow. Extract this auth-mode builder into a single shared helper and reuse it from both `buildOpenAiLikeAuthConfig` call sites, keeping the normalized credential handling and `options.authMode === "query-param"` branch in one place.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/adapters/http/curl-args.ts`:
- Around line 80-91: The inline credential guard in assertHeaderCarriesNoSecret
is missing the proxy credential case, so add proxy-authorization: to
CURL_FORBIDDEN_AUTH_HEADER_PREFIXES alongside authorization:, x-api-key:, and
x-goog-api-key:. This ensures --proxy-header values are treated the same as
other secret-bearing headers and rejected before they can reach argv.
In `@src/lib/inference/onboard-probes.test.ts`:
- Around line 669-677: The retry assertion in onboard-probes.test.ts is too weak
because it can accept a dangling --config with no value; update the test around
the args.split and configIndex check to first assert that the line after
--config exists before reading configPath, then compare that path across retries
using firstConfigPath so the test fails when the config argument is missing a
value.
In `@src/lib/inference/onboard-probes.ts`:
- Around line 327-378: The auth config is created outside the probe’s error
handling, so failures in buildOpenAiLikeAuthConfig can throw instead of
returning the structured probe failure shape. Move the auth-config setup for the
validation probe into a guarded boundary in onboard-probes and return the same {
ok: false, httpStatus: 0, curlStatus: 0, ... } result used for curl failures
when temp-file or filesystem work fails. Keep the existing try/finally cleanup
behavior, and apply the same pattern to the other probe helpers that create auth
config before their main request logic.
In `@src/lib/inference/provider-models.test.ts`:
- Around line 249-258: The auth-isolation tests for fetchOpenAiLikeModels,
fetchGeminiLikeModels, and fetchAnthropicLikeModels only validate argv/config
contents, so add assertions in each runCurlProbeImpl mock that
opts.trustedConfigFiles includes the same config path passed via --config.
Update the relevant test cases to verify the trusted config option alongside the
existing header/query-param checks so a missing trustedConfigFiles regression is
caught.
---
Outside diff comments:
In `@src/lib/inference/provider-models.ts`:
- Around line 100-122: The fetch-result paths in `fetchOpenAiLikeModels`,
`fetchAnthropicModels`, and the shown `fetch...` helper create temp auth config
files before entering the `try`, so failures in `createBearerAuthConfig`,
`buildOpenAiLikeAuthConfig`, or `createXApiKeyAuthConfig` bypass the
`ModelCatalogFetchResult` error handling. Move each auth-config creation into
the `try`, keep the `runCurlProbeImpl` call wrapped the same way, and make
`authConfig.cleanup()` conditional in `finally` so cleanup only runs after a
config was successfully created.
---
Nitpick comments:
In `@src/lib/inference/provider-models.ts`:
- Around line 28-35: `buildOpenAiLikeAuthConfig` is duplicated and the
bearer/query-param logic can drift between `provider-models.ts` and the
onboarding probe flow. Extract this auth-mode builder into a single shared
helper and reuse it from both `buildOpenAiLikeAuthConfig` call sites, keeping
the normalized credential handling and `options.authMode === "query-param"`
branch in one place.
🪄 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: 7653dfea-8f36-44ae-911b-5aae955da820
📒 Files selected for processing (9)
src/lib/adapters/http/auth-config.test.tssrc/lib/adapters/http/auth-config.tssrc/lib/adapters/http/curl-args.test.tssrc/lib/adapters/http/curl-args.tssrc/lib/inference/onboard-probes.test.tssrc/lib/inference/onboard-probes.tssrc/lib/inference/provider-models.test.tssrc/lib/inference/provider-models.tstest/helpers/onboard-smoke-verifier-harness.ts
Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
E2E Target RecommendationRequired E2E targets: Dispatch required E2E targets:
Full E2E target advisor summaryE2E Target AdvisorBase: Required E2E targets
Optional E2E targets
Relevant changed files
|
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src/lib/adapters/http/auth-config.test.ts`:
- Around line 77-95: The auth routing tests for createOpenAiLikeAuthConfig only
assert the expected transport is present, so they do not prove exclusive mode
selection. Update both tests in auth-config.test.ts to add negative assertions
for the opposite auth transport: the default Bearer case should verify no
url-query entry is written, and the query-param case should verify no
Authorization header is written. This will ensure the helper cannot emit both
paths at once and that the new routing behavior is fully covered.
🪄 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: a280107b-0d71-410f-ad48-21414444d3d8
📒 Files selected for processing (11)
src/lib/adapters/http/auth-config-test-helpers.tssrc/lib/adapters/http/auth-config.test.tssrc/lib/adapters/http/auth-config.tssrc/lib/adapters/http/curl-args.tssrc/lib/inference/health.tssrc/lib/inference/onboard-probes.test.tssrc/lib/inference/onboard-probes.tssrc/lib/inference/probe-retry.tssrc/lib/inference/provider-models.test.tssrc/lib/inference/provider-models.tssrc/lib/trace.test.ts
✅ Files skipped from review due to trivial changes (1)
- src/lib/inference/health.ts
🚧 Files skipped from review as they are similar to previous changes (3)
- src/lib/adapters/http/curl-args.ts
- src/lib/inference/provider-models.ts
- src/lib/inference/onboard-probes.ts
Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
This reverts commit f84290e.
This reverts commit f3077d5.
Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
…llowRedirects opt-in Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
…sed heap Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
…n fake curl Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
…rowing the file Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
…th-config failure Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
…env helpers Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
…c probe; test auth-config helpers Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
…nt env Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
Vitest E2E Target Results — ✅ All requested jobs passedRun: 28543775914
|
…es.test.ts duplication Addresses PR #5975 advisor item PRA-9 (test monolith + fake-curl harness duplicated across ~7 tests). Move the repeated boilerplate — the -o/-w arg-parsing curl-script header and the tmpdir/fakeBin/counter + PATH/ NEMOCLAW_TEST_NO_SLEEP/console.log save-set-restore plumbing — into a co-located non-test helper (onboard-probes-curl-harness.ts), and route the duplicated sites through makeFakeCurlScript()/withFakeCurlProbe(). Behavior is identical: each test keeps its exact bash body (via HARNESS_COUNTER/ HARNESS_TMPDIR placeholders substituted to the real absolute paths before the script is written, so the emitted bash is byte-for-byte unchanged) and every assertion verbatim. onboard-probes.test.ts drops 1056 -> 927 lines; suite is unchanged (24 passed, 1 darwin-skipped). Keeping the branching in the .ts helper also holds the test-file if-count flat. SKIP=test-cli: the full cli+integration hook trips on pre-existing macOS bash 3.2 shell-harness failures unrelated to this change; CI runs bash 5.x green. The onboard-probes suite, CLI typecheck, budget, and checks all pass. Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com>
|
All 5 CodeRabbit findings are stale:
No action needed on any of these. |
Vitest E2E Target Results — ✅ All requested jobs passedRun: 28550394810
|
## Summary - Add the `v0.0.72` release-note section with links to the deeper docs pages for installer recovery, command diagnostics, inference, policy, and sandbox repair changes. - Document the custom preset `allowed_ips` guard for user-authored policy files. ## Related Issue None. ## Source summary - #6132 -> `docs/about/release-notes.mdx`: Summarizes installer and upgrade recovery before generic onboarding, with links to quickstart and lifecycle docs. - #6087 -> `docs/network-policy/customize-network-policy.mdx`: Documents that user-authored custom presets reject `allowed_ips` for ordinary endpoints; also summarized in release notes. - #5975 -> `docs/about/release-notes.mdx`: Summarizes safer curl-based inference probes that keep API keys out of process arguments. - #6044 -> `docs/about/release-notes.mdx`: Summarizes compact `channels status` configuration reporting. - #6096 -> `docs/about/release-notes.mdx`: Summarizes OpenClaw EC2 metadata discovery disablement and links to security guidance. - #5980 and #5991 -> `docs/about/release-notes.mdx`: Summarizes `exec` multiline argument rejection and recovery guidance. - #6023 -> `docs/about/release-notes.mdx`: Summarizes registered-provider diagnostics for `inference set` failures. - #6074 -> `docs/about/release-notes.mdx`: Summarizes the refreshed NVIDIA Endpoints featured-model selection behavior. - #5969 -> `docs/about/release-notes.mdx`: Summarizes `credentials add` provider credential registration. - #6060 -> `docs/about/release-notes.mdx`: Summarizes mutable OpenClaw config permission restoration after `exec`. - #6134 -> `docs/about/release-notes.mdx`: Summarizes restored Tavily access for managed Python workflows. - #6089 -> `docs/about/release-notes.mdx`: Summarizes Hermes runtime version-scheme comparison during upgrade checks. - #6131 -> `docs/about/release-notes.mdx`: Summarizes OpenClaw gateway watchdog recovery behavior. - #5976 and #5990 -> `docs/about/release-notes.mdx`: Summarizes prompt stdin EOF cancellation behavior during onboarding. - #5540 -> `docs/about/release-notes.mdx`: Summarizes clarified host-level and per-sandbox status command scope. - #5978 and #6018 -> `docs/about/release-notes.mdx`: Summarizes policy-denial log breadcrumbs in connect shells. ## Testing - `npm run docs:sync-agent-variants` - `npm run docs` - Commit hooks passed during `git commit`, including commitlint and gitleaks. - Pre-push hook passed during `git push`, including TypeScript CLI and package/tag version sync. ## Checklist - [x] Documentation updated. - [x] `npm run docs` completed with 0 errors and 1 existing Fern warning. - [x] No source code or generated build artifacts committed. Signed-off-by: Miyoung Choi <miyoungc@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Added release notes for v0.0.72 covering improved installer recovery, clearer CLI diagnostics, safer inference setup and provider switching, better credential handling, stronger policy boundaries, and more robust runtime repair behavior. * Updated network policy guidance to clarify when `allowed_ips` can be used, including a specific exception for the sandbox-to-host bridge endpoint. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
## Summary Probe-time curl spawns embedded the literal API key as an argv element (`-H "Authorization: Bearer ..."`, `-H "x-api-key: ..."`, `?key=...` in URL), exposing it to host `ps auxww` on container runtimes that share `/proc` with the host (k3s/containerd, Docker Desktop on WSL2). Route every credential through a 0600 `curl --config` tmpfile so the secret never reaches argv. ## Related Issue Fixes NVIDIA#5966 ## Changes - New `src/lib/adapters/http/auth-config.ts` helper that writes a 0600 curl config tmpfile carrying `header = "..."` or `url-query = "..."` entries; returns the `--config <path>` argv pair plus a `cleanup()` for `finally`. - `provider-models.ts`: `fetchNvidiaEndpointModels`, `fetchOpenAiLikeModels`, `fetchAnthropicModels` route Bearer / x-api-key / query-param credentials via the new helper. - `onboard-probes.ts`: `probeResponsesToolCalling`, `probeChatCompletionsToolCalling`, `probeOpenAiLikeEndpoint` (Responses + Chat Completions + streaming + doubled-timeout retry), `probeAnthropicEndpoint` — all argv sites swapped to `--config`; bearer/x-api-key/`?key=` literals removed from URL and argv. Single `authConfig` per probe scope, cleaned up in `finally`. - Defence-in-depth in `curl-args.ts`: `validateCurlProbeArgs` refuses inline `Authorization:` / `x-api-key:` / `x-goog-api-key:` `-H` values and refuses URLs with `?key=` / `?api_key=` / `?apikey=` / `?token=` / `?access_token=` query parameters. Trusted `--config` route remains the only legal credential channel. - Tests updated to invert "argv contains Bearer literal" → "argv contains `--config <path>` and the file is mode 0600 carrying the expected header/url-query entry; literal API key never appears in argv". New behavioural coverage for Anthropic. Existing onboard-smoke harness now reads the config file mid-probe to keep its auth assertion. ## Type of Change - [x] Code change (feature, bug fix, or refactor) - [ ] Code change with doc updates - [ ] Doc only (prose changes, no code sample modifications) - [ ] Doc only (includes code sample changes) ## 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: internal probe transport; no user-visible behaviour change - [x] 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 - [x] PR description includes the DCO sign-off declaration and every commit appears as `Verified` in GitHub - [x] Git hooks passed during commit and push, or `npx prek run --from-ref main --to-ref HEAD` passes - [x] Targeted tests pass for changed behavior - [ ] Full `npm test` passes (broad runtime changes only) - [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) - [ ] Doc pages follow the style guide (doc changes only) - [ ] New doc pages include SPDX header and frontmatter (new pages only) --- Signed-off-by: Tinson Lai <tinsonl@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added curl probe auth via temporary on-disk config for Bearer, API key, and OpenAI-like “bearer vs query-param” modes. * **Bug Fixes** * Reduced credential exposure by rejecting inline auth headers and secret-bearing query parameters; curl requests now use `--config` with safe cleanup. * Improved onboarding/provider probing and standardized retry behavior for timeout and retriable HTTP failures. * **Tests** * Expanded coverage for auth config generation/escaping, curl-arg validation, onboarding flows, and tracing redaction. * **Chores** * Increased Node heap limit for integration subprocesses during Vitest. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Tinson Lai <tinsonl@nvidia.com> Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com> Co-authored-by: Prekshi Vyas <prekshiv@nvidia.com> Co-authored-by: Prekshi Vyas <34834085+prekshivyas@users.noreply.github.com>
## Summary - Add the `v0.0.72` release-note section with links to the deeper docs pages for installer recovery, command diagnostics, inference, policy, and sandbox repair changes. - Document the custom preset `allowed_ips` guard for user-authored policy files. ## Related Issue None. ## Source summary - NVIDIA#6132 -> `docs/about/release-notes.mdx`: Summarizes installer and upgrade recovery before generic onboarding, with links to quickstart and lifecycle docs. - NVIDIA#6087 -> `docs/network-policy/customize-network-policy.mdx`: Documents that user-authored custom presets reject `allowed_ips` for ordinary endpoints; also summarized in release notes. - NVIDIA#5975 -> `docs/about/release-notes.mdx`: Summarizes safer curl-based inference probes that keep API keys out of process arguments. - NVIDIA#6044 -> `docs/about/release-notes.mdx`: Summarizes compact `channels status` configuration reporting. - NVIDIA#6096 -> `docs/about/release-notes.mdx`: Summarizes OpenClaw EC2 metadata discovery disablement and links to security guidance. - NVIDIA#5980 and NVIDIA#5991 -> `docs/about/release-notes.mdx`: Summarizes `exec` multiline argument rejection and recovery guidance. - NVIDIA#6023 -> `docs/about/release-notes.mdx`: Summarizes registered-provider diagnostics for `inference set` failures. - NVIDIA#6074 -> `docs/about/release-notes.mdx`: Summarizes the refreshed NVIDIA Endpoints featured-model selection behavior. - NVIDIA#5969 -> `docs/about/release-notes.mdx`: Summarizes `credentials add` provider credential registration. - NVIDIA#6060 -> `docs/about/release-notes.mdx`: Summarizes mutable OpenClaw config permission restoration after `exec`. - NVIDIA#6134 -> `docs/about/release-notes.mdx`: Summarizes restored Tavily access for managed Python workflows. - NVIDIA#6089 -> `docs/about/release-notes.mdx`: Summarizes Hermes runtime version-scheme comparison during upgrade checks. - NVIDIA#6131 -> `docs/about/release-notes.mdx`: Summarizes OpenClaw gateway watchdog recovery behavior. - NVIDIA#5976 and NVIDIA#5990 -> `docs/about/release-notes.mdx`: Summarizes prompt stdin EOF cancellation behavior during onboarding. - NVIDIA#5540 -> `docs/about/release-notes.mdx`: Summarizes clarified host-level and per-sandbox status command scope. - NVIDIA#5978 and NVIDIA#6018 -> `docs/about/release-notes.mdx`: Summarizes policy-denial log breadcrumbs in connect shells. ## Testing - `npm run docs:sync-agent-variants` - `npm run docs` - Commit hooks passed during `git commit`, including commitlint and gitleaks. - Pre-push hook passed during `git push`, including TypeScript CLI and package/tag version sync. ## Checklist - [x] Documentation updated. - [x] `npm run docs` completed with 0 errors and 1 existing Fern warning. - [x] No source code or generated build artifacts committed. Signed-off-by: Miyoung Choi <miyoungc@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Added release notes for v0.0.72 covering improved installer recovery, clearer CLI diagnostics, safer inference setup and provider switching, better credential handling, stronger policy boundaries, and more robust runtime repair behavior. * Updated network policy guidance to clarify when `allowed_ips` can be used, including a specific exception for the sandbox-to-host bridge endpoint. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
Summary
Probe-time curl spawns embedded the literal API key as an argv element (
-H "Authorization: Bearer ...",-H "x-api-key: ...",?key=...in URL), exposing it to hostps auxwwon container runtimes that share/procwith the host (k3s/containerd, Docker Desktop on WSL2). Route every credential through a 0600curl --configtmpfile so the secret never reaches argv.Related Issue
Fixes #5966
Changes
src/lib/adapters/http/auth-config.tshelper that writes a 0600 curl config tmpfile carryingheader = "..."orurl-query = "..."entries; returns the--config <path>argv pair plus acleanup()forfinally.provider-models.ts:fetchNvidiaEndpointModels,fetchOpenAiLikeModels,fetchAnthropicModelsroute Bearer / x-api-key / query-param credentials via the new helper.onboard-probes.ts:probeResponsesToolCalling,probeChatCompletionsToolCalling,probeOpenAiLikeEndpoint(Responses + Chat Completions + streaming + doubled-timeout retry),probeAnthropicEndpoint— all argv sites swapped to--config; bearer/x-api-key/?key=literals removed from URL and argv. SingleauthConfigper probe scope, cleaned up infinally.curl-args.ts:validateCurlProbeArgsrefuses inlineAuthorization:/x-api-key:/x-goog-api-key:-Hvalues and refuses URLs with?key=/?api_key=/?apikey=/?token=/?access_token=query parameters. Trusted--configroute remains the only legal credential channel.--config <path>and the file is mode 0600 carrying the expected header/url-query entry; literal API key never appears in argv". New behavioural coverage for Anthropic. Existing onboard-smoke harness now reads the config file mid-probe to keep its auth assertion.Type of Change
Quality Gates
Verification
Verifiedin GitHubnpx prek run --from-ref main --to-ref HEADpassesnpm testpasses (broad runtime changes only)npm run docsbuilds without warnings (doc changes only)Signed-off-by: Tinson Lai tinsonl@nvidia.com
Summary by CodeRabbit
--configwith safe cleanup.