import * as Effect from "effect/Effect";
import type {
PreviewAutomationOperation,
PreviewAutomationRecordingArtifact,
PreviewAutomationRecordingStatus,
PreviewAutomationSnapshot,
PreviewAutomationStatus,
} from "@t3tools/contracts";
import * as McpInvocationContext from "../../McpInvocationContext.ts";
import * as PreviewAutomationBroker from "../../PreviewAutomationBroker.ts";
import { PreviewSnapshotToolkit, PreviewStandardToolkit, PreviewToolkit } from "./tools.ts";
const invoke = Effect.fn("PreviewToolkit.invoke")(function* (
operation: PreviewAutomationOperation,
input: unknown,
timeoutMs?: number,
): Effect.fn.Return<
A,
import("@t3tools/contracts").PreviewAutomationError,
McpInvocationContext.McpInvocationContext | PreviewAutomationBroker.PreviewAutomationBroker
> {
const scope = yield* McpInvocationContext.requireMcpCapability("preview");
const broker = yield* PreviewAutomationBroker.PreviewAutomationBroker;
return yield* broker.invoke({
scope,
operation,
input,
...(timeoutMs === undefined ? {} : { timeoutMs }),
});
});
const handlers = {
preview_status: () => invoke("status", {}),
preview_open: (input) =>
invoke("open", {
...input,
show: input.show ?? true,
reuseExistingTab: input.reuseExistingTab ?? true,
}),
preview_navigate: (input) => invoke("navigate", input, input.timeoutMs),
preview_snapshot: () => invoke("snapshot", {}),
preview_click: (input) => invoke("click", input, input.timeoutMs).pipe(Effect.as(null)),
preview_type: (input) => invoke("type", input, input.timeoutMs).pipe(Effect.as(null)),
preview_press: (input) => invoke("press", input).pipe(Effect.as(null)),
preview_scroll: (input) => invoke("scroll", input).pipe(Effect.as(null)),
preview_evaluate: (input) =>
invoke("evaluate", input).pipe(Effect.map((result) => result ?? null)),
preview_wait_for: (input) =>
invoke("waitFor", input, input.timeoutMs).pipe(Effect.as(null)),
preview_recording_start: () => invoke("recordingStart", {}),
preview_recording_stop: () => invoke("recordingStop", {}),
} satisfies Parameters[0];
const { preview_snapshot, ...standardHandlers } = handlers;
export const PreviewStandardToolkitHandlersLive = PreviewStandardToolkit.toLayer(standardHandlers);
export const PreviewSnapshotToolkitHandlersLive = PreviewSnapshotToolkit.toLayer({
preview_snapshot,
});
export const PreviewToolkitHandlersLive = PreviewToolkit.toLayer(handlers);