Commit Graph

15788 Commits

Author SHA1 Message Date
Vincent Koc
2454511480 refactor(sms): consolidate webhook test hooks (#106072) 2026-07-13 14:02:10 +08:00
Peter Steinberger
4349687b9d refactor(extensions): burn down Discord and Slack dead exports (#106017)
* refactor(discord): trim dead internal exports

* refactor(slack): trim dead internal exports

* test(discord): cover inherited streaming migration

* chore(tooling): ratchet reduced extension LOC

* refactor(discord): remove stale approval helper import

* chore(deadcode): remove reintroduced transcript baseline
2026-07-12 22:58:22 -07:00
NIO
ce990a3ad9 fix(googlechat): bound webhook cert fetch during token verification (#102924)
* fix(googlechat): bound webhook cert fetch during token verification

* refactor(googlechat): consolidate cert timeout proof

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-12 22:56:49 -07:00
Peter Steinberger
807491e0f1 ci: consolidate SMS webhook test reset (#106070)
* ci: clear stale dead-export surfaces

* ci: align dead-export baseline
2026-07-12 22:41:35 -07:00
Peter Steinberger
8c7f3d087f refactor: use native abort signal composition (#105947)
* refactor: use native abort signal composition

* style(discord): preserve media module LOC baseline

* chore(ci): lower abort refactor LOC baselines
2026-07-12 22:39:43 -07:00
Vincent Koc
a778f891fa fix(ci): repair main validation regressions (#106037) 2026-07-13 13:37:53 +08:00
Peter Steinberger
1edc8b6c27 refactor(security): centralize timing-safe secret comparisons (#105989)
* refactor(plugins): reuse safe secret comparator

* refactor(security): centralize remaining secret comparisons

* chore(ci): lower refactored file baselines
2026-07-12 22:37:21 -07:00
Peter Steinberger
f025311e1b fix(config): preserve nested defaults across deep merges (#105953)
* fix(config): preserve deep-merge semantics with defu

* chore: keep release notes in PR body

* fix(config): avoid defu type suppressions

* chore(ci): ratchet merged helper line counts
2026-07-12 22:36:45 -07:00
Peter Steinberger
bd7f3cffd3 fix(ci): stabilize QA and UI validation (#106061) 2026-07-12 22:34:38 -07:00
Josh Avant
bb75950159 fix(worktrees): normalize dashed base refs (#104105) (#106048) 2026-07-13 00:34:26 -05:00
Peter Steinberger
b9f0246765 feat(plugin-sdk): add shared HTML escaping seam (#105975) 2026-07-12 22:33:53 -07:00
Peter Steinberger
26210c1600 refactor: remove browser and codex dead exports (#105867)
* refactor(browser): collapse Playwright export paths

* refactor(browser): remove dead plugin exports

* refactor(codex): remove dead app-server exports

* refactor(codex): remove remaining dead exports

* test(codex): use canonical private-type owners

* test(browser): isolate proxy startup state

* test(browser): remove stale chrome imports

* refactor(codex): privatize remaining helpers

* chore(deadcode): refresh export baseline after rebase

* refactor(browser): finish canonical helper ownership

* refactor: fix dead-export cleanup gates

* refactor(codex): keep runtime facades LOC-neutral

* chore(ci): refresh TypeScript LOC baseline

* chore(deadcode): refresh ratchets after rebase

* chore(ci): refresh LOC baseline after main advance

* chore(deadcode): align ratchets with latest main
2026-07-12 22:23:11 -07:00
Pavan Kumar Gondhi
ef9383d88a fix: protect SMS webhook callback quota [AI] (#103620)
* fix: scope SMS webhook rate limiting after validation

* fix: separate SMS webhook validation throttles

* fix: loosen SMS pre-validation throttle

* docs: clarify SMS webhook quota stages

* fix: preserve signed sms callback capacity

* fix: name sms invalid request limiter

* test: cover sms validation disabled quota

* fix: skip signed limiter without sms validation

* docs: clarify sms webhook request budget

* fix: keep sms disabled validation dispatch cap
2026-07-13 10:29:59 +05:30
Peter Steinberger
7c99322e3f chore(ci): shrink TypeScript LOC guard files 2026-07-13 05:58:32 +01:00
Peter Steinberger
8a2da4b1bf fix(imessage): narrow recovered projection before use (#106022) 2026-07-12 21:43:17 -07:00
Ayaan Zaidi
4dc6e182c3 fix(codex): preserve legacy termination when final is omitted
Omitted final on a confirmed message-tool-only source reply keeps main's terminate-on-delivery semantics and records a completed marker; only explicit final=false defers termination. Project the Codex-only final schema property in place on attempt-fresh tools instead of adding a public plugin-SDK clone export, resolving the SDK surface budget failure.
2026-07-13 10:09:52 +05:30
Glucksberg
d8a84a29cb fix(codex): require explicit final source delivery
Distinguish progress from terminal source delivery across Codex telemetry,
payload suppression, terminal failure routing, and stranded-reply recovery.
Preserve legacy behavior when explicit markers are absent.
2026-07-13 10:09:52 +05:30
Peter Steinberger
d9623bd46f fix(qa-lab): consume Crabline 0.1.11 artifacts (#105983)
* fix(qa-lab): consume Crabline 0.1.11 artifacts

* style(qa-lab): keep Crabline path note compact

* test(qa-lab): align Telegram scenario with group transport
2026-07-12 21:29:31 -07:00
zw-xysk
6ef3e87583 fix(imessage): apply authoritative projection in anchorless recovery (#104218)
* fix(imessage): apply authoritative projection in anchorless recovery

Rebuild on latest main with imessage-only changes: authoritative history
projection (optional destination_caller_id), whole-path inbound proof tests,
and no unrelated restart.ts diff.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(imessage): restore recovery cursor API and format tests

Co-authored-by: Cursor <cursoragent@cursor.com>

* test(imessage): add monitor whole-path L3 proof for #104136 recovery

Exercise issue synthetic payloads through monitorIMessageProvider for
authoritative remote reply routing and from-me suppression before dispatch.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(imessage): clear stale destination_caller_id when history omits it

Exact-GUID history is authoritative for destination_caller_id. When the
history row omits that outgoing-only field, clear any stale notification
value instead of inheriting it into the recovered inbound projection.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: sm <sm@zwdeMacBook-Pro.local>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-12 21:22:05 -07:00
Developers Digest
8809848b19 feat(firecrawl): add keyless Firecrawl Search (Free) provider + richer firecrawl_search options (#97078)
* feat(firecrawl): add keyless Firecrawl Search (Free) provider + richer firecrawl_search options

Add an opt-in, keyless 'firecrawl-free' web_search provider (Firecrawl
Search (Free)) mirroring the Parallel plugin's parallel-free pattern:
requiresCredential false, no autoDetectOrder, never auto-selected. The
free path is credential-isolated — it never resolves or sends any
Firecrawl API key (no Authorization header), so opting out of credentials
cannot leak a configured/paid key — and its results and cache key carry a
distinct 'firecrawl-free' provider identity. The keyed 'firecrawl'
provider and core search auto-select behavior are unchanged, honoring the
maintainers' opt-in policy for keyless search.

Registered in index.ts, the web-search-provider barrel, the
web-search-contract-api metadata artifact (the onboarding/setup source),
manifest contracts, the official external plugin catalog snapshot, and
the doctor/contract registries.

Also extend the firecrawl_search tool to /v2/search parity:
includeDomains/excludeDomains (mutually exclusive), tbs, location,
country, and raise the result cap to 100.

* docs: regenerate docs_map for firecrawl heading rename

---------

Co-authored-by: developersdigest <jonathan@sideguide.dev>
2026-07-12 21:04:43 -07:00
Markus
d00ed02f62 fix(outbound): bound message timeout reconciliation 2026-07-13 09:12:03 +05:30
Peter Steinberger
0d90ca6b5d refactor(config): retire flat and scalar streaming keys from matrix, feishu, and qqbot (#105808)
* feat(doctor): migrate legacy matrix/feishu/qqbot streaming spellings to nested config

* test(matrix): shorten setup fixture tokens below the review secret-scanner threshold

* refactor(config): retire flat/scalar streaming keys from matrix, feishu, and qqbot

* docs: describe nested-only streaming config for matrix, feishu, and qqbot

* fix(qa-matrix): compose nested streaming config for the matrix QA harness

* test(feishu): compose negative webhook fixtures outside the GHSA opengrep pattern

* docs: refresh generated docs map

* test(feishu): compose negative webhook fixtures from lint-clean bases outside the GHSA opengrep pattern

* fix(qa-lab): rewrite crabline flat streaming config into the nested channel shape

* chore(config): regenerate channel config metadata and plugin-sdk API baseline for nested-only streaming

* chore(plugin-sdk): absorb main-side deprecated pairing/conversation pin drift

* fix(qa-lab): consume Crabline nested streaming config
2026-07-12 20:33:14 -07:00
lzw112
ee17fd32b3 fix: strip mixed-case Nextcloud Talk target prefixes (#105818) 2026-07-12 20:00:43 -07:00
Vincent Koc
08ab604a1e refactor(discord): remove model picker barrel (#105908) 2026-07-13 10:59:59 +08:00
Peter Steinberger
d49acffa5e refactor(infra): consolidate retry scheduling (#105789)
* refactor(infra): consolidate retry scheduling

* fix(build): wire shared retry package

* fix(build): resolve retry package in source graphs

* fix(infra): keep retry adapter dependency-free
2026-07-12 19:58:55 -07:00
Vincent Koc
f26793ca54 refactor(qa-lab): trim process metric parser exports (#105891) 2026-07-13 10:42:29 +08:00
Peter Steinberger
c3ee86a068 refactor(browser): localize internal support types (#105839) 2026-07-12 18:59:01 -07:00
Peter Steinberger
024b7d5aa8 refactor(pairing): store channel pairing state in SQLite (#105802)
* refactor(pairing): move channel state to SQLite

* fix(pairing): preserve doctor and SDK contracts

* fix(pairing): break SQLite storage import cycle

* fix(pairing): keep SQLite types outside SDK graph
2026-07-12 18:53:38 -07:00
Peter Steinberger
cba79b4aaa fix(slack): suppress room event typing indicators (#105813)
* fix(slack): suppress room event typing indicators

* fix(slack): suppress room event typing indicators
2026-07-12 18:41:49 -07:00
Peter Steinberger
3613b83c6c refactor(browser): trim private Playwright exports (#105794)
* refactor(browser): trim private Playwright exports

* chore(deadcode): refresh export baseline

* chore(deadcode): refresh current baseline

* chore(deadcode): refresh latest baseline
2026-07-12 18:30:34 -07:00
qingminlong
60ca7565a7 fix(discord): omit invalid component accent colors (#105387)
* fix(discord): omit invalid component accent colors

* test(discord): cover accent color boundaries

* docs: keep release notes in PR context

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-12 18:25:49 -07:00
Peter Steinberger
a63aec8bf8 test: remove more avoidable waits (#105816) 2026-07-12 18:24:13 -07:00
NIO
c93f87756a fix(qqbot): reject unsafe mention patterns (#102976)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-12 18:14:01 -07:00
Peter Steinberger
774d5249cc test: eliminate unchecked TypeScript casts (#105804) 2026-07-12 18:08:26 -07:00
Vincent Koc
6c88469110 refactor(msteams): remove obsolete sso invoke stack (#105799) 2026-07-13 08:59:08 +08:00
Peter Steinberger
fe0a6db2b4 fix(slack): warn on disabled channel drops (#105790) 2026-07-12 17:50:14 -07:00
chengzhichao-xydt
cacd435632 fix(tlon): bound stalled inbound and outbound media header waits (#104132)
* fix(tlon): bound stalled inbound and outbound media header waits

* refactor(tlon): share media fetch timeout policy

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-12 17:30:35 -07:00
Vincent Koc
01501f717a refactor(nostr): trim private test seams (#105756) 2026-07-13 08:03:54 +08:00
Peter Steinberger
f87492539b test(whatsapp): initialize runtime in auto-reply harness (#105760) 2026-07-12 16:50:55 -07:00
evan-YM
45e681deac fix(slack): guard matchesSlackDeliveryMetadataSignature against UTF-8/UTF-16 length mismatch (#105492)
* [AI] fix(slack): guard matchesSlackDeliveryMetadataSignature against UTF-8/UTF-16 length mismatch

Compare Buffer byte lengths instead of JS string lengths (UTF-16 code
units) so multi-byte characters in the stored signature never produce
mismatched Buffer sizes that would cause timingSafeEqual to throw
TypeError and crash the message reconciliation loop.

Related to #105436

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

* test(slack): prove malformed delivery signature recovery

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-12 16:44:52 -07:00
Marcus Castro
0ff416161f refactor(whatsapp): reuse SDK normalization helpers (#105580) 2026-07-12 20:04:18 -03:00
Peter Steinberger
4a05a087a1 refactor(config): retire flat streaming keys from the last six channel schemas via doctor migration (#105709)
* refactor(config): retire flat streaming keys from the last six channel schemas

signal, irc, nextcloud-talk, whatsapp, googlechat, and mattermost now accept
only the nested streaming.{chunkMode,block.enabled,block.coalesce} shape
(mattermost also drops scalar/boolean streaming); flat spellings migrate via
each channel's defineChannelAliasMigration doctor contract with root seeding
for their wholesale-replace account merges.

* feat(channels): warn once per key when the deprecated flat streaming fallback is used

Bundled schemas now reject the flat delivery keys, so the streaming.ts
fallback only serves external SDK plugin configs; emit a once-per-process
per-key subsystem warning and pin the removal plan to the next release train.

* chore(config): regenerate bundled channel config metadata for nested-only streaming

* docs: describe nested-only channel streaming config and the SDK flat-key deprecation window

* fix(whatsapp): seed migrated named-account streaming from the accounts.default layer

WhatsApp resolution layers accounts.default shared config between root and
named accounts, so doctor-materialized account streaming objects now inherit
default-account settings over root ones; mattermost schema test moves to the
nested-only shape with explicit rejection coverage; scope flat-key deprecation
notes to the pending Matrix/Feishu migrations.

* fix(whatsapp): resolve the default account case-insensitively when seeding migrated streaming

* chore(plugin-sdk): repin API baseline for nested-only channel streaming types
2026-07-12 15:27:28 -07:00
Alix-007
7c72fef247 fix(signal): add timeouts to container REST requests (#104122)
* fix(signal): add timeouts to container REST requests

* fix(signal): use idle timeouts for container response bodies

* fix(signal): remove redundant timeout release

Signed-off-by: sallyom <somalley@redhat.com>

---------

Signed-off-by: sallyom <somalley@redhat.com>
Co-authored-by: sallyom <somalley@redhat.com>
2026-07-12 16:59:14 -04:00
Vincent Koc
c25cd32c28 refactor(plugins): trim private helper exports (#105687) 2026-07-12 22:26:14 +02:00
qingminlong
bf642ef287 fix(signal): surface daemon errors split across output chunks (#104152)
* fix(signal): preserve daemon log lines across chunks

* test(signal): cover split utf-8 daemon output

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-12 13:02:40 -07:00
yourslewis
9ee9f3e544 fix(slack): prevent duplicate reply controls (#101474)
* fix(slack): dedupe mirrored reply controls

Co-authored-by: yourslewis <5415708+yourslewis@users.noreply.github.com>
Co-authored-by: Chloe <chloe@openclaw.ai>

* fix(slack): avoid spread in control row keys

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: yourslewis <5415708+yourslewis@users.noreply.github.com>
Co-authored-by: Chloe <chloe@openclaw.ai>
2026-07-12 13:01:31 -07:00
Peter Steinberger
5ab07fde4a fix(openai): preserve authored openai-completions through provider normalization (#105539) 2026-07-12 12:37:33 -07:00
Peter Steinberger
6556d1d173 refactor(config): declarative doctor alias-migration DSL with inheritance-aware account seeding (#105636)
* fix(config): seed inherited root streaming into doctor-materialized account streaming objects

* feat(plugin-sdk): add defineChannelAliasMigration doctor alias-migration DSL

* refactor(plugins): migrate channel doctor contracts onto the alias-migration DSL

* refactor(config): drop the prod-unused offMode legacy notice option

* fix(config): make account streaming seeding opt-in for wholesale-replace channels

* test(imessage): keep account streaming account-local for deep-merge runtime
2026-07-12 12:28:42 -07:00
Eden
5fd7b5c40a fix(line): skip confirm/buttons templates with blank required fields (#105520)
* fix(line): skip confirm/buttons templates with blank required fields

* test(line): cover surrounding-text preservation when skipping blank directives

* fix(line): omit optional blank button titles

Co-authored-by: 許元豪 <146086744+edenfunf@users.noreply.github.com>

* fix(line): reject blank button action labels

Co-authored-by: 許元豪 <146086744+edenfunf@users.noreply.github.com>

* docs(changelog): note LINE template fix

Co-authored-by: 許元豪 <146086744+edenfunf@users.noreply.github.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-12 12:25:52 -07:00
zw-xysk
71accce06a fix(slack): keep dm metadata reads read-only (#103468)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: zw-xysk <zw-xysk@users.noreply.github.com>
2026-07-12 12:18:50 -07:00