Commit Graph

72847 Commits

Author SHA1 Message Date
Vincent Koc
9fbe9abc86 fix(ci): restore Android CodeQL compatibility (#115095) 2026-07-28 11:24:22 +02:00
Vincent Koc
ac157b3af0 fix(openshell): restore sandbox creation on current OpenShell (#115058)
* test(openshell): use structured gateway discovery

* fix(openshell): bound sandbox runtime names

* test(openshell): bound policy sandbox fixture

* docs(sandbox): document compatibility matrix

* fix(openshell): preserve registered runtime identities

* fix(openshell): quote recreate scope safely

* fix(openshell): match shipped legacy names

* docs(sandbox): refresh generated map

* test(sandbox): mock registered runtime lookup

* fix(openshell): reject non-ready legacy runtimes
2026-07-28 11:13:04 +02:00
MatthewSynthia
dd73d4b0da fix(gateway): keep tearing down listeners when cron.stopAndDrain() rejects on shutdown (#114848)
The close handler ran cron.stopAndDrain() and heartbeatRunner.stop() bare, while every sibling
teardown uses shutdownStep() (catch/warn/continue). stopAndDrain() re-throws stream-watcher stop
failures by design, so the rejection skipped the remaining teardown -- wss.close(), httpServer.close(),
client closes, interval clears -- leaving the port bound and timers live; the next listen() then hits
EADDRINUSE. Wrap both calls in shutdownStep. Adds a regression test.

Co-authored-by: MatthewSynthia <matthewsynthia@users.noreply.github.com>
2026-07-28 05:12:12 -04:00
Peter Steinberger
92b4af2dc8 improve(codex): reuse live app-server threads safely (#115089) 2026-07-28 05:08:23 -04:00
Vincent Koc
086d17dd0d refactor(google-meet): reuse OAuth option resolver (#115096) 2026-07-28 11:05:31 +02:00
Peter Steinberger
d1b8701e37 fix(openai): honor per-turn timeout and retry controls (#115017)
Honor existing per-turn timeout and retry controls across OpenAI Responses, Azure Responses, and OpenAI-compatible Chat Completions. Add real SDK HTTP regressions for all three transports.\n\nRefs: #114203
2026-07-28 05:04:51 -04:00
Peter Steinberger
c9b0f4260f fix(matrix): render message history and collapse streamed edits (#115014)
Fixes #101420. Preserve Matrix-native JSON fields while projecting readable message and pin tables. Apply only valid same-sender edits, honor homeserver replacement aggregates, and preserve cross-page updates, redactions, and original thread relationships.
2026-07-28 05:01:37 -04:00
Vincent Koc
4d105ebdd0 refactor(ui): share board provider helpers (#115082) 2026-07-28 16:49:12 +08:00
Peter Steinberger
c1dcabce15 fix: speed up doctor on large SQLite state (#115005)
* fix(sqlite): avoid repeated integrity scans

* chore: leave release notes to release flow

* docs(sqlite): clarify post-repair integrity guard
2026-07-28 04:48:25 -04:00
Vincent Koc
9d5bec8487 fix(deps): remediate tar and Hono advisories (#115029) 2026-07-28 16:48:04 +08:00
Vincent Koc
f8ed8ecf4f fix(security): harden CodeQL-reported boundaries (#115055)
* fix(security): harden CodeQL-reported boundaries

* style(android): fix WebMessage listener indentation
2026-07-28 16:47:12 +08:00
Peter Steinberger
50a97288dd fix(slack): stop cyclic directory pagination (#115056)
* fix(slack): stop cyclic cursor pagination

Co-authored-by: zw-xysk <zhao.wang1@xydigit.com>

* test(slack): initialize read client test runtime

* test(slack): isolate reconnect retry timers

---------

Co-authored-by: zw-xysk <zhao.wang1@xydigit.com>
2026-07-28 04:41:30 -04:00
Peter Steinberger
4b05d83035 fix: generated images do not appear in native chat (#115042)
* fix(chat): render managed images in native clients

Co-authored-by: Francesco Giannicola <francescogiannicola1@gmail.com>

* chore: keep release changelog owned

* refactor(macos): split managed image loading

* test(apple): prove managed image header policy

* test(native): stabilize managed image proof

* test(apple): satisfy strict concurrency checks

---------

Co-authored-by: Francesco Giannicola <francescogiannicola1@gmail.com>
2026-07-28 04:39:53 -04:00
Peter Steinberger
c141496217 fix: full release validation avoids embedded-agent shard stalls (#115019)
* ci: use scoped embedded-agent timeouts

* ci: align frozen-target test watchdogs

* ci: align embedded-agent timeout assertions
2026-07-28 04:38:32 -04:00
Peter Steinberger
fdc1ca073c fix: keep shared web and TUI chats in sync (#115066) 2026-07-28 04:38:12 -04:00
Vincent Koc
958dc13f03 chore(ui): align locales with final catalog 2026-07-28 10:28:33 +02:00
Vincent Koc
e0b8ea3464 Merge pull request #115065 from fix/control-ui-locale-refresh-20260728
* commit '2d10e337908d3f3140f59c77fcf8682410534e0c':
  chore(ui): align locales with current catalog
  fix(i18n): polish generated locale labels
  fix(i18n): restore control UI locale terminology
  chore(ui): refresh control ui locales
2026-07-28 10:28:32 +02:00
clawSean
4b32e6f0e8 fix(imessage): render complete poll selections [AI-assisted] (#114714)
* fix(imessage): render poll selection snapshots

* fix(imessage): scope empty poll selections to sender

---------

Co-authored-by: clawSean <260045960+clawSean@users.noreply.github.com>
Co-authored-by: joshavant <830519+joshavant@users.noreply.github.com>
2026-07-28 03:28:08 -05:00
Peter Steinberger
3f209cf1b7 perf(ui): keep chat render state alive across session switches (#115059)
* perf(ui): keep chat render state alive across session switches

Retain bounded per-session chat items and virtualizer measurements, avoid redundant tool-card walks, and reduce markdown cache churn during rapid switching.

User-visible behavior: switching back to a session now restores its prior reading position while end-anchored sessions continue following the latest message.

* chore(ui): drop dead resetChatThreadPresentationState barrel re-export
2026-07-28 04:27:07 -04:00
Peter Steinberger
b6f8641c28 refactor(ui): consolidate gateway host/status onto the Gateway settings page (#114971)
* refactor(ui): move gateway host panel and connection status to the Gateway page

* test(ui): update e2e expectations for the Gateway settings page move
2026-07-28 04:24:29 -04:00
Vincent Koc
9000da0451 refactor(android): remove unused Wear voice button (#115061) 2026-07-28 16:19:34 +08:00
Peter Steinberger
98b8a18b4c fix(node): harden reconnect and local inference cancellation (#115033)
* fix(node): harden reconnect and local inference cancellation

* fix(browser): refresh bundled gateway client

* fix(gateway): preserve restart after reconnect reset

* fix(node): preserve tracked remote command ownership
2026-07-28 04:18:51 -04:00
Vincent Koc
90564722ec fix(qa-lab): retry failed suite partitions (#115046) 2026-07-28 16:13:22 +08:00
Peter Steinberger
81628fb323 fix(memory): preserve QMD results in noisy command output (#115023) 2026-07-28 04:09:28 -04:00
Peter Steinberger
521d05f290 fix(cli): harden infer provider workflows (#115054) 2026-07-28 04:05:30 -04:00
Peter Steinberger
97c19a98e3 fix(ci): keep fork embedded-agent shard alive on cold runners (#115035)
* fix(ci): unstick fork embedded-agent shard

* test(ci): allow cold embedded harness setup
2026-07-28 04:04:38 -04:00
Bharghav Srinivasan
7072ba50e2 fix(gateway): shutdown reports unresolved SecretRef warnings when channel credentials use exec/file refs (#112717)
* fix(gateway): clear secrets runtime snapshot only after channel teardown

Shutdown cleared the secrets runtime snapshot in the close prelude, which
also drops the pinned runtime config. The channels close step then lazily
re-pins the raw config, so stopChannel's resolveAccount hit unresolved
SecretRefs and every shutdown of a gateway with an exec/file SecretRef
credential logged an unresolved-SecretRef WARN and completed with
warnings. The failed resolveAccount also skipped the per-account stop
bookkeeping (graceful wait, task/abort cleanup, stopped-runtime state)
and the plugin stopAccount hook.

Move the scrub into the close handler's finally block so it still always
runs, but only after every step that can read credentials.

Fixes #112681

* chore: drop release-owned changelog entry

---------

Co-authored-by: FullerStackDev <263060202+fuller-stack-dev@users.noreply.github.com>
2026-07-28 02:01:42 -06:00
Vincent Koc
2d10e33790 chore(ui): align locales with current catalog 2026-07-28 10:00:53 +02:00
Vincent Koc
719950edd2 fix(i18n): polish generated locale labels 2026-07-28 10:00:53 +02:00
Vincent Koc
1c9fa8f514 fix(i18n): restore control UI locale terminology 2026-07-28 10:00:52 +02:00
github-actions[bot]
6fd32035de chore(ui): refresh control ui locales 2026-07-28 10:00:52 +02:00
Nick
5d4ff17d7d fix: macOS reports CLI-only Tailscale as not installed (#114179)
* fix(macos): detect CLI-only Tailscale

* fix(macos): distinguish Tailscale app and CLI installs

Co-authored-by: Nick <18488428+nickxma@users.noreply.github.com>

* chore(macos): refresh native i18n inventory

* test(pr): provide rg in artifact fixture

* fix(macos): gate Tailscale interface evidence

* chore(pr): drop superseded fixture shim

* chore(macos): realign native i18n inventory

* refactor(macos): keep Tailscale status guidance generic

---------

Co-authored-by: Nick <18488428+nickxma@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-28 04:00:18 -04:00
Vincent Koc
75531b2fb7 refactor(plugins): remove dead provider test reset (#115043) 2026-07-28 15:54:06 +08:00
Vito Cappello
accc6ccaa2 improve(sqlite): reuse synchronous prepared statements (#114777)
* perf(sqlite): cache synchronous prepared statements

* fix(sqlite): refresh cached statement metadata

* fix(sqlite): bound cached statement retention

* fix(sqlite): close statement cache lifecycle gaps

* test: suppress SQLite warning in retention child

* test(sqlite): make transcript-load counter statement-cache-aware and allowlist raw test SQL

* test(sessions): type the wrapped iterate against its overloaded signature

* test: share a statement-cache-aware SQLite execution counter across prepare-count tests

* fix(pr): validate head SHA with bash regex so fork-CI runners without ripgrep pass the artifacts-init guard

---------

Co-authored-by: VACInc <3279061+VACInc@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-28 03:53:16 -04:00
Peter Steinberger
5a8939d88e refactor(ui): restructure Communications settings (Messages/Talk/Voice) (#114948)
* refactor(ui): communications settings own messages/talk/voice; channels config lives on Channels page

* test(ui): update route subtitle expectations for communications/infrastructure
2026-07-28 03:48:42 -04:00
Vincent Koc
c738887f05 fix(ui): clarify chat startup status labels (#115044) 2026-07-28 15:47:50 +08:00
Peter Steinberger
fe19f8f54b fix(agents): prevent cancelled prompts from spawning zombie runs (#115011) 2026-07-28 03:43:20 -04:00
Peter Steinberger
0d7fb8eb39 refactor(fs): adopt fs-safe 0.5 core primitives (#113705)
* refactor(fs): unify exclusive file publication

* fix(fs): fence stale lock reclamation

* refactor(fs): bound wiki scans and secret reads

* chore(fs): finalize fs-safe 0.5 compatibility

* fix(fs): preserve publication ownership and legacy mode

* fix(fs): fail closed on unverifiable lock owners

* fix(fs): preserve concurrent backup publications

* refactor(fs): preserve ambiguous backup outputs

* fix(fs): preserve mixed-version lock coordination

* refactor(file-transfer): adopt fs-safe archive extraction

* refactor(fs): add bounded walk and secret seams

* refactor(auth): replace proper-lockfile with fs-safe

* fix(fs): honor Windows mode override casing

* refactor(snapshot): adopt fs-safe publication

* refactor(memory-wiki): adopt prunable root walks

* refactor(fleet): adopt bounded archive restore

* fix(fs): preserve post-publication ownership receipts

* refactor(fs): harvest final fs-safe primitives

* style(fs): clean harvest lint

* chore(plugin-sdk): refresh move helper API baseline

* refactor(snapshot): adopt native Windows ACL facts

* refactor(fs): adopt hardened atomic outputs

* fix(fs): scope lock reentrancy to logical owners

* chore(config): lower env var count budget

* fix(deps): adopt published fs-safe 0.5.0

* fix(ci): align SDK surface ratchets

* fix(ci): regenerate SDK API baseline after rebase

* fix(fs): preserve owner-scoped file lock nesting

* fix(ci): refresh SDK API baseline for file locks

* fix(fs): separate SQLite and file lock reentrancy

* fix(imessage): bound pinned attachment reads

* fix(agents): narrow session-key lock options

* fix(fs): preserve fs-safe 0.5 compatibility contracts

* fix(windows): retain private SQLite directory owner

* refactor(sqlite): centralize exclusive coordinator

* refactor(snapshot): isolate Windows ACL policy

* fix(windows): retain snapshot ACL inspector

* chore(config): realign env budget after rebase

* test(agents): accept canonical sandbox escape error

* docs(changelog): defer fs-safe release note
2026-07-28 03:41:47 -04:00
Peter Steinberger
78d6c6c047 fix(slack): bound read-only Web API calls (#115018)
Co-authored-by: zw-xysk <zhao.wang1@xydigit.com>
2026-07-28 03:37:54 -04:00
Peter Steinberger
6b255f1f74 improve(gateway): reduce plugin startup memory (#115020)
* perf(gateway): reduce plugin startup memory

* test(plugins): cover effective alias order caching
2026-07-28 03:33:03 -04:00
Peter Steinberger
0216fbd4e4 fix(providers): prevent idle timeouts during hidden reasoning (#114997) 2026-07-28 03:30:43 -04:00
Peter Steinberger
0771486cc1 fix(ui): mirror optimistic session-settings patches into the sessions capability snapshot (#115009)
Chat kept optimistic thinking-level and fast-mode row patches only in the
host copy of the session list. Any mid-flight capability publish (for
example the loading flip at the start of the post-patch list refresh)
replaced that copy wholesale and reverted the patched row until the
refreshed canonical list landed. The reasoning slider visibly snapped
back to the inherited default during that window and keyboard commits
landing inside it were swallowed, which is the race behind the flaky
chat-composer-redesign thinking-slider e2e assertion on CI.

patchSessionRow now mirrors the optimistic fields into the published
capability snapshot via a new SessionCapability.patchRowLocal, matching
how model overrides already live capability-side, so intermediate
publishes carry the patch and the revert window is gone.
2026-07-28 03:27:51 -04:00
Vincent Koc
d2d6108d2c fix(qa-lab): filter unsupported profile channels (#115026) 2026-07-28 15:25:36 +08:00
Peter Steinberger
0bc6f7525a fix(tui): recover from transient session subscription failures (#115010) 2026-07-28 03:21:34 -04:00
Peter Steinberger
86e92486aa fix(macos): stop replacement handoff retry storms (#114975)
* fix(macos): bound app replacement handoffs

* chore: leave release notes to release flow

* chore(macos): refresh native i18n inventory

* chore(apps): sync native i18n inventory

* fix(macos): revalidate terminal replacement target
2026-07-28 03:21:25 -04:00
Peter Steinberger
a1174b10b5 fix(usage): normalize current MiniMax quota windows (#115030) 2026-07-28 03:21:16 -04:00
Peter Steinberger
d9b498f7f0 fix(agents): prefer native Windows PowerShell on PATH (#114999) 2026-07-28 03:18:59 -04:00
Peter Steinberger
81478b564e fix(ui): prevent duplicate Workboard widget loads and card moves (#114972)
* fix(ui): coalesce concurrent Workboard widget updates

* fix(ui): remove stale Workboard refresh guard
2026-07-28 03:18:26 -04:00
Peter Steinberger
ca2681313b fix(channels): fail channel start when the durable ingress queue is denied (#114998)
An untrusted channel plugin cannot open its durable ingress queue, but the shared
ingress monitor resolved the queue lazily, so start() armed the poll timer anyway and
every tick re-invoked the throwing factory. On a production gateway that produced one
INFO-level "slack ingress drain failed" line per second for 26+ hours while Slack
reported connected and healthy and every inbound event was silently dropped.

Open the queue before arming the poll timer so an unusable monitor fails channel start
through the caller instead of spinning. Also report the actual denied capability:
openChannelIngressQueue and openSyncKeyedStore both announced themselves as
openKeyedStore, and the message named neither the plugin nor its origin.
2026-07-28 03:17:09 -04:00
Peter Steinberger
177f81028e fix(config): demote tool policy allowlists to advanced settings tier (#114941)
* fix(config): demote tool policy allowlists to advanced settings tier

* fix(config): demote sandbox tool allowlist to advanced tier
2026-07-28 03:16:55 -04:00