Commit Graph

76142 Commits

Author SHA1 Message Date
Peter Steinberger eb76bf499b fix(voice-call): terminate carrier calls after realtime startup failures (#118699) 2026-08-03 07:38:42 -07:00
Peter Steinberger 48c14976b9 fix(slack): isolate GovSlack media trust and delivery (#118695) 2026-08-03 07:37:38 -07:00
Peter Steinberger c70863a5e5 fix(browser): wrap page-controlled action results (#118691) 2026-08-03 07:37:04 -07:00
Peter Steinberger 67e1b27833 fix(security): sanitize JSON-escaped forged content boundaries (#118698) 2026-08-03 07:36:31 -07:00
Peter Steinberger cae7431644 test(qa): prove real yielded-child completion and channel delivery (#118707) 2026-08-03 07:35:56 -07:00
Peter Steinberger 395c772ba7 fix(doctor): honor explicit plugin-only migration authority (#118700) 2026-08-03 07:34:49 -07:00
SunnyShu a1a73cf421 fix(security): detect child_process calls through aliases and computed members (#116304)
* [AI] fix(security): detect child_process calls through aliases and computed members

The advisory source scanner's dangerous-exec rule missed three
child_process invocation forms that each should produce a critical
finding, plus a fourth namespace-alias computed-exec form:

- ESM import alias:    import { spawn as launch } from "node:child_process"; launch(...)
- CJS destructure alias: const { exec: run } = require("child_process"); run(...)
- computed member:     import cp from "node:child_process"; cp["spawn"](...)
- namespace alias computed exec: const proc = require("child_process"); proc["exec"](...)

The rule pattern only matched bare command names and used a source-wide
child_process context gate with a literal receiver-name allowlist in
isBenignMemberExecMatch, so aliased bindings and computed calls on proven
namespace aliases escaped detection.

Add a provenance-aware collectChildProcessBindings pass that derives
renamed method bindings and whole-namespace bindings ONLY from actual
child_process imports/requires (so unrelated aliases such as a locally
imported launch() do not false-positive). Extend the dangerous-exec
pattern with a computed-member branch and make isBenignMemberExecMatch
consult namespace-alias provenance instead of a hard-coded receiver
allowlist, so computed exec on a proven child_process namespace alias
fires while the RegExp.exec exclusion is preserved.

Fixes #116255

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

* style(security): apply oxfmt to scanner.ts

Fixes CI oxfmt --check failure on PR #116304 (oxfmt wrapped a long if
condition across multiple lines). No logic changes.

* fix(security): scope computed exec methods to proven child_process receiver

The dangerous-exec scanner's computed-member matcher accepted any
obj["spawn"]()/obj["execSync"]() call whenever child_process appeared
anywhere in the file, while receiver provenance was checked only for
exec. That turned unrelated APIs into critical findings, which could
incorrectly fail Skill Workshop proposals and distort deep-audit output.

Require a proven child_process namespace receiver for EVERY watched
computed execution method (exec/execSync/spawn/spawnSync/execFile/
execFileSync), preserving the long-standing RegExp.exec exclusion only
for the direct dot-member exec case. Add regression coverage for
unrelated computed spawn/execSync calls and a proven computed execSync
positive.

Addresses ClawSweeper P1 on PR #116304.

* [AI] fix(security): recognize direct and computed calls through collected namespace aliases

Address ClawSweeper P1/P2: consult provenance namespaceAliases for direct
dot-member exec calls (e.g. proc.exec for const proc = require(...)) and
collect ESM namespace imports (import * as proc from "node:child_process").

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

* [AI] fix(security): report every proven alias execution call on a line

ClawSweeper P1: the alias attribution path emitted only the first proven
child_process alias call per source line, violating the scanner's
per-occurrence reporting. Match all alias call positions and emit a finding
for each (skipping positions the literal pattern already reported), with a
regression test for two calls on one line.

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

---------

Co-authored-by: Maas <noreply@anthropic.com>
2026-08-03 10:29:52 -04:00
Peter Steinberger 4c74fd8996 test(gateway): avoid async facade mock race (#118708)
Co-authored-by: Peter Steinberger <steipete@mac-studio-sf2.local>
2026-08-03 07:26:51 -07:00
Peter Steinberger 63638751c1 fix(gateway): preserve final speech during transcription shutdown (#118693) 2026-08-03 07:25:04 -07:00
Peter Steinberger 25f174c8a0 fix(gateway): resume durable outbound delivery retries (#118694) 2026-08-03 07:23:46 -07:00
Peter Steinberger 8d263b4844 fix(plugins): reject external public-artifact hardlinks (#118689) 2026-08-03 07:22:40 -07:00
Peter Steinberger ffcca757eb fix(media): fall back when providers return empty output (#118660)
* fix(media): fall back when providers return empty output

* test(media): type the synthetic attachment cache fixture

* test(media): avoid object spread in fallback test cases
2026-08-03 07:13:19 -07:00
Peter Steinberger c547f16506 fix(nextcloud-talk): allow bounded parallel room deliveries (#118692) 2026-08-03 07:08:48 -07:00
Peter Steinberger cad499d7ca test(state): reuse current agent database fixture (#118677)
Co-authored-by: Peter Steinberger <steipete@mac-studio-sf2.local>
2026-08-03 06:43:24 -07:00
coaiMax 1c5dd1a39b fix(scripts): bound check-file-utils git lookup (#111582)
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
Co-authored-by: lijing <li.jing25@xydigit.com>
2026-08-03 21:42:47 +08:00
Peter Steinberger 5541eef4f2 fix(slack): scope interactive conversation bindings safely (#118662)
* fix(slack): scope interactive conversation bindings safely

* fix(slack): satisfy typed sender authorization lint
2026-08-03 06:42:32 -07:00
Onur Solmaz f7434f94cf fix(agents): avoid false compaction after mid-turn precheck (#117963)
* fix(agents): avoid false compaction after mid-turn precheck

* fix(agents): preserve retry budget for tool progress
2026-08-03 15:38:07 +02:00
ml12580 1acc64b28a fix(ui): show original filename on chat history attachment cards instead of managed UUID suffix (#118628)
* fix(ui): prefer persisted fileName and strip managed UUID suffix from attachment card labels

* fix(ui): anchor managed UUID removal to terminal storage suffix

* fix(ui): preserve dotted UUID-shaped attachment names

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-08-03 06:23:00 -07:00
Peter Steinberger 3b6cad7e31 fix(whatsapp): preserve terminal retry exhaustion lifecycle (#118659)
Co-authored-by: Peter Steinberger <steipete@macos.shared>
2026-08-03 06:19:00 -07:00
juyaohuidt 096c929ecf fix(doctor): audit every agent workspace (#111840)
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
Co-authored-by: juyaohuidt <266015826+xydt-juyaohui@users.noreply.github.com>
2026-08-03 21:04:56 +08:00
Dallin Romney baeaca2ad4 fix(release): skip unavailable Buzz on frozen candidates (#118670) 2026-08-03 21:00:02 +08:00
Peter Steinberger e99f6dc4c3 fix(ui): surface onboarding and pairing clipboard failures (#118651)
* fix(ui): surface onboarding and pairing clipboard failures

* fix(ui): keep translated clipboard labels after feedback resets
2026-08-03 05:53:28 -07:00
Florian e1b1d4ba7c fix(config): stop plugin schemas rejecting the channel key core writes (#117992)
* fix(config): stop plugin schemas rejecting the channel key core writes

A published channel plugin declares a closed config schema listing only the keys
it knew about when that version shipped. Core's doctor migration writes
heartbeatVisibility into channels.<id> and its accounts for every channel, so a
plugin predating that key turns config core itself produced into a gateway that
refuses to start with 78/CONFIG — and doctor --fix reports it without repairing
it, leaving no in-product recovery. This took the live gateway down after the
last deploy: @openclaw/signal 2026.7.2-beta.3 ships a 44-property closed schema
with no heartbeatVisibility, while core reads all three precedence layers
(src/infra/heartbeat-visibility.ts) and documents them
(docs/gateway/heartbeat.md).

Channel schemas built from core's shape may omit common fields on purpose —
buildCommonChannelAccountShape takes an `omit` list — so widening every common
key would silently accept config that can never take effect. The fix stays on
the keys core writes: core wrote it, so core accepts it. Everything else is
untouched, including unknown-key rejection, which is covered by a test and
verified end to end.

Applied once when the channel schema map is built, so the AJV cache key still
maps to exactly one schema per channel, and unchanged schemas are returned by
identity.

Verified against the real failure: with the live plugin set loaded, the config
that crashed the gateway now validates at both channel and per-account level,
while an unknown key on the same channel is still rejected.

* fix(config): normalize external channel schemas at metadata owner

* fix(config): normalize core-owned channel visibility schemas

* style(config): format channel metadata regression coverage

* refactor(config): simplify channel schema normalization coverage

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-08-03 05:38:17 -07:00
Peter Steinberger 65a0db95dd test(memory): isolate wiki plugin fixtures (#118654) 2026-08-03 05:26:59 -07:00
clawsweeper[bot] e402606c71 fix(line): clear default access token when removing account (#118055)
* fix(line): clear default access token when removing account

* fix(line): clear default access token when removing account

---------

Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
2026-08-03 05:20:38 -07:00
Jesse Merhi 68be0e3378 feat: enable rich setup controls in custodian chat (#114631)
* feat(protocol): carry the awaited wizard step on the chat result

* fix(system-agent): strip sensitive wizard prefill from chat results

* fix(wizard): keep setup secrets server-side

* test(wizard): preserve prompt mock typing

* fix(ui): add reveal toggle to wizard secrets

* refactor(ui): adopt Carapace sensitive input

* fix(ui): hide revealed sensitive input mask

* test(twitch): cover environment-only setup

* feat(custodian): render rich wizard steps

* fix(custodian): validate wizard text replies

* feat(custodian): submit typed wizard answers

* refactor(gateway): isolate custodian chat turns

* fix(gateway): accept session engine adapter

* fix(ui): narrow wizard control values

* refactor: simplify rich wizard answer flow

* fix(custodian): recover evicted wizard sessions

* docs: note custodian rich setup controls

* test(gateway): split wizard answer coverage
2026-08-03 22:18:27 +10:00
Peter Steinberger a8efce28ee test(ui): reuse responsive browser fixtures (#118655)
Co-authored-by: Peter Steinberger <steipete@mac-studio-sf2.local>
2026-08-03 05:16:33 -07:00
Peter Steinberger dfb1378043 chore(tui): stabilize queued-turn admission in Gateway PTY test (#118638)
* test(tui): wait for queued turn admission before releasing parent

* test(tui): clarify queued admission event ordering
2026-08-03 05:04:05 -07:00
Goutam Adwant a5160c1294 fix(xai): classify exhausted credits as billing (#118615) 2026-08-03 04:57:28 -07:00
Peter Steinberger 35c9c76b8c fix(otel): fail closed when configured TLS material is invalid (#118648) 2026-08-03 04:52:52 -07:00
Peter Steinberger a30adedc9b fix(cli): preserve gateway request errors in health JSON (#118645)
Co-authored-by: Peter Steinberger <steipete@macos.shared>
2026-08-03 04:52:42 -07:00
Peter Steinberger 6addeae3ff test(agents): reuse attempt execution SQLite fixtures (#118646)
* test(agents): reuse attempt execution sqlite fixtures

* test(agents): track attempt fixture temp roots

---------

Co-authored-by: Peter Steinberger <steipete@mac-studio-sf2.local>
2026-08-03 04:52:39 -07:00
Vincent Koc 8895b0c288 fix(codex): preserve yielded subagent handoff (#118644) 2026-08-03 19:44:58 +08:00
Peter Steinberger ea2c6a63c9 refactor(scripts): adopt shared scaffolding (#118514)
* refactor(scripts): adopt shared scaffolding

* fix(scripts): satisfy strict tooling checks

* fix(scripts): preserve scaffolding contracts
2026-08-03 04:40:30 -07:00
Peter Steinberger 757d220203 fix(ui): surface sidebar clipboard failures across reconnects (#118632)
* fix(ui): surface sidebar clipboard failures across reconnects

* test(ui): type sidebar clipboard lifecycle fixtures correctly
2026-08-03 04:36:28 -07:00
Peter Steinberger f5cb0f2f76 test(memory): isolate index suite plugin discovery (#118641) 2026-08-03 04:36:03 -07:00
Peter Steinberger 2a8f2e6756 fix(matrix): block plaintext attachments in encrypted rooms (#118609)
* fix(matrix): block plaintext uploads to encrypted rooms

* test(matrix): spy on room encryption detection safely

* fix(matrix): enforce encrypted room confidentiality at outbound owner

* test(matrix): keep delivery trace client aligned with send owner
2026-08-03 04:33:46 -07:00
Peter Steinberger 8d1fe4f091 fix(pdf): reject requested pages outside the document range (#118639) 2026-08-03 04:28:17 -07:00
Peter Steinberger 629bf6f2d3 fix(otel): redact invalid collector URLs and suppress implicit exporters (#118635) 2026-08-03 04:24:53 -07:00
Peter Steinberger 1af8bdd9ee test(system-agent): reuse setup fixtures (#118636)
Co-authored-by: Peter Steinberger <steipete@mac-studio-sf2.local>
2026-08-03 04:18:57 -07:00
Peter Steinberger 3c085c1872 test(gateway): isolate session patch provider policy (#118633)
Co-authored-by: Peter Steinberger <steipete@mac-studio-sf2.local>
2026-08-03 04:17:03 -07:00
Peter Steinberger e87fb689b5 fix(channels): preserve thread participation expiry across restarts (#118630)
Co-authored-by: Peter Steinberger <steipete@macos.shared>
2026-08-03 04:12:18 -07:00
Peter Steinberger 5b7272f9b5 fix(pdf): surface image-render failures when documents have no text (#118629) 2026-08-03 04:10:41 -07:00
Peter Steinberger a6f9da8bdb refactor: centralize cron, doctor, and TUI ownership (#118515)
* refactor(cron): centralize queued run activation

* refactor(doctor): share session SQLite report scaffolding

* refactor(tui): unify slash command registry

* fix(tui): satisfy command registry lint

* fix(tui): align shared command usage help

* fix(btw): preserve outbound usage placeholder
2026-08-03 04:08:54 -07:00
Peter Steinberger fe6fa891ea fix(whatsapp): clear and migrate every Baileys credential class (#118610)
* fix(whatsapp): clear and migrate every auth credential class

* test(whatsapp): await nullable legacy migration detector
2026-08-03 03:54:41 -07:00
Peter Steinberger 0dbf9b6fae fix(ui): surface fenced-code clipboard failures (#118608)
* fix(ui): surface fenced-code clipboard failures

* fix(ui): ignore stale clipboard attempt completions
2026-08-03 03:43:23 -07:00
Peter Steinberger 0e1a3220ea fix(agents): prevent hosted tools during conversation compaction (#118618) 2026-08-03 03:40:22 -07:00
Peter Steinberger 6d8c1ed30d fix(voice-call): prevent unrelated session recall in fast context (#118498)
* fix(talk): authorize fast session context

* test(plugins): preserve memory runtime mock types

* fix(plugins): preserve memory authorizer binding

* fix(memory): forward search authorization in lazy runtime

* test(memory): verify lazy authorizer host binding

* docs(plugins): define memory search authorization contract
2026-08-03 03:38:02 -07:00
Peter Steinberger 56f02c4956 fix(otel): fail closed when configured proxies are invalid (#118612) 2026-08-03 03:37:58 -07:00
Peter Steinberger 06957a69d8 fix(discord): keep acknowledged interaction replies private (#118611) 2026-08-03 03:34:05 -07:00