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

推荐订阅源

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(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(scripts): harden Windows native opus install · openclaw/openclaw@43252c8 fix(agents): match runtime policy entries when session provider is em… fix(scripts): harden Windows generated formatting · openclaw/openclaw@0a98559 fix(mcp): bound tools/list during catalog discovery (#85063) · openclaw/openclaw@07f500a fix(test): focus plugin binding Docker smoke · openclaw/openclaw@dfa1a51 test(e2e): fail release memory indexing errors test(daemon): fail launchd integration bootstrap errors · openclaw/openclaw@af07769 feat(imessage): support thumb approval reactions (#85952) · openclaw/openclaw@5c7980f fix(crabbox): default macos aws runs on demand fix(scripts): preserve test passthrough args · openclaw/openclaw@e4332f7 fix(e2e): harden Windows plugin assertions fix(test): mount upgrade survivor helper · openclaw/openclaw@5f03154 fix(android): prevent stale chat during session switches fix(android): keep permission setup action visible · openclaw/openclaw@94bc18a style(android): sharpen voice mode surfaces · openclaw/openclaw@c452510 fix(android): hide internal chat content blocks · openclaw/openclaw@d86ed21 style(android): refine list surface spacing · openclaw/openclaw@955909c feat(android): add pair new gateway action · openclaw/openclaw@cc5eb97 Advance iMessage catchup cursor after live handling (#85475) · openclaw/openclaw@102555c fix(scripts): ignore forwarded arg separator · openclaw/openclaw@79ee70c fix(test): fail empty gateway startup samples · openclaw/openclaw@5a8ce6a fix(e2e): harden Windows kitchen sink assertions · openclaw/openclaw@87a2eba fix(e2e): harden Telegram credential paths on Windows · openclaw/openclaw@c643370 fix(android): align setup pairing scopes fix(android): complete qr setup operator handoff · openclaw/openclaw@be9bb77 fix(test): copy cleanup smoke prepare hook · openclaw/openclaw@dbc08f6 fix(secrets): allow hash in exec SecretRef ids (#86072) · openclaw/openclaw@675158c fix(media): use static image compression metadata · openclaw/openclaw@694d45e fix(release): verify large plugin npm packs fix(test): require kitchen sink diagnostic canaries · openclaw/openclaw@7e51f83 fix(scripts): harden Windows upgrade survivor recipe · openclaw/openclaw@483d7be fix(installer): count verify progress stage fix: Refine PR template for review state (#86054) fix(test): repair split agent shard runs · openclaw/openclaw@125d82c fix(codex): harden Windows protocol formatting · openclaw/openclaw@ce48e4c fix(openrouter): use endpoint context limits (#86041) · openclaw/openclaw@dd01a2e test(qa): remove brittle capability flip setup turn fix(telegram): migrate legacy cache sidecars · openclaw/openclaw@eb9b882 fix(telegram): migrate account topic cache sidecars · openclaw/openclaw@5cfb12f fix(scripts): harden Windows ZAI fallback repro · openclaw/openclaw@5be62e7 style(android): sharpen v2 screen rhythm · openclaw/openclaw@400d90a test(qa): extend capability flip setup budget · openclaw/openclaw@c91c3c6 fix(android): simplify gateway status copy fix(android): route offline voice to gateway setup fix(scripts): harden Windows control UI i18n commands · openclaw/openclaw@581c8a6 fix(android): stop operator chat subscription · openclaw/openclaw@5c15859 fix(test): fail missing kitchen sink rss samples test(qa): widen capability flip restart budget · openclaw/openclaw@c7d4e9e fix(android): smooth gateway pairing recovery · openclaw/openclaw@60e6ccd fix(test): suppress rolldown timing noise · openclaw/openclaw@6d9b388 style(android): fix talk mode ktlint formatting · openclaw/openclaw@01b284c fix(telegram): store topic cache in plugin state fix(telegram): store bot info cache in plugin state · openclaw/openclaw@2ed5296 fix(test): sync sparse AWS Crabbox runs from full checkout · openclaw/openclaw@0f82c81 fix(release): harden Windows cross-os command shims · openclaw/openclaw@7154767 fix(test): harden Docker resource ceilings test(telegram): keep startup limiter coverage focused test(telegram): isolate startup probe limiter timing · openclaw/openclaw@04d86e0 test(release): harden plugin prerelease checks · openclaw/openclaw@578e73f fix(telegram): serialize topic dispatch replies (#85709) · openclaw/openclaw@62b51a6 test(release): stabilize plugin prerelease checks · openclaw/openclaw@3679151 fix(test): fail live gateway false greens · openclaw/openclaw@295339d fix(test): build startup artifacts for smoke scripts · openclaw/openclaw@3838e45 test(telegram): wait for startup probe slots · openclaw/openclaw@0a8af67 test(codex): match sandbox exec-server yolo policy · openclaw/openclaw@783290f fix(test): fail missing explicit test targets · openclaw/openclaw@9ff4d36 test(codex): avoid full sandbox exec-server turn run · openclaw/openclaw@558c1bc fix(ci): keep Crabbox pnpm hydration shims writable · openclaw/openclaw@bca1ac0 fix(release): harden Windows release-check npm probes · openclaw/openclaw@75ac11a fix(docker): parse peer-suffixed lockfile packages · openclaw/openclaw@cf46f2e fix(docker): seed lockfile packages before prune · openclaw/openclaw@f799da0 fix(docker): seed lockfile snapshot tarballs before prune · openclaw/openclaw@2cd93f1
fix(test): fail multi-node update regressions · openclaw/openclaw@732cf54
vincentkoc · 2026-05-25 · via Recent Commits to openclaw:main

@@ -131,92 +131,123 @@ set -euo pipefail

131131

printf "%s %s\n" "\$(date -u +%H:%M:%S)" "\$*" >>"$SYSTEMCTL_LOG"

132132133133

filtered=()

134-

for arg in "\$@"; do

134+

for ((i = 1; i <= \$#; i++)); do

135+

arg="\${!i}"

135136

case "\$arg" in

136-

--user|--quiet|--no-page|--now) ;;

137+

--user|--quiet|--no-page|--now|--value) ;;

138+

--property)

139+

i=\$((i + 1))

140+

;;

141+

--property=*) ;;

137142

*) filtered+=("\$arg") ;;

138143

esac

139144

done

140145

command="\${filtered[0]:-status}"

141146147+

is_running() {

148+

[ -s "$GATEWAY_PID_FILE" ] || return 1

149+

local pid

150+

pid="\$(cat "$GATEWAY_PID_FILE" 2>/dev/null || true)"

151+

[ -n "\$pid" ] || return 1

152+

kill -0 "\$pid" >/dev/null 2>&1

153+

}

154+155+

stop_gateway() {

156+

[ -s "$GATEWAY_PID_FILE" ] || return 0

157+

local pid

158+

pid="\$(cat "$GATEWAY_PID_FILE" 2>/dev/null || true)"

159+

if [[ "\$pid" =~ ^[0-9]+$ ]] && [ "\$pid" -gt 1 ] && kill -0 "\$pid" >/dev/null 2>&1; then

160+

kill "\$pid" >/dev/null 2>&1 || true

161+

for _ in \$(seq 1 100); do

162+

kill -0 "\$pid" >/dev/null 2>&1 || break

163+

sleep 0.1

164+

done

165+

kill -9 "\$pid" >/dev/null 2>&1 || true

166+

fi

167+

rm -f "$GATEWAY_PID_FILE"

168+

}

169+170+

load_unit_environment() {

171+

local unit="\$1"

172+

while IFS= read -r line; do

173+

case "\$line" in

174+

EnvironmentFile=*)

175+

local spec="\${line#EnvironmentFile=}"

176+

for token in \$spec; do

177+

local file="\${token#-}"

178+

[ -f "\$file" ] || continue

179+

set -a

180+

# shellcheck disable=SC1090

181+

. "\$file"

182+

set +a

183+

done

184+

;;

185+

Environment=*)

186+

local assignment="\${line#Environment=}"

187+

assignment="\${assignment#\"}"

188+

assignment="\${assignment%\"}"

189+

export "\$assignment"

190+

;;

191+

esac

192+

done <"\$unit"

193+

}

194+195+

start_gateway() {

196+

local unit="$GATEWAY_UNIT_PATH"

197+

local exec_start

198+

if [ ! -f "\$unit" ]; then

199+

echo "systemctl shim: unit not found: \$unit" >&2

200+

return 1

201+

fi

202+

exec_start="\$(sed -n 's/^ExecStart=//p' "\$unit" | tail -n 1)"

203+

if [ -z "\$exec_start" ]; then

204+

echo "systemctl shim: no ExecStart in \$unit" >&2

205+

return 1

206+

fi

207+

(

208+

load_unit_environment "\$unit"

209+

export OPENCLAW_NO_RESPAWN=1

210+

echo "systemctl shim: starting: \$exec_start"

211+

nohup bash -lc "exec \$exec_start" >>"$GATEWAY_DAEMON_LOG" 2>&1 &

212+

printf '%s\n' "\$!" >"$GATEWAY_PID_FILE"

213+

)

214+

}

215+142216

case "\$command" in

143217

daemon-reload)

144218

echo "daemon-reload (shim: no-op)"

145219

;;

146220

enable)

147221

echo "enable (shim: no-op)"

148222

;;

223+

is-enabled)

224+

echo "enabled"

225+

;;

149226

restart|start)

150-

if [ -s "$GATEWAY_PID_FILE" ]; then

151-

old_pid="\$(cat "$GATEWAY_PID_FILE" 2>/dev/null || true)"

152-

if kill -0 "\$old_pid" 2>/dev/null; then

153-

kill "\$old_pid" 2>/dev/null || true

154-

sleep 0.5

155-

fi

156-

fi

157-

unit="$GATEWAY_UNIT_PATH"

158-

if [ ! -f "\$unit" ]; then

159-

echo "systemctl shim: unit not found: \$unit" >&2

160-

exit 1

161-

fi

162-

exec_start_line="\$(grep "^ExecStart=" "\$unit" | head -1 || true)"

163-

exec_start="\${exec_start_line#ExecStart=}"

164-

if [ -z "\$exec_start" ]; then

165-

echo "systemctl shim: no ExecStart in \$unit" >&2

166-

exit 1

167-

fi

168-

# Source EnvironmentFile if present

169-

env_file_line="\$(grep "^EnvironmentFile=" "\$unit" | head -1 || true)"

170-

env_file="\${env_file_line#EnvironmentFile=}"

171-

env_file="\${env_file#-}"

172-

if [ -n "\$env_file" ] && [ -f "\$env_file" ]; then

173-

set -a; source "\$env_file"; set +a

174-

fi

175-

# Inline Environment= entries

176-

while IFS= read -r env_line; do

177-

env_entry="\${env_line#Environment=}"

178-

env_entry="\${env_entry#\"}"

179-

env_entry="\${env_entry%\"}"

180-

export "\$env_entry"

181-

done < <(grep "^Environment=" "\$unit" || true)

182-

echo "systemctl shim: starting: \$exec_start"

183-

eval nohup \$exec_start >>"$GATEWAY_DAEMON_LOG" 2>&1 &

184-

echo "\$!" >"$GATEWAY_PID_FILE"

185-

echo "systemctl shim: started pid \$(cat "$GATEWAY_PID_FILE")"

227+

stop_gateway

228+

start_gateway

186229

;;

187230

stop)

188-

if [ -s "$GATEWAY_PID_FILE" ]; then

189-

pid="\$(cat "$GATEWAY_PID_FILE")"

190-

kill "\$pid" 2>/dev/null || true

191-

rm -f "$GATEWAY_PID_FILE"

192-

fi

231+

stop_gateway

193232

;;

194233

is-active)

195-

if [ -s "$GATEWAY_PID_FILE" ] && kill -0 "\$(cat "$GATEWAY_PID_FILE" 2>/dev/null)" 2>/dev/null; then

234+

if is_running; then

196235

echo "active"

197236

else

198237

echo "inactive"

199238

exit 3

200239

fi

201240

;;

202241

show)

203-

if [ -s "$GATEWAY_PID_FILE" ] && kill -0 "\$(cat "$GATEWAY_PID_FILE" 2>/dev/null)" 2>/dev/null; then

204-

pid="\$(cat "$GATEWAY_PID_FILE")"

205-

echo "ActiveState=active"

206-

echo "SubState=running"

207-

echo "MainPID=\$pid"

208-

echo "ExecMainStatus=0"

209-

echo "ExecMainCode=0"

242+

if is_running; then

243+

printf 'ActiveState=active\nSubState=running\nMainPID=%s\nExecMainStatus=0\nExecMainCode=0\n' "\$(cat "$GATEWAY_PID_FILE")"

210244

else

211-

echo "ActiveState=inactive"

212-

echo "SubState=dead"

213-

echo "MainPID=0"

214-

echo "ExecMainStatus=0"

215-

echo "ExecMainCode=0"

245+

printf 'ActiveState=inactive\nSubState=dead\nMainPID=0\nExecMainStatus=0\nExecMainCode=0\n'

216246

fi

217247

;;

218248

*)

219-

echo "systemctl shim: ignoring: \$*"

249+

echo "systemctl shim: unsupported command: \$*" >&2

250+

exit 1

220251

;;

221252

esac

222253

SHIMEOF

@@ -226,9 +257,12 @@ echo "systemctl shim installed."

226257

# Now install the gateway service using node-A.

227258

echo "Installing gateway service..."

228259

mkdir -p "$(dirname "$GATEWAY_UNIT_PATH")"

229-

# gateway install may exit non-zero because our systemctl shim cannot fully

230-

# restart, but the unit file gets written before the restart step.

231-

openclaw gateway install --json >"$ARTIFACTS/gateway-install.json" 2>"$ARTIFACTS/gateway-install.err" || true

260+

if ! openclaw gateway install --json >"$ARTIFACTS/gateway-install.json" 2>"$ARTIFACTS/gateway-install.err"; then

261+

echo "FAIL: gateway install failed before update"

262+

cat "$ARTIFACTS/gateway-install.json" 2>/dev/null || true

263+

cat "$ARTIFACTS/gateway-install.err" 2>/dev/null || true

264+

exit 1

265+

fi

232266233267

echo ""

234268

echo "── Step 4: Inspect what node path was baked into the service ──"

@@ -268,6 +302,10 @@ echo "process.execPath will be: $(node -e "console.log(process.execPath)")"

268302

echo ""

269303

echo "── Step 6: Run openclaw update (this is the bug) ──"

270304305+

UPDATE_FAILED=0

306+

GATEWAY_START_FAILED=0

307+

GATEWAY_HEALTH_FAILED=0

308+271309

# Run the update WITH restart so that the update flow re-runs

272310

# `gateway install --force` and bakes the current process.execPath

273311

# (now node-B) into the service unit. This is where the split happens.

@@ -281,9 +319,12 @@ echo ""

281319

echo "Update exit code: $UPDATE_EXIT"

282320

echo "Update stderr (if any):"

283321

cat "$ARTIFACTS/update.err" 2>/dev/null | tail -10 || true

322+

if [ "$UPDATE_EXIT" -ne 0 ]; then

323+

UPDATE_FAILED=1

324+

fi

284325285-

# The update may fail during restart (systemctl shim limitations) but it must

286-

# have at least attempted the package install. Check that it ran past early exit.

326+

# Keep inspecting after a non-zero update so the log shows whether the unit was

327+

# rewritten, but fail immediately if update never reached the service refresh.

287328

if [ "$UPDATE_EXIT" -ne 0 ] && ! grep -q "gateway" "$ARTIFACTS/update.err" 2>/dev/null; then

288329

echo "FAIL: openclaw update failed before reaching the package install step"

289330

cat "$ARTIFACTS/update.err" 2>/dev/null || true

@@ -364,22 +405,35 @@ echo "── Step 9: Try starting the gateway with the post-update unit ──"

364405

GATEWAY_START_FAILED=0

365406

if [ -f "$GATEWAY_UNIT_PATH" ]; then

366407

systemctl restart 2>&1 || true

367-

sleep 3

368-

if [ -s "$GATEWAY_PID_FILE" ] && kill -0 "$(cat "$GATEWAY_PID_FILE" 2>/dev/null)" 2>/dev/null; then

369-

echo "OK: Gateway started (pid $(cat "$GATEWAY_PID_FILE"))"

370-

# Try a health probe.

371-

if openclaw gateway status --json >"$ARTIFACTS/status.json" 2>&1; then

372-

echo "OK: Gateway status probe succeeded"

373-

else

374-

echo "WARNING: Gateway status probe failed"

375-

fi

376-

# Stop it.

377-

kill "$(cat "$GATEWAY_PID_FILE")" 2>/dev/null || true

408+

if PORT=18789 node <<NODE

409+

const url = "http://127.0.0.1:" + process.env.PORT + "/healthz";

410+

const deadline = Date.now() + 30000;

411+

const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));

412+

let last = "timeout";

413+

while (Date.now() < deadline) {

414+

try {

415+

const response = await fetch(url);

416+

if (response.ok) {

417+

process.exit(0);

418+

}

419+

last = "HTTP " + response.status;

420+

} catch (error) {

421+

last = error instanceof Error ? error.message : String(error);

422+

}

423+

await sleep(500);

424+

}

425+

console.error(last);

426+

process.exit(1);

427+

NODE

428+

then

429+

echo "OK: Gateway healthz probe succeeded"

378430

else

379-

echo "BUG: Gateway failed to start with the post-update unit"

380-

cat "$GATEWAY_DAEMON_LOG" 2>/dev/null | tail -20 || true

431+

echo "BUG: Gateway healthz probe failed with the post-update unit"

381432

GATEWAY_START_FAILED=1

433+

GATEWAY_HEALTH_FAILED=1

434+

cat "$GATEWAY_DAEMON_LOG" 2>/dev/null | tail -20 || true

382435

fi

436+

systemctl stop 2>&1 || true

383437

fi

384438385439

echo ""

@@ -403,9 +457,15 @@ if [ -f "$GATEWAY_UNIT_PATH" ]; then

403457

EXIT_CODE=1

404458

fi

405459

fi

460+

if [ "$UPDATE_FAILED" -ne 0 ]; then

461+

EXIT_CODE=1

462+

fi

406463

if [ "$GATEWAY_START_FAILED" -ne 0 ]; then

407464

EXIT_CODE=1

408465

fi

466+

if [ "$GATEWAY_HEALTH_FAILED" -ne 0 ]; then

467+

EXIT_CODE=1

468+

fi

409469

exit $EXIT_CODE

410470

' || CONTAINER_EXIT=$?

411471