refactor(core): migrate to Bun and converge acquisition policies and Agent boundaries

This commit is contained in:
root committed 2026-10-13 14:37:03 +08:00
1 parent 3f1c6d02f6
commit 27c0f27434
268 files changed
+7468 -7852

No files matched your search

+2 -2
View File
@@ -9,9 +9,9 @@ services:
ports:
- "127.0.0.1:49377:9377"
mocknexus:
image: denoland/deno:2.9.7
image: oven/bun:1.4.3
working_dir: /repo
command: ["run", "--no-config", "--no-lock", "-A", "scripts/browser-verify/mock-site.ts"]
command: ["run", "scripts/browser-verify/mock-site.ts"]
volumes:
# 相对路径按项目目录(第一个 -f 文件所在的仓库根)解析
- ./:/repo:ro
+3 -3
View File
@@ -4,7 +4,7 @@
* 只输出布尔值与个数:不截图、不输出页面内容与 Cookie 值;对真实站点只有一次导航。
* 用法(只读数据库;camofox 需带 umt-cookies 插件,见 docs/runbook/browser.md §9):
* CAMOFOX_URL=http://127.0.0.1:49391 CAMOFOX_ACCESS_KEY=... DATABASE_URL=postgres://... SECRET_MASTER_KEY=... \
* deno run -A scripts/browser-verify/cookie-real.ts <site key>
* bun scripts/browser-verify/cookie-real.ts <site key>
* 密钥只从环境变量读,不写进文件。
*/
import {
@@ -20,11 +20,11 @@ import { createSecretStore } from "../../apps/server/src/modules/auth-settings/p
import { readAccountCookie } from "../../apps/server/src/modules/sources-identity/service/credentials.ts";
const env = (k: string) => {
const v = Deno.env.get(k);
const v = process.env[k];
if (!v) throw new Error(`缺少环境变量 ${k}`);
return v;
};
const siteKey = Deno.args[0] ?? "hhanclub";
const siteKey = process.argv.slice(2)[0] ?? "hhanclub";
const db = createDb({ connectionString: env("DATABASE_URL"), max: 2 });
const secrets = createSecretStore({ db, masterKey: env("SECRET_MASTER_KEY") });
const quiet = { info() {}, warn() {}, error() {}, debug() {} } as never;
+1 -1
View File
@@ -11,7 +11,7 @@ export CAMOFOX_BROWSER_IDLE_TIMEOUT_MS=${CAMOFOX_BROWSER_IDLE_TIMEOUT_MS:-30000}
export VERIFY_PG=postgres://umt:[email protected]:55447/umt
export OUT_DIR=${OUT_DIR:-$(pwd)/.browser-verify-out}
C="docker compose -p umtbr -f docker-compose.yml -f scripts/browser-verify/compose.yml"
V="deno run -A scripts/browser-verify/verify.ts"
V="bun scripts/browser-verify/verify.ts"
wait_healthy() {
for _ in $(seq 1 60); do
[ "$(docker inspect -f '{{.State.Health.Status}}' umtbr-camofox-1 2>/dev/null)" = healthy ] && return 0
+3 -3
View File
@@ -34,7 +34,7 @@ import { AUDIENCES_FIXTURE_RELEASES } from "../../packages/testkit/src/sites/nex
type Loose = any;
const env = (k: string, d?: string) => {
const v = Deno.env.get(k) ?? d;
const v = process.env[k] ?? d;
if (v === undefined) throw new Error(`缺少环境变量 ${k}`);
return v;
};
@@ -50,7 +50,7 @@ const EXPECTED_VERSION = env("VERIFY_CAMOFOX_VERSION", "1.18.0");
// SIGKILL 不执行 profile 落盘;新登录应明确识别为需登录,不能把它当作已恢复。
const KILL_LOGIN_REQUIRED = env("VERIFY_KILL_LOGIN_REQUIRED", "true") === "true";
const SCHEMA = "brverify";
const phase = Deno.args[0] ?? "a";
const phase = process.argv.slice(2)[0] ?? "a";
await mkdir(OUT, { recursive: true });
const results: Loose[] = [];
@@ -621,4 +621,4 @@ try {
await db.destroy();
await admin.destroy();
}
Deno.exit(results.length > 0 && results.every((r) => r.pass === true) ? 0 : 1);
process.exit(results.length > 0 && results.every((r) => r.pass === true) ? 0 : 1);
+5 -5
View File
@@ -2,7 +2,7 @@
* VIS-1 真机核验:对真实 camofox 打开 https://example.com/,截图 → 缩放成交给模型的图 → 在图上取链接坐标 →
* 按服务端同一套换算(coordinateSpace / screenToPage)点回页面 → 核对跳转。记录视口 / DPR / 截图尺寸。
* 用法(只读用现有容器,不改部署):
* CAMOFOX_URL=http://<camofox 容器 IP>:9377 CAMOFOX_ACCESS_KEY=... deno run -A scripts/browser-verify/vision-real.ts [out-dir]
* CAMOFOX_URL=http://<camofox 容器 IP>:9377 CAMOFOX_ACCESS_KEY=... bun scripts/browser-verify/vision-real.ts [out-dir]
* 访问密钥只从环境变量读,不写进文件。
*/
import { mkdir, writeFile } from "node:fs/promises";
@@ -11,9 +11,9 @@ import { createCamofoxBrowserProvider, imageDimensions, prepareImage, staticBrow
import type { NavigationBudget } from "@umt/contracts";
import { coordinateSpace, screenToPage } from "../../apps/server/src/modules/browser/service.ts";
const baseUrl = Deno.env.get("CAMOFOX_URL") ?? "http://camofox:9377";
const key = Deno.env.get("CAMOFOX_ACCESS_KEY") ?? "";
const out = Deno.args[0] ?? ".browser-verify-out/vision";
const baseUrl = process.env.CAMOFOX_URL ?? "http://camofox:9377";
const key = process.env.CAMOFOX_ACCESS_KEY ?? "";
const out = process.argv.slice(2)[0] ?? ".browser-verify-out/vision";
const PROVIDER = "00000000-0000-4000-8000-00000000f15a";
const budget: NavigationBudget = {
domainAllowlist: ["example.com", "iana.org"],
@@ -77,4 +77,4 @@ try {
await p.closeSession(opened.session.id).catch(() => {});
}
console.log(JSON.stringify(report, null, 2));
if (!report.pass) Deno.exit(1);
if (!report.pass) process.exit(1);