Commit Graph

62242 Commits

Author SHA1 Message Date
Vincent Koc
8d4e40d293 test(qa): extend fanout marker wait 2026-06-25 10:20:51 +08:00
Vincent Koc
068ae4eb4b test(qa): allow Codex fanout completion window 2026-06-25 10:20:51 +08:00
Vincent Koc
dad7168c2f fix(qa): align runtime parity evidence with Codex 2026-06-25 10:20:51 +08:00
Vincent Koc
31a65e0647 fix(agents): preserve absent embedded session keys 2026-06-25 10:20:51 +08:00
Vincent Koc
1a04b8eb98 test(plugins): review channel daemon spawn findings 2026-06-25 03:42:44 +02:00
clawsweeper[bot]
a21144d8a6 fix(cron): preserve enabled-with-defaults failure alert through store roundtrip (fixes #96589) (AI-assisted) (#96615)
Summary:
- The PR preserves `failure_alert_disabled === 0` as the enabled-with-defaults failure-alert state and adds focused codec roundtrip tests.
- PR surface: Source +2, Tests +54. Total +56 across 2 files.
- Reproducibility: yes. At source level, current main encodes `failureAlert: {}` with `failure_alert_disabled = 0`, then decodes it as `undefined` when all explicit alert option columns are null.

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

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

Prepared head SHA: bd9b2a1798
Review: https://github.com/openclaw/openclaw/pull/96615#issuecomment-4794949533

Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: liuhao1024 <11816344+liuhao1024@users.noreply.github.com>
Approved-by: takhoffman
2026-06-25 01:17:31 +00:00
Dallin Romney
8a5cb85c31 ci: default maturity evidence to all profile (#96595) 2026-06-24 17:32:25 -07:00
Dallin Romney
61d4ff782e docs: clarify maturity scorecard scoring (#96594)
* docs: clarify maturity scorecard scoring

* chore: split qa profile workflow change

* docs: keep maturity coverage values stable

* test: keep maturity renderer fixture in core boundary
2026-06-24 17:32:08 -07:00
Vincent Koc
3ab7a72764 fix(plugin-sdk): update surface budget 2026-06-25 02:22:44 +02:00
Peter Lee
b4bdea0d02 fix(agent): emit model.usage diagnostic for HTTP ingress traffic (#96152)
* fix(agents): emit model.usage diagnostic for HTTP ingress traffic

* fix(agents): emit model.usage diagnostic for HTTP ingress traffic

* fix(agent): add regression tests and refactor ingress model.usage diagnostic emission

* fix(agent): resolve oxlint curly and no-useless-fallback-in-spread violations
2026-06-24 20:17:28 -04:00
Sarah Fortune
113d6f3c64 fix: surface provider authentication failures in channels (#96599)
* fix: surface provider authentication failures in channels

* fix: handle typed provider auth failures

---------

Co-authored-by: Sarah Fortune <sarah.fortune@gmail.com>
2026-06-24 17:16:30 -07:00
joshavant
0a14444924 Bound successful provider response reads 2026-06-24 19:08:22 -05:00
Peter Lee
0a042f68df fix(agent): replace self-wait with deferred release in retained-lock abort cleanup (#96100)
* fix(agent): wait for retained session write before releasing held lock on abort

* fix(agent): replace self-wait with deferred release in retained-lock abort cleanup

* fix(test): reject fallback acquire with SessionWriteLockTimeoutError in active-scope cleanup test

* fix(agent): trim retained-lock comments

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

---------

Signed-off-by: sallyom <somalley@redhat.com>
Co-authored-by: sallyom <somalley@redhat.com>
2026-06-24 19:50:58 -04:00
Vincent Koc
3ab8d6aa60 fix(e2e): extend Codex on-demand install timeout 2026-06-25 00:32:29 +02:00
Omar Shahine
f2af052cee perf(imessage): show typing sooner for slow replies (#95621)
Merged via squash.

Prepared head SHA: 65e9ad10fd
Co-authored-by: omarshahine <10343873+omarshahine@users.noreply.github.com>
Co-authored-by: omarshahine <10343873+omarshahine@users.noreply.github.com>
Reviewed-by: @omarshahine
2026-06-24 15:31:48 -07:00
joshavant
c6f5725906 fix(openshell): pin local mirror fs mutations 2026-06-24 17:03:30 -05:00
Isaiah Stapleton
f47fb91d29 fix(plugins): stop ClawHub version install from inheriting latest compatibility (#96506)
* fix(plugins): stop ClawHub version install from inheriting latest compatibility

When installing a specific older version of a ClawHub plugin, the
compatibility check fell back to the package-level compatibility
metadata when the version-specific response lacked it. The package-level
field reflects the latest version's requirements, so installing e.g.
version 2026.6.8 would incorrectly require OpenClaw >= 2026.6.10.

Remove the fallback to package-level compatibility in
resolveCompatiblePackageVersion(). If a version's artifact response has
no compatibility data, treat it as having no restrictions rather than
inheriting the latest version's constraints.

Assisted-By: Claude (Anthropic AI) <noreply@anthropic.com>
Signed-off-by: IsaiahStapleton <istaplet@redhat.com>

* fix(plugins): narrow compatibility fallback to latest version only

Preserve package-level compatibility enforcement for unpinned/latest
ClawHub installs when the version response omits compatibility data.
Only suppress the fallback for older pinned versions where the
package-level metadata reflects the latest version's requirements.

Add regression test proving unpinned latest installs still reject
incompatible hosts via the package-level compatibility guard.

Assisted-By: Claude (Anthropic AI) <noreply@anthropic.com>
Signed-off-by: IsaiahStapleton <istaplet@redhat.com>

* fix(plugins): recover version-specific compatibility from version endpoint

When the artifact endpoint returns sparse metadata (no compatibility)
for a pinned older version, fetch the version endpoint to get the real
version-specific compatibility data. This preserves compatibility
enforcement for pinned versions instead of treating sparse artifact
metadata as unrestricted.

The fallback chain is now: artifact compatibility -> version endpoint
compatibility -> package-level compatibility (latest only).

Assisted-By: Claude (Anthropic AI) <noreply@anthropic.com>
Signed-off-by: IsaiahStapleton <istaplet@redhat.com>

* fix(plugins): fail closed when version compatibility recovery fails

When the artifact endpoint returns sparse metadata and the version
endpoint is unavailable (transient 500, network failure, etc.), return
the error instead of proceeding with no compatibility checks. This
prevents incompatible plugins from installing when metadata recovery
fails.

Assisted-By: Claude (Anthropic AI) <noreply@anthropic.com>
Signed-off-by: IsaiahStapleton <istaplet@redhat.com>

---------

Signed-off-by: IsaiahStapleton <istaplet@redhat.com>
2026-06-24 17:57:49 -04:00
Dallin Romney
15bfadf2bd fix: count maturity coverage ids (#96543) 2026-06-24 14:56:51 -07:00
joshavant
1d172637d6 fix(cron): omit failed webhook output summaries 2026-06-24 16:52:48 -05:00
Alix-007
dad5ce64d4 fix(providers): bound self-hosted provider discovery JSON reads (#95244)
* fix(providers): bound self-hosted discovery JSON reads

discoverLlamaCppRuntimeContextTokens and discoverOpenAICompatibleLocalModels
parsed their HTTP responses via an unbounded await response.json(). Self-hosted
provider base URLs are user-supplied and untrusted (an endpoint reachable via
SSRF could stream an unbounded JSON body), so a hostile or buggy endpoint could
drive the setup wizard into OOM.

Route both reads through the shared byte-bounded reader (readResponseWithLimit
from @openclaw/media-core) under a single 4 MiB cap before JSON.parse, mirroring
the bound-stream hardening landed for Anthropic error bodies. Overflow cancels
the stream and is swallowed by the existing discovery error handling, so a
capped endpoint degrades gracefully (returns [] / skips the runtime context
probe) instead of buffering the whole body.

* tune self-hosted discovery cap

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

---------

Signed-off-by: sallyom <somalley@redhat.com>
Co-authored-by: sallyom <somalley@redhat.com>
2026-06-24 17:51:14 -04:00
joshavant
170bf72e64 fix: gate diagnostics command to owners 2026-06-24 16:40:50 -05:00
joshavant
ad5a26cf69 Require owner gate for MCP chat command 2026-06-24 16:37:32 -05:00
joshavant
259877dccf docs: require OpenProse remote import consent 2026-06-24 16:36:48 -05:00
joshavant
d8ee630b20 Harden agent diagnostic redaction 2026-06-24 16:14:32 -05:00
Josh Lehman
2c714ac2e0 fix(whatsapp): route group activation through session accessor (#96530) 2026-06-24 13:46:26 -07:00
Josh Lehman
0cdb050bac test: import model-run prune helper 2026-06-24 13:42:39 -07:00
Josh Lehman
fab0048d7b fix: preserve plugin maintenance config compatibility 2026-06-24 13:42:39 -07:00
Josh Lehman
4a7659920c chore: drop unrelated formatting churn 2026-06-24 13:42:39 -07:00
Josh Lehman
070996e5c3 fix: keep model-run pruning internal 2026-06-24 13:42:39 -07:00
wanglu241
af8cd23f17 fix(sessions): keep plugin SDK maintenanceConfig backward-compatible
The model-run maintenance fields (modelRunPruneAfterMs from #88632 base work,
modelRunPruneAfterConfigured from the pressure-gating fix) were required on the
resolved maintenance config exposed to plugins via patchSessionEntry's
maintenanceConfig. External plugin TypeScript callers that construct a
pre-#88632 maintenanceConfig would fail to compile.

Make both fields optional on ResolvedSessionMaintenanceConfig (and the runtime
type), so old-shape plugin configs keep compiling. All internal readers already
treat an absent value as unset: shouldRunModelRunPrune returns false when
modelRunPruneAfterMs == null and modelRunPruneAfterConfigured is falsy, so a
plugin-supplied config without the fields runs no model-run pruning — the
pre-#88632 behavior. The resolver still always populates both fields, so normal
runtime behavior is unchanged. Add an old-shape maintenanceConfig SDK
regression test.
2026-06-24 13:42:39 -07:00
wanglu241
2fe50f69db fix(sessions): align forced model-run prune with cap eviction
Forced maintenance (sessions cleanup / maintenanceOverride) caps immediately to
maxEntries, but the unset model-run default was high-water gated. In the
(maxEntries, high-water) window stale model-run probes survived while the forced
cap evicted real sessions — the inverse of #88632. shouldRunModelRunPrune now
takes a force flag: when the caller caps immediately, the unset default prunes
once entryCount > maxEntries. Wire force at the two forced call sites
(applyEnforcedMaintenance, previewStoreCleanup). Make the SDK runtime config
field modelRunPruneAfterConfigured optional (additive). Add force-gate unit
test + forced-apply regression test.
2026-06-24 13:42:39 -07:00
wanglu241
fc198d862a Gate default model-run session pruning 2026-06-24 13:42:39 -07:00
wanglu241
2ddedad1d0 fix(sessions): tighten gateway model-run key predicate
The model-run prune predicate fell back to testing the raw sessionKey
when parseAgentSessionKey returned null, so unscoped keys like
`explicit:model-run-<uuid>` and shapes with empty agent ids were
eligible for the new default 24h cleanup. Restrict matching to keys
that successfully parse as agent-scoped with a non-empty agent id,
and add negative tests covering unscoped, empty-agent, extra-segment,
and whitespace-padded keys.

Refs #88632 (review feedback before merge).
2026-06-24 13:42:39 -07:00
wanglu241
33d0019eaf fix(config): validate model-run session retention 2026-06-24 13:42:39 -07:00
wanglu241
875e26e4bb fix(sessions): prune stale gateway model-run sessions 2026-06-24 13:42:39 -07:00
Shakker
d23977edbc test: stabilize runtime context env 2026-06-24 21:04:45 +01:00
Shakker
10e03f797e fix: isolate crestodian first run env 2026-06-24 20:59:14 +01:00
Shakker
f0f5da0e39 test: keep commitments client boundary 2026-06-24 20:52:00 +01:00
Shakker
9777c68563 fix: isolate commitments docker state 2026-06-24 20:50:53 +01:00
Shakker
6d0306b920 test: centralize status env fixture 2026-06-24 20:48:54 +01:00
Josh Lehman
d716900929 refactor: route voice call agent runs through session target (#96539) 2026-06-24 12:48:39 -07:00
Shakker
e2d282f16e fix: route gateway option env mutations 2026-06-24 20:44:01 +01:00
Vincent Koc
9514faca27 chore(sdk): refresh plugin SDK API baseline 2026-06-24 21:40:41 +02:00
Shakker
3848b9619f test: centralize mcp gateway env cleanup 2026-06-24 20:35:50 +01:00
Shakker
365279b86f fix: route temp home env setup 2026-06-24 20:32:41 +01:00
Shakker
1adc076148 test: trim rescue channel fixture imports 2026-06-24 20:28:42 +01:00
Shakker
a49816ffbb fix: route rescue channel env lifecycle 2026-06-24 20:27:53 +01:00
Shakker
fa6a9509bc test: isolate crestodian state env 2026-06-24 20:25:05 +01:00
Shakker
9d82906f79 fix: route transcript fixture state env 2026-06-24 20:23:09 +01:00
Agustin Rivera
3168987b28 fix(exec): gate versioned inline interpreters (#96216)
* fix(exec): gate versioned inline interpreters

* fix(exec): trim unsupported R inline flag

* fix(exec): avoid r2 inline eval collision
2026-06-24 12:22:49 -07:00