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

推荐订阅源

L
LangChain Blog
宝玉的分享
宝玉的分享
酷 壳 – CoolShell
酷 壳 – CoolShell
N
Netflix TechBlog - Medium
F
Fortinet All Blogs
T
Tailwind CSS Blog
Google DeepMind News
Google DeepMind News
Jina AI
Jina AI
J
Java Code Geeks
Recent Announcements
Recent Announcements
The Cloudflare Blog
D
DataBreaches.Net
Hugging Face - Blog
Hugging Face - Blog
WordPress大学
WordPress大学
Vercel News
Vercel News
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Microsoft Azure Blog
Microsoft Azure Blog
雷峰网
雷峰网
H
Help Net Security
博客园 - Franky
S
SegmentFault 最新的问题
T
The Blog of Author Tim Ferriss
博客园_首页
C
Check Point Blog
腾讯CDC
美团技术团队
Martin Fowler
Martin Fowler
The GitHub Blog
The GitHub Blog
M
MIT News - Artificial intelligence
Apple Machine Learning Research
Apple Machine Learning Research
P
Proofpoint News Feed
U
Unit 42
人人都是产品经理
人人都是产品经理
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Engineering at Meta
Engineering at Meta
M
Microsoft Research Blog - Microsoft Research
阮一峰的网络日志
阮一峰的网络日志
G
Google Developers Blog
Stack Overflow Blog
Stack Overflow Blog
B
Blog
Last Week in AI
Last Week in AI
博客园 - 三生石上(FineUI控件)
博客园 - 聂微东
云风的 BLOG
云风的 BLOG
H
Hackread – Cybersecurity News, Data Breaches, AI and More
李成银的技术随笔
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 叶小钗
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知

Recent Commits to openclaw:main

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(stepfun): drop stale auth choice metadata · openclaw/openclaw@0b2ab6c test(e2e): sample kitchen sink RSS on Windows · openclaw/openclaw@73c1e37 test(plugins): fail gauntlet on load diagnostics fix(build): preserve tsdown heap floor · openclaw/openclaw@9ff1a43 fix(tools): honor config apiKey in media tool preflight (#85570) · openclaw/openclaw@31c269f fix(e2e): support macOS script wrappers fix(ci): scope changed shrinkwrap checks · openclaw/openclaw@743fd4c chore(ui): refresh fa control ui locale
fix(scripts): avoid Windows shell argv warnings · openclaw/openclaw@208a067
vincentkoc · 2026-05-24 · via Recent Commits to openclaw:main

@@ -1,4 +1,5 @@

11

import { spawn } from "node:child_process";

2+

import { buildCmdExeCommandLine } from "../windows-cmd-helpers.mjs";

2334

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

45

const FORCE_KILL_DELAY_MS = 5_000;

@@ -48,6 +49,9 @@ function terminateManagedChild(child, signal = "SIGTERM") {

4849

* env?: NodeJS.ProcessEnv;

4950

* stdio?: import("node:child_process").StdioOptions;

5051

* shell?: boolean;

52+

* windowsVerbatimArguments?: boolean;

53+

* platform?: NodeJS.Platform;

54+

* comSpec?: string;

5155

* onReady?: (child: import("node:child_process").ChildProcess) => void;

5256

* }} options

5357

* @returns {Promise<number>}

@@ -59,15 +63,23 @@ export async function runManagedCommand({

5963

env,

6064

stdio = "inherit",

6165

shell = process.platform === "win32",

66+

windowsVerbatimArguments,

67+

platform = process.platform,

68+

comSpec,

6269

onReady,

6370

}) {

64-

const child = spawn(bin, args, {

71+

const spawnSpec = createManagedCommandSpawnSpec({

72+

bin,

73+

args,

6574

cwd,

6675

env,

6776

stdio,

6877

shell,

69-

detached: process.platform !== "win32",

78+

windowsVerbatimArguments,

79+

platform,

80+

comSpec,

7081

});

82+

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

71837284

let receivedSignal = null;

7385

let forceKillTimer = null;

@@ -102,6 +114,91 @@ export async function runManagedCommand({

102114

}

103115

}

104116117+

/**

118+

* @param {{

119+

* bin: string;

120+

* args?: string[];

121+

* cwd?: string;

122+

* env?: NodeJS.ProcessEnv;

123+

* stdio?: import("node:child_process").StdioOptions;

124+

* shell?: boolean;

125+

* windowsVerbatimArguments?: boolean;

126+

* platform?: NodeJS.Platform;

127+

* comSpec?: string;

128+

* }} options

129+

*/

130+

export function createManagedCommandSpawnSpec({

131+

bin,

132+

args = [],

133+

cwd,

134+

env,

135+

stdio = "inherit",

136+

shell = process.platform === "win32",

137+

windowsVerbatimArguments,

138+

platform = process.platform,

139+

comSpec,

140+

}) {

141+

const invocation = createManagedCommandInvocation({

142+

bin,

143+

args,

144+

env,

145+

shell,

146+

windowsVerbatimArguments,

147+

platform,

148+

comSpec,

149+

});

150+151+

return {

152+

args: invocation.args,

153+

command: invocation.command,

154+

options: {

155+

cwd,

156+

env,

157+

stdio,

158+

shell: invocation.shell,

159+

detached: platform !== "win32",

160+

windowsVerbatimArguments: invocation.windowsVerbatimArguments,

161+

},

162+

};

163+

}

164+165+

/**

166+

* @param {{

167+

* bin: string;

168+

* args?: string[];

169+

* env?: NodeJS.ProcessEnv;

170+

* shell?: boolean;

171+

* windowsVerbatimArguments?: boolean;

172+

* platform?: NodeJS.Platform;

173+

* comSpec?: string;

174+

* }} options

175+

*/

176+

export function createManagedCommandInvocation({

177+

bin,

178+

args = [],

179+

env,

180+

shell = process.platform === "win32",

181+

windowsVerbatimArguments,

182+

platform = process.platform,

183+

comSpec,

184+

}) {

185+

if (platform === "win32" && shell && args.length > 0) {

186+

return {

187+

args: ["/d", "/s", "/c", buildCmdExeCommandLine(bin, args)],

188+

command: comSpec ?? env?.ComSpec ?? env?.COMSPEC ?? process.env.ComSpec ?? "cmd.exe",

189+

shell: false,

190+

windowsVerbatimArguments: true,

191+

};

192+

}

193+194+

return {

195+

args,

196+

command: bin,

197+

shell,

198+

windowsVerbatimArguments,

199+

};

200+

}

201+105202

function signalNumberFor(signal) {

106203

switch (signal) {

107204

case "SIGHUP":