Commit Graph

66940 Commits

Author SHA1 Message Date
Shakker
c561319708 test: centralize plugin temp home env 2026-06-24 20:14:51 +01:00
Shakker
387ef7ebc4 fix: route install env test mutations 2026-06-24 20:10:42 +01:00
Shakker
00b6f49b24 test: harden env helper lifecycle coverage 2026-06-24 20:05:47 +01:00
Shakker
c81fec0370 fix: centralize isolated test env writes 2026-06-24 20:01:36 +01:00
Shakker
eac1d3349c test: narrow profile state directory type 2026-06-24 19:57:39 +01:00
Shakker
aa56abc94a fix: share profile gateway env restoration 2026-06-24 19:57:39 +01:00
Josh Lehman
b6bc3ed0db fix: Codex turns stop showing typing during tool work (#95844)
* fix: bridge harness execution phases to typing

* docs: clarify typing indicator activity triggers
2026-06-24 11:50:09 -07:00
Shakker
9ad959a870 test: route trajectory export env setup 2026-06-24 19:44:48 +01:00
Shakker
f2bc159b79 fix: route Codex harness fixture env setup 2026-06-24 19:42:47 +01:00
Josh Lehman
4c841ac575 refactor: remove Telegram session deps adapter (#96524)
* refactor: remove telegram session deps adapter

* test: update telegram session ratchet expectation
2026-06-24 11:37:19 -07:00
Shakker
8ecbf83c67 test: route CLI backend fixture env setup 2026-06-24 19:32:12 +01:00
Shakker
3fbdbb5440 fix: route ACP spawn fixture env setup 2026-06-24 19:29:48 +01:00
Josh Lehman
da50a450d2 fix(memory-core): route dreaming corpus through session corpus metadata (#96517) 2026-06-24 11:29:26 -07:00
Shakker
ff332d3819 test: share Codex bind env lifecycle 2026-06-24 19:23:55 +01:00
Shakker
c2d2f7fef9 fix: route ACP bind state env setup 2026-06-24 19:20:07 +01:00
Vincent Koc
6df67285df fix(sdk): keep surface budgets tight 2026-06-25 02:18:07 +08:00
Vincent Koc
5eec2158ea fix(sdk): restore post-build surface budgets 2026-06-25 02:10:39 +08:00
Vincent Koc
d01c290601 test(sdk): assert surface budget growth guard 2026-06-25 02:05:06 +08:00
Vincent Koc
d3cfef3bd8 fix(media-understanding): align video base64 byte limits (#96519)
Merged via squash.

Prepared head SHA: e37e577cd4
Co-authored-by: vincentkoc <25068+vincentkoc@users.noreply.github.com>
Co-authored-by: vincentkoc <25068+vincentkoc@users.noreply.github.com>
Reviewed-by: @vincentkoc
2026-06-25 02:02:59 +08:00
Vincent Koc
f163d778c0 fix(sdk): tighten public surface budgets 2026-06-25 01:47:50 +08:00
Vincent Koc
b302b491da fix(sdk): refresh public surface budgets 2026-06-25 01:41:04 +08:00
Josh Lehman
4d4769c0d6 refactor(path3): narrow bundled session runtime barrels (#96507) 2026-06-24 10:33:40 -07:00
linhongkuan
f57a30289d fix(media-understanding): strip repeated placeholders (#96431)
Merged via squash.

Prepared head SHA: 4b004863b1
Co-authored-by: lin-hongkuan <234943746+lin-hongkuan@users.noreply.github.com>
Co-authored-by: vincentkoc <25068+vincentkoc@users.noreply.github.com>
Reviewed-by: @vincentkoc
2026-06-25 01:25:08 +08:00
Agustin Rivera
bcbd521c1b fix(gateway): cap auth limiter entries (#96224) 2026-06-24 10:22:57 -07:00
Drew Meyer
94ab33036e fix(discord): avoid duplicate typing keepalive for tool replies (#84288)
Co-authored-by: Andrew Meyer <andrewmeyer@andrews-air.lan>
2026-06-25 01:22:18 +08:00
linhongkuan
47d3d1b1f1 fix(media-core): normalize GIF content type detection (#96435)
Merged via squash.

Prepared head SHA: 82b139664b
Co-authored-by: lin-hongkuan <234943746+lin-hongkuan@users.noreply.github.com>
Co-authored-by: vincentkoc <25068+vincentkoc@users.noreply.github.com>
Reviewed-by: @vincentkoc
2026-06-25 01:09:10 +08:00
Milosz Jankiewicz
0347ae48ea fix(xai): rediscover retired OAuth token endpoint (#96146)
Merged via squash.

Prepared head SHA: 7ea3195fbf
Co-authored-by: Jaaneek <25470423+Jaaneek@users.noreply.github.com>
Co-authored-by: fuller-stack-dev <263060202+fuller-stack-dev@users.noreply.github.com>
Reviewed-by: @fuller-stack-dev
2026-06-24 11:05:18 -06:00
Colin Johnson
4ae0a5d958 ci: run QA smoke profile in CI (#94291)
* ci: add qa lab smoke profile dispatch

* ci: prove qa lab smoke profile on prs

* ci: preserve manual qa lab profile dispatch

* ci: run qa lab smoke profile on pull requests

* ci: keep QA smoke mock lane bounded

* ci: run QA smoke PR proof through crabline

* ci: keep mock QA timeouts on caller fallbacks

* ci: prebuild QA smoke runtime

* ci: delegate smoke QA evidence workflow

* ci: trust release branch smoke evidence refs

* ci: trim smoke evidence workflow comments

* ci: align smoke evidence wrapper with QA profile contract

* ci: keep smoke profile evidence mock-only

* ci: make smoke profile evidence manual

* ci: shard qa smoke profile in ci

* ci: drop qa-channel-only smoke shard

* ci: derive qa smoke shards from taxonomy

* ci: keep qa smoke planner legacy-safe

* ci: enforce qa smoke shard failures

* ci: run qa smoke in existing fast shard

* ci: opt qa smoke into crabline concurrency

* test(ci): align qa smoke guard with taxonomy cleanup

* ci: split qa smoke into dedicated check

---------

Co-authored-by: Dallin Romney <dallinromney@gmail.com>
2026-06-24 09:47:45 -07:00
Gio Della-Libera
c5f10b5f7c Doctor: expose config audit scrub findings (#84450)
* feat(doctor): expose config audit scrub findings

* fix(doctor): keep audit scrub lint opt-in

* fix(doctor): keep audit lint defaults internal

* fix(doctor): remove duplicate lint default guard
2026-06-24 09:34:28 -07:00
Dallin Romney
f29dbd3ebd test(qa): speed up smoke profile (#96340) 2026-06-24 09:30:59 -07:00
xingzhou
3217165be7 fix(telegram): preserve inline buttons for empty capabilities (#96468)
Merged via squash.

Prepared head SHA: 5e55b5dd30
Co-authored-by: zhangguiping-xydt <275915537+zhangguiping-xydt@users.noreply.github.com>
Co-authored-by: vincentkoc <25068+vincentkoc@users.noreply.github.com>
Reviewed-by: @vincentkoc
2026-06-25 00:09:45 +08:00
Vincent Koc
dbe2802cdc fix(sdk): refresh API baseline hash 2026-06-25 00:04:34 +08:00
ly-wang19
5f25651fd9 fix(ui): roll usage-metrics formatTokens over to "M" at the 999,950 boundary (#96450)
Merged via squash.

Prepared head SHA: fe9881afe7
Co-authored-by: ly-wang19 <94427531+ly-wang19@users.noreply.github.com>
Co-authored-by: vincentkoc <25068+vincentkoc@users.noreply.github.com>
Reviewed-by: @vincentkoc
2026-06-25 00:03:16 +08:00
joshavant
d7c69da6a6 docs(ios): document live activity review flow 2026-06-24 11:00:04 -05:00
joshavant
e77994ed5a fix(ios): clarify camera purpose string 2026-06-24 11:00:04 -05:00
ly-wang19
db3307b02a fix(canvas): stop self-closing embed from starting a greedy block match (#96449)
Merged via squash.

Prepared head SHA: 7253bb298e
Co-authored-by: ly-wang19 <94427531+ly-wang19@users.noreply.github.com>
Co-authored-by: vincentkoc <25068+vincentkoc@users.noreply.github.com>
Reviewed-by: @vincentkoc
2026-06-24 23:46:20 +08:00
linhongkuan
6b1755aa2b fix(media-core): accept unpadded inline base64 images (#96437)
Merged via squash.

Prepared head SHA: dc4693b7bf
Co-authored-by: lin-hongkuan <234943746+lin-hongkuan@users.noreply.github.com>
Co-authored-by: vincentkoc <25068+vincentkoc@users.noreply.github.com>
Reviewed-by: @vincentkoc
2026-06-24 23:44:05 +08:00
Yufeng He
fa2379dbc8 fix(telegram): clip progress text on code-point boundaries to avoid lone surrogates (#96456)
Merged via squash.

Prepared head SHA: 765d6c08ac
Co-authored-by: he-yufeng <40085740+he-yufeng@users.noreply.github.com>
Co-authored-by: vincentkoc <25068+vincentkoc@users.noreply.github.com>
Reviewed-by: @vincentkoc
2026-06-24 23:27:59 +08:00
Galin Iliev
ce6d97d580 fix(plugins): suppress metadata cache hit scan spans (#86796)
Merged via squash.

Prepared head SHA: a4907bf285
Co-authored-by: galiniliev <5711535+galiniliev@users.noreply.github.com>
Co-authored-by: vincentkoc <25068+vincentkoc@users.noreply.github.com>
Reviewed-by: @vincentkoc
2026-06-24 23:09:12 +08:00
Alix-007
d1c2934d0d fix(ollama): bound model-discovery JSON response reads (#96027)
* fix(ollama): bound model-discovery JSON response reads

The /api/tags and /api/show discovery reads in extensions/ollama/src/provider-models.ts
parsed their HTTP responses with an unbounded await response.json(). Ollama base URLs
are user-supplied and can point at remote/cloud endpoints, so a hostile or buggy server
(or one reachable via SSRF) could stream an unbounded or never-ending JSON body and drive
model discovery into OOM.

Route both reads through the shared @openclaw/media-core byte-bounded reader
(readResponseWithLimit, re-exported via openclaw/plugin-sdk/response-limit-runtime) under
a single 16 MiB cap before JSON.parse, cancelling the stream on overflow. Overflow throws a
bounded error that the existing fail-soft handlers swallow, so a capped endpoint degrades
gracefully: /api/tags returns { reachable: false, models: [] } and /api/show returns {}.

Symmetric counterpart to the #95103/#95108 response-limit campaign.

AI-assisted.

* fix(ollama): reuse shared bounded JSON reader for model discovery

Replace the local readOllamaDiscoveryJson helper with the shared
readProviderJsonResponse (from openclaw/plugin-sdk/provider-http), which
already enforces the 16 MiB cap, cancels the stream on overflow, and wraps
malformed JSON with the caller label. The /api/tags and /api/show discovery
reads now go through it directly while keeping the existing fail-soft
handlers ({ reachable: false, models: [] } and {}).

Add a focused regression test: when a discovery stream exceeds the JSON byte
cap, fetchOllamaModels returns { reachable: false, models: [] },
queryOllamaModelShowInfo returns {}, and the bounded reader cancels the body
mid-flight so less than the full advertised stream is read.
2026-06-24 10:58:13 -04:00
Alix-007
605aede38c fix(exa): bound untrusted search JSON response reads (#96038)
Exa search success responses were read via an unbounded `await
response.json()`, so a misbehaving or hostile endpoint could stream an
arbitrarily large body into memory before parsing. Read the success
body through the shared bounded reader (16 MiB cap, the same limit other
bundled providers use) and cancel the stream on overflow. This mirrors
the error-body bound already in place and the #95103/#95108 response
-limit campaign on the success-JSON side.

AI-assisted.
2026-06-24 10:57:37 -04:00
Alix-007
6163b1977b fix(parallel): bound successful web-search JSON response reads (#96035)
* fix(parallel): bound successful web-search JSON response reads

The Parallel web_search provider parsed its /v1/search success body with an
unbounded await res.json(). The body comes from an external web-search
upstream, so a hostile or malfunctioning endpoint streaming an unbounded JSON
payload could force the runtime to buffer the whole response before parsing,
creating memory pressure or a hang on the provider path.

Read the success body through the shared readProviderJsonResponse helper with a
16 MiB cap (matching the provider JSON cap from #95218); on overflow the stream
is cancelled and a bounded error is thrown. The error-body path was already
bounded (readResponseTextLimited, 8 KiB). Symmetric follow-up to the
#95103/#95108 response-limit campaign.

* docs(parallel): drop upstream PR ref from response-cap comment

Replace the PR-specific '#95218' annotation with a neutral description of
the shared provider JSON cap so the comment stays accurate independent of
upstream PR numbering.
2026-06-24 10:57:24 -04:00
Vincent Koc
eabc12b7d6 fix(sandbox): install supported node in common image 2026-06-24 22:54:00 +08:00
Josh Lehman
b58e6e0734 refactor: route session status through session accessors (#96460) 2026-06-24 07:44:19 -07:00
Vincent Koc
d83cd282c6 fix(qa): record checked-out ref in evidence (#96434)
Merged via squash.

Prepared head SHA: 86b3df6e59
Co-authored-by: vincentkoc <25068+vincentkoc@users.noreply.github.com>
Co-authored-by: vincentkoc <25068+vincentkoc@users.noreply.github.com>
Reviewed-by: @vincentkoc
2026-06-24 22:37:41 +08:00
狼哥
374076b5a8 fix(plugins): retain plugin tool registry after replacement (#82562)
Merged via squash.

Prepared head SHA: 1bcbbbfbc1
Co-authored-by: luoyanglang <238804951+luoyanglang@users.noreply.github.com>
Co-authored-by: vincentkoc <25068+vincentkoc@users.noreply.github.com>
Reviewed-by: @vincentkoc
2026-06-24 22:22:29 +08:00
杨浩宇0668001029
242fbf1a67 test(telegram): pass outbound sanitizer payload 2026-06-24 07:13:32 -07:00
杨浩宇0668001029
434d752dd6 fix(telegram): sanitize outbound tool traces 2026-06-24 07:13:32 -07:00
Ayaan Zaidi
3179692f0e fix(messages): apply response usage to followups 2026-06-24 07:12:33 -07:00
Peter Lindsey
6add1cc969 feat(messages): config-level default for the persistent /usage footer
Adds `messages.responseUsage` (precedence session -> channel -> config default
-> off) so the persistent /usage footer can default-on, with three distinct
states: explicit on (tokens/full), explicit off (persisted), and unset (inherit
the configured default).

Unifies effective-value resolution behind a single channel-aware resolver
`resolveEffectiveResponseUsage` used by reply rendering, the no-arg /usage
toggle, the ACP control, and the gateway session-row builder; the row builder's
`effectiveResponseUsage` is carried through sessions.changed events, chat
snapshots, and the UI row so live consumers never go stale. `/usage reset`
(aliases inherit/clear/default) clears the override to inherit; only explicit
off persists; a full session reset preserves the preference. ACP "Usage detail"
gains an "inherit" option for unset sessions. Docs/help/completions updated; "on"
documented as a legacy alias; config-doc baseline regenerated.
2026-06-24 07:12:33 -07:00