Skip to content

fix: cron stream stalls fail over before job timeout#96096

Merged
velvet-shark merged 4 commits into
openclaw:mainfrom
849261680:fix/85900-cron-stream-stall-fallback
Jun 25, 2026
Merged

fix: cron stream stalls fail over before job timeout#96096
velvet-shark merged 4 commits into
openclaw:mainfrom
849261680:fix/85900-cron-stream-stall-fallback

Conversation

@849261680

@849261680 849261680 commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

Closes #85900

What Problem This Solves

Fixes an issue where cron jobs with a pinned cloud model and configured fallbacks could wait until the outer cron timeout when the provider opened a stream but never sent chunks, preventing the existing fallback chain from trying the next model.

Why This Change Was Made

Cron-triggered cloud model calls now cap explicit per-run stream idle waits at 60s so a stalled candidate fails early enough for runWithModelFallback to advance. Local/private providers and self-hosted hostname providers keep their previous explicit cron timeout behavior because they can legitimately stay silent during long prompt evaluation, while Ollama Cloud and dotted remote hostnames still use the 60s cron stall cap. Explicit provider request timeouts continue to win for intentionally slow model servers.

User Impact

Scheduled jobs with healthy fallback models recover from cloud stream stalls sooner instead of losing the whole cron run to the outer watchdog. Existing slow local/self-hosted cron jobs that set a long timeoutSeconds keep that longer idle window.

Evidence

  • pnpm docs:list to identify the relevant cron docs surface; read docs/automation/cron-jobs.md.
  • pnpm exec oxfmt --check --threads=1 src/agents/embedded-agent-runner/run/llm-idle-timeout.ts src/agents/embedded-agent-runner/run/attempt.ts src/agents/embedded-agent-runner/run/llm-idle-timeout.test.ts — pass.
  • git diff --check — pass.
  • node scripts/run-vitest.mjs src/agents/embedded-agent-runner/run/llm-idle-timeout.test.ts src/agents/model-fallback.test.ts — pass, 167 tests.
  • .agents/skills/autoreview/scripts/autoreview --mode local --parallel-tests "node scripts/run-vitest.mjs src/agents/embedded-agent-runner/run/llm-idle-timeout.test.ts src/agents/model-fallback.test.ts" — clean; parallel tests passed, 167 tests.

Real behavior proof

Behavior addressed: Cron cloud model calls with explicit long timeoutSeconds no longer let a no-chunk stream stall consume the full cron watchdog before the existing model fallback chain can run, while explicit cron timeouts for local/self-hosted hostname providers keep their previous longer idle window.

Real environment tested: Local OpenClaw checkout on branch fix/85900-cron-stream-stall-fallback at 0c45991c24, macOS host, Node/pnpm workspace dependencies installed by pnpm docs:list.

Exact steps or command run after this patch:

pnpm exec tsx -e 'import { resolveLlmIdleTimeoutMs } from "./src/agents/embedded-agent-runner/run/llm-idle-timeout.ts"; const cases = { cronSelfHostedHostname600s: resolveLlmIdleTimeoutMs({ trigger: "cron", runTimeoutMs: 600000, model: { baseUrl: "http://ollama-host:11434" } }), cronHostDocker600s: resolveLlmIdleTimeoutMs({ trigger: "cron", runTimeoutMs: 600000, model: { baseUrl: "http://host.docker.internal:11434" } }), cronCloud300s: resolveLlmIdleTimeoutMs({ trigger: "cron", runTimeoutMs: 300000, model: { baseUrl: "https://api.openai.com/v1" } }), cronOllamaCloudHostname300s: resolveLlmIdleTimeoutMs({ trigger: "cron", runTimeoutMs: 300000, model: { provider: "ollama", id: "ollama/gpt-oss:cloud", baseUrl: "http://ollama-host:11434" } }) }; console.log(JSON.stringify(cases, null, 2));'

Evidence after fix:

{
  "cronSelfHostedHostname600s": 600000,
  "cronHostDocker600s": 600000,
  "cronCloud300s": 60000,
  "cronOllamaCloudHostname300s": 60000
}

Focused tests also show the fallback loop continues to the next candidate after a provider-side error: node scripts/run-vitest.mjs src/agents/model-fallback.test.ts passed with the existing unknown-error fallback coverage.

Observed result after fix: A cron cloud call with a 300s per-run timeout now uses a 60s stream idle watchdog, leaving the outer cron budget available for configured fallback candidates. Local/self-hosted hostname provider cron calls keep their 600s explicit timeout, and Ollama Cloud remains capped even when the configured base URL is a hostname.

What was not tested: No live provider was forced into a real opened-but-silent network stream; the proof covers the source-level timeout selection and the existing model fallback retry behavior with focused Vitest coverage.

@openclaw-barnacle openclaw-barnacle Bot added agents Agent runtime and tooling size: XS labels Jun 23, 2026
@849261680

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jun 23, 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.

@849261680

Copy link
Copy Markdown
Contributor Author

@clawsweeper review

@clawsweeper

clawsweeper Bot commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge. Reviewed June 25, 2026, 12:49 PM ET / 16:49 UTC.

Summary
The PR changes cron-triggered embedded agent LLM idle-timeout selection so remote/cloud stream stalls use a shorter cap while local or self-hosted provider routes can retain explicit longer cron timeouts, and documents that timeout behavior.

PR surface: Source +108, Tests +146, Docs 0. Total +254 across 4 files.

Reproducibility: yes. at source level: current main returns the full explicit cron run timeout from resolveLlmIdleTimeoutMs, so an opened-but-silent stream can use the same budget as the cron watchdog. I did not run a live provider that opens a stream and sends no chunks.

Review metrics: 1 noteworthy metric.

  • Timeout policy surfaces changed: 1 explicit cron run-timeout branch changed. The PR changes how existing cron timeoutSeconds values bound stream-idle waits, so upgrade behavior matters before merge.

Root-cause cluster
Relationship: fixed_by_candidate
Canonical: #85900
Summary: This PR is a candidate fix for the open cron stream-stall fallback issue it closes, with adjacent overlap to prior cron idle-watchdog work.

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: 🐚 platinum hermit
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:

  • none.

Risk before merge

  • [P1] Existing cron cloud jobs with long explicit timeoutSeconds that intentionally tolerate more than 60s before the first response chunk will now fail the current candidate earlier unless they use models.providers..timeoutSeconds or match a local/self-hosted exception.
  • [P2] The PR proof covers timeout selection and fallback behavior through terminal/runtime output and focused tests, but it does not force a live provider to open a stream and send no chunks.
  • [P2] Adjacent cron budget exhaustion remains separate: this PR should not be treated as proving fallback attempts always have enough remaining wall-clock time once the first candidate fails.

Maintainer options:

  1. Accept the scoped cloud cap
    Maintainers can merge if they agree that cron cloud stream silence should fail after 60 seconds while local/self-hosted explicit cron timeouts remain longer.
  2. Tune the timeout policy first
    If 60 seconds is too aggressive for existing cloud cron jobs, adjust the cap or add an explicit strict or compatibility path before merge.
  3. Defer to broader cron budget design
    Maintainers can pause this PR if they want stream-stall handling folded into a broader cron deadline and fallback-budget design.

Next step before merge

  • The remaining action is maintainer re-review of the current head and acceptance of the cron cloud idle-cap compatibility tradeoff.

Security
Cleared: The patch changes timeout-selection logic, focused tests, and docs only; no secrets, dependencies, CI, package, permission, or code-loading surface is changed.

Review details

Best possible solution:

Land the focused timeout-policy change only if maintainers accept the 60-second cloud cron idle cap, while keeping broader cron budget exhaustion work separate.

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

Yes, at source level: current main returns the full explicit cron run timeout from resolveLlmIdleTimeoutMs, so an opened-but-silent stream can use the same budget as the cron watchdog. I did not run a live provider that opens a stream and sends no chunks.

Is this the best way to solve the issue?

Yes for the narrow stream-stall fallback bug: the patch changes the embedded stream-idle timeout at the owner boundary and relies on the existing timeout-classified fallback loop. It is not a complete answer to broader cron remaining-budget exhaustion, which should stay separate.

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning high; reviewed against 19707cce1d73.

Label changes

Label justifications:

  • P1: The PR targets scheduled-agent runs where a stalled primary model can consume the cron run before configured fallbacks recover it.
  • merge-risk: 🚨 compatibility: Existing cron cloud jobs with long timeoutSeconds may now fail stream-idle silence at 60 seconds unless they opt into provider request timeouts or match a local/self-hosted exception.
  • merge-risk: 🚨 availability: The intended recovery improvement also changes when slow-but-valid cloud cron model streams are aborted.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🐚 platinum hermit and patch quality is 🐚 platinum hermit.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (terminal): The PR body includes after-fix terminal output from the production timeout resolver plus focused fallback tests, which is acceptable proof for this non-visual runtime path despite no forced live provider stall.
  • proof: sufficient: Contributor real behavior proof is sufficient. The PR body includes after-fix terminal output from the production timeout resolver plus focused fallback tests, which is acceptable proof for this non-visual runtime path despite no forced live provider stall.
Evidence reviewed

PR surface:

Source +108, Tests +146, Docs 0. Total +254 across 4 files.

View PR surface stats
Area Files Added Removed Net
Source 2 119 11 +108
Tests 1 148 2 +146
Docs 1 1 1 0
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 4 268 14 +254

Acceptance criteria:

  • [P2] node scripts/run-vitest.mjs src/agents/embedded-agent-runner/run/llm-idle-timeout.test.ts src/agents/model-fallback.test.ts.
  • [P1] git diff --check.

What I checked:

Likely related people:

  • bek91: Authored the merged cron cloud idle-watchdog PR that changed the same resolver and tests shortly before this PR. (role: recent adjacent contributor; confidence: high; commits: 5e915e1f89c2; files: src/agents/embedded-agent-runner/run/llm-idle-timeout.ts, src/agents/embedded-agent-runner/run/llm-idle-timeout.test.ts, docs/concepts/agent-loop.md)
  • velvet-shark: Reviewed this PR, requested the single-label hostname narrowing, and authored the current head commit that implements that narrowing and docs update. (role: reviewer and follow-up owner; confidence: high; commits: cf37b17eb678; files: src/agents/embedded-agent-runner/run/llm-idle-timeout.ts, src/agents/embedded-agent-runner/run/llm-idle-timeout.test.ts, docs/concepts/agent-loop.md)
  • 849261680: Authored the first two PR commits and also has a current-main cron timeout/setup fix, so the connection is broader than only opening this PR. (role: current PR author and adjacent cron contributor; confidence: medium; commits: 0c5868c58b2b, 0c45991c2450, 19707cce1d73; files: src/agents/embedded-agent-runner/run/llm-idle-timeout.ts, src/agents/embedded-agent-runner/run/attempt.ts, src/cron/service/timer.ts)
  • steipete: Recent model-fallback changes in current history affect the failover loop this PR relies on, and the PR is assigned to this account for review routing. (role: fallback behavior contributor and assignee; confidence: medium; commits: 0314819f918a, b7d363cadff4; files: src/agents/model-fallback.ts, src/agents/failover-error.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.

@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. 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. P1 High-priority user-facing bug, regression, or broken workflow. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. merge-risk: 🚨 availability 🚨 May cause crashes, hangs, restart loops, stalls, or process outages. labels Jun 23, 2026
@849261680

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jun 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.

@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 24, 2026

@velvet-shark velvet-shark left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks for tightening the explicit cron timeout path here. I agree this is a real follow-up to #94445 rather than a duplicate: #94445 covered the no-explicit-timeout cron cloud case, while this PR handles the long explicit cron timeout that lets #85900 wait for the outer job deadline.

I think one correctness issue still needs a small ownership/narrowing pass before this lands:

src/agents/embedded-agent-runner/run/llm-idle-timeout.ts:99 classifies any single-label hostname as self-hosted, and src/agents/embedded-agent-runner/run/llm-idle-timeout.ts:207 then preserves the full explicit cron timeout for that provider. That means a cloud/custom provider routed through an internal alias like http://api:8080/v1 or http://gateway:4000/v1 still bypasses the 60s cron idle cap, so a silent stream can block model fallback until the outer cron timeout again. Please tie this exception to a real local/self-hosted provider signal, or narrow the hostname exception to explicit local/private names that cannot reasonably be cloud aliases, and add a regression test for a cloud/custom provider using a single-label base URL.

Also please update docs/concepts/agent-loop.md:170; the current docs still say run-specific timeouts bound/extend the model idle watchdog, but after this change explicit cron cloud runs can fail over after 60s while local/self-hosted runs keep the configured explicit timeout.

Evidence I checked:

  • src/cron/isolated-agent/run.ts preserves explicit cron timeout intent.
  • src/cron/isolated-agent/run-executor.ts passes trigger: "cron" into embedded runs and wraps them in model fallback.
  • src/agents/model-fallback.ts continues after timeout-classified failover errors.
  • src/agents/embedded-agent-runner/run/assistant-failover.ts routes idle timeouts into profile/model fallback.

Targeted review tests passed:

scripts/pr review-tests 96096 src/agents/embedded-agent-runner/run/llm-idle-timeout.test.ts src/agents/model-fallback.test.ts src/agents/embedded-agent-runner/run/failover-policy.test.ts

@openclaw-barnacle openclaw-barnacle Bot added docs Improvements or additions to documentation size: M and removed size: S labels Jun 25, 2026
@velvet-shark

Copy link
Copy Markdown
Member

Merged via squash.

@github-actions

Copy link
Copy Markdown
Contributor

Dependency Guard

This PR changes dependency-related files. Maintainers should confirm these changes are intentional.

Changed files:

  • extensions/acpx/npm-shrinkwrap.json
  • extensions/acpx/package.json
  • extensions/admin-http-rpc/package.json
  • extensions/alibaba/package.json
  • extensions/amazon-bedrock-mantle/npm-shrinkwrap.json
  • extensions/amazon-bedrock-mantle/package.json
  • extensions/amazon-bedrock/npm-shrinkwrap.json
  • extensions/amazon-bedrock/package.json
  • extensions/anthropic-vertex/npm-shrinkwrap.json
  • extensions/anthropic-vertex/package.json
  • extensions/anthropic/package.json
  • extensions/arcee/npm-shrinkwrap.json
  • extensions/arcee/package.json
  • extensions/azure-speech/package.json
  • extensions/bonjour/package.json
  • extensions/brave/npm-shrinkwrap.json
  • extensions/brave/package.json
  • extensions/browser/package.json
  • extensions/byteplus/package.json
  • extensions/canvas/package.json
  • extensions/cerebras/npm-shrinkwrap.json
  • extensions/cerebras/package.json
  • extensions/chutes/npm-shrinkwrap.json
  • extensions/chutes/package.json
  • extensions/clickclack/npm-shrinkwrap.json
  • 180 additional dependency-related files not shown

Maintainer follow-up:

  • Review whether the dependency changes are intentional.
  • Inspect resolved package deltas when lockfile, shrinkwrap, or workspace dependency policy changes are present.
  • Treat package-lock.json and npm-shrinkwrap.json diffs as security-review surfaces.
  • Run pnpm deps:changes:report -- --base-ref origin/main --markdown /tmp/dependency-changes.md --json /tmp/dependency-changes.json locally for detailed release-style evidence.

@github-actions

Copy link
Copy Markdown
Contributor

Dependency graph changes are blocked

OpenClaw does not accept dependency graph changes through PRs unless a repository admin or security explicitly authorizes the current head SHA. Dependency updates are generated internally by maintainers so external PRs cannot change the resolved graph.

Detected dependency graph changes:

  • extensions/acpx/npm-shrinkwrap.json changed.
  • extensions/amazon-bedrock-mantle/npm-shrinkwrap.json changed.
  • extensions/amazon-bedrock/npm-shrinkwrap.json changed.
  • extensions/anthropic-vertex/npm-shrinkwrap.json changed.
  • extensions/arcee/npm-shrinkwrap.json changed.
  • extensions/brave/npm-shrinkwrap.json changed.
  • extensions/cerebras/npm-shrinkwrap.json changed.
  • extensions/chutes/npm-shrinkwrap.json changed.
  • extensions/clickclack/npm-shrinkwrap.json changed.
  • extensions/cloudflare-ai-gateway/npm-shrinkwrap.json changed.
  • extensions/codex/npm-shrinkwrap.json changed.
  • extensions/cohere/npm-shrinkwrap.json changed.
  • extensions/copilot/npm-shrinkwrap.json changed.
  • extensions/deepinfra/npm-shrinkwrap.json changed.
  • extensions/deepseek/npm-shrinkwrap.json changed.
  • extensions/diagnostics-otel/npm-shrinkwrap.json changed.
  • extensions/diagnostics-prometheus/npm-shrinkwrap.json changed.
  • extensions/diffs-language-pack/npm-shrinkwrap.json changed.
  • extensions/diffs/npm-shrinkwrap.json changed.
  • extensions/discord/npm-shrinkwrap.json changed.
  • extensions/exa/npm-shrinkwrap.json changed.
  • extensions/feishu/npm-shrinkwrap.json changed.
  • extensions/firecrawl/npm-shrinkwrap.json changed.
  • extensions/fireworks/npm-shrinkwrap.json changed.
  • extensions/gmi/npm-shrinkwrap.json changed.
  • extensions/google-meet/npm-shrinkwrap.json changed.
  • extensions/googlechat/npm-shrinkwrap.json changed.
  • extensions/gradium/npm-shrinkwrap.json changed.
  • extensions/groq/npm-shrinkwrap.json changed.
  • extensions/inworld/npm-shrinkwrap.json changed.
  • extensions/irc/npm-shrinkwrap.json changed.
  • extensions/kilocode/npm-shrinkwrap.json changed.
  • extensions/kimi-coding/npm-shrinkwrap.json changed.
  • extensions/line/npm-shrinkwrap.json changed.
  • extensions/llama-cpp/npm-shrinkwrap.json changed.
  • extensions/lobster/npm-shrinkwrap.json changed.
  • extensions/matrix/npm-shrinkwrap.json changed.
  • extensions/mattermost/npm-shrinkwrap.json changed.
  • extensions/memory-lancedb/npm-shrinkwrap.json changed.
  • extensions/moonshot/npm-shrinkwrap.json changed.
  • extensions/msteams/npm-shrinkwrap.json changed.
  • extensions/nextcloud-talk/npm-shrinkwrap.json changed.
  • extensions/nostr/npm-shrinkwrap.json changed.
  • extensions/openshell/npm-shrinkwrap.json changed.
  • extensions/parallel/npm-shrinkwrap.json changed.
  • extensions/perplexity/npm-shrinkwrap.json changed.
  • extensions/pixverse/npm-shrinkwrap.json changed.
  • extensions/qianfan/npm-shrinkwrap.json changed.
  • extensions/qqbot/npm-shrinkwrap.json changed.
  • extensions/qwen/npm-shrinkwrap.json changed.
  • extensions/raft/npm-shrinkwrap.json changed.
  • extensions/searxng/npm-shrinkwrap.json changed.
  • extensions/signal/npm-shrinkwrap.json changed.
  • extensions/slack/npm-shrinkwrap.json changed.
  • extensions/sms/npm-shrinkwrap.json changed.
  • extensions/stepfun/npm-shrinkwrap.json changed.
  • extensions/synology-chat/npm-shrinkwrap.json changed.
  • extensions/tavily/npm-shrinkwrap.json changed.
  • extensions/tencent/npm-shrinkwrap.json changed.
  • extensions/tlon/npm-shrinkwrap.json changed.
  • extensions/tokenjuice/npm-shrinkwrap.json changed.
  • extensions/twitch/npm-shrinkwrap.json changed.
  • extensions/venice/npm-shrinkwrap.json changed.
  • extensions/vercel-ai-gateway/npm-shrinkwrap.json changed.
  • extensions/voice-call/npm-shrinkwrap.json changed.
  • extensions/whatsapp/npm-shrinkwrap.json changed.
  • extensions/zai/npm-shrinkwrap.json changed.
  • extensions/zalo/npm-shrinkwrap.json changed.
  • extensions/zalouser/npm-shrinkwrap.json changed.
  • npm-shrinkwrap.json changed.
  • pnpm-lock.yaml changed.
  • extensions/acpx/package.json changed dependencies, version.
  • extensions/admin-http-rpc/package.json changed version.
  • extensions/alibaba/package.json changed version.
  • extensions/amazon-bedrock-mantle/package.json changed version.
  • extensions/amazon-bedrock/package.json changed version.
  • extensions/anthropic-vertex/package.json changed version.
  • extensions/anthropic/package.json changed version.
  • extensions/arcee/package.json changed version.
  • extensions/azure-speech/package.json changed version.
  • extensions/bonjour/package.json changed version.
  • extensions/brave/package.json changed version.
  • extensions/browser/package.json changed version.
  • extensions/byteplus/package.json changed version.
  • extensions/canvas/package.json changed version.
  • extensions/cerebras/package.json changed version.
  • extensions/chutes/package.json changed version.
  • extensions/clickclack/package.json changed peerDependencies, version.
  • extensions/cloudflare-ai-gateway/package.json changed version.
  • extensions/codex-supervisor/package.json changed version.
  • extensions/codex/package.json changed version.
  • extensions/cohere/package.json changed version.
  • extensions/comfy/package.json changed version.
  • extensions/copilot-proxy/package.json changed version.
  • extensions/copilot/package.json changed version.
  • extensions/deepgram/package.json changed version.
  • extensions/deepinfra/package.json changed version.
  • extensions/deepseek/package.json changed version.
  • extensions/diagnostics-otel/package.json changed version.
  • extensions/diagnostics-prometheus/package.json changed version.
  • extensions/diffs-language-pack/package.json changed version.
  • extensions/diffs/package.json changed version.
  • extensions/discord/package.json changed peerDependencies, version.
  • extensions/document-extract/package.json changed version.
  • extensions/duckduckgo/package.json changed version.
  • extensions/elevenlabs/package.json changed version.
  • extensions/exa/package.json changed version.
  • extensions/fal/package.json changed version.
  • extensions/feishu/package.json changed peerDependencies, version.
  • extensions/file-transfer/package.json changed version.
  • extensions/firecrawl/package.json changed version.
  • extensions/fireworks/package.json changed version.
  • extensions/github-copilot/package.json changed version.
  • extensions/gmi/package.json changed version.
  • extensions/google-meet/package.json changed peerDependencies, version.
  • extensions/google/package.json changed version.
  • extensions/googlechat/package.json changed peerDependencies, version.
  • extensions/gradium/package.json changed version.
  • extensions/groq/package.json changed version.
  • extensions/huggingface/package.json changed version.
  • extensions/image-generation-core/package.json changed version.
  • extensions/imessage/package.json changed version.
  • extensions/inworld/package.json changed version.
  • extensions/irc/package.json changed version.
  • extensions/kilocode/package.json changed version.
  • extensions/kimi-coding/package.json changed version.
  • extensions/line/package.json changed peerDependencies, version.
  • extensions/litellm/package.json changed version.
  • extensions/llama-cpp/package.json changed version.
  • extensions/llm-task/package.json changed version.
  • extensions/lmstudio/package.json changed version.
  • extensions/lobster/package.json changed version.
  • extensions/matrix/package.json changed peerDependencies, version.
  • extensions/mattermost/package.json changed peerDependencies, version.
  • extensions/media-understanding-core/package.json changed version.
  • extensions/memory-core/package.json changed peerDependencies, version.
  • extensions/memory-lancedb/package.json changed version.
  • extensions/memory-wiki/package.json changed peerDependencies, version.
  • extensions/microsoft-foundry/package.json changed version.
  • extensions/microsoft/package.json changed version.
  • extensions/migrate-claude/package.json changed peerDependencies, version.
  • extensions/migrate-hermes/package.json changed peerDependencies, version.
  • extensions/minimax/package.json changed version.
  • extensions/mistral/package.json changed version.
  • extensions/moonshot/package.json changed version.
  • extensions/msteams/package.json changed peerDependencies, version.
  • extensions/nextcloud-talk/package.json changed peerDependencies, version.
  • extensions/nostr/package.json changed peerDependencies, version.
  • extensions/novita/package.json changed version.
  • extensions/nvidia/package.json changed version.
  • extensions/oc-path/package.json changed peerDependencies, version.
  • extensions/ollama/package.json changed version.
  • extensions/open-prose/package.json changed version.
  • extensions/openai/package.json changed version.
  • extensions/opencode-go/package.json changed version.
  • extensions/opencode/package.json changed version.
  • extensions/openrouter/package.json changed version.
  • extensions/openshell/package.json changed version.
  • extensions/parallel/package.json changed version.
  • extensions/perplexity/package.json changed version.
  • extensions/pixverse/package.json changed peerDependencies, version.
  • extensions/policy/package.json changed peerDependencies, version.
  • extensions/qa-channel/package.json changed peerDependencies, version.
  • extensions/qa-lab/package.json changed peerDependencies, version.
  • extensions/qa-matrix/package.json changed peerDependencies, version.
  • extensions/qianfan/package.json changed version.
  • extensions/qqbot/package.json changed peerDependencies, version.
  • extensions/qwen/package.json changed version.
  • extensions/raft/package.json changed peerDependencies, version.
  • extensions/runway/package.json changed version.
  • extensions/searxng/package.json changed version.
  • extensions/senseaudio/package.json changed version.
  • extensions/sglang/package.json changed version.
  • extensions/signal/package.json changed version.
  • extensions/slack/package.json changed peerDependencies, version.
  • extensions/sms/package.json changed version.
  • extensions/stepfun/package.json changed version.
  • extensions/synology-chat/package.json changed version.
  • extensions/synthetic/package.json changed version.
  • extensions/tavily/package.json changed version.
  • extensions/telegram/package.json changed version.
  • extensions/tencent/package.json changed version.
  • extensions/tlon/package.json changed peerDependencies, version.
  • extensions/together/package.json changed version.
  • extensions/tokenjuice/package.json changed peerDependencies, version.
  • extensions/tts-local-cli/package.json changed version.
  • extensions/twitch/package.json changed version.
  • extensions/venice/package.json changed version.
  • extensions/vercel-ai-gateway/package.json changed version.
  • extensions/video-generation-core/package.json changed version.
  • extensions/vllm/package.json changed version.
  • extensions/voice-call/package.json changed peerDependencies, version.
  • extensions/volcengine/package.json changed version.
  • extensions/voyage/package.json changed version.
  • extensions/vydra/package.json changed version.
  • extensions/web-readability/package.json changed version.
  • extensions/webhooks/package.json changed version.
  • extensions/whatsapp/package.json changed peerDependencies, version.
  • extensions/workboard/package.json changed peerDependencies, version.
  • extensions/xai/package.json changed version.
  • extensions/xiaomi/package.json changed version.
  • extensions/zai/package.json changed version.
  • extensions/zalo/package.json changed peerDependencies, version.
  • extensions/zalouser/package.json changed peerDependencies, version.
  • package.json changed version.

Auto-scrub was not attempted because this PR changes package manifest dependency graph fields:

  • extensions/acpx/package.json changed dependencies, version.
  • extensions/admin-http-rpc/package.json changed version.
  • extensions/alibaba/package.json changed version.
  • extensions/amazon-bedrock-mantle/package.json changed version.
  • extensions/amazon-bedrock/package.json changed version.
  • extensions/anthropic-vertex/package.json changed version.
  • extensions/anthropic/package.json changed version.
  • extensions/arcee/package.json changed version.
  • extensions/azure-speech/package.json changed version.
  • extensions/bonjour/package.json changed version.
  • extensions/brave/package.json changed version.
  • extensions/browser/package.json changed version.
  • extensions/byteplus/package.json changed version.
  • extensions/canvas/package.json changed version.
  • extensions/cerebras/package.json changed version.
  • extensions/chutes/package.json changed version.
  • extensions/clickclack/package.json changed peerDependencies, version.
  • extensions/cloudflare-ai-gateway/package.json changed version.
  • extensions/codex-supervisor/package.json changed version.
  • extensions/codex/package.json changed version.
  • extensions/cohere/package.json changed version.
  • extensions/comfy/package.json changed version.
  • extensions/copilot-proxy/package.json changed version.
  • extensions/copilot/package.json changed version.
  • extensions/deepgram/package.json changed version.
  • extensions/deepinfra/package.json changed version.
  • extensions/deepseek/package.json changed version.
  • extensions/diagnostics-otel/package.json changed version.
  • extensions/diagnostics-prometheus/package.json changed version.
  • extensions/diffs-language-pack/package.json changed version.
  • extensions/diffs/package.json changed version.
  • extensions/discord/package.json changed peerDependencies, version.
  • extensions/document-extract/package.json changed version.
  • extensions/duckduckgo/package.json changed version.
  • extensions/elevenlabs/package.json changed version.
  • extensions/exa/package.json changed version.
  • extensions/fal/package.json changed version.
  • extensions/feishu/package.json changed peerDependencies, version.
  • extensions/file-transfer/package.json changed version.
  • extensions/firecrawl/package.json changed version.
  • extensions/fireworks/package.json changed version.
  • extensions/github-copilot/package.json changed version.
  • extensions/gmi/package.json changed version.
  • extensions/google-meet/package.json changed peerDependencies, version.
  • extensions/google/package.json changed version.
  • extensions/googlechat/package.json changed peerDependencies, version.
  • extensions/gradium/package.json changed version.
  • extensions/groq/package.json changed version.
  • extensions/huggingface/package.json changed version.
  • extensions/image-generation-core/package.json changed version.
  • extensions/imessage/package.json changed version.
  • extensions/inworld/package.json changed version.
  • extensions/irc/package.json changed version.
  • extensions/kilocode/package.json changed version.
  • extensions/kimi-coding/package.json changed version.
  • extensions/line/package.json changed peerDependencies, version.
  • extensions/litellm/package.json changed version.
  • extensions/llama-cpp/package.json changed version.
  • extensions/llm-task/package.json changed version.
  • extensions/lmstudio/package.json changed version.
  • extensions/lobster/package.json changed version.
  • extensions/matrix/package.json changed peerDependencies, version.
  • extensions/mattermost/package.json changed peerDependencies, version.
  • extensions/media-understanding-core/package.json changed version.
  • extensions/memory-core/package.json changed peerDependencies, version.
  • extensions/memory-lancedb/package.json changed version.
  • extensions/memory-wiki/package.json changed peerDependencies, version.
  • extensions/microsoft-foundry/package.json changed version.
  • extensions/microsoft/package.json changed version.
  • extensions/migrate-claude/package.json changed peerDependencies, version.
  • extensions/migrate-hermes/package.json changed peerDependencies, version.
  • extensions/minimax/package.json changed version.
  • extensions/mistral/package.json changed version.
  • extensions/moonshot/package.json changed version.
  • extensions/msteams/package.json changed peerDependencies, version.
  • extensions/nextcloud-talk/package.json changed peerDependencies, version.
  • extensions/nostr/package.json changed peerDependencies, version.
  • extensions/novita/package.json changed version.
  • extensions/nvidia/package.json changed version.
  • extensions/oc-path/package.json changed peerDependencies, version.
  • extensions/ollama/package.json changed version.
  • extensions/open-prose/package.json changed version.
  • extensions/openai/package.json changed version.
  • extensions/opencode-go/package.json changed version.
  • extensions/opencode/package.json changed version.
  • extensions/openrouter/package.json changed version.
  • extensions/openshell/package.json changed version.
  • extensions/parallel/package.json changed version.
  • extensions/perplexity/package.json changed version.
  • extensions/pixverse/package.json changed peerDependencies, version.
  • extensions/policy/package.json changed peerDependencies, version.
  • extensions/qa-channel/package.json changed peerDependencies, version.
  • extensions/qa-lab/package.json changed peerDependencies, version.
  • extensions/qa-matrix/package.json changed peerDependencies, version.
  • extensions/qianfan/package.json changed version.
  • extensions/qqbot/package.json changed peerDependencies, version.
  • extensions/qwen/package.json changed version.
  • extensions/raft/package.json changed peerDependencies, version.
  • extensions/runway/package.json changed version.
  • extensions/searxng/package.json changed version.
  • extensions/senseaudio/package.json changed version.
  • extensions/sglang/package.json changed version.
  • extensions/signal/package.json changed version.
  • extensions/slack/package.json changed peerDependencies, version.
  • extensions/sms/package.json changed version.
  • extensions/stepfun/package.json changed version.
  • extensions/synology-chat/package.json changed version.
  • extensions/synthetic/package.json changed version.
  • extensions/tavily/package.json changed version.
  • extensions/telegram/package.json changed version.
  • extensions/tencent/package.json changed version.
  • extensions/tlon/package.json changed peerDependencies, version.
  • extensions/together/package.json changed version.
  • extensions/tokenjuice/package.json changed peerDependencies, version.
  • extensions/tts-local-cli/package.json changed version.
  • extensions/twitch/package.json changed version.
  • extensions/venice/package.json changed version.
  • extensions/vercel-ai-gateway/package.json changed version.
  • extensions/video-generation-core/package.json changed version.
  • extensions/vllm/package.json changed version.
  • extensions/voice-call/package.json changed peerDependencies, version.
  • extensions/volcengine/package.json changed version.
  • extensions/voyage/package.json changed version.
  • extensions/vydra/package.json changed version.
  • extensions/web-readability/package.json changed version.
  • extensions/webhooks/package.json changed version.
  • extensions/whatsapp/package.json changed peerDependencies, version.
  • extensions/workboard/package.json changed peerDependencies, version.
  • extensions/xai/package.json changed version.
  • extensions/xiaomi/package.json changed version.
  • extensions/zai/package.json changed version.
  • extensions/zalo/package.json changed peerDependencies, version.
  • extensions/zalouser/package.json changed peerDependencies, version.
  • package.json changed version.

Dependency graph changes must be reviewed by security or handled by maintainers internally. Please remove lockfile changes manually if they are not needed.

To remove lockfile changes, restore them from the target branch:

git fetch origin
git checkout 'origin/main' -- 'extensions/acpx/npm-shrinkwrap.json' 'extensions/amazon-bedrock-mantle/npm-shrinkwrap.json' 'extensions/amazon-bedrock/npm-shrinkwrap.json' 'extensions/anthropic-vertex/npm-shrinkwrap.json' 'extensions/arcee/npm-shrinkwrap.json' 'extensions/brave/npm-shrinkwrap.json' 'extensions/cerebras/npm-shrinkwrap.json' 'extensions/chutes/npm-shrinkwrap.json' 'extensions/clickclack/npm-shrinkwrap.json' 'extensions/cloudflare-ai-gateway/npm-shrinkwrap.json' 'extensions/codex/npm-shrinkwrap.json' 'extensions/cohere/npm-shrinkwrap.json' 'extensions/copilot/npm-shrinkwrap.json' 'extensions/deepinfra/npm-shrinkwrap.json' 'extensions/deepseek/npm-shrinkwrap.json' 'extensions/diagnostics-otel/npm-shrinkwrap.json' 'extensions/diagnostics-prometheus/npm-shrinkwrap.json' 'extensions/diffs-language-pack/npm-shrinkwrap.json' 'extensions/diffs/npm-shrinkwrap.json' 'extensions/discord/npm-shrinkwrap.json' 'extensions/exa/npm-shrinkwrap.json' 'extensions/feishu/npm-shrinkwrap.json' 'extensions/firecrawl/npm-shrinkwrap.json' 'extensions/fireworks/npm-shrinkwrap.json' 'extensions/gmi/npm-shrinkwrap.json' 'extensions/google-meet/npm-shrinkwrap.json' 'extensions/googlechat/npm-shrinkwrap.json' 'extensions/gradium/npm-shrinkwrap.json' 'extensions/groq/npm-shrinkwrap.json' 'extensions/inworld/npm-shrinkwrap.json' 'extensions/irc/npm-shrinkwrap.json' 'extensions/kilocode/npm-shrinkwrap.json' 'extensions/kimi-coding/npm-shrinkwrap.json' 'extensions/line/npm-shrinkwrap.json' 'extensions/llama-cpp/npm-shrinkwrap.json' 'extensions/lobster/npm-shrinkwrap.json' 'extensions/matrix/npm-shrinkwrap.json' 'extensions/mattermost/npm-shrinkwrap.json' 'extensions/memory-lancedb/npm-shrinkwrap.json' 'extensions/moonshot/npm-shrinkwrap.json' 'extensions/msteams/npm-shrinkwrap.json' 'extensions/nextcloud-talk/npm-shrinkwrap.json' 'extensions/nostr/npm-shrinkwrap.json' 'extensions/openshell/npm-shrinkwrap.json' 'extensions/parallel/npm-shrinkwrap.json' 'extensions/perplexity/npm-shrinkwrap.json' 'extensions/pixverse/npm-shrinkwrap.json' 'extensions/qianfan/npm-shrinkwrap.json' 'extensions/qqbot/npm-shrinkwrap.json' 'extensions/qwen/npm-shrinkwrap.json' 'extensions/raft/npm-shrinkwrap.json' 'extensions/searxng/npm-shrinkwrap.json' 'extensions/signal/npm-shrinkwrap.json' 'extensions/slack/npm-shrinkwrap.json' 'extensions/sms/npm-shrinkwrap.json' 'extensions/stepfun/npm-shrinkwrap.json' 'extensions/synology-chat/npm-shrinkwrap.json' 'extensions/tavily/npm-shrinkwrap.json' 'extensions/tencent/npm-shrinkwrap.json' 'extensions/tlon/npm-shrinkwrap.json' 'extensions/tokenjuice/npm-shrinkwrap.json' 'extensions/twitch/npm-shrinkwrap.json' 'extensions/venice/npm-shrinkwrap.json' 'extensions/vercel-ai-gateway/npm-shrinkwrap.json' 'extensions/voice-call/npm-shrinkwrap.json' 'extensions/whatsapp/npm-shrinkwrap.json' 'extensions/zai/npm-shrinkwrap.json' 'extensions/zalo/npm-shrinkwrap.json' 'extensions/zalouser/npm-shrinkwrap.json' 'npm-shrinkwrap.json' 'pnpm-lock.yaml'
git commit -m 'chore: remove dependency lockfile change'
git push

If this PR intentionally needs a dependency graph change, ask a repository admin or member of @openclaw/openclaw-secops to comment:

/allow-dependencies-change

The action will approve the current head SHA (d21fe1af4b1d21a39a972449be5c99a0cd928bf0) when it reruns. A later push requires a fresh approval.

@velvet-shark

Copy link
Copy Markdown
Member

Clarification on the post-merge Dependency Guard comments: those warnings were triggered by the prepared PR head compare, not by the landed squash commit.

The prepared head d21fe1af4b1d21a39a972449be5c99a0cd928bf0 was created after a rebase using the GraphQL commit path, with parent cf37b17eb67877a67ea3d635f25496db1a065182 but a tree based on newer main. That made PR/check diffing see unrelated mainline dependency/package changes and produced the broad dependency-graph warnings.

The actual landed squash commit is 7fefc5ff58de020a1eadd7c31d649c9a442a3f98, parented on 19707cce1d7336e2fe5e8431b0d79240692ebb96, and GitHub reports only the intended 4 files changed: docs/concepts/agent-loop.md, src/agents/embedded-agent-runner/run/attempt.ts, src/agents/embedded-agent-runner/run/llm-idle-timeout.test.ts, and src/agents/embedded-agent-runner/run/llm-idle-timeout.ts.

So the dependency warnings are PR-page residue from the bad prepared-head ancestry; no dependency, lockfile, package manifest, workflow, or extension changes landed on main in this merge.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agents Agent runtime and tooling app: android App: android app: ios App: ios app: macos App: macos app: web-ui App: web-ui channel: discord Channel integration: discord channel: feishu Channel integration: feishu channel: googlechat Channel integration: googlechat channel: imessage Channel integration: imessage channel: irc channel: line Channel integration: line channel: matrix Channel integration: matrix channel: mattermost Channel integration: mattermost channel: msteams Channel integration: msteams channel: nextcloud-talk Channel integration: nextcloud-talk channel: nostr Channel integration: nostr channel: qa-channel Channel integration: qa-channel channel: qqbot channel: raft Channel integration: Raft channel: signal Channel integration: signal channel: slack Channel integration: slack channel: sms Channel integration: sms channel: synology-chat channel: telegram Channel integration: telegram channel: tlon Channel integration: tlon channel: twitch Channel integration: twitch channel: voice-call Channel integration: voice-call channel: whatsapp-web Channel integration: whatsapp-web channel: zalo Channel integration: zalo channel: zalouser Channel integration: zalouser cli CLI command changes commands Command implementations docker Docker and sandbox tooling docs Improvements or additions to documentation extensions: acpx extensions: admin-http-rpc extensions: anthropic extensions: arcee extensions: byteplus extensions: cerebras extensions: cloudflare-ai-gateway extensions: codex extensions: codex-supervisor Extension: codex-supervisor extensions: copilot extensions: copilot-proxy Extension: copilot-proxy extensions: deepinfra extensions: deepseek extensions: diagnostics-otel Extension: diagnostics-otel extensions: diagnostics-prometheus extensions: duckduckgo extensions: gmi extensions: huggingface extensions: inworld Extension: inworld extensions: kilocode extensions: kimi-coding extensions: litellm extensions: llama-cpp extensions: llm-task Extension: llm-task extensions: lmstudio extensions: lobster Extension: lobster extensions: memory-core Extension: memory-core extensions: memory-lancedb Extension: memory-lancedb extensions: memory-wiki extensions: minimax extensions: moonshot extensions: novita extensions: nvidia extensions: oc-path extensions: open-prose Extension: open-prose extensions: openai extensions: policy extensions: qa-lab extensions: qianfan extensions: senseaudio extensions: stepfun extensions: synthetic extensions: tavily extensions: tencent extensions: together extensions: tokenjuice Changes to the bundled tokenjuice extension extensions: tts-local-cli extensions: venice extensions: webhooks gateway Gateway runtime merge-risk: 🚨 availability 🚨 May cause crashes, hangs, restart loops, stalls, or process outages. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. P1 High-priority user-facing bug, regression, or broken workflow. plugin: azure-speech Azure Speech plugin plugin: bonjour Plugin integration: bonjour plugin: file-transfer plugin: google-meet plugin: migrate-claude plugin: migrate-hermes plugin: pixverse plugin: workboard proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. scripts Repository scripts size: XL 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]: Cron payload-pinned model fallback chain does not engage on stream-stall failures (provider opens stream, never sends a chunk)

3 participants