// The local app as a target. Unlike cloud/self-host, local has no shared// instance: it is single-user, so each scenario launches its OWN `executor web`// via the CLI (the Cli surface, recorded as a terminal cast) on its own// throwaway data dir and an OS-assigned port (`--port 0`). That makes local// scenarios independent (parallel-safe) and is the CLI+browser flow itself —// see local/auth.test.ts. So this target carries no baseUrl/token of its own;// scenarios read the printed `?_token=` URL at runtime and drive the browser// against it with absolute URLs.import { Effect } from "effect";import type { Identity, Target } from "../src/target";export const localTarget = (): Target => ({ name: "local", // Placeholders: scenarios navigate to absolute URLs (the CLI prints the real // port), so the browser context's baseURL is never used to resolve a path. baseUrl: "http://127.0.0.1", mcpUrl: "http://127.0.0.1/mcp", // "browser" provides the Browser surface; Cli is always available. No // "mcp-oauth" (bearer-gated, not OAuth consent) and no "billing". capabilities: new Set(["browser"]), // Single-user: a trivial identity with no cookies. The browser authenticates // via the ?_token bootstrap the scenario performs, not via injected identity. newIdentity: () => Effect.sync((): Identity => ({ label: "local" })),});
// The local app as a target. Unlike cloud/self-host, local has no shared
// instance: it is single-user, so each scenario launches its OWN `executor web`
// via the CLI (the Cli surface, recorded as a terminal cast) on its own
// throwaway data dir and an OS-assigned port (`--port 0`). That makes local
// scenarios independent (parallel-safe) and is the CLI+browser flow itself —
// see local/auth.test.ts. So this target carries no baseUrl/token of its own;
// scenarios read the printed `?_token=` URL at runtime and drive the browser
// against it with absolute URLs.
import { Effect } from "effect";
import type { Identity, Target } from "../src/target";
export const localTarget = (): Target => ({
name: "local",
// Placeholders: scenarios navigate to absolute URLs (the CLI prints the real
// port), so the browser context's baseURL is never used to resolve a path.
baseUrl: "http://127.0.0.1",
mcpUrl: "http://127.0.0.1/mcp",
// "browser" provides the Browser surface; Cli is always available. No
// "mcp-oauth" (bearer-gated, not OAuth consent) and no "billing".
capabilities: new Set(["browser"]),
// Single-user: a trivial identity with no cookies. The browser authenticates
// via the ?_token bootstrap the scenario performs, not via injected identity.
newIdentity: () => Effect.sync((): Identity => ({ label: "local" })),
});