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

推荐订阅源

博客园 - 三生石上(FineUI控件)
D
Docker
GbyAI
GbyAI
宝玉的分享
宝玉的分享
Jina AI
Jina AI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Vercel News
Vercel News
博客园_首页
Recent Announcements
Recent Announcements
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Hugging Face - Blog
Hugging Face - Blog
腾讯CDC
S
SegmentFault 最新的问题
Microsoft Security Blog
Microsoft Security Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
美团技术团队
V
V2EX
WordPress大学
WordPress大学
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
V
Visual Studio Blog
IT之家
IT之家
Apple Machine Learning Research
Apple Machine Learning Research
T
Tailwind CSS Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com

Recent Commits to openclaw:main

test: merge chat side-result checks · openclaw/openclaw@ddd2c2a test: merge cron history checks · openclaw/openclaw@f7eb746 test: merge responsive navigation shell checks · openclaw/openclaw@c2e4b47 docs(changelog): add codex oauth fixes · openclaw/openclaw@628e6cd test: merge navigation routing cases · openclaw/openclaw@5d8cecb Tests: mock channel registry bundled fallback · openclaw/openclaw@2b08233 Secrets: avoid broad web search discovery for single plugin config · openclaw/openclaw@a464f59 test: merge config view browser checks · openclaw/openclaw@20cf511 fix(status): align oauth health with runtime · openclaw/openclaw@eed7116 feat: add macOS screen snapshots for monitor preview (#67954) thanks … · openclaw/openclaw@f377db1 fix: report shared auth scopes in hello-ok (#67810) thanks @BunsDev · openclaw/openclaw@0b6c39b Auto-reply: avoid eager bundled route fallback · openclaw/openclaw@3ea1bf4 Tests: narrow session binding contract setup · openclaw/openclaw@54e4e16 fix(macOS): enable undo/redo in webchat composer text input (#34962) · openclaw/openclaw@00951dc Tests: speed up channel setup promotion · openclaw/openclaw@82b529a Docs: refresh agent instructions · openclaw/openclaw@5775fe2 fix(auth): serialize OAuth refresh across agents to fix #26322 (#67876) · openclaw/openclaw@8e79080 test: allow ollama public surface boundary test · openclaw/openclaw@7d4f1a6 Docs: add test performance guardrails · openclaw/openclaw@89706d3 Tests: restore context-engine usage proof · openclaw/openclaw@e4c4f95 Tests: slim context engine runtime coverage · openclaw/openclaw@74c198f ci: retry failed custom checkouts · openclaw/openclaw@0ee5baf test: trim duplicate provider auth onboarding cases · openclaw/openclaw@1ffc02e matrix: fix sessions_spawn --thread subagent session spawning (#67643) · openclaw/openclaw@1ce2596 test: reduce auth choice fixture churn · openclaw/openclaw@857b9cd test: mock health status config boundaries · openclaw/openclaw@9d5ab4a test: mock onboard config io boundary · openclaw/openclaw@299694d test: mock legacy state plugin boundaries · openclaw/openclaw@2713089 test: mock channel install boundaries · openclaw/openclaw@b945248 test: mock doctor preview channel boundaries · openclaw/openclaw@b1a3ad4
build: preserve staged plugin runtime deps · openclaw/ope...
steipete · 2026-04-24 · via Recent Commits to openclaw:main

@@ -885,6 +885,17 @@ function resolveRuntimeDepsStampPath(repoRoot, pluginId) {

885885

}

886886887887

function createRuntimeDepsFingerprint(packageJson, pruneConfig, params = {}) {

888+

return createHash("sha256")

889+

.update(

890+

JSON.stringify({

891+

cheapFingerprint: createRuntimeDepsCheapFingerprint(packageJson, pruneConfig, params),

892+

rootInstalledRuntimeFingerprint: params.rootInstalledRuntimeFingerprint ?? null,

893+

}),

894+

)

895+

.digest("hex");

896+

}

897+898+

function createRuntimeDepsCheapFingerprint(packageJson, pruneConfig, params = {}) {

888899

const repoRoot = params.repoRoot;

889900

const lockfilePath =

890901

typeof repoRoot === "string" && repoRoot.length > 0

@@ -901,7 +912,6 @@ function createRuntimeDepsFingerprint(packageJson, pruneConfig, params = {}) {

901912

globalPruneSuffixes: pruneConfig.globalPruneSuffixes,

902913

packageJson,

903914

pruneRules: [...pruneConfig.pruneRules.entries()],

904-

rootInstalledRuntimeFingerprint: params.rootInstalledRuntimeFingerprint ?? null,

905915

rootLockfile,

906916

version: runtimeDepsStagingVersion,

907917

}),

@@ -949,6 +959,7 @@ function removeStaleRuntimeDepsTempDirs(pluginDir) {

949959

function stageInstalledRootRuntimeDeps(params) {

950960

const {

951961

directDependencyPackageRoot = null,

962+

cheapFingerprint,

952963

fingerprint,

953964

packageJson,

954965

pluginDir,

@@ -990,6 +1001,7 @@ function stageInstalledRootRuntimeDeps(params) {

9901001

assertPathIsNotSymlink(nodeModulesDir, "remove runtime deps");

9911002

removePathIfExists(nodeModulesDir);

9921003

writeJsonAtomically(stampPath, {

1004+

cheapFingerprint,

9931005

fingerprint,

9941006

generatedAt: new Date().toISOString(),

9951007

});

@@ -1029,6 +1041,7 @@ function stageInstalledRootRuntimeDeps(params) {

1029104110301042

replaceDirAtomically(nodeModulesDir, stagedNodeModulesDir);

10311043

writeJsonAtomically(stampPath, {

1044+

cheapFingerprint,

10321045

fingerprint,

10331046

generatedAt: new Date().toISOString(),

10341047

});

@@ -1078,6 +1091,7 @@ function createRootRuntimeStagingError(params) {

10781091

function installPluginRuntimeDeps(params) {

10791092

const {

10801093

directDependencyPackageRoot = null,

1094+

cheapFingerprint,

10811095

fingerprint,

10821096

packageJson,

10831097

pluginDir,

@@ -1120,6 +1134,7 @@ function installPluginRuntimeDeps(params) {

11201134

removePathIfExists(nodeModulesDir);

11211135

}

11221136

writeJsonAtomically(stampPath, {

1137+

cheapFingerprint,

11231138

fingerprint,

11241139

generatedAt: new Date().toISOString(),

11251140

});

@@ -1151,6 +1166,10 @@ export function stageBundledPluginRuntimeDeps(params = {}) {

11511166

removePathIfExists(stampPath);

11521167

continue;

11531168

}

1169+

const cheapFingerprint = createRuntimeDepsCheapFingerprint(packageJson, pruneConfig, {

1170+

repoRoot,

1171+

});

1172+

const stamp = readRuntimeDepsStamp(stampPath);

11541173

const rootInstalledRuntimeFingerprint = resolveInstalledRuntimeClosureFingerprint({

11551174

directDependencyPackageRoot,

11561175

packageJson,

@@ -1160,14 +1179,14 @@ export function stageBundledPluginRuntimeDeps(params = {}) {

11601179

repoRoot,

11611180

rootInstalledRuntimeFingerprint,

11621181

});

1163-

const stamp = readRuntimeDepsStamp(stampPath);

11641182

if (fs.existsSync(nodeModulesDir) && stamp?.fingerprint === fingerprint) {

11651183

continue;

11661184

}

11671185

if (

11681186

stageInstalledRootRuntimeDeps({

11691187

directDependencyPackageRoot,

11701188

fingerprint,

1189+

cheapFingerprint,

11711190

packageJson,

11721191

pluginDir,

11731192

pruneConfig,

@@ -1184,6 +1203,7 @@ export function stageBundledPluginRuntimeDeps(params = {}) {

11841203

installParams: {

11851204

directDependencyPackageRoot,

11861205

fingerprint,

1206+

cheapFingerprint,

11871207

packageJson,

11881208

pluginDir,

11891209

pluginId,