Files
wehub-resource-sync 426e9eeabd
Voice Workbench / headless workbench (mocked backends) (push) Has been cancelled
Voice Workbench / real acoustic lane (nightly, provisioned only) (push) Has been cancelled
ci / test (push) Has been cancelled
ci / lint-and-format (push) Has been cancelled
ci / build (push) Has been cancelled
ci / dev-startup (push) Has been cancelled
gitleaks / gitleaks (push) Has been cancelled
Markdown Links / Relative Markdown Links (push) Has been cancelled
Quality (Extended) / Homepage Build (PR smoke) (push) Has been cancelled
Quality (Extended) / Comment-only diff guard (push) Has been cancelled
Quality (Extended) / Format + Type Safety Ratchet (push) Has been cancelled
Quality (Extended) / Develop Gate (secret scan + UI determinism) (push) Has been cancelled
Quality (Extended) / Develop Gate (lint) (push) Has been cancelled
Chat shell gestures / Chat shell gesture + parity e2e (push) Has been cancelled
Cloud Gateway Discord / Test (push) Has been cancelled
Benchmark Bridge Tests / benchmark (bunx @biomejs/biome check packages/lifeops-bench/src, benchmark-lint) (push) Has been cancelled
Benchmark Bridge Tests / benchmark (bunx vitest run --config packages/lifeops-bench/vitest.config.ts --root packages/lifeops-bench --passWithNoTests, benchmark-tests) (push) Has been cancelled
Build Agent Image / build-and-push (push) Has been cancelled
Dev Smoke / bun run dev onboarding chat (push) Has been cancelled
Dev Smoke / Vite HMR dependency-level smoke (push) Has been cancelled
Electrobun Submodule Guard / electrobun gitlink is fetchable (push) Has been cancelled
Publish @elizaos/example-code / check_npm (push) Has been cancelled
Publish @elizaos/example-code / publish_npm (push) Has been cancelled
Publish @elizaos/plugin-elizacloud / verify_version (push) Has been cancelled
Publish @elizaos/plugin-elizacloud / publish_npm (push) Has been cancelled
Sandbox Live Smoke / Sandbox live smoke (push) Has been cancelled
Snap Build & Test / Build Snap (amd64) (push) Has been cancelled
Snap Build & Test / Build Snap (arm64) (push) Has been cancelled
Test Packaging / elizaos CLI global-install smoke (node + bun) (push) Has been cancelled
Cloud Gateway Webhook / Test (push) Has been cancelled
Cloud Tests / lint-and-types (push) Has been cancelled
Cloud Tests / unit-tests (push) Has been cancelled
Cloud Tests / integration-tests (push) Has been cancelled
Cloud Tests / e2e-tests (push) Has been cancelled
CodeQL Advanced / Analyze (javascript-typescript) (push) Has been cancelled
Deploy Apps Worker (Product 2) / Determine environment (push) Has been cancelled
Deploy Apps Worker (Product 2) / Deploy apps worker to apps-control host (${{ needs.determine-env.outputs.environment }}) (push) Has been cancelled
Deploy Eliza Provisioning Worker / Determine environment (push) Has been cancelled
Deploy Eliza Provisioning Worker / Deploy worker to Hetzner host (${{ needs.determine-env.outputs.environment }} @ ${{ needs.determine-env.outputs.deployment_sha }}) (push) Has been cancelled
Dev Smoke / Classify changed paths (push) Has been cancelled
supply-chain / sbom (push) Has been cancelled
supply-chain / vulnerability-scan (push) Has been cancelled
Build, Push & Deploy to Phala Cloud / build-and-push (push) Has been cancelled
Test Packaging / Validate Packaging Configs (push) Has been cancelled
Test Packaging / Build & Test PyPI Package (push) Has been cancelled
Test Packaging / PyPI on Python ${{ matrix.python }} (push) Has been cancelled
Test Packaging / Pack & Test JS Tarballs (push) Has been cancelled
UI Fixture E2E / ui-fixture-e2e (push) Has been cancelled
UI Fixture E2E / fixture-e2e (push) Has been cancelled
UI Story Gate / story-gate (push) Has been cancelled
vault-ci / test (macos-latest) (push) Has been cancelled
vault-ci / test (ubuntu-latest) (push) Has been cancelled
vault-ci / test (windows-latest) (push) Has been cancelled
vault-ci / app-core wiring tests (push) Has been cancelled
verify-patches / verify patches/CHECKSUMS.sha256 (push) Has been cancelled
Voice Benchmark Smoke / voice-emotion fixture smoke (push) Has been cancelled
Voice Benchmark Smoke / voiceagentbench fixture smoke (push) Has been cancelled
Voice Benchmark Smoke / voicebench-quality unit smoke (push) Has been cancelled
Voice Benchmark Smoke / voicebench TypeScript unit (no audio) (push) Has been cancelled
Voice Benchmark Smoke / voice bench smoke summary (push) Has been cancelled
Windows CI / windows ([bun run --cwd packages/app-core test bun run --cwd packages/elizaos test bun run --cwd packages/cloud/shared test], app-and-cli) (push) Has been cancelled
Windows CI / windows ([bun run --cwd packages/scenario-runner test bun run --cwd packages/vault test bun run --cwd packages/security test bun run --cwd plugins/plugin-coding-tools test], framework-packages) (push) Has been cancelled
Windows CI / windows ([bun run --cwd plugins/plugin-elizacloud test bun run --cwd plugins/plugin-discord test bun run --cwd plugins/plugin-anthropic test bun run --cwd plugins/plugin-openai test bun run --cwd plugins/plugin-app-control test bun run --cwd plugins/pl… (push) Has been cancelled
Windows CI / windows ([node packages/scripts/run-turbo.mjs run build --filter=@elizaos/core --filter=@elizaos/shared --filter=@elizaos/agent --concurrency=4 node packages/scripts/run-bash-linux-only.mjs scripts/verify-riscv64-buildpaths.sh node packages/scripts/run… (push) Has been cancelled
Windows CI / windows ([node packages/scripts/run-turbo.mjs run typecheck --filter=@elizaos/core --filter=@elizaos/shared --filter=@elizaos/cloud-shared --concurrency=4 bun run --cwd packages/core test bun run --cwd packages/shared test], core-runtime, 75) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:43:05 +08:00

159 lines
5.1 KiB
JavaScript

#!/usr/bin/env node
/** Supports app-core build, packaging, or development orchestration for link browser server mjs. */
import { execFileSync, execSync } from "node:child_process";
/**
* Post-install setup for @elizaos/plugin-browser:
*
* 1. Builds the stagehand-server if dist/index.js is missing but source exists.
*
* 2. Symlinks the installed package's `dist/server` to the workspace's
* stagehand-server source (the npm package doesn't ship the server).
*
* 3. Copies the workspace's patched process-manager.js over the npm
* package's version (adds probe/reuse, port management, removes Docker
* env defaults).
*
* Run automatically via the `postinstall` hook, or manually:
* node scripts/link-browser-server.mjs
*/
import {
copyFileSync,
existsSync,
readlinkSync,
symlinkSync,
unlinkSync,
} from "node:fs";
import { createRequire } from "node:module";
import { dirname, join } from "node:path";
import { fileURLToPath } from "node:url";
import { resolveRepoRootFromImportMeta } from "./lib/repo-root.mjs";
const __dirname = dirname(fileURLToPath(import.meta.url));
const repoRoot = resolveRepoRootFromImportMeta(import.meta.url);
// ── Resolve plugin-browser package ───────────────────────────────────────────
let pluginRoot;
try {
const req = createRequire(join(repoRoot, "package.json"));
const pkgJson = req.resolve("@elizaos/plugin-browser/package.json");
pluginRoot = dirname(pkgJson);
} catch {
console.log(
"[link-browser-server] @elizaos/plugin-browser not installed — skipping",
);
process.exit(0);
}
// ── 1. Build stagehand-server if needed ─────────────────────────────────────
const stagehandDir = join(
repoRoot,
"plugins",
"plugin-browser",
"stagehand-server",
);
const stagehandIndex = join(stagehandDir, "dist", "index.js");
const stagehandSrc = join(stagehandDir, "src", "index.ts");
if (!existsSync(stagehandIndex) && existsSync(stagehandSrc)) {
console.log(
"[link-browser-server] Stagehand server not built — building now...",
);
try {
// Install deps if node_modules is missing, then compile TypeScript
if (!existsSync(join(stagehandDir, "node_modules"))) {
execSync("bun install --ignore-scripts", {
cwd: stagehandDir,
stdio: "inherit",
});
}
// Resolve tsc: prefer local node_modules/.bin, then bunx
const localTsc = join(stagehandDir, "node_modules", ".bin", "tsc");
if (existsSync(localTsc)) {
execFileSync(localTsc, [], { cwd: stagehandDir, stdio: "inherit" });
} else {
execFileSync("bunx", ["tsc"], {
cwd: stagehandDir,
stdio: "inherit",
});
}
console.log("[link-browser-server] Stagehand server built successfully");
} catch (err) {
console.error(
`[link-browser-server] Failed to build stagehand-server: ${err.message ?? err}`,
);
}
}
// ── 2. Symlink stagehand-server ──────────────────────────────────────────────
if (existsSync(stagehandIndex)) {
const serverLink = join(pluginRoot, "dist", "server");
let needsLink = true;
if (existsSync(serverLink)) {
try {
const target = readlinkSync(serverLink);
if (target === stagehandDir) {
console.log("[link-browser-server] Symlink already up to date");
needsLink = false;
} else {
// Stale symlink — remove and recreate
unlinkSync(serverLink);
}
} catch {
// Not a symlink (real directory) — leave it alone
console.log(
"[link-browser-server] dist/server already exists as a directory — skipping symlink",
);
needsLink = false;
}
}
if (needsLink) {
try {
symlinkSync(stagehandDir, serverLink, "dir");
console.log(
`[link-browser-server] Linked: ${serverLink} -> ${stagehandDir}`,
);
} catch (err) {
console.error(`[link-browser-server] Failed to create symlink: ${err}`);
}
}
} else {
console.log(
`[link-browser-server] Stagehand server not found at ${stagehandDir} — skipping symlink`,
);
}
// ── 3. Copy patched process-manager.js ───────────────────────────────────────
// The workspace has a fixed process-manager that adds port probing/reuse,
// removes Docker env defaults, and handles EADDRINUSE properly.
const patchedPm = join(
repoRoot,
"plugins",
"plugin-browser",
"typescript",
"src",
"services",
"process-manager.patched.js",
);
const targetPm = join(pluginRoot, "dist", "services", "process-manager.js");
if (existsSync(patchedPm) && existsSync(targetPm)) {
try {
copyFileSync(patchedPm, targetPm);
console.log("[link-browser-server] Copied patched process-manager.js");
} catch (err) {
console.error(
`[link-browser-server] Failed to copy process-manager.js: ${err}`,
);
}
} else {
console.log(
"[link-browser-server] No patched process-manager.js found — skipping",
);
}