fix(config): allow bundled provider timeout overlays#83267
Conversation
|
Codex review: needs maintainer review before merge. Workflow note: Future ClawSweeper reviews update this same comment in place. How this review workflow works
Summary Reproducibility: yes. by source inspection: current main requires PR rating Rank-up moves:
What the crustacean ranks mean
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 Rarity: 🥚 common. What is this egg doing here?
Real behavior proof Risk before merge
Maintainer options:
Next step before merge Security Review detailsBest 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 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:
What I checked:
Likely related people:
Codex review notes: model gpt-5.5, reasoning high; reviewed against b86435f0b597. |
29baec8 to
441ef66
Compare
|
Reviewed and fixed the two concrete ClawSweeper blockers in Changes:
Verification:
Note: WSL @clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. Re-review progress:
|
|
Addressed the Foundry overlay P2. What changed:
Verification: @clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. Re-review progress:
|
5256ea7 to
ad3ee88
Compare
|
I pushed a cleanup for the CI failures from the previous revision. Verification on the updated branch:
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 |
|
🦞🧹 I asked ClawSweeper to review this item again. Re-review progress:
|
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>
ad3ee88 to
292c5e2
Compare
|
🦞🧹 I asked ClawSweeper to review this item again. Re-review progress:
|
|
@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:
|
|
🦞🧹 I asked ClawSweeper to review this item again. Re-review progress:
|
* 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>
* 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 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 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 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 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 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 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 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 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 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 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
Fixes #83201.
Summary
models.providers.openai.timeoutSecondsis valid without redeclaringbaseUrlandmodels.baseUrlandmodels.models, and prove the timeout overlay is applied during model resolution.Real behavior proof
Fresh deterministic proof artifacts:
Behavior or issue addressed: A documented config such as
models.providers.openai.timeoutSeconds = 600was rejected at startup because the validator requiredmodels.providers.openai.baseUrlandmodels.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/mainand this PR head, then ran focused validation and changed-file checks:Evidence after fix: The before/after probe shows the bundled
openaioverlay now validates, while an unknown custom provider with onlytimeoutSecondsstill fails:Focused tests passed:
Observed result after fix:
models.providers.openai.timeoutSecondscan be used as a standalone bundled provider overlay and the resolver applies it asrequestTimeoutMs=600000; a custommodels.providers.custom.timeoutSecondsentry still fails validation until it declaresbaseUrlandmodels.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 --checkObserved result: