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

推荐订阅源

P
Proofpoint News Feed
李成银的技术随笔
人人都是产品经理
人人都是产品经理
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
H
Help Net Security
G
Google Developers Blog
AWS News Blog
AWS News Blog
N
Netflix TechBlog - Medium
P
Privacy & Cybersecurity Law Blog
C
Cisco Blogs
C
Check Point Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
U
Unit 42
Cyberwarzone
Cyberwarzone
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
C
CERT Recently Published Vulnerability Notes
The GitHub Blog
The GitHub Blog
D
DataBreaches.Net
腾讯CDC
S
SegmentFault 最新的问题
Project Zero
Project Zero
F
Future of Privacy Forum
L
LangChain Blog
云风的 BLOG
云风的 BLOG
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
F
Fortinet All Blogs
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
F
Fox-IT International blog
Security Latest
Security Latest
S
Secure Thoughts
T
Tailwind CSS Blog
T
Troy Hunt's Blog
Jina AI
Jina AI
C
CXSECURITY Database RSS Feed - CXSecurity.com
Blog — PlanetScale
Blog — PlanetScale
美团技术团队
Recorded Future
Recorded Future
Application and Cybersecurity Blog
Application and Cybersecurity Blog
N
News and Events Feed by Topic
Schneier on Security
Schneier on Security
Microsoft Security Blog
Microsoft Security Blog
Google DeepMind News
Google DeepMind News
Apple Machine Learning Research
Apple Machine Learning Research
aimingoo的专栏
aimingoo的专栏
博客园 - 三生石上(FineUI控件)
MyScale Blog
MyScale Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
A
Arctic Wolf
Spread Privacy
Spread Privacy
T
The Blog of Author Tim Ferriss

Recent Commits to openclaw:main

fix: remove stale image provider assertions · openclaw/openclaw@0973a7e fix: accept trailing fuzzy voice wake questions · openclaw/openclaw@d001d35 fix(podman): bound setup image builds · openclaw/openclaw@d6fcb56 fix(podman): kill timed container launches · openclaw/openclaw@6118f3f fix(scripts): preserve native pnpm exec paths · openclaw/openclaw@fb853de fix(ci): bound docker pull smoke steps · openclaw/openclaw@e96cde7 fix(codex): bridge cli api-key auth into app-server fix: update Discord voice to libopus-wasm 0.1.0 · openclaw/openclaw@0f605ee fix(e2e): kill timed docker helper commands · openclaw/openclaw@e89afa6 fix(e2e): kill timed live docker runs · openclaw/openclaw@dc0d4c2 fix(ci): kill timed website installer docker steps · openclaw/openclaw@d54c906 fix(ci): kill timed install smoke docker steps · openclaw/openclaw@cf6f9ad feat(ios): show Talk voice mode (#86798) · openclaw/openclaw@19e4c37 fix(setup): kill timed image pulls when supported fix(test): default Vitest stall watchdog fix(ci): bound crabbox hydrate downloads · openclaw/openclaw@d1c8f09 fix(control-ui): guard stale overview usage refresh fix(qa): require genai otel model spans (#86920) refactor: move transcripts into core fix(message-tool): hydrate structured reply attachments fix(e2e): kill timed npm install process groups fix(ci): kill timed workflow process groups fix(e2e): kill timed setup process groups fix(e2e): bound resource-sampled docker runs · openclaw/openclaw@d0dd8b8 fix(mac): fail closed on restart gateway check · openclaw/openclaw@295b5ea fix(e2e): time out live docker setup installs · openclaw/openclaw@8c7f226 ci: resolve major node fallback versions · openclaw/openclaw@e37ac22 ci: use local node toolcache setup · openclaw/openclaw@4c6aeb9 ci: add node download fallback fix(e2e): bound docker npm install phases · openclaw/openclaw@9777526 ci: restore pnpm store cache with corepack · openclaw/openclaw@84e4bff ci: avoid pnpm setup action download · openclaw/openclaw@13f72e4 fix(e2e): time out telegram package installs · openclaw/openclaw@a17ac3e ci: avoid unconditional bun action download · openclaw/openclaw@e549d0c ci: avoid token-backed read checkouts · openclaw/openclaw@df13d3a ci: use unauthenticated workflow fetches fix(e2e): time out package npm installs · openclaw/openclaw@a07dc38 test: speed up slow CI regressions · openclaw/openclaw@30e59b4 fix(release): fail closed on cross-os agent turns · openclaw/openclaw@dfe94ff fix(e2e): reject corrupt plugin update false greens · openclaw/openclaw@419178b fix(qa): preserve corrupt auth profile files · openclaw/openclaw@efebf6b fix(matrix): reject malformed integer cli values · openclaw/openclaw@cb34175 fix(canvas): reject invalid snapshot formats · openclaw/openclaw@884d346 fix(browser): reject invalid wait load states · openclaw/openclaw@13c6a33 fix(ci): time out website installer docker runs · openclaw/openclaw@a3bb4fe fix(discord): gate native built-in UI before owner auth fix(ci): fail Testbox changed-check delegation · openclaw/openclaw@92fb79e fix(ci): time out install smoke docker runs · openclaw/openclaw@30c4489 ci(release): retry transient GitHub API suspension errors (#86859) · openclaw/openclaw@94a04e1 fix(podman): time out detached launches · openclaw/openclaw@8307e2f Auto-scale live tool result caps (#86857) fix(podman): time out setup image pulls · openclaw/openclaw@c2b1d20 perf: use typed arrays for audio codec loops (#86856) · openclaw/openclaw@18ff19e fix(e2e): time out live image pulls · openclaw/openclaw@f0599fd fix(mac): require dist dSYM artifacts · openclaw/openclaw@fe9f28f docs: update changelog for testbox delegation · openclaw/openclaw@71e7a1f fix(e2e): time out installer smoke containers · openclaw/openclaw@9208272 fix: simplify testbox changed-check delegation · openclaw/openclaw@e20b8d7 fix(mac): require packaged app resources · openclaw/openclaw@198d0a5 test: update docker stats helper expectations · openclaw/openclaw@11512b1 fix(e2e): time out live Docker runs · openclaw/openclaw@d1f2eb0 fix(mac): remove unused codesign entitlements · openclaw/openclaw@e8cb2b5 fix(docker): time out setup image pulls · openclaw/openclaw@dcf0941 fix(mac): fail closed on missing staple app · openclaw/openclaw@da16a96 fix(qa-slack): preserve failure debug artifacts · openclaw/openclaw@4ebc13a fix(e2e): time out standalone Docker smokes · openclaw/openclaw@f1ceed9 fix(mac): clean codesign entitlement temps · openclaw/openclaw@68f877e fix(e2e): time out install smoke Docker copies · openclaw/openclaw@1c5b835 fix(mac): fail closed on dmg plist reads · openclaw/openclaw@7aedff8 fix(e2e): route gateway network client through Docker helper · openclaw/openclaw@f2ad94e fix(mac): fail closed on dist plist reads · openclaw/openclaw@8e110a2 test(codex): widen app-server wait timeout type · openclaw/openclaw@4c8e9da fix(e2e): time out Docker image reuse probes docs: clarify compatibility defaults · openclaw/openclaw@4f1cd8e fix(e2e): route named container cleanup through helper · openclaw/openclaw@e295c86 fix(mac): fail closed on plist stamp errors · openclaw/openclaw@91080fd fix(e2e): route focused docker smokes through run helper · openclaw/openclaw@4838e70 fix(mattermost): tag typed text slash control commands · openclaw/openclaw@21aebd5 fix(e2e): route sampled docker runs through helpers fix(e2e): clean package docker artifacts on setup failure · openclaw/openclaw@90bcec9 ci(release): include performance run in validation manifest · openclaw/openclaw@0e73379 test(e2e): harden release media memory smoke · openclaw/openclaw@99032f0 fix(e2e): clean package onboarding artifacts · openclaw/openclaw@f63754b fix(e2e): honor Docker harness run timeouts · openclaw/openclaw@b34e1b3 fix(imessage): dedupe accounts sharing the local Messages source (#86… · openclaw/openclaw@9434228 fix(scripts): detect shell-wrapped changed gates fix(codex): preserve sandbox bootstrap path style · openclaw/openclaw@3f6b63a perf: skip canonical session migration parses · openclaw/openclaw@c5530c7 fix(e2e): clean skill install package mounts · openclaw/openclaw@d3bbfa1 fix(e2e): clean Codex plugin live artifacts · openclaw/openclaw@a5653c0 fix(e2e): clean sampled Docker logs on failure · openclaw/openclaw@b93cee4 refactor: migrate validators to TypeBox (#86639) · openclaw/openclaw@3548cff fix(e2e): clean package mount tarballs · openclaw/openclaw@b377618 fix(scripts): format auth expiries on macos · openclaw/openclaw@437a9e9 fix(e2e): clean functional Docker build inputs Fix iMessage image attachment roots (#86569) · openclaw/openclaw@2e17003 chore(release): refresh plugin sdk api baseline · openclaw/openclaw@918472a fix(e2e): fail on invalid test state payloads · openclaw/openclaw@4a1d772 ci(release): apply exact extension batch excludes fix(installer): reject invalid shell options
fix(scripts): trim macOS node bootstrap · openclaw/openclaw@4ff5a61
vincentkoc · 2026-05-26 · via Recent Commits to openclaw:main

@@ -123,6 +123,7 @@ function spawnInvocation(command, commandArgs, env, platform) {

123123124124

const cmdMetaCharactersRe = /([()\][%!^"`<>&|;, *?])/g;

125125

const jsRuntimeEntrypoints = new Set(["pnpm", "npm", "npx", "corepack", "node", "yarn", "bun"]);

126+

const awsMacosCorepackEntrypoints = new Set(["pnpm", "yarn", "corepack"]);

126127

const shellControlCommandPrefixes = new Set([

127128

"if",

128129

"while",

@@ -579,6 +580,29 @@ function commandWordsRuntimeEntrypoint(words) {

579580

return "";

580581

}

581582583+

function commandNeedsAwsMacosPackageManager(commandArgs) {

584+

if (isChangedGateCommand(commandArgs)) {

585+

return true;

586+

}

587+

if (commandArgs.length === 1) {

588+

return shellCommandWordCandidates(commandArgs[0]).some(commandWordsNeedAwsMacosPackageManager);

589+

}

590+

return commandWordsNeedAwsMacosPackageManager(normalizedCommandWords(commandArgs));

591+

}

592+593+

function commandWordsNeedAwsMacosPackageManager(words) {

594+

const first = (words[0] ?? "").split("/").pop();

595+

if (awsMacosCorepackEntrypoints.has(first)) {

596+

return true;

597+

}

598+599+

const inlineCommand = shellInlineCommand(words);

600+

if (!inlineCommand) {

601+

return false;

602+

}

603+

return shellCommandWordCandidates(inlineCommand).some(commandWordsNeedAwsMacosPackageManager);

604+

}

605+582606

function isChangedGateCommand(commandArgs) {

583607

if (commandArgs.length === 1) {

584608

return shellCommandWordCandidates(commandArgs[0]).some(isChangedGateCommandWords);

@@ -593,7 +617,9 @@ function isChangedGateCommandWords(words) {

593617

}

594618595619

const inlineCommand = shellInlineCommand(words);

596-

return inlineCommand ? shellCommandWordCandidates(inlineCommand).some(isChangedGateCommandWords) : false;

620+

return inlineCommand

621+

? shellCommandWordCandidates(inlineCommand).some(isChangedGateCommandWords)

622+

: false;

597623

}

598624599625

function isChangedGateWords(words) {

@@ -1154,20 +1180,19 @@ function injectRemoteChangedGateGitBootstrap(commandArgs, changedGateBase) {

11541180

return normalizedArgs;

11551181

}

115611821157-

function remoteAwsMacosJsBootstrap() {

1183+

function remoteAwsMacosJsBootstrap({ packageManager = false } = {}) {

11581184

const nodeVersion = process.env.OPENCLAW_CRABBOX_MACOS_NODE_VERSION?.trim() || "24.15.0";

1159-

return [

1185+

const bootstrap = [

11601186

"openclaw_crabbox_bootstrap_macos_js() {",

11611187

'tool_root="${OPENCLAW_CRABBOX_MACOS_TOOLCHAIN_DIR:-$HOME/.openclaw-crabbox-toolchain}";',

1162-

'pnpm_home="${PNPM_HOME:-$tool_root/pnpm-home}";',

11631188

`node_version=${shellQuote(nodeVersion)};`,

11641189

'arch="$(uname -m)";',

11651190

'case "$arch" in arm64) node_arch=arm64 ;; x86_64) node_arch=x64 ;; *) echo "unsupported macOS arch: $arch" >&2; return 2 ;; esac;',

11661191

'if [ -z "${TMPDIR:-}" ]; then export TMPDIR="/tmp"; fi;',

11671192

'if [ ! -d "$TMPDIR" ]; then mkdir -p "$TMPDIR" 2>/dev/null || export TMPDIR="/tmp"; fi;',

11681193

'if [ ! -d "$TMPDIR" ]; then echo "usable TMPDIR not found: $TMPDIR" >&2; return 1; fi;',

11691194

'node_dir="$tool_root/node-v${node_version}-darwin-${node_arch}";',

1170-

'export PATH="$node_dir/bin:$pnpm_home:$PATH";',

1195+

'export PATH="$node_dir/bin:$PATH";',

11711196

'if [ ! -x "$node_dir/bin/node" ]; then',

11721197

'tmp_dir="$(mktemp -d)" || return 1;',

11731198

'pkg="node-v${node_version}-darwin-${node_arch}.tar.gz";',

@@ -1180,23 +1205,26 @@ function remoteAwsMacosJsBootstrap() {

11801205

'tar -xzf "$tmp_dir/$pkg" -C "$tool_root" || { status=$?; rm -rf "$tmp_dir"; return "$status"; };',

11811206

'rm -rf "$tmp_dir";',

11821207

"fi;",

1183-

'export COREPACK_HOME="${COREPACK_HOME:-$tool_root/corepack}";',

1184-

'export PNPM_HOME="$pnpm_home";',

1185-

'mkdir -p "$COREPACK_HOME" "$PNPM_HOME" || return 1;',

1186-

'export PATH="$PNPM_HOME:$PATH";',

1187-

'corepack enable --install-directory "$PNPM_HOME" || return 1;',

11881208

"node --version >&2;",

1189-

"pnpm --version >&2;",

1190-

"};",

1191-

"openclaw_crabbox_bootstrap_macos_js",

1192-

].join(" ");

1209+

];

1210+

if (packageManager) {

1211+

bootstrap.push(

1212+

'export COREPACK_HOME="${COREPACK_HOME:-$tool_root/corepack}";',

1213+

'export PNPM_HOME="${PNPM_HOME:-$tool_root/pnpm-home}";',

1214+

'mkdir -p "$COREPACK_HOME" "$PNPM_HOME" || return 1;',

1215+

'export PATH="$PNPM_HOME:$PATH";',

1216+

'corepack enable --install-directory "$PNPM_HOME" || return 1;',

1217+

"pnpm --version >&2;",

1218+

);

1219+

}

1220+

bootstrap.push("};", "openclaw_crabbox_bootstrap_macos_js");

1221+

return bootstrap.join(" ");

11931222

}

1194122311951224

function injectRemoteAwsMacosJsBootstrap(commandArgs, providerName) {

1196-

if (

1197-

!isAwsMacosRemoteTarget(commandArgs, providerName) ||

1198-

!commandRuntimeEntrypoint(runCommandArgs(commandArgs))

1199-

) {

1225+

const runArgs = runCommandArgs(commandArgs);

1226+

const runtimeEntrypoint = commandRuntimeEntrypoint(runArgs);

1227+

if (!isAwsMacosRemoteTarget(commandArgs, providerName) || !runtimeEntrypoint) {

12001228

return commandArgs;

12011229

}

12021230

@@ -1211,7 +1239,9 @@ function injectRemoteAwsMacosJsBootstrap(commandArgs, providerName) {

12111239

hasOption(normalizedArgs, "--shell") && remoteCommand.length === 1

12121240

? remoteCommand[0]

12131241

: shellJoin(remoteCommand);

1214-

const shellCommand = `${remoteAwsMacosJsBootstrap()} && { ${originalShellCommand}\n}`;

1242+

const shellCommand = `${remoteAwsMacosJsBootstrap({

1243+

packageManager: commandNeedsAwsMacosPackageManager(runArgs),

1244+

})} && { ${originalShellCommand}\n}`;

1215124512161246

if (!hasOption(normalizedArgs, "--shell")) {

12171247

normalizedArgs.splice(optionEnd, 0, "--shell");

@@ -1282,12 +1312,13 @@ function prepareAwsMacosScriptStdinBootstrap(commandArgs, providerName) {

12821312

}

1283131312841314

function createAwsMacosScriptStdinWrapper(script) {

1315+

const packageManager = scriptNeedsAwsMacosPackageManager(script);

12851316

if (!script.startsWith("#!")) {

1286-

return `${remoteAwsMacosJsBootstrap()} || exit $?\n${script}`;

1317+

return `${remoteAwsMacosJsBootstrap({ packageManager })} || exit $?\n${script}`;

12871318

}

12881319

const delimiter = uniqueHereDocDelimiter(script);

12891320

return [

1290-

`${remoteAwsMacosJsBootstrap()} || exit $?`,

1321+

`${remoteAwsMacosJsBootstrap({ packageManager })} || exit $?`,

12911322

'tmp_script="$(mktemp "${TMPDIR:-/tmp}/openclaw-crabbox-script.XXXXXX")" || exit $?',

12921323

'cleanup_openclaw_crabbox_script() { rm -f "$tmp_script"; }',

12931324

"trap cleanup_openclaw_crabbox_script EXIT",

@@ -1300,6 +1331,23 @@ function createAwsMacosScriptStdinWrapper(script) {

13001331

].join("\n");

13011332

}

130213331334+

function scriptNeedsAwsMacosPackageManager(script) {

1335+

const firstLine = script.match(/^[^\r\n]*/u)?.[0] ?? "";

1336+

if (firstLine.startsWith("#!")) {

1337+

let words = firstLine.slice(2).trim().split(/\s+/u).filter(Boolean);

1338+

if ((words[0] ?? "").split("/").pop() === "env") {

1339+

words = words.slice(1);

1340+

while ((words[0] ?? "").startsWith("-")) {

1341+

words = words.slice(1);

1342+

}

1343+

}

1344+

if (commandWordsNeedAwsMacosPackageManager(words)) {

1345+

return true;

1346+

}

1347+

}

1348+

return commandNeedsAwsMacosPackageManager([script]);

1349+

}

1350+13031351

function uniqueHereDocDelimiter(script) {

13041352

let index = 0;

13051353

for (;;) {