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

推荐订阅源

N
News and Events Feed by Topic
Malwarebytes
Malwarebytes
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
Cybersecurity and Infrastructure Security Agency CISA
F
Future of Privacy Forum
C
Cisco Blogs
T
The Exploit Database - CXSecurity.com
A
Arctic Wolf
S
Securelist
K
Kaspersky official blog
S
Schneier on Security
T
ThreatConnect
T
Tenable Blog
Spread Privacy
Spread Privacy
T
True Tiger Recordings
AWS News Blog
AWS News Blog
F
Fox-IT International blog
量子位
T
Threatpost
V
Vulnerabilities – Threatpost
C
CERT Recently Published Vulnerability Notes
Cisco Talos Blog
Cisco Talos Blog
GbyAI
GbyAI
宝玉的分享
宝玉的分享
腾讯CDC
G
Google Developers Blog
aimingoo的专栏
aimingoo的专栏
Cyberwarzone
Cyberwarzone
有赞技术团队
有赞技术团队
S
SegmentFault 最新的问题
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
Visual Studio Blog
U
Unit 42
雷峰网
雷峰网
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Simon Willison's Weblog
Simon Willison's Weblog
O
OpenAI News
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
The GitHub Blog
The GitHub Blog
The Register - Security
The Register - Security
MyScale Blog
MyScale Blog
小众软件
小众软件
A
About on SuperTechFans
Last Week in AI
Last Week in AI
Y
Y Combinator Blog
博客园 - 三生石上(FineUI控件)
美团技术团队
Google Online Security Blog
Google Online Security Blog
P
Proofpoint News Feed
MongoDB | Blog
MongoDB | Blog

Recent Commits to openclaw:main

fix(providers): stream ordinary tool-like prose promptly fix(gateway): gate talk secret bootstrap handoff (#85690) · openclaw/openclaw@c791e42 fix: suppress async media incomplete-turn errors (#85933) · openclaw/openclaw@35dcd42 migrate auth credentials · openclaw/openclaw@f036bac fix migrate auth lint · openclaw/openclaw@50e6cb0 fix migrate supported auth imports · openclaw/openclaw@44bb2be fix migrate auth opt-out precedence · openclaw/openclaw@2016a51 honor migrate auth opt-out in plan · openclaw/openclaw@17edec7 address migrate auth review comments · openclaw/openclaw@0a98c2d fix ci blockers for migrate auth docs: add migrate auth changelog (#85667) · openclaw/openclaw@f7fcbdb fix(scripts): avoid duplicate install smoke ui build · openclaw/openclaw@b1b2841 fix(telegram): preserve inbound text entities (#83873) · openclaw/openclaw@b552919 chore: ignore Python bytecode caches · openclaw/openclaw@b6b2755 fix: make autoreview progress visible · openclaw/openclaw@236edb2 ci(release): fix plugin prerelease extension batch invocation test(telegram): provide topic cache store in message context harness · openclaw/openclaw@ff1fde1 test(agents): complete provider runtime test mocks · openclaw/openclaw@be8cd12 test(telegram): type topic cache harness store · openclaw/openclaw@84ab206 test(agents): sync provider runtime mocks · openclaw/openclaw@a289dd9 refactor: keep plain text tool-call promotion private (#86374) · openclaw/openclaw@c3ab2de fix(discord): suppress self-reply prompt echoes (#86238) docs: clarify config migration policy · openclaw/openclaw@c44367f fix(perf): fail startup bench on early gateway exit · openclaw/openclaw@a8fc28c fix: prevent plain text tool call leaks (#86222) · openclaw/openclaw@cd62780 fix: handle npm min-release-age in installers · openclaw/openclaw@316d97c fix(scripts): include ui:build in build-all full and ciArtifacts prof… · openclaw/openclaw@6704d0a fix(e2e): sample Windows kitchen sink gateway RSS · openclaw/openclaw@73189e3 fix(cron): respect isolated target and error on missing remove id (#8… · openclaw/openclaw@6709f4e fix(pi-embedded-runner): propagate trigger-derived priority to the gl… · openclaw/openclaw@0580f57 fix(cli): suppress self-update version warnings · openclaw/openclaw@e2bd20f fix: preserve webchat source reply details · openclaw/openclaw@aa50c51 docs: replace OpenClaw docs skill and add plugin permissions guide · openclaw/openclaw@0dabb70 fix(codex): preserve source reply mode for active runs (#86325) · openclaw/openclaw@b962110 fix: make compaction reinjection opt-in · openclaw/openclaw@ab910f8 fix codex usage-limit recovery copy (#86305) · openclaw/openclaw@c3c8a65 feat(ui): add ephemeral Activity tab · openclaw/openclaw@3dd0e8e fix(tests): harden native macos plugin proof · openclaw/openclaw@a5d5604 fix(commitments): serialize load-modify-save with in-process queue + … · openclaw/openclaw@d3c293d Fail Codex compaction at the Codex boundary (#85958) · openclaw/openclaw@dd47e47 fix(docker): restore config parent ownership · openclaw/openclaw@908b894 docs: clarify config default review policy (#86329) · openclaw/openclaw@3a03dd5 docs: clean changelog script entries · openclaw/openclaw@0eead19 fix(scripts): budget restart benchmark timeouts · openclaw/openclaw@5bd5509 fix: align ui vitest config assertion · openclaw/openclaw@730fd19 fix: route unit ui vitest targets narrowly · openclaw/openclaw@777402e fix: route explicit ui vitest targets narrowly · openclaw/openclaw@56a383c fix(android): harden play media permission removal fix(webchat): stabilize live transcript run state · openclaw/openclaw@119a01c fix(scripts): fail restart benchmark regressions · openclaw/openclaw@95d1b39 fix(openai): scope external codex auth to realtime fix(openai): prefer codex auth for GPT realtime · openclaw/openclaw@48c4f57 fix(openai): discover codex cli auth for provider checks · openclaw/openclaw@4656275 fix(android): keep talk mode on realtime relay · openclaw/openclaw@70614f8 test(android): add gateway connect adb probe · openclaw/openclaw@d7aa1f3 fix(android): stabilize realtime talk connection state · openclaw/openclaw@ffb02a5 test(android): add voice mode adb e2e harness · openclaw/openclaw@e52a3b3 fix(ci): stabilize deadcode and catalog checks · openclaw/openclaw@3db1508 fix(scripts): prebuild gateway cpu bench · openclaw/openclaw@ca70015 fix(e2e): harden bundled lifecycle probe on Windows · openclaw/openclaw@4798264 test(e2e): sample kitchen sink rpc peak rss · openclaw/openclaw@60c0f24 fix(scripts): remove stale deadcode allowlist entries · openclaw/openclaw@ea3bb92 fix(telegram): route polling diagnostics away from errors · openclaw/openclaw@b5c1199 fix(plugins): support linked source checkouts on Windows · openclaw/openclaw@793e300 fix(gateway): back off session tool mirrors under pressure (#84846) · openclaw/openclaw@42bdc94 fix(config): skip shell env fallback on Windows (#85739) · openclaw/openclaw@06bf302 fix(gateway): avoid duplicate session message broadcasts · openclaw/openclaw@1459044 fix: repair anchorless iMessage watch payloads · openclaw/openclaw@f37fbc9 fix(cli): route node status hints to stdout (#85780) · openclaw/openclaw@749692e fix(oc-path): support deep config edits (#86060) · openclaw/openclaw@3a72a30 fix(config): quiet benign metadata anomaly output · openclaw/openclaw@f3f4f29 fix(test): fail multi-node update regressions · openclaw/openclaw@732cf54 fix(google-vertex): support production ADC modes (#83971) · openclaw/openclaw@f09b4eb test(e2e): expose corrupt plugin deps smoke · openclaw/openclaw@fa3ff4d fix(codex): log app-server approval promotion trigger · openclaw/openclaw@d9af23f test(e2e): harden multi-node update smoke Clean up browser MCP subprocess tree (#85832) · openclaw/openclaw@8dc6b4d fix(agents): log warnings instead of swallowing subagent errors (#82943) · openclaw/openclaw@907bc03 fix(compaction): preserve partial summary on mid-chain chunk failure … · openclaw/openclaw@f0061dd fix(config): do not suppress recovery retry after failed backup resto… · openclaw/openclaw@5d174a5 chore: release 2026.5.25 fix(installer): support alpine cli installs · openclaw/openclaw@f68ed72 test(agents): keep runtime-plan provider mock current fix(scripts): launch env package scripts on Windows · openclaw/openclaw@4d4ce9e fix(agents): cache fallback provider resolution · openclaw/openclaw@3c8d101 fix(test): make import timing scripts Windows-safe · openclaw/openclaw@8ae9977 fix(telegram): transient Telegram pairing prompts (#85555) · openclaw/openclaw@8209426 fix(test): make max Vitest scripts Windows-safe · openclaw/openclaw@b681d5d fix(doctor): migrate Feishu account bot names (#86081) · openclaw/openclaw@9e8cc7e fix(scripts): prefilter conflict marker scans docs: add ClawSweeper review policy to AGENTS (#86197) · openclaw/openclaw@242e876 fix(installer): avoid before with npm release-age configs (#85491) · openclaw/openclaw@4742db6 fix(e2e): retry Windows kitchen sink probes · openclaw/openclaw@3e275a5 fix(installer): install node with apk on alpine fix(installer): detect musl linux shells · openclaw/openclaw@acfed37 perf(plugins,gateway): thread metadata snapshot + discovery through h… · openclaw/openclaw@8ccb11c fix(ui): split control ui runtime chunks · openclaw/openclaw@8bf4f7d refactor(config): extract GoogleChat schema into zod-schema.providers… · openclaw/openclaw@fe34141 fix(update): suppress internal handoff version warnings · openclaw/openclaw@6cc8244 test(e2e): select installable bundled plugins · openclaw/openclaw@0acc3e3
fix(perf): harden gateway restart bench exits · openclaw/openclaw@82bbcf6
vincentkoc · 2026-05-25 · via Recent Commits to openclaw:main

@@ -68,6 +68,15 @@ type GatewayRestartFailureCode =

6868

| "child_nonzero_exit"

6969

| "cleanup_failed";

707071+

type ChildExit = {

72+

exitCode: number | null;

73+

signal: string | null;

74+

};

75+76+

type StopChildResult = ChildExit & {

77+

exitedBeforeTeardown: boolean;

78+

};

79+7180

type RestartIteration = {

7281

cpuCoreRatio: number | null;

7382

cpuMs: number | null;

@@ -98,6 +107,7 @@ type GatewayRestartSample = {

98107

childExitCode: number | null;

99108

childSignal: string | null;

100109

events: BenchmarkEvent[];

110+

exitedBeforeTeardown: boolean;

101111

failureCode: GatewayRestartFailureCode | null;

102112

firstOutputMs: number | null;

103113

initialGatewayReadyLogLine: string | null;

@@ -869,36 +879,52 @@ function writeRestartIntent(env: NodeJS.ProcessEnv, targetPid: number, reason: s

869879

}

870880

}

871881872-

async function stopChild(child: ChildProcessWithoutNullStreams): Promise<{

873-

exitCode: number | null;

874-

signal: string | null;

875-

}> {

876-

if (child.exitCode != null || child.signalCode != null) {

877-

return { exitCode: child.exitCode, signal: child.signalCode };

882+

async function stopChild(child: ChildProcessWithoutNullStreams): Promise<StopChildResult> {

883+

const currentExit = (): ChildExit | null =>

884+

child.exitCode != null || child.signalCode != null

885+

? { exitCode: child.exitCode, signal: child.signalCode }

886+

: null;

887+888+

const existingExit = currentExit();

889+

if (existingExit != null) {

890+

return { ...existingExit, exitedBeforeTeardown: true };

878891

}

879-

const exited = new Promise<{ exitCode: number | null; signal: string | null }>((resolve) => {

880-

child.once("exit", (exitCode, signal) => resolve({ exitCode, signal }));

892+893+

let observedExit: ChildExit | null = null;

894+

const exited = new Promise<ChildExit>((resolve) => {

895+

child.once("exit", (exitCode, signal) => {

896+

observedExit = { exitCode, signal };

897+

resolve(observedExit);

898+

});

881899

});

882-

killProcessTree(child, "SIGTERM");

900+901+

await new Promise<void>((resolve) => setImmediate(resolve));

902+

const queuedExit = observedExit ?? currentExit();

903+

if (queuedExit != null) {

904+

return { ...queuedExit, exitedBeforeTeardown: true };

905+

}

906+907+

const sentTeardownSignal = killProcessTree(child, "SIGTERM");

883908

const timeout = delay(2000).then(() => {

884909

if (child.exitCode == null && child.signalCode == null) {

885910

killProcessTree(child, "SIGKILL");

886911

}

887912

return exited;

888913

});

889-

return Promise.race([exited, timeout]);

914+

const exit = await Promise.race([exited, timeout]);

915+

return { ...exit, exitedBeforeTeardown: !sentTeardownSignal };

890916

}

891917892-

function killProcessTree(child: ChildProcessWithoutNullStreams, signal: NodeJS.Signals): void {

918+

function killProcessTree(child: ChildProcessWithoutNullStreams, signal: NodeJS.Signals): boolean {

893919

if (process.platform !== "win32" && child.pid !== undefined) {

894920

try {

895921

process.kill(-child.pid, signal);

896-

return;

922+

return true;

897923

} catch {

898924

// Fall back to the direct child below.

899925

}

900926

}

901-

child.kill(signal);

927+

return child.kill(signal);

902928

}

903929904930

function readProcessRssMb(pid: number | undefined): number | null {

@@ -1197,6 +1223,15 @@ function resolveRestartDeadlineFailure(childExited: boolean): GatewayRestartFail

11971223

return childExited ? "restart_child_exited" : "restart_deadline_timeout";

11981224

}

119912251226+

function resolveSampleExitFailure(exit: StopChildResult): GatewayRestartFailureCode | null {

1227+

if (!exit.exitedBeforeTeardown) {

1228+

return null;

1229+

}

1230+

return exit.exitCode !== null && exit.exitCode !== 0

1231+

? "child_nonzero_exit"

1232+

: "restart_child_exited";

1233+

}

1234+12001235

function computeResourceSlope(iterations: RestartIteration[]): ResourceSlope {

12011236

return {

12021237

activeHandlesCountPerRestart: slope(

@@ -1528,9 +1563,7 @@ async function runGatewaySample(options: {

15281563

flushOutputLineBuffers(outputBuffers, onLine, performance.now() - sampleStartAt, {

15291564

flushPartial: true,

15301565

});

1531-

if (exit.exitCode !== null && exit.exitCode !== 0 && failureCode === null) {

1532-

failureCode = "child_nonzero_exit";

1533-

}

1566+

failureCode ??= resolveSampleExitFailure(exit);

15341567

try {

15351568

rmSync(root, { force: true, maxRetries: 3, recursive: true, retryDelay: 100 });

15361569

} catch {

@@ -1541,6 +1574,7 @@ async function runGatewaySample(options: {

15411574

childExitCode: exit.exitCode,

15421575

childSignal: exit.signal,

15431576

events,

1577+

exitedBeforeTeardown: exit.exitedBeforeTeardown,

15441578

failureCode,

15451579

firstOutputMs,

15461580

initialGatewayReadyLogLine,

@@ -1693,8 +1727,10 @@ export const testing = {

16931727

resolveRestartDeadlineFailure,

16941728

resolveEntry,

16951729

resolvePhaseDeadlineAt,

1730+

resolveSampleExitFailure,

16961731

sanitizedEnv,

16971732

shouldFailBenchmark,

1733+

stopChild,

16981734

summarizeCase,

16991735

waitForRestartProbe,

17001736

writeConfig,