Before submitting
Area
apps/server
Steps to reproduce
- Open Settings → Providers → Add provider, search the ACP Registry for Junie (
junie, 3419.24.0) and add it.
- Wait for the provider status check, or refresh providers.
- Junie never reaches a ready state; every status check fails after 60 seconds.
Minimal repro without T3 Code (shows the root cause): start the registry binary with junie --acp=true and write one JSON-RPC line to its stdin:
{"jsonrpc":"2.0","id":4294967296,"method":"initialize","params":{"protocolVersion":1,"clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false}}}
No response is ever written. The same request with "id":1 (or "id":1073741824) is answered in about 1 s, and session/new succeeds right after.
Expected behavior
Junie initializes, the status probe creates a test session, and the provider becomes ready for chat.
Actual behavior
The probe always times out. packages/effect-acp starts Effect RPC request ids at 2 ** 32 (client.ts and agent.ts, let nextRpcRequestId = 2 ** 32) so they don't collide with extension request ids, which count up from 1. Junie is built on the official Kotlin ACP SDK, whose RequestId.IntId holds a Kotlin Int. Its RequestIdSerializer decodes numeric ids with element.content.toInt(), which throws for 4294967296. The frame is treated as malformed and nothing is sent back, so T3 waits until its 60 s probe timeout.
The ACP schema allows these ids (RequestId is integer/int64 in both v1 and v2, unchanged since v0.10.0), so this is an interop bug with a widely used SDK rather than a T3 spec violation. Any ACP Registry agent built on the Kotlin SDK should be affected, not only Junie.
Probe results against Junie 3419.24 (initialize → session/new):
| First request id |
Result |
1 |
initialize 0.9 s, session 1.5 s |
1073741824 (2^30) |
initialize 1.0 s, session 1.7 s |
4294967296 (2^32) |
no response after 20 s |
Impact
Blocks work completely
Version or commit
main @ 1945ce8
Environment
macOS 27.0 (Apple Silicon), Node 24.21.0, Junie ACP 3419.24 (agentInfo version 26.9.22) via the ACP Registry
Logs or stack traces
# ~/.t3/userdata/logs/server.trace.ndjson, span AcpRegistryProbe.probeConfiguration (repeats on every refresh)
AcpRegistryOperationError: The ACP agent did not resolve and create a test session within 60 seconds. Package installation or agent startup may be slow; this check retries on the next provider refresh.
at AcpRegistryProbe.probeConfiguration
at AcpRegistryDriver.checkProviderStatus
at restartSnapshotEnrichment
at applySnapshot
at refreshSnapshot
`~/.t3/userdata/logs/provider/` stays empty because no thread session ever starts.
Screenshots, recordings, or supporting files
No response
Workaround
None in the app. A fix is to start RPC request ids inside the signed 32-bit range (for example 2 ** 30), which still leaves about 1e9 extension ids before the ranges could meet. Responses are routed by the pending extension-request map first, so the lower offset does not introduce misrouting.
Separately, the root limitation is in the Kotlin SDK (Int instead of Long for int64 ids, and malformed frames get no error reply); that is worth reporting to agentclientprotocol/kotlin-sdk.
Before submitting
Area
apps/server
Steps to reproduce
junie, 3419.24.0) and add it.Minimal repro without T3 Code (shows the root cause): start the registry binary with
junie --acp=trueand write one JSON-RPC line to its stdin:{"jsonrpc":"2.0","id":4294967296,"method":"initialize","params":{"protocolVersion":1,"clientCapabilities":{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false}}}No response is ever written. The same request with
"id":1(or"id":1073741824) is answered in about 1 s, andsession/newsucceeds right after.Expected behavior
Junie initializes, the status probe creates a test session, and the provider becomes ready for chat.
Actual behavior
The probe always times out.
packages/effect-acpstarts Effect RPC request ids at2 ** 32(client.tsandagent.ts,let nextRpcRequestId = 2 ** 32) so they don't collide with extension request ids, which count up from 1. Junie is built on the official Kotlin ACP SDK, whoseRequestId.IntIdholds a KotlinInt. ItsRequestIdSerializerdecodes numeric ids withelement.content.toInt(), which throws for 4294967296. The frame is treated as malformed and nothing is sent back, so T3 waits until its 60 s probe timeout.The ACP schema allows these ids (
RequestIdisinteger/int64in both v1 and v2, unchanged since v0.10.0), so this is an interop bug with a widely used SDK rather than a T3 spec violation. Any ACP Registry agent built on the Kotlin SDK should be affected, not only Junie.Probe results against Junie 3419.24 (
initialize→session/new):11073741824(2^30)4294967296(2^32)Impact
Blocks work completely
Version or commit
main @ 1945ce8
Environment
macOS 27.0 (Apple Silicon), Node 24.21.0, Junie ACP 3419.24 (agentInfo version 26.9.22) via the ACP Registry
Logs or stack traces
Screenshots, recordings, or supporting files
No response
Workaround
None in the app. A fix is to start RPC request ids inside the signed 32-bit range (for example
2 ** 30), which still leaves about 1e9 extension ids before the ranges could meet. Responses are routed by the pending extension-request map first, so the lower offset does not introduce misrouting.Separately, the root limitation is in the Kotlin SDK (
Intinstead ofLongforint64ids, and malformed frames get no error reply); that is worth reporting to agentclientprotocol/kotlin-sdk.