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

推荐订阅源

Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
The GitHub Blog
The GitHub Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
P
Proofpoint News Feed
S
Secure Thoughts
GbyAI
GbyAI
N
News and Events Feed by Topic
Google DeepMind News
Google DeepMind News
罗磊的独立博客
博客园 - 【当耐特】
G
Google Developers Blog
A
About on SuperTechFans
IT之家
IT之家
Security Latest
Security Latest
T
Troy Hunt's Blog
李成银的技术随笔
N
News and Events Feed by Topic
V
Vulnerabilities – Threatpost
美团技术团队
博客园 - 叶小钗
B
Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
H
Hacker News: Front Page
Jina AI
Jina AI
K
Kaspersky official blog
博客园 - 三生石上(FineUI控件)
F
Future of Privacy Forum
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Microsoft Azure Blog
Microsoft Azure Blog
NISL@THU
NISL@THU
WordPress大学
WordPress大学
Cyberwarzone
Cyberwarzone
Stack Overflow Blog
Stack Overflow Blog
L
LangChain Blog
P
Palo Alto Networks Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Scott Helme
Scott Helme
The Hacker News
The Hacker News
aimingoo的专栏
aimingoo的专栏
小众软件
小众软件
S
Security @ Cisco Blogs
Martin Fowler
Martin Fowler
Google DeepMind News
Google DeepMind News
人人都是产品经理
人人都是产品经理
D
Docker
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Last Week in AI
Last Week in AI
L
Lohrmann on Cybersecurity
Stack Overflow Blog
Stack Overflow Blog
月光博客
月光博客

Recent Commits to openclaw:main

test: align full release dispatch assertion test: clean up Codex app-server run failures · openclaw/openclaw@9cef99f ci: retry release child workflow dispatch · openclaw/openclaw@ee61f79 test: isolate Codex report snapshot tests perf(gateway): reduce startup filesystem probes · openclaw/openclaw@edbd833 ci: retry GHCR docker login · openclaw/openclaw@fcb9c46 ci: harden manual checkout auth · openclaw/openclaw@d42bc0b fix(scripts): avoid Windows shell argv warnings · openclaw/openclaw@208a067 ci: fix release reachability auth · openclaw/openclaw@02b1c8c docs: note docs publishing routing · openclaw/openclaw@388b24a ci: harden release package validation · openclaw/openclaw@41f4605 ci(testbox): expose stable pnpm through corepack · openclaw/openclaw@3e14f54 ci(testbox): avoid ready raw runners after hydration failure perf(gateway): defer startup-idle runtime work · openclaw/openclaw@f1226ae ci: harden beta release validation flakes · openclaw/openclaw@391f29b test: type codex thread request mocks · openclaw/openclaw@86a0502 test: avoid codex heartbeat lifecycle timeout · openclaw/openclaw@85664f8 fix(scripts): run Windows check commands through shims · openclaw/openclaw@8a94e82 fix: aggressively prune retired model catalogs fix: harden package URL downloads (#85578) ci: retry npm Telegram release dispatch test: isolate Telegram spooled timeout from stall watchdog · openclaw/openclaw@a04566d fix(exec-approvals): add .catch() to expiry delivery fire-and-forget … fix(memory-core): avoid double bulleting promoted snippets (#85724) · openclaw/openclaw@983a3b9 fix(doctor): skip empty entries and memoize routes in plugin session … ci: avoid duplicate release-check auth headers · openclaw/openclaw@6191750 fix: prune retired model catalog entries ci: authenticate release-check reachability fetches · openclaw/openclaw@0c192e2 docs(changelog): note Telegram attachment action fix · openclaw/openclaw@c5f1344 fix(telegram): send attachment paths as media · openclaw/openclaw@fdf01db refactor(telegram): simplify action media sends · openclaw/openclaw@0540025 fix(doctor): canonicalize git checkout detection (#85735) test(ci): update plugin prerelease checkout expectation ci: persist checkout credentials for release validation test(codex): avoid searchable-tool registration flake · openclaw/openclaw@5e8c71b refactor: simplify doctor repair checks (#83753) docs(changelog): credit landed bug sweep PRs · openclaw/openclaw@24de304 perf(utils): preserve message identity in stripInlineDirectiveTagsFro… · openclaw/openclaw@bf84b30 fix(agents): add openai-responses family to non-visible turn retry gu… · openclaw/openclaw@49e9c3e fix(status): show configured cost for aws-sdk models (#85619) · openclaw/openclaw@6e289b4 fix(microsoft-foundry): DeepSeek V4 models incorrectly use openai-com… · openclaw/openclaw@ec43acb fix(skills): show empty state notice in config wizard (#85032) · openclaw/openclaw@74e65f4 test(codex): avoid forced-tool allowlist flake · openclaw/openclaw@ef7e652 fix: avoid gateway startup event-loop stalls test(codex): type forced-tool request mock · openclaw/openclaw@f6ab188 test(codex): avoid forced-tool turn flake · openclaw/openclaw@8d1ab83 test(codex): avoid startup cleanup socket flake fix(gateway): pin relative state dir at startup · openclaw/openclaw@2e5be0c fix(whatsapp): persist inbound delivery in plugin state (#85506) · openclaw/openclaw@b47bace test(codex): make sandbox cleanup proof deterministic fix(cron): route topic targets through channel plugins · openclaw/openclaw@9175491 fix(agents): simplify subagent completion handoff ci(release): isolate npm publish concurrency · openclaw/openclaw@9c26b87 ci(release): allow beta publish after npm preflight · openclaw/openclaw@0e37263 fix(release): allow large beta smoke run lists ci(release): retry child workflow polling · openclaw/openclaw@c689f71 ci(release): poll child workflows through actions api · openclaw/openclaw@e5dab55 fix(bootstrap): guard bootstrap name checks against undefined names (… · openclaw/openclaw@25fa46b fix(cli): waitForever must keep the event loop alive (#85694) · openclaw/openclaw@eca9645 fix(cli-output): ignore cumulative usage from result events in stream… · openclaw/openclaw@84229d9 fix(secrets): show irreversible warning after interactive apply confi… · openclaw/openclaw@bb52b54 fix(agents/harness): pass CLI runtime aliases through to PI in select… · openclaw/openclaw@2c3b7ea docs: add bug-sweep changelog entries fix(release): run npm shims on Windows · openclaw/openclaw@1f32a48 fix(ci): repair crabbox hydrate replay (#85706) · openclaw/openclaw@0d7d99b feat(auth): support named model login profiles fix(gateway): restore WebChat image understanding routing · openclaw/openclaw@55a0c9b fix(anthropic): migrate 1M context to GA handling fix(scripts): resolve Crabbox shims on Windows · openclaw/openclaw@5c535df test(ci): harden installer smoke coverage · openclaw/openclaw@68bcd4e fix(status): bound deep docker audit probes (#85476) · openclaw/openclaw@f7c05dc docs: expand meeting notes docs · openclaw/openclaw@a7e0fa0 fix(cli): validate tasks audit limit (#84901) · openclaw/openclaw@44d470f fix(twitch): preserve newer message handler during cleanup (#85425) · openclaw/openclaw@71ddc01 fix(ci): require live docker credentials by resource · openclaw/openclaw@1e21121 fix(diagnostics): drop snake case otel ids (#72645) · openclaw/openclaw@e0bafc5 fix(ci): clear signal and docs guard blockers (#85693) · openclaw/openclaw@3a1d4dd fix(ci): require factory auth for droid live docker · openclaw/openclaw@cc6c372 fix: honor disabled synthetic auth lookup · openclaw/openclaw@a4a1abb fix(scripts): repair live docker auth shellcheck · openclaw/openclaw@4e34ac4 fix(docker): avoid printing gateway token · openclaw/openclaw@5db773f fix(cli): keep logs follow on live gateway state · openclaw/openclaw@6e3b318 fix(e2e): prefer x64 MinGit on Windows · openclaw/openclaw@15d9134 feat: add meeting notes plugin docs: update changelog for memory artifacts (#85060) (thanks @brokema… · openclaw/openclaw@9e55383 fix(memory-lancedb): expose public memory artifacts · openclaw/openclaw@aac1abe fix(memory): preserve sidecar capability hooks · openclaw/openclaw@e6288ca fix(e2e): scrub Windows update config on PowerShell 5.1 · openclaw/openclaw@6657b49 docs: absorb documentation PR sweep · openclaw/openclaw@2c536a8 fix(agents): stabilize Linux fallback tests · openclaw/openclaw@6b04170 fix(codex): preserve native web search action metadata (#85378) · openclaw/openclaw@bcf756c test: refresh Codex prompt snapshots · openclaw/openclaw@492d656 docs: absorb hook and subagent guidance PRs fix(agents): audit tool policy blocks (#85673) · openclaw/openclaw@09dd051 ci: fix plugin npm bundled dependency install · openclaw/openclaw@d485464 feat(diagnostics): classify skill and tool usage (#80370) docs(skills): clarify control ui recording proof (#85568) · openclaw/openclaw@0b476b9 test(agents): repair main failure fixtures · openclaw/openclaw@c29967b feat(diagnostics): trace gateway secret preparation (#83019) · openclaw/openclaw@4f0c902 fix(diagnostics): harden observability exports and smokes (#85371) · openclaw/openclaw@7f05be0
fix(scripts): route check stages through managed runner · openclaw/openclaw@353d132
vincentkoc · 2026-05-24 · via Recent Commits to openclaw:main

@@ -3,6 +3,8 @@ import { buildCmdExeCommandLine } from "../windows-cmd-helpers.mjs";

3344

const FORWARDED_SIGNALS = ["SIGINT", "SIGTERM", "SIGHUP"];

55

const FORCE_KILL_DELAY_MS = 5_000;

6+

const managedChildren = new Set();

7+

const signalHandlers = new Map();

6879

/**

810

* @param {NodeJS.Signals} signal

@@ -80,37 +82,83 @@ export async function runManagedCommand({

8082

comSpec,

8183

});

8284

const child = spawn(spawnSpec.command, spawnSpec.args, spawnSpec.options);

83-84-

let receivedSignal = null;

85-

let forceKillTimer = null;

86-87-

const forwardSignal = (signal) => {

88-

receivedSignal ??= signal;

89-

terminateManagedChild(child, signal);

90-

forceKillTimer ??= setTimeout(() => {

91-

terminateManagedChild(child, "SIGKILL");

92-

}, FORCE_KILL_DELAY_MS);

85+

const managedChild = {

86+

child,

87+

forceKillTimer: null,

88+

receivedSignal: null,

9389

};

94-95-

for (const signal of FORWARDED_SIGNALS) {

96-

process.once(signal, forwardSignal);

97-

}

90+

addManagedChild(managedChild);

9891

onReady?.(child);

999210093

try {

10194

return await new Promise((resolve, reject) => {

10295

child.once("error", reject);

10396

child.once("close", (status) => {

104-

if (forceKillTimer) {

105-

clearTimeout(forceKillTimer);

97+

if (managedChild.forceKillTimer) {

98+

clearTimeout(managedChild.forceKillTimer);

10699

}

107-

resolve(receivedSignal ? signalExitCode(receivedSignal) : (status ?? 1));

100+

resolve(managedChild.receivedSignal ? signalExitCode(managedChild.receivedSignal) : (status ?? 1));

108101

});

109102

});

110103

} finally {

111-

for (const signal of FORWARDED_SIGNALS) {

112-

process.off(signal, forwardSignal);

104+

removeManagedChild(managedChild);

105+

}

106+

}

107+108+

/**

109+

* @param {{

110+

* child: import("node:child_process").ChildProcess;

111+

* forceKillTimer: NodeJS.Timeout | null;

112+

* receivedSignal: NodeJS.Signals | null;

113+

* }} managedChild

114+

*/

115+

function addManagedChild(managedChild) {

116+

managedChildren.add(managedChild);

117+

installSignalHandlers();

118+

}

119+120+

/**

121+

* @param {{

122+

* child: import("node:child_process").ChildProcess;

123+

* forceKillTimer: NodeJS.Timeout | null;

124+

* receivedSignal: NodeJS.Signals | null;

125+

* }} managedChild

126+

*/

127+

function removeManagedChild(managedChild) {

128+

managedChildren.delete(managedChild);

129+

if (managedChildren.size === 0) {

130+

removeSignalHandlers();

131+

}

132+

}

133+134+

function installSignalHandlers() {

135+

for (const signal of FORWARDED_SIGNALS) {

136+

if (signalHandlers.has(signal)) {

137+

continue;

113138

}

139+

const handler = () => forwardSignalToManagedChildren(signal);

140+

signalHandlers.set(signal, handler);

141+

process.on(signal, handler);

142+

}

143+

}

144+145+

function removeSignalHandlers() {

146+

for (const [signal, handler] of signalHandlers) {

147+

process.off(signal, handler);

148+

}

149+

signalHandlers.clear();

150+

}

151+152+

/**

153+

* @param {NodeJS.Signals} signal

154+

*/

155+

function forwardSignalToManagedChildren(signal) {

156+

for (const managedChild of managedChildren) {

157+

managedChild.receivedSignal ??= signal;

158+

terminateManagedChild(managedChild.child, signal);

159+

managedChild.forceKillTimer ??= setTimeout(() => {

160+

terminateManagedChild(managedChild.child, "SIGKILL");

161+

}, FORCE_KILL_DELAY_MS);

114162

}

115163

}

116164