Alishahryar1
8a470779d8
Fix messaging clear persisted status mappings
2026-06-18 12:53:31 -07:00
Alishahryar1
b2d38bde1b
Fix messaging queue persistence edge cases
2026-06-18 12:30:10 -07:00
Alishahryar1
3e07a1ce27
Refactor messaging workflow architecture
2026-06-18 03:22:18 -07:00
Ali Khokhar
b2af3f63d2
Refactor API request pipeline ( #851 )
2026-06-18 02:54:50 -07:00
Alishahryar1
2a68a69d4c
Clarify customer-facing architecture contract
2026-06-18 00:10:08 -07:00
Alishahryar1
c024bf6892
Fix stream cleanup context handling.
...
Avoid contextvar-based log context in SSE generators and treat GeneratorExit as quiet teardown.
2026-06-17 20:43:38 -07:00
Alishahryar1
da672af337
Skip passive tool_search in Responses conversion.
...
Codex includes OpenAI tool_search in the tools array; omit it from the Anthropic payload like other passive hosted tools so fcc-codex requests do not fail at conversion.
2026-06-17 20:27:11 -07:00
Ali Khokhar
8d2e5b95f7
Refactor OpenAI Responses into modular adapter facade ( #847 )
...
## Summary
- Split monolithic `core/openai_responses/conversion.py` and `sse.py`
into focused protocol modules (input, output, stream, tools, reasoning,
events, etc.) behind an `OpenAIResponsesAdapter` facade.
- Wire `ClaudeProxyService.create_response()` through the adapter
instead of importing conversion helpers directly, tightening the
API/import boundary.
- Add Codex bridging for Responses `custom_tool_call` items and document
the adapter architecture in `ARCHITECTURE.md`.
## Test plan
- [x] `uv run pytest tests/core/openai_responses/
tests/api/test_openai_responses.py tests/cli/test_adapters.py
tests/contracts/test_import_boundaries.py`
- [x] Full CI via `.\scripts\ci.ps1`
2026-06-17 20:19:51 -07:00
Ali Khokhar
fa01c2a3a6
Refactor provider transports into packages ( #845 )
...
## Summary
- move provider transport families under `providers/transports/`
- split OpenAI-chat transport into thin transport, stream runner,
tool-call assembly, and recovery modules
- split native Anthropic transport into thin transport, stream runner,
recovery, and HTTP helper modules
- update concrete provider imports, architecture docs, transport import
contracts, version, and lockfile
## Verification
- `uv run pytest tests/providers/test_streaming_errors.py
tests/providers/test_openai_compat_5xx_retry.py
tests/providers/test_anthropic_messages.py
tests/providers/test_anthropic_messages_429_retry.py
tests/providers/test_provider_transport_logging.py
tests/providers/test_gemini.py
tests/providers/test_nvidia_nim_request.py
tests/providers/test_subagent_interception.py
tests/contracts/test_import_boundaries.py`
- `uv run ruff format`
- `./scripts/ci.ps1`
2026-06-17 15:56:19 -07:00
Alishahryar1
492860cc3d
Fix Claude launcher no-auth login gate
2026-06-17 13:10:39 -07:00
Ali Khokhar
c51a15608d
Add FCC uninstall scripts ( #836 )
2026-06-17 01:43:28 -07:00
Ali Khokhar
e2fa4b66d9
Extract shared stream recovery session for provider transports ( #835 )
...
## Summary
- Add `StreamRecoverySession` in
`core/anthropic/stream_recovery_session.py` to centralize early-retry
classification, holdback buffering, retry counting, and flush/discard
behavior shared by Anthropic and OpenAI transports.
- Refactor `AnthropicMessagesTransport` and `OpenAIChatTransport` to use
the shared session instead of duplicating recovery holdback and
early-retry logic.
- Update architecture docs and tests for per-delta overlap trim on
midstream recovery; bump version to 2.2.1.
## Test plan
- [x] `uv run pytest tests/core/anthropic/test_stream_recovery.py`
- [x] `uv run pytest tests/providers/test_anthropic_messages.py
tests/providers/test_streaming_errors.py`
2026-06-16 22:01:53 -07:00
Alishahryar1
7b45043971
Add Codex model picker screenshot
2026-06-16 18:53:13 -07:00
Alishahryar1
fe9d287c23
Add Codex model picker catalog
2026-06-16 18:47:41 -07:00
Alishahryar1
a437df598e
Fix Codex responses reasoning bridge
2026-06-16 18:05:15 -07:00
Alishahryar1
3640eaa244
Updated README
2026-06-16 17:37:48 -07:00
Alishahryar1
44fcc09c02
Add architecture map and provider guardrails
2026-06-16 17:33:46 -07:00
Alishahryar1
35c986d164
Update README again
2026-06-16 17:09:49 -07:00
Alishahryar1
b26957faaf
Update README
2026-06-16 17:01:24 -07:00
Alishahryar1
dcc4b50aae
Fix Codex namespace Responses tools
2026-06-16 16:49:59 -07:00
Ali Khokhar
3abe41d270
Add Codex support ( #691 )
2026-06-16 16:32:43 -07:00
dependabot[bot]
2b70e26890
build(deps): bump actions/checkout from 6.0.2 to 6.0.3 ( #720 )
2026-06-05 14:58:01 -07:00
dependabot[bot]
765664500b
build(deps): bump astral-sh/setup-uv from 8.1.0 to 8.2.0 ( #721 )
2026-06-05 14:57:42 -07:00
dependabot[bot]
d9c63d8ee6
build(deps): bump the minor-and-patch group with 8 updates ( #722 )
2026-06-05 14:57:07 -07:00
Ali Khokhar
e1de39b39f
Update README.md
2026-06-05 08:32:39 -07:00
Alishahryar1
c1af215ff7
fix: normalize proxy auth token whitespace
2026-06-03 23:48:29 -07:00
Alishahryar1
e79b430cc2
Raise stream and upstream retry attempts to five total.
...
Align early transparent, mid-stream recovery, and 429/5xx execute_with_retry
to five attempts; bump version to 1.2.40.
2026-06-02 22:26:07 -07:00
Alishahryar1
544008a952
Removed stale ignore
2026-06-02 16:17:56 -07:00
Alishahryar1
103869f62f
Ignore removed thinking env keys
2026-06-02 05:20:15 -07:00
Alishahryar1
1b259596b2
Update AGENTS.md
2026-06-01 23:03:17 -07:00
Alishahryar1
3bea725343
Update README
2026-06-01 22:57:04 -07:00
Alishahryar1
0fb4c7d6ed
fix: remove duplicate api/admin_static wheel force-include
...
The api package already ships admin_static assets; the extra force-include entry caused hatchling to fail wheel builds with duplicate archive paths.
2026-06-01 22:54:55 -07:00
Alishahryar1
b867e08084
Improve smoke provider coverage and skips
2026-06-01 22:53:34 -07:00
dependabot[bot]
3f65089848
build(deps): update fastapi[standard] requirement from >=0.136.1 to >=0.136.3 ( #630 )
2026-06-01 21:52:11 -07:00
Ali Khokhar
0a13262a0d
Update pyproject.toml
2026-06-01 21:51:25 -07:00
Ali Khokhar
f953550185
Update README.md
2026-06-01 20:48:00 -07:00
Alishahryar1
9a2c5fbeb9
Update README
2026-05-31 17:18:02 -07:00
Ali Khokhar
135c251115
Update README.md ( #664 )
2026-05-31 16:51:13 -07:00
Alishahryar1
0eee1da072
Try mid stream retries
2026-05-31 16:28:44 -07:00
dependabot[bot]
52ebb7417b
build(deps): bump the minor-and-patch group with 5 updates ( #629 )
...
Bumps the minor-and-patch group with 5 updates:
| Package | From | To |
| --- | --- | --- |
| [uvicorn](https://github.com/Kludex/uvicorn ) | `0.47.0` | `0.48.0` |
| [nvidia-riva-client](https://github.com/nvidia-riva/python-clients ) |
`2.25.1` | `2.26.0` |
| [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio ) |
`1.3.0` | `1.4.0` |
| [ty](https://github.com/astral-sh/ty ) | `0.0.38` | `0.0.40` |
| [ruff](https://github.com/astral-sh/ruff ) | `0.15.14` | `0.15.15` |
Updates `uvicorn` from 0.47.0 to 0.48.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/Kludex/uvicorn/releases ">uvicorn's
releases</a>.</em></p>
<blockquote>
<h2>Version 0.48.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Default <code>ssl_ciphers</code> to <code>None</code> and use
OpenSSL defaults by <a
href="https://github.com/Kludex "><code>@Kludex</code></a> in <a
href="https://redirect.github.com/Kludex/uvicorn/pull/2940 ">Kludex/uvicorn#2940</a></li>
<li>Ignore duplicate forwarding headers in
<code>ProxyHeadersMiddleware</code> by <a
href="https://github.com/Kludex "><code>@Kludex</code></a> in <a
href="https://redirect.github.com/Kludex/uvicorn/pull/2944 ">Kludex/uvicorn#2944</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/Kludex/uvicorn/compare/0.47.0...0.48.0 ">https://github.com/Kludex/uvicorn/compare/0.47.0...0.48.0 </a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/Kludex/uvicorn/blob/main/docs/release-notes.md ">uvicorn's
changelog</a>.</em></p>
<blockquote>
<h2>0.48.0 (May 24, 2026)</h2>
<h3>Changed</h3>
<ul>
<li>Default <code>ssl_ciphers</code> to <code>None</code> and use
OpenSSL defaults (<a
href="https://redirect.github.com/Kludex/uvicorn/issues/2940 ">#2940</a>)</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Ignore duplicate forwarding headers in
<code>ProxyHeadersMiddleware</code> (<a
href="https://redirect.github.com/Kludex/uvicorn/issues/2944 ">#2944</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/Kludex/uvicorn/commit/73e84e58d7f6b8b3dfd8a9e3e42d716862250f33 "><code>73e84e5</code></a>
Version 0.48.0 (<a
href="https://redirect.github.com/Kludex/uvicorn/issues/2951 ">#2951</a>)</li>
<li><a
href="https://github.com/Kludex/uvicorn/commit/45ea11690b4a62fa6df339d2b6ee3b8545a418e0 "><code>45ea116</code></a>
Ignore duplicate forwarding headers in
<code>ProxyHeadersMiddleware</code> (<a
href="https://redirect.github.com/Kludex/uvicorn/issues/2944 ">#2944</a>)</li>
<li><a
href="https://github.com/Kludex/uvicorn/commit/dd4394c3cbfd9f27a696a7b08047149690058158 "><code>dd4394c</code></a>
chore(deps): bump idna from 3.11 to 3.15 (<a
href="https://redirect.github.com/Kludex/uvicorn/issues/2941 ">#2941</a>)</li>
<li><a
href="https://github.com/Kludex/uvicorn/commit/abe07818a191cd036dc3824d802d052207e01c7e "><code>abe0781</code></a>
Default <code>ssl_ciphers</code> to <code>None</code> and use OpenSSL
defaults (<a
href="https://redirect.github.com/Kludex/uvicorn/issues/2940 ">#2940</a>)</li>
<li>See full diff in <a
href="https://github.com/Kludex/uvicorn/compare/0.47.0...0.48.0 ">compare
view</a></li>
</ul>
</details>
<br />
Updates `nvidia-riva-client` from 2.25.1 to 2.26.0
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/nvidia-riva/python-clients/commits ">compare
view</a></li>
</ul>
</details>
<br />
Updates `pytest-asyncio` from 1.3.0 to 1.4.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/pytest-dev/pytest-asyncio/releases ">pytest-asyncio's
releases</a>.</em></p>
<blockquote>
<h2>pytest-asyncio v1.4.0</h2>
<h1><a
href="https://github.com/pytest-dev/pytest-asyncio/tree/1.4.0 ">1.4.0</a>
- 2026-05-26</h1>
<h2>Deprecated</h2>
<ul>
<li>Overriding the <em>event_loop_policy</em> fixture is deprecated. Use
the <code>pytest_asyncio_loop_factories</code> hook instead. (<a
href="https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1419 ">#1419</a>)</li>
</ul>
<h2>Added</h2>
<ul>
<li>
<p>Added the <code>pytest_asyncio_loop_factories</code> hook to
parametrize asyncio tests with custom event loop factories.</p>
<p>The hook returns a mapping of factory names to loop factories, and
<code>pytest.mark.asyncio(loop_factories=[...])</code> selects a subset
of configured factories per test. When a single factory is configured,
test names are unchanged.</p>
<p>Synchronous <code>@pytest_asyncio.fixture</code> functions now see
the correct event loop when custom loop factories are configured, even
when test code disrupts the current event loop (e.g., via
<code>asyncio.run()</code> or
<code>asyncio.set_event_loop(None)</code>). (<a
href="https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1164 ">#1164</a>)</p>
</li>
</ul>
<h2>Changed</h2>
<ul>
<li>Improved the readability of the warning message that is displayed
when <code>asyncio_default_fixture_loop_scope</code> is unset (<a
href="https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1298 ">#1298</a>)</li>
<li>Only import <code>asyncio.AbstractEventLoopPolicy</code> for type
checking to avoid raising
a DeprecationWarning. (<a
href="https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1394 ">#1394</a>)</li>
<li>Updated minimum supported pytest version to v8.4.0. (<a
href="https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1397 ">#1397</a>)</li>
</ul>
<h2>Fixed</h2>
<ul>
<li>Fixed a <code>ResourceWarning: unclosed event loop</code> warning
that could occur when a synchronous test called
<code>asyncio.run()</code> or otherwise unset the current event loop
after pytest-asyncio had run an async test or fixture. (<a
href="https://redirect.github.com/pytest-dev/pytest-asyncio/issues/724 ">#724</a>)</li>
</ul>
<h2>Notes for Downstream Packagers</h2>
<ul>
<li>Added dependency on <code>sphinx-tabs >= 3.5</code> to organize
documentation examples into tabs. (<a
href="https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1395 ">#1395</a>)</li>
</ul>
<h2>pytest-asyncio v1.4.0a2</h2>
<h1><a
href="https://github.com/pytest-dev/pytest-asyncio/tree/1.4.0a2 ">1.4.0a2</a>
- 2026-05-02</h1>
<h2>Deprecated</h2>
<ul>
<li>Overriding the <em>event_loop_policy</em> fixture is deprecated. Use
the <code>pytest_asyncio_loop_factories</code> hook instead. (<a
href="https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1419 ">#1419</a>)</li>
</ul>
<h2>Added</h2>
<ul>
<li>
<p>Added the <code>pytest_asyncio_loop_factories</code> hook to
parametrize asyncio tests with custom event loop factories.</p>
<p>The hook returns a mapping of factory names to loop factories, and
<code>pytest.mark.asyncio(loop_factories=[...])</code> selects a subset
of configured factories per test. When a single factory is configured,
test names are unchanged on pytest 8.4+.</p>
<p>Synchronous <code>@pytest_asyncio.fixture</code> functions now see
the correct event loop when custom loop factories are configured, even
when test code disrupts the current event loop (e.g., via
<code>asyncio.run()</code> or
<code>asyncio.set_event_loop(None)</code>). (<a
href="https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1164 ">#1164</a>)</p>
</li>
</ul>
<h2>Changed</h2>
<ul>
<li>Improved the readability of the warning message that is displayed
when <code>asyncio_default_fixture_loop_scope</code> is unset (<a
href="https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1298 ">#1298</a>)</li>
<li>Only import <code>asyncio.AbstractEventLoopPolicy</code> for type
checking to avoid raising
a DeprecationWarning. (<a
href="https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1394 ">#1394</a>)</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/pytest-dev/pytest-asyncio/commit/6e14cd2af9292dca1fa2b027a06bbc40b0e0e425 "><code>6e14cd2</code></a>
chore: Prepare release of v1.4.0.</li>
<li><a
href="https://github.com/pytest-dev/pytest-asyncio/commit/4b900fb5d0c30949c574e55dd904ee179f858a5e "><code>4b900fb</code></a>
Build(deps): Bump codecov/codecov-action from 6.0.0 to 6.0.1</li>
<li><a
href="https://github.com/pytest-dev/pytest-asyncio/commit/ab9f63245094865c42c940a34af724b0dec1debf "><code>ab9f632</code></a>
Build(deps): Bump zipp from 3.23.1 to 4.1.0</li>
<li><a
href="https://github.com/pytest-dev/pytest-asyncio/commit/a56fc77ecd59f781d8471b0f6a82bf58e08c95fa "><code>a56fc77</code></a>
Build(deps): Bump hypothesis from 6.152.6 to 6.152.8</li>
<li><a
href="https://github.com/pytest-dev/pytest-asyncio/commit/e8bae9bc1f197731fc1a210c0da557af7b698e6d "><code>e8bae9b</code></a>
Build(deps): Bump requests from 2.34.0 to 2.34.2</li>
<li><a
href="https://github.com/pytest-dev/pytest-asyncio/commit/fc433402c570fd36a7a227ef4bc3abd4579299de "><code>fc43340</code></a>
Build(deps): Bump idna from 3.14 to 3.15</li>
<li><a
href="https://github.com/pytest-dev/pytest-asyncio/commit/762eaf5033b798b965c92afdbb2cebefa8fc3a8b "><code>762eaf5</code></a>
Build(deps): Bump jaraco-functools from 4.4.0 to 4.5.0</li>
<li><a
href="https://github.com/pytest-dev/pytest-asyncio/commit/b62e2228c80070977baf6b77ba89d5c148af920f "><code>b62e222</code></a>
Build(deps): Bump click from 8.3.3 to 8.4.0</li>
<li><a
href="https://github.com/pytest-dev/pytest-asyncio/commit/919044700627889d25ca63b6e7a3bc785f3137eb "><code>9190447</code></a>
Build(deps): Bump pydantic from 2.13.3 to 2.13.4</li>
<li><a
href="https://github.com/pytest-dev/pytest-asyncio/commit/82a393c5e31b6ebbbd8ec2a8dafc5f35b9cf1236 "><code>82a393c</code></a>
ci: Remove unnecessary debug output.</li>
<li>Additional commits viewable in <a
href="https://github.com/pytest-dev/pytest-asyncio/compare/v1.3.0...v1.4.0 ">compare
view</a></li>
</ul>
</details>
<br />
Updates `ty` from 0.0.38 to 0.0.40
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/astral-sh/ty/releases ">ty's
releases</a>.</em></p>
<blockquote>
<h2>0.0.40</h2>
<h2>Release Notes</h2>
<p>Released on 2026-05-27.</p>
<h3>Bug fixes</h3>
<ul>
<li>Accept complete enum-literal alias unions as enums (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25341 ">#25341</a>)</li>
<li>Fix diagnostics in ignored folders after adding new files (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25236 ">#25236</a>)</li>
<li>Show <code>LiteralString</code> when hovering over an inline of a
literal string in an IDE (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25373 ">#25373</a>)</li>
</ul>
<h3>LSP server</h3>
<ul>
<li>Follow aliases when attempting to map a definition in a stub file to
its "real" runtime definition (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25328 ">#25328</a>)</li>
<li>Treat Python notebook text documents as Python sources (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25393 ">#25393</a>)</li>
<li>Fix autocompletion for elements inside incomplete list
comprehensions (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25326 ">#25326</a>)</li>
</ul>
<h3>Diagnostics</h3>
<ul>
<li>Add a subdiagnostic help message to
<code>invalid-generic-class</code> diagnostics regarding incompatible
variance (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25385 ">#25385</a>)</li>
</ul>
<h3>Core type checking</h3>
<ul>
<li>Ignore and reject annotations on non-name targets (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25324 ">#25324</a>)</li>
<li>Infer class attributes assigned by metaclass initialization (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25342 ">#25342</a>)</li>
<li>Reject inconsistent generic bases in "dynamic" classes
created using <code>type(...)</code>, <code>types.new_type(...)</code>,
etc. (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25413 ">#25413</a>)</li>
<li>Resolve enum names for all unions arms in <code>Literal</code> enum
subsets (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25379 ">#25379</a>)</li>
<li>Support <code>typing.TypeForm</code> (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25334 ">#25334</a>)</li>
<li>Fix many issues in the generics solver by using constraint sets more
widely to solve type variables (<a
href="https://redirect.github.com/astral-sh/ruff/pull/24540 ">#24540</a>)</li>
</ul>
<h3>Contributors</h3>
<ul>
<li><a
href="https://github.com/anuraaga "><code>@anuraaga</code></a></li>
<li><a
href="https://github.com/dcreager "><code>@dcreager</code></a></li>
<li><a
href="https://github.com/charliermarsh "><code>@charliermarsh</code></a></li>
<li><a
href="https://github.com/MichaReiser "><code>@MichaReiser</code></a></li>
<li><a
href="https://github.com/Dev-X25874 "><code>@Dev-X25874</code></a></li>
</ul>
<h2>Install ty 0.0.40</h2>
<h3>Install prebuilt binaries via shell script</h3>
<pre lang="sh"><code>curl --proto '=https' --tlsv1.2 -LsSf
https://releases.astral.sh/github/ty/releases/download/0.0.40/ty-installer.sh
| sh
</code></pre>
<h3>Install prebuilt binaries via powershell script</h3>
<pre lang="sh"><code>powershell -ExecutionPolicy Bypass -c "irm
https://releases.astral.sh/github/ty/releases/download/0.0.40/ty-installer.ps1
| iex"
</tr></table>
</code></pre>
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/astral-sh/ty/blob/main/CHANGELOG.md ">ty's
changelog</a>.</em></p>
<blockquote>
<h2>0.0.40</h2>
<p>Released on 2026-05-27.</p>
<h3>Bug fixes</h3>
<ul>
<li>Accept complete enum-literal alias unions as enums (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25341 ">#25341</a>)</li>
<li>Fix diagnostics in ignored folders after adding new files (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25236 ">#25236</a>)</li>
<li>Show <code>LiteralString</code> when hovering over an inline of a
literal string in an IDE (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25373 ">#25373</a>)</li>
</ul>
<h3>LSP server</h3>
<ul>
<li>Follow aliases when attempting to map a definition in a stub file to
its "real" runtime definition (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25328 ">#25328</a>)</li>
<li>Treat Python notebook text documents as Python sources (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25393 ">#25393</a>)</li>
<li>Fix autocompletion for elements inside incomplete list
comprehensions (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25326 ">#25326</a>)</li>
</ul>
<h3>Diagnostics</h3>
<ul>
<li>Add a subdiagnostic help message to
<code>invalid-generic-class</code> diagnostics regarding incompatible
variance (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25385 ">#25385</a>)</li>
</ul>
<h3>Core type checking</h3>
<ul>
<li>Ignore and reject annotations on non-name targets (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25324 ">#25324</a>)</li>
<li>Infer class attributes assigned by metaclass initialization (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25342 ">#25342</a>)</li>
<li>Reject inconsistent generic bases in "dynamic" classes
created using <code>type(...)</code>, <code>types.new_type(...)</code>,
etc. (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25413 ">#25413</a>)</li>
<li>Resolve enum names for all unions arms in <code>Literal</code> enum
subsets (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25379 ">#25379</a>)</li>
<li>Support <code>typing.TypeForm</code> (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25334 ">#25334</a>)</li>
<li>Fix many issues in the generics solver by using constraint sets more
widely to solve type variables (<a
href="https://redirect.github.com/astral-sh/ruff/pull/24540 ">#24540</a>)</li>
</ul>
<h3>Contributors</h3>
<ul>
<li><a
href="https://github.com/anuraaga "><code>@anuraaga</code></a></li>
<li><a
href="https://github.com/dcreager "><code>@dcreager</code></a></li>
<li><a
href="https://github.com/charliermarsh "><code>@charliermarsh</code></a></li>
<li><a
href="https://github.com/MichaReiser "><code>@MichaReiser</code></a></li>
<li><a
href="https://github.com/Dev-X25874 "><code>@Dev-X25874</code></a></li>
</ul>
<h2>0.0.39</h2>
<p>Released on 2026-05-22.</p>
<p>This release removes the Python 3.9 branches from our vendored
standard library stubs. ty now only has "full" support for
Python 3.10 and later, but will still report version-specific syntax
errors and other diagnostics when <code>--python-version 3.9</code>
is provided via the CLI.</p>
<h3>Bug fixes</h3>
<ul>
<li>Avoid panicking on <code>__new__</code> assignments to classes (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25282 ">#25282</a>)</li>
<li>Preserve declaration order when synthesizing class fields (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25249 ">#25249</a>)</li>
<li>Respect <code>dict</code>-compatible fallbacks in TypedDict unions
(<a
href="https://redirect.github.com/astral-sh/ruff/pull/25242 ">#25242</a>)</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/astral-sh/ty/commit/7b95bc219d1dcebc3ce39d222c66c14a3825c9a0 "><code>7b95bc2</code></a>
Bump version to 0.0.40 (<a
href="https://redirect.github.com/astral-sh/ty/issues/3554 ">#3554</a>)</li>
<li><a
href="https://github.com/astral-sh/ty/commit/54c7498ec94de87135edb8b54c311b54d30ec534 "><code>54c7498</code></a>
Update prek dependencies (<a
href="https://redirect.github.com/astral-sh/ty/issues/3546 ">#3546</a>)</li>
<li><a
href="https://github.com/astral-sh/ty/commit/0d8540acdbf1340af95a2f364b9fd7d3b6bba3a8 "><code>0d8540a</code></a>
docs: set Eglot <code>:language-id</code> so ty works with
<code>python-base-mode</code> (<a
href="https://redirect.github.com/astral-sh/ty/issues/3532 ">#3532</a>)</li>
<li><a
href="https://github.com/astral-sh/ty/commit/8f1cee048254accb008fc391428b9c3139cebb2f "><code>8f1cee0</code></a>
scripts/update_schemastore: add text=True to git revision check_output
calls ...</li>
<li><a
href="https://github.com/astral-sh/ty/commit/32b654a899f1c2cffd9909a89fec19ec53af2d9d "><code>32b654a</code></a>
docs: add Flycheck note to Emacs editor integration (<a
href="https://redirect.github.com/astral-sh/ty/issues/3528 ">#3528</a>)</li>
<li><a
href="https://github.com/astral-sh/ty/commit/4e1b4e72018457d0cea0efa818ecccd63b3f3f01 "><code>4e1b4e7</code></a>
docs: fix broken link and minor wording in suppression.md (<a
href="https://redirect.github.com/astral-sh/ty/issues/3527 ">#3527</a>)</li>
<li><a
href="https://github.com/astral-sh/ty/commit/0205125174c135d6fc4014244dee374678b61c72 "><code>0205125</code></a>
Bump version to 0.0.39 (<a
href="https://redirect.github.com/astral-sh/ty/issues/3516 ">#3516</a>)</li>
<li><a
href="https://github.com/astral-sh/ty/commit/ae8058d40e641b545bbad046c487e964206a2286 "><code>ae8058d</code></a>
Update maturin to v1.13.3 (<a
href="https://redirect.github.com/astral-sh/ty/issues/3494 ">#3494</a>)</li>
<li><a
href="https://github.com/astral-sh/ty/commit/33b60f8ad0f2da648b867831548a4b8c7985647d "><code>33b60f8</code></a>
Update prek dependencies (<a
href="https://redirect.github.com/astral-sh/ty/issues/3495 ">#3495</a>)</li>
<li>See full diff in <a
href="https://github.com/astral-sh/ty/compare/0.0.38...0.0.40 ">compare
view</a></li>
</ul>
</details>
<br />
Updates `ruff` from 0.15.14 to 0.15.15
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/astral-sh/ruff/releases ">ruff's
releases</a>.</em></p>
<blockquote>
<h2>0.15.15</h2>
<h2>Release Notes</h2>
<p>Released on 2026-05-28.</p>
<h3>Preview features</h3>
<ul>
<li>Fix Markdown closing fence handling (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25310 ">#25310</a>)</li>
<li>[<code>pyflakes</code>] Report duplicate imports in
<code>typing.TYPE_CHECKING</code> block (<code>F811</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/22560 ">#22560</a>)</li>
</ul>
<h3>Bug fixes</h3>
<ul>
<li>[<code>pyflakes</code>] Treat function-scope bare annotations as
locals per PEP 526 (<code>F821</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/21540 ">#21540</a>)</li>
</ul>
<h3>Performance</h3>
<ul>
<li>Avoid redundant <code>TokenValue</code> drops in the lexer (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25300 ">#25300</a>)</li>
<li>Reduce memory usage by dropping token-excess capacity and improve
performance by approximating the initial tokens <code>Vec</code> size
(<a
href="https://redirect.github.com/astral-sh/ruff/pull/25354 ">#25354</a>)</li>
<li>Use <code>ThinVec</code> in AST to shrink <code>Stmt</code> (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25361 ">#25361</a>)</li>
</ul>
<h3>Documentation</h3>
<ul>
<li>Fix <code>line-length</code> example for <code>--config</code>
option (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25389 ">#25389</a>)</li>
<li>[<code>flake8-comprehensions</code>] Document
<code>RecursionError</code> edge case in <code>__len__</code>
(<code>C416</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25286 ">#25286</a>)</li>
<li>[<code>mccabe</code>] Improve example (<code>C901</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25287 ">#25287</a>)</li>
<li>[<code>pyupgrade</code>] Clarify fix safety docs
(<code>UP007</code>, <code>UP045</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25288 ">#25288</a>)</li>
<li>[<code>refurb</code>] Document <code>FURB192</code> exception change
for empty sequences (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25317 ">#25317</a>)</li>
<li>[<code>ruff</code>] Document false negative for user-defined types
(<code>RUF013</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25289 ">#25289</a>)</li>
</ul>
<h3>Formatter</h3>
<ul>
<li>Fix formatting of lambdas nested within f-strings (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25398 ">#25398</a>)</li>
</ul>
<h3>Server</h3>
<ul>
<li>Return code action for <code>codeAction/resolve</code> requests that
contain no or no valid URL (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25365 ">#25365</a>)</li>
</ul>
<h3>Other changes</h3>
<ul>
<li>Expand semantic syntax errors for invalid walruses (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25415 ">#25415</a>)</li>
</ul>
<h3>Contributors</h3>
<ul>
<li><a
href="https://github.com/chirizxc "><code>@chirizxc</code></a></li>
<li><a href="https://github.com/ntBre "><code>@ntBre</code></a></li>
<li><a
href="https://github.com/adityasingh2400 "><code>@adityasingh2400</code></a></li>
<li><a
href="https://github.com/charliermarsh "><code>@charliermarsh</code></a></li>
<li><a
href="https://github.com/fallintoplace "><code>@fallintoplace</code></a></li>
<li><a
href="https://github.com/martin-schlossarek "><code>@martin-schlossarek</code></a></li>
<li><a
href="https://github.com/MichaReiser "><code>@MichaReiser</code></a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md ">ruff's
changelog</a>.</em></p>
<blockquote>
<h2>0.15.15</h2>
<p>Released on 2026-05-28.</p>
<h3>Preview features</h3>
<ul>
<li>Fix Markdown closing fence handling (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25310 ">#25310</a>)</li>
<li>[<code>pyflakes</code>] Report duplicate imports in
<code>typing.TYPE_CHECKING</code> block (<code>F811</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/22560 ">#22560</a>)</li>
</ul>
<h3>Bug fixes</h3>
<ul>
<li>[<code>pyflakes</code>] Treat function-scope bare annotations as
locals per PEP 526 (<code>F821</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/21540 ">#21540</a>)</li>
</ul>
<h3>Performance</h3>
<ul>
<li>Avoid redundant <code>TokenValue</code> drops in the lexer (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25300 ">#25300</a>)</li>
<li>Reduce memory usage by dropping token-excess capacity and improve
performance by approximating the initial tokens <code>Vec</code> size
(<a
href="https://redirect.github.com/astral-sh/ruff/pull/25354 ">#25354</a>)</li>
<li>Use <code>ThinVec</code> in AST to shrink <code>Stmt</code> (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25361 ">#25361</a>)</li>
</ul>
<h3>Documentation</h3>
<ul>
<li>Fix <code>line-length</code> example for <code>--config</code>
option (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25389 ">#25389</a>)</li>
<li>[<code>flake8-comprehensions</code>] Document
<code>RecursionError</code> edge case in <code>__len__</code>
(<code>C416</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25286 ">#25286</a>)</li>
<li>[<code>mccabe</code>] Improve example (<code>C901</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25287 ">#25287</a>)</li>
<li>[<code>pyupgrade</code>] Clarify fix safety docs
(<code>UP007</code>, <code>UP045</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25288 ">#25288</a>)</li>
<li>[<code>refurb</code>] Document <code>FURB192</code> exception change
for empty sequences (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25317 ">#25317</a>)</li>
<li>[<code>ruff</code>] Document false negative for user-defined types
(<code>RUF013</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25289 ">#25289</a>)</li>
</ul>
<h3>Formatter</h3>
<ul>
<li>Fix formatting of lambdas nested within f-strings (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25398 ">#25398</a>)</li>
</ul>
<h3>Server</h3>
<ul>
<li>Return code action for <code>codeAction/resolve</code> requests that
contain no or no valid URL (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25365 ">#25365</a>)</li>
</ul>
<h3>Other changes</h3>
<ul>
<li>Expand semantic syntax errors for invalid walruses (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25415 ">#25415</a>)</li>
</ul>
<h3>Contributors</h3>
<ul>
<li><a
href="https://github.com/chirizxc "><code>@chirizxc</code></a></li>
<li><a href="https://github.com/ntBre "><code>@ntBre</code></a></li>
<li><a
href="https://github.com/adityasingh2400 "><code>@adityasingh2400</code></a></li>
<li><a
href="https://github.com/charliermarsh "><code>@charliermarsh</code></a></li>
<li><a
href="https://github.com/fallintoplace "><code>@fallintoplace</code></a></li>
<li><a
href="https://github.com/martin-schlossarek "><code>@martin-schlossarek</code></a></li>
<li><a
href="https://github.com/MichaReiser "><code>@MichaReiser</code></a></li>
<li><a
href="https://github.com/Ruchir28 "><code>@Ruchir28</code></a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/astral-sh/ruff/commit/db5aa0a5f1b92cb91d910bf0866a967554dd94f5 "><code>db5aa0a</code></a>
Bump 0.15.15 (<a
href="https://redirect.github.com/astral-sh/ruff/issues/25431 ">#25431</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/366fe21ba369ccdd01eb99c1043c9a969c99230b "><code>366fe21</code></a>
[ty] Improve diagnostics for syntax errors in forward annotations (<a
href="https://redirect.github.com/astral-sh/ruff/issues/25158 ">#25158</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/e2e1e647d182b8567845039c9a65fb0608a4dcfc "><code>e2e1e64</code></a>
[ty] Remove excess capacity from more Salsa cached collections (<a
href="https://redirect.github.com/astral-sh/ruff/issues/25411 ">#25411</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/1bd77e1646f2213d86b8da215f08279187867d72 "><code>1bd77e1</code></a>
[ty] Use diagnostic message as tie breaker when sorting (<a
href="https://redirect.github.com/astral-sh/ruff/issues/25424 ">#25424</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/7e1bc1e75f15795f12c846294b13df4535f2abbf "><code>7e1bc1e</code></a>
Add agent skills for working on ty (<a
href="https://redirect.github.com/astral-sh/ruff/issues/25422 ">#25422</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/574e10752f8cfa9e0cdbe3b01e96c4380950469b "><code>574e107</code></a>
Expand semantic syntax errors for invalid walruses (<a
href="https://redirect.github.com/astral-sh/ruff/issues/25415 ">#25415</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/4a7ca062fccd80443a43aa61e5dc7e5858e88dc1 "><code>4a7ca06</code></a>
[ty] Display docs for matching parameter when hovering over the name of
an ar...</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/54327092dbfe455040690d63bb1e5e4b5f551239 "><code>5432709</code></a>
Refine a few agents instructions (<a
href="https://redirect.github.com/astral-sh/ruff/issues/25423 ">#25423</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/3cb09eba689ebb49e799131092121928cc789c18 "><code>3cb09eb</code></a>
[ty] Support <code>typing.TypeForm</code> (<a
href="https://redirect.github.com/astral-sh/ruff/issues/25334 ">#25334</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/c8cd59f189f2b6f55d542b29bddb953622add6fc "><code>c8cd59f</code></a>
[ty] Infer class attributes assigned by metaclass initialization (<a
href="https://redirect.github.com/astral-sh/ruff/issues/25342 ">#25342</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/astral-sh/ruff/compare/0.15.14...0.15.15 ">compare
view</a></li>
</ul>
</details>
<br />
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions
</details>
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-31 15:33:30 -07:00
Alishahryar1
b67019351a
Update README
2026-05-31 15:27:53 -07:00
Alishahryar1
044a152fb4
Add Gemini thought signature smoke
2026-05-31 15:26:13 -07:00
Ali Khokhar
8416792b61
Update README.md ( #663 )
2026-05-31 15:25:48 -07:00
Alishahryar1
fedcc0a32b
Fix Gemini thought signature replay
2026-05-31 15:13:37 -07:00
Alishahryar1
885c26d977
Surface upstream provider errors
...
Include copyable upstream status and error bodies in provider SSE failures for OpenAI-compatible and native Anthropic transports, while preserving retry behavior and safe logging defaults.
2026-05-31 14:48:51 -07:00
Alishahryar1
d501e5223a
Fix live provider smoke defaults
...
Update live smoke model defaults for NIM, OpenRouter, and Gemini; normalize tool-call indexes; downgrade DeepSeek forced tool_choice; and add coverage for the provider smoke fixes.
2026-05-31 13:02:15 -07:00
Alishahryar1
e4d6dc1f94
fix: avoid dual gemini thinking controls
2026-05-29 17:05:43 -07:00
Alishahryar1
4631ff9c49
fix: update uv with install manager
2026-05-29 16:35:10 -07:00
Alishahryar1
cebdc02a32
fix: accept system role messages
2026-05-29 16:16:48 -07:00
Alishahryar1
8ae7795961
fix(gemini): nest google extra body for sdk
2026-05-24 11:10:29 -07:00