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

推荐订阅源

F
Full Disclosure
Recorded Future
Recorded Future
T
Tenable Blog
S
Securelist
C
CERT Recently Published Vulnerability Notes
T
Threatpost
S
Schneier on Security
A
Arctic Wolf
The Hacker News
The Hacker News
C
CXSECURITY Database RSS Feed - CXSecurity.com
Know Your Adversary
Know Your Adversary
P
Privacy International News Feed
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
The Register - Security
The Register - Security
Cisco Talos Blog
Cisco Talos Blog
AWS News Blog
AWS News Blog
K
Kaspersky official blog
T
True Tiger Recordings
T
Threat Research - Cisco Blogs
V
Vulnerabilities – Threatpost
P
Palo Alto Networks Blog
T
The Exploit Database - CXSecurity.com
小众软件
小众软件
B
Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Microsoft Azure Blog
Microsoft Azure Blog
Cyberwarzone
Cyberwarzone
C
Cybersecurity and Infrastructure Security Agency CISA
T
Tor Project blog
Spread Privacy
Spread Privacy
Malwarebytes
Malwarebytes
P
Proofpoint News Feed
F
Fox-IT International blog
F
Fortinet All Blogs
P
Privacy & Cybersecurity Law Blog
G
GRAHAM CLULEY
量子位
Latest news
Latest news
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 叶小钗
Project Zero
Project Zero
T
Tailwind CSS Blog
N
Netflix TechBlog - Medium
Martin Fowler
Martin Fowler
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
I
Intezer
博客园_首页
腾讯CDC
H
Hackread – Cybersecurity News, Data Breaches, AI and More
D
Darknet – Hacking Tools, Hacker News & Cyber Security

Recent Commits to openclaw:main

fix(hooks): enforce default hook agent allowlist · openclaw/openclaw@e72621e fix(e2e): handle docker helper cli help · openclaw/openclaw@2814ab6 fix(codex): avoid native compaction on budget triggers (#86772) · openclaw/openclaw@eb8f9b4 test: speed up plugin test fixtures · openclaw/openclaw@05ff771 fix(e2e): bound openai chat tools client · openclaw/openclaw@de94217 fix(e2e): bound upgrade survivor probes · openclaw/openclaw@981ae13 fix(doctor): keep hooks model checks read-only (#86101) · openclaw/openclaw@371c4d6 fix(installer): tighten nonroot smoke node preflight · openclaw/openclaw@340f480 fix(e2e): bound HTTP readiness probes · openclaw/openclaw@d58f864 fix(daemon): keep node tasks off gateway listener cleanup · openclaw/openclaw@a4e0b6e perf(gateway): reuse prepared auth stores · openclaw/openclaw@d2711c9 test: speed up codex app server run attempts · openclaw/openclaw@1ce3637 build(codex): update Codex CLI to 0.134.0 · openclaw/openclaw@231a812 docs(skills): omit advisory ids from changelog notes · openclaw/openclaw@989a369 test: speed up test project routing · openclaw/openclaw@140892c Fix stale approval prompts in Control UI (#86270) · openclaw/openclaw@5297eeb test: harden e2e harness isolation · openclaw/openclaw@acbb06e fix: keep approval runtime token local-only · openclaw/openclaw@96c5766 perf(gateway): defer skipped-channel sidecars · openclaw/openclaw@145b57c docs(changelog): omit advisory id from release notes · openclaw/openclaw@d606881 docs(changelog): refresh 2026.5.26 notes · openclaw/openclaw@26c0c19 docs(skills): add release changelog update workflow · openclaw/openclaw@c8d20ae fix(e2e): bound upgrade survivor cli checks · openclaw/openclaw@c965b3a test: speed up doctor config flow tests · openclaw/openclaw@5177180 fix(events): sanitize queued system markers (#87094) · openclaw/openclaw@c1151ea fix(gateway): remove redundant unknown union · openclaw/openclaw@f393ebe test: speed up model fallback tests · openclaw/openclaw@e7f644c fix(imessage): stage remote media before understanding · openclaw/openclaw@ae52be9 fix(gateway): drop stale subagent announce history · openclaw/openclaw@982e888 fix: repair local approval resolution (#86771) · openclaw/openclaw@13cfb77 fix(e2e): bound codex media plugin setup · openclaw/openclaw@f89fcdd fix(gateway): stop chat timeout fallback cascade · openclaw/openclaw@b4f6928 perf(gateway): defer scheduled service imports · openclaw/openclaw@b74cd69 test: speed up capability cli tests · openclaw/openclaw@0126aba perf(gateway): defer startup warning fallback imports · openclaw/openclaw@0ee4ccf fix(gateway): bound watch regression teardown · openclaw/openclaw@7014bd0 fix(codex): keep WebChat delivery hints out of user requests · openclaw/openclaw@0cfccdb test: type current plugin metadata snapshot mock · openclaw/openclaw@a43cf2b test: align WebChat delivery hint expectations · openclaw/openclaw@1242931 test: speed up command secret gateway tests · openclaw/openclaw@657f9d1 fix(status): show explicit fast mode state (#87115) · openclaw/openclaw@41962ed fix: preserve plugin LLM command auth (#85936) · openclaw/openclaw@9119492 test: align loopback prompt metadata · openclaw/openclaw@f7a39f4 perf(gateway): reuse metadata for startup warnings · openclaw/openclaw@166097e fix(plugin-sdk): stabilize diagnostic event root alias · openclaw/openclaw@53f36a8 fix(tui): queue prompts submitted while busy (#86722) · openclaw/openclaw@6842d72 test: speed up tooling tests · openclaw/openclaw@f34a527 fix(plugin-sdk): use Function.name to find onDiagnosticEvent export (… · openclaw/openclaw@b3f8a0e Suppress transient runner failures in channels (#87069) · openclaw/openclaw@df6ec28 fix(e2e): bound telegram live hot path · openclaw/openclaw@698c40e test: speed up crabbox wrapper tests · openclaw/openclaw@5aaad5f refactor(telegram): encode conversation binding mode · openclaw/openclaw@df659d1 fix(agents): correlate pathless read diagnostics (#86977) · openclaw/openclaw@cecb076 perf: trim gateway session cache churn · openclaw/openclaw@cdfb1b4 test: speed up update cli tests · openclaw/openclaw@9065377 fix(doctor): map runtime tool schema health · openclaw/openclaw@27ad3d7 fix(e2e): bound update channel CLI checks · openclaw/openclaw@8fa5ecb test: speed up run-node tests · openclaw/openclaw@c8364b4 fix(browser): validate current tab before snapshots (#78526) · openclaw/openclaw@0604700 fix(media): require staged sandbox media refs · openclaw/openclaw@42d6cf6 perf: trim gateway startup planning · openclaw/openclaw@8d6b599 fix(codex): quarantine unsupported dynamic tool schemas · openclaw/openclaw@d7d037b fix(e2e): bound package cli scenarios · openclaw/openclaw@d0cb7ba ci: prepare pnpm for crabbox hydrate · openclaw/openclaw@716d719 fix(e2e): bound kitchen sink gateway teardown · openclaw/openclaw@81d22e8 test: speed up test routing and parallels smoke tests · openclaw/openclaw@9754117 fix(onboard): preserve configured default model (#87000) · openclaw/openclaw@5304682 fix(telegram): route plugin-bound topic messages · openclaw/openclaw@b8ea6d2 fix(gateway): bound benchmark teardown waits · openclaw/openclaw@1baab3b fix(diagnostics): recover orphaned session activity · openclaw/openclaw@286964c perf: avoid redundant runtime postbuild sync · openclaw/openclaw@a67ee0f fix(media): resolve inbound media refs consistently · openclaw/openclaw@6290ed5 fix(e2e): bound logged onboard commands · openclaw/openclaw@b74984d fix(ollama): normalize greedy top_p (#87049) · openclaw/openclaw@dfadc7b test: speed up crabbox wrapper tests · openclaw/openclaw@1954468 test: speed up crabbox config shim · openclaw/openclaw@1d2bf82 clickclack: enforce inbound sender allowlist [AI] (#83741) · openclaw/openclaw@10546e5 fix: isolate chat transcript fallback failures · openclaw/openclaw@fafed25 refactor: centralize prepared user turn merge · openclaw/openclaw@481f432 fix: preserve inline image routing with staged media · openclaw/openclaw@9263e38 test: wait for initial session task cleanup · openclaw/openclaw@00ab2f2 fix: keep user turn replay hooks idempotent · openclaw/openclaw@91cb042 refactor: carry prepared user turns on recorder · openclaw/openclaw@44bdc52 fix: preserve provenance through user turn hooks · openclaw/openclaw@223655d fix: use cleaned user turn transcript text · openclaw/openclaw@b9c2590 fix: preserve user turn provenance metadata · openclaw/openclaw@2e8f1d4 fix: keep user turn enrichment off dispatch · openclaw/openclaw@c862143 refactor: trim user turn transcript API · openclaw/openclaw@8bbd4ba fix: mark final codex mirror user persistence · openclaw/openclaw@2bd38da fix: resolve final codex mirror prompt · openclaw/openclaw@c0f8224 fix: use selected user transcript text · openclaw/openclaw@e4c42ae fix: restore user turn persistence checks · openclaw/openclaw@696fb41 fix: persist cli user turns to admitted session target · openclaw/openclaw@d55fe4b refactor: trim duplicated transcript tests · openclaw/openclaw@fe44ecd test: trim duplicate user turn persistence coverage · openclaw/openclaw@ffb8350 refactor: remove duplicate user turn handoff · openclaw/openclaw@20d7bf7 refactor: drop unused user turn update mode · openclaw/openclaw@848c389 fix(filefetch): wrap fetched text as external content (#87062) · openclaw/openclaw@42b8898 fix(ci): satisfy script oxlint sort rule · openclaw/openclaw@ffe1213 ci: tolerate gateway status help probe hangs
fix(installer): reject stale cli node runtimes · openclaw/openclaw@49d605e
vincentkoc · 2026-05-27 · via Recent Commits to openclaw:main

@@ -557,6 +557,173 @@ describe("install-cli.sh", () => {

557557

}

558558

});

559559560+

it("replaces cached generic Node runtimes below the runtime floor", () => {

561+

const tmp = mkdtempSync(join(tmpdir(), "openclaw-install-cli-generic-stale-node-"));

562+

const prefix = join(tmp, "prefix");

563+

const nodePrefixBin = join(prefix, "tools", "node-v22.22.0", "bin");

564+

const staleNode = join(nodePrefixBin, "node");

565+

const staleNpm = join(nodePrefixBin, "npm");

566+

const newNode = join(tmp, "new-node");

567+

const newNpm = join(tmp, "new-npm");

568+569+

mkdirSync(nodePrefixBin, { recursive: true });

570+

writeFileSync(

571+

staleNode,

572+

[

573+

"#!/bin/bash",

574+

'if [[ "${1:-}" == "-v" ]]; then',

575+

" printf 'v22.18.0\\n'",

576+

" exit 0",

577+

"fi",

578+

'if [[ "${1:-}" == "-e" ]]; then',

579+

" exit 0",

580+

"fi",

581+

"exit 0",

582+

"",

583+

].join("\n"),

584+

);

585+

writeFileSync(staleNpm, ["#!/bin/bash", "exit 0", ""].join("\n"));

586+

writeFileSync(

587+

newNode,

588+

[

589+

"#!/bin/bash",

590+

'if [[ "${1:-}" == "-v" ]]; then',

591+

" printf 'v22.22.0\\n'",

592+

" exit 0",

593+

"fi",

594+

'if [[ "${1:-}" == "-e" ]]; then',

595+

" exit 0",

596+

"fi",

597+

"exit 0",

598+

"",

599+

].join("\n"),

600+

);

601+

writeFileSync(newNpm, ["#!/bin/bash", "exit 0", ""].join("\n"));

602+

chmodSync(staleNode, 0o755);

603+

chmodSync(staleNpm, 0o755);

604+

chmodSync(newNode, 0o755);

605+

chmodSync(newNpm, 0o755);

606+607+

try {

608+

const result = runInstallCliShell(

609+

[

610+

"set -euo pipefail",

611+

`cd ${JSON.stringify(process.cwd())}`,

612+

`source ${JSON.stringify(SCRIPT_PATH)}`,

613+

"os_detect() { printf 'linux\\n'; }",

614+

"arch_detect() { printf 'x64\\n'; }",

615+

"is_musl_linux() { return 1; }",

616+

"detect_downloader() { :; }",

617+

"require_bin() { :; }",

618+

"download_file() {",

619+

' case "$1" in',

620+

" */SHASUMS256.txt) printf 'fixture-sha node-v22.22.0-linux-x64.tar.gz\\n' > \"$2\" ;;",

621+

" *) printf 'node tarball fixture\\n' > \"$2\" ;;",

622+

" esac",

623+

"}",

624+

"sha256_file() { printf 'fixture-sha\\n'; }",

625+

"tar() {",

626+

" local dest=''",

627+

" while [[ $# -gt 0 ]]; do",

628+

' if [[ "$1" == \'-C\' ]]; then dest="$2"; shift 2; else shift; fi',

629+

" done",

630+

' mkdir -p "$dest/bin"',

631+

' cp "$NEW_NODE" "$dest/bin/node"',

632+

' cp "$NEW_NPM" "$dest/bin/npm"',

633+

"}",

634+

`PREFIX=${JSON.stringify(prefix)}`,

635+

"NODE_VERSION=22.22.0",

636+

"NODE_VERSION_REQUESTED=1",

637+

"install_node",

638+

].join("\n"),

639+

{

640+

NEW_NODE: newNode,

641+

NEW_NPM: newNpm,

642+

},

643+

);

644+645+

expect(result.status).toBe(0);

646+

expect(result.stdout).toContain("Installing Node 22.22.0 (user-space)");

647+

expect(result.stdout).not.toContain('"status":"skip"');

648+

expect(readFileSync(staleNode, "utf8")).toContain("v22.22.0");

649+

} finally {

650+

rmSync(tmp, { force: true, recursive: true });

651+

}

652+

});

653+654+

it("rejects downloaded generic Node runtimes below the runtime floor", () => {

655+

const tmp = mkdtempSync(join(tmpdir(), "openclaw-install-cli-generic-old-node-"));

656+

const prefix = join(tmp, "prefix");

657+

const newNode = join(tmp, "new-node");

658+

const newNpm = join(tmp, "new-npm");

659+660+

writeFileSync(

661+

newNode,

662+

[

663+

"#!/bin/bash",

664+

'if [[ "${1:-}" == "-v" ]]; then',

665+

" printf 'v22.18.0\\n'",

666+

" exit 0",

667+

"fi",

668+

'if [[ "${1:-}" == "-e" ]]; then',

669+

" exit 0",

670+

"fi",

671+

"exit 0",

672+

"",

673+

].join("\n"),

674+

);

675+

writeFileSync(newNpm, ["#!/bin/bash", "exit 0", ""].join("\n"));

676+

chmodSync(newNode, 0o755);

677+

chmodSync(newNpm, 0o755);

678+679+

try {

680+

const result = runInstallCliShell(

681+

[

682+

"set -euo pipefail",

683+

`cd ${JSON.stringify(process.cwd())}`,

684+

`source ${JSON.stringify(SCRIPT_PATH)}`,

685+

"os_detect() { printf 'linux\\n'; }",

686+

"arch_detect() { printf 'x64\\n'; }",

687+

"is_musl_linux() { return 1; }",

688+

"detect_downloader() { :; }",

689+

"require_bin() { :; }",

690+

"download_file() {",

691+

' case "$1" in',

692+

" */SHASUMS256.txt) printf 'fixture-sha node-v22.18.0-linux-x64.tar.gz\\n' > \"$2\" ;;",

693+

" *) printf 'node tarball fixture\\n' > \"$2\" ;;",

694+

" esac",

695+

"}",

696+

"sha256_file() { printf 'fixture-sha\\n'; }",

697+

"tar() {",

698+

" local dest=''",

699+

" while [[ $# -gt 0 ]]; do",

700+

' if [[ "$1" == \'-C\' ]]; then dest="$2"; shift 2; else shift; fi',

701+

" done",

702+

' mkdir -p "$dest/bin"',

703+

' cp "$NEW_NODE" "$dest/bin/node"',

704+

' cp "$NEW_NPM" "$dest/bin/npm"',

705+

"}",

706+

`PREFIX=${JSON.stringify(prefix)}`,

707+

"NODE_VERSION=22.18.0",

708+

"NODE_VERSION_REQUESTED=1",

709+

"install_node",

710+

].join("\n"),

711+

{

712+

NEW_NODE: newNode,

713+

NEW_NPM: newNpm,

714+

},

715+

);

716+717+

expect(result.status).toBe(1);

718+

expect(result.stdout).toContain(

719+

"Installed Node 22.18.0 must provide Node >= 22.19.0 with node:sqlite",

720+

);

721+

expect(result.stdout).toContain("found v22.18.0");

722+

} finally {

723+

rmSync(tmp, { force: true, recursive: true });

724+

}

725+

});

726+560727

it("clears npm freshness filters for package installs", () => {

561728

expect(script).toContain('freshness_flag="--min-release-age=0"');

562729

expect(script).toContain('npm_config_has_raw_key "$(npm_bin)" "min-release-age"');