Commit Graph

66965 Commits

Author SHA1 Message Date
Shakker
2a02379e7d fix: preserve sidebar session position 2026-07-06 16:09:44 +01:00
vyctorbrzezowski
a03c828cad fix(ui): keep sidebar session order stable 2026-07-06 16:09:44 +01:00
Vincent Koc
0ecfc522db refactor(ui): trim unused type surface (#100952)
Fixes #100951
2026-07-06 08:04:18 -07:00
Peter Steinberger
fbf574ad9d perf(memory): skip FTS-only plugin discovery 2026-07-06 11:02:05 -04:00
Peter Steinberger
aa1929ccb0 feat(control-ui): multi-pane split view for chat (#100754)
* feat(control-ui): add multi-pane split view to chat

* fix(control-ui): boot classic chat pane without fabricated session key

* fix(control-ui): thread per-pane composer state into session goal pill
2026-07-06 16:01:51 +01:00
lsr911
428ee12423 fix(agents): avoid shell snapshot stdout pipe failures (#100744)
* fix(agents): suppress unhandled stdout stream errors in shell-snapshot runShell

Signed-off-by: 廖石荣 0668000909 <liao.shirong@xydigit.com>

* proof: rewrite to exercise production shell-snapshot with injected stream errors

Signed-off-by: 廖石荣 0668000909 <liao.shirong@xydigit.com>

* fix(agents): avoid unused shell snapshot stdout pipe

* chore: refresh CI after mainline drift

---------

Signed-off-by: 廖石荣 0668000909 <liao.shirong@xydigit.com>
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-06 08:01:11 -07:00
Peter Steinberger
538d4eeb77 feat(ios): hide thinking-level control for models without reasoning support (#100875) 2026-07-06 15:59:03 +01:00
Peter Steinberger
04b5d627a4 chore(swabble): stop tracking Package.resolved clobbered by Xcode resolution (#100961)
Xcode syncs the iOS project supergraph pins (ElevenLabsKit, WebRTC, cmark,
swift-markdown) into the local swabble package's Package.resolved on every
resolve, leaving permanent dirty-worktree noise. Match the existing
OpenClawKit convention: ignore the file. Reproducibility is unaffected -
swabble's only runtime dependency is exact-pinned (Commander 0.2.2) and CI
cache keys hash Package.swift + Sources, not this file.
2026-07-06 15:58:47 +01:00
Peter Steinberger
1e27467ab0 docs: extend showcase with fresh community projects
Adds 12 community cards sourced from Discord (#skills, #general,
shell-society) and the web: Dropage deploy, anti-scam URL checker,
product-design skill trio, miab-broker, lite-mode, ClawEval,
Music Craft, gardening back office, Obsidian second brain,
family history bot, Action Button walkie-talkie, and Clinch.
All links verified live; oxfmt 0.57.0 --check passed (worktree
lacks node_modules, hook bypassed after proof).
2026-07-06 07:56:14 -07:00
Vincent Koc
1f49d94bb2 test(live): wait for terminal transcript projection 2026-07-06 07:55:47 -07:00
rhclaw
0251e8ef7f fix(browser): preserve HTTP status in node-proxied browser errors (#89086)
* fix(browser): preserve HTTP status in node-proxied browser errors

The node browser proxy (runBrowserProxyCommand) collapsed a >=400 browser-route
response into new Error(<body.error>), dropping the HTTP status. That error
crosses the node.invoke boundary as a plain string (Error properties are not
preserved over the RPC), so the gateway's stale-target retry classifier — which
keys off a leading <status>: token (msg.includes("404:") && msg.includes("tab
not found")) — never matches a node-proxied "tab not found". The drop-targetId
retry never fires and the stale-targetId error surfaces to the agent instead.

Prefix the status onto the message ("404: tab not found", "403: action
targetId must match request targetId") so the existing gateway classification
and retry work through the node proxy. Pure formatting change in the >=400
branch; validation/timeout error paths are untouched.

Tests: extensions/browser invoke-browser suite — 14/14 pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(browser): harden node proxy status errors

* docs(changelog): credit browser proxy status fix

* chore: defer browser proxy release note

---------

Co-authored-by: rhclaw <260109027+rhclaw@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-06 15:55:39 +01:00
Peter Steinberger
d375d349c8 feat(android): add in-chat model picker with favorites and recents (#100798) 2026-07-06 15:54:19 +01:00
Peter Steinberger
83f0527724 feat(ios): word-paced fade-in for streaming assistant prose (#100884) 2026-07-06 15:50:58 +01:00
simonusa
7cdbfc9649 fix(agents): distinguish terminal aborts from retryable failures (#60388) (#62682)
* fix(agents): terminal-abort coverage beyond #87085's isTerminalAbort (closes #60388)

PR #87085 landed the base isTerminalAbort(signal) check (TimeoutError /
ClientDisconnectError on signal.reason) plus abortSignal threading through
the model-fallback and chat-side callers. This change adds the coverage that
PR #87085 did not include:

- ClientDisconnectError class + wiring in http-common.ts so the
  reason.name === "ClientDisconnectError" branch PR #87085 added is actually
  reachable (upstream watchClientDisconnect still aborts bare).
- cron run-budget string reasons (prefix match) — cron timer aborts with a
  plain string, which the Error-only base check skips.
- .cause-chain walking + isTerminalAbortFromError gated on the
  OPENCLAW_ABORTABLE_WRAPPER marker, for the embedded run-budget timer that
  aborts a private controller (not the caller signal).
- compaction-path abortSignal forwarding (compactEmbeddedPiSessionDirect).
- timedOutByRunBudget plumbing through attempt/failover-policy/assistant-failover
  so run-budget timeouts skip the fallback chain and wasted compaction.

* fix(agents): preserve wrapped restart aborts

* refactor: dedupe terminal abort classification

---------

Co-authored-by: Altay <altay@hey.com>
2026-07-06 17:48:50 +03:00
Vincent Koc
b3db79929f fix(test): preflight targeted UI e2e (#100950) 2026-07-06 07:46:08 -07:00
Vincent Koc
5733fb0e19 refactor(ui): localize internal-only symbols (#100931) 2026-07-06 07:28:48 -07:00
Vincent Koc
94a0d2ec3b test: align shifted main assertions (#100897) 2026-07-06 07:24:26 -07:00
github-actions[bot]
9997c534b8 chore(i18n): refresh native locales 2026-07-06 14:24:16 +00:00
mushuiyu886
9042e8020f fix(memory): fall back to wiki for missing all-corpus reads (#100904)
* Fix memory_get all supplement fallback

* refactor(memory): use typed missing-read contract

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-06 07:19:51 -07:00
Vincent Koc
3442a8e6f5 test(live): validate final tool probe reply 2026-07-06 07:04:36 -07:00
Peter Steinberger
cd25de98b1 feat(android): tap-to-expand link previews in chat transcript (#100898) 2026-07-06 15:02:26 +01:00
github-actions[bot]
52f1e05600 chore(i18n): refresh native locales 2026-07-06 13:58:53 +00:00
machine3at
5c2604f8cd fix(cron): use direct lookup instead of paginated search in cron edit (#100836)
* fix(cron): use direct lookup instead of paginated search in cron edit

* fix(test): update cron-cli tests to mock cron.get and remove obsolete pagination checks

* fix(cron): preserve edit compatibility with older gateways

* fix(cron): preserve legacy lookup error cause

---------

Co-authored-by: Vincent Koc <25068+vincentkoc@users.noreply.github.com>
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-06 06:58:22 -07:00
Peter Steinberger
8af88e2fcc fix(tests): restore shared-kit test module compilation after NSNull coalesce (#100903) 2026-07-06 14:56:34 +01:00
SunnyShu
a98a64649e fix(cron): accept null fallbacks in update patch payload (#100707) (#100801)
* fix(cron): accept null fallbacks in cron update patch payload

createCronPatchObjectSchema passes nullableStringArraySchema for model and
toolsAllow, but fallbacks was still hardcoded as a non-nullable array in
cronPayloadObjectSchema, rejecting null clears before they reach the
Gateway service layer.

Switch fallbacks to a parameter so the patch context can pass the nullable
variant, matching the existing pattern for model and toolsAllow.

Fixes #100707

Co-Authored-By: Claude <noreply@anthropic.com>

* test(cron): cover model+fallbacks null clear in patch schema test

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-07-06 06:48:00 -07:00
Vincent Koc
e35c7a3c95 refactor(agents): localize internal-only symbols (#100909) 2026-07-06 06:40:19 -07:00
machine3at
3c84a8453a fix(agents): preserve blank lines in multi-question user input fallback parsing (#100832) 2026-07-06 06:37:47 -07:00
Peter Steinberger
f623d81f52 feat(ui): show background tasks live in the web Control UI (#100789)
* feat(gateway): broadcast task ledger changes as task events

* feat(ui): add background Tasks page to Control UI

* fix(gateway): address tasks page review findings

* fix(ui): surface tasks.cancel refusals on the Tasks page

* fix(gateway): guard stale task observer disposal against replacement gateways

* chore: satisfy lint and docs-map gates for tasks page

* test(gateway): await async agent unsub in stale-dispose test
2026-07-06 14:36:33 +01:00
Peter Steinberger
88f1ec38d4 feat(sessions): grouping, unread state, and full session controls on web, iOS, and Android (#100814)
Gateway (additive, no protocol version bump): SessionEntry gains
lastReadAt/markedUnreadAt/lastActivityAt; session rows expose a derived
unread flag (explicit mark, or last read before latest activity; never-read
sessions stay read so upgrades do not light up). lastActivityAt is stamped
in the canonical post-run store update - user, channel, and cron runs count
as activity; heartbeat, internal-event, and preserved-state runs do not.
sessions.patch gains unread; sessions.create gains fork (transcript fork
from parentSessionKey under the parent lifecycle lock, refusing active,
concurrently-changed, and oversized parents, cross-agent aware).

Web sidebar: Pinned/custom-group/Ungrouped sections, unread dots, kebab and
right-click context menu (pin, mark unread/read, rename, fork, move to group,
archive, delete guarded for agent main sessions and active runs), mark-read
on view with loop-safe re-acknowledgement and failure retry; sessions page
gets unread + fork actions and shared custom-group helpers.

iOS Command Center: grouped sections, unread/pin indicators, Show Archived
gated on per-entry state, full context menu with rename/new-group alerts and
delete confirmation, current-session preview guarantee, read-episode
re-acknowledgement; new patch/delete/fork transport calls; Swift protocol
models regenerated.

Android SessionsScreen: grouped headers, unread/pin indicators, Archived
filter gated on per-entry state, long-press menu with the full control set,
agent-scoped forks, explicit label/category clears from session events,
main-session fallback when archiving/deleting the open chat, read-episode
re-acknowledgement with failure retry.

Closes #100739
2026-07-06 14:30:55 +01:00
Onur Solmaz
f41e3b14d2 chore(cli): cover HF local app flow (#100887)
* test(cli): cover HF local app flow

* test(cli): isolate HF local app auth fixture
2026-07-06 15:25:30 +02:00
Vincent Koc
25a7708f19 fix(feishu): send card JSON message params as cards (#100883)
* fix(feishu): send plain card JSON as interactive cards

Co-authored-by: martingarramon <263922628+martingarramon@users.noreply.github.com>

* fix(clownfish): address review for gitcrawl-21-autonomous-drip-20260706 (1)

Co-authored-by: martingarramon <263922628+martingarramon@users.noreply.github.com>

* fix(feishu): preserve native card compatibility

Reported-by: @ZenoRewn
Co-authored-by: martingarramon <263922628+martingarramon@users.noreply.github.com>

* fix(feishu): fix native card fallback precedence

* fix(feishu): fix native card fallback precedence

---------

Co-authored-by: openclaw-clownfish[bot] <280122609+openclaw-clownfish[bot]@users.noreply.github.com>
Co-authored-by: martingarramon <263922628+martingarramon@users.noreply.github.com>
2026-07-06 06:22:36 -07:00
Vincent Koc
bab1415b5c fix(reply): dedupe duplicate non-streaming final replies (#100828)
* fix(reply): dedupe duplicate non-streaming final replies

* fix(reply): preserve distinct final delivery identities

* chore(reply): drop release-owned changelog entry

* chore(reply): drop release-owned changelog entry

---------

Co-authored-by: openclaw-clownfish[bot] <280122609+openclaw-clownfish[bot]@users.noreply.github.com>
2026-07-06 06:21:47 -07:00
Vincent Koc
709be93ca8 fix(anthropic): restore subscription OAuth billing routing 2026-07-06 06:18:52 -07:00
dorukardahan
9344bb8b48 fix(cli): exit after model inspection output (#77904)
* fix(cli): exit after model inspection output

* fix(cli): drain stderr before one-shot exit

* fix(cli): exit after model inspection output

* fix(clownfish): address review for live-pr-inventory-20260706T090631-001 (1)

* fix(cli): defer model command exit until teardown

* test(cli): isolate one-shot exit spies

* fix(cli): defer models status check exit

* fix(cli): satisfy lint for Vitest markers

* fix(cli): always wait for stream flush callbacks

* test(cli): wait for deferred exit callback

---------

Co-authored-by: openclaw-clownfish[bot] <280122609+openclaw-clownfish[bot]@users.noreply.github.com>
Co-authored-by: Vincent Koc <25068+vincentkoc@users.noreply.github.com>
2026-07-06 06:16:59 -07:00
Peter Steinberger
bc49cb41e9 fix(android): open system notifications on tap (#100888)
* fix(android): open system notifications on tap

* chore(android): sync notification i18n inventory
2026-07-06 14:14:29 +01:00
xingzhou
5aa7c6267c fix(irc): monitor stays disconnected after IRC socket closes (#100799) 2026-07-06 06:07:12 -07:00
Vincent Koc
6418e196b1 refactor: remove unused internal exports (#100882) 2026-07-06 05:59:18 -07:00
Jesse Merhi
5cd71db85e fix(diagnostics-otel): route OTLP exports through env proxy
* fix(diagnostics-otel): route OTLP exports through env proxy

* fix(diagnostics-otel): harden OTLP proxy agent options

* fix(ci): refresh rebased gateway checks

* fix(ci): avoid proxy boundary scan
2026-07-06 22:52:22 +10:00
Peter Steinberger
876ab9bb0b feat(android): add chat message actions (#100879)
* fix(android): add chat message actions

* chore(android): sync native i18n inventory

* fix(i18n): collect Android action labels

* fix(i18n): preserve Android placeholders
2026-07-06 13:50:16 +01:00
Vincent Koc
c3501761da test(qa): allow deleted progress in private final check 2026-07-06 05:49:48 -07:00
xydigit-sj
c421143b3b fix(auto-reply): warn when /export-session only contains user messages (backend-delegated) (#90867)
* fix(auto-reply): warn when /export-session only contains user messages (backend-delegated)

Closes #90844 (minimum-fix option 2).

When a session is driven by a CLI/ACP backend, OpenClaw's own transcript only
records the inbound user messages. /export-session would still produce a
successful HTML export with empty summary stats and no assistant/tool/usage
data, which is misleading.

This change detects the backend-delegated case (a transcript whose message
entries are exclusively role: user) and surfaces a clear warning in the command
reply text and the exported HTML header.

* fix(auto-reply): correct template literal closure in export session HTML

* fix(auto-reply): warn on backend-delegated session exports

* fix(session): harden backend export warning

* fix(session): read persisted ACP export metadata

* fix(session): keep ACP metadata lookup best-effort

* fix(session): avoid shadowed export locals

* test(session): type export store mock

---------

Co-authored-by: openclaw-clownfish[bot] <280122609+openclaw-clownfish[bot]@users.noreply.github.com>
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
Co-authored-by: Vincent Koc <25068+vincentkoc@users.noreply.github.com>
2026-07-06 05:41:19 -07:00
machine3at
5c49cec618 fix(heartbeat): catch delivery errors in maybeSendHeartbeatOk to prevent side-effect replays (#100834)
* fix(heartbeat): catch delivery errors in maybeSendHeartbeatOk to prevent side-effect replays

* test(heartbeat): cover quiet ack delivery failures

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-06 05:40:33 -07:00
Momo
17605c57df improve: reduce repeated session startup scans (#99335)
Summary:
- Merged improve: reduce repeated session startup scans after ClawSweeper review.

Automerge notes:
- PR branch already contained follow-up commit before automerge: fix: preserve blank-prefixed session header guard
- PR branch already contained follow-up commit before automerge: fix: fail closed on capped transcript header scan
- PR branch already contained follow-up commit before automerge: fix: stream transcript reset guard
- PR branch already contained follow-up commit before automerge: chore: drop bootstrap digest cache change

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

Prepared head SHA: baf54d8046
Review: https://github.com/openclaw/openclaw/pull/99335#issuecomment-4892783806

Co-authored-by: momothemage <niuzhengnan@163.com>
Approved-by: momothemage
2026-07-06 12:30:20 +00:00
Vincent Koc
3c530c79a0 test(qa): accept completed wait envelopes 2026-07-06 05:22:57 -07:00
Vincent Koc
8b86645f5c fix(macos): keep node invokes responsive during system.run (#100842)
* fix(macos): keep app node connected after system.run invoke

* fix(macos): document node invoke receive isolation

---------

Co-authored-by: openclaw-clownfish[bot] <280122609+openclaw-clownfish[bot]@users.noreply.github.com>
2026-07-06 05:06:34 -07:00
Vincent Koc
aabf68606a fix(macos): preserve launchd Node gateway in PortGuardian (#100867)
* fix(macos): preserve launchd Node gateway in PortGuardian

Co-authored-by: lsr911 <18230762+lsr911@users.noreply.github.com>

* fix(macos): tighten PortGuardian gateway matcher

---------

Co-authored-by: openclaw-clownfish[bot] <280122609+openclaw-clownfish[bot]@users.noreply.github.com>
Co-authored-by: lsr911 <18230762+lsr911@users.noreply.github.com>
2026-07-06 05:00:43 -07:00
Vincent Koc
56fe5d0459 fix(release): skip loader lifecycle scripts on Windows 2026-07-06 04:57:57 -07:00
Peter Steinberger
ce36a13ad2 fix(browser): foreground tabs before screenshots (#100857)
Co-authored-by: Spencer Fuller <spencer.p.fuller@gmail.com>
2026-07-06 12:57:45 +01:00
Vincent Koc
f532323edf docs(changelog): remove generated main entry 2026-07-06 13:47:54 +02:00
Vincent Koc
e7d43db52f test(codex): make side tool abort test deterministic 2026-07-06 13:47:54 +02:00