Commit Graph

38217 Commits

Author SHA1 Message Date
Val Alexander
1424982792 fix(ui): keep assistant avatar overrides authoritative
Summary:
- Make browser-local assistant avatar overrides win over stale missing IDENTITY.md avatar metadata.
- Show the selected assistant image in Personal settings and chat instead of a false File not found state.
- Add focused Control UI coverage for assistant avatar override and clear behavior.

Validation:
- pnpm test ui/src/ui/app-render.assistant-avatar.test.ts ui/src/ui/views/config-quick.test.ts ui/src/ui/controllers/assistant-identity.test.ts -- --reporter=verbose
- pnpm tsgo:core:test
- pnpm deadcode:dependencies
- pnpm deadcode:unused-files
- CI green on PR #74260
2026-04-29 07:02:01 -05:00
Peter Steinberger
49a6bfe601 ci: keep codex cli live smoke on fast tier 2026-04-29 13:01:44 +01:00
Squirbie
94a85e77de fix(discord): disambiguate allow-from DM targets (#74303)
* fix(discord): disambiguate allow-from DM targets

* test(discord): align allowFrom precedence

* docs(discord): clarify allowFrom id forms

* fix(discord): align allowFrom precedence

---------

Co-authored-by: 따온이네 맥북프로 <tulisy@ttaon-ine-ui-MacBookPro.local>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-04-29 13:01:28 +01:00
Peter Steinberger
4f540c703f fix(telegram): warn on stale polling status 2026-04-29 12:58:41 +01:00
Peter Steinberger
39f810911c refactor: convert parallels smoke scripts to typescript 2026-04-29 12:53:58 +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
Peter Steinberger
fc49f94ccf test(gateway): drop stale sessions helper allowlist 2026-04-29 12:48:25 +01:00
Peter Steinberger
84d8d5d5e7 test(gateway): name sessions helper for deadcode guard 2026-04-29 12:47:25 +01:00
Peter Steinberger
7214b40a7b test: allowlist split session test helper 2026-04-29 12:44:27 +01:00
Peter Steinberger
1fb58ca5ee fix(telegram): recover transient polling and reply sends 2026-04-29 12:42:31 +01:00
Peter Steinberger
027337df79 test: fix github copilot discovery contract mock 2026-04-29 12:41:24 +01:00
Vincent Koc
c357235fe6 docs(memory): document active-memory circuit breaker config and lancedb memory query CLI
- docs/concepts/active-memory.md: extend the "Useful tuning fields" config
  table with the new `config.circuitBreakerMaxTimeouts` and
  `config.circuitBreakerCooldownMs` keys (with their schema-declared ranges
  and defaults) added by 89cd2b6362, so operators tuning Active Memory
  recall after consecutive timeouts can find the knobs alongside
  `cacheTtlMs`.
- docs/plugins/memory-lancedb.md: extend the "Commands" section with the
  new `openclaw memory query` subcommand 6b44dce0c8 registered when
  memory-lancedb is the active memory plugin, including the `--cols`,
  `--filter`, `--limit`, and `--order-by` options and the safety bounds
  (200-character filter cap, sanitized character allowlist, positive
  integer limit, in-memory order-by).
2026-04-29 04:41:06 -07:00
Peter Steinberger
0207f9ceec refactor: split gateway sessions tests 2026-04-29 12:40:50 +01:00
Peter Steinberger
f6c0dde1b3 test(ci): follow Parallels workspace seed helper 2026-04-29 12:40:44 +01:00
Peter Steinberger
de0f54b54a test(security): isolate windows acl user fallback 2026-04-29 12:36:28 +01:00
Peter Steinberger
1446069707 ci: speed up release live smoke retries 2026-04-29 12:33:52 +01:00
Peter Steinberger
d8b9ace39c fix(ci): repair github copilot setup types 2026-04-29 12:31:17 +01:00
Peter Steinberger
d30ba5351e docs: update clawsweeper gate names 2026-04-29 12:27:15 +01:00
vinoyang
96dff27808 feat(memory-lancedb): support Chinese memory trigger keywords (#70040) 2026-04-29 19:25:29 +08:00
Peter Steinberger
f79553bef6 fix(auth): scope external CLI auth status overlays (#74156)
* fix(auth): scope external CLI auth status overlays

* fix: pass external auth config to overlays

* fix(auth): keep no-prompt CLI reads file-only

* docs: update clawsweeper app wording
2026-04-29 12:23:50 +01:00
Peter Steinberger
8f6c72823e fix(ci): repair main typecheck after merges 2026-04-29 12:22:42 +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
dc9f1b8525 fix(telegram): honor managed proxy env 2026-04-29 12:18:49 +01:00
Logan Ye
89cd2b6362 feat(active-memory): add timeout circuit breaker to skip recall after consecutive failures (#74054) (#74158) 2026-04-29 07:18:43 -04:00
Ayaan Zaidi
d9c4fcf67d fix: surface GitHub Copilot models in configure (#74276) 2026-04-29 16:48:18 +05:30
Ayaan Zaidi
42b352c57e fix(github-copilot): publish model catalog 2026-04-29 16:48:18 +05:30
Ayaan Zaidi
1f9fafb288 fix(configure): use manifest model catalogs in picker 2026-04-29 16:48:18 +05:30
Ayaan Zaidi
22c42b6b30 fix(github-copilot): reuse existing auth profiles 2026-04-29 16:48:18 +05:30
Roger Deng
d4e52f4542 fix(tui): resync streaming watchdog after reconnect (#74224)
* fix(tui): resync streaming watchdog after reconnect

* fix(tui): keep reconnect history fallback armed

* fix(tui): tighten reconnect watchdog recovery
2026-04-29 07:17:18 -04:00
Logan Ye
d2db67e693 fix(cron): catch croner parse errors in cron.add and cron.update handlers (#74193)
* fix(cron): catch croner parse errors in cron.add and cron.update handlers

* fix(cron): narrow catch to TypeError/RangeError only; add braces for linter
2026-04-29 07:16:37 -04:00
Logan Ye
2aa6abddbe fix(memory): add LIKE fallback when FTS5 MATCH throws and log silent search errors (#74175)
* fix(memory): add LIKE fallback when FTS5 MATCH throws and log silent search errors

When searchKeyword FTS5 MATCH fails (e.g. unicode61 tokenizer rejects
certain query patterns), the search now falls back to a LIKE-based query
instead of silently returning zero results. The four .catch(() => [])
sites in the search orchestrator now log warnings so failures are
visible in diagnostics.

Fixes #74036

* fix(memory): split LIKE fallback into per-token clauses and log MATCH errors
2026-04-29 07:16:32 -04:00
Logan Ye
ef7c528c8a fix(agents): recognize flat JSON billing payloads and snake_case error codes (#74188)
* fix(agents): recognize flat JSON billing payloads and snake_case error codes

Two independent fixes for billing error detection:

1. isErrorPayloadObject/parseApiErrorInfo now recognize flat JSON like
   {"error":"string_code","message":"..."} where error is a string code
   at the top level, not just nested {"error":{"type":"...","message":"..."}}
   envelopes.

2. isBillingErrorMessage now matches "insufficient_balance" (underscore)
   and "Insufficient MBT balance" (one word between insufficient/balance)
   via two new patterns in the billing pattern list.

Together these prevent raw JSON from leaking to user-facing chat when
providers return 402-style flat payloads.

Fixes #74079

* fix(agents): remove redundant billing pattern and fix misleading regex comment
2026-04-29 07:15:45 -04:00
Peter Steinberger
1f8ccf2d2a refactor(gateway): reuse chat state registries 2026-04-29 12:14:59 +01:00
Peter Steinberger
34ec184dcb refactor: reuse shared dedupe helpers 2026-04-29 12:14:59 +01:00
Peter Steinberger
81ad827380 refactor(plugin-sdk): extract shared dedupe helpers 2026-04-29 12:14:59 +01:00
bitloi
dce2513db2 fix(agents): preserve CLI wake-up session metadata (#74171)
* Fix CLI wake-up resume metadata

* Rerun CI

* ci: re-trigger parity gate
2026-04-29 07:14:48 -04:00
Peter Steinberger
1d494af03a refactor: simplify gateway and e2e test helpers 2026-04-29 12:14:19 +01:00
Peter Steinberger
9d1c5a77c2 fix: add vercel ai gateway thinking profile
Adds a Vercel AI Gateway provider thinking-profile resolver for trusted OpenAI and Anthropic upstream refs, preserving catalog compat fallback for unsupported/base-only refs.

Includes provider tests, docs, and changelog coverage. Supersedes #41561.

Co-authored-by: Zcg2021 <80769518+Zcg2021@users.noreply.github.com>
2026-04-29 12:13:20 +01:00
Vincent Koc
6d7a77dcf9 fix(tui): recover stale streaming status after unbound final (#73749)
* fix(tui): clear stale streaming after unbound final events

* fix(clownfish): address review for ghcrawl-156749-autonomous-smoke (1)

* fix(tui): address stale streaming review
2026-04-29 04:12:25 -07:00
Peter Steinberger
77a5d82e64 test(ci): align telegram live package assertion 2026-04-29 12:06:57 +01:00
Peter Steinberger
fce62c6129 fix(ci): classify gateway agent helper as test-only 2026-04-29 11:59:44 +01:00
Peter Steinberger
bdcd543ed7 fix(gateway): bypass proxies for localhost control plane 2026-04-29 11:59:33 +01:00
Peter Steinberger
af31fc938a ci: fix ClawHub plugin peer fixture 2026-04-29 11:58:32 +01:00
Peter Steinberger
e6cd90e3fd fix(agents): keep OAuth auth read-through 2026-04-29 11:54:28 +01:00
Vincent Koc
21a92ea0f6 fix(whatsapp): recover group inbound after reconnect churn
Repair WhatsApp group inbound recovery after repeated reconnect churn while keeping the fallback scoped to reconnect metadata.

Canonical issue: #66920. Related evidence: #7433, #63855, #70856.

Thanks to legonhilltech-jpg, octopuslabs-fl, Kanorin-chan, and stuswan for the reports and reproduction details.
2026-04-29 03:54:18 -07:00
Peter Steinberger
4f73baf7d7 refactor(test): split e2e fixture helpers 2026-04-29 11:49:45 +01:00
Deepak Jain
0c9f84451a feat(config): add reasoningDefault to agents.defaults
Add reasoningDefault support under agents.defaults and preserve the existing per-agent/session/inline override order.

Includes authorization gating for configured reasoning state, /status coverage, config schema/docs baseline updates, and regression tests for the reply and status paths. Also carries the related cron startup-run preservation fix and CI test stabilization needed for this PR branch.

Validated locally with pnpm check:changed, the focused Vitest bundle for touched gateway/cron/auto-reply/plugin-sdk/tooling tests, pnpm config:docs:check, and git diff --check. GitHub checks are green on the merged head; Greptile latest visible review is 4/5 with no P0/P1 findings.
2026-04-29 05:47:18 -05:00
Peter Steinberger
7be65cd798 test: cover session-scoped model overrides (#74265) 2026-04-29 11:46:53 +01:00
Val Alexander
e5a5ea1072 fix(ui): make control prompts real modals
Introduce a native dialog-backed Control UI modal primitive and migrate the exec approval, gateway URL confirmation, and dreaming restart confirmation prompts to it.

The modal primitive provides aria-modal semantics, shadow-root-local labels/descriptions, focus trapping, safe initial focus, Escape cancellation, and focus restoration while preserving the existing prompt content and decision semantics.

Validation:
- pnpm lint --threads=8
- pnpm --dir ui test src/ui/components/modal-dialog.test.ts src/ui/views/exec-approval.test.ts src/ui/navigation.browser.test.ts
- pnpm test:ui
- pnpm exec oxfmt --check --threads=1 ui/src/ui/components/modal-dialog.ts ui/src/styles/config-quick.test.ts
- git diff --check

CI note: checks-node-core-support-boundary is failing in test/scripts/docker-build-helper.test.ts on an unrelated package-acceptance assertion; the failing files are identical to origin/main and outside this UI-only PR.
2026-04-29 05:46:50 -05:00
Peter Steinberger
1dac6ac4c6 ci: retry transient live provider flakes 2026-04-29 11:44:42 +01:00