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

推荐订阅源

腾讯CDC
N
Netflix TechBlog - Medium
aimingoo的专栏
aimingoo的专栏
P
Proofpoint News Feed
F
Fortinet All Blogs
大猫的无限游戏
大猫的无限游戏
I
InfoQ
V
V2EX
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
有赞技术团队
有赞技术团队
G
Google Developers Blog
L
LangChain Blog
博客园_首页
M
MIT News - Artificial intelligence
H
Hackread – Cybersecurity News, Data Breaches, AI and More
月光博客
月光博客
IT之家
IT之家
量子位
宝玉的分享
宝玉的分享
S
SegmentFault 最新的问题
Stack Overflow Blog
Stack Overflow Blog
V
Visual Studio Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
雷峰网
雷峰网

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
refactor(plugins): compact package json index metadata · ...
vincentkoc · 2026-04-25 · via Recent Commits to openclaw:main

@@ -87,8 +87,10 @@ export type InstalledPluginIndexRecord = {

8787

packageInstall?: PluginInstallSourceInfo;

8888

manifestPath: string;

8989

manifestHash: string;

90-

packageJsonPath?: string;

91-

packageJsonHash?: string;

90+

packageJson?: {

91+

path: string;

92+

hash: string;

93+

};

9294

rootDir: string;

9395

origin: PluginManifestRecord["origin"];

9496

enabled: boolean;

@@ -244,6 +246,30 @@ function resolvePackageJsonPath(candidate: PluginCandidate | undefined): string

244246

return fs.existsSync(packageJsonPath) ? packageJsonPath : undefined;

245247

}

246248249+

function resolvePackageJsonRecord(params: {

250+

candidate: PluginCandidate | undefined;

251+

packageJsonPath: string | undefined;

252+

diagnostics: PluginDiagnostic[];

253+

pluginId: string;

254+

}): InstalledPluginIndexRecord["packageJson"] | undefined {

255+

if (!params.candidate?.packageDir || !params.packageJsonPath) {

256+

return undefined;

257+

}

258+

const hash = safeHashFile({

259+

filePath: params.packageJsonPath,

260+

pluginId: params.pluginId,

261+

diagnostics: params.diagnostics,

262+

required: false,

263+

});

264+

if (!hash) {

265+

return undefined;

266+

}

267+

return {

268+

path: path.relative(params.candidate.rootDir, params.packageJsonPath) || "package.json",

269+

hash,

270+

};

271+

}

272+247273

function describePackageInstallSource(

248274

candidate: PluginCandidate | undefined,

249275

): PluginInstallSourceInfo | undefined {

@@ -416,14 +442,12 @@ function buildInstalledPluginIndex(

416442

diagnostics,

417443

required: true,

418444

}) ?? "";

419-

const packageJsonHash = packageJsonPath

420-

? safeHashFile({

421-

filePath: packageJsonPath,

422-

pluginId: record.id,

423-

diagnostics,

424-

required: false,

425-

})

426-

: undefined;

445+

const packageJson = resolvePackageJsonRecord({

446+

candidate,

447+

packageJsonPath,

448+

diagnostics,

449+

pluginId: record.id,

450+

});

427451

const enabled = resolveEffectiveEnableState({

428452

id: record.id,

429453

origin: record.origin,

@@ -457,11 +481,8 @@ function buildInstalledPluginIndex(

457481

if (packageInstall) {

458482

indexRecord.packageInstall = packageInstall;

459483

}

460-

if (packageJsonPath) {

461-

indexRecord.packageJsonPath = packageJsonPath;

462-

}

463-

if (packageJsonHash) {

464-

indexRecord.packageJsonHash = packageJsonHash;

484+

if (packageJson) {

485+

indexRecord.packageJson = packageJson;

465486

}

466487

return indexRecord;

467488

});

@@ -698,7 +719,8 @@ export function diffInstalledPluginIndexInvalidationReasons(

698719

}

699720

if (

700721

previousPlugin.packageVersion !== currentPlugin.packageVersion ||

701-

previousPlugin.packageJsonHash !== currentPlugin.packageJsonHash

722+

previousPlugin.packageJson?.path !== currentPlugin.packageJson?.path ||

723+

previousPlugin.packageJson?.hash !== currentPlugin.packageJson?.hash

702724

) {

703725

reasons.add("stale-package");

704726

}