@ashdev/codex-plugin-metadata-echo 1.20.0 → 1.21.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -643,7 +643,7 @@ function createMetadataPlugin(options) {
|
|
|
643
643
|
// package.json
|
|
644
644
|
var package_default = {
|
|
645
645
|
name: "@ashdev/codex-plugin-metadata-echo",
|
|
646
|
-
version: "1.
|
|
646
|
+
version: "1.21.1",
|
|
647
647
|
description: "Echo metadata plugin for testing Codex plugin protocol",
|
|
648
648
|
main: "dist/index.js",
|
|
649
649
|
bin: "dist/index.js",
|
|
@@ -681,7 +681,7 @@ var package_default = {
|
|
|
681
681
|
node: ">=22.0.0"
|
|
682
682
|
},
|
|
683
683
|
dependencies: {
|
|
684
|
-
"@ashdev/codex-plugin-sdk": "^1.
|
|
684
|
+
"@ashdev/codex-plugin-sdk": "^1.21.1"
|
|
685
685
|
},
|
|
686
686
|
devDependencies: {
|
|
687
687
|
"@biomejs/biome": "^2.4.4",
|
package/dist/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../node_modules/@ashdev/codex-plugin-sdk/src/types/rpc.ts", "../node_modules/@ashdev/codex-plugin-sdk/src/errors.ts", "../node_modules/@ashdev/codex-plugin-sdk/src/request-context.ts", "../node_modules/@ashdev/codex-plugin-sdk/src/host-rpc.ts", "../node_modules/@ashdev/codex-plugin-sdk/src/logger.ts", "../node_modules/@ashdev/codex-plugin-sdk/src/server.ts", "../node_modules/@ashdev/codex-plugin-sdk/src/storage.ts", "../package.json", "../src/manifest.ts", "../src/index.ts"],
|
|
4
|
-
"sourcesContent": [null, null, null, null, null, null, null, "{\n \"name\": \"@ashdev/codex-plugin-metadata-echo\",\n \"version\": \"1.20.0\",\n \"description\": \"Echo metadata plugin for testing Codex plugin protocol\",\n \"main\": \"dist/index.js\",\n \"bin\": \"dist/index.js\",\n \"type\": \"module\",\n \"files\": [\n \"dist\",\n \"README.md\"\n ],\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/AshDevFr/codex.git\",\n \"directory\": \"plugins/metadata-echo\"\n },\n \"scripts\": {\n \"build\": \"esbuild src/index.ts --bundle --platform=node --target=node22 --format=esm --outfile=dist/index.js --sourcemap --banner:js='#!/usr/bin/env node'\",\n \"dev\": \"npm run build -- --watch\",\n \"clean\": \"rm -rf dist\",\n \"start\": \"node dist/index.js\",\n \"lint\": \"biome check .\",\n \"lint:fix\": \"biome check --write .\",\n \"typecheck\": \"tsc --noEmit\",\n \"test\": \"vitest run --passWithNoTests\",\n \"test:watch\": \"vitest\",\n \"prepublishOnly\": \"npm run lint && npm run build\"\n },\n \"keywords\": [\n \"codex\",\n \"plugin\",\n \"echo\",\n \"testing\"\n ],\n \"author\": \"Codex\",\n \"license\": \"MIT\",\n \"engines\": {\n \"node\": \">=22.0.0\"\n },\n \"dependencies\": {\n \"@ashdev/codex-plugin-sdk\": \"^1.20.0\"\n },\n \"devDependencies\": {\n \"@biomejs/biome\": \"^2.4.4\",\n \"@types/node\": \"^22.0.0\",\n \"esbuild\": \"^0.27.3\",\n \"typescript\": \"^5.9.3\",\n \"vitest\": \"^4.0.18\"\n }\n}\n", "import type { MetadataContentType, PluginManifest } from \"@ashdev/codex-plugin-sdk\";\nimport packageJson from \"../package.json\" with { type: \"json\" };\n\n// Default config values\nexport const DEFAULT_MAX_RESULTS = 5;\n\nexport const manifest = {\n name: \"metadata-echo\",\n displayName: \"Echo Metadata Plugin\",\n version: packageJson.version,\n description:\n \"Test metadata plugin that echoes back search queries (supports both series and book metadata)\",\n author: \"Codex\",\n homepage: \"https://github.com/AshDevFr/codex\",\n protocolVersion: \"1.0\",\n capabilities: {\n // Demonstrates multi-content-type plugin support\n metadataProvider: [\"series\", \"book\"] as MetadataContentType[],\n },\n configSchema: {\n description: \"Configuration options for the Echo test plugin\",\n fields: [\n {\n key: \"maxResults\",\n label: \"Maximum Results\",\n description: \"Maximum number of results to return for search queries (1-20)\",\n type: \"number\" as const,\n required: false,\n default: DEFAULT_MAX_RESULTS,\n example: 10,\n },\n ],\n },\n} as const satisfies PluginManifest & {\n capabilities: { metadataProvider: MetadataContentType[] };\n};\n", "/**\n * Echo Plugin - A minimal plugin for testing the Codex plugin protocol\n *\n * This plugin demonstrates the plugin SDK usage and serves as a protocol\n * validation tool. It echoes back search parameters and provides predictable\n * responses for testing.\n *\n * Supports both series and book metadata to demonstrate multi-content-type plugins.\n */\n\nimport {\n type BookMatchParams,\n type BookMetadataProvider,\n type BookSearchParams,\n createLogger,\n createMetadataPlugin,\n type InitializeParams,\n type MetadataGetParams,\n type MetadataMatchParams,\n type MetadataMatchResponse,\n type MetadataProvider,\n type MetadataSearchParams,\n type MetadataSearchResponse,\n type PluginBookMetadata,\n type PluginSeriesMetadata,\n} from \"@ashdev/codex-plugin-sdk\";\nimport { DEFAULT_MAX_RESULTS, manifest } from \"./manifest.js\";\n\nconst logger = createLogger({ name: \"echo\", level: \"debug\" });\n\n// Plugin configuration (set during initialization)\nconst config = {\n maxResults: DEFAULT_MAX_RESULTS,\n};\n\n// Encode the original query into the externalId so that get() can recover it\n// later. The protocol only passes externalId to get(), so this is how the\n// echo plugin preserves the user-facing title across calls.\nfunction encodeExternalId(baseId: string, query: string): string {\n return `${baseId}::${encodeURIComponent(query)}`;\n}\n\nfunction decodeExternalId(externalId: string): { baseId: string; query: string | null } {\n const sep = externalId.indexOf(\"::\");\n if (sep === -1) {\n return { baseId: externalId, query: null };\n }\n return {\n baseId: externalId.slice(0, sep),\n query: decodeURIComponent(externalId.slice(sep + 2)),\n };\n}\n\n// Generate echo results based on config\nfunction generateEchoResults(query: string, maxResults: number) {\n const results = [];\n const count = Math.min(Math.max(1, maxResults), 20); // Clamp between 1-20\n\n for (let i = 1; i <= count; i++) {\n results.push({\n externalId: encodeExternalId(`echo-${i}`, query),\n title: i === 1 ? `Echo: ${query}` : `Echo Result ${i} for: ${query}`,\n alternateTitles: i === 1 ? [`Echoed Query: ${query}`] : [],\n year: new Date().getFullYear(),\n relevanceScore: Math.max(0.1, 1.0 - (i - 1) * 0.1), // Decreasing relevance\n preview: {\n status: i % 2 === 0 ? \"ongoing\" : \"ended\",\n genres: i === 1 ? [\"Test\", \"Echo\"] : [\"Test\"],\n rating: i === 1 ? 10.0 : undefined,\n description:\n i === 1\n ? `Search query echoed: \"${query}\"`\n : `Result ${i} for testing (maxResults=${count})`,\n },\n });\n }\n\n return results;\n}\n\nconst provider: MetadataProvider = {\n async search(params: MetadataSearchParams): Promise<MetadataSearchResponse> {\n // Echo back the query as search results, respecting maxResults config\n return {\n results: generateEchoResults(params.query, config.maxResults),\n };\n },\n\n async get(params: MetadataGetParams): Promise<PluginSeriesMetadata> {\n // Recover the original search query (if encoded by search()) so we can\n // echo the user-facing title instead of the opaque external ID.\n const { baseId, query } = decodeExternalId(params.externalId);\n const title = query ?? `Echo Series: ${baseId}`;\n\n // Return metadata based on the external ID with all fields populated for testing\n return {\n externalId: params.externalId,\n externalUrl: `https://echo.example.com/series/${baseId}`,\n title,\n alternateTitles: [\n { title, language: \"en\", titleType: \"english\" },\n { title: `${title} (native)`, language: \"ja\", titleType: \"native\" },\n { title: `${title} (romaji)`, language: \"ja-Latn\", titleType: \"romaji\" },\n ],\n summary: `This is the full metadata for \"${title}\" (id: ${baseId}). It includes a detailed description to test summary handling.`,\n status: \"ended\",\n year: 2024,\n\n // Extended metadata fields\n totalVolumeCount: 10,\n language: \"en\",\n ageRating: 13,\n readingDirection: \"ltr\",\n\n // Taxonomy\n genres: [\"Action\", \"Comedy\", \"Test\", \"Echo\"],\n tags: [\"plugin-test\", \"echo\", \"automation\", \"development\"],\n\n // Credits\n authors: [\n { name: \"Echo Author\", role: \"author\" },\n { name: \"Test Writer\", role: \"author\" },\n ],\n artists: [\"Echo Artist\"],\n publisher: \"Echo Publisher\",\n\n // Media\n coverUrl: \"https://picsum.photos/300/450\",\n bannerUrl: \"https://picsum.photos/800/200\",\n\n // Primary rating\n rating: {\n score: 85,\n voteCount: 100,\n source: \"echo\",\n },\n\n // Multiple external ratings for testing aggregation\n externalRatings: [\n {\n score: 85,\n voteCount: 100,\n source: \"echo\",\n },\n {\n score: 92,\n voteCount: 5000,\n source: \"anilist\",\n },\n {\n score: 88,\n voteCount: 2500,\n source: \"mal\",\n },\n ],\n\n // External links\n externalLinks: [\n {\n url: `https://echo.example.com/series/${baseId}`,\n label: \"Echo Provider\",\n linkType: \"provider\",\n },\n {\n url: \"https://official-echo.example.com\",\n label: \"Official Site\",\n linkType: \"official\",\n },\n {\n url: \"https://twitter.com/echo_series\",\n label: \"Twitter\",\n linkType: \"social\",\n },\n {\n url: \"https://store.example.com/echo\",\n label: \"Buy\",\n linkType: \"purchase\",\n },\n ],\n };\n },\n\n async match(params: MetadataMatchParams): Promise<MetadataMatchResponse> {\n // Return a match based on the title\n const normalizedTitle = params.title.toLowerCase().replace(/\\s+/g, \"-\");\n return {\n match: {\n externalId: `match-${normalizedTitle}`,\n title: params.title,\n alternateTitles: [],\n year: params.year,\n relevanceScore: 0.9,\n preview: {\n status: \"ended\",\n genres: [\"Matched\"],\n description: `Matched from title: \"${params.title}\"`,\n },\n },\n confidence: 0.85,\n alternatives: [\n {\n externalId: \"alt-1\",\n title: `Alternative: ${params.title}`,\n alternateTitles: [],\n relevanceScore: 0.6,\n },\n ],\n };\n },\n};\n\n// =============================================================================\n// Book Metadata Provider\n// =============================================================================\n\n// Generate echo results for book search\nfunction generateBookEchoResults(params: BookSearchParams, maxResults: number) {\n const results = [];\n const count = Math.min(Math.max(1, maxResults), 20);\n const searchTerm = params.isbn || params.query || \"unknown\";\n\n for (let i = 1; i <= count; i++) {\n const isIsbnSearch = !!params.isbn;\n results.push({\n externalId: encodeExternalId(`echo-book-${i}`, searchTerm),\n title: i === 1 ? `Echo Book: ${searchTerm}` : `Echo Book Result ${i} for: ${searchTerm}`,\n alternateTitles: i === 1 ? [`Book Query: ${searchTerm}`] : [],\n year: params.year || new Date().getFullYear(),\n relevanceScore: isIsbnSearch ? 1.0 : Math.max(0.1, 1.0 - (i - 1) * 0.1),\n preview: {\n status: i % 2 === 0 ? \"ongoing\" : \"ended\",\n genres: i === 1 ? [\"Test\", \"Echo\", \"Book\"] : [\"Test\", \"Book\"],\n rating: i === 1 ? 9.0 : undefined,\n description:\n i === 1\n ? `Book search ${isIsbnSearch ? \"by ISBN\" : \"by query\"}: \"${searchTerm}\"`\n : `Book result ${i} for testing`,\n },\n });\n }\n\n return results;\n}\n\nconst bookProvider: BookMetadataProvider = {\n async search(params: BookSearchParams): Promise<MetadataSearchResponse> {\n // Echo back the ISBN or query as search results\n return {\n results: generateBookEchoResults(params, config.maxResults),\n };\n },\n\n async get(params: MetadataGetParams): Promise<PluginBookMetadata> {\n // Recover the original search term encoded in the externalId so the title\n // matches what the user saw in search results.\n const { baseId, query } = decodeExternalId(params.externalId);\n const title = query ?? `Echo Book: ${baseId}`;\n\n // Return book metadata based on the external ID with all fields populated for testing\n return {\n externalId: params.externalId,\n externalUrl: `https://echo.example.com/book/${baseId}`,\n title,\n subtitle: \"A Test Subtitle\",\n alternateTitles: [\n { title, language: \"en\", titleType: \"english\" },\n { title: `${title} (native)`, language: \"ja\", titleType: \"native\" },\n ],\n summary: `This is the full book metadata for \"${title}\" (id: ${baseId}). It includes a detailed description to test book metadata handling.`,\n bookType: \"novel\",\n\n // Book-specific fields\n volume: 1,\n pageCount: 320,\n releaseDate: \"2024-01-15\",\n year: 2024,\n\n // ISBN\n isbn: \"978-0-306-40615-7\",\n isbns: [\"978-0-306-40615-7\", \"0-306-40615-2\"],\n\n // Edition/Translation\n edition: \"First Edition\",\n originalTitle: \"Original Echo Title\",\n originalYear: 2023,\n translator: \"Echo Translator\",\n language: \"en\",\n\n // Series position\n seriesPosition: 1.0,\n seriesTotal: 5,\n\n // Taxonomy\n genres: [\"Fiction\", \"Test\", \"Echo\"],\n tags: [\"plugin-test\", \"echo\", \"book-test\"],\n subjects: [\"Testing\", \"Plugin Development\"],\n\n // Authors with roles\n authors: [\n { name: \"Echo Author\", role: \"author\", sortName: \"Author, Echo\" },\n { name: \"Test Writer\", role: \"co_author\", sortName: \"Writer, Test\" },\n { name: \"Echo Editor\", role: \"editor\" },\n ],\n artists: [\"Echo Illustrator\"],\n publisher: \"Echo Publishing House\",\n\n // Media\n coverUrl: \"https://picsum.photos/300/450\",\n covers: [\n { url: \"https://picsum.photos/300/450\", width: 300, height: 450, size: \"medium\" },\n { url: \"https://picsum.photos/600/900\", width: 600, height: 900, size: \"large\" },\n { url: \"https://picsum.photos/150/225\", width: 150, height: 225, size: \"small\" },\n ],\n\n // Ratings\n rating: {\n score: 88,\n voteCount: 500,\n source: \"echo\",\n },\n externalRatings: [\n { score: 88, voteCount: 500, source: \"echo\" },\n { score: 92, voteCount: 10000, source: \"goodreads\" },\n ],\n\n // Awards\n awards: [\n { name: \"Echo Award\", year: 2024, category: \"Best Test Book\", won: true },\n { name: \"Test Prize\", year: 2024, category: \"Excellence in Testing\", won: false },\n ],\n\n // External links\n externalLinks: [\n {\n url: `https://echo.example.com/book/${baseId}`,\n label: \"Echo Provider\",\n linkType: \"provider\",\n },\n {\n url: \"https://goodreads.com/book/echo\",\n label: \"Goodreads\",\n linkType: \"other\",\n },\n {\n url: \"https://amazon.com/echo-book\",\n label: \"Amazon\",\n linkType: \"purchase\",\n },\n ],\n };\n },\n\n async match(params: BookMatchParams): Promise<MetadataMatchResponse> {\n // Return a match based on ISBN (preferred) or title\n const identifier = params.isbn || params.title;\n const normalizedId = identifier.toLowerCase().replace(/[\\s-]/g, \"\");\n const isIsbnMatch = !!params.isbn;\n\n return {\n match: {\n externalId: `match-book-${normalizedId}`,\n title: params.title,\n alternateTitles: [],\n year: params.year,\n relevanceScore: isIsbnMatch ? 1.0 : 0.85,\n preview: {\n status: \"ended\",\n genres: [\"Matched\", \"Book\"],\n description: isIsbnMatch\n ? `Matched by ISBN: ${params.isbn}`\n : `Matched from title: \"${params.title}\"`,\n },\n },\n confidence: isIsbnMatch ? 0.99 : 0.8,\n alternatives: isIsbnMatch\n ? []\n : [\n {\n externalId: \"alt-book-1\",\n title: `Alternative: ${params.title}`,\n alternateTitles: [],\n relevanceScore: 0.5,\n },\n ],\n };\n },\n};\n\n// =============================================================================\n// Plugin Initialization\n// =============================================================================\n\ncreateMetadataPlugin({\n manifest,\n provider, // Series provider\n bookProvider, // Book provider\n logLevel: \"debug\",\n onInitialize(params: InitializeParams) {\n // Read config from initialization params\n const maxResults = params.adminConfig?.maxResults as number | undefined;\n if (maxResults !== undefined) {\n config.maxResults = Math.min(Math.max(1, maxResults), 20); // Clamp 1-20\n }\n logger.info(`Echo plugin initialized (maxResults: ${config.maxResults})`);\n },\n});\n\nlogger.info(\"Echo plugin started\");\n"],
|
|
4
|
+
"sourcesContent": [null, null, null, null, null, null, null, "{\n \"name\": \"@ashdev/codex-plugin-metadata-echo\",\n \"version\": \"1.21.1\",\n \"description\": \"Echo metadata plugin for testing Codex plugin protocol\",\n \"main\": \"dist/index.js\",\n \"bin\": \"dist/index.js\",\n \"type\": \"module\",\n \"files\": [\n \"dist\",\n \"README.md\"\n ],\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/AshDevFr/codex.git\",\n \"directory\": \"plugins/metadata-echo\"\n },\n \"scripts\": {\n \"build\": \"esbuild src/index.ts --bundle --platform=node --target=node22 --format=esm --outfile=dist/index.js --sourcemap --banner:js='#!/usr/bin/env node'\",\n \"dev\": \"npm run build -- --watch\",\n \"clean\": \"rm -rf dist\",\n \"start\": \"node dist/index.js\",\n \"lint\": \"biome check .\",\n \"lint:fix\": \"biome check --write .\",\n \"typecheck\": \"tsc --noEmit\",\n \"test\": \"vitest run --passWithNoTests\",\n \"test:watch\": \"vitest\",\n \"prepublishOnly\": \"npm run lint && npm run build\"\n },\n \"keywords\": [\n \"codex\",\n \"plugin\",\n \"echo\",\n \"testing\"\n ],\n \"author\": \"Codex\",\n \"license\": \"MIT\",\n \"engines\": {\n \"node\": \">=22.0.0\"\n },\n \"dependencies\": {\n \"@ashdev/codex-plugin-sdk\": \"^1.21.1\"\n },\n \"devDependencies\": {\n \"@biomejs/biome\": \"^2.4.4\",\n \"@types/node\": \"^22.0.0\",\n \"esbuild\": \"^0.27.3\",\n \"typescript\": \"^5.9.3\",\n \"vitest\": \"^4.0.18\"\n }\n}\n", "import type { MetadataContentType, PluginManifest } from \"@ashdev/codex-plugin-sdk\";\nimport packageJson from \"../package.json\" with { type: \"json\" };\n\n// Default config values\nexport const DEFAULT_MAX_RESULTS = 5;\n\nexport const manifest = {\n name: \"metadata-echo\",\n displayName: \"Echo Metadata Plugin\",\n version: packageJson.version,\n description:\n \"Test metadata plugin that echoes back search queries (supports both series and book metadata)\",\n author: \"Codex\",\n homepage: \"https://github.com/AshDevFr/codex\",\n protocolVersion: \"1.0\",\n capabilities: {\n // Demonstrates multi-content-type plugin support\n metadataProvider: [\"series\", \"book\"] as MetadataContentType[],\n },\n configSchema: {\n description: \"Configuration options for the Echo test plugin\",\n fields: [\n {\n key: \"maxResults\",\n label: \"Maximum Results\",\n description: \"Maximum number of results to return for search queries (1-20)\",\n type: \"number\" as const,\n required: false,\n default: DEFAULT_MAX_RESULTS,\n example: 10,\n },\n ],\n },\n} as const satisfies PluginManifest & {\n capabilities: { metadataProvider: MetadataContentType[] };\n};\n", "/**\n * Echo Plugin - A minimal plugin for testing the Codex plugin protocol\n *\n * This plugin demonstrates the plugin SDK usage and serves as a protocol\n * validation tool. It echoes back search parameters and provides predictable\n * responses for testing.\n *\n * Supports both series and book metadata to demonstrate multi-content-type plugins.\n */\n\nimport {\n type BookMatchParams,\n type BookMetadataProvider,\n type BookSearchParams,\n createLogger,\n createMetadataPlugin,\n type InitializeParams,\n type MetadataGetParams,\n type MetadataMatchParams,\n type MetadataMatchResponse,\n type MetadataProvider,\n type MetadataSearchParams,\n type MetadataSearchResponse,\n type PluginBookMetadata,\n type PluginSeriesMetadata,\n} from \"@ashdev/codex-plugin-sdk\";\nimport { DEFAULT_MAX_RESULTS, manifest } from \"./manifest.js\";\n\nconst logger = createLogger({ name: \"echo\", level: \"debug\" });\n\n// Plugin configuration (set during initialization)\nconst config = {\n maxResults: DEFAULT_MAX_RESULTS,\n};\n\n// Encode the original query into the externalId so that get() can recover it\n// later. The protocol only passes externalId to get(), so this is how the\n// echo plugin preserves the user-facing title across calls.\nfunction encodeExternalId(baseId: string, query: string): string {\n return `${baseId}::${encodeURIComponent(query)}`;\n}\n\nfunction decodeExternalId(externalId: string): { baseId: string; query: string | null } {\n const sep = externalId.indexOf(\"::\");\n if (sep === -1) {\n return { baseId: externalId, query: null };\n }\n return {\n baseId: externalId.slice(0, sep),\n query: decodeURIComponent(externalId.slice(sep + 2)),\n };\n}\n\n// Generate echo results based on config\nfunction generateEchoResults(query: string, maxResults: number) {\n const results = [];\n const count = Math.min(Math.max(1, maxResults), 20); // Clamp between 1-20\n\n for (let i = 1; i <= count; i++) {\n results.push({\n externalId: encodeExternalId(`echo-${i}`, query),\n title: i === 1 ? `Echo: ${query}` : `Echo Result ${i} for: ${query}`,\n alternateTitles: i === 1 ? [`Echoed Query: ${query}`] : [],\n year: new Date().getFullYear(),\n relevanceScore: Math.max(0.1, 1.0 - (i - 1) * 0.1), // Decreasing relevance\n preview: {\n status: i % 2 === 0 ? \"ongoing\" : \"ended\",\n genres: i === 1 ? [\"Test\", \"Echo\"] : [\"Test\"],\n rating: i === 1 ? 10.0 : undefined,\n description:\n i === 1\n ? `Search query echoed: \"${query}\"`\n : `Result ${i} for testing (maxResults=${count})`,\n },\n });\n }\n\n return results;\n}\n\nconst provider: MetadataProvider = {\n async search(params: MetadataSearchParams): Promise<MetadataSearchResponse> {\n // Echo back the query as search results, respecting maxResults config\n return {\n results: generateEchoResults(params.query, config.maxResults),\n };\n },\n\n async get(params: MetadataGetParams): Promise<PluginSeriesMetadata> {\n // Recover the original search query (if encoded by search()) so we can\n // echo the user-facing title instead of the opaque external ID.\n const { baseId, query } = decodeExternalId(params.externalId);\n const title = query ?? `Echo Series: ${baseId}`;\n\n // Return metadata based on the external ID with all fields populated for testing\n return {\n externalId: params.externalId,\n externalUrl: `https://echo.example.com/series/${baseId}`,\n title,\n alternateTitles: [\n { title, language: \"en\", titleType: \"english\" },\n { title: `${title} (native)`, language: \"ja\", titleType: \"native\" },\n { title: `${title} (romaji)`, language: \"ja-Latn\", titleType: \"romaji\" },\n ],\n summary: `This is the full metadata for \"${title}\" (id: ${baseId}). It includes a detailed description to test summary handling.`,\n status: \"ended\",\n year: 2024,\n\n // Extended metadata fields\n totalVolumeCount: 10,\n language: \"en\",\n ageRating: 13,\n readingDirection: \"ltr\",\n\n // Taxonomy\n genres: [\"Action\", \"Comedy\", \"Test\", \"Echo\"],\n tags: [\"plugin-test\", \"echo\", \"automation\", \"development\"],\n\n // Credits\n authors: [\n { name: \"Echo Author\", role: \"author\" },\n { name: \"Test Writer\", role: \"author\" },\n ],\n artists: [\"Echo Artist\"],\n publisher: \"Echo Publisher\",\n\n // Media\n coverUrl: \"https://picsum.photos/300/450\",\n bannerUrl: \"https://picsum.photos/800/200\",\n\n // Primary rating\n rating: {\n score: 85,\n voteCount: 100,\n source: \"echo\",\n },\n\n // Multiple external ratings for testing aggregation\n externalRatings: [\n {\n score: 85,\n voteCount: 100,\n source: \"echo\",\n },\n {\n score: 92,\n voteCount: 5000,\n source: \"anilist\",\n },\n {\n score: 88,\n voteCount: 2500,\n source: \"mal\",\n },\n ],\n\n // External links\n externalLinks: [\n {\n url: `https://echo.example.com/series/${baseId}`,\n label: \"Echo Provider\",\n linkType: \"provider\",\n },\n {\n url: \"https://official-echo.example.com\",\n label: \"Official Site\",\n linkType: \"official\",\n },\n {\n url: \"https://twitter.com/echo_series\",\n label: \"Twitter\",\n linkType: \"social\",\n },\n {\n url: \"https://store.example.com/echo\",\n label: \"Buy\",\n linkType: \"purchase\",\n },\n ],\n };\n },\n\n async match(params: MetadataMatchParams): Promise<MetadataMatchResponse> {\n // Return a match based on the title\n const normalizedTitle = params.title.toLowerCase().replace(/\\s+/g, \"-\");\n return {\n match: {\n externalId: `match-${normalizedTitle}`,\n title: params.title,\n alternateTitles: [],\n year: params.year,\n relevanceScore: 0.9,\n preview: {\n status: \"ended\",\n genres: [\"Matched\"],\n description: `Matched from title: \"${params.title}\"`,\n },\n },\n confidence: 0.85,\n alternatives: [\n {\n externalId: \"alt-1\",\n title: `Alternative: ${params.title}`,\n alternateTitles: [],\n relevanceScore: 0.6,\n },\n ],\n };\n },\n};\n\n// =============================================================================\n// Book Metadata Provider\n// =============================================================================\n\n// Generate echo results for book search\nfunction generateBookEchoResults(params: BookSearchParams, maxResults: number) {\n const results = [];\n const count = Math.min(Math.max(1, maxResults), 20);\n const searchTerm = params.isbn || params.query || \"unknown\";\n\n for (let i = 1; i <= count; i++) {\n const isIsbnSearch = !!params.isbn;\n results.push({\n externalId: encodeExternalId(`echo-book-${i}`, searchTerm),\n title: i === 1 ? `Echo Book: ${searchTerm}` : `Echo Book Result ${i} for: ${searchTerm}`,\n alternateTitles: i === 1 ? [`Book Query: ${searchTerm}`] : [],\n year: params.year || new Date().getFullYear(),\n relevanceScore: isIsbnSearch ? 1.0 : Math.max(0.1, 1.0 - (i - 1) * 0.1),\n preview: {\n status: i % 2 === 0 ? \"ongoing\" : \"ended\",\n genres: i === 1 ? [\"Test\", \"Echo\", \"Book\"] : [\"Test\", \"Book\"],\n rating: i === 1 ? 9.0 : undefined,\n description:\n i === 1\n ? `Book search ${isIsbnSearch ? \"by ISBN\" : \"by query\"}: \"${searchTerm}\"`\n : `Book result ${i} for testing`,\n },\n });\n }\n\n return results;\n}\n\nconst bookProvider: BookMetadataProvider = {\n async search(params: BookSearchParams): Promise<MetadataSearchResponse> {\n // Echo back the ISBN or query as search results\n return {\n results: generateBookEchoResults(params, config.maxResults),\n };\n },\n\n async get(params: MetadataGetParams): Promise<PluginBookMetadata> {\n // Recover the original search term encoded in the externalId so the title\n // matches what the user saw in search results.\n const { baseId, query } = decodeExternalId(params.externalId);\n const title = query ?? `Echo Book: ${baseId}`;\n\n // Return book metadata based on the external ID with all fields populated for testing\n return {\n externalId: params.externalId,\n externalUrl: `https://echo.example.com/book/${baseId}`,\n title,\n subtitle: \"A Test Subtitle\",\n alternateTitles: [\n { title, language: \"en\", titleType: \"english\" },\n { title: `${title} (native)`, language: \"ja\", titleType: \"native\" },\n ],\n summary: `This is the full book metadata for \"${title}\" (id: ${baseId}). It includes a detailed description to test book metadata handling.`,\n bookType: \"novel\",\n\n // Book-specific fields\n volume: 1,\n pageCount: 320,\n releaseDate: \"2024-01-15\",\n year: 2024,\n\n // ISBN\n isbn: \"978-0-306-40615-7\",\n isbns: [\"978-0-306-40615-7\", \"0-306-40615-2\"],\n\n // Edition/Translation\n edition: \"First Edition\",\n originalTitle: \"Original Echo Title\",\n originalYear: 2023,\n translator: \"Echo Translator\",\n language: \"en\",\n\n // Series position\n seriesPosition: 1.0,\n seriesTotal: 5,\n\n // Taxonomy\n genres: [\"Fiction\", \"Test\", \"Echo\"],\n tags: [\"plugin-test\", \"echo\", \"book-test\"],\n subjects: [\"Testing\", \"Plugin Development\"],\n\n // Authors with roles\n authors: [\n { name: \"Echo Author\", role: \"author\", sortName: \"Author, Echo\" },\n { name: \"Test Writer\", role: \"co_author\", sortName: \"Writer, Test\" },\n { name: \"Echo Editor\", role: \"editor\" },\n ],\n artists: [\"Echo Illustrator\"],\n publisher: \"Echo Publishing House\",\n\n // Media\n coverUrl: \"https://picsum.photos/300/450\",\n covers: [\n { url: \"https://picsum.photos/300/450\", width: 300, height: 450, size: \"medium\" },\n { url: \"https://picsum.photos/600/900\", width: 600, height: 900, size: \"large\" },\n { url: \"https://picsum.photos/150/225\", width: 150, height: 225, size: \"small\" },\n ],\n\n // Ratings\n rating: {\n score: 88,\n voteCount: 500,\n source: \"echo\",\n },\n externalRatings: [\n { score: 88, voteCount: 500, source: \"echo\" },\n { score: 92, voteCount: 10000, source: \"goodreads\" },\n ],\n\n // Awards\n awards: [\n { name: \"Echo Award\", year: 2024, category: \"Best Test Book\", won: true },\n { name: \"Test Prize\", year: 2024, category: \"Excellence in Testing\", won: false },\n ],\n\n // External links\n externalLinks: [\n {\n url: `https://echo.example.com/book/${baseId}`,\n label: \"Echo Provider\",\n linkType: \"provider\",\n },\n {\n url: \"https://goodreads.com/book/echo\",\n label: \"Goodreads\",\n linkType: \"other\",\n },\n {\n url: \"https://amazon.com/echo-book\",\n label: \"Amazon\",\n linkType: \"purchase\",\n },\n ],\n };\n },\n\n async match(params: BookMatchParams): Promise<MetadataMatchResponse> {\n // Return a match based on ISBN (preferred) or title\n const identifier = params.isbn || params.title;\n const normalizedId = identifier.toLowerCase().replace(/[\\s-]/g, \"\");\n const isIsbnMatch = !!params.isbn;\n\n return {\n match: {\n externalId: `match-book-${normalizedId}`,\n title: params.title,\n alternateTitles: [],\n year: params.year,\n relevanceScore: isIsbnMatch ? 1.0 : 0.85,\n preview: {\n status: \"ended\",\n genres: [\"Matched\", \"Book\"],\n description: isIsbnMatch\n ? `Matched by ISBN: ${params.isbn}`\n : `Matched from title: \"${params.title}\"`,\n },\n },\n confidence: isIsbnMatch ? 0.99 : 0.8,\n alternatives: isIsbnMatch\n ? []\n : [\n {\n externalId: \"alt-book-1\",\n title: `Alternative: ${params.title}`,\n alternateTitles: [],\n relevanceScore: 0.5,\n },\n ],\n };\n },\n};\n\n// =============================================================================\n// Plugin Initialization\n// =============================================================================\n\ncreateMetadataPlugin({\n manifest,\n provider, // Series provider\n bookProvider, // Book provider\n logLevel: \"debug\",\n onInitialize(params: InitializeParams) {\n // Read config from initialization params\n const maxResults = params.adminConfig?.maxResults as number | undefined;\n if (maxResults !== undefined) {\n config.maxResults = Math.min(Math.max(1, maxResults), 20); // Clamp 1-20\n }\n logger.info(`Echo plugin initialized (maxResults: ${config.maxResults})`);\n },\n});\n\nlogger.info(\"Echo plugin started\");\n"],
|
|
5
5
|
"mappings": "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",
|
|
6
6
|
"names": ["manifest", "logger", "response", "provider", "bookProvider"]
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ashdev/codex-plugin-metadata-echo",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.21.1",
|
|
4
4
|
"description": "Echo metadata plugin for testing Codex plugin protocol",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"bin": "dist/index.js",
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"node": ">=22.0.0"
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@ashdev/codex-plugin-sdk": "^1.
|
|
41
|
+
"@ashdev/codex-plugin-sdk": "^1.21.1"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
44
|
"@biomejs/biome": "^2.4.4",
|