惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google DeepMind News
Google DeepMind News
F
Fortinet All Blogs
阮一峰的网络日志
阮一峰的网络日志
Apple Machine Learning Research
Apple Machine Learning Research
爱范儿
爱范儿
WordPress大学
WordPress大学
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
J
Java Code Geeks
罗磊的独立博客
S
SegmentFault 最新的问题
V
V2EX
V
Visual Studio Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
美团技术团队
博客园 - 三生石上(FineUI控件)
Stack Overflow Blog
Stack Overflow Blog
Y
Y Combinator Blog
MyScale Blog
MyScale Blog
D
Docker
Google DeepMind News
Google DeepMind News
Blog — PlanetScale
Blog — PlanetScale
M
Microsoft Research Blog - Microsoft Research
Martin Fowler
Martin Fowler
S
Secure Thoughts
B
Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Recent Announcements
Recent Announcements
MongoDB | Blog
MongoDB | Blog
C
Cisco Blogs
C
CERT Recently Published Vulnerability Notes
T
True Tiger Recordings
GbyAI
GbyAI
P
Proofpoint News Feed
P
Privacy International News Feed
Jina AI
Jina AI
The Cloudflare Blog
I
Intezer
AWS News Blog
AWS News Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
S
Security Archives - TechRepublic
NISL@THU
NISL@THU
The Register - Security
The Register - Security
Recent Commits to openclaw:main
Recent Commits to openclaw:main
P
Palo Alto Networks Blog
S
Schneier on Security
L
LINUX DO - 热门话题
C
CXSECURITY Database RSS Feed - CXSecurity.com
Security Latest
Security Latest
C
Cybersecurity and Infrastructure Security Agency CISA

Recent Commits to openclaw:main

test(google): narrow web search fake timers · openclaw/openclaw@fe7d13c fix(installer): extract portable Node with ZipFile · openclaw/openclaw@ffa6cd8 fix(gateway): defer provider auth prewarm after startup (#85369) · openclaw/openclaw@69255f8 fix(talk): stabilize realtime voice consults · openclaw/openclaw@683ad75 test(qa): tolerate slow gateway rpc startup · openclaw/openclaw@29118a0 chore(diagnostics): refresh plugin sdk baseline · openclaw/openclaw@ab684f5 fix(diagnostics): surface async queue drops fix(diagnostics): bound diagnostic buffers · openclaw/openclaw@bdcaac0 fix(installer): copy portable Node into place · openclaw/openclaw@c21ca88 fix(cli): recover replaced device approvals (#85342) · openclaw/openclaw@6ea907c test(release): align prerelease validation · openclaw/openclaw@0def3e2 fix(installer): install portable Node directory atomically · openclaw/openclaw@2890b1a fix(runtime-llm): avoid duplicate provider prefix in allowlist diagno… · openclaw/openclaw@937a756 fix(gateway): include openclaw bin in service PATH (#84475) · openclaw/openclaw@66d1d13 fix(gateway): handle concurrent launchd bootstrap restart race (#84722) · openclaw/openclaw@ba86716 feat: support pi and opencode autoreview engines · openclaw/openclaw@31a189d ci(package): gate acceptance on package integrity · openclaw/openclaw@5275929 ci(release): bypass pnpm for tsdown package build · openclaw/openclaw@fea89cd ci(release): harden docker package build · openclaw/openclaw@7b1fbe1 test(release): align prerelease validation baselines · openclaw/openclaw@04ebdc6 fix(codex): skip native web search transcript mirroring (#85346) · openclaw/openclaw@c3531fc fix(gateway): harden launchd reload handoff race recovery (#84641) · openclaw/openclaw@fc7a531 fix: honor per-model provider transport overrides (#80488) fix(skills): type watcher mock calls in dedupe regression tests · openclaw/openclaw@bb73f0a fix(skills): document watcher edge cases, add teardown/rebuild tests,… · openclaw/openclaw@19ff77e fix(skills): dedupe shared-directory watchers across agent workspaces… · openclaw/openclaw@3e94290 fix(infra): allow macos browser open over ssh env (#85340) · openclaw/openclaw@47d66fe fix(update): preserve package service state during cutover (#83026) · openclaw/openclaw@a15797a fix(gateway): broadcast agent-run error payloads (#85355) · openclaw/openclaw@07e61fc test(e2e): avoid synthetic channel config in plugin smoke fix(cli): suppress systemd hints for live gateway (#85336) · openclaw/openclaw@a00c583 fix(cli): honor agent for model auth logout (#85326) · openclaw/openclaw@fc47c1f fix(gateway): eager-load lifecycle runtime to survive in-place upgrad… · openclaw/openclaw@4a91385 fix(doctor): point codex asset warning at migrate plan (#85324) fix(update): harden managed handoff cwd (#83875) · openclaw/openclaw@1bafc23 docs(release): prepare 2026.5.21 notes ci(crabbox): harden docker hydration refactor(crabbox): parse provider list from binary help instead of ha… test(plugins): add kitchen sink rpc docker lane · openclaw/openclaw@6f6da5f test(plugins): run kitchen sink rpc lane without tsx test(plugins): keep rpc source walk on source call gateway test(qa-lab): add bus tool trace scenario · openclaw/openclaw@2b39613 fix(cron): classify network retry errors (#85344) fix(installer): bootstrap portable Windows Node · openclaw/openclaw@3551e98 fix(ui): move chat session search into picker (#85303) · openclaw/openclaw@1fdc73a test: update shrinkwrap packaging expectations · openclaw/openclaw@a1b05aa fix: opt codex out of bundled runtime deps · openclaw/openclaw@fcecbd8 fix: publish explicit plugin bundled dependencies · openclaw/openclaw@976da39 fix: include plugin shrinkwraps in dependency reports · openclaw/openclaw@82f69a2 fix: honor overrides in npm shrinkwrap generation · openclaw/openclaw@0d28040
修复(qa-lab): 保持bootstrap令牌私有 · openclaw/openclaw@d3a7348
vincentkoc · 2026-05-17 · via Recent Commits to openclaw:main

@@ -301,8 +301,7 @@ describe("qa-lab server", () => {

301301

port: 0,

302302

outputPath,

303303

repoRoot,

304-

controlUiUrl: "http://127.0.0.1:18789/",

305-

controlUiToken: "qa-token",

304+

controlUiUrl: "http://127.0.0.1:18789/?token=qa-token&panel=chat#token=fragment-token",

306305

embeddedGateway: "disabled",

307306

});

308307

cleanups.push(async () => {

@@ -321,15 +320,22 @@ describe("qa-lab server", () => {

321320

};

322321

expect(bootstrap.defaults.conversationId).toBe("qa-operator");

323322

expect(bootstrap.defaults.senderId).toBe("qa-operator");

324-

expect(bootstrap.controlUiUrl).toBe("http://127.0.0.1:18789/");

325-

expect(bootstrap.controlUiEmbeddedUrl).toBe("http://127.0.0.1:18789/#token=qa-token");

323+

expect(bootstrap.controlUiUrl).toBe("http://127.0.0.1:18789/?panel=chat");

324+

expect(bootstrap.controlUiEmbeddedUrl).toBe("http://127.0.0.1:18789/?panel=chat");

326325

expect(bootstrap.kickoffTask).toContain("Lobster Invaders");

327326

expect(bootstrap.scenarios.length).toBeGreaterThanOrEqual(10);

328327

expect(bootstrap.scenarios.map((scenario) => scenario.id)).toContain("dm-chat-baseline");

329328

expect(bootstrap.runner.status).toBe("idle");

330329

expect(bootstrap.runner.selection.providerMode).toBe("live-frontier");

331330

expect(bootstrap.runner.selection.scenarioIds).toHaveLength(bootstrap.scenarios.length);

332331332+

const startupStatus = (await (

333+

await fetchWithRetry(`${lab.baseUrl}/api/capture/startup-status`)

334+

).json()) as {

335+

status: { gateway: { url: string } };

336+

};

337+

expect(startupStatus.status.gateway.url).toBe("http://127.0.0.1:18789/?panel=chat");

338+333339

const messageResponse = await fetch(`${lab.baseUrl}/api/inbound/message`, {

334340

method: "POST",

335341

headers: {

@@ -453,7 +459,9 @@ describe("qa-lab server", () => {

453459

});

454460455461

it("proxies control-ui paths through /control-ui", async () => {

462+

const authorizations: Array<string | undefined> = [];

456463

const upstream = createServer((req, res) => {

464+

authorizations.push(req.headers.authorization);

457465

if ((req.url ?? "/") === "/healthz") {

458466

res.writeHead(200, { "content-type": "application/json" });

459467

res.end(JSON.stringify({ ok: true, status: "live" }));

@@ -488,7 +496,7 @@ describe("qa-lab server", () => {

488496

advertiseHost: "127.0.0.1",

489497

advertisePort: 43124,

490498

controlUiProxyTarget: `http://127.0.0.1:${address.port}/`,

491-

controlUiToken: "proxy-token",

499+

controlUiProxyToken: "proxy-token",

492500

});

493501

cleanups.push(async () => {

494502

await lab.stop();

@@ -499,9 +507,7 @@ describe("qa-lab server", () => {

499507

controlUiEmbeddedUrl: string | null;

500508

};

501509

expect(bootstrap.controlUiUrl).toBe("http://127.0.0.1:43124/control-ui/");

502-

expect(bootstrap.controlUiEmbeddedUrl).toBe(

503-

"http://127.0.0.1:43124/control-ui/#token=proxy-token",

504-

);

510+

expect(bootstrap.controlUiEmbeddedUrl).toBe("http://127.0.0.1:43124/control-ui/");

505511506512

const healthResponse = await fetchWithRetry(`${lab.listenUrl}/control-ui/healthz`);

507513

expect(healthResponse.status).toBe(200);

@@ -512,6 +518,7 @@ describe("qa-lab server", () => {

512518

expect(rootResponse.headers.get("x-frame-options")).toBeNull();

513519

expect(rootResponse.headers.get("content-security-policy")).toContain("frame-ancestors 'self'");

514520

expect(await rootResponse.text()).toContain("Control UI");

521+

expect(authorizations).toEqual(["Bearer proxy-token", "Bearer proxy-token"]);

515522

});

516523517524

it("serves the built QA UI bundle when available", async () => {

@@ -742,14 +749,13 @@ describe("qa-lab server", () => {

742749

],

743750

});

744751

lab.setControlUi({

745-

controlUiUrl: "http://127.0.0.1:18789/",

746-

controlUiToken: "late-token",

752+

controlUiUrl: "http://127.0.0.1:18789/?password=late-password#token=late-token",

747753

});

748754749755

const bootstrap = (await (await fetchWithRetry(`${lab.baseUrl}/api/bootstrap`)).json()) as {

750756

controlUiEmbeddedUrl: string | null;

751757

};

752-

expect(bootstrap.controlUiEmbeddedUrl).toBe("http://127.0.0.1:18789/#token=late-token");

758+

expect(bootstrap.controlUiEmbeddedUrl).toBe("http://127.0.0.1:18789/");

753759754760

const outcomes = (await (await fetchWithRetry(`${lab.baseUrl}/api/outcomes`)).json()) as {

755761

run: {