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

推荐订阅源

Apple Machine Learning Research
Apple Machine Learning Research
C
Cisco Blogs
P
Privacy & Cybersecurity Law Blog
T
Tor Project blog
Google Online Security Blog
Google Online Security Blog
Scott Helme
Scott Helme
C
Cyber Attacks, Cyber Crime and Cyber Security
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Hacker News - Newest:
Hacker News - Newest: "LLM"
N
News and Events Feed by Topic
The Register - Security
The Register - Security
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
SecWiki News
SecWiki News
T
True Tiger Recordings
T
The Exploit Database - CXSecurity.com
L
LINUX DO - 最新话题
Attack and Defense Labs
Attack and Defense Labs
S
Security @ Cisco Blogs
T
Troy Hunt's Blog
P
Palo Alto Networks Blog
T
Threat Research - Cisco Blogs
Simon Willison's Weblog
Simon Willison's Weblog
L
Lohrmann on Cybersecurity
T
Tailwind CSS Blog
有赞技术团队
有赞技术团队
阮一峰的网络日志
阮一峰的网络日志
IT之家
IT之家
J
Java Code Geeks
Hugging Face - Blog
Hugging Face - Blog
The Hacker News
The Hacker News
Jina AI
Jina AI
S
Secure Thoughts
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
爱范儿
爱范儿
月光博客
月光博客
S
Schneier on Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 【当耐特】
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
H
Hacker News: Front Page
Know Your Adversary
Know Your Adversary
PCI Perspectives
PCI Perspectives
罗磊的独立博客
A
Arctic Wolf
雷峰网
雷峰网
Hacker News: Ask HN
Hacker News: Ask HN
Google DeepMind News
Google DeepMind News
V
Visual Studio Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Latest news
Latest news

Recent Commits to openclaw:main

fix(test): bound extension memory profiler output fix(test): wait for credential timeout cleanup · openclaw/openclaw@88c395c fix(qa-lab): bound plugin tools stderr tail · openclaw/openclaw@9085d17 fix(qa-lab): bound child process output · openclaw/openclaw@4a2b02e fix(test): escalate e2e watchdog termination · openclaw/openclaw@beb25d6 fix(security): avoid fetching untrusted proof refs · openclaw/openclaw@4bd711e fix(security): avoid CodeQL legacy auth patterns · openclaw/openclaw@3844e03 fix(test): keep upgrade survivor runtime state local · openclaw/openclaw@9fef53c Tighten phone-control mutation authorization [AI] (#87150) · openclaw/openclaw@91a4635 fix(voice-call): bound ngrok diagnostics · openclaw/openclaw@629fc2f fix(qa): expose credential fingerprints in admin list · openclaw/openclaw@1bc32e5 fix(memory): bound remote error bodies · openclaw/openclaw@93577ad Clarify directive persistence authorization policy [AI] (#86369) · openclaw/openclaw@bb418a8 fix(install): harden Windows git installs · openclaw/openclaw@dc5671e fix(qa): stabilize live transport lanes · openclaw/openclaw@f9aec04 fix(security): address OpenClaw CodeQL alerts · openclaw/openclaw@b008989 fix(parallels): guard release target harness mismatch · openclaw/openclaw@7275304 docs(skills): add OpenClaw release announcement guide · openclaw/openclaw@9805202 docs(skills): refine beta release announcement guidance · openclaw/openclaw@9ebf51e fix(release): bound cross-os fetch bodies · openclaw/openclaw@13dcded Fix Claude live tool progress for watchdog recovery (#87546) · openclaw/openclaw@4c3a029 test: avoid platform-specific transcript stat assertion · openclaw/openclaw@bd02977 fix(scripts): bound audit advisory error bodies · openclaw/openclaw@9f70064 fix: ignore leading transcript bytes in tail scan · openclaw/openclaw@b005f01 fix: avoid direct transcript stat fallback · openclaw/openclaw@e397636 fix(scripts): bound docker preflight capture fix(scripts): bound gh read error bodies · openclaw/openclaw@744da7e perf: avoid runtime catalog load for reasoning defaults fix(release): pin ClawHub publish workdir · openclaw/openclaw@a0cf185 perf: reuse preflight transcript scan size · openclaw/openclaw@8d5f6c8 fix(scripts): bound labeler error bodies perf: skip recent transcript read after final usage · openclaw/openclaw@39bc43c fix(scripts): bound memory fd ready output perf: reuse transcript scan size · openclaw/openclaw@bd6a404 fix(scripts): bound gateway watch log capture fix(agents): cancel failed skill download bodies · openclaw/openclaw@00fb152 fix(agents): suppress abandoned requester completion handoff (#87541) fix(qa): keep live transport artifacts local fix(release): speed windows upgrade fallback · openclaw/openclaw@1342727 fix(release): close cross-os artifact sockets · openclaw/openclaw@9771727 test(release): satisfy cross-os socket lint chore(ui): refresh nl control ui locale · openclaw/openclaw@43deaf4 chore(ui): refresh fa control ui locale · openclaw/openclaw@c16620c chore(ui): refresh vi control ui locale · openclaw/openclaw@55e1878 chore(ui): refresh th control ui locale · openclaw/openclaw@47c67e3 chore(ui): refresh pl control ui locale · openclaw/openclaw@062d429 chore(ui): refresh id control ui locale · openclaw/openclaw@580e95f chore(ui): refresh tr control ui locale · openclaw/openclaw@dcb00f3 chore(ui): refresh uk control ui locale · openclaw/openclaw@748015b chore(ui): refresh it control ui locale · openclaw/openclaw@ae0f469 chore(ui): refresh ar control ui locale · openclaw/openclaw@5f3012b chore(ui): refresh fr control ui locale · openclaw/openclaw@b0517f1 chore(ui): refresh ja-JP control ui locale · openclaw/openclaw@5058fc9 chore(ui): refresh ko control ui locale · openclaw/openclaw@d4ffac4 chore(ui): refresh es control ui locale · openclaw/openclaw@384dd12 chore(ui): refresh de control ui locale · openclaw/openclaw@6c858ac chore(ui): refresh pt-BR control ui locale · openclaw/openclaw@d3751e4 chore(ui): refresh zh-CN control ui locale · openclaw/openclaw@831bb45 chore(ui): refresh zh-TW control ui locale · openclaw/openclaw@71781b8 test(cron): speed up isolated fallback tests (#87520) · openclaw/openclaw@127c0ad refactor(openai): centralize codex oauth flow (#87411) · openclaw/openclaw@e805ffd test(agents): prove active live subagent steering · openclaw/openclaw@d1bca0c test(agents): narrow bounded error assertions · openclaw/openclaw@44027e7 chore: clarify bug report issue scope · openclaw/openclaw@8f6a2f0 fix(agents): preserve signed thinking payloads (#87493) · openclaw/openclaw@4a45a25 fix(test): harden startup benchmark harness · openclaw/openclaw@d10d30c fix(agents): bound minimax vlm error bodies · openclaw/openclaw@4f26cc9 fix(telegram): lower polling keepalive delay (#83304) ci(mantis): route telegram proof runs to us-east-1 · openclaw/openclaw@51d7f3c fix(agents): bound native pdf error bodies · openclaw/openclaw@c841218 test: deflake agent image root checks (#87499) · openclaw/openclaw@647e18a fix(android): preserve private LAN TLS pins · openclaw/openclaw@633c40a fix(android): keep LAN cleartext untrusted · openclaw/openclaw@5f3d6cd fix(android): allow private LAN pairing fix(android): trust private LAN credentials · openclaw/openclaw@771ddcf fix(qa): reject loose openwebui probe timeouts · openclaw/openclaw@6ae4a00 fix(media): cancel oversized fetch responses · openclaw/openclaw@a0ba9f2 fix(whatsapp): strip control characters from outbound document fileNa… · openclaw/openclaw@313d6ae refactor: share QA runtime helpers (#87412) · openclaw/openclaw@8d21ac3 fix(media): cancel ignored input fetch bodies fix(qa): parse kitchen sink rpc guardrails strictly · openclaw/openclaw@6adf234 fix(media): drain ignored download responses · openclaw/openclaw@736e04c fix(perf): keep abort leak thresholds active fix: harden qqbot direct media uploads · openclaw/openclaw@b860a0d fix(doctor): validate normalized tool schemas · openclaw/openclaw@751cd0c fix(perf): keep startup memory budgets active · openclaw/openclaw@f5e48f7 perf(tests): refactor embedded attempt runner helpers (#87410) · openclaw/openclaw@d165100 chore: stop tracking generated diffs viewer runtime (#87405) · openclaw/openclaw@5887119 fix(perf): reject loose extension memory numeric flags · openclaw/openclaw@bf22893 perf: dedupe persisted skill prompts (#87458) · openclaw/openclaw@edd4c62 fix(qa): reject loose Docker scheduler numeric env · openclaw/openclaw@6fe7ddd fix(qa): reject loose gateway CPU numeric flags · openclaw/openclaw@3ef3470 fix(whatsapp): support pluginHooks.messageReceived in channel/account… · openclaw/openclaw@e0d003b fix: keep private SDK declarations local · openclaw/openclaw@2229122 test(agents): cover tool schema quarantine in turns · openclaw/openclaw@8b78ded fix(qa): reject loose gauntlet numeric flags · openclaw/openclaw@ac28c06 perf(plugins) refactor plugin SDK declarations for flat package types… · openclaw/openclaw@3005b62 fix(file-transfer): handle late tar pipe errors · openclaw/openclaw@b6e354f fix(perf): reject invalid startup bench counts · openclaw/openclaw@d1577a2 fix(status): keep default JSON scan lean · openclaw/openclaw@d2319d7
fix(test): bound package candidate command output · openclaw/openclaw@259796d
vincentkoc · 2026-05-28 · via Recent Commits to openclaw:main

@@ -19,6 +19,8 @@ const DEFAULT_OUTPUT_NAME = "openclaw-current.tgz";

1919

const PACKAGE_URL_DOWNLOAD_TIMEOUT_MS = 60_000;

2020

const PACKAGE_URL_MAX_BYTES = 250 * 1024 * 1024;

2121

const PACKAGE_URL_MAX_REDIRECTS = 5;

22+

const COMMAND_STDOUT_CAPTURE_MAX_CHARS = 8 * 1024 * 1024;

23+

const COMMAND_STDERR_CAPTURE_MAX_CHARS = 128 * 1024;

2224

const TRUSTED_PACKAGE_SOURCE_POLICY = ".github/package-trusted-sources.json";

2325

const TRUSTED_PACKAGE_SOURCE_TOKEN_ENV = "OPENCLAW_TRUSTED_PACKAGE_TOKEN";

2426

const BLOCKED_PACKAGE_HOSTNAMES = new Set([

@@ -145,44 +147,76 @@ function run(command, args, options = {}) {

145147

...spawnOptions,

146148

});

147149

let timedOut = false;

150+

let killTimer;

148151

const timeout =

149152

options.timeoutMs === undefined

150153

? undefined

151154

: setTimeout(() => {

152155

timedOut = true;

153156

child.kill("SIGTERM");

154-

setTimeout(() => child.kill("SIGKILL"), 5_000).unref?.();

157+

killTimer = setTimeout(() => child.kill("SIGKILL"), 5_000);

158+

killTimer.unref?.();

155159

}, options.timeoutMs);

156160

timeout?.unref?.();

157-

let stdout = "";

158-

let stderr = "";

161+

let stdout = { text: "", truncatedChars: 0 };

162+

let stderr = { text: "", truncatedChars: 0 };

159163

if (options.capture) {

160164

child.stdout.on("data", (chunk) => {

161-

stdout += String(chunk);

165+

stdout = appendBoundedCommandOutput(stdout, chunk, COMMAND_STDOUT_CAPTURE_MAX_CHARS);

162166

});

163167

child.stderr.on("data", (chunk) => {

164-

stderr += String(chunk);

168+

stderr = appendBoundedCommandOutput(stderr, chunk, COMMAND_STDERR_CAPTURE_MAX_CHARS);

165169

});

166170

}

167171

child.on("error", reject);

168172

child.on("close", (status, signal) => {

169173

if (timeout) {

170174

clearTimeout(timeout);

171175

}

176+

if (killTimer) {

177+

clearTimeout(killTimer);

178+

}

172179

if (timedOut) {

173180

reject(new Error(`${command} ${args.join(" ")} timed out after ${options.timeoutMs}ms`));

174181

return;

175182

}

176183

if (status === 0) {

177-

resolve(stdout);

184+

if (stdout.truncatedChars > 0) {

185+

reject(

186+

new Error(

187+

`${command} ${args.join(" ")} produced more than ${COMMAND_STDOUT_CAPTURE_MAX_CHARS} captured stdout chars`,

188+

),

189+

);

190+

return;

191+

}

192+

resolve(stdout.text);

178193

return;

179194

}

180-

const detail = stderr.trim() ? `\n${stderr.trim()}` : "";

195+

const stderrText = formatCapturedCommandOutput(stderr).trim();

196+

const detail = stderrText ? `\n${stderrText}` : "";

181197

reject(new Error(`${command} ${args.join(" ")} failed with ${status ?? signal}${detail}`));

182198

});

183199

});

184200

}

185201202+

function appendBoundedCommandOutput(buffer, chunk, maxChars) {

203+

const nextText = buffer.text + String(chunk);

204+

if (nextText.length <= maxChars) {

205+

return { text: nextText, truncatedChars: buffer.truncatedChars };

206+

}

207+

const truncatedChars = buffer.truncatedChars + nextText.length - maxChars;

208+

return { text: nextText.slice(-maxChars), truncatedChars };

209+

}

210+211+

function formatCapturedCommandOutput(buffer) {

212+

if (buffer.truncatedChars === 0) {

213+

return buffer.text;

214+

}

215+

return `[output truncated ${buffer.truncatedChars} chars; showing tail]\n${buffer.text}`;

216+

}

217+218+

export const runCommandForTest = run;

219+186220

async function walkFiles(dir) {

187221

const entries = await fs.readdir(dir, { withFileTypes: true });

188222

const files = [];