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