Commit Graph

70446 Commits

Author SHA1 Message Date
mushuiyu886
4e11da2872 fix(process): UTF-8 command output corrupts at Windows byte limits (#105274)
* fix(process): preserve byte-capped UTF-8 output on Windows

* fix(process): skip codepage probe for UTF-8 output

Co-authored-by: 杨浩宇0668001029 <yang.haoyu@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-18 22:44:12 +01:00
Peter Steinberger
7a551bff0c fix(vault): aggregate provider outage diagnostics (#110908)
* fix(vault): aggregate provider outage diagnostics

* fix(vault): classify revoked token outages

* fix(vault): preserve scoped ACL failures

* fix(vault): keep token probes advisory

* test(vault): satisfy gateway proof gates

* fix(secrets): attribute web provider outages

* test(secrets): prove web outage fan-out in owner suite

* fix(vault): scope malformed responses per secret

* test(secrets): harden exec fanout fixtures
2026-07-18 22:44:06 +01:00
Peter Steinberger
fa9ae68c34 docs(agents): draft-then-ready PR creation prevents the merge-ref CI race (#110970) 2026-07-18 22:41:10 +01:00
Wynne668
7e4a76a6d0 fix(amazon-bedrock): ignore blank region env overrides (#110676)
* fix(amazon-bedrock): ignore blank region env overrides

* fix(amazon-bedrock): normalize region envs across runtimes

Co-authored-by: ZengWen-DT <ceng.wen@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-18 22:38:51 +01:00
Peter Steinberger
fc777a35bb test(telegram): mock core turn dispatcher (#110967) 2026-07-18 22:35:56 +01:00
Wynne668
d5b2749fd8 fix(ai): skip blank environment credentials during provider auth (#109691)
* fix(ai): ignore blank environment API keys

* test(ai): avoid credential-shaped fixture assignments

Co-authored-by: ZengWen-DT <ceng.wen@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-18 22:33:54 +01:00
NIO
848dbcabba fix(signal): keep REST timeout through slow-drip response bodies (#109047)
* fix(signal): keep REST timeout through slow-drip response bodies

* fix(signal): share REST operation deadlines

Co-authored-by: NIO <hu.genshen@xydigit.com>

* test(signal): preserve REST deadline errors

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-18 22:33:26 +01:00
Peter Steinberger
77a42adce4 fix(test): re-point workspace bootstrap fault injection at the bounded fd reader
#109945 replaced the readFileSync(fd) call in readWorkspaceFileWithGuards
with readFileDescriptorBounded, which consumes the descriptor via fs.read.
The two transient-read tests still injected EAGAIN through readFileSync,
so the fault never fired: one asserted a retry that never happened and the
other asserted missing=true while the real read succeeded. Inject at the
fs.read seam instead; retry classification in prod is unchanged and the
full file passes 58/58 again.
2026-07-18 14:30:28 -07:00
Peter Steinberger
7a70daf55d test(agents): update bootstrap read mocks (#110966) 2026-07-18 22:28:08 +01:00
Peter Steinberger
0135c6bf89 test: cover Codex version contracts on dependency bumps (#110958) 2026-07-18 22:09:50 +01:00
Peter Steinberger
5fe8d6a852 fix(gateway): clients can identify authorization failures (#110925)
* fix(gateway): structure authorization errors

* test(gateway): align authorization contracts

* fix(gateway): regenerate protocol bindings

* fix(gateway): preserve optional scope errors

* fix(gateway): report complete pairing scopes

* style(gateway): format protocol exports
2026-07-18 22:02:28 +01:00
NIO
bde17f99e9 fix(mantis): bound upload error response bodies (#109044)
* fix(mantis): bound upload error response bodies

Replace unbounded response.text() on non-ok upload error paths with
readBoundedResponseText (64 KiB cap). Only swallow the size-exceeded
diagnostic; propagate signal aborts and other failures so timeouts
during body reading are not masked as generic upload failures.

- Import shared readBoundedResponseText from scripts/lib/bounded-response.mjs
- Add MANTIS_UPLOAD_ERROR_BODY_MAX_BYTES constant (64 KiB)
- Catch only size-exceeded errors; re-throw timeouts and stream errors
- Add test: oversized body bounded at 64 KiB
- Add test: signal abort during body read propagates correctly
- Add test: small error body within bound reads normally

* fix(mantis): contextualize bounded upload failures

Co-authored-by: 胡根深 0668000903 <hu.genshen@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-18 22:00:15 +01:00
sheyanmin
ff3ed99cde fix(usage-bar): validate meter width with strict integer parsing (#110410)
* fix(usage-bar): validate meter width with strict integer parsing

* fix(usage-bar): restore canonical meter width range [0, 100]

* fix(usage-bar): preserve bounded meter defaults

Co-authored-by: sheyanmin <she.yanmin@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-18 21:57:11 +01:00
Peter Steinberger
242093fb00 fix(ui): dark theme AA contrast for coral fills — deepen primary/destructive, add widget accent-fill token (#110957) 2026-07-18 21:56:24 +01:00
Wynne668
21c341d548 fix(push): ignore blank timeout env overrides (#110677) 2026-07-18 21:54:33 +01:00
juyaohuidt
31f2c51ca2 fix(auto-reply): bound AGENTS.md read in post-compaction context (#109945)
* fix(auto-reply): bound AGENTS.md read in post-compaction context

readPostCompactionContext read the entire AGENTS.md with an unbounded
fs.readFileSync even though it only extracts a small (<=1800 char) section
for the continuation prompt. A pathologically large AGENTS.md forced an
unbounded allocation at compaction time. Use readFileDescriptorBoundedSync
with a 2 MiB limit (matching the workspace bootstrap file limit) and skip
the file with a warning when it exceeds the bound, instead of reading it all.

* fix(agents): bound workspace bootstrap reads

Co-authored-by: 琚耀辉0668001366 <ju.yaohui@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-18 21:52:23 +01:00
NIO
598f13a5f3 fix(zai): keep probe deadline through stalled error-body reads (#109026)
* fix(zai): keep probe deadline through stalled error-body reads

Fixes an issue where Z.AI endpoint detection could hang indefinitely
when a probe returned error headers and then stalled on the error
response body. The previous helper cleared the AbortSignal as soon as
fetch resolved headers, so a never-chunking error body bypassed the
probe deadline.

Keep one AbortController deadline across the probe request and the
bounded error-body read, and pass a clamped chunkTimeoutMs into
readResponseWithLimit so a stalled error body fails closed inside the
remaining budget. The chunkTimeoutMs is clamped to the remaining
deadline after fetch returns headers, so the idle timeout does not
outlast the overall probe deadline.

Tighten the stalled-body test timing assertion from 5s to 2x timeoutMs
to verify the deadline is actually respected.

* fix(zai): enforce probe body deadline

Co-authored-by: NIO <noreply@github.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: NIO <noreply@github.com>
2026-07-18 21:51:15 +01:00
mushuiyu886
1da345e9d3 fix(mcp): clamp oversized MCP timeouts (#105784)
* fix(mcp): clamp oversized MCP timeouts

* fix(mcp): centralize timer-safe timeout normalization

Co-authored-by: 杨浩宇0668001029 <yang.haoyu@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-18 21:50:19 +01:00
Peter Steinberger
3383e35aa3 feat: add visible session spawn parity (#110943)
* feat(agents): add visible spawn parity

* feat(agents): expose spawn tools to messaging profile

* test(agents): messaging profile now includes sessions_spawn
2026-07-18 21:50:10 +01:00
tzy-17
09c46fb682 fix(stt-live-audio): cancel ElevenLabs error response body (#110759)
Avoid buffering unbounded provider error streams and cover the resource lifecycle with a deterministic cancellation contract.

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-18 21:48:04 +01:00
Wynne668
6646719c05 fix(thread-ownership): ignore blank forwarder URL env overrides (#110675) 2026-07-18 21:45:35 +01:00
Peter Steinberger
42bacaa112 feat(ui): call chat sessions threads and quiet the sidebar sections (#110933)
* feat(ui): call chat sessions threads and quiet the sidebar sections

Thread naming on every creation surface (new-thread page, draft row,
+ tooltips, untitled-thread fallback, New Chat guard toasts). The draft
placeholder now renders as the first item inside the Threads section and
genuinely expands a collapsed section so the header toggle stays honest.
Empty sidebar sections no longer render (Coding keeps its CLI-catalog
exception); expanded section headers reveal their chevron only on
hover/focus while collapsed headers keep chevron + count. The new-thread
button moves from the macOS titlebar strip into the sidebar brand row
next to the agent picker (bigger, offline-aware); the titlebar + renders
only while the rail is collapsed. Mobile drawer shows the new + as well.

* fix(ui): keep empty custom groups and the mid-drag Threads drop target

Empty-section hiding narrows to the Threads zone at rest: user-created
categories stay visible when empty (New group… creation and drag-into-group
flows depend on them), and an empty Threads section reappears while a
session drag is in flight so drag-to-unpin keeps its drop target.

* test(ui): drag-to-unpin targets the sessions surface

The empty Threads section only materializes mid-drag, so Playwright cannot
pre-resolve it as a drop target; the sessions container's drop handler owns
the unpin and sends {pinned:false} without a category reset.
2026-07-18 21:42:52 +01:00
Peter Steinberger
81362bf643 feat(apps,ui): question surface parity and composer takeover (#110681)
* feat(apple): question parity — persistent summaries, skip, reconnect fallback, macOS keyboard

* feat(android): question parity — persistent summaries, skip, reconnect fallback

* feat(ui): question panel replaces composer while expanded

* fix(apps): regenerate question parity contracts

* fix(apps): preserve question reconciliation state

* fix(apps): keep question terminal state monotonic

* test(android): satisfy question test formatting

* fix(security): restore skill audit file reads

* fix(apps): harden question parity edge cases

* fix(apps): preserve expired question summaries

* fix(apps): keep question recovery retries current

* fix(apps): retry stale question recovery snapshots

* fix(android): reset stale question retry budgets

* docs(tools): clarify question composer takeover

* fix(apps): satisfy question recovery release gates

* fix(apps): preserve unknown question outcomes

* fix(apps): harden question action state

* fix(apps): keep unavailable questions terminal

* fix(apps): finalize local question outcomes

* fix(apps): preserve question card API

* fix(apps): reconcile external question answers

* fix(apps): reset question backoff budget

* chore(apps): refresh native i18n inventory

* fix(android): distinguish question skip progress

* fix(android): reconcile locally expired questions

* fix(apps): keep question recovery state fresh

* docs: note question surface parity

* fix(ui): reconcile IME draft before question takeover

* docs: leave question parity notes to release workflow
2026-07-18 21:42:15 +01:00
Peter Steinberger
09a64f7ab0 feat(models): make per-agent allowlists explicit (#110888) 2026-07-18 21:42:05 +01:00
Peter Steinberger
019e42e013 fix(ios): auto-scroll to the reply when sending with the keyboard open (#110944) 2026-07-18 21:41:47 +01:00
Wynne668
a9fb5b4e3f fix(diagnostics-otel): ignore blank protocol env overrides (#110674) 2026-07-18 21:38:44 +01:00
Peter Steinberger
0f5d030cb1 fix(ci): sweep PRs with unknown mergeability — stuck merge-ref is the target pathology (#110945)
Live verification showed dropped-CI PRs report mergeable=null and
mergeable_state=unknown indefinitely: the stuck merge-ref computation is
the same failure that dropped their CI, and close/reopen is what
un-sticks it. The pending-mergeability skip therefore made the primary
repair population permanently unsweepable (three real dropped PRs skipped
across three consecutive sweeps). Keep skipping computed conflicts; a
not-yet-computed conflict costs at most one budgeted re-fire.
2026-07-18 21:37:53 +01:00
Peter Steinberger
47f42fdda9 feat(cron): unattended-run preamble and watcher-authoring guidance (#110949)
* feat(cron): add unattended-run preamble to isolated agent turns

Isolated cron and hook agent turns received only the job tag, message,
and time line — no operating contract for unattended execution. Runs
ended in questions, plans, or bare acknowledgements (the runtime even
re-prompts once for interim acks). Append a static per-class preamble:
the final reply is the deliverable, HEARTBEAT_OK when idle, plain
failure statements. Trusted jobs additionally defer to the job's own
instructions on conflict and learn removal-only self-cleanup;
external-hook runs get only the common core so fenced webhook content
cannot use an override clause or a destructive affordance advertised in
the trusted suffix. Free-form job names stay out for the same reason.

* feat(cron): teach watcher authoring rules in the cron tool description

Trigger-script guidance covered only the return contract. Add the
operating rules that keep watchers trustworthy: fire on every
actionable state including failures (success-only watchers go silent
when broken), dedupe via returned state, keep scripts read-only with
actions in the payload, and make the fired message self-contained.
2026-07-18 21:35:30 +01:00
mushuiyu886
331eb0d439 fix(huggingface): discover models when HTTP proxy is required (#110924) 2026-07-18 21:31:24 +01:00
Peter Steinberger
b6f905b410 test(codex): repair app-server extension shard fixtures (#110951) 2026-07-18 21:29:36 +01:00
Wynne668
37b0b12eb7 fix(tlon): release failed upload response bodies (#110442)
* fix(tlon): release failed upload response bodies

* fix(tlon): settle guarded upload responses

Co-authored-by: ZengWen-DT <ceng.wen@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-18 21:19:03 +01:00
SymbolStar
a7e47653fc fix(cron): run explicit wakes outside heartbeat hours (#105830)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-18 21:10:27 +01:00
Peter Steinberger
ef7f4f2a61 feat(ui): Labs settings page for experimental feature toggles (#110359)
* feat(ui): add Labs settings page

* chore(ui): drop changelog entry — release generation owns CHANGELOG

* fix(ui): drop lint suppression, sync Apple i18n catalogs for Labs keys

* ci: retrigger CI on current head

* docs(ui): clarify swarm labs-entry gating comment
2026-07-18 21:08:52 +01:00
Peter Steinberger
2bcbe3a612 feat(reef): follow up on unconfirmed deliveries instead of staying silent (#110938)
* feat(reef): follow up on unconfirmed deliveries instead of staying silent

* test(reef): satisfy lint and test-type gates for delivery notices

* test(reef): keep rejection notifier mock signature untyped
2026-07-18 21:08:10 +01:00
Peter Steinberger
1cacb12c4d feat(canvas): give show_widget a design system — theme tokens, base styles, live host theme bridge (#110832) 2026-07-18 21:05:16 +01:00
WhatsSkiLL
1626a1696c fix(ui): clean up timed-out channel wizard starts (#110146)
* fix(ui): clean up timed-out channel wizard starts

* refactor(ui): centralize stale wizard cleanup

Co-authored-by: WhatsSkiLL <284122573+IWhatsskill@users.noreply.github.com>

---------

Co-authored-by: IWhatsskill <284122573+IWhatsskill@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-18 20:59:44 +01:00
Peter Steinberger
377303da9f fix(openai): sync Codex catalog client version (#110936)
* fix(openai): sync Codex catalog client version

* docs(changelog): note Codex catalog version sync

* docs(changelog): defer Codex catalog note to release
2026-07-18 20:52:49 +01:00
Peter Steinberger
09fa5818e8 refactor(ui): render Ask OpenClaw chat through the shared chat presentation layer (#110934) 2026-07-18 20:52:44 +01:00
Peter Steinberger
1d492f5c53 fix(gateway): honor scopes for WebChat session mutations (#110931)
* fix(gateway): authorize webchat session mutations by scope

* chore: keep gateway release note in PR body
2026-07-18 20:48:39 +01:00
zw-xysk
db1b932749 fix(cron): prevent re-enabled active run overlap (#102255)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-18 20:48:15 +01:00
Omar Shahine
bbad877aed fix: deliver Codex-generated images on message-tool routes (#110893)
* fix: deliver Codex-generated images on message-tool routes

* test(codex): cover native image delivery path

Document trusted harness artifact provenance and cover the runner-to-dispatch bridge.\n\nRelease note: Codex-generated images now reach message-tool-only routes while normal source suppression remains intact.\n\nCo-authored-by: Omar Shahine <10343873+omarshahine@users.noreply.github.com>

---------

Co-authored-by: Omar Shahine <10343873+omarshahine@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-18 20:45:57 +01:00
Peter Steinberger
bf2da1ce1a fix(agents): parent resumes after yielded child handoff (#110922)
* fix(agents): resume handoff after requester yield

* fix(agents): retain handoff through requester settle

* fix(agents): avoid duplicate future-child wake

* fix(agents): rearm in-flight handoff on yield
2026-07-18 20:39:23 +01:00
WhatsSkiLL
2632969aae fix(ui): use clipboard fallback in setup wizards (#110139)
* fix(ui): use clipboard fallback in setup wizards

* test(ui): verify wizard clipboard payloads

Co-authored-by: WhatsSkiLL <284122573+IWhatsskill@users.noreply.github.com>

---------

Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: WhatsSkiLL <284122573+IWhatsskill@users.noreply.github.com>
2026-07-18 20:36:30 +01:00
Peter Steinberger
be80cc747c feat(zalouser): recover accepted messages after local crashes (#110916)
* feat(zalouser): add durable ingress recovery

* fix(zalouser): settle aborted ingress claims

* fix(zalouser): preserve concurrent ingress lanes

* docs: refresh generated channel map

* refactor(zalouser): simplify ingress abort listener
2026-07-18 20:32:30 +01:00
Peter Steinberger
d630f8dc2c feat(gateway): parent dashboard sessions to agent main (#110913) 2026-07-18 20:30:56 +01:00
Dallin Romney
6325b0f3c4 fix(qa): hydrate full profile live credentials (#110897) 2026-07-18 12:29:13 -07:00
Peter Steinberger
7359009dcc test(memory-wiki): allow agent isolation proof to finish (#110919) 2026-07-18 20:27:58 +01:00
Peter Steinberger
6589788c02 docs: The main session concept page and shipped-sidebar updates (#110905)
* docs: add The main session concept page and cross-links

* docs: precise memory-priming wording on the main-session page

* docs: update Control UI sidebar description to the Home and zones model
2026-07-18 20:23:09 +01:00
Peter Steinberger
a314a3e3be fix(cron): preserve flattened triggers (#110912) 2026-07-18 20:20:32 +01:00
Peter Steinberger
3dd26e7d9c feat(irc): add durable ingress queue (#110914)
* feat(irc): add durable ingress queue

* fix(irc): preserve ingress connection context

* fix(irc): accept colonless privmsg bodies

* fix(irc): pause ingress during disconnects

* fix(irc): ignore self echoes in activity

* fix(irc): bind private ingress to connections
2026-07-18 20:19:19 +01:00