Skip to content

Fix Control UI agent thinking defaults#81795

Merged
steipete merged 5 commits into
openclaw:mainfrom
jbetala7:fix/81760-agent-thinking-default
May 31, 2026
Merged

Fix Control UI agent thinking defaults#81795
steipete merged 5 commits into
openclaw:mainfrom
jbetala7:fix/81760-agent-thinking-default

Conversation

@jbetala7

@jbetala7 jbetala7 commented May 14, 2026

Copy link
Copy Markdown
Contributor

Fixes #81760

Summary

  • include resolved thinking defaults and levels in agents.list rows
  • show the resolved thinking default in the Agents overview
  • stop chat UI and /think status fallbacks from using global thinking defaults for sessions on a different model

Real behavior proof

Behavior or issue addressed: Control UI should show and inherit the effective thinking default for the selected agent/session, not the global default from a different model.

Real environment tested: Local OpenClaw gateway from PR head e4806661795f81e12849864fe227b9f4b5ef92f1 on macOS, with Control UI rebuilt by pnpm ui:build, a temporary OPENCLAW_HOME, token auth on 127.0.0.1:18895, and a proof config containing:

{
  "agents": {
    "defaults": {
      "model": { "primary": "minimax/MiniMax-M2.7" },
      "thinkingDefault": "off"
    },
    "list": [
      { "id": "main", "default": true },
      {
        "id": "investment-master",
        "model": { "primary": "deepseek/deepseek-v4-flash" },
        "thinkingDefault": "xhigh"
      }
    ]
  }
}

For the local headless browser run only, gateway.controlUi.dangerouslyDisableDeviceAuth=true was set so Chrome could connect over local HTTP without a one-time pairing ceremony. The gateway still used token auth; the behavior under test was the live agents.list payload and Control UI rendering.

Exact steps or command run after this patch:

pnpm ui:build
COREPACK_HOME=/Users/betala/.cache/node/corepack HOME=/private/tmp/openclaw-proof-81795-home OPENCLAW_HOME=/private/tmp/openclaw-proof-81795-home/.openclaw OPENCLAW_STATE_DIR=/private/tmp/openclaw-proof-81795-home/.openclaw OPENCLAW_CONFIG_PATH=/private/tmp/openclaw-proof-81795-home/.openclaw/openclaw.json OPENCLAW_GATEWAY_TOKEN=proof-token-81795 OPENCLAW_SKIP_CHANNELS=1 node scripts/run-node.mjs --dev gateway --port 18895 --bind loopback --allow-unconfigured --verbose --cli-backend-logs
curl -sS -i http://127.0.0.1:18895/healthz
COREPACK_HOME=/Users/betala/.cache/node/corepack HOME=/private/tmp/openclaw-proof-81795-home OPENCLAW_HOME=/private/tmp/openclaw-proof-81795-home/.openclaw OPENCLAW_STATE_DIR=/private/tmp/openclaw-proof-81795-home/.openclaw OPENCLAW_CONFIG_PATH=/private/tmp/openclaw-proof-81795-home/.openclaw/openclaw.json OPENCLAW_GATEWAY_TOKEN=proof-token-81795 node --import tsx /private/tmp/openclaw-81795-client-proof.ts
node /private/tmp/openclaw-81795-ui-proof.mjs

Evidence after fix:

Live gateway output:

$ curl -sS -i http://127.0.0.1:18895/healthz
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Cache-Control: no-store
Content-Length: 27

{"ok":true,"status":"live"}

$ node --import tsx /private/tmp/openclaw-81795-client-proof.ts
{
  "gatewayUrl": "ws://127.0.0.1:18895",
  "helloOk": "hello-ok",
  "authRole": "operator",
  "authScopes": ["operator.read"],
  "investmentMaster": {
    "id": "investment-master",
    "model": { "primary": "deepseek/deepseek-v4-flash" },
    "thinkingDefault": "xhigh",
    "thinkingLevels": ["off", "minimal", "low", "medium", "high", "xhigh", "max"],
    "thinkingOptions": ["off", "minimal", "low", "medium", "high", "xhigh", "max"]
  }
}

Live Control UI browser output:

$ node /private/tmp/openclaw-81795-ui-proof.mjs
{
  "url": "http://127.0.0.1:18895/agents",
  "matchedExpectedText": true,
  "sawInvestmentMaster": true,
  "sawThinkingDefault": true,
  "sawXhigh": true,
  "thinkingSnippet": "Workspace ... /private/tmp/openclaw-proof-81795-workspace/investment-master\nPrimary Model\ndeepseek/deepseek-v4-flash\nRuntime\nauto\nThinking Default\nxhigh\nSkills Filter\nall skills ...",
  "consoleMessages": [
    "debug: [openclaw] control-ui.rpc {... method: agents.list, ok: true, durationMs: 235, slow: false}",
    "debug: [openclaw] control-ui.rpc {... method: agents.list, ok: true, durationMs: 74, slow: false}"
  ]
}

Observed result after fix: The running gateway returns the investment-master row with thinkingDefault: "xhigh" and model-specific thinking levels instead of the global off default. The running Control UI /agents page, connected to that gateway, renders the selected investment-master overview with Thinking Default shown as xhigh.

What was not tested: I did not run a live LLM chat turn or /think command against a provider because the proof config intentionally has no provider API keys. The focused tests below cover the chat selector and /think fallback paths.

Re-verified on current head 634b90d5a2e422e778592949e07d9339fba1095b (2026-05-25): the branch was rebased onto current origin/main, reconciling resolveThinkingLevelOptions with main's added model-catalog argument while keeping the defaultFromSessionDefaults fix. The live gateway and Control UI transcripts above were captured on the pre-rebase head e4806661795f81e12849864fe227b9f4b5ef92f1; the rebase only reconciled the merge and did not change the user-facing behavior under test. The focused regression suite re-runs green on the current head:

$ pnpm test src/gateway/session-utils.test.ts ui/src/ui/views/agents.test.ts ui/src/ui/views/chat.test.ts ui/src/ui/chat/slash-command-executor.node.test.ts
[test] starting test/vitest/vitest.gateway.config.ts   -> Test Files 1 passed (1)  Tests 94 passed (94)
[test] starting test/vitest/vitest.ui.config.ts        -> Test Files 1 passed (1)  Tests 8 passed (8)
[test] starting test/vitest/vitest.unit-ui.config.ts   -> Test Files 2 passed (2)  Tests 86 passed (86)
[test] passed 3 Vitest shards

Verification

  • pnpm test src/gateway/session-utils.test.ts ui/src/ui/views/agents.test.ts ui/src/ui/views/chat.test.ts ui/src/ui/chat/slash-command-executor.node.test.ts
  • pnpm exec oxfmt --write src/shared/session-types.ts src/gateway/session-utils.types.ts src/gateway/session-utils.ts src/gateway/session-utils.test.ts ui/src/ui/views/agents-panels-overview.ts ui/src/ui/views/agents.test.ts ui/src/ui/chat/session-controls.ts ui/src/ui/views/chat.test.ts ui/src/ui/chat/slash-command-executor.ts ui/src/ui/chat/slash-command-executor.node.test.ts
  • git diff --check
  • pnpm ui:build
  • live gateway RPC and live Control UI browser transcripts above

@openclaw-barnacle openclaw-barnacle Bot added app: web-ui App: web-ui gateway Gateway runtime size: M triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. triage: mock-only-proof Candidate: PR proof only shows tests, mocks, snapshots, lint, typecheck, or CI. and removed triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. labels May 14, 2026
@clawsweeper

clawsweeper Bot commented May 14, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs real behavior proof before merge. Reviewed May 31, 2026, 9:34 AM ET / 13:34 UTC.

Summary
The branch adds resolved per-agent thinking metadata to agents.list, displays the thinking default in the Control UI Agents overview, and prevents chat plus /think fallbacks from applying global defaults across different models.

PR surface: Source +52, Tests +153. Total +205 across 12 files.

Reproducibility: yes. Source inspection shows current main omits per-agent thinking metadata from agents.list and still lets chat /think paths use global thinking defaults when the active session model differs.

Review metrics: 1 noteworthy metric.

  • agents.list result fields: 3 added. The PR expands a public strict gateway result shape, so maintainers need to notice protocol compatibility before merge.

Merge readiness
Overall: 🦐 gold shrimp
Proof: 🦐 gold shrimp
Patch quality: 🐚 platinum hermit
Result: blocked until stronger real behavior proof is added.

Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch.

Rank-up moves:

  • [P1] Add current-head live gateway and Control UI proof for 9e462a0bce86bc18f7acebf5518e34ed51549e91, or have a maintainer attach a Mantis artifact.
  • [P1] Make the additive agents.list protocol compatibility decision explicit before merge.

Proof guidance:

  • [P1] Needs stronger real behavior proof before merge: The PR body includes useful live gateway and Control UI output, but it was captured before the current head; current-head terminal/live output, logs, recording, or Mantis proof is still needed, with private details redacted. After adding proof, update the PR body; ClawSweeper should re-review automatically. If it does not, the PR author or someone with repository write access can comment @clawsweeper re-review.

Mantis proof suggestion
A short current-head Control UI proof would directly show the user-visible /agents Thinking Default behavior that the PR changes. A maintainer can ask Mantis to capture proof by posting a new PR comment that starts with the OpenClaw Mantis account mention, followed by:

visual task: verify Control UI /agents shows Thinking Default xhigh for an agent whose model differs from the global default.

Risk before merge

  • [P1] The PR adds three public agents.list result fields; older strict clients built against the previous AgentSummarySchema may reject expanded rows unless maintainers accept the additive protocol change and coordinate matching package updates.
  • [P1] The live gateway and Control UI proof is useful, but it predates the current 9e462a0bce86bc18f7acebf5518e34ed51549e91 head, so maintainers do not yet have exact-head real behavior proof for the branch under review.

Maintainer options:

  1. Verify the additive protocol contract before merge (recommended)
    Add current-head live output or maintainer proof showing agents.list with the new thinking fields passes the updated protocol schema and renders correctly in Control UI.
  2. Accept the additive client risk
    Maintainers can merge once they explicitly accept that older strict protocol clients may need a matching gateway-protocol package update.
  3. Pause for versioning if additive fields are unsafe
    If agents.list cannot safely grow under the current protocol contract, pause this PR for a versioned gateway-protocol decision.

Next step before merge

  • [P1] No narrow code repair remains after the protocol schema update; the remaining blocker is maintainer/contributor proof and compatibility acceptance for the exact head.

Security
Cleared: The diff does not touch workflows, dependencies, package metadata, install scripts, secrets handling, or other security-sensitive execution surfaces.

Review details

Best possible solution:

Land a current-head-proven version that keeps gateway runtime output, shared types, gateway-protocol schema, and Control UI fallback behavior aligned for per-agent thinking metadata.

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

Yes. Source inspection shows current main omits per-agent thinking metadata from agents.list and still lets chat /think paths use global thinking defaults when the active session model differs.

Is this the best way to solve the issue?

Yes in direction. Exposing gateway-resolved per-agent thinking metadata and guarding cross-model fallbacks is the maintainable fix, provided exact-head proof and additive protocol compatibility are accepted before merge.

AGENTS.md: found and applied where relevant.

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

Label changes

Label changes:

  • add rating: 🦐 gold shrimp: Overall readiness is 🦐 gold shrimp; proof is 🦐 gold shrimp and patch quality is 🐚 platinum hermit.
  • remove rating: 🦪 silver shellfish: Current PR rating is rating: 🦐 gold shrimp, so this older rating label is no longer current.

Label justifications:

  • P2: This is a normal-priority gateway/Control UI bug fix with limited blast radius but real user-facing confusion.
  • merge-risk: 🚨 compatibility: The PR adds optional fields to a public agents.list result schema, which can affect strict protocol clients and upgrades.
  • rating: 🦐 gold shrimp: Overall readiness is 🦐 gold shrimp; proof is 🦐 gold shrimp and patch quality is 🐚 platinum hermit.
  • status: 📣 needs proof: The PR needs real behavior proof before ClawSweeper can clear the contributor ask. Needs stronger real behavior proof before merge: The PR body includes useful live gateway and Control UI output, but it was captured before the current head; current-head terminal/live output, logs, recording, or Mantis proof is still needed, with private details redacted. After adding proof, update the PR body; ClawSweeper should re-review automatically. If it does not, the PR author or someone with repository write access can comment @clawsweeper re-review.
Evidence reviewed

PR surface:

Source +52, Tests +153. Total +205 across 12 files.

View PR surface stats
Area Files Added Removed Net
Source 7 67 15 +52
Tests 5 155 2 +153
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 12 222 17 +205

What I checked:

  • Root and scoped policy read: Read the full root policy plus the relevant ui/AGENTS.md, src/gateway/AGENTS.md, and test guidance; the review applied the gateway protocol compatibility and Control UI proof rules. (AGENTS.md:18, 9518d1f27ccd)
  • Current main agents.list gap: Current main listAgentsForGateway resolves each agent's model/runtime but returns only id/name/identity/workspace/agentRuntime/model, so agents.list has no per-agent thinking metadata for the Agents overview. (src/gateway/session-utils.ts:1170, 9518d1f27ccd)
  • Current main cross-model fallback: Current main resolveChatThinkingSelectState falls back to sessionsResult.defaults.thinkingDefault before resolving the active model's own default, matching the reported wrong default for sessions on a different model. (ui/src/ui/chat/session-controls.ts:955, 9518d1f27ccd)
  • PR runtime fix surface: The PR adds thinkingLevels, thinkingOptions, and thinkingDefault to live agents.list rows using each agent's resolved model and agent id. (src/gateway/session-utils.ts:1234, 6213336ba8d2)
  • Protocol schema repair: The latest PR head adds the same thinking metadata to AgentSummarySchema and adds a schema test accepting those fields, addressing the previous strict-validator drift. (packages/gateway-protocol/src/schema/agents-models-skills.ts:56, 9e462a0bce86)
  • Proof freshness: The PR body contains useful live gateway and Control UI output, but that output was captured on earlier heads; the live PR API and refs now show current head 9e462a0bce86bc18f7acebf5518e34ed51549e91. (9e462a0bce86)

Likely related people:

  • steipete: Current-main blame on src/gateway/session-utils.ts, ui/src/ui/chat/session-controls.ts, and the protocol schema points to recent Peter Steinberger work, and the latest PR commit repairs the protocol schema. (role: recent area contributor; confidence: high; commits: 9f5c981f9fff, 9e462a0bce86; files: src/gateway/session-utils.ts, ui/src/ui/chat/session-controls.ts, packages/gateway-protocol/src/schema/agents-models-skills.ts)
  • amknight: The related merged session-thinking PR introduced session-specific thinking metadata across adjacent gateway and Control UI thinking paths that this PR extends to agents.list. (role: feature-history owner; confidence: medium; commits: 54a81e00807b; files: src/gateway/session-utils.ts, ui/src/ui/chat/session-controls.ts, ui/src/ui/chat/slash-command-executor.ts)
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.

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.

@openclaw-barnacle openclaw-barnacle Bot added triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. and removed triage: mock-only-proof Candidate: PR proof only shows tests, mocks, snapshots, lint, typecheck, or CI. labels May 14, 2026
@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 14, 2026
@openclaw-barnacle openclaw-barnacle Bot added proof: supplied External PR includes structured after-fix real behavior proof. and removed proof: sufficient ClawSweeper judged the real behavior proof convincing. triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. labels May 14, 2026
@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 14, 2026
@stielemans

This comment was marked as low quality.

@jbetala7
jbetala7 force-pushed the fix/81760-agent-thinking-default branch from e480666 to 634b90d Compare May 24, 2026 19:40
@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 24, 2026
@clawsweeper clawsweeper Bot added rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. P2 Normal backlog priority with limited blast radius. labels May 24, 2026
@clawsweeper

clawsweeper Bot commented May 24, 2026

Copy link
Copy Markdown
Contributor

ClawSweeper PR egg

🎁 Pass real behavior proof to wake the egg and unlock a hatchable treat.

Where did the egg go?
  • The egg game starts only after the PR passes the real-behavior proof check.
  • Before that, no creature or rarity is rolled. The treat waits for real proof.
  • This is still just collectible flavor: proof affects review readiness, not creature quality.

@jbetala7

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented May 24, 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:

@jbetala7

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented May 24, 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. and removed rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. labels May 24, 2026
@jbetala7

Copy link
Copy Markdown
Contributor Author

Proof freshness note for maintainers

The live gateway + Control UI transcript in the PR body was captured on the pre-rebase head e4806661795f. This branch was since rebased onto current origin/main (head 634b90d5a2), which only reconciled the merge — resolveThinkingLevelOptions now takes main's added model-catalog argument, and the defaultFromSessionDefaults fix is unchanged. The user-facing behavior under test is identical.

Current-head focused regression suite is green on 634b90d5a2:

pnpm test src/gateway/session-utils.test.ts ui/src/ui/views/agents.test.ts ui/src/ui/views/chat.test.ts ui/src/ui/chat/slash-command-executor.node.test.ts
gateway 94 passed · ui 8 passed · unit-ui 86 passed (188 total)

If a fresh current-head live gateway/browser capture is required, that path is Mantis (maintainer-invoked) — happy for a maintainer to run it. The one failing check, checks-node-agentic-agents, is an unrelated 120s timeout in src/agents/model-catalog-visibility.test.ts (4,127 passed, 1 timed out); that file isn't touched by this diff.

@jbetala7
jbetala7 force-pushed the fix/81760-agent-thinking-default branch from 634b90d to 788d2e0 Compare May 31, 2026 07:29
@clawsweeper clawsweeper Bot added rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. and removed rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. labels May 31, 2026
@steipete steipete self-assigned this May 31, 2026
@steipete
steipete force-pushed the fix/81760-agent-thinking-default branch from 788d2e0 to 9e462a0 Compare May 31, 2026 13:27

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 9e462a0bce

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/gateway/session-utils.ts Outdated
const meta = configuredById.get(id);
const model = resolveGatewayAgentModel(cfg, id);
const resolvedModel = resolveDefaultModelForAgent({ cfg, agentId: id });
const thinkingLevels = listThinkingLevelOptions(resolvedModel.provider, resolvedModel.model);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

P2 Badge Use model catalog when computing agent thinking levels

For agents whose model capabilities come from models.providers or the runtime model catalog, this new agents.list metadata can report the wrong options because it calls listThinkingLevelOptions without any catalog. The existing sessions.list path loads the model catalog in src/gateway/server-methods/sessions.ts:1138 and passes it through to the same thinking resolver, which is what makes configured reasoning: false entries collapse to off-only and configured compat add xhigh. As written, a custom/non-reasoning configured model can show broad default thinking levels in agents.list even though sessions for the same model expose the narrower catalog-backed set.

Useful? React with 👍 / 👎.

@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 May 31, 2026
@openclaw-barnacle openclaw-barnacle Bot added the scripts Repository scripts label May 31, 2026
@steipete

Copy link
Copy Markdown
Contributor

Behavior addressed: Control UI agent summaries now expose each agent's supported thinking levels and default thinking state from the existing model and agent configuration. The gateway protocol and generated Swift model were updated so the UI can read that metadata without adding a new config surface.

Real environment tested: local targeted Vitest plus protocol generation check in this checkout; GitHub Actions on PR head 84f1566.

Exact steps or command run after this patch:

  • node scripts/run-vitest.mjs packages/gateway-protocol/src/schema/agents-models-skills.test.ts src/gateway/session-utils.test.ts ui/src/ui/views/agents.test.ts ui/src/ui/views/chat.test.ts ui/src/ui/chat/slash-command-executor.node.test.ts
  • pnpm protocol:check
  • git diff --check
  • .agents/skills/autoreview/scripts/autoreview --mode branch --base origin/main

Evidence after fix:

  • Local targeted Vitest passed: 4 shards, including the new gateway catalog metadata fixture.
  • pnpm protocol:check passed with no generated diff.
  • git diff --check passed.
  • Autoreview clean: no accepted/actionable findings reported.
  • CI run 26714674532 passed with 122 current successful checks and no failures; checks-fast-bundled-protocol job 78731042758 and check-test-types job 78731042816 passed.

Observed result after fix: agents.list includes thinking metadata based on the current model catalog, so custom reasoning-capable models are represented correctly instead of falling back to stale or empty thinking options.

What was not tested: full local suite; GitHub Actions covered the broad PR gate.

@steipete
steipete merged commit f8f5259 into openclaw:main May 31, 2026
150 of 152 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

app: web-ui App: web-ui gateway Gateway runtime merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. P2 Normal backlog priority with limited blast radius. proof: supplied External PR includes structured after-fix real behavior proof. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. scripts Repository scripts size: M status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug] Control UI shows wrong thinkingDefault for agents using non-default model

3 participants