Commit Graph

37286 Commits

Author SHA1 Message Date
Neerav Makwana
1106cc7fd2 fix(cli): skip memory eager context warmup 2026-04-28 02:56:56 +01:00
Peter Steinberger
1945389374 test: expose provider media test helpers 2026-04-28 02:52:30 +01:00
Peter Steinberger
7f3dead335 perf: keep gateway cold paths out of startup 2026-04-28 02:50:32 +01:00
Peter Steinberger
2746e2ccef test(telegram): cover handler error boundary 2026-04-28 02:50:03 +01:00
Peter Steinberger
2a3a24ebdc refactor: share media provider asset helpers (#73142)
* refactor: share openai-compatible speech providers

* refactor: tighten openai-compatible speech helper

* refactor: share image generation asset helpers

* fix: keep image helpers off root plugin sdk runtime
2026-04-28 02:44:18 +01:00
Peter Steinberger
4949f23219 docs(changelog): clarify parent CLI memory fix 2026-04-28 02:40:44 +01:00
hclsys
ba80695bba fix(cli): exit 0 when invoking parent commands without a subcommand (#73077)
Several `openclaw <parent>` commands (channels, plugins, approvals, devices,
cron, mcp) were exiting with code 1 when invoked bare, while printing the
same help-style content that `<parent> --help` produces (which exits 0).
This broke `&&` chains and surfaced a misleading
`ELIFECYCLE Command failed with exit code 1.` line under pnpm.

Add a small `applyParentDefaultHelpAction(cmd)` helper in
`src/cli/program/parent-default-help.ts` that attaches a default action
which prints the parent's own help and sets `process.exitCode = 0`. The
helper is a no-op when the parent already has its own action (e.g.
`agents` defaulting to `agents list`), so existing intentional defaults
are preserved.

Apply it to the six core parents listed in #73077.
2026-04-28 02:40:44 +01:00
Peter Steinberger
482c74b724 refactor: remove narrow SwiftLint suppressions 2026-04-28 02:38:44 +01:00
Peter Steinberger
152b9856eb test(ci): update support boundary expectations 2026-04-28 02:38:31 +01:00
Peter Steinberger
2d0cc1ee22 fix(memory): reject empty lancedb embedding config 2026-04-28 02:38:31 +01:00
Peter Steinberger
f8a15a06f2 test(models): drop suppression helper exports 2026-04-28 02:38:31 +01:00
Peter Steinberger
947aae5a99 refactor(models): move suppressions to manifests 2026-04-28 02:38:31 +01:00
Peter Steinberger
c0fdf9923b perf(agents): keep model resolution caches warm 2026-04-28 02:38:31 +01:00
Jochen Roessner
e9be25b554 perf: cache model resolution to avoid repeated plugin-provider loads
On ARM64 devices (e.g. Raspberry Pi 4), resolvePluginProviders takes ~20s
on first call. Three bugs cause this cost to be paid repeatedly:

1. ensureOpenClawModelsJson readyCache fingerprint includes models.json
   mtime. After a write, the stored fingerprint (pre-write mtime) never
   matches again, forcing every caller to re-run planOpenClawModelsJson.

2. readyCache has one entry per file path. Agents with different configs
   (e.g. main agent vs active-memory subagent) overwrite each other's
   entry, so neither benefits from caching.

3. resolveExplicitModelWithRegistry calls shouldSuppressBuiltInModel →
   resolveProviderPluginsForCatalogHooks on every agent run. The internal
   cache key includes the full config, so callers with slightly different
   configs each pay the full provider-load cost.

Fixes:
- Remove modelsFileMtimeMs from fingerprint (bug 1)
- Add noopCache to MODELS_JSON_STATE keyed by (path, mtime) — a noop
  result is config-agnostic, so any caller can reuse it (bug 2)
- Cache resolveExplicitModelWithRegistry by (provider, modelId, agentDir),
  stable for the lifetime of a gateway session (bug 3)

Measured on Raspberry Pi 4 (ARM64):
  active-memory subagent preprocessing: 66-75s → ~3s (warm)
  active-memory total elapsed:           ~96s  → ~14s (warm)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 02:38:31 +01:00
Peter Steinberger
a0c850d188 test: stabilize gateway restart loop signals 2026-04-28 02:37:24 +01:00
Peter Steinberger
3efb444002 fix(discord): skip disabled reaction fetches 2026-04-28 02:36:48 +01:00
Peter Steinberger
7d4da9c610 fix(plugins): ignore inherited npm dry-run for runtime deps 2026-04-28 02:36:48 +01:00
Peter Steinberger
13ff3142bd fix(agents): classify terminal results for fallback 2026-04-28 02:35:51 +01:00
Peter Steinberger
82ca94fdd7 test: curate google live profile signal 2026-04-28 02:32:44 +01:00
Peter Steinberger
43a73d6a31 refactor: separate bundled channel schema surface 2026-04-28 02:31:21 +01:00
Peter Steinberger
1cea04ba0f fix(ci): mock gateway run path helpers 2026-04-28 02:30:39 +01:00
Peter Steinberger
de76ad506c test: stabilize release live e2e lanes 2026-04-28 02:30:36 +01:00
Shakker
d9411f9dc1 perf: reuse startup plugin manifests 2026-04-28 02:29:08 +01:00
Shakker
2aacc4053b refactor: accept supplied plugin manifest registry 2026-04-28 02:29:08 +01:00
Peter Steinberger
8db21cdcde chore: update app Swift package releases 2026-04-28 02:28:05 +01:00
Peter Steinberger
e651809084 perf: slim gateway startup imports 2026-04-28 02:26:27 +01:00
Peter Steinberger
b6a90188e7 test: trim hot test runtime imports 2026-04-28 02:25:55 +01:00
Peter Steinberger
fe15268e5f fix: degrade plugin-local reload invalidity 2026-04-28 02:25:00 +01:00
Peter Steinberger
06a80fa813 fix(ci): use managed temp dir in channel contracts 2026-04-28 02:20:01 +01:00
Peter Steinberger
b891dbb133 test: curate openrouter live profile signal 2026-04-28 02:17:48 +01:00
Peter Steinberger
837c4c5f1b fix: respect external channel owners in doctor blockers 2026-04-28 02:15:43 +01:00
Peter Steinberger
6a338ba67d test(cli): align run-main primary registration expectations 2026-04-28 02:14:27 +01:00
Peter Steinberger
d35ada2f54 refactor: relocate channel contract helpers 2026-04-28 02:14:08 +01:00
Peter Steinberger
a66605bf23 fix(cron): skip isolated runs when local providers are down 2026-04-28 02:12:19 +01:00
Peter Steinberger
4e63f710f1 fix(ci): restore plugin install and tooling checks 2026-04-28 02:09:28 +01:00
Peter Steinberger
7c79f0ac9c fix(telegram): centralize update offset tracking 2026-04-28 02:08:22 +01:00
Peter Steinberger
955f0a692a perf: fast-path gateway foreground startup 2026-04-28 02:07:01 +01:00
Peter Steinberger
6b7886e024 test: refresh memory install config fixture 2026-04-28 02:04:24 +01:00
Peter Steinberger
dc4512ad0c refactor: split channel target test helpers 2026-04-28 02:03:15 +01:00
Peter Steinberger
6c859d8c82 fix(memory-lancedb): use neutral memory host import 2026-04-28 01:59:41 +01:00
Peter Steinberger
53906fd177 test: update run-main env mock 2026-04-28 01:59:25 +01:00
Peter Steinberger
a9bd8bb9b4 fix(gateway): surface clean channel exits 2026-04-28 01:59:10 +01:00
Peter Steinberger
53d213f9cc perf: lazy load hot test imports 2026-04-28 01:57:22 +01:00
Peter Steinberger
f5a48efac5 fix(status): report custom memory plugin status 2026-04-28 01:51:37 +01:00
Peter Steinberger
37ea03dbac fix(memory-lancedb): use scoped config runtime import 2026-04-28 01:50:09 +01:00
Peter Steinberger
75e126ef6a perf: improve gateway startup diagnostics 2026-04-28 01:48:00 +01:00
Peter Steinberger
13d3777cf3 fix(plugins): keep config schema on manifest metadata 2026-04-28 01:47:16 +01:00
Peter Steinberger
45a84b5f95 refactor: expose channel contract test helpers 2026-04-28 01:45:58 +01:00
Peter Steinberger
8d9a2f82a4 fix(gateway): keep bundled channel startup light 2026-04-28 01:44:40 +01:00
Peter Steinberger
983fd775e2 fix(memory-core): stream embedding cache seed during reindex
- stream safe-reindex embedding-cache seeding with SQLite iterate()
- avoid no-op empty-cache transactions and keep regression coverage explicit
- supersedes #73067

Thanks @parkertoddbrooks.
2026-04-28 01:44:03 +01:00