Commit Graph

11779 Commits

Author SHA1 Message Date
Sergio Cadavid
7134a95c90 fix(memory): report qmd workspace cwd probe failures (#63167) 2026-05-22 22:31:59 +01:00
Peter Steinberger
44d5330993 fix: recover stuck Codex compaction
- Restart the shared Codex app-server client when native server-side compaction times out.
- Retry native compaction once on the fresh app-server while preserving stale-thread cleanup only for `thread not found`.
- Add regression coverage and changelog entry for the preflight compaction recovery path.

Verification:
- `pnpm test extensions/codex/src/app-server/compact.test.ts`
- `env -u OPENCLAW_TESTBOX -u OPENCLAW_TESTBOX_REMOTE_RUN pnpm check:changed`
- `.agents/skills/autoreview/scripts/autoreview --mode local`

CI note: `build-artifacts` is red due inherited latest-main workflow/test drift, reproduced locally outside this PR diff and tracked in the pre-merge PR comment.
2026-05-22 22:30:06 +01:00
Gio Della-Libera
dcc5e45b50 Policy: add gateway exposure checks (#81981)
* feat(policy): add gateway exposure conformance

* fix(policy): align custom bind exposure evidence
2026-05-22 14:18:01 -07:00
in-liberty420
995a02033d fix(slack): surface auth.test failure + normalize explicit-bot mention check (#85101)
When the Slack adapter's startup auth.test call fails (bad token,
transient error, etc.), the bot user id silently stays empty for the
life of the process. The downstream explicit-bot mention check is
`botUserId && mentionedUserIds.includes(botUserId)`, which always
returns false when botUserId is empty. The result is that explicit
<@bot> mentions are silently classified as non-mentions with no log
trace explaining why.

Changes:
- provider.ts: stop swallowing auth.test failures; emit a warn log at
  boot so the degraded state is observable. Empty user_id is treated
  as a failure too.
- prepare.ts + subteam-mentions.ts: export the existing normalizeSlackId
  helper and apply it to both sides of the explicit-bot equality check
  (and to the mentioned-ids list). Real Slack ids are already uppercase,
  so this is a no-op on healthy traffic, but it locks the invariant down
  and removes the asymmetry between collected ids and the ctx bot id.
- prepare.test.ts: add two regression tests pinning the exact symptom:
  positive case (botUserId set -> explicit_bot), negative case
  (botUserId='' -> not explicit_bot, mention_source not explicit_bot).

🤖 AI-assisted.

Co-authored-by: in-liberty420 <in-liberty420@users.noreply.github.com>
2026-05-22 21:26:59 +01:00
Peter Steinberger
4df34cb790 chore(release): bump version to 2026.5.22 2026-05-22 21:25:16 +01:00
Gio Della-Libera
c85feace54 Policy: add secret and auth conformance checks (#81974)
* feat(policy): add secrets auth conformance

* fix(policy): include sandbox ssh secret data

* fix(policy): complete secret input provenance

* fix(policy): cover media request secrets

* fix(policy): satisfy policy lint

* fix(policy): narrow secret conformance evidence

* fix(policy): cover request bearer token secrets
2026-05-22 12:48:14 -07:00
Peter Steinberger
9fae5f7697 test(telegram): await watchdog registration event 2026-05-22 20:15:53 +01:00
Peter Steinberger
7c9127c94d test(telegram): wait for polling watchdog deterministically 2026-05-22 19:50:51 +01:00
Peter Steinberger
7fc691a426 fix(telegram): honor table mode in outbound chunks (#85455) 2026-05-22 18:26:04 +01:00
Vincent Koc
67c56f34c6 chore(deps): refresh npm shrinkwraps
Refresh root and bundled plugin npm shrinkwraps so the shrinkwrap guard passes on main.
2026-05-23 01:02:18 +08:00
Peter Steinberger
bb4d88e557 fix(ui): hide thinking options for non-reasoning models (#85406)
* fix(ui): hide thinking options for non-reasoning models

* test(ui): satisfy thinking selector lint

* chore(deps): refresh generated shrinkwraps

* test(ui): remove redundant thinking selector assertion
2026-05-22 17:35:33 +01:00
Peter Steinberger
933f01cb39 fix(browser): hint WSL portproxy CDP empty replies (#85379)
* fix(browser): hint WSL portproxy CDP empty replies

* build: refresh shrinkwrap metadata after rebase
2026-05-22 17:33:58 +01:00
Peter Steinberger
d22bcfc23a fix(opencode-go): strip Kimi reasoning replay fields (#85377) 2026-05-22 17:13:48 +01:00
Vincent Koc
adc6adccd8 fix(update): detect nested macOS gateway ancestry (#85391)
* fix(update): detect nested macOS gateway ancestry

* fix(release): refresh shrinkwrap for CI npm

* fix(update): inherit gateway runtime pid for update guard
2026-05-23 00:00:38 +08:00
Vincent Koc
21bedd3964 fix(ci): stabilize npm shrinkwrap metadata 2026-05-22 17:50:22 +02:00
Vincent Koc
5cc0dbce86 fix(codex): route node exec through OpenClaw tools
Fixes https://github.com/openclaw/openclaw/issues/85012.\n\nSupersedes https://github.com/openclaw/openclaw/pull/85090 and closes out https://github.com/openclaw/openclaw/pull/83429 as the wrong direction.\n\nVerification before merge:\n- git diff --check origin/main\n- node scripts/run-vitest.mjs extensions/codex/src/app-server/run-attempt.test.ts\n- codex review --base origin/main\n\nNote: the GitHub Real behavior proof check on this maintainer PR was a maintainer bypass, not the live Linux gateway/container plus macOS node proof. User approved merge with this caveat preserved on the PR thread.
2026-05-22 23:43:24 +08:00
Vincent Koc
dcd98bf1ef test(qa-lab): report scenario pack coverage 2026-05-22 22:35:31 +08:00
Vincent Koc
d70dc4be19 fix(plugins): drop stale tlon tool contract 2026-05-22 16:32:09 +02:00
Bryan P
f9d35dc681 fix(codex): deliver native subagent completions
Deliver Codex-native subagent completions through the generic plugin harness task runtime.

Proof:
- Autoreview clean on final branch.
- Testbox changed gate: tbx_01ks80eqs7d2e3jq3p99zbm4wd, pnpm check:changed, exit 0.
- Live Codex harness: tbx_01ks80p4ky32sqv2ksan2p0w0q, codex/gpt-5.5 API-key auth, native parent/child bridge tokens observed, exit 0.

Co-authored-by: bryanpearson <bryanmpearson@gmail.com>
2026-05-22 15:28:46 +01:00
Josh Lehman
cff5244a5b feat: add context-engine host capability requirements (#84994)
* feat(context-engine): add host capability requirements

* fix(context-engine): advertise pi host capabilities

* fix: repair incompatible context engine slots
2026-05-22 10:28:08 -04:00
Vincent Koc
9d24fde283 fix(release): keep shrinkwrap pinned to pnpm lock 2026-05-22 16:21:52 +02:00
Vincent Koc
fe7d13ca84 test(google): narrow web search fake timers
Narrow Google web search freshness tests to fake Date only.
2026-05-22 22:19:04 +08:00
Peter Steinberger
29118a0f0f test(qa): tolerate slow gateway rpc startup 2026-05-22 15:10:38 +01:00
Vincent Koc
513195b462 fix(diagnostics): surface async queue drops 2026-05-22 22:01:41 +08:00
Peter Steinberger
0def3e20e4 test(release): align prerelease validation 2026-05-22 14:43:36 +01:00
Peter Steinberger
04ebdc6da5 test(release): align prerelease validation baselines 2026-05-22 14:15:46 +01:00
Peter Steinberger
c3531fcd7b fix(codex): skip native web search transcript mirroring (#85346)
* fix(codex): skip native web search transcript mirroring

* test(codex): type transcript snapshot assertion
2026-05-22 14:14:01 +01:00
Vincent Koc
2b396131e4 test(qa-lab): add bus tool trace scenario 2026-05-22 20:12:49 +08:00
Peter Steinberger
9914e25638 fix: opt acpx out of bundled runtime deps 2026-05-22 12:56:10 +01:00
Peter Steinberger
8b0537c409 test: refresh shrinkwrap after rebase 2026-05-22 12:56:10 +01:00
Peter Steinberger
fcecbd8655 fix: opt codex out of bundled runtime deps 2026-05-22 12:56:10 +01:00
Peter Steinberger
976da39038 fix: publish explicit plugin bundled dependencies 2026-05-22 12:56:10 +01:00
Peter Steinberger
3784270670 chore: refresh shrinkwrap metadata 2026-05-22 12:56:10 +01:00
Peter Steinberger
de022bb69d feat: bundle plugin npm dependencies 2026-05-22 12:56:10 +01:00
Vincent Koc
0d28040092 fix: honor overrides in npm shrinkwrap generation 2026-05-22 12:56:10 +01:00
Vincent Koc
b2dc4492f0 chore: refresh shrinkwrap for Testbox npm 2026-05-22 12:56:10 +01:00
Peter Steinberger
b6c8807ca0 chore: add shrinkwrap to plugin npm packages 2026-05-22 12:56:10 +01:00
Vincent Koc
fda0baf98d test(qa-lab): report live transport coverage lanes 2026-05-22 19:31:32 +08:00
clawsweeper[bot]
77a1b7625d fix: preserve Google Gemini 3 cron thinking (#85300)
Summary:
- The branch adds a Google provider thinking-policy resolver and opt-in profile flag, updates shared thinking validation and cron/proof-policy tests, and adjusts ClawSweeper proof parsing.
- Reproducibility: yes. source-reproducible: current main applies the generic off-only profile before provider ... figured thinking through that resolver. I did not execute a live systemd cron run in this read-only review.

Automerge notes:
- PR branch already contained follow-up commit before automerge: fix: preserve Google Gemini 3 cron thinking

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

Prepared head SHA: a6cd2e826e
Review: https://github.com/openclaw/openclaw/pull/85300#issuecomment-4517662575

Co-authored-by: Neerav Makwana <261249544+neeravmakwana@users.noreply.github.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
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-22 11:21:57 +00:00
Peter Steinberger
c9a0f03dd7 feat(plugin-sdk): add generic channel poll sender (#85299)
* feat(plugin-sdk): add generic channel poll sender

* test(channels): follow durable capability list

* test(channels): update poll capability expectations

* fix(channels): normalize poll receipt parts
2026-05-22 12:16:07 +01:00
Krzysztof Probola
8523e0930e fix(codex): keep interrupted turns visible-answer eligible (#84494)
* fix(codex): keep interrupted turns visible-answer eligible

* docs(changelog): note codex interrupted recovery

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-05-22 18:22:20 +08:00
Vincent Koc
beccdde5bf fix(qa): isolate patched suite scenarios 2026-05-22 10:59:23 +02:00
吴杨帆
a80476fbe9 fix(telegram): preserve fenced code languages (#85209)
Co-authored-by: wuyangfan <yangfan.wu@succaiss.com>
2026-05-22 09:59:06 +01:00
Sergio Cadavid
1b0a5d1627 fix(openai): preserve codex gpt-5.5 image input (#85095) 2026-05-22 09:58:43 +01:00
Noah
fb61de8c88 fix(gemini): strip sub-second precision from web_search time_range_filter (#85071)
* fix(gemini): strip sub-second precision from web_search time_range_filter

Gemini's google_search.time_range_filter rejects any non-zero fractional
seconds with "[FIELD_INVALID] Granularity of nano is not supported", even
though the underlying google.protobuf.Timestamp type accepts 0/3/6/9
fractional digits per its public spec. The grounding endpoint enforces a
stricter rule than the underlying type.

Date.prototype.toISOString() always emits millisecond precision, so every
freshness call (and any date_after/date_before call hitting the "now"
fallback for endTime) failed with the above 400 after #66498's fix shipped
in 2026.5.19.

Introduce toGeminiTimeRangeTimestamp() which strips the fractional-second
component before serializing, and route all four timeRangeFilter timestamp
sites through it. isoDateExclusiveEnd happens to produce all-zero
fractional today (so Gemini accepts it), but routing it through the helper
keeps the contract uniform and resilient to future changes.

Why this slipped past the original CI: the existing freshness test used
vi.setSystemTime(new Date("2026-04-15T12:00:00Z")), which always
serializes back as ".000Z" — the one fractional form Gemini happens to
accept. Wall-clock new Date() in production always has non-zero ms. The
new test uses setSystemTime(new Date("2026-04-15T12:00:00.123Z")) to
exercise the realistic case.

Verified empirically against the live Gemini REST API:
  ".123Z" → 400 "Granularity of nano is not supported"
  ".000Z" → grounded content (the one fractional form accepted)
  "Z"     → grounded content

Fixes #85061.

* test(gemini): use realistic non-zero ms in existing freshness test

The original test set the fake clock to a moment with zero fractional
seconds, so toISOString() produced ".000Z" — the one fractional form
Gemini's google_search.time_range_filter happens to accept. Wall-clock
new Date() in production produces non-zero ms, which Gemini rejects.

Bumping the fake time to .123Z makes the existing test exercise the
realistic case alongside the dedicated regression test.

---------

Co-authored-by: Noah R <Noerr@users.noreply.github.com>
2026-05-22 09:58:29 +01:00
Vincent Koc
9bd97d2c60 test(qa-lab): remove generic evidence wording 2026-05-22 16:54:04 +08:00
Pavan Kumar Gondhi
ea5f2abb48 fix(integrations): enforce channel read target allowlists [AI] (#84982)
* fix: enforce message read target allowlists

* addressing review-skill

* addressing review-skill

* addressing review-skill

* addressing review-skill

* addressing codex review

* addressing codex review

* addressing codex review

* addressing ci

* addressing ci

* docs: add changelog entry for PR merge
2026-05-22 14:11:06 +05:30
Peter Steinberger
23961fe472 fix(codex): bound app-server client-close retries
Co-authored-by: VACInc <3279061+VACInc@users.noreply.github.com>
2026-05-22 09:37:35 +01:00
Peter Steinberger
e201fbfbd2 fix: preserve xAI web search credential fallback (#85182) 2026-05-22 08:49:53 +01:00
fuller-stack-dev
27088c6919 fix: use active agent auth for xai web search 2026-05-22 08:49:53 +01:00