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

推荐订阅源

S
SegmentFault 最新的问题
爱范儿
爱范儿
博客园 - 三生石上(FineUI控件)
Microsoft Security Blog
Microsoft Security Blog
Google DeepMind News
Google DeepMind News
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
GbyAI
GbyAI
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
V
V2EX
酷 壳 – CoolShell
酷 壳 – CoolShell
量子位
博客园_首页
T
Tailwind CSS Blog
aimingoo的专栏
aimingoo的专栏
A
About on SuperTechFans
T
The Blog of Author Tim Ferriss
Stack Overflow Blog
Stack Overflow Blog
Recent Announcements
Recent Announcements
P
Proofpoint News Feed
博客园 - 司徒正美
有赞技术团队
有赞技术团队
Engineering at Meta
Engineering at Meta
Last Week in AI
Last Week in AI
MongoDB | Blog
MongoDB | Blog

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
test: guard broad plugin resolver fixtures · openclaw/ope...
steipete · 2026-04-29 · via Recent Commits to openclaw:main

@@ -9,6 +9,12 @@ const ALLOWED_EXTENSION_PUBLIC_SURFACE_BASENAMES = new Set(

99

GUARDED_EXTENSION_PUBLIC_SURFACE_BASENAMES,

1010

);

1111

const CHANNEL_CONTRACT_TEST_HELPERS_PREFIX = "src/channels/plugins/contracts/test-helpers/";

12+

const BUNDLED_PLUGIN_RESOLVER_TEST_FILES = [

13+

"src/plugin-sdk/facade-loader.test.ts",

14+

"src/plugins/public-surface-loader.test.ts",

15+

"src/plugins/public-surface-runtime.test.ts",

16+

] as const;

17+

const BROAD_PUBLIC_SOURCE_ARTIFACT_BASENAMES = new Set(["api.js", "runtime-api.js"]);

1218

const ROOTDIR_BOUNDARY_CANARY_RE =

1319

/(^|\/)__rootdir_boundary_canary__\.(?:[cm]?ts|[cm]?js|tsx|jsx)$/u;

1420

@@ -93,6 +99,41 @@ function getImportBasename(importPath: string): string {

9399

return importPath.split("/").at(-1) ?? importPath;

94100

}

95101102+

function collectBundledPluginIds(): Set<string> {

103+

return new Set(

104+

fs

105+

.readdirSync(path.join(repoRoot, "extensions"), { withFileTypes: true })

106+

.filter((entry) => entry.isDirectory())

107+

.map((entry) => entry.name),

108+

);

109+

}

110+111+

function getLineNumber(source: string, index: number): number {

112+

return source.slice(0, index).split("\n").length;

113+

}

114+115+

function findRealBroadSourceApiResolverReferences(

116+

source: string,

117+

pluginIds: Set<string>,

118+

): string[] {

119+

const offenders: string[] = [];

120+

for (const match of source.matchAll(/\{[^{}]*\bdirName:\s*["'][^"']+["'][^{}]*\}/g)) {

121+

const objectLiteral = match[0];

122+

const dirName = objectLiteral.match(/\bdirName:\s*["']([^"']+)["']/)?.[1];

123+

const artifactBasename = objectLiteral.match(/\bartifactBasename:\s*["']([^"']+)["']/)?.[1];

124+

if (

125+

dirName &&

126+

artifactBasename &&

127+

pluginIds.has(dirName) &&

128+

BROAD_PUBLIC_SOURCE_ARTIFACT_BASENAMES.has(artifactBasename)

129+

) {

130+

offenders.push(`${dirName}/${artifactBasename}:${getLineNumber(source, match.index ?? 0)}`);

131+

}

132+

}

133+134+

return offenders;

135+

}

136+96137

function isAllowedCoreContractSuite(file: string, imports: readonly string[]): boolean {

97138

return (

98139

file.startsWith("src/channels/plugins/contracts/") &&

@@ -190,6 +231,18 @@ describe("non-extension test boundaries", () => {

190231

expect(offenders).toEqual([]);

191232

});

192233234+

it("keeps resolver tests on generated fixtures for broad bundled plugin source APIs", () => {

235+

const bundledPluginIds = collectBundledPluginIds();

236+

const offenders = BUNDLED_PLUGIN_RESOLVER_TEST_FILES.flatMap((file) => {

237+

const source = fs.readFileSync(path.join(repoRoot, file), "utf8");

238+

return findRealBroadSourceApiResolverReferences(source, bundledPluginIds).map(

239+

(reference) => `${file}: ${reference}`,

240+

);

241+

});

242+243+

expect(offenders).toEqual([]);

244+

});

245+193246

it("keeps bundled channel security collector coverage under extension tests", () => {

194247

const files = [...walk(path.join(repoRoot, "src")), ...walk(path.join(repoRoot, "test"))]

195248

.filter((file) => !file.startsWith(BUNDLED_PLUGIN_PATH_PREFIX))