diff --git a/.repository-projection.json b/.repository-projection.json index 3ff4ddc..09ca1e9 100644 --- a/.repository-projection.json +++ b/.repository-projection.json @@ -3,11 +3,11 @@ "projection": "api", "projectionSchemaVersion": 1, "sourceRepository": "dx-corp/mono", - "sourceSha": "4578fdbb3924d7849d48c45a7ed814c4c2e2e947", + "sourceSha": "abf65a86e4464171aa4d209c57a99378afb6ab17", "destinationRepository": "dx-corp/api", - "priorProjectedBase": "71c8502e93165c8c76945b171f606a1e859d5b25", + "priorProjectedBase": "728cbac4a8239a6009c223f8ba8fdd286bb64f9b", "definitionDigest": "4c1601bee99ccc8305013324608e9c146999b21427179d25fd342f69aebd37bd", "toolDigest": "61f64178999b764105e6e5c5bc7c5971c164909e", - "contentDigest": "d5458c14599c110b7ee2c7b14eb8b74cbf17a4abd9a5d203c2452c1403a6ee76", + "contentDigest": "3560bcffb777cb88d8be7178fbbff2000774deaf7aac9103a599f6aa6a4b3101", "publicationEligible": true } diff --git a/scripts/distribution-validation.mjs b/scripts/distribution-validation.mjs index a625164..b91b607 100644 --- a/scripts/distribution-validation.mjs +++ b/scripts/distribution-validation.mjs @@ -262,6 +262,15 @@ async function validatePlugins(root, files) { declaredSkillNames.add(declared); } requireValue(files.includes("plugins/deixic-code-skills/LICENSE"), "plugin license is missing"); + const claudeCatalog = JSON.parse(await readFile(join(root, ".claude-plugin", "marketplace.json"), "utf8")); + requireValue(claudeCatalog.name === "deixic" && claudeCatalog.plugins?.length === 1 + && claudeCatalog.plugins[0].name === "deixic" && claudeCatalog.plugins[0].source === "./plugins/deixic", "Claude marketplace is invalid"); + const claudeManifest = JSON.parse(await readFile(join(root, "plugins", "deixic", ".claude-plugin", "plugin.json"), "utf8")); + const claudeServers = JSON.parse(await readFile(join(root, "plugins", "deixic", ".mcp.json"), "utf8")).mcpServers; + requireValue(claudeManifest.name === "deixic" && /^\d+\.\d+\.\d+$/.test(claudeManifest.version) + && JSON.stringify(Object.keys(claudeServers)) === '["deixic"]' && claudeServers.deixic.type === "http" + && claudeServers.deixic.url === "https://app.deixic.com/mcp/workspace" && !claudeServers.deixic.headers, "Claude plugin is invalid"); + requireValue(files.includes("plugins/deixic/LICENSE"), "Claude plugin license is missing"); for (const path of files) requireValue(!/(?:prompt-audit|session-history|product-kit)/i.test(path), `private plugin surface: ${path}`); }