{"version":3,"file":"ai.mjs","names":[],"sources":["../src/ai.ts"],"sourcesContent":["import { tool } from \"ai\";\nimport { z } from \"zod\";\nimport {\n  bulkFetchPackages,\n  fetchDependenciesFromPURL,\n  fetchMaintainersFromPURL,\n  fetchPackageFromPURL,\n  fetchVersionsFromPURL,\n} from \"./helpers.ts\";\n\nexport const packageTool = tool({\n  description:\n    \"Query package metadata from npm, PyPI, crates.io, RubyGems, Packagist, and Arch Linux using PURLs. Supports package info, versions, dependencies, maintainers, and bulk package metadata lookups.\",\n  inputSchema: z.discriminatedUnion(\"operation\", [\n    z.object({\n      operation: z.literal(\"package\"),\n      purl: z.string().describe(\"Package PURL, for example pkg:npm/lodash or pkg:cargo/serde\"),\n    }),\n    z.object({\n      operation: z.literal(\"versions\"),\n      purl: z.string().describe(\"Package PURL, for example pkg:npm/lodash or pkg:cargo/serde\"),\n    }),\n    z.object({\n      operation: z.literal(\"dependencies\"),\n      purl: z\n        .string()\n        .describe(\"Package PURL including a version, for example pkg:pypi/flask@3.1.1\"),\n    }),\n    z.object({\n      operation: z.literal(\"maintainers\"),\n      purl: z\n        .string()\n        .describe(\"Package PURL, for example pkg:gem/rails or pkg:composer/laravel/framework\"),\n    }),\n    z.object({\n      operation: z.literal(\"bulk-packages\"),\n      purls: z.array(z.string()).min(1).max(50).describe(\"List of package PURLs to fetch in bulk.\"),\n      concurrency: z\n        .number()\n        .int()\n        .min(1)\n        .max(50)\n        .optional()\n        .describe(\"Maximum concurrent lookups. Defaults to 15.\"),\n    }),\n  ]),\n  execute: async (input, { abortSignal }) => {\n    switch (input.operation) {\n      case \"package\":\n        return fetchPackageFromPURL(input.purl, abortSignal);\n      case \"versions\":\n        return fetchVersionsFromPURL(input.purl, abortSignal);\n      case \"dependencies\":\n        return fetchDependenciesFromPURL(input.purl, abortSignal);\n      case \"maintainers\":\n        return fetchMaintainersFromPURL(input.purl, abortSignal);\n      case \"bulk-packages\": {\n        const results = await bulkFetchPackages(input.purls, {\n          concurrency: input.concurrency,\n          signal: abortSignal,\n        });\n        return Object.fromEntries(results);\n      }\n    }\n  },\n});\n"],"mappings":";;;;;;AAUA,MAAa,cAAc,KAAK;CAC9B,aACE;CACF,aAAa,EAAE,mBAAmB,aAAa;EAC7C,EAAE,OAAO;GACP,WAAW,EAAE,QAAQ,UAAU;GAC/B,MAAM,EAAE,QAAQ,CAAC,SAAS,8DAAA;GAC3B,CAAC;EACF,EAAE,OAAO;GACP,WAAW,EAAE,QAAQ,WAAW;GAChC,MAAM,EAAE,QAAQ,CAAC,SAAS,8DAAA;GAC3B,CAAC;EACF,EAAE,OAAO;GACP,WAAW,EAAE,QAAQ,eAAe;GACpC,MAAM,EACH,QAAQ,CACR,SAAS,qEAAA;GACb,CAAC;EACF,EAAE,OAAO;GACP,WAAW,EAAE,QAAQ,cAAc;GACnC,MAAM,EACH,QAAQ,CACR,SAAS,4EAAA;GACb,CAAC;EACF,EAAE,OAAO;GACP,WAAW,EAAE,QAAQ,gBAAgB;GACrC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,GAAG,CAAC,SAAS,0CAA0C;GAC7F,aAAa,EACV,QAAQ,CACR,KAAK,CACL,IAAI,EAAE,CACN,IAAI,GAAG,CACP,UAAU,CACV,SAAS,8CAAA;GACb,CAAA;EACF,CAAC;CACF,SAAS,OAAO,OAAO,EAAE,kBAAkB;AACzC,UAAQ,MAAM,WAAd;GACE,KAAK,UACH,QAAO,qBAAqB,MAAM,MAAM,YAAY;GACtD,KAAK,WACH,QAAO,sBAAsB,MAAM,MAAM,YAAY;GACvD,KAAK,eACH,QAAO,0BAA0B,MAAM,MAAM,YAAY;GAC3D,KAAK,cACH,QAAO,yBAAyB,MAAM,MAAM,YAAY;GAC1D,KAAK,iBAAiB;IACpB,MAAM,UAAU,MAAM,kBAAkB,MAAM,OAAO;KACnD,aAAa,MAAM;KACnB,QAAQ;KACT,CAAC;AACF,WAAO,OAAO,YAAY,QAAQ;;;;CAIzC,CAAC"}