70933 Commits
Author SHA1 Message Date
Peter SteinbergerandGitHub 401ef9770e fix(ui): restyle chat pane error banner as a compact centered alert (#111681) 2026-07-19 23:12:03 -07:00
Peter SteinbergerandGitHub e67fda8ec8 fix(clickclack): accept omitted nullable managed-channel fields and auto-open the discussion panel (#111685)
* fix(clickclack): accept omitted nullable managed-channel fields and auto-open the discussion panel

* fix(ui): open the discussion when write access arrives after it resolved
2026-07-19 23:10:29 -07:00
Peter SteinbergerandGitHub f67e55ac00 refactor: unify the embedded-agent fallback run-entry across all four pipelines (#111608)
* refactor(agents): unify fallback run-entry across channel, command, memory, and follow-up paths

* refactor(agents): keep run-entry contracts module-local

* test(reply): derive run-entry params type locally
2026-07-19 23:08:55 -07:00
Peter SteinbergerandGitHub 250e636ffd fix(onboard): reject invalid setup options before writes (#111680)
* fix(onboard): validate setup options before mutation

* fix(onboard): keep flow helper type local
2026-07-19 23:05:23 -07:00
8c9ecd9242 fix(process): use a valid PTY type when TERM is blank (#111261)
* fix(process): ignore blank PTY terminal names

* fix(process): normalize PTY terminal identity

Co-authored-by: LZY3538 <liu.zhenye@xydigit.com>

* fix(process): keep PTY default private

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-19 22:58:24 -07:00
Peter SteinbergerandGitHub 104128dd32 chore(pr): dev-wrapper opt-in — advisory subcommands may dogfood modified wrappers (#111656)
* chore(pr): dev-wrapper opt-in — advisory subcommands may dogfood modified wrappers

* fix(pr): hermetic dev-wrapper test fixture and type narrowing
2026-07-19 22:58:15 -07:00
Peter SteinbergerandGitHub 6e19c36d41 feat(channels): batch 2 producers drop media placeholder bodies (#111665)
* feat(channels): batch 2 producers drop media placeholder bodies

Media-placeholder program batch 2: Discord, Feishu, and MSTeams stop
minting <media:kind> placeholder bodies. Primary bodies carry captions
only; native resources produce ordered structured facts with type-only
facts for failures/rejections (batch-1 alignment contract). Discord
stickers travel as native kind "sticker" (not MIME-derivable); text
carriers (forwarded snapshots, room history, thread starters, pending
text) render via formatMediaPlaceholderText. Feishu audio preflight and
MSTeams unavailable selection move from body-string equality to
structured facts; dead placeholder payload builders deleted.

* test(discord): make allowlist policy explicit
2026-07-19 22:48:32 -07:00
Peter SteinbergerandGitHub 71513436f9 fix(ui): hide system agent from agent roster (#111677) 2026-07-19 22:46:02 -07:00
Peter SteinbergerandGitHub a22ede72e4 fix(ui): redesign the who's-online roster menu (#111668) 2026-07-19 22:24:53 -07:00
e45ebac97a fix(media): m4a/AAC audio files from non-Apple sources are misidentified as video/mp4 and excluded from audio workflows (#111177)
* fix(media): preserve audio hints for isom-brand m4a/AAC files misidentified as video/mp4

* fix(media): correct ambiguous M4A aliases

Co-authored-by: 潘晓波0668000512 <pan.xiaobo@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-19 22:18:23 -07:00
Peter SteinbergerandGitHub bdf71d7d98 refactor(apple): unify offline client databases (#111598)
* refactor(apple): unify offline client databases

* refactor(apple): remove dead cache APIs

* fix(apple): satisfy native storage gates

* fix(apple): sync generated localization catalog

* Revert "fix(apple): sync generated localization catalog"

This reverts commit d0f5e7b74932e98ccc5f1984840e8f9d545edc2d.

* fix(i18n): keep source validation pre-merge

* test(macos): isolate flaky suite state

* test(macos): isolate log locator on main actor
2026-07-19 22:14:12 -07:00
Peter SteinbergerandGitHub 69ee7127c0 fix(ui): prevent chat jump when the working claw appears (#111642)
* fix(ui): smooth working claw transition

* test(ui): satisfy chat transition checks
2026-07-19 22:13:42 -07:00
Peter SteinbergerandGitHub 8f9e42f2a9 fix(cli): report honest SQLite store labels and consistent build SHA in help (#111659) 2026-07-19 22:07:44 -07:00
1508a58674 fix(media): case-sensitive Content-Type checks bypass header extension and image-header safety rules (#111184)
* fix(media): normalize Content-Type casing in header extension and image-header checks

* test(media): consolidate MIME case coverage

Co-authored-by: 潘晓波0668000512 <pan.xiaobo@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-19 21:53:13 -07:00
Jesse MerhiandGitHub ce9e393196 fix: make Back work within channel setup (#108007)
* fix: support Back within channel setup

* docs: note channel setup Back navigation

* fix: keep navigation outcome type private

* style: format navigation outcome type

* chore: leave changelog to release prep
2026-07-20 14:34:05 +10:00
94a2494570 fix(mattermost): probe hangs past deadline when DNS preflight stalls (#111314)
* fix(mattermost): bound probe preflight with guard timeoutMs

* test(mattermost): tighten preflight timeout proof

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

* test(mattermost): isolate preflight timeout path

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

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-19 21:31:05 -07:00
Peter SteinbergerandGitHub 1ee42427ea fix(cli): surface gateway→embedded fallback session divergence in --json output (#111645) 2026-07-19 21:26:58 -07:00
Peter SteinbergerandGitHub d18a7cff8e refactor(ui): extract the steered-message lifecycle into a typed state machine (#111610)
* refactor(ui): extract the steered-message lifecycle into a typed state machine

The steer flow was an implicit state machine spread across five chat modules,
with chip states encoded in loosely coupled optional fields and duplicated
guard predicates. This extracts it behind structural types:

- steered-chip.ts: leaf chip model — SteeredChip union (in-flight requires
  sendState "steering"; acknowledged requires pendingRunId and forbids
  sendState), constructors, and narrowing guards; impossible states are
  unrepresentable and every call site uses the guards
- steer-lifecycle.ts: owns the steer send flow, single terminal retirement
  pipeline (remember -> materialize acked chips -> clear), and history-proven
  retirement; absorbs queued-user-turn.ts
- terminal handling in chat-gateway/chat-state and the stored-outbox history
  verification in chat-send consolidate onto the shared helpers; chat-send.ts
  shrinks by ~300 lines; net prod LOC is flat
- behavior fixes riding the pipeline: acknowledged chips retire once
  authoritative history contains their user turn (no more brief chip/history
  double display) and lingering chips keyed to a filtered run id now retire on
  the next history load
- isTerminalFailureChatSendAck moves to chat-send-contract.ts so ack
  narrowing stays type-safe at every formatter call site

* fix(ui): satisfy type, lint, and dead-export gates for the steer-lifecycle split

- restore the snapshotChatAttachments helper (oxc no-map-spread fires on the
  inlined form)
- select the stored-outbox drain head with an explicit loop; the find-predicate
  form made TS narrow away the failed state and flagged the guard (TS2367)
- drop the unused chip re-exports from steer-lifecycle and the consumer-less
  isSteeredChip guard; chip types stay module-local, guard consumers import
  the steered-chip leaf directly

* style(ui): oxfmt line joins in chat-send and chat-state
2026-07-19 21:14:56 -07:00
Peter SteinbergerandGitHub bc76bb8933 feat(agents): agent-controlled session status, attention, and TTL in the sessions tool (#111583)
* feat(agents): agent-controlled session status, attention, and TTL in the sessions tool

* feat(protocol): sessions.patch agent status fields and curated attention icon ids

* chore(protocol): regenerate bindings for agent-status patch fields, unexport internal cap

* chore(sessions): unexport internal agent-status TTL default
2026-07-19 21:01:09 -07:00
FMLSandGitHub 25d6f13a1f test(browser): add cross-operation tab reference parity contract (#111375) 2026-07-20 11:56:57 +08:00
zengLingbiaoandGitHub 563cc9d480 fix(docs): decode docs search responses with fatal UTF-8 validation (#111288) 2026-07-19 20:56:36 -07:00
NIOandGitHub 503b21dc6b fix(thread-ownership): cancel unread ownership response bodies (#111231) 2026-07-19 20:48:44 -07:00
990916c6ac fix(firecrawl): reject malformed 2xx response envelopes (#111210)
* fix(firecrawl): reject malformed JSON envelopes

* test(firecrawl): use canonical plugin config fixture

Co-authored-by: Alix-007 <li.long15@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-19 20:41:48 -07:00
Peter SteinbergerandGitHub 792f5b7b74 fix(cloud-workers): reconcile workspace results across turns (#111481)
* fix(cloud-workers): preserve accepted workspace manifests

* fix(cloud-workers): keep manifest helpers private

* fix(cloud-workers): harden accepted workspace publication

* fix(cloud-workers): preserve ancestor modes during publication

* fix(cloud-workers): pass manifest path filter to verifier

* refactor(cloud-workers): extract manifest stability check
2026-07-19 20:36:50 -07:00
Peter SteinbergerandGitHub 200653bd60 fix(gateway): generate dashboard titles despite sender metadata (#111613)
* fix(gateway): keep sender identity out of session titles

* docs(changelog): note dashboard session title fix

* test(gateway): type dashboard sender fixture

* docs: keep session title release note in PR
2026-07-19 20:26:28 -07:00
0af934cbf9 fix(doctor): stream heartbeat transcript scans without full-file reads (#110721)
* fix(doctor): stream heartbeat transcript scans with record caps

* fix(doctor): bound heartbeat recovery scans

Signed-off-by: sallyom <somalley@redhat.com>

---------

Signed-off-by: sallyom <somalley@redhat.com>
Co-authored-by: sallyom <somalley@redhat.com>
2026-07-19 23:25:53 -04:00
LZY3538andGitHub e1a82f4991 fix(cron): ignore blank Windows shell override (#111260) 2026-07-19 20:18:36 -07:00
Peter SteinbergerandGitHub 6d39d3cf0b fix(onboard): preserve gateway settings on rerun (#111569)
* fix(onboard): preserve gateway config on rerun

* fix(onboard): scope remote secrets to endpoint

* fix(onboard): honor rerun override boundaries

* fix(onboard): secure inherited tailscale auth

* fix(onboard): honor explicit token auth

* fix(onboard): enforce funnel auth on rerun

* fix(onboard): preserve env password on rerun
2026-07-19 20:18:34 -07:00
cacd98304e fix(sandbox): cancel CDP probe response bodies (#109767)
* fix(sandbox): cancel unsuccessful CDP probe responses

Release unread response bodies when sandbox CDP startup probes receive
non-success statuses so retry loops do not retain transport resources.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(sandbox): cancel all CDP probe responses

* test(sandbox): simplify CDP probe cleanup coverage

Signed-off-by: sallyom <somalley@redhat.com>

---------

Signed-off-by: sallyom <somalley@redhat.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: sallyom <somalley@redhat.com>
2026-07-19 23:12:27 -04:00
Peter SteinbergerandGitHub 7d4dccf959 improve(swarm): close out wait, phase, and worker follow-ups (#111605)
* fix(codex): support full swarm wait budgets

* feat(ui): bucket swarm dots by phase

* docs(swarm): document flat worker patterns

* fix(codex): configured per-tool timeout still wins over swarm wait default

* fix(codex): outer swarm-wait watchdog outlives the 600s budget (cap + grace)

* fix(ui): order swarm phase buckets by observation rank

* fix(ui): repair rank-order widget test — proper lit render container, untangle sibling assertions

* fix(ui): implicit swarm phase assignment only on child creation events

* test(ui): split swarm activity integration coverage
2026-07-19 20:11:54 -07:00
zengLingbiaoandGitHub 19314aa31a fix(agents): reject non-UTF-8 MCP App sandbox CSP metadata (#111282) 2026-07-19 20:11:34 -07:00
Peter SteinbergerandGitHub 3564c1c795 fix(test): bound Matrix test process memory (#111607)
* test: bound Matrix test process memory

* test: align Matrix runner mock contract
2026-07-19 20:04:14 -07:00
a8dd80afc0 fix(plugins): cancel discarded TTS contract response bodies (#111340)
* fix(plugins): cancel discarded TTS contract response bodies

* test(plugins): mark TTS API key fixture synthetic

Co-authored-by: zenglingbiao <zeng.lingbiao@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-19 20:02:44 -07:00
Peter SteinbergerandGitHub eb3a600571 fix(ui): preserve native context menu for chat links (#111618) 2026-07-19 19:58:37 -07:00
mushuiyu886andGitHub 367fe9a42b fix(chutes): report cache-read pricing from live catalog (#111253) 2026-07-19 19:56:42 -07:00
Peter SteinbergerandGitHub da10827439 feat(ui): accept drag-and-drop attachments in the new-session composer (#111530)
* feat(ui): accept drag-and-drop attachments in new-session composer

The new-thread composer only accepted attachments via paste and the +
menu; dragging a file onto it was silently ignored. Wire the shared
chat attachment drop handling onto the composer shell with the same
balanced drag affordance as the chat pane, and gate both composers'
drop/dragover cancellation on file drags so text/URL drops keep the
textarea's native behavior.

* fix(ui): cancel non-file drops outside editable composer targets

A URL dropped on the transcript, header, or composer chrome would hit
the browser default and navigate the app away, discarding drafts. Keep
native text/URL drops only when the drop target is an editable control;
cancel them everywhere else in both composers.

* fix(ui): treat disabled and readonly inputs as non-editable drop targets

A URL dropped precisely on a disabled composer textarea would still hit
the browser default and could navigate away. Check actual editability
(disabled/readOnly/isContentEditable) instead of selector shape.

* fix(ui): limit native drops to text-entry inputs

Enabled non-text inputs (checkbox, range) counted as editable drop
targets, so a URL dropped on one skipped cancellation and could
navigate the browser away. Restrict the native-drop exception to
text-capable input types, textareas, and contenteditable content.
2026-07-19 19:55:29 -07:00
Peter SteinbergerandGitHub 64c82812a5 feat(dashboard): pinned MCP apps — board rendering, lease re-mint, durable tool grants (#111524)
* feat(boards): mint pinned MCP app views

* feat(ui): render pinned MCP apps on dashboards

* fix(dashboard): reconcile MCP app rebase

* fix(dashboard): align generated CI contracts

* test(gateway): record board.widget.appView release train

* fix(dashboard): revalidate pinned MCP app views
2026-07-19 19:51:26 -07:00
Peter SteinbergerandGitHub ddf57c083f fix(onboard): keep invalid wizard retries unpersisted (#111558)
* fix(onboard): validate wizard retries before persist

* fix(onboard): stage retry auth profiles until verified

* test(onboard): clarify staged credential fixtures

* refactor(onboard): preserve immediate provider auth path

* fix(onboard): retain staged auth across retries

* fix(onboard): isolate rejected auth repairs

* fix(onboard): retain verified credential refreshes

* test(onboard): mark credential fixtures synthetic

* test(onboard): use canonical secret placeholders

* refactor(onboard): destructure staged profile stores

* fix(onboard): retain rotated staged credentials

* test(onboard): use valid timeout status

* refactor(onboard): keep staged auth helper private
2026-07-20 02:47:21 +00:00
Peter SteinbergerandGitHub b07985ef45 feat(ui): show waiting-for-approval run status in chat (#111445)
* feat(ui): show waiting approval run status

* fix(ui): hydrate waiting approval status

* fix(ui): correlate approval status by run

* fix(ui): harden approval status reconciliation
2026-07-19 19:44:25 -07:00
Yiğit ERDOĞANandGitHub 301657f2f3 fix(agents): keep exec ANSI sanitizer state across stream chunks (#111364)
The local exec runtime sanitized each stdout/stderr chunk with the
stateless `sanitizeBinaryOutput`, so an escape sequence straddling a read
boundary was escaped into visible text instead of being consumed. The
remote bash path already uses a per-stream parser via
`createStreamingBinaryOutputSanitizer` (#103706); this applies the same
treatment to the local path, with separate parsers for stdout and stderr
so neither stream can consume the other's pending sequence.
2026-07-19 19:34:07 -07:00
mushuiyu886andGitHub a20e08a56e fix(skills): keep ClawHub search results on one line (#111441) 2026-07-19 19:18:54 -07:00
mushuiyu886andGitHub c5bc6c3d2d fix(duckduckgo): preserve words around highlighted matches (#111460) 2026-07-19 19:09:09 -07:00
Wynne668andGitHub 27f05c8993 fix(inworld): reject malformed base64 TTS audio (#111197) 2026-07-19 20:48:46 -04:00
Wynne668andGitHub 0074270056 fix(xai): reject malformed streamed TTS base64 (#111201) 2026-07-19 20:40:53 -04:00
Wynne668andGitHub 8a858c9c65 fix(openai): reject malformed Codex image base64 (#111235)
* fix(openai): reject malformed Codex image base64

* fix(openai): align Codex image base64 trimming

* fix(openai): match Codex base64 decoding
2026-07-19 20:40:18 -04:00
Peter SteinbergerandGitHub 3c0f55b58f fix(gateway): prevent cross-client system-agent session takeover (#111565)
* fix(gateway): bind system-agent sessions to callers

* test(gateway): type system-agent response helper
2026-07-19 16:05:18 -07:00
Peter SteinbergerandGitHub c5f9addb52 fix(ui): keep custodian transcript aligned after inference errors (#111562)
* fix(ui): reconcile invalidated custodian sessions

* test(ui): preserve custodian page harness type
2026-07-19 16:00:08 -07:00
a0c3067b54 fix(qa-lab): bound evidence checkout ref git probe with timeout (#111448)
Co-authored-by: thomas.szbay <thomas.szbay@example.com>
2026-07-19 15:48:53 -07:00
Peter SteinbergerandGitHub e0b1a39d2a improve(i18n): generate native locales after merge (#111557)
* ci(i18n): move native locale generation post-merge

* fix(i18n): allow generated Android companions
2026-07-19 15:42:41 -07:00
Peter SteinbergerandGitHub 3247a56d15 fix(ui): prevent cross-file mock leakage in Control UI tests (#111554)
* test(ui): stop shared mock registry leakage

* ci: add three-worker UI leakage canary
2026-07-19 15:38:50 -07:00