Commit Graph

66965 Commits

Author SHA1 Message Date
github-actions[bot]
3385817658 chore(i18n): refresh native de locale 2026-07-03 19:15:33 +00:00
github-actions[bot]
bf35947eb2 chore(i18n): refresh native pt-BR locale 2026-07-03 19:15:25 +00:00
github-actions[bot]
066e6973b0 chore(i18n): refresh native zh-CN locale 2026-07-03 19:13:55 +00:00
github-actions[bot]
5793f731f5 chore(i18n): refresh native zh-TW locale 2026-07-03 19:13:50 +00:00
Ben.Li
6b253eb341 fix(android): reject IPv6 zone IDs in gateway endpoint URLs (#99570)
* fix(android): normalize IPv6 zone IDs in gateway endpoint hosts

Strip interface zones during endpoint parsing so link-local URLs like
ws://[fe80::1%25eth0] connect using socket-ready literals such as fe80::1.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(android): reject IPv6 zone IDs in gateway endpoint URLs

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(android): reject scoped IPv6 gateway hosts

* chore(android): sync native i18n inventory

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-03 12:12:03 -07:00
Gio Della-Libera
6011c9e16d Expose WhatsApp responsiveness doctor lint findings (#98406)
Adds a default-disabled Doctor lint check for WhatsApp responsiveness pressure while keeping real cleanup in the existing doctor --fix path.

Verification:
- Focused WhatsApp responsiveness/contribution Vitest passed (71 tests).
- Changed-file oxfmt passed.
- Changed-file oxlint with core tsconfig passed.
- SDK surface report passed.
- SDK export sync passed.
- git diff --check passed.
- Selected source CLI proof passed earlier on this head: doctor --lint --json --only core/doctor/whatsapp-responsiveness exited 0, ran 1 check, and did not create <state>/identity/device.json.
- Exact-head hosted checks passed/skipped on 39f003931ff8cd93f945e75bf7a480cf2271c910; older cancelled proof/auto-response runs were superseded by passing current runs.

Maintainer notes:
- ClawSweeper platinum hermit / ready for maintainer review.
- Accepted the opt-in lint check id and warning copy on the PR.
- No public config/plugin/SDK/persisted data contract change; default doctor --lint remains unchanged.
2026-07-03 11:55:10 -07:00
Ben.Li
df1452799b fix(android): preserve numeric invoke error codes (#99591)
* fix(android): preserve numeric invoke error codes

* fix(android): tighten invoke error code parsing

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-03 11:24:50 -07:00
Gio Della-Libera
43a7fd3839 Expose stale plugin runtime symlink doctor lint findings (#98729)
Adds a default-disabled Doctor lint check for stale plugin-runtime symlinks while keeping real deletion in the existing legacy doctor --fix cleanup path.

Verification:
- Focused plugin-runtime-symlink/contribution Vitest passed (65 tests).
- Changed-file oxfmt passed.
- Changed-file oxlint with core tsconfig passed.
- SDK surface report passed.
- git diff --check passed.
- Exact-head hosted checks passed/skipped on 287d2230ee.

Maintainer notes:
- ClawSweeper platinum hermit / ready for maintainer look.
- Accepted the new opt-in lint check id and warning copy on the PR.
- Local prepare wrapper pnpm check still fails on the npm shrinkwrap guard, and the same failure reproduces on current origin/main; treated as baseline local gate noise, not PR-caused.
2026-07-03 10:52:45 -07:00
zhang-guiping
0ad58848b3 fix(telegram): stop duplicate fallback when dispatch fails after final reply
Telegram no longer sends a generic "Something went wrong" fallback after a
final answer was already delivered and a later dispatch/cleanup step failed.
Failures with only partial or no visible output still send the error fallback
and stay retryable.

Related: #87299
Closes #90152
2026-07-03 09:37:48 -07:00
Ayaan Zaidi
48e8965b10 fix(agents): keep cli session binding facts session-stable
Keep CLI session reuse hashes keyed to stable session prompt facts while preserving per-turn room-event message-tool delivery for execution and MCP scoping.

Thread cliSessionBindingFacts from reply assembly through queued/followup CLI runs, make the stable CLI prompt delivery-neutral, and cover production-shaped room-event opts so forced message_tool_only delivery cannot poison binding identity.

Fixes #99372

Release note: Telegram/room-event CLI backends can resume sessions across interactive turns again instead of replaying full history after system-prompt invalidations.
2026-07-03 09:01:26 -07:00
Gio Della-Libera
6638a575d3 Expose legacy plugin dependency doctor lint findings (#98725)
Expose default-disabled Doctor lint findings for legacy plugin dependency state.

The check maps the existing safe cleanup-target detection into structured lint output while keeping real cleanup in the legacy doctor --fix path. Default doctor --lint remains unchanged; explicit --only and --all can include the new warning.

Validation:
- GitHub checks green on head 53c11a6f82
- ClawSweeper: proof sufficient, platinum hermit, ready for maintainer look
- Local post-rebase proof: focused Doctor Vitest, changed-file oxlint, changed-file oxfmt --check, and git diff --check all passed

Maintainer note: WSL maintainer wrapper path is unavailable on this host with Wsl/Service/CreateInstance/0x80072745, so this uses the steerable head-pinned squash path allowed by the current maintainer workflow docs.
2026-07-03 08:45:07 -07:00
Mason Huang
0d2aeb2a1e fix: harden docs map heading rendering (#99099)
Summary:
- The PR changes the docs map generator to escape HTML-significant heading text, regenerates `docs/docs_map.md`, and adds a Vitest regression for HTML-like headings.
- PR surface: Tests +13, Docs 0, Other +10. Total +23 across 3 files.
- Reproducibility: yes. Current main has source headings such as `docs/cli/agents.md:164` with `<id>`, while `docs/docs_map.md:1231` omits it and `scripts/generate-docs-map.mjs:90` strips `<...>` text.

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

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

Prepared head SHA: 261466a2a8
Review: https://github.com/openclaw/openclaw/pull/99099#issuecomment-4866739708

Co-authored-by: Mason Huang <masonxhuang@tencent.com>
Approved-by: hxy91819
2026-07-03 15:36:11 +00:00
Mason Huang
f3eccb0dfd fix: harden native i18n identifier filtering (#99098)
Summary:
- The PR replaces native i18n conditional-branch regex filtering with an exported linear ASCII scanner and adds focused coverage.
- PR surface: Tests +9, Other +36. Total +45 across 2 files.
- Reproducibility: yes. from source inspection: current main routes conditional-branch native literals through the backtracking-prone regex before inventory output. I did not run a timing benchmark against current main.

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

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

Prepared head SHA: 97464c9635
Review: https://github.com/openclaw/openclaw/pull/99098#issuecomment-4866733462

Co-authored-by: Mason Huang <masonxhuang@tencent.com>
Approved-by: hxy91819
2026-07-03 15:28:17 +00:00
Matthew Delprado
235a5c4d74 fix(imessage): recognize bare hex group chat identifiers as chat targets (#99525)
* fix(imessage): recognize bare hex group chat identifiers as chat targets

A 32-char hex iMessage group chat identifier (as returned by `imsg` for
group chats) with no explicit `chat_identifier:` prefix fell through to
E.164 phone-number normalization. normalizeE164 strips non-digit
characters and prepends `+`, turning
`7d5297154d5f436d83dbbdf03fcc8fdd` into `+75297154543683038` -- a
bogus phone number. Cron/announce delivery then reported
`delivered: true` while silently sending to a nonexistent recipient.

Detect bare 32-char hex strings in both the send-path target parser
(extensions/imessage/src/targets.ts) and the outbound delivery-target
normalizer (extensions/imessage/src/normalize.ts) and route them as
chat_identifier targets, consistent with how an explicit
`chat_identifier:<id>` prefix already resolves.

Fixes #89235.

* refactor(imessage): centralize bare chat identifiers

* refactor(imessage): centralize bare chat identifiers

---------

Co-authored-by: Peter Steinberger <peter@steipete.me>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-03 08:19:02 -07:00
snowzlm
ecc486bde2 fix(agents): preserve primitive tool result output (#99526)
* fix(agents): preserve primitive tool result output

* fix(agents): omit primitive inline payloads

* fix(agents): omit primitive inline payloads

---------

Co-authored-by: snowzlm <snowzlm@users.noreply.github.com>
Co-authored-by: Peter Steinberger <peter@steipete.me>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-03 08:16:20 -07:00
pick-cat
b2620d7153 fix(infra): bound jsonl-socket response buffer to prevent OOM (#98130)
* fix(infra): bound jsonl-socket response buffer to prevent OOM

* fix(macos): cap exec host socket output

* fix(macos): satisfy swiftformat for exec limiter

* test(macos): prove exec host output cap on command output

* chore: keep jsonl socket cap scoped to infra

* fix(infra): raise jsonl socket buffer cap

* test(infra): prove jsonl socket cap beats timeout

* ci: rerun jsonl socket buffer bound checks

* fix(macos): cap exec host response output

* test(macos): avoid private exec response fixtures

* fix(macos): satisfy exec output limiter formatting

* fix(macos): avoid static self formatting conflict

* chore: keep jsonl socket guard infra-only

* fix(jsonl-socket): parse complete lines before enforcing the buffer cap

* chore: remove unnecessary return after finish(null)

* fix(infra): frame bounded JSONL socket lines

* fix(infra): frame bounded JSONL socket lines

* style(macos): keep exec limiter patch focused

* style(macos): keep exec limiter patch focused

* style(macos): satisfy exec limiter formatting

* style(infra): satisfy socket loop lint

---------

Co-authored-by: Peter Steinberger <peter@steipete.me>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-03 08:15:47 -07:00
Chen Chia Yang
5342effebc fix(google-meet): force English Meet UI via hl=en so automation works on any locale (#89671)
Summary:
- The branch adds `forceMeetEnglishUi()` for Google Meet URLs, applies it to join/create browser opens, canonicalizes browser-created meeting links, and updates focused Google Meet tests.
- PR surface: Source +18, Tests +19. Total +37 across 6 files.
- Reproducibility: yes. Current main opens raw Meet URLs while the browser automation matches English-only lab ... R body provides after-fix CDP output showing non-English pages render expected English labels with `hl=en`.

Automerge notes:
- PR branch already contained follow-up commit before automerge: chore(tooling): add unused agent-cache-store files to knip optional a…
- PR branch already contained follow-up commit before automerge: fix(google-meet): repair non-Latin mic regex matching boundary
- PR branch already contained follow-up commit before automerge: revert(tooling): preserve current main deadcode allowlist guard
- PR branch already contained follow-up commit before automerge: revert(tooling): perfectly match origin/main deadcode list
- PR branch already contained follow-up commit before automerge: revert: match origin/main deadcode list exactly

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

Prepared head SHA: 880a41b6f0
Review: https://github.com/openclaw/openclaw/pull/89671#issuecomment-4608725456

Co-authored-by: Chen Chia Yang <unayung@gmail.com>
Approved-by: hxy91819
2026-07-03 15:00:34 +00:00
LZY3538
e272da5c55 fix: keep always-on group fallback messages in dispatch (#99506)
* fix(auto-reply): honor always-on plugin fallback groups

* fix(channels): preserve mention policy across bindings

* test(discord): type mention policy dispatch context

* test(discord): type mention policy dispatch context

* fix(whatsapp): preserve effective mention policy

* fix(whatsapp): preserve effective mention policy

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: Peter Steinberger <peter@steipete.me>
2026-07-03 07:26:45 -07:00
github-actions[bot]
0924bee96b chore(i18n): refresh native sv locale 2026-07-03 14:15:37 +00:00
github-actions[bot]
a6a4792098 chore(i18n): refresh native ru locale 2026-07-03 14:14:39 +00:00
github-actions[bot]
37f006725d chore(i18n): refresh native fa locale 2026-07-03 14:13:50 +00:00
github-actions[bot]
a4b51e58d3 chore(i18n): refresh native nl locale 2026-07-03 14:12:51 +00:00
github-actions[bot]
ed5ccda79c chore(i18n): refresh native vi locale 2026-07-03 14:12:11 +00:00
github-actions[bot]
2525078b86 chore(i18n): refresh native th locale 2026-07-03 14:11:06 +00:00
github-actions[bot]
d23c4fdbb5 chore(i18n): refresh native pl locale 2026-07-03 14:10:28 +00:00
github-actions[bot]
f188c664c0 chore(i18n): refresh native id locale 2026-07-03 14:09:21 +00:00
github-actions[bot]
ee9f61d724 chore(i18n): refresh native uk locale 2026-07-03 14:08:44 +00:00
github-actions[bot]
0420aefb1d chore(i18n): refresh native tr locale 2026-07-03 14:07:30 +00:00
github-actions[bot]
a1f6accef4 chore(i18n): refresh native it locale 2026-07-03 14:07:01 +00:00
github-actions[bot]
3db6fb9972 chore(i18n): refresh native ar locale 2026-07-03 14:05:57 +00:00
github-actions[bot]
48c3f4b103 chore(i18n): refresh native hi locale 2026-07-03 14:05:24 +00:00
github-actions[bot]
a775f9f78e chore(i18n): refresh native fr locale 2026-07-03 14:04:20 +00:00
github-actions[bot]
bdc625866b chore(i18n): refresh native ko locale 2026-07-03 14:03:49 +00:00
github-actions[bot]
aabe44f638 chore(i18n): refresh native ja-JP locale 2026-07-03 14:02:38 +00:00
github-actions[bot]
6c4ac0c71d chore(i18n): refresh native es locale 2026-07-03 14:02:16 +00:00
github-actions[bot]
375def8604 chore(i18n): refresh native de locale 2026-07-03 14:00:50 +00:00
github-actions[bot]
12e17ec052 chore(i18n): refresh native pt-BR locale 2026-07-03 14:00:39 +00:00
github-actions[bot]
e31fa360d9 chore(i18n): refresh native zh-CN locale 2026-07-03 13:59:01 +00:00
github-actions[bot]
a60686dbc3 chore(i18n): refresh native zh-TW locale 2026-07-03 13:58:57 +00:00
christopheraaronhogg
ab2761f3a5 improve: make native chat scrolling reader-managed (#98258)
* improve native chat scroll behavior

* add native chat scroll proof harnesses

* fix(android): jump native chat to live content

* fix(mobile): harden reader-managed chat scrolling

* fix(android): preserve prompt anchor through completion

* fix(android): gate follow changes on user scroll

* fix(ios): handle optimistic chat rollback

* fix(mobile): harden reader boundary transitions

* fix(mobile): expose newer content after restore

* fix(android): preserve restored reader identity

* test(ios): prove reader pause and resume

* fix(android): scope restored reader state to session

* chore(i18n): sync native chat inventory

* fix(mobile): harden reader scroll recovery

* chore(i18n): sync native inventory after rebase

---------

Co-authored-by: Chris Hogg <chrishogg@Chriss-Mac-mini-3.local>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-03 06:57:16 -07:00
Jesse Merhi
8c915f0685 feat(signal): add target aliases (#95738)
* feat(signal): add target aliases

* fix(signal): canonicalize alias delivery targets

* fix(signal): harden alias target resolution

* test(signal): cover formatted media aliases

* test(signal): align approval alias proof with request shape

* Reuse Signal alias map for directory listing
2026-07-03 23:40:10 +10:00
Masato Hoshino
153fed790a fix(gateway): declare the dev agent required by the gateway e2e session key (#99520) 2026-07-03 05:30:09 -07:00
Eva
414ecd2b96 Preserve Codex output after missing turn completion (#99217)
* Preserve Codex output after missing turn completion

* fix: narrow Codex completion-timeout output recovery

* test(codex): narrow binding path guard

* fix: narrow Codex completion-timeout output recovery

* test(codex): narrow binding path guard

* fix(codex): preserve id-less post-tool replies

---------

Co-authored-by: Sedrak-Hovhannisyan <264150421+Sedrak-Hovhannisyan@users.noreply.github.com>
Co-authored-by: Eva <eva@100yen.org>
Co-authored-by: Jason (Json) <263060202+fuller-stack-dev@users.noreply.github.com>
2026-07-03 05:07:54 -07:00
Peter Lee
4abdf0f3b5 fix(logging): redact Telegram bot tokens from timeout URLs (#99428)
* fix(net-policy): redact Telegram bot tokens from timeout URLs

* fix(net-policy): extend Telegram bot token redaction to all hostnames

* refactor(net-policy): centralize bot token URL redaction

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-03 05:05:38 -07:00
qingminlong
f5c700bc4b fix(ui): keep landscape composer compact (#98683)
* fix(ui): keep landscape composer compact

* test(ui): cover landscape composer adjunct scroll

* fix(ui): keep active slash option visible

* fix(ui): constrain slash menu keyboard scroll

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-03 05:00:43 -07:00
Jesse Merhi
8abc633cf8 Add Signal status reaction lifecycle (#98791) 2026-07-03 21:42:39 +10:00
github-actions[bot]
0e22e54431 chore(i18n): refresh native sv locale 2026-07-03 11:42:13 +00:00
sheyanmin
d825a6cc8e fix(subagents): match requesterSessionKey when controllerSessionKey differs in list filter (#99410)
* fix(subagents): match requesterSessionKey when controllerSessionKey differs in list filter

The listControlledSubagentRuns filter used a fallback (||) to pick one
key for matching. When controllerSessionKey was set but did not match the
caller's session key, the filter returned false even though
requesterSessionKey could have matched.

Change the filter to OR logic: if either controllerSessionKey or
requesterSessionKey matches the caller key, include the run.

Fixes #75593

* fix(subagents): add braces for lint compliance and real behavior proof

- Add braces around if-return statements to pass eslint(curly)
- Add evidence script verifying OR-match filter behavior

Evidence (3 scenarios, all pass):
  S1: controllerKey=agent:main:main, requesterKey=telegram → 1 result (PASS)
  S2: controllerKey=telegram, requesterKey=agent:main:main → 1 result (PASS)
  S3: both keys unrelated → 0 results (PASS — scope isolation)

🦞 diamond lobster: L2 evidence (isolated tsx + real exports)

Ref. https://github.com/openclaw/openclaw/pull/99410

* fix(subagents): replace evidence scripts with focused regression tests

- Remove evidence/ scripts (failing check-guards per review)
- Add listControlledSubagentRuns test coverage in subagent-control.test.ts
- Three scenarios: controller match, requester match (new fix), scope isolation

Ref. https://github.com/openclaw/openclaw/pull/99410

* refactor(subagents): clarify read visibility ownership

---------

Co-authored-by: sheyanmin <sheyanmin@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-03 04:41:36 -07:00
github-actions[bot]
ba449f240d chore(i18n): refresh native ru locale 2026-07-03 11:40:49 +00:00
NianJiu
d354e9eb2b fix: long mobile media recordings time out (#99455)
* fix node media recording invoke timeouts

* refactor(agents): separate recording timeout budgets

---------

Co-authored-by: NianJiuZst <180004567+NianJiuZst@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-03 04:40:42 -07:00