Commit graph

64784 commits

Author SHA1 Message Date
Vincent Koc
e75223286d
fix(qa): require live channel driver for access-gate scenarios 2026-07-06 21:34:27 +02:00
Peter Steinberger
e9464313b7
feat(ui): polish sidebar rail and hide disabled Workboard nav (#101123) 2026-07-06 20:31:57 +01:00
pash-openai
806a116f9d
Let owner-operated Codex agents use connected account apps (#100973)
* Allow connected Codex account apps

* Preserve explicit plugin app policy

* Refresh Codex documentation map

* Unify connected apps with Codex plugin policy

* Format Codex configuration reference
2026-07-06 12:31:45 -07:00
Peter Steinberger
2638113c68
feat(android): add Listen action speaking assistant messages via gateway TTS (#100772)
* docs(android): document the chat Listen action

* feat(android): add Listen action for assistant messages
2026-07-06 20:30:54 +01:00
Peter Steinberger
36b733bf5c
feat(ios): pair multiple gateways and switch between them without re-pairing (#100948)
* feat(ios): multi-gateway registry, per-gateway credentials, and switching

* fix(ios): harden multi-gateway state isolation
2026-07-06 20:29:02 +01:00
Peter Steinberger
f80704e19d
docs(changelog): credit small bugfix batch (#101128) 2026-07-06 20:19:55 +01:00
weiqinl
e938461aa2
fix(discord): use configured statusReactions.timing instead of DEFAULT_TIMING (#94736)
* fix(discord): use configured statusReactions.timing instead of DEFAULT_TIMING

Makes the Discord message finalizer respect user-configured
doneHoldMs/errorHoldMs instead of always using hardcoded
DEFAULT_TIMING values. Brings Discord to parity with Telegram
and Slack which already use configured timing.

Fixes #78431

* test(discord): strengthen configured-timing regression with old-default assertion

Add a no-cleanup assertion at DEFAULT_TIMING.doneHoldMs (1500ms) before
advancing to the configured 2000ms hold, so the test fails against the
old hardcoded-default behavior. Add a matching errorHoldMs regression
test using failedCounts to drive the error terminal path.

Address ClawSweeper [P2] review finding on #94736: the previous test
advanced straight to 2000ms and would pass without the runtime fix
because main already removes the done reaction at 1500ms.

* refactor(discord): unify status reaction timing proof

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-06 12:18:40 -07:00
Dallin Romney
e3671e0980
refactor(qa): canonicalize channel command scenarios (#101080)
* test(qa): migrate channel command scenarios

* test(qa): distinguish portable command headings

* test(qa): preserve canonical scenario ownership
2026-07-06 12:18:06 -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
NianJiu
06efc2ae41
fix(browser): navigate works with CDP hostname allowlist (#100986)
* fix(browser): allow CDP host through hostname allowlist

* test(browser): prove CDP grants stay control-only

* docs(changelog): note remote browser CDP policy fix

* fix(browser): honor restrictive CDP host policy

* chore: keep release changelog owner-only

* fix(browser): align profile CDP creation policy

* fix(browser): keep remote CDP policy explicit

* test(browser): prove Playwright control allowlist isolation

---------

Co-authored-by: NianJiuZst <180004567+NianJiuZst@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-06 20:11:52 +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
Vincent Koc
2f89de8165
fix(codex): preserve yielded native subagent delivery 2026-07-06 11:58:00 -07:00
Vincent Koc
70add7d31e
fix(android): restore lint validation (#101081) 2026-07-06 11:57:28 -07:00
github-actions[bot]
01465340f6 chore(i18n): refresh native locales 2026-07-06 18:53:27 +00:00
Peter Steinberger
2723628dd9 perf(test): unit-test crabbox provider aliases 2026-07-06 14:52:53 -04:00
github-actions[bot]
a7c4a0471d chore(ui): refresh control ui locales 2026-07-06 18:52:14 +00:00
Dallin Romney
627f6988a0
test(qa): migrate restart and policy scenarios to yaml (#101063) 2026-07-06 11:50:16 -07: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
Masato Hoshino
b6c7a77d3f
fix(discord): handle ffmpeg stderr stream errors in voice playback (#101088)
* fix(discord): handle ffmpeg stderr stream errors in voice playback

createDiscordOpusPlaybackStream guards ffmpeg stdout and stdin against raw
stream 'error' events (an unhandled stream error throws and crashes the
gateway via uncaughtException), but the stderr stream on the same child was
left unguarded. Add the symmetric stderr error handler, routing it through
opusStream.destroy like stdout. Add a regression test covering stdout and
stderr stream errors.

* refactor(discord): unify ffmpeg stream errors

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-06 19:43:10 +01:00
Peter Steinberger
92cfceac09
feat(ui): select Talk microphone inputs (#101100) 2026-07-06 19:39:58 +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
Peter Steinberger
60ce506712
feat(ios): add Listen action speaking assistant messages via gateway TTS (#100771)
* test(gateway): shift advertised-method window for tts.speak

* feat(ios): add Listen action speaking assistant messages via gateway TTS

* docs(ios): document the chat Listen action

* style(ios): keep outbox label doc comment attached and give speech chip its own

* fix(ios): harden chat Listen playback

* docs(changelog): note iOS chat Listen

* fix(ios): unwrap speech MIME before classification

* docs(changelog): keep Listen note app-scoped
2026-07-06 19:32:54 +01:00
Vincent Koc
9ad2f53fe6
chore(changelog): remove unreleased auth copy entry 2026-07-06 20:26:45 +02:00
Vincent Koc
c3e46e710d
test(discord): align proxy websocket override helper type 2026-07-06 20:26:45 +02:00
Masato Hoshino
f859d78b61
fix(line): surface partial delivery when rich or media send fails alongside text (#100996)
* fix(line): surface partial delivery when rich or media send fails alongside text

* fix(line): harden partial delivery result

* test(line): preserve frozen error type

* chore: keep release changelog owner-only

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-06 19:21:29 +01:00
Alix-007
962d1096d4
fix(memory-core): keep daily ingestion outside session repair (#93389)
* fix(memory-core): clear daily-ingestion sqlite namespace on dreaming repair

repairDreamingArtifacts() cleared the dreaming-session-ingestion-files and
dreaming-session-ingestion-seen namespaces but not the migrated
dreaming-daily-ingestion namespace. After #92020 taught auditDreamingArtifacts()
to treat all three ingestion namespaces as ingestion state, the repair path
became asymmetric: the memory status --fix re-audit still reported
sessionIngestionExists=true from the surviving daily rows, and the daily
ingestion bookkeeping leaked past repair so daily memory files were not
re-ingested on the next sweep.

Clear DREAMING_DAILY_INGESTION_NAMESPACE alongside the session files/seen
namespaces so repair fully resets dreaming ingestion state, matching the audit.

* chore: retrigger CI for real behavior proof check

* fix(memory-core): keep daily ingestion outside session repair

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
Co-authored-by: Alix-007 <li.long15@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-06 19:16:26 +01: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
davelutztx
8aaf9fc6bc
fix(discord): send fresh final messages after previews (#99711)
* fix(discord): send fresh final messages after previews

* fix(discord): suppress broadcast mentions on fresh finals

* docs(changelog): note Discord streamed final fix

* fix(discord): stabilize targeted mention policy

---------

Co-authored-by: Dave Lutz <dave@lutzfamily.net>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-06 19:14:09 +01:00
Ben.Li
6bc661ce14
fix(msteams): bound Bot Framework attachmentInfo JSON response reads (#99125)
* fix(msteams): bound Bot Framework attachmentInfo JSON response reads

* test(msteams): prove attachmentInfo stream cancellation
2026-07-06 19:07:24 +01:00
Bryan Tegomoh, MD, MPH
e88f5cea7e
fix(test): skip live auth browser caches (#91907)
* fix(test): skip live auth browser caches

* fix(test): scope Gemini live auth exclusions

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-06 18:57:48 +01:00
github-actions[bot]
a9b0a9a12b chore(i18n): refresh native locales 2026-07-06 17:57:37 +00:00
SunnyShu
5f2f06b21b
fix(agents): preserve overload wording for rate-limited responses (#98165)
* [AI] fix(agents): classify HTTP 429 overloaded bodies as overloaded, not rate_limit

Reorder overloaded check before rate_limit across all three classification paths:
- classifyFailoverClassificationFromHttpStatus (HTTP status path)
- classifyFailoverClassificationFromMessage (message text path)
- formatRateLimitOrOverloadedErrorCopy (user-facing copy path)

Previously, isRateLimitErrorMessage matched the bare '429' token in
overloaded-worded 429 bodies (e.g. z.ai code 1305), misclassifying them
as rate_limit and showing the wrong user-facing error message. 503/499
already check overloaded before defaulting; 429 now follows the same pattern.

Related to #98101

* [AI] fix(agents): put MODEL_CAPACITY_ERROR_RE before overloaded in user-facing copy

MODEL_CAPACITY_ERROR_RE is the most specific overloaded variant
('selected model is at capacity') and must be checked before the
broader isOverloadedErrorMessage matcher (which also covers model at
capacity), otherwise it's shadowed with a less specific message.

Related to #98101

* fix(agents): preserve overload copy for rate-limited responses

* fix(agents): retain provider retry guidance

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-06 18:55:16 +01:00
xingzhou
f805bb4e02
fix(feishu): avoid mention forwarding when bot open id is unavailable (#100891)
* fix(feishu): avoid forwarding mentions without bot open id

* fix(feishu): require bot identity for mention forwarding

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-06 18:54:02 +01:00
machine3at
c432c8c014
fix(auth): preserve copied auth profile order (#100833)
* fix(auth): preserve auth profile order when copying store to spawned agent

* fix(auth): preserve copied profile order

Co-authored-by: Vivek Behani <vivekbehani@me.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-06 18:52:55 +01:00
Wynne668
3dd5339a53
fix(openai): stop double-prefixing SSE bodies mislabeled as JSON (#96503)
* fix(openai): stop double-prefixing SSE bodies mislabeled as JSON

OpenAI-compatible gateways that stream real SSE (data: {...}) but label the
response application/json hit the streaming JSON-wrap fallback, which re-prefixed
each frame as 'data: data: {...}' and broke JSON.parse in the OpenAI SDK. Sniff
JSON-labeled streaming bodies and relabel genuine SSE as text/event-stream so the
SSE sanitizer parses them verbatim.

* test(openai): prove mislabeled SSE stays streaming

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-06 18:49:45 +01:00
Peter Steinberger
bb59790646 perf(test): cache project test inventories 2026-07-06 13:46:49 -04:00
lsr911
dabc40d42c
fix(crestodian): suppress unhandled stdout/stderr stream errors in probeLocalCommand (#100741)
* fix(crestodian): suppress unhandled stdout/stderr stream errors in probeLocalCommand

Add no-op error listeners on child stdout/stderr in probeLocalCommand
to prevent unhandled EventEmitter errors from crashing the process.

Replace standalone proof scripts with Vitest regression test that verifies
error listeners are registered on the production code path.

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

* test(crestodian): exercise probe stream failures

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-06 18:42:55 +01:00
Peter Steinberger
d04d0754a2
fix(ui): move sidebar collapse toggle from the topbar into the sidebar footer (#101038)
* fix(ui): move sidebar collapse toggle from the topbar into the sidebar footer

* docs: sidebar collapse toggle lives in the sidebar footer
2026-07-06 18:39:52 +01:00
Peter Steinberger
c4c4caadfe
fix(android): clarify SMS command authorization (#100993) 2026-07-06 18:36:05 +01:00
Peter Steinberger
6f0f98545c
improve(ui): sessions page fits on one screen with per-session overrides in a row drawer (#100943)
* feat(ui): redesign sessions page into roster table with details drawer

* fix(ui): decouple sessions drawer expansion from deep-link query narrowing; update mobile column hiding for new roster

* fix(ui): reload open session drawer when a session gains compaction checkpoints
2026-07-06 18:33:27 +01:00
Colin Johnson
9c2bbd0750
fix(android): stabilize chat refresh loading (#100966) 2026-07-06 13:33:05 -04:00
Vincent Koc
65a9cb4ed1
refactor(packages): localize internal helper types (#101041) 2026-07-06 10:30:58 -07:00
Peter Steinberger
b3e68a093c
fix(lmstudio): honor embedding preload context (#100750)
Co-authored-by: Zakaria Rahali <zakariarahali288@gmail.com>
Co-authored-by: 徐闻涵0668001344 <xu.wenhan1@xydigit.com>
2026-07-06 18:28:48 +01:00
Dallin Romney
d2e6ccf4bb
refactor(test): consolidate script declaration contracts (#100992) 2026-07-06 10:26:51 -07:00
Peter Steinberger
f8307bb44c
style(android): apply ktlint to landed changes (#100304)
* style(android): apply current ktlint fixes

* style(android): format current app sources

* style(android): refresh native i18n inventory
2026-07-06 18:26:47 +01:00
Dallin Romney
a45c0999ce
refactor(plugins): require initialized registry collections (#100990)
* refactor(plugins): require initialized registry collections

* test(plugins): keep empty registry imports lightweight
2026-07-06 10:25:22 -07:00
Peter Steinberger
553acdfc1a
feat(gateway): add tts.speak method returning synthesized audio inline (#100770)
* feat(gateway): add tts.speak method returning synthesized audio inline

* test(gateway): type tts.speak synthesis mock for failure shapes

* fix(gateway): restore lowercase normalizer import used by talk catalog

* test(gateway): shift advertised-method window for tts.speak

* fix(gateway): ready tts speak for landing

* docs(changelog): record tts speak gateway API

* test(agents): stabilize fast auto startup synchronization

* test(crabbox): stabilize sparse checkout exit guard
2026-07-06 18:25:08 +01:00
Vincent Koc
3ad77774f0
fix: carry 2026.7.1 stability repairs into main (#101043)
* fix(telegram): throttle reconnect delivery drains

(cherry picked from commit 7182c74d04)

* fix(agents): honor aborts during session lock acquisition

(cherry picked from commit 6443c2a552)

* fix(cli): prefer installed launcher package roots

(cherry picked from commit 37e1b324db)

* fix(e2e): allow Linux onboarding to finish

(cherry picked from commit 88192552a0)

* fix(e2e): scrub single-plugin allowlists on Windows

(cherry picked from commit bee5dee521)

* fix(e2e): preserve Windows config shape during updates

(cherry picked from commit a580a7fe3f)
2026-07-06 10:17:36 -07:00
Peter Steinberger
a34b8a8d69
fix(cron): preserve implicit delivery on partial edits (#101027) 2026-07-06 18:11:58 +01:00