Peter Steinberger
00d8d7ead0
refactor: extract normalization core package
...
Extract shared normalization/coercion helpers into private @openclaw/normalization-core workspace package while preserving existing plugin SDK helper subpaths.\n\nAlso keeps direct normalization-core imports internal, wires UI/build/loader resolution, and replaces the slow PR network CodeQL lane with a fast added-line boundary scan while retaining full CodeQL for scheduled/manual runs.\n\nVerification: local moved tests, plugin SDK boundary tests, extension loader tests, agents-support shard, UI build/test, build artifacts, lint, workflow guards, autoreview, and GitHub CI passed on PR head 963d893715 .
2026-05-31 01:33:00 +01:00
Peter Steinberger
b374505e7a
refactor: source model catalog types from core
...
Source model catalog SDK types from @openclaw/model-catalog-core while preserving released compat fields and sanitized routing normalization.
2026-05-30 22:00:51 +01:00
Rob Pierson
b474f429ee
feat(plugin-sdk): add reply payload sending hook ( #82823 )
...
* feat(plugin-sdk): add reply payload sending hook
* fix(dispatch): compose caller beforeDeliver with plugin hooks instead of nullish-coalescing
ClawSweeper review identified that Telegram's identity beforeDeliver
would skip reply_payload_sending and message_sending hooks entirely.
Now we always compose caller-provided hooks with global plugin hooks
so plugins get a chance to run even when the caller already supplies
a beforeDeliver hook.
Also adds regression test for composition case.
* test(dispatch): align beforeDeliver hook assertion with current context
* fix(plugin-sdk): remove leftover merge markers from hook types
* feat(plugin-sdk): add reply payload sending hook
* fix(plugin-sdk): protect reply payload media trust
* fix(auto-reply): honor suppressed routed ACP blocks
* fix(auto-reply): avoid double message sending hooks
* fix(auto-reply): require routed reply kind
* test(auto-reply): type routed suppression mock
* fix(auto-reply): honor reply payload hooks in followups
* fix(auto-reply): suppress empty hooked dispatcher replies
* fix(auto-reply): wire reply payload hooks at dispatcher boundary
* fix(plugins): preserve reply payload metadata in hooks
* fix(auto-reply): defer reply hook availability checks
* fix(auto-reply): preserve message hook order for routed payloads
* fix(auto-reply): persist routed payload hook decisions
* fix(auto-reply): run routed payload hooks inside delivery
* fix(auto-reply): enforce message hooks after payload edits
* fix(auto-reply): gate source reply mirrors on delivery
* fix(auto-reply): scope hook-mutated media delivery
* chore(plugin-sdk): refresh reply hook api baseline
* fix(auto-reply): mirror delivered source replies
---------
Co-authored-by: Rob via OpenClaw <noreply@openclaw.local >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-05-29 07:15:10 +01:00
lukeboyett
b5bd6e8828
fix(sessions): preserve Matrix room-id case in session keys ( #75670 ) ( #87366 )
...
* fix(sessions): preserve Matrix room-id case in session keys (#75670 )
Matrix room IDs (and thread event IDs) are opaque, case-sensitive per the
Matrix spec, but session-key canonicalization lowercased them. That forked
one room into duplicate sessions and produced 403 M_FORBIDDEN on recovery /
delivery paths that reconstruct the target from the (lowercased) session key,
even though deliveryContext.to stayed correct.
Introduce a generic, opt-in case-preservation registry (CASE_PRESERVING_PEERS)
consulted at all three lowercasing sites:
- construction: normalizeSessionPeerId
- store canonicalization: normalizeSessionKeyPreservingOpaquePeerIds
- gateway send: explicit request.sessionKey
Signal group preservation is encoded to match prior behavior exactly (segment
span, unscoped, thread suffix still lowercased). Matrix channel/group enrolls
the opaque tail (room id with embedded :server + any 🧵 <event> suffix).
Exact mixed-case keys now win over folded legacy aliases in
resolveSessionStoreEntry and delivery-info lookup; existing lowercased rows
collapse on the next write. Matrix DM/MXID and non-enrolled channels keep the
default lowercase behavior.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
* fix(sessions): guard Matrix folded alias delivery proof
* test(agents): cover cold OpenAI gpt-5.5 fallback
* fix(sessions): preserve non-opaque alias freshness
* fix(sessions): prevent Matrix cross-room thread recovery
* build(protocol): refresh tools effective Swift models
* test(codex): include effective cwd in startup fixture
* test(codex): align startup failure cleanup expectation
* fix(sessions): keep Signal folded aliases fresh
* fix(sessions): preserve unscoped Matrix room keys
* fix(sessions): recover legacy Matrix thread aliases
* fix(sessions): preserve Matrix keys in state migrations
* fix(sessions): keep Matrix structural alias freshness
* fix(sessions): preserve unscoped Matrix migration keys
---------
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-05-28 00:26:49 +01:00
Eva
2a0350b5b4
Separate prompt surfaces by selected harness ( #83454 )
...
* fix: scope agent prompt surfaces
* fix(codex): preserve lightweight project doc suppression
* fix(codex): demote openclaw context for native turns
* fix(codex): report demoted prompt context
* fix(codex): align demoted prompt observability
* docs: format codex runtime table
* docs: align codex prompt overlay docs
* test: align codex prompt snapshots
* test: update prompt snapshot contract
---------
Co-authored-by: Eva (agent) <eva+agent-78055@100yen.org >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-05-18 13:00:53 +01:00
Peter Steinberger
db3c4ba8d3
refactor(gateway): collapse method metadata shims
2026-05-15 12:25:31 +01:00
Peter Steinberger
a1a6cd6508
refactor: centralize inbound history shaping
...
Centralize inbound history shaping through shared reply-history helpers and preserve existing channel behavior.
2026-05-15 11:56:38 +01:00
Eva
50ee68cdf4
feat(plugin-sdk): consolidate session workflow APIs
2026-05-11 03:24:08 +01:00
Peter Steinberger
525767c726
feat: expose active model plugin context
2026-05-10 15:21:43 +01:00
Shakker
01741f81f8
test: remove stale unused imports
2026-05-09 11:26:43 +01:00
Peter Steinberger
311e4608d1
feat: unify model catalog registration
2026-05-09 02:34:56 -04:00
Peter Steinberger
a3564ae546
perf: optimize plugin schema validation
2026-05-02 16:15:45 +01:00
Peter Steinberger
36e687edf0
fix(plugins): use built code for tool discovery
2026-05-01 14:38:29 +01:00
EVA
1adaa28dc8
[plugin sdk] Add generic plugin host-hook contracts ( #72287 )
...
Merged via squash.
Prepared head SHA: 68e5f2ce19
Co-authored-by: 100yenadmin <239388517+100yenadmin@users.noreply.github.com >
Co-authored-by: jalehman <550978+jalehman@users.noreply.github.com >
Reviewed-by: @jalehman
2026-04-27 17:07:02 -07:00
Gustavo Madeira Santana
d5166718bc
test(matrix): cover destructive E2EE backup recovery flows ( #71311 )
...
Merged via squash.
Prepared head SHA: fd5fc06007
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-25 17:48:18 -04:00
Gustavo Madeira Santana
a5db42862d
fix(plugins): expose channel CLI metadata in discovery ( #71309 )
...
Merged via squash.
Prepared head SHA: ce6bb35812
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 22:06:57 -04:00
Peter Steinberger
596b88986d
chore: apply core lint cleanups
2026-04-23 05:30:49 +01:00
Val Alexander
43a941b51c
fix(pair): render /pair qr as media ( #70047 )
...
* fix(pair): render pair qr as media
* fix(gateway): preserve media reply threading
* fix(gateway): harden webchat media replies
* fix(plugin-sdk): keep trustedLocalMedia internal
* docs(changelog): note pair qr media fix
* Update CHANGELOG with recent fixes and enhancements
Updated changelog to include recent fixes and enhancements.
2026-04-22 03:31:09 -05:00
Peter Steinberger
ef66798433
fix: preserve outbound thread sessions
2026-04-22 02:56:23 +01:00
Peter Steinberger
f1805ab54d
fix: centralize provider thinking profiles
2026-04-21 09:13:35 +01:00
Peter Steinberger
6a4d633e42
perf(test): keep session init thread parsing hot path lazy
2026-04-20 17:14:42 +01:00
Peter Steinberger
2fc429dfbf
fix: keep codex oauth bridge extension-owned ( #68284 ) (thanks @vincentkoc)
2026-04-18 21:27:27 +01:00
Marcus Castro
458a52610a
fix(whatsapp): isolate multi-account inbound state and align shared defaults ( #65700 )
...
* refactor(whatsapp): centralize inbound policy resolution
* fix(whatsapp): scope named-account group session keys
* fix(whatsapp): preserve legacy group activation during scoped-key migration
* fix(whatsapp): wire shared defaults through accounts.default
* fix(whatsapp): align schema, helpers, and monitor behavior
* fix(whatsapp): restore verbose inbound diagnostics
* chore(config): refresh whatsapp changelog and baseline hashes
2026-04-18 01:37:38 -03:00
Vincent Koc
61da711b1a
fix(cycles): split provider runtime model types
2026-04-11 22:50:45 +01:00
Vincent Koc
a88fbf0f64
fix(cycles): split reply payload and option contracts
2026-04-11 22:24:55 +01:00
Vincent Koc
74e7b8d47b
fix(cycles): bulk extract leaf type surfaces
2026-04-11 13:26:50 +01:00
Peter Steinberger
44ec4d05de
feat: add pluggable agent harness registry
2026-04-10 21:22:16 +01:00
Peter Steinberger
1a3f141215
refactor: dedupe cli lowercase helpers
2026-04-07 17:50:38 +01:00
Vincent Koc
2988203a5e
feat(context-engine): add memory prompt helper
2026-04-07 08:56:41 +01:00
Vincent Koc
947a43dae3
feat(memory-wiki): add belief-layer digests and compat migration
2026-04-07 08:56:24 +01:00
Peter Steinberger
c03071d36c
refactor: dedupe sdk chat metadata builder
2026-04-06 22:21:00 +01:00
Peter Steinberger
d7f75ee087
refactor: hide qa channels with exposure metadata
2026-04-05 23:21:56 +01:00
Peter Steinberger
82ce30b789
feat(plugins): add reply dispatch hook
2026-04-05 16:11:31 +01:00
Peter Steinberger
edfaa01d1d
refactor(plugin-sdk): split runtime helper seams
2026-04-04 08:53:19 +01:00
Peter Steinberger
04b539e98c
fix: restore channel sdk schema typing
2026-04-04 16:50:25 +09:00
Peter Steinberger
406a47284a
fix(ci): restore channel typing and root-help metadata build
2026-04-04 07:59:32 +01:00
Peter Steinberger
667a54a4b7
refactor(plugins): narrow bundled channel core seams
2026-04-04 07:39:53 +01:00
Vincent Koc
26f0c7ee90
refactor(plugin-sdk): lazily resolve plugin config schemas
2026-04-04 15:32:33 +09:00
Peter Steinberger
eb9051cc7c
refactor(openai): move native transport policy into extension
2026-04-04 04:27:14 +01:00
Peter Steinberger
a23ab9b906
refactor: move voice-call realtime providers into extensions
2026-04-04 12:07:23 +09:00
Peter Steinberger
e4b5027c5e
refactor(plugins): move extension seams into extensions
2026-04-04 00:10:16 +01:00
Peter Steinberger
856592cf00
fix(outbound): restore generic delivery and security seams
2026-04-03 19:09:20 +01:00
Josh Lehman
799c6f40aa
refactor: move provider replay runtime ownership into plugins ( #60126 )
...
* refactor: move provider replay runtime ownership into plugins
* fix(provider-runtime): address review followups
---------
Co-authored-by: Vincent Koc <vincentkoc@ieee.org >
2026-04-03 23:14:37 +09:00
Vincent Koc
774beb8e5c
refactor(plugin-sdk): add task domain runtime surfaces ( #59805 )
...
* refactor(plugin-sdk): add task domain runtime views
* chore(plugin-sdk): refresh api baseline
* fix(plugin-sdk): preserve task runtime owner isolation
2026-04-03 02:11:21 +09:00
Josh Lehman
71346940ad
refactor: add provider replay runtime hook surfaces ( #59143 )
...
Merged via squash.
Prepared head SHA: 56b41e87a5
Co-authored-by: jalehman <550978+jalehman@users.noreply.github.com >
Co-authored-by: jalehman <550978+jalehman@users.noreply.github.com >
Reviewed-by: @jalehman
2026-04-01 13:45:41 -07:00
Gustavo Madeira Santana
e5dac0c39e
CLI: keep root help plugin descriptors non-activating ( #57294 )
...
Merged via squash.
Prepared head SHA: c8da48f689
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-29 18:49:57 -04:00
Peter Steinberger
83135c31c9
refactor(acp): extract generic current conversation binding store
2026-03-28 05:53:07 +00:00
Peter Steinberger
12b7327e16
refactor: move secure random helpers onto core sdk
2026-03-28 03:06:06 +00:00
Peter Steinberger
b34b03dd9e
refactor: move channel dedupe helpers onto core sdk
2026-03-28 02:58:45 +00:00
Peter Steinberger
4ca07559ab
refactor: move provider seams behind plugin sdk surfaces
2026-03-27 23:26:26 +00:00