Commit Graph

74106 Commits

Author SHA1 Message Date
Peter Steinberger bc4221a07e fix(docker): keep custom-port containers healthy (#116639)
* fix(docker): probe the active gateway port

* fix(docker): register the healthcheck runtime boundary
2026-07-30 20:47:03 -07:00
Peter Steinberger 9979ee312d fix: resolve explicit main aliases to the configured session (#116636)
* fix(sessions): canonicalize explicit main aliases

* test(sessions): seed canonical main entries
2026-07-30 20:31:25 -07:00
licheer-zte 5337e85f11 fix: preserve untouched bytes outside fuzzy-match span in edit tool (#116459) (#116509)
* fix(edit): preserve bytes outside fuzzy-match span on matched lines

When an edit tool call falls back to fuzzy matching (e.g. plain space vs
NBSP, straight quotes vs smart quotes), the entire overlapped line was
rebuilt from the NFKC-normalized copy, silently destroying unrelated
bytes on that line — fullwidth punctuation, halfwidth katakana, em-dashes,
and other Unicode characters outside the edited span.

Root cause:
- applyEdits() set replacementBaseContent to
  normalizeForFuzzyMatch(normalizedContent) when any edit needed fuzzy
  matching.
- applyReplacementsPreservingUnchangedLines then emitted untouched lines
  from the original content but rebuilt touched lines wholesale from the
  normalized base, applying NFKC folding to bytes the edit never
  referenced.

Fix:
- normalizeForFuzzyMatch now optionally returns an offset map that
  translates every normalized position back to the original text.
- fuzzyFindText uses this map to translate match indices from fuzzy-
  normalized coordinates to original-content coordinates.
- applyEdits keeps replacementBaseContent as the original (LF-normalized)
  content and uses direct applyReplacements instead of the line-preserving
  variant. Touch-untouched line distinction is no longer needed because
  replacements splice at byte granularity in the original content.

Fixes #116459

* fix(edit): map fuzzy spans to stable source boundaries

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-31 11:22:07 +08:00
Vincent Koc 7bc216394a fix(ui): preserve mixed schema union values (#116602) 2026-07-31 11:15:21 +08:00
Vincent Koc 16c23377d0 fix(meeting-bot): expose negotiated node capability 2026-07-31 11:09:03 +08:00
Vincent Koc 9a14ee3ad2 fix(meeting-bot): keep node capability internal 2026-07-31 11:09:03 +08:00
Vincent Koc 1bd2f93214 fix(meeting-bot): negotiate realtime output generations 2026-07-31 11:09:03 +08:00
Vincent Koc 4bb0563757 test(meeting-bot): assert output generation restart 2026-07-31 11:09:03 +08:00
Vincent Koc 894640036b fix(meeting-bot): keep realtime config API stable 2026-07-31 11:09:03 +08:00
Vincent Koc ba19bd212e fix(meeting-bot): break realtime support import cycle 2026-07-31 11:09:03 +08:00
Vincent Koc 02da6524c4 test(meeting-bot): cover realtime output owner races 2026-07-31 11:09:03 +08:00
Vincent Koc d7afb133af fix(meeting-bot): track realtime output ownership 2026-07-31 11:09:03 +08:00
Vincent Koc 033bb876c3 fix(meeting-bot): avoid redundant pre-write clears 2026-07-31 11:09:03 +08:00
Vincent Koc 6a7f9dfd5d fix(meeting-bot): invalidate queued output on barge-in 2026-07-31 11:09:03 +08:00
Vincent Koc 66c23e7194 test(meeting-bot): cover human barge-in queue invalidation 2026-07-31 11:09:03 +08:00
Vincent Koc 07433b8b00 test(meeting-bot): cover legacy node audio commands 2026-07-31 11:09:03 +08:00
Vincent Koc f4fbff7682 fix(meeting-bot): coalesce realtime output backlog 2026-07-31 11:09:03 +08:00
Vincent Koc f6eaf3fd7d test(meeting-bot): cover realtime output coalescing 2026-07-31 11:09:03 +08:00
Vincent Koc b361dc29d2 fix(meeting-bot): preserve realtime config type surface 2026-07-31 11:09:03 +08:00
Vincent Koc 402e14cae0 refactor(meeting-bot): split realtime engine support 2026-07-31 11:09:03 +08:00
Vincent Koc 155a17f912 fix(meeting-bot): simplify output waiter release 2026-07-31 11:09:03 +08:00
Vincent Koc 4250552080 fix(meeting-bot): preserve node audio responses 2026-07-31 11:09:03 +08:00
Vincent Koc f69183236c fix(meeting-bot): fence node host playback 2026-07-31 11:09:03 +08:00
Vincent Koc 2c45228fdc fix(meeting-bot): fence node audio generations 2026-07-31 11:09:03 +08:00
Vincent Koc 6266d25a44 test(meeting-bot): cover node host audio fencing 2026-07-31 11:09:03 +08:00
Vincent Koc 18c121e3ad test(meeting-bot): cover node audio generations 2026-07-31 11:09:03 +08:00
Vincent Koc 182c71a428 fix(meeting-bot): honor local audio backpressure 2026-07-31 11:09:03 +08:00
Vincent Koc c96bf5cc9d test(meeting-bot): cover local audio drain 2026-07-31 11:09:03 +08:00
Vincent Koc 443554bae9 fix(meeting-bot): bound realtime egress 2026-07-31 11:09:03 +08:00
Vincent Koc 2c29a6e01c test(meeting-bot): cover realtime egress bounds 2026-07-31 11:09:03 +08:00
Vincent Koc 0a44e8bb5f test(agents): remove redundant path coverage (#116634) 2026-07-31 11:06:47 +08:00
Vincent Koc 8dd575f986 test(browser): remove dead config cases (#116631) 2026-07-31 10:57:55 +08:00
Peter Steinberger 29a92e98ac fix(plugins): recheck cached tool availability (#116625) 2026-07-30 19:51:18 -07:00
Vincent Koc b2cba4073c improve(macos): reuse the Codex App Server client (#116325)
* perf(macos): reuse Codex app server client

* refactor(macos): split Codex app server client

* fix(macos): enforce Codex frame limits per message

* refactor(macos): remove obsolete Codex wrappers

* test(macos): lock Codex wall-clock deadlines
2026-07-31 10:40:54 +08:00
Vincent Koc 776f564081 improve(macos): reuse Claude session discovery across pages (#116324)
* perf(macos): reuse Claude session discovery

* fix(macos): scope Claude discovery reuse to pagination

* fix(macos): keep Claude cursors restart-safe
2026-07-31 10:40:10 +08:00
Vincent Koc cfb9d2ec76 improve(macos): reuse Gateway search path discovery (#116323)
* perf(macos): reuse gateway search path snapshot

* chore(i18n): refresh native source inventory
2026-07-31 10:37:38 +08:00
Peter Steinberger 2f860a7736 fix(gateway): stabilize session creator facets (#116624) 2026-07-30 19:36:33 -07:00
Vincent Koc 9ccc8fcc27 test(infra): run Windows path regressions cross-platform (#116627) 2026-07-31 10:33:51 +08:00
Vincent Koc c3bb8fc265 fix(perf): make Kova startup diagnostics actionable (#116319)
* fix(perf): rank startup duration hotspots correctly

* ci(perf): exercise prepared runtime startup cases
2026-07-31 10:23:32 +08:00
Vincent Koc b6e484e895 improve(agents): index swarm scheduler runs (#116623) 2026-07-31 10:23:29 +08:00
Vincent Koc 0326042c0d improve(agents): scale requester settle batching (#116619) 2026-07-31 10:22:56 +08:00
joshavant 23dbee9e38 fix(github-copilot): honor live model selection in guided setup 2026-07-30 21:15:10 -05:00
joshavant 94542eb872 fix(github-copilot): select available onboarding model 2026-07-30 21:15:10 -05:00
Ryan Gu 63c94952b3 fix: gateway wedges on every startup when legacy runtime-state files conflict with SQLite (#116558)
* fix(state): converge deterministic legacy runtime-state conflicts instead of wedging startup

Four legacy runtime-state sources still use the pre-4da0eb19c570 pattern when
their JSON conflicts with canonical shared SQLite state: they push a startup
warning and leave the file in place. The conflict is deterministic — every
restart re-reads the same file against the same rows — so the warning feeds
startupMigrationWarnings and the readiness gate refuses to report the gateway
ready on every boot, and "openclaw doctor --fix" runs the identical code path
and cannot clear it. That is the same non-converging failure class #112395
reports for the state-dir source and 4da0eb19c5 already removed for
update-check state.

Mirror the merged update-check precedent at all four sites — voice wake
triggers, voice wake routing, plugin binding approvals, and
current-conversation bindings: on deterministic conflict, keep SQLite
canonical, emit a non-blocking notice, and archive the legacy file (the
archive preserves the conflicting payload for operator inspection; nothing is
deleted). Conflicting legacy entries are never imported over existing rows —
unchanged from before. Read failures and migration failures keep their
blocking warnings; the fail-closed boundary for non-deterministic problems
does not move.

The notices flow through the existing collectNotices plumbing that
update-check already uses; the three affected steps now opt in.

Tests: per site, a conflict case asserts no warnings, the exact notice, SQLite
values preserved, and the legacy file archived; malformed-file cases assert
the blocking warning remains. All new cases fail against the previous
behavior.

Refs #112395; complementary to #114678 (state-dir source, same failure class).

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

* fix(state): keep legacy imports retryable

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-31 10:14:54 +08:00
Vincent Koc 0929a00c37 merge: improve local model onboarding (#116606)
* origin/improve/lmstudio-model-setup:
  test(setup): allow timeout fallback without prepare options
  chore(setup): refresh generated native artifacts
  fix(setup): sync macOS onboarding strings
  feat(setup): improve local model onboarding
2026-07-31 10:03:40 +08:00
Harjoth Khara 5e2fec2969 fix(codex): /steer hangs indefinitely when the app-server does not answer turn/steer (#116565)
* fix(codex): bound the app-server turn/steer request so /steer cannot hang forever

* docs(codex): scope the turn/steer comment to verified behavior

* test(codex): prove steer abort clears pending request

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-31 10:01:02 +08:00
Vincent Koc e0e0b7cede test(codex): wait for heartbeat scheduling before timer advance (#116617) 2026-07-31 09:59:41 +08:00
Vincent Koc d5ab7d7d03 fix(ci): run fs-safe removal Windows coverage (#116510)
* test(ci): run fs-safe remove suite on Windows

* test(infra): correct Windows rebind race expectation

* test(infra): exercise Windows rebind hook
2026-07-31 09:58:34 +08:00
Vincent Koc 88876f780b fix(android): preserve device work across lifecycle changes (#116593)
* fix(android): use configured SDK for screenshot AVDs

* fix(android): keep chat jump control clear of messages

* fix(wear): ignore stale control completions

* fix(android): advertise node permission changes

* fix(android): select play flavor for benchmarks

* test(android): decouple cron benchmark from copy

* fix(android): install play variant in perf scripts

* fix(wear): clear gateway control busy state

* fix(android): surface voice e2e connection errors

* test(android): cover common live node commands

* fix(android): retain share parsing across recreation

* fix(android): retain permission requests across recreation

* fix(wear): bind realtime audio to talk attempts

* fix(android): track active permission host

* fix(wear): own gateway control busy state

* fix(wear): admit realtime channels by attempt

* fix(android): refresh permissions on top resume

* fix(wear): serialize reconnect retirement with writes

* chore(i18n): refresh native source inventory

* fix(wear): retain pending audio through start RPC

* fix(wear): negotiate realtime channel compatibility

* test(wear): assert reconnect outcome without owner churn

* fix(android): move settings prompt with active host

* fix(wear): reject stale relay starts

* chore(changelog): leave notes to release generation
2026-07-31 09:49:11 +08:00
Peter Steinberger 3b864a18c4 fix(tui): contain shutdown phase failures (#116609) 2026-07-30 18:47:55 -07:00