Commit Graph

66940 Commits

Author SHA1 Message Date
Peter Steinberger
6e9e64bd30 fix: current-tree package checks support unreleased versions (#104186)
* fix(ci): package unreleased QA builds safely

* style(ci): format QA changelog intent
2026-07-10 22:31:42 -07:00
Peter Steinberger
81a201df26 feat: add portable table presentation blocks (#103583)
* feat(presentation): add portable table blocks

* chore(presentation): refresh generated contracts

* fix(slack): preserve table fallback payloads

* docs(changelog): note portable message tables

* fix(presentation): preserve cross-channel fallback delivery

* chore(plugin-sdk): refresh rebased contracts

* test(slack): align accessibility expectations

* fix(presentation): harden cross-channel fallback delivery

* chore(plugin-sdk): refresh rebased contracts

* docs(changelog): defer portable table release note

* fix(presentation): satisfy extension lint

* chore(plugin-sdk): refresh surface budgets

* fix(telegram): preserve reactions after progress replies

* fix(slack): preserve rendered preview fallback text

* fix(feishu): preserve oversized presentation fallbacks

* docs(changelog): note portable message tables

* docs(changelog): defer portable table release note

* chore(plugin-sdk): refresh rebased contracts

---------

Co-authored-by: Peter Steinberger <steipete@openai.com>
2026-07-10 22:29:13 -07:00
Peter Steinberger
fc44e18e5e fix(cron): publish removals after durable commit (#104130)
* fix(cron): publish removals after durable commit

* test(cron): cover skipped removal persistence
2026-07-10 22:28:38 -07:00
Peter Steinberger
4b3d4020d3 fix(macos): offer CLI channels for unreleased builds (#104178)
* fix(macos): choose CLI channel for dev builds

* chore: leave release notes to automation

* chore(macos): sync native string inventory

* style(macos): wrap CLI channel guidance

* fix(macos): return CLI version policy
2026-07-10 22:27:57 -07:00
Ayaan Zaidi
79bfa3771c refactor(gateway): centralize agent wait lifecycle (#104147)
* refactor(gateway): centralize agent wait lifecycle
* fix(gateway): preserve agent wait freshness

---------

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-07-11 10:56:40 +05:30
Vincent Koc
358d4cd4cc fix(pr): reject stale canonical wrapper code 2026-07-10 22:24:36 -07:00
Peter Steinberger
58b0ec9e50 feat(gateway): auto-approve node pairing via SSH device-key verification (#104180) 2026-07-10 22:23:10 -07:00
Peter Steinberger
dc42c893c3 improve(ios): redesign share extension compose sheet (#104187) 2026-07-10 22:22:15 -07:00
Vincent Koc
31484524a5 fix(release): preserve node across telegram qa masks (#104175) 2026-07-11 13:22:06 +08:00
Vincent Koc
2158873a3c fix(release): preserve canonical main PR provenance (#104166)
* fix(release): canonicalize changelog PR provenance

* fix(release): finalize changelog provenance policy

* fix(release): resolve canonical PRs from current main

* fix(release): support divergent beta baselines
2026-07-11 13:21:15 +08:00
Peter Steinberger
465646a68e feat(gateway): summarize startup outcomes (#104183) 2026-07-10 22:20:59 -07:00
Peter Steinberger
cb64117416 feat: session menu adds Open PR, Open in editor, and numbered group shortcuts (#104154)
* feat(ui): add Open PR, Open in editor, and numbered group shortcuts to the session menu

* fix(ui): lift session menu to popover top layer and use shadow tokens
2026-07-10 22:17:18 -07:00
Josh Avant
487ab99dc2 fix(sessions): preserve active work during maintenance (#104137) 2026-07-11 00:16:37 -05:00
Peter Steinberger
9f53f8a256 feat(macos): import local browser login (#104177)
* feat(macos): import local browser login

* chore: leave release notes to release workflow

* chore(macos): refresh native i18n inventory

* chore(macos): refresh native i18n inventory

* chore(macos): refresh native i18n inventory

* chore: sync release summary executable bit

* chore(macos): refresh native i18n inventory

* style(macos): wrap browser import result

* chore(macos): refresh native i18n inventory

* chore(macos): refresh native i18n inventory
2026-07-10 22:14:36 -07:00
Peter Steinberger
36e0ac3576 fix(logs): clean up gateway and channel startup/shutdown log output (#104174)
* fix(logs): clean up gateway and channel startup/shutdown log output

Scope Discord slash-command deploy REST diagnostics to command routes so
concurrent startup traffic (voice-state probes, channel lookups) keeps its
owner's error handling; make per-request deploy error lines verbose-only and
drop JSON bodies that only repeat message+code. Log allowlist summaries one
line per call so unresolved lines keep their timestamp/subsystem prefix, and
skip identity lookups that resolved to themselves. Remove embedded subsystem
prefixes, demote routine signal/shutdown/force/postbuild/diag chatter to
debug or verbose, merge the duplicate Control UI build notices, drop doctor's
duplicate backup line, and name the config surface or platform limit in the
transcripts autoStart and command-limit warnings.

Fixes #104163

* fix(slack): keep bare-name allowlist resolutions in startup log summary

Only omit identity lookups where the input already is the resolved id;
name-based lookups that translated to an id stay logged even when the
display name matches the input.

* fix(telegram): keep isolated-ingress readiness marker on the runtime log

test/e2e/qa-lab telegram-bot-token-runtime waits for this line via the
injected RuntimeEnv.log; verbose-only logging would deterministically time
out that live proof. Comment the contract at the call site.
2026-07-10 22:13:33 -07:00
Peter Steinberger
1c08d96d8b feat(android): durable offline chat with attachments and history-proof retirement (#104089)
* feat(android): durable offline chat with attachments and history-proof retirement

Every chat send is journaled to the per-gateway Room outbox before any
network attempt, so process death always has one durable recovery owner.
Rows survive gateway ACKs as 'accepted' and retire only once the turn is
proven in canonical chat.history by idempotency key; ambiguous outcomes
(lost ACK, kill mid-send, gateway restart before the transcript write)
park as delivery-unconfirmed for explicit retry, per the fail-closed
model #103273 landed. An unproven accepted head briefly holds only its
own session's queue, and retrying a parked head re-orders still-queued
successors behind it. Offline sends now accept picked images and voice
notes; attachment bytes persist as chunked BLOBs (512 KB chunks, 8 MB
per message, 48 MB per gateway) admitted and retired atomically with
their row. Pre-hello 'main' rows pin to the canonical session at first
dispatch so later default-agent changes cannot retarget captured input;
slash commands are connection-gated by a persisted epoch (legacy queued
command rows migrate to a never-matching sentinel) and never auto-replay
across reconnects. The Room store moves to schema v4 on top of v3's
data-parking migration, adding the epoch column and attachment tables
while preserving queued rows. The queued->sending claim is an atomic
compare-and-set shared by the direct dispatch and the flush loop, the
direct path waits for the startup recovery sweep before claiming, and
failed reconnect attempts republish outbox rows so queued sends stay
visible on offline cold starts.

Proof: 1151 Android unit tests and :app:ktlintCheck green (new
migration, storage, and controller coverage for admission, restarts,
claims, pinning, gating, ordering, and byte round-trips); a live
emulator scenario on the pre-integration build queued text+image
offline, survived force-stop plus a device reboot, resent exactly once
on reconnect (single <rowId>:user turn in the gateway transcript), and
drained the outbox after canonical-history confirmation.

Closes #104087.

* fix(android): rearm outbox recovery when direct-send state persistence fails

* fix(android): keep direct dispatch alive across caller cancellation

The direct send's network phase now runs in the controller scope, so a
cancelled UI scope (leaving the chat screen mid-send) can no longer
strand a claimed row in 'sending' with no user action available; the
dispatch completes and settles the row exactly once. Direct-path state
persistence failures also re-arm the startup recovery sweep, mirroring
the flush path's fail-closed handling.

* fix(android): hand claim-persistence failures to the flush lane

A direct-send claim that fails to persist no longer reads as a lost race:
the admitted row is handed to the flush lane so a healthy connection still
delivers it, and the flush path's fail-closed handling owns any repeated
storage failure instead of the UI reporting success with no active owner.

* fix(android): enforce connection gating and fail-closed parking on every send path

The direct dispatch now rechecks a slash command's connection epoch after
its durable claim, so a reconnect between admission and dispatch parks the
command instead of replaying it on the new connection. Parking a stale
gated row only counts once the write persists; a storage failure drops
health, re-arms recovery, and halts the flush pass instead of spinning or
dispatching the stale row.

* fix(android): recognize gateway-acknowledged run ids in outbox ownership checks

A chat.send ACK can return a run id that differs from the row's
idempotency key (the direct path transfers local run ownership to it).
Ownership, in-flight, backlog, and timeout-park checks now consider both
ids, so reconciliation can no longer park — and Retry can no longer
duplicate — a turn that is still running on the gateway.

* fix(android): close remaining ack-ownership and persistence-failure gaps in the outbox

Flushed sends acked under a divergent run id now transfer local run
ownership like the direct path, so live runs cannot time out and surface
spurious errors for delivered turns. A session pin that cannot persist
stops the dispatch while the row is still safely queued. Reconcile and
timeout parking only report changes their writes actually persisted,
failing closed on storage errors.

* docs(android): record why acknowledged run ids stay in-memory
2026-07-10 22:12:25 -07:00
SunnyShu
a6bdc8092b fix(session-memory): honor configured slug model (#97007)
* [AI] fix(session-memory): forward hook config model to LLM slug generator

When llmSlug is enabled with a model override in the session-memory hook
config, that model was ignored — slug generation always resolved the
agent default model via resolveDefaultModelForAgent.

Add an optional model parameter to generateSlugViaLLM and pass
hookConfig.model from the session-memory handler. When a hook model is
provided, only the model is forwarded (provider is omitted) so
runEmbeddedAgent's built-in resolveInitialEmbeddedRunModel chain handles
alias, provider-qualified ref, and bare-name resolution through a single
source of truth — avoiding the routing drift that blocked prior PRs.

Fixes #89551

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix(session-memory): centralize slug model resolution

Honor the session-memory slug model override while keeping default, alias, and provider-qualified model selection in the embedded runner.

Co-authored-by: SunnyShu <shu.zongyu@xydigit.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-10 22:08:12 -07:00
Alix-007
8f8aad9ae6 fix(minimax): add timeouts to OAuth HTTP requests (#102862)
* fix(minimax): add timeouts to OAuth HTTP requests

* fix(minimax): remove duplicate OAuth abort signals

* refactor(minimax): keep OAuth timeout internal

* test(minimax): make OAuth timeout proof deterministic

---------

Co-authored-by: llagy009 <0668001470@xydigit.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-10 22:02:34 -07:00
Alix-007
b09f9b0482 fix(openrouter): apply request policy to video catalog requests (#102062)
* fix(openrouter): apply request policy to video catalog requests

* fix(openrouter): key video catalog cache by request policy

* test(openrouter): preserve auth literal types

* fix(openrouter): preserve catalog auth overrides

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-10 22:01:18 -07:00
Alix-007
c4f46baec3 fix(nextcloud-talk): add timeout to room info lookup (#102859)
* fix(nextcloud-talk): add timeout to room info lookup

* test(nextcloud-talk): assert room lookup deadline

Co-authored-by: llagy009 <0668001470@xydigit.com>

---------

Co-authored-by: llagy009 <0668001470@xydigit.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-10 21:59:32 -07:00
Vincent Koc
ebaa1123e9 chore(release): preserve efficiency change history 2026-07-10 21:50:24 -07:00
Vincent Koc
c47ceb0f3d improve(release): reuse exact-SHA validation evidence (#104162)
* perf(release): share changelog verification snapshots

* perf(release): reuse exact-SHA validation evidence

* feat(release): checkpoint candidate workflow state

* feat(release): watch CI transitions compactly

* fix(testbox): rotate stale reusable leases

* refactor(release): move CI verifier into scripts

* fix(release): preserve verifier executable mode

* fix(testbox): force noninteractive remote hydration

* perf(testbox): skip sync for proven clean heads

* fix(testbox): keep changed gates synchronized

* fix(testbox): isolate git state probes

* fix(testbox): isolate wrapper git commands

* fix(testbox): preserve git command contracts

* fix(release): validate reused SHA evidence

* fix(release): resume serialized plugin selections

* fix(testbox): sync source on every lease reuse

* fix(release): verify from trusted workflow checkout

* fix(release): gate evidence reuse on trusted lineage

* fix(release): support legacy verifier checkouts

* fix(testbox): export CI across shell snippets

* fix(release): revalidate reused evidence before publish

* fix(release): reject untrusted reuse before lookup

* fix(release): reuse SHA-pinned root evidence

* fix(ci): allow unreleased notes in QA packages

* fix(release): satisfy script lint contracts

* fix(release): handle Unicode workflow refs safely
2026-07-11 12:48:27 +08:00
xingzhou
6595d1756b fix(discord): stream multipart uploads (#102972)
* fix(discord): bound multipart REST uploads
* Preserve Discord media upload payload limits
* fix(discord): stream multipart uploads

---------

Co-authored-by: 张贵萍0668001030 <zhang.guiping@xydigit.com>
Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-07-11 10:10:41 +05:30
Vincent Koc
16ba8b5284 fix(release): handle Unicode workflow refs safely 2026-07-10 21:39:46 -07:00
Vincent Koc
5d742697f3 fix(release): satisfy script lint contracts 2026-07-10 21:34:37 -07:00
Vincent Koc
1403b29436 fix(ci): allow unreleased notes in QA packages 2026-07-10 21:29:57 -07:00
xingzhou
e009a41410 fix(agents): repair orphaned queued turns before assembly (#90759)
* fix(agent): keep orphaned user turns contextual
* test(agent): prove orphan repair targets active prompt
* fix(agent): repair orphaned user behind session metadata
* fix(agent): satisfy orphan repair CI types
* fix(agent): preserve orphan repair state entries
* fix(agent): filter repaired orphan from assembled history
* fix(embedded-agent): repair orphan session entry types
* fix(embedded-agent): remap replayed metadata labels
* fix(embedded-agent): skip dangling replay labels
* fix(agents): repair orphan history before assembly

---------

Co-authored-by: 张贵萍0668001030 <zhang.guiping@xydigit.com>
Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-07-11 09:56:40 +05:30
Vincent Koc
bcb10e2a28 fix(release): reuse SHA-pinned root evidence 2026-07-10 21:12:49 -07:00
Vincent Koc
f677d924f9 fix(release): reject untrusted reuse before lookup 2026-07-10 21:08:18 -07:00
Vincent Koc
6b38f68a06 fix(release): revalidate reused evidence before publish 2026-07-10 21:08:18 -07:00
Vincent Koc
50b765617f fix(testbox): export CI across shell snippets 2026-07-10 21:08:18 -07:00
Vincent Koc
349728abf8 fix(release): support legacy verifier checkouts 2026-07-10 21:08:18 -07:00
Vincent Koc
e0cb3cef93 fix(release): gate evidence reuse on trusted lineage 2026-07-10 21:08:18 -07:00
Vincent Koc
fb4ffe76e6 fix(release): verify from trusted workflow checkout 2026-07-10 21:08:18 -07:00
Vincent Koc
cf3443796c fix(testbox): sync source on every lease reuse 2026-07-10 21:08:18 -07:00
Vincent Koc
1fa8ec497e fix(release): resume serialized plugin selections 2026-07-10 21:08:18 -07:00
Vincent Koc
50319d27b0 fix(release): validate reused SHA evidence 2026-07-10 21:08:17 -07:00
Vincent Koc
1bb51a59af fix(testbox): preserve git command contracts 2026-07-10 21:08:17 -07:00
Vincent Koc
2843773be7 fix(testbox): isolate wrapper git commands 2026-07-10 21:08:17 -07:00
Vincent Koc
947803066b fix(testbox): isolate git state probes 2026-07-10 21:08:17 -07:00
Vincent Koc
1a384f71db fix(testbox): keep changed gates synchronized 2026-07-10 21:08:17 -07:00
Vincent Koc
29cfc61b6f perf(testbox): skip sync for proven clean heads 2026-07-10 21:08:17 -07:00
Vincent Koc
e85a4f0ef2 fix(testbox): force noninteractive remote hydration 2026-07-10 21:08:17 -07:00
Vincent Koc
48704f065a fix(release): preserve verifier executable mode 2026-07-10 21:08:17 -07:00
Vincent Koc
28f018e520 refactor(release): move CI verifier into scripts 2026-07-10 21:08:17 -07:00
Vincent Koc
883a615516 fix(testbox): rotate stale reusable leases 2026-07-10 21:08:17 -07:00
Vincent Koc
52b18ca42f feat(release): watch CI transitions compactly 2026-07-10 21:08:17 -07:00
Vincent Koc
6a606f93a3 feat(release): checkpoint candidate workflow state 2026-07-10 21:08:17 -07:00
Vincent Koc
d86b62dea9 perf(release): reuse exact-SHA validation evidence 2026-07-10 21:08:17 -07:00
Vincent Koc
0c9ebe961e perf(release): share changelog verification snapshots 2026-07-10 21:08:16 -07:00