Skip to content

Fix webchat media completion handoff#91246

Merged
vincentkoc merged 2 commits into
openclaw:mainfrom
TurboTheTurtle:codex/91003-media-completion-webchat
Jun 13, 2026
Merged

Fix webchat media completion handoff#91246
vincentkoc merged 2 commits into
openclaw:mainfrom
TurboTheTurtle:codex/91003-media-completion-webchat

Conversation

@TurboTheTurtle

Copy link
Copy Markdown
Contributor

Summary

What problem does this PR solve?

  • Fixes generated media completion prompts so music/image/video task completion events carry explicit MEDIA:<path-or-url> directives derived from mediaUrls and generated attachments.
  • Treats attachment-only assistant payloads as visible delivery evidence so session-only webchat/dashboard completion handoffs with generated media are not falsely rejected as empty.
  • Adds focused coverage for dashboard/webchat music_generate completion delivery staying on the session-only handoff path without attempting external direct fallback.

Why does this matter now?

What is the intended outcome?

  • A completed background music task gives the requester session an unambiguous media directive and accepts media-bearing session-only replies as delivered.

What is intentionally out of scope?

  • No provider-specific MiniMax changes.
  • No new config or external-channel fallback behavior changes.
  • No changes to Slack/Discord/Telegram direct media fallback semantics.

What does success look like?

  • Webchat/dashboard generated-media completions use the requester session handoff and surface generated audio/media instead of failing as invisible completion delivery.

What should reviewers focus on?

  • src/agents/internal-events.ts for the explicit generated-media directives in internal completion prompts.
  • src/agents/embedded-agent-runner/delivery-evidence.ts for attachment-only payload visibility.
  • The regressions in src/agents/tools/media-generate-background-shared.test.ts and src/agents/subagent-announce-delivery.test.ts.

Linked context

Which issue does this close?

Closes #91003

Which issues, PRs, or discussions are related?

Related to the ClawSweeper issue review on #91003.

Was this requested by a maintainer or owner?

  • Not maintainer-requested; this follows the open P1 issue and ClawSweeper's suggested fix direction for shared webchat/dashboard generated-media completion delivery.

Real behavior proof (required for external PRs)

  • Behavior or issue addressed: A completed background music task now injects explicit MEDIA: directives into the requester-session completion event, and a media-bearing session-only payload counts as visible delivery evidence even when the payload carries generated media as attachments rather than mediaUrls.
  • Real environment tested: Local OpenClaw source checkout on macOS, PR head 96a4fae329, Node with tsx, plus focused OpenClaw Vitest/gateway suites against the changed source.
  • Exact steps or command run after this patch:
$ node --import tsx --input-type=module <<'EOF'
import { formatAgentInternalEventsForPrompt } from './src/agents/internal-events.ts';
import { hasVisibleAgentPayload } from './src/agents/embedded-agent-runner/delivery-evidence.ts';

const event = {
  type: 'task_completion',
  source: 'music_generation',
  childSessionKey: 'music_generate:task-123',
  childSessionId: 'task-123',
  announceType: 'music generation task',
  taskLabel: 'night-drive synthwave',
  status: 'ok',
  statusLabel: 'completed successfully',
  result: 'Generated 1 track.\n- path="/tmp/generated-night-drive.mp3"',
  attachments: [
    {
      type: 'audio',
      path: '/tmp/generated-night-drive.mp3',
      mimeType: 'audio/mpeg',
      name: 'generated-night-drive.mp3',
    },
  ],
  replyInstruction: 'Tell the user the music is ready and include the generated audio.',
};
const prompt = formatAgentInternalEventsForPrompt([event]);
const mediaLines = prompt.split('\n').filter((line) => line.startsWith('MEDIA:'));
const attachmentVisible = hasVisibleAgentPayload({
  payloads: [
    {
      text: '',
      attachments: event.attachments,
    },
  ],
});
console.log(JSON.stringify({
  mediaLines,
  attachmentVisible,
  promptIncludesAttachmentPath: prompt.includes('path="/tmp/generated-night-drive.mp3"'),
}, null, 2));
EOF
  • Evidence after fix:
{
  "mediaLines": [
    "MEDIA:/tmp/generated-night-drive.mp3"
  ],
  "attachmentVisible": true,
  "promptIncludesAttachmentPath": true
}
  • Observed result after fix: The actual internal completion formatter emits the generated audio as a MEDIA: directive, and the actual delivery evidence helper treats an attachment-only media payload as visible. The new dashboard/webchat regression also proves music_generate completion handoff runs with deliver: false, channel: "webchat", and no external sendMessage fallback.
  • What was not tested: I did not run a live MiniMax/music provider generation from a real dashboard session in this PR worktree.
  • Proof limitations or environment constraints: The live reporter environment from music_generate background task completion delivery consistently fails (completion wake + fallback both fail) #91003 was not available here, so the proof uses source-level runtime checks and focused integration-style tests for the shared handoff path. A maintainer or live OpenClaw agent can add a real dashboard music run if ClawSweeper requires provider-backed proof.
  • Before evidence (optional but encouraged): Before this patch, generated attachment paths were present as attachment metadata, but the internal completion prompt did not include a MEDIA:/tmp/generated-night-drive.mp3 directive, and attachment-only payloads did not count as visible delivery evidence.

Tests and validation

Which commands did you run?

$ node scripts/run-vitest.mjs src/agents/tools/media-generate-background-shared.test.ts
$ node scripts/run-vitest.mjs src/agents/subagent-announce-delivery.test.ts
$ node scripts/run-vitest.mjs src/agents/subagent-announce-delivery.test.ts src/agents/tools/media-generate-background-shared.test.ts src/agents/tools/music-generate-tool.test.ts
$ node scripts/run-vitest.mjs src/gateway/server.agent.gateway-server-agent-b.test.ts src/gateway/tool-resolution.test.ts
$ node scripts/run-oxlint.mjs src/agents/internal-events.ts src/agents/embedded-agent-runner/delivery-evidence.ts src/agents/tools/media-generate-background-shared.test.ts src/agents/subagent-announce-delivery.test.ts
$ pnpm exec oxfmt --check src/agents/internal-events.ts src/agents/embedded-agent-runner/delivery-evidence.ts src/agents/tools/media-generate-background-shared.test.ts src/agents/subagent-announce-delivery.test.ts
$ pnpm tsgo:core
$ pnpm tsgo:core:test
$ git diff --check
$ git log --format='%h %an <%ae> %s' upstream/main..HEAD

What regression coverage was added or updated?

  • Added a shared media lifecycle regression proving music completion wake prompts include deduped generated-media MEDIA: directives from attachments.
  • Added a dashboard/webchat music_generate announce-delivery regression proving session-only handoff is accepted with generated media evidence and does not call external direct fallback.

What failed before this fix, if known?

  • The new shared lifecycle assertion for MEDIA:/tmp/generated-night-drive.mp3 in the completion trigger would fail before this patch because internal task completion formatting only rendered attachment metadata lines.
  • Attachment-only payloads were not visible delivery evidence before this patch.

If no test was added, why not?

  • Focused regressions were added.

Risk checklist

Did user-visible behavior change? (Yes/No)

Yes.

Did config, environment, or migration behavior change? (Yes/No)

No.

Did security, auth, secrets, network, or tool execution behavior change? (Yes/No)

No.

What is the highest-risk area?

  • Generated media completion delivery, because media paths are now represented explicitly in the internal prompt in addition to attachment metadata.

How is that risk mitigated?

  • The directive is derived only from already-generated mediaUrls/attachments already present in the internal event, deduped before formatting, and existing external-channel fallback tests continue to pass.

Current review state

What is the next action?

  • Wait for CI and ClawSweeper review.

What is still waiting on author, maintainer, CI, or external proof?

  • CI and ClawSweeper verdicts are pending. If ClawSweeper requires provider-backed proof, the next step is to run a real dashboard music_generate completion on PR head and update this PR body with that live log.

Which bot or reviewer comments were addressed?

@openclaw-barnacle openclaw-barnacle Bot added agents Agent runtime and tooling size: S labels Jun 7, 2026
@TurboTheTurtle

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

@clawsweeper

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

@openclaw-barnacle openclaw-barnacle Bot added the proof: supplied External PR includes structured after-fix real behavior proof. label Jun 7, 2026
@clawsweeper

clawsweeper Bot commented Jun 7, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge. Reviewed June 7, 2026, 8:33 PM ET / 00:33 UTC.

Summary
The PR adds generated-media MEDIA: directives to internal completion events, treats attachment-only agent payloads as visible delivery evidence, and adds focused webchat/dashboard media completion regressions.

PR surface: Source +21, Tests +165. Total +186 across 4 files.

Reproducibility: yes. source-level reproduction is high-confidence: current main lacks explicit generated-media MEDIA: directives and ignores attachment-only payloads as visible evidence, matching the linked webchat completion-loss report. I did not run a local failing scenario because this review is read-only.

Review metrics: 1 noteworthy metric.

  • Delivery Evidence Predicate: 1 widened. hasVisibleAgentPayload now treats non-empty attachments as visible, which controls whether completion fallback fires.

Merge readiness
Overall: 🦞 diamond lobster
Proof: 🦞 diamond lobster
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.

Risk before merge

  • [P2] The merge-sensitive area is message delivery: widening attachment-only payloads to count as visible can suppress fallback anywhere that predicate is used, so the focused tests and live webchat proof should remain the merge gate.

Maintainer options:

  1. Accept With Focused Proof (recommended)
    Maintain the current narrow patch if PR-head CI remains green because it now has live webchat proof plus focused tests for session-only handoff and fallback preservation.
  2. Ask For Broader Channel Smoke
    If maintainers want more assurance, run one generated-media completion smoke on an external channel to confirm attachment evidence does not mask required fallback delivery.

Next step before merge

  • [P2] No repair lane is needed because the patch is reviewable as-is and I found no concrete ClawSweeper-fixable defect.

Security
Cleared: The diff touches agent prompt formatting, delivery evidence, and tests only; it does not add dependencies, workflow execution, permissions, secrets handling, or package/install surfaces.

Review details

Best possible solution:

Land the narrow core fix if CI remains green, keeping requester-session completion as the primary path and direct media delivery as fallback/recovery only.

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

Yes, source-level reproduction is high-confidence: current main lacks explicit generated-media MEDIA: directives and ignores attachment-only payloads as visible evidence, matching the linked webchat completion-loss report. I did not run a local failing scenario because this review is read-only.

Is this the best way to solve the issue?

Yes, this is the best narrow fix shape: it repairs the shared internal completion prompt/evidence path instead of adding provider-specific MiniMax or external-channel fallback behavior.

AGENTS.md: found and applied where relevant.

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

Label changes

Label changes:

  • add proof: sufficient: Contributor real behavior proof is sufficient. A PR-head live dashboard/control-ui webchat run with Google Lyria shows the requester receives a final MEDIA: MP3 reference after background completion and no delivery failure was found in logs.
  • add rating: 🦞 diamond lobster: Overall readiness is 🦞 diamond lobster; proof is 🦞 diamond lobster and patch quality is 🐚 platinum hermit.
  • add status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (logs): A PR-head live dashboard/control-ui webchat run with Google Lyria shows the requester receives a final MEDIA: MP3 reference after background completion and no delivery failure was found in logs.
  • remove rating: 🦪 silver shellfish: Current PR rating is rating: 🦞 diamond lobster, so this older rating label is no longer current.
  • remove status: 📣 needs proof: Current PR status label is status: 👀 ready for maintainer look.

Label justifications:

  • P1: The linked bug loses generated music completion delivery in a real dashboard/webchat workflow.
  • merge-risk: 🚨 message-delivery: The runtime diff changes how completion handoff decides that media-bearing agent output was delivered.
  • rating: 🦞 diamond lobster: Overall readiness is 🦞 diamond lobster; proof is 🦞 diamond lobster and patch quality is 🐚 platinum hermit.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (logs): A PR-head live dashboard/control-ui webchat run with Google Lyria shows the requester receives a final MEDIA: MP3 reference after background completion and no delivery failure was found in logs.
  • proof: sufficient: Contributor real behavior proof is sufficient. A PR-head live dashboard/control-ui webchat run with Google Lyria shows the requester receives a final MEDIA: MP3 reference after background completion and no delivery failure was found in logs.
Evidence reviewed

PR surface:

Source +21, Tests +165. Total +186 across 4 files.

View PR surface stats
Area Files Added Removed Net
Source 2 21 0 +21
Tests 2 165 0 +165
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 4 186 0 +186

What I checked:

  • Repository policy applied: Root and scoped agent AGENTS.md files were read; the root policy explicitly says generated-media completions wake the requester agent first and direct media send is fallback/recovery only. (AGENTS.md:1, 5c5391836b1e)
  • Current main lacks explicit generated-media directives: On current main, task completion formatting renders child result and attachment metadata, but it does not add separate MEDIA:<path-or-url> directive lines for generated attachments. (src/agents/internal-events.ts:64, 5c5391836b1e)
  • PR adds explicit generated-media directives: The PR head adds formatGeneratedMediaDirectiveLines, dedupes mediaUrls with generated attachment references, and appends MEDIA: lines to both protected and plain internal completion prompts. (src/agents/internal-events.ts:65, 96a4fae32951)
  • PR widens visible payload evidence for attachments: The PR head updates hasVisibleAgentPayload so a non-empty attachments array counts as visible delivery evidence, which is the predicate used by the completion handoff path. (src/agents/embedded-agent-runner/delivery-evidence.ts:151, 96a4fae32951)
  • Runtime path matches the requested fix boundary: The media lifecycle already builds internal events from generated attachments/media URLs and calls deliverSubagentAnnouncement; the PR changes the prompt/evidence surfaces rather than provider-specific media generation. (src/agents/tools/media-generate-background-shared.ts:527, 5c5391836b1e)
  • Session-only handoff depends on visible payload evidence: For session-only completion handoffs, deliverSubagentAnnouncement returns visible_reply_missing when there is no visible payload, completion side effect, or intentional silent payload; this is the decision point the attachment evidence change repairs. (src/agents/subagent-announce-delivery.ts:1615, 5c5391836b1e)

Likely related people:

  • steipete: Current-main blame across the media completion lifecycle, subagent delivery decision point, internal event formatter, and delivery evidence helper points to Peter Steinberger’s commit as the active history anchor for this path. (role: recent area contributor; confidence: medium; commits: ce015cef5775; files: src/agents/tools/media-generate-background-shared.ts, src/agents/subagent-announce-delivery.ts, src/agents/internal-events.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 the rating: 🌊 off-meta tidepool PR readiness rating does not apply to this item. label Jun 7, 2026
@TurboTheTurtle

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jun 7, 2026

Copy link
Copy Markdown
Contributor

🦞👀
ClawSweeper picked this up.

Command router queued. I will update this comment with the next step.

Re-review progress:

@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. P1 High-priority user-facing bug, regression, or broken workflow. merge-risk: 🚨 message-delivery 🚨 May drop, duplicate, misroute, suppress, or wrongly target messages. and removed rating: 🌊 off-meta tidepool PR readiness rating does not apply to this item. labels Jun 7, 2026
@TurboTheTurtle

Copy link
Copy Markdown
Contributor Author

Live PR-head proof for issue #91003.

Environment

  • PR head verified: 96a4fae3295156adc324d2da109648586d16986e
  • Built version: OpenClaw 2026.6.2 (96a4fae) from the PR head
  • Temp gateway: isolated loopback gateway on 127.0.0.1:18791
  • Temp state/config: /private/tmp/openclaw-pr91246-proof-state-202606071419
  • Production after test: OpenClaw 2026.6.1 (2e08f0f), LaunchAgent on 18789, health/status OK

Provider used

  • Google Lyria: google/lyria-3-clip-preview
  • MiniMax was not used.

Commands/checks run

  • Verified PR metadata with gh pr view 91246 --repo openclaw/openclaw --json ...
  • Built PR head with pnpm install --frozen-lockfile and pnpm build
  • Verified build with node dist/index.js --version
  • Started isolated gateway with node dist/index.js gateway run --port 18791 --auth none --bind loopback --verbose
  • Connected a real dashboard/control-ui webchat client using paired device auth
  • Sent a webchat request asking the agent to call music_generate
  • Queried task state from isolated SQLite state
  • Verified generated MP3 with file and ffprobe
  • Searched logs/events for completion delivery failure strings
  • Stopped temp gateway and rechecked production gateway health/status

Redacted proof log

2026-06-07T21:32:42Z webchat session=agent:proof:proof2 run=pr91246-music-1780867956368

tool.call music_generate
args: {
  action: "generate",
  model: "google/lyria-3-clip-preview",
  prompt: "short bright lo-fi synth jingle, no vocals, upbeat, clean ending",
  durationSeconds: 6,
  format: "mp3",
  instrumental: true,
  filename: "pr91246-live-proof"
}

tool.result:
Background task started for music generation (`f2144acf-c165-4e10-9e1f-076f6297ced5`).
Wait for the completion event; the completion agent will send the finished music here when it’s ready.

tool.call sessions_yield
args: { message: "Waiting for the music generation task to finish." }

tool.result:
{ "status": "yielded", "message": "Waiting for the music generation task to finish." }

completion run:
runId=music_generate:f2144acf-c165-4e10-9e1f-076f6297ced5:ok
sourceSession=music_generate:f2144acf-c165-4e10-9e1f-076f6297ced5
sourceChannel=webchat
sourceTool=music_generate
status=completed successfully
result="Generated 1 track with google/lyria-3-clip-preview."

attachment:
type=audio
name="track-1.mp3"
mimeType=audio/mpeg
path="/private/tmp/openclaw-pr91246-proof-state-202606071419/state/media/tool-music-generation/pr91246-live-proof---4b4566c5-ac00-40d8-bbc7-8f73d8fd5269.mp3"

generated media:
MEDIA:/private/tmp/openclaw-pr91246-proof-state-202606071419/state/media/tool-music-generation/pr91246-live-proof---4b4566c5-ac00-40d8-bbc7-8f73d8fd5269.mp3

Dashboard/webchat visible result

Webchat received final assistant output after the background completion wake:

Generated audio is ready.

MEDIA:/private/tmp/openclaw-pr91246-proof-state-202606071419/state/media/tool-music-generation/pr91246-live-proof---4b4566c5-ac00-40d8-bbc7-8f73d8fd5269.mp3

chat.history readback for the same webchat session included the original requester message, the music_generate tool call, background task id f2144acf-c165-4e10-9e1f-076f6297ced5, sessions_yield, inter-session completion from music_generate:...:ok, and the final assistant message containing the MEDIA: path.

Media verified locally:

610K MP3
audio/mpeg
25.782792 seconds

Error check

NO_DELIVERY_FAILURE_FOUND

No Music generation completion delivery failed after successful generation string was found in the temp gateway log or captured webchat event log.

Observed result

A real dashboard/control-ui webchat requester on PR head triggered music_generate, the agent yielded, Google Lyria completed successfully in the background, the internal completion wake/handoff returned to the original webchat session, and the requester received a visible MEDIA: audio reference for the generated MP3. Temp PR-head gateway was stopped afterward, and production gateway health remained OK.

@TurboTheTurtle

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jun 8, 2026

Copy link
Copy Markdown
Contributor

🦞👀
ClawSweeper picked this up.

Command router queued. I will update this comment with the next step.

Re-review progress:

@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. and removed 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. labels Jun 8, 2026
@vincentkoc
vincentkoc force-pushed the codex/91003-media-completion-webchat branch from 96a4fae to f8e6f4a Compare June 13, 2026 15:16
@vincentkoc vincentkoc self-assigned this Jun 13, 2026

@vincentkoc vincentkoc 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.

Best-fix verdict: best after maintainer hardening. The owner boundary is right: generated media completion events need explicit MEDIA:<path-or-url> directives for the requester-agent prompt, and session-only handoffs should treat real attachment payloads as visible evidence without requiring external delivery for dashboard/webchat.

Maintainer fix added before landing:

  • malformed attachment arrays without a usable path/url/mediaUrl/filePath no longer count as visible delivery evidence
  • generated MEDIA: directive values are collapsed to a single prompt line and control characters are stripped

Proof:

  • Local: node_modules/.bin/oxfmt --check --threads=1 src/agents/embedded-agent-runner/delivery-evidence.ts src/agents/internal-events.ts src/agents/subagent-announce-delivery.test.ts src/agents/tools/media-generate-background-shared.test.ts src/agents/embedded-agent-helpers.sanitizeuserfacingtext.test.ts
  • Local: node scripts/run-oxlint.mjs src/agents/embedded-agent-runner/delivery-evidence.ts src/agents/internal-events.ts src/agents/subagent-announce-delivery.test.ts src/agents/tools/media-generate-background-shared.test.ts src/agents/embedded-agent-helpers.sanitizeuserfacingtext.test.ts
  • Local: focused node scripts/run-vitest.mjs ... passed for media completion / attachment evidence / sanitizer cases
  • Autoreview: first run found 2 actionable P2s; both fixed; final autoreview clean
  • Crabbox AWS run_32499eb46b33: content sanity + focused Vitest passed on Node 24
  • Crabbox AWS run_af46879ffbd1: OPENCLAW_CHECK_CHANGED_REMOTE_CHILD=1 OPENCLAW_CHANGED_LANES_RAW_SYNC=1 corepack pnpm check:changed passed
  • GitHub exact-head CI for f8e6f4a04ee1ceffe64681c95d26c5e4a87e945e: 164 checks green

@vincentkoc
vincentkoc merged commit 3b94949 into openclaw:main Jun 13, 2026
168 of 170 checks passed
@TurboTheTurtle
TurboTheTurtle deleted the codex/91003-media-completion-webchat branch June 13, 2026 20:19
eleboucher pushed a commit to eleboucher/homelab that referenced this pull request Jun 16, 2026
…26.6.8) (#1144)

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.6` → `2026.6.8` |

---

### Release Notes

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

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

[Compare Source](openclaw/openclaw@v2026.6.6...v2026.6.8)

##### Highlights

- Telegram and WhatsApp channel delivery are richer and less brittle: Telegram can send structured rich text with tables, lists, expandable blockquotes, prompt-preserving CLI backend delivery, retired native draft migration, and safer rich-media boundaries, while WhatsApp now honors configured ACP bindings. ([#&#8203;92679](openclaw/openclaw#92679), [#&#8203;84082](openclaw/openclaw#84082), [#&#8203;89421](openclaw/openclaw#89421), [#&#8203;92513](openclaw/openclaw#92513)) Thanks [@&#8203;obviyus](https://github.com/obviyus), [@&#8203;jzakirov](https://github.com/jzakirov), [@&#8203;spacegeologist](https://github.com/spacegeologist), and [@&#8203;TurboTheTurtle](https://github.com/TurboTheTurtle).
- Agent and Gateway recovery is sharper across account-scoped DM sends, generated media completions, restart shutdown aborts, yielded subagent pauses, yielded cron media, heartbeat dedupe, session identity prompts, and unknown OpenAI agent selector rejection. ([#&#8203;92788](openclaw/openclaw#92788), [#&#8203;91246](openclaw/openclaw#91246), [#&#8203;91357](openclaw/openclaw#91357), [#&#8203;92631](openclaw/openclaw#92631), [#&#8203;92146](openclaw/openclaw#92146), [#&#8203;91287](openclaw/openclaw#91287), [#&#8203;92468](openclaw/openclaw#92468), [#&#8203;92510](openclaw/openclaw#92510)) Thanks [@&#8203;yetval](https://github.com/yetval), [@&#8203;TurboTheTurtle](https://github.com/TurboTheTurtle), [@&#8203;ooiuuii](https://github.com/ooiuuii), [@&#8203;openperf](https://github.com/openperf), [@&#8203;IWhatsskill](https://github.com/IWhatsskill), [@&#8203;ZengWen-DT](https://github.com/ZengWen-DT), and [@&#8203;zhangguiping-xydt](https://github.com/zhangguiping-xydt).
- Provider/model handling expands and tightens with GLM-5.2, Claude Haiku 4.5 catalog rows, OpenRouter and Google Vertex provider-prefix normalization, managed SecretRef auth, bounded model browse discovery, storeless OpenAI Responses replay gating, and Claude 4.5 Copilot tool-streaming safety. ([#&#8203;92796](openclaw/openclaw#92796), [#&#8203;90116](openclaw/openclaw#90116), [#&#8203;92627](openclaw/openclaw#92627), [#&#8203;91218](openclaw/openclaw#91218), [#&#8203;90686](openclaw/openclaw#90686), [#&#8203;92247](openclaw/openclaw#92247), [#&#8203;90706](openclaw/openclaw#90706), [#&#8203;75393](openclaw/openclaw#75393)) Thanks [@&#8203;arkyu2077](https://github.com/arkyu2077), [@&#8203;liuhao1024](https://github.com/liuhao1024), [@&#8203;bymle](https://github.com/bymle), [@&#8203;rohitjavvadi](https://github.com/rohitjavvadi), [@&#8203;samson910022](https://github.com/samson910022), [@&#8203;snowzlm](https://github.com/snowzlm), and [@&#8203;Kailigithub](https://github.com/Kailigithub).
- `/usage` and reply payload hooks now have a native full footer renderer, default template, fixed-decimal formatting, credential-aware limits, better partial-count handling, and warnings for broken templates instead of silent bad output. ([#&#8203;92657](openclaw/openclaw#92657), [#&#8203;89835](openclaw/openclaw#89835), [#&#8203;89629](openclaw/openclaw#89629)) Thanks [@&#8203;Marvinthebored](https://github.com/Marvinthebored).
- UI and mobile flows are steadier: workspace files can collapse and start collapsed, WebChat backscroll survives streaming, the sidebar session picker remains interactive above the desktop workbench, reset soft args survive UI dispatch, stale dashboard session parent lineage is preserved, and iOS reconnects stale foreground gateways. ([#&#8203;92779](openclaw/openclaw#92779), [#&#8203;92622](openclaw/openclaw#92622), [#&#8203;92705](openclaw/openclaw#92705), [#&#8203;91353](openclaw/openclaw#91353), [#&#8203;90658](openclaw/openclaw#90658), [#&#8203;92552](openclaw/openclaw#92552)) Thanks [@&#8203;shakkernerd](https://github.com/shakkernerd), [@&#8203;TurboTheTurtle](https://github.com/TurboTheTurtle), [@&#8203;NianJiuZst](https://github.com/NianJiuZst), [@&#8203;zhouhe-xydt](https://github.com/zhouhe-xydt), [@&#8203;luoyanglang](https://github.com/luoyanglang), and [@&#8203;Solvely-Colin](https://github.com/Solvely-Colin).
- Memory, state, and diagnostics recover cleaner: oversized OpenAI embedding batches split before 431s, QMD memory search stays available in transient mode, SQLite avoids WAL on NFS state volumes, stuck-session recovery scheduling no longer resets warning backoff, and Infinity chunk limits stay genuinely unbounded. ([#&#8203;92650](openclaw/openclaw#92650), [#&#8203;92618](openclaw/openclaw#92618), [#&#8203;92639](openclaw/openclaw#92639), [#&#8203;91247](openclaw/openclaw#91247), [#&#8203;92752](openclaw/openclaw#92752), [#&#8203;92735](openclaw/openclaw#92735)) Thanks [@&#8203;mushuiyu886](https://github.com/mushuiyu886), [@&#8203;TurboTheTurtle](https://github.com/TurboTheTurtle), [@&#8203;849261680](https://github.com/849261680), [@&#8203;gnanam1990](https://github.com/gnanam1990), and [@&#8203;yhterrance](https://github.com/yhterrance).

##### Changes

- Providers/models: add GLM-5.2 support and Claude Haiku 4.5 catalog entries while keeping provider-qualified model IDs normalized across OpenRouter and Google Vertex paths. ([#&#8203;92796](openclaw/openclaw#92796), [#&#8203;90116](openclaw/openclaw#90116), [#&#8203;92627](openclaw/openclaw#92627), [#&#8203;91218](openclaw/openclaw#91218)) Thanks [@&#8203;arkyu2077](https://github.com/arkyu2077), [@&#8203;liuhao1024](https://github.com/liuhao1024), and [@&#8203;bymle](https://github.com/bymle).
- Channel plugins: ship Telegram rich-message delivery and WhatsApp ACP binding support, including rich prompt handoff to CLI backends and transport fixtures for richer drafts. ([#&#8203;92679](openclaw/openclaw#92679), [#&#8203;92513](openclaw/openclaw#92513)) Thanks [@&#8203;obviyus](https://github.com/obviyus) and [@&#8203;TurboTheTurtle](https://github.com/TurboTheTurtle).
- Agent commands: support `/btw` in CLI-backed sessions and keep CLI usage-error exits classified as usage failures instead of successful runs. ([#&#8203;92669](openclaw/openclaw#92669), [#&#8203;92162](openclaw/openclaw#92162)) Thanks [@&#8203;joshavant](https://github.com/joshavant) and [@&#8203;Pandah97](https://github.com/Pandah97).
- Usage hooks: add built-in full footer rendering, default footer templates, per-turn usage state, credential-aware limits, and fixed-decimal formatting for usage-bar templates. ([#&#8203;92657](openclaw/openclaw#92657), [#&#8203;89835](openclaw/openclaw#89835), [#&#8203;89629](openclaw/openclaw#89629)) Thanks [@&#8203;Marvinthebored](https://github.com/Marvinthebored).
- Docs and operator guidance: document node config examples, clarify before-install hook scope, correct agent default concurrency comments, refresh ZAI provider docs, and update channel/group docs for current Telegram and WhatsApp behavior. ([#&#8203;92677](openclaw/openclaw#92677), [#&#8203;92766](openclaw/openclaw#92766), [#&#8203;92695](openclaw/openclaw#92695)) Thanks [@&#8203;liuhao1024](https://github.com/liuhao1024), [@&#8203;sallyom](https://github.com/sallyom), and [@&#8203;ArielSmoliar](https://github.com/ArielSmoliar).

##### Fixes

- Onboarding/skills: show the Homebrew install recommendation only on macOS and Linux, so FreeBSD and other unsupported platforms no longer get a misleading brew prompt. Fixes [#&#8203;68893](openclaw/openclaw#68893); carries forward [#&#8203;68894](openclaw/openclaw#68894), [#&#8203;68910](openclaw/openclaw#68910), [#&#8203;68941](openclaw/openclaw#68941), [#&#8203;68943](openclaw/openclaw#68943), [#&#8203;69002](openclaw/openclaw#69002), and [#&#8203;69545](openclaw/openclaw#69545). Thanks [@&#8203;yurivict](https://github.com/yurivict), [@&#8203;Sanjays2402](https://github.com/Sanjays2402), [@&#8203;Eruditi](https://github.com/Eruditi), [@&#8203;JustInCache](https://github.com/JustInCache), [@&#8203;nnish16](https://github.com/nnish16), and [@&#8203;Mlightsnow](https://github.com/Mlightsnow).
- Channels and delivery: preserve account-scoped DM channel send policy, rich Telegram final replies, rich Telegram tables and lists, Telegram thread-create CLI remapping, Slack outbound `message_sent` hooks, contributed message-tool schema optionality, same-channel generated media completions, and channel chunking around surrogate pairs and Infinity limits. ([#&#8203;92788](openclaw/openclaw#92788), [#&#8203;92679](openclaw/openclaw#92679), [#&#8203;89421](openclaw/openclaw#89421), [#&#8203;89943](openclaw/openclaw#89943), [#&#8203;91137](openclaw/openclaw#91137), [#&#8203;91246](openclaw/openclaw#91246), [#&#8203;92735](openclaw/openclaw#92735)) Thanks [@&#8203;yetval](https://github.com/yetval), [@&#8203;obviyus](https://github.com/obviyus), [@&#8203;spacegeologist](https://github.com/spacegeologist), [@&#8203;rishitamrakar](https://github.com/rishitamrakar), [@&#8203;lundog](https://github.com/lundog), [@&#8203;TurboTheTurtle](https://github.com/TurboTheTurtle), and [@&#8203;yhterrance](https://github.com/yhterrance).
- Auto-reply/groups: keep ordinary group text replies on automatic final-reply delivery while allowing `message(action=send)` for files, images, and other attachments to the same group or topic. Carries forward [#&#8203;43276](openclaw/openclaw#43276); refs [#&#8203;48004](openclaw/openclaw#48004). Thanks [@&#8203;NayukiChiba](https://github.com/NayukiChiba) and [@&#8203;ShakaRover](https://github.com/ShakaRover).
- Auto-reply/skills: preserve multiline payloads for `/skill` and direct skill slash commands while keeping command-head normalization for aliases, colon syntax, and bot mentions. Fixes [#&#8203;79155](openclaw/openclaw#79155); carries forward [#&#8203;81305](openclaw/openclaw#81305). Thanks [@&#8203;web3blind](https://github.com/web3blind).
- iMessage: normalize leading NUL sent-message echo prefixes while preserving interior NUL bytes and the leading attributedBody marker handling from [#&#8203;73942](openclaw/openclaw#73942). Carries forward [#&#8203;63581](openclaw/openclaw#63581). Thanks [@&#8203;drvoss](https://github.com/drvoss).
- Discord: give generated auto-thread titles a 60-second timeout and 4,096-token reasoning-model output budget, clamped to the selected model output cap. ([#&#8203;64734](openclaw/openclaw#64734)) Thanks [@&#8203;hanamizuki](https://github.com/hanamizuki).
- Agent, cron, and Gateway runtime: mark active main sessions before restart shutdown aborts, pause yielded subagent runs whose terminal also signals abort, preserve yielded media completions, de-duplicate main-session heartbeat events, expose session identity in runtime prompts, reject unknown OpenAI agent selectors, keep generated media completions and slash-command block replies in WebChat, preserve fresh post-compaction usage while clearing stale usage snapshots, and require admin privileges for HTTP session/model override surfaces. ([#&#8203;91357](openclaw/openclaw#91357), [#&#8203;92631](openclaw/openclaw#92631), [#&#8203;92146](openclaw/openclaw#92146), [#&#8203;91287](openclaw/openclaw#91287), [#&#8203;92468](openclaw/openclaw#92468), [#&#8203;92510](openclaw/openclaw#92510), [#&#8203;91246](openclaw/openclaw#91246), [#&#8203;50795](openclaw/openclaw#50795), [#&#8203;50845](openclaw/openclaw#50845), [#&#8203;82874](openclaw/openclaw#82874), [#&#8203;92651](openclaw/openclaw#92651), [#&#8203;92646](openclaw/openclaw#92646)) Thanks [@&#8203;ooiuuii](https://github.com/ooiuuii), [@&#8203;openperf](https://github.com/openperf), [@&#8203;IWhatsskill](https://github.com/IWhatsskill), [@&#8203;ZengWen-DT](https://github.com/ZengWen-DT), [@&#8203;zhangguiping-xydt](https://github.com/zhangguiping-xydt), [@&#8203;Hollychou924](https://github.com/Hollychou924), [@&#8203;leno23](https://github.com/leno23), and [@&#8203;TurboTheTurtle](https://github.com/TurboTheTurtle).
- Agents/exec: default empty-success background completion notices on only for real chat channels, preserving explicit opt-outs and keeping generic providers silent while carrying forward the narrow UX intent from [#&#8203;39726](openclaw/openclaw#39726) and [#&#8203;46926](openclaw/openclaw#46926). Thanks [@&#8203;Sapientropic](https://github.com/Sapientropic) and [@&#8203;wenkang-xie](https://github.com/wenkang-xie).
- Providers and model replay: preserve storeless OpenAI Responses replay compatibility, avoid eager tool streaming for Claude 4.5 in Copilot, honor profile auth for SecretRef model entries, bound model browsing, strip provider prefixes where runtimes need bare IDs, and surface nested embedding fetch failures. ([#&#8203;90706](openclaw/openclaw#90706), [#&#8203;75393](openclaw/openclaw#75393), [#&#8203;90686](openclaw/openclaw#90686), [#&#8203;92247](openclaw/openclaw#92247), [#&#8203;92627](openclaw/openclaw#92627), [#&#8203;91218](openclaw/openclaw#91218), [#&#8203;92628](openclaw/openclaw#92628)) Thanks [@&#8203;snowzlm](https://github.com/snowzlm), [@&#8203;Kailigithub](https://github.com/Kailigithub), [@&#8203;rohitjavvadi](https://github.com/rohitjavvadi), [@&#8203;samson910022](https://github.com/samson910022), [@&#8203;liuhao1024](https://github.com/liuhao1024), [@&#8203;bymle](https://github.com/bymle), and [@&#8203;mushuiyu886](https://github.com/mushuiyu886).
- Memory, state, diagnostics, and config: split header-too-large embedding batches, keep QMD memory search enabled in transient mode, avoid SQLite WAL on NFS volumes, preserve recovery scheduling outside stuck-session warning backoff, and keep shell environment fallbacks contained in config write tests. ([#&#8203;92650](openclaw/openclaw#92650), [#&#8203;92618](openclaw/openclaw#92618), [#&#8203;92639](openclaw/openclaw#92639), [#&#8203;91247](openclaw/openclaw#91247), [#&#8203;92752](openclaw/openclaw#92752)) Thanks [@&#8203;mushuiyu886](https://github.com/mushuiyu886), [@&#8203;TurboTheTurtle](https://github.com/TurboTheTurtle), [@&#8203;849261680](https://github.com/849261680), and [@&#8203;gnanam1990](https://github.com/gnanam1990).
- Workspace setup state: store setup completion outside the workspace dot directory using an OpenClaw-named root file, migrate valid legacy state forward, and avoid clobbering generic root `workspace-state.json` files for TigerFS-style dot-path compatibility. This Clownfish replacement carries forward the focused [#&#8203;53326](openclaw/openclaw#53326) fix idea because the original branch was closed and uneditable. ([#&#8203;53326](openclaw/openclaw#53326), [#&#8203;44783](openclaw/openclaw#44783), [#&#8203;39446](openclaw/openclaw#39446)) Thanks [@&#8203;1qh](https://github.com/1qh).
- UI/mobile/TUI: preserve dashboard session parent lineage, WebChat backscroll, reset soft command args, sidebar session picker interactivity, collapsed workspace files, resolved `/model` confirmation refs, and stale foreground iOS Gateway reconnects. ([#&#8203;90658](openclaw/openclaw#90658), [#&#8203;92622](openclaw/openclaw#92622), [#&#8203;91353](openclaw/openclaw#91353), [#&#8203;92705](openclaw/openclaw#92705), [#&#8203;92779](openclaw/openclaw#92779), [#&#8203;92773](openclaw/openclaw#92773), [#&#8203;92552](openclaw/openclaw#92552)) Thanks [@&#8203;luoyanglang](https://github.com/luoyanglang), [@&#8203;TurboTheTurtle](https://github.com/TurboTheTurtle), [@&#8203;zhouhe-xydt](https://github.com/zhouhe-xydt), [@&#8203;NianJiuZst](https://github.com/NianJiuZst), [@&#8203;shakkernerd](https://github.com/shakkernerd), [@&#8203;NarahariRaghava](https://github.com/NarahariRaghava), and [@&#8203;Solvely-Colin](https://github.com/Solvely-Colin).
- TUI: reload the active session after external `/new` or `/reset` session-change events so stale transcript and stream state clear promptly. Fixes [#&#8203;38966](openclaw/openclaw#38966); carries forward [#&#8203;40472](openclaw/openclaw#40472). Thanks [@&#8203;yizhanzjz](https://github.com/yizhanzjz) and [@&#8203;wsyjh8](https://github.com/wsyjh8).
- Control UI: preserve Gateway Access tokens during same-normalized WebSocket URL edits and reload gateway-scoped tokens when switching endpoints. Fixes [#&#8203;41545](openclaw/openclaw#41545); repairs [#&#8203;42001](openclaw/openclaw#42001) with additional source PRs [#&#8203;41546](openclaw/openclaw#41546), [#&#8203;41552](openclaw/openclaw#41552), and [#&#8203;41718](openclaw/openclaw#41718). Thanks [@&#8203;wsyjh8](https://github.com/wsyjh8), [@&#8203;llagy0020](https://github.com/llagy0020), [@&#8203;llagy007](https://github.com/llagy007), [@&#8203;pingfanfan](https://github.com/pingfanfan), and [@&#8203;zheliu2](https://github.com/zheliu2).
- Gateway CLI: tolerate a single transient clean WebSocket close before `hello-ok` so one-shot RPC calls reconnect instead of failing noisily, while repeated clean pre-hello closes still surface. Carries forward source PRs [#&#8203;54475](openclaw/openclaw#54475) and [#&#8203;54774](openclaw/openclaw#54774); [#&#8203;85253](openclaw/openclaw#85253) covered adjacent connect assembly diagnostics. Thanks [@&#8203;ruanrrn](https://github.com/ruanrrn).
- Gateway/Linux: keep root-owned systemd user service lifecycle commands on root's user manager when a stale `SUDO_USER` remains in a root shell with root's user bus environment. Fixes [#&#8203;81410](openclaw/openclaw#81410). Thanks [@&#8203;Ericksza](https://github.com/Ericksza) and [@&#8203;ChuckClose-tech](https://github.com/ChuckClose-tech).
- Release and test reliability: extend slow Gateway/full-suite watchdogs, split local full-suite shards when throttled, stabilize plugin auth marker fixtures, avoid brittle provider-ref error text, and keep QA Lab bootstrap selection assertions aligned with flow-only scenarios. ([#&#8203;92652](openclaw/openclaw#92652))
- macOS Peekaboo bridge: update the embedded Peekaboo package to 3.5.2 and route bundled-skill CLI commands through the OpenClaw app bridge so they inherit its Screen Recording and Accessibility grants.
- Agent routing: route subagent RPC callbacks addressed to an agent-shaped `--to` target to the correct session key instead of falling back to the main session, so WeChat (and other channel) session-key callbacks reach the intended subagent session. ([#&#8203;90231](openclaw/openclaw#90231)) Thanks [@&#8203;zhangguiping-xydt](https://github.com/zhangguiping-xydt).
- Cron: preserve model, fallback, thinking, timeout, light-context, unsafe-content, and tool allow-list overrides on implicit text payloads by promoting them to agent turns, while explicit system events still prune those fields. Fixes [#&#8203;28905](openclaw/openclaw#28905); carries forward [#&#8203;64060](openclaw/openclaw#64060) and [#&#8203;73946](openclaw/openclaw#73946). Thanks [@&#8203;liaoandi](https://github.com/liaoandi).
- QQBot delivery: keep markdown table chunks self-contained across message boundaries by preserving table state across block deliveries, flushing unfinished table-row fragments as plain text, and detecting short pipe-terminated rows by column count so split rows are not sent as malformed markdown. ([#&#8203;92428](openclaw/openclaw#92428)) Thanks [@&#8203;sliverp](https://github.com/sliverp).

</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/1144
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agents Agent runtime and tooling merge-risk: 🚨 message-delivery 🚨 May drop, duplicate, misroute, suppress, or wrongly target messages. P1 High-priority user-facing bug, regression, or broken workflow. proof: sufficient ClawSweeper judged the real behavior proof convincing. proof: supplied External PR includes structured after-fix real behavior proof. rating: 🦞 diamond lobster Very strong PR readiness with only minor 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.

music_generate background task completion delivery consistently fails (completion wake + fallback both fail)

2 participants