Commit Graph

62227 Commits

Author SHA1 Message Date
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
Josh Lehman 7e2b2d2987 refactor: migrate bundled session metadata reads (#96527) 2026-06-24 12:19:53 -07:00
Dallin Romney 8670d28126 Target changed lint checks (#94708)
* chore: target changed lint checks

* docs: tighten changed lint guidance

* chore: clean changed lint planner
2026-06-24 12:18:57 -07:00
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