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

推荐订阅源

T
Tor Project blog
H
Hacker News: Front Page
Cyberwarzone
Cyberwarzone
S
Security Archives - TechRepublic
Schneier on Security
Schneier on Security
N
News and Events Feed by Topic
T
Threat Research - Cisco Blogs
O
OpenAI News
T
Tenable Blog
Recorded Future
Recorded Future
Spread Privacy
Spread Privacy
Google Online Security Blog
Google Online Security Blog
小众软件
小众软件
D
Docker
博客园 - 【当耐特】
Know Your Adversary
Know Your Adversary
爱范儿
爱范儿
N
News | PayPal Newsroom
T
Threatpost
G
GRAHAM CLULEY
P
Privacy & Cybersecurity Law Blog
Scott Helme
Scott Helme
N
News and Events Feed by Topic
L
LINUX DO - 热门话题
Cisco Talos Blog
Cisco Talos Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
I
Intezer
T
Tailwind CSS Blog
美团技术团队
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
C
Cyber Attacks, Cyber Crime and Cyber Security
博客园 - 叶小钗
IT之家
IT之家
Jina AI
Jina AI
Hugging Face - Blog
Hugging Face - Blog
The Cloudflare Blog
月光博客
月光博客
Hacker News: Ask HN
Hacker News: Ask HN
有赞技术团队
有赞技术团队
酷 壳 – CoolShell
酷 壳 – CoolShell
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
S
Security @ Cisco Blogs
博客园 - 司徒正美
P
Proofpoint News Feed
博客园 - Franky
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
量子位
Apple Machine Learning Research
Apple Machine Learning Research
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
V
V2EX

Recent Commits to openclaw:main

test(release): harden plugin prerelease checks · openclaw/openclaw@578e73f fix(telegram): serialize topic dispatch replies (#85709) · openclaw/openclaw@62b51a6 fix(test): fail live gateway false greens · openclaw/openclaw@295339d fix(test): build startup artifacts for smoke scripts · openclaw/openclaw@3838e45 test(telegram): wait for startup probe slots · openclaw/openclaw@0a8af67 test(codex): match sandbox exec-server yolo policy · openclaw/openclaw@783290f fix(test): fail missing explicit test targets · openclaw/openclaw@9ff4d36 test(codex): avoid full sandbox exec-server turn run · openclaw/openclaw@558c1bc fix(ci): keep Crabbox pnpm hydration shims writable · openclaw/openclaw@bca1ac0 fix(release): harden Windows release-check npm probes · openclaw/openclaw@75ac11a fix(docker): parse peer-suffixed lockfile packages · openclaw/openclaw@cf46f2e fix(docker): seed lockfile packages before prune · openclaw/openclaw@f799da0 fix(docker): seed lockfile snapshot tarballs before prune · openclaw/openclaw@2cd93f1 test(codex): type thread start mock params · openclaw/openclaw@a4ef3a2 test(codex): avoid full sandbox run in thread-start test · openclaw/openclaw@11bf642 fix(plugins): harden Windows npm package staging · openclaw/openclaw@abdd8a4 test(codex): complete sandbox turn inline · openclaw/openclaw@c14a0c6 fix(release): harden Windows npm shim verification · openclaw/openclaw@a56f452 test(release): type metadata snapshot mock params · openclaw/openclaw@f878959 test(release): finish plugin metadata prerelease sync fix(update): avoid broad tag fetches for dev updates (#84737) · openclaw/openclaw@501f2cb Fix iMessage slash command acknowledgements (#82642) · openclaw/openclaw@4d15020 test(release): align prerelease contracts · openclaw/openclaw@02f53e6 test(release): align plugin prerelease checks fix(docker): copy prepare hook before install · openclaw/openclaw@0ba6b23 fix: share signed thinking replay policy fix: preserve signed thinking tool ids · openclaw/openclaw@906476a fix(memory): strip invalid thinking signatures for signed-thinking pr… · openclaw/openclaw@41329c0 fix(scripts): harden Windows install checks · openclaw/openclaw@d21abb8 fix(release): keep private QA markers out of bundled alias code · openclaw/openclaw@b972ac1 fix(discord): harden realtime voice wake joins · openclaw/openclaw@fdfcb07 test(parallels): harden release VM smoke isolation · openclaw/openclaw@3839b48 fix: harden session allowlist glob matching (#85849) (thanks @SebTardif) · openclaw/openclaw@88aa713 fix: keep blank agent allowlists fail closed (#85849) · openclaw/openclaw@0f83c93 fix(security): replace regex wildcard matching with linear-time glob … fix(telegram): normalize legacy action targets · openclaw/openclaw@32631eb fix: notify chat when main session recovery fails · openclaw/openclaw@cf61b87 docs(changelog): note restart recovery notice · openclaw/openclaw@ae9308b fix(minimax): normalize OAuth token expiry to absolute millisecond ti… fix(memory-wiki): show vault totals in palace summary (#85824) Isolate boot-md startup sessions (#85919) · openclaw/openclaw@8deb1ef Guard OpenAI image compression for PNG outputs (#85776) · openclaw/openclaw@d075111 fix(agents): clamp proxy completions caps after payload shaping (#85889) · openclaw/openclaw@1d1a7c2 fix: gate discord realtime voice by wake name (#85915) · openclaw/openclaw@17dcdea fix(update): ignore inherited launchd xpc for respawn (#85789) · openclaw/openclaw@c074d09 fix: allow symlinked workspace write parents (#85818) · openclaw/openclaw@6b337ff fix(agents): preserve latest thinking replay signatures (#85579) · openclaw/openclaw@af76510 fix(plugins): return plugin gateway method results (#85785) · openclaw/openclaw@e6d5b7d fix(gateway): hide duplicate ACP chat replies (#85775) · openclaw/openclaw@068b9ac fix(update): ignore restart script spawn failures (#85761) · openclaw/openclaw@566d8cd
测试(发布): 稳定插件预发布检查 · openclaw/openclaw@3679151
steipete · 2026-05-24 · via Recent Commits to openclaw:main

@@ -146,6 +146,7 @@ function sendMessageOptionsAt(index: number): Record<string, unknown> {

146146

}

147147148148

async function waitForCondition(check: () => boolean, message: string, timeoutMs = 5_000) {

149+

vi.useRealTimers();

149150

const deadline = Date.now() + timeoutMs;

150151

while (Date.now() < deadline) {

151152

if (check()) {

@@ -449,25 +450,32 @@ describe("telegramPlugin gateway startup", () => {

449450

const first = startTelegramAccount("alpha");

450451

const second = startTelegramAccount("bravo");

451452

const third = startTelegramAccount("charlie");

453+

const tasks = [first.task, second.task, third.task];

454+

try {

455+

await waitForCondition(

456+

() => probeTelegram.mock.calls.length === 2,

457+

"expected two startup probes to begin",

458+

);

459+

expect(maxActiveProbes).toBe(2);

460+

expect(releaseProbe).toHaveLength(2);

452461453-

await waitForCondition(

454-

() => probeTelegram.mock.calls.length === 2,

455-

"expected two startup probes to begin",

456-

);

457-

expect(maxActiveProbes).toBe(2);

458-

expect(releaseProbe).toHaveLength(2);

459-460-

releaseProbe.shift()?.();

461-

await waitForCondition(

462-

() => probeTelegram.mock.calls.length === 3,

463-

"expected queued startup probe to begin after a slot opens",

464-

);

465-

expect(maxActiveProbes).toBe(2);

462+

releaseProbe.shift()?.();

463+

await waitForCondition(

464+

() => probeTelegram.mock.calls.length === 3,

465+

"expected queued startup probe to begin after a slot opens",

466+

);

467+

expect(maxActiveProbes).toBe(2);

466468467-

for (const release of releaseProbe.splice(0)) {

468-

release();

469+

for (const release of releaseProbe.splice(0)) {

470+

release();

471+

}

472+

await Promise.all(tasks);

473+

} finally {

474+

for (const release of releaseProbe.splice(0)) {

475+

release();

476+

}

477+

await Promise.allSettled(tasks);

469478

}

470-

await Promise.all([first.task, second.task, third.task]);

471479

expect(monitorTelegramProvider).toHaveBeenCalledTimes(3);

472480

});

473481

@@ -495,17 +503,25 @@ describe("telegramPlugin gateway startup", () => {

495503

const second = startTelegramAccount("bravo");

496504

const abortQueued = new AbortController();

497505

const queued = startTelegramAccount("charlie", {}, abortQueued.signal);

506+

const tasks = [first.task, second.task, queued.task];

507+

try {

508+

await waitForCondition(

509+

() => probeTelegram.mock.calls.length === 2,

510+

"expected startup probe slots to fill",

511+

);

512+

abortQueued.abort();

498513499-

await waitForCondition(

500-

() => probeTelegram.mock.calls.length === 2,

501-

"expected startup probe slots to fill",

502-

);

503-

abortQueued.abort();

504-505-

for (const release of releaseProbe.splice(0)) {

506-

release();

514+

for (const release of releaseProbe.splice(0)) {

515+

release();

516+

}

517+

await Promise.all(tasks);

518+

} finally {

519+

abortQueued.abort();

520+

for (const release of releaseProbe.splice(0)) {

521+

release();

522+

}

523+

await Promise.allSettled(tasks);

507524

}

508-

await Promise.all([first.task, second.task, queued.task]);

509525

expect(probeTelegram).toHaveBeenCalledTimes(2);

510526

expect(monitorTelegramProvider).toHaveBeenCalledTimes(2);

511527

});