Commit Graph

22656 Commits

Author SHA1 Message Date
volcano303 f3e8c50df3 fix(agents): redact Control UI tool payload secrets (#72319)
Fixes #72283.

- Redacts Control UI tool start args, partial/final result payloads, derived exec output, and patch summaries before event emission.
- Forces tool/UI payload redaction to include built-in patterns plus configured custom `logging.redactPatterns`.
- Covers object, details-only, primitive string, and top-level array tool-result shapes.

Tests:
- `pnpm test src/agents/pi-embedded-subscribe.tools.test.ts src/agents/pi-embedded-subscribe.handlers.tools.test.ts`
- `pnpm check:changed`

Co-authored-by: volcano303 <75143900+volcano303@users.noreply.github.com>
Co-authored-by: Val Alexander <bunsthedev@gmail.com>
2026-04-27 23:30:50 +01:00
Peter Steinberger dd0f5937d2 fix(doctor): avoid companion gateway service false positives 2026-04-27 23:30:29 +01:00
Peter Steinberger 36d3722a96 fix(cli): disable source checkout compile cache 2026-04-27 23:28:17 +01:00
Peter Steinberger 0cc3c027a8 test: avoid slow home lookups in service audit tests 2026-04-27 23:23:15 +01:00
Peter Steinberger 48e91f09d5 fix(cli): fail empty local model probes 2026-04-27 23:16:39 +01:00
Peter Steinberger 81390c643b fix(update): restart Windows startup gateway after update 2026-04-27 23:16:20 +01:00
Peter Steinberger abf5dea7dd fix(daemon): filter missing service path fallbacks 2026-04-27 23:16:04 +01:00
Peter Steinberger bf4306d1b0 refactor: route plugin test helpers through sdk 2026-04-27 23:12:21 +01:00
Peter Steinberger 7975305a89 test: cover trusted-proxy secret surfaces 2026-04-27 23:10:22 +01:00
Peter Steinberger 1a98938479 fix: allow trusted-proxy local password fallback 2026-04-27 23:10:22 +01:00
Vincent Koc 61a18e5596 fix(agent): preserve default-agent session routing compatibility (#72414)
* fix(agent): preserve default-agent session routing compatibility

* fix(clownfish): address review for ghcrawl-207038-agentic-merge (1)

* fix(agent): migrate legacy default-agent sessions

* fix(slack): use narrow agent runtime import
2026-04-27 15:09:01 -07:00
Peter Steinberger 42dddbbe78 fix(cli): streamline local model probes 2026-04-27 23:02:26 +01:00
Peter Steinberger 8599fdda4a test: keep extension mocks on sdk seams 2026-04-27 22:55:09 +01:00
Peter Steinberger 24b45a038c fix(gateway): bound supervised lock recovery 2026-04-27 22:44:37 +01:00
Peter Steinberger 43ababf96b fix(gateway): keep startup sidecars responsive 2026-04-27 22:44:37 +01:00
Peter Steinberger 7807e8118c perf(test): slim codex web search test imports 2026-04-27 22:34:48 +01:00
Peter Steinberger 46ba8e7cce feat(plugin-sdk): expose extension test seams 2026-04-27 22:34:21 +01:00
Peter Steinberger 2216ce3018 test: use narrow config sdk imports 2026-04-27 22:22:34 +01:00
Omar Shahine da3d17e1ca fix(tts): pre-transcode synthesized audio to opus-in-CAF for native iMessage voice-memo bubbles via BlueBubbles (#72586)
End-to-end testing on macOS + BlueBubbles + ElevenLabs walked through three CAF flavors before landing on the format Apple's Messages.app actually emits when a user records a native iMessage voice memo:

- PCM int16 @ 44.1 kHz CAF: BlueBubbles' internal `afconvert -f m4af -d aac` conversion fails; the original CAF reaches iMessage but renders with 0 s duration.
- AAC @ 22.05 kHz mono CAF: BlueBubbles' conversion succeeds and the server silently downgrades the delivery, sending the converted MP3 as a generic audio attachment.
- **Opus @ 24 kHz mono CAF**: byte-identical to the descriptor block Apple's Messages.app produces; BlueBubbles passes it through unchanged and iMessage renders a native voice-memo bubble with proper duration and waveform UI.

Adds an opt-in `tts.voice.preferAudioFileFormat` channel capability and a macOS `afconvert`-backed pre-transcode in the speech-core pipeline. BlueBubbles declares `preferAudioFileFormat: "caf"`. Other channels are unaffected. Falls back to the original buffer when the host platform, the source/target pair, or the transcoder process can't produce the preferred container — so non-Darwin hosts and unsupported provider combinations are unchanged.

Also adds a `caff` magic-byte sniff in `src/media/mime.ts` so the auto-reply host-local-media validator (which uses `file-type` and didn't recognize CAF natively) accepts the buffer instead of dropping it as "⚠️ Media failed."

Fixes #72506.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-27 14:15:16 -07:00
Peter Steinberger 1eea534ddb fix(channels): handle generated dock commands 2026-04-27 21:59:15 +01:00
Peter Steinberger 662de55e07 refactor: expose extension sdk boundary seams 2026-04-27 21:58:48 +01:00
Peter Steinberger 3e497f5e2b fix: accept cron delivery thread ids 2026-04-27 21:56:47 +01:00
Peter Steinberger 18ef83c0da fix(feishu): preserve disabled group policy for explicit groups 2026-04-27 21:55:33 +01:00
Vincent Koc bd51f82efa fix(security): harden CodeQL secret ref validation
Remediate current-profile CodeQL findings for file SecretRef id validation and release workflow job permissions. Includes changelog credit. Thanks @vincentkoc.
2026-04-27 13:53:27 -07:00
Peter Steinberger 1787d3be07 fix(gateway): scope startup provider discovery 2026-04-27 21:45:54 +01:00
Peter Steinberger 28d9fc5f20 fix(test): include cron delivery thread id in schema keys 2026-04-27 21:43:12 +01:00
Peter Steinberger db622c67d1 perf(test): slim directive and run-param imports 2026-04-27 21:42:31 +01:00
Peter Steinberger b6be422306 fix(cron): accept threaded delivery in gateway schema 2026-04-27 21:37:18 +01:00
Peter Steinberger 599b1b8462 fix(cloudflare-ai-gateway): strip anthropic thinking prefill 2026-04-27 21:36:50 +01:00
Vincent Koc 013939cfc7 fix(gateway): preserve repeated characters in chat stream merge (#72400)
* fix(gateway): preserve repeated characters in chat stream merge

* fix(gateway): cap live chat stream buffers
2026-04-27 13:35:57 -07:00
Peter Steinberger 59faa023fe fix(gateway): unblock sidecar startup 2026-04-27 21:34:44 +01:00
Peter Steinberger 7d2d8af3ab fix(plugins): fast-path strict manifest json 2026-04-27 21:27:02 +01:00
Peter Steinberger 11e6928b3e fix: keep runtime context out of user turns 2026-04-27 21:24:56 +01:00
Peter Steinberger 346d5c28c1 test(acp): use typed attachment root fixture 2026-04-27 21:19:45 +01:00
Peter Steinberger 8cc06fff2c test(acp): cover media agent dir dispatch 2026-04-27 21:19:45 +01:00
luyao618 2b578c3a9e fix(agents): pass agentDir to media understanding in ACP dispatch path
The ACP dispatch path calls applyMediaUnderstanding without the agentDir
parameter. This prevents the media understanding pipeline from locating
agent-specific models.json and auth profiles, causing image understanding
to fail silently for non-visual models configured with a separate image
understanding model.

The non-ACP reply path (get-reply.ts) already passes agentDir correctly.
This aligns the ACP path with the same behavior.

Closes #55046

AI-assisted (built with Hermes orchestration).
2026-04-27 21:19:45 +01:00
Peter Steinberger be2196c6cb test(plugins): cover hook plugin config context 2026-04-27 21:19:41 +01:00
Ayumi Server c1187109c8 fix: shallow-copy event to avoid mutating shared hook object
Address review feedback on PR #72888. triggerInternalHook passes the
same event reference to all handlers sequentially. Mutating evt.context
leaks pluginConfig to subsequent handlers and causes cross-plugin
overwrites. Shallow-copy event and context instead.
2026-04-27 21:19:41 +01:00
Ayumi Server ed0b098d75 fix: inject pluginConfig into hook handler event context
When plugins register hooks via api.registerHook(), pluginConfig from
openclaw.json was not available in the hook event context. Plugins that
accessed ctx.pluginConfig or event.context.pluginConfig received
undefined, causing silent failures or fallback to defaults.

Changes:
- Add pluginConfig parameter to registerHook() function
- Wrap handler to inject pluginConfig into event.context before invocation
- Pass params.pluginConfig through createApi() call site

Fixes #72880
2026-04-27 21:19:41 +01:00
iot2edge 98928388db fix(cli): clarify completion cache timeout message after openclaw update
When the post-update completion cache refresh times out (slow disk,
large bundled plugin tree, Docker overlayfs), the user previously saw
the opaque 'Completion cache update failed: Error: spawnSync
/usr/bin/node ETIMEDOUT'. Detect ETIMEDOUT specifically, surface
'timed out after 30s', and append a manual refresh hint pointing at
'openclaw completion --write-state' so users know it's non-fatal and
how to recover.

Fixes #72842
2026-04-27 21:19:18 +01:00
Peter Steinberger 71c74b766e fix(plugins): avoid hand-built extension path markers 2026-04-27 21:12:09 +01:00
Peter Steinberger 465b621cf1 fix(sessions): avoid guarded route-only entries 2026-04-27 21:11:12 +01:00
Maho Pan 1dbc250b1a fix: keep bare reset transcript prompt non-empty 2026-04-27 21:08:50 +01:00
Peter Steinberger 03bfdbb052 fix: stage mirrored bundled runtime deps 2026-04-27 21:07:40 +01:00
Peter Steinberger ff52e281aa perf(test): slim responses payload policy imports 2026-04-27 21:06:40 +01:00
Peter Steinberger 08e7561972 ci: broaden extension boundary guards 2026-04-27 21:02:53 +01:00
Peter Steinberger e9b1fbb8c4 refactor: pin remaining extension api surfaces 2026-04-27 21:02:53 +01:00
volcano303 e7b87217a2 fix(media): anchor sanitizeMimeType regex and reject trailing junk
Add an end anchor to the type/subtype match and explicitly accept the
RFC 9110 ;parameter tail. Inputs like "image/png<script>" or
"application/json garbage" now return undefined instead of silently
matching the leading prefix.

Closes #9795
2026-04-27 21:02:30 +01:00
Peter Steinberger 1f256306c9 test: align gateway tests with config io split 2026-04-27 21:02:26 +01:00
Peter Steinberger 5e49e8590d fix(cli): resolve message channel plugin scopes 2026-04-27 21:02:09 +01:00