Commit Graph

67697 Commits

Author SHA1 Message Date
qingminlong
c170e91529 fix(terminal): preserve sibling home-prefix paths (#98876)
* fix(terminal): preserve sibling home-prefix paths

* fix(terminal): avoid embedded home path rewrites

* fix(terminal): preserve punctuated sibling paths

* fix(terminal): tighten home path boundaries
2026-07-02 01:11:51 -07:00
Peter Steinberger
c4102f5d67 feat(ios): refine the chat experience (#98953)
* feat(ios): refine the chat experience

* feat(ios): refine the chat experience
2026-07-02 08:40:53 +01:00
qingminlong
a741956448 fix(mattermost): paginate peer directory members (#98877) 2026-07-02 00:40:24 -07:00
Dallin Romney
d32c4cf300 perf(build): canonicalize plugin SDK declarations (#98758) 2026-07-02 00:21:41 -07:00
Ben.Li
cb44f40474 fix(agents): preserve embedded completions usage (#96523)
Co-authored-by: Vincent Koc <25068+vincentkoc@users.noreply.github.com>
2026-07-02 00:07:21 -07:00
Peter Steinberger
be5906e19d fix(cron): restore persistent session targets (#98947)
Cron jobs run in the session they were created from unless the job explicitly requests an isolated fresh session.

Co-authored-by: Peter Steinberger <58493+steipete@users.noreply.github.com>
2026-07-02 07:48:50 +01:00
Peter Steinberger
2913d3aee9 fix(anthropic): restore Fable 5 Vertex simple completions (#98932)
* fix(anthropic): restore Fable 5 Vertex simple completions

* test(agents): satisfy custom API model types

* test(ci): route reliability test from temp helper

* test(agents): satisfy custom API model types
2026-07-02 07:16:39 +01:00
Vincent Koc
4d7d34e6a5 fix(qa-matrix): accept final command preview edits 2026-07-01 23:15:33 -07:00
Ayaan Zaidi
d18817019f fix(agents): unify cli stream output classification
Fixes #98896
2026-07-01 23:14:58 -07:00
Ayaan Zaidi
809bc619c4 fix(process): preserve split utf8 subprocess output 2026-07-01 23:14:58 -07:00
Wynne668
e0970cfec5 fix: backup skips volatile cache paths (#98879)
* fix: skip volatile backup cache paths

* fix(backup): tolerate disappearing volatile files

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-01 23:05:37 -07:00
Vincent Koc
75240f4385 fix(qa-matrix): read account state from sqlite 2026-07-01 22:56:12 -07:00
Masato Hoshino
e845a26fd6 fix(agents): fail fast with attributable reason after MCP stdio session dies mid-run (#98738)
* fix(agents): fail fast with attributable reason after MCP stdio session dies mid-run

Wires MCP Client onclose/onerror during bundle-mcp session creation so a
crashed/exited server flips session.connected instead of staying stale.
Next tool/resource/prompt call throws a domain-specific 'is disconnected'
error immediately instead of surfacing the SDK's generic 'Not connected'.
A disconnected reused session is retired and rebuilt fresh on the next
catalog pass rather than reused, since the SDK chains onclose/onerror
cumulatively on repeat connect() and the stdio transport never clears its
read buffer on an unexpected exit.

* fix(agents): retire a reused MCP session that dies mid-refresh, not just pre-refresh

codex review found: the catch-path retirement in getCatalog()'s per-server
task only covered two cases (fresh session that never connected this pass,
and a non-reused session that failed for any reason) - a reused session
that was healthy when this pass started but disconnects mid-refresh (child
process dies between ensureSessionConnected() returning and
listAllToolsBestEffort() finishing) hit neither branch, so onclose flipped
connected=false but the dead session object stayed in the map until the
next catalog rebuild happened to notice it. Added the missing branch plus
a regression test that kills the child process mid tools/list on a reused
session and asserts the session is purged from the map within the same
refresh (not just fail-fast on tool calls, which already worked).

* fix(agents): retire a dead reused MCP session even across overlapping catalog generations

codex round-2 review found: the mid-refresh retirement branch still
skipped when sharedWithNewerGeneration was true, which protects a
still-alive session another generation is actively using - but once
onclose flips session.connected=false, the transport is dead for every
generation sharing that object, so that guard no longer applies.
Simplified to a single !session.connected branch that always retires
(retireSessionIfCurrent already no-ops safely if a newer generation
replaced the map entry), and dropped the now-write-only
connectedForCatalog local it replaced.

* test(scripts): allow MCP SDK callback suppressions

* fix(agents): retire closed MCP sessions

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-01 22:55:15 -07:00
Vincent Koc
ebb43e2dca test(ci): route cli reliability helper dependency 2026-07-01 22:53:32 -07:00
Ayaan Zaidi
a5bf55d690 refactor(agents): fold assistant string normalization into transcript ingest (#98908) 2026-07-01 22:44:02 -07:00
Ayaan Zaidi
d02d8b1ea5 fix(agents): keep cli live retry artifacts
Fixes #98897
2026-07-01 22:39:24 -07:00
Ayaan Zaidi
52cabf877d fix(agents): recover cli context overflow sessions
Fixes #98897
2026-07-01 22:39:24 -07:00
Ayaan Zaidi
b60803dfaa fix(auto-reply): persist heartbeat cli session bindings
Fixes #98895
2026-07-01 22:39:18 -07:00
Ayaan Zaidi
8939c10d77 fix(agents): handle claude live write timeout rejection
Fixes #98894
2026-07-01 22:39:18 -07:00
rabsef-bicrym
c8dba85b5d fix: keep Telegram outbound context on transcript time (#98769) 2026-07-01 22:15:10 -07:00
Gio Della-Libera
b2c507c5f0 Doctor: expose tool result cap findings (#97500)
* doctor: expose tool result cap findings

* doctor: include inherited tool cap findings

* doctor: align tool cap agent paths
2026-07-01 21:49:59 -07:00
Omar Shahine
8c7ac9b9b9 fix(imessage): native poll vote-cue, echo suppression, and same-sender comment fold
Makes native iMessage polls behave correctly end to end.

What changed:
- Inbound polls render with a numbered-options vote cue so the agent casts a native vote instead of answering the poll in prose.
- poll-vote resolves the poll reference from pollId/pollGuid/messageId and now defaults to the current inbound poll message when the model omits it; still errors when no reference exists.
- poll-vote echo suppression is session-scoped, so the redundant spoken answer is dropped across the separate poll and comment runs.
- A poll's inline-reply caption is folded (not delivered as a standalone question) only when the poll creator and reply sender are both known and equal; unknown/mismatched sender falls through to the normal inbound decision gate, so no inbound reply is silently dropped.

Evidence:
- 64 passing tests in the poll suites (poll-comment, poll-render, actions), incl. sender fail-closed regressions; pnpm build clean.
- Two Codex autoreviews clean (patch is correct); ClawSweeper re-review rated it platinum hermit.
- Live-verified on macOS 26.4.1 on the deployed gateway: poll "What color pill?" -> native vote delivered with a 7333-byte payload, caption folded, zero echo.

Note: vote delivery also depends on the imsg vote-stamp fix (openclaw/imsg#150); OpenClaw ships ahead of imsg per owner decision.
2026-07-01 21:30:29 -07:00
Ayaan Zaidi
e095dc8409 fix(agents): normalize string tool-result replay (#98891) 2026-07-01 21:19:21 -07:00
Dave Nicoll
6e79ca3cbc fix(fal): route grok-imagine and nano-banana-2-lite edits to correct endpoints (#98688)
* fix(fal): route grok-imagine and nano-banana-2-lite edits to correct endpoints

The fal image-generation provider appends '/image-to-image' to any model
that isn't 'openai/gpt-image-*' or 'fal-ai/nano-banana-*' when reference
images are supplied. That's wrong for two models fal serves:

- `xai/grok-imagine-image`: fal 404s on '/image-to-image'. The real edit
  endpoint is '/quality/edit'. The endpoint also expects lowercase
  resolution values ('1k'/'2k' only) and a distinct aspect_ratio enum.

- `google/nano-banana-2-lite`: fal 404s on '/image-to-image'. The real
  edit endpoint is '/edit'. The endpoint does not accept a 'resolution'
  parameter.

Add schema entries for both models so ensureFalModelPath and
applyFalImageGeometry pick the right suffix and body shape. Introduce
resolution allowlist support ('resolutions: readonly string[]') and
lowercase transform ('resolutionCase: "lower"') on the schema; existing
schemas keep their behaviour (nb2 still forwards uppercase resolution
unchanged; flux/gpt-image/nb2/krea untouched). Refactor
ensureFalModelPath to consult schema.appendEditPath instead of hardcoded
prefix checks so future models only need a schema entry.

Tested:
- Existing 49 fal unit tests still pass; added 9 new tests covering the
  two new endpoints and their guard conditions (32 -> 34 tests in the
  image-generation-provider suite).
- Live fal.ai calls confirm both endpoints return 200 with real
  reference images; the buggy old URLs still return 404.

* fix(fal): preserve standard edit routing

* fix(image): apply inferred resolution per model

* fix(image): preserve provider reference limits

* fix(image): resolve reference limits per model

* fix(fal): preserve nano banana family limits

* test(ios): stub generated file list helper

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-01 20:42:25 -07:00
Ayaan Zaidi
6a96bbc7ad fix(telegram): keep timed-out webhook lanes guarded (#98806) 2026-07-01 20:33:38 -07:00
Ayaan Zaidi
2643c8cbfb fix(telegram): stop rate-limiting authenticated webhook traffic 2026-07-01 20:33:38 -07:00
Ayaan Zaidi
ac10e6bff5 fix(telegram): close webhook and evicted probe transports 2026-07-01 20:33:38 -07:00
Ayaan Zaidi
b23500a935 fix(telegram): retry transient webhook startup init errors 2026-07-01 20:33:38 -07:00
Ayaan Zaidi
b7ec2851f3 fix(telegram): spool webhook updates durably before acking Telegram 2026-07-01 20:33:38 -07:00
Ayaan Zaidi
13613ecaf1 fix(telegram): align account inspection default routing 2026-07-01 20:29:18 -07:00
yetval
85771aec05 fix(telegram): honor configured defaultAccount for omitted-account sends and actions
When no accountId was provided, resolveTelegramAccount and resolveTelegramToken
resolved the implicit default account first. Any leftover TELEGRAM_BOT_TOKEN or
top-level channels.telegram.botToken then shadowed the configured
channels.telegram.defaultAccount and default-agent binding, so gateway sends,
heartbeats, and message actions went out through the wrong bot and typically
failed with chat not found in groups the stale bot never joined. Message
actions could also fail with a missing-token error when only the named default
account had a token.

Resolve the configured default account id up front in both optional-account
entry points, matching the nextcloud-talk resolver and createTelegramActionGate.
2026-07-01 20:29:18 -07:00
Vincent Koc
d310b786cf fix(ci): reset SwiftPM state between build retries 2026-07-01 20:26:18 -07:00
Vincent Koc
1f38396239 test(memory): align dreaming corpus promotion expectations 2026-07-01 20:26:18 -07:00
joshavant
8e95e56e2d chore(ios): generate release artifacts locally 2026-07-01 22:05:26 -05:00
Vincent Koc
4a2a97777e test(maturity): derive expected score from source 2026-07-01 19:51:15 -07:00
Vincent Koc
87178b8466 chore(config): refresh documentation baseline 2026-07-01 19:49:38 -07:00
Vincent Koc
1fcce9f1ee test(vercel-ai-gateway): complete guarded fetch fixtures 2026-07-01 19:49:38 -07:00
Vincent Koc
76db9a3376 fix(memory-wiki): preserve guarded collision handling 2026-07-01 19:49:38 -07:00
Mason Huang
5ff247b99e test: prefer auto-cleaning temp dir helper (#93209)
Summary:
- The branch adds `useAutoCleanupTempDirTracker()`, broadens the temp-dir warning reporter to flag new manual helper imports/usages, updates docs, and migrates two script tests to the new helper.
- PR surface: Tests +301, Docs +1, Other +248. Total +550 across 8 files.
- Reproducibility: not applicable. this is test/tooling cleanup, and the changed behavior is exercised through helper/reporter tests and CI evidence rather than a user reproduction path.

Automerge notes:
- PR branch already contained follow-up commit before automerge: test: harden temp dir helper guard
- PR branch already contained follow-up commit before automerge: test: clarify auto cleanup temp dir helper name
- PR branch already contained follow-up commit before automerge: test: cover existing mkdtemp temp dir forms
- PR branch already contained follow-up commit before automerge: test: read staged temp helper source from index

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

Prepared head SHA: 1fdd7d2a9a
Review: https://github.com/openclaw/openclaw/pull/93209#issuecomment-4705653665

Co-authored-by: Mason Huang <masonxhuang@tencent.com>
Approved-by: hxy91819
2026-07-02 02:46:28 +00:00
joshavant
7fa26e088d ci: remove security guard rollout floor 2026-07-01 21:21:31 -05:00
Josh Avant
0cdce79221 docs: update mobile app release messaging (#98843) 2026-07-01 21:11:56 -05:00
Peter Steinberger
313560d5b9 feat(ios): modernize navigation and settings (#98811)
* feat(ios): modernize navigation and settings

* fix(ios): remove obsolete settings helpers

* test(ios): update i18n collector fixture

* test(ios): update i18n collector fixture

* test(ios): update i18n collector fixture
2026-07-02 02:43:49 +01:00
Vincent Koc
cc76e06e7a test(plugins): align release fixtures with runtime contracts 2026-07-01 18:34:53 -07:00
joshavant
080481fec9 Require explicit iOS release versions 2026-07-01 20:24:38 -05:00
Peter Steinberger
c1eee1a41a fix(ci): recover incomplete Swift build caches (#98818) 2026-07-02 02:23:08 +01:00
Yuval Dinodia
db6a3c2e87 fix(memory-wiki): retry transient existing-page reads in wiki_apply and chatgpt import (#98787)
* fix(memory-wiki): retry transient existing-page reads in wiki_apply and chatgpt import

A create_synthesis re-run and a ChatGPT conversations re-import swallowed
every existing-page read error and treated the page as brand-new, so one
transient read failure silently emptied the user's ## Notes block and
dropped hand-added frontmatter. Route both reads through a retry-once
helper that treats only a missing page as new and propagates persistent
failures, matching the ingest and imported-source fix from #98360.

* fix(memory-wiki): preserve fs-safe policy failures

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-01 18:19:49 -07:00
wangmiao0668000666
a7a444e7ef fix(nostr): clear per-relay publish timeout timer to prevent dangling handles (#98720) 2026-07-01 18:10:38 -07:00
Vincent Koc
38442853e1 fix(release): ignore HTML entities in note references 2026-07-01 18:07:08 -07:00
qingminlong
40e02a418c fix(wizard): reject loose gateway port input (#98689)
* fix(wizard): reject loose gateway port input

* fix(wizard): reuse shared gateway port parser
2026-07-01 18:06:21 -07:00
Vincent Koc
1cbcff7c89 test(gateway): isolate live release agent state 2026-07-01 18:02:09 -07:00