Peter Steinberger and GitHub
401ef9770e
fix(ui): restyle chat pane error banner as a compact centered alert ( #111681 )
2026-07-19 23:12:03 -07:00
Peter Steinberger and GitHub
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 Steinberger and GitHub
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 Steinberger and GitHub
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 Steinberger and GitHub
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 Steinberger and GitHub
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 Steinberger and GitHub
71513436f9
fix(ui): hide system agent from agent roster ( #111677 )
2026-07-19 22:46:02 -07:00
Peter Steinberger and GitHub
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 Steinberger and GitHub
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 Steinberger and GitHub
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 Steinberger and GitHub
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 Merhi and GitHub
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 Steinberger and GitHub
1ee42427ea
fix(cli): surface gateway→embedded fallback session divergence in --json output ( #111645 )
2026-07-19 21:26:58 -07:00
Peter Steinberger and GitHub
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 Steinberger and GitHub
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
FMLS and GitHub
25d6f13a1f
test(browser): add cross-operation tab reference parity contract ( #111375 )
2026-07-20 11:56:57 +08:00
zengLingbiao and GitHub
563cc9d480
fix(docs): decode docs search responses with fatal UTF-8 validation ( #111288 )
2026-07-19 20:56:36 -07:00
NIO and GitHub
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 Steinberger and GitHub
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 Steinberger and GitHub
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
LZY3538 and GitHub
e1a82f4991
fix(cron): ignore blank Windows shell override ( #111260 )
2026-07-19 20:18:36 -07:00
Peter Steinberger and GitHub
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 Steinberger and GitHub
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
zengLingbiao and GitHub
19314aa31a
fix(agents): reject non-UTF-8 MCP App sandbox CSP metadata ( #111282 )
2026-07-19 20:11:34 -07:00
Peter Steinberger and GitHub
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 Steinberger and GitHub
eb3a600571
fix(ui): preserve native context menu for chat links ( #111618 )
2026-07-19 19:58:37 -07:00
mushuiyu886 and GitHub
367fe9a42b
fix(chutes): report cache-read pricing from live catalog ( #111253 )
2026-07-19 19:56:42 -07:00
Peter Steinberger and GitHub
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 Steinberger and GitHub
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 Steinberger and GitHub
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 Steinberger and GitHub
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ĞAN and GitHub
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
mushuiyu886 and GitHub
a20e08a56e
fix(skills): keep ClawHub search results on one line ( #111441 )
2026-07-19 19:18:54 -07:00
mushuiyu886 and GitHub
c5bc6c3d2d
fix(duckduckgo): preserve words around highlighted matches ( #111460 )
2026-07-19 19:09:09 -07:00
Wynne668 and GitHub
27f05c8993
fix(inworld): reject malformed base64 TTS audio ( #111197 )
2026-07-19 20:48:46 -04:00
Wynne668 and GitHub
0074270056
fix(xai): reject malformed streamed TTS base64 ( #111201 )
2026-07-19 20:40:53 -04:00
Wynne668 and GitHub
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 Steinberger and GitHub
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 Steinberger and GitHub
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 Steinberger and GitHub
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 Steinberger and GitHub
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