Commit Graph

34957 Commits

Author SHA1 Message Date
Peter Steinberger
d42b0e043c fix: stage packaged bundled runtime deps externally 2026-04-25 01:58:44 +01:00
Vincent Koc
2d2402cee8 test(plugins): assert legacy channel schema exports 2026-04-24 17:58:04 -07:00
Vincent Koc
3a14a95085 fix(plugins): harden manifest channel metadata 2026-04-24 17:58:04 -07:00
Matt Van Horn
b33eb93aac fix(cron): default missing sessionTarget on load and guard assertSupportedJobSpec (#70367)
* fix(cron): default missing sessionTarget on load and guard assertSupportedJobSpec

* fix(cron): use Object.hasOwn for payload.kind check and log the backfill

Address review feedback on #70367:
- Switch the new payload.kind lookup from `in` to `Object.hasOwn` so
  prototype pollution cannot drive the defaulter (Aisle Low finding).
- Log a warning when a job is auto-defaulted at load time, matching the
  adjacent legacyJobIdIssue pattern so operators can run `openclaw
  doctor --fix` to persist the canonical shape (Greptile P2).

* fix(cron): dedupe sessionTarget backfill warn per jobId and sharpen crash site reference

Address deep-review feedback on #70367:

- The code comment referenced assertSupportedJobSpec as the tick-time
  crash site, but that function is only called from create/patch
  (jobs.ts:607, 686) and manual-run preflight (ops.ts:516). The actual
  on-tick TypeError surfaces in runIsolatedAgentJob (server-cron.ts).
  Update the comment to say so.

- ensureLoaded runs with forceReload:true on every onTimer tick (~60s).
  Before this change, a persistent legacy job missing sessionTarget
  produced one warn line per tick, forever. Add a per-jobId dedupe set
  on CronServiceState (mirroring the existing warnedDisabled flag) so
  the warn fires once per job per process.

- Drop the 'run openclaw doctor --fix' remediation from the warn
  message. Doctor's cron-store migration has no trackIssue entry for
  missing sessionTarget (doctor-cron-store-migration.ts CronStoreIssueKey),
  so doctor --fix on a store whose only defect is missing sessionTarget
  silently returns without writing anything. Point operators at
  jobs.json directly until that gap is closed.

* docs(changelog): note cron session target repair

---------

Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com>
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-04-24 17:57:39 -07:00
Peter Steinberger
c9b9d33451 docs(changelog): mark 2026.4.24 unreleased 2026-04-25 01:56:22 +01:00
Peter Steinberger
5086069c94 fix(cli-runtime): merge user mcp servers 2026-04-25 01:56:22 +01:00
Kei Shingu
b86a04262d fix(cli-runtime): replace overlapping user mcp servers 2026-04-25 01:56:22 +01:00
kei shingu
d8ae63e7a2 test(cli-runtime): add coverage for user mcp.servers merge in prepareCliBundleMcpConfig 2026-04-25 01:56:22 +01:00
kei shingu
61250e2bea fix(cli-runtime): merge user mcp.servers into claude-cli bundle config
prepareCliBundleMcpConfig was not including cfg.mcp.servers when building
the temporary mcp.json that gets passed to claude-cli via --mcp-config.
This meant user-defined MCP servers (e.g. mcp.servers.omi in openclaw.json)
were silently dropped, even though --strict-mcp-config prevents any other
path for those servers to reach the CLI session.

The Pi runtime path (loadEmbeddedPiMcpConfig) already merges cfg.mcp.servers
after the bundle layer. This commit applies the same merge to the CLI runtime
path, with identical precedence: bundle defaults < user mcp.servers <
additionalConfig (loopback). The loopback entry remains last so it cannot be
overridden by user config.

Fixes: user-configured MCP servers not appearing as mcp__<name>__* tools in
claude-cli sessions started by OpenClaw.
2026-04-25 01:56:22 +01:00
Vincent Koc
718dffd2f2 fix(diagnostics): harden capture redaction and discord metadata fetch (#71303) 2026-04-24 17:51:12 -07:00
Peter Steinberger
25a02825a5 test(google-meet): share plugin harness 2026-04-25 01:50:28 +01:00
Gforce10-design
5a202f6f90 fix(auth): bootstrap codex cli credential without clobbering local (#71310)
* fix(auth): bootstrap codex cli credential without clobbering local

readCodexCliCredentialsCached was imported but never registered in
EXTERNAL_CLI_SYNC_PROVIDERS, so overlayExternalAuthProfiles could not
seed openai-codex:default on fresh agents and runtime surfaced
"No API key found for provider openai-codex" even after a successful
codex login.

Register the provider with a new bootstrapOnly flag. Providers flagged
bootstrapOnly are adopted only to fill an empty slot: the overlay skips
them when a local OAuth credential already exists for the profile, and
readExternalCliBootstrapCredential returns null so the refresh path
never replaces the locally stored canonical refresh token with stale
CLI state. Minimax keeps its existing replace-on-expiry behavior.

* test(auth): cover codex cli bootstrap

---------

Co-authored-by: sudol <sudol@A8Max.localdomain>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-04-25 01:50:01 +01:00
Vincent Koc
6d49681a62 docs(changelog): backfill 104 more author credits with expanded handle map 2026-04-24 17:49:39 -07:00
Peter Steinberger
d610e2cc6c feat(browser): support per-profile headless
Co-authored-by: nakamotoliu <nakamotoliu2026@gmail.com>
Co-authored-by: Nakamoto <nakamoto@claude.ai>
2026-04-25 01:49:22 +01:00
Vincent Koc
5ea0ded5a5 docs(changelog): backfill 1471 author credits across all releases via git blame 2026-04-24 17:47:52 -07:00
Peter Steinberger
664b9fe7eb docs: note safe GitHub comment quoting 2026-04-25 01:44:55 +01:00
Peter Steinberger
867b4c2a32 fix(plugins): log runtime deps staging progress 2026-04-25 01:42:54 +01:00
Peter Steinberger
f9207e5d39 test(agents): cover defaults fallback timeout 2026-04-25 01:42:38 +01:00
Peter Steinberger
63dc5089b2 refactor(google-meet): split create browser flow 2026-04-25 01:40:50 +01:00
Peter Steinberger
8a0cb03300 fix(agents): skip empty embedded prompts 2026-04-25 01:39:28 +01:00
Peter Steinberger
ae57a7998e fix(telegram): persist accepted update offsets 2026-04-25 01:35:05 +01:00
Peter Steinberger
7c0549bd9f fix(google-meet): join created meetings by default 2026-04-25 01:31:51 +01:00
Peter Steinberger
d12987d725 fix(agents): fail fast on terminal provider 429s 2026-04-25 01:31:01 +01:00
Peter Steinberger
26bc5e47ee fix(browser): stabilize doctor diagnostics 2026-04-25 01:30:47 +01:00
Vincent Koc
df5abf9a98 docs(changelog): backfill 40 more 2026.4.22 authors via CHANGELOG diff matching 2026-04-24 17:27:45 -07:00
Peter Steinberger
554f93a999 fix(providers): keep minimax chat models text-only 2026-04-25 01:27:34 +01:00
Peter Steinberger
377e254f6a fix(config): avoid env-ref reload restarts 2026-04-25 01:23:15 +01:00
Peter Steinberger
8a490f4509 fix(browser): break doctor client import cycle 2026-04-25 01:22:47 +01:00
Peter Steinberger
4e42a4cfe8 fix(browser): preserve explicit ai snapshot refs
Fixes #62550.

Co-authored-by: ly85206559 <ly85206559@163.com>
2026-04-25 01:20:42 +01:00
Val Alexander
da773175f2 fix(control-ui): keep context usage fresh (#71297)
Patch live session usage metadata into the Control UI session list, coalesce overlapping refreshes, and add a compact action when fresh context usage is high.

Keep session refresh loading separate from session mutation ownership so background refreshes cannot re-enable mutation UI or overwrite delete/restore state mid-flight.

Co-authored-by: Val Alexander <68980965+BunsDev@users.noreply.github.com>
2026-04-25 01:20:12 +01:00
Peter Steinberger
d399ac74f7 fix(slack): hash token cache keys 2026-04-25 01:17:55 +01:00
Vincent Koc
b7c8c53af2 docs(plugins): define config ownership contract
* fix(plugins): flag channel config metadata gaps

* docs(plugins): clarify config ownership
2026-04-24 17:17:10 -07:00
Chris Zhang
de8a00d922 fix(plugins): preserve tokenjuice runtime rule data
Preserve tokenjuice runtime rule JSON under dist/rules/tests during bundled plugin runtime dependency staging while continuing to prune unrelated tests directories.
2026-04-24 17:16:06 -07:00
Peter Steinberger
30aa1f890a feat(browser): expose doctor diagnostics to agents
Co-authored-by: Sean Coley <github@seancoley.me>
2026-04-25 01:15:31 +01:00
Vincent Koc
b5a5b59742 docs(changelog): backfill 2026.4.21 + 2026.4.20 authors (gpt-image-2, presentation SDK, Kimi K2.6, wizard, LINE media, avatar auth, thread routing, YOLO exec, anthropic-messages, DevToolsActivePort) 2026-04-24 17:15:27 -07:00
Vincent Koc
e3cba98f39 refactor(pdf): move document extraction to plugin
* refactor(pdf): move document extraction to plugin

* fix(deps): sync document extract lockfile

* fix(pdf): harden document extraction plugin
2026-04-24 17:15:05 -07:00
Peter Steinberger
915931aa38 fix(agents): use captured cli lifecycle hook runner 2026-04-25 01:14:16 +01:00
Peter Steinberger
b69e3b633b refactor(slack): reuse default write clients 2026-04-25 01:13:55 +01:00
Vincent Koc
492dfdc7f2 docs(changelog): backfill 2026.4.22 authors (WeCom, Matrix DM, Claude CLI verify, LanceDB retry, Codex serviceTier) 2026-04-24 17:12:57 -07:00
Peter Steinberger
61ee67aecc fix(agents): fail empty explicit tool allowlists 2026-04-25 01:11:36 +01:00
Peter Steinberger
107d2b7a09 fix(slack): preserve rapid send ordering
Co-authored-by: nightq <zengwei@nightq.cn>
Co-authored-by: xydt cqh <cui.qianhong@xydigit.com>
2026-04-25 01:11:10 +01:00
Peter Steinberger
5f81147c4d fix: persist embedded runtime context budget 2026-04-25 01:09:45 +01:00
Vincent Koc
59f8a2c3fa docs(changelog): backfill 2026.4.22 authors (streaming STT, onboarding, Pi, Thai, status, transcript locks, uuid, MCP cleanup, Jiti) 2026-04-24 17:09:34 -07:00
Peter Steinberger
db958463f6 fix(codex): emit app-server final chat events (#71293)
Fix live webchat finalization for Codex app-server runs by emitting standard assistant and lifecycle completion events on the global agent event bus, instead of relying on a message-less chat.final fallback.

Replaces #70815. Closes #71183.

Co-authored-by: Lēsa <260982214+lesaai@users.noreply.github.com>
2026-04-25 01:09:11 +01:00
Peter Steinberger
f4add8047b test: relax Docker service command timeouts 2026-04-25 01:07:23 +01:00
Marcus Castro
a580db58ca docs(whatsapp): correct replyToMode values 2026-04-24 21:06:00 -03:00
Coy Geek
8ca66cad68 fix(browser): scope control auth to active gateway mode (#65639)
Browser control now authorizes only the resolved active gateway credential and fails closed when password mode lacks a resolved password.

Also removes the duplicate Slack test-helper middleware stub that kept current CI red after the base rebase.

Fixes #65626.

Co-authored-by: Coy Geek <65363919+coygeek@users.noreply.github.com>
2026-04-25 01:03:39 +01:00
Peter Steinberger
ea74e01ed6 fix(slack): resolve native approval buttons
Co-authored-by: Motoki Maruyama <motoki.maruyama@kiconiaworks.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-25 01:02:51 +01:00
Vincent Koc
e625651de8 feat(plugins): derive setup auth choices
* feat(plugins): derive setup auth choices

* fix(plugins): sanitize derived provider auth choices

* fix(plugins): clean up extension gate regressions
2026-04-24 16:57:39 -07:00
Peter Steinberger
fb80405693 test: fix slack bolt mock middleware 2026-04-25 00:57:09 +01:00