Commit Graph

78555 Commits

Author SHA1 Message Date
Shakker 281fe1e502 refactor: use canonical companion context owners 2026-08-12 01:17:17 +02:00
Shakker 6932cd6980 fix: reconcile companion progress ownership 2026-08-12 01:17:17 +02:00
Shakker 70fbc35da2 fix: ground session companion context 2026-08-12 01:17:17 +02:00
Vyctor H. Brzezowski d8488a9406 fix(ui): keep short JSON code blocks visible (#122313) 2026-08-11 20:08:43 -03:00
Vincent Koc f30e67298a fix(agents): preserve reply cleanup when cancellation throws (#122252)
* refactor(agents): canonicalize reply abort cleanup

* refactor(agents): document reply abort cleanup invariant
2026-08-12 07:04:03 +08:00
Vyctor H. Brzezowski ec86b02b9e fix(ui): render disallowed link schemes as plain text (#122311)
Preserve readable Markdown labels while removing link wrappers for destinations the Control UI will not navigate.
2026-08-11 20:03:08 -03:00
Vincent Koc 1982aaa351 fix(test): isolate gateway helper env stubs (#122319) 2026-08-12 06:57:44 +08:00
Vyctor H. Brzezowski 944b81b2dc fix(ui): keep chat Markdown block rhythm consistent (#122289)
Fixes #122269
2026-08-11 19:57:11 -03:00
Peter Steinberger 6fa87b0185 test(cli): trim duplicate Hooks process cases (#122278)
Co-authored-by: Amp <amp@ampcode.com>
2026-08-11 15:55:40 -07:00
joshavant b76b9e1a75 fix(ui): retain identity while agent roster loads 2026-08-11 17:54:28 -05:00
joshavant 2fbf4fdbe6 fix(ui): preserve configured agent labels 2026-08-11 17:54:28 -05:00
Mariano 3851849eea fix(plugins): keep startup convergence read-only (#122330)
Prevent gateway startup verification from re-persisting an unchanged plugin install-record baseline. This keeps startup convergence read-only while preserving update-time persistence and the existing fail-closed check for real migration input changes.
2026-08-12 00:49:26 +02:00
Josh Lehman 585503896d fix: preserve WebChat reply context after reloads (#122169) 2026-08-11 15:42:01 -07:00
Vyctor H. Brzezowski 89df45c0f5 fix(ui): make DONE moves visibly reversible (#122303)
* fix(ui): make group category moves reversible

* fix(ui): address native Groups drag review
2026-08-11 19:39:07 -03:00
Vyctor H. Brzezowski 67262b70dc fix(ui): keep inline-code punctuation attached (#122291)
* test(ui): cover inline code punctuation spacing

* fix(ui): tighten inline code punctuation spacing

* test(ui): tolerate browser font metrics
2026-08-11 19:30:14 -03:00
Peter Steinberger c4fd5ad551 fix(google-meet): publish exports atomically (#122306) 2026-08-11 15:29:08 -07:00
Peter Steinberger b350f76484 fix(channels): preserve failed agent run reactions (#122009) 2026-08-11 15:26:44 -07:00
Vyctor H. Brzezowski 285e58e5ef fix(ui): label patch file operations accurately (#122287) 2026-08-11 19:23:27 -03:00
Peter Steinberger c525f1a549 fix(windows): preserve Unicode LAN route aliases (#122263) 2026-08-11 15:21:37 -07:00
Peter Steinberger 9a8a65b9ea test(media): synchronize transcode pool completion (#122279) 2026-08-11 15:20:16 -07:00
Peter Steinberger 896e3fb0ac fix(android): keep completed subagent activity visible for sixty seconds (#122089)
* fix(android): retain terminal subagent activity locally

* chore(android): preserve native i18n inventory
2026-08-11 15:19:57 -07:00
Vyctor H. Brzezowski 65f4320147 fix(ui): humanize bare GitHub item links (#122285) 2026-08-11 19:16:07 -03:00
Sliverp 84c7d45f15 refactor(qqbot): install plugin from Tencent package (#107295)
* refactor(qqbot): remove bundled extension source

Mechanical deletion half of the #107295 squashed rebase; the catalog
repoint and host integration land in the follow-up commit.

Co-authored-by: sliverp <870080352@qq.com>

* refactor(qqbot): install plugin from Tencent package

Squashed rebase of #107295 onto current main. Repoints the official
external channel catalog at @tencent-connect/openclaw-qqbot@2.0.1 and
adapts onboarding, doctor migrations, secrets, build guards, and tests.

Documents the known limitation that the external package does not
support structured SecretRef clientSecret values; operators move those
to QQBOT_CLIENT_SECRET or clientSecretFile before upgrading.

Co-authored-by: sliverp <870080352@qq.com>

* fix(doctor): reuse shared hasOwnKey record helper

The rebased QQBot migration carried its own hasOwnKey export, colliding
with the one main now ships in legacy-config-record-shared.ts.

Co-authored-by: sliverp <870080352@qq.com>

* fix(plugins): carry catalog integrity through the update bridge

The externalized-bundled-plugin bridge dropped the official catalog's
expectedIntegrity pin, so bundled-user updates installed the external
npm package without integrity verification. The bridge now carries the
pin for the catalog's exact npm spec and both bridge install calls pass
it through; update-channel spec overrides intentionally skip the pin
since it only covers the pinned version.

Co-authored-by: sliverp <870080352@qq.com>

* chore(plugin-sdk): refresh per-entrypoint API baselines

The QQBot compat export and bundled-type removal shift 26 entrypoint
closure hashes in the new split baseline layout.

Co-authored-by: sliverp <870080352@qq.com>

* refactor(qqbot): drop helper reintroduced during rebase

Main's coercion consolidation added this file after the deletion
commit's base; its only consumers were the removed qqbot sources.

Co-authored-by: sliverp <870080352@qq.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-08-11 15:10:27 -07:00
Josh Lehman d035dba6c7 chore: scope SQLite session lifecycle CI (#121917)
* oc-358: scope SQLite lifecycle CI

* chore(ci): cover shared session lifecycle owner
2026-08-11 15:06:46 -07:00
tangtaizong666 4ccbdf58bf fix(plugins): refresh stale source plugin registry (#96046) (#96080)
* fix(plugins): refresh stale source plugin registry

* fix(plugins): port registry snapshot to core manifest loader

---------

Co-authored-by: tangtaizong666 <212687958+tangtaizong666@users.noreply.github.com>
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-08-12 06:05:01 +08:00
Vincent Koc bc030544ee refactor(gateway): unify terminal chat broadcasts (#122211)
* refactor(gateway): unify terminal chat broadcasts

* test(gateway): cover node terminal chat fanout
2026-08-12 06:04:17 +08:00
Peter Steinberger 87b3c0e5df refactor(agents): split subscribe leaf ownership (#122249)
* refactor(agents): split embedded tool result ownership

* refactor(agents): split embedded message ownership
2026-08-11 15:04:07 -07:00
Peter Steinberger 01804a7531 feat(apps): Android chat adopts the system-notice family (#122268)
* feat(apps): Android chat adopts the system-notice family

Decode internal_system provenance and __openclaw markers in parseHistory,
classify into SystemNotice/SystemDivider timeline variants with web-parity
kinds, render minimal Compose rows, round-trip metadata through the
transcript cache textPartsJson envelope (no Room change), and extend the
deterministic screenshot fixture.

* fix(apps): keep generated locale artifacts out of the source PR

The native locale refresh workflow owns NativeStringResources.kt and
values-*/strings.xml; ship source strings plus the regenerated
apps/.i18n/native-source.json inventory only.
2026-08-11 15:03:15 -07:00
Peter Steinberger 459c70e14a fix(worker): stop Gateway RTT from pacing live previews (#122258)
* fix(worker): decouple live previews from gateway acknowledgements

* test(worker): track fault harness temp directories

* fix(worker): preserve finishing after preview rejection

* fix(worker): recover finishing after early preview failure

* test(worker): model terminal resync decisions
2026-08-11 14:55:08 -07:00
Vincent Koc 642fe77624 refactor(gateway): unify terminal restriction tracking (#122228) 2026-08-12 05:54:15 +08:00
bᵣᵢₐₙ 8d034a7b61 fix(cron): stop advertising trigger-gated fields when cron triggers are disabled (#122052)
* fix(cron): stop advertising trigger-gated fields when cron triggers are disabled

When cron.triggers.enabled is off (the documented default posture), the
cron tool still advertised job.trigger/patch.trigger, schedule.kind
"stream" with its stream-only fields, and payload.kind "script" — all of
which the scheduler unconditionally rejects. Schema-eager models attach
junk triggers to plain reminder requests, get rejected, and retry-loop
without ever creating the job.

Gate those surfaces on the resolved config so they are only advertised
when the runtime can actually accept them, and swap the trigger guidance
for a short unavailable notice so the model tells the user instead of
polling or silently degrading the request. Config-less construction
paths keep the full surface.

Related: #119455

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

* fix(cron): restore config type import and regenerate schema contracts

Repairs rebase fallout and CI-contract consequences of the trigger gating:

- Re-import OpenClawConfig from config/types.openclaw.js; the rebase crossed
  #121768 which removed the re-export from config/config.js, stranding
  resolveCronTriggersEnabled's signature.
- Guard the destructured tool in the MCP gating test for
  noUncheckedIndexedAccess.
- Collapse the hookContext merge object to one line: the added config
  pass-through tipped openclaw-tools.ts over the max-lines ratchet (701/700).
- Regenerate prompt snapshots (cron description narrowed under
  triggers-disabled harness config; ~3k chars per prompt) and the plugin-sdk
  API baseline (CronToolOptions gained the optional config member, visible
  via codex-mcp-projection).

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

* chore(cron): align schema contracts with current main

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Josh Lehman <550978+jalehman@users.noreply.github.com>
2026-08-11 21:48:14 +00:00
Peter Steinberger cb51cf7d3e feat(apps): Apple chat adopts the system-notice family (#122255)
* feat(apps): adopt the system-notice family in Apple chat (OpenClawChatUI)

Decode internal_system provenance and __openclaw history markers, classify
once into message/notice/divider rows (web-parity kinds), render minimal
hairline notice/divider SwiftUI rows, preserve metadata through history
reconciliation, live transport, and the transcript cache, and align the
transcript exporter with visible classification instead of leaking raw
[System] prompts.

* fix(apps): satisfy OpenClawKit periphery gate

Remove the dead visibleMessages projection (rows path replaced its
consumers) and annotate the provenance test-fixture initializer with the
repo-standard periphery:ignore rationale.

* fix(apps): refresh native i18n inventory after periphery cleanup
2026-08-11 14:47:19 -07:00
Mariano edb7a1692e fix(telegram): expose live location updates to hooks (#122185)
* fix(telegram): expose live location updates to hooks

* test(telegram): keep location coverage focused

* fix(telegram): emit stopped live locations

* test(plugin-sdk): refresh location hook contracts

* docs(changelog): note Telegram live location hooks

* fix(telegram): complete live-location observer path

---------

Co-authored-by: mbelinky <mbelinky@users.noreply.github.com>
2026-08-11 23:26:23 +02:00
Vyctor H. Brzezowski cfc684e49c fix(ui): remove the pre-creation session row (#122259) 2026-08-11 18:18:03 -03:00
Peter Steinberger 42a4d0a9b8 fix(openai): surface failed realtime response outcomes (#121177)
* fix(talk): type realtime response outcomes

* fix(ci): align realtime outcome contracts

* test(ui): identify completed realtime responses

* chore(plugin-sdk): refresh realtime voice baselines
2026-08-11 14:14:22 -07:00
wangmiao0668000666 9dc5a9a152 fix(logging): publish diagnostics ZIP through staged atomic overwrite (#122130)
* fix(logging): publish diagnostics ZIP through staged atomic overwrite

A named support export wrote the in-memory ZIP buffer straight to the
final path, so a failed or interrupted overwrite truncated the previous
archive, and an existing file kept its pre-existing (potentially
permissive) mode since writeFile only applies mode on creation.

Route publication through writeExternalFileWithinRoot's sibling staging:
the new archive is written to a private sibling, fsynced, and atomically
renamed over the final path. A failed publication leaves the previous
ZIP untouched with no staging residue, and the rename always installs
the staged file's 0o600 mode. The command now returns the actual
published path.

Fixes #122064

* test(logging): prove failed zip replacement stays atomic

* test(sqlite): create private reliability fixture

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-08-11 14:12:39 -07:00
Peter Steinberger f8b48df9e6 test(cli): trim duplicate MCP probe process cases (#122260)
Co-authored-by: Amp <amp@ampcode.com>
2026-08-11 14:11:21 -07:00
Peter Steinberger c2ad148cb8 feat(agents): replay persisted native video (#122257) 2026-08-11 14:01:57 -07:00
Vincent Koc aa52ebaef3 fix(test): serialize default e2e runner (#122203)
* fix(test): serialize default e2e runner

* docs(test): document serial e2e default
2026-08-12 05:01:04 +08:00
Vyctor H. Brzezowski ce466fccb0 fix(ui): always show full assistant responses (#122207) 2026-08-11 18:00:48 -03:00
Ayaan Zaidi 6a4a546593 feat(mcp): per-requester OAuth for MCP servers (#122166)
Per-requester OAuth for HTTP MCP servers: in shared channels each trusted sender connects their own account. New config: mcp.servers.<name>.oauth.identity ("shared" default, byte-identical behavior) and gateway.publicOrigin (HTTPS except loopback) for the new GET /oauth/mcp/callback served on the Gateway HTTP server. Requester tokens are isolated per (channel, account, sender) in mcp_oauth_stores rows (no schema bump); callbacks correlate through a durable state-keyed one-time index with a 10-minute TTL; per-requester servers are fail-closed out of static/scheduled runtimes; unauthenticated senders get a sign-in link with a portable URL button; MCP config mutations clear requester credentials at the canonical owner. mcp status --json keeps the legacy authStatus fields additively. Proven by a two-user self-hosted-Executor E2E through the real gateway callback. Part of #122034.

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-08-11 20:58:51 +00:00
Vyctor H. Brzezowski 776c19eaaa fix(ui): preserve focus on composer accessory clicks (#122243) 2026-08-11 17:50:28 -03:00
Peter Steinberger d699662083 fix(backup): exclude state temp files (#122250) 2026-08-11 13:48:27 -07:00
Vatsal Garg a432e2a586 fix(browser): let attached workers exit after CDP use (#122103)
* fix(browser): retire attached runtime Playwright CDP adapter on disposal (#122065)

* fix(browser): use optional chaining on refresh in CDP adapter retirement

* refactor(browser): simplify attached adapter disposal

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-08-11 13:47:58 -07:00
Peter Steinberger f4076e028b test(cli): trim duplicate Claw authoring process cases (#122248)
Co-authored-by: Amp <amp@ampcode.com>
2026-08-11 13:47:38 -07:00
Vincent Koc 2f071c9371 refactor(outbound): inline delivery diagnostics (#122219) 2026-08-12 04:39:32 +08:00
Peter Steinberger e74be5d41d refactor: eliminate final wrapper-shadowing hazards (#122157)
* refactor: disambiguate wrapper-shadowed exports

* test: align renamed session and facade boundaries

* test: cover renamed runtime mock exports

* refactor: align remaining wrapper owner call sites

* test: align overlap-rebased runtime mocks

* refactor: preserve public SDK names after overlap rebase

* chore: regenerate wrapper shadowing baselines

* test: align cron model selection mocks
2026-08-11 13:34:24 -07:00
Vyctor H. Brzezowski 7d99f9fd86 fix(ui): keep new-session identity anchored (#122242) 2026-08-11 17:30:53 -03:00
Peter Steinberger 01c1ebf803 test(cli): trim duplicate gateway process cases (#122240)
Co-authored-by: Amp <amp@ampcode.com>
2026-08-11 13:25:53 -07:00
Peter Steinberger 8f4a90a518 fix(media): decode local file URLs safely (#122192)
* fix(media): decode local file URLs safely

* refactor(media): remove obsolete helper exports
2026-08-11 13:19:09 -07:00