Commit Graph

69066 Commits

Author SHA1 Message Date
Peter Steinberger
fca2e830e0 fix(auth): session refresh preserves OAuth providers (#108680)
* fix(auth): isolate OAuth provider registries

* fix(auth): remove OAuth registry back edge
2026-07-16 00:39:28 -07:00
Peter Steinberger
fecd11fdc9 perf(test): unref process watchdogs (#108643) 2026-07-16 00:39:08 -07:00
Peter Steinberger
7a398fe6f8 fix(update): preserve plugin policy on failures (#108661) 2026-07-16 00:38:44 -07:00
Peter Steinberger
138178620d fix(protocol): regenerate Swift session thinking level (#108715) 2026-07-16 00:22:47 -07:00
Peter Steinberger
7e1d93d36d refactor(deadcode): enforce full-repository hard zero (#108717)
* refactor(deadcode): enforce full-repository hard zero

* refactor(deadcode): drop rebased test-support leftovers

* refactor(openai): remove stale TTS test bridge

* test(config): cover bundled tuple baseline merging

* fix(deadcode): reject external Windows paths

* test(config): preserve heterogeneous tuple coverage
2026-07-16 00:16:20 -07:00
Peter Steinberger
0d215c1cf0 fix(protocol): regenerate bundled clients for sessions thinkingLevel 2026-07-16 00:15:54 -07:00
Wynne668
d55772ce91 fix(wizard): reject invalid plugin number inputs (#107346) 2026-07-16 00:13:16 -07:00
Leon-SK668
2fd3d8608d fix(skills): keep history scans UTF-16 safe (#107720) 2026-07-16 00:11:53 -07:00
maweibin
f9e7a4cab8 fix(agents): guard null response body in proxy stream reader (#107325)
* fix(agents): guard null response body in proxy stream reader

The proxy transport used response.body! (non-null assertion) to enter the
SSE read loop without checking whether the body is present.  response.ok
does not guarantee response.body is non-null — empty 200 responses and
prematurely-closed connections leave body=null while ok=true.

Sibling transports in the same repository already guard this case:
  - provider-transport-fetch.ts:148,385,541
  - anthropic-transport-stream.ts:847
  - openai-completions-transport.ts:272
  - mcp-http-fetch.ts:60,76  (added in #98143)

Add the same guard before getReader() so the caller receives a business-
level diagnostic ("Proxy returned an empty response body") instead of
the misleading JS runtime error "Cannot read properties of null (reading
'getReader')".  The try-catch in streamProxy already catches the error
and pushes it as a stream event, so this does not introduce a new crash
— it replaces an internal TypeError with a meaningful error.

* test(agents): cover null response body in proxy stream reader
2026-07-16 00:10:32 -07:00
Alix-007
9e3a50b2a8 fix(amazon-bedrock): add timeouts to model discovery requests (#104841)
* fix(amazon-bedrock): add timeouts to model discovery requests

* refactor(amazon-bedrock): extract discovery SDK helpers to satisfy LOC ratchet
2026-07-16 00:10:11 -07:00
Jason (Json)
ec5e0809b9 fix(tui): show compact model and reasoning (#108669)
* fix(tui): show compact model and reasoning

* test(tui): track Sol reasoning default
2026-07-16 01:09:50 -06:00
Harjoth Khara
96e5ca3599 fix(diagnostics): prevent heartbeat stalls from aborting healthy runs (#108455)
* fix(diagnostics): scale heartbeat recovery gate

* fix(diagnostics): harden stalled-heartbeat recovery

Co-authored-by: Harjoth Khara <harjoth.khara@gmail.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 00:09:01 -07:00
pick-cat
6f13a5802f fix(memory): reject hex/exponent dreaming integer config strings (#107619) 2026-07-16 00:06:53 -07:00
dependabot[bot]
99ffe40569 build(deps): bump the android-deps group across 1 directory with 5 updates (#108167)
Bumps the android-deps group with 5 updates in the /apps/android directory:

| Package | From | To |
| --- | --- | --- |
| [gradle-wrapper](https://github.com/gradle/gradle) | `9.4.1` | `9.6.1` |
| [org.bouncycastle:bcprov-jdk18on](https://github.com/bcgit/bc-java) | `1.84` | `1.85` |
| [org.junit.vintage:junit-vintage-engine](https://github.com/junit-team/junit-framework) | `6.1.1` | `6.1.2` |
| com.android.application | `9.2.1` | `9.3.0` |
| com.android.test | `9.2.1` | `9.3.0` |



Updates `gradle-wrapper` from 9.4.1 to 9.6.1
- [Release notes](https://github.com/gradle/gradle/releases)
- [Commits](https://github.com/gradle/gradle/compare/v9.4.1...v9.6.1)

Updates `org.bouncycastle:bcprov-jdk18on` from 1.84 to 1.85
- [Changelog](https://github.com/bcgit/bc-java/blob/main/docs/releasenotes.html)
- [Commits](https://github.com/bcgit/bc-java/commits)

Updates `org.junit.vintage:junit-vintage-engine` from 6.1.1 to 6.1.2
- [Release notes](https://github.com/junit-team/junit-framework/releases)
- [Commits](https://github.com/junit-team/junit-framework/compare/r6.1.1...r6.1.2)

Updates `com.android.application` from 9.2.1 to 9.3.0

Updates `com.android.test` from 9.2.1 to 9.3.0

Updates `com.android.test` from 9.2.1 to 9.3.0

---
updated-dependencies:
- dependency-name: gradle-wrapper
  dependency-version: 9.6.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: android-deps
- dependency-name: org.bouncycastle:bcprov-jdk18on
  dependency-version: '1.85'
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: android-deps
- dependency-name: org.junit.vintage:junit-vintage-engine
  dependency-version: 6.1.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: android-deps
- dependency-name: com.android.application
  dependency-version: 9.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: android-deps
- dependency-name: com.android.test
  dependency-version: 9.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: android-deps
- dependency-name: com.android.test
  dependency-version: 9.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: android-deps
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-16 00:06:01 -07:00
xianshishan
a7189d228e fix(ui): restore scrollbar in skill workshop board mode (#108197)
The flex height constraint chain was broken at three points in the
board-mode layout, preventing both the proposal queue and detail
body from scrolling:

1. .sw-hub-panel > .skill-workshop used a > child selector but
   .skill-workshop is nested inside an inner wa-tab-panel wrapper,
   so the rule never matched.  Switched to a descendant selector.

2. #skill-workshop-mode-panel (the inner tab panel) had no flex
   styles, defaulting to display:block which cannot pass through
   flex height constraints.  Added explicit flex container styles.

3. The wa-tab-panel shadow-DOM part(base) wrapper also needs flex
   overrides to fill the host height.  Added part selectors with
   display:flex, flex:1, min-height:0, and width:100% to preserve
   full-width block behavior for non-flex children like the
   history scan banner.

   Also added flex-shrink:0 to .sw-history so the banner does not
   collapse when .skill-workshop receives a definite height.

Fixes #108196
2026-07-16 00:05:37 -07:00
Hosan
7bf6bf3150 fix(cron): detect configured Brave search during preflight (#108636)
* fix(cron): use secrets config for web search preflight

* fix(cron): reuse prepared web search provider

Co-authored-by: Hosan <200961079+hosanxiv@users.noreply.github.com>

---------

Co-authored-by: Hosan <200961079+hosanxiv@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 00:03:41 -07:00
Leon-SK668
66b09405d0 fix(android): preserve emoji in presence reason logs (#108103) 2026-07-16 00:03:24 -07:00
Josh Avant
9f0ceb9e5e fix(mattermost): keep reactions in the selected conversation (#108634)
* fix(mattermost): bind reactions to authorized conversation

* fix(mattermost): reject disabled reaction accounts

* fix(mattermost): gate disabled target resolution

* test(mattermost): pass normalized target to resolver
2026-07-16 00:02:29 -07:00
WhatsSkiLL
3e223756d4 fix(android): make onboarding layouts responsive (#108405)
* fix(android): make onboarding layouts responsive

* fix(android): order TogglePill modifier parameter

---------

Co-authored-by: IWhatsskill <284122573+IWhatsskill@users.noreply.github.com>
2026-07-16 00:01:27 -07:00
Alix-007
03e59c8c27 fix(discord): bound event listener slots after timeout (#106398)
* fix(discord): bound event listener slots after timeout

* fix(discord): surface late listener failures
2026-07-15 23:58:47 -07:00
xingzhou
5a494acd64 fix(agents): tool calls lose arguments when Responses item IDs rotate (#108630)
* fix(agents): tool calls lose arguments when Responses item IDs rotate

* test(github-copilot): prove rotating tool item IDs

Co-authored-by: zhang-guiping <zhang.guiping@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-15 23:58:34 -07:00
Peter Steinberger
da0db2352b test(agents): include file-lock drain in OAuth mocks (#108674) 2026-07-15 23:58:20 -07:00
Peter Steinberger
863443fac8 fix(memory): recover derived sidecar conflicts (#108652) 2026-07-15 23:55:07 -07:00
Peter Steinberger
0f32033d78 fix(ui): add thinking level to new cloud sessions (#108679) 2026-07-15 23:54:00 -07:00
Dallin Romney
ae5773187b fix(qa-lab): failed evidence no longer fulfills scorecard coverage (#108537)
* fix(qa-lab): require passing scorecard evidence

* test(qa-lab): keep evidence fixture identity stable
2026-07-15 23:53:52 -07:00
Peter Steinberger
ca2d4d7354 fix(auto-reply): expect Sol medium default in queued retarget test
Direct-main e9c6c150e6 moved gpt-5.6-sol's default reasoning level from
low to medium but only updated the provider-policy test; the queued
followup retarget test still expected low, failing checks-node-compact-
large-1 on every PR.
2026-07-15 23:53:25 -07:00
Dallin Romney
6a9e3d1d7a chore(ui): remove retired Matrix QA art (#108575)
* chore(ui): remove retired Matrix QA asset

* chore(ui): drop retired Matrix QA art registration
2026-07-15 23:52:31 -07:00
ToToKr
29475988da fix(cron): keep valid command env vars when a sibling value is non-string (#105433) (#106100)
* fix(cron): keep valid command env vars when a sibling value is non-string (#105433)

normalizeTrimmedStringRecord returned undefined whenever any env value was non-string, so payload normalization deleted the entire env map before gateway schema validation, silently dropping valid siblings (e.g. env {DEBUG:true, PATH:'/bin'} lost PATH). It now filters invalid entries and only normalizes the map away when no valid entries remain, matching the sibling normalizeTrimmedStringArray behavior in the same file.

* fix(cron): reject malformed command env maps

Co-authored-by: MoerAI <friendnt@g.skku.edu>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-15 23:20:24 -07:00
Alix-007
2dff17c754 fix(slack): add timeout to startup auth.test requests (#105893)
* fix(slack): add timeout to startup auth.test requests

* test(slack): format auth startup timeout proof

* fix(slack): keep startup timeout test helper private

* fix(slack): keep auth timeout state lean

* test(slack): settle stalled auth test during cleanup

* fix(slack): keep startup timeout within LOC guard

* fix(slack): terminate stalled startup auth checks

* test(slack): align startup logger mock type
2026-07-15 23:20:20 -07:00
Peter Steinberger
7181233320 fix(ci): settle deadcode hard-zero sweep debt across guard lanes
The repository hard-zero sweep (bae9752c5a, #108641) left five CI lanes
red on every PR: a stale max-lines baseline entry for the shrunken
live-cache-regression-runner, session-accessor debt baseline above the
real count, two sqlite-reliability contract types un-exported while
scripts/lib still imports them, a deleted-file entry on the production
lint-suppression allowlist, and a stale wildcard-barrel assertion in the
parallels smoke model test.
2026-07-15 23:16:10 -07:00
Alix-007
2d719a669c fix(voice-call): bound stale-call reaper concurrency (#106396)
* fix(voice-call): bound stale-call reaper concurrency

* test(voice-call): prove provider-bound stale reaping

* test(voice-call): preserve stale call state literals
2026-07-15 23:15:53 -07:00
Alix-007
5f2828b50a fix(installer): time out stalled runtime downloads (#108619)
* fix(installer): bound curl download stalls

* chore: format installer timeout tests

* fix(installer): limit timeout to true download stalls

* fix(installer): scope timeout to transfer stalls
2026-07-15 23:01:31 -07:00
Peter Steinberger
d8b723fb00 fix: channel turns recover safely after gateway restart (#108283)
* fix(gateway): recover channel turns safely after restart

* refactor(gateway): keep recovery identity internal

* refactor(gateway): keep recovery metadata private

* fix(gateway): preserve recovery action authority

* fix(gateway): close recovery lifecycle gaps

* fix(gateway): fail closed on missing delivery receipts

* fix(gateway): fail closed on unmirrorable replies

* fix(gateway): persist terminal delivery intent

* fix(gateway): align recovery lifecycle types

* fix(gateway): require exact terminal thread receipt

* fix(gateway): close recovered terminal tool calls

* test(gateway): type terminal tool correlation

* fix(gateway): satisfy restart recovery CI contracts

* fix(gateway): require terminal tool correlation

* fix(agents): scope recovery receipts to source turns

* fix(gateway): fail closed without restart correlation

* fix(gateway): dedupe terminal source redelivery

* fix(agents): keep recovery tool results causal

* test(auto-reply): clean recovery fixture directories

* fix(gateway): allow live terminal sends without recovery claims

* fix(agents): reconcile delivered sends through restart aborts

* fix(agents): keep recovery continuations in source turns

* fix(agents): keep source-less sends non-terminal

* fix(auto-reply): dedupe active source redelivery

* fix(agents): harden recovery receipt contracts

* fix(agents): admit terminal recovery successors

* docs(recovery): document canonical receipt ownership

* fix(agents): fail closed on stale turn authority

* test(auto-reply): assert rebound session state

* fix(plugins): keep restart recovery hook list internal
2026-07-15 23:01:26 -07:00
Peter Steinberger
e9c6c150e6 fix(openai): default Sol reasoning to medium 2026-07-16 07:00:37 +01:00
Alix-007
98fc55ca96 fix(ci): bound performance gateway health probes (#108621) 2026-07-15 22:59:18 -07:00
Alix-007
8781ba78de fix(mantis): bound R2 evidence uploads (#108616) 2026-07-15 22:57:36 -07:00
Peter Steinberger
906c7332d2 fix(deadcode): keep production scan test-free (#108648) 2026-07-15 22:56:34 -07:00
Alix-007
9810e4f4e2 fix(update): prevent stalled registry checks from hanging (#108606) 2026-07-15 22:55:06 -07:00
Alix-007
862f915b55 fix(e2e): keep gateway suspension probes within deadline (#108063)
* fix(e2e): bound gateway network HTTP probes

* test(e2e): align timeout proof with repo guards

* test(e2e): use a typed stalled response
2026-07-15 22:52:59 -07:00
Alix-007
3009338a9a fix(e2e): stop multi-node health checks hanging past deadline (#108065)
* fix(e2e): bound multi-node health probes

* test(e2e): track multi-node timeout temp files
2026-07-15 22:47:43 -07:00
Peter Steinberger
da59d6ade9 feat(onboarding): detect local inference providers (#108605)
* feat(onboarding): detect local inference providers

* fix(onboarding): satisfy inference choice lint

* chore(i18n): refresh onboarding locales

* chore: leave changelog to release automation

* chore(plugin-sdk): refresh API baseline

* fix(onboarding): preserve source config during local activation
2026-07-15 22:46:16 -07:00
Alix-007
5a2bc73c28 fix(qa-lab): keep suite HTTP probes within deadlines (#108064)
* fix(qa-lab): bound suite HTTP probes

* style(qa-lab): format gateway timeout proof

* test(qa-lab): pin media deadline request count
2026-07-15 22:45:30 -07:00
krissding
c924819292 fix(sessions): stop leaking file path as prompt content on read failure (#108546)
* fix(sessions): stop leaking file path as prompt content on read failure

When readFileSync fails for a valid file path, resolvePromptInput returns
the raw path string as prompt content instead of undefined. This injects
filesystem paths into the LLM context. The existing console.error warning
still fires; the caller already handles undefined returns correctly.

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

* test: cover unreadable prompt paths

* test: use tracked resource loader temp dirs

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <peter@steipete.me>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-15 22:42:03 -07:00
Peter Steinberger
a6125b7868 perf(ci): split QA smoke into four profile parts and time tsdown invocations (#108638) 2026-07-15 22:41:02 -07:00
SunnyShu
164f33de91 fix(agents): cleanup leaked toolStartData entries on unsubscribe (#108403)
* fix(agents): cleanup leaked toolStartData entries on unsubscribe

toolStartData module-level Map only deleted entries on
handleToolExecutionEnd; crashed/aborted/unsubscribed tool executions
left leaked entries, inflating countActiveToolExecutions.

Ref: BUG-043 (local finding)
Co-Authored-By: Claude <claude@anthropic.com>

* test(agents): cover tool start cleanup on unsubscribe

* fix: sort imports in unsubscribe-tool-start test

---------

Co-authored-by: Claude <claude@anthropic.com>
Co-authored-by: Peter Steinberger <peter@steipete.me>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-15 22:40:59 -07:00
Alix-007
e60ebbc63b fix(ci): bound fallback Node downloads (#108166) 2026-07-15 22:40:39 -07:00
Peter Steinberger
bae9752c5a refactor(deadcode): enforce repository hard zero (#108641) 2026-07-15 22:40:00 -07:00
moguangyu5-design
cf8cfa8322 fix(gradium): keep isConfigured from throwing on invalid baseUrl (#108551)
* fix(gradium): keep isConfigured from throwing on invalid baseUrl

* refactor(gradium): narrow configuration validation

Co-authored-by: moguangyu5-design <moguangyu5-design@users.noreply.github.com>

---------

Co-authored-by: moguangyu5-design <moguangyu5-design@users.noreply.github.com>
Co-authored-by: Peter Steinberger <peter@steipete.me>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-15 22:38:52 -07:00
wahaha1223
fbc5529fbf fix(push): parse APNs relay timeout as strict decimal (#107883)
Co-authored-by: Peter Steinberger <peter@steipete.me>
2026-07-15 22:37:37 -07:00
qingminlong
49410a2399 fix(proxy-capture): preserve small bodies with non-decimal content length (#108292)
* fix(proxy-capture): preserve small bodies with non-decimal content length

* fix(proxy-capture): align declared length guard

* fix(proxy-capture): preserve huge content lengths

* style(proxy-capture): format length guard

---------

Co-authored-by: Peter Steinberger <peter@steipete.me>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-15 22:36:39 -07:00