feat: add plugin marketplace renderer

This commit is contained in:
2026-08-28 18:41:23 +08:00
parent 8b6824a8ba
commit 97c9ad1aad
27 changed files with 1585 additions and 23 deletions

View File

@@ -57,6 +57,7 @@ export type CodingPluginProject = {
schemaVersion: 1;
project: { localProjectId: string; durableProjectId: string | null };
policyStatus: PluginPolicyStatus;
unknownPluginIds: string[];
items: CodingPluginItem[];
};
@@ -181,8 +182,8 @@ function pluginItem(value: unknown): CodingPluginItem {
export function parseCodingPluginProject(value: unknown): CodingPluginProject {
const source = record(value, 'plugin project');
exact(source, ['schemaVersion', 'project', 'policyStatus', 'items'], 'plugin project');
if (source.schemaVersion !== 1 || !Array.isArray(source.items)) throw new Error('plugin project schema is invalid');
exact(source, ['schemaVersion', 'project', 'policyStatus', 'unknownPluginIds', 'items'], 'plugin project');
if (source.schemaVersion !== 1 || !Array.isArray(source.items) || !Array.isArray(source.unknownPluginIds)) throw new Error('plugin project schema is invalid');
const project = record(source.project, 'project'); exact(project, ['localProjectId', 'durableProjectId'], 'project');
const policyStatus = string(source.policyStatus, 'policyStatus', 16) as PluginPolicyStatus;
if (!['current', 'stale', 'unavailable'].includes(policyStatus)) throw new Error('policyStatus is invalid');
@@ -190,6 +191,7 @@ export function parseCodingPluginProject(value: unknown): CodingPluginProject {
schemaVersion: 1,
project: { localProjectId: string(project.localProjectId, 'project.localProjectId', 128), durableProjectId: project.durableProjectId === null ? null : string(project.durableProjectId, 'project.durableProjectId', 128) },
policyStatus,
unknownPluginIds: source.unknownPluginIds.map((id) => string(id, 'unknown plugin id', 128)),
items: source.items.map(pluginItem),
};
}