import { type ExtensionUIContext } from "@earendil-works/pi-coding-agent"; import { Context, Effect, Layer, Ref } from "effect"; import { PiContext } from "./PiApi"; export type SetWidgetContent = Parameters[1]; export class PiWebMcpListWidgetService extends Context.Service Effect.Effect; readonly clear: () => Effect.Effect; readonly isVisible: Effect.Effect; }>()("pi-webmcp/PiWebMcpListWidgetService") { static readonly live = Layer.effect( PiWebMcpListWidgetService, Effect.gen(function*() { const ctx = yield* PiContext; const visibleRef = yield* Ref.make(false); const widgetId = "webmcp-list"; return PiWebMcpListWidgetService.of({ set: Effect.fn("PiWebMcpListWidgetService.set")(function*(setter: SetWidgetContent) { ctx.ui.setWidget(widgetId, setter); yield* Ref.set(visibleRef, true); }), clear: Effect.fn("PiWebMcpListWidgetService.clear")(function*() { ctx.ui.setWidget(widgetId, undefined); yield* Ref.set(visibleRef, false); }), isVisible: Ref.get(visibleRef), }); }), ); }