@trycua/cua-driver ships an exports map with only the import condition, so
require-condition resolution throws PATH_NOT_EXPORTED even when the package
is installed. Every real Windows/Linux node host therefore failed driver
artifact verification with COMPUTER_DRIVER_PACKAGE_MISSING despite a correct
install. Fall back to import-condition resolution before concluding the
package is missing; the platform packages keep resolving through require.
Found during a live CUA node bring-up on an Ubuntu guest; the regression
test exercises real installed-package resolution on Linux/Windows CI.
* fix(mcp): preserve catalog and result integrity
* fix(mcp): sanitize node result details
* test(mcp): stabilize result memory regression
* refactor(mcp): keep result limits private
* test(mcp): remove stale invoke import
* fix: let restart recovery own terminal settlement
Once durable restart recovery is armed, propagate the canonical restart abort before terminal payload mapping so the recovered continuation owns the visible outcome.
Fixes#126086
* fix(gateway): expose lifecycle context resolver
* fix(gateway): keep lifecycle resolver type acyclic
Own the live Gateway context resolver option beside lifecycle dispatch so current callers compile without closing the server type cycle.
* test(gateway): serialize connection liveness cases
The table cases share one hoisted handler mock; explicit sequential execution prevents cross-case 0/2 call interference in the concurrent CI shard.
* fix: preserve restart recovery claim through settlement
Mark the reply operation restart-aborted before propagating the canonical restart error so terminal cleanup cannot retire the durable recovery claim.
* fix(config): seed configured provider model entries from catalog metadata
applyModelDefaults replaced omitted input/reasoning/cost/maxTokens on
models.providers entries with generic defaults at config load, erasing the
fact that the operator never authored them. An override entry that pins only
sizing fields materialized as a text-only, non-reasoning, zero-cost model,
which silently dropped vision-gated tools (most visibly the computer tool)
for that model downstream.
Seed omitted fields from the owning plugin manifest catalog row (same
provider+model id, using the existing id-normalization policies) before
falling back to generic defaults. Authored fields always win; entries with
no catalog row behave exactly as before.
* fix(config): preserve tiered pricing when seeding model cost defaults
resolveModelCost keeps only flat per-token fields; carry an authored or
catalog tieredPricing table through explicitly so cost defaulting does not
silently discard it.
Close terminal SSE and stateful notification streams through the owning lifecycle, and reap stdio/QA process groups before exact authority is discarded.\n\nRefs #126098, #126099, #126100.
* fix(subagents): drop dead announce gateway-context resolver plumbing
#126062 left caller-supplied announce gateway-context resolvers behind after binding dispatch to the Gateway instance. Remove the dead plumbing that broke prod-types in gateway-scope lanes.
* refactor(agents): consolidate session auth selection behind prepared-facts facade
Completes #123894's redesign by deduplicating the four session-auth call-site preludes and deleting inference-runtime's duplicate route re-derivation.
Co-authored-by: fuller-stack-dev <263060202+fuller-stack-dev@users.noreply.github.com>
---------
Co-authored-by: fuller-stack-dev <263060202+fuller-stack-dev@users.noreply.github.com>
* fix(test): run the shared Control UI lane on the cross-file cleanup runner
ui/vitest.config.ts drives CI's checks-ui job (pnpm --dir ui test). Its
unit project sets isolate:false but never wired
runner: nonIsolatedRunnerPath, so the per-file cleanup in
test/non-isolated-runner.ts — module-graph reset, repo-owned custom
element dropping, DOM body reset, timer and spy restoration — never ran
in the lane CI actually uses. Only the repo-root lane behind
scripts/run-vitest.mjs loaded it.
Files sharing a worker therefore kept the previous file's evaluated
modules, so whichever file imported a component first pinned it to the
real dependency and a later file's vi.mock factory never reached
production code, surfacing as "expected 0 to be 1" in whichever sibling
the size sequencer happened to pack alongside it. This is the class
PR #123512 diagnosed and fixed at the runner; the fix never reached this
lane, so the repo kept absorbing it one uiIsolatedTestFiles entry at a
time.
browser stays exempt (the runner imports node:fs and server modules that
cannot load in browser mode) and unit-node stays exempt (it carries the
Playwright-driven layout tests whose browser lives in module scope, which
per-file module resets churn). The config test asserted runner was
undefined for every project, pinning the broken wiring; it now asserts
the invariant and fails on the pre-fix config.
* fix(agents): stop passing an ignored resolver to instance-bound announce dispatch
check-prod-types is red on main: #126062 threaded resolveGatewayContext
into the announce dispatch call, but that call now goes through
dispatchGatewayLifecycleMethod, whose options type does not carry the
field.
The type checker is right that it does not belong there. That dispatcher
hands work to runtime.dispatchAgent, which resolves context from the
Gateway instance it is bound to and forwards a fixed option allowlist, so
a caller-supplied resolver was already being ignored. Dropping it is
behavior-preserving.
The delivery test asserted the resolver was forwarded, but production now
binds to the instance dispatcher while the test injects a mock, so that
assertion only proved the mock. It now asserts the resolver is
deliberately not forwarded.
Left for the owner of #126062: sendSubagentAnnounceDirectly and its
callers still accept and thread resolveGatewayContext, which is now
vestigial on this path. Deleting that chain or teaching the instance
runtime to honor the resolver is a design call on a just-landed change.
Keep automatic auth-profile rotation within the session current provider route so API-key sessions do not switch to subscription credentials across compaction or cooldown. Cross-route fallback remains owned by provider route planning.
Co-authored-by: Peter Steinberger <steipete@gmail.com>
* improve(ui): make online sidebar section collapsible
* improve(ui): show online avatars in compact state
* improve(ui): align online section heading
* fix(ui): satisfy sidebar CI gates
* fix(ui): keep online expanded on first visit
`oxfmt --check` fails on main, which takes check-docs red on every PR. The
drift came in with #126055 in
.agents/skills/openclaw-release-validation/SKILL.md.
Formatting only, no content change.