{
  "schema_version": "0.1",
  "name": "npm-original",
  "description": "Among same or near-name npm packages (including scoped forks), classify the likely original vs forks vs independent same-name projects. Not a typosquat scanner.",
  "homepage": "https://dev.luling.xyz/npm-original/",
  "version": "0.1.0",
  "entrypoints": [
    {
      "name": "check",
      "description": "Classify packages for a query name. Runs client-side; prefer a JS/browser runtime.",
      "method": "GET",
      "url": "https://dev.luling.xyz/npm-original/?q={package}&format=json",
      "parameters": {
        "q": { "type": "string", "required": true, "description": "npm package name, e.g. tsc-rs" },
        "format": { "type": "string", "enum": ["json"], "description": "Return machine JSON after client fetches complete" }
      },
      "response": {
        "status": "ok | rate_limited | error",
        "query": "string",
        "packages": [
          {
            "name": "string",
            "weeklyDownloads": "number|null",
            "created": "ISO string|null",
            "repository": "owner/repo|null",
            "classification": "original | fork | same-project | independent | uncertain",
            "relatedTo": "string|null",
            "reason": "string"
          }
        ],
        "verdict": {
          "original": "string|null",
          "forkCount": "number",
          "independentCount": "number",
          "total": "number"
        }
      }
    }
  ],
  "notes": [
    "Judgment: GitHub fork parent > download magnitude > repo ownership > publish time (weak).",
    "Static hosting: format=json requires executing page JS (headless browser or similar)."
  ]
}
