Commit Graph

16883 Commits

Author SHA1 Message Date
Josh Avant b0ccaa6eec fix(signal): bind reactions to normalized target (#112607) 2026-07-22 04:30:49 -05:00
Peter Steinberger 5808b72ed6 refactor(models): own compat in provider catalogs (#112542) 2026-07-22 02:14:29 -07:00
Peter Steinberger 0b080b9c2e feat(apps): native session-list observer digests on iOS, Android, and macOS (#112597)
* feat(apps): native session-list observer digests on iOS, Android, and macOS

* fix(apps): satisfy swift, periphery, and lint gates for native digests
2026-07-22 01:53:29 -07:00
Peter Steinberger e10d004257 feat(agents): mobile_ui agent tool (PR 3/3) (#112255)
* feat(agents): mobile_ui agent tool for Android UI control (PR 3/3)

Add a dedicated model-facing tool that drives another Android app through the
PR2 mobile.ui.observe/act node commands, completing the vertical slice
(agent -> tool -> node.invoke -> AccessibilityService).

- Mirrors the desktop computer tool's safety model: owner-only + HTTP-denied
  (dangerous-tools), raw node.invoke of mobile.ui.* redirected to this tool so
  the generic nodes tool cannot bypass it, run/tool-call idempotency, and the
  phone-arm workflow (mobile.ui.* must be explicitly armed).
- One call is observe or one act; every act automatically re-observes for
  postcondition verification and preserves the landed outcome if re-observe fails.
- Fail-closed confirmation: all state-changing acts (activate, set_text, tap,
  swipe) require confirmed=true after the model reviews the proposed effect;
  observe, scroll, wait, and navigation global_actions do not. The keyword list
  only enriches the confirmation message and is never the sole gate (a11y labels
  are localized/iconographic/coordinate-blind).
- Node selection resolves an explicit id against the full device set first
  (case-insensitively) and rejects an ineligible or ambiguous match, so an
  explicit selection can never be silently redirected to the wrong phone.
- All observed UI text is treated as untrusted; the tool description forbids
  following instructions found in app UI.

Additive; no protocol bump. mobile-ui-tool + registration + policy tests pass;
core tsgo and lint verified on Testbox. On-device drive is exercised via the
PR1/PR2 emulator proof; this PR is the agent-side tool + tests.

Follow-up: computer-tool.ts has the same latent node-resolution ordering bug
(explicit id searched only among eligible nodes); tracked separately.

* fix(agents,phone-control): migrate mobile_ui arming hints/tests to gateway.nodes.commands.allow

Match main's node-command arming rename (gateway.nodes.allowCommands ->
gateway.nodes.commands.allow / commands.deny): update the mobile_ui tool arm-hint
matchers to the gateway's current rejection strings and fix the phone-control /
tool tests to the current config shape. Production write path was already correct.

* fix(agents): register mobile_ui in owner-only denylist; trim phone-control under max-lines

- tool-resolution.exclude.test.ts: mobile_ui joins the owner-only core
  tools, so add it to the expected plugin/inherited denylists.
- phone-control: derive ArmGroup from a single ARM_GROUPS const and
  collapse parseGroup's ||-chain, dropping index.ts back under 700 lines.

* fix(agents): centralize mobile_ui global-action names; regenerate tool-display snapshot

- Extract GLOBAL_ACTION_NAMES const so the schema, action type, and
  validator share one source. This also removes the bare `name: "back"`
  type-annotation literal that scripts/tool-display.ts's name-regex was
  misreading as a phantom runtime tool.
- Regenerate apps/.../tool-display.json to add the mobile_ui display entry
  (was missing from the Swift snapshot).
2026-07-22 01:49:14 -07:00
Peter Steinberger 6f29fc88e9 refactor(sessions): migrate pure readers to read-only session accessors (#112568)
* refactor(sessions): migrate pure readers to read-only session accessors

* test(sessions): teach mocks and declarations the read-only accessors

* test(sessions): align remaining harnesses with read-only accessors
2026-07-22 01:16:35 -07:00
Peter Steinberger b40a8da70e refactor(channels): trim deprecated setup-input fields and legacy promotion keys to published readers (#112587)
* refactor(channels): trim deprecated setup-input fields and legacy promotion keys to published readers

* ci: retrigger after dropped ready event

* fix(channels): update setup-input guardrails and dead code for the trimmed tier
2026-07-22 01:15:58 -07:00
Peter Steinberger a95c059f11 feat(media): thread ordered media facts through the prompt path (#112601)
Media-facts program PR 5 — the planned additive bridge. Structured
facts travel alongside existing prompt text through prompt prelude,
GetReplyOptions, FollowupRun, queue collect/defer/retry, active
steering, embedded/CLI runs, Gateway offloads (offloadedRefs no longer
discarded; AgentContentPhaseResult carries media), Tlon, and late-media
projection — with prompt bytes golden-equal everywhere. Facts follow
the same adoption/idempotency/late-append lifecycle as prompt text.
Intentionally +175 prod LOC per the audit; the facts-first
hydration/prune deletion PR consumes this carrier next.
2026-07-22 01:14:49 -07:00
Dallin Romney eab05ddffb fix(qa): preserve partial maturity evidence (#112569) 2026-07-22 16:54:36 +09:00
Peter Steinberger f0de4cfe75 test(qa-lab): split scenario catalog tests to restore max-lines headroom 2026-07-22 00:47:06 -07:00
Josh Avant 3acc168c4f fix(cron): persist explicit scheduled tool authority (#112483)
* fix(cron): persist explicit scheduled tool authority

* test(cron): cover explicit scheduled authority

* fix(cron): preserve legacy authority on routine edits

* test(cron): add explicit authority e2e matrix

* test(cron): harden explicit authority live proof
2026-07-22 02:28:49 -05:00
Dallin Romney 132d91e427 refactor(qa): make taxonomy coverage ids unique (#110280) 2026-07-22 16:28:44 +09:00
Vito Cappello 4ab686220f fix(memory): recover from same-file legacy index divergence (#110216)
* fix(memory): keep canonical rows when same-file legacy memory tables diverge

* fix(memory): keep canonical-owned sources' chunk sets coherent during legacy import

* fix(memory): import legacy chunks when canonical source has no chunks

The same-file legacy migration excluded a legacy chunk from import whenever the
canonical index already had a source row for its (path, source). That stranded a
file whose canonical source was registered but had no chunks yet (indexing
interrupted before chunks were written, or embedding pending/failed): the legacy
chunks were its only searchable content, and the matching source hash stops sync
from re-indexing, so the file went silently unsearchable.

Re-key the chunk-coherence exclusion on canonical chunk ownership instead:
snapshot the (path, source) pairs that already have canonical chunks before the
import and skip legacy chunks only for those. A source with a canonical row but
no chunks now imports its legacy chunks. The snapshot is taken pre-insert because
the exclusion predicate reads the chunks table the import writes to.

Add regressions: legacy chunks import for a chunk-less canonical source while a
chunk-owning source still drops its stale legacy chunk; and restore abort
coverage for the meta and chunks copy assertions (previously only files was
exercised).

* fix(memory): harden same-file legacy conflict recovery

* fix(memory): rebuild ambiguous partial legacy sources

* fix(memory): reconcile migrated derived indexes

* fix(memory): close migrated index ownership gaps

* test(memory): align migration expectations

* test(tooling): match routed test order

* test(memory): exercise vector reload cleanup

* test(memory): prove real vector reload cleanup

* fix(memory): make migrated indexes converge

---------

Co-authored-by: Serhii Leniv <leniv.tech@gmail.com>
Co-authored-by: VACInc <3279061+VACInc@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-22 00:27:01 -07:00
Peter Steinberger 3c4a1ec905 refactor(agents): move CLI backend adapters from config DSL to registerCliBackend plugins (review request) (#112539)
* refactor(agents): move CLI backend adapters into plugins

* test(agents): register CLI backend fixtures through plugins
2026-07-22 00:25:29 -07:00
Peter Steinberger c24a215fe4 fix: prevent announce restart recovery cascades (#112534)
* fix(agents): stop announce restart recovery cascades

Reconcile interrupted completion handoffs from existing run and transcript provenance, and keep their CLI, embedded, and Codex execution tool-free.\n\nCo-authored-by: Moeed Ahmed <moeedahmed@users.noreply.github.com>

* chore: preserve prior-art credit

Co-authored-by: Moeed Ahmed <moeedahmed@users.noreply.github.com>

* fix(agents): prefer explicit restart recovery runs

* fix(agents): revalidate announce recovery ownership

* test(agents): consolidate announce recovery cases

* fix(agents): preserve silent announce fallback

---------

Co-authored-by: Moeed Ahmed <moeedahmed@users.noreply.github.com>
2026-07-22 00:05:18 -07:00
Peter Steinberger 5e651d5ac7 fix(channels): restore assistant context after restart (#112548)
* fix(channels): restore transcript context after restart

Merge bounded active-branch session transcript turns at the shared prepared-turn seam so message channels retain assistant replies after restart or history eviction. Migrate Telegram's one-off merge while preserving exact projection and legacy dedupe behavior.\n\nCloses #112520. Slack case reported by Joe Tam (@joetam) in #102594.

* style(channels): avoid spread in transcript mapping

* refactor(telegram): drop obsolete transcript exports
2026-07-21 23:45:01 -07:00
Peter Steinberger d1d3acbd98 fix(memory-wiki): resolve keyed agent vaults (#112541)
Ensure doctor runtime tool schema checks and wiki CLI resolve agent-scoped vaults from canonical agents.entries while retaining the internal list projection fallback.
2026-07-21 23:14:22 -07:00
Dallin Romney 3946bcc20c fix(qa): run isolated Matrix evidence partitions in parallel (#112465)
* fix(qa): parallelize isolated Matrix evidence partitions

* refactor(qa): plan adapter instance concurrency

* fix(qa): let Docker assign Matrix harness ports

* refactor(qa): use instance isolation for Matrix concurrency

* test(ci): expect maturity concurrency six

* refactor(qa): remove Matrix harness manifest
2026-07-22 14:45:52 +09:00
WhatsSkiLL feb529fd2b fix(ollama): preserve cloud model context windows (#112430)
* fix(ollama): preserve cloud model context windows

* fix(ollama): recognize cloud model source forms

Co-authored-by: IWhatsskill <284122573+IWhatsskill@users.noreply.github.com>

---------

Co-authored-by: IWhatsskill <284122573+IWhatsskill@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-21 22:45:03 -07:00
Jason (Json) 1a42e005fb fix(anthropic): forward selected profiles to Claude CLI (#112458)
* fix(anthropic): forward Claude CLI auth profiles

* fix(system-agent): inject CLI auth route stores

* fix(claude-cli): pass profile credentials by descriptor

* fix(anthropic): repair selected profile CI coverage

* fix(anthropic): preserve profile owner validation

* test(system-agent): preserve selected profile fixtures

* test(system-agent): narrow selected profile fixture

* test(system-agent): resolve profile store merge

* fix(anthropic): forward profiles to node Claude runs

* fix(system-agent): reconcile profile route projection

* test(system-agent): thread profile store through projection

* fix(anthropic): make selected profile authoritative

* fix(system-agent): type auth setup failures

* fix(system-agent): type setup auth failures

* style: format Claude profile maintenance

* fix(anthropic): keep gateway credentials off nodes

* fix(anthropic): clear ambient auth for selected profiles

* fix(anthropic): secure paired-node Claude auth

* fix(node-host): type Claude fd spawn streams

* style(node-host): satisfy Claude spawn lint

* fix(process): capture exit before secret delivery

* fix(anthropic): preserve node-native Claude auth
2026-07-21 23:27:37 -06:00
Peter Steinberger f236e83de7 refactor(channels): shrink ChannelSetupInput to a generic envelope with a deprecated compatibility tier (#112319)
* refactor(channels)!: shrink ChannelSetupInput to a generic envelope with a deprecated compatibility tier

* fix(channels): keep ChannelSetupInput structurally assignable without an index signature

* docs: regenerate docs map
2026-07-21 22:17:03 -07:00
Andrey Bugaev 2727b6ec23 Fix live orphan session transcript visibility (#92261)
* Fix live orphan session transcript visibility

* Keep live orphan fallback internal

* Remove unnecessary transcript fallback rename

* test(memory): preserve orphan visibility coverage

* fix(memory): scope orphan transcript fallback

* fix(memory): require agent-wide orphan visibility

---------

Co-authored-by: Andrey Bugaev <370409306+skocher@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-21 22:16:07 -07:00
Jason (Json) 735a6acd56 fix(codex): label unnamed sessions from previews (#112497) 2026-07-21 22:53:05 -06:00
Alix-007 ce905af286 fix(vydra): apply request policy to media generation requests (#105884)
* fix(vydra): apply request policy to media generation requests

* fix(vydra): normalize body deadline aborts
2026-07-21 21:49:40 -07:00
Alix-007 17006d7de5 fix(zalo): prevent Bot API requests from hanging (#111636) 2026-07-21 21:49:14 -07:00
Hiroshi Tanaka 52f412bf17 fix(browser): tab creation steals window focus during agent automation (#105356)
* fix(browser): tab creation steals window focus during agent automation

Agent-created tabs inherited CDP's foreground default: direct CDP
Target.createTarget omitted the background flag, and the extension
relay's createTab defaulted to active:true, so every agent tab open
activated the new tab (and, on the extension driver, focused the
window), interrupting whatever the human was doing in that browser.

Direct CDP tab creation now requests background:true (agent tab
ownership/selection is target-id based and never depended on
activation), and the extension relay defaults an omitted background
to true while preserving an explicit background:false, matching the
Codex/Claude-in-Chrome model the extension driver mirrors.

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

* refactor(browser): keep focus fix LOC-neutral

Preserve background tab creation while keeping the oversized CDP and relay modules within the current LOC ratchet.\n\nCodex-Session: 019f5e93-780a-7350-88f9-1986cdb64914

* fix(browser): honor explicit CDP focus requests

Keep background-by-default automation while treating Target.createTarget focus=true as an explicit foreground request in the extension relay.

Codex-Session: 019f5e93-780a-7350-88f9-1986cdb64914

* fix(browser): preserve explicit CDP focus semantics

Apply the background-by-default automation policy only when focus is omitted, preserving focus=false foreground-tab requests as well as focus=true.

Codex-Session: 019f5e93-780a-7350-88f9-1986cdb64914

* fix(browser): preserve create target window focus

Carry the resolved CDP focus intent through the extension relay and explicitly focus the containing Chrome window when requested.\n\nCodex-Session: 019f5e93-780a-7350-88f9-1986cdb64914

* style(browser): refresh relay import order

* test(secrets): use secure node exec fixtures

* test(doctor): secure exec secret fixture

* test(doctor): retain narrowed temp path

* test(secrets): secure remaining exec fixtures

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-21 21:35:40 -07:00
Peter Steinberger edecdbd05e refactor(config): config-surface reduction tranche 3 — product consolidations (review request) (#111527)
* refactor(config): consolidate media model lists

* refactor(config): unify memory configuration

* refactor(config): consolidate TTS ownership

* refactor(config): move typing policy to agents

* refactor(config): retire product-level config surfaces

* refactor(config): share scoped tool policy type

* chore(config): refresh generated baselines

* fix(config): honor agent typing overrides

* fix(config): migrate sibling config consumers

* refactor(infra): keep base64url decoder private

* fix(config): strip invalid legacy TTS values

* chore(config): refresh rebased baseline hash

* fix(doctor): route legacy messages.tts.realtime voice to talk during tts move

* refactor(config): polish final layout names

* refactor(config): freeze retired tuning defaults

* feat(config): add fast mode default symmetry

* refactor(config): key agent entries by id

* docs(config): update final layout reference

* test(config): cover final layout migrations

* chore(config): refresh final layout baselines

* fix(config): align final layout runtime readers

* fix(config): align remaining readers

* fix(config): stabilize final layout migrations

* fix(config): finalize config projection proof

* fix(config): address final layout review

* docs(release): preserve historical config names

* fix(config): complete keyed agent migration

* fix(config): close final migration gaps

* fix(config): finish full-branch review

* fix(config): complete runtime secret detection

* fix(config): close final review findings

* fix(config): finish canonical docs and heartbeat migration

* fix(config): integrate latest main after rebase

* refactor(env): isolate test-only controls

* refactor(env): isolate build and development controls

* refactor(env): collapse process identity indirection

* refactor(env): remove duplicate config and temp aliases

* docs(env): define the operator-facing allowlist

* ci(env): ratchet production variable count

* fix(env): remove stale provider helper import

* fix(env): make ratchet sorting explicit

* test(env): keep test seam in dead-code audit

* test(env): cover ratchet growth and boundary; document surface budgets

* docs(config): document tier-eval consolidations

* docs(config): clarify speech preference ownership

* test(memory): align retired tuning fixtures

* refactor(memory): freeze engine heuristics

* refactor(config): apply tier-eval tranche

* refactor(tts): move persona shaping to providers

* refactor(compaction): move prompt policy to providers

* test(config): align hookified prompt fixtures

* chore(deadcode): classify test-only exports

* chore(github): remove unused spawn helper

* chore(deadcode): classify queue diagnostics

* chore(deadcode): remove unused lane snapshot export

* chore(plugin-sdk): ratchet consolidated surface

* fix(config): integrate latest main after rebase
2026-07-21 20:28:43 -07:00
Peter Steinberger d3430cae80 fix: keep Control UI setup responsive when discovery stalls (#112338)
* fix(gateway): keep setup responsive during inference discovery

* test(agents): align setup runtime coverage

* test(zoom-meetings): follow session agent routing
2026-07-21 20:13:07 -07:00
Peter Steinberger 9b3b84a18b feat(slack): support Agent View (#103895)
* feat(slack): support Agent View

* fix(slack): align Agent View with current runtime

* fix(slack): keep suggested prompt type internal

* fix(slack): gate Agent View persistence on capability

* chore: leave Slack Agent View notes to release generation

* fix(slack): gate Agent View persistence on capability

* test(slack): use neutral bot token fixture

* feat(slack): support Agent View

* feat(slack): support Agent View

---------

Co-authored-by: Patrick Erichsen <patrick.a.erichsen@gmail.com>
2026-07-21 19:37:49 -07:00
Jason (Json) 24c20eec76 fix(agents): enforce Claude CLI cron tool policies (#112457)
* fix(agents): enforce Claude CLI tool policies

* fix(agents): bound CLI runtime tool grants

* fix(agents): isolate restricted Claude runs
2026-07-21 19:38:21 -06:00
Jason (Json) 55cf9523e0 feat: discover models from live provider catalogs (#112412)
* feat: discover models from live provider catalogs

* fix(provider-catalog): satisfy current catalog contracts

* fix(deps): update fast-uri past new advisory

* fix(deps): refresh fast-uri shrinkwraps

* fix(openrouter): satisfy provider catalog lint

* fix(agents): preserve refreshable catalog metadata

* test(agents): keep catalog fallback proof within lint budget

* fix(provider-catalog): honor live model contracts

* fix(minimax): type discovery headers explicitly

* docs(plugin-sdk): define live model discovery contract
2026-07-21 19:29:57 -06:00
Peter Steinberger 0f066eec81 feat(dashboard): plugin widget kinds — native WorkBoard card and mini-board widgets (#112434)
* feat(board): add plugin widget kinds

* feat(ui): render native Workboard widgets

* fix(dashboard): compose plugin widgets with current main

* chore: internalize widget-kind contribution types

* fix(ui): retry plugin widget renderer loads

* fix(ui): harden Workboard widget refresh lifecycle

* fix(ci): clear plugin widget landing gates

* fix(boards): migrate plugin widget storage

* fix(db): migrate unreleased board widget constraint

* fix(ui): retry failed Workboard widget loads

* fix(ui): keep stale widget refresh cleanup inert

* fix(ci): align plugin widget landing guards
2026-07-21 17:59:20 -07:00
Peter Steinberger f0c43dcf72 feat(ui): format international phone numbers for display (#112400)
* feat(ui): format phone numbers for display

* ci: track normalization package exports in Knip
2026-07-21 17:10:25 -07:00
Vincent Koc 851fc0a5ec fix(deps): refresh fast-uri plugin shrinkwraps 2026-07-22 07:43:55 +08:00
Aaron Eden 2cd4e5a8be fix: prevent empty Telegram sends for cron summaries (#104111)
* fix: prevent empty cron Telegram summary sends

* fix: move Telegram cron fallback normalization to adapter

* test: pin plugin SDK surface budget for cron fallback

* test: refresh plugin SDK API baseline

* fix(telegram): preserve cron fallback batch semantics

---------

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-07-22 03:27:06 +05:30
Peter Steinberger 4541c27f30 fix(browser): regenerate stale copilot runtime bundle (#112379) 2026-07-21 14:28:56 -07:00
Jason (Json) c4911a2c77 improve(ui): simplify coding agent session headers (#112354)
* improve: simplify coding session catalog headers

* improve: simplify coding session catalog headers
2026-07-21 15:27:49 -06:00
pash-openai b0341b8693 Allow Codex plugin discovery enough startup time (#112418) 2026-07-21 14:22:23 -07:00
Vincent Koc 6c9446c5c1 fix(deps): refresh fast-uri plugin shrinkwraps 2026-07-22 05:11:45 +08:00
Vincent Koc b7e17855b9 fix(diagnostics-otel): update OpenTelemetry runtime 2026-07-22 05:11:45 +08:00
lzyyzznl e1ec51b1a4 fix(qqbot): preserve group announce routes (#98053)
Persist qualified QQBot group and guild routes so session announcements return to the originating conversation without letting direct-message turns overwrite the shared route.

Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: lzyyzznl <lzyyzznl@users.noreply.github.com>
2026-07-21 12:15:24 -07:00
mushuiyu886 e3a1c64d7b fix(kilocode): exclude image models from chat catalog (#111239)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-21 10:52:42 -07:00
Yiğit ERDOĞAN 1096b74ab7 fix(browser): retire durable tab rows whose browser never returns (#111307)
* fix(browser): retire durable tab rows whose browser never returns

Durable cleanup defers whenever ownership cannot be proven, so a browser
that never comes back at the same cdpUrl leaves its rows behind forever:
each sweep re-claims them, fails the identity lookup, warns, and defers
again. Nothing in the subsystem removes a row by age.

The `browser.session-tabs` namespace is opened with a 5000-row cap and
`reject-new`, so once those rows accumulate to the cap, tracking a new tab
throws PLUGIN_STATE_LIMIT_EXCEEDED. That propagates into the compensation
path in browser-tool-session-tabs.ts, which closes the tab the user just
opened and rethrows -- every `browser open` on that profile then opens a
tab, closes it again, and errors, with no self-healing path.

Bound the retry: when a close attempt reports the target unavailable and
the tab has been unused for longer than the retire window, drop the row
instead of deferring again. A browser returning after that long almost
always carries a fresh instance fingerprint, which retires the row through
the ownership-mismatch path anyway.

closeTrackedBrowserTabsForSessions now accepts `now` like the sweep does,
so lifecycle cleanup can be exercised on a coherent clock.

* refactor(browser): split session tab cleanup claim and test harness

check-lint failed on max-lines: session-tab-registry.ts was at 699 of its
700-line budget and the durable registry test at 982 of 1000, so the retire
branch and its regression test pushed both over.

Extract the cleanup claim bookkeeping (claim, ownership match, delete) into
session-tab-cleanup-claim.ts, and the durable registry test shapes into
session-tab-registry.sqlite.test-helpers.ts, matching the existing
*.test-helpers.ts convention in this directory. No behavior change.

* test(browser): protect unreachable retirement races

Co-authored-by: Yigtwxx <yigiterdogan023@gmail.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-21 10:10:28 -07:00
pick-cat fc52627ac1 fix(qa-lab): reject hex/exponent Telegram SUT uid env values (#107626)
* fix(qa-lab): reject hex/exponent Telegram SUT uid env values

* test(qa-lab): add direct unit tests for parseSutId strict int parsing

Export parseSutId and add 15 direct unit tests covering hex/exponent/fraction/
empty/whitespace/zero/negative rejection and valid decimal acceptance across
UID, GID, and CLEANUP_TIMEOUT_MS keys. The 3 existing integration tests
already prove the full CLI chain rejects malformed UIDs before gateway startup.

Mutation check: reverting to permissive Number() parsing causes 6 tests to
fail (4 unit + 2 integration).

Co-Authored-By: nebulacoder-v8.0 <noreply@zte.com.cn>

* test(qa-lab): cover GID and cleanup-timeout CLI reject-before-gateway

* fix(qa-lab): drop stale live-scenario mocks from SUT uid tests

* style(qa-lab): oxfmt import order in telegram cli.runtime

* test(qa-lab): streamline strict SUT integer coverage

---------

Co-authored-by: nebulacoder-v8.0 <noreply@zte.com.cn>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-21 09:42:22 -07:00
mushuiyu886 53f13f0510 fix(chutes): discover models when HTTP proxy is required (#111266)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-21 09:38:36 -07:00
mushuiyu886 9c621b799a fix(vercel-ai-gateway): discover models when HTTP proxy is required (#111209)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-21 09:22:00 -07:00
Wynne668 0dea07bfdb fix(qqbot): reject blank client secret env fallback (#109815)
* fix(qqbot): reject blank client secret env fallback

Co-authored-by: Cursor <cursoragent@cursor.com>

* test(qqbot): format fallback regression

* fix(qqbot): normalize logout env token

* style(qqbot): format env fallback changes

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-21 08:17:40 -07:00
ZOOWH b16c6c75ce fix(github-copilot): redact embedding API errors (#109177)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-21 08:16:02 -07:00
mushuiyu886 a97d97f95b fix(opencode-go): expose DeepSeek V4 max thinking (#99643)
Preserve existing lower-level high effort while making xhigh/max available before runtime activation.

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-21 08:12:46 -07:00
Dallin Romney 6d55f43a50 fix(openai): model auth login hangs after success (#112211)
* fix(openai): close OAuth callback sockets

* test(openai): simplify OAuth socket setup
2026-07-21 23:41:43 +09:00
Papilionidae 3dfb4c9cd7 fix(anthropic): accept "cli" entrypoint in Claude session catalog discovery (#105162)
* fix(anthropic): accept "cli" entrypoint in Claude session catalog discovery

Claude Code v2.x writes entrypoint: "cli" in its JSONL session files.
Previously only "sdk-cli" was recognized, causing all v2.x sessions to
be silently skipped.

Extract CLI_ENTRYPOINTS set and isCliEntrypoint() helper, then apply
the same fix to both TypeScript catalog and macOS paired-node native
catalog. Add matching regression coverage on both platforms.

Closes #105164

* fix(anthropic): refresh Claude CLI session discovery

Apply the reviewed cli/sdk-cli allowlist, mirrored negative coverage, and fallback-scope documentation to current main.

Co-authored-by: 黄攀0668000858 <huang.pan@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-21 07:14:42 -07:00