{
  "openapi": "3.1.0",
  "info": {
    "title": "dshfind 插件目录 API v0.5.0（Apifox 调试版）",
    "version": "0.5.0",
    "description": "面向 Apifox 文件导入和直接调试的公开只读契约。\n\n导入时启用“导入 Servers 为环境”和“自动生成接口用例”，选择生成的生产环境后即可发送。\n\n所有请求均无需鉴权；示例参数经过约束，不包含会过期的 data_version、cursor、Cookie 或 Token。"
  },
  "servers": [
    {
      "url": "https://api.dshfind.com",
      "description": "生产环境（公开只读，无需鉴权）"
    }
  ],
  "security": [],
  "tags": [
    {
      "name": "Plugins",
      "description": "Public plugin search, listing, detail, and bulk catalog endpoints."
    },
    {
      "name": "Categories",
      "description": "Public plugin category facets used by directory filters."
    },
    {
      "name": "GraphQL",
      "description": "Public read-only field-selectable GraphQL endpoint and published SDL."
    },
    {
      "name": "Market",
      "description": "Standard DSH catalog-source manifest and cursor-paginated market feed."
    },
    {
      "name": "Service",
      "description": "Public service health and loaded-catalog status."
    }
  ],
  "paths": {
    "/v1/suggest": {
      "get": {
        "tags": [
          "Plugins"
        ],
        "operationId": "suggestPlugins",
        "summary": "Suggest plugins by keyword",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 64,
              "default": "memory"
            },
            "description": "At least two trimmed characters are needed for results.",
            "example": "memory"
          }
        ],
        "responses": {
          "200": {
            "description": "Plugin suggestions",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuggestionResponse"
                }
              }
            }
          },
          "default": {
            "description": "API error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security": []
      }
    },
    "/graphql": {
      "get": {
        "tags": [
          "Categories"
        ],
        "operationId": "listPluginCategories",
        "summary": "Get available plugin categories and counts",
        "description": "Read the public GraphQL pluginFacets category dimension used to populate category filters.",
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "default": "query DshFindCategories { pluginFacets { categories { value count } } }"
            },
            "description": "Fixed read-only GraphQL category-facet query.",
            "example": "query DshFindCategories { pluginFacets { categories { value count } } }"
          }
        ],
        "responses": {
          "200": {
            "description": "Plugin category facets",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GraphQLCategoriesResponse"
                }
              }
            }
          },
          "default": {
            "description": "API error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security": []
      },
      "post": {
        "tags": [
          "GraphQL"
        ],
        "operationId": "executeGraphQLQuery",
        "summary": "Execute a public read-only GraphQL query",
        "description": "Run any query allowed by the published SDL. Mutations, subscriptions, directives, introspection, and private fields are not supported.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GraphQLRequest"
              },
              "examples": {
                "dataset": {
                  "summary": "Dataset metadata",
                  "value": {
                    "query": "query DshFindDataset { dataset { dataVersion asOf } }",
                    "variables": {},
                    "operationName": "DshFindDataset"
                  }
                },
                "facets": {
                  "summary": "All filter facets",
                  "value": {
                    "query": "query DshFindFacets { pluginFacets { categories { value count } languages { value count } tags { value count } grades { value count } } }",
                    "variables": {},
                    "operationName": "DshFindFacets"
                  }
                },
                "plugins": {
                  "summary": "Filtered cursor page",
                  "value": {
                    "query": "query DshFindPlugins($first: Int = 20, $after: String, $filter: PluginFilter, $sort: PluginSort = DEFAULT, $order: SortOrder = DESC) { plugins(first: $first, after: $after, filter: $filter, sort: $sort, order: $order) { totalCount dataVersion asOf nodes { id fullName name owner repositoryUrl description tags language stars contributors pushedAt archived category score grade isFeatured isOfficial isInsider isRisky riskNote isPlugin install { cmd source kind pkgName npmPublished releaseTgzUrl releaseTag probedAt } } pageInfo { hasNextPage endCursor } } }",
                    "variables": {
                      "first": 5,
                      "after": null,
                      "filter": {
                        "category": "memory",
                        "hasInstall": true
                      },
                      "sort": "STARS",
                      "order": "DESC"
                    },
                    "operationName": "DshFindPlugins"
                  }
                },
                "plugin": {
                  "summary": "Rich plugin detail",
                  "value": {
                    "query": "query DshFindPlugin($fullName: ID!, $locale: String, $days: Int = 30) { plugin(fullName: $fullName) { id fullName name owner repositoryUrl description tags language stars contributors pushedAt archived category score grade rating { score grade calculatedAt version } isFeatured isOfficial isInsider isRisky riskNote isPlugin install { cmd source kind pkgName npmPublished releaseTgzUrl releaseTag probedAt } firstSeenAt lastSyncedAt i18n(locale: $locale) { locale description intro highlights updatedAt } snapshots(days: $days) { date stars contributors pushedAt } growth { windowDays stars contributors } } }",
                    "variables": {
                      "fullName": "deepseek-ai/deepseek-harness",
                      "locale": "zh",
                      "days": 7
                    },
                    "operationName": "DshFindPlugin"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "GraphQL result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GraphQLResponse"
                }
              }
            }
          },
          "default": {
            "description": "API error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security": []
      }
    },
    "/graphql/schema": {
      "get": {
        "tags": [
          "GraphQL"
        ],
        "operationId": "getGraphQLSchema",
        "summary": "Download the published GraphQL SDL",
        "description": "The service intentionally disables introspection and publishes its current read-only schema at this endpoint instead.",
        "responses": {
          "200": {
            "description": "GraphQL SDL",
            "content": {
              "application/graphql": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "default": {
            "description": "API error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security": []
      }
    },
    "/v1/plugins": {
      "get": {
        "tags": [
          "Plugins"
        ],
        "operationId": "listPlugins",
        "summary": "List and filter public plugins",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 1
            },
            "example": 1
          },
          {
            "name": "per_page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 5
            },
            "example": 5
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 64,
              "default": "memory"
            },
            "example": "memory"
          },
          {
            "name": "category",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "language",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "grade",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "S",
                "A",
                "B",
                "C"
              ]
            }
          },
          {
            "name": "owner",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tag",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "min_score",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 100
            }
          },
          {
            "name": "featured",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "official",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "archived",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "insider",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "has_install",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "is_plugin",
            "in": "query",
            "required": false,
            "schema": {
              "oneOf": [
                {
                  "type": "boolean"
                },
                {
                  "type": "integer",
                  "enum": [
                    0,
                    1
                  ]
                }
              ]
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "stars",
                "updated",
                "score",
                "name"
              ],
              "default": "stars"
            },
            "example": "stars"
          },
          {
            "name": "order",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "asc",
                "desc"
              ],
              "default": "desc"
            },
            "example": "desc"
          },
          {
            "name": "data_version",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Plugin page",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PluginListResponse"
                }
              }
            }
          },
          "409": {
            "description": "The pinned data version is stale; restart at page 1.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "default": {
            "description": "API error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security": []
      }
    },
    "/v1/plugins/{owner}/{repo}": {
      "get": {
        "tags": [
          "Plugins"
        ],
        "operationId": "getPlugin",
        "summary": "Get one plugin with localized details and growth",
        "parameters": [
          {
            "name": "owner",
            "in": "path",
            "required": true,
            "description": "Repository owner",
            "schema": {
              "type": "string",
              "default": "deepseek-ai"
            },
            "example": "deepseek-ai"
          },
          {
            "name": "repo",
            "in": "path",
            "required": true,
            "description": "Repository name",
            "schema": {
              "type": "string",
              "default": "deepseek-harness"
            },
            "example": "deepseek-harness"
          },
          {
            "name": "snapshot_days",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 90,
              "default": 7
            },
            "example": 7
          }
        ],
        "responses": {
          "200": {
            "description": "Plugin detail",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PluginDetail"
                }
              }
            }
          },
          "404": {
            "description": "Plugin not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "default": {
            "description": "API error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security": []
      }
    },
    "/v1/catalog": {
      "get": {
        "tags": [
          "Plugins"
        ],
        "operationId": "getCatalog",
        "summary": "Download the complete plugin catalog snapshot",
        "description": "The response can be several megabytes. Pass a data_version learned from listPlugins to request a stable snapshot.",
        "parameters": [
          {
            "name": "data_version",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Complete plugin catalog",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CatalogResponse"
                }
              }
            }
          },
          "default": {
            "description": "API error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security": []
      }
    },
    "/market/manifest.json": {
      "get": {
        "tags": [
          "Market"
        ],
        "operationId": "getMarketManifest",
        "summary": "Get the standard DSH catalog-source manifest",
        "responses": {
          "200": {
            "description": "Catalog source manifest",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MarketManifest"
                }
              }
            }
          },
          "default": {
            "description": "API error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security": []
      }
    },
    "/market/v1/plugins": {
      "get": {
        "tags": [
          "Market"
        ],
        "operationId": "listMarketPlugins",
        "summary": "Page through the standard DSH market catalog",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "category",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 5
            },
            "example": 5
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "Opaque cursor from the previous page.nextCursor value."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Standard market catalog page",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MarketPage"
                }
              }
            }
          },
          "default": {
            "description": "API error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security": []
      }
    },
    "/healthz": {
      "get": {
        "tags": [
          "Service"
        ],
        "operationId": "getHealth",
        "summary": "Read public service health",
        "responses": {
          "200": {
            "description": "API and plugin snapshot are healthy",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Health"
                }
              }
            }
          },
          "503": {
            "description": "Plugin snapshot is unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Health"
                }
              }
            }
          }
        },
        "security": []
      }
    }
  },
  "components": {
    "schemas": {
      "Error": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string"
          },
          "message": {
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "InstallInfo": {
        "type": "object",
        "properties": {
          "cmd": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "source": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "manual",
                  "auto"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "kind": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "release",
                  "npm",
                  "git",
                  "build-required",
                  "not-installable"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "pkg_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "pkg_version": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "npm_published": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ]
          },
          "probed_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": false
      },
      "Plugin": {
        "type": "object",
        "properties": {
          "full_name": {
            "type": "string",
            "example": "deepseek-ai/deepseek-harness"
          },
          "name": {
            "type": "string",
            "example": "deepseek-harness"
          },
          "owner": {
            "type": "string",
            "example": "deepseek-ai"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "repository_url": {
            "type": "string",
            "format": "uri"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "language": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "stars": {
            "type": "integer",
            "minimum": 0
          },
          "contributors": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0
              },
              {
                "type": "null"
              }
            ]
          },
          "pushed_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "archived": {
            "type": "boolean"
          },
          "category": {
            "type": "string"
          },
          "score": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 100
              },
              {
                "type": "null"
              }
            ]
          },
          "grade": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "S",
                  "A",
                  "B",
                  "C"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "scored_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "score_version": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "is_featured": {
            "type": "boolean"
          },
          "is_official": {
            "type": "boolean"
          },
          "is_insider": {
            "type": "boolean"
          },
          "is_risky": {
            "type": "boolean"
          },
          "risk_note": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "is_plugin": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ]
          },
          "install": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/InstallInfo"
              },
              {
                "type": "null"
              }
            ]
          },
          "first_seen_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "last_synced_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "full_name",
          "name",
          "owner",
          "repository_url",
          "tags",
          "stars"
        ],
        "additionalProperties": false
      },
      "PluginListResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Plugin"
            }
          },
          "page": {
            "type": "integer"
          },
          "per_page": {
            "type": "integer"
          },
          "total": {
            "type": "integer"
          },
          "total_pages": {
            "type": "integer"
          },
          "data_version": {
            "type": "string"
          },
          "as_of": {
            "type": "string",
            "format": "date-time"
          },
          "generated_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "data",
          "page",
          "per_page",
          "total",
          "total_pages",
          "data_version"
        ],
        "additionalProperties": false
      },
      "CatalogResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Plugin"
            }
          },
          "total": {
            "type": "integer"
          },
          "data_version": {
            "type": "string"
          },
          "as_of": {
            "type": "string",
            "format": "date-time"
          },
          "generated_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "data",
          "total",
          "data_version"
        ],
        "additionalProperties": false
      },
      "Suggestion": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "plugin"
          },
          "id": {
            "type": "string"
          },
          "label": {
            "type": "string"
          },
          "sub": {
            "type": "string"
          },
          "href": {
            "type": "string",
            "example": "/plugins/omdsh-dev/dsh-mnemon"
          },
          "stars": {
            "type": "integer",
            "minimum": 0
          },
          "featured": {
            "type": "boolean"
          }
        },
        "required": [
          "type",
          "id",
          "label",
          "href",
          "stars",
          "featured"
        ],
        "additionalProperties": false
      },
      "SuggestionResponse": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Suggestion"
            },
            "maxItems": 10
          }
        },
        "required": [
          "items"
        ],
        "additionalProperties": false
      },
      "PluginFacet": {
        "type": "object",
        "properties": {
          "value": {
            "type": "string",
            "example": "memory"
          },
          "count": {
            "type": "integer",
            "minimum": 0,
            "example": 468
          }
        },
        "required": [
          "value",
          "count"
        ],
        "additionalProperties": false
      },
      "GraphQLError": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string"
          }
        },
        "required": [
          "message"
        ],
        "additionalProperties": false
      },
      "GraphQLRequest": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "A read-only operation accepted by the published SDL."
          },
          "variables": {
            "type": "object",
            "additionalProperties": true
          },
          "operationName": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "query"
        ],
        "additionalProperties": false
      },
      "GraphQLResponse": {
        "type": "object",
        "properties": {
          "data": {
            "anyOf": [
              {
                "type": "object",
                "additionalProperties": true
              },
              {
                "type": "null"
              }
            ]
          },
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GraphQLError"
            }
          }
        },
        "additionalProperties": false
      },
      "GraphQLCategoriesResponse": {
        "type": "object",
        "properties": {
          "data": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "pluginFacets": {
                    "type": "object",
                    "properties": {
                      "categories": {
                        "type": "array",
                        "items": {
                          "$ref": "#/components/schemas/PluginFacet"
                        }
                      }
                    },
                    "required": [
                      "categories"
                    ],
                    "additionalProperties": false
                  }
                },
                "required": [
                  "pluginFacets"
                ],
                "additionalProperties": false
              },
              {
                "type": "null"
              }
            ]
          },
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GraphQLError"
            }
          }
        },
        "additionalProperties": false
      },
      "LocalizedPluginCopy": {
        "type": "object",
        "properties": {
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "intro": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "highlights": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": false
      },
      "PluginSnapshot": {
        "type": "object",
        "properties": {
          "date": {
            "type": "string",
            "format": "date"
          },
          "stars": {
            "type": "integer",
            "minimum": 0
          },
          "contributors": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0
              },
              {
                "type": "null"
              }
            ]
          },
          "pushed_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": false
      },
      "PluginGrowth": {
        "type": "object",
        "properties": {
          "window_days": {
            "type": "integer",
            "minimum": 1
          },
          "stars": {
            "type": "integer"
          },
          "contributors": {
            "type": "integer"
          }
        },
        "additionalProperties": false
      },
      "PluginDetail": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Plugin"
          },
          {
            "type": "object",
            "properties": {
              "i18n": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/LocalizedPluginCopy"
                }
              },
              "snapshots": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/PluginSnapshot"
                }
              },
              "growth": {
                "$ref": "#/components/schemas/PluginGrowth"
              },
              "data_version": {
                "type": "string"
              },
              "as_of": {
                "type": "string",
                "format": "date-time"
              }
            },
            "additionalProperties": false
          }
        ]
      },
      "MarketManifest": {
        "type": "object",
        "properties": {
          "manifestVersion": {
            "type": "string",
            "const": "1.0.0"
          },
          "providerId": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "homepage": {
            "type": "string",
            "format": "uri"
          },
          "attribution": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string"
              },
              "url": {
                "type": "string",
                "format": "uri"
              }
            },
            "additionalProperties": false
          },
          "transport": {
            "type": "object",
            "properties": {
              "kind": {
                "type": "string",
                "const": "https-json"
              },
              "endpoint": {
                "type": "string",
                "format": "uri"
              },
              "method": {
                "type": "string",
                "const": "GET"
              }
            },
            "additionalProperties": false
          },
          "query": {
            "type": "object",
            "properties": {
              "supported": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "defaultLimit": {
                "type": "integer"
              },
              "maxLimit": {
                "type": "integer"
              },
              "sorts": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            },
            "additionalProperties": false
          }
        },
        "required": [
          "manifestVersion",
          "providerId",
          "name",
          "transport",
          "query"
        ],
        "additionalProperties": false
      },
      "MarketItem": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "displayName": {
            "type": "string"
          },
          "summary": {
            "type": "string"
          },
          "homepage": {
            "type": "string",
            "format": "uri"
          },
          "latestVersion": {
            "type": "string"
          },
          "license": {
            "type": "string"
          },
          "categories": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "keywords": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "repository": {
            "type": "object",
            "properties": {
              "url": {
                "type": "string",
                "format": "uri"
              }
            },
            "additionalProperties": false
          },
          "package": {
            "type": "object",
            "properties": {
              "registry": {
                "type": "string",
                "const": "npm"
              },
              "name": {
                "type": "string"
              }
            },
            "additionalProperties": false
          },
          "publisher": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string"
              },
              "url": {
                "type": "string",
                "format": "uri"
              }
            },
            "additionalProperties": false
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "id",
          "name",
          "displayName",
          "summary"
        ],
        "additionalProperties": false
      },
      "MarketPage": {
        "type": "object",
        "properties": {
          "schemaVersion": {
            "type": "string",
            "const": "1.0.0"
          },
          "generatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "revision": {
            "type": "string"
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MarketItem"
            }
          },
          "page": {
            "type": "object",
            "properties": {
              "nextCursor": {
                "type": "string"
              },
              "total": {
                "type": "integer",
                "minimum": 0
              }
            },
            "required": [
              "total"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "schemaVersion",
          "generatedAt",
          "revision",
          "items",
          "page"
        ],
        "additionalProperties": false
      },
      "Health": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string"
          },
          "plugins_loaded": {
            "type": "integer",
            "minimum": 0
          },
          "commit_sha": {
            "type": "string"
          },
          "deployment_id": {
            "type": "string"
          },
          "cache_loaded_at": {
            "type": "string",
            "format": "date-time"
          },
          "audit_queue": {
            "type": "integer",
            "minimum": 0
          },
          "audit_dropped": {
            "type": "integer",
            "minimum": 0
          },
          "rate_limit_backend": {
            "type": "string"
          },
          "rate_limit_redis_fallbacks": {
            "type": "integer",
            "minimum": 0
          }
        },
        "required": [
          "status",
          "plugins_loaded"
        ],
        "additionalProperties": false
      }
    }
  },
  "x-cli-anything-links": [
    {
      "id": "listPlugins-to-getPlugin",
      "from": "listPlugins",
      "to": "getPlugin",
      "sourceSelector": "$.data[*].full_name",
      "parameterMap": {
        "owner": "$item.owner",
        "repo": "$item.name"
      }
    },
    {
      "id": "listPlugins-to-getCatalog",
      "from": "listPlugins",
      "to": "getCatalog",
      "sourceSelector": "$.data_version",
      "parameterMap": {
        "data_version": "$.data_version"
      }
    },
    {
      "id": "getMarketManifest-to-listMarketPlugins",
      "from": "getMarketManifest",
      "to": "listMarketPlugins",
      "sourceSelector": "$.transport.endpoint",
      "parameterMap": {}
    }
  ],
  "externalDocs": {
    "description": "dshfind 插件超市",
    "url": "https://dshfind.com/zh/plugins"
  }
}
