13321 Commits

Author SHA1 Message Date
Joey Krug
9debe07ec2 fix(outbound): preserve replies after adapter sanitization 2026-03-20 19:29:29 -04:00
Joey Krug
b3f0da2a77 test: fix rebased quote reply typecheck imports 2026-03-20 19:28:20 -04:00
Joey Krug
96b63d7b2e style: format Signal deliver imports 2026-03-20 19:28:20 -04:00
Codex CLI Audit
0bf97f6681 fix(googlechat): preserve replyToId across multi-payload sends for thread routing
Google Chat uses replyToId as persistent thread context (threadName),
similar to Slack (thread_ts) and Mattermost (rootId). The outbound
delivery core was consuming inherited replyToId after the first
successful send, orphaning subsequent payloads to the top level.

Add googlechat to the isThreadBasedChannel check so replyToId survives
across all payloads in a multi-payload response.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-20 19:27:41 -04:00
Codex CLI Audit
ebbf92259b Fix Signal quote debounce target selection 2026-03-20 19:27:41 -04:00
Codex CLI Audit
a51a1c6333 fix: preserve inherited thread reply for Mattermost (rootId) alongside Slack (thread_ts)
Mattermost uses replyToId as rootId for thread context, same pattern as
Slack's thread_ts. Without this, multi-payload assistant turns only keep
the first message in-thread; subsequent payloads get posted unthreaded.

Generalizes the Slack-specific exemption to all thread-based channels.
2026-03-20 19:27:41 -04:00
Codex CLI Audit
55798ae175 test: add quote reply regression coverage 2026-03-20 19:27:41 -04:00
Codex CLI Audit
75505e49db fix(signal): harden quote-reply pipeline against cache poisoning, Slack thread loss, and blank replyToId
- Prevent quote-author cache poisoning: only cache sender-derived authors from actual
  envelope senders; add isStrictUuid for canonical UUID validation
- Preserve Slack thread context: skip reply-state consumption for Slack so thread_ts
  persists across all payloads in a delivery
- Normalize blank/whitespace replyToId to undefined before computing explicit reply
  semantics; null still means do-not-reply
- Add tests for isStrictUuid, blank replyToId normalization, and trimming
2026-03-20 19:27:09 -04:00
Codex CLI Audit
6e66424f97 Signal: preserve inherited quote state 2026-03-20 19:27:09 -04:00
Codex CLI Audit
3b4866f57a fix(signal): complete bidirectional quote-reply support
Outbound:
- Map [[reply_to:]] tag to signal-cli quote-timestamp + quote-author RPC params
- Validate reply IDs are decimal-only (reject hex/scientific notation)
- Track quote consumption across dispatcher callbacks (turnReplyConsumed flag)
- Strip replyToId from payload after first delivery; prevents duplicate quote bubbles
- Preserve explicit null as reply suppression signal (distinct from unset)
- Materialize resolved replyToId on sendPayload payloads for downstream correctness
- Handle sendPayload partial failure: only consume on valid messageId

Inbound:
- Surface ReplyToId, ReplyToBody, ReplyToSender, ReplyToIsQuote on MsgContext
- Resolve quoted authors from LRU cache (uuid: prefix normalization for signal-cli)
- Preserve quote metadata through debounce coalescing
- Index skipped group messages for later author resolution
- Drop wrong-person fallback for unresolvable explicit reply IDs

Type safety:
- Extend OutboundReplyPayload.replyToId to string | null | undefined
- Fix null propagation in googlechat, irc, nextcloud-talk, imessage, telegram adapters
- Fix Feishu SDK type errors (timeout not in call param types)

Requires patched signal-cli at /opt/signal-cli-0.14.1-patched/ until
upstream publishes lib v140 to JitPack.
2026-03-20 19:27:09 -04:00
Josh Lehman
2364e45fe4
test: align extension runtime mocks with plugin-sdk (#51289)
* test: align extension runtime mocks with plugin-sdk

Update stale extension tests to mock the plugin-sdk runtime barrels that production code now imports, and harden the Signal tool-result harness around system-event assertions so the channels lane matches current extension boundaries.

Regeneration-Prompt: |
  Verify the failing channels-lane tests against current origin/main in an isolated worktree before changing anything. If the failures reproduce on main, keep the fix test-only unless production behavior is clearly wrong. Recent extension refactors moved Telegram, WhatsApp, and Signal code onto plugin-sdk runtime barrels, so update stale tests that still mock old core module paths to intercept the seams production code now uses. For Signal reaction notifications, avoid brittle assertions that depend on shared queued system-event state when a direct harness spy on enqueue behavior is sufficient. Preserve scope: only touch the failing tests and their local harness, then rerun the reproduced targeted tests plus the full channels lane and repo check gate.

* test: fix extension test drift on main

* fix: lazy-load bundled web search plugin registry

* test: make matrix sweeper failure injection portable

* fix: split heavy matrix runtime-api seams

* fix: simplify bundled web search id lookup

* test: tolerate windows env key casing
2026-03-20 15:59:53 -07:00
Vincent Koc
e635cedb85 test(openai): cover bundle media surfaces 2026-03-20 15:53:12 -07:00
Sally O'Malley
6e20c4baa0
feat: add anthropic-vertex provider for Claude via GCP Vertex AI (#43356)
Reuse pi-ai's Anthropic client injection seam for streaming, and add
the OpenClaw-side provider discovery, auth, model catalog, and tests
needed to expose anthropic-vertex cleanly.

Signed-off-by: sallyom <somalley@redhat.com>
2026-03-20 18:48:42 -04:00
Josh Lehman
c3972982b5
fix: sanitize malformed replay tool calls (#50005)
Merged via squash.

Prepared head SHA: 64ad5563f7ae321b749d5a52bc0b477d666dc6be
Co-authored-by: jalehman <550978+jalehman@users.noreply.github.com>
Co-authored-by: jalehman <550978+jalehman@users.noreply.github.com>
Reviewed-by: @jalehman
2026-03-20 15:03:30 -07:00
Peter Steinberger
994b42a5a5 test: parallelize safe audit case tables 2026-03-20 21:16:01 +00:00
Josh Avant
7abfff756d
Exec: harden host env override handling across gateway and node (#51207)
* Exec: harden host env override enforcement and fail closed

* Node host: enforce env override diagnostics before shell filtering

* Env overrides: align Windows key handling and mac node rejection
2026-03-20 15:44:15 -05:00
Josh Avant
c7134e629c
LINE: harden Express webhook parsing to verified raw body (#51202)
* LINE: enforce signed-raw webhook parsing

* LINE: narrow scope and add buffer regression

* changelog

Signed-off-by: joshavant <830519+joshavant@users.noreply.github.com>

---------

Signed-off-by: joshavant <830519+joshavant@users.noreply.github.com>
2026-03-20 15:32:55 -05:00
Vincent Koc
11d71ca352
pairing: keep setup codes bootstrap-token only (#51259) 2026-03-20 13:27:39 -07:00
Peter Steinberger
5a5e84ca1d test: drop duplicate web search helper 2026-03-20 20:25:24 +00:00
Peter Steinberger
fa71ad7c5d test: repair latest-main web search regressions 2026-03-20 20:17:11 +00:00
Josh Lehman
23fef04c4e
test: fix setup finalize web search mocks (#51253) 2026-03-20 13:07:22 -07:00
Teddy Tennant
a20ba74978
test: add SSRF guard coverage for URL credential bypass vectors (#50523)
* security: add SSRF guard tests for URL credential bypass vectors

* test(security): strengthen SSRF redirect guard coverage

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-03-20 12:45:06 -07:00
Gustavo Madeira Santana
3da66718f4
Web: derive search provider metadata from plugin contracts (#50935)
Merged via squash.

Prepared head SHA: e1c7d72833afff6ef33e8d32cdd395190742dc08
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com>
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com>
Reviewed-by: @gumadeiras
2026-03-20 12:41:04 -07:00
Peter Steinberger
acf32287b4 test: trim more extension startup from unit tests 2026-03-20 19:28:32 +00:00
Jaaneek
916f496b51
Add Grok 4.20 reasoning and non-reasoning to xAI model catalog (#50772)
Merged via squash.

Prepared head SHA: 095e645ea58b2259b25c923aeaf11bbcb2990c8f
Co-authored-by: Jaaneek <25470423+Jaaneek@users.noreply.github.com>
Co-authored-by: huntharo <5617868+huntharo@users.noreply.github.com>
Reviewed-by: @huntharo
2026-03-20 15:28:30 -04:00
Peter Steinberger
f6b3245a7b fix: pass full sdk gate 2026-03-20 19:24:10 +00:00
Peter Steinberger
62ddc9d9e0 refactor: consolidate plugin sdk surface 2026-03-20 19:24:10 +00:00
Vincent Koc
46854a84a4 test(plugin-sdk): cover legacy root diagnostic listeners 2026-03-20 12:23:02 -07:00
Peter Steinberger
7b00a0620a test: stabilize gateway alias coverage 2026-03-20 19:17:44 +00:00
Peter Steinberger
39053bddd7 test: decouple zalo outbound payload contract from channel runtime 2026-03-20 19:02:07 +00:00
Peter Steinberger
a7401366ef test: trim more channel-heavy startup in unit tests 2026-03-20 18:50:52 +00:00
Peter Steinberger
b26edfe1ff test: trim plugin-heavy unit test imports 2026-03-20 18:35:39 +00:00
Tak Hoffman
16e055c083
restore extension-api backward compatibility with migration warning 2026-03-20 13:27:30 -05:00
Vincent Koc
c64893a9c2
fix(config): use static channel metadata in docs baseline (#51161) 2026-03-20 10:52:40 -07:00
Vincent Koc
a2e1991ed3 refactor(plugin-sdk): route bundled runtime barrels through public subpaths 2026-03-20 10:38:55 -07:00
Vincent Koc
fb3550ef5e test(sessions): stabilize pruning integration setup 2026-03-20 10:38:55 -07:00
Vincent Koc
a39c440d39 fix(config): share json compatibility parsing 2026-03-20 10:17:53 -07:00
Vincent Koc
93fbe26adb
fix(config): tighten json and json5 parsing paths (#51153) 2026-03-20 10:10:57 -07:00
Vincent Koc
87eeab7034 docs: add plugin SDK migration guide, link deprecation warning to docs 2026-03-20 10:05:06 -07:00
Peter Steinberger
fcabecc9a4 fix: remove duplicate plugin sdk exports 2026-03-20 16:52:10 +00:00
Peter Steinberger
18fa2992f9 fix: restore plugin sdk runtime barrels 2026-03-20 16:46:34 +00:00
Peter Steinberger
cb89325cd8 fix: restore latest main gate 2026-03-20 16:46:34 +00:00
Vincent Koc
aa78a0c00e refactor(plugin-sdk): formalize runtime contract barrels 2026-03-20 09:30:34 -07:00
Vincent Koc
9b6f286ac2 refactor(channels): share route format and binding helpers 2026-03-20 09:30:34 -07:00
Vincent Koc
faa9faa767 refactor(web-search): share provider clients and config helpers 2026-03-20 09:30:34 -07:00
Vincent Koc
d3ffa1e4e7 refactor(errors): share api error payload parsing 2026-03-20 09:30:33 -07:00
Vincent Koc
dbc9d3dd70 fix(plugin-sdk): restore root diagnostic compat 2026-03-20 09:27:37 -07:00
Peter Steinberger
50ce9ac1c6 refactor: privatize bundled sdk facades 2026-03-20 15:56:14 +00:00
Peter Steinberger
f6948ce405 refactor: shrink sdk helper surfaces 2026-03-20 15:43:14 +00:00
Peter Steinberger
ba1bb8505f refactor: install optional channels for directory 2026-03-20 15:37:56 +00:00