From 273ffc30ea3a3dd0f1e8ea41dcad9403e232e3c6 Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Tue, 12 May 2026 21:08:38 -0400 Subject: [PATCH] revert unrelated event and worktree changes --- .../opencode/src/project/instance-store.ts | 12 ---- .../server/routes/instance/httpapi/event.ts | 63 +++++++------------ packages/opencode/src/worktree/index.ts | 3 - 3 files changed, 24 insertions(+), 54 deletions(-) diff --git a/packages/opencode/src/project/instance-store.ts b/packages/opencode/src/project/instance-store.ts index 82c707eadf..faa56668a7 100644 --- a/packages/opencode/src/project/instance-store.ts +++ b/packages/opencode/src/project/instance-store.ts @@ -18,7 +18,6 @@ export interface Interface { readonly load: (input: LoadInput) => Effect.Effect readonly reload: (input: LoadInput) => Effect.Effect readonly dispose: (ctx: InstanceContext) => Effect.Effect - readonly disposeDirectory: (directory: string) => Effect.Effect readonly disposeAll: () => Effect.Effect readonly provide: (input: LoadInput, effect: Effect.Effect) => Effect.Effect } @@ -149,16 +148,6 @@ export const layer: Layer.Layer -} - export const EventPaths = { event: "/event", } as const @@ -46,39 +40,30 @@ function eventData(data: unknown): Sse.Event { } function eventResponse(bus: Bus.Interface) { - return Effect.gen(function* () { - const queue = yield* Queue.unbounded() - const unsubscribe = yield* bus.subscribeAllCallback((event) => Queue.offerUnsafe(queue, event)) - const events = Stream.fromQueue(queue).pipe(Stream.takeUntil((event) => event.type === Bus.InstanceDisposed.type)) - const heartbeat = Stream.tick("10 seconds").pipe( - Stream.drop(1), - Stream.map(() => ({ id: Bus.createID(), type: "server.heartbeat", properties: {} })), - ) + const events = bus.subscribeAll().pipe(Stream.takeUntil((event) => event.type === Bus.InstanceDisposed.type)) + const heartbeat = Stream.tick("10 seconds").pipe( + Stream.drop(1), + Stream.map(() => ({ id: Bus.createID(), type: "server.heartbeat", properties: {} })), + ) - log.info("event connected") - return HttpServerResponse.stream( - Stream.make({ id: Bus.createID(), type: "server.connected", properties: {} }).pipe( - Stream.concat(events.pipe(Stream.merge(heartbeat, { haltStrategy: "left" }))), - Stream.map(eventData), - Stream.pipeThroughChannel(Sse.encode()), - Stream.encodeText, - Stream.ensuring( - Effect.sync(unsubscribe).pipe( - Effect.andThen(Queue.shutdown(queue)), - Effect.andThen(Effect.sync(() => log.info("event disconnected"))), - ), - ), - ), - { - contentType: "text/event-stream", - headers: { - "Cache-Control": "no-cache, no-transform", - "X-Accel-Buffering": "no", - "X-Content-Type-Options": "nosniff", - }, + log.info("event connected") + return HttpServerResponse.stream( + Stream.make({ id: Bus.createID(), type: "server.connected", properties: {} }).pipe( + Stream.concat(events.pipe(Stream.merge(heartbeat, { haltStrategy: "left" }))), + Stream.map(eventData), + Stream.pipeThroughChannel(Sse.encode()), + Stream.encodeText, + Stream.ensuring(Effect.sync(() => log.info("event disconnected"))), + ), + { + contentType: "text/event-stream", + headers: { + "Cache-Control": "no-cache, no-transform", + "X-Accel-Buffering": "no", + "X-Content-Type-Options": "nosniff", }, - ) - }) + }, + ) } export const eventHandlers = HttpApiBuilder.group(EventApi, "event", (handlers) => @@ -87,7 +72,7 @@ export const eventHandlers = HttpApiBuilder.group(EventApi, "event", (handlers) return handlers.handleRaw( "subscribe", Effect.fn("EventHttpApi.subscribe")(function* () { - return yield* eventResponse(bus) + return eventResponse(bus) }), ) }), diff --git a/packages/opencode/src/worktree/index.ts b/packages/opencode/src/worktree/index.ts index 4653bfdcc2..7d02189261 100644 --- a/packages/opencode/src/worktree/index.ts +++ b/packages/opencode/src/worktree/index.ts @@ -380,7 +380,6 @@ export const layer: Layer.Layer< throw new NotGitError({ message: "Worktrees are only supported for git projects" }) } - yield* store.disposeDirectory(input.directory).pipe(Effect.ignore) const directory = yield* canonical(input.directory) const list = yield* git(["worktree", "list", "--porcelain"], { cwd: ctx.worktree }) @@ -394,14 +393,12 @@ export const layer: Layer.Layer< if (!entry?.path) { const directoryExists = yield* fs.exists(directory).pipe(Effect.orDie) if (directoryExists) { - yield* store.disposeDirectory(directory).pipe(Effect.ignore) yield* stopFsmonitor(directory) yield* cleanDirectory(directory) } return true } - yield* store.disposeDirectory(entry.path).pipe(Effect.ignore) yield* stopFsmonitor(entry.path) const removed = yield* git(["worktree", "remove", "--force", entry.path], { cwd: ctx.worktree }) if (removed.code !== 0) {