Commit Graph

36980 Commits

Author SHA1 Message Date
Masato Hoshino
c0b6b846ac fix(acp): record cancelled background turns as cancelled, not succeeded (#101245)
* fix(acp): record cancelled background turns as cancelled, not succeeded

A cancelled parented ACP turn resolves without throwing (only failed turns
throw), so the turn-runner success path recorded the detached task as
succeeded. Thread the terminal status out of consumeAcpTurnStream and branch
at the runner; widen markBackgroundTaskTerminal to accept cancelled, routed
through the existing failTaskRunByRunId sink. The runTurn fallback infers
cancellation from done.stopReason, mirroring the acpx adapter.

* fix(acp): narrow cancelled task status handling

Co-authored-by: masatohoshino <g515hoshino@gmail.com>

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-06 19:32:40 -07:00
Peter Steinberger
6273e82ca5 fix(lint): drop unused TRANSCRIPT_NOT_CONTINUABLE_ERROR_CODE import in model-fallback test 2026-07-06 19:29:35 -07:00
Peter Steinberger
1a307be2e0 feat(skills): add lifecycle curator for workshop-created skills (#101214)
Tracks per-skill usage from the skill.used diagnostic event (trusted-only
delivery, file-scoped identity), sweeps workshop-created skills daily from
gateway maintenance (active -> stale 30d -> archived 90d, pinned bypass,
restore-only unarchive, files never touched), filters archived skills from
snapshots fail-open, reports workspace-scoped overlap candidates, and adds
openclaw skills curator CLI, additive gateway methods, and a warn-only
doctor finding. Zero new config keys; SQLite/Kysely state only.
2026-07-07 03:25:44 +01:00
Vincent Koc
143751282c fix(agents): honor long lane timeouts 2026-07-07 04:17:46 +02:00
Sanjay Santhanam
00a8dae28b fix(agent-model): omit synthesized maxTokens fallback when nothing was configured (#98312)
* fix(agent-model): omit synthesized maxTokens fallback (Fixes #98295)

The configured-fallback resolver used DEFAULT_CONTEXT_TOKENS (200_000) as
the last-resort value for model.maxTokens when no configured, provider,
or bundled-catalog value was known. For strict OpenAI-compatible providers,
model.maxTokens is forwarded as max_completion_tokens on every request,
so the synthesized 200k value became a wire-level output cap that exceeded
the provider ceiling and produced HTTP 400 (Param Incorrect) on providers
like Xiaomi MiMo (131_072 max) — reported for mimo-v2.5 / mimo-v2.5-pro
added via 'models add' on a custom provider entry.

The sibling applyConfiguredProviderOverrides path already omits maxTokens
when nothing resolves; align resolveConfiguredFallbackModel with that
behavior. When the transport sees an undefined model.maxTokens, it omits
max_completion_tokens entirely and the provider applies its own default,
which is the correct behavior when the user has configured no output limit.

contextWindow retains DEFAULT_CONTEXT_TOKENS as its local budgeting
fallback (it is not shipped on the wire).

* test(agents): prove unknown output cap omission

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-07 03:15:03 +01:00
Ayaan Zaidi
486033b183 fix(agents): normalize compaction recovery tails
Compaction failure and timeout recovery can no longer leave a session transcript assistant-last and wedged after restoring pre-compaction state.

Transcript-continuation failures now carry a typed agent-core error code and no longer demote the active model through model fallback scoring.

Surface: embedded agent runner compaction recovery, model fallback classification, packages/agent-core.

Refs #100312. Includes regression coverage for #99943.
2026-07-07 02:09:21 +00:00
Ayaan Zaidi
b1da734a1e fix(logging): recover orphaned stalled lanes
Stalled sessions could leave a session lane occupied by an orphaned active task after the embedded run handle was gone. Diagnostics repeatedly reported the stuck state, but the lane stayed held and queued turns could remain blocked indefinitely.

Release ownerless active lane tasks after the stale threshold, while guarding against fresh lane work and raised compaction safety windows so recovery does not double-run serialized session work or overlap transcript compaction. Stalled model-call recovery also no longer requires an in-process embedded run handle, so no-handle stalls can be reclaimed by the existing conservative recovery path.

Refs #99847.

Refs #94650.
2026-07-07 02:07:45 +00:00
Ayaan Zaidi
ec289357a4 fix(agents): keep embedded lane watchdog bounded
Wedged model calls could hold an agent session lane for the normalized max timer duration when the user disabled the run timeout. In production that path resolves to MAX_TIMER_TIMEOUT_MS, so a zero-progress model call could block sibling work for about 24.8 days instead of failing through the normal terminal outcome path.

Cap the lane watchdog at the default agent deadline plus the existing grace window while preserving explicit shorter run timeouts. The disabled/max-timeout case now releases the lane at the default 48h deadline instead of inheriting the timer sentinel.

Refs #97588.

Refs #94650.
2026-07-07 02:07:45 +00:00
qingminlong
d6f097b3de fix(agents): normalize surrogate cache fingerprints (#101009)
* fix(agents): normalize surrogate cache fingerprints

* fix(agents): reuse provider surrogate sanitizer

* chore(agents): keep transport imports grouped

* fix(agents): avoid runtime import for surrogate sanitizer

* fix(agents): scope surrogate cache normalization

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-07 03:06:56 +01:00
ZOOWH
63d71f4ab1 fix(chat.abort): pass stored sessionId to match active embedded runs (#101222)
* fix(chat.abort): pass stored sessionId to match active embedded runs

The chat.abort RPC path was missing sessionId in the abort resolver
call, unlike the /stop path which passes entry?.sessionId. This meant
resolveAuthorizedRunsForSessionKeys could not match active runs
registered by sessionId, causing chat.abort to report aborted:false
while the tool subprocess continued running.

Fix: load the session entry in the chat.abort handler and pass
entry?.sessionId to abortChatRunsForSessionKeyWithPartials, giving
it the same match dimension that /stop already uses.

* test(gateway): tighten chat abort session matching proof

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-07 03:05:39 +01:00
Peter Steinberger
0d981095d4 refactor(codex): store app-server thread bindings in SQLite plugin state (#101210)
* test(codex): shorten placeholder auth fixture strings

* feat(plugin-state): add reject-new overflow policy for keyed namespaces

* feat(agents): thread agent identity and session generation through reset and hooks

* refactor(codex): add SQLite-backed app-server thread binding store

* refactor(codex): move app-server runtime callers onto the binding store

* refactor(codex): move conversation, entry, and thread-tool flows onto the binding store

* refactor(codex): move command handlers onto the binding store

* feat(codex): import legacy binding sidecars via doctor state migration

* fix(codex): keep doctor sidecar scan inside stateDir

* fix(codex): make binding migration landable

* chore(changelog): defer release note

* test(plugin-state): stabilize durable-capacity ordering
2026-07-07 03:03:44 +01:00
ianchen08
a27e3f3a99 fix(auto-reply): stop treating wait as abort trigger (#98639)
* fix(auto-reply): stop treating wait as abort trigger

* test(channels): treat wait as debounced text

* docs: remove wait from abort phrases

---------

Co-authored-by: Ian Chen <ianchen@IandeMBP.home>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-07 03:03:23 +01:00
Dallin Romney
253b784468 test(qa): use qa flow for channel routing scenarios (#101076)
* test(qa): canonicalize channel routing scenarios

* test(qa): enforce Crabline actor allowlists

* test(qa): preserve canonical flow integration

* test(matrix): use retained topology fixture id

* test(qa): preserve WhatsApp live defaults

* QA: declare channel transport policy in scenarios

* refactor(qa): keep transport policy type local

* refactor(qa): keep transport policy on leaf contract

* test(matrix): use retained routing fixture
2026-07-06 18:35:41 -07:00
Alba María Téllez Fernández
349d3547cc fix(security): align browser audit with plugin policy (#97732)
* fix(security): respect plugin policy in browser audit summary

* fix(security): reuse browser plugin activation policy

Co-authored-by: Alba María Téllez Fernández <amtellezfernandez@gmail.com>

* fix(security): keep browser config behind plugin policy

Co-authored-by: Alba María Téllez Fernández <amtellezfernandez@gmail.com>

* chore(security): keep release notes in PR body

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-07 02:27:05 +01:00
Josh Lehman
cb0d8a1294 refactor(sessions): move inbound meta, goals, and delivery reads behind the session accessor (#101180) 2026-07-06 18:07:26 -07:00
Josh Lehman
4e2a80cac3 refactor(sessions): route new session store bypasses through the accessor (#101179) 2026-07-06 18:05:18 -07:00
Gio Della-Libera
97777a7026 policy: repair channel ingress findings (#99720)
* policy: repair channel ingress findings

* policy: skip scoped inherited ingress repairs

* fix(policy): keep doctor lint findings generic

---------

Co-authored-by: Gio Della-Libera <giodl@microsoft.com>
2026-07-06 18:03:40 -07:00
Vincent Koc
775ef966c3 refactor(deadcode): localize internal type aliases (#101243) 2026-07-06 17:57:32 -07:00
kenners22
ffa6ebda4c fix(cli): protect protocol stdout during startup (#89997)
* fix(cli): suppress mcp serve startup stdout

* fix(cli): suppress mcp serve startup stdout

* fix(cli): protect protocol stdout during startup

* fix(cli): match ACP protocol options at startup

* fix(cli): derive protocol ownership from command action

---------

Co-authored-by: JARVIS <kenners22@users.noreply.github.com>
Co-authored-by: openclaw-clownfish[bot] <280122609+openclaw-clownfish[bot]@users.noreply.github.com>
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
Co-authored-by: Vincent Koc <25068+vincentkoc@users.noreply.github.com>
2026-07-06 17:55:50 -07:00
Vincent Koc
f305e707a3 feat(models): add Claude Mythos 5 support (#101238) 2026-07-06 17:19:49 -07:00
Darren2030
7c0d11eac1 fix(gateway): don't over-claim a crash on a 1006 abnormal close (#101219)
* fix(gateway): don't over-claim a crash on a 1006 abnormal close

A 1006 close code means abnormal closure with no close frame, most often a
connection dropped under a burst of concurrent tool calls or event-loop
saturation — the gateway process typically stays healthy. The troubleshooting
text listed "Gateway crashed or was terminated unexpectedly" as a co-equal
cause, so an operator could pattern-match it and restart a healthy gateway.
Lead with the actionable dropped-under-load cause and demote the
unreachable/terminated case to "rare; confirm it is still running".

Addresses ask 3 of #100941. The connection-pooling and concurrency-cap asks
are architectural and intentionally out of scope, so this does not auto-close
the issue.

Refs #100941

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

* fix(gateway): keep 1006 diagnostics cause-neutral

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-06 16:47:17 -07:00
Peter Steinberger
dbba3d2a8e fix(ci): stabilize Windows startup fallback tests (#101223)
* test(windows): stabilize startup fallback fixtures

* ci(windows): route daemon scheduler changes
2026-07-07 00:37:50 +01:00
Peter Steinberger
bab9952801 test(windows): isolate fallback ownership models 2026-07-06 19:28:02 -04:00
Dallin Romney
95e3b9243b test: execute media and Talk runtime boundaries (#101091)
* test: execute media and Talk runtime boundaries

* test(qa): centralize gateway fixture startup

* test(qa): check in voice call plugin fixture
2026-07-06 16:25:33 -07:00
zengLingbiao
db25e9ec52 fix(web-shared): bound response.text() fallback to honor maxBytes (#99884)
* fix(web-shared): bound response.text() fallback to honor maxBytes

readResponseText's .text() fallback path ignored the maxBytes option,
reading the full body unbounded. When a foreign Response lacks a body
stream (no getReader) and no arrayBuffer(), the .text() call was the
last resort — but maxBytes was never applied.

- Honor maxBytes in the .text() fallback: truncate + set truncated=true
- Under-cap responses pass through unchanged
- No maxBytes set → original behavior preserved (regression safe)

* fix(web-shared): use byte-level truncation in .text() fallback

Replace text.length/text.slice (character-level) with TextEncoder/
TextDecoder (byte-level) so the maxBytes cap is respected at byte
granularity, consistent with the bounded-stream path at lines 240-298.

- bytes.byteLength > maxBytes instead of text.length > maxBytes
- TextDecoder().decode(bytes.slice(0, maxBytes)) for byte-safe truncation
- bytesRead reports actual bytes, not character count

* fix(web-shared): refuse unbounded .text() when maxBytes is set

When maxBytes is set the caller expects bounded memory. The .text()
fallback path buffers the full body before any post-read check,
defeating the cap. Fail-closed by returning empty with truncated=true
instead of calling .text() unbounded.

Without maxBytes .text() is safe — the caller accepts full allocation.

* fix(web-shared): byte-level truncation in .text() fallback with maxBytes

The .text() fallback used text.length (characters) and text.slice
(char-level) against a byte-level maxBytes cap. Use TextEncoder/
TextDecoder for byte-accurate comparison and truncation.

- bytes.byteLength > maxBytes instead of text.length > maxBytes
- TextDecoder().decode(bytes.slice(0, maxBytes)) for byte-safe truncation
- bytesRead reports actual byte count, not character count

* fix(web): fail closed on unbounded response fallbacks

* test(web): use streaming response fixtures

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-07 00:24:36 +01:00
Vincent Koc
2c11f11303 feat(provider): add Featherless AI integration 2026-07-06 16:17:44 -07:00
Peter Steinberger
bb44c2311d fix(windows): repair legacy gateway fallback updates (#101213)
* fix(windows): repair doctor update fallback migration

* fix(windows): remove hidden startup fallback launchers

* fix(windows): preserve recovered gateway tokens

* fix(windows): harden update fallback migration

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>

* fix(windows): capture fallback runtime before task rewrite

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>

* fix(windows): complete legacy update restart handoff

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>

* fix(windows): verify fallback ownership during migration

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>

* fix(windows): honor update restart policy during repair

* fix(windows): wait for task takeover evidence

* fix(windows): preserve fallback after direct task launch

* fix(windows): preserve repaired task identity

* fix(windows): snapshot gateway before repair

* fix: scope update service repair ownership

* style: satisfy update lint checks

* fix: restart gateways stopped during updates

* fix(windows): enforce fallback process takeover

* fix(windows): prove fallback ownership during takeover

* fix(windows): verify process exit during takeover

* fix(windows): wait through fallback reloads

* fix(windows): harden fallback takeover ownership

* fix(windows): type takeover preflight inputs

* fix(windows): recognize booting replacement task

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>

* chore: leave changelog release-owned

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-07 00:09:48 +01:00
Vortex Openclaw
1f6ddb5df0 feat(models): add Claude Sonnet 5 support (#98254)
* feat(models): add Claude Sonnet 5 support

Co-authored-by: Ariel Bravy <ariel@vortexradar.com>

* fix(models): align Sonnet 5 validation baselines

* fix(models): satisfy Sonnet 5 CI contracts

* fix(models): enforce Sonnet 5 provider contracts

* docs(changelog): defer Sonnet 5 release note

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: Ariel Bravy <ariel@vortexradar.com>
2026-07-07 00:05:35 +01:00
Josh Lehman
d5e9b4d1a3 fix: preserve preflight overflow token counts into recovery budgeting (#101181)
Budget context engine assembly against the reserve and rendered prompt
pressure, and carry the preflight estimated prompt tokens, prompt budget,
and overflow tokens into the outer overflow recovery loop so compaction
engines compact against the prompt OpenClaw actually rendered instead of
a minimally over-budget guess.
2026-07-06 15:58:11 -07:00
velanir-ai-manager
8d46971129 fix: sanitize streamed assistant payload text (#101036)
* fix: sanitize streamed assistant payload text

* test(agents): cover streamed reply sanitization

---------

Co-authored-by: Yash Inani <yashinani@Yashs-MacBook-Pro.local>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-06 23:38:04 +01:00
Martin Moellenbeck
cac05ff695 Fix realtime voice-call barge-in cancellation (#90749)
* fix voice call realtime barge-in cancellation

* chore: retrigger PR checks

* chore: retrigger PR checks

* fix voice call realtime barge-in fallback

* fix voice call provider barge-in precedence

* fix voice call speech-started fallback contract

* fix late provider barge-in queued audio clear

* fix realtime handler test raw message parsing

* chore rerun ci

* Document realtime speech-start capability

* fix voice call barge-in interruption policy

* fix(voice-call): centralize realtime barge-in

Co-authored-by: Martin Möllenbeck <martin.moellenbeck@5minds.de>

* chore(changelog): leave voice fix to release flow

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-06 23:30:16 +01:00
Peter Steinberger
2655bf4dac fix(clawhub): bound archive download bodies (#101176)
* fix(clawhub): bound archive download bodies

Co-authored-by: NIO <nocodet@mail.com>

* docs(changelog): note ClawHub archive bounds

* chore(changelog): defer ClawHub release note

* fix(clawhub): avoid response-limit shadowing

---------

Co-authored-by: NIO <nocodet@mail.com>
2026-07-06 23:29:25 +01:00
Peter Steinberger
254b819d7d fix: prevent context-engine wedges after session rotation (#101192)
* fix(sessions): create rotated transcript before callbacks

* chore: keep release note in PR body

* chore: keep release note in PR body
2026-07-06 23:25:58 +01:00
ZOOWH
4204a94845 fix(edit): show candidate lines with similarity scores on oldText match failure (#97038)
* fix(edit): show candidate lines on oldText match failure

When edit tool cannot find oldText, include up to 3 near-match candidate
lines with similarity scores and line numbers. Caps input size (MAX_LINES
3000, MAX_LINE_LEN 200) to avoid unbounded CPU on large files. Reuses
existing levenshteinDistance helper.

Closes #97032

* fix(edit): use toSorted instead of sort for candidate ranking

Fixes lint violation: unicorn(no-array-sort)

* fix(edit): keep candidate truncation branch-compatible

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-06 15:21:56 -07:00
Jason (Json)
17d3c2eb0a feat(ui): redesign chat composer controls (#100461)
* feat(ui): redesign chat composer controls

* fix(ui): preserve scoped chat model catalogs

* fix(ui): honor configured default agent in chat commands

* fix(ui): align composer translations and tests

* test(ui): expect cached chat commands

* fix(ui): inset composer attachment previews

* fix(ui): add attachment preview top padding

* fix(ui): preserve composer layout after main merge

* fix(ui): keep abort available during voice input

* fix(ui): merge duplicate model provider groups

* feat(ui): finalize chat composer redesign

* fix(ui): refine composer layout and scroll indicators

* fix(ui): align composer with chat column

* fix(ui): restore composer max width

* fix(ui): match composer Codex width

* fix(ui): stabilize chat composer controls

* docs: refresh generated map

* fix(ui): discard rejected model drafts

* fix(ui): clear chat composer CI gates

* test(ui): await rejected model rollback

* fix(ui): address chat composer review findings

* fix(ui): preserve default provider ordering

* fix(ui): stage model picker changes until save

* fix(ui): scope model picker drafts to chat context

* fix(ui): align composer drafts and message actions

* fix(ui): preserve reasoning rendering

* feat(ui): refine chat composer interactions

* fix(ui): repair chat composer CI checks

* fix(ui): repair chat composer integration checks

* fix(ui): translate chat composer labels

* fix(ui): restore mobile camera action

* test(ui): target visible attachment control

* test(ui): locate attachment disclosure directly

* fix(ui): preserve composer control ordering

* test(ui): track current composer controls

* fix(ui): honor terminal active-run state

* fix(ui): guard command metadata ownership

* fix(ui): stage agent model defaults

* fix(ui): preserve chat settings and scroll signals

* fix(ui): reconcile merged chat controls

* fix(ui): localize Talk composer options

* test(ui): infer chat control props

* fix(ui): refresh agent model metadata on session switch

* style(ui): format merged chat controls

* test(ui): avoid shadowed composer geometry names
2026-07-06 16:18:36 -06:00
mushuiyu886
b75fe8102e fix(acp): preserve runtime option clears (#101044)
* fix(acp): preserve runtime option clears

* refactor(acp): simplify runtime option clears

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-06 23:12:50 +01:00
cxbAsDev
0e0888a887 fix(agents): handle ripgrep stdout/stderr stream errors in grep tool (#101014)
* fix(agents): handle ripgrep stdout/stderr stream errors in grep tool

* fix(agents): terminate ripgrep child on stdout/stderr stream errors

* test(agents): make mock child reflect kill state in grep stream-error test

* refactor(agents): harden grep stream cleanup

* refactor(agents): centralize grep stream failure cleanup

* test(agents): model grep child kill state safely

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-06 23:12:23 +01:00
cxbAsDev
3f9ee4c5a1 fix(agents): handle stdin stream errors in docker sandbox execution (#101032)
* fix(agents): handle stdin stream errors in docker sandbox execution

* fix(agents): terminate Docker child on stdin stream error

* fix(agents): add real proof for docker stdin stream errors

* refactor(agents): fold Docker stdin failure coverage into existing tests

* test(agents): model Docker stdin as an event stream

* test(agents): narrow Docker stream mocks before emit

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-06 23:12:04 +01:00
Peter Steinberger
b7d73e3b23 fix(infra): contain SSH config probe stream failures (#101160)
* fix(infra): harden ssh config probe cleanup

Co-authored-by: 陈宪彪0668000387 <chen.xianbiao@xydigit.com>

* fix(infra): satisfy ssh probe lint

* chore(changelog): defer ssh probe release note

---------

Co-authored-by: 陈宪彪0668000387 <chen.xianbiao@xydigit.com>
2026-07-06 23:11:21 +01:00
Peter Steinberger
38746af071 feat(gateway): let write-scope operators manage chat session organization (#100964)
sessions.patch becomes a params-aware dynamic-scope method: operator.write
now authorizes patches that touch only user-level chat-organization fields
(label, category, pinned, archived, unread); every other field, mixed
patches, and unknown keys keep requiring operator.admin (fail closed).
This unblocks the session controls shipped in #100814 for the Android app,
whose bounded operator session intentionally never requests operator.admin.

Also: session list ordering gains a deterministic key tiebreaker for equal
pinnedAt/updatedAt (stable offset paging and prompt-cache friendliness), a
user-assigned label now beats stored channel-derived display names in the
row projection so renames survive refreshes, and subagent spawn pins its
gateway calls to admin via the params-aware least-privilege resolver
instead of the static admin-only method check (#59428 contract preserved).

Refs #100712
2026-07-06 21:08:26 +01:00
Dallin Romney
2f7299eaa5 test(qa): add provider runtime evidence (#101051) 2026-07-06 13:01:32 -07:00
Peter Steinberger
80537c1ba4 feat(macos): load provider catalog during AI onboarding (#101132)
* feat(macos): load onboarding providers from gateway

* test(crestodian): widen setup config mock

* fix(crestodian): satisfy onboarding lint gate

* chore(macos): refresh onboarding localization inventory

* test(plugins): cover guided Copilot secret metadata
2026-07-06 20:57:56 +01:00
Peter Steinberger
3accc99b43 fix(agents): handle find subprocess stream failures (#101158)
Co-authored-by: 陈宪彪0668000387 <chen.xianbiao@xydigit.com>
2026-07-06 20:56:36 +01:00
xingzhou
565097fc10 fix(media-understanding): video auto-selection runs without a model (#99791)
* fix: require video media provider models

* fix video media test typing and skip coverage

* fix(media-understanding): preserve self-defaulting video providers

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-06 12:42:01 -07:00
Mark
db38127c22 [codex] Allow reply_payload_sending to add portable buttons (#98922)
* fix(telegram): retry plugin callback submit text

* fix(telegram): harden plugin callback submit text

* fix(telegram): preserve plugin callback submit semantics

* fix(telegram): release callback dedupe after submit failure

* fix(telegram): settle skipped plugin callback submissions

* style(telegram): format public API exports

* chore: leave changelog to release generation

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-06 20:17:41 +01:00
cxbAsDev
4d1ed548f4 fix(infra): wrap sha256File stream errors with context instead of leaking raw rejects (#101085)
* fix(infra): wrap sha256File stream errors with context instead of leaking raw rejects

* test(infra): prove sha256 stream error context

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-06 12:09:56 -07:00
Peter Steinberger
912af0a56f fix(gateway): keep N-1 nodes manageable during upgrades (#101109)
* fix(gateway): allow N-1 node protocol maintenance

* docs: refresh generated map for node upgrade guide
2026-07-06 20:01:20 +01:00
Ben.Li
afcc93bfc7 fix(cli): keep UTF-8 log tails valid (#101029)
* fix(cli): keep UTF-8 log tails valid

* fix(cli): share UTF-8-safe byte tails

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-06 19:47:22 +01:00
NIO
9ef7fff570 fix(agents): bound tool_search_code stderr accumulation (#101007)
* fix(agents): bound tool_search_code stderr accumulation

* fix(agents): report latest bounded stderr

---------

Co-authored-by: NIO <nocodet@mail.com>
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-06 11:38:25 -07:00
Moes
673b87a403 fix(cli): explain inherited config defaults cannot be unset (#96557)
* fix(cli): clarify config unset runtime defaults

* fix(cli): explain runtime-only config unset

Co-authored-by: Moe Ghashim <mohanadgh@gmail.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-06 19:15:19 +01:00