Skip to content

Commit 5fa55db

Browse files
committed
refactor(core): use cached borrowing for pending reads
1 parent 3a00927 commit 5fa55db

4 files changed

Lines changed: 5 additions & 12 deletions

File tree

‎packages/core/src/effect/app-node-builder.ts‎

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { buildLocationServiceMap } from "../location-services.js"
22
import { LocationServiceMap } from "../location-service-map.js"
33
import { LayerNode } from "@opencode/util/effect/layer-node"
44
import { makeGlobalNode } from "@opencode/util/effect/app-node"
5-
import { Effect, Layer, RcMap } from "effect"
5+
import { Effect, Layer } from "effect"
66
import { Instance } from "../instance/service.js"
77

88
const instances = makeGlobalNode({
@@ -13,7 +13,6 @@ const instances = makeGlobalNode({
1313
const locations = yield* LocationServiceMap.Service
1414
return Instance.Service.of({
1515
provide: (session) => Effect.provide(locations.get(session.location)),
16-
live: (session) => RcMap.has(locations.rcMap, LocationServiceMap.canonical(session.location)),
1716
provideCached: (session) => Instance.cached(locations, LocationServiceMap.canonical(session.location)),
1817
})
1918
}),

‎packages/core/src/instance/service.ts‎

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@ export interface Interface {
1212
readonly provide: (
1313
session: Session.Info,
1414
) => <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E | Error, Exclude<R, Services>>
15-
/** Whether `provide` would reuse built or booting capabilities. Selectors without it are assumed live. */
16-
readonly live?: (session: Session.Info) => Effect.Effect<boolean>
1715
readonly provideCached: (
1816
session: Session.Info,
1917
) => <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<Option.Option<A>, E | Error, Exclude<R, Services>>

‎packages/sdk/src/internal/instances.ts‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import type { InstancePlugins } from "@opencode/core/plugin/instance"
77
import type { Session } from "@opencode/schema/session"
88
import { makeGlobalNode } from "@opencode/util/effect/app-node"
99
import type { LayerNode } from "@opencode/util/effect/layer-node"
10-
import { Context, Duration, Effect, Layer, LayerMap, RcMap, Scope } from "effect"
10+
import { Context, Duration, Effect, Layer, LayerMap, Scope } from "effect"
1111

1212
export interface Configuration {
1313
readonly plugins: InstancePlugins.List
@@ -102,7 +102,7 @@ export function layer(options: Options, replacements: () => LayerNode.Replacemen
102102
),
103103
{ idleTimeToLive: Duration.infinity },
104104
)
105-
return Instance.Service.of({ provide, provideCached, live: (session) => RcMap.has(instances.rcMap, key(session)) })
105+
return Instance.Service.of({ provide, provideCached })
106106
}),
107107
)
108108
}

‎packages/server/src/middleware/form-location.ts‎

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { LocationServiceMap } from "@opencode/core/location-services"
33
import { Session } from "@opencode/core/session"
44
import { LocationNotFoundError, InvalidRequestError, SessionNotFoundError } from "@opencode/protocol/errors"
55
import { Effect, Layer } from "effect"
6-
import { HttpRouter, HttpServerRequest, HttpServerResponse } from "effect/http"
6+
import { HttpRouter, HttpServerRequest } from "effect/http"
77
import { HttpApiMiddleware } from "effect/http-api"
88
import { locationErrors, requestRef, sessionInfo, type LocationServices } from "../location"
99

@@ -21,7 +21,7 @@ export const formLocationLayer = Layer.effect(
2121
const instances = yield* Instance.Service
2222
const locations = yield* LocationServiceMap.Service
2323

24-
return FormLocationMiddleware.of((effect, options) =>
24+
return FormLocationMiddleware.of((effect) =>
2525
Effect.gen(function* () {
2626
const route = yield* HttpRouter.RouteContext
2727
if (route.params.sessionID === "global") {
@@ -33,10 +33,6 @@ export const formLocationLayer = Layer.effect(
3333
}
3434

3535
const session = yield* sessionInfo(sessions, route.params.sessionID)
36-
// Forms live in memory, so a Session without live capabilities has none pending. Listing must
37-
// not boot its Location: clients poll whole subagent trees, including deleted worktrees.
38-
if (options.endpoint.identifier === "session.form.list" && instances.live && !(yield* instances.live(session)))
39-
return HttpServerResponse.jsonUnsafe({ data: [] })
4036
return yield* effect.pipe(instances.provide(session), locationErrors)
4137
}),
4238
)

0 commit comments

Comments
 (0)