Commit Graph

7670 Commits

Author SHA1 Message Date
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
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
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
clawsweeper[bot]
3bd6b54f0b fix: compatibility gaps in the new Google Vertex ADC manifest evidence
Tighten Google Vertex ADC manifest evidence to canonical project env vars and canonical ADC fallback paths only.

Local proof:
- OPENCLAW_VITEST_MAX_WORKERS=1 pnpm test src/agents/model-auth.profiles.test.ts src/plugins/manifest-registry.test.ts src/secrets/provider-env-vars.dynamic.test.ts
- pnpm exec oxfmt --check --threads=1 docs/plugins/manifest.md extensions/google/openclaw.plugin.json src/agents/model-auth-env.ts src/agents/model-auth.profiles.test.ts src/plugins/manifest.ts
- git diff --check origin/main...HEAD

CI note: checks-node-core-support-boundary was red on an unrelated tooling assertion in test/scripts/test-projects.test.ts for packages/sdk/src/index.test.ts routing; that file and scripts/test-projects.mjs are unchanged from origin/main.
2026-04-30 01:52:09 +01:00
Peter Steinberger
485b875d72 fix(discord): allow configured application ids 2026-04-30 01:47:02 +01:00
Peter Steinberger
a81e3ee888 fix(discord): bound application summary probes 2026-04-30 01:47:02 +01:00
Peter Steinberger
950a9b5500 fix(discord): cool down Cloudflare 429 responses 2026-04-30 01:47:02 +01:00
Peter Steinberger
08c4af0ddf fix(msteams): accept conversation id allowlists 2026-04-30 01:35:42 +01:00
Peter Steinberger
1ead1b2d18 refactor(channels): finish turn kernel migration 2026-04-30 01:31:00 +01:00
Peter Steinberger
cf125c125a test(plugins): align release validation fixtures 2026-04-30 01:25:54 +01:00
Peter Steinberger
30a2b3049a feat: default active steering to batched delivery 2026-04-30 01:22:43 +01:00
Peter Steinberger
0b59964ec9 fix(google): support Vertex authorized_user ADC 2026-04-30 01:13:25 +01:00
Peter Steinberger
b7c3e19ed6 fix: mark channel system events untrusted 2026-04-30 00:51:24 +01:00
Peter Steinberger
01254500df fix(cli): preserve lazy command parent flags 2026-04-30 00:48:46 +01:00
Mike Harsh
36bb723dfb fix(github-copilot): support GUI/RPC wizard auth flow (#73290)
Merged via squash.

Prepared head SHA: aea7d6650c
Co-authored-by: indierawk2k2 <18598712+indierawk2k2@users.noreply.github.com>
Co-authored-by: shanselman <2892+shanselman@users.noreply.github.com>
Reviewed-by: @shanselman
2026-04-29 16:45:31 -07:00
Shakker
c4e249114d fix: thread workspace auth evidence through model auth 2026-04-30 00:13:12 +01:00
Shakker
b8c77c1bd7 test: type google setup registration coverage 2026-04-30 00:13:12 +01:00
Shakker
68aedf3908 fix: register google vertex setup provider 2026-04-30 00:13:12 +01:00
Shakker
dec5de8a2c fix: declare google vertex local auth evidence 2026-04-30 00:13:12 +01:00
Marcus Castro
4cba08df01 fix(whatsapp): remove exposeErrorText config (#74642)
* fix(whatsapp): remove exposeErrorText config

* fix(whatsapp): mark internal system events trusted
2026-04-29 20:03:58 -03:00
Peter Steinberger
426107d2f8 fix(telegram): retry invalid native quotes 2026-04-30 00:02:13 +01:00
Peter Steinberger
9a3a341d93 refactor(channels): route remaining turns through kernel 2026-04-29 23:16:16 +01:00
Peter Steinberger
9a9cd0c0ab refactor(channels): add shared turn kernel 2026-04-29 23:16:16 +01:00
Peter Steinberger
83267e99b0 chore: update dependencies 2026-04-29 22:42:45 +01:00
clawsweeper[bot]
7b97af4899 fix: Found one narrow regression risk in the new Ollama tool-call name (#74563)
Co-authored-by: openclaw-clawsweeper[bot] <280122609+openclaw-clawsweeper[bot]@users.noreply.github.com>
2026-04-29 14:08:33 -07:00
clawsweeper[bot]
6378de91e7 fix: Found one low-severity route-question recall regression in the co (#74582)
Co-authored-by: openclaw-clawsweeper[bot] <280122609+openclaw-clawsweeper[bot]@users.noreply.github.com>
2026-04-29 14:08:21 -07:00
clawsweeper[bot]
e2ab5b98cc fix: Found one compatibility regression in the Discord public API barr (#74533)
Co-authored-by: openclaw-clawsweeper[bot] <280122609+openclaw-clawsweeper[bot]@users.noreply.github.com>
2026-04-29 14:07:15 -07:00
pash-openai
3b5dab372a Keep Codex Computer Use hook relays live across turns (#74107)
* Fix Codex native hook relay across processes

* fix: harden native hook relay bridge

* test: stabilize pairing store cache assertion

---------

Co-authored-by: pashpashpash <nik@vault77.ai>
2026-04-30 05:57:12 +09:00
Vincent Koc
1a4d55de43 test(plugins): split kitchen sink qa personalities (#74612) 2026-04-29 13:56:49 -07:00
Peter Steinberger
470098bd26 fix: keep embedded run lanes from wedging 2026-04-29 21:37:17 +01:00
Vincent Koc
f1ec163f77 fix(browser): remove unused zod dependency 2026-04-29 13:18:50 -07:00
Peter Steinberger
1738ebb385 fix(browser): declare zod runtime dependency 2026-04-29 21:15:03 +01:00
Josh Lehman
f05b789736 test: align Codex provider payload test (#74536) 2026-04-29 12:56:27 -07:00
clawsweeper[bot]
7c51cd2baf fix(device-pair): reject invalid remote setup URLs
Fail setup-code generation when gateway.remote.url is configured but malformed, instead of falling back to a bind-derived URL and issuing a bootstrap token.
2026-04-29 20:45:33 +01:00
Vincent Koc
21b3eb5c34 test(memory-wiki): remove duplicate fixture keys 2026-04-29 12:43:01 -07:00
Peter Steinberger
fdba408bce fix: restore codex verbose full output 2026-04-29 20:36:36 +01:00
clawsweeper[bot]
8a3507e310 fix(memory-wiki): route natural people questions
Let route-question searches match people-routing metadata from natural-language prompts, and allow wiki_apply evidence provenance fields that the markdown parser already supports.
2026-04-29 20:36:31 +01:00
Vincent Koc
e1c97cb24d fix(memory-wiki): satisfy CI guard checks 2026-04-29 12:27:22 -07:00
Peter Steinberger
3059702687 feat(memory-wiki): add agent-facing people wiki metadata 2026-04-29 20:17:37 +01:00
Peter Steinberger
b0ae867034 refactor(migration): share cached config runtime helper 2026-04-29 20:05:23 +01:00
Hemant Sudarshan
db6951088a fix(telegram): keep unreachable polling sockets non-fatal
* Runtime: suppress transient network uncaught exceptions

* fix(telegram): keep unreachable polling sockets non-fatal

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-04-29 19:53:43 +01:00
Simone
dabf76b3de fix(device-pair): validate public setup urls (#74538)
* fix(device-pair): validate public setup urls

* test(cli): cover invalid qr override urls

---------

Co-authored-by: Lucenx9 <185146821+Lucenx9@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-04-29 19:47:35 +01:00
Natalie K
86956f71e6 fix(matrix): close owner-side device verification loop on SAS confirm (#74542)
* fix(matrix): close owner-side device verification loop on SAS confirm

After SAS confirm via the `openclaw matrix verify confirm-sas` CLI, the
operator's Element X stayed in "Verifying…" because three things on the
bot side did not happen before the verb returned:

1. confirmVerificationSas didn't await the rust-crypto verifier promise.
   `Verifier.verify()` resolves only after both sides exchange MACs and
   the protocol fully settles, including cross-signing-key uploads
   triggered by `crossSignDevice`. Returning early meant Element X's
   next /keys/query saw an inconsistent state and the prompt persisted.

2. The 30s auto-confirm path (used when the operator initiates from
   their phone) explicitly passed `{ trustOwnDevice: false }`, so the
   bot never cross-signed its own device on this path. The check inside
   trustOwnDeviceAfterConfirmedSas already gates on isSelfVerification,
   so flipping the flag is safe — non-self requests remain a no-op.

3. The standalone `confirmMatrixVerificationSas` action did not call
   `trustOwnIdentityAfterSelfVerification` (only the higher-level
   `runMatrixSelfVerification` path did). Without that call, the bot
   had not signed the operator's master key, so Element X had no path
   to clear the prompt without a passive sync tick.

Three additive edits:

- verification-manager.ts (confirmVerificationSas): await
  session.verifyPromise after confirmSasForSession returns.
  verifyPromise is the .then().catch() chain set by
  ensureVerificationStarted, which already routes rejections into
  session.error, so awaiting it cannot double-throw.
- verification-manager.ts (maybeAutoConfirmSas): pass
  { trustOwnDevice: true } so the auto-confirm path also cross-signs
  the bot device for self-verifications.
- actions/verification.ts (confirmMatrixVerificationSas): mirror the
  trustOwnIdentityAfterSelfVerification call from
  completeMatrixSelfVerification when the returned summary indicates
  isSelfVerification.

Tests:
- verification-manager.test.ts: flipped the existing "auto-confirmed
  self-verification" assertion (now expects trustOwnDeviceAfterSas to
  be called); added two new tests for verifyPromise await and
  rejection-on-summary.error.
- actions/verification.test.ts: two new tests asserting
  confirmMatrixVerificationSas calls trustOwnIdentityAfterSelfVerification
  on self-verifications and not on remote verifications.

Verified end-to-end against matrix.thepolycule.ca (Synapse 1.145.0+ess.1,
MAS-fronted): after `verify confirm-sas`, Element X's device-list view
shows the bot device with a green shield and no pending Verify prompt.

* fix(matrix): guard owner trust after failed SAS verification

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-04-29 19:42:45 +01:00
Peter Steinberger
072e73d7c3 fix(codex): release quiet app-server turns 2026-04-29 19:42:02 +01:00
Peter Steinberger
89f871679e fix(ollama): normalize prefixed tool calls 2026-04-29 19:28:53 +01:00
Peter Steinberger
4bc79f9737 test: relax live web search timeouts 2026-04-29 19:14:15 +01:00
Peter Steinberger
7e1acf2f1e refactor(discord): split threading and voice segment helpers 2026-04-29 19:09:17 +01:00
Peter Steinberger
6470a23504 fix(slack): ignore duplicate reaction adds 2026-04-29 19:07:08 +01:00