Skip to content

fix(config): allow bundled provider timeout overlays#83267

Merged
giodl73-repo merged 6 commits into
openclaw:mainfrom
giodl73-repo:fix-provider-timeout-overlay-83201
May 19, 2026
Merged

fix(config): allow bundled provider timeout overlays#83267
giodl73-repo merged 6 commits into
openclaw:mainfrom
giodl73-repo:fix-provider-timeout-overlay-83201

Conversation

@giodl73-repo

@giodl73-repo giodl73-repo commented May 17, 2026

Copy link
Copy Markdown
Contributor

Fixes #83201.

Summary

  • Allow bundled model provider config entries to act as overlays, so models.providers.openai.timeoutSeconds is valid without redeclaring baseUrl and models.
  • Preserve strict custom-provider validation: unknown provider IDs still require both baseUrl and models.
  • Guard configured-provider fallback against overlay entries without models, and prove the timeout overlay is applied during model resolution.

Real behavior proof

PR 83267 before/after proof

Fresh deterministic proof artifacts:

Behavior or issue addressed: A documented config such as models.providers.openai.timeoutSeconds = 600 was rejected at startup because the validator required models.providers.openai.baseUrl and models.providers.openai.models, even though the entry is only tuning a bundled provider.

Real environment tested: Local OpenClaw checkout on Ubuntu 24.04 under WSL, running production config validation and model resolution against real config objects.

Exact steps or command run after this patch: Ran a source-level before/after probe against origin/main and this PR head, then ran focused validation and changed-file checks:

node --import tsx <provider-timeout-overlay-proof>
CI=1 node scripts/run-vitest.mjs src/config/config-misc.test.ts src/config/schema.test.ts src/config/schema.help.quality.test.ts src/agents/pi-embedded-runner/model.test.ts src/agents/models-config.providers.google-antigravity.test.ts src/agents/models-config.providers.implicit.discovery-scope.test.ts src/agents/models-config.providers.normalize-keys.test.ts
pnpm check:changed

Evidence after fix: The before/after probe shows the bundled openai overlay now validates, while an unknown custom provider with only timeoutSeconds still fails:

before_status=10
{
  "overlay": {
    "ok": false,
    "issues": [
      "models.providers.openai.baseUrl: Invalid input: expected string, received undefined",
      "models.providers.openai.models: Invalid input: expected array, received undefined"
    ]
  },
  "custom": {
    "ok": false,
    "issues": [
      "models.providers.custom.baseUrl: Invalid input: expected string, received undefined",
      "models.providers.custom.models: Invalid input: expected array, received undefined"
    ]
  }
}
---
after_status=0
{
  "overlay": {
    "ok": true,
    "issues": []
  },
  "custom": {
    "ok": false,
    "issues": [
      "models.providers.custom.baseUrl: custom model providers must declare baseUrl; provider overlays without baseUrl are only supported for bundled providers",
      "models.providers.custom.models: custom model providers must declare models; provider overlays without models are only supported for bundled providers"
    ]
  }
}

Focused tests passed:

src/config/schema.help.quality.test.ts: 22 tests passed
src/config/schema.test.ts: 39 tests passed
src/config/config-misc.test.ts: 81 tests passed
src/agents/pi-embedded-runner/model.test.ts: 84 tests passed in both agents-core and agents-pi-embedded shards
pnpm check:changed: passed

Observed result after fix: models.providers.openai.timeoutSeconds can be used as a standalone bundled provider overlay and the resolver applies it as requestTimeoutMs=600000; a custom models.providers.custom.timeoutSeconds entry still fails validation until it declares baseUrl and models.

What was not tested: No live OpenAI request was sent; this validates startup config behavior and the model-resolution metadata path without contacting provider APIs.

Follow-up: overlay-only fallback guard

ClawSweeper found that materialized bundled-provider overlays (baseUrl: "", models: []) could still authorize fallback model synthesis. This follow-up keeps timeout overlays valid as configuration, but only lets fallback model synthesis proceed when there is an explicit configured model, a real baseUrl-backed provider surface, or the existing mock model path.

Additional verification after this follow-up:

node scripts/run-vitest.mjs \
  src/agents/pi-embedded-runner/model.test.ts \
  src/config/config-misc.test.ts \
  extensions/microsoft-foundry/index.test.ts

pnpm exec oxfmt --check --threads=1 \
  src/agents/pi-embedded-runner/model.ts \
  src/agents/pi-embedded-runner/model.test.ts

git diff --check

Observed result:

4 test files passed / 281 tests passed
All matched files use the correct format.
git diff --check passed

@openclaw-barnacle openclaw-barnacle Bot added commands Command implementations agents Agent runtime and tooling size: S maintainer Maintainer-authored PR labels May 17, 2026
@clawsweeper

clawsweeper Bot commented May 17, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge.

Workflow note: Future ClawSweeper reviews update this same comment in place.

How this review workflow works
  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.

Summary
The branch relaxes model-provider config validation for bundled provider overlays, materializes accepted overlays, guards fallback/model-resolution paths, and adds config/model/Foundry regression tests.

Reproducibility: yes. by source inspection: current main requires baseUrl and models in ModelProviderSchema, and the PR proof log shows the timeout-only OpenAI overlay failing before the patch. I did not run a local repro because this review was read-only and avoided artifact-generating commands.

PR rating
Overall: 🐚 platinum hermit
Proof: 🦞 diamond lobster
Patch quality: 🐚 platinum hermit
Summary: Strong proof and focused regression coverage make this a normal good PR, with the overall rating capped by the maintainer-owned config/provider contract decision.

Rank-up moves:

  • none
What the crustacean ranks mean
  • 🦀 challenger crab: rare, exceptional readiness with strong proof, clean implementation, and convincing validation.
  • 🦞 diamond lobster: very strong readiness with only minor maintainer review expected.
  • 🐚 platinum hermit: good normal PR, likely mergeable with ordinary maintainer review.
  • 🦐 gold shrimp: useful signal, but proof or patch confidence is still limited.
  • 🦪 silver shellfish: thin signal; proof, validation, or implementation needs work.
  • 🧂 unranked krab: not merge-ready because proof is missing/unusable or there are serious correctness or safety concerns.
  • 🌊 off-meta tidepool: rating does not apply to this item.

Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics.

PR egg
✨ Hatched: 🥚 common Pearl Patch Peep

        /\     /\            
      _/  \___/  \_          
     /  ( o   o )  \         
    |      \_/      |        
    |   /\  ===  /\ |        
     \_/  \_____/  \_/       
        _/|_| |_|\_          
       /__| | | |__\         
          ' ' ' '            
         /_/     \_\         
       .-----------.         
      '-------------'        

Rarity: 🥚 common.
Trait: purrs at green checks.
Share on X: post this hatch
Copy: My PR egg hatched a 🥚 common Pearl Patch Peep in ClawSweeper.

What is this egg doing here?
  • Eggs appear after the PR passes real-behavior proof. It is here for vibes, not verdicts: it does not change labels, ratings, merge decisions, or automation.
  • The shell reacts to review momentum: open follow-up work warms it up, re-review makes it wobble, and a clean final review lets it hatch.
  • How to hatch it: reach status: 👀 ready for maintainer look or status: 🚀 automerge armed; that usually means sufficient real-behavior proof, no blocking P0/P1/P2 findings, no security attention needed, and clean correctness.
  • The hatch is seeded from this repository and PR number, so the same PR keeps the same creature; the reviewed head SHA can only change safe visual details.
  • Rarity is just collectible sparkle: 🥚 common, 🌱 uncommon, 💎 rare, ✨ glimmer, and 🌈 legendary.

Real behavior proof
Sufficient (logs): The PR body and linked logs show before/after config validation and model-resolution behavior, with later comments adding focused fallback-guard verification on the updated head.

Risk before merge
Why this matters: - The validation change intentionally accepts previously invalid partial models.providers.<bundled-id> entries and materializes missing baseUrl/models as empty sentinel values; maintainers should accept that as the config contract before merge.

  • Bundled overlay eligibility is a static provider-ID list normalized through provider aliases, so future bundled provider IDs must stay synchronized unless this moves to manifest/provider metadata.
  • The change affects provider routing and auth-adjacent model resolution; focused tests and logs cover the config path, alias path, custom-provider rejection, Foundry guard, and fallback guard, but no live provider request was sent.

Maintainer options:

  1. Accept the guarded overlay contract (recommended)
    Merge after maintainer review confirms that empty materialized overlay sentinels and a static bundled-provider classifier are acceptable for the config contract.
  2. Move eligibility to provider metadata first
    If maintainers do not want a static allowlist in config schema code, require a pre-merge refactor that derives bundled overlay eligibility from provider/plugin metadata without weakening custom-provider validation.

Next step before merge
Human maintainer review is the right next action because the protected label and merge risks are about accepting the config/provider overlay contract, not an unresolved narrow code defect.

Security
Cleared: The diff changes config validation, model resolution, and tests; it does not add dependencies, scripts, workflows, secret sinks, or new external code execution paths.

Review details

Best possible solution:

Merge this shape once maintainers accept bundled provider entries as overlay-capable while keeping non-bundled custom providers strict and guarding resolver paths that expect real provider catalogs.

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

Yes, by source inspection: current main requires baseUrl and models in ModelProviderSchema, and the PR proof log shows the timeout-only OpenAI overlay failing before the patch. I did not run a local repro because this review was read-only and avoided artifact-generating commands.

Is this the best way to solve the issue?

Yes, with maintainer acceptance of the config contract. The PR keeps custom providers strict, applies the documented bundled-provider timeout overlay, and adds guards where overlay-only entries would otherwise look like real provider catalogs.

Label justifications:

  • P2: This fixes a real documented config/runtime mismatch with limited blast radius around model-provider config validation.
  • merge-risk: 🚨 compatibility: The PR changes startup validation so partial built-in provider config that was previously rejected becomes valid and materialized into runtime config.
  • merge-risk: 🚨 auth-provider: The diff touches provider config validation and model resolution paths that influence provider routing and auth-adjacent request metadata.

What I checked:

  • Current main rejects the reported overlay shape: On current main, ModelProviderSchema requires both baseUrl and models, while timeoutSeconds is only an optional field inside the same object; a timeout-only models.providers.openai block therefore fails schema validation before runtime defaults can apply. (src/config/zod-schema.core.ts:379, b86435f0b597)
  • Current docs/schema help present timeoutSeconds as an independent provider timeout knob: The schema help says models.providers.*.timeoutSeconds is an optional per-provider model request timeout and recommends it instead of changing global agent timeouts, which supports the linked bug’s expected behavior. (src/config/schema.help.ts:950, b86435f0b597)
  • PR preserves custom-provider strictness while allowing bundled overlays: The PR patch makes provider baseUrl/models optional at the raw schema layer, adds bundled-provider overlay eligibility, rejects missing fields for non-bundled provider IDs with explicit custom-provider errors, and materializes accepted bundled overlays back to the strict exported config shape. (src/config/zod-schema.core.ts:379, aca1f3d35da3)
  • PR guards overlay-only fallback model synthesis: The PR adds hasConfiguredFallbackSurface so timeout-only materialized overlays do not make unknown model IDs resolve as configured fallback models; the added test covers the typo-model rejection path. (src/agents/pi-embedded-runner/model.ts:896, 7c858127fc04)
  • Real behavior proof is present: The linked proof log shows current-main/source behavior rejecting models.providers.openai.timeoutSeconds, then the PR accepting that bundled overlay while still rejecting a custom provider with only timeoutSeconds; the PR comments add focused verification for the later fallback guard. (aca1f3d35da3)
  • Feature-history sample: Local blame/log history points the current schema, exported model-provider type, fallback resolver, and Foundry model-selected path to recent config/model area work, with additional recent touches to validation and model resolution. (src/config/zod-schema.core.ts:377, 17eab1ed4de8)

Likely related people:

  • steipete: Local blame on the central config schema, exported provider type, model fallback, and Foundry provider path points to commit 17eab1e as the current-main source for those lines. (role: recent area contributor; confidence: medium; commits: 17eab1ed4de8; files: src/config/zod-schema.core.ts, src/config/types.models.ts, src/agents/pi-embedded-runner/model.ts)
  • Gio Della-Libera: Recent current-main history includes config validation work in commit 19065e4, so this person is connected to the affected validation surface beyond opening this PR. (role: recent config validation contributor; confidence: medium; commits: 19065e4a2fc8; files: src/config/validation.ts)
  • Eduardo Piva: Commit 6f18dec recently changed src/agents/pi-embedded-runner/model.ts, which is the resolver path the PR updates for overlay fallback behavior. (role: recent model resolver contributor; confidence: medium; commits: 6f18decb7a2c; files: src/agents/pi-embedded-runner/model.ts)

Codex review notes: model gpt-5.5, reasoning high; reviewed against b86435f0b597.

@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 17, 2026
@giodl73-repo giodl73-repo force-pushed the fix-provider-timeout-overlay-83201 branch from 29baec8 to 441ef66 Compare May 17, 2026 21:25
@openclaw-barnacle openclaw-barnacle Bot removed the commands Command implementations label May 17, 2026
@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. P2 Normal backlog priority with limited blast radius. impact:auth-provider Auth, provider routing, model choice, or SecretRef resolution may break. and removed proof: sufficient ClawSweeper judged the real behavior proof convincing. labels May 17, 2026
@giodl73-repo

Copy link
Copy Markdown
Contributor Author

Reviewed and fixed the two concrete ClawSweeper blockers in 5a021ca6ec1858fc23f7d33157756d103011dcb3.

Changes:

  • Added google-antigravity to the bundled provider overlay allowlist so provider-alias timeout overlays validate.
  • Updated ModelProviderConfig so accepted overlay-only entries can omit baseUrl and models in the exported config type.
  • Added a regression for models.providers.google-antigravity.timeoutSeconds without custom-provider fields.

Verification:

  • git diff --check
  • node node_modules/vitest/vitest.mjs run src/config/config-misc.test.ts --reporter verbose -> 82 tests passed

Note: WSL codex review --uncommitted timed out without output; the patch is the narrow requested fix plus focused regression coverage.

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented May 18, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

Re-review progress:

@clawsweeper clawsweeper Bot added status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. merge-risk: 🚨 availability 🚨 May cause crashes, hangs, restart loops, stalls, or process outages. and removed impact:auth-provider Auth, provider routing, model choice, or SecretRef resolution may break. labels May 18, 2026
@giodl73-repo

Copy link
Copy Markdown
Contributor Author

Addressed the Foundry overlay P2.

What changed:

  • extensions/microsoft-foundry/provider.ts now treats missing providerConfig.models as an empty configured catalog before .find() / .map().
  • Added regression coverage for selecting a microsoft-foundry/... model when config only contains a timeout overlay.

Verification:

pnpm install
CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 node scripts/run-vitest.mjs extensions/microsoft-foundry/index.test.ts src/config/config-misc.test.ts
blocked locally: spawn EPERM before Vitest started

CI=1 OPENCLAW_VITEST_MAX_WORKERS=1 node node_modules/vitest/vitest.mjs run extensions/microsoft-foundry/index.test.ts src/config/config-misc.test.ts --maxWorkers=1 --reporter=dot
Test Files  2 passed (2)
Tests  111 passed (111)

git diff --check
passed

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented May 18, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

Re-review progress:

@clawsweeper clawsweeper Bot removed the merge-risk: 🚨 availability 🚨 May cause crashes, hangs, restart loops, stalls, or process outages. label May 18, 2026
@giodl73-repo giodl73-repo force-pushed the fix-provider-timeout-overlay-83201 branch from 5256ea7 to ad3ee88 Compare May 18, 2026 18:31
@giodl73-repo

Copy link
Copy Markdown
Contributor Author

I pushed a cleanup for the CI failures from the previous revision.

Verification on the updated branch:

  • node node_modules\\@typescript\\native-preview\\bin\\tsgo.js --noEmit --pretty false -p tsconfig.json - passes
  • node node_modules\\oxlint\\dist\\cli.js extensions/microsoft-foundry/provider.ts extensions/microsoft-foundry/index.test.ts src/config/zod-schema.core.ts src/config/types.models.ts src/config/config-misc.test.ts - passes
  • $env:CI='1'; $env:OPENCLAW_VITEST_MAX_WORKERS='1'; node node_modules/vitest/vitest.mjs run extensions/microsoft-foundry/index.test.ts src/config/config-misc.test.ts --maxWorkers=1 --reporter=dot - 2 files, 111 tests passed
  • git diff --check - passes

The shared model provider type stays strict; the schema accepts bundled-provider overlay input, and the Foundry selection path guards the overlay shape when applying the selected model.

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented May 18, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

Re-review progress:

giodl73-repo and others added 3 commits May 18, 2026 11:42
Allow bundled model provider config entries to act as overlays so fields like timeoutSeconds can be configured without redeclaring baseUrl and models. Keep unknown custom provider declarations strict, and guard configured-provider fallback against overlay entries without models.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@giodl73-repo giodl73-repo force-pushed the fix-provider-timeout-overlay-83201 branch from ad3ee88 to 292c5e2 Compare May 18, 2026 18:43
@clawsweeper

clawsweeper Bot commented May 18, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

Re-review progress:

@clawsweeper clawsweeper Bot added rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. merge-risk: 🚨 auth-provider 🚨 May break OAuth, tokens, provider routing, model choice, or credentials. and removed rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. merge-risk: 🚨 availability 🚨 May cause crashes, hangs, restart loops, stalls, or process outages. labels May 18, 2026
@giodl73-repo

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

Fixed the P2 around timeout-only provider overlays leaking into fallback model synthesis. The model resolver now only synthesizes fallback models for an explicit configured model, a real baseUrl-backed provider surface, or the existing mock model path; timeout-only bundled overlays no longer turn unknown model ids into resolved models.

Verification in WSL:

  • node scripts/run-vitest.mjs src/agents/pi-embedded-runner/model.test.ts src/config/config-misc.test.ts extensions/microsoft-foundry/index.test.ts — 4 test files / 281 tests passed
  • pnpm exec oxfmt --check --threads=1 src/agents/pi-embedded-runner/model.ts src/agents/pi-embedded-runner/model.test.ts — passed
  • git diff --check — passed

@clawsweeper

clawsweeper Bot commented May 19, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

Re-review progress:

@clawsweeper clawsweeper Bot added rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. and removed rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. labels May 19, 2026
@giodl73-repo giodl73-repo merged commit ff871e1 into openclaw:main May 19, 2026
98 checks passed
frankhli843 added a commit to gemmaclaw/gemmaclaw that referenced this pull request May 20, 2026
* feat(ui): tool name style in usage panel (openclaw#84310)

Summary:
- This PR adds scoped truncation and hover titles to usage-panel context-breakdown names and adds a changelog entry crediting the source PR.
- Reproducibility: yes. at source/proof level: current main renders long context names without truncation or t ... he overflow before and ellipsis/tooltip after. I did not run a live browser session in this read-only pass.

Automerge notes:
- PR branch already contained follow-up commit before automerge: feat(ui): tool name style in usage panel

Validation:
- ClawSweeper review passed for head 396e405.
- Required merge gates passed before the squash merge.

Prepared head SHA: 396e405
Review: openclaw#84310 (comment)

Co-authored-by: Rain120 <1085131904@qq.com>
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>

* fix(clawhub): preserve base URL path prefix [AI-assisted] (openclaw#83982)

Summary:
- The PR updates `src/infra/clawhub.ts` URL joining, adds a path-prefix regression test in `src/infra/clawhub.test.ts`, and adds a changelog bullet.
- Reproducibility: yes. Source inspection plus a direct Node URL check show current main drops `/clawhub` when resolving a leading-slash API path against a prefixed base URL.

Automerge notes:
- PR branch already contained follow-up commit before automerge: fix(clawhub): preserve base URL path prefix [AI-assisted]

Validation:
- ClawSweeper review passed for head 7bb2cb8.
- Required merge gates passed before the squash merge.

Prepared head SHA: 7bb2cb8
Review: openclaw#83982 (comment)

Co-authored-by: Thiago Costa <thiago12_fera@hotmail.com>
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>

* fix(docker): keep codex plugin in release images

Ported from upstream d0f7c8f. Adds OPENCLAW_EXTENSIONS=diagnostics-otel,codex
to both amd64 and arm64 Docker release builds and adds regression test.

* fix(cli): format acp client errors with formatErrorMessage (openclaw#83904) (openclaw#84080)

Summary:
- The PR changes `openclaw acp client` error handling to use `formatErrorMessage`, adds a plain-object rejection regression test, and adds a changelog entry.
- Reproducibility: yes. Current main visibly sends `openclaw acp client` caught errors through `String(err)`,  ...  catch already uses `formatErrorMessage`; I did not run a live failing ACP server in this read-only review.

Automerge notes:
- PR branch already contained follow-up commit before automerge: fix(cli): format acp client errors with formatErrorMessage (openclaw#83904)

Validation:
- ClawSweeper review passed for head 69ef0e7.
- Required merge gates passed before the squash merge.

Prepared head SHA: 69ef0e7
Review: openclaw#84080 (comment)

Co-authored-by: HCL <chenglunhu@gmail.com>
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>

* fix(cli): preserve first line of channels logs at window boundary (openclaw#84106)

Summary:
- The PR updates `openclaw channels logs` tail-window reading to keep a complete first line when the 1 MB window starts on a newline boundary, adds a regression test, and adds a changelog entry.
- Reproducibility: yes. Source inspection on current main shows the unconditional first-line drop, and the PR  ... s provide terminal before/after CLI output for a 2 MB log whose tail window starts exactly after a newline.

Automerge notes:
- PR branch already contained follow-up commit before automerge: Merge remote-tracking branch 'origin/main' into fix/channels-logs-dro…
- PR branch already contained follow-up commit before automerge: fix(cli): preserve first line of channels logs at window boundary

Validation:
- ClawSweeper review passed for head 284b312.
- Required merge gates passed before the squash merge.

Prepared head SHA: 284b312
Review: openclaw#84106 (comment)

Co-authored-by: BSG2000 <bsg2000@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>

* fix(cli): preserve equals in root option values [AI-assisted] (openclaw#84107)

Summary:
- This PR updates CLI root option parsing to preserve embedded equals signs, adds focused Vitest coverage for inline and space-separated values, and records the fix in the changelog.
- Reproducibility: yes. by source inspection: current main uses `raw.split("=", 2)`, so `--token=abc=def` returns only `abc`; the PR body also supplies after-fix live output for the same path.

Automerge notes:
- PR branch already contained follow-up commit before automerge: fix(cli): preserve equals in root option values [AI-assisted]

Validation:
- ClawSweeper review passed for head 8a15801.
- Required merge gates passed before the squash merge.

Prepared head SHA: 8a15801
Review: openclaw#84107 (comment)

Co-authored-by: Thiago Costa <thiago12_fera@hotmail.com>
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>

* fix(cli): reject out-of-range port numbers in parsePort (openclaw#83900) (openclaw#84008)

Summary:
- The PR adds a 65,535 upper-bound check to the shared CLI `parsePort` helper, a colocated regression test, and a changelog entry for the linked port-range bug.
- Reproducibility: yes. Source inspection on current main shows `parsePort('99999')` delegates to `parseStrict ... sitive safe integer, so the return would be `99999`; I did not execute it because this review is read-only.

Automerge notes:
- PR branch already contained follow-up commit before automerge: fix(cli): reject out-of-range port numbers in parsePort (openclaw#83900)

Validation:
- ClawSweeper review passed for head 9ad0705.
- Required merge gates passed before the squash merge.

Prepared head SHA: 9ad0705
Review: openclaw#84008 (comment)

Co-authored-by: HCL <chenglunhu@gmail.com>
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>

* fix(agents): ignore duplicate embedded run clears

* fix(agents): ignore duplicate embedded run clears

* test(agents): fix embedded run clear lint

* docs(changelog): note embedded run clear fix

---------

Co-authored-by: Galin Iliev <Galin.Iliev@microsoft.com>

* fix(config): allow bundled provider timeout overlays (openclaw#83267)

* fix config provider timeout overlays

Allow bundled model provider config entries to act as overlays so fields like timeoutSeconds can be configured without redeclaring baseUrl and models. Keep unknown custom provider declarations strict, and guard configured-provider fallback against overlay entries without models.

* fix(config): include provider aliases in model overlays

* fix(config): guard Foundry timeout overlays

* fix(config): normalize bundled provider overlays

* fix(models): reject overlay-only fallback models

* fix(whatsapp): clarify inbound group diagnostics (openclaw#83969)

Summary:
- The PR updates WhatsApp inbound listener and group-drop diagnostics, adds focused tests, and documents that observed but unregistered groups must be admitted through `channels.whatsapp.groups`.
- Reproducibility: yes. from source inspection: current main still emits the DM-only startup log and vague gro ... sions/whatsapp/src/auto-reply/monitor.ts` and `extensions/whatsapp/src/auto-reply/monitor/group-gating.ts`.

Automerge notes:
- PR branch already contained follow-up commit before automerge: fix(whatsapp): clarify group drop guidance
- PR branch already contained follow-up commit before automerge: fix(whatsapp): make inbound diagnostics policy-aware
- PR branch already contained follow-up commit before automerge: fix(whatsapp): clarify inbound group diagnostics

Validation:
- ClawSweeper review passed for head 0da24e3.
- Required merge gates passed before the squash merge.

Prepared head SHA: 0da24e3
Review: openclaw#83969 (comment)

Co-authored-by: Neerav Makwana <261249544+neeravmakwana@users.noreply.github.com>
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>

---------

Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: Rain120 <1085131904@qq.com>
Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>
Co-authored-by: Thiago Costa <thiago12_fera@hotmail.com>
Co-authored-by: hcl <chenglunhu@gmail.com>
Co-authored-by: Thomas Krohnfuß <BSG2000@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Galin Iliev <iliev@galcho.com>
Co-authored-by: Galin Iliev <Galin.Iliev@microsoft.com>
Co-authored-by: Gio Della-Libera <giodl73@gmail.com>
Co-authored-by: Neerav Makwana <261249544+neeravmakwana@users.noreply.github.com>
SebTardif pushed a commit to SebTardif/openclaw that referenced this pull request May 24, 2026
* fix config provider timeout overlays

Allow bundled model provider config entries to act as overlays so fields like timeoutSeconds can be configured without redeclaring baseUrl and models. Keep unknown custom provider declarations strict, and guard configured-provider fallback against overlay entries without models.

* fix(config): include provider aliases in model overlays

* fix(config): guard Foundry timeout overlays

* fix(config): normalize bundled provider overlays

* fix(models): reject overlay-only fallback models
SebTardif pushed a commit to SebTardif/openclaw that referenced this pull request May 24, 2026
* fix config provider timeout overlays

Allow bundled model provider config entries to act as overlays so fields like timeoutSeconds can be configured without redeclaring baseUrl and models. Keep unknown custom provider declarations strict, and guard configured-provider fallback against overlay entries without models.

* fix(config): include provider aliases in model overlays

* fix(config): guard Foundry timeout overlays

* fix(config): normalize bundled provider overlays

* fix(models): reject overlay-only fallback models
SebTardif pushed a commit to SebTardif/openclaw that referenced this pull request May 24, 2026
* fix config provider timeout overlays

Allow bundled model provider config entries to act as overlays so fields like timeoutSeconds can be configured without redeclaring baseUrl and models. Keep unknown custom provider declarations strict, and guard configured-provider fallback against overlay entries without models.

* fix(config): include provider aliases in model overlays

* fix(config): guard Foundry timeout overlays

* fix(config): normalize bundled provider overlays

* fix(models): reject overlay-only fallback models
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request May 24, 2026
* fix config provider timeout overlays

Allow bundled model provider config entries to act as overlays so fields like timeoutSeconds can be configured without redeclaring baseUrl and models. Keep unknown custom provider declarations strict, and guard configured-provider fallback against overlay entries without models.

* fix(config): include provider aliases in model overlays

* fix(config): guard Foundry timeout overlays

* fix(config): normalize bundled provider overlays

* fix(models): reject overlay-only fallback models
galiniliev pushed a commit to galiniliev/openclaw that referenced this pull request May 25, 2026
* fix config provider timeout overlays

Allow bundled model provider config entries to act as overlays so fields like timeoutSeconds can be configured without redeclaring baseUrl and models. Keep unknown custom provider declarations strict, and guard configured-provider fallback against overlay entries without models.

* fix(config): include provider aliases in model overlays

* fix(config): guard Foundry timeout overlays

* fix(config): normalize bundled provider overlays

* fix(models): reject overlay-only fallback models
SebTardif pushed a commit to SebTardif/openclaw that referenced this pull request May 26, 2026
* fix config provider timeout overlays

Allow bundled model provider config entries to act as overlays so fields like timeoutSeconds can be configured without redeclaring baseUrl and models. Keep unknown custom provider declarations strict, and guard configured-provider fallback against overlay entries without models.

* fix(config): include provider aliases in model overlays

* fix(config): guard Foundry timeout overlays

* fix(config): normalize bundled provider overlays

* fix(models): reject overlay-only fallback models
SebTardif pushed a commit to SebTardif/openclaw that referenced this pull request May 26, 2026
* fix config provider timeout overlays

Allow bundled model provider config entries to act as overlays so fields like timeoutSeconds can be configured without redeclaring baseUrl and models. Keep unknown custom provider declarations strict, and guard configured-provider fallback against overlay entries without models.

* fix(config): include provider aliases in model overlays

* fix(config): guard Foundry timeout overlays

* fix(config): normalize bundled provider overlays

* fix(models): reject overlay-only fallback models
SebTardif pushed a commit to SebTardif/openclaw that referenced this pull request May 26, 2026
* fix config provider timeout overlays

Allow bundled model provider config entries to act as overlays so fields like timeoutSeconds can be configured without redeclaring baseUrl and models. Keep unknown custom provider declarations strict, and guard configured-provider fallback against overlay entries without models.

* fix(config): include provider aliases in model overlays

* fix(config): guard Foundry timeout overlays

* fix(config): normalize bundled provider overlays

* fix(models): reject overlay-only fallback models
jameslcowan pushed a commit to jameslcowan/openclaw that referenced this pull request Jun 2, 2026
* fix config provider timeout overlays

Allow bundled model provider config entries to act as overlays so fields like timeoutSeconds can be configured without redeclaring baseUrl and models. Keep unknown custom provider declarations strict, and guard configured-provider fallback against overlay entries without models.

* fix(config): include provider aliases in model overlays

* fix(config): guard Foundry timeout overlays

* fix(config): normalize bundled provider overlays

* fix(models): reject overlay-only fallback models
SYU8384 pushed a commit to SYU8384/openclaw that referenced this pull request Jun 3, 2026
* fix config provider timeout overlays

Allow bundled model provider config entries to act as overlays so fields like timeoutSeconds can be configured without redeclaring baseUrl and models. Keep unknown custom provider declarations strict, and guard configured-provider fallback against overlay entries without models.

* fix(config): include provider aliases in model overlays

* fix(config): guard Foundry timeout overlays

* fix(config): normalize bundled provider overlays

* fix(models): reject overlay-only fallback models
sablehead pushed a commit to sablehead/openclaw that referenced this pull request Jun 10, 2026
* fix config provider timeout overlays

Allow bundled model provider config entries to act as overlays so fields like timeoutSeconds can be configured without redeclaring baseUrl and models. Keep unknown custom provider declarations strict, and guard configured-provider fallback against overlay entries without models.

* fix(config): include provider aliases in model overlays

* fix(config): guard Foundry timeout overlays

* fix(config): normalize bundled provider overlays

* fix(models): reject overlay-only fallback models
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agents Agent runtime and tooling maintainer Maintainer-authored PR merge-risk: 🚨 auth-provider 🚨 May break OAuth, tokens, provider routing, model choice, or credentials. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. P2 Normal backlog priority with limited blast radius. proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. size: M 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.

[Bug]: models.providers.<id>.timeoutSeconds documented in schema as standalone-valid, rejected by startup validator on built-in providers

1 participant