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

推荐订阅源

Blog — PlanetScale
Blog — PlanetScale
Y
Y Combinator Blog
G
Google Developers Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
L
LangChain Blog
S
SegmentFault 最新的问题
J
Java Code Geeks
V
Visual Studio Blog
H
Help Net Security
Stack Overflow Blog
Stack Overflow Blog
aimingoo的专栏
aimingoo的专栏
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
Tailwind CSS Blog
Microsoft Azure Blog
Microsoft Azure Blog
博客园_首页
H
Hackread – Cybersecurity News, Data Breaches, AI and More
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - Franky
B
Blog RSS Feed
The Cloudflare Blog
MyScale Blog
MyScale Blog
月光博客
月光博客
Microsoft Security Blog
Microsoft Security 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
build: prepare external plugin beta publishing · openclaw...
steipete · 2026-05-02 · via Recent Commits to openclaw:main

@@ -73,6 +73,11 @@ export type PluginReleasePlan = {

7373

skippedPublished: PluginReleasePlanItem[];

7474

};

757576+

export type ClawHubPublishablePluginPackageFilters = {

77+

extensionIds?: readonly string[];

78+

packageNames?: readonly string[];

79+

};

80+7681

const CLAWHUB_DEFAULT_REGISTRY = "https://clawhub.ai";

7782

const SAFE_EXTENSION_ID_RE = /^[a-z0-9][a-z0-9._-]*$/;

7883

const CLAWHUB_SHARED_RELEASE_INPUT_PATHS = [

@@ -101,12 +106,24 @@ function getRegistryBaseUrl(explicit?: string) {

101106102107

export function collectClawHubPublishablePluginPackages(

103108

rootDir = resolve("."),

109+

filters: ClawHubPublishablePluginPackageFilters = {},

104110

): PublishablePluginPackage[] {

105111

const publishable: PublishablePluginPackage[] = [];

106112

const validationErrors: string[] = [];

113+

const selectedExtensionIds = new Set(filters.extensionIds ?? []);

114+

const selectedPackageNames = new Set(filters.packageNames ?? []);

115+

const hasSelectedExtensionIds = Array.isArray(filters.extensionIds);

116+

const hasSelectedPackageNames = Array.isArray(filters.packageNames);

107117108118

for (const candidate of collectExtensionPackageJsonCandidates(rootDir)) {

109119

const { extensionId, packageDir, packageJson } = candidate;

120+

if (hasSelectedExtensionIds && !selectedExtensionIds.has(extensionId)) {

121+

continue;

122+

}

123+

const packageName = packageJson.name?.trim() ?? "";

124+

if (hasSelectedPackageNames && !selectedPackageNames.has(packageName)) {

125+

continue;

126+

}

110127

if (packageJson.openclaw?.release?.publishToClawHub !== true) {

111128

continue;

112129

}

@@ -147,7 +164,7 @@ export function collectClawHubPublishablePluginPackages(

147164

publishable.push({

148165

extensionId,

149166

packageDir,

150-

packageName: packageJson.name!.trim(),

167+

packageName,

151168

version,

152169

channel: parsedVersion.channel,

153170

publishTag: parsedVersion.channel === "beta" ? "beta" : "latest",

@@ -342,13 +359,29 @@ export async function collectPluginClawHubReleasePlan(params?: {

342359

registryBaseUrl?: string;

343360

fetchImpl?: typeof fetch;

344361

}): Promise<PluginReleasePlan> {

345-

const allPublishable = collectClawHubPublishablePluginPackages(params?.rootDir);

362+

const rootDir = params?.rootDir;

363+

const selection = params?.selection ?? [];

364+

const changedPaths = params?.gitRange

365+

? collectPluginClawHubRelevantPathsFromGitRange({

366+

rootDir,

367+

gitRange: params.gitRange,

368+

})

369+

: [];

370+

const sharedInputChanged = hasSharedClawHubReleaseInputChanges(changedPaths);

371+

const extensionIds =

372+

params?.selectionMode === "all-publishable" || !params?.gitRange || sharedInputChanged

373+

? undefined

374+

: collectChangedExtensionIdsFromPaths(changedPaths);

375+

const allPublishable = collectClawHubPublishablePluginPackages(rootDir, {

376+

extensionIds,

377+

packageNames: selection.length > 0 ? selection : undefined,

378+

});

346379

const selectedPublishable = resolveSelectedClawHubPublishablePluginPackages({

347380

plugins: allPublishable,

348-

selection: params?.selection,

381+

selection,

349382

selectionMode: params?.selectionMode,

350383

gitRange: params?.gitRange,

351-

rootDir: params?.rootDir,

384+

rootDir,

352385

});

353386354387

const all = await Promise.all(