Skip to content

fix(channels): resolve native /think menu levels via runtime catalog for live-discovered models#94067

Merged
steipete merged 4 commits into
openclaw:mainfrom
openperf:fix/93835-native-think-menu-runtime-catalog
Jun 21, 2026
Merged

fix(channels): resolve native /think menu levels via runtime catalog for live-discovered models#94067
steipete merged 4 commits into
openclaw:mainfrom
openperf:fix/93835-native-think-menu-runtime-catalog

Conversation

@openperf

@openperf openperf commented Jun 17, 2026

Copy link
Copy Markdown
Member

Summary

  • Problem: Issue [Bug]: Telegram /think menu shows only off for live-discovered Ollama thinking models, but /think <level> accepts them #93835 reports that on Telegram, after selecting a live-discovered Ollama reasoning model (e.g. ollama/glm-5.2:cloud, whose /api/show reports capabilities: ["thinking", ...]), a bare /think lists only default, off — yet /think medium is accepted and the displayed "Current thinking level" is correct. The same gap affects the equivalent Slack and Discord native /think surfaces.
  • Root Cause: The thinking-profile resolver reads reasoning from the catalog entry for the selected model. The Ollama provider already maps the discovered thinking capability to reasoning: true, and the reply path + the current-level display already hydrate the runtime catalog. But the native command menus called resolveCommandArgMenu / resolveCommandArgChoices with no catalog, so those helpers fell back to buildConfiguredModelCatalog (config only). A wildcard-allowlisted, live-discovered model is absent from the config catalog, so its reasoning flag never reached the resolver and the menu collapsed to the off-only profile. It is purely a menu/discoverability gap: the setter and current-level display were already runtime-catalog-aware, which is why they diverged from the options list.
  • Fix: Resolve the native /think menu/autocomplete choices against the runtime catalog — the same source the current-level display already uses — so the discovered reasoning capability reaches the resolver.
  • What changed:
    • extensions/telegram/src/bot-native-commands.ts — pass the runtime catalog to resolveCommandArgMenu for the think inline-keyboard menu.
    • extensions/slack/src/monitor/slash.ts — pass the runtime catalog to resolveCommandArgMenu for the think argument menu.
    • extensions/discord/src/monitor/native-command.ts and native-command.options.ts — pass the runtime catalog to the think button menu and the autocomplete resolveCommandArgChoices.
    • Each site gates on command.key === "think" and a resolved provider, and uses a catalog?.length guard so an empty/failed discovery keeps the existing configured-catalog fallback.
    • extensions/telegram/src/bot-native-commands.session-meta.test.ts — regression test asserting the /think menu is resolved with the runtime catalog.
  • What did NOT change (scope boundary):
    • Config surface unchanged (no schema, defaults, doctor migrations, or docs/reference/config).
    • Plugin surface unchanged: no new plugin SDK export; reuses the already-exported loadModelCatalog from openclaw/plugin-sdk/agent-runtime; no manifest/registry/loader changes.
    • Hot reply path unchanged: the catalog load is gated to the interactive /think command (cached loadModelCatalog), not the reply-time path.
    • Other native menus unchanged: the catalog is supplied only for command.key === "think"; /model and all other menus keep their config-only resolution.

Reproduction

  1. Configure a Telegram channel and rely on live Ollama discovery (models.providers.ollama.models unset; agents.defaults.models = {"ollama/*":{}}).
  2. In Telegram, select a live-discovered reasoning model: /model ollama/glm-5.2:cloud (Ollama /api/show reports capabilities: ["thinking", "completion", "tools"]).
  3. Send a bare /think.
  4. Before this PR: the menu lists only default, off, while /think medium is still accepted and the title shows the real current level.
  5. After this PR: the menu lists default, off, low, medium, high, max, matching the model's discovered reasoning capability and what /think <level> accepts.

Real behavior proof

Behavior addressed (#93835 — native /think menus listed only default, off for live-discovered reasoning models while /think <level> and the current-level title were correct): the menu/autocomplete choices now resolve against the runtime catalog so the discovered reasoning capability is reflected, consistently with the already-runtime-catalog-aware current-level display.

Real environment tested (Linux — Vitest against the production resolver chain listThinkingLevels → core resolveThinkingProfileresolveBundledProviderPolicySurface("ollama") → the real Ollama policy resolver, plus the Telegram/Slack/Discord native-command suites; a live Ollama Cloud glm-5.2:cloud gateway was not available): end-to-end resolver chain and the three channel command suites.

Exact steps or command run after this patch: pnpm test extensions/telegram/src/bot-native-commands.session-meta.test.ts; pnpm test extensions/discord/src/monitor/native-command.options.test.ts extensions/discord/src/monitor/native-command.command-arg.test.ts extensions/discord/src/monitor/native-command.model-picker.test.ts extensions/discord/src/monitor/native-command.think-autocomplete.test.ts; pnpm test extensions/slack/src/monitor/slash.test.ts; pnpm tsgo:extensions; pnpm exec oxfmt --check and node scripts/run-oxlint.mjs on the changed files.

Evidence after fix: driving the real resolver chain for ollama/glm-5.2:cloud, a config-only catalog (the pre-fix state, model absent) resolves listThinkingLevels to exactly ["off"] (the reported symptom), while a runtime catalog carrying { reasoning: true } resolves to levels including medium and high. The exact ["off"] result (not the generic base set) confirms the real Ollama resolver is engaged, matching production where the plugin is active.

Observed result after fix: the /think menu reflects the live-discovered reasoning levels. Telegram 26 passed, Discord native-command suites 35 passed, Slack 38 passed; tsgo:extensions reports no new errors on the changed files; oxfmt/oxlint clean on the changed files.

What was not tested: the live-network discovery hop (buildOllamaProvider/api/showreasoning: true) was not exercised against a real Ollama Cloud endpoint; it is a deterministic capabilities.includes("thinking") mapping already covered by Ollama provider tests and confirmed by the reporter's own /api/show output.

Repro confirmation: the added Telegram regression test asserts the /think menu's resolveCommandArgMenu call receives the runtime catalog (carrying reasoning: true) and that loadModelCatalog is invoked; on the pre-fix tree the call gets no catalog, so the assertion fails — confirming the test covers the production change.

Risk / Mitigation

  • Risk: an extra runtime catalog load when a /think menu is built. Mitigation: loadModelCatalog is process-cached (single shared promise) and is already loaded by the current-level resolution on the same interaction; the load is gated to the think command on an interactive path, not the hot reply path.
  • Risk: an empty/failed discovery could override the configured-catalog fallback. Mitigation: each site guards with catalog?.length, so an empty runtime catalog (discovery exception or zero models) preserves the existing buildConfiguredModelCatalog fallback.
  • Risk: behavior change for other native command menus. Mitigation: the catalog is supplied only when command.key === "think"; /model and all other native menus are unchanged.

Change Type (select all)

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change
  • Documentation update

Scope (select all touched areas)

  • Channels / plugins (extensions/)
  • Core (src/)
  • Docs (docs/)
  • Other

Linked Issue/PR

Fixes #93835

@openclaw-barnacle openclaw-barnacle Bot added channel: discord Channel integration: discord channel: slack Channel integration: slack channel: telegram Channel integration: telegram size: S labels Jun 17, 2026
@clawsweeper

clawsweeper Bot commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge. Reviewed June 20, 2026, 11:53 PM ET / 03:53 UTC.

Summary
The PR passes runtime model catalog data into Telegram, Slack, and Discord native /think menu/autocomplete resolution and adds a cache-only catalog snapshot plus Discord startup and gateway reload warmups.

PR surface: Source +63, Tests +165. Total +228 across 12 files.

Reproducibility: yes. Current main's native menu resolver falls back to configured-only catalog data while Ollama live discovery stores reasoning: true in the runtime catalog; the linked issue also includes a v2026.6.8 Telegram/Ollama repro, though I did not execute the live flow.

Review metrics: 2 noteworthy metrics.

  • Plugin SDK Option Added: 1 optional parameter added. loadModelCatalog is reexported through openclaw/plugin-sdk/agent-runtime, so cacheOnly is an additive plugin-visible API shape maintainers should notice.
  • Catalog Warmup Paths Added: 2 warmup paths added. Discord startup and gateway hot reload now start background model catalog discovery, which changes runtime timing even though it is best-effort.

Root-cause cluster
Relationship: fixed_by_candidate
Canonical: #93835
Summary: The cluster centers on live-discovered Ollama reasoning metadata missing from native /think menus; this PR is the broad channel-side candidate fix.

Members:

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

Merge readiness
Overall: 🐚 platinum hermit
Proof: 🐚 platinum hermit
Patch quality: 🦞 diamond lobster
Result: ready for maintainer review.

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

Rank-up moves:

  • Maintainers should decide whether cacheOnly should remain a public loadModelCatalog option or move behind an internal helper.
  • [P2] Capture live Telegram/Ollama proof if maintainers want visible UX evidence before merge.

Mantis proof suggestion
A native Telegram recording would directly show the corrected /think choices for a live-discovered Ollama reasoning model. A maintainer can ask Mantis to capture proof by posting this exact PR comment:

@openclaw-mantis telegram desktop proof: verify /think shows full reasoning levels for a live-discovered Ollama model after /model selection and when that model is the default.

Risk before merge

  • [P1] cacheOnly is added to loadModelCatalog, which is reexported through openclaw/plugin-sdk/agent-runtime; maintainers should decide whether that public SDK shape is intentional or should stay behind an internal helper.
  • [P2] Discord startup and gateway hot reload now start best-effort model catalog warmups; they are nonblocking, but they change when provider discovery may run and should be accepted as part of the fix.
  • [P2] Several open sibling PRs target the same bug at provider-policy or core fallback layers, so maintainers should choose one canonical fix before landing competing behavior changes.
  • [P1] No live Telegram plus Ollama Cloud recording was inspected in this read-only review; source and targeted tests cover the resolver path, while Mantis can add visible UX proof if maintainers want it.

Maintainer options:

  1. Accept The Cache-Only Catalog Snapshot
    Land this branch if maintainers intentionally want loadModelCatalog({ cacheOnly: true }) to remain a plugin-visible runtime option and accept the nonblocking warmups.
  2. Keep Cache-Only Internal
    Move the deadline-safe snapshot behind an internal channel/core helper before merge if maintainers do not want to expand the public plugin SDK shape.
  3. Pause For Canonical Fix Selection
    Pause this PR if maintainers want one of the provider-policy or core-fallback sibling PRs to be the canonical fix instead.

Next step before merge

  • [P2] Maintainer review should decide the additive cacheOnly SDK contract and choose this PR or a sibling as the canonical fix; there is no narrow automated repair pending.

Security
Cleared: The diff reuses existing runtime/catalog paths and does not change dependencies, lockfiles, workflows, secrets handling, package resolution, or other supply-chain surfaces.

Review details

Best possible solution:

Land one canonical runtime-catalog fix for native /think choices if maintainers accept the cache-only catalog option and warmups, then close or supersede the broader provider-policy and core-fallback sibling PRs.

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

Yes. Current main's native menu resolver falls back to configured-only catalog data while Ollama live discovery stores reasoning: true in the runtime catalog; the linked issue also includes a v2026.6.8 Telegram/Ollama repro, though I did not execute the live flow.

Is this the best way to solve the issue?

Yes, this is the best fix shape for the reported bug: feeding native /think choices the same runtime catalog used by current-level/default thinking paths is narrower than changing Ollama's unknown-reasoning policy globally. The cache-only SDK-visible option remains the maintainer contract choice before merge.

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning high; reviewed against 6c1041339da6.

Label changes

Label justifications:

  • P2: This PR fixes a bounded user-visible native /think menu bug across channel plugins without crash, security, or data-loss impact.
  • merge-risk: 🚨 compatibility: The diff adds a plugin-visible loadModelCatalog option and new startup/reload catalog warmups, which are compatibility-sensitive runtime/API surfaces.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🐚 platinum hermit and patch quality is 🦞 diamond lobster.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Not applicable: The external-contributor proof gate does not apply to this member-authored PR; the body supplies targeted source/test proof but no live Telegram/Ollama recording.
  • mantis: telegram-visible-proof: Mantis should capture Telegram visible proof. The PR changes visible Telegram /think menu choices, which can be demonstrated in a short Telegram Desktop recording.
Evidence reviewed

PR surface:

Source +63, Tests +165. Total +228 across 12 files.

View PR surface stats
Area Files Added Removed Net
Source 7 67 4 +63
Tests 5 176 11 +165
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 12 243 15 +228

What I checked:

Likely related people:

  • steipete: Authored the latest PR commits that added the cache-only catalog behavior and has adjacent merged history preserving live Ollama catalog metadata. (role: recent area contributor and PR refiner; confidence: high; commits: 5f16f11281e7, 079347b8b86a, af79cd6a9d35; files: src/agents/model-catalog.ts, extensions/discord/src/monitor/native-command.options.ts, src/gateway/server-reload-handlers.ts)
  • openperf: Authored the initial PR commit and has prior adjacent merged work in gateway and agent surfaces, so they are connected beyond opening this PR. (role: candidate fix owner and adjacent contributor; confidence: high; commits: b1f0008ef79b, df521a645977; files: extensions/telegram/src/bot-native-commands.ts, extensions/slack/src/monitor/slash.ts, extensions/discord/src/monitor/native-command.ts)
  • Vincent Koc: Current-main blame for the command menu resolver and model catalog bodies points at the baseline commit that carried these surfaces into the current tree. (role: current-main area contributor; confidence: medium; commits: 3f166b1f64; files: src/auto-reply/commands-registry.ts, src/agents/model-catalog.ts)
  • yfge: The Ollama provider thinking profile that returns off-only for undefined reasoning dates to their provider-policy commit. (role: introduced related provider-policy behavior; confidence: high; commits: 7a9efc138998; files: extensions/ollama/provider-policy-api.ts, extensions/ollama/index.ts)
  • thewilloftheshadow: The dynamic argument-menu framework used by /think choices dates to their command-registry commit. (role: introduced related command-menu framework; confidence: medium; commits: 74bc5bfd7cae; files: src/auto-reply/commands-registry.ts, src/auto-reply/commands-registry.shared.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.

@openperf
openperf force-pushed the fix/93835-native-think-menu-runtime-catalog branch from 0345f3f to 5ac2bbc Compare June 17, 2026 10:12
@openperf

Copy link
Copy Markdown
Member Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jun 17, 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. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. mantis: telegram-visible-proof Mantis should capture Telegram visible proof. P2 Normal backlog priority with limited blast radius. labels Jun 17, 2026
@openperf
openperf force-pushed the fix/93835-native-think-menu-runtime-catalog branch 2 times, most recently from 7354634 to a2aed9e Compare June 18, 2026 01:18
@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 Jun 18, 2026
@steipete
steipete force-pushed the fix/93835-native-think-menu-runtime-catalog branch from 34aabe0 to fa231f3 Compare June 21, 2026 02:35
@clawsweeper clawsweeper Bot added rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. and removed rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. labels Jun 21, 2026
@openclaw-barnacle openclaw-barnacle Bot added gateway Gateway runtime agents Agent runtime and tooling size: M and removed size: S labels Jun 21, 2026
@steipete
steipete force-pushed the fix/93835-native-think-menu-runtime-catalog branch from e74ace3 to b9cd41a Compare June 21, 2026 03:20
@clawsweeper clawsweeper Bot added merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. and removed rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. labels Jun 21, 2026
openperf and others added 3 commits June 20, 2026 23:42
… live-discovered models (openclaw#93835)

Native /think menus on Telegram, Slack, and Discord resolved argument
choices against the configured-only model catalog, so live-discovered
reasoning models (e.g. Ollama glm-5.2:cloud) showed only default/off
while /think <level> and the current-level title were correct.

Load the runtime catalog for /think on all four native surfaces,
including the default-model path when no /model override is set, so the
menu matches the reply path. An empty/failed discovery keeps the
configured-catalog fallback.
@steipete
steipete force-pushed the fix/93835-native-think-menu-runtime-catalog branch from b9cd41a to 5f16f11 Compare June 21, 2026 03:42
@steipete
steipete merged commit e3ccf87 into openclaw:main Jun 21, 2026
156 checks passed
@steipete

Copy link
Copy Markdown
Contributor

Merged via squash.

Thanks @openperf!

github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request Jun 21, 2026
…for live-discovered models (openclaw#94067)

Merged via squash.

Prepared head SHA: 079347b
Co-authored-by: openperf <[email protected]>
Co-authored-by: steipete <[email protected]>
Reviewed-by: @steipete
eleboucher pushed a commit to eleboucher/homelab that referenced this pull request Jun 24, 2026
…26.6.10) (#1256)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [ghcr.io/openclaw/openclaw](https://openclaw.ai) ([source](https://github.com/openclaw/openclaw)) | patch | `2026.6.9` → `2026.6.10` |

---

### Release Notes

<details>
<summary>openclaw/openclaw (ghcr.io/openclaw/openclaw)</summary>

### [`v2026.6.10`](https://github.com/openclaw/openclaw/blob/HEAD/CHANGELOG.md#2026610)

[Compare Source](openclaw/openclaw@v2026.6.9...v2026.6.10)

##### Highlights

- **Automatic fast mode for talks:** OpenClaw can enable fast mode for short conversational turns, then return to normal mode for longer runs with bounded fallback and delivery behavior. ([#&#8203;85104](openclaw/openclaw#85104)) Thanks [@&#8203;alexph-dev](https://github.com/alexph-dev) and [@&#8203;vincentkoc](https://github.com/vincentkoc).
- **More reliable model routing:** Zai model synthesis, GLM overload failover, and native reasoning-level selection now follow the active model catalog more consistently. ([#&#8203;94461](openclaw/openclaw#94461), [#&#8203;93241](openclaw/openclaw#93241), [#&#8203;94067](openclaw/openclaw#94067), [#&#8203;94136](openclaw/openclaw#94136)) Thanks [@&#8203;Pandah97](https://github.com/Pandah97), [@&#8203;chrysb](https://github.com/chrysb), [@&#8203;0xghost42](https://github.com/0xghost42), [@&#8203;zhengli0922](https://github.com/zhengli0922), [@&#8203;openperf](https://github.com/openperf), [@&#8203;civiltox](https://github.com/civiltox), and [@&#8203;BorClaw](https://github.com/BorClaw).
- **Safer session and channel state:** channel switches reset stale origin fields, and cron delivery awareness stays attached to the target session. ([#&#8203;95328](openclaw/openclaw#95328), [#&#8203;93580](openclaw/openclaw#93580)) Thanks [@&#8203;ZengWen-DT](https://github.com/ZengWen-DT), [@&#8203;jalehman](https://github.com/jalehman), [@&#8203;gorkem2020](https://github.com/gorkem2020), and [@&#8203;scotthuang](https://github.com/scotthuang).
- **Trusted policies survive hook composition:** composed hook registries keep the trusted tool policies required by approval-sensitive flows. ([#&#8203;94545](openclaw/openclaw#94545)) Thanks [@&#8203;jesse-merhi](https://github.com/jesse-merhi).

##### Changes

- **Agent and channel runtime:** fast-mode state now survives retries, fallback transitions, progress events, and embedded/CLI/ACP normalization; session and channel routing retain the current target and delivery context. ([#&#8203;85104](openclaw/openclaw#85104), [#&#8203;93580](openclaw/openclaw#93580), [#&#8203;95328](openclaw/openclaw#95328)) Thanks [@&#8203;alexph-dev](https://github.com/alexph-dev), [@&#8203;vincentkoc](https://github.com/vincentkoc), [@&#8203;scotthuang](https://github.com/scotthuang), [@&#8203;ZengWen-DT](https://github.com/ZengWen-DT), [@&#8203;jalehman](https://github.com/jalehman), and [@&#8203;gorkem2020](https://github.com/gorkem2020).
- **Provider behavior:** model catalogs now supply the correct Zai base URL, overload classification, and native reasoning controls for live-discovered models. ([#&#8203;94461](openclaw/openclaw#94461), [#&#8203;93241](openclaw/openclaw#93241), [#&#8203;94067](openclaw/openclaw#94067), [#&#8203;94136](openclaw/openclaw#94136)) Thanks [@&#8203;Pandah97](https://github.com/Pandah97), [@&#8203;chrysb](https://github.com/chrysb), [@&#8203;0xghost42](https://github.com/0xghost42), [@&#8203;zhengli0922](https://github.com/zhengli0922), [@&#8203;openperf](https://github.com/openperf), [@&#8203;civiltox](https://github.com/civiltox), and [@&#8203;BorClaw](https://github.com/BorClaw).

##### Fixes

- **Fast-mode and policy correctness:** fallback cutoffs and reset notices are bounded, repeated progress events remain visible, Codex service-tier state is normalized, and trusted policies are not lost when hook registries are composed. ([#&#8203;85104](openclaw/openclaw#85104), [#&#8203;94545](openclaw/openclaw#94545)) Thanks [@&#8203;alexph-dev](https://github.com/alexph-dev), [@&#8203;vincentkoc](https://github.com/vincentkoc), and [@&#8203;jesse-merhi](https://github.com/jesse-merhi).
- **Model and delivery edge cases:** Zai and GLM failover paths use the right runtime metadata, while stale channel-origin state no longer leaks across session changes. ([#&#8203;94461](openclaw/openclaw#94461), [#&#8203;93241](openclaw/openclaw#93241), [#&#8203;95328](openclaw/openclaw#95328)) Thanks [@&#8203;Pandah97](https://github.com/Pandah97), [@&#8203;chrysb](https://github.com/chrysb), [@&#8203;0xghost42](https://github.com/0xghost42), [@&#8203;zhengli0922](https://github.com/zhengli0922), [@&#8203;ZengWen-DT](https://github.com/ZengWen-DT), [@&#8203;jalehman](https://github.com/jalehman), and [@&#8203;gorkem2020](https://github.com/gorkem2020).
- **Provider plugin onboarding:** setup refreshes provider plugin registry metadata after installing setup-selected provider plugins, so auth continuation uses the newly installed provider instead of stale registry state. ([#&#8203;95792](openclaw/openclaw#95792)) Thanks [@&#8203;snowzlmbot](https://github.com/snowzlmbot).

##### Complete contribution record

This audited record covers the complete v2026.6.9..HEAD history: 12 merged PRs. The generation manifest also supplies direct commits as editorial input; the grouped notes above prioritize user impact.

##### Pull requests

- **PR [#&#8203;86627](openclaw/openclaw#86627 Keep core doctor health in contribution order. Thanks [@&#8203;giodl73-repo](https://github.com/giodl73-repo).
- **PR [#&#8203;93580](openclaw/openclaw#93580 fix: preserve cron delivery awareness for target sessions. Thanks [@&#8203;scotthuang](https://github.com/scotthuang) and [@&#8203;jalehman](https://github.com/jalehman).
- **PR [#&#8203;95030](openclaw/openclaw#95030 refactor: add SDK transcript identity target API. Thanks [@&#8203;jalehman](https://github.com/jalehman).
- **PR [#&#8203;94838](openclaw/openclaw#94838 refactor(copilot): complete harness lifecycle parity. Thanks [@&#8203;vincentkoc](https://github.com/vincentkoc).
- **PR [#&#8203;95328](openclaw/openclaw#95328 fix(sessions): reset stale per-channel origin fields on channel switch. Related [#&#8203;95325](openclaw/openclaw#95325). Thanks [@&#8203;ZengWen-DT](https://github.com/ZengWen-DT) and [@&#8203;jalehman](https://github.com/jalehman) and [@&#8203;gorkem2020](https://github.com/gorkem2020).
- **PR [#&#8203;94461](openclaw/openclaw#94461 fix(zai): fall back to manifest baseUrl for synthesized GLM-5 models. Related [#&#8203;94269](openclaw/openclaw#94269). Thanks [@&#8203;Pandah97](https://github.com/Pandah97) and [@&#8203;chrysb](https://github.com/chrysb).
- **PR [#&#8203;93241](openclaw/openclaw#93241 fix(agents): classify Zhipu GLM overload as overloaded for failover. Related [#&#8203;93211](openclaw/openclaw#93211). Thanks [@&#8203;0xghost42](https://github.com/0xghost42) and [@&#8203;zhengli0922](https://github.com/zhengli0922).
- **PR [#&#8203;94067](openclaw/openclaw#94067 fix(channels): resolve native /think menu levels via runtime catalog for live-discovered models. Related [#&#8203;93835](openclaw/openclaw#93835). Thanks [@&#8203;openperf](https://github.com/openperf) and [@&#8203;civiltox](https://github.com/civiltox).
- **PR [#&#8203;94136](openclaw/openclaw#94136 fix(zai): expose GLM-5.2 reasoning levels \[AI-assisted]. Thanks [@&#8203;BorClaw](https://github.com/BorClaw).
- **PR [#&#8203;85104](openclaw/openclaw#85104 feat: fast talks auto mode. Related [#&#8203;85087](openclaw/openclaw#85087). Thanks [@&#8203;alexph-dev](https://github.com/alexph-dev).
- **PR [#&#8203;94545](openclaw/openclaw#94545 fix: keep trusted policies with hook registry. Thanks [@&#8203;jesse-merhi](https://github.com/jesse-merhi).
- **PR [#&#8203;95792](openclaw/openclaw#95792 fix(onboard): refresh provider plugin registry after setup installs. Related [#&#8203;95765](openclaw/openclaw#95765). Thanks [@&#8203;snowzlmbot](https://github.com/snowzlmbot).

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMDEuMSIsInVwZGF0ZWRJblZlciI6IjQzLjEwMS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZS9jb250YWluZXIiLCJ0eXBlL3BhdGNoIl19-->

Reviewed-on: https://git.erwanleboucher.dev/eleboucher/homelab/pulls/1256
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agents Agent runtime and tooling channel: discord Channel integration: discord channel: slack Channel integration: slack channel: telegram Channel integration: telegram gateway Gateway runtime mantis: telegram-visible-proof Mantis should capture Telegram visible proof. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. P2 Normal backlog priority with limited blast radius. 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]: Telegram /think menu shows only off for live-discovered Ollama thinking models, but /think <level> accepts them

2 participants