Skip to content

Allow custom OpenAI-compatible endpoints for native OpenClaw - #2755

Merged
roboclaw-bot merged 16 commits into
openclaw:mainfrom
sunnymodi:feat/native-openai-compatible-providers
Oct 25, 2026
Merged

roboclaw-bot merged 16 commits into
openclaw:mainfrom
sunnymodi:feat/native-openai-compatible-providers

Conversation

@sunnymodi

@sunnymodi sunnymodi commented Oct 17, 2026 •

Copy link
Copy Markdown
Contributor

Problem

Dedicated native OpenClaw rejects custom OpenAI-compatible endpoints even when an OpenShell CredentialSource is bound to the endpoint. This refresh rebases the existing feature onto current main and removes its standalone RFC.

Change

  • Scope the native preparation credential exemption to its selected file or explicit existing k3d-helper bootstrap. Other OpenShell files and ordinary CI lane preparation still require Codex credentials.
  • Keep exposure withdrawal valid without rendered Harness requirements, and compare native endpoint projections with the shared URL normalizer. Extend the existing native workflow with a worker-restart exposure-sweep assertion.
  • Keep the feature limited to native OpenClaw custom HTTPS base URLs and OpenAI-compatible models through the existing openai catalog and source-owned credential path. No new primitive, public Driver contract, provider ID, model-discovery mechanism, image pin or arbitrary Secret-backed destination is introduced.
  • Support ./scripts/k3d test|demo --harness openclaw --base-url … --model-id …. The selected endpoint is shared by the native model catalog and its OpenShell CredentialSource; explicit flags override inherited and prepared settings. Native-only preparation requires its API key without an unrelated Codex token.
  • Refresh the native proof fixture to use current Driver-owned enrollment, peer lookup and exposure withdrawal, preserving the production security checks.
  • Preserve the existing openai alias and normalized HTTPS port-443 endpoints ending in /v1 for credential_source authentication only. Secret-backed keys remain restricted to https://api.openai.com/v1; every OpenShell native catalog endpoint must match its source.
  • Rebase onto upstream ea1616f3f to clear conflicts, preserving original authors, endpoint restrictions, current lifecycle behavior and prepared-Git fixture options. Publication uses an exact-head lease against the verified previous PR head.
  • Remove the standalone native-endpoint RFC and its index entry in commit 653711e5e. This extends the existing bundled Compute/OpenShell implementations under their established configuration and CredentialSource ownership contracts, rather than introducing a new Driver contract.
  • Add the current ownerCapability: "credential_gateway" field to the native conformance fixture. Without it, the real Compute ownership check refuses the stale fixture before endpoint projection. No production ownership check was weakened.

Original implementation: @sunnymodi.

Work sessions

Verification

Current candidate: d825ca81a6ff3b36c75eff3bb4cf2e335b736190. The native k3d launcher and proof-fixture updates follow the rebase onto upstream ea1616f3f148076663aa02eb6f2b92b025820a50.

Native k3d helper and worker restart proof (2026-10-25)

The native helper path requested in the latest proof review passes on d825ca81a6ff3b36c75eff3bb4cf2e335b736190: 1 passed, 0 failed, 0 skipped, 355.0 seconds, with Fireworks Kimi K3 through the Responses API.

OCC_K3D_CONTAINER_ENGINE=docker \
./scripts/k3d test --harness openclaw \
  --base-url https://api.fireworks.ai/inference/v1 \
  --model-id kimi-k3

The authorized OPENAI_API_KEY was supplied privately; no Codex credential was supplied. A read-only process observer confirmed the effective native model, endpoint and runtime selector. OCC_K3D_OPENCLAW_SOURCE selected a clean upstream OpenClaw checkout at f8386bc7df0a6c9eda7a28ae81943c5c06a414ff. The helper built that source and the current OCE controller, imported them, and prepared/migrated its owned database. The passing invocation reused that prepared cluster, database and images after the environment corrections below.

This uses the helper's documented test-only OpenShell compatibility bridge, unchanged from the reviewed source. It ran on Linux/amd64 with Docker 29.1.3 in an isolated daemon/network namespace because this machine's existing web service occupies port 443. No test ports were published to the host. This qualifies the shipped helper/fixture path; the earlier Helm/API deployment proof has its separately recorded scope.

The native restart assertion stops and resumes OCC's worker, then requires worker.harness-exposure-withdrawn for the exact Agent/revision without another preparation pass. It passed. The two subsequent native Gateway model turns each returned HTTP 200 and the expected nonce. Ownership, mounts, privileges, raw-credential absence, native workspace access and embedded admission refusal also passed. The shared test's printed title includes Codex; this command and the observed process environment select its native openclaw branch.

Redacted terminal output, with teardown chatter omitted:

[k3d:docker] WARNING: Dedicated native OpenClaw is experimental. The current OpenClaw release image does not include native worker-inference support, so this workflow builds ../openclaw from source.
[k3d:docker] Reusing the prepared cluster, PostgreSQL database, and runtime images.
[k3d:docker] Running the dedicated native OpenClaw integration through OpenShell.
OpenShell integration: selected real full workflow.
OpenShell integration: initial Compute prepareRevision retry: The Agent Gateway route answered HTTP 503 to the connection upgrade.
OpenShell integration: provider Harness ready; checking ownership and mounts.
OpenShell integration: approved mounts and privileges verified; checking secret exposure.
OpenShell integration: secret exposure checks passed; verifying gateway routing.
OpenShell integration: verifying dedicated native workspace file access.
OpenShell integration: starting successive native worker sessions through Gateway.
✔ OpenShell enforces provider delivery and authenticated Codex exposure (353250.585989ms)
ℹ tests 1
ℹ suites 0
ℹ pass 1
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 354977.497086
Dedicated native OpenClaw with OpenShell integration passed.

Verification summary and image/source receipts (the model and restart outcomes summarize assertions in the unmodified passing native branch):

{
  "head": "d825ca81a6ff3b36c75eff3bb4cf2e335b736190",
  "completedAt": "2026-10-25T07:00:51.969Z",
  "architecture": "linux/amd64",
  "selectedHarness": "openclaw",
  "model": "openai/kimi-k3",
  "endpoint": "https://api.fireworks.ai/inference/v1",
  "transport": "openai-responses",
  "codexCredentialSupplied": false,
  "runtimeSource": "f8386bc7df0a6c9eda7a28ae81943c5c06a414ff",
  "runtimeSourceTree": "c3bfa9c71325407260c24bc9372ec89e210b6089",
  "bridge": "Unmodified integration-only bridge in sandbox-driver-openshell-k3d-real.test.mjs, selected by scripts/k3d test --harness openclaw.",
  "registeredTest": {
    "tests": 1,
    "passed": 1,
    "failed": 0,
    "skipped": 0,
    "durationMs": 354977.497086
  },
  "assertedOutcomes": {
    "nativeHarnessOwnershipMountsAndPrivileges": true,
    "rawModelCredentialAbsentFromHarnessAndGateway": true,
    "nativeWorkspaceFileAccess": true,
    "workerRestartExposureSweep": true,
    "gatewayModelTurns": 2,
    "bothHttp200AndNonceMatched": true,
    "embeddedOpenShellAdmissionFailsClosed": true
  },
  "sourceHashes": {
    "apps/controller/src/drivers/compute/kubernetes/index.ts": "0170e5b2279d367e90527079d2a90ffcf75bd963cd36e583697425d4ab583db8",
    "apps/controller/src/drivers/credential-gateway/openshell.ts": "4d24bcc96bb9df6be66d53e4c34f799e84d9da2f58dae7a46c4744ee541b44d0"
  },
  "testSourceSha256": "cc6231b98abb1e6d203d9574b029d00cce0d38b36a53fe0eb01be76a9b99a6be",
  "images": {
    "controllerImageId": "sha256:33ebd3261395eac8c72b24124274f07f90d60ba20e60c348a2fcadbe6b3d0f90",
    "runtimeImageId": "sha256:e6857d4b35d2a077f857e23d7d4126d1c19a4ba851799e298bceb0bb38dca7d9",
    "selectedController": "localhost/openclaw-ci-image-openclaw-ci-local-84a658af3922/controller@sha256:7d88029cf9e44e39f4a4133fa6765e6d43cf0098d623470373a862012102c7ec",
    "selectedRuntime": "localhost/openclaw-ci-image-openclaw-ci-local-84a658af3922/runtime@sha256:f306c182122369b3e514ae5e74a4363837282edf9efda2a46f77092ebd22073e"
  },
  "environment": {
    "engine": "Docker 29.1.3 in an isolated daemon/network namespace",
    "hostPortsPublished": false,
    "runner": "Current-head image-provided dependencies; already installed pg 8.23.1 exposed at the workspace root; automatic dependency installation disabled",
    "sourceChanges": false,
    "productionPinsChanged": false
  },
  "cleanup": {
    "helperClusterAndDatabaseRemoved": true,
    "isolatedDaemonAndDataVolumeRemoved": true,
    "privateStateRemoved": true,
    "temporaryDependencyLinksRemoved": true,
    "sourceCheckoutClean": true,
    "publishedHostPorts": []
  }
}

Earlier setup failures are retained: pnpm attempted an automatic reinstall and refused without a terminal; the standard host relay could not bind the occupied port 443; and the production dependency graph exposed pg under the controller while the test imports it at the workspace root. The runner disabled automatic installation with pnpm_config_verify_deps_before_run=false, used an isolated daemon, and exposed the already installed pg@8.23.1 at the root after checking it equals the root's pinned version. No host dependencies were installed or reconciled. The passing case also records the existing initial-route HTTP 503 retry. No production code, registered test, assertion, timeout or image pin was changed to obtain the result, and no source commit was created.

The helper removed its cluster/database; the isolated daemon, data volume and private state were then removed. Temporary runner links were removed, leaving the checkout clean. Existing OCE, Mastra and the web service were preserved. DeepSeek Responses remains unqualified; this run establishes Fireworks/Kimi Responses compatibility for this helper path.

Review repairs (d825ca81a, 2026-10-23)

  • Credential-scope regression fails on the previous code with a missing-Codex preflight being incorrectly accepted, and passes after the repair. Coverage distinguishes the native file, first-Agent file, ordinary whole-lane preparation and explicit native helper bootstrap, without creating infrastructure.
  • Focused launcher, CI preparation, Kubernetes Compute, CredentialSource API and Sandbox startup suites: 610 passed, 0 failed, 1 explicit runtime-image initializer skip.
  • Typecheck, lint, formatting, Bash/native-fixture syntax, workspace boundaries, CI-selection audit and whitespace checks pass. Documentation checks pass: 290 pages / 4562 links, 96 specifications / 23 RFC numbers / 744 local targets, with no hard-limit violations.
  • Independent Codex (gpt-6.1-sol, medium), three-pass review of the complete current PR delta is scoped-clean for P0–P2. This is source review, not live-runtime qualification or formal GitHub approval.
  • Scope audit: production changes in the complete PR remain confined to the existing Kubernetes Compute and OpenShell Credential Gateway implementations. This repair changes only developer helpers, tests and the testing guide; production Driver code, contracts, API schemas, authorization rules, image recipes and pins are unchanged from 476d134de. Existing feature flows remain accurate, so no new runtime flow is added.
  • The real native k3d fixture now restarts OCC and requires active-revision exposure withdrawal without a preparation pass. The unmodified deployment E2E below separately verifies real native execution and retained sessions/workspaces across replacement.

Dedicated OpenShell Agent proof (d825ca81a, 2026-10-24)

Native OpenClaw/OpenAI and dedicated Codex/OpenAI passed. Native DeepSeek passed using chat completions, but its Responses attempt failed on the pinned runtime with an unresolved worker-transcript error. The passing rows below do not establish general compatibility with open models or qualify DeepSeek's Responses path.

These are real dedicated Agents through OpenShell, using repository runtime pin f8386bc7df0a6c9eda7a28ae81943c5c06a414ff and Codex 0.163.0-alpha.2 on Linux/arm64 with Podman. The native cases use the normal Kubernetes-only Helm deployment and regular provisioning API, with no runtime source override or native fixture adapter.

Scenario Model and transport Result
Native OpenClaw, custom base URL DeepSeek-V4.1-Flash-1017; openai-completions; authorized provider key and source-bound private endpoint PASS for chat completions — real model and required-worker execution before and after replacement; same session and retained workspace. Responses failed, detailed below.
Native OpenClaw, default OpenAI endpoint gpt-6-astra; openai-responses; OpenAI API key; source base_url omitted PASS — real model and required-worker execution before and after replacement; same session and retained workspace
Dedicated Codex, OpenAI gpt-6-astra; official OpenAI endpoint; OpenAI API key PASS — full registered OpenShell integration: 1 passed, 0 failed, 0 skipped, 1696.8 s

Native deployment and verification. The current-head occ dev up selected Podman, Kubernetes Compute, the Kubernetes-only control plane and OpenShell, with explicit existing controller/runtime images. It installed OCC and PostgreSQL through Helm and passed its network-isolation checks. The normal POST /namespaces/:namespaceId/agents/provision API created each dedicated Agent, Configuration, source grant, transport and revision. Native verification follows the existing native first-Agent workflow and its real Gateway/worker verifier.

Both native cases verified the exact runtime image configuration in containerd, provider-owned Sandbox/Pod identity, source access without an underlying Secret grant, workspace reads/writes through OCC, and model-driven exec in the actual worker. Normal redeployment produced different Sandbox and Pod UIDs while retaining storage, modified workspace files, the same session ID/key, and the session-file SHA-256. Real model and worker execution passed again in each replacement. These are manual E2E checks of the deployed workflow; the full first-Agent test lane is not claimed.

Codex verification. The registered test used current-head host-run OCC composition with real Kubernetes/OpenShell workloads, the pinned runtime and a fresh migrated database. Prepared kubeconfig/image/database selectors and the authorized OPENAI_API_KEY were supplied privately:

OCC_TEST_OPENSHELL_HARNESS=codex \
OCC_TEST_OPENSHELL_MODEL_BASE_URL=https://api.openai.com/v1 \
OCC_TEST_OPENAI_MODEL=openai/gpt-6-astra \
node --test tests/integration/sandbox-driver-openshell-k3d-real.test.mjs

It passed authenticated Codex WebSocket exposure, real model/shell turns, ownership/mount/privilege and credential-absence checks, filesystem/egress enforcement, policy update/revocation and recovery, credential routing, replacement, upstream/gateway outage recovery, refresh and non-model sources, live credential withdrawal, embedded fail-closed behavior and authenticated native policy scopes. This selects API-key authentication, not the Codex-PAT full CI lane.

Failures and limits retained. DeepSeek with openai-responses provisioned successfully but failed its real worker turn with worker transcript commit rejected. Normal reconfiguration did not complete before that failed test Agent was stopped; recovery from that failure is not claimed. A fresh Agent using openai-completions passed the complete before/after-replacement proof above. The passing DeepSeek row therefore qualifies chat completions only, not its Responses path; the root cause of the Responses failure listed below.

openai-responses error is fixed in openclaw/openclaw main

openclaw/openclaw#170461 was absent from local tests, this is the fix for the openai-responses error. Fixes the limitation of response ID length. This is not an issue with this PR's addition of custom base-url, and it is fixed with the updated openclaw checkout that includes 170461.

The launcher suite also passes: 27 passed, 0 failed, 0 skipped. CI-selection audit passes. The prepared images and normal deployment remain available.

Rebase verification (653711e5e, 2026-10-23)

  • Focused Kubernetes Compute, CredentialSource API and Sandbox startup suites: 514 passed, 0 failed, 1 explicit runtime-image skip.
  • The phone Agents-list browser case: 1 passed, 0 failed, 0 skipped in headless Chromium.
  • pnpm typecheck, pnpm lint, pnpm format:check, pnpm check:workspace, pnpm openapi:check, CI-selection audit, the owning flow validator and PR-diff whitespace checks pass. Root dependencies still match; the current frozen docs dependency graph was prepared in the isolated worktree.
  • pnpm docs:check: 290 pages / 4562 links, 511 Markdown files with no hard-limit violations, 96 specifications / 23 RFC numbers / 744 local targets. Large owning pages remain coherent single flows or Driver references (2486, 2472 and 2493 words); Manual Notes and older dated records are preserved, using the existing linked flow history.
  • git range-diff was inspected. The production endpoint added/removed lines are identical to the pre-rebase feature delta; upstream startup/restart behavior is retained. There is no RFC file or native-endpoint RFC index/lookup reference in the final tree.
  • Independent Codex (gpt-6.1-sol, medium) review of the frozen current PR delta is scoped-clean for P0–P2. It is source/diff review, not runtime qualification or a separate assessment of the RFC-removal commit.
  • Broader merge-blocker assessment and final-head live runtime qualification are not part of this maintenance update.

Pre-rebase live proof (c25610c2d, 2026-10-23 UTC)

A disposable Linux/amd64 Kubernetes/OpenShell stack was rebuilt from pre-rebase head c25610c2d. This evidence is retained for that head, not relabeled as qualification of the new rebased candidate. The deployed Compute and Credential Gateway source hashes match the reviewed checkout. OpenClaw uses repository pin f8386bc7df0a6c9eda7a28ae81943c5c06a414ff; no runtime-source override, compatibility bridge, isolation bypass or timeout change was used. The registered test ran with the fresh controller image's installed dependencies, current-head tests/scripts mounted read-only, and the real CLI, Docker, kubectl and k3d binaries. Codex and Fireworks credentials were supplied privately.

node --test --test-name-pattern='a local Kubernetes installer' tests/integration/local-first-agent-openshell-k3d-real.test.mjs
▶ a local Kubernetes installer can deploy and reuse an Agent but cannot replace its key after external changes
  ✔ guided native OpenClaw redeployment resumes the same session with retained files and required-worker execution (686500.437385ms)
✔ a local Kubernetes installer can deploy and reuse an Agent but cannot replace its key after external changes (810514.914048ms)
ℹ Existing stack has no python-web startup rule; override delivery was not exercised.
ℹ tests 2
ℹ suites 0
ℹ pass 2
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 811206.123048

The passing registered workflow covers Codex startup/reuse, native Kimi guided provisioning with a source-bound custom endpoint, real model and required-worker exec turns, replacement with a different provider-owned Sandbox/Pod, retained settings and workspace files, and the exact same session ID/key and session-file SHA-256 after replacement. The original Agent keeps no underlying Secret grant.

A separate native Kimi turn launched the endpoint probe: the bound Fireworks path returned HTTP 200 and the Kimi model; a sibling path outside the bound prefix returned HTTP 403 with OpenShell's explicit L7 denial. Source withdrawal then completed through the regular API. A fresh native model turn failed while the same OpenClaw PID/start time, Pod UID and zero restart counts remained unchanged. The worker process started before the API's withdrawal request. OpenShell recorded DNS and transparent-TCP policy denial after withdrawal.

Redacted terminal evidence (synthetic test identifiers; no credentials, IPs, private endpoints, machine paths or model transcripts):

{
  "head": "c25610c2d1699deb38ceece86941e4eda663cb62",
  "architecture": "linux/amd64",
  "openclawSourcePin": "f8386bc7df0a6c9eda7a28ae81943c5c06a414ff",
  "sourceHashes": {
    "apps/controller/src/drivers/compute/kubernetes/index.ts": "b0377e7c57bdd6ad0b68964b22cdb15b837d1e8122900cd0a97b096a508e01d8",
    "apps/controller/src/drivers/credential-gateway/openshell.ts": "4d24bcc96bb9df6be66d53e4c34f799e84d9da2f58dae7a46c4744ee541b44d0"
  },
  "images": [
    "docker.io/library/openclaw-enterprise-runtime@sha256:a1ee87b97c1428bc9dddcef15ddb0bb5b521a2bda1e1dfc0a5d47d590a662f2e",
    "docker.io/openclaw-development/openshell-supervisor@sha256:f55a8de4e520721ebee5bfa7d9dfe2daeedad10b918591810308afea16bc2f24",
    "docker.io/library/openclaw-enterprise-controller@sha256:bce74876aac49f6d869a4d413f7dbc2080ec80f061194234b0e9cab65fb9f73e",
    "docker.io/openclaw-development/openshell-gateway@sha256:da60351c19329a22e4077d214cc11b73fc5c0f70610f1fc00b16261b912080d4"
  ],
  "registeredTest": {
    "passed": 2,
    "failed": 0,
    "skipped": 0
  },
  "nativeRedeployment": {
    "beforeHostname": "os-78691e419a1b0101",
    "afterHostname": "os-d863868ad5650ee4",
    "sameSessionId": "a7a90614-bc13-4a2d-aef9-d08a6daf9f87",
    "sameSessionKey": "agent:main:first-agent-native-aeaf4339-0f60-4845-ba24-5b38dc1abb7a",
    "retainedSessionFile": ".first-agent-native-07158802-7fe6-4f58-aa9f-89118582b771.txt",
    "retainedSessionFileSha256": "312fe7d8e3ebf7db22ffebf060d672c32b6824534870105315156377d819021b"
  },
  "credentialBoundary": {
    "allowed": {
      "status": "200",
      "exit": "0",
      "model": "accounts/fireworks/models/kimi-k3",
      "endpointMismatch": false,
      "credentialRevoked": false,
      "credentialNotFound": false,
      "credentialUnavailable": false
    },
    "denied": {
      "status": "403",
      "exit": "0",
      "model": null,
      "endpointMismatch": false,
      "credentialRevoked": false,
      "credentialNotFound": false,
      "credentialUnavailable": false,
      "policyDenied": true
    },
    "withdrawal": {
      "state": "revoked",
      "reason": "CREDENTIALS_WITHDRAWN",
      "requestedAt": "2026-10-23T01:20:26.186Z",
      "completedAt": "2026-10-23T01:20:27.710Z"
    },
    "after": {
      "status": "000",
      "model": null
    },
    "sameProbePid": false,
    "samePodAndRestarts": true,
    "sameWorkerProcess": true,
    "workerProcessPredatesWithdrawal": true,
    "workerProcess": "189 Fri Oct 23 01:17:54 2026 openclaw",
    "probeLimitation": "The waiting shell ended while the collector was paused. The withdrawn-endpoint probe uses a new process in the same sandbox; the native OpenClaw worker started before withdrawal and remains running. The separate native model turn recorded below failed."
  },
  "postWithdrawalModelTurn": {
    "attempted": true,
    "runId": "425737d0-fe4f-447f-bae5-34b45e73a933",
    "status": "error",
    "assistantErrors": 1,
    "startedAt": "2026-10-23T01:24:22.447Z",
    "endedAt": "2026-10-23T01:24:36.870Z",
    "sameWorkerProcessAfterModelTurn": true,
    "samePodAndRestartsAfterModelTurn": true
  },
  "previousAttempt": {
    "head": "c25610c2d1699deb38ceece86941e4eda663cb62",
    "result": "failed",
    "cause": {
      "code": "RUNTIME_MODEL_PROBE_FAILED",
      "kind": "PROBE_STATUS",
      "detail": "unknown"
    },
    "initialNativeProof": true,
    "networkPolicyAllowedRequest": true,
    "providerHttpRejectionObserved": false,
    "diagnosticAfterFailure": "credential delivery removed after failed deployment; separate diagnostic timed out",
    "recorded": "2026-10-23T01:04:13.401Z"
  },
  "withdrawalPolicy": {
    "denialReasons": [
      "policy_dns_ineligible",
      "transparent_tcp_policy_denied"
    ]
  }
}

The disposable cluster and its credential state were removed after verification. The pre-existing OCE/Mastra installation remains running, and prior Docker quickstart tags were restored. The source checkout is unchanged.

Failures and collection limits are retained: the first current-head registered attempt failed at replacement startup with RUNTIME_MODEL_PROBE_FAILED / PROBE_STATUS: unknown; its initial native proof passed, and OpenShell permitted the outbound request. The cause remains unclassified. After deleting only that attempt's disposable Agents, one unchanged retry passed all assertions. The supplementary collector initially expected an older HTTP-form denial log and was corrected to match the observed HTTPS line. During that pause the waiting shell ended, so the same shell PID is not claimed: the post-withdrawal endpoint request used a new process in the same sandbox. The separately verified, unchanged native OpenClaw process and its failed new model turn establish withdrawal from the running worker. No production or registered-test source was changed for these checks.

Previous local checks (c25610c2d)

  • node --test tests/conformance/kubernetes-compute.test.mjs tests/integration/credential-source-api.test.mjs tests/integration/sandbox-driver-startup.test.mjs: 513 passed, 0 failed, 1 skipped. The skipped native initializer requires an explicitly selected OCC_TEST_RUNTIME_IMAGE; it was not run here.

  • node --test --test-name-pattern="On a phone the Agents list" tests/browser/console-agents-list-return.test.mjs: 1 passed, 0 failed, 0 skipped, using headless Chromium and the supported console fixture. This addresses the latest review's failing case; it is not deployed-runtime proof.

  • pnpm typecheck, pnpm lint, pnpm format:check, pnpm check:workspace and pnpm openapi:check pass. Frozen root/docs dependencies were explicitly prepared in the isolated worktree; manifests and lockfiles are unchanged.

  • pnpm docs:check: 289 pages / 4545 links, 509 Markdown files with no hard-limit violations, 97 specifications / 24 RFC numbers / 746 local targets. The three large owning pages remain single coherent flow or Driver references: 2500, 2472 and 2469 words. Manual Notes and historical records are preserved.

  • node scripts/ci/run-tests.mjs audit and git diff 9063f24f3 --check pass. The owning flow validator passed during conflict resolution.

  • Independent Codex (gpt-6.1-sol, medium) review of the frozen final branch against 9063f24f3: scoped-clean for P0–P2, with no actionable findings. A previous attempt invalidated by changing local verification output was discarded.

Risks

Current-head source/helper checks and independent review pass. The native k3d helper and worker restart proof now pass with the documented fixture bridge. The separately recorded three dedicated Helm/API scenarios pass on the repository-pinned runtime without that adapter. Native DeepSeek is qualified with chat completions; its Responses turn failed at worker transcript commit, and recovery from that failure remains unqualified. Earlier dated evidence remains limited to its recorded heads. The local E2E results do not establish production-environment or published-image qualification.

Fresh CI and the required eligible GitHub review must be checked at the published head before merge. No merge, deployment, default-image publication or change to the human-selected ready-for-review state is performed by this update. The RFC stays removed; this work does not add a broader endpoint-authority mechanism.

Earlier risk/status notes (historical)

Risks

Pre-rebase live proof at c25610c2d is recorded above, including the failed first attempt and the passing unchanged retry. The first replacement's model-probe failure remains unclassified; the successful retry proves the supported workflow but does not establish that startup failures cannot recur.

Pre-rebase CI, CodeQL and Observability checks pass. The QA Matrix Advisory workflow still requires maintainer approval and is not included in the live qualification above. Keep this PR draft. The standalone RFC is removed as requested; broader merge-blocker assessment will follow separately. This rebase does not automatically clear existing review findings or establish new-head runtime qualification. No production, ARM64, default-image or full protected-QA qualification is claimed. No database schema or persisted OCC resource format change is introduced.

Earlier implementation and runtime evidence (predates this refresh)

Dedicated native OpenClaw rejects custom OpenAI-compatible model endpoints even when an OpenShell CredentialSource is already bound to that endpoint. This change supports the existing openai alias with a configured HTTPS endpoint on port 443 ending in /v1, including nested prefixes, for credential_source authentication only. Secret-backed API keys remain restricted to https://api.openai.com/v1.

Kubernetes Compute reuses the existing URL normalizer, preserves model-level URLs, and enforces the authentication boundary at admission and preparation. OpenShell requires every native catalog endpoint to match the bound source endpoint, including its path. The source profile continues to own credential-substitution authority; Agent configuration cannot move the key to another endpoint.

RFC-0023 was submitted at dea6916aa before implementation continued and remains proposed. It was renumbered from RFC-0021 after upstream assigned that number to another proposal. Maintainer feedback is requested on this bounded extension. Existing provider IDs, API selectors, tool permissions, default image pins and publication policy are unchanged.

Review fixes and simplification

  • Closed the Secret-backed API-key admission gap. The regression fails on 7eebfc12c with the expected missing-refusal assertion and passes with the fix.
  • Removed the provider-file regex that rejected namespaced model IDs. The native provisioning fixture now uses team/model, checks normalized per-model URL projection and completions transport, and uses a genuine credential-source delivery context rather than a raw-key context.
  • Removed the extra temporary-directory implementation and its changed smoke topology. Upstream already supplies private temporary directories. Production changes now touch two Driver files; upstream readiness, setup-code/envelope handling, initialization and cleanup remain intact.
  • Shortened the owning flow and references below the 2500-word cap: 2436, 2425 and 2465 words. Each remains one coherent execution flow or Driver reference; Manual Notes and historical changelog entries are preserved.
  • Fixed the live provider-file credential reference to use the built-in default environment provider; the prior undefined model alias caused an actual HTTP 400 during guided provisioning. The one-word fix passes formatting, lint and isolated P0–P2 review.
  • Merged upstream 20fa2f8fa without rewriting published history. Resolved the documentation conflicts while preserving upstream lifecycle requirements, kept the owning pages within the 2500-word cap, and reconciled the RFC index and numbering.

Verification

Current head: 88df65bada94a85fff7fd50eb0728423b58dbb31, merged with upstream 20fa2f8fa.

Conflict-resolution checks pass: documentation validation (269 pages / 4255 links), Markdown length validation (478 files, no violations), specification validation (90 documents / 23 RFC numbers / 699 local targets), the owning flow validator, workspace boundaries, CI selection audit, and git diff --check. The documentation changes add no runtime behavior. Full code validation belongs to fresh CI with the updated dependency graph; local dependencies were not installed or reconciled for this refresh.

The following proof predates this merge and is not final-head runtime qualification:

  • Candidate 46b68a44f0f5ec13eff7cd5fccf33d1c51e445d7 contained the one-word provider-file environment fix. Its preceding production candidate passed 493 tests, 0 failed, 1 skipped across Kubernetes Compute conformance, CredentialSource API integration and Sandbox startup.
  • The real native initializer passed against the pinned runtime: 2 passed, 0 failed, 0 skipped, including serialized retries and preservation of later edits.
  • Typecheck, lint, workspace boundaries, CI selection audit, formatting, specification checks and isolated P0–P2 autoreview passed for their previously recorded scopes. The prior head's GitHub checks finished with 40 successful checks and 8 skipped, including CI, CodeQL and Observability.

Prior live Fireworks proof (46b68a44f)

A separate loopback-only Kubernetes/OpenShell stack used candidate 46b68a44f's images. Rebuilding after the test-only commit produced identical image IDs. Runtime source is the repository pin f8386bc7df0a6c9eda7a28ae81943c5c06a414ff; no compatibility bridge or runtime source override was used.

  • The full registered Kubernetes/OpenShell first-Agent integration test passes: 2 passed, 0 failed, 0 skipped (837.5 seconds). It exercises real Codex startup/reuse and native Kimi guided provisioning, genuine model and exec turns, replacement with a different provider-owned Sandbox/Pod, retained settings and files, and the exact same session ID/key and session-file SHA-256 after replacement.
  • Guided API provisioning uses an endpoint-bound openai CredentialSource. The required-worker assertions pass before and after replacement.
  • After a failed replacement startup and a normal recovery deployment, the existing native proof helper resumed the same session ID and key in the replacement worker and verified the original session file's SHA-256. This independent recovery/retention proof preceded the passing full registered run.
  • A command launched by native Kimi received HTTP 200 from the authorized endpoint and response model accounts/fireworks/models/kimi-k3. A sibling path outside /inference/v1 returned 403, corroborated by OpenShell's L7_REQUEST ... not permitted by policy event.
  • The API confirmed source withdrawal as revoked / CREDENTIALS_WITHDRAWN. A subsequent model turn failed; OpenShell recorded DNS and transparent-TCP policy denial for Fireworks. The native worker PID/start time remained identical, predated withdrawal, and its Pod had zero restarts. No deployment or process replacement was used to establish withdrawal.

Immutable images used:

  • Controller: docker.io/library/openclaw-enterprise-controller@sha256:298aa866bfb9f7897850e27cd9a17684f72163e99be022045c30a75915d78ff7
  • Runtime: docker.io/library/openclaw-enterprise-runtime@sha256:5341e06369b1cceffff3f5cef9e3c66714633391d0a2cc6dd0c5d329f5077475

Failures retained and remaining gates

Keep this PR draft:

  • An earlier full registered native redeployment attempt encountered RUNTIME_MODEL_PROBE_FAILED (PROBE_STATUS: unknown) on the replacement. Repeating the exact probe inside that same Sandbox succeeded without changing the credential or configuration; a normal recovery deployment also succeeded. The original cause remains unclassified.
  • A subsequent retry exhausted the disposable namespace's 10-Pod quota because earlier test Agents remained. After removing those owned test Agents, the clean full retry passed all assertions. Both earlier failures are retained in the local evidence; no timeout, quota, credential-boundary or runtime-source override was used to obtain the passing run.
  • Fresh CI for the merged head is awaiting maintainer workflow approval (action_required). The successful prior-head CI run tested 46b68a44f, not this merge commit. Credentialed native/OpenShell proof has not been repeated after the upstream merge.
  • RFC-0023 still needs the maintainer's endpoint-policy decision. No production, ARM64 or full protected QA qualification is claimed.

No database schema or persisted OCC resource format changes are introduced. Existing default-endpoint admission/delivery remains covered; the live recovery proof additionally verifies retained session data across replacement. No credentials, private endpoints, transcripts or machine paths are included here.

@clawsweeper

clawsweeper Bot commented Oct 17, 2026 •

Copy link
Copy Markdown
Contributor

🦞👀
ClawSweeper picked this up.

Pull request received. I will update this pull request when review starts.

ClawSweeper review complete

ClawSweeper finished reviewing this revision. The review result is being finalized.

View the workflow run.

@sunnymodi sunnymodi changed the title RFC and implementation: allow native OpenAI-compatible model endpoints Allow custom OpenAI-compatible endpoints for native OpenClaw Oct 17, 2026
@clawsweeper clawsweeper Bot added clawsweeper:intake:feature Preliminary submission classification; full source review pending. P2 Normal priority bug or improvement with limited blast radius. merge-risk: 🚨 security-boundary 🚨 Merging this PR could weaken sandboxing, authorization, credentials, or sensitive data. rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. and removed clawsweeper:intake:feature Preliminary submission classification; full source review pending. labels Oct 17, 2026
@clawsweeper

clawsweeper Bot commented Oct 17, 2026 •

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge.

What this changes

This PR allows dedicated native OpenClaw Agents to use custom HTTPS model endpoints bound to an OpenShell CredentialSource.

Example: Run native OpenClaw with kimi-k3 at https://api.fireworks.ai/inference/v1.

  • Before: Native model validation rejects the custom endpoint.
  • After: The matching source and model endpoint are accepted, and the native worker completes model turns through OpenShell.

Review scores

Measure Result What it means
Overall readiness 🦞 diamond lobster (5/6) The focused implementation has shipped-entry-point proof, preserves credential ownership, and resolves the previous review’s remaining proof request.
Proof confidence 🦞 diamond lobster (5/6) Sufficient (terminal): At d825ca8, the shipped native k3d helper completed Fireworks/Kimi Responses turns and its worker-restart exposure sweep using the documented test-only bridge. Separate Helm/API deployment evidence exercises custom chat completions, default OpenAI, and retained sessions across replacement without that bridge. Earlier terminal traces establish sibling-path denial and withdrawal from a running native worker against the unchanged Credential Gateway implementation. Prepared images were inspected and show unrelated Console behavior, so they do not support this verdict. DeepSeek Responses on a fixed runtime and published-image qualification are not claimed.
Patch quality 🦞 diamond lobster (5/6) No actionable review findings were identified.

Product

Kind: Feature · Worth it: Yes · Fix scope: Complete
User problem: Dedicated native OpenClaw cannot use an authorized compatible model endpoint already owned by its CredentialSource.
Reason: The native feature owner contributed the bounded implementation and moved it to review readiness; the change preserves existing credential custody and deployment ownership.

Merge readiness

✅ Ready for maintainer review

Keep this PR open: it adds a useful capability still absent from main, and review found no introduced defect or remaining proof blocker.

Priority: P2
Reviewed head: d825ca81a6ff3b36c75eff3bb4cf2e335b736190

Before merge

None.

Findings

None.

Agent review details

How this fits together

OCC authorizes Agent deployment, Kubernetes Compute projects the native model configuration, and OpenShell releases credentials only through the source-owned endpoint profile.

flowchart LR
  A[Agent deployment] --> B[OCC authorization]
  B --> C[Kubernetes Compute]
  D[CredentialSource endpoint] --> E[OpenShell profile]
  C --> F[Native OpenClaw worker]
  F --> E
  E --> G[Bound model endpoint]
Loading

Technical review

Best possible solution:

Land the source-owned endpoint extension while retaining OpenAI-only destinations for Secret-backed native authentication.

Do we have a high-confidence way to reproduce the issue?

Current-main source explicitly rejects custom native endpoints; no target code was executed during this review.

Is this the best way to solve the issue?

The implementation extends the existing Compute projection and Credential Gateway attachment path, reuses URL normalization, and preserves source-owned credential destinations.

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning medium; reviewed against 4c99bb8a38db.

Provenance checked

Testing

Proof path: shipped entry point.

Security

None.

Evidence

What I checked:

Likely related people:

  • Mrunal Patel: Raw commit d4f544c adds apps/controller/src/drivers/credential-gateway/openshell.ts:282 relative to its recorded parents. This identifies author metadata, not feature responsibility or a PR merger. (role: source-line author; confidence: high; commits: d4f544c4eee8; files: apps/controller/src/drivers/credential-gateway/openshell.ts)

Review metrics

Metric Value Why it matters
Production change +36 / -26 lines across two Driver files The production extension stays within existing configuration projection and credential attachment owners.

Root-cause cluster

Relationship: canonical
Canonical: #2755
Summary: This PR owns the dedicated native endpoint extension; the broader per-Agent endpoint proposal explicitly preserves that ownership.

Members:

Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything.

Labels

Label changes:

  • add proof: sufficient: Contributor real behavior proof is sufficient.
  • add rating: 🦞 diamond lobster: Overall readiness is 🦞 diamond lobster; proof is 🦞 diamond lobster and patch quality is 🦞 diamond lobster.
  • add status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR.
  • remove status: 📣 needs proof: Current PR status label is status: 👀 ready for maintainer look.
  • remove rating: 🦐 gold shrimp: Current PR rating is rating: 🦞 diamond lobster, so this older rating label is no longer current.

Label justifications:

  • P2: This is a useful, bounded endpoint capability for dedicated native Agents, without evidence of an urgent regression.
  • rating: 🦞 diamond lobster: Overall readiness is 🦞 diamond lobster; proof is 🦞 diamond lobster and patch quality is 🦞 diamond lobster.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR.
  • proof: sufficient: Contributor real behavior proof is sufficient.

Rating scale

6/6 🦀 challenger crab · 5/6 🦞 diamond lobster · 4/6 🐚 platinum hermit · 3/6 🦐 gold shrimp · 2/6 🦪 silver shellfish · 1/6 🧂 unranked krab. Overall follows the weaker of proof and patch quality; ✨ marks media proof (a screenshot, video, or linked artifact) that directly shows the changed behavior.

Workflow

ClawSweeper edits this one comment on every review. Comment @clawsweeper re-review for a fresh review only. Repair and merge execution lanes are retired.

History

Review history (5 earlier review cycles)
  • reviewed 2026-10-17T15:28:38.022Z sha 7eebfc1 :: needs real behavior proof before merge. :: [P2] Allow namespaced model IDs in the native provider-file input
  • reviewed 2026-10-22T23:30:10.615Z sha c25610c :: needs real behavior proof before merge. :: none
  • reviewed 2026-10-23T17:47:14.680Z sha 653711e :: blocked before merge. :: none
  • reviewed 2026-10-23T17:59:59.095Z sha ef1fdc6 :: needs real behavior proof before merge. :: none
  • reviewed 2026-10-24T23:56:02.494Z sha d825ca8 :: needs real behavior proof before merge. :: none

Reviewed October 25, 2026, 11:43 AM ET / 15:43 UTC (Revision 6).

@freeqaz

freeqaz commented Oct 17, 2026

Copy link
Copy Markdown
Collaborator

Free's clanker here (an AI agent working on Free's behalf). First review of 7eebfc12c, read-only, with the credential-custody angle as the focus. Verdict: the OpenShell-bound path is sound; one admission gap for the Secret-backed api_key method should be closed before this leaves draft, and CI is red on docs length.

Credential custody

credential_source (OpenShell): holds. The relay's release scope never comes from the Agent configuration. The provider profile endpoint is { host, 443, "<path>/**" } derived from the stored, immutable source base_url (credential-gateway/openshell.ts:532-540), and OpenShell's endpoint_path matcher treats /** as a subtree (/inference/v1 and /inference/v1/..., not /inference/v1evil). normalizeOpenAiBaseUrl is applied to both sides of the new catalog comparison, so case, IDN, trailing slash, .., encoded slashes and userinfo all normalize or fail closed, and a non-443 source port cannot match a model URL (model port must be empty). An Agent editor who points a model at a host they control gets a ScopeViolationError at attach, and even without that check the relay would refuse to release the key there. Good.

api_key (Secret-backed): the new admission rule is not bound to a key owner. nativeRuntimeConfiguration (compute/kubernetes/index.ts:2632) now accepts any public HTTPS :443 /v1 host for every auth method, but only credential_source reaches the catalog-vs-source check. kubernetesHarnessAuthMethods admits api_key for Dedicated OpenClaw, and prepareHarnessAuth (index.ts:996-1011) projects the real key as a secretKeyRef env. So for api_key the Agent configuration alone decides where a granted Secret's value is sent, which turns a Secret grant into a read. The relaxed assertion at tests/conformance/kubernetes-compute.test.mjs:12709 (validateHarnessAuth with apiKeyAuth and a custom host now doesNotThrow) encodes exactly that.

Today this is latent rather than exploitable: the OpenShell sandbox refuses secretKeyRef environment (sandbox/openshell.ts:438-442, 778-787, SANDBOX_SECRET_ENVIRONMENT_UNSUPPORTED), so such a deployment fails before the key leaves the cluster. But that error text anticipates upstream secret projection, and the admission rule is the layer that should carry the invariant. Suggested fix: keep https://api.openai.com/v1 as the only endpoint when harnessAuth.method !== "credential_source", or require an operator-level endpoint the way Codex does with runtime.codexModelBaseUrl (index.ts:3307). Either way, restore a refusal test for apiKeyAuth + custom host.

Blocking CI

Static Checks is red on this head: three docs exceed the 2500-word hard limit (docs/flows/harness-execution-topology.md 2568, docs/reference/drivers/kubernetes-compute.md 2520, docs/reference/drivers/openshell-credential-gateway.md 2536). CI is the authority here; local counts undercount without @sindresorhus/slugify. Aim for 2480 or less.

Smaller points

  • Fail early. A catalog-vs-source mismatch is only caught at deployment, as a generic ScopeViolationError that names no setting, and it rejects unselected catalog entries that Compute itself does not validate. Compute already has harnessAuth.credentialSource.config.base_url at preparation (index.ts:5595, 6535); refusing there with models.providers.openai.models.N.baseUrl named would reach the caller at preflight. Keep the gateway check as the fail-closed backstop.
  • Startup smoke topology. tests/integration/runtime-image-startup.test.mjs:940-958 drops OPENCLAW_RUNTIME_STATUS_PORT and swaps OPENCLAW_NODE_SETUP_CODE for the envelope. That moves the native smoke from the Compute-owned Pod path (status port, setup-code Secret: index.ts:10526, 10560) to the OpenShell path, so the readiness server and setup-code enrollment are no longer exercised. Keep both variants or say why one is enough.
  • TMPDIR child. Both production topologies already give the worker a private TMPDIR (sandbox/openshell.ts:1238 sets $HOME/tmp; index.ts:10526 sets /tmp/openclaw-native-worker), so the mkdtempSync change is defensive, which is fine. It is never removed, though, so openclaw-native-worker-XXXXXX accumulates under a retained sandbox home across worker restarts.
  • RFC number. 0021 is also claimed by docs(spec): propose Agent containment policy and enforcement evidence #1003 and docs: propose shared Driver configuration definitions (RFC-0022) #2616; main's specs/rfcs/ tops at 0020. Maintainers will decide on the RFC itself; we do not land spec PRs.

Verified

@freeqaz

freeqaz commented Oct 21, 2026

Copy link
Copy Markdown
Collaborator

Free's clanker here (an AI agent working on Free's behalf). I approved CI for this PR. The only failure is in Console Browser 2: tests/browser/console-agents-list-return.test.mjs:749 ("On a phone the Agents list stacks each row…"). It failed the same way on a rerun. This PR touches no Console files, and the tested merge commit predates #2524 (Agents list stop/delete), which landed on main shortly after. Merging current main into your branch should re-test it against the current Agents list. The branch merges cleanly with main.

@roboclaw-bot

Copy link
Copy Markdown
Contributor

Cleared the rebase conflicts by merging current main, without rewriting published history. Pushed c25610c2d.

Additional fixes:

  • Renumbered the native-endpoint proposal to RFC-0024 to avoid the new upstream collision.
  • Updated the native credential-source fixture with ownerCapability: "credential_gateway" so it satisfies the current ownership contract.
  • Preserved the existing credential-boundary and namespaced-model-ID fixes.

Verification: 513 focused tests passed, 0 failed, 1 explicit runtime-image skip; the previously failing phone Agents-list browser case passes. Typecheck, lint, formatting, docs and independent P0–P2 review pass. Final-head live-runtime proof and the endpoint-policy decision remain merge gates; this stays draft.

@roboclaw-bot

Copy link
Copy Markdown
Contributor

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

🦞👀
Exact review queued.

Re-review progress:

@sallyom

sallyom commented Oct 23, 2026

Copy link
Copy Markdown
Collaborator

Moving this to "Ready for review" to get it mergeable, ty @sunnymodi

sunnymodi and others added 6 commits October 23, 2026 15:50
Co-authored-by: sallyom <11166065+sallyom@users.noreply.github.com>
Co-authored-by: sallyom <11166065+sallyom@users.noreply.github.com>
Co-authored-by: sallyom <11166065+sallyom@users.noreply.github.com>
Co-authored-by: sallyom <11166065+sallyom@users.noreply.github.com>
Match the current CredentialSource contract so native endpoint preparation exercises the supported ownership path after the upstream merge.

Co-authored-by: sallyom <11166065+sallyom@users.noreply.github.com>
Keep current lifecycle behavior and source-bound endpoint documentation together. Preserve older changelog entries in the existing linked history to keep the flow within its word limit.

Co-authored-by: sallyom <11166065+sallyom@users.noreply.github.com>
@clawsweeper clawsweeper Bot added status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. and removed proof: sufficient Contributor real behavior proof is sufficient. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: ⏳ waiting on maintainer Only explicit maintainer approvals or decisions remain; merge is still blocked. labels Oct 23, 2026

Copy link
Copy Markdown
Contributor

Codex coordination for @stevenlee-oai's OCE 1.0 Model Primitive work: @sunnymodi, I am starting the per-Agent endpoint/manual-model work from #3050 and checked this PR at 6f5a6c80c0ee76f66c50e2fbb3c1c0a05cf5403c. I will keep Dedicated native OpenClaw custom-endpoint implementation with this PR and preserve its CredentialSource-owned endpoint boundary; selecting another endpoint must not retarget an existing source. The shared-Secret destination authorization decision in #3050 is still pending, so I have not enabled arbitrary custom destinations for shared Secrets. Please flag any overlap or contract changes we should account for, and point to the final tested head/runtime evidence when available. I will treat earlier-head proof separately from qualification of the current head.

Restrict Codex-token exemptions to the selected native file and explicit native helper bootstrap. Keep other OpenShell workflows fail-closed. Support requirements-free exposure withdrawal, normalize expected native endpoints, and extend the existing native workflow with worker-restart coverage.

Co-authored-by: sallyom <11166065+sallyom@users.noreply.github.com>
@roboclaw-bot

Copy link
Copy Markdown
Contributor

Fixed all three review issues in d825ca81a:

  • Native credential exemption is now scoped to the native file or explicit k3d-helper bootstrap; other OpenShell workflows still require Codex credentials before preparation. The regression fails before the fix and passes afterward.
  • Exposure withdrawal follows the requirements-free lifecycle contract. The existing real native workflow now checks the worker-restart sweep.
  • Native endpoint assertions use the shared normalizer, including equivalent explicit :443 URLs.

Scope stays limited to custom base URLs and OpenAI-compatible models for the native Harness using the existing source-owned credential path. This follow-up adds no production Driver, contract, authorization or image-pin changes.

610 focused tests pass, 0 fail, 1 explicit runtime-image skip; repository checks and independent P0–P2 review pass. The new real-cluster restart assertion remains unrun here because no selected k3d/database/runtime environment exists; earlier local proof is preserved at its actual head.

@sallyom

sallyom commented Oct 24, 2026

Copy link
Copy Markdown
Collaborator

@clawsweeper rereview

@clawsweeper

clawsweeper Bot commented Oct 24, 2026 •

Copy link
Copy Markdown
Contributor

🦞👀
Exact review queued.

Re-review progress:

@clawsweeper clawsweeper Bot added rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. and removed rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. labels Oct 24, 2026
@roboclaw-bot

Copy link
Copy Markdown
Contributor

On behalf of @sallyom: confirmed that the local DeepSeek openai-responses test used a runtime without openclaw/openclaw#170461 and returned a 485-character response ID. This matches the known upstream worker-schema limit and the reproduced worker transcript commit rejected / invalid-batch failure, rather than an introduced custom-endpoint defect in this PR. The fixed-runtime rerun is still pending; Sally will confirm the result here.

@sallyom

sallyom commented Oct 25, 2026

Copy link
Copy Markdown
Collaborator

@clawsweeper rereview

@clawsweeper

clawsweeper Bot commented Oct 25, 2026 •

Copy link
Copy Markdown
Contributor

🦞👀
Exact review queued.

Re-review progress:

@clawsweeper clawsweeper Bot added proof: sufficient Contributor real behavior proof is sufficient. rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. and removed status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. labels Oct 25, 2026

sallyom commented Oct 25, 2026

Copy link
Copy Markdown
Collaborator

Live A/B proof (2026-10-25) at d825ca81a: Linux/amd64, Docker/k3d, normal Kubernetes-only OCE + OpenShell 0.1.5, dedicated native OpenClaw, DeepSeek-V4.1-Flash-1017 through a custom OpenAI-compatible provider using openai-responses.

  • Baseline OpenClaw pin f8386bc7df0a6c9eda7a28ae81943c5c06a414ff reproduced worker transcript commit rejected.
  • The same pin plus the production change from openclaw/openclaw#170461, applied to both Gateway and worker, passed the unmodified native-worker verifier: real model + required-worker exec, file write, exact final marker, and model credentials absent from the exec environment. Committed response IDs included 485 characters, exceeding the old 256 limit.
  • Normal redeployment passed again: different Sandbox and Gateway/Agent Pod UIDs; same PVCs, four workspace hashes, session ID/key, and retained session-file SHA-256.

This is targeted live k3d proof with the upstream fix applied; the repository runtime pin is unchanged.

@roboclaw-bot
roboclaw-bot merged commit 58be04e into openclaw:main Oct 25, 2026
87 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

P2 Normal priority bug or improvement with limited blast radius. proof: sufficient Contributor real behavior proof is sufficient. rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants