Commit Graph

66965 Commits

Author SHA1 Message Date
joshavant
3dea94f4cb fix(ios): make screenshot upload deterministic 2026-06-23 20:48:45 -05:00
Vincent Koc
da15cf48bf fix(maint): keep PR landing on squash 2026-06-24 09:28:03 +08:00
Vincent Koc
54c0048d6c perf(reply): hoist direct-send fragment index 2026-06-24 09:24:02 +08:00
Vincent Koc
2ad2e4f2dc perf(codex): index rollout transcript ids 2026-06-24 09:23:42 +08:00
Vincent Koc
28a90b0e82 perf(browser): index role snapshot references 2026-06-24 09:23:19 +08:00
clawsweeper[bot]
63874fa0d1 fix: UI glitch: config is not visible (#96145)
Summary:
- The branch tracks effective Settings Config Form/Raw mode, resets `.config-content` scroll when that mode changes, and adds a browser regression test for the retained-scroll transition.
- PR surface: Source +9, Tests +30. Total +39 across 2 files.
- Reproducibility: yes. at source level: current main resets `.config-content` for section navigation but not  ... ro in this read-only pass, but the source PR includes after-fix browser proof for the same branch behavior.

Automerge notes:
- No ClawSweeper repair was needed after automerge opt-in.

Validation:
- ClawSweeper review passed for head a6ea91e6ed.
- Required merge gates passed before the squash merge.

Prepared head SHA: a6ea91e6ed
Review: https://github.com/openclaw/openclaw/pull/96145#issuecomment-4784983447

Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: sunlit-deng <253064511+sunlit-deng@users.noreply.github.com>
Approved-by: takhoffman
2026-06-24 01:18:03 +00:00
Vincent Koc
4d034639ad fix(crabbox): require Xcode for macOS proof 2026-06-24 09:01:42 +08:00
Sarah Fortune
d9298a74be fix(codex): prefer gateway-managed generated images 2026-06-23 17:47:04 -07:00
Vincent Koc
cd7e3df1ea fix(macos): drop Textual from chat packaging
* fix(macos): drop Textual from chat packaging

* fix(macos): declare concurrency extras dependency
2026-06-24 08:31:05 +08:00
Vincent Koc
0e71ae5df4 fix(qa): enforce fanout completion drain 2026-06-24 08:29:37 +08:00
Vincent Koc
e457c4c324 fix(qa): drain fanout child completions 2026-06-24 08:29:37 +08:00
Vincent Koc
24d1af9e2d test(qa): show unexpected no-outbound messages 2026-06-24 08:29:37 +08:00
Vincent Koc
ab9d3ad6d7 fix(qa): settle channel no-reply check 2026-06-24 08:29:37 +08:00
Vincent Koc
960b9fa4f3 fix(qa): scope no-outbound waits 2026-06-24 08:29:37 +08:00
Vincent Koc
bdc6e37503 fix(qa): retain long smoke debug requests 2026-06-24 08:29:37 +08:00
joshavant
5e98cb6ace docs(ios): update Talk app store metadata 2026-06-23 19:21:05 -05:00
joshavant
b93eeceac0 build(ios): attach app review notes PDF 2026-06-23 19:18:51 -05:00
Marcus Castro
c70accc86f fix(whatsapp): quote current follow-up in durable replies (#96220) 2026-06-23 20:57:28 -03:00
Josh Lehman
96cee6cb64 refactor: route live model reads through session accessor (#96206) 2026-06-23 16:52:22 -07:00
Josh Lehman
5839ef519a refactor: migrate command session persistence to accessor (#96204)
* refactor: migrate command session writes to accessor

* refactor: narrow command session persistence params
2026-06-23 16:52:11 -07:00
Josh Lehman
ae433525f0 refactor(gateway): add alias mutation accessor (#96213)
* refactor: add gateway alias mutation accessor

* test: align gateway session entry mocks
2026-06-23 16:51:36 -07:00
Josh Lehman
95e37f8e95 refactor: guard reply session initialization (#96218)
* refactor: guard reply session initialization

* refactor: tighten reply session initialization boundary

* test: satisfy reply session accessor lint
2026-06-23 16:51:06 -07:00
Josh Lehman
6f2869c296 refactor: migrate agent session accessors (#96182)
* refactor: migrate agent session accessor writes

* refactor: move subagent orphan lookup to reconciliation

* test: align session accessor mocks
2026-06-23 16:31:43 -07:00
joshavant
4f5e25aa54 docs(ios): add app review notes 2026-06-23 18:22:07 -05:00
Josh Lehman
9512294e8f fix: bridge ACP metadata to session accessors (#96195)
* fix: bridge ACP metadata to session accessors

* fix: simplify ACP accessor key ownership

* fix: bind ACP metadata after session canonicalization
2026-06-23 16:14:53 -07:00
Josh Lehman
8a7b3c755a fix(memory-core): migrate dreaming cleanup lifecycle (#96193)
* fix(memory-core): migrate dreaming cleanup lifecycle

* fix(sessions): resolve lifecycle session files explicitly

* fix(ci): refresh dreaming lifecycle proof ratchets
2026-06-23 16:08:44 -07:00
Josh Lehman
f8ed4de460 refactor: add abort target session accessor (#96201)
* refactor: add abort target session accessor

* refactor: centralize command abort session lookup

* fix: keep abort runtime path best effort

* fix: preserve abort target identity on persistence failure

* fix: remember abort target when persistence is skipped

* fix: abort runtime before metadata persistence

* fix: preserve abort target fallback typing

* fix: avoid stale abort memory fallback

* fix: keep abort accessor ratchet narrow

* fix: type abort persistence test mock

* fix: align abort accessor ratchet test
2026-06-23 16:06:04 -07:00
Josh Lehman
b08d901dd2 fix: route gateway history through session accessor target (#96179) 2026-06-23 14:42:43 -07:00
Josh Lehman
a8f387ba19 refactor: route plugin host hook state through accessor (#96191)
* refactor: route plugin host hook state through accessor

* refactor: hide session accessor store internals
2026-06-23 14:38:40 -07:00
Josh Lehman
132d70bfb3 refactor: migrate bundled transcript target lookups (#89911) 2026-06-23 14:32:21 -07:00
Vincent Koc
009d6b261a fix(qa): retain crabline delivery targets 2026-06-24 05:12:26 +08:00
Vincent Koc
654544b6b7 test(ci): align plugin prerelease manifest env 2026-06-24 05:00:14 +08:00
Vincent Koc
252673d5b1 fix(qa): bootstrap raw macos package scripts 2026-06-23 22:51:04 +02:00
Vincent Koc
cc981f8a73 ci: build iOS app for iOS changes 2026-06-24 04:32:08 +08:00
Peter Steinberger
c9ddf2eca6 test(memory): clean up qmd fixture gracefully 2026-06-23 13:31:46 -07:00
Peter Steinberger
73dd758310 fix(memory): abort orphaned qmd search processes 2026-06-23 13:31:46 -07:00
Alix-007
eadd69b44c fix(memory): abort orphaned qmd subprocess on the mcporter search path too
The initial fix threaded the abort signal through the direct qmd
(runQmd/runQmdSearch) path, but the mcporter / QMD 1.1+ daemon search path
(runQmdSearchViaMcporter, runMcporterAcrossCollections) never received it, so
a grouped/mcporter search left its subprocess running on abort.

Thread the search signal through QmdMcporterSearchParams,
QmdMcporterAcrossCollectionsParams, all four mcporter call sites in search(),
and runMcporter, down to the shared runCliCommand spawn (which already
SIGKILLs the child on abort). Guard runQmdSearchViaMcporter on an
already-aborted signal so the multi-collection loop stops spawning. Reuses the
existing abort mechanism; no new machinery. Adds mcporter-path regression tests.
2026-06-23 13:31:46 -07:00
Alix-007
2a021f3b9b fix(memory): thread qmd search abort signal through grouped collection search
memory_search timeout cancellation only reached single-group direct qmd
searches. Multi-collection or mixed memory/session configs route through
runQueryAcrossCollectionGroups, which still called runQmdSearch without the
caller signal, so an aborted memory_search left the grouped qmd child running
until the qmd command timeout instead of being killed promptly.

Thread searchSignal through the grouped search path and its unsupported-option
fallback, and add a grouped multi-collection abort regression asserting the
spawned qmd child is SIGKILLed when the caller signal aborts.
2026-06-23 13:31:46 -07:00
Alix-007
78184ea7e4 fix(memory): abort orphaned qmd search subprocess when memory_search times out
PR #91742 wired memory_search's 15s deadline AbortSignal through the builtin
memory manager but missed the QMD backend behind the same
MemorySearchManager.search interface. With QMD, the tool returns "timed out
after 15s" to the agent while the spawned qmd query/search subprocess keeps
running for the full qmd command timeout (memory.qmd.limits.timeoutMs, whose
embed-heavy default was raised to 600s in #87572), leaving orphaned
embedding/search work running after the agent already moved on.

Add optional AbortSignal support to runCliCommand: an aborting signal kills the
spawned child immediately and rejects with the abort reason, funneled through a
single settle() guard so abort/timeout/error/close cannot double-settle. Thread
the search signal through QmdMemoryManager.search -> runQmdSearch -> runQmd ->
runCliCommand for the default direct-qmd subprocess path (including the query
fallback), and fast-fail search() when the signal is already aborted.
2026-06-23 13:31:46 -07:00
Peter Steinberger
21c8cf9889 fix(matrix): bound SDK response bodies 2026-06-23 13:30:55 -07:00
Alix-007
4e99ec6224 fix(matrix): use JSON-specific idle-timeout diagnostic on bounded JSON read
The non-raw JSON read in performMatrixRequest fell back to the bound
reader's default media idle-timeout message ('Matrix media download
stalled: ...'), which is misleading for a JSON control-plane read. Pass
a JSON-specific onIdleTimeout so a stalled JSON stream now rejects with
'Matrix JSON response stalled: no data received for {ms}ms', letting the
timeout diagnostic distinguish a stalled JSON read from a stalled
raw/media read. Update the regression assertion accordingly.
2026-06-23 13:30:55 -07:00
Alix-007
a36d29c347 fix(matrix): bound non-raw JSON response body in transport 2026-06-23 13:30:55 -07:00
Peter Steinberger
cf67d8dded fix(infra): preserve ClawHub body timeouts 2026-06-23 13:23:46 -07:00
Alix-007
31f1ce1af6 fix(infra): cap ClawHub install-resolution JSON via shared bounded reader
The install-resolution path (fetchClawHubSkillInstallResolution) still read
ClawHub JSON with an unbounded response.json(), the one ClawHub JSON reader
left uncapped by the prior hardening. Route it through the existing
parseClawHubJsonBody helper so every ClawHub JSON success/structured-block
body is bounded by the same 16 MiB cap and cancels the stream on overflow.
Pure reuse of the helper introduced in this PR (no new abstraction); adds a
regression test that an oversized install-resolution body is rejected and the
underlying stream is cancelled.
2026-06-23 13:23:46 -07:00
Alix-007
48853df18c fix(infra): bound ClawHub fetchJson and error response bodies
ClawHub is an external marketplace (untrusted source); fetchJson read the
success body via response.json() and readErrorBody read the error body via
response.text(), both without a byte cap, so a hostile or malfunctioning host
could exhaust memory with an unbounded response. Read both through the existing
read-response-with-limit helpers (16 MiB cap for JSON, 8 KiB / 400 chars for the
error snippet), cancelling the stream on overflow/idle. Symmetric counterpart to
the Anthropic error-stream hardening in #95108.
2026-06-23 13:23:46 -07:00
kklouzal
3a93d7fd68 test(cli): isolate service env in run and update suites 2026-06-23 13:21:29 -07:00
joshavant
fcedd37067 test(ios): guard local network permission trigger points 2026-06-23 14:48:33 -05:00
joshavant
8bddafba65 fix(ios): defer local network discovery until onboarding 2026-06-23 14:48:33 -05:00
Josh Lehman
c24d266b2d refactor: use accessor-backed transcript corpus for memory (#96162)
* refactor: ratchet memory transcript corpus access

* test: use narrow runtime config snapshot import

* test: update plugin sdk surface budgets

* refactor: split memory transcript corpus module
2026-06-23 12:37:44 -07:00
joshavant
9405b8f075 chore(android): prepare 2026.6.9 Play release 2026-06-23 14:23:52 -05:00