Ctrl K
ComunidadGuías…

scripts/testing/record-v1-golden.ts

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
// Records the v1 live view's golden from the agent-browser engine: a phone's session (v1-session.ts) against the
// engine as it ships, normalized, into server/browser/viewers/testing/v1-golden.json. The new browser's v1 adapter is
// tested against that file. Needs agent-browser (OMB_AGENT_BROWSER_PATH or the tools directory) and a Chrome
// (OMB_CHROME_PATH); run with: node --experimental-strip-types scripts/testing/record-v1-golden.ts
import { randomBytes } from "node:crypto";
import { mkdtempSync, writeFileSync } from "node:fs";
import { tmpdir } from "node:os";
import { join } from "node:path";

import { BrowserLive } from "../../server/browser-live.ts";
import { BrowserRuntime } from "../../server/browser-runtime.ts";
import { agentBrowserIntegration, closeBrowserSession, resolveAgentBrowserBinary } from "../../server/browser-engine.ts";
import { browserRuntimeEnv } from "../../server/browser-runtime.ts";
import { openGate } from "../../server/browser/egress/gate.ts";
import { removeTempDir } from "../../server/testing/cleanup.ts";
import { normalizeV1, runV1Session, startV1Pages } from "../../server/browser/viewers/testing/v1-session.ts";

const binary = process.env.OMB_AGENT_BROWSER_PATH ?? resolveAgentBrowserBinary({ env: process.env });
const chrome = process.env.OMB_CHROME_PATH;
if (!binary || !chrome) throw new Error("Set OMB_AGENT_BROWSER_PATH (or install agent-browser) and OMB_CHROME_PATH.");
const sockets = mkdtempSync(join(tmpdir(), "omb-v1-golden-"));
const pages = await startV1Pages();
const gate = await openGate({ decide: async () => null });
const session = `omb-v1-golden-${randomBytes(4).toString("hex")}`;
const spec = agentBrowserIntegration({
  binaryPath: binary, session, encryptionKey: randomBytes(32).toString("hex"), persistent: false, egressPort: gate.port,
  env: { ...process.env, AGENT_BROWSER_EXECUTABLE_PATH: chrome, AGENT_BROWSER_SOCKET_DIR: sockets },
});
spec.env.AGENT_BROWSER_SOCKET_DIR = sockets;
const runtime = new BrowserRuntime({});
const live = new BrowserLive({ runtime });
try {
  const records = await runV1Session({
    open: (res) => live.open({ botId: "bot", session, spec, owner: "local-owner", isCurrent: () => true, res }),
    action: (viewerId, body) => live.action({ viewerId, botId: "bot", owner: "local-owner", body }),
  }, pages.origin);
  const golden = normalizeV1(records, pages.origin);
  writeFileSync(new URL("../../server/browser/viewers/testing/v1-golden.json", import.meta.url), `${JSON.stringify(golden, null, 2)}\n`);
  console.log(JSON.stringify(golden, null, 2));
} finally {
  live.closeAll();
  await closeBrowserSession(binary, browserRuntimeEnv({ ...spec.env, AGENT_BROWSER_SESSION: session }));
  await gate.close();
  await pages.close();
  await removeTempDir(sockets);
}