fix: add schemas re-export file and update tests to use correct manifest version
- Create src/schemas.ts to re-export from schemas/index.ts for test imports - Update test manifests to use manifest_version "0.2" instead of "1.0" or "1.0.0" - Fix import sorting and formatting issues in schema files - Export McpbManifestSchema from schemas/index.ts
This commit is contained in:
parent
ccb19277c4
commit
fefd9e1d21
13 changed files with 69 additions and 41 deletions
|
|
@ -13,7 +13,10 @@ import { basename, join, relative, resolve, sep } from "path";
|
||||||
|
|
||||||
import { getAllFilesWithCount, readMcpbIgnorePatterns } from "../node/files.js";
|
import { getAllFilesWithCount, readMcpbIgnorePatterns } from "../node/files.js";
|
||||||
import { validateManifest } from "../node/validate.js";
|
import { validateManifest } from "../node/validate.js";
|
||||||
import { CURRENT_MANIFEST_VERSION, CURRENT_MANIFEST_SCHEMA } from "../shared/constants.js";
|
import {
|
||||||
|
CURRENT_MANIFEST_SCHEMA,
|
||||||
|
CURRENT_MANIFEST_VERSION,
|
||||||
|
} from "../shared/constants.js";
|
||||||
import { getLogger } from "../shared/log.js";
|
import { getLogger } from "../shared/log.js";
|
||||||
import { initExtension } from "./init.js";
|
import { initExtension } from "./init.js";
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,10 @@ import { join, resolve } from "path";
|
||||||
import prettyBytes from "pretty-bytes";
|
import prettyBytes from "pretty-bytes";
|
||||||
|
|
||||||
import { unpackExtension } from "../cli/unpack.js";
|
import { unpackExtension } from "../cli/unpack.js";
|
||||||
import { CURRENT_MANIFEST_SCHEMA, CURRENT_MANIFEST_SCHEMA_LOOSE } from "../shared/constants.js";
|
import {
|
||||||
|
CURRENT_MANIFEST_SCHEMA,
|
||||||
|
CURRENT_MANIFEST_SCHEMA_LOOSE,
|
||||||
|
} from "../shared/constants.js";
|
||||||
|
|
||||||
export function validateManifest(inputPath: string): boolean {
|
export function validateManifest(inputPath: string): boolean {
|
||||||
try {
|
try {
|
||||||
|
|
|
||||||
6
src/schemas.ts
Normal file
6
src/schemas.ts
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
export {
|
||||||
|
CURRENT_MANIFEST_VERSION,
|
||||||
|
McpbManifestSchema,
|
||||||
|
v0_1,
|
||||||
|
v0_2,
|
||||||
|
} from "./schemas/index.js";
|
||||||
|
|
@ -79,7 +79,10 @@ export const McpbUserConfigValuesSchema = z.record(
|
||||||
export const McpbManifestSchema = z
|
export const McpbManifestSchema = z
|
||||||
.strictObject({
|
.strictObject({
|
||||||
$schema: z.string().optional(),
|
$schema: z.string().optional(),
|
||||||
dxt_version: z.literal(MANIFEST_VERSION).optional().describe("@deprecated Use manifest_version instead"),
|
dxt_version: z
|
||||||
|
.literal(MANIFEST_VERSION)
|
||||||
|
.optional()
|
||||||
|
.describe("@deprecated Use manifest_version instead"),
|
||||||
manifest_version: z.literal(MANIFEST_VERSION).optional(),
|
manifest_version: z.literal(MANIFEST_VERSION).optional(),
|
||||||
name: z.string(),
|
name: z.string(),
|
||||||
display_name: z.string().optional(),
|
display_name: z.string().optional(),
|
||||||
|
|
|
||||||
|
|
@ -79,33 +79,36 @@ export const McpbUserConfigValuesSchema = z.record(
|
||||||
export const McpbManifestSchema = z
|
export const McpbManifestSchema = z
|
||||||
.strictObject({
|
.strictObject({
|
||||||
$schema: z.string().optional(),
|
$schema: z.string().optional(),
|
||||||
dxt_version: z.literal(MANIFEST_VERSION).optional().describe("@deprecated Use manifest_version instead"),
|
dxt_version: z
|
||||||
|
.literal(MANIFEST_VERSION)
|
||||||
|
.optional()
|
||||||
|
.describe("@deprecated Use manifest_version instead"),
|
||||||
manifest_version: z.literal(MANIFEST_VERSION).optional(),
|
manifest_version: z.literal(MANIFEST_VERSION).optional(),
|
||||||
name: z.string(),
|
name: z.string(),
|
||||||
display_name: z.string().optional(),
|
display_name: z.string().optional(),
|
||||||
version: z.string(),
|
version: z.string(),
|
||||||
description: z.string(),
|
description: z.string(),
|
||||||
long_description: z.string().optional(),
|
long_description: z.string().optional(),
|
||||||
author: McpbManifestAuthorSchema,
|
author: McpbManifestAuthorSchema,
|
||||||
repository: McpbManifestRepositorySchema.optional(),
|
repository: McpbManifestRepositorySchema.optional(),
|
||||||
homepage: z.string().url().optional(),
|
homepage: z.string().url().optional(),
|
||||||
documentation: z.string().url().optional(),
|
documentation: z.string().url().optional(),
|
||||||
support: z.string().url().optional(),
|
support: z.string().url().optional(),
|
||||||
icon: z.string().optional(),
|
icon: z.string().optional(),
|
||||||
screenshots: z.array(z.string()).optional(),
|
screenshots: z.array(z.string()).optional(),
|
||||||
server: McpbManifestServerSchema,
|
server: McpbManifestServerSchema,
|
||||||
tools: z.array(McpbManifestToolSchema).optional(),
|
tools: z.array(McpbManifestToolSchema).optional(),
|
||||||
tools_generated: z.boolean().optional(),
|
tools_generated: z.boolean().optional(),
|
||||||
prompts: z.array(McpbManifestPromptSchema).optional(),
|
prompts: z.array(McpbManifestPromptSchema).optional(),
|
||||||
prompts_generated: z.boolean().optional(),
|
prompts_generated: z.boolean().optional(),
|
||||||
keywords: z.array(z.string()).optional(),
|
keywords: z.array(z.string()).optional(),
|
||||||
license: z.string().optional(),
|
license: z.string().optional(),
|
||||||
privacy_policies: z.array(z.string().url()).optional(),
|
privacy_policies: z.array(z.string().url()).optional(),
|
||||||
compatibility: McpbManifestCompatibilitySchema.optional(),
|
compatibility: McpbManifestCompatibilitySchema.optional(),
|
||||||
user_config: z
|
user_config: z
|
||||||
.record(z.string(), McpbUserConfigurationOptionSchema)
|
.record(z.string(), McpbUserConfigurationOptionSchema)
|
||||||
.optional(),
|
.optional(),
|
||||||
})
|
})
|
||||||
.refine((data) => !!(data.dxt_version || data.manifest_version), {
|
.refine((data) => !!(data.dxt_version || data.manifest_version), {
|
||||||
message:
|
message:
|
||||||
"Either 'dxt_version' (deprecated) or 'manifest_version' must be provided",
|
"Either 'dxt_version' (deprecated) or 'manifest_version' must be provided",
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,6 @@
|
||||||
export * as v0_1 from "./0.1.js";
|
export * as v0_1 from "./0.1.js";
|
||||||
export * as v0_2 from "./0.2.js";
|
export * as v0_2 from "./0.2.js";
|
||||||
|
export {
|
||||||
export { MANIFEST_VERSION as CURRENT_MANIFEST_VERSION } from "./0.2.js";
|
MANIFEST_VERSION as CURRENT_MANIFEST_VERSION,
|
||||||
|
McpbManifestSchema,
|
||||||
|
} from "./0.2.js";
|
||||||
|
|
|
||||||
|
|
@ -81,7 +81,10 @@ export const McpbUserConfigValuesSchema = z.record(
|
||||||
export const McpbManifestSchema = z
|
export const McpbManifestSchema = z
|
||||||
.object({
|
.object({
|
||||||
$schema: z.string().optional(),
|
$schema: z.string().optional(),
|
||||||
dxt_version: z.literal(MANIFEST_VERSION).optional().describe("@deprecated Use manifest_version instead"),
|
dxt_version: z
|
||||||
|
.literal(MANIFEST_VERSION)
|
||||||
|
.optional()
|
||||||
|
.describe("@deprecated Use manifest_version instead"),
|
||||||
manifest_version: z.literal(MANIFEST_VERSION).optional(),
|
manifest_version: z.literal(MANIFEST_VERSION).optional(),
|
||||||
name: z.string(),
|
name: z.string(),
|
||||||
display_name: z.string().optional(),
|
display_name: z.string().optional(),
|
||||||
|
|
|
||||||
|
|
@ -81,7 +81,10 @@ export const McpbUserConfigValuesSchema = z.record(
|
||||||
export const McpbManifestSchema = z
|
export const McpbManifestSchema = z
|
||||||
.object({
|
.object({
|
||||||
$schema: z.string().optional(),
|
$schema: z.string().optional(),
|
||||||
dxt_version: z.literal(MANIFEST_VERSION).optional().describe("@deprecated Use manifest_version instead"),
|
dxt_version: z
|
||||||
|
.literal(MANIFEST_VERSION)
|
||||||
|
.optional()
|
||||||
|
.describe("@deprecated Use manifest_version instead"),
|
||||||
manifest_version: z.literal(MANIFEST_VERSION).optional(),
|
manifest_version: z.literal(MANIFEST_VERSION).optional(),
|
||||||
name: z.string(),
|
name: z.string(),
|
||||||
display_name: z.string().optional(),
|
display_name: z.string().optional(),
|
||||||
|
|
|
||||||
|
|
@ -27,9 +27,11 @@ export const MANIFEST_SCHEMAS_LOOSE = {
|
||||||
/**
|
/**
|
||||||
* Get the current manifest schema based on CURRENT_MANIFEST_VERSION
|
* Get the current manifest schema based on CURRENT_MANIFEST_VERSION
|
||||||
*/
|
*/
|
||||||
export const CURRENT_MANIFEST_SCHEMA = MANIFEST_SCHEMAS[CURRENT_MANIFEST_VERSION];
|
export const CURRENT_MANIFEST_SCHEMA =
|
||||||
|
MANIFEST_SCHEMAS[CURRENT_MANIFEST_VERSION];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the current loose manifest schema based on CURRENT_MANIFEST_VERSION
|
* Get the current loose manifest schema based on CURRENT_MANIFEST_VERSION
|
||||||
*/
|
*/
|
||||||
export const CURRENT_MANIFEST_SCHEMA_LOOSE = MANIFEST_SCHEMAS_LOOSE[CURRENT_MANIFEST_VERSION];
|
export const CURRENT_MANIFEST_SCHEMA_LOOSE =
|
||||||
|
MANIFEST_SCHEMAS_LOOSE[CURRENT_MANIFEST_VERSION];
|
||||||
|
|
|
||||||
|
|
@ -90,7 +90,7 @@ describe("getMcpConfigForManifest", () => {
|
||||||
};
|
};
|
||||||
|
|
||||||
const baseManifest: McpbManifest = {
|
const baseManifest: McpbManifest = {
|
||||||
manifest_version: "1.0.0",
|
manifest_version: "0.2",
|
||||||
name: "test-extension",
|
name: "test-extension",
|
||||||
version: "1.0.0",
|
version: "1.0.0",
|
||||||
description: "Test extension",
|
description: "Test extension",
|
||||||
|
|
@ -305,7 +305,7 @@ describe("getMcpConfigForManifest", () => {
|
||||||
|
|
||||||
describe("hasRequiredConfigMissing", () => {
|
describe("hasRequiredConfigMissing", () => {
|
||||||
const baseManifest: McpbManifest = {
|
const baseManifest: McpbManifest = {
|
||||||
manifest_version: "1.0.0",
|
manifest_version: "0.2",
|
||||||
name: "test-extension",
|
name: "test-extension",
|
||||||
version: "1.0.0",
|
version: "1.0.0",
|
||||||
description: "Test extension",
|
description: "Test extension",
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@ describe("McpbManifestSchema", () => {
|
||||||
|
|
||||||
it("should validate manifest with all optional fields", () => {
|
it("should validate manifest with all optional fields", () => {
|
||||||
const fullManifest = {
|
const fullManifest = {
|
||||||
manifest_version: "1.0",
|
manifest_version: "0.2",
|
||||||
name: "full-extension",
|
name: "full-extension",
|
||||||
display_name: "Full Featured Extension",
|
display_name: "Full Featured Extension",
|
||||||
version: "2.0.0",
|
version: "2.0.0",
|
||||||
|
|
@ -117,7 +117,7 @@ describe("McpbManifestSchema", () => {
|
||||||
|
|
||||||
serverTypes.forEach((type) => {
|
serverTypes.forEach((type) => {
|
||||||
const manifest = {
|
const manifest = {
|
||||||
manifest_version: "1.0",
|
manifest_version: "0.2",
|
||||||
name: "test",
|
name: "test",
|
||||||
version: "1.0.0",
|
version: "1.0.0",
|
||||||
description: "Test",
|
description: "Test",
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"manifest_version": "1.0",
|
"manifest_version": "0.2",
|
||||||
"name": "test-extension",
|
"name": "test-extension",
|
||||||
"display_name": "Test Extension",
|
"display_name": "Test Extension",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue