Commit Graph

2546 Commits

Author SHA1 Message Date
Peter Steinberger
ffe67e9cdc refactor(channels): route inbound turns through kernel 2026-04-30 04:08:47 +01:00
Peter Steinberger
df4faac71f fix(plugins): repair incomplete runtime-deps mirrors 2026-04-30 03:46:18 +01:00
Peter Steinberger
4329cee0c0 fix: mirror sqlite-vec for bundled memory runtime 2026-04-30 03:25:03 +01:00
hcl
1fb096f0e6 fix(models): unconditionally suppress stale openai-codex/gpt-5.4-mini inline entries (#74451) (#74655)
* fix(models): block stale openai-codex/gpt-5.4-mini inline entries via unconditional suppression (#74451)

Suppress explicitly user-configured openai-codex/gpt-5.4-mini inline entries
so a stale models config written by `openclaw doctor --fix` cannot bypass the
manifest capability block and cause repeated assistant-turn failures when the
runtime switches to that model on ChatGPT-backed Codex accounts.

Adds `unconditionalOnly` flag to `buildManifestBuiltInModelSuppressionResolver`
and a `shouldUnconditionallySuppress` helper. Inside `resolveExplicitModelWithRegistry`,
inline matches are now gated on unconditional suppressions (no `when` clause)
before returning. Conditional suppressions such as the qwen Coding Plan endpoint
guard remain bypassable by explicit user configuration, preserving the existing
`resolves explicitly configured qwen3.6-plus before Coding Plan built-in suppression`
behaviour.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(changelog): add missing reporter attribution for #74451 models suppression fix

* docs: credit codex mini suppression contributors

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Shakker <shakkerdroid@gmail.com>
2026-04-30 02:02:23 +01:00
clawsweeper[bot]
3bd6b54f0b fix: compatibility gaps in the new Google Vertex ADC manifest evidence
Tighten Google Vertex ADC manifest evidence to canonical project env vars and canonical ADC fallback paths only.

Local proof:
- OPENCLAW_VITEST_MAX_WORKERS=1 pnpm test src/agents/model-auth.profiles.test.ts src/plugins/manifest-registry.test.ts src/secrets/provider-env-vars.dynamic.test.ts
- pnpm exec oxfmt --check --threads=1 docs/plugins/manifest.md extensions/google/openclaw.plugin.json src/agents/model-auth-env.ts src/agents/model-auth.profiles.test.ts src/plugins/manifest.ts
- git diff --check origin/main...HEAD

CI note: checks-node-core-support-boundary was red on an unrelated tooling assertion in test/scripts/test-projects.test.ts for packages/sdk/src/index.test.ts routing; that file and scripts/test-projects.mjs are unchanged from origin/main.
2026-04-30 01:52:09 +01:00
Peter Steinberger
1ead1b2d18 refactor(channels): finish turn kernel migration 2026-04-30 01:31:00 +01:00
Shakker
2fe3e779ff fix: preserve workspace auth scope in runtime paths 2026-04-30 00:13:12 +01:00
Shakker
c4e249114d fix: thread workspace auth evidence through model auth 2026-04-30 00:13:12 +01:00
Shakker
1d1edca92f feat: add setup auth evidence metadata 2026-04-30 00:13:12 +01:00
Peter Steinberger
4c712d3372 fix: add bundled plugin deps repair command 2026-04-29 23:23:14 +01:00
Peter Steinberger
9a3a341d93 refactor(channels): route remaining turns through kernel 2026-04-29 23:16:16 +01:00
Peter Steinberger
9a9cd0c0ab refactor(channels): add shared turn kernel 2026-04-29 23:16:16 +01:00
Peter Steinberger
fa467c20e3 test: allow browser indirect zod runtime dependency 2026-04-29 23:03:06 +01:00
Peter Steinberger
18faf22e15 fix(plugins): mirror global-agent runtime dependency (#74593)
* fix(plugins): mirror global-agent runtime dependency

* fix(plugins): update bundled dependency drift guard
2026-04-29 21:55:46 +00:00
Peter Steinberger
c160bec3d6 refactor(plugins): split runtime deps planner 2026-04-29 21:59:01 +01:00
Peter Steinberger
9ae7db5562 refactor(plugins): split runtime deps materialization 2026-04-29 21:59:01 +01:00
Peter Steinberger
d2e55b01f2 perf(tests): speed up channel plugin id tests 2026-04-29 20:24:12 +01:00
Peter Steinberger
4aedffd37a refactor(plugins): split loader runtime helpers (#74545)
* refactor(plugins): split loader runtime helpers

* test(scripts): include discord api barrel lane

* test(ci): align built artifact guard expectations

* fix(plugins): avoid redundant cache key assertion
2026-04-29 19:22:41 +00:00
Shakker
e69da9d578 fix: honor config timeline diagnostics 2026-04-29 19:53:55 +01:00
Shakker
097eed8cd8 feat: emit diagnostics timeline 2026-04-29 19:53:55 +01:00
Peter Steinberger
efefba2db1 refactor(plugins): split bundled runtime deps jiti aliases 2026-04-29 18:57:05 +01:00
Peter Steinberger
c7aaa40848 perf(test): trim bundled runtime deps imports 2026-04-29 17:39:27 +01:00
Peter Steinberger
9d03cd15a9 refactor(plugins): split bundled runtime deps helpers 2026-04-29 17:32:14 +01:00
Agustin Rivera
9a0b43c47e feat(nvidia): add NVIDIA provider with onboarding flow (#71204)
* feat(nvidia): add NVIDIA provider with onboarding flow

Add the NVIDIA build.nvidia.com API as a bundled provider. Default model
is nvidia/nvidia/nemotron-3-super-120b-a12b: first segment is the provider
id, remaining "nvidia/nemotron-3-super-120b-a12b" is the literal upstream
model id (which happens to start with "nvidia/" because NVIDIA is also the
model maker).

Supporting core change: introduce a provider capability flag
nativeIdsIncludeProviderPrefix so providers whose native catalog ids
intentionally include their provider prefix (OpenRouter) opt into self-prefix
dedupe in modelKey, without hardcoding provider names in core. Providers
whose ids merely happen to start with their own name (NVIDIA) leave the flag
unset and get the full <provider>/<model-id> concatenation.

- extensions/nvidia/*: new plugin, catalog, onboarding, tests, docs
- extensions/openrouter/index.ts: declare nativeIdsIncludeProviderPrefix
- src/plugins/types.ts: add field to ProviderPlugin
- src/plugins/registry.ts: populate self-prefix set on registration
- src/agents/provider-self-prefix.ts: sync accessor used by modelKey
- src/agents/model-ref-shared.ts: modelKey consults the flag
- test updates for affected surfaces

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* refactor(model-picker): simplify literal-prefix display to label-only

* fix(model-picker): pass workspaceDir/env to allowlist literal-prefix resolution

* chore: untrack generated baseline JSON artifacts (gitignored)

* fix(nvidia): show literal model ref in picker and onboarding notes

* fix(nvidia): show hint whenever display label differs from stored config

* fix(nvidia): drop redundant hint from Keep current label

* fix(nvidia): restore literal double-prefix display labels

* fix(picker): handle literal-prefix fast path

* fix(picker): show literal keep label

* fix(docs): update nvidia provider docs

* fix(nvidia): update test helper imports

* fix(changelog): add nvidia provider entry

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-29 09:25:12 -07:00
Peter Steinberger
8cf724a381 fix(plugins): simplify bundled runtime deps staging
* fix(plugins): simplify bundled runtime deps staging

* refactor(plugins): declare bundled root runtime deps

* fix(plugins): isolate pnpm runtime dependency installs

* test(gateway): wait for deferred agent routing calls in server suite

* test(ci): follow extracted update-channel assertions

* fix(plugins): bypass pnpm age gate for bundled runtime deps

* test: drop stale rebase leftovers

* test: preserve mirrored root dependency drift guard

* test: stage mirrored deps in facade fixtures

* fix(plugin-sdk): expose provider setup metadata

* test(plugin-sdk): satisfy spread lint in facade deps fixture

* refactor(plugins): share bundled runtime deps install flow

* fix(plugins): finish runtime deps rebase cleanup

* fix(plugins): remove stale mirror import

* refactor(plugins): centralize bundled runtime root preparation

* fix(plugins): skip Windows pnpm cmd shims

* refactor(plugins): let package managers own runtime deps staging

* fix(plugins): validate staged runtime deps

* fix(plugins): preserve lazy runtime deps fallback
2026-04-29 17:04:56 +01:00
Peter Steinberger
58db3d2d22 perf(test): trim media runner import cost 2026-04-29 16:59:42 +01:00
Peter Steinberger
e8b82d1cf9 refactor(discord): split component auth helpers 2026-04-29 16:56:17 +01:00
Peter Steinberger
8d63ddce69 fix: harden runtime deps lock owner identity 2026-04-29 16:54:05 +01:00
Jim Smith
2d885a2402 fix(plugins): disambiguate runtime-deps lock owners by process start-time
`shouldRemoveRuntimeDepsLock` previously trusted `isAlive(owner.pid)`
alone when deciding whether a lock could be reclaimed. That works fine
on a normal host: when the writer dies the PID is gone and `isAlive`
returns false. Inside Docker it does not — every Node gateway process
runs as PID 1 (or PID 7 with `init: true`) in its container PID
namespace, so a stale lock left behind by a previous incarnation looks
"alive" to the new one. The 5-minute lock-wait timeout then fires and
the supervisor restarts, and the cycle repeats indefinitely. Operators
have to manually remove `.openclaw-runtime-deps.lock` to recover.

This change records `pidStartTimeMs` alongside `pid` and `createdAtMs`
when the lock is acquired, and consults it in the staleness check.
When both sides have start-time evidence and they disagree, the lock
is treated as stale; otherwise the existing PID-alive-means-fresh
behavior is preserved exactly. The capture point uses
`Date.now() - process.uptime() * 1000` once at module load, and the
read side uses `/proc/<pid>/stat` field 22 on Linux (returning null
elsewhere so legacy semantics still apply on macOS/Windows hosts).

This is strictly additive on the wire format and the predicate:
existing lock files without `pidStartTimeMs` continue to take the same
code path they did before, and platforms that cannot resolve a live
PID's start-time fall back to the same legacy behavior.

Refs #74346.
2026-04-29 16:54:05 +01:00
Peter Steinberger
03e17d19e9 test(plugins): avoid map spread in provider fixture 2026-04-29 14:55:25 +01:00
Peter Steinberger
3a875e7549 test: speed up provider plugin tests 2026-04-29 14:42:16 +01:00
Peter Steinberger
f0adbd48e8 refactor(discord): internalize discord client 2026-04-29 14:22:58 +01:00
Alex Knight
bbf985d50a feat(plugins): add SQLite plugin state store (#74190)
* feat(plugins): add experimental sqlite plugin state store
2026-04-29 23:02:14 +10:00
Ayaan Zaidi
9bf7b6bfca fix(auth): enable selected manifest provider plugins 2026-04-29 17:41:05 +05:30
Peter Steinberger
234cbf5f46 perf(plugins): memoize packaged runtime dist mirrors 2026-04-29 13:10:28 +01:00
Masato Hoshino
016f5ae862 test(plugins): cover dead-PID stale runtime-deps lock removal
Adds focused regression coverage for dead owner PID runtime-deps install locks so stale lock recovery remains PID-first and does not wait on age when the recorded owner process is gone.

Co-authored-by: masatohoshino <g515hoshino@gmail.com>
2026-04-29 12:51:14 +01:00
Max Caldar
4d73cd52dc fix(plugins): mirror core root-package deps used by core dist code (#74213)
Extend MIRRORED_CORE_RUNTIME_DEP_NAMES from ["semver", "tslog"] to
also include @agentclientprotocol/sdk, @lydell/node-pty, croner,
dotenv, jiti, json5, jszip, markdown-it, tar, and web-push.

These are all declared as direct dependencies in the openclaw root
package.json and imported by core source code (src/acp/*, src/cron/*,
src/config/*, src/infra/{archive,backup,dotenv,push-web}.ts,
src/markdown/ir.ts, src/plugin-sdk/root-alias.cjs,
src/plugins/jiti-loader-cache.ts, src/process/supervisor/adapters/pty.ts,
etc), but the existing collectMirroredPackageRuntimeDeps allowlist only
covered semver and tslog.

The dynamic collectRootDistMirroredRuntimeDeps scan does pick up
imports that have an extension package.json owner (for example
memory-core declares chokidar, matrix declares jiti and markdown-it).
For deps with no extension owner, or for setups where the owning
extension is not enabled, those imports never make it into the
runtime-deps mirror and Node fails to resolve them at runtime, e.g.:

    Cannot find package 'chokidar' imported from
    .../plugin-runtime-deps/openclaw-<ver>/dist/qmd-manager-...js

Also add a static drift guard test that walks src/ for value imports of
root-package runtime deps and fails when one is neither in
MIRRORED_CORE_RUNTIME_DEP_NAMES nor declared by any extension's
package.json (with an explicit allowlist for known-transitive or
build/type-only imports such as chalk, ipaddr.js, file-type,
proxy-agent, typescript, qrcode). The guard caught @lydell/node-pty
during this change.

Refs #74199.
2026-04-29 07:19:39 -04:00
Peter Steinberger
6b4873d0c1 ci: split plugin contract shards 2026-04-29 11:44:32 +01:00
Peter Steinberger
93d5cd1015 fix: honor configured xhigh thinking compat (#74273)
* fix: honor configured xhigh thinking compat

* test: update agent command model selection mock
2026-04-29 11:35:03 +01:00
Super Zheng
1c45592e62 perf(plugins): add O(1) fast-path for empty plugin loads 2026-04-29 03:04:21 -07:00
Super Zheng
d33c3f7da6 perf(catalog): cache manifest built-in model suppression resolver (#74236)
* perf(catalog): cache manifest built-in model suppression resolver

* fix(catalog): address PR review comments for manifest suppression resolver

* fix(catalog): preserve cached suppression semantics

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-04-29 02:52:26 -07:00
Vincent Koc
412434a450 test(plugins): extend external install contract coverage 2026-04-29 02:48:58 -07:00
Vincent Koc
4b99724a9c test(plugins): isolate config alias scan regression 2026-04-29 02:29:03 -07:00
Vincent Koc
a3519e362f fix(plugins): reuse config alias scans 2026-04-29 02:29:02 -07:00
Vincent Koc
1d61862adb fix(gateway): yield after agent accepted ack 2026-04-29 02:29:02 -07:00
Vincent Koc
24adf2c8e6 fix(plugins): reject malformed channel registrations 2026-04-29 02:29:00 -07:00
Ayaan Zaidi
c211b41f17 perf(plugins): cache bundled alias lookup 2026-04-29 14:09:03 +05:30
Peter Steinberger
14e8a2d00b chore: remove unused internal dead code 2026-04-29 09:34:40 +01:00
Peter Steinberger
7877182b6f fix(gateway): defer missed cron agent startup work 2026-04-29 09:15:54 +01:00
Peter Steinberger
afc4f06ca3 fix(memory): isolate qmd boot refresh 2026-04-29 08:14:08 +01:00