fix(marketplace): preserve release sync semantics

This commit is contained in:
2026-08-29 14:17:39 +08:00
parent d04b031040
commit 227b8214a8
8 changed files with 270 additions and 14 deletions

View File

@@ -46,6 +46,7 @@ export type PluginUnavailableReasonCode =
| 'client_incompatible'
| 'project_disabled'
| 'skill_unassigned'
| 'skill_owner_conflict'
| 'runtime_suspended'
| 'policy_unavailable'
| 'policy_unsupported'
@@ -301,7 +302,14 @@ export class EffectivePluginResolver {
}
for (const { definition, installed, unavailableReason } of definitions) {
if (blockedMarketplacePlugins.has(definition.id)) continue;
if (blockedMarketplacePlugins.has(definition.id)) {
unavailableReasons.push(unavailable(
definition.id,
'skill_owner_conflict',
'Plugin Skill ID conflicts with an existing owner',
));
continue;
}
const selectedSkills = definition.skills.filter(({ id }) => assigned.includes(id));
if (selectedSkills.length === 0) {
unavailableReasons.push(unavailable(definition.id, 'skill_unassigned', 'Plugin Skill is not assigned'));
@@ -331,7 +339,7 @@ export class EffectivePluginResolver {
unavailableReasons.push(unavailable(definition.id, 'account_required', 'Marketplace account is required'));
continue;
}
if (!library || library.stale) {
if (!library || (library.stale && definition.runtimeKind !== 'skill_only')) {
unavailableReasons.push(unavailable(definition.id, 'library_unavailable', 'Marketplace Library is unavailable'));
continue;
}