{"version":3,"file":"opencode.mjs","names":[],"sources":["../src/opencode.ts"],"sourcesContent":["import type { Plugin } from '@opencode-ai/plugin'\nimport { tool } from '@opencode-ai/plugin'\nimport { encode } from '@toon-format/toon'\nimport { builtinProviders } from './core/providers.ts'\nimport { create } from './core/registry.ts'\nimport { searchAll } from './core/all.ts'\nimport { readProviderNames, readUrl } from './core/read.ts'\nimport { resolveDefaultProvider, listProviders } from './core/resolve.ts'\nimport './providers/index.ts'\n\nconst z = tool.schema\nconst providerNames = [...builtinProviders, 'all'] as const\n\nconst AskwebPlugin: Plugin = async () => ({\n  tool: {\n    askweb: tool({\n      description: 'Search the web using multiple search engines (Brave, Exa, Jina, Tavily, SerpAPI, SerpBase, SearXNG). Returns relevant web pages with titles, URLs, snippets, and optional metadata. Use provider \"all\" to query all available providers in parallel and get deduplicated results.',\n      args: {\n        query: z.string().describe('Search query'),\n        provider: z.enum(providerNames).optional().describe('Provider to use. Defaults to first available from env. Use \"all\" for parallel search.'),\n        maxResults: z.number().min(1).max(20).optional().describe('Max results (default: 10)'),\n      },\n      async execute(args) {\n        const { query, provider: providerName, maxResults } = args\n\n        if (providerName === 'all') {\n          return encode(await searchAll(query, { maxResults }))\n        }\n\n        const name = providerName ?? resolveDefaultProvider()\n        return encode(await create(name).search(query, { maxResults }))\n      },\n    }),\n    askweb_read: tool({\n      description: 'Read a URL into normalized content using a read-capable provider. Defaults to Jina Reader (r.jina.ai).',\n      args: {\n        url: z.string().describe('URL to read'),\n        provider: z.enum(readProviderNames).optional().describe('Read provider to use. Defaults to Jina.'),\n        format: z.enum(['markdown', 'text', 'html']).optional().describe('Preferred content format.'),\n        maxTokens: z.number().min(1).optional().describe('Maximum tokens to return when supported by the provider.'),\n      },\n      async execute(args) {\n        const { url, provider, format, maxTokens } = args\n        return encode(await readUrl(url, { provider, format, maxTokens }))\n      },\n    }),\n    askweb_providers: tool({\n      description: 'List available web search providers and their configuration status.',\n      args: {},\n      async execute() {\n        return encode(listProviders())\n      },\n    }),\n  },\n})\n\nexport { AskwebPlugin }\nexport default AskwebPlugin\n"],"mappings":";;;;;;;;;;;AAUA,MAAM,IAAI,KAAK;AACf,MAAM,gBAAgB,CAAC,GAAG,kBAAkB,MAAM;AAElD,MAAM,eAAuB,aAAa,EACxC,MAAM;CACJ,QAAQ,KAAK;EACX,aAAa;EACb,MAAM;GACJ,OAAO,EAAE,QAAQ,CAAC,SAAS,eAAe;GAC1C,UAAU,EAAE,KAAK,cAAc,CAAC,UAAU,CAAC,SAAS,0FAAwF;GAC5I,YAAY,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,4BAAA;GAC3D;EACD,MAAM,QAAQ,MAAM;GAClB,MAAM,EAAE,OAAO,UAAU,cAAc,eAAe;AAEtD,OAAI,iBAAiB,MACnB,QAAO,OAAO,MAAM,UAAU,OAAO,EAAE,YAAY,CAAC,CAAC;AAIvD,UAAO,OAAO,MAAM,OADP,gBAAgB,wBAAwB,CACrB,CAAC,OAAO,OAAO,EAAE,YAAY,CAAC,CAAC;;EAElE,CAAC;CACF,aAAa,KAAK;EAChB,aAAa;EACb,MAAM;GACJ,KAAK,EAAE,QAAQ,CAAC,SAAS,cAAc;GACvC,UAAU,EAAE,KAAK,kBAAkB,CAAC,UAAU,CAAC,SAAS,0CAA0C;GAClG,QAAQ,EAAE,KAAK;IAAC;IAAY;IAAQ;IAAO,CAAC,CAAC,UAAU,CAAC,SAAS,4BAA4B;GAC7F,WAAW,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,2DAAA;GAClD;EACD,MAAM,QAAQ,MAAM;GAClB,MAAM,EAAE,KAAK,UAAU,QAAQ,cAAc;AAC7C,UAAO,OAAO,MAAM,QAAQ,KAAK;IAAE;IAAU;IAAQ;IAAW,CAAC,CAAC;;EAErE,CAAC;CACF,kBAAkB,KAAK;EACrB,aAAa;EACb,MAAM,EAAE;EACR,MAAM,UAAU;AACd,UAAO,OAAO,eAAe,CAAC;;EAEjC,CAAA;CACF,EACF"}