Commit Graph

38666 Commits

Author SHA1 Message Date
Peter Steinberger
bbf932fd7d fix(channels): preserve observe-only turn compatibility 2026-04-30 04:20:40 +01:00
Peter Steinberger
7a2bb2fcda docs: document high-confidence triage candidate filter 2026-04-30 04:18:16 +01:00
Peter Steinberger
a89fe0f5a0 docs: update plugin runtime changelog 2026-04-30 04:13:52 +01:00
Peter Steinberger
6877360218 fix(plugins): prefer require runtime aliases 2026-04-30 04:13:39 +01:00
Peter Steinberger
5138d3f8b6 fix(plugins): resolve plugin paths from root 2026-04-30 04:13:39 +01:00
Peter Steinberger
09310931cf fix(plugins): repair configured runtime deps 2026-04-30 04:13:39 +01:00
Peter Steinberger
db18323551 fix(plugin-sdk): restore zalouser facade 2026-04-30 04:13:39 +01:00
Peter Steinberger
9e5d6c7091 docs: credit macos attach-only launchd fix 2026-04-30 04:10:54 +01:00
Luka Dolenc
07605c79ad style(macos): order attach-only test modifiers 2026-04-30 04:10:54 +01:00
Luka Dolenc
25d2e9bdac fix(macos): keep attach-only from stopping gateway launchd 2026-04-30 04:10:54 +01:00
Peter Steinberger
ffe67e9cdc refactor(channels): route inbound turns through kernel 2026-04-30 04:08:47 +01:00
Vincent Koc
6e73101df3 chore(ci): widen CodeQL PR guard
Runs the PR CodeQL security guard as high-confidence high/critical security coverage and adds the initial plugin/package-contract quality guard.
2026-04-29 20:06:50 -07:00
Peter Steinberger
8672737f81 fix: drop overlong slack command values 2026-04-30 04:04:45 +01:00
Peter Steinberger
d25cfda54c fix: cap slack command menu blocks 2026-04-30 04:04:44 +01:00
Peter Steinberger
a4af1e91da docs(changelog): thank memory forget fix contributor 2026-04-30 04:03:41 +01:00
Peter Steinberger
757894e201 test(memory-lancedb): mock embedding transport in forget test 2026-04-30 04:03:41 +01:00
amittell
6f7c89ce21 fix(lint): resolve oxlint errors 2026-04-30 04:03:41 +01:00
amittell
faad655c21 fix(memory-lancedb): show full IDs in memory_forget candidate list 2026-04-30 04:03:41 +01:00
openclaw-clownfish[bot]
873df76132 fix(feishu): clean up bitable placeholder rows with empty defaults
Preserve the Feishu-local cleanup path while matching the Lark SDK record value shapes: recursively delete default-empty strings, nulls, arrays, and nested text spans, but keep meaningful links, attachments, users, locations, numbers, and booleans.\n\nCarries forward #40602. Thanks @boat2moon.
2026-04-30 04:01:49 +01:00
openclaw-clownfish[bot]
0e97f962ac fix(mattermost): add WebSocket ping/pong keepalive (#73979)
Adds Mattermost WebSocket ping/pong liveness checks so half-open sockets terminate and the existing reconnect loop recovers.

Fixes #41837.
Carries forward #57621.
Refs #50138, #44160, and #51104.
Thanks @JasonWang1124.

Co-authored-by: JasonWang1124 <56307673+JasonWang1124@users.noreply.github.com>
2026-04-30 03:57:31 +01:00
Peter Steinberger
2d1523e573 fix: interpolate heartbeat response prefix templates (#73996) (thanks @yweiii and @JunJD) 2026-04-30 03:48:51 +01:00
Peter Steinberger
329568905e fix: bound slack approval metadata 2026-04-30 03:47:12 +01:00
Peter Steinberger
c39ca49c71 fix(bonjour): cap flapping advertiser restarts 2026-04-30 03:46:18 +01:00
Peter Steinberger
df4faac71f fix(plugins): repair incomplete runtime-deps mirrors 2026-04-30 03:46:18 +01:00
Peter Steinberger
c403ea9063 refactor(channels): move more turn policy into kernel 2026-04-30 03:44:21 +01:00
Peter Steinberger
a6390efeba fix: bound slack command confirm text 2026-04-30 03:40:15 +01:00
Peter Steinberger
eab4024934 fix(whatsapp): track provider-accepted auto-replies 2026-04-30 03:38:19 +01:00
Peter Steinberger
b07c7f6ab3 fix(amazon-bedrock): expose Opus 4.7 thinking profile 2026-04-30 03:36:58 +01:00
Peter Steinberger
b7dd912541 test: cover app sdk gateway surfaces 2026-04-30 03:36:03 +01:00
Peter Steinberger
5d8f4d8767 fix(feishu): fallback to media resource download (#73986) (thanks @alex-xuweilong) 2026-04-30 03:35:44 +01:00
Peter Steinberger
6421e1f36a fix(gateway): refresh model catalog off request path 2026-04-30 03:35:09 +01:00
Peter Steinberger
57a3d7f6e8 fix(gateway): bound discovery advertise startup 2026-04-30 03:35:09 +01:00
Peter Steinberger
11d8ba96f9 fix: bound slack interactive button urls 2026-04-30 03:32:11 +01:00
Peter Steinberger
4329cee0c0 fix: mirror sqlite-vec for bundled memory runtime 2026-04-30 03:25:03 +01:00
Peter Steinberger
fc8fafbd2f fix: harden slack interactive blocks 2026-04-30 03:20:19 +01:00
Vincent Koc
8aed80d2fa chore(ci): add CodeQL PR security guard
Runs the narrow CodeQL critical-security matrix on non-draft pull requests for code and workflow security-boundary changes.
2026-04-29 19:19:45 -07:00
Vincent Koc
35264ca034 fix(plugins): use tokenjuice published openclaw types 2026-04-29 19:12:52 -07:00
Vincent Koc
c538906b72 docs(changelog): backfill last-24h sidebar trigger entry
For 323985f4ca (Val Alexander/@BunsDev): adds a Control UI/exports
entry covering the sidebar-trigger affordance alignment across the
resizable divider, mobile layout, and exported-HTML transcript template.
The other Val/@BunsDev fix (b1c515270e) was already covered by the
existing "Control UI/mobile: persist mobile chat settings" entry.

The rest of the last 24h's missing-CHANGELOG candidates are either:
- already covered by adjacent entries (Shakker manifest auth-evidence
  series under "CLI/models: keep manifest auth-evidence credentials
  visible", Discord application id + Cloudflare 429 under "Channels/
  Discord: cool down Cloudflare/Error 1015 HTML 429", config patch
  follow-ups under "Plugins/runtime-deps: add openclaw plugins deps",
  etc.);
- internal/test/CI/refactor with no operator surface;
- Clawsweeper-bot self-fixes for already-merged PRs;
- Peter-only with no external collaborator (per the
  attribution rule against thanking @steipete).
2026-04-29 19:07:06 -07:00
Peter Steinberger
30650fec73 chore: ignore Google OAuth client secrets 2026-04-30 03:06:52 +01:00
Peter Steinberger
58153d38af fix(codex): flush pending steering on completion 2026-04-30 03:06:26 +01:00
Peter Steinberger
1a103088ba fix: harden slack command menus 2026-04-30 03:04:10 +01:00
Peter Steinberger
1f006dbc5f test(core): stabilize changed gate mocks 2026-04-30 02:58:40 +01:00
Peter Steinberger
02ebac6250 refactor(channels): share turn dispatch results 2026-04-30 02:58:40 +01:00
Peter Steinberger
f94d970cee fix: refresh Google Meet speech retry readiness 2026-04-30 02:45:44 +01:00
Vincent Koc
cab86dc325 fix(docs): allow partial i18n doc batches 2026-04-29 18:19:32 -07:00
Peter Steinberger
5e8c396bb8 docs: explain security autofix boundary 2026-04-30 02:11:36 +01:00
Peter Steinberger
64cb9c5b71 docs: document clawsweeper changelog gate 2026-04-30 02:08:54 +01:00
Peter Steinberger
6331fec05e test(scripts): align changed sdk routing expectation 2026-04-30 02:06:47 +01:00
hcl
1fb096f0e6 fix(models): unconditionally suppress stale openai-codex/gpt-5.4-mini inline entries (#74451) (#74655)
* fix(models): block stale openai-codex/gpt-5.4-mini inline entries via unconditional suppression (#74451)

Suppress explicitly user-configured openai-codex/gpt-5.4-mini inline entries
so a stale models config written by `openclaw doctor --fix` cannot bypass the
manifest capability block and cause repeated assistant-turn failures when the
runtime switches to that model on ChatGPT-backed Codex accounts.

Adds `unconditionalOnly` flag to `buildManifestBuiltInModelSuppressionResolver`
and a `shouldUnconditionallySuppress` helper. Inside `resolveExplicitModelWithRegistry`,
inline matches are now gated on unconditional suppressions (no `when` clause)
before returning. Conditional suppressions such as the qwen Coding Plan endpoint
guard remain bypassable by explicit user configuration, preserving the existing
`resolves explicitly configured qwen3.6-plus before Coding Plan built-in suppression`
behaviour.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(changelog): add missing reporter attribution for #74451 models suppression fix

* docs: credit codex mini suppression contributors

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Shakker <shakkerdroid@gmail.com>
2026-04-30 02:02:23 +01:00
Fred blum
9b1bde2561 fix(voice-call): close webhook in-flight limiter fail-open on empty remote address (#74453)
* fix(voice-call): close in-flight limiter fail-open on empty remote address

The webhook in-flight limiter (createWebhookInFlightLimiter in
src/plugin-sdk/webhook-request-guards.ts) returns true unconditionally
when tryAcquire is called with an empty key — that is its by-contract
fail-open path used to mean 'caller is opting out of the limiter'.

The voice-call webhook handler reached that path silently: it computed
'req.socket.remoteAddress ?? ""' and passed the empty string straight
into tryAcquire. Whenever req.socket.remoteAddress was absent (closed
socket, edge proxy quirk), the limiter became a no-op and the request
proceeded directly to readBody without any concurrency cap.

Fix: when remoteAddress is missing, log a warning and fall back to a
constant non-empty key ('__voice_call_no_remote__') so all such
requests share one in-flight bucket instead of bypassing the limiter
entirely. The bucket size stays maxInFlightPerKey (default 8), which
is the right defense-in-depth posture against slow-body attacks
arriving with stripped IP info.

Scoped to voice-call only. Other consumers of the SDK helper
(bluebubbles via openclaw/plugin-sdk/webhook-ingress) are not changed
to avoid drive-by edits to plugins this PR does not own. The shared
SDK contract (empty key = bypass) is left as-is and documented
implicitly by the fix's comment block.

The existing 8-concurrent test in webhook.test.ts continues to assert
the limiter engages on the happy path; no new test added since the
private handleRequest path is not unit-test exposed and the change is
two-line auditable from the diff alone.

* test(voice-call): cover missing webhook remote address limiter

* test: align changed package sdk routing

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-04-30 01:02:14 +00:00