Commit Graph

34845 Commits

Author SHA1 Message Date
Vincent Koc
4de80807b9 fix(plugins): bound tool result middleware details 2026-04-24 15:11:51 -07:00
Peter Steinberger
e2f13959d4 feat(voice-call): share realtime agent consult tool
Centralize the shared realtime agent consult tool for browser Talk, Google Meet, and Voice Call.
2026-04-24 23:11:18 +01:00
Peter Steinberger
900ba7cf33 fix(google-meet): handle browser mic prompt 2026-04-24 23:06:58 +01:00
Peter Steinberger
8a7d67f305 docs: require PR review evidence checklist 2026-04-24 23:06:31 +01:00
Peter Steinberger
535a1d699e fix(plugins): preserve interactive dedupe on cache restore 2026-04-24 23:02:21 +01:00
Gustavo Madeira Santana
2f23b84dc4 fix(changelog): remove duplicate diagnostics entry 2026-04-24 18:01:18 -04:00
Gustavo Madeira Santana
72731a37d2 Require full Matrix identity trust (#70401)
Merged via squash.

Prepared head SHA: d13a729681
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com>
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com>
Reviewed-by: @gumadeiras
2026-04-24 17:58:57 -04:00
Peter Steinberger
0cce4cf8f6 refactor(slack): share stream fallback delivery bookkeeping 2026-04-24 22:55:39 +01:00
Peter Steinberger
4cca309657 docs: update changelog for PR 71242 2026-04-24 22:54:36 +01:00
RenzoMXD
bad38150cb fix(gateway): fall back to lastCallUsage on /v1/chat/completions 2026-04-24 22:54:36 +01:00
Vincent Koc
139dfd97bb fix(diagnostics-otel): export logs from diagnostic events
Export diagnostics OTEL logs through bounded diagnostic log events while keeping core log records off the public plugin diagnostic stream.\n\nIncludes security hardening for log payload redaction, bounded attributes, prototype-pollution keys, OTEL export failure reporting, and extension SDK seam usage.
2026-04-24 14:51:45 -07:00
martingarramon
150053bc86 fix(slack): route stream-fallback delivery through chunked sender (follow-up to #70370) (#71124)
* fix(slack): route stream-fallback delivery through chunked sender

deliverPendingStreamFallback was calling chat.postMessage directly for
err.pendingText, which bypasses the chunked reply path used everywhere
else. For Slack Connect cases where appendSlackStream throws
SlackStreamNotDeliveredError with a large pending buffer, the single
raw post could fail (msg_too_long) and drop the unsent tail.

Two changes:

1. deliverPendingStreamFallback now routes through deliverReplies so
   long pendingText is chunked by the normal sender and the fallback
   honors the configured replyToMode / identity.

2. The non-benign streaming-error branch in deliverWithStreaming now
   clears the session via markSlackStreamFallbackDelivered before
   falling back to deliverNormally. Without this, pendingText stays
   populated and the post-loop finalize (stopSlackStream →
   SlackStreamNotDeliveredError → fallback) re-posts the same chunk
   that deliverNormally already sent.

Addresses the three Codex P1 findings on #70370 about bypassing the
chunked sender, and the related "avoid reposting buffered text after
append fallback" P1 about duplicate delivery. Tests updated to assert
deliverReplies routing (instead of raw postMessage) and a new case
covers the non-benign-error dedup.

Follow-up to #70370.

* fix(slack): preserve pending buffered text on non-benign stream errors

Address Codex P1 on #71124: `markSlackStreamFallbackDelivered` was
clearing `pendingText` before `deliverNormally` ran, so any earlier
buffered chunk was lost. E.g. chunk A buffered in the SDK, then
appending chunk B throws a generic network error → previous fix
dropped A+B and only sent B via `deliverNormally`, silently truncating
the final reply.

Route the full buffered `pendingText` through
`deliverPendingStreamFallback` with a synthetic
`SlackStreamNotDeliveredError`, then skip `deliverNormally` entirely
(pendingText already contains this payload's text, per
`appendSlackStream` accumulating before throw). If the chunked
fallback fails, fall back to `deliverNormally` so at least the current
payload lands.

Test updated to assert the full pendingText ("first buffered\nsecond
payload") gets routed through the chunked sender, not the
chunk-B-only partial send.

* fix(slack): harden stream fallback docs and chunking test (#71124)

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-04-24 22:50:18 +01:00
Peter Steinberger
b0c9810b0f fix(plugins): restore cached command registries 2026-04-24 22:49:40 +01:00
Peter Steinberger
cabdf5bbc4 fix: match codex openai websocket continuation 2026-04-24 22:47:25 +01:00
Peter Steinberger
95a2b0d799 docs(changelog): prepare 2026.4.24 notes 2026-04-24 22:41:12 +01:00
Peter Steinberger
55318df83f fix(slack): share HTTP route registry across module loads
Fixes #67955, #46245, #46246.

Co-authored-by: Axel <axel@kaleidoscope.studio>

Co-authored-by: Cesar Arevalo <cesar@cesararevalo.com>
2026-04-24 22:41:12 +01:00
pashpashpash
11804a484d Fail closed when an explicit agent harness is missing (#71265)
* Fail closed for explicit agent harness selection

* Scope explicit harness fallback opt in
2026-04-25 06:39:57 +09:00
IVY
5adf9d2619 fix(discord): prevent identify race (#68159)
Verified against Carbon 0.16.0 source:
- Client constructor calls plugin.registerClient(this) without awaiting it.
- GatewayPlugin.registerClient publishes client before its awaited metadata fetch.
- identify() silently returns when client is missing.

This patch matches Carbon's ordering in OpenClaw's subclass, avoids a second super.registerClient call if lifecycle connect already opened the socket during metadata loading, and keeps regression coverage for both ws and isConnecting cases.

Local proof:
- pnpm test extensions/discord/src/monitor/provider.proxy.test.ts extensions/discord/src/monitor/gateway-plugin.test.ts
- pnpm lint:tmp:no-raw-channel-fetch
- pnpm check:changed
- pnpm check
- pnpm test

GitHub checks green for 72547825e1.
2026-04-24 22:39:44 +01:00
Peter Steinberger
78b9890ae1 feat(google-meet): add browser create fallback 2026-04-24 22:36:22 +01:00
Peter Steinberger
8a9d02dd82 fix(voice-call): keep outbound realtime streams attached (#71266)
Fixes outbound Twilio realtime conversations so the TwiML fetch returns the realtime <Connect><Stream> path for outbound directions and the answered-call path does not overwrite it with legacy <Say> TwiML.

Local proof:
- pnpm test extensions/voice-call/src/manager.notify.test.ts extensions/voice-call/src/webhook.test.ts
- pnpm check:changed
- pnpm check
- pnpm build
- local VoiceCallWebhookServer + CallManager smoke for Direction=outbound-api

Closes #68713.
2026-04-24 22:35:26 +01:00
Vincent Koc
5b8bd6371c feat(plugins): warn on ignored setup runtime (#71253)
* feat(plugins): warn on ignored setup runtime

* fix(plugins): avoid fallback setup runtime diagnostics

* refactor(plugins): clarify setup runtime lookup
2026-04-24 14:23:19 -07:00
Peter Steinberger
6e985a421d fix(webchat): keep runtime context out of visible transcripts
Keep WebChat runtime context available to the model while persisting only the transcript-facing user prompt across gateway, CLI, queued follow-up, and embedded Pi paths.

Adds regression coverage for history sanitization, CLI transcript persistence, media-only auto-reply prompts, and embedded Pi prompt rewrite against a real SessionManager file.

Co-authored-by: 91wan <91wan@users.noreply.github.com>
2026-04-24 22:17:03 +01:00
Peter Steinberger
b20208fa4c feat(google-meet): create meeting spaces 2026-04-24 22:11:16 +01:00
Val Alexander
86f8c826e2 fix(ui): render assistant identity avatars in chat
Render assistant text avatars from IDENTITY.md consistently in the Control UI chat welcome state and transcript groups.

Also supports authenticated blob avatar URLs in grouped messages and rejects bidi/invisible controls in assistant text avatars.

Verification:
- pnpm test ui/src/ui/chat/grouped-render.test.ts ui/src/ui/views/chat.test.ts ui/src/styles/chat/layout.test.ts
- pnpm check:changed
- GitHub CI green
- Review threads resolved
2026-04-24 15:50:27 -05:00
Peter Steinberger
af46830927 test: split bundled Docker aggregate shards 2026-04-24 21:43:43 +01:00
Val Alexander
245451b6a9 fix(whatsapp): keep QR login state in sync
Keep WhatsApp QR login state synced across gateway, macOS, and UI wait flows.

- Preserve the latest QR data URL/version while login polling rotates codes.
- Keep the wait-result protocol bounded to current QR metadata.
- Stabilize QR rendering and media fixture coverage after rebasing on main.

Validation:
- pnpm test extensions/whatsapp/src/login-qr.test.ts extensions/whatsapp/src/media.test.ts extensions/whatsapp/src/agent-tools-login.test.ts src/gateway/protocol/channels.schema.test.ts src/gateway/server-methods/web.start.test.ts ui/src/ui/controllers/channels.test.ts
- pnpm test:extension whatsapp
- cd apps/macos && swift test --filter ChannelsSettingsSmokeTests
- GitHub PR checks: 62 success, 5 skipped
2026-04-24 15:37:16 -05:00
Vincent Koc
86099ec62a refactor(web-fetch): move readability extraction to plugin
* refactor(web-fetch): move readability extraction to plugin

* fix(web-fetch): cache extractor resolution by config

* fix(test): remove redundant stat assertions
2026-04-24 13:34:37 -07:00
github-actions[bot]
f102ddad0c chore(ui): refresh th control ui locale 2026-04-24 20:30:42 +00:00
github-actions[bot]
b885aa7cd3 chore(ui): refresh pl control ui locale 2026-04-24 20:30:15 +00:00
github-actions[bot]
4b1395b251 chore(ui): refresh uk control ui locale 2026-04-24 20:30:12 +00:00
github-actions[bot]
a7f48b6c6c chore(ui): refresh id control ui locale 2026-04-24 20:30:10 +00:00
github-actions[bot]
58a2bfeb7a chore(ui): refresh tr control ui locale 2026-04-24 20:29:58 +00:00
github-actions[bot]
e228c92e84 chore(ui): refresh fr control ui locale 2026-04-24 20:29:35 +00:00
github-actions[bot]
105aeac48e chore(ui): refresh ko control ui locale 2026-04-24 20:29:28 +00:00
github-actions[bot]
5e14663ed9 chore(ui): refresh ja-JP control ui locale 2026-04-24 20:29:08 +00:00
github-actions[bot]
db551c4274 chore(ui): refresh es control ui locale 2026-04-24 20:27:56 +00:00
github-actions[bot]
967c6bd785 chore(ui): refresh zh-TW control ui locale 2026-04-24 20:27:09 +00:00
github-actions[bot]
ffd76d6aee chore(ui): refresh pt-BR control ui locale 2026-04-24 20:27:06 +00:00
github-actions[bot]
bcd915dab1 chore(ui): refresh de control ui locale 2026-04-24 20:27:02 +00:00
github-actions[bot]
913f4e61a9 chore(ui): refresh zh-CN control ui locale 2026-04-24 20:26:35 +00:00
Vincent Koc
7bd74758c5 fix(plugins): harden tool result middleware (#71241) 2026-04-24 13:23:18 -07:00
547895019
272313877d fix(comfy): read config from plugins.entries instead of models.providers (openclaw#63058)
Verified:
- pnpm test -- extensions/comfy/image-generation-provider.test.ts extensions/comfy/music-generation-provider.test.ts extensions/comfy/video-generation-provider.test.ts
- rg -n "models\\.providers\\.comfy" docs extensions/comfy src -g '*.{ts,md,json}'
- pnpm check -- --help
- gh pr checks 63058 --repo openclaw/openclaw --watch --fail-fast

Co-authored-by: 547895019 <7350824+547895019@users.noreply.github.com>
Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com>
2026-04-24 15:23:13 -05:00
Patrick Erichsen
f896c3935e ci: centralize workflow openai model defaults (#70845) 2026-04-24 13:22:35 -07:00
Vincent Koc
cf858258c7 feat(plugins): surface manifest provider setup choices (#71240) 2026-04-24 13:14:49 -07:00
Vincent Koc
8154337cb6 fix(whatsapp): emit message received hooks (#71217)
* fix(whatsapp): emit message received hooks

* fix(whatsapp): harden message received hooks
2026-04-24 13:05:10 -07:00
Peter Steinberger
7a168150e6 test: tune Docker aggregate service pressure 2026-04-24 21:04:39 +01:00
Vincent Koc
ff8b7145d7 docs(plugins): catalog active deprecations in sdk-migration and cross-link from hooks 2026-04-24 13:04:07 -07:00
Michael Yagudaev
c997a9f978 feat(gateway): add VoiceClaw realtime brain endpoint (#70938)
Adds the VoiceClaw-compatible realtime brain WebSocket endpoint backed by Gemini Live, with owner-auth gating, async OpenClaw tool handoff, docs, and lifecycle tests.

Maintainer fixup: terminal upstream errors now send the error, emit session.ended while the client socket is still open, then close the client-facing socket.

Co-authored-by: Michael Yagudaev <1386966+yagudaev@users.noreply.github.com>
2026-04-24 21:00:04 +01:00
Vincent Koc
7536993397 feat(plugins): read setup provider env vars (#71226)
* feat(plugins): read setup provider env vars

* fix(plugins): mark provider env compat deprecation
2026-04-24 12:59:02 -07:00
Peter Steinberger
b4d756c746 docs: trim root agent guide 2026-04-24 20:54:59 +01:00