mirror of
https://fastgit.cc/https://github.com/anomalyco/opencode
synced 2026-04-21 13:21:17 +08:00
fix(mcp): use Effect.timeoutOrElse for transport connect timeout
Replace withTimeout (Promise.race) with Effect.timeoutOrElse so that fiber interruption properly triggers acquireUseRelease cleanup. The Promise.race approach left the underlying connect promise dangling, which prevented the release function from running on some platforms.
This commit is contained in:
@@ -209,14 +209,18 @@ export namespace MCP {
|
||||
const connectTransport = (transport: Transport, timeout: number) =>
|
||||
Effect.acquireUseRelease(
|
||||
Effect.succeed(transport),
|
||||
(t) =>
|
||||
Effect.tryPromise({
|
||||
try: () => {
|
||||
const client = new Client({ name: "opencode", version: Installation.VERSION })
|
||||
return withTimeout(client.connect(t), timeout).then(() => client)
|
||||
},
|
||||
(t) => {
|
||||
const client = new Client({ name: "opencode", version: Installation.VERSION })
|
||||
return Effect.tryPromise({
|
||||
try: () => client.connect(t).then(() => client),
|
||||
catch: (e) => (e instanceof Error ? e : new Error(String(e))),
|
||||
}),
|
||||
}).pipe(
|
||||
Effect.timeoutOrElse({
|
||||
duration: `${timeout} millis`,
|
||||
onTimeout: () => Effect.fail(new Error(`Operation timed out after ${timeout}ms`)),
|
||||
}),
|
||||
)
|
||||
},
|
||||
(t, exit) =>
|
||||
Exit.isFailure(exit)
|
||||
? Effect.tryPromise(() => t.close()).pipe(Effect.ignore)
|
||||
|
||||
Reference in New Issue
Block a user