Commit Graph

51350 Commits

Author SHA1 Message Date
Peter Steinberger
1a7669bc63 fix: update fs-safe fallback dependency 2026-05-20 19:35:08 +01:00
Dallin Romney
447a3643c6 fix(errors): dedupe identical messages when traversing error .cause chain (#84556)
Merged via squash.

Prepared head SHA: 46aa27fa12
Co-authored-by: RomneyDa <6581799+RomneyDa@users.noreply.github.com>
Co-authored-by: altaywtf <9790196+altaywtf@users.noreply.github.com>
Reviewed-by: @altaywtf
2026-05-20 21:26:14 +03:00
Neerav Makwana
950e5c8c50 fix(agents): credit delivered subagent completions (#84383) 2026-05-20 14:19:30 -04:00
Aayush Pratap Singh
0af55f971d fix: check billing errors before surfacing rate-limit message (#79489)
Merged via squash.

Prepared head SHA: 2ea757ce8c
Co-authored-by: aayushprsingh <172073271+aayushprsingh@users.noreply.github.com>
Co-authored-by: altaywtf <9790196+altaywtf@users.noreply.github.com>
Reviewed-by: @altaywtf
2026-05-20 20:55:58 +03:00
Peter Steinberger
a13468320c fix: clarify pinned session model status 2026-05-20 15:59:24 +01:00
Peter Steinberger
c8a953af93 fix: keep cron final output over tool warnings 2026-05-20 14:50:50 +01:00
Alex Knight
ac69776330 Add OpenRouter provider routing params (#84579)
Co-authored-by: Alex Knight <15041791+amknight@users.noreply.github.com>
2026-05-20 23:27:34 +10:00
Jason (Json)
48a14e41e2 feat(discord): add realtime voice bootstrap context
Add bounded realtime profile context for Discord realtime voice sessions.
Default to `IDENTITY.md`, `USER.md`, and `SOUL.md`; `voice.realtime.bootstrapContextFiles: []` disables the extra context.
Document the config/SDK surface and refresh generated metadata.

Co-authored-by: FullerStackDev <263060202+fuller-stack-dev@users.noreply.github.com>
2026-05-20 14:13:59 +01:00
googlerest
32fbb9ff01 test(cli): cover parsePort edge cases (#84518)
Summary:
- The PR updates `src/cli/shared/parse-port.test.ts` to cover numeric strings, whitespace-padded strings, fractional strings, invalid suffixes, and safe-integer overflow for `parsePort`.
- Reproducibility: not applicable. This PR adds test coverage rather than reporting a failing runtime behavior. Source inspection confirms the current parser contract and the exact baseline coverage gap on main.

Automerge notes:
- No ClawSweeper repair was needed after automerge opt-in.

Validation:
- ClawSweeper review passed for head 14213cc8f4.
- Required merge gates passed before the squash merge.

Prepared head SHA: 14213cc8f4
Review: https://github.com/openclaw/openclaw/pull/84518#issuecomment-4496552268

Co-authored-by: googlerest <127843198+googlerest@users.noreply.github.com>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>
2026-05-20 13:06:25 +00:00
Moeed Ahmed
9c00268914 fix: honour tool error suppression for mutating tools (#81561)
Merged via squash.

Prepared head SHA: 7462a862be
Co-authored-by: moeedahmed <5780040+moeedahmed@users.noreply.github.com>
Co-authored-by: jalehman <550978+jalehman@users.noreply.github.com>
Reviewed-by: @jalehman
2026-05-20 05:53:15 -07:00
Chunyue Wang
5d775122c1 fix(codex/command-account): respect explicit auth order over lastGood (#84412)
Fixes openclaw#84386. resolveActiveProfileId in extensions/codex/src/command-account.ts returned store.lastGood whenever that profile was still in the resolved order, ignoring rank, so /codex account marked the stale openai-codex:default profile as active after models auth login + models auth order set. Tracks whether the order came from an explicit operator source (store.order / config.auth.order, including the openai alias key), picks the first usable explicit-order profile, and returns undefined when no candidate is eligible so the display surfaces "no working credential" instead of marking a lower-ranked profile active. Runtime selection via resolveCodexAppServerAuthProfileId is unchanged.
2026-05-20 20:02:28 +08:00
Peter Steinberger
99c88629c3 fix(macos): update embedded Peekaboo bridge 2026-05-20 12:58:56 +01:00
Dallin Romney
9a6744baba perf(plugins): scan-scoped package.json cache in discovery (#84302)
* perf(plugins): extend discovery threading to loader, manifest registry, installed-index, and config contracts

Follow-up to #75451. Threads optional discovery?: PluginDiscoveryResult
through the remaining helpers that still call discoverOpenClawPlugins
internally during startup:

- loadOpenClawPlugins / loadOpenClawPluginCliRegistry (src/plugins/loader.ts):
  add discovery? to PluginLoadOptions and consult it before falling back to
  an internal scan at both call sites.

- loadPluginManifestRegistry (src/plugins/manifest-registry.ts): accept
  discovery? as a more ergonomic alternative to the existing candidates? /
  diagnostics? pair; candidates? still wins when both are supplied.

- resolveInstalledPluginIndexRegistry (src/plugins/installed-plugin-index-registry.ts):
  add discovery? to LoadInstalledPluginIndexParams and use it when
  candidates aren't supplied.

- resolvePluginConfigContractsById (src/plugins/config-contracts.ts): add
  discovery? and thread it into the bundled-fallback discovery call.

Add discovery-threading.test.ts asserting each entry point skips its
internal discoverOpenClawPlugins call when discovery is supplied, calls it
when nothing is supplied, and prefers explicit candidates over discovery
when both are present (6 tests, all pass).

discoverOpenClawPlugins remains stateless; sharing is function-scoped per
src/plugins/CLAUDE.md guidance. Backward compatible: every change is
additive (new optional param).

* perf(plugins): drop verbose JSDoc from discovery? params

* perf(plugins): scan-scoped package.json cache in discovery

Adds a per-scan Map<string, PackageManifest | null> threaded through
discoverFromPath/discoverInDirectory/readCandidatePackageManifest, keyed
by the directory's resolved real path. Within one discovery scan, a
plugin's package.json is now read from disk once and reused across the
overlapping discovery code paths (bundled overlay scan, stock-root scan,
source-checkout extensions scan, installed-path scan, global-root scan)
that previously each fired their own read.

The cache lifetime is one scan (created in runPluginDiscovery alongside
the existing realpathCache and seen Set, dies when the scan returns).
discoverOpenClawPlugins remains stateless externally; no persistent
metadata cache.

* perf(plugins): expose raw parsed package.json on PluginCandidate

Discovery already reads each plugin's package.json once and produces a
parsed PackageManifest object before distilling it into metadata via
getPackageManifestMetadata. Currently only the distilled metadata is
kept on the candidate; the full parsed manifest is discarded.

Store the full parsed manifest on rawPackageManifest so downstream
consumers iterating candidates can use it instead of re-reading from
disk. This is the candidate-side groundwork for the scenario-C followup
that routes consumers (bundled-plugin-metadata, bundle-* helpers, etc.)
through the cached field; those consumers currently do their own
directory scans and would need to be refactored to iterate
PluginCandidate arrays before they can benefit.

The field is a frozen-at-discovery-time snapshot, same lifetime semantics
as the existing packageManifest / packageName / packageVersion fields on
PluginCandidate. No new staleness window introduced.

* perf(plugins): make package-manifest cache key trust-aware
2026-05-20 04:57:45 -07:00
Jason (Json)
befb0f3d39 feat(discord): follow configured users in voice
Summary:
- Adds Discord voice followUsers/followUsersEnabled config, metadata, docs, and changelog coverage.
- Makes Discord voice follow configured users across joins, moves, disconnects, admin moves, handoff, bounded reconciliation, transient REST failures, destroy cleanup, and DAVE recovery.
- Adds focused Discord voice/config regression tests and refreshes generated config docs metadata.

Verification:
- node scripts/run-vitest.mjs run --config test/vitest/vitest.e2e.config.ts extensions/discord/src/voice/manager.e2e.test.ts
- node scripts/run-vitest.mjs run --config test/vitest/vitest.extension-discord.config.ts extensions/discord/src/config-schema.test.ts
- pnpm config:channels:check
- pnpm config:docs:check
- pnpm config:schema:check
- pnpm exec oxfmt --check --threads=1 docs/channels/discord.md extensions/discord/src/voice/manager.ts extensions/discord/src/voice/manager.e2e.test.ts src/config/bundled-channel-config-metadata.generated.ts CHANGELOG.md
- git diff --check
- pnpm build
- pnpm check:test-types
- Mac Studio config validate + gateway:watch proof on cf67023fdf; Discord provider started and gateway ready
- Autoreview passed after two actionable findings were fixed

CI notes:
- PR-specific proof is green: check-docs, config-boundary, real behavior proof, check-test-types, OpenGrep, CodeQL, no-tabs, security-fast.
- Remaining broad CI reds match current main failures/noise on unrelated fs-safe Python helper, Windows ACL locale, managed media staging, and dependency guardrail surfaces.

Co-authored-by: FullerStackDev <263060202+fuller-stack-dev@users.noreply.github.com>
2026-05-20 12:49:15 +01:00
Peter Steinberger
d1470360c4 fix: stabilize mac app packaging 2026-05-20 07:35:11 -04:00
Peter Steinberger
94ac563399 build: update dependencies 2026-05-20 12:08:17 +01:00
Gio Della-Libera
cbf72e5e26 feat(policy): add channel conformance checks (#80407)
Summary:
- Add the bundled Policy plugin with policy-backed doctor checks for channel conformance.
- Add `openclaw policy check` attestations, accepted-attestation drift checks, and opt-in doctor repair.
- Add policy CLI docs, generated plugin inventory/reference docs, and changelog credit.

Verification:
- node --import tsx scripts/sync-plugin-versions.ts --check
- pnpm plugins:inventory:check
- pnpm docs:list
- git diff --check origin/main..HEAD
- node scripts/run-vitest.mjs extensions/policy/src/policy-state.test.ts extensions/policy/src/cli.test.ts extensions/policy/src/doctor/register.test.ts src/flows/bundled-health-checks.test.ts src/cli/program/register.maintenance.test.ts
- codex review --uncommitted; accepted finding fixed, reran clean
- codex review --commit HEAD
- GitHub CI for 4e09b067f4: CI, Workflow Sanity, CodeQL, CodeQL Critical Quality, OpenGrep PR Diff, Real behavior proof, Dependency Change Awareness all green; reran failed Windows Node setup job successfully

Co-authored-by: Gio Della-Libera <giodl73@gmail.com>
Co-authored-by: Gio Della-Libera <giodl@microsoft.com>
2026-05-20 11:50:21 +01:00
Peter Steinberger
9c5e8eb495 docs: note GitHub paste preflight 2026-05-20 11:45:19 +01:00
Peter Steinberger
3c8050c44c docs: keep developer tooling out of release tweets 2026-05-20 11:39:46 +01:00
Peter Steinberger
45930457ca docs: keep qa proof out of release tweets 2026-05-20 11:37:51 +01:00
Peter Steinberger
167e73cd5f build: bump bundled Codex harness to 0.132.0 2026-05-20 10:38:35 +01:00
yaoyi1222
110042d840 fix(cron-cli): bound loadCronJobForShow pagination (#83856) (#83989)
Summary:
- Adds a 50-page and advancing-`nextOffset` guard to `loadCronJobForShow`, exports that helper for regression tests, and adds an unreleased changelog entry.
- Reproducibility: yes. Current main is source-reproducible because `loadCronJobForShow` loops while `hasMore` ... ed numeric `nextOffset`; the PR discussion also includes terminal before/after proof for the same CLI path.

Automerge notes:
- No ClawSweeper repair was needed after automerge opt-in.

Validation:
- ClawSweeper review passed for head 7828b4bdae.
- Required merge gates passed before the squash merge.

Prepared head SHA: 7828b4bdae
Review: https://github.com/openclaw/openclaw/pull/83989#issuecomment-4484474655

Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>
2026-05-20 07:19:38 +00:00
Sarah Fortune
ea8f4ebb4d fix(config): accept execApprovals.enabled="auto" in zod schema 2026-05-20 00:16:41 -07:00
Pavan Kumar Gondhi
0c67dc7f82 fix(mattermost): fail closed on missing channel type [AI] (#84091)
* fix: fail closed on missing Mattermost channel type

* addressing codex review

* docs: add changelog entry for PR merge
2026-05-20 12:33:55 +05:30
Pavan Kumar Gondhi
e98760a1bf Recheck rebuilt system.run argv [AI] (#84090)
* fix: recheck rebuilt system run argv

* docs: add changelog entry for PR merge
2026-05-20 12:30:26 +05:30
Gio Della-Libera
67c12e0368 fix(cli): use active node for startup bench scripts (#84451) 2026-05-19 23:21:26 -07:00
Ayaan Zaidi
989e53c20d fix(android): address overhaul review findings 2026-05-20 10:54:08 +05:30
Ayaan Zaidi
bbcac0019b refactor(android): make overhaul UI canonical 2026-05-20 10:54:08 +05:30
Ayaan Zaidi
64b6cafcaa test(android): update gateway hello callback fixtures 2026-05-20 10:54:08 +05:30
Ayaan Zaidi
98f2e568b3 refactor(android): centralize v2 separated list rows 2026-05-20 10:54:08 +05:30
Ayaan Zaidi
c289e3ea87 fix(android): expand v2 settings toggle hit areas 2026-05-20 10:54:08 +05:30
Ayaan Zaidi
c0ac4564f7 fix(android): clarify v2 voice settings action 2026-05-20 10:54:08 +05:30
Ayaan Zaidi
07b28a6dd6 fix(android): gate v2 cron job save action 2026-05-20 10:54:08 +05:30
Ayaan Zaidi
85ef8fb975 fix(android): request v2 capability permissions 2026-05-20 10:54:08 +05:30
Ayaan Zaidi
c885a1c243 feat(android): wire v2 chat image attachments 2026-05-20 10:54:08 +05:30
Ayaan Zaidi
dd772307a3 fix(android): tighten v2 navigation affordances 2026-05-20 10:54:08 +05:30
Ayaan Zaidi
43b03b7621 fix(android): expand v2 model catalog groups 2026-05-20 10:54:08 +05:30
Ayaan Zaidi
9868f4cf29 fix(android): align v2 control affordances 2026-05-20 10:54:08 +05:30
Ayaan Zaidi
d3cf65eb14 fix(android): remove dead v2 chat controls 2026-05-20 10:54:08 +05:30
Ayaan Zaidi
3aefd355c4 fix(android): wire v2 onboarding actions 2026-05-20 10:54:08 +05:30
Ayaan Zaidi
8d492637af fix(android): wire v2 navigation controls 2026-05-20 10:54:08 +05:30
Ayaan Zaidi
5de8f8e8a9 feat(android): polish v2 voice surfaces 2026-05-20 10:54:08 +05:30
Ayaan Zaidi
338a0062c4 feat(android): add v2 chat starters 2026-05-20 10:54:08 +05:30
Ayaan Zaidi
69e646f680 fix(android): prevent provider setup button overlap 2026-05-20 10:54:08 +05:30
Ayaan Zaidi
d41f595c75 feat(android): polish v2 provider setup 2026-05-20 10:54:08 +05:30
Ayaan Zaidi
a9669c0f9f feat(android): polish v2 overview navigation 2026-05-20 10:54:08 +05:30
Ayaan Zaidi
2294c28355 style(android): refine v2 touch rhythm 2026-05-20 10:54:08 +05:30
Ayaan Zaidi
499ccd1522 feat(android): add v2 cron job editor 2026-05-20 10:54:08 +05:30
Ayaan Zaidi
de195645f9 refactor(android): reuse v2 list primitives 2026-05-20 10:54:08 +05:30
Ayaan Zaidi
357e3ecc65 feat(android): add v2 about update status 2026-05-20 10:54:08 +05:30