New:Socket for Asana Is Now Available.Learn more
Get Started

aigentify

Package Overview
Dependencies
Maintainers
1
Versions
7
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

aigentify - npm Package Compare versions

Comparing version
0.1.0
to
0.1.1
+7
-5
dist/cli.cjs

@@ -39,3 +39,4 @@ #!/usr/bin/env node

name: "aigentify",
version: "0.1.0",
version: "0.1.1",
mcpName: "io.github.pooriaarab/aigentify",
description: "Audit and generate agent-native product surfaces",

@@ -79,3 +80,3 @@ type: "module",

// src/constants.ts
var PKG_NAME, VERSION, CONFIG_FILENAME, SERVER_SCHEMA_URL;
var PKG_NAME, VERSION, CONFIG_FILENAME, SERVER_SCHEMA_URL, SERVER_SCHEMA_RE;
var init_constants = __esm({

@@ -88,3 +89,4 @@ "src/constants.ts"() {

CONFIG_FILENAME = `${PKG_NAME}.config.ts`;
SERVER_SCHEMA_URL = "https://static.modelcontextprotocol.io/schemas/2025-07-09/server.schema.json";
SERVER_SCHEMA_URL = "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json";
SERVER_SCHEMA_RE = /^https:\/\/static\.modelcontextprotocol\.io\/schemas\/\d{4}-\d{2}-\d{2}\/server\.schema\.json$/;
}

@@ -138,3 +140,3 @@ });

if (!value) return { valid: false, reason: "server.json is not valid JSON." };
if (value.$schema !== SERVER_SCHEMA_URL) return { valid: false, reason: `server.json must use the exact schema URL ${SERVER_SCHEMA_URL}.` };
if (typeof value.$schema !== "string" || !SERVER_SCHEMA_RE.test(value.$schema)) return { valid: false, reason: `server.json "$schema" must be a dated MCP registry schema like ${SERVER_SCHEMA_URL} (the bare .../server.json 404s).` };
const missing = ["name", "description", "repository", "version"].filter((key) => !value[key]);

@@ -420,3 +422,3 @@ if (missing.length) return { valid: false, reason: `server.json is missing: ${missing.join(", ")}.` };

if (config.mcpUrl) server.remotes = [{ type: "streamable-http", url: config.mcpUrl }];
else server.packages = [{ registry_type: "npm", identifier: config.npmPackage ?? "aigentify", version: config.version ?? "0.1.0", runtime_hint: "npx", transport: { type: "stdio" } }];
else server.packages = [{ registryType: "npm", registryBaseUrl: "https://registry.npmjs.org", identifier: config.npmPackage ?? "aigentify", version: config.version ?? "0.1.0", transport: { type: "stdio" }, runtimeHint: "npx", packageArguments: [{ type: "positional", valueHint: "subcommand", value: "mcp" }] }];
return `${JSON.stringify(server, null, 2)}

@@ -423,0 +425,0 @@ `;

@@ -1,1 +0,1 @@

{"version":3,"sources":["../package.json","../src/constants.ts","../src/audit.ts","../src/config.ts","../src/generators/agents.ts","../src/generators/agents-route.ts","../src/generators/offer.ts","../src/generators/server.ts","../src/generators/index.ts","../src/mcp.ts","../src/cli.ts","../src/commands/init.ts","../src/commands/gen.ts","../src/commands/load-config.ts"],"sourcesContent":["{\n \"name\": \"aigentify\",\n \"version\": \"0.1.0\",\n \"description\": \"Audit and generate agent-native product surfaces\",\n \"type\": \"module\",\n \"license\": \"MIT\",\n \"bin\": {\"aigentify\": \"dist/cli.js\", \"aigentify-mcp\": \"dist/mcp.js\"},\n \"exports\": {\".\": {\"types\": \"./dist/index.d.ts\", \"import\": \"./dist/index.js\", \"require\": \"./dist/index.cjs\"}},\n \"files\": [\"dist\"],\n \"repository\": {\"type\": \"git\", \"url\": \"git+https://github.com/pooriaarab/aigentify.git\"},\n \"homepage\": \"https://github.com/pooriaarab/aigentify\",\n \"bugs\": \"https://github.com/pooriaarab/aigentify/issues\",\n \"keywords\": [\"agents\", \"agentification\", \"mcp\", \"ai\", \"json-ld\"],\n \"publishConfig\": {\"access\": \"public\"},\n \"scripts\": {\n \"build\": \"tsup\",\n \"test\": \"vitest run\",\n \"lint\": \"tsc --noEmit --pretty false\",\n \"typecheck\": \"tsc --noEmit\",\n \"verify\": \"npm run typecheck && npm run build && npm run test\",\n \"prepublishOnly\": \"npm run verify\"\n },\n \"engines\": {\"node\": \">=20\"},\n \"dependencies\": {\n \"@modelcontextprotocol/sdk\": \"^1.17.5\",\n \"cheerio\": \"^1.1.2\",\n \"commander\": \"^14.0.0\",\n \"jiti\": \"^2.5.1\",\n \"zod\": \"^4.0.0\"\n },\n \"devDependencies\": {\n \"@types/node\": \"^22.15.0\",\n \"tsup\": \"^8.5.0\",\n \"typescript\": \"^5.8.3\",\n \"vitest\": \"^3.2.4\"\n }\n}\n","import pkg from '../package.json';\n\nexport const PKG_NAME = pkg.name;\nexport const VERSION = pkg.version;\nexport const CONFIG_FILENAME = `${PKG_NAME}.config.ts`;\nexport const SERVER_SCHEMA_URL = 'https://static.modelcontextprotocol.io/schemas/2025-07-09/server.schema.json';\n","import { readFile, readdir, stat } from 'node:fs/promises';\nimport path from 'node:path';\nimport { SERVER_SCHEMA_URL } from './constants.js';\n\nexport type AuditStatus = 'pass' | 'fail' | 'warn' | 'na';\nexport interface AuditCheck { id: string; status: AuditStatus; note: string; weight: number }\nexport interface AuditGap { id: string; note: string; fix: string }\nexport interface AuditReport { target: string; score: number; checks: AuditCheck[]; gaps: AuditGap[] }\nexport interface AuditOptions { fetch?: typeof globalThis.fetch }\n\ninterface Endpoint { status: number; contentType: string; text: string }\ninterface Snapshot {\n agents: Endpoint; server: Endpoint; mcp: Endpoint; home: Endpoint; llms: Endpoint; sitemap: Endpoint;\n honestText: string; hasMcp: boolean; networkFailure: boolean;\n}\n\nconst SKIPPED = new Set(['.git', 'node_modules', 'dist', 'coverage', '.next', '_reference_geoaeo']);\nconst WEIGHTS: Record<string, number> = {\n 'agents-md': 15, 'agents-md-public-safe': 10, 'server-json': 15, mcp: 15,\n 'offer-jsonld': 15, 'honest-offer': 10, 'llms-txt': 10, sitemap: 10,\n};\nconst FIXES: Record<string, string> = {\n 'agents-md': 'Add a public AGENTS.md at the target root or serve /agents.md as text/markdown.',\n 'agents-md-public-safe': 'Rewrite AGENTS.md as product guidance. Remove repository paths and contributor instructions.',\n 'server-json': `Add server.json and set \"$schema\" to \"${SERVER_SCHEMA_URL}\". Include a repository and a remotes or packages entry.`,\n mcp: 'Publish server.json, .mcp.json, or an MCP entry point.',\n 'offer-jsonld': 'Publish JSON-LD with @type Offer, or a SoftwareApplication with an offers property.',\n 'honest-offer': 'State the real price plainly. Remove scarcity, countdown, and urgency language.',\n 'llms-txt': 'Publish /llms.txt with a concise product description.',\n sitemap: 'Publish /sitemap.xml for URL discovery.',\n};\n\nfunction check(id: string, status: AuditStatus, note: string): AuditCheck { return { id, status, note, weight: WEIGHTS[id] }; }\n\nexport function scoreAuditChecks(checks: AuditCheck[]): number {\n const relevant = checks.filter(item => item.status !== 'na');\n const total = relevant.reduce((sum, item) => sum + item.weight, 0);\n if (!total) return 0;\n const earned = relevant.reduce((sum, item) => sum + (item.status === 'pass' ? item.weight : item.status === 'warn' ? item.weight / 2 : 0), 0);\n return Math.round((earned / total) * 100);\n}\n\nasync function walkFiles(directory: string): Promise<string[]> {\n const entries = await readdir(directory, { withFileTypes: true });\n const files: string[] = [];\n for (const entry of entries) {\n if (entry.isDirectory() && !SKIPPED.has(entry.name)) files.push(...await walkFiles(path.join(directory, entry.name)));\n else if (entry.isFile()) files.push(path.join(directory, entry.name));\n }\n return files;\n}\n\nasync function readText(file: string | undefined): Promise<string> {\n if (!file) return '';\n try { return await readFile(file, 'utf8'); } catch { return ''; }\n}\n\nfunction findFile(files: string[], name: string): string | undefined {\n return files.find(file => {\n const normalized = file.replaceAll('\\\\', '/');\n return path.basename(normalized) === name || normalized.endsWith(`/${name}/route.ts`);\n });\n}\n\nfunction parseJson(text: string): Record<string, unknown> | undefined {\n try {\n const value: unknown = JSON.parse(text);\n return value && typeof value === 'object' && !Array.isArray(value) ? value as Record<string, unknown> : undefined;\n } catch { return undefined; }\n}\n\nfunction validServer(text: string): { valid: boolean; reason: string } {\n const value = parseJson(text);\n if (!value) return { valid: false, reason: 'server.json is not valid JSON.' };\n if (value.$schema !== SERVER_SCHEMA_URL) return { valid: false, reason: `server.json must use the exact schema URL ${SERVER_SCHEMA_URL}.` };\n const missing = ['name', 'description', 'repository', 'version'].filter(key => !value[key]);\n if (missing.length) return { valid: false, reason: `server.json is missing: ${missing.join(', ')}.` };\n if (!Array.isArray(value.remotes) && !Array.isArray(value.packages)) return { valid: false, reason: 'server.json needs a remotes or packages entry.' };\n return { valid: true, reason: 'server.json has the required MCP registry fields.' };\n}\n\nfunction hasOffer(texts: string[]): boolean {\n return texts.some(text => /\"@type\"\\s*:\\s*\"Offer\"/i.test(text) || /\"@type\"\\s*:\\s*\"SoftwareApplication\"/i.test(text) && /\"offers\"\\s*:/.test(text));\n}\n\nfunction hasUrgency(text: string): boolean {\n return /limited time|act now|hurry|expires|only\\s+\\d+\\s+left|ends in|sign up now|countdown/i.test(text);\n}\n\nfunction publicSafe(text: string): boolean {\n return !(/\\bsrc\\//i.test(text) || /\\bapps\\//i.test(text) || /\\bpackages\\//i.test(text) || /\\b[\\w.-]+\\.ts\\b/i.test(text) || /npm run build/i.test(text) || /\\btsconfig\\b/i.test(text) || /\\bcontributors?\\b/i.test(text) || /^#+\\s*layout\\b/im.test(text));\n}\n\nfunction offerBlock(text: string): string {\n const match = /^#+\\s*Offer\\b/im.exec(text);\n if (!match || match.index === undefined) return '';\n const rest = text.slice(match.index);\n const nextHeading = /^#+\\s+/m.exec(rest.slice(match[0].length));\n return nextHeading?.index === undefined ? rest : rest.slice(0, match[0].length + nextHeading.index);\n}\n\nasync function directorySnapshot(directory: string): Promise<Snapshot> {\n const files = await walkFiles(directory);\n const agentsFile = findFile(files, 'AGENTS.md');\n const serverFile = findFile(files, 'server.json');\n const mcpFile = files.find(file => /(?:^|\\/)\\.mcp\\.json$/.test(file.replaceAll('\\\\', '/')));\n const packageFile = findFile(files, 'package.json');\n const packageText = await readText(packageFile);\n const hasMcpBin = /\"(?:aigentify|[^\"\\n]*mcp[^\"\\n]*)\"\\s*:/i.test(packageText);\n const agentsText = await readText(agentsFile);\n const offerTexts = [agentsText, ...await Promise.all(files.filter(file => /\\.(html?|json|jsonld|md|mdx|tsx|jsx|js|mjs|ts)$/.test(file)).map(readText))];\n const llmsFile = findFile(files, 'llms.txt');\n const sitemapFile = findFile(files, 'sitemap.xml');\n const offerFiles = files.filter(file => /\\.jsonld$|(?:^|\\/)offer[^/]*\\.(?:json|html?)$/i.test(file));\n const honestText = [offerBlock(agentsText), ...await Promise.all(offerFiles.map(readText))].join('\\n');\n return {\n agents: { status: agentsFile ? 200 : 404, contentType: 'text/markdown', text: agentsText },\n server: { status: serverFile ? 200 : 404, contentType: 'application/json', text: await readText(serverFile) },\n mcp: { status: mcpFile || serverFile || hasMcpBin ? 200 : 404, contentType: '', text: '' },\n home: { status: 200, contentType: 'text/plain', text: offerTexts.join('\\n') },\n llms: { status: llmsFile ? 200 : 404, contentType: 'text/plain', text: await readText(llmsFile) },\n sitemap: { status: sitemapFile ? 200 : 404, contentType: 'application/xml', text: await readText(sitemapFile) },\n honestText, hasMcp: Boolean(mcpFile || serverFile || hasMcpBin), networkFailure: false,\n };\n}\n\nasync function fetchText(fetcher: typeof globalThis.fetch, url: string): Promise<Endpoint> {\n try {\n const response = await fetcher(url, { signal: AbortSignal.timeout(8000) });\n return { status: response.status, contentType: response.headers.get('content-type') ?? '', text: await response.text() };\n } catch { return { status: 0, contentType: '', text: '' }; }\n}\n\nasync function urlSnapshot(target: string, fetcher: typeof globalThis.fetch): Promise<Snapshot> {\n const base = target.replace(/\\/+$/, '');\n const [agents, server, mcp, home, llms, sitemap] = await Promise.all([\n fetchText(fetcher, `${base}/agents.md`), fetchText(fetcher, `${base}/server.json`), fetchText(fetcher, `${base}/.well-known/mcp`),\n fetchText(fetcher, base), fetchText(fetcher, `${base}/llms.txt`), fetchText(fetcher, `${base}/sitemap.xml`),\n ]);\n const endpoints = [agents, server, mcp, home, llms, sitemap];\n return { agents, server, mcp, home, llms, sitemap, honestText: [home.text, offerBlock(agents.text)].join('\\n'), hasMcp: server.status >= 200 && server.status < 400 || mcp.status >= 200 && mcp.status < 400, networkFailure: endpoints.every(item => item.status === 0) };\n}\n\nfunction buildChecks(snapshot: Snapshot): AuditCheck[] {\n const agentsPresent = snapshot.agents.status === 200 && snapshot.agents.text.trim().length > 0 && /(?:text\\/(?:markdown|plain)|application\\/markdown)/i.test(snapshot.agents.contentType);\n const agentsStatus: AuditStatus = snapshot.agents.status === 0 ? 'warn' : agentsPresent ? 'pass' : 'fail';\n const publicStatus: AuditStatus = !agentsPresent ? (snapshot.agents.status === 0 ? 'warn' : 'na') : publicSafe(snapshot.agents.text) ? 'pass' : 'warn';\n const serverInfo = snapshot.server.status === 200 ? validServer(snapshot.server.text) : undefined;\n const serverStatus: AuditStatus = snapshot.server.status === 0 ? 'warn' : !snapshot.hasMcp ? 'na' : serverInfo?.valid ? 'pass' : 'fail';\n const mcpStatus: AuditStatus = snapshot.networkFailure ? 'warn' : snapshot.hasMcp ? 'pass' : 'fail';\n const offerTexts = [snapshot.home.text, snapshot.agents.text];\n const offerStatus: AuditStatus = snapshot.home.status === 0 ? 'warn' : hasOffer(offerTexts) ? 'pass' : 'fail';\n const honestStatus: AuditStatus = !hasOffer(offerTexts) && !agentsPresent ? (snapshot.home.status === 0 ? 'warn' : 'na') : hasUrgency(snapshot.honestText) ? 'warn' : 'pass';\n const llmsStatus: AuditStatus = snapshot.llms.status === 0 ? 'warn' : snapshot.llms.status >= 200 && snapshot.llms.status < 400 && snapshot.llms.text.trim() ? 'pass' : 'fail';\n const sitemapStatus: AuditStatus = snapshot.sitemap.status === 0 ? 'warn' : snapshot.sitemap.status >= 200 && snapshot.sitemap.status < 400 && snapshot.sitemap.text.trim() ? 'pass' : 'fail';\n return [\n check('agents-md', agentsStatus, agentsPresent ? 'AGENTS.md is available.' : snapshot.agents.status === 0 ? 'The AGENTS.md request failed.' : 'AGENTS.md is missing.'),\n check('agents-md-public-safe', publicStatus, publicStatus === 'pass' ? 'AGENTS.md describes the product as a public surface.' : publicStatus === 'na' ? 'No AGENTS.md is available to inspect.' : 'AGENTS.md contains repository-internal guidance.'),\n check('server-json', serverStatus, serverInfo?.valid ? serverInfo.reason : serverInfo?.reason ?? (!snapshot.hasMcp ? 'No MCP surface was detected.' : 'server.json is missing.')),\n check('mcp', mcpStatus, snapshot.networkFailure ? 'The MCP discovery request failed.' : snapshot.hasMcp ? 'An MCP surface is available.' : 'No MCP surface was found.'),\n check('offer-jsonld', offerStatus, offerStatus === 'pass' ? 'Offer JSON-LD is available.' : offerStatus === 'warn' ? 'The offer could not be checked.' : 'No Offer JSON-LD was found.'),\n check('honest-offer', honestStatus, honestStatus === 'pass' ? 'Offer language states the price without pressure.' : honestStatus === 'na' ? 'No offer or Offer block was found.' : 'Offer language contains scarcity, countdown, or urgency copy.'),\n check('llms-txt', llmsStatus, llmsStatus === 'pass' ? 'llms.txt is available.' : llmsStatus === 'warn' ? 'The llms.txt request failed.' : 'llms.txt is missing.'),\n check('sitemap', sitemapStatus, sitemapStatus === 'pass' ? 'sitemap.xml is available.' : sitemapStatus === 'warn' ? 'The sitemap request failed.' : 'sitemap.xml is missing.'),\n ];\n}\n\nexport async function auditTarget(target: string, options: AuditOptions = {}): Promise<AuditReport> {\n const targetStat = await stat(target).catch(() => undefined);\n const snapshot = targetStat?.isDirectory() ? await directorySnapshot(target) : await urlSnapshot(target, options.fetch ?? globalThis.fetch);\n const checks = buildChecks(snapshot);\n const gaps = checks.filter(item => item.status === 'fail' || item.status === 'warn').map(item => ({ id: item.id, note: item.note, fix: FIXES[item.id] }));\n return { target, score: scoreAuditChecks(checks), checks, gaps };\n}\n\nexport function formatAuditReport(report: AuditReport): string {\n const lines = [`${report.target}: ${report.score}/100`, ''];\n for (const item of report.checks) lines.push(`${item.status.toUpperCase().padEnd(4)} ${item.id}: ${item.note}`);\n lines.push('', 'Gaps:');\n if (!report.gaps.length) lines.push('None.');\n else report.gaps.forEach((gap, index) => lines.push(`${index + 1}. ${gap.id}: ${gap.fix}`));\n return lines.join('\\n');\n}\n","export interface OfferConfig {\n name?: string;\n description?: string;\n price?: string | number;\n priceCurrency?: string;\n}\n\nexport interface AigentifyConfig {\n name: string;\n description: string;\n repository: string;\n version?: string;\n mcpUrl?: string;\n npmPackage?: string;\n offer?: OfferConfig;\n}\n\nexport function defineConfig(config: AigentifyConfig): AigentifyConfig {\n return { ...config, repository: config.repository.replace(/\\/+$/, ''), version: config.version ?? '0.1.0' };\n}\n\nexport function defaultConfig(): AigentifyConfig {\n return defineConfig({\n name: 'Your product',\n description: 'A product with an agent-native interface.',\n repository: 'https://github.com/your-org/your-product',\n npmPackage: 'your-package',\n });\n}\n","import type { AigentifyConfig } from '../config.js';\n\nexport function generateAgentsMd(config: AigentifyConfig): string {\n const packageName = config.npmPackage ?? '<NPM_PACKAGE>';\n const mcp = config.mcpUrl ?? `npx ${packageName}`;\n const offer = config.offer;\n const offerLine = offer?.price === undefined ? 'Price: <PRICE>' : `Price: ${offer.priceCurrency ?? 'USD'} ${offer.price}`;\n return `# ${config.name}\n\n## Mental model\n\n${config.name} is ${config.description}\n\nUse the product interface for product work. Use the agent interface for repeatable tasks that need structured results.\n\n## The faces\n\n- Product: ${config.repository}\n- MCP: ${mcp}\n- Package: ${packageName}\n\n## MCP tools\n\n| Tool | Input | Result |\n| --- | --- | --- |\n| audit | target | An agent-readiness report with a score and gaps. |\n| gen | artifact and params | A generated agent-native artifact. |\n\n## The loop\n\n1. Audit the target.\n2. Fix the highest-impact gap.\n3. Generate or publish the missing artifact.\n4. Audit again and keep the report with the release.\n\n## Rules\n\n- Treat the product description and prices as source facts.\n- Return structured data when a tool provides it.\n- Ask for missing information before making a high-impact change.\n- Keep public agent instructions about the product and its use.\n\n## Offer\n\n${offer?.description ?? '<OFFER_DESCRIPTION>'}\n\n${offerLine}\n`;\n}\n","import type { AigentifyConfig } from '../config.js';\n\nexport function generateAgentsRoute(config: AigentifyConfig, framework = 'static'): string {\n if (framework === 'next') {\n return `# Serve /agents.md from a Next route\n\nCopy AGENTS.md to a public directory, or add this force-static route:\n\n\\`\\`\\`ts\nimport { readFile } from 'node:fs/promises';\n\nexport const dynamic = 'force-static';\n\nexport async function GET() {\n const body = await readFile('AGENTS.md', 'utf8');\n return new Response(body, { headers: { 'content-type': 'text/markdown; charset=utf-8' } });\n}\n\\`\\`\\`\n\nProduct: ${config.name}\n`;\n }\n return `# Serve /agents.md\n\nCopy the generated AGENTS.md file to public/agents.md and serve it as a static text/markdown response.\n\nProduct: ${config.name}\n`;\n}\n","import type { AigentifyConfig } from '../config.js';\n\nexport function generateOffer(config: AigentifyConfig): string {\n const offer = config.offer ?? {};\n const data = {\n '@context': 'https://schema.org',\n '@type': 'SoftwareApplication',\n name: config.name,\n description: config.description,\n applicationCategory: 'DeveloperApplication',\n offers: [{\n '@type': 'Offer',\n name: offer.name ?? `${config.name} access`,\n ...(offer.description ? { description: offer.description } : {}),\n ...(offer.price === undefined ? {} : { price: String(offer.price) }),\n priceCurrency: offer.priceCurrency ?? 'USD',\n }],\n };\n return `${JSON.stringify(data, null, 2)}\\n`;\n}\n","import { SERVER_SCHEMA_URL } from '../constants.js';\nimport type { AigentifyConfig } from '../config.js';\n\nexport function generateServerJson(config: AigentifyConfig): string {\n const serverName = config.name.includes('/') ? config.name : `io.github.pooriaarab/${config.name.toLowerCase().replace(/[^a-z0-9._-]+/g, '-')}`;\n const server: Record<string, unknown> = {\n $schema: SERVER_SCHEMA_URL,\n name: serverName,\n description: config.description,\n repository: { url: config.repository, source: 'github' },\n version: config.version ?? '0.1.0',\n };\n if (config.mcpUrl) server.remotes = [{ type: 'streamable-http', url: config.mcpUrl }];\n else server.packages = [{ registry_type: 'npm', identifier: config.npmPackage ?? 'aigentify', version: config.version ?? '0.1.0', runtime_hint: 'npx', transport: { type: 'stdio' } }];\n return `${JSON.stringify(server, null, 2)}\\n`;\n}\n","import type { AigentifyConfig } from '../config.js';\nimport { defaultConfig, defineConfig } from '../config.js';\nimport { generateAgentsMd } from './agents.js';\nimport { generateAgentsRoute } from './agents-route.js';\nimport { generateOffer } from './offer.js';\nimport { generateServerJson } from './server.js';\nexport * from './agents.js';\nexport * from './agents-route.js';\nexport * from './offer.js';\nexport * from './server.js';\n\nexport type GeneratedArtifact = 'agents-md' | 'server-json' | 'offer' | 'agents-route';\nexport type GenerateParams = Partial<AigentifyConfig> & { framework?: string };\n\nfunction configFromParams(params: GenerateParams = {}): AigentifyConfig {\n const base = defaultConfig();\n return defineConfig({ ...base, ...params, offer: { ...(base.offer ?? {}), ...(params.offer ?? {}) } });\n}\n\nexport function generate(artifact: GeneratedArtifact, params: GenerateParams = {}): string {\n const config = configFromParams(params);\n if (artifact === 'agents-md') return generateAgentsMd(config);\n if (artifact === 'server-json') return generateServerJson(config);\n if (artifact === 'offer') return generateOffer(config);\n if (artifact === 'agents-route') return generateAgentsRoute(config, params.framework);\n throw new Error(`Unknown artifact: ${artifact}`);\n}\n","#!/usr/bin/env node\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport { z } from 'zod';\nimport { auditTarget } from './audit.js';\nimport { PKG_NAME, VERSION } from './constants.js';\nimport { generate, type GenerateParams, type GeneratedArtifact } from './generators/index.js';\n\nconst artifacts = ['agents-md', 'server-json', 'offer', 'agents-route'] as const;\n\nexport function createMcpServer(): McpServer {\n const server = new McpServer({ name: PKG_NAME, version: VERSION });\n server.registerTool('audit', {\n description: 'Audit a local directory or live URL for agent-native readiness.',\n inputSchema: { target: z.string() },\n }, async ({ target }) => ({ content: [{ type: 'text', text: JSON.stringify(await auditTarget(target), null, 2) }] }));\n server.registerTool('gen', {\n description: 'Generate an agent-native artifact as text.',\n inputSchema: { artifact: z.enum(artifacts), params: z.record(z.string(), z.unknown()).optional() },\n }, async ({ artifact, params }) => ({ content: [{ type: 'text', text: generate(artifact as GeneratedArtifact, (params ?? {}) as GenerateParams) }] }));\n return server;\n}\n\nexport async function startMcpServer(): Promise<void> {\n const server = createMcpServer();\n await server.connect(new StdioServerTransport());\n}\n\nif (import.meta.url === `file://${process.argv[1]}`) startMcpServer().catch(error => {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`);\n process.exitCode = 1;\n});\n","#!/usr/bin/env node\nimport { Command } from 'commander';\nimport { auditTarget, formatAuditReport } from './audit.js';\nimport { PKG_NAME, VERSION } from './constants.js';\nimport { initProject } from './commands/init.js';\nimport { generateArtifact, type GeneratedArtifact } from './commands/gen.js';\nimport type { GenerateParams } from './generators/index.js';\n\nconst program = new Command();\nprogram.name(PKG_NAME).version(VERSION).description('Audit and generate agent-native product surfaces.');\n\nprogram.command('audit [target]').description('Audit a local directory or live URL.').option('--json', 'print JSON instead of the report').action(async (target = '.', options: { json?: boolean }) => {\n const report = await auditTarget(target);\n process.stdout.write(options.json ? `${JSON.stringify(report, null, 2)}\\n` : `${formatAuditReport(report)}\\n`);\n});\n\nprogram.command('init').description('Write starter AGENTS.md and server.json into the current directory.').option('--force', 'overwrite existing files').action(async (options: { force?: boolean }) => {\n const result = await initProject({ directory: process.cwd(), force: options.force });\n process.stdout.write(`created ${result.created.length}, skipped ${result.skipped.length}\\n`);\n});\n\nprogram.command('gen <artifact>').description('Generate an agent-native artifact.').option('-o, --out <path>', 'write to a file instead of stdout').option('--name <name>').option('--description <description>').option('--repository <url>').option('--mcp-url <url>').option('--npm-package <name>').option('--price <price>').option('--price-currency <currency>').option('--framework <framework>', 'route framework, such as static or next', 'static').action(async (artifact: string, options: Record<string, string | undefined>) => {\n const offer = options.price === undefined && options.priceCurrency === undefined ? undefined : { price: options.price, priceCurrency: options.priceCurrency };\n const params = Object.fromEntries(Object.entries({ name: options.name, description: options.description, repository: options.repository, mcpUrl: options.mcpUrl, npmPackage: options.npmPackage, framework: options.framework, offer }).filter(([, value]) => value !== undefined));\n const content = await generateArtifact(artifact as GeneratedArtifact, process.cwd(), params as GenerateParams);\n if (options.out) { const { writeFile } = await import('node:fs/promises'); await writeFile(options.out, content, 'utf8'); }\n else process.stdout.write(content);\n});\n\nprogram.command('mcp').description('Run the MCP server over stdio.').action(async () => { const { startMcpServer } = await import('./mcp.js'); await startMcpServer(); });\nprogram.parseAsync().catch(error => { process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`); process.exitCode = 1; });\n","import { access, mkdir, writeFile } from 'node:fs/promises';\nimport path from 'node:path';\nimport { defaultConfig } from '../config.js';\nimport { generate } from '../generators/index.js';\n\nexport interface InitOptions { directory: string; force?: boolean }\nexport interface InitResult { created: string[]; skipped: string[] }\n\nexport async function initProject(options: InitOptions): Promise<InitResult> {\n const root = path.resolve(options.directory);\n await mkdir(root, { recursive: true });\n const config = defaultConfig();\n const result: InitResult = { created: [], skipped: [] };\n for (const [name, content] of [['AGENTS.md', generate('agents-md', config)], ['server.json', generate('server-json', config)]] as const) {\n const file = path.join(root, name);\n try {\n await access(file);\n if (!options.force) { result.skipped.push(name); continue; }\n } catch { /* The file does not exist yet. */ }\n await writeFile(file, content, 'utf8');\n result.created.push(name);\n }\n return result;\n}\n","import { writeFile } from 'node:fs/promises';\nimport { defaultConfig } from '../config.js';\nimport { generate, type GenerateParams, type GeneratedArtifact } from '../generators/index.js';\nimport { loadAigentifyConfig } from './load-config.js';\n\nexport type { GeneratedArtifact } from '../generators/index.js';\n\nexport async function generateArtifact(artifact: GeneratedArtifact, directory = process.cwd(), params: GenerateParams = {}): Promise<string> {\n const config = (await loadAigentifyConfig(directory)) ?? defaultConfig();\n return generate(artifact, { ...config, ...params, offer: { ...(config.offer ?? {}), ...(params.offer ?? {}) } });\n}\n\nexport async function writeGeneratedArtifact(artifact: GeneratedArtifact, options: { directory?: string; output?: string; params?: GenerateParams } = {}): Promise<string> {\n const content = await generateArtifact(artifact, options.directory, options.params);\n if (options.output) await writeFile(options.output, content, 'utf8');\n return content;\n}\n","import path from 'node:path';\nimport { access } from 'node:fs/promises';\nimport { createJiti } from 'jiti';\nimport { CONFIG_FILENAME } from '../constants.js';\nimport { defineConfig, type AigentifyConfig } from '../config.js';\n\nexport async function findConfigFile(directory = process.cwd()): Promise<string | undefined> {\n const candidates = [CONFIG_FILENAME, CONFIG_FILENAME.replace(/\\.ts$/, '.js'), CONFIG_FILENAME.replace(/\\.ts$/, '.mjs')];\n for (const candidate of candidates) {\n const file = path.join(directory, candidate);\n try { await access(file); return file; } catch { /* Try the next supported extension. */ }\n }\n return undefined;\n}\n\nexport async function loadAigentifyConfig(directory = process.cwd()): Promise<AigentifyConfig | undefined> {\n const file = await findConfigFile(directory);\n if (!file) return undefined;\n const jiti = createJiti(import.meta.url);\n const module = (await jiti.import(file)) as { default?: AigentifyConfig; aigentifyConfig?: AigentifyConfig };\n const config = module.aigentifyConfig ?? module.default;\n if (!config) throw new Error(`${path.basename(file)} must export a default config or aigentifyConfig.`);\n return defineConfig(config);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA,MACE,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,MACf,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,KAAO,EAAC,WAAa,eAAe,iBAAiB,cAAa;AAAA,MAClE,SAAW,EAAC,KAAK,EAAC,OAAS,qBAAqB,QAAU,mBAAmB,SAAW,mBAAkB,EAAC;AAAA,MAC3G,OAAS,CAAC,MAAM;AAAA,MAChB,YAAc,EAAC,MAAQ,OAAO,KAAO,kDAAiD;AAAA,MACtF,UAAY;AAAA,MACZ,MAAQ;AAAA,MACR,UAAY,CAAC,UAAU,kBAAkB,OAAO,MAAM,SAAS;AAAA,MAC/D,eAAiB,EAAC,QAAU,SAAQ;AAAA,MACpC,SAAW;AAAA,QACT,OAAS;AAAA,QACT,MAAQ;AAAA,QACR,MAAQ;AAAA,QACR,WAAa;AAAA,QACb,QAAU;AAAA,QACV,gBAAkB;AAAA,MACpB;AAAA,MACA,SAAW,EAAC,MAAQ,OAAM;AAAA,MAC1B,cAAgB;AAAA,QACd,6BAA6B;AAAA,QAC7B,SAAW;AAAA,QACX,WAAa;AAAA,QACb,MAAQ;AAAA,QACR,KAAO;AAAA,MACT;AAAA,MACA,iBAAmB;AAAA,QACjB,eAAe;AAAA,QACf,MAAQ;AAAA,QACR,YAAc;AAAA,QACd,QAAU;AAAA,MACZ;AAAA,IACF;AAAA;AAAA;;;ACpCA,IAEa,UACA,SACA,iBACA;AALb;AAAA;AAAA;AAAA;AAEO,IAAM,WAAW,gBAAI;AACrB,IAAM,UAAU,gBAAI;AACpB,IAAM,kBAAkB,GAAG,QAAQ;AACnC,IAAM,oBAAoB;AAAA;AAAA;;;AC2BjC,SAAS,MAAM,IAAY,QAAqB,MAA0B;AAAE,SAAO,EAAE,IAAI,QAAQ,MAAM,QAAQ,QAAQ,EAAE,EAAE;AAAG;AAEvH,SAAS,iBAAiB,QAA8B;AAC7D,QAAM,WAAW,OAAO,OAAO,UAAQ,KAAK,WAAW,IAAI;AAC3D,QAAM,QAAQ,SAAS,OAAO,CAAC,KAAK,SAAS,MAAM,KAAK,QAAQ,CAAC;AACjE,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,SAAS,SAAS,OAAO,CAAC,KAAK,SAAS,OAAO,KAAK,WAAW,SAAS,KAAK,SAAS,KAAK,WAAW,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC;AAC5I,SAAO,KAAK,MAAO,SAAS,QAAS,GAAG;AAC1C;AAEA,eAAe,UAAU,WAAsC;AAC7D,QAAM,UAAU,UAAM,yBAAQ,WAAW,EAAE,eAAe,KAAK,CAAC;AAChE,QAAM,QAAkB,CAAC;AACzB,aAAW,SAAS,SAAS;AAC3B,QAAI,MAAM,YAAY,KAAK,CAAC,QAAQ,IAAI,MAAM,IAAI,EAAG,OAAM,KAAK,GAAG,MAAM,UAAU,iBAAAA,QAAK,KAAK,WAAW,MAAM,IAAI,CAAC,CAAC;AAAA,aAC3G,MAAM,OAAO,EAAG,OAAM,KAAK,iBAAAA,QAAK,KAAK,WAAW,MAAM,IAAI,CAAC;AAAA,EACtE;AACA,SAAO;AACT;AAEA,eAAe,SAAS,MAA2C;AACjE,MAAI,CAAC,KAAM,QAAO;AAClB,MAAI;AAAE,WAAO,UAAM,0BAAS,MAAM,MAAM;AAAA,EAAG,QAAQ;AAAE,WAAO;AAAA,EAAI;AAClE;AAEA,SAAS,SAAS,OAAiB,MAAkC;AACnE,SAAO,MAAM,KAAK,UAAQ;AACxB,UAAM,aAAa,KAAK,WAAW,MAAM,GAAG;AAC5C,WAAO,iBAAAA,QAAK,SAAS,UAAU,MAAM,QAAQ,WAAW,SAAS,IAAI,IAAI,WAAW;AAAA,EACtF,CAAC;AACH;AAEA,SAAS,UAAU,MAAmD;AACpE,MAAI;AACF,UAAM,QAAiB,KAAK,MAAM,IAAI;AACtC,WAAO,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,IAAI,QAAmC;AAAA,EAC1G,QAAQ;AAAE,WAAO;AAAA,EAAW;AAC9B;AAEA,SAAS,YAAY,MAAkD;AACrE,QAAM,QAAQ,UAAU,IAAI;AAC5B,MAAI,CAAC,MAAO,QAAO,EAAE,OAAO,OAAO,QAAQ,iCAAiC;AAC5E,MAAI,MAAM,YAAY,kBAAmB,QAAO,EAAE,OAAO,OAAO,QAAQ,6CAA6C,iBAAiB,IAAI;AAC1I,QAAM,UAAU,CAAC,QAAQ,eAAe,cAAc,SAAS,EAAE,OAAO,SAAO,CAAC,MAAM,GAAG,CAAC;AAC1F,MAAI,QAAQ,OAAQ,QAAO,EAAE,OAAO,OAAO,QAAQ,2BAA2B,QAAQ,KAAK,IAAI,CAAC,IAAI;AACpG,MAAI,CAAC,MAAM,QAAQ,MAAM,OAAO,KAAK,CAAC,MAAM,QAAQ,MAAM,QAAQ,EAAG,QAAO,EAAE,OAAO,OAAO,QAAQ,iDAAiD;AACrJ,SAAO,EAAE,OAAO,MAAM,QAAQ,oDAAoD;AACpF;AAEA,SAAS,SAAS,OAA0B;AAC1C,SAAO,MAAM,KAAK,UAAQ,yBAAyB,KAAK,IAAI,KAAK,uCAAuC,KAAK,IAAI,KAAK,eAAe,KAAK,IAAI,CAAC;AACjJ;AAEA,SAAS,WAAW,MAAuB;AACzC,SAAO,sFAAsF,KAAK,IAAI;AACxG;AAEA,SAAS,WAAW,MAAuB;AACzC,SAAO,EAAE,WAAW,KAAK,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,gBAAgB,KAAK,IAAI,KAAK,mBAAmB,KAAK,IAAI,KAAK,iBAAiB,KAAK,IAAI,KAAK,gBAAgB,KAAK,IAAI,KAAK,qBAAqB,KAAK,IAAI,KAAK,mBAAmB,KAAK,IAAI;AACzP;AAEA,SAAS,WAAW,MAAsB;AACxC,QAAM,QAAQ,kBAAkB,KAAK,IAAI;AACzC,MAAI,CAAC,SAAS,MAAM,UAAU,OAAW,QAAO;AAChD,QAAM,OAAO,KAAK,MAAM,MAAM,KAAK;AACnC,QAAM,cAAc,UAAU,KAAK,KAAK,MAAM,MAAM,CAAC,EAAE,MAAM,CAAC;AAC9D,SAAO,aAAa,UAAU,SAAY,OAAO,KAAK,MAAM,GAAG,MAAM,CAAC,EAAE,SAAS,YAAY,KAAK;AACpG;AAEA,eAAe,kBAAkB,WAAsC;AACrE,QAAM,QAAQ,MAAM,UAAU,SAAS;AACvC,QAAM,aAAa,SAAS,OAAO,WAAW;AAC9C,QAAM,aAAa,SAAS,OAAO,aAAa;AAChD,QAAM,UAAU,MAAM,KAAK,UAAQ,uBAAuB,KAAK,KAAK,WAAW,MAAM,GAAG,CAAC,CAAC;AAC1F,QAAM,cAAc,SAAS,OAAO,cAAc;AAClD,QAAM,cAAc,MAAM,SAAS,WAAW;AAC9C,QAAM,YAAY,yCAAyC,KAAK,WAAW;AAC3E,QAAM,aAAa,MAAM,SAAS,UAAU;AAC5C,QAAM,aAAa,CAAC,YAAY,GAAG,MAAM,QAAQ,IAAI,MAAM,OAAO,UAAQ,kDAAkD,KAAK,IAAI,CAAC,EAAE,IAAI,QAAQ,CAAC,CAAC;AACtJ,QAAM,WAAW,SAAS,OAAO,UAAU;AAC3C,QAAM,cAAc,SAAS,OAAO,aAAa;AACjD,QAAM,aAAa,MAAM,OAAO,UAAQ,iDAAiD,KAAK,IAAI,CAAC;AACnG,QAAM,aAAa,CAAC,WAAW,UAAU,GAAG,GAAG,MAAM,QAAQ,IAAI,WAAW,IAAI,QAAQ,CAAC,CAAC,EAAE,KAAK,IAAI;AACrG,SAAO;AAAA,IACL,QAAQ,EAAE,QAAQ,aAAa,MAAM,KAAK,aAAa,iBAAiB,MAAM,WAAW;AAAA,IACzF,QAAQ,EAAE,QAAQ,aAAa,MAAM,KAAK,aAAa,oBAAoB,MAAM,MAAM,SAAS,UAAU,EAAE;AAAA,IAC5G,KAAK,EAAE,QAAQ,WAAW,cAAc,YAAY,MAAM,KAAK,aAAa,IAAI,MAAM,GAAG;AAAA,IACzF,MAAM,EAAE,QAAQ,KAAK,aAAa,cAAc,MAAM,WAAW,KAAK,IAAI,EAAE;AAAA,IAC5E,MAAM,EAAE,QAAQ,WAAW,MAAM,KAAK,aAAa,cAAc,MAAM,MAAM,SAAS,QAAQ,EAAE;AAAA,IAChG,SAAS,EAAE,QAAQ,cAAc,MAAM,KAAK,aAAa,mBAAmB,MAAM,MAAM,SAAS,WAAW,EAAE;AAAA,IAC9G;AAAA,IAAY,QAAQ,QAAQ,WAAW,cAAc,SAAS;AAAA,IAAG,gBAAgB;AAAA,EACnF;AACF;AAEA,eAAe,UAAU,SAAkC,KAAgC;AACzF,MAAI;AACF,UAAM,WAAW,MAAM,QAAQ,KAAK,EAAE,QAAQ,YAAY,QAAQ,GAAI,EAAE,CAAC;AACzE,WAAO,EAAE,QAAQ,SAAS,QAAQ,aAAa,SAAS,QAAQ,IAAI,cAAc,KAAK,IAAI,MAAM,MAAM,SAAS,KAAK,EAAE;AAAA,EACzH,QAAQ;AAAE,WAAO,EAAE,QAAQ,GAAG,aAAa,IAAI,MAAM,GAAG;AAAA,EAAG;AAC7D;AAEA,eAAe,YAAY,QAAgB,SAAqD;AAC9F,QAAM,OAAO,OAAO,QAAQ,QAAQ,EAAE;AACtC,QAAM,CAAC,QAAQ,QAAQ,KAAK,MAAM,MAAM,OAAO,IAAI,MAAM,QAAQ,IAAI;AAAA,IACnE,UAAU,SAAS,GAAG,IAAI,YAAY;AAAA,IAAG,UAAU,SAAS,GAAG,IAAI,cAAc;AAAA,IAAG,UAAU,SAAS,GAAG,IAAI,kBAAkB;AAAA,IAChI,UAAU,SAAS,IAAI;AAAA,IAAG,UAAU,SAAS,GAAG,IAAI,WAAW;AAAA,IAAG,UAAU,SAAS,GAAG,IAAI,cAAc;AAAA,EAC5G,CAAC;AACD,QAAM,YAAY,CAAC,QAAQ,QAAQ,KAAK,MAAM,MAAM,OAAO;AAC3D,SAAO,EAAE,QAAQ,QAAQ,KAAK,MAAM,MAAM,SAAS,YAAY,CAAC,KAAK,MAAM,WAAW,OAAO,IAAI,CAAC,EAAE,KAAK,IAAI,GAAG,QAAQ,OAAO,UAAU,OAAO,OAAO,SAAS,OAAO,IAAI,UAAU,OAAO,IAAI,SAAS,KAAK,gBAAgB,UAAU,MAAM,UAAQ,KAAK,WAAW,CAAC,EAAE;AAC3Q;AAEA,SAAS,YAAY,UAAkC;AACrD,QAAM,gBAAgB,SAAS,OAAO,WAAW,OAAO,SAAS,OAAO,KAAK,KAAK,EAAE,SAAS,KAAK,sDAAsD,KAAK,SAAS,OAAO,WAAW;AACxL,QAAM,eAA4B,SAAS,OAAO,WAAW,IAAI,SAAS,gBAAgB,SAAS;AACnG,QAAM,eAA4B,CAAC,gBAAiB,SAAS,OAAO,WAAW,IAAI,SAAS,OAAQ,WAAW,SAAS,OAAO,IAAI,IAAI,SAAS;AAChJ,QAAM,aAAa,SAAS,OAAO,WAAW,MAAM,YAAY,SAAS,OAAO,IAAI,IAAI;AACxF,QAAM,eAA4B,SAAS,OAAO,WAAW,IAAI,SAAS,CAAC,SAAS,SAAS,OAAO,YAAY,QAAQ,SAAS;AACjI,QAAM,YAAyB,SAAS,iBAAiB,SAAS,SAAS,SAAS,SAAS;AAC7F,QAAM,aAAa,CAAC,SAAS,KAAK,MAAM,SAAS,OAAO,IAAI;AAC5D,QAAM,cAA2B,SAAS,KAAK,WAAW,IAAI,SAAS,SAAS,UAAU,IAAI,SAAS;AACvG,QAAM,eAA4B,CAAC,SAAS,UAAU,KAAK,CAAC,gBAAiB,SAAS,KAAK,WAAW,IAAI,SAAS,OAAQ,WAAW,SAAS,UAAU,IAAI,SAAS;AACtK,QAAM,aAA0B,SAAS,KAAK,WAAW,IAAI,SAAS,SAAS,KAAK,UAAU,OAAO,SAAS,KAAK,SAAS,OAAO,SAAS,KAAK,KAAK,KAAK,IAAI,SAAS;AACxK,QAAM,gBAA6B,SAAS,QAAQ,WAAW,IAAI,SAAS,SAAS,QAAQ,UAAU,OAAO,SAAS,QAAQ,SAAS,OAAO,SAAS,QAAQ,KAAK,KAAK,IAAI,SAAS;AACvL,SAAO;AAAA,IACL,MAAM,aAAa,cAAc,gBAAgB,4BAA4B,SAAS,OAAO,WAAW,IAAI,kCAAkC,uBAAuB;AAAA,IACrK,MAAM,yBAAyB,cAAc,iBAAiB,SAAS,yDAAyD,iBAAiB,OAAO,0CAA0C,kDAAkD;AAAA,IACpP,MAAM,eAAe,cAAc,YAAY,QAAQ,WAAW,SAAS,YAAY,WAAW,CAAC,SAAS,SAAS,iCAAiC,0BAA0B;AAAA,IAChL,MAAM,OAAO,WAAW,SAAS,iBAAiB,sCAAsC,SAAS,SAAS,iCAAiC,2BAA2B;AAAA,IACtK,MAAM,gBAAgB,aAAa,gBAAgB,SAAS,gCAAgC,gBAAgB,SAAS,oCAAoC,6BAA6B;AAAA,IACtL,MAAM,gBAAgB,cAAc,iBAAiB,SAAS,sDAAsD,iBAAiB,OAAO,uCAAuC,+DAA+D;AAAA,IAClP,MAAM,YAAY,YAAY,eAAe,SAAS,2BAA2B,eAAe,SAAS,iCAAiC,sBAAsB;AAAA,IAChK,MAAM,WAAW,eAAe,kBAAkB,SAAS,8BAA8B,kBAAkB,SAAS,gCAAgC,yBAAyB;AAAA,EAC/K;AACF;AAEA,eAAsB,YAAY,QAAgB,UAAwB,CAAC,GAAyB;AAClG,QAAM,aAAa,UAAM,sBAAK,MAAM,EAAE,MAAM,MAAM,MAAS;AAC3D,QAAM,WAAW,YAAY,YAAY,IAAI,MAAM,kBAAkB,MAAM,IAAI,MAAM,YAAY,QAAQ,QAAQ,SAAS,WAAW,KAAK;AAC1I,QAAM,SAAS,YAAY,QAAQ;AACnC,QAAM,OAAO,OAAO,OAAO,UAAQ,KAAK,WAAW,UAAU,KAAK,WAAW,MAAM,EAAE,IAAI,WAAS,EAAE,IAAI,KAAK,IAAI,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,EAAE;AACxJ,SAAO,EAAE,QAAQ,OAAO,iBAAiB,MAAM,GAAG,QAAQ,KAAK;AACjE;AAEO,SAAS,kBAAkB,QAA6B;AAC7D,QAAM,QAAQ,CAAC,GAAG,OAAO,MAAM,KAAK,OAAO,KAAK,QAAQ,EAAE;AAC1D,aAAW,QAAQ,OAAO,OAAQ,OAAM,KAAK,GAAG,KAAK,OAAO,YAAY,EAAE,OAAO,CAAC,CAAC,KAAK,KAAK,EAAE,KAAK,KAAK,IAAI,EAAE;AAC/G,QAAM,KAAK,IAAI,OAAO;AACtB,MAAI,CAAC,OAAO,KAAK,OAAQ,OAAM,KAAK,OAAO;AAAA,MACtC,QAAO,KAAK,QAAQ,CAAC,KAAK,UAAU,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,IAAI,EAAE,KAAK,IAAI,GAAG,EAAE,CAAC;AAC1F,SAAO,MAAM,KAAK,IAAI;AACxB;AAtLA,qBACA,kBAeM,SACA,SAIA;AArBN;AAAA;AAAA;AAAA,sBAAwC;AACxC,uBAAiB;AACjB;AAcA,IAAM,UAAU,oBAAI,IAAI,CAAC,QAAQ,gBAAgB,QAAQ,YAAY,SAAS,mBAAmB,CAAC;AAClG,IAAM,UAAkC;AAAA,MACtC,aAAa;AAAA,MAAI,yBAAyB;AAAA,MAAI,eAAe;AAAA,MAAI,KAAK;AAAA,MACtE,gBAAgB;AAAA,MAAI,gBAAgB;AAAA,MAAI,YAAY;AAAA,MAAI,SAAS;AAAA,IACnE;AACA,IAAM,QAAgC;AAAA,MACpC,aAAa;AAAA,MACb,yBAAyB;AAAA,MACzB,eAAe,yCAAyC,iBAAiB;AAAA,MACzE,KAAK;AAAA,MACL,gBAAgB;AAAA,MAChB,gBAAgB;AAAA,MAChB,YAAY;AAAA,MACZ,SAAS;AAAA,IACX;AAAA;AAAA;;;ACbO,SAAS,aAAa,QAA0C;AACrE,SAAO,EAAE,GAAG,QAAQ,YAAY,OAAO,WAAW,QAAQ,QAAQ,EAAE,GAAG,SAAS,OAAO,WAAW,QAAQ;AAC5G;AAEO,SAAS,gBAAiC;AAC/C,SAAO,aAAa;AAAA,IAClB,MAAM;AAAA,IACN,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,YAAY;AAAA,EACd,CAAC;AACH;AA5BA;AAAA;AAAA;AAAA;AAAA;;;ACEO,SAAS,iBAAiB,QAAiC;AAChE,QAAM,cAAc,OAAO,cAAc;AACzC,QAAM,MAAM,OAAO,UAAU,OAAO,WAAW;AAC/C,QAAM,QAAQ,OAAO;AACrB,QAAM,YAAY,OAAO,UAAU,SAAY,mBAAmB,UAAU,MAAM,iBAAiB,KAAK,IAAI,MAAM,KAAK;AACvH,SAAO,KAAK,OAAO,IAAI;AAAA;AAAA;AAAA;AAAA,EAIvB,OAAO,IAAI,OAAO,OAAO,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAMzB,OAAO,UAAU;AAAA,SACrB,GAAG;AAAA,aACC,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyBtB,OAAO,eAAe,qBAAqB;AAAA;AAAA,EAE3C,SAAS;AAAA;AAEX;AAhDA;AAAA;AAAA;AAAA;AAAA;;;ACEO,SAAS,oBAAoB,QAAyB,YAAY,UAAkB;AACzF,MAAI,cAAc,QAAQ;AACxB,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAeA,OAAO,IAAI;AAAA;AAAA,EAEpB;AACA,SAAO;AAAA;AAAA;AAAA;AAAA,WAIE,OAAO,IAAI;AAAA;AAEtB;AA5BA;AAAA;AAAA;AAAA;AAAA;;;ACEO,SAAS,cAAc,QAAiC;AAC7D,QAAM,QAAQ,OAAO,SAAS,CAAC;AAC/B,QAAM,OAAO;AAAA,IACX,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,MAAM,OAAO;AAAA,IACb,aAAa,OAAO;AAAA,IACpB,qBAAqB;AAAA,IACrB,QAAQ,CAAC;AAAA,MACP,SAAS;AAAA,MACT,MAAM,MAAM,QAAQ,GAAG,OAAO,IAAI;AAAA,MAClC,GAAI,MAAM,cAAc,EAAE,aAAa,MAAM,YAAY,IAAI,CAAC;AAAA,MAC9D,GAAI,MAAM,UAAU,SAAY,CAAC,IAAI,EAAE,OAAO,OAAO,MAAM,KAAK,EAAE;AAAA,MAClE,eAAe,MAAM,iBAAiB;AAAA,IACxC,CAAC;AAAA,EACH;AACA,SAAO,GAAG,KAAK,UAAU,MAAM,MAAM,CAAC,CAAC;AAAA;AACzC;AAnBA;AAAA;AAAA;AAAA;AAAA;;;ACGO,SAAS,mBAAmB,QAAiC;AAClE,QAAM,aAAa,OAAO,KAAK,SAAS,GAAG,IAAI,OAAO,OAAO,wBAAwB,OAAO,KAAK,YAAY,EAAE,QAAQ,kBAAkB,GAAG,CAAC;AAC7I,QAAM,SAAkC;AAAA,IACtC,SAAS;AAAA,IACT,MAAM;AAAA,IACN,aAAa,OAAO;AAAA,IACpB,YAAY,EAAE,KAAK,OAAO,YAAY,QAAQ,SAAS;AAAA,IACvD,SAAS,OAAO,WAAW;AAAA,EAC7B;AACA,MAAI,OAAO,OAAQ,QAAO,UAAU,CAAC,EAAE,MAAM,mBAAmB,KAAK,OAAO,OAAO,CAAC;AAAA,MAC/E,QAAO,WAAW,CAAC,EAAE,eAAe,OAAO,YAAY,OAAO,cAAc,aAAa,SAAS,OAAO,WAAW,SAAS,cAAc,OAAO,WAAW,EAAE,MAAM,QAAQ,EAAE,CAAC;AACrL,SAAO,GAAG,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AAAA;AAC3C;AAfA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACcA,SAAS,iBAAiB,SAAyB,CAAC,GAAoB;AACtE,QAAM,OAAO,cAAc;AAC3B,SAAO,aAAa,EAAE,GAAG,MAAM,GAAG,QAAQ,OAAO,EAAE,GAAI,KAAK,SAAS,CAAC,GAAI,GAAI,OAAO,SAAS,CAAC,EAAG,EAAE,CAAC;AACvG;AAEO,SAAS,SAAS,UAA6B,SAAyB,CAAC,GAAW;AACzF,QAAM,SAAS,iBAAiB,MAAM;AACtC,MAAI,aAAa,YAAa,QAAO,iBAAiB,MAAM;AAC5D,MAAI,aAAa,cAAe,QAAO,mBAAmB,MAAM;AAChE,MAAI,aAAa,QAAS,QAAO,cAAc,MAAM;AACrD,MAAI,aAAa,eAAgB,QAAO,oBAAoB,QAAQ,OAAO,SAAS;AACpF,QAAM,IAAI,MAAM,qBAAqB,QAAQ,EAAE;AACjD;AA1BA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;;;ACTA;AAAA;AAAA;AAAA;AAAA;AAUO,SAAS,kBAA6B;AAC3C,QAAM,SAAS,IAAI,qBAAU,EAAE,MAAM,UAAU,SAAS,QAAQ,CAAC;AACjE,SAAO,aAAa,SAAS;AAAA,IAC3B,aAAa;AAAA,IACb,aAAa,EAAE,QAAQ,aAAE,OAAO,EAAE;AAAA,EACpC,GAAG,OAAO,EAAE,OAAO,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,KAAK,UAAU,MAAM,YAAY,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE;AACpH,SAAO,aAAa,OAAO;AAAA,IACzB,aAAa;AAAA,IACb,aAAa,EAAE,UAAU,aAAE,KAAK,SAAS,GAAG,QAAQ,aAAE,OAAO,aAAE,OAAO,GAAG,aAAE,QAAQ,CAAC,EAAE,SAAS,EAAE;AAAA,EACnG,GAAG,OAAO,EAAE,UAAU,OAAO,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,SAAS,UAAgC,UAAU,CAAC,CAAoB,EAAE,CAAC,EAAE,EAAE;AACrJ,SAAO;AACT;AAEA,eAAsB,iBAAgC;AACpD,QAAM,SAAS,gBAAgB;AAC/B,QAAM,OAAO,QAAQ,IAAI,kCAAqB,CAAC;AACjD;AA1BA,IACA,YACA,cACA,YAHAC,cAQM;AARN;AAAA;AAAA;AACA,iBAA0B;AAC1B,mBAAqC;AACrC,iBAAkB;AAClB;AACA;AACA;AANA,IAAAA,eAAA;AAQA,IAAM,YAAY,CAAC,aAAa,eAAe,SAAS,cAAc;AAoBtE,QAAIA,aAAY,QAAQ,UAAU,QAAQ,KAAK,CAAC,CAAC,GAAI,gBAAe,EAAE,MAAM,WAAS;AACnF,cAAQ,OAAO,MAAM,GAAG,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAAA,CAAI;AAClF,cAAQ,WAAW;AAAA,IACrB,CAAC;AAAA;AAAA;;;AC9BD,uBAAwB;AACxB;AACA;;;ACHA,IAAAC,mBAAyC;AACzC,IAAAC,oBAAiB;AACjB;AACA;AAKA,eAAsB,YAAY,SAA2C;AAC3E,QAAM,OAAO,kBAAAC,QAAK,QAAQ,QAAQ,SAAS;AAC3C,YAAM,wBAAM,MAAM,EAAE,WAAW,KAAK,CAAC;AACrC,QAAM,SAAS,cAAc;AAC7B,QAAM,SAAqB,EAAE,SAAS,CAAC,GAAG,SAAS,CAAC,EAAE;AACtD,aAAW,CAAC,MAAM,OAAO,KAAK,CAAC,CAAC,aAAa,SAAS,aAAa,MAAM,CAAC,GAAG,CAAC,eAAe,SAAS,eAAe,MAAM,CAAC,CAAC,GAAY;AACvI,UAAM,OAAO,kBAAAA,QAAK,KAAK,MAAM,IAAI;AACjC,QAAI;AACF,gBAAM,yBAAO,IAAI;AACjB,UAAI,CAAC,QAAQ,OAAO;AAAE,eAAO,QAAQ,KAAK,IAAI;AAAG;AAAA,MAAU;AAAA,IAC7D,QAAQ;AAAA,IAAqC;AAC7C,cAAM,4BAAU,MAAM,SAAS,MAAM;AACrC,WAAO,QAAQ,KAAK,IAAI;AAAA,EAC1B;AACA,SAAO;AACT;;;ACvBA,IAAAC,mBAA0B;AAC1B;AACA;;;ACFA,IAAAC,oBAAiB;AACjB,IAAAC,mBAAuB;AACvB,kBAA2B;AAC3B;AACA;AAJA;AAMA,eAAsB,eAAe,YAAY,QAAQ,IAAI,GAAgC;AAC3F,QAAM,aAAa,CAAC,iBAAiB,gBAAgB,QAAQ,SAAS,KAAK,GAAG,gBAAgB,QAAQ,SAAS,MAAM,CAAC;AACtH,aAAW,aAAa,YAAY;AAClC,UAAM,OAAO,kBAAAC,QAAK,KAAK,WAAW,SAAS;AAC3C,QAAI;AAAE,gBAAM,yBAAO,IAAI;AAAG,aAAO;AAAA,IAAM,QAAQ;AAAA,IAA0C;AAAA,EAC3F;AACA,SAAO;AACT;AAEA,eAAsB,oBAAoB,YAAY,QAAQ,IAAI,GAAyC;AACzG,QAAM,OAAO,MAAM,eAAe,SAAS;AAC3C,MAAI,CAAC,KAAM,QAAO;AAClB,QAAM,WAAO,wBAAW,YAAY,GAAG;AACvC,QAAMC,UAAU,MAAM,KAAK,OAAO,IAAI;AACtC,QAAM,SAASA,QAAO,mBAAmBA,QAAO;AAChD,MAAI,CAAC,OAAQ,OAAM,IAAI,MAAM,GAAG,kBAAAD,QAAK,SAAS,IAAI,CAAC,mDAAmD;AACtG,SAAO,aAAa,MAAM;AAC5B;;;ADhBA,eAAsB,iBAAiB,UAA6B,YAAY,QAAQ,IAAI,GAAG,SAAyB,CAAC,GAAoB;AAC3I,QAAM,SAAU,MAAM,oBAAoB,SAAS,KAAM,cAAc;AACvE,SAAO,SAAS,UAAU,EAAE,GAAG,QAAQ,GAAG,QAAQ,OAAO,EAAE,GAAI,OAAO,SAAS,CAAC,GAAI,GAAI,OAAO,SAAS,CAAC,EAAG,EAAE,CAAC;AACjH;;;AFFA,IAAM,UAAU,IAAI,yBAAQ;AAC5B,QAAQ,KAAK,QAAQ,EAAE,QAAQ,OAAO,EAAE,YAAY,mDAAmD;AAEvG,QAAQ,QAAQ,gBAAgB,EAAE,YAAY,sCAAsC,EAAE,OAAO,UAAU,kCAAkC,EAAE,OAAO,OAAO,SAAS,KAAK,YAAgC;AACrM,QAAM,SAAS,MAAM,YAAY,MAAM;AACvC,UAAQ,OAAO,MAAM,QAAQ,OAAO,GAAG,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AAAA,IAAO,GAAG,kBAAkB,MAAM,CAAC;AAAA,CAAI;AAC/G,CAAC;AAED,QAAQ,QAAQ,MAAM,EAAE,YAAY,qEAAqE,EAAE,OAAO,WAAW,0BAA0B,EAAE,OAAO,OAAO,YAAiC;AACtM,QAAM,SAAS,MAAM,YAAY,EAAE,WAAW,QAAQ,IAAI,GAAG,OAAO,QAAQ,MAAM,CAAC;AACnF,UAAQ,OAAO,MAAM,WAAW,OAAO,QAAQ,MAAM,aAAa,OAAO,QAAQ,MAAM;AAAA,CAAI;AAC7F,CAAC;AAED,QAAQ,QAAQ,gBAAgB,EAAE,YAAY,oCAAoC,EAAE,OAAO,oBAAoB,mCAAmC,EAAE,OAAO,eAAe,EAAE,OAAO,6BAA6B,EAAE,OAAO,oBAAoB,EAAE,OAAO,iBAAiB,EAAE,OAAO,sBAAsB,EAAE,OAAO,iBAAiB,EAAE,OAAO,6BAA6B,EAAE,OAAO,2BAA2B,2CAA2C,QAAQ,EAAE,OAAO,OAAO,UAAkB,YAAgD;AAC7gB,QAAM,QAAQ,QAAQ,UAAU,UAAa,QAAQ,kBAAkB,SAAY,SAAY,EAAE,OAAO,QAAQ,OAAO,eAAe,QAAQ,cAAc;AAC5J,QAAM,SAAS,OAAO,YAAY,OAAO,QAAQ,EAAE,MAAM,QAAQ,MAAM,aAAa,QAAQ,aAAa,YAAY,QAAQ,YAAY,QAAQ,QAAQ,QAAQ,YAAY,QAAQ,YAAY,WAAW,QAAQ,WAAW,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,MAAM,UAAU,MAAS,CAAC;AAClR,QAAM,UAAU,MAAM,iBAAiB,UAA+B,QAAQ,IAAI,GAAG,MAAwB;AAC7G,MAAI,QAAQ,KAAK;AAAE,UAAM,EAAE,WAAAE,WAAU,IAAI,MAAM,OAAO,aAAkB;AAAG,UAAMA,WAAU,QAAQ,KAAK,SAAS,MAAM;AAAA,EAAG,MACrH,SAAQ,OAAO,MAAM,OAAO;AACnC,CAAC;AAED,QAAQ,QAAQ,KAAK,EAAE,YAAY,gCAAgC,EAAE,OAAO,YAAY;AAAE,QAAM,EAAE,gBAAAC,gBAAe,IAAI,MAAM;AAAoB,QAAMA,gBAAe;AAAG,CAAC;AACxK,QAAQ,WAAW,EAAE,MAAM,WAAS;AAAE,UAAQ,OAAO,MAAM,GAAG,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAAA,CAAI;AAAG,UAAQ,WAAW;AAAG,CAAC;","names":["path","import_meta","import_promises","import_node_path","path","import_promises","import_node_path","import_promises","path","module","writeFile","startMcpServer"]}
{"version":3,"sources":["../package.json","../src/constants.ts","../src/audit.ts","../src/config.ts","../src/generators/agents.ts","../src/generators/agents-route.ts","../src/generators/offer.ts","../src/generators/server.ts","../src/generators/index.ts","../src/mcp.ts","../src/cli.ts","../src/commands/init.ts","../src/commands/gen.ts","../src/commands/load-config.ts"],"sourcesContent":["{\n \"name\": \"aigentify\",\n \"version\": \"0.1.1\",\n \"mcpName\": \"io.github.pooriaarab/aigentify\",\n \"description\": \"Audit and generate agent-native product surfaces\",\n \"type\": \"module\",\n \"license\": \"MIT\",\n \"bin\": {\"aigentify\": \"dist/cli.js\", \"aigentify-mcp\": \"dist/mcp.js\"},\n \"exports\": {\".\": {\"types\": \"./dist/index.d.ts\", \"import\": \"./dist/index.js\", \"require\": \"./dist/index.cjs\"}},\n \"files\": [\"dist\"],\n \"repository\": {\"type\": \"git\", \"url\": \"git+https://github.com/pooriaarab/aigentify.git\"},\n \"homepage\": \"https://github.com/pooriaarab/aigentify\",\n \"bugs\": \"https://github.com/pooriaarab/aigentify/issues\",\n \"keywords\": [\"agents\", \"agentification\", \"mcp\", \"ai\", \"json-ld\"],\n \"publishConfig\": {\"access\": \"public\"},\n \"scripts\": {\n \"build\": \"tsup\",\n \"test\": \"vitest run\",\n \"lint\": \"tsc --noEmit --pretty false\",\n \"typecheck\": \"tsc --noEmit\",\n \"verify\": \"npm run typecheck && npm run build && npm run test\",\n \"prepublishOnly\": \"npm run verify\"\n },\n \"engines\": {\"node\": \">=20\"},\n \"dependencies\": {\n \"@modelcontextprotocol/sdk\": \"^1.17.5\",\n \"cheerio\": \"^1.1.2\",\n \"commander\": \"^14.0.0\",\n \"jiti\": \"^2.5.1\",\n \"zod\": \"^4.0.0\"\n },\n \"devDependencies\": {\n \"@types/node\": \"^22.15.0\",\n \"tsup\": \"^8.5.0\",\n \"typescript\": \"^5.8.3\",\n \"vitest\": \"^3.2.4\"\n }\n}\n","import pkg from '../package.json';\n\nexport const PKG_NAME = pkg.name;\nexport const VERSION = pkg.version;\nexport const CONFIG_FILENAME = `${PKG_NAME}.config.ts`;\nexport const SERVER_SCHEMA_URL = 'https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json';\n// Any dated MCP registry schema is valid; only the bare `.../server.json` (no `.schema`) 404s.\nexport const SERVER_SCHEMA_RE = /^https:\\/\\/static\\.modelcontextprotocol\\.io\\/schemas\\/\\d{4}-\\d{2}-\\d{2}\\/server\\.schema\\.json$/;\n","import { readFile, readdir, stat } from 'node:fs/promises';\nimport path from 'node:path';\nimport { SERVER_SCHEMA_URL, SERVER_SCHEMA_RE } from './constants.js';\n\nexport type AuditStatus = 'pass' | 'fail' | 'warn' | 'na';\nexport interface AuditCheck { id: string; status: AuditStatus; note: string; weight: number }\nexport interface AuditGap { id: string; note: string; fix: string }\nexport interface AuditReport { target: string; score: number; checks: AuditCheck[]; gaps: AuditGap[] }\nexport interface AuditOptions { fetch?: typeof globalThis.fetch }\n\ninterface Endpoint { status: number; contentType: string; text: string }\ninterface Snapshot {\n agents: Endpoint; server: Endpoint; mcp: Endpoint; home: Endpoint; llms: Endpoint; sitemap: Endpoint;\n honestText: string; hasMcp: boolean; networkFailure: boolean;\n}\n\nconst SKIPPED = new Set(['.git', 'node_modules', 'dist', 'coverage', '.next', '_reference_geoaeo']);\nconst WEIGHTS: Record<string, number> = {\n 'agents-md': 15, 'agents-md-public-safe': 10, 'server-json': 15, mcp: 15,\n 'offer-jsonld': 15, 'honest-offer': 10, 'llms-txt': 10, sitemap: 10,\n};\nconst FIXES: Record<string, string> = {\n 'agents-md': 'Add a public AGENTS.md at the target root or serve /agents.md as text/markdown.',\n 'agents-md-public-safe': 'Rewrite AGENTS.md as product guidance. Remove repository paths and contributor instructions.',\n 'server-json': `Add server.json and set \"$schema\" to \"${SERVER_SCHEMA_URL}\". Include a repository and a remotes or packages entry.`,\n mcp: 'Publish server.json, .mcp.json, or an MCP entry point.',\n 'offer-jsonld': 'Publish JSON-LD with @type Offer, or a SoftwareApplication with an offers property.',\n 'honest-offer': 'State the real price plainly. Remove scarcity, countdown, and urgency language.',\n 'llms-txt': 'Publish /llms.txt with a concise product description.',\n sitemap: 'Publish /sitemap.xml for URL discovery.',\n};\n\nfunction check(id: string, status: AuditStatus, note: string): AuditCheck { return { id, status, note, weight: WEIGHTS[id] }; }\n\nexport function scoreAuditChecks(checks: AuditCheck[]): number {\n const relevant = checks.filter(item => item.status !== 'na');\n const total = relevant.reduce((sum, item) => sum + item.weight, 0);\n if (!total) return 0;\n const earned = relevant.reduce((sum, item) => sum + (item.status === 'pass' ? item.weight : item.status === 'warn' ? item.weight / 2 : 0), 0);\n return Math.round((earned / total) * 100);\n}\n\nasync function walkFiles(directory: string): Promise<string[]> {\n const entries = await readdir(directory, { withFileTypes: true });\n const files: string[] = [];\n for (const entry of entries) {\n if (entry.isDirectory() && !SKIPPED.has(entry.name)) files.push(...await walkFiles(path.join(directory, entry.name)));\n else if (entry.isFile()) files.push(path.join(directory, entry.name));\n }\n return files;\n}\n\nasync function readText(file: string | undefined): Promise<string> {\n if (!file) return '';\n try { return await readFile(file, 'utf8'); } catch { return ''; }\n}\n\nfunction findFile(files: string[], name: string): string | undefined {\n return files.find(file => {\n const normalized = file.replaceAll('\\\\', '/');\n return path.basename(normalized) === name || normalized.endsWith(`/${name}/route.ts`);\n });\n}\n\nfunction parseJson(text: string): Record<string, unknown> | undefined {\n try {\n const value: unknown = JSON.parse(text);\n return value && typeof value === 'object' && !Array.isArray(value) ? value as Record<string, unknown> : undefined;\n } catch { return undefined; }\n}\n\nfunction validServer(text: string): { valid: boolean; reason: string } {\n const value = parseJson(text);\n if (!value) return { valid: false, reason: 'server.json is not valid JSON.' };\n if (typeof value.$schema !== 'string' || !SERVER_SCHEMA_RE.test(value.$schema)) return { valid: false, reason: `server.json \"$schema\" must be a dated MCP registry schema like ${SERVER_SCHEMA_URL} (the bare .../server.json 404s).` };\n const missing = ['name', 'description', 'repository', 'version'].filter(key => !value[key]);\n if (missing.length) return { valid: false, reason: `server.json is missing: ${missing.join(', ')}.` };\n if (!Array.isArray(value.remotes) && !Array.isArray(value.packages)) return { valid: false, reason: 'server.json needs a remotes or packages entry.' };\n return { valid: true, reason: 'server.json has the required MCP registry fields.' };\n}\n\nfunction hasOffer(texts: string[]): boolean {\n return texts.some(text => /\"@type\"\\s*:\\s*\"Offer\"/i.test(text) || /\"@type\"\\s*:\\s*\"SoftwareApplication\"/i.test(text) && /\"offers\"\\s*:/.test(text));\n}\n\nfunction hasUrgency(text: string): boolean {\n return /limited time|act now|hurry|expires|only\\s+\\d+\\s+left|ends in|sign up now|countdown/i.test(text);\n}\n\nfunction publicSafe(text: string): boolean {\n return !(/\\bsrc\\//i.test(text) || /\\bapps\\//i.test(text) || /\\bpackages\\//i.test(text) || /\\b[\\w.-]+\\.ts\\b/i.test(text) || /npm run build/i.test(text) || /\\btsconfig\\b/i.test(text) || /\\bcontributors?\\b/i.test(text) || /^#+\\s*layout\\b/im.test(text));\n}\n\nfunction offerBlock(text: string): string {\n const match = /^#+\\s*Offer\\b/im.exec(text);\n if (!match || match.index === undefined) return '';\n const rest = text.slice(match.index);\n const nextHeading = /^#+\\s+/m.exec(rest.slice(match[0].length));\n return nextHeading?.index === undefined ? rest : rest.slice(0, match[0].length + nextHeading.index);\n}\n\nasync function directorySnapshot(directory: string): Promise<Snapshot> {\n const files = await walkFiles(directory);\n const agentsFile = findFile(files, 'AGENTS.md');\n const serverFile = findFile(files, 'server.json');\n const mcpFile = files.find(file => /(?:^|\\/)\\.mcp\\.json$/.test(file.replaceAll('\\\\', '/')));\n const packageFile = findFile(files, 'package.json');\n const packageText = await readText(packageFile);\n const hasMcpBin = /\"(?:aigentify|[^\"\\n]*mcp[^\"\\n]*)\"\\s*:/i.test(packageText);\n const agentsText = await readText(agentsFile);\n const offerTexts = [agentsText, ...await Promise.all(files.filter(file => /\\.(html?|json|jsonld|md|mdx|tsx|jsx|js|mjs|ts)$/.test(file)).map(readText))];\n const llmsFile = findFile(files, 'llms.txt');\n const sitemapFile = findFile(files, 'sitemap.xml');\n const offerFiles = files.filter(file => /\\.jsonld$|(?:^|\\/)offer[^/]*\\.(?:json|html?)$/i.test(file));\n const honestText = [offerBlock(agentsText), ...await Promise.all(offerFiles.map(readText))].join('\\n');\n return {\n agents: { status: agentsFile ? 200 : 404, contentType: 'text/markdown', text: agentsText },\n server: { status: serverFile ? 200 : 404, contentType: 'application/json', text: await readText(serverFile) },\n mcp: { status: mcpFile || serverFile || hasMcpBin ? 200 : 404, contentType: '', text: '' },\n home: { status: 200, contentType: 'text/plain', text: offerTexts.join('\\n') },\n llms: { status: llmsFile ? 200 : 404, contentType: 'text/plain', text: await readText(llmsFile) },\n sitemap: { status: sitemapFile ? 200 : 404, contentType: 'application/xml', text: await readText(sitemapFile) },\n honestText, hasMcp: Boolean(mcpFile || serverFile || hasMcpBin), networkFailure: false,\n };\n}\n\nasync function fetchText(fetcher: typeof globalThis.fetch, url: string): Promise<Endpoint> {\n try {\n const response = await fetcher(url, { signal: AbortSignal.timeout(8000) });\n return { status: response.status, contentType: response.headers.get('content-type') ?? '', text: await response.text() };\n } catch { return { status: 0, contentType: '', text: '' }; }\n}\n\nasync function urlSnapshot(target: string, fetcher: typeof globalThis.fetch): Promise<Snapshot> {\n const base = target.replace(/\\/+$/, '');\n const [agents, server, mcp, home, llms, sitemap] = await Promise.all([\n fetchText(fetcher, `${base}/agents.md`), fetchText(fetcher, `${base}/server.json`), fetchText(fetcher, `${base}/.well-known/mcp`),\n fetchText(fetcher, base), fetchText(fetcher, `${base}/llms.txt`), fetchText(fetcher, `${base}/sitemap.xml`),\n ]);\n const endpoints = [agents, server, mcp, home, llms, sitemap];\n return { agents, server, mcp, home, llms, sitemap, honestText: [home.text, offerBlock(agents.text)].join('\\n'), hasMcp: server.status >= 200 && server.status < 400 || mcp.status >= 200 && mcp.status < 400, networkFailure: endpoints.every(item => item.status === 0) };\n}\n\nfunction buildChecks(snapshot: Snapshot): AuditCheck[] {\n const agentsPresent = snapshot.agents.status === 200 && snapshot.agents.text.trim().length > 0 && /(?:text\\/(?:markdown|plain)|application\\/markdown)/i.test(snapshot.agents.contentType);\n const agentsStatus: AuditStatus = snapshot.agents.status === 0 ? 'warn' : agentsPresent ? 'pass' : 'fail';\n const publicStatus: AuditStatus = !agentsPresent ? (snapshot.agents.status === 0 ? 'warn' : 'na') : publicSafe(snapshot.agents.text) ? 'pass' : 'warn';\n const serverInfo = snapshot.server.status === 200 ? validServer(snapshot.server.text) : undefined;\n const serverStatus: AuditStatus = snapshot.server.status === 0 ? 'warn' : !snapshot.hasMcp ? 'na' : serverInfo?.valid ? 'pass' : 'fail';\n const mcpStatus: AuditStatus = snapshot.networkFailure ? 'warn' : snapshot.hasMcp ? 'pass' : 'fail';\n const offerTexts = [snapshot.home.text, snapshot.agents.text];\n const offerStatus: AuditStatus = snapshot.home.status === 0 ? 'warn' : hasOffer(offerTexts) ? 'pass' : 'fail';\n const honestStatus: AuditStatus = !hasOffer(offerTexts) && !agentsPresent ? (snapshot.home.status === 0 ? 'warn' : 'na') : hasUrgency(snapshot.honestText) ? 'warn' : 'pass';\n const llmsStatus: AuditStatus = snapshot.llms.status === 0 ? 'warn' : snapshot.llms.status >= 200 && snapshot.llms.status < 400 && snapshot.llms.text.trim() ? 'pass' : 'fail';\n const sitemapStatus: AuditStatus = snapshot.sitemap.status === 0 ? 'warn' : snapshot.sitemap.status >= 200 && snapshot.sitemap.status < 400 && snapshot.sitemap.text.trim() ? 'pass' : 'fail';\n return [\n check('agents-md', agentsStatus, agentsPresent ? 'AGENTS.md is available.' : snapshot.agents.status === 0 ? 'The AGENTS.md request failed.' : 'AGENTS.md is missing.'),\n check('agents-md-public-safe', publicStatus, publicStatus === 'pass' ? 'AGENTS.md describes the product as a public surface.' : publicStatus === 'na' ? 'No AGENTS.md is available to inspect.' : 'AGENTS.md contains repository-internal guidance.'),\n check('server-json', serverStatus, serverInfo?.valid ? serverInfo.reason : serverInfo?.reason ?? (!snapshot.hasMcp ? 'No MCP surface was detected.' : 'server.json is missing.')),\n check('mcp', mcpStatus, snapshot.networkFailure ? 'The MCP discovery request failed.' : snapshot.hasMcp ? 'An MCP surface is available.' : 'No MCP surface was found.'),\n check('offer-jsonld', offerStatus, offerStatus === 'pass' ? 'Offer JSON-LD is available.' : offerStatus === 'warn' ? 'The offer could not be checked.' : 'No Offer JSON-LD was found.'),\n check('honest-offer', honestStatus, honestStatus === 'pass' ? 'Offer language states the price without pressure.' : honestStatus === 'na' ? 'No offer or Offer block was found.' : 'Offer language contains scarcity, countdown, or urgency copy.'),\n check('llms-txt', llmsStatus, llmsStatus === 'pass' ? 'llms.txt is available.' : llmsStatus === 'warn' ? 'The llms.txt request failed.' : 'llms.txt is missing.'),\n check('sitemap', sitemapStatus, sitemapStatus === 'pass' ? 'sitemap.xml is available.' : sitemapStatus === 'warn' ? 'The sitemap request failed.' : 'sitemap.xml is missing.'),\n ];\n}\n\nexport async function auditTarget(target: string, options: AuditOptions = {}): Promise<AuditReport> {\n const targetStat = await stat(target).catch(() => undefined);\n const snapshot = targetStat?.isDirectory() ? await directorySnapshot(target) : await urlSnapshot(target, options.fetch ?? globalThis.fetch);\n const checks = buildChecks(snapshot);\n const gaps = checks.filter(item => item.status === 'fail' || item.status === 'warn').map(item => ({ id: item.id, note: item.note, fix: FIXES[item.id] }));\n return { target, score: scoreAuditChecks(checks), checks, gaps };\n}\n\nexport function formatAuditReport(report: AuditReport): string {\n const lines = [`${report.target}: ${report.score}/100`, ''];\n for (const item of report.checks) lines.push(`${item.status.toUpperCase().padEnd(4)} ${item.id}: ${item.note}`);\n lines.push('', 'Gaps:');\n if (!report.gaps.length) lines.push('None.');\n else report.gaps.forEach((gap, index) => lines.push(`${index + 1}. ${gap.id}: ${gap.fix}`));\n return lines.join('\\n');\n}\n","export interface OfferConfig {\n name?: string;\n description?: string;\n price?: string | number;\n priceCurrency?: string;\n}\n\nexport interface AigentifyConfig {\n name: string;\n description: string;\n repository: string;\n version?: string;\n mcpUrl?: string;\n npmPackage?: string;\n offer?: OfferConfig;\n}\n\nexport function defineConfig(config: AigentifyConfig): AigentifyConfig {\n return { ...config, repository: config.repository.replace(/\\/+$/, ''), version: config.version ?? '0.1.0' };\n}\n\nexport function defaultConfig(): AigentifyConfig {\n return defineConfig({\n name: 'Your product',\n description: 'A product with an agent-native interface.',\n repository: 'https://github.com/your-org/your-product',\n npmPackage: 'your-package',\n });\n}\n","import type { AigentifyConfig } from '../config.js';\n\nexport function generateAgentsMd(config: AigentifyConfig): string {\n const packageName = config.npmPackage ?? '<NPM_PACKAGE>';\n const mcp = config.mcpUrl ?? `npx ${packageName}`;\n const offer = config.offer;\n const offerLine = offer?.price === undefined ? 'Price: <PRICE>' : `Price: ${offer.priceCurrency ?? 'USD'} ${offer.price}`;\n return `# ${config.name}\n\n## Mental model\n\n${config.name} is ${config.description}\n\nUse the product interface for product work. Use the agent interface for repeatable tasks that need structured results.\n\n## The faces\n\n- Product: ${config.repository}\n- MCP: ${mcp}\n- Package: ${packageName}\n\n## MCP tools\n\n| Tool | Input | Result |\n| --- | --- | --- |\n| audit | target | An agent-readiness report with a score and gaps. |\n| gen | artifact and params | A generated agent-native artifact. |\n\n## The loop\n\n1. Audit the target.\n2. Fix the highest-impact gap.\n3. Generate or publish the missing artifact.\n4. Audit again and keep the report with the release.\n\n## Rules\n\n- Treat the product description and prices as source facts.\n- Return structured data when a tool provides it.\n- Ask for missing information before making a high-impact change.\n- Keep public agent instructions about the product and its use.\n\n## Offer\n\n${offer?.description ?? '<OFFER_DESCRIPTION>'}\n\n${offerLine}\n`;\n}\n","import type { AigentifyConfig } from '../config.js';\n\nexport function generateAgentsRoute(config: AigentifyConfig, framework = 'static'): string {\n if (framework === 'next') {\n return `# Serve /agents.md from a Next route\n\nCopy AGENTS.md to a public directory, or add this force-static route:\n\n\\`\\`\\`ts\nimport { readFile } from 'node:fs/promises';\n\nexport const dynamic = 'force-static';\n\nexport async function GET() {\n const body = await readFile('AGENTS.md', 'utf8');\n return new Response(body, { headers: { 'content-type': 'text/markdown; charset=utf-8' } });\n}\n\\`\\`\\`\n\nProduct: ${config.name}\n`;\n }\n return `# Serve /agents.md\n\nCopy the generated AGENTS.md file to public/agents.md and serve it as a static text/markdown response.\n\nProduct: ${config.name}\n`;\n}\n","import type { AigentifyConfig } from '../config.js';\n\nexport function generateOffer(config: AigentifyConfig): string {\n const offer = config.offer ?? {};\n const data = {\n '@context': 'https://schema.org',\n '@type': 'SoftwareApplication',\n name: config.name,\n description: config.description,\n applicationCategory: 'DeveloperApplication',\n offers: [{\n '@type': 'Offer',\n name: offer.name ?? `${config.name} access`,\n ...(offer.description ? { description: offer.description } : {}),\n ...(offer.price === undefined ? {} : { price: String(offer.price) }),\n priceCurrency: offer.priceCurrency ?? 'USD',\n }],\n };\n return `${JSON.stringify(data, null, 2)}\\n`;\n}\n","import { SERVER_SCHEMA_URL } from '../constants.js';\nimport type { AigentifyConfig } from '../config.js';\n\nexport function generateServerJson(config: AigentifyConfig): string {\n const serverName = config.name.includes('/') ? config.name : `io.github.pooriaarab/${config.name.toLowerCase().replace(/[^a-z0-9._-]+/g, '-')}`;\n const server: Record<string, unknown> = {\n $schema: SERVER_SCHEMA_URL,\n name: serverName,\n description: config.description,\n repository: { url: config.repository, source: 'github' },\n version: config.version ?? '0.1.0',\n };\n if (config.mcpUrl) server.remotes = [{ type: 'streamable-http', url: config.mcpUrl }];\n else server.packages = [{ registryType: 'npm', registryBaseUrl: 'https://registry.npmjs.org', identifier: config.npmPackage ?? 'aigentify', version: config.version ?? '0.1.0', transport: { type: 'stdio' }, runtimeHint: 'npx', packageArguments: [{ type: 'positional', valueHint: 'subcommand', value: 'mcp' }] }];\n return `${JSON.stringify(server, null, 2)}\\n`;\n}\n","import type { AigentifyConfig } from '../config.js';\nimport { defaultConfig, defineConfig } from '../config.js';\nimport { generateAgentsMd } from './agents.js';\nimport { generateAgentsRoute } from './agents-route.js';\nimport { generateOffer } from './offer.js';\nimport { generateServerJson } from './server.js';\nexport * from './agents.js';\nexport * from './agents-route.js';\nexport * from './offer.js';\nexport * from './server.js';\n\nexport type GeneratedArtifact = 'agents-md' | 'server-json' | 'offer' | 'agents-route';\nexport type GenerateParams = Partial<AigentifyConfig> & { framework?: string };\n\nfunction configFromParams(params: GenerateParams = {}): AigentifyConfig {\n const base = defaultConfig();\n return defineConfig({ ...base, ...params, offer: { ...(base.offer ?? {}), ...(params.offer ?? {}) } });\n}\n\nexport function generate(artifact: GeneratedArtifact, params: GenerateParams = {}): string {\n const config = configFromParams(params);\n if (artifact === 'agents-md') return generateAgentsMd(config);\n if (artifact === 'server-json') return generateServerJson(config);\n if (artifact === 'offer') return generateOffer(config);\n if (artifact === 'agents-route') return generateAgentsRoute(config, params.framework);\n throw new Error(`Unknown artifact: ${artifact}`);\n}\n","#!/usr/bin/env node\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport { z } from 'zod';\nimport { auditTarget } from './audit.js';\nimport { PKG_NAME, VERSION } from './constants.js';\nimport { generate, type GenerateParams, type GeneratedArtifact } from './generators/index.js';\n\nconst artifacts = ['agents-md', 'server-json', 'offer', 'agents-route'] as const;\n\nexport function createMcpServer(): McpServer {\n const server = new McpServer({ name: PKG_NAME, version: VERSION });\n server.registerTool('audit', {\n description: 'Audit a local directory or live URL for agent-native readiness.',\n inputSchema: { target: z.string() },\n }, async ({ target }) => ({ content: [{ type: 'text', text: JSON.stringify(await auditTarget(target), null, 2) }] }));\n server.registerTool('gen', {\n description: 'Generate an agent-native artifact as text.',\n inputSchema: { artifact: z.enum(artifacts), params: z.record(z.string(), z.unknown()).optional() },\n }, async ({ artifact, params }) => ({ content: [{ type: 'text', text: generate(artifact as GeneratedArtifact, (params ?? {}) as GenerateParams) }] }));\n return server;\n}\n\nexport async function startMcpServer(): Promise<void> {\n const server = createMcpServer();\n await server.connect(new StdioServerTransport());\n}\n\nif (import.meta.url === `file://${process.argv[1]}`) startMcpServer().catch(error => {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`);\n process.exitCode = 1;\n});\n","#!/usr/bin/env node\nimport { Command } from 'commander';\nimport { auditTarget, formatAuditReport } from './audit.js';\nimport { PKG_NAME, VERSION } from './constants.js';\nimport { initProject } from './commands/init.js';\nimport { generateArtifact, type GeneratedArtifact } from './commands/gen.js';\nimport type { GenerateParams } from './generators/index.js';\n\nconst program = new Command();\nprogram.name(PKG_NAME).version(VERSION).description('Audit and generate agent-native product surfaces.');\n\nprogram.command('audit [target]').description('Audit a local directory or live URL.').option('--json', 'print JSON instead of the report').action(async (target = '.', options: { json?: boolean }) => {\n const report = await auditTarget(target);\n process.stdout.write(options.json ? `${JSON.stringify(report, null, 2)}\\n` : `${formatAuditReport(report)}\\n`);\n});\n\nprogram.command('init').description('Write starter AGENTS.md and server.json into the current directory.').option('--force', 'overwrite existing files').action(async (options: { force?: boolean }) => {\n const result = await initProject({ directory: process.cwd(), force: options.force });\n process.stdout.write(`created ${result.created.length}, skipped ${result.skipped.length}\\n`);\n});\n\nprogram.command('gen <artifact>').description('Generate an agent-native artifact.').option('-o, --out <path>', 'write to a file instead of stdout').option('--name <name>').option('--description <description>').option('--repository <url>').option('--mcp-url <url>').option('--npm-package <name>').option('--price <price>').option('--price-currency <currency>').option('--framework <framework>', 'route framework, such as static or next', 'static').action(async (artifact: string, options: Record<string, string | undefined>) => {\n const offer = options.price === undefined && options.priceCurrency === undefined ? undefined : { price: options.price, priceCurrency: options.priceCurrency };\n const params = Object.fromEntries(Object.entries({ name: options.name, description: options.description, repository: options.repository, mcpUrl: options.mcpUrl, npmPackage: options.npmPackage, framework: options.framework, offer }).filter(([, value]) => value !== undefined));\n const content = await generateArtifact(artifact as GeneratedArtifact, process.cwd(), params as GenerateParams);\n if (options.out) { const { writeFile } = await import('node:fs/promises'); await writeFile(options.out, content, 'utf8'); }\n else process.stdout.write(content);\n});\n\nprogram.command('mcp').description('Run the MCP server over stdio.').action(async () => { const { startMcpServer } = await import('./mcp.js'); await startMcpServer(); });\nprogram.parseAsync().catch(error => { process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`); process.exitCode = 1; });\n","import { access, mkdir, writeFile } from 'node:fs/promises';\nimport path from 'node:path';\nimport { defaultConfig } from '../config.js';\nimport { generate } from '../generators/index.js';\n\nexport interface InitOptions { directory: string; force?: boolean }\nexport interface InitResult { created: string[]; skipped: string[] }\n\nexport async function initProject(options: InitOptions): Promise<InitResult> {\n const root = path.resolve(options.directory);\n await mkdir(root, { recursive: true });\n const config = defaultConfig();\n const result: InitResult = { created: [], skipped: [] };\n for (const [name, content] of [['AGENTS.md', generate('agents-md', config)], ['server.json', generate('server-json', config)]] as const) {\n const file = path.join(root, name);\n try {\n await access(file);\n if (!options.force) { result.skipped.push(name); continue; }\n } catch { /* The file does not exist yet. */ }\n await writeFile(file, content, 'utf8');\n result.created.push(name);\n }\n return result;\n}\n","import { writeFile } from 'node:fs/promises';\nimport { defaultConfig } from '../config.js';\nimport { generate, type GenerateParams, type GeneratedArtifact } from '../generators/index.js';\nimport { loadAigentifyConfig } from './load-config.js';\n\nexport type { GeneratedArtifact } from '../generators/index.js';\n\nexport async function generateArtifact(artifact: GeneratedArtifact, directory = process.cwd(), params: GenerateParams = {}): Promise<string> {\n const config = (await loadAigentifyConfig(directory)) ?? defaultConfig();\n return generate(artifact, { ...config, ...params, offer: { ...(config.offer ?? {}), ...(params.offer ?? {}) } });\n}\n\nexport async function writeGeneratedArtifact(artifact: GeneratedArtifact, options: { directory?: string; output?: string; params?: GenerateParams } = {}): Promise<string> {\n const content = await generateArtifact(artifact, options.directory, options.params);\n if (options.output) await writeFile(options.output, content, 'utf8');\n return content;\n}\n","import path from 'node:path';\nimport { access } from 'node:fs/promises';\nimport { createJiti } from 'jiti';\nimport { CONFIG_FILENAME } from '../constants.js';\nimport { defineConfig, type AigentifyConfig } from '../config.js';\n\nexport async function findConfigFile(directory = process.cwd()): Promise<string | undefined> {\n const candidates = [CONFIG_FILENAME, CONFIG_FILENAME.replace(/\\.ts$/, '.js'), CONFIG_FILENAME.replace(/\\.ts$/, '.mjs')];\n for (const candidate of candidates) {\n const file = path.join(directory, candidate);\n try { await access(file); return file; } catch { /* Try the next supported extension. */ }\n }\n return undefined;\n}\n\nexport async function loadAigentifyConfig(directory = process.cwd()): Promise<AigentifyConfig | undefined> {\n const file = await findConfigFile(directory);\n if (!file) return undefined;\n const jiti = createJiti(import.meta.url);\n const module = (await jiti.import(file)) as { default?: AigentifyConfig; aigentifyConfig?: AigentifyConfig };\n const config = module.aigentifyConfig ?? module.default;\n if (!config) throw new Error(`${path.basename(file)} must export a default config or aigentifyConfig.`);\n return defineConfig(config);\n}\n"],"mappings":"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","names":["path","import_meta","import_promises","import_node_path","path","import_promises","import_node_path","import_promises","path","module","writeFile","startMcpServer"]}

@@ -18,3 +18,4 @@ #!/usr/bin/env node

name: "aigentify",
version: "0.1.0",
version: "0.1.1",
mcpName: "io.github.pooriaarab/aigentify",
description: "Audit and generate agent-native product surfaces",

@@ -58,3 +59,3 @@ type: "module",

// src/constants.ts
var PKG_NAME, VERSION, CONFIG_FILENAME, SERVER_SCHEMA_URL;
var PKG_NAME, VERSION, CONFIG_FILENAME, SERVER_SCHEMA_URL, SERVER_SCHEMA_RE;
var init_constants = __esm({

@@ -67,3 +68,4 @@ "src/constants.ts"() {

CONFIG_FILENAME = `${PKG_NAME}.config.ts`;
SERVER_SCHEMA_URL = "https://static.modelcontextprotocol.io/schemas/2025-07-09/server.schema.json";
SERVER_SCHEMA_URL = "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json";
SERVER_SCHEMA_RE = /^https:\/\/static\.modelcontextprotocol\.io\/schemas\/\d{4}-\d{2}-\d{2}\/server\.schema\.json$/;
}

@@ -119,3 +121,3 @@ });

if (!value) return { valid: false, reason: "server.json is not valid JSON." };
if (value.$schema !== SERVER_SCHEMA_URL) return { valid: false, reason: `server.json must use the exact schema URL ${SERVER_SCHEMA_URL}.` };
if (typeof value.$schema !== "string" || !SERVER_SCHEMA_RE.test(value.$schema)) return { valid: false, reason: `server.json "$schema" must be a dated MCP registry schema like ${SERVER_SCHEMA_URL} (the bare .../server.json 404s).` };
const missing = ["name", "description", "repository", "version"].filter((key) => !value[key]);

@@ -399,3 +401,3 @@ if (missing.length) return { valid: false, reason: `server.json is missing: ${missing.join(", ")}.` };

if (config.mcpUrl) server.remotes = [{ type: "streamable-http", url: config.mcpUrl }];
else server.packages = [{ registry_type: "npm", identifier: config.npmPackage ?? "aigentify", version: config.version ?? "0.1.0", runtime_hint: "npx", transport: { type: "stdio" } }];
else server.packages = [{ registryType: "npm", registryBaseUrl: "https://registry.npmjs.org", identifier: config.npmPackage ?? "aigentify", version: config.version ?? "0.1.0", transport: { type: "stdio" }, runtimeHint: "npx", packageArguments: [{ type: "positional", valueHint: "subcommand", value: "mcp" }] }];
return `${JSON.stringify(server, null, 2)}

@@ -402,0 +404,0 @@ `;

@@ -1,1 +0,1 @@

{"version":3,"sources":["../package.json","../src/constants.ts","../src/audit.ts","../src/config.ts","../src/generators/agents.ts","../src/generators/agents-route.ts","../src/generators/offer.ts","../src/generators/server.ts","../src/generators/index.ts","../src/mcp.ts","../src/cli.ts","../src/commands/init.ts","../src/commands/gen.ts","../src/commands/load-config.ts"],"sourcesContent":["{\n \"name\": \"aigentify\",\n \"version\": \"0.1.0\",\n \"description\": \"Audit and generate agent-native product surfaces\",\n \"type\": \"module\",\n \"license\": \"MIT\",\n \"bin\": {\"aigentify\": \"dist/cli.js\", \"aigentify-mcp\": \"dist/mcp.js\"},\n \"exports\": {\".\": {\"types\": \"./dist/index.d.ts\", \"import\": \"./dist/index.js\", \"require\": \"./dist/index.cjs\"}},\n \"files\": [\"dist\"],\n \"repository\": {\"type\": \"git\", \"url\": \"git+https://github.com/pooriaarab/aigentify.git\"},\n \"homepage\": \"https://github.com/pooriaarab/aigentify\",\n \"bugs\": \"https://github.com/pooriaarab/aigentify/issues\",\n \"keywords\": [\"agents\", \"agentification\", \"mcp\", \"ai\", \"json-ld\"],\n \"publishConfig\": {\"access\": \"public\"},\n \"scripts\": {\n \"build\": \"tsup\",\n \"test\": \"vitest run\",\n \"lint\": \"tsc --noEmit --pretty false\",\n \"typecheck\": \"tsc --noEmit\",\n \"verify\": \"npm run typecheck && npm run build && npm run test\",\n \"prepublishOnly\": \"npm run verify\"\n },\n \"engines\": {\"node\": \">=20\"},\n \"dependencies\": {\n \"@modelcontextprotocol/sdk\": \"^1.17.5\",\n \"cheerio\": \"^1.1.2\",\n \"commander\": \"^14.0.0\",\n \"jiti\": \"^2.5.1\",\n \"zod\": \"^4.0.0\"\n },\n \"devDependencies\": {\n \"@types/node\": \"^22.15.0\",\n \"tsup\": \"^8.5.0\",\n \"typescript\": \"^5.8.3\",\n \"vitest\": \"^3.2.4\"\n }\n}\n","import pkg from '../package.json';\n\nexport const PKG_NAME = pkg.name;\nexport const VERSION = pkg.version;\nexport const CONFIG_FILENAME = `${PKG_NAME}.config.ts`;\nexport const SERVER_SCHEMA_URL = 'https://static.modelcontextprotocol.io/schemas/2025-07-09/server.schema.json';\n","import { readFile, readdir, stat } from 'node:fs/promises';\nimport path from 'node:path';\nimport { SERVER_SCHEMA_URL } from './constants.js';\n\nexport type AuditStatus = 'pass' | 'fail' | 'warn' | 'na';\nexport interface AuditCheck { id: string; status: AuditStatus; note: string; weight: number }\nexport interface AuditGap { id: string; note: string; fix: string }\nexport interface AuditReport { target: string; score: number; checks: AuditCheck[]; gaps: AuditGap[] }\nexport interface AuditOptions { fetch?: typeof globalThis.fetch }\n\ninterface Endpoint { status: number; contentType: string; text: string }\ninterface Snapshot {\n agents: Endpoint; server: Endpoint; mcp: Endpoint; home: Endpoint; llms: Endpoint; sitemap: Endpoint;\n honestText: string; hasMcp: boolean; networkFailure: boolean;\n}\n\nconst SKIPPED = new Set(['.git', 'node_modules', 'dist', 'coverage', '.next', '_reference_geoaeo']);\nconst WEIGHTS: Record<string, number> = {\n 'agents-md': 15, 'agents-md-public-safe': 10, 'server-json': 15, mcp: 15,\n 'offer-jsonld': 15, 'honest-offer': 10, 'llms-txt': 10, sitemap: 10,\n};\nconst FIXES: Record<string, string> = {\n 'agents-md': 'Add a public AGENTS.md at the target root or serve /agents.md as text/markdown.',\n 'agents-md-public-safe': 'Rewrite AGENTS.md as product guidance. Remove repository paths and contributor instructions.',\n 'server-json': `Add server.json and set \"$schema\" to \"${SERVER_SCHEMA_URL}\". Include a repository and a remotes or packages entry.`,\n mcp: 'Publish server.json, .mcp.json, or an MCP entry point.',\n 'offer-jsonld': 'Publish JSON-LD with @type Offer, or a SoftwareApplication with an offers property.',\n 'honest-offer': 'State the real price plainly. Remove scarcity, countdown, and urgency language.',\n 'llms-txt': 'Publish /llms.txt with a concise product description.',\n sitemap: 'Publish /sitemap.xml for URL discovery.',\n};\n\nfunction check(id: string, status: AuditStatus, note: string): AuditCheck { return { id, status, note, weight: WEIGHTS[id] }; }\n\nexport function scoreAuditChecks(checks: AuditCheck[]): number {\n const relevant = checks.filter(item => item.status !== 'na');\n const total = relevant.reduce((sum, item) => sum + item.weight, 0);\n if (!total) return 0;\n const earned = relevant.reduce((sum, item) => sum + (item.status === 'pass' ? item.weight : item.status === 'warn' ? item.weight / 2 : 0), 0);\n return Math.round((earned / total) * 100);\n}\n\nasync function walkFiles(directory: string): Promise<string[]> {\n const entries = await readdir(directory, { withFileTypes: true });\n const files: string[] = [];\n for (const entry of entries) {\n if (entry.isDirectory() && !SKIPPED.has(entry.name)) files.push(...await walkFiles(path.join(directory, entry.name)));\n else if (entry.isFile()) files.push(path.join(directory, entry.name));\n }\n return files;\n}\n\nasync function readText(file: string | undefined): Promise<string> {\n if (!file) return '';\n try { return await readFile(file, 'utf8'); } catch { return ''; }\n}\n\nfunction findFile(files: string[], name: string): string | undefined {\n return files.find(file => {\n const normalized = file.replaceAll('\\\\', '/');\n return path.basename(normalized) === name || normalized.endsWith(`/${name}/route.ts`);\n });\n}\n\nfunction parseJson(text: string): Record<string, unknown> | undefined {\n try {\n const value: unknown = JSON.parse(text);\n return value && typeof value === 'object' && !Array.isArray(value) ? value as Record<string, unknown> : undefined;\n } catch { return undefined; }\n}\n\nfunction validServer(text: string): { valid: boolean; reason: string } {\n const value = parseJson(text);\n if (!value) return { valid: false, reason: 'server.json is not valid JSON.' };\n if (value.$schema !== SERVER_SCHEMA_URL) return { valid: false, reason: `server.json must use the exact schema URL ${SERVER_SCHEMA_URL}.` };\n const missing = ['name', 'description', 'repository', 'version'].filter(key => !value[key]);\n if (missing.length) return { valid: false, reason: `server.json is missing: ${missing.join(', ')}.` };\n if (!Array.isArray(value.remotes) && !Array.isArray(value.packages)) return { valid: false, reason: 'server.json needs a remotes or packages entry.' };\n return { valid: true, reason: 'server.json has the required MCP registry fields.' };\n}\n\nfunction hasOffer(texts: string[]): boolean {\n return texts.some(text => /\"@type\"\\s*:\\s*\"Offer\"/i.test(text) || /\"@type\"\\s*:\\s*\"SoftwareApplication\"/i.test(text) && /\"offers\"\\s*:/.test(text));\n}\n\nfunction hasUrgency(text: string): boolean {\n return /limited time|act now|hurry|expires|only\\s+\\d+\\s+left|ends in|sign up now|countdown/i.test(text);\n}\n\nfunction publicSafe(text: string): boolean {\n return !(/\\bsrc\\//i.test(text) || /\\bapps\\//i.test(text) || /\\bpackages\\//i.test(text) || /\\b[\\w.-]+\\.ts\\b/i.test(text) || /npm run build/i.test(text) || /\\btsconfig\\b/i.test(text) || /\\bcontributors?\\b/i.test(text) || /^#+\\s*layout\\b/im.test(text));\n}\n\nfunction offerBlock(text: string): string {\n const match = /^#+\\s*Offer\\b/im.exec(text);\n if (!match || match.index === undefined) return '';\n const rest = text.slice(match.index);\n const nextHeading = /^#+\\s+/m.exec(rest.slice(match[0].length));\n return nextHeading?.index === undefined ? rest : rest.slice(0, match[0].length + nextHeading.index);\n}\n\nasync function directorySnapshot(directory: string): Promise<Snapshot> {\n const files = await walkFiles(directory);\n const agentsFile = findFile(files, 'AGENTS.md');\n const serverFile = findFile(files, 'server.json');\n const mcpFile = files.find(file => /(?:^|\\/)\\.mcp\\.json$/.test(file.replaceAll('\\\\', '/')));\n const packageFile = findFile(files, 'package.json');\n const packageText = await readText(packageFile);\n const hasMcpBin = /\"(?:aigentify|[^\"\\n]*mcp[^\"\\n]*)\"\\s*:/i.test(packageText);\n const agentsText = await readText(agentsFile);\n const offerTexts = [agentsText, ...await Promise.all(files.filter(file => /\\.(html?|json|jsonld|md|mdx|tsx|jsx|js|mjs|ts)$/.test(file)).map(readText))];\n const llmsFile = findFile(files, 'llms.txt');\n const sitemapFile = findFile(files, 'sitemap.xml');\n const offerFiles = files.filter(file => /\\.jsonld$|(?:^|\\/)offer[^/]*\\.(?:json|html?)$/i.test(file));\n const honestText = [offerBlock(agentsText), ...await Promise.all(offerFiles.map(readText))].join('\\n');\n return {\n agents: { status: agentsFile ? 200 : 404, contentType: 'text/markdown', text: agentsText },\n server: { status: serverFile ? 200 : 404, contentType: 'application/json', text: await readText(serverFile) },\n mcp: { status: mcpFile || serverFile || hasMcpBin ? 200 : 404, contentType: '', text: '' },\n home: { status: 200, contentType: 'text/plain', text: offerTexts.join('\\n') },\n llms: { status: llmsFile ? 200 : 404, contentType: 'text/plain', text: await readText(llmsFile) },\n sitemap: { status: sitemapFile ? 200 : 404, contentType: 'application/xml', text: await readText(sitemapFile) },\n honestText, hasMcp: Boolean(mcpFile || serverFile || hasMcpBin), networkFailure: false,\n };\n}\n\nasync function fetchText(fetcher: typeof globalThis.fetch, url: string): Promise<Endpoint> {\n try {\n const response = await fetcher(url, { signal: AbortSignal.timeout(8000) });\n return { status: response.status, contentType: response.headers.get('content-type') ?? '', text: await response.text() };\n } catch { return { status: 0, contentType: '', text: '' }; }\n}\n\nasync function urlSnapshot(target: string, fetcher: typeof globalThis.fetch): Promise<Snapshot> {\n const base = target.replace(/\\/+$/, '');\n const [agents, server, mcp, home, llms, sitemap] = await Promise.all([\n fetchText(fetcher, `${base}/agents.md`), fetchText(fetcher, `${base}/server.json`), fetchText(fetcher, `${base}/.well-known/mcp`),\n fetchText(fetcher, base), fetchText(fetcher, `${base}/llms.txt`), fetchText(fetcher, `${base}/sitemap.xml`),\n ]);\n const endpoints = [agents, server, mcp, home, llms, sitemap];\n return { agents, server, mcp, home, llms, sitemap, honestText: [home.text, offerBlock(agents.text)].join('\\n'), hasMcp: server.status >= 200 && server.status < 400 || mcp.status >= 200 && mcp.status < 400, networkFailure: endpoints.every(item => item.status === 0) };\n}\n\nfunction buildChecks(snapshot: Snapshot): AuditCheck[] {\n const agentsPresent = snapshot.agents.status === 200 && snapshot.agents.text.trim().length > 0 && /(?:text\\/(?:markdown|plain)|application\\/markdown)/i.test(snapshot.agents.contentType);\n const agentsStatus: AuditStatus = snapshot.agents.status === 0 ? 'warn' : agentsPresent ? 'pass' : 'fail';\n const publicStatus: AuditStatus = !agentsPresent ? (snapshot.agents.status === 0 ? 'warn' : 'na') : publicSafe(snapshot.agents.text) ? 'pass' : 'warn';\n const serverInfo = snapshot.server.status === 200 ? validServer(snapshot.server.text) : undefined;\n const serverStatus: AuditStatus = snapshot.server.status === 0 ? 'warn' : !snapshot.hasMcp ? 'na' : serverInfo?.valid ? 'pass' : 'fail';\n const mcpStatus: AuditStatus = snapshot.networkFailure ? 'warn' : snapshot.hasMcp ? 'pass' : 'fail';\n const offerTexts = [snapshot.home.text, snapshot.agents.text];\n const offerStatus: AuditStatus = snapshot.home.status === 0 ? 'warn' : hasOffer(offerTexts) ? 'pass' : 'fail';\n const honestStatus: AuditStatus = !hasOffer(offerTexts) && !agentsPresent ? (snapshot.home.status === 0 ? 'warn' : 'na') : hasUrgency(snapshot.honestText) ? 'warn' : 'pass';\n const llmsStatus: AuditStatus = snapshot.llms.status === 0 ? 'warn' : snapshot.llms.status >= 200 && snapshot.llms.status < 400 && snapshot.llms.text.trim() ? 'pass' : 'fail';\n const sitemapStatus: AuditStatus = snapshot.sitemap.status === 0 ? 'warn' : snapshot.sitemap.status >= 200 && snapshot.sitemap.status < 400 && snapshot.sitemap.text.trim() ? 'pass' : 'fail';\n return [\n check('agents-md', agentsStatus, agentsPresent ? 'AGENTS.md is available.' : snapshot.agents.status === 0 ? 'The AGENTS.md request failed.' : 'AGENTS.md is missing.'),\n check('agents-md-public-safe', publicStatus, publicStatus === 'pass' ? 'AGENTS.md describes the product as a public surface.' : publicStatus === 'na' ? 'No AGENTS.md is available to inspect.' : 'AGENTS.md contains repository-internal guidance.'),\n check('server-json', serverStatus, serverInfo?.valid ? serverInfo.reason : serverInfo?.reason ?? (!snapshot.hasMcp ? 'No MCP surface was detected.' : 'server.json is missing.')),\n check('mcp', mcpStatus, snapshot.networkFailure ? 'The MCP discovery request failed.' : snapshot.hasMcp ? 'An MCP surface is available.' : 'No MCP surface was found.'),\n check('offer-jsonld', offerStatus, offerStatus === 'pass' ? 'Offer JSON-LD is available.' : offerStatus === 'warn' ? 'The offer could not be checked.' : 'No Offer JSON-LD was found.'),\n check('honest-offer', honestStatus, honestStatus === 'pass' ? 'Offer language states the price without pressure.' : honestStatus === 'na' ? 'No offer or Offer block was found.' : 'Offer language contains scarcity, countdown, or urgency copy.'),\n check('llms-txt', llmsStatus, llmsStatus === 'pass' ? 'llms.txt is available.' : llmsStatus === 'warn' ? 'The llms.txt request failed.' : 'llms.txt is missing.'),\n check('sitemap', sitemapStatus, sitemapStatus === 'pass' ? 'sitemap.xml is available.' : sitemapStatus === 'warn' ? 'The sitemap request failed.' : 'sitemap.xml is missing.'),\n ];\n}\n\nexport async function auditTarget(target: string, options: AuditOptions = {}): Promise<AuditReport> {\n const targetStat = await stat(target).catch(() => undefined);\n const snapshot = targetStat?.isDirectory() ? await directorySnapshot(target) : await urlSnapshot(target, options.fetch ?? globalThis.fetch);\n const checks = buildChecks(snapshot);\n const gaps = checks.filter(item => item.status === 'fail' || item.status === 'warn').map(item => ({ id: item.id, note: item.note, fix: FIXES[item.id] }));\n return { target, score: scoreAuditChecks(checks), checks, gaps };\n}\n\nexport function formatAuditReport(report: AuditReport): string {\n const lines = [`${report.target}: ${report.score}/100`, ''];\n for (const item of report.checks) lines.push(`${item.status.toUpperCase().padEnd(4)} ${item.id}: ${item.note}`);\n lines.push('', 'Gaps:');\n if (!report.gaps.length) lines.push('None.');\n else report.gaps.forEach((gap, index) => lines.push(`${index + 1}. ${gap.id}: ${gap.fix}`));\n return lines.join('\\n');\n}\n","export interface OfferConfig {\n name?: string;\n description?: string;\n price?: string | number;\n priceCurrency?: string;\n}\n\nexport interface AigentifyConfig {\n name: string;\n description: string;\n repository: string;\n version?: string;\n mcpUrl?: string;\n npmPackage?: string;\n offer?: OfferConfig;\n}\n\nexport function defineConfig(config: AigentifyConfig): AigentifyConfig {\n return { ...config, repository: config.repository.replace(/\\/+$/, ''), version: config.version ?? '0.1.0' };\n}\n\nexport function defaultConfig(): AigentifyConfig {\n return defineConfig({\n name: 'Your product',\n description: 'A product with an agent-native interface.',\n repository: 'https://github.com/your-org/your-product',\n npmPackage: 'your-package',\n });\n}\n","import type { AigentifyConfig } from '../config.js';\n\nexport function generateAgentsMd(config: AigentifyConfig): string {\n const packageName = config.npmPackage ?? '<NPM_PACKAGE>';\n const mcp = config.mcpUrl ?? `npx ${packageName}`;\n const offer = config.offer;\n const offerLine = offer?.price === undefined ? 'Price: <PRICE>' : `Price: ${offer.priceCurrency ?? 'USD'} ${offer.price}`;\n return `# ${config.name}\n\n## Mental model\n\n${config.name} is ${config.description}\n\nUse the product interface for product work. Use the agent interface for repeatable tasks that need structured results.\n\n## The faces\n\n- Product: ${config.repository}\n- MCP: ${mcp}\n- Package: ${packageName}\n\n## MCP tools\n\n| Tool | Input | Result |\n| --- | --- | --- |\n| audit | target | An agent-readiness report with a score and gaps. |\n| gen | artifact and params | A generated agent-native artifact. |\n\n## The loop\n\n1. Audit the target.\n2. Fix the highest-impact gap.\n3. Generate or publish the missing artifact.\n4. Audit again and keep the report with the release.\n\n## Rules\n\n- Treat the product description and prices as source facts.\n- Return structured data when a tool provides it.\n- Ask for missing information before making a high-impact change.\n- Keep public agent instructions about the product and its use.\n\n## Offer\n\n${offer?.description ?? '<OFFER_DESCRIPTION>'}\n\n${offerLine}\n`;\n}\n","import type { AigentifyConfig } from '../config.js';\n\nexport function generateAgentsRoute(config: AigentifyConfig, framework = 'static'): string {\n if (framework === 'next') {\n return `# Serve /agents.md from a Next route\n\nCopy AGENTS.md to a public directory, or add this force-static route:\n\n\\`\\`\\`ts\nimport { readFile } from 'node:fs/promises';\n\nexport const dynamic = 'force-static';\n\nexport async function GET() {\n const body = await readFile('AGENTS.md', 'utf8');\n return new Response(body, { headers: { 'content-type': 'text/markdown; charset=utf-8' } });\n}\n\\`\\`\\`\n\nProduct: ${config.name}\n`;\n }\n return `# Serve /agents.md\n\nCopy the generated AGENTS.md file to public/agents.md and serve it as a static text/markdown response.\n\nProduct: ${config.name}\n`;\n}\n","import type { AigentifyConfig } from '../config.js';\n\nexport function generateOffer(config: AigentifyConfig): string {\n const offer = config.offer ?? {};\n const data = {\n '@context': 'https://schema.org',\n '@type': 'SoftwareApplication',\n name: config.name,\n description: config.description,\n applicationCategory: 'DeveloperApplication',\n offers: [{\n '@type': 'Offer',\n name: offer.name ?? `${config.name} access`,\n ...(offer.description ? { description: offer.description } : {}),\n ...(offer.price === undefined ? {} : { price: String(offer.price) }),\n priceCurrency: offer.priceCurrency ?? 'USD',\n }],\n };\n return `${JSON.stringify(data, null, 2)}\\n`;\n}\n","import { SERVER_SCHEMA_URL } from '../constants.js';\nimport type { AigentifyConfig } from '../config.js';\n\nexport function generateServerJson(config: AigentifyConfig): string {\n const serverName = config.name.includes('/') ? config.name : `io.github.pooriaarab/${config.name.toLowerCase().replace(/[^a-z0-9._-]+/g, '-')}`;\n const server: Record<string, unknown> = {\n $schema: SERVER_SCHEMA_URL,\n name: serverName,\n description: config.description,\n repository: { url: config.repository, source: 'github' },\n version: config.version ?? '0.1.0',\n };\n if (config.mcpUrl) server.remotes = [{ type: 'streamable-http', url: config.mcpUrl }];\n else server.packages = [{ registry_type: 'npm', identifier: config.npmPackage ?? 'aigentify', version: config.version ?? '0.1.0', runtime_hint: 'npx', transport: { type: 'stdio' } }];\n return `${JSON.stringify(server, null, 2)}\\n`;\n}\n","import type { AigentifyConfig } from '../config.js';\nimport { defaultConfig, defineConfig } from '../config.js';\nimport { generateAgentsMd } from './agents.js';\nimport { generateAgentsRoute } from './agents-route.js';\nimport { generateOffer } from './offer.js';\nimport { generateServerJson } from './server.js';\nexport * from './agents.js';\nexport * from './agents-route.js';\nexport * from './offer.js';\nexport * from './server.js';\n\nexport type GeneratedArtifact = 'agents-md' | 'server-json' | 'offer' | 'agents-route';\nexport type GenerateParams = Partial<AigentifyConfig> & { framework?: string };\n\nfunction configFromParams(params: GenerateParams = {}): AigentifyConfig {\n const base = defaultConfig();\n return defineConfig({ ...base, ...params, offer: { ...(base.offer ?? {}), ...(params.offer ?? {}) } });\n}\n\nexport function generate(artifact: GeneratedArtifact, params: GenerateParams = {}): string {\n const config = configFromParams(params);\n if (artifact === 'agents-md') return generateAgentsMd(config);\n if (artifact === 'server-json') return generateServerJson(config);\n if (artifact === 'offer') return generateOffer(config);\n if (artifact === 'agents-route') return generateAgentsRoute(config, params.framework);\n throw new Error(`Unknown artifact: ${artifact}`);\n}\n","#!/usr/bin/env node\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport { z } from 'zod';\nimport { auditTarget } from './audit.js';\nimport { PKG_NAME, VERSION } from './constants.js';\nimport { generate, type GenerateParams, type GeneratedArtifact } from './generators/index.js';\n\nconst artifacts = ['agents-md', 'server-json', 'offer', 'agents-route'] as const;\n\nexport function createMcpServer(): McpServer {\n const server = new McpServer({ name: PKG_NAME, version: VERSION });\n server.registerTool('audit', {\n description: 'Audit a local directory or live URL for agent-native readiness.',\n inputSchema: { target: z.string() },\n }, async ({ target }) => ({ content: [{ type: 'text', text: JSON.stringify(await auditTarget(target), null, 2) }] }));\n server.registerTool('gen', {\n description: 'Generate an agent-native artifact as text.',\n inputSchema: { artifact: z.enum(artifacts), params: z.record(z.string(), z.unknown()).optional() },\n }, async ({ artifact, params }) => ({ content: [{ type: 'text', text: generate(artifact as GeneratedArtifact, (params ?? {}) as GenerateParams) }] }));\n return server;\n}\n\nexport async function startMcpServer(): Promise<void> {\n const server = createMcpServer();\n await server.connect(new StdioServerTransport());\n}\n\nif (import.meta.url === `file://${process.argv[1]}`) startMcpServer().catch(error => {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`);\n process.exitCode = 1;\n});\n","#!/usr/bin/env node\nimport { Command } from 'commander';\nimport { auditTarget, formatAuditReport } from './audit.js';\nimport { PKG_NAME, VERSION } from './constants.js';\nimport { initProject } from './commands/init.js';\nimport { generateArtifact, type GeneratedArtifact } from './commands/gen.js';\nimport type { GenerateParams } from './generators/index.js';\n\nconst program = new Command();\nprogram.name(PKG_NAME).version(VERSION).description('Audit and generate agent-native product surfaces.');\n\nprogram.command('audit [target]').description('Audit a local directory or live URL.').option('--json', 'print JSON instead of the report').action(async (target = '.', options: { json?: boolean }) => {\n const report = await auditTarget(target);\n process.stdout.write(options.json ? `${JSON.stringify(report, null, 2)}\\n` : `${formatAuditReport(report)}\\n`);\n});\n\nprogram.command('init').description('Write starter AGENTS.md and server.json into the current directory.').option('--force', 'overwrite existing files').action(async (options: { force?: boolean }) => {\n const result = await initProject({ directory: process.cwd(), force: options.force });\n process.stdout.write(`created ${result.created.length}, skipped ${result.skipped.length}\\n`);\n});\n\nprogram.command('gen <artifact>').description('Generate an agent-native artifact.').option('-o, --out <path>', 'write to a file instead of stdout').option('--name <name>').option('--description <description>').option('--repository <url>').option('--mcp-url <url>').option('--npm-package <name>').option('--price <price>').option('--price-currency <currency>').option('--framework <framework>', 'route framework, such as static or next', 'static').action(async (artifact: string, options: Record<string, string | undefined>) => {\n const offer = options.price === undefined && options.priceCurrency === undefined ? undefined : { price: options.price, priceCurrency: options.priceCurrency };\n const params = Object.fromEntries(Object.entries({ name: options.name, description: options.description, repository: options.repository, mcpUrl: options.mcpUrl, npmPackage: options.npmPackage, framework: options.framework, offer }).filter(([, value]) => value !== undefined));\n const content = await generateArtifact(artifact as GeneratedArtifact, process.cwd(), params as GenerateParams);\n if (options.out) { const { writeFile } = await import('node:fs/promises'); await writeFile(options.out, content, 'utf8'); }\n else process.stdout.write(content);\n});\n\nprogram.command('mcp').description('Run the MCP server over stdio.').action(async () => { const { startMcpServer } = await import('./mcp.js'); await startMcpServer(); });\nprogram.parseAsync().catch(error => { process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`); process.exitCode = 1; });\n","import { access, mkdir, writeFile } from 'node:fs/promises';\nimport path from 'node:path';\nimport { defaultConfig } from '../config.js';\nimport { generate } from '../generators/index.js';\n\nexport interface InitOptions { directory: string; force?: boolean }\nexport interface InitResult { created: string[]; skipped: string[] }\n\nexport async function initProject(options: InitOptions): Promise<InitResult> {\n const root = path.resolve(options.directory);\n await mkdir(root, { recursive: true });\n const config = defaultConfig();\n const result: InitResult = { created: [], skipped: [] };\n for (const [name, content] of [['AGENTS.md', generate('agents-md', config)], ['server.json', generate('server-json', config)]] as const) {\n const file = path.join(root, name);\n try {\n await access(file);\n if (!options.force) { result.skipped.push(name); continue; }\n } catch { /* The file does not exist yet. */ }\n await writeFile(file, content, 'utf8');\n result.created.push(name);\n }\n return result;\n}\n","import { writeFile } from 'node:fs/promises';\nimport { defaultConfig } from '../config.js';\nimport { generate, type GenerateParams, type GeneratedArtifact } from '../generators/index.js';\nimport { loadAigentifyConfig } from './load-config.js';\n\nexport type { GeneratedArtifact } from '../generators/index.js';\n\nexport async function generateArtifact(artifact: GeneratedArtifact, directory = process.cwd(), params: GenerateParams = {}): Promise<string> {\n const config = (await loadAigentifyConfig(directory)) ?? defaultConfig();\n return generate(artifact, { ...config, ...params, offer: { ...(config.offer ?? {}), ...(params.offer ?? {}) } });\n}\n\nexport async function writeGeneratedArtifact(artifact: GeneratedArtifact, options: { directory?: string; output?: string; params?: GenerateParams } = {}): Promise<string> {\n const content = await generateArtifact(artifact, options.directory, options.params);\n if (options.output) await writeFile(options.output, content, 'utf8');\n return content;\n}\n","import path from 'node:path';\nimport { access } from 'node:fs/promises';\nimport { createJiti } from 'jiti';\nimport { CONFIG_FILENAME } from '../constants.js';\nimport { defineConfig, type AigentifyConfig } from '../config.js';\n\nexport async function findConfigFile(directory = process.cwd()): Promise<string | undefined> {\n const candidates = [CONFIG_FILENAME, CONFIG_FILENAME.replace(/\\.ts$/, '.js'), CONFIG_FILENAME.replace(/\\.ts$/, '.mjs')];\n for (const candidate of candidates) {\n const file = path.join(directory, candidate);\n try { await access(file); return file; } catch { /* Try the next supported extension. */ }\n }\n return undefined;\n}\n\nexport async function loadAigentifyConfig(directory = process.cwd()): Promise<AigentifyConfig | undefined> {\n const file = await findConfigFile(directory);\n if (!file) return undefined;\n const jiti = createJiti(import.meta.url);\n const module = (await jiti.import(file)) as { default?: AigentifyConfig; aigentifyConfig?: AigentifyConfig };\n const config = module.aigentifyConfig ?? module.default;\n if (!config) throw new Error(`${path.basename(file)} must export a default config or aigentifyConfig.`);\n return defineConfig(config);\n}\n"],"mappings":"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","names":["path","writeFile","path","access","writeFile","startMcpServer"]}
{"version":3,"sources":["../package.json","../src/constants.ts","../src/audit.ts","../src/config.ts","../src/generators/agents.ts","../src/generators/agents-route.ts","../src/generators/offer.ts","../src/generators/server.ts","../src/generators/index.ts","../src/mcp.ts","../src/cli.ts","../src/commands/init.ts","../src/commands/gen.ts","../src/commands/load-config.ts"],"sourcesContent":["{\n \"name\": \"aigentify\",\n \"version\": \"0.1.1\",\n \"mcpName\": \"io.github.pooriaarab/aigentify\",\n \"description\": \"Audit and generate agent-native product surfaces\",\n \"type\": \"module\",\n \"license\": \"MIT\",\n \"bin\": {\"aigentify\": \"dist/cli.js\", \"aigentify-mcp\": \"dist/mcp.js\"},\n \"exports\": {\".\": {\"types\": \"./dist/index.d.ts\", \"import\": \"./dist/index.js\", \"require\": \"./dist/index.cjs\"}},\n \"files\": [\"dist\"],\n \"repository\": {\"type\": \"git\", \"url\": \"git+https://github.com/pooriaarab/aigentify.git\"},\n \"homepage\": \"https://github.com/pooriaarab/aigentify\",\n \"bugs\": \"https://github.com/pooriaarab/aigentify/issues\",\n \"keywords\": [\"agents\", \"agentification\", \"mcp\", \"ai\", \"json-ld\"],\n \"publishConfig\": {\"access\": \"public\"},\n \"scripts\": {\n \"build\": \"tsup\",\n \"test\": \"vitest run\",\n \"lint\": \"tsc --noEmit --pretty false\",\n \"typecheck\": \"tsc --noEmit\",\n \"verify\": \"npm run typecheck && npm run build && npm run test\",\n \"prepublishOnly\": \"npm run verify\"\n },\n \"engines\": {\"node\": \">=20\"},\n \"dependencies\": {\n \"@modelcontextprotocol/sdk\": \"^1.17.5\",\n \"cheerio\": \"^1.1.2\",\n \"commander\": \"^14.0.0\",\n \"jiti\": \"^2.5.1\",\n \"zod\": \"^4.0.0\"\n },\n \"devDependencies\": {\n \"@types/node\": \"^22.15.0\",\n \"tsup\": \"^8.5.0\",\n \"typescript\": \"^5.8.3\",\n \"vitest\": \"^3.2.4\"\n }\n}\n","import pkg from '../package.json';\n\nexport const PKG_NAME = pkg.name;\nexport const VERSION = pkg.version;\nexport const CONFIG_FILENAME = `${PKG_NAME}.config.ts`;\nexport const SERVER_SCHEMA_URL = 'https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json';\n// Any dated MCP registry schema is valid; only the bare `.../server.json` (no `.schema`) 404s.\nexport const SERVER_SCHEMA_RE = /^https:\\/\\/static\\.modelcontextprotocol\\.io\\/schemas\\/\\d{4}-\\d{2}-\\d{2}\\/server\\.schema\\.json$/;\n","import { readFile, readdir, stat } from 'node:fs/promises';\nimport path from 'node:path';\nimport { SERVER_SCHEMA_URL, SERVER_SCHEMA_RE } from './constants.js';\n\nexport type AuditStatus = 'pass' | 'fail' | 'warn' | 'na';\nexport interface AuditCheck { id: string; status: AuditStatus; note: string; weight: number }\nexport interface AuditGap { id: string; note: string; fix: string }\nexport interface AuditReport { target: string; score: number; checks: AuditCheck[]; gaps: AuditGap[] }\nexport interface AuditOptions { fetch?: typeof globalThis.fetch }\n\ninterface Endpoint { status: number; contentType: string; text: string }\ninterface Snapshot {\n agents: Endpoint; server: Endpoint; mcp: Endpoint; home: Endpoint; llms: Endpoint; sitemap: Endpoint;\n honestText: string; hasMcp: boolean; networkFailure: boolean;\n}\n\nconst SKIPPED = new Set(['.git', 'node_modules', 'dist', 'coverage', '.next', '_reference_geoaeo']);\nconst WEIGHTS: Record<string, number> = {\n 'agents-md': 15, 'agents-md-public-safe': 10, 'server-json': 15, mcp: 15,\n 'offer-jsonld': 15, 'honest-offer': 10, 'llms-txt': 10, sitemap: 10,\n};\nconst FIXES: Record<string, string> = {\n 'agents-md': 'Add a public AGENTS.md at the target root or serve /agents.md as text/markdown.',\n 'agents-md-public-safe': 'Rewrite AGENTS.md as product guidance. Remove repository paths and contributor instructions.',\n 'server-json': `Add server.json and set \"$schema\" to \"${SERVER_SCHEMA_URL}\". Include a repository and a remotes or packages entry.`,\n mcp: 'Publish server.json, .mcp.json, or an MCP entry point.',\n 'offer-jsonld': 'Publish JSON-LD with @type Offer, or a SoftwareApplication with an offers property.',\n 'honest-offer': 'State the real price plainly. Remove scarcity, countdown, and urgency language.',\n 'llms-txt': 'Publish /llms.txt with a concise product description.',\n sitemap: 'Publish /sitemap.xml for URL discovery.',\n};\n\nfunction check(id: string, status: AuditStatus, note: string): AuditCheck { return { id, status, note, weight: WEIGHTS[id] }; }\n\nexport function scoreAuditChecks(checks: AuditCheck[]): number {\n const relevant = checks.filter(item => item.status !== 'na');\n const total = relevant.reduce((sum, item) => sum + item.weight, 0);\n if (!total) return 0;\n const earned = relevant.reduce((sum, item) => sum + (item.status === 'pass' ? item.weight : item.status === 'warn' ? item.weight / 2 : 0), 0);\n return Math.round((earned / total) * 100);\n}\n\nasync function walkFiles(directory: string): Promise<string[]> {\n const entries = await readdir(directory, { withFileTypes: true });\n const files: string[] = [];\n for (const entry of entries) {\n if (entry.isDirectory() && !SKIPPED.has(entry.name)) files.push(...await walkFiles(path.join(directory, entry.name)));\n else if (entry.isFile()) files.push(path.join(directory, entry.name));\n }\n return files;\n}\n\nasync function readText(file: string | undefined): Promise<string> {\n if (!file) return '';\n try { return await readFile(file, 'utf8'); } catch { return ''; }\n}\n\nfunction findFile(files: string[], name: string): string | undefined {\n return files.find(file => {\n const normalized = file.replaceAll('\\\\', '/');\n return path.basename(normalized) === name || normalized.endsWith(`/${name}/route.ts`);\n });\n}\n\nfunction parseJson(text: string): Record<string, unknown> | undefined {\n try {\n const value: unknown = JSON.parse(text);\n return value && typeof value === 'object' && !Array.isArray(value) ? value as Record<string, unknown> : undefined;\n } catch { return undefined; }\n}\n\nfunction validServer(text: string): { valid: boolean; reason: string } {\n const value = parseJson(text);\n if (!value) return { valid: false, reason: 'server.json is not valid JSON.' };\n if (typeof value.$schema !== 'string' || !SERVER_SCHEMA_RE.test(value.$schema)) return { valid: false, reason: `server.json \"$schema\" must be a dated MCP registry schema like ${SERVER_SCHEMA_URL} (the bare .../server.json 404s).` };\n const missing = ['name', 'description', 'repository', 'version'].filter(key => !value[key]);\n if (missing.length) return { valid: false, reason: `server.json is missing: ${missing.join(', ')}.` };\n if (!Array.isArray(value.remotes) && !Array.isArray(value.packages)) return { valid: false, reason: 'server.json needs a remotes or packages entry.' };\n return { valid: true, reason: 'server.json has the required MCP registry fields.' };\n}\n\nfunction hasOffer(texts: string[]): boolean {\n return texts.some(text => /\"@type\"\\s*:\\s*\"Offer\"/i.test(text) || /\"@type\"\\s*:\\s*\"SoftwareApplication\"/i.test(text) && /\"offers\"\\s*:/.test(text));\n}\n\nfunction hasUrgency(text: string): boolean {\n return /limited time|act now|hurry|expires|only\\s+\\d+\\s+left|ends in|sign up now|countdown/i.test(text);\n}\n\nfunction publicSafe(text: string): boolean {\n return !(/\\bsrc\\//i.test(text) || /\\bapps\\//i.test(text) || /\\bpackages\\//i.test(text) || /\\b[\\w.-]+\\.ts\\b/i.test(text) || /npm run build/i.test(text) || /\\btsconfig\\b/i.test(text) || /\\bcontributors?\\b/i.test(text) || /^#+\\s*layout\\b/im.test(text));\n}\n\nfunction offerBlock(text: string): string {\n const match = /^#+\\s*Offer\\b/im.exec(text);\n if (!match || match.index === undefined) return '';\n const rest = text.slice(match.index);\n const nextHeading = /^#+\\s+/m.exec(rest.slice(match[0].length));\n return nextHeading?.index === undefined ? rest : rest.slice(0, match[0].length + nextHeading.index);\n}\n\nasync function directorySnapshot(directory: string): Promise<Snapshot> {\n const files = await walkFiles(directory);\n const agentsFile = findFile(files, 'AGENTS.md');\n const serverFile = findFile(files, 'server.json');\n const mcpFile = files.find(file => /(?:^|\\/)\\.mcp\\.json$/.test(file.replaceAll('\\\\', '/')));\n const packageFile = findFile(files, 'package.json');\n const packageText = await readText(packageFile);\n const hasMcpBin = /\"(?:aigentify|[^\"\\n]*mcp[^\"\\n]*)\"\\s*:/i.test(packageText);\n const agentsText = await readText(agentsFile);\n const offerTexts = [agentsText, ...await Promise.all(files.filter(file => /\\.(html?|json|jsonld|md|mdx|tsx|jsx|js|mjs|ts)$/.test(file)).map(readText))];\n const llmsFile = findFile(files, 'llms.txt');\n const sitemapFile = findFile(files, 'sitemap.xml');\n const offerFiles = files.filter(file => /\\.jsonld$|(?:^|\\/)offer[^/]*\\.(?:json|html?)$/i.test(file));\n const honestText = [offerBlock(agentsText), ...await Promise.all(offerFiles.map(readText))].join('\\n');\n return {\n agents: { status: agentsFile ? 200 : 404, contentType: 'text/markdown', text: agentsText },\n server: { status: serverFile ? 200 : 404, contentType: 'application/json', text: await readText(serverFile) },\n mcp: { status: mcpFile || serverFile || hasMcpBin ? 200 : 404, contentType: '', text: '' },\n home: { status: 200, contentType: 'text/plain', text: offerTexts.join('\\n') },\n llms: { status: llmsFile ? 200 : 404, contentType: 'text/plain', text: await readText(llmsFile) },\n sitemap: { status: sitemapFile ? 200 : 404, contentType: 'application/xml', text: await readText(sitemapFile) },\n honestText, hasMcp: Boolean(mcpFile || serverFile || hasMcpBin), networkFailure: false,\n };\n}\n\nasync function fetchText(fetcher: typeof globalThis.fetch, url: string): Promise<Endpoint> {\n try {\n const response = await fetcher(url, { signal: AbortSignal.timeout(8000) });\n return { status: response.status, contentType: response.headers.get('content-type') ?? '', text: await response.text() };\n } catch { return { status: 0, contentType: '', text: '' }; }\n}\n\nasync function urlSnapshot(target: string, fetcher: typeof globalThis.fetch): Promise<Snapshot> {\n const base = target.replace(/\\/+$/, '');\n const [agents, server, mcp, home, llms, sitemap] = await Promise.all([\n fetchText(fetcher, `${base}/agents.md`), fetchText(fetcher, `${base}/server.json`), fetchText(fetcher, `${base}/.well-known/mcp`),\n fetchText(fetcher, base), fetchText(fetcher, `${base}/llms.txt`), fetchText(fetcher, `${base}/sitemap.xml`),\n ]);\n const endpoints = [agents, server, mcp, home, llms, sitemap];\n return { agents, server, mcp, home, llms, sitemap, honestText: [home.text, offerBlock(agents.text)].join('\\n'), hasMcp: server.status >= 200 && server.status < 400 || mcp.status >= 200 && mcp.status < 400, networkFailure: endpoints.every(item => item.status === 0) };\n}\n\nfunction buildChecks(snapshot: Snapshot): AuditCheck[] {\n const agentsPresent = snapshot.agents.status === 200 && snapshot.agents.text.trim().length > 0 && /(?:text\\/(?:markdown|plain)|application\\/markdown)/i.test(snapshot.agents.contentType);\n const agentsStatus: AuditStatus = snapshot.agents.status === 0 ? 'warn' : agentsPresent ? 'pass' : 'fail';\n const publicStatus: AuditStatus = !agentsPresent ? (snapshot.agents.status === 0 ? 'warn' : 'na') : publicSafe(snapshot.agents.text) ? 'pass' : 'warn';\n const serverInfo = snapshot.server.status === 200 ? validServer(snapshot.server.text) : undefined;\n const serverStatus: AuditStatus = snapshot.server.status === 0 ? 'warn' : !snapshot.hasMcp ? 'na' : serverInfo?.valid ? 'pass' : 'fail';\n const mcpStatus: AuditStatus = snapshot.networkFailure ? 'warn' : snapshot.hasMcp ? 'pass' : 'fail';\n const offerTexts = [snapshot.home.text, snapshot.agents.text];\n const offerStatus: AuditStatus = snapshot.home.status === 0 ? 'warn' : hasOffer(offerTexts) ? 'pass' : 'fail';\n const honestStatus: AuditStatus = !hasOffer(offerTexts) && !agentsPresent ? (snapshot.home.status === 0 ? 'warn' : 'na') : hasUrgency(snapshot.honestText) ? 'warn' : 'pass';\n const llmsStatus: AuditStatus = snapshot.llms.status === 0 ? 'warn' : snapshot.llms.status >= 200 && snapshot.llms.status < 400 && snapshot.llms.text.trim() ? 'pass' : 'fail';\n const sitemapStatus: AuditStatus = snapshot.sitemap.status === 0 ? 'warn' : snapshot.sitemap.status >= 200 && snapshot.sitemap.status < 400 && snapshot.sitemap.text.trim() ? 'pass' : 'fail';\n return [\n check('agents-md', agentsStatus, agentsPresent ? 'AGENTS.md is available.' : snapshot.agents.status === 0 ? 'The AGENTS.md request failed.' : 'AGENTS.md is missing.'),\n check('agents-md-public-safe', publicStatus, publicStatus === 'pass' ? 'AGENTS.md describes the product as a public surface.' : publicStatus === 'na' ? 'No AGENTS.md is available to inspect.' : 'AGENTS.md contains repository-internal guidance.'),\n check('server-json', serverStatus, serverInfo?.valid ? serverInfo.reason : serverInfo?.reason ?? (!snapshot.hasMcp ? 'No MCP surface was detected.' : 'server.json is missing.')),\n check('mcp', mcpStatus, snapshot.networkFailure ? 'The MCP discovery request failed.' : snapshot.hasMcp ? 'An MCP surface is available.' : 'No MCP surface was found.'),\n check('offer-jsonld', offerStatus, offerStatus === 'pass' ? 'Offer JSON-LD is available.' : offerStatus === 'warn' ? 'The offer could not be checked.' : 'No Offer JSON-LD was found.'),\n check('honest-offer', honestStatus, honestStatus === 'pass' ? 'Offer language states the price without pressure.' : honestStatus === 'na' ? 'No offer or Offer block was found.' : 'Offer language contains scarcity, countdown, or urgency copy.'),\n check('llms-txt', llmsStatus, llmsStatus === 'pass' ? 'llms.txt is available.' : llmsStatus === 'warn' ? 'The llms.txt request failed.' : 'llms.txt is missing.'),\n check('sitemap', sitemapStatus, sitemapStatus === 'pass' ? 'sitemap.xml is available.' : sitemapStatus === 'warn' ? 'The sitemap request failed.' : 'sitemap.xml is missing.'),\n ];\n}\n\nexport async function auditTarget(target: string, options: AuditOptions = {}): Promise<AuditReport> {\n const targetStat = await stat(target).catch(() => undefined);\n const snapshot = targetStat?.isDirectory() ? await directorySnapshot(target) : await urlSnapshot(target, options.fetch ?? globalThis.fetch);\n const checks = buildChecks(snapshot);\n const gaps = checks.filter(item => item.status === 'fail' || item.status === 'warn').map(item => ({ id: item.id, note: item.note, fix: FIXES[item.id] }));\n return { target, score: scoreAuditChecks(checks), checks, gaps };\n}\n\nexport function formatAuditReport(report: AuditReport): string {\n const lines = [`${report.target}: ${report.score}/100`, ''];\n for (const item of report.checks) lines.push(`${item.status.toUpperCase().padEnd(4)} ${item.id}: ${item.note}`);\n lines.push('', 'Gaps:');\n if (!report.gaps.length) lines.push('None.');\n else report.gaps.forEach((gap, index) => lines.push(`${index + 1}. ${gap.id}: ${gap.fix}`));\n return lines.join('\\n');\n}\n","export interface OfferConfig {\n name?: string;\n description?: string;\n price?: string | number;\n priceCurrency?: string;\n}\n\nexport interface AigentifyConfig {\n name: string;\n description: string;\n repository: string;\n version?: string;\n mcpUrl?: string;\n npmPackage?: string;\n offer?: OfferConfig;\n}\n\nexport function defineConfig(config: AigentifyConfig): AigentifyConfig {\n return { ...config, repository: config.repository.replace(/\\/+$/, ''), version: config.version ?? '0.1.0' };\n}\n\nexport function defaultConfig(): AigentifyConfig {\n return defineConfig({\n name: 'Your product',\n description: 'A product with an agent-native interface.',\n repository: 'https://github.com/your-org/your-product',\n npmPackage: 'your-package',\n });\n}\n","import type { AigentifyConfig } from '../config.js';\n\nexport function generateAgentsMd(config: AigentifyConfig): string {\n const packageName = config.npmPackage ?? '<NPM_PACKAGE>';\n const mcp = config.mcpUrl ?? `npx ${packageName}`;\n const offer = config.offer;\n const offerLine = offer?.price === undefined ? 'Price: <PRICE>' : `Price: ${offer.priceCurrency ?? 'USD'} ${offer.price}`;\n return `# ${config.name}\n\n## Mental model\n\n${config.name} is ${config.description}\n\nUse the product interface for product work. Use the agent interface for repeatable tasks that need structured results.\n\n## The faces\n\n- Product: ${config.repository}\n- MCP: ${mcp}\n- Package: ${packageName}\n\n## MCP tools\n\n| Tool | Input | Result |\n| --- | --- | --- |\n| audit | target | An agent-readiness report with a score and gaps. |\n| gen | artifact and params | A generated agent-native artifact. |\n\n## The loop\n\n1. Audit the target.\n2. Fix the highest-impact gap.\n3. Generate or publish the missing artifact.\n4. Audit again and keep the report with the release.\n\n## Rules\n\n- Treat the product description and prices as source facts.\n- Return structured data when a tool provides it.\n- Ask for missing information before making a high-impact change.\n- Keep public agent instructions about the product and its use.\n\n## Offer\n\n${offer?.description ?? '<OFFER_DESCRIPTION>'}\n\n${offerLine}\n`;\n}\n","import type { AigentifyConfig } from '../config.js';\n\nexport function generateAgentsRoute(config: AigentifyConfig, framework = 'static'): string {\n if (framework === 'next') {\n return `# Serve /agents.md from a Next route\n\nCopy AGENTS.md to a public directory, or add this force-static route:\n\n\\`\\`\\`ts\nimport { readFile } from 'node:fs/promises';\n\nexport const dynamic = 'force-static';\n\nexport async function GET() {\n const body = await readFile('AGENTS.md', 'utf8');\n return new Response(body, { headers: { 'content-type': 'text/markdown; charset=utf-8' } });\n}\n\\`\\`\\`\n\nProduct: ${config.name}\n`;\n }\n return `# Serve /agents.md\n\nCopy the generated AGENTS.md file to public/agents.md and serve it as a static text/markdown response.\n\nProduct: ${config.name}\n`;\n}\n","import type { AigentifyConfig } from '../config.js';\n\nexport function generateOffer(config: AigentifyConfig): string {\n const offer = config.offer ?? {};\n const data = {\n '@context': 'https://schema.org',\n '@type': 'SoftwareApplication',\n name: config.name,\n description: config.description,\n applicationCategory: 'DeveloperApplication',\n offers: [{\n '@type': 'Offer',\n name: offer.name ?? `${config.name} access`,\n ...(offer.description ? { description: offer.description } : {}),\n ...(offer.price === undefined ? {} : { price: String(offer.price) }),\n priceCurrency: offer.priceCurrency ?? 'USD',\n }],\n };\n return `${JSON.stringify(data, null, 2)}\\n`;\n}\n","import { SERVER_SCHEMA_URL } from '../constants.js';\nimport type { AigentifyConfig } from '../config.js';\n\nexport function generateServerJson(config: AigentifyConfig): string {\n const serverName = config.name.includes('/') ? config.name : `io.github.pooriaarab/${config.name.toLowerCase().replace(/[^a-z0-9._-]+/g, '-')}`;\n const server: Record<string, unknown> = {\n $schema: SERVER_SCHEMA_URL,\n name: serverName,\n description: config.description,\n repository: { url: config.repository, source: 'github' },\n version: config.version ?? '0.1.0',\n };\n if (config.mcpUrl) server.remotes = [{ type: 'streamable-http', url: config.mcpUrl }];\n else server.packages = [{ registryType: 'npm', registryBaseUrl: 'https://registry.npmjs.org', identifier: config.npmPackage ?? 'aigentify', version: config.version ?? '0.1.0', transport: { type: 'stdio' }, runtimeHint: 'npx', packageArguments: [{ type: 'positional', valueHint: 'subcommand', value: 'mcp' }] }];\n return `${JSON.stringify(server, null, 2)}\\n`;\n}\n","import type { AigentifyConfig } from '../config.js';\nimport { defaultConfig, defineConfig } from '../config.js';\nimport { generateAgentsMd } from './agents.js';\nimport { generateAgentsRoute } from './agents-route.js';\nimport { generateOffer } from './offer.js';\nimport { generateServerJson } from './server.js';\nexport * from './agents.js';\nexport * from './agents-route.js';\nexport * from './offer.js';\nexport * from './server.js';\n\nexport type GeneratedArtifact = 'agents-md' | 'server-json' | 'offer' | 'agents-route';\nexport type GenerateParams = Partial<AigentifyConfig> & { framework?: string };\n\nfunction configFromParams(params: GenerateParams = {}): AigentifyConfig {\n const base = defaultConfig();\n return defineConfig({ ...base, ...params, offer: { ...(base.offer ?? {}), ...(params.offer ?? {}) } });\n}\n\nexport function generate(artifact: GeneratedArtifact, params: GenerateParams = {}): string {\n const config = configFromParams(params);\n if (artifact === 'agents-md') return generateAgentsMd(config);\n if (artifact === 'server-json') return generateServerJson(config);\n if (artifact === 'offer') return generateOffer(config);\n if (artifact === 'agents-route') return generateAgentsRoute(config, params.framework);\n throw new Error(`Unknown artifact: ${artifact}`);\n}\n","#!/usr/bin/env node\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport { z } from 'zod';\nimport { auditTarget } from './audit.js';\nimport { PKG_NAME, VERSION } from './constants.js';\nimport { generate, type GenerateParams, type GeneratedArtifact } from './generators/index.js';\n\nconst artifacts = ['agents-md', 'server-json', 'offer', 'agents-route'] as const;\n\nexport function createMcpServer(): McpServer {\n const server = new McpServer({ name: PKG_NAME, version: VERSION });\n server.registerTool('audit', {\n description: 'Audit a local directory or live URL for agent-native readiness.',\n inputSchema: { target: z.string() },\n }, async ({ target }) => ({ content: [{ type: 'text', text: JSON.stringify(await auditTarget(target), null, 2) }] }));\n server.registerTool('gen', {\n description: 'Generate an agent-native artifact as text.',\n inputSchema: { artifact: z.enum(artifacts), params: z.record(z.string(), z.unknown()).optional() },\n }, async ({ artifact, params }) => ({ content: [{ type: 'text', text: generate(artifact as GeneratedArtifact, (params ?? {}) as GenerateParams) }] }));\n return server;\n}\n\nexport async function startMcpServer(): Promise<void> {\n const server = createMcpServer();\n await server.connect(new StdioServerTransport());\n}\n\nif (import.meta.url === `file://${process.argv[1]}`) startMcpServer().catch(error => {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`);\n process.exitCode = 1;\n});\n","#!/usr/bin/env node\nimport { Command } from 'commander';\nimport { auditTarget, formatAuditReport } from './audit.js';\nimport { PKG_NAME, VERSION } from './constants.js';\nimport { initProject } from './commands/init.js';\nimport { generateArtifact, type GeneratedArtifact } from './commands/gen.js';\nimport type { GenerateParams } from './generators/index.js';\n\nconst program = new Command();\nprogram.name(PKG_NAME).version(VERSION).description('Audit and generate agent-native product surfaces.');\n\nprogram.command('audit [target]').description('Audit a local directory or live URL.').option('--json', 'print JSON instead of the report').action(async (target = '.', options: { json?: boolean }) => {\n const report = await auditTarget(target);\n process.stdout.write(options.json ? `${JSON.stringify(report, null, 2)}\\n` : `${formatAuditReport(report)}\\n`);\n});\n\nprogram.command('init').description('Write starter AGENTS.md and server.json into the current directory.').option('--force', 'overwrite existing files').action(async (options: { force?: boolean }) => {\n const result = await initProject({ directory: process.cwd(), force: options.force });\n process.stdout.write(`created ${result.created.length}, skipped ${result.skipped.length}\\n`);\n});\n\nprogram.command('gen <artifact>').description('Generate an agent-native artifact.').option('-o, --out <path>', 'write to a file instead of stdout').option('--name <name>').option('--description <description>').option('--repository <url>').option('--mcp-url <url>').option('--npm-package <name>').option('--price <price>').option('--price-currency <currency>').option('--framework <framework>', 'route framework, such as static or next', 'static').action(async (artifact: string, options: Record<string, string | undefined>) => {\n const offer = options.price === undefined && options.priceCurrency === undefined ? undefined : { price: options.price, priceCurrency: options.priceCurrency };\n const params = Object.fromEntries(Object.entries({ name: options.name, description: options.description, repository: options.repository, mcpUrl: options.mcpUrl, npmPackage: options.npmPackage, framework: options.framework, offer }).filter(([, value]) => value !== undefined));\n const content = await generateArtifact(artifact as GeneratedArtifact, process.cwd(), params as GenerateParams);\n if (options.out) { const { writeFile } = await import('node:fs/promises'); await writeFile(options.out, content, 'utf8'); }\n else process.stdout.write(content);\n});\n\nprogram.command('mcp').description('Run the MCP server over stdio.').action(async () => { const { startMcpServer } = await import('./mcp.js'); await startMcpServer(); });\nprogram.parseAsync().catch(error => { process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`); process.exitCode = 1; });\n","import { access, mkdir, writeFile } from 'node:fs/promises';\nimport path from 'node:path';\nimport { defaultConfig } from '../config.js';\nimport { generate } from '../generators/index.js';\n\nexport interface InitOptions { directory: string; force?: boolean }\nexport interface InitResult { created: string[]; skipped: string[] }\n\nexport async function initProject(options: InitOptions): Promise<InitResult> {\n const root = path.resolve(options.directory);\n await mkdir(root, { recursive: true });\n const config = defaultConfig();\n const result: InitResult = { created: [], skipped: [] };\n for (const [name, content] of [['AGENTS.md', generate('agents-md', config)], ['server.json', generate('server-json', config)]] as const) {\n const file = path.join(root, name);\n try {\n await access(file);\n if (!options.force) { result.skipped.push(name); continue; }\n } catch { /* The file does not exist yet. */ }\n await writeFile(file, content, 'utf8');\n result.created.push(name);\n }\n return result;\n}\n","import { writeFile } from 'node:fs/promises';\nimport { defaultConfig } from '../config.js';\nimport { generate, type GenerateParams, type GeneratedArtifact } from '../generators/index.js';\nimport { loadAigentifyConfig } from './load-config.js';\n\nexport type { GeneratedArtifact } from '../generators/index.js';\n\nexport async function generateArtifact(artifact: GeneratedArtifact, directory = process.cwd(), params: GenerateParams = {}): Promise<string> {\n const config = (await loadAigentifyConfig(directory)) ?? defaultConfig();\n return generate(artifact, { ...config, ...params, offer: { ...(config.offer ?? {}), ...(params.offer ?? {}) } });\n}\n\nexport async function writeGeneratedArtifact(artifact: GeneratedArtifact, options: { directory?: string; output?: string; params?: GenerateParams } = {}): Promise<string> {\n const content = await generateArtifact(artifact, options.directory, options.params);\n if (options.output) await writeFile(options.output, content, 'utf8');\n return content;\n}\n","import path from 'node:path';\nimport { access } from 'node:fs/promises';\nimport { createJiti } from 'jiti';\nimport { CONFIG_FILENAME } from '../constants.js';\nimport { defineConfig, type AigentifyConfig } from '../config.js';\n\nexport async function findConfigFile(directory = process.cwd()): Promise<string | undefined> {\n const candidates = [CONFIG_FILENAME, CONFIG_FILENAME.replace(/\\.ts$/, '.js'), CONFIG_FILENAME.replace(/\\.ts$/, '.mjs')];\n for (const candidate of candidates) {\n const file = path.join(directory, candidate);\n try { await access(file); return file; } catch { /* Try the next supported extension. */ }\n }\n return undefined;\n}\n\nexport async function loadAigentifyConfig(directory = process.cwd()): Promise<AigentifyConfig | undefined> {\n const file = await findConfigFile(directory);\n if (!file) return undefined;\n const jiti = createJiti(import.meta.url);\n const module = (await jiti.import(file)) as { default?: AigentifyConfig; aigentifyConfig?: AigentifyConfig };\n const config = module.aigentifyConfig ?? module.default;\n if (!config) throw new Error(`${path.basename(file)} must export a default config or aigentifyConfig.`);\n return defineConfig(config);\n}\n"],"mappings":"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","names":["path","writeFile","path","access","writeFile","startMcpServer"]}

@@ -35,2 +35,3 @@ "use strict";

PKG_NAME: () => PKG_NAME,
SERVER_SCHEMA_RE: () => SERVER_SCHEMA_RE,
SERVER_SCHEMA_URL: () => SERVER_SCHEMA_URL,

@@ -58,3 +59,4 @@ VERSION: () => VERSION,

name: "aigentify",
version: "0.1.0",
version: "0.1.1",
mcpName: "io.github.pooriaarab/aigentify",
description: "Audit and generate agent-native product surfaces",

@@ -99,3 +101,4 @@ type: "module",

var CONFIG_FILENAME = `${PKG_NAME}.config.ts`;
var SERVER_SCHEMA_URL = "https://static.modelcontextprotocol.io/schemas/2025-07-09/server.schema.json";
var SERVER_SCHEMA_URL = "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json";
var SERVER_SCHEMA_RE = /^https:\/\/static\.modelcontextprotocol\.io\/schemas\/\d{4}-\d{2}-\d{2}\/server\.schema\.json$/;

@@ -168,3 +171,3 @@ // src/audit.ts

if (!value) return { valid: false, reason: "server.json is not valid JSON." };
if (value.$schema !== SERVER_SCHEMA_URL) return { valid: false, reason: `server.json must use the exact schema URL ${SERVER_SCHEMA_URL}.` };
if (typeof value.$schema !== "string" || !SERVER_SCHEMA_RE.test(value.$schema)) return { valid: false, reason: `server.json "$schema" must be a dated MCP registry schema like ${SERVER_SCHEMA_URL} (the bare .../server.json 404s).` };
const missing = ["name", "description", "repository", "version"].filter((key) => !value[key]);

@@ -400,3 +403,3 @@ if (missing.length) return { valid: false, reason: `server.json is missing: ${missing.join(", ")}.` };

if (config.mcpUrl) server.remotes = [{ type: "streamable-http", url: config.mcpUrl }];
else server.packages = [{ registry_type: "npm", identifier: config.npmPackage ?? "aigentify", version: config.version ?? "0.1.0", runtime_hint: "npx", transport: { type: "stdio" } }];
else server.packages = [{ registryType: "npm", registryBaseUrl: "https://registry.npmjs.org", identifier: config.npmPackage ?? "aigentify", version: config.version ?? "0.1.0", transport: { type: "stdio" }, runtimeHint: "npx", packageArguments: [{ type: "positional", valueHint: "subcommand", value: "mcp" }] }];
return `${JSON.stringify(server, null, 2)}

@@ -423,2 +426,3 @@ `;

PKG_NAME,
SERVER_SCHEMA_RE,
SERVER_SCHEMA_URL,

@@ -425,0 +429,0 @@ VERSION,

@@ -1,1 +0,1 @@

{"version":3,"sources":["../src/index.ts","../src/audit.ts","../package.json","../src/constants.ts","../src/config.ts","../src/generators/agents.ts","../src/generators/agents-route.ts","../src/generators/offer.ts","../src/generators/server.ts","../src/generators/index.ts"],"sourcesContent":["export * from './audit.js';\nexport * from './config.js';\nexport * from './constants.js';\nexport * from './generators/index.js';\n","import { readFile, readdir, stat } from 'node:fs/promises';\nimport path from 'node:path';\nimport { SERVER_SCHEMA_URL } from './constants.js';\n\nexport type AuditStatus = 'pass' | 'fail' | 'warn' | 'na';\nexport interface AuditCheck { id: string; status: AuditStatus; note: string; weight: number }\nexport interface AuditGap { id: string; note: string; fix: string }\nexport interface AuditReport { target: string; score: number; checks: AuditCheck[]; gaps: AuditGap[] }\nexport interface AuditOptions { fetch?: typeof globalThis.fetch }\n\ninterface Endpoint { status: number; contentType: string; text: string }\ninterface Snapshot {\n agents: Endpoint; server: Endpoint; mcp: Endpoint; home: Endpoint; llms: Endpoint; sitemap: Endpoint;\n honestText: string; hasMcp: boolean; networkFailure: boolean;\n}\n\nconst SKIPPED = new Set(['.git', 'node_modules', 'dist', 'coverage', '.next', '_reference_geoaeo']);\nconst WEIGHTS: Record<string, number> = {\n 'agents-md': 15, 'agents-md-public-safe': 10, 'server-json': 15, mcp: 15,\n 'offer-jsonld': 15, 'honest-offer': 10, 'llms-txt': 10, sitemap: 10,\n};\nconst FIXES: Record<string, string> = {\n 'agents-md': 'Add a public AGENTS.md at the target root or serve /agents.md as text/markdown.',\n 'agents-md-public-safe': 'Rewrite AGENTS.md as product guidance. Remove repository paths and contributor instructions.',\n 'server-json': `Add server.json and set \"$schema\" to \"${SERVER_SCHEMA_URL}\". Include a repository and a remotes or packages entry.`,\n mcp: 'Publish server.json, .mcp.json, or an MCP entry point.',\n 'offer-jsonld': 'Publish JSON-LD with @type Offer, or a SoftwareApplication with an offers property.',\n 'honest-offer': 'State the real price plainly. Remove scarcity, countdown, and urgency language.',\n 'llms-txt': 'Publish /llms.txt with a concise product description.',\n sitemap: 'Publish /sitemap.xml for URL discovery.',\n};\n\nfunction check(id: string, status: AuditStatus, note: string): AuditCheck { return { id, status, note, weight: WEIGHTS[id] }; }\n\nexport function scoreAuditChecks(checks: AuditCheck[]): number {\n const relevant = checks.filter(item => item.status !== 'na');\n const total = relevant.reduce((sum, item) => sum + item.weight, 0);\n if (!total) return 0;\n const earned = relevant.reduce((sum, item) => sum + (item.status === 'pass' ? item.weight : item.status === 'warn' ? item.weight / 2 : 0), 0);\n return Math.round((earned / total) * 100);\n}\n\nasync function walkFiles(directory: string): Promise<string[]> {\n const entries = await readdir(directory, { withFileTypes: true });\n const files: string[] = [];\n for (const entry of entries) {\n if (entry.isDirectory() && !SKIPPED.has(entry.name)) files.push(...await walkFiles(path.join(directory, entry.name)));\n else if (entry.isFile()) files.push(path.join(directory, entry.name));\n }\n return files;\n}\n\nasync function readText(file: string | undefined): Promise<string> {\n if (!file) return '';\n try { return await readFile(file, 'utf8'); } catch { return ''; }\n}\n\nfunction findFile(files: string[], name: string): string | undefined {\n return files.find(file => {\n const normalized = file.replaceAll('\\\\', '/');\n return path.basename(normalized) === name || normalized.endsWith(`/${name}/route.ts`);\n });\n}\n\nfunction parseJson(text: string): Record<string, unknown> | undefined {\n try {\n const value: unknown = JSON.parse(text);\n return value && typeof value === 'object' && !Array.isArray(value) ? value as Record<string, unknown> : undefined;\n } catch { return undefined; }\n}\n\nfunction validServer(text: string): { valid: boolean; reason: string } {\n const value = parseJson(text);\n if (!value) return { valid: false, reason: 'server.json is not valid JSON.' };\n if (value.$schema !== SERVER_SCHEMA_URL) return { valid: false, reason: `server.json must use the exact schema URL ${SERVER_SCHEMA_URL}.` };\n const missing = ['name', 'description', 'repository', 'version'].filter(key => !value[key]);\n if (missing.length) return { valid: false, reason: `server.json is missing: ${missing.join(', ')}.` };\n if (!Array.isArray(value.remotes) && !Array.isArray(value.packages)) return { valid: false, reason: 'server.json needs a remotes or packages entry.' };\n return { valid: true, reason: 'server.json has the required MCP registry fields.' };\n}\n\nfunction hasOffer(texts: string[]): boolean {\n return texts.some(text => /\"@type\"\\s*:\\s*\"Offer\"/i.test(text) || /\"@type\"\\s*:\\s*\"SoftwareApplication\"/i.test(text) && /\"offers\"\\s*:/.test(text));\n}\n\nfunction hasUrgency(text: string): boolean {\n return /limited time|act now|hurry|expires|only\\s+\\d+\\s+left|ends in|sign up now|countdown/i.test(text);\n}\n\nfunction publicSafe(text: string): boolean {\n return !(/\\bsrc\\//i.test(text) || /\\bapps\\//i.test(text) || /\\bpackages\\//i.test(text) || /\\b[\\w.-]+\\.ts\\b/i.test(text) || /npm run build/i.test(text) || /\\btsconfig\\b/i.test(text) || /\\bcontributors?\\b/i.test(text) || /^#+\\s*layout\\b/im.test(text));\n}\n\nfunction offerBlock(text: string): string {\n const match = /^#+\\s*Offer\\b/im.exec(text);\n if (!match || match.index === undefined) return '';\n const rest = text.slice(match.index);\n const nextHeading = /^#+\\s+/m.exec(rest.slice(match[0].length));\n return nextHeading?.index === undefined ? rest : rest.slice(0, match[0].length + nextHeading.index);\n}\n\nasync function directorySnapshot(directory: string): Promise<Snapshot> {\n const files = await walkFiles(directory);\n const agentsFile = findFile(files, 'AGENTS.md');\n const serverFile = findFile(files, 'server.json');\n const mcpFile = files.find(file => /(?:^|\\/)\\.mcp\\.json$/.test(file.replaceAll('\\\\', '/')));\n const packageFile = findFile(files, 'package.json');\n const packageText = await readText(packageFile);\n const hasMcpBin = /\"(?:aigentify|[^\"\\n]*mcp[^\"\\n]*)\"\\s*:/i.test(packageText);\n const agentsText = await readText(agentsFile);\n const offerTexts = [agentsText, ...await Promise.all(files.filter(file => /\\.(html?|json|jsonld|md|mdx|tsx|jsx|js|mjs|ts)$/.test(file)).map(readText))];\n const llmsFile = findFile(files, 'llms.txt');\n const sitemapFile = findFile(files, 'sitemap.xml');\n const offerFiles = files.filter(file => /\\.jsonld$|(?:^|\\/)offer[^/]*\\.(?:json|html?)$/i.test(file));\n const honestText = [offerBlock(agentsText), ...await Promise.all(offerFiles.map(readText))].join('\\n');\n return {\n agents: { status: agentsFile ? 200 : 404, contentType: 'text/markdown', text: agentsText },\n server: { status: serverFile ? 200 : 404, contentType: 'application/json', text: await readText(serverFile) },\n mcp: { status: mcpFile || serverFile || hasMcpBin ? 200 : 404, contentType: '', text: '' },\n home: { status: 200, contentType: 'text/plain', text: offerTexts.join('\\n') },\n llms: { status: llmsFile ? 200 : 404, contentType: 'text/plain', text: await readText(llmsFile) },\n sitemap: { status: sitemapFile ? 200 : 404, contentType: 'application/xml', text: await readText(sitemapFile) },\n honestText, hasMcp: Boolean(mcpFile || serverFile || hasMcpBin), networkFailure: false,\n };\n}\n\nasync function fetchText(fetcher: typeof globalThis.fetch, url: string): Promise<Endpoint> {\n try {\n const response = await fetcher(url, { signal: AbortSignal.timeout(8000) });\n return { status: response.status, contentType: response.headers.get('content-type') ?? '', text: await response.text() };\n } catch { return { status: 0, contentType: '', text: '' }; }\n}\n\nasync function urlSnapshot(target: string, fetcher: typeof globalThis.fetch): Promise<Snapshot> {\n const base = target.replace(/\\/+$/, '');\n const [agents, server, mcp, home, llms, sitemap] = await Promise.all([\n fetchText(fetcher, `${base}/agents.md`), fetchText(fetcher, `${base}/server.json`), fetchText(fetcher, `${base}/.well-known/mcp`),\n fetchText(fetcher, base), fetchText(fetcher, `${base}/llms.txt`), fetchText(fetcher, `${base}/sitemap.xml`),\n ]);\n const endpoints = [agents, server, mcp, home, llms, sitemap];\n return { agents, server, mcp, home, llms, sitemap, honestText: [home.text, offerBlock(agents.text)].join('\\n'), hasMcp: server.status >= 200 && server.status < 400 || mcp.status >= 200 && mcp.status < 400, networkFailure: endpoints.every(item => item.status === 0) };\n}\n\nfunction buildChecks(snapshot: Snapshot): AuditCheck[] {\n const agentsPresent = snapshot.agents.status === 200 && snapshot.agents.text.trim().length > 0 && /(?:text\\/(?:markdown|plain)|application\\/markdown)/i.test(snapshot.agents.contentType);\n const agentsStatus: AuditStatus = snapshot.agents.status === 0 ? 'warn' : agentsPresent ? 'pass' : 'fail';\n const publicStatus: AuditStatus = !agentsPresent ? (snapshot.agents.status === 0 ? 'warn' : 'na') : publicSafe(snapshot.agents.text) ? 'pass' : 'warn';\n const serverInfo = snapshot.server.status === 200 ? validServer(snapshot.server.text) : undefined;\n const serverStatus: AuditStatus = snapshot.server.status === 0 ? 'warn' : !snapshot.hasMcp ? 'na' : serverInfo?.valid ? 'pass' : 'fail';\n const mcpStatus: AuditStatus = snapshot.networkFailure ? 'warn' : snapshot.hasMcp ? 'pass' : 'fail';\n const offerTexts = [snapshot.home.text, snapshot.agents.text];\n const offerStatus: AuditStatus = snapshot.home.status === 0 ? 'warn' : hasOffer(offerTexts) ? 'pass' : 'fail';\n const honestStatus: AuditStatus = !hasOffer(offerTexts) && !agentsPresent ? (snapshot.home.status === 0 ? 'warn' : 'na') : hasUrgency(snapshot.honestText) ? 'warn' : 'pass';\n const llmsStatus: AuditStatus = snapshot.llms.status === 0 ? 'warn' : snapshot.llms.status >= 200 && snapshot.llms.status < 400 && snapshot.llms.text.trim() ? 'pass' : 'fail';\n const sitemapStatus: AuditStatus = snapshot.sitemap.status === 0 ? 'warn' : snapshot.sitemap.status >= 200 && snapshot.sitemap.status < 400 && snapshot.sitemap.text.trim() ? 'pass' : 'fail';\n return [\n check('agents-md', agentsStatus, agentsPresent ? 'AGENTS.md is available.' : snapshot.agents.status === 0 ? 'The AGENTS.md request failed.' : 'AGENTS.md is missing.'),\n check('agents-md-public-safe', publicStatus, publicStatus === 'pass' ? 'AGENTS.md describes the product as a public surface.' : publicStatus === 'na' ? 'No AGENTS.md is available to inspect.' : 'AGENTS.md contains repository-internal guidance.'),\n check('server-json', serverStatus, serverInfo?.valid ? serverInfo.reason : serverInfo?.reason ?? (!snapshot.hasMcp ? 'No MCP surface was detected.' : 'server.json is missing.')),\n check('mcp', mcpStatus, snapshot.networkFailure ? 'The MCP discovery request failed.' : snapshot.hasMcp ? 'An MCP surface is available.' : 'No MCP surface was found.'),\n check('offer-jsonld', offerStatus, offerStatus === 'pass' ? 'Offer JSON-LD is available.' : offerStatus === 'warn' ? 'The offer could not be checked.' : 'No Offer JSON-LD was found.'),\n check('honest-offer', honestStatus, honestStatus === 'pass' ? 'Offer language states the price without pressure.' : honestStatus === 'na' ? 'No offer or Offer block was found.' : 'Offer language contains scarcity, countdown, or urgency copy.'),\n check('llms-txt', llmsStatus, llmsStatus === 'pass' ? 'llms.txt is available.' : llmsStatus === 'warn' ? 'The llms.txt request failed.' : 'llms.txt is missing.'),\n check('sitemap', sitemapStatus, sitemapStatus === 'pass' ? 'sitemap.xml is available.' : sitemapStatus === 'warn' ? 'The sitemap request failed.' : 'sitemap.xml is missing.'),\n ];\n}\n\nexport async function auditTarget(target: string, options: AuditOptions = {}): Promise<AuditReport> {\n const targetStat = await stat(target).catch(() => undefined);\n const snapshot = targetStat?.isDirectory() ? await directorySnapshot(target) : await urlSnapshot(target, options.fetch ?? globalThis.fetch);\n const checks = buildChecks(snapshot);\n const gaps = checks.filter(item => item.status === 'fail' || item.status === 'warn').map(item => ({ id: item.id, note: item.note, fix: FIXES[item.id] }));\n return { target, score: scoreAuditChecks(checks), checks, gaps };\n}\n\nexport function formatAuditReport(report: AuditReport): string {\n const lines = [`${report.target}: ${report.score}/100`, ''];\n for (const item of report.checks) lines.push(`${item.status.toUpperCase().padEnd(4)} ${item.id}: ${item.note}`);\n lines.push('', 'Gaps:');\n if (!report.gaps.length) lines.push('None.');\n else report.gaps.forEach((gap, index) => lines.push(`${index + 1}. ${gap.id}: ${gap.fix}`));\n return lines.join('\\n');\n}\n","{\n \"name\": \"aigentify\",\n \"version\": \"0.1.0\",\n \"description\": \"Audit and generate agent-native product surfaces\",\n \"type\": \"module\",\n \"license\": \"MIT\",\n \"bin\": {\"aigentify\": \"dist/cli.js\", \"aigentify-mcp\": \"dist/mcp.js\"},\n \"exports\": {\".\": {\"types\": \"./dist/index.d.ts\", \"import\": \"./dist/index.js\", \"require\": \"./dist/index.cjs\"}},\n \"files\": [\"dist\"],\n \"repository\": {\"type\": \"git\", \"url\": \"git+https://github.com/pooriaarab/aigentify.git\"},\n \"homepage\": \"https://github.com/pooriaarab/aigentify\",\n \"bugs\": \"https://github.com/pooriaarab/aigentify/issues\",\n \"keywords\": [\"agents\", \"agentification\", \"mcp\", \"ai\", \"json-ld\"],\n \"publishConfig\": {\"access\": \"public\"},\n \"scripts\": {\n \"build\": \"tsup\",\n \"test\": \"vitest run\",\n \"lint\": \"tsc --noEmit --pretty false\",\n \"typecheck\": \"tsc --noEmit\",\n \"verify\": \"npm run typecheck && npm run build && npm run test\",\n \"prepublishOnly\": \"npm run verify\"\n },\n \"engines\": {\"node\": \">=20\"},\n \"dependencies\": {\n \"@modelcontextprotocol/sdk\": \"^1.17.5\",\n \"cheerio\": \"^1.1.2\",\n \"commander\": \"^14.0.0\",\n \"jiti\": \"^2.5.1\",\n \"zod\": \"^4.0.0\"\n },\n \"devDependencies\": {\n \"@types/node\": \"^22.15.0\",\n \"tsup\": \"^8.5.0\",\n \"typescript\": \"^5.8.3\",\n \"vitest\": \"^3.2.4\"\n }\n}\n","import pkg from '../package.json';\n\nexport const PKG_NAME = pkg.name;\nexport const VERSION = pkg.version;\nexport const CONFIG_FILENAME = `${PKG_NAME}.config.ts`;\nexport const SERVER_SCHEMA_URL = 'https://static.modelcontextprotocol.io/schemas/2025-07-09/server.schema.json';\n","export interface OfferConfig {\n name?: string;\n description?: string;\n price?: string | number;\n priceCurrency?: string;\n}\n\nexport interface AigentifyConfig {\n name: string;\n description: string;\n repository: string;\n version?: string;\n mcpUrl?: string;\n npmPackage?: string;\n offer?: OfferConfig;\n}\n\nexport function defineConfig(config: AigentifyConfig): AigentifyConfig {\n return { ...config, repository: config.repository.replace(/\\/+$/, ''), version: config.version ?? '0.1.0' };\n}\n\nexport function defaultConfig(): AigentifyConfig {\n return defineConfig({\n name: 'Your product',\n description: 'A product with an agent-native interface.',\n repository: 'https://github.com/your-org/your-product',\n npmPackage: 'your-package',\n });\n}\n","import type { AigentifyConfig } from '../config.js';\n\nexport function generateAgentsMd(config: AigentifyConfig): string {\n const packageName = config.npmPackage ?? '<NPM_PACKAGE>';\n const mcp = config.mcpUrl ?? `npx ${packageName}`;\n const offer = config.offer;\n const offerLine = offer?.price === undefined ? 'Price: <PRICE>' : `Price: ${offer.priceCurrency ?? 'USD'} ${offer.price}`;\n return `# ${config.name}\n\n## Mental model\n\n${config.name} is ${config.description}\n\nUse the product interface for product work. Use the agent interface for repeatable tasks that need structured results.\n\n## The faces\n\n- Product: ${config.repository}\n- MCP: ${mcp}\n- Package: ${packageName}\n\n## MCP tools\n\n| Tool | Input | Result |\n| --- | --- | --- |\n| audit | target | An agent-readiness report with a score and gaps. |\n| gen | artifact and params | A generated agent-native artifact. |\n\n## The loop\n\n1. Audit the target.\n2. Fix the highest-impact gap.\n3. Generate or publish the missing artifact.\n4. Audit again and keep the report with the release.\n\n## Rules\n\n- Treat the product description and prices as source facts.\n- Return structured data when a tool provides it.\n- Ask for missing information before making a high-impact change.\n- Keep public agent instructions about the product and its use.\n\n## Offer\n\n${offer?.description ?? '<OFFER_DESCRIPTION>'}\n\n${offerLine}\n`;\n}\n","import type { AigentifyConfig } from '../config.js';\n\nexport function generateAgentsRoute(config: AigentifyConfig, framework = 'static'): string {\n if (framework === 'next') {\n return `# Serve /agents.md from a Next route\n\nCopy AGENTS.md to a public directory, or add this force-static route:\n\n\\`\\`\\`ts\nimport { readFile } from 'node:fs/promises';\n\nexport const dynamic = 'force-static';\n\nexport async function GET() {\n const body = await readFile('AGENTS.md', 'utf8');\n return new Response(body, { headers: { 'content-type': 'text/markdown; charset=utf-8' } });\n}\n\\`\\`\\`\n\nProduct: ${config.name}\n`;\n }\n return `# Serve /agents.md\n\nCopy the generated AGENTS.md file to public/agents.md and serve it as a static text/markdown response.\n\nProduct: ${config.name}\n`;\n}\n","import type { AigentifyConfig } from '../config.js';\n\nexport function generateOffer(config: AigentifyConfig): string {\n const offer = config.offer ?? {};\n const data = {\n '@context': 'https://schema.org',\n '@type': 'SoftwareApplication',\n name: config.name,\n description: config.description,\n applicationCategory: 'DeveloperApplication',\n offers: [{\n '@type': 'Offer',\n name: offer.name ?? `${config.name} access`,\n ...(offer.description ? { description: offer.description } : {}),\n ...(offer.price === undefined ? {} : { price: String(offer.price) }),\n priceCurrency: offer.priceCurrency ?? 'USD',\n }],\n };\n return `${JSON.stringify(data, null, 2)}\\n`;\n}\n","import { SERVER_SCHEMA_URL } from '../constants.js';\nimport type { AigentifyConfig } from '../config.js';\n\nexport function generateServerJson(config: AigentifyConfig): string {\n const serverName = config.name.includes('/') ? config.name : `io.github.pooriaarab/${config.name.toLowerCase().replace(/[^a-z0-9._-]+/g, '-')}`;\n const server: Record<string, unknown> = {\n $schema: SERVER_SCHEMA_URL,\n name: serverName,\n description: config.description,\n repository: { url: config.repository, source: 'github' },\n version: config.version ?? '0.1.0',\n };\n if (config.mcpUrl) server.remotes = [{ type: 'streamable-http', url: config.mcpUrl }];\n else server.packages = [{ registry_type: 'npm', identifier: config.npmPackage ?? 'aigentify', version: config.version ?? '0.1.0', runtime_hint: 'npx', transport: { type: 'stdio' } }];\n return `${JSON.stringify(server, null, 2)}\\n`;\n}\n","import type { AigentifyConfig } from '../config.js';\nimport { defaultConfig, defineConfig } from '../config.js';\nimport { generateAgentsMd } from './agents.js';\nimport { generateAgentsRoute } from './agents-route.js';\nimport { generateOffer } from './offer.js';\nimport { generateServerJson } from './server.js';\nexport * from './agents.js';\nexport * from './agents-route.js';\nexport * from './offer.js';\nexport * from './server.js';\n\nexport type GeneratedArtifact = 'agents-md' | 'server-json' | 'offer' | 'agents-route';\nexport type GenerateParams = Partial<AigentifyConfig> & { framework?: string };\n\nfunction configFromParams(params: GenerateParams = {}): AigentifyConfig {\n const base = defaultConfig();\n return defineConfig({ ...base, ...params, offer: { ...(base.offer ?? {}), ...(params.offer ?? {}) } });\n}\n\nexport function generate(artifact: GeneratedArtifact, params: GenerateParams = {}): string {\n const config = configFromParams(params);\n if (artifact === 'agents-md') return generateAgentsMd(config);\n if (artifact === 'server-json') return generateServerJson(config);\n if (artifact === 'offer') return generateOffer(config);\n if (artifact === 'agents-route') return generateAgentsRoute(config, params.framework);\n throw new Error(`Unknown artifact: ${artifact}`);\n}\n"],"mappings":"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","names":["path"]}
{"version":3,"sources":["../src/index.ts","../src/audit.ts","../package.json","../src/constants.ts","../src/config.ts","../src/generators/agents.ts","../src/generators/agents-route.ts","../src/generators/offer.ts","../src/generators/server.ts","../src/generators/index.ts"],"sourcesContent":["export * from './audit.js';\nexport * from './config.js';\nexport * from './constants.js';\nexport * from './generators/index.js';\n","import { readFile, readdir, stat } from 'node:fs/promises';\nimport path from 'node:path';\nimport { SERVER_SCHEMA_URL, SERVER_SCHEMA_RE } from './constants.js';\n\nexport type AuditStatus = 'pass' | 'fail' | 'warn' | 'na';\nexport interface AuditCheck { id: string; status: AuditStatus; note: string; weight: number }\nexport interface AuditGap { id: string; note: string; fix: string }\nexport interface AuditReport { target: string; score: number; checks: AuditCheck[]; gaps: AuditGap[] }\nexport interface AuditOptions { fetch?: typeof globalThis.fetch }\n\ninterface Endpoint { status: number; contentType: string; text: string }\ninterface Snapshot {\n agents: Endpoint; server: Endpoint; mcp: Endpoint; home: Endpoint; llms: Endpoint; sitemap: Endpoint;\n honestText: string; hasMcp: boolean; networkFailure: boolean;\n}\n\nconst SKIPPED = new Set(['.git', 'node_modules', 'dist', 'coverage', '.next', '_reference_geoaeo']);\nconst WEIGHTS: Record<string, number> = {\n 'agents-md': 15, 'agents-md-public-safe': 10, 'server-json': 15, mcp: 15,\n 'offer-jsonld': 15, 'honest-offer': 10, 'llms-txt': 10, sitemap: 10,\n};\nconst FIXES: Record<string, string> = {\n 'agents-md': 'Add a public AGENTS.md at the target root or serve /agents.md as text/markdown.',\n 'agents-md-public-safe': 'Rewrite AGENTS.md as product guidance. Remove repository paths and contributor instructions.',\n 'server-json': `Add server.json and set \"$schema\" to \"${SERVER_SCHEMA_URL}\". Include a repository and a remotes or packages entry.`,\n mcp: 'Publish server.json, .mcp.json, or an MCP entry point.',\n 'offer-jsonld': 'Publish JSON-LD with @type Offer, or a SoftwareApplication with an offers property.',\n 'honest-offer': 'State the real price plainly. Remove scarcity, countdown, and urgency language.',\n 'llms-txt': 'Publish /llms.txt with a concise product description.',\n sitemap: 'Publish /sitemap.xml for URL discovery.',\n};\n\nfunction check(id: string, status: AuditStatus, note: string): AuditCheck { return { id, status, note, weight: WEIGHTS[id] }; }\n\nexport function scoreAuditChecks(checks: AuditCheck[]): number {\n const relevant = checks.filter(item => item.status !== 'na');\n const total = relevant.reduce((sum, item) => sum + item.weight, 0);\n if (!total) return 0;\n const earned = relevant.reduce((sum, item) => sum + (item.status === 'pass' ? item.weight : item.status === 'warn' ? item.weight / 2 : 0), 0);\n return Math.round((earned / total) * 100);\n}\n\nasync function walkFiles(directory: string): Promise<string[]> {\n const entries = await readdir(directory, { withFileTypes: true });\n const files: string[] = [];\n for (const entry of entries) {\n if (entry.isDirectory() && !SKIPPED.has(entry.name)) files.push(...await walkFiles(path.join(directory, entry.name)));\n else if (entry.isFile()) files.push(path.join(directory, entry.name));\n }\n return files;\n}\n\nasync function readText(file: string | undefined): Promise<string> {\n if (!file) return '';\n try { return await readFile(file, 'utf8'); } catch { return ''; }\n}\n\nfunction findFile(files: string[], name: string): string | undefined {\n return files.find(file => {\n const normalized = file.replaceAll('\\\\', '/');\n return path.basename(normalized) === name || normalized.endsWith(`/${name}/route.ts`);\n });\n}\n\nfunction parseJson(text: string): Record<string, unknown> | undefined {\n try {\n const value: unknown = JSON.parse(text);\n return value && typeof value === 'object' && !Array.isArray(value) ? value as Record<string, unknown> : undefined;\n } catch { return undefined; }\n}\n\nfunction validServer(text: string): { valid: boolean; reason: string } {\n const value = parseJson(text);\n if (!value) return { valid: false, reason: 'server.json is not valid JSON.' };\n if (typeof value.$schema !== 'string' || !SERVER_SCHEMA_RE.test(value.$schema)) return { valid: false, reason: `server.json \"$schema\" must be a dated MCP registry schema like ${SERVER_SCHEMA_URL} (the bare .../server.json 404s).` };\n const missing = ['name', 'description', 'repository', 'version'].filter(key => !value[key]);\n if (missing.length) return { valid: false, reason: `server.json is missing: ${missing.join(', ')}.` };\n if (!Array.isArray(value.remotes) && !Array.isArray(value.packages)) return { valid: false, reason: 'server.json needs a remotes or packages entry.' };\n return { valid: true, reason: 'server.json has the required MCP registry fields.' };\n}\n\nfunction hasOffer(texts: string[]): boolean {\n return texts.some(text => /\"@type\"\\s*:\\s*\"Offer\"/i.test(text) || /\"@type\"\\s*:\\s*\"SoftwareApplication\"/i.test(text) && /\"offers\"\\s*:/.test(text));\n}\n\nfunction hasUrgency(text: string): boolean {\n return /limited time|act now|hurry|expires|only\\s+\\d+\\s+left|ends in|sign up now|countdown/i.test(text);\n}\n\nfunction publicSafe(text: string): boolean {\n return !(/\\bsrc\\//i.test(text) || /\\bapps\\//i.test(text) || /\\bpackages\\//i.test(text) || /\\b[\\w.-]+\\.ts\\b/i.test(text) || /npm run build/i.test(text) || /\\btsconfig\\b/i.test(text) || /\\bcontributors?\\b/i.test(text) || /^#+\\s*layout\\b/im.test(text));\n}\n\nfunction offerBlock(text: string): string {\n const match = /^#+\\s*Offer\\b/im.exec(text);\n if (!match || match.index === undefined) return '';\n const rest = text.slice(match.index);\n const nextHeading = /^#+\\s+/m.exec(rest.slice(match[0].length));\n return nextHeading?.index === undefined ? rest : rest.slice(0, match[0].length + nextHeading.index);\n}\n\nasync function directorySnapshot(directory: string): Promise<Snapshot> {\n const files = await walkFiles(directory);\n const agentsFile = findFile(files, 'AGENTS.md');\n const serverFile = findFile(files, 'server.json');\n const mcpFile = files.find(file => /(?:^|\\/)\\.mcp\\.json$/.test(file.replaceAll('\\\\', '/')));\n const packageFile = findFile(files, 'package.json');\n const packageText = await readText(packageFile);\n const hasMcpBin = /\"(?:aigentify|[^\"\\n]*mcp[^\"\\n]*)\"\\s*:/i.test(packageText);\n const agentsText = await readText(agentsFile);\n const offerTexts = [agentsText, ...await Promise.all(files.filter(file => /\\.(html?|json|jsonld|md|mdx|tsx|jsx|js|mjs|ts)$/.test(file)).map(readText))];\n const llmsFile = findFile(files, 'llms.txt');\n const sitemapFile = findFile(files, 'sitemap.xml');\n const offerFiles = files.filter(file => /\\.jsonld$|(?:^|\\/)offer[^/]*\\.(?:json|html?)$/i.test(file));\n const honestText = [offerBlock(agentsText), ...await Promise.all(offerFiles.map(readText))].join('\\n');\n return {\n agents: { status: agentsFile ? 200 : 404, contentType: 'text/markdown', text: agentsText },\n server: { status: serverFile ? 200 : 404, contentType: 'application/json', text: await readText(serverFile) },\n mcp: { status: mcpFile || serverFile || hasMcpBin ? 200 : 404, contentType: '', text: '' },\n home: { status: 200, contentType: 'text/plain', text: offerTexts.join('\\n') },\n llms: { status: llmsFile ? 200 : 404, contentType: 'text/plain', text: await readText(llmsFile) },\n sitemap: { status: sitemapFile ? 200 : 404, contentType: 'application/xml', text: await readText(sitemapFile) },\n honestText, hasMcp: Boolean(mcpFile || serverFile || hasMcpBin), networkFailure: false,\n };\n}\n\nasync function fetchText(fetcher: typeof globalThis.fetch, url: string): Promise<Endpoint> {\n try {\n const response = await fetcher(url, { signal: AbortSignal.timeout(8000) });\n return { status: response.status, contentType: response.headers.get('content-type') ?? '', text: await response.text() };\n } catch { return { status: 0, contentType: '', text: '' }; }\n}\n\nasync function urlSnapshot(target: string, fetcher: typeof globalThis.fetch): Promise<Snapshot> {\n const base = target.replace(/\\/+$/, '');\n const [agents, server, mcp, home, llms, sitemap] = await Promise.all([\n fetchText(fetcher, `${base}/agents.md`), fetchText(fetcher, `${base}/server.json`), fetchText(fetcher, `${base}/.well-known/mcp`),\n fetchText(fetcher, base), fetchText(fetcher, `${base}/llms.txt`), fetchText(fetcher, `${base}/sitemap.xml`),\n ]);\n const endpoints = [agents, server, mcp, home, llms, sitemap];\n return { agents, server, mcp, home, llms, sitemap, honestText: [home.text, offerBlock(agents.text)].join('\\n'), hasMcp: server.status >= 200 && server.status < 400 || mcp.status >= 200 && mcp.status < 400, networkFailure: endpoints.every(item => item.status === 0) };\n}\n\nfunction buildChecks(snapshot: Snapshot): AuditCheck[] {\n const agentsPresent = snapshot.agents.status === 200 && snapshot.agents.text.trim().length > 0 && /(?:text\\/(?:markdown|plain)|application\\/markdown)/i.test(snapshot.agents.contentType);\n const agentsStatus: AuditStatus = snapshot.agents.status === 0 ? 'warn' : agentsPresent ? 'pass' : 'fail';\n const publicStatus: AuditStatus = !agentsPresent ? (snapshot.agents.status === 0 ? 'warn' : 'na') : publicSafe(snapshot.agents.text) ? 'pass' : 'warn';\n const serverInfo = snapshot.server.status === 200 ? validServer(snapshot.server.text) : undefined;\n const serverStatus: AuditStatus = snapshot.server.status === 0 ? 'warn' : !snapshot.hasMcp ? 'na' : serverInfo?.valid ? 'pass' : 'fail';\n const mcpStatus: AuditStatus = snapshot.networkFailure ? 'warn' : snapshot.hasMcp ? 'pass' : 'fail';\n const offerTexts = [snapshot.home.text, snapshot.agents.text];\n const offerStatus: AuditStatus = snapshot.home.status === 0 ? 'warn' : hasOffer(offerTexts) ? 'pass' : 'fail';\n const honestStatus: AuditStatus = !hasOffer(offerTexts) && !agentsPresent ? (snapshot.home.status === 0 ? 'warn' : 'na') : hasUrgency(snapshot.honestText) ? 'warn' : 'pass';\n const llmsStatus: AuditStatus = snapshot.llms.status === 0 ? 'warn' : snapshot.llms.status >= 200 && snapshot.llms.status < 400 && snapshot.llms.text.trim() ? 'pass' : 'fail';\n const sitemapStatus: AuditStatus = snapshot.sitemap.status === 0 ? 'warn' : snapshot.sitemap.status >= 200 && snapshot.sitemap.status < 400 && snapshot.sitemap.text.trim() ? 'pass' : 'fail';\n return [\n check('agents-md', agentsStatus, agentsPresent ? 'AGENTS.md is available.' : snapshot.agents.status === 0 ? 'The AGENTS.md request failed.' : 'AGENTS.md is missing.'),\n check('agents-md-public-safe', publicStatus, publicStatus === 'pass' ? 'AGENTS.md describes the product as a public surface.' : publicStatus === 'na' ? 'No AGENTS.md is available to inspect.' : 'AGENTS.md contains repository-internal guidance.'),\n check('server-json', serverStatus, serverInfo?.valid ? serverInfo.reason : serverInfo?.reason ?? (!snapshot.hasMcp ? 'No MCP surface was detected.' : 'server.json is missing.')),\n check('mcp', mcpStatus, snapshot.networkFailure ? 'The MCP discovery request failed.' : snapshot.hasMcp ? 'An MCP surface is available.' : 'No MCP surface was found.'),\n check('offer-jsonld', offerStatus, offerStatus === 'pass' ? 'Offer JSON-LD is available.' : offerStatus === 'warn' ? 'The offer could not be checked.' : 'No Offer JSON-LD was found.'),\n check('honest-offer', honestStatus, honestStatus === 'pass' ? 'Offer language states the price without pressure.' : honestStatus === 'na' ? 'No offer or Offer block was found.' : 'Offer language contains scarcity, countdown, or urgency copy.'),\n check('llms-txt', llmsStatus, llmsStatus === 'pass' ? 'llms.txt is available.' : llmsStatus === 'warn' ? 'The llms.txt request failed.' : 'llms.txt is missing.'),\n check('sitemap', sitemapStatus, sitemapStatus === 'pass' ? 'sitemap.xml is available.' : sitemapStatus === 'warn' ? 'The sitemap request failed.' : 'sitemap.xml is missing.'),\n ];\n}\n\nexport async function auditTarget(target: string, options: AuditOptions = {}): Promise<AuditReport> {\n const targetStat = await stat(target).catch(() => undefined);\n const snapshot = targetStat?.isDirectory() ? await directorySnapshot(target) : await urlSnapshot(target, options.fetch ?? globalThis.fetch);\n const checks = buildChecks(snapshot);\n const gaps = checks.filter(item => item.status === 'fail' || item.status === 'warn').map(item => ({ id: item.id, note: item.note, fix: FIXES[item.id] }));\n return { target, score: scoreAuditChecks(checks), checks, gaps };\n}\n\nexport function formatAuditReport(report: AuditReport): string {\n const lines = [`${report.target}: ${report.score}/100`, ''];\n for (const item of report.checks) lines.push(`${item.status.toUpperCase().padEnd(4)} ${item.id}: ${item.note}`);\n lines.push('', 'Gaps:');\n if (!report.gaps.length) lines.push('None.');\n else report.gaps.forEach((gap, index) => lines.push(`${index + 1}. ${gap.id}: ${gap.fix}`));\n return lines.join('\\n');\n}\n","{\n \"name\": \"aigentify\",\n \"version\": \"0.1.1\",\n \"mcpName\": \"io.github.pooriaarab/aigentify\",\n \"description\": \"Audit and generate agent-native product surfaces\",\n \"type\": \"module\",\n \"license\": \"MIT\",\n \"bin\": {\"aigentify\": \"dist/cli.js\", \"aigentify-mcp\": \"dist/mcp.js\"},\n \"exports\": {\".\": {\"types\": \"./dist/index.d.ts\", \"import\": \"./dist/index.js\", \"require\": \"./dist/index.cjs\"}},\n \"files\": [\"dist\"],\n \"repository\": {\"type\": \"git\", \"url\": \"git+https://github.com/pooriaarab/aigentify.git\"},\n \"homepage\": \"https://github.com/pooriaarab/aigentify\",\n \"bugs\": \"https://github.com/pooriaarab/aigentify/issues\",\n \"keywords\": [\"agents\", \"agentification\", \"mcp\", \"ai\", \"json-ld\"],\n \"publishConfig\": {\"access\": \"public\"},\n \"scripts\": {\n \"build\": \"tsup\",\n \"test\": \"vitest run\",\n \"lint\": \"tsc --noEmit --pretty false\",\n \"typecheck\": \"tsc --noEmit\",\n \"verify\": \"npm run typecheck && npm run build && npm run test\",\n \"prepublishOnly\": \"npm run verify\"\n },\n \"engines\": {\"node\": \">=20\"},\n \"dependencies\": {\n \"@modelcontextprotocol/sdk\": \"^1.17.5\",\n \"cheerio\": \"^1.1.2\",\n \"commander\": \"^14.0.0\",\n \"jiti\": \"^2.5.1\",\n \"zod\": \"^4.0.0\"\n },\n \"devDependencies\": {\n \"@types/node\": \"^22.15.0\",\n \"tsup\": \"^8.5.0\",\n \"typescript\": \"^5.8.3\",\n \"vitest\": \"^3.2.4\"\n }\n}\n","import pkg from '../package.json';\n\nexport const PKG_NAME = pkg.name;\nexport const VERSION = pkg.version;\nexport const CONFIG_FILENAME = `${PKG_NAME}.config.ts`;\nexport const SERVER_SCHEMA_URL = 'https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json';\n// Any dated MCP registry schema is valid; only the bare `.../server.json` (no `.schema`) 404s.\nexport const SERVER_SCHEMA_RE = /^https:\\/\\/static\\.modelcontextprotocol\\.io\\/schemas\\/\\d{4}-\\d{2}-\\d{2}\\/server\\.schema\\.json$/;\n","export interface OfferConfig {\n name?: string;\n description?: string;\n price?: string | number;\n priceCurrency?: string;\n}\n\nexport interface AigentifyConfig {\n name: string;\n description: string;\n repository: string;\n version?: string;\n mcpUrl?: string;\n npmPackage?: string;\n offer?: OfferConfig;\n}\n\nexport function defineConfig(config: AigentifyConfig): AigentifyConfig {\n return { ...config, repository: config.repository.replace(/\\/+$/, ''), version: config.version ?? '0.1.0' };\n}\n\nexport function defaultConfig(): AigentifyConfig {\n return defineConfig({\n name: 'Your product',\n description: 'A product with an agent-native interface.',\n repository: 'https://github.com/your-org/your-product',\n npmPackage: 'your-package',\n });\n}\n","import type { AigentifyConfig } from '../config.js';\n\nexport function generateAgentsMd(config: AigentifyConfig): string {\n const packageName = config.npmPackage ?? '<NPM_PACKAGE>';\n const mcp = config.mcpUrl ?? `npx ${packageName}`;\n const offer = config.offer;\n const offerLine = offer?.price === undefined ? 'Price: <PRICE>' : `Price: ${offer.priceCurrency ?? 'USD'} ${offer.price}`;\n return `# ${config.name}\n\n## Mental model\n\n${config.name} is ${config.description}\n\nUse the product interface for product work. Use the agent interface for repeatable tasks that need structured results.\n\n## The faces\n\n- Product: ${config.repository}\n- MCP: ${mcp}\n- Package: ${packageName}\n\n## MCP tools\n\n| Tool | Input | Result |\n| --- | --- | --- |\n| audit | target | An agent-readiness report with a score and gaps. |\n| gen | artifact and params | A generated agent-native artifact. |\n\n## The loop\n\n1. Audit the target.\n2. Fix the highest-impact gap.\n3. Generate or publish the missing artifact.\n4. Audit again and keep the report with the release.\n\n## Rules\n\n- Treat the product description and prices as source facts.\n- Return structured data when a tool provides it.\n- Ask for missing information before making a high-impact change.\n- Keep public agent instructions about the product and its use.\n\n## Offer\n\n${offer?.description ?? '<OFFER_DESCRIPTION>'}\n\n${offerLine}\n`;\n}\n","import type { AigentifyConfig } from '../config.js';\n\nexport function generateAgentsRoute(config: AigentifyConfig, framework = 'static'): string {\n if (framework === 'next') {\n return `# Serve /agents.md from a Next route\n\nCopy AGENTS.md to a public directory, or add this force-static route:\n\n\\`\\`\\`ts\nimport { readFile } from 'node:fs/promises';\n\nexport const dynamic = 'force-static';\n\nexport async function GET() {\n const body = await readFile('AGENTS.md', 'utf8');\n return new Response(body, { headers: { 'content-type': 'text/markdown; charset=utf-8' } });\n}\n\\`\\`\\`\n\nProduct: ${config.name}\n`;\n }\n return `# Serve /agents.md\n\nCopy the generated AGENTS.md file to public/agents.md and serve it as a static text/markdown response.\n\nProduct: ${config.name}\n`;\n}\n","import type { AigentifyConfig } from '../config.js';\n\nexport function generateOffer(config: AigentifyConfig): string {\n const offer = config.offer ?? {};\n const data = {\n '@context': 'https://schema.org',\n '@type': 'SoftwareApplication',\n name: config.name,\n description: config.description,\n applicationCategory: 'DeveloperApplication',\n offers: [{\n '@type': 'Offer',\n name: offer.name ?? `${config.name} access`,\n ...(offer.description ? { description: offer.description } : {}),\n ...(offer.price === undefined ? {} : { price: String(offer.price) }),\n priceCurrency: offer.priceCurrency ?? 'USD',\n }],\n };\n return `${JSON.stringify(data, null, 2)}\\n`;\n}\n","import { SERVER_SCHEMA_URL } from '../constants.js';\nimport type { AigentifyConfig } from '../config.js';\n\nexport function generateServerJson(config: AigentifyConfig): string {\n const serverName = config.name.includes('/') ? config.name : `io.github.pooriaarab/${config.name.toLowerCase().replace(/[^a-z0-9._-]+/g, '-')}`;\n const server: Record<string, unknown> = {\n $schema: SERVER_SCHEMA_URL,\n name: serverName,\n description: config.description,\n repository: { url: config.repository, source: 'github' },\n version: config.version ?? '0.1.0',\n };\n if (config.mcpUrl) server.remotes = [{ type: 'streamable-http', url: config.mcpUrl }];\n else server.packages = [{ registryType: 'npm', registryBaseUrl: 'https://registry.npmjs.org', identifier: config.npmPackage ?? 'aigentify', version: config.version ?? '0.1.0', transport: { type: 'stdio' }, runtimeHint: 'npx', packageArguments: [{ type: 'positional', valueHint: 'subcommand', value: 'mcp' }] }];\n return `${JSON.stringify(server, null, 2)}\\n`;\n}\n","import type { AigentifyConfig } from '../config.js';\nimport { defaultConfig, defineConfig } from '../config.js';\nimport { generateAgentsMd } from './agents.js';\nimport { generateAgentsRoute } from './agents-route.js';\nimport { generateOffer } from './offer.js';\nimport { generateServerJson } from './server.js';\nexport * from './agents.js';\nexport * from './agents-route.js';\nexport * from './offer.js';\nexport * from './server.js';\n\nexport type GeneratedArtifact = 'agents-md' | 'server-json' | 'offer' | 'agents-route';\nexport type GenerateParams = Partial<AigentifyConfig> & { framework?: string };\n\nfunction configFromParams(params: GenerateParams = {}): AigentifyConfig {\n const base = defaultConfig();\n return defineConfig({ ...base, ...params, offer: { ...(base.offer ?? {}), ...(params.offer ?? {}) } });\n}\n\nexport function generate(artifact: GeneratedArtifact, params: GenerateParams = {}): string {\n const config = configFromParams(params);\n if (artifact === 'agents-md') return generateAgentsMd(config);\n if (artifact === 'server-json') return generateServerJson(config);\n if (artifact === 'offer') return generateOffer(config);\n if (artifact === 'agents-route') return generateAgentsRoute(config, params.framework);\n throw new Error(`Unknown artifact: ${artifact}`);\n}\n"],"mappings":"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","names":["path"]}

@@ -47,3 +47,4 @@ type AuditStatus = 'pass' | 'fail' | 'warn' | 'na';

declare const CONFIG_FILENAME: string;
declare const SERVER_SCHEMA_URL = "https://static.modelcontextprotocol.io/schemas/2025-07-09/server.schema.json";
declare const SERVER_SCHEMA_URL = "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json";
declare const SERVER_SCHEMA_RE: RegExp;

@@ -64,2 +65,2 @@ declare function generateAgentsMd(config: AigentifyConfig): string;

export { type AigentifyConfig, type AuditCheck, type AuditGap, type AuditOptions, type AuditReport, type AuditStatus, CONFIG_FILENAME, type GenerateParams, type GeneratedArtifact, type OfferConfig, PKG_NAME, SERVER_SCHEMA_URL, VERSION, auditTarget, defaultConfig, defineConfig, formatAuditReport, generate, generateAgentsMd, generateAgentsRoute, generateOffer, generateServerJson, scoreAuditChecks };
export { type AigentifyConfig, type AuditCheck, type AuditGap, type AuditOptions, type AuditReport, type AuditStatus, CONFIG_FILENAME, type GenerateParams, type GeneratedArtifact, type OfferConfig, PKG_NAME, SERVER_SCHEMA_RE, SERVER_SCHEMA_URL, VERSION, auditTarget, defaultConfig, defineConfig, formatAuditReport, generate, generateAgentsMd, generateAgentsRoute, generateOffer, generateServerJson, scoreAuditChecks };

@@ -47,3 +47,4 @@ type AuditStatus = 'pass' | 'fail' | 'warn' | 'na';

declare const CONFIG_FILENAME: string;
declare const SERVER_SCHEMA_URL = "https://static.modelcontextprotocol.io/schemas/2025-07-09/server.schema.json";
declare const SERVER_SCHEMA_URL = "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json";
declare const SERVER_SCHEMA_RE: RegExp;

@@ -64,2 +65,2 @@ declare function generateAgentsMd(config: AigentifyConfig): string;

export { type AigentifyConfig, type AuditCheck, type AuditGap, type AuditOptions, type AuditReport, type AuditStatus, CONFIG_FILENAME, type GenerateParams, type GeneratedArtifact, type OfferConfig, PKG_NAME, SERVER_SCHEMA_URL, VERSION, auditTarget, defaultConfig, defineConfig, formatAuditReport, generate, generateAgentsMd, generateAgentsRoute, generateOffer, generateServerJson, scoreAuditChecks };
export { type AigentifyConfig, type AuditCheck, type AuditGap, type AuditOptions, type AuditReport, type AuditStatus, CONFIG_FILENAME, type GenerateParams, type GeneratedArtifact, type OfferConfig, PKG_NAME, SERVER_SCHEMA_RE, SERVER_SCHEMA_URL, VERSION, auditTarget, defaultConfig, defineConfig, formatAuditReport, generate, generateAgentsMd, generateAgentsRoute, generateOffer, generateServerJson, scoreAuditChecks };

@@ -8,3 +8,4 @@ // src/audit.ts

name: "aigentify",
version: "0.1.0",
version: "0.1.1",
mcpName: "io.github.pooriaarab/aigentify",
description: "Audit and generate agent-native product surfaces",

@@ -49,3 +50,4 @@ type: "module",

var CONFIG_FILENAME = `${PKG_NAME}.config.ts`;
var SERVER_SCHEMA_URL = "https://static.modelcontextprotocol.io/schemas/2025-07-09/server.schema.json";
var SERVER_SCHEMA_URL = "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json";
var SERVER_SCHEMA_RE = /^https:\/\/static\.modelcontextprotocol\.io\/schemas\/\d{4}-\d{2}-\d{2}\/server\.schema\.json$/;

@@ -118,3 +120,3 @@ // src/audit.ts

if (!value) return { valid: false, reason: "server.json is not valid JSON." };
if (value.$schema !== SERVER_SCHEMA_URL) return { valid: false, reason: `server.json must use the exact schema URL ${SERVER_SCHEMA_URL}.` };
if (typeof value.$schema !== "string" || !SERVER_SCHEMA_RE.test(value.$schema)) return { valid: false, reason: `server.json "$schema" must be a dated MCP registry schema like ${SERVER_SCHEMA_URL} (the bare .../server.json 404s).` };
const missing = ["name", "description", "repository", "version"].filter((key) => !value[key]);

@@ -350,3 +352,3 @@ if (missing.length) return { valid: false, reason: `server.json is missing: ${missing.join(", ")}.` };

if (config.mcpUrl) server.remotes = [{ type: "streamable-http", url: config.mcpUrl }];
else server.packages = [{ registry_type: "npm", identifier: config.npmPackage ?? "aigentify", version: config.version ?? "0.1.0", runtime_hint: "npx", transport: { type: "stdio" } }];
else server.packages = [{ registryType: "npm", registryBaseUrl: "https://registry.npmjs.org", identifier: config.npmPackage ?? "aigentify", version: config.version ?? "0.1.0", transport: { type: "stdio" }, runtimeHint: "npx", packageArguments: [{ type: "positional", valueHint: "subcommand", value: "mcp" }] }];
return `${JSON.stringify(server, null, 2)}

@@ -372,2 +374,3 @@ `;

PKG_NAME,
SERVER_SCHEMA_RE,
SERVER_SCHEMA_URL,

@@ -374,0 +377,0 @@ VERSION,

@@ -1,1 +0,1 @@

{"version":3,"sources":["../src/audit.ts","../package.json","../src/constants.ts","../src/config.ts","../src/generators/agents.ts","../src/generators/agents-route.ts","../src/generators/offer.ts","../src/generators/server.ts","../src/generators/index.ts"],"sourcesContent":["import { readFile, readdir, stat } from 'node:fs/promises';\nimport path from 'node:path';\nimport { SERVER_SCHEMA_URL } from './constants.js';\n\nexport type AuditStatus = 'pass' | 'fail' | 'warn' | 'na';\nexport interface AuditCheck { id: string; status: AuditStatus; note: string; weight: number }\nexport interface AuditGap { id: string; note: string; fix: string }\nexport interface AuditReport { target: string; score: number; checks: AuditCheck[]; gaps: AuditGap[] }\nexport interface AuditOptions { fetch?: typeof globalThis.fetch }\n\ninterface Endpoint { status: number; contentType: string; text: string }\ninterface Snapshot {\n agents: Endpoint; server: Endpoint; mcp: Endpoint; home: Endpoint; llms: Endpoint; sitemap: Endpoint;\n honestText: string; hasMcp: boolean; networkFailure: boolean;\n}\n\nconst SKIPPED = new Set(['.git', 'node_modules', 'dist', 'coverage', '.next', '_reference_geoaeo']);\nconst WEIGHTS: Record<string, number> = {\n 'agents-md': 15, 'agents-md-public-safe': 10, 'server-json': 15, mcp: 15,\n 'offer-jsonld': 15, 'honest-offer': 10, 'llms-txt': 10, sitemap: 10,\n};\nconst FIXES: Record<string, string> = {\n 'agents-md': 'Add a public AGENTS.md at the target root or serve /agents.md as text/markdown.',\n 'agents-md-public-safe': 'Rewrite AGENTS.md as product guidance. Remove repository paths and contributor instructions.',\n 'server-json': `Add server.json and set \"$schema\" to \"${SERVER_SCHEMA_URL}\". Include a repository and a remotes or packages entry.`,\n mcp: 'Publish server.json, .mcp.json, or an MCP entry point.',\n 'offer-jsonld': 'Publish JSON-LD with @type Offer, or a SoftwareApplication with an offers property.',\n 'honest-offer': 'State the real price plainly. Remove scarcity, countdown, and urgency language.',\n 'llms-txt': 'Publish /llms.txt with a concise product description.',\n sitemap: 'Publish /sitemap.xml for URL discovery.',\n};\n\nfunction check(id: string, status: AuditStatus, note: string): AuditCheck { return { id, status, note, weight: WEIGHTS[id] }; }\n\nexport function scoreAuditChecks(checks: AuditCheck[]): number {\n const relevant = checks.filter(item => item.status !== 'na');\n const total = relevant.reduce((sum, item) => sum + item.weight, 0);\n if (!total) return 0;\n const earned = relevant.reduce((sum, item) => sum + (item.status === 'pass' ? item.weight : item.status === 'warn' ? item.weight / 2 : 0), 0);\n return Math.round((earned / total) * 100);\n}\n\nasync function walkFiles(directory: string): Promise<string[]> {\n const entries = await readdir(directory, { withFileTypes: true });\n const files: string[] = [];\n for (const entry of entries) {\n if (entry.isDirectory() && !SKIPPED.has(entry.name)) files.push(...await walkFiles(path.join(directory, entry.name)));\n else if (entry.isFile()) files.push(path.join(directory, entry.name));\n }\n return files;\n}\n\nasync function readText(file: string | undefined): Promise<string> {\n if (!file) return '';\n try { return await readFile(file, 'utf8'); } catch { return ''; }\n}\n\nfunction findFile(files: string[], name: string): string | undefined {\n return files.find(file => {\n const normalized = file.replaceAll('\\\\', '/');\n return path.basename(normalized) === name || normalized.endsWith(`/${name}/route.ts`);\n });\n}\n\nfunction parseJson(text: string): Record<string, unknown> | undefined {\n try {\n const value: unknown = JSON.parse(text);\n return value && typeof value === 'object' && !Array.isArray(value) ? value as Record<string, unknown> : undefined;\n } catch { return undefined; }\n}\n\nfunction validServer(text: string): { valid: boolean; reason: string } {\n const value = parseJson(text);\n if (!value) return { valid: false, reason: 'server.json is not valid JSON.' };\n if (value.$schema !== SERVER_SCHEMA_URL) return { valid: false, reason: `server.json must use the exact schema URL ${SERVER_SCHEMA_URL}.` };\n const missing = ['name', 'description', 'repository', 'version'].filter(key => !value[key]);\n if (missing.length) return { valid: false, reason: `server.json is missing: ${missing.join(', ')}.` };\n if (!Array.isArray(value.remotes) && !Array.isArray(value.packages)) return { valid: false, reason: 'server.json needs a remotes or packages entry.' };\n return { valid: true, reason: 'server.json has the required MCP registry fields.' };\n}\n\nfunction hasOffer(texts: string[]): boolean {\n return texts.some(text => /\"@type\"\\s*:\\s*\"Offer\"/i.test(text) || /\"@type\"\\s*:\\s*\"SoftwareApplication\"/i.test(text) && /\"offers\"\\s*:/.test(text));\n}\n\nfunction hasUrgency(text: string): boolean {\n return /limited time|act now|hurry|expires|only\\s+\\d+\\s+left|ends in|sign up now|countdown/i.test(text);\n}\n\nfunction publicSafe(text: string): boolean {\n return !(/\\bsrc\\//i.test(text) || /\\bapps\\//i.test(text) || /\\bpackages\\//i.test(text) || /\\b[\\w.-]+\\.ts\\b/i.test(text) || /npm run build/i.test(text) || /\\btsconfig\\b/i.test(text) || /\\bcontributors?\\b/i.test(text) || /^#+\\s*layout\\b/im.test(text));\n}\n\nfunction offerBlock(text: string): string {\n const match = /^#+\\s*Offer\\b/im.exec(text);\n if (!match || match.index === undefined) return '';\n const rest = text.slice(match.index);\n const nextHeading = /^#+\\s+/m.exec(rest.slice(match[0].length));\n return nextHeading?.index === undefined ? rest : rest.slice(0, match[0].length + nextHeading.index);\n}\n\nasync function directorySnapshot(directory: string): Promise<Snapshot> {\n const files = await walkFiles(directory);\n const agentsFile = findFile(files, 'AGENTS.md');\n const serverFile = findFile(files, 'server.json');\n const mcpFile = files.find(file => /(?:^|\\/)\\.mcp\\.json$/.test(file.replaceAll('\\\\', '/')));\n const packageFile = findFile(files, 'package.json');\n const packageText = await readText(packageFile);\n const hasMcpBin = /\"(?:aigentify|[^\"\\n]*mcp[^\"\\n]*)\"\\s*:/i.test(packageText);\n const agentsText = await readText(agentsFile);\n const offerTexts = [agentsText, ...await Promise.all(files.filter(file => /\\.(html?|json|jsonld|md|mdx|tsx|jsx|js|mjs|ts)$/.test(file)).map(readText))];\n const llmsFile = findFile(files, 'llms.txt');\n const sitemapFile = findFile(files, 'sitemap.xml');\n const offerFiles = files.filter(file => /\\.jsonld$|(?:^|\\/)offer[^/]*\\.(?:json|html?)$/i.test(file));\n const honestText = [offerBlock(agentsText), ...await Promise.all(offerFiles.map(readText))].join('\\n');\n return {\n agents: { status: agentsFile ? 200 : 404, contentType: 'text/markdown', text: agentsText },\n server: { status: serverFile ? 200 : 404, contentType: 'application/json', text: await readText(serverFile) },\n mcp: { status: mcpFile || serverFile || hasMcpBin ? 200 : 404, contentType: '', text: '' },\n home: { status: 200, contentType: 'text/plain', text: offerTexts.join('\\n') },\n llms: { status: llmsFile ? 200 : 404, contentType: 'text/plain', text: await readText(llmsFile) },\n sitemap: { status: sitemapFile ? 200 : 404, contentType: 'application/xml', text: await readText(sitemapFile) },\n honestText, hasMcp: Boolean(mcpFile || serverFile || hasMcpBin), networkFailure: false,\n };\n}\n\nasync function fetchText(fetcher: typeof globalThis.fetch, url: string): Promise<Endpoint> {\n try {\n const response = await fetcher(url, { signal: AbortSignal.timeout(8000) });\n return { status: response.status, contentType: response.headers.get('content-type') ?? '', text: await response.text() };\n } catch { return { status: 0, contentType: '', text: '' }; }\n}\n\nasync function urlSnapshot(target: string, fetcher: typeof globalThis.fetch): Promise<Snapshot> {\n const base = target.replace(/\\/+$/, '');\n const [agents, server, mcp, home, llms, sitemap] = await Promise.all([\n fetchText(fetcher, `${base}/agents.md`), fetchText(fetcher, `${base}/server.json`), fetchText(fetcher, `${base}/.well-known/mcp`),\n fetchText(fetcher, base), fetchText(fetcher, `${base}/llms.txt`), fetchText(fetcher, `${base}/sitemap.xml`),\n ]);\n const endpoints = [agents, server, mcp, home, llms, sitemap];\n return { agents, server, mcp, home, llms, sitemap, honestText: [home.text, offerBlock(agents.text)].join('\\n'), hasMcp: server.status >= 200 && server.status < 400 || mcp.status >= 200 && mcp.status < 400, networkFailure: endpoints.every(item => item.status === 0) };\n}\n\nfunction buildChecks(snapshot: Snapshot): AuditCheck[] {\n const agentsPresent = snapshot.agents.status === 200 && snapshot.agents.text.trim().length > 0 && /(?:text\\/(?:markdown|plain)|application\\/markdown)/i.test(snapshot.agents.contentType);\n const agentsStatus: AuditStatus = snapshot.agents.status === 0 ? 'warn' : agentsPresent ? 'pass' : 'fail';\n const publicStatus: AuditStatus = !agentsPresent ? (snapshot.agents.status === 0 ? 'warn' : 'na') : publicSafe(snapshot.agents.text) ? 'pass' : 'warn';\n const serverInfo = snapshot.server.status === 200 ? validServer(snapshot.server.text) : undefined;\n const serverStatus: AuditStatus = snapshot.server.status === 0 ? 'warn' : !snapshot.hasMcp ? 'na' : serverInfo?.valid ? 'pass' : 'fail';\n const mcpStatus: AuditStatus = snapshot.networkFailure ? 'warn' : snapshot.hasMcp ? 'pass' : 'fail';\n const offerTexts = [snapshot.home.text, snapshot.agents.text];\n const offerStatus: AuditStatus = snapshot.home.status === 0 ? 'warn' : hasOffer(offerTexts) ? 'pass' : 'fail';\n const honestStatus: AuditStatus = !hasOffer(offerTexts) && !agentsPresent ? (snapshot.home.status === 0 ? 'warn' : 'na') : hasUrgency(snapshot.honestText) ? 'warn' : 'pass';\n const llmsStatus: AuditStatus = snapshot.llms.status === 0 ? 'warn' : snapshot.llms.status >= 200 && snapshot.llms.status < 400 && snapshot.llms.text.trim() ? 'pass' : 'fail';\n const sitemapStatus: AuditStatus = snapshot.sitemap.status === 0 ? 'warn' : snapshot.sitemap.status >= 200 && snapshot.sitemap.status < 400 && snapshot.sitemap.text.trim() ? 'pass' : 'fail';\n return [\n check('agents-md', agentsStatus, agentsPresent ? 'AGENTS.md is available.' : snapshot.agents.status === 0 ? 'The AGENTS.md request failed.' : 'AGENTS.md is missing.'),\n check('agents-md-public-safe', publicStatus, publicStatus === 'pass' ? 'AGENTS.md describes the product as a public surface.' : publicStatus === 'na' ? 'No AGENTS.md is available to inspect.' : 'AGENTS.md contains repository-internal guidance.'),\n check('server-json', serverStatus, serverInfo?.valid ? serverInfo.reason : serverInfo?.reason ?? (!snapshot.hasMcp ? 'No MCP surface was detected.' : 'server.json is missing.')),\n check('mcp', mcpStatus, snapshot.networkFailure ? 'The MCP discovery request failed.' : snapshot.hasMcp ? 'An MCP surface is available.' : 'No MCP surface was found.'),\n check('offer-jsonld', offerStatus, offerStatus === 'pass' ? 'Offer JSON-LD is available.' : offerStatus === 'warn' ? 'The offer could not be checked.' : 'No Offer JSON-LD was found.'),\n check('honest-offer', honestStatus, honestStatus === 'pass' ? 'Offer language states the price without pressure.' : honestStatus === 'na' ? 'No offer or Offer block was found.' : 'Offer language contains scarcity, countdown, or urgency copy.'),\n check('llms-txt', llmsStatus, llmsStatus === 'pass' ? 'llms.txt is available.' : llmsStatus === 'warn' ? 'The llms.txt request failed.' : 'llms.txt is missing.'),\n check('sitemap', sitemapStatus, sitemapStatus === 'pass' ? 'sitemap.xml is available.' : sitemapStatus === 'warn' ? 'The sitemap request failed.' : 'sitemap.xml is missing.'),\n ];\n}\n\nexport async function auditTarget(target: string, options: AuditOptions = {}): Promise<AuditReport> {\n const targetStat = await stat(target).catch(() => undefined);\n const snapshot = targetStat?.isDirectory() ? await directorySnapshot(target) : await urlSnapshot(target, options.fetch ?? globalThis.fetch);\n const checks = buildChecks(snapshot);\n const gaps = checks.filter(item => item.status === 'fail' || item.status === 'warn').map(item => ({ id: item.id, note: item.note, fix: FIXES[item.id] }));\n return { target, score: scoreAuditChecks(checks), checks, gaps };\n}\n\nexport function formatAuditReport(report: AuditReport): string {\n const lines = [`${report.target}: ${report.score}/100`, ''];\n for (const item of report.checks) lines.push(`${item.status.toUpperCase().padEnd(4)} ${item.id}: ${item.note}`);\n lines.push('', 'Gaps:');\n if (!report.gaps.length) lines.push('None.');\n else report.gaps.forEach((gap, index) => lines.push(`${index + 1}. ${gap.id}: ${gap.fix}`));\n return lines.join('\\n');\n}\n","{\n \"name\": \"aigentify\",\n \"version\": \"0.1.0\",\n \"description\": \"Audit and generate agent-native product surfaces\",\n \"type\": \"module\",\n \"license\": \"MIT\",\n \"bin\": {\"aigentify\": \"dist/cli.js\", \"aigentify-mcp\": \"dist/mcp.js\"},\n \"exports\": {\".\": {\"types\": \"./dist/index.d.ts\", \"import\": \"./dist/index.js\", \"require\": \"./dist/index.cjs\"}},\n \"files\": [\"dist\"],\n \"repository\": {\"type\": \"git\", \"url\": \"git+https://github.com/pooriaarab/aigentify.git\"},\n \"homepage\": \"https://github.com/pooriaarab/aigentify\",\n \"bugs\": \"https://github.com/pooriaarab/aigentify/issues\",\n \"keywords\": [\"agents\", \"agentification\", \"mcp\", \"ai\", \"json-ld\"],\n \"publishConfig\": {\"access\": \"public\"},\n \"scripts\": {\n \"build\": \"tsup\",\n \"test\": \"vitest run\",\n \"lint\": \"tsc --noEmit --pretty false\",\n \"typecheck\": \"tsc --noEmit\",\n \"verify\": \"npm run typecheck && npm run build && npm run test\",\n \"prepublishOnly\": \"npm run verify\"\n },\n \"engines\": {\"node\": \">=20\"},\n \"dependencies\": {\n \"@modelcontextprotocol/sdk\": \"^1.17.5\",\n \"cheerio\": \"^1.1.2\",\n \"commander\": \"^14.0.0\",\n \"jiti\": \"^2.5.1\",\n \"zod\": \"^4.0.0\"\n },\n \"devDependencies\": {\n \"@types/node\": \"^22.15.0\",\n \"tsup\": \"^8.5.0\",\n \"typescript\": \"^5.8.3\",\n \"vitest\": \"^3.2.4\"\n }\n}\n","import pkg from '../package.json';\n\nexport const PKG_NAME = pkg.name;\nexport const VERSION = pkg.version;\nexport const CONFIG_FILENAME = `${PKG_NAME}.config.ts`;\nexport const SERVER_SCHEMA_URL = 'https://static.modelcontextprotocol.io/schemas/2025-07-09/server.schema.json';\n","export interface OfferConfig {\n name?: string;\n description?: string;\n price?: string | number;\n priceCurrency?: string;\n}\n\nexport interface AigentifyConfig {\n name: string;\n description: string;\n repository: string;\n version?: string;\n mcpUrl?: string;\n npmPackage?: string;\n offer?: OfferConfig;\n}\n\nexport function defineConfig(config: AigentifyConfig): AigentifyConfig {\n return { ...config, repository: config.repository.replace(/\\/+$/, ''), version: config.version ?? '0.1.0' };\n}\n\nexport function defaultConfig(): AigentifyConfig {\n return defineConfig({\n name: 'Your product',\n description: 'A product with an agent-native interface.',\n repository: 'https://github.com/your-org/your-product',\n npmPackage: 'your-package',\n });\n}\n","import type { AigentifyConfig } from '../config.js';\n\nexport function generateAgentsMd(config: AigentifyConfig): string {\n const packageName = config.npmPackage ?? '<NPM_PACKAGE>';\n const mcp = config.mcpUrl ?? `npx ${packageName}`;\n const offer = config.offer;\n const offerLine = offer?.price === undefined ? 'Price: <PRICE>' : `Price: ${offer.priceCurrency ?? 'USD'} ${offer.price}`;\n return `# ${config.name}\n\n## Mental model\n\n${config.name} is ${config.description}\n\nUse the product interface for product work. Use the agent interface for repeatable tasks that need structured results.\n\n## The faces\n\n- Product: ${config.repository}\n- MCP: ${mcp}\n- Package: ${packageName}\n\n## MCP tools\n\n| Tool | Input | Result |\n| --- | --- | --- |\n| audit | target | An agent-readiness report with a score and gaps. |\n| gen | artifact and params | A generated agent-native artifact. |\n\n## The loop\n\n1. Audit the target.\n2. Fix the highest-impact gap.\n3. Generate or publish the missing artifact.\n4. Audit again and keep the report with the release.\n\n## Rules\n\n- Treat the product description and prices as source facts.\n- Return structured data when a tool provides it.\n- Ask for missing information before making a high-impact change.\n- Keep public agent instructions about the product and its use.\n\n## Offer\n\n${offer?.description ?? '<OFFER_DESCRIPTION>'}\n\n${offerLine}\n`;\n}\n","import type { AigentifyConfig } from '../config.js';\n\nexport function generateAgentsRoute(config: AigentifyConfig, framework = 'static'): string {\n if (framework === 'next') {\n return `# Serve /agents.md from a Next route\n\nCopy AGENTS.md to a public directory, or add this force-static route:\n\n\\`\\`\\`ts\nimport { readFile } from 'node:fs/promises';\n\nexport const dynamic = 'force-static';\n\nexport async function GET() {\n const body = await readFile('AGENTS.md', 'utf8');\n return new Response(body, { headers: { 'content-type': 'text/markdown; charset=utf-8' } });\n}\n\\`\\`\\`\n\nProduct: ${config.name}\n`;\n }\n return `# Serve /agents.md\n\nCopy the generated AGENTS.md file to public/agents.md and serve it as a static text/markdown response.\n\nProduct: ${config.name}\n`;\n}\n","import type { AigentifyConfig } from '../config.js';\n\nexport function generateOffer(config: AigentifyConfig): string {\n const offer = config.offer ?? {};\n const data = {\n '@context': 'https://schema.org',\n '@type': 'SoftwareApplication',\n name: config.name,\n description: config.description,\n applicationCategory: 'DeveloperApplication',\n offers: [{\n '@type': 'Offer',\n name: offer.name ?? `${config.name} access`,\n ...(offer.description ? { description: offer.description } : {}),\n ...(offer.price === undefined ? {} : { price: String(offer.price) }),\n priceCurrency: offer.priceCurrency ?? 'USD',\n }],\n };\n return `${JSON.stringify(data, null, 2)}\\n`;\n}\n","import { SERVER_SCHEMA_URL } from '../constants.js';\nimport type { AigentifyConfig } from '../config.js';\n\nexport function generateServerJson(config: AigentifyConfig): string {\n const serverName = config.name.includes('/') ? config.name : `io.github.pooriaarab/${config.name.toLowerCase().replace(/[^a-z0-9._-]+/g, '-')}`;\n const server: Record<string, unknown> = {\n $schema: SERVER_SCHEMA_URL,\n name: serverName,\n description: config.description,\n repository: { url: config.repository, source: 'github' },\n version: config.version ?? '0.1.0',\n };\n if (config.mcpUrl) server.remotes = [{ type: 'streamable-http', url: config.mcpUrl }];\n else server.packages = [{ registry_type: 'npm', identifier: config.npmPackage ?? 'aigentify', version: config.version ?? '0.1.0', runtime_hint: 'npx', transport: { type: 'stdio' } }];\n return `${JSON.stringify(server, null, 2)}\\n`;\n}\n","import type { AigentifyConfig } from '../config.js';\nimport { defaultConfig, defineConfig } from '../config.js';\nimport { generateAgentsMd } from './agents.js';\nimport { generateAgentsRoute } from './agents-route.js';\nimport { generateOffer } from './offer.js';\nimport { generateServerJson } from './server.js';\nexport * from './agents.js';\nexport * from './agents-route.js';\nexport * from './offer.js';\nexport * from './server.js';\n\nexport type GeneratedArtifact = 'agents-md' | 'server-json' | 'offer' | 'agents-route';\nexport type GenerateParams = Partial<AigentifyConfig> & { framework?: string };\n\nfunction configFromParams(params: GenerateParams = {}): AigentifyConfig {\n const base = defaultConfig();\n return defineConfig({ ...base, ...params, offer: { ...(base.offer ?? {}), ...(params.offer ?? {}) } });\n}\n\nexport function generate(artifact: GeneratedArtifact, params: GenerateParams = {}): string {\n const config = configFromParams(params);\n if (artifact === 'agents-md') return generateAgentsMd(config);\n if (artifact === 'server-json') return generateServerJson(config);\n if (artifact === 'offer') return generateOffer(config);\n if (artifact === 'agents-route') return generateAgentsRoute(config, params.framework);\n throw new Error(`Unknown artifact: ${artifact}`);\n}\n"],"mappings":"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","names":[]}
{"version":3,"sources":["../src/audit.ts","../package.json","../src/constants.ts","../src/config.ts","../src/generators/agents.ts","../src/generators/agents-route.ts","../src/generators/offer.ts","../src/generators/server.ts","../src/generators/index.ts"],"sourcesContent":["import { readFile, readdir, stat } from 'node:fs/promises';\nimport path from 'node:path';\nimport { SERVER_SCHEMA_URL, SERVER_SCHEMA_RE } from './constants.js';\n\nexport type AuditStatus = 'pass' | 'fail' | 'warn' | 'na';\nexport interface AuditCheck { id: string; status: AuditStatus; note: string; weight: number }\nexport interface AuditGap { id: string; note: string; fix: string }\nexport interface AuditReport { target: string; score: number; checks: AuditCheck[]; gaps: AuditGap[] }\nexport interface AuditOptions { fetch?: typeof globalThis.fetch }\n\ninterface Endpoint { status: number; contentType: string; text: string }\ninterface Snapshot {\n agents: Endpoint; server: Endpoint; mcp: Endpoint; home: Endpoint; llms: Endpoint; sitemap: Endpoint;\n honestText: string; hasMcp: boolean; networkFailure: boolean;\n}\n\nconst SKIPPED = new Set(['.git', 'node_modules', 'dist', 'coverage', '.next', '_reference_geoaeo']);\nconst WEIGHTS: Record<string, number> = {\n 'agents-md': 15, 'agents-md-public-safe': 10, 'server-json': 15, mcp: 15,\n 'offer-jsonld': 15, 'honest-offer': 10, 'llms-txt': 10, sitemap: 10,\n};\nconst FIXES: Record<string, string> = {\n 'agents-md': 'Add a public AGENTS.md at the target root or serve /agents.md as text/markdown.',\n 'agents-md-public-safe': 'Rewrite AGENTS.md as product guidance. Remove repository paths and contributor instructions.',\n 'server-json': `Add server.json and set \"$schema\" to \"${SERVER_SCHEMA_URL}\". Include a repository and a remotes or packages entry.`,\n mcp: 'Publish server.json, .mcp.json, or an MCP entry point.',\n 'offer-jsonld': 'Publish JSON-LD with @type Offer, or a SoftwareApplication with an offers property.',\n 'honest-offer': 'State the real price plainly. Remove scarcity, countdown, and urgency language.',\n 'llms-txt': 'Publish /llms.txt with a concise product description.',\n sitemap: 'Publish /sitemap.xml for URL discovery.',\n};\n\nfunction check(id: string, status: AuditStatus, note: string): AuditCheck { return { id, status, note, weight: WEIGHTS[id] }; }\n\nexport function scoreAuditChecks(checks: AuditCheck[]): number {\n const relevant = checks.filter(item => item.status !== 'na');\n const total = relevant.reduce((sum, item) => sum + item.weight, 0);\n if (!total) return 0;\n const earned = relevant.reduce((sum, item) => sum + (item.status === 'pass' ? item.weight : item.status === 'warn' ? item.weight / 2 : 0), 0);\n return Math.round((earned / total) * 100);\n}\n\nasync function walkFiles(directory: string): Promise<string[]> {\n const entries = await readdir(directory, { withFileTypes: true });\n const files: string[] = [];\n for (const entry of entries) {\n if (entry.isDirectory() && !SKIPPED.has(entry.name)) files.push(...await walkFiles(path.join(directory, entry.name)));\n else if (entry.isFile()) files.push(path.join(directory, entry.name));\n }\n return files;\n}\n\nasync function readText(file: string | undefined): Promise<string> {\n if (!file) return '';\n try { return await readFile(file, 'utf8'); } catch { return ''; }\n}\n\nfunction findFile(files: string[], name: string): string | undefined {\n return files.find(file => {\n const normalized = file.replaceAll('\\\\', '/');\n return path.basename(normalized) === name || normalized.endsWith(`/${name}/route.ts`);\n });\n}\n\nfunction parseJson(text: string): Record<string, unknown> | undefined {\n try {\n const value: unknown = JSON.parse(text);\n return value && typeof value === 'object' && !Array.isArray(value) ? value as Record<string, unknown> : undefined;\n } catch { return undefined; }\n}\n\nfunction validServer(text: string): { valid: boolean; reason: string } {\n const value = parseJson(text);\n if (!value) return { valid: false, reason: 'server.json is not valid JSON.' };\n if (typeof value.$schema !== 'string' || !SERVER_SCHEMA_RE.test(value.$schema)) return { valid: false, reason: `server.json \"$schema\" must be a dated MCP registry schema like ${SERVER_SCHEMA_URL} (the bare .../server.json 404s).` };\n const missing = ['name', 'description', 'repository', 'version'].filter(key => !value[key]);\n if (missing.length) return { valid: false, reason: `server.json is missing: ${missing.join(', ')}.` };\n if (!Array.isArray(value.remotes) && !Array.isArray(value.packages)) return { valid: false, reason: 'server.json needs a remotes or packages entry.' };\n return { valid: true, reason: 'server.json has the required MCP registry fields.' };\n}\n\nfunction hasOffer(texts: string[]): boolean {\n return texts.some(text => /\"@type\"\\s*:\\s*\"Offer\"/i.test(text) || /\"@type\"\\s*:\\s*\"SoftwareApplication\"/i.test(text) && /\"offers\"\\s*:/.test(text));\n}\n\nfunction hasUrgency(text: string): boolean {\n return /limited time|act now|hurry|expires|only\\s+\\d+\\s+left|ends in|sign up now|countdown/i.test(text);\n}\n\nfunction publicSafe(text: string): boolean {\n return !(/\\bsrc\\//i.test(text) || /\\bapps\\//i.test(text) || /\\bpackages\\//i.test(text) || /\\b[\\w.-]+\\.ts\\b/i.test(text) || /npm run build/i.test(text) || /\\btsconfig\\b/i.test(text) || /\\bcontributors?\\b/i.test(text) || /^#+\\s*layout\\b/im.test(text));\n}\n\nfunction offerBlock(text: string): string {\n const match = /^#+\\s*Offer\\b/im.exec(text);\n if (!match || match.index === undefined) return '';\n const rest = text.slice(match.index);\n const nextHeading = /^#+\\s+/m.exec(rest.slice(match[0].length));\n return nextHeading?.index === undefined ? rest : rest.slice(0, match[0].length + nextHeading.index);\n}\n\nasync function directorySnapshot(directory: string): Promise<Snapshot> {\n const files = await walkFiles(directory);\n const agentsFile = findFile(files, 'AGENTS.md');\n const serverFile = findFile(files, 'server.json');\n const mcpFile = files.find(file => /(?:^|\\/)\\.mcp\\.json$/.test(file.replaceAll('\\\\', '/')));\n const packageFile = findFile(files, 'package.json');\n const packageText = await readText(packageFile);\n const hasMcpBin = /\"(?:aigentify|[^\"\\n]*mcp[^\"\\n]*)\"\\s*:/i.test(packageText);\n const agentsText = await readText(agentsFile);\n const offerTexts = [agentsText, ...await Promise.all(files.filter(file => /\\.(html?|json|jsonld|md|mdx|tsx|jsx|js|mjs|ts)$/.test(file)).map(readText))];\n const llmsFile = findFile(files, 'llms.txt');\n const sitemapFile = findFile(files, 'sitemap.xml');\n const offerFiles = files.filter(file => /\\.jsonld$|(?:^|\\/)offer[^/]*\\.(?:json|html?)$/i.test(file));\n const honestText = [offerBlock(agentsText), ...await Promise.all(offerFiles.map(readText))].join('\\n');\n return {\n agents: { status: agentsFile ? 200 : 404, contentType: 'text/markdown', text: agentsText },\n server: { status: serverFile ? 200 : 404, contentType: 'application/json', text: await readText(serverFile) },\n mcp: { status: mcpFile || serverFile || hasMcpBin ? 200 : 404, contentType: '', text: '' },\n home: { status: 200, contentType: 'text/plain', text: offerTexts.join('\\n') },\n llms: { status: llmsFile ? 200 : 404, contentType: 'text/plain', text: await readText(llmsFile) },\n sitemap: { status: sitemapFile ? 200 : 404, contentType: 'application/xml', text: await readText(sitemapFile) },\n honestText, hasMcp: Boolean(mcpFile || serverFile || hasMcpBin), networkFailure: false,\n };\n}\n\nasync function fetchText(fetcher: typeof globalThis.fetch, url: string): Promise<Endpoint> {\n try {\n const response = await fetcher(url, { signal: AbortSignal.timeout(8000) });\n return { status: response.status, contentType: response.headers.get('content-type') ?? '', text: await response.text() };\n } catch { return { status: 0, contentType: '', text: '' }; }\n}\n\nasync function urlSnapshot(target: string, fetcher: typeof globalThis.fetch): Promise<Snapshot> {\n const base = target.replace(/\\/+$/, '');\n const [agents, server, mcp, home, llms, sitemap] = await Promise.all([\n fetchText(fetcher, `${base}/agents.md`), fetchText(fetcher, `${base}/server.json`), fetchText(fetcher, `${base}/.well-known/mcp`),\n fetchText(fetcher, base), fetchText(fetcher, `${base}/llms.txt`), fetchText(fetcher, `${base}/sitemap.xml`),\n ]);\n const endpoints = [agents, server, mcp, home, llms, sitemap];\n return { agents, server, mcp, home, llms, sitemap, honestText: [home.text, offerBlock(agents.text)].join('\\n'), hasMcp: server.status >= 200 && server.status < 400 || mcp.status >= 200 && mcp.status < 400, networkFailure: endpoints.every(item => item.status === 0) };\n}\n\nfunction buildChecks(snapshot: Snapshot): AuditCheck[] {\n const agentsPresent = snapshot.agents.status === 200 && snapshot.agents.text.trim().length > 0 && /(?:text\\/(?:markdown|plain)|application\\/markdown)/i.test(snapshot.agents.contentType);\n const agentsStatus: AuditStatus = snapshot.agents.status === 0 ? 'warn' : agentsPresent ? 'pass' : 'fail';\n const publicStatus: AuditStatus = !agentsPresent ? (snapshot.agents.status === 0 ? 'warn' : 'na') : publicSafe(snapshot.agents.text) ? 'pass' : 'warn';\n const serverInfo = snapshot.server.status === 200 ? validServer(snapshot.server.text) : undefined;\n const serverStatus: AuditStatus = snapshot.server.status === 0 ? 'warn' : !snapshot.hasMcp ? 'na' : serverInfo?.valid ? 'pass' : 'fail';\n const mcpStatus: AuditStatus = snapshot.networkFailure ? 'warn' : snapshot.hasMcp ? 'pass' : 'fail';\n const offerTexts = [snapshot.home.text, snapshot.agents.text];\n const offerStatus: AuditStatus = snapshot.home.status === 0 ? 'warn' : hasOffer(offerTexts) ? 'pass' : 'fail';\n const honestStatus: AuditStatus = !hasOffer(offerTexts) && !agentsPresent ? (snapshot.home.status === 0 ? 'warn' : 'na') : hasUrgency(snapshot.honestText) ? 'warn' : 'pass';\n const llmsStatus: AuditStatus = snapshot.llms.status === 0 ? 'warn' : snapshot.llms.status >= 200 && snapshot.llms.status < 400 && snapshot.llms.text.trim() ? 'pass' : 'fail';\n const sitemapStatus: AuditStatus = snapshot.sitemap.status === 0 ? 'warn' : snapshot.sitemap.status >= 200 && snapshot.sitemap.status < 400 && snapshot.sitemap.text.trim() ? 'pass' : 'fail';\n return [\n check('agents-md', agentsStatus, agentsPresent ? 'AGENTS.md is available.' : snapshot.agents.status === 0 ? 'The AGENTS.md request failed.' : 'AGENTS.md is missing.'),\n check('agents-md-public-safe', publicStatus, publicStatus === 'pass' ? 'AGENTS.md describes the product as a public surface.' : publicStatus === 'na' ? 'No AGENTS.md is available to inspect.' : 'AGENTS.md contains repository-internal guidance.'),\n check('server-json', serverStatus, serverInfo?.valid ? serverInfo.reason : serverInfo?.reason ?? (!snapshot.hasMcp ? 'No MCP surface was detected.' : 'server.json is missing.')),\n check('mcp', mcpStatus, snapshot.networkFailure ? 'The MCP discovery request failed.' : snapshot.hasMcp ? 'An MCP surface is available.' : 'No MCP surface was found.'),\n check('offer-jsonld', offerStatus, offerStatus === 'pass' ? 'Offer JSON-LD is available.' : offerStatus === 'warn' ? 'The offer could not be checked.' : 'No Offer JSON-LD was found.'),\n check('honest-offer', honestStatus, honestStatus === 'pass' ? 'Offer language states the price without pressure.' : honestStatus === 'na' ? 'No offer or Offer block was found.' : 'Offer language contains scarcity, countdown, or urgency copy.'),\n check('llms-txt', llmsStatus, llmsStatus === 'pass' ? 'llms.txt is available.' : llmsStatus === 'warn' ? 'The llms.txt request failed.' : 'llms.txt is missing.'),\n check('sitemap', sitemapStatus, sitemapStatus === 'pass' ? 'sitemap.xml is available.' : sitemapStatus === 'warn' ? 'The sitemap request failed.' : 'sitemap.xml is missing.'),\n ];\n}\n\nexport async function auditTarget(target: string, options: AuditOptions = {}): Promise<AuditReport> {\n const targetStat = await stat(target).catch(() => undefined);\n const snapshot = targetStat?.isDirectory() ? await directorySnapshot(target) : await urlSnapshot(target, options.fetch ?? globalThis.fetch);\n const checks = buildChecks(snapshot);\n const gaps = checks.filter(item => item.status === 'fail' || item.status === 'warn').map(item => ({ id: item.id, note: item.note, fix: FIXES[item.id] }));\n return { target, score: scoreAuditChecks(checks), checks, gaps };\n}\n\nexport function formatAuditReport(report: AuditReport): string {\n const lines = [`${report.target}: ${report.score}/100`, ''];\n for (const item of report.checks) lines.push(`${item.status.toUpperCase().padEnd(4)} ${item.id}: ${item.note}`);\n lines.push('', 'Gaps:');\n if (!report.gaps.length) lines.push('None.');\n else report.gaps.forEach((gap, index) => lines.push(`${index + 1}. ${gap.id}: ${gap.fix}`));\n return lines.join('\\n');\n}\n","{\n \"name\": \"aigentify\",\n \"version\": \"0.1.1\",\n \"mcpName\": \"io.github.pooriaarab/aigentify\",\n \"description\": \"Audit and generate agent-native product surfaces\",\n \"type\": \"module\",\n \"license\": \"MIT\",\n \"bin\": {\"aigentify\": \"dist/cli.js\", \"aigentify-mcp\": \"dist/mcp.js\"},\n \"exports\": {\".\": {\"types\": \"./dist/index.d.ts\", \"import\": \"./dist/index.js\", \"require\": \"./dist/index.cjs\"}},\n \"files\": [\"dist\"],\n \"repository\": {\"type\": \"git\", \"url\": \"git+https://github.com/pooriaarab/aigentify.git\"},\n \"homepage\": \"https://github.com/pooriaarab/aigentify\",\n \"bugs\": \"https://github.com/pooriaarab/aigentify/issues\",\n \"keywords\": [\"agents\", \"agentification\", \"mcp\", \"ai\", \"json-ld\"],\n \"publishConfig\": {\"access\": \"public\"},\n \"scripts\": {\n \"build\": \"tsup\",\n \"test\": \"vitest run\",\n \"lint\": \"tsc --noEmit --pretty false\",\n \"typecheck\": \"tsc --noEmit\",\n \"verify\": \"npm run typecheck && npm run build && npm run test\",\n \"prepublishOnly\": \"npm run verify\"\n },\n \"engines\": {\"node\": \">=20\"},\n \"dependencies\": {\n \"@modelcontextprotocol/sdk\": \"^1.17.5\",\n \"cheerio\": \"^1.1.2\",\n \"commander\": \"^14.0.0\",\n \"jiti\": \"^2.5.1\",\n \"zod\": \"^4.0.0\"\n },\n \"devDependencies\": {\n \"@types/node\": \"^22.15.0\",\n \"tsup\": \"^8.5.0\",\n \"typescript\": \"^5.8.3\",\n \"vitest\": \"^3.2.4\"\n }\n}\n","import pkg from '../package.json';\n\nexport const PKG_NAME = pkg.name;\nexport const VERSION = pkg.version;\nexport const CONFIG_FILENAME = `${PKG_NAME}.config.ts`;\nexport const SERVER_SCHEMA_URL = 'https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json';\n// Any dated MCP registry schema is valid; only the bare `.../server.json` (no `.schema`) 404s.\nexport const SERVER_SCHEMA_RE = /^https:\\/\\/static\\.modelcontextprotocol\\.io\\/schemas\\/\\d{4}-\\d{2}-\\d{2}\\/server\\.schema\\.json$/;\n","export interface OfferConfig {\n name?: string;\n description?: string;\n price?: string | number;\n priceCurrency?: string;\n}\n\nexport interface AigentifyConfig {\n name: string;\n description: string;\n repository: string;\n version?: string;\n mcpUrl?: string;\n npmPackage?: string;\n offer?: OfferConfig;\n}\n\nexport function defineConfig(config: AigentifyConfig): AigentifyConfig {\n return { ...config, repository: config.repository.replace(/\\/+$/, ''), version: config.version ?? '0.1.0' };\n}\n\nexport function defaultConfig(): AigentifyConfig {\n return defineConfig({\n name: 'Your product',\n description: 'A product with an agent-native interface.',\n repository: 'https://github.com/your-org/your-product',\n npmPackage: 'your-package',\n });\n}\n","import type { AigentifyConfig } from '../config.js';\n\nexport function generateAgentsMd(config: AigentifyConfig): string {\n const packageName = config.npmPackage ?? '<NPM_PACKAGE>';\n const mcp = config.mcpUrl ?? `npx ${packageName}`;\n const offer = config.offer;\n const offerLine = offer?.price === undefined ? 'Price: <PRICE>' : `Price: ${offer.priceCurrency ?? 'USD'} ${offer.price}`;\n return `# ${config.name}\n\n## Mental model\n\n${config.name} is ${config.description}\n\nUse the product interface for product work. Use the agent interface for repeatable tasks that need structured results.\n\n## The faces\n\n- Product: ${config.repository}\n- MCP: ${mcp}\n- Package: ${packageName}\n\n## MCP tools\n\n| Tool | Input | Result |\n| --- | --- | --- |\n| audit | target | An agent-readiness report with a score and gaps. |\n| gen | artifact and params | A generated agent-native artifact. |\n\n## The loop\n\n1. Audit the target.\n2. Fix the highest-impact gap.\n3. Generate or publish the missing artifact.\n4. Audit again and keep the report with the release.\n\n## Rules\n\n- Treat the product description and prices as source facts.\n- Return structured data when a tool provides it.\n- Ask for missing information before making a high-impact change.\n- Keep public agent instructions about the product and its use.\n\n## Offer\n\n${offer?.description ?? '<OFFER_DESCRIPTION>'}\n\n${offerLine}\n`;\n}\n","import type { AigentifyConfig } from '../config.js';\n\nexport function generateAgentsRoute(config: AigentifyConfig, framework = 'static'): string {\n if (framework === 'next') {\n return `# Serve /agents.md from a Next route\n\nCopy AGENTS.md to a public directory, or add this force-static route:\n\n\\`\\`\\`ts\nimport { readFile } from 'node:fs/promises';\n\nexport const dynamic = 'force-static';\n\nexport async function GET() {\n const body = await readFile('AGENTS.md', 'utf8');\n return new Response(body, { headers: { 'content-type': 'text/markdown; charset=utf-8' } });\n}\n\\`\\`\\`\n\nProduct: ${config.name}\n`;\n }\n return `# Serve /agents.md\n\nCopy the generated AGENTS.md file to public/agents.md and serve it as a static text/markdown response.\n\nProduct: ${config.name}\n`;\n}\n","import type { AigentifyConfig } from '../config.js';\n\nexport function generateOffer(config: AigentifyConfig): string {\n const offer = config.offer ?? {};\n const data = {\n '@context': 'https://schema.org',\n '@type': 'SoftwareApplication',\n name: config.name,\n description: config.description,\n applicationCategory: 'DeveloperApplication',\n offers: [{\n '@type': 'Offer',\n name: offer.name ?? `${config.name} access`,\n ...(offer.description ? { description: offer.description } : {}),\n ...(offer.price === undefined ? {} : { price: String(offer.price) }),\n priceCurrency: offer.priceCurrency ?? 'USD',\n }],\n };\n return `${JSON.stringify(data, null, 2)}\\n`;\n}\n","import { SERVER_SCHEMA_URL } from '../constants.js';\nimport type { AigentifyConfig } from '../config.js';\n\nexport function generateServerJson(config: AigentifyConfig): string {\n const serverName = config.name.includes('/') ? config.name : `io.github.pooriaarab/${config.name.toLowerCase().replace(/[^a-z0-9._-]+/g, '-')}`;\n const server: Record<string, unknown> = {\n $schema: SERVER_SCHEMA_URL,\n name: serverName,\n description: config.description,\n repository: { url: config.repository, source: 'github' },\n version: config.version ?? '0.1.0',\n };\n if (config.mcpUrl) server.remotes = [{ type: 'streamable-http', url: config.mcpUrl }];\n else server.packages = [{ registryType: 'npm', registryBaseUrl: 'https://registry.npmjs.org', identifier: config.npmPackage ?? 'aigentify', version: config.version ?? '0.1.0', transport: { type: 'stdio' }, runtimeHint: 'npx', packageArguments: [{ type: 'positional', valueHint: 'subcommand', value: 'mcp' }] }];\n return `${JSON.stringify(server, null, 2)}\\n`;\n}\n","import type { AigentifyConfig } from '../config.js';\nimport { defaultConfig, defineConfig } from '../config.js';\nimport { generateAgentsMd } from './agents.js';\nimport { generateAgentsRoute } from './agents-route.js';\nimport { generateOffer } from './offer.js';\nimport { generateServerJson } from './server.js';\nexport * from './agents.js';\nexport * from './agents-route.js';\nexport * from './offer.js';\nexport * from './server.js';\n\nexport type GeneratedArtifact = 'agents-md' | 'server-json' | 'offer' | 'agents-route';\nexport type GenerateParams = Partial<AigentifyConfig> & { framework?: string };\n\nfunction configFromParams(params: GenerateParams = {}): AigentifyConfig {\n const base = defaultConfig();\n return defineConfig({ ...base, ...params, offer: { ...(base.offer ?? {}), ...(params.offer ?? {}) } });\n}\n\nexport function generate(artifact: GeneratedArtifact, params: GenerateParams = {}): string {\n const config = configFromParams(params);\n if (artifact === 'agents-md') return generateAgentsMd(config);\n if (artifact === 'server-json') return generateServerJson(config);\n if (artifact === 'offer') return generateOffer(config);\n if (artifact === 'agents-route') return generateAgentsRoute(config, params.framework);\n throw new Error(`Unknown artifact: ${artifact}`);\n}\n"],"mappings":"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","names":[]}

@@ -49,3 +49,4 @@ #!/usr/bin/env node

name: "aigentify",
version: "0.1.0",
version: "0.1.1",
mcpName: "io.github.pooriaarab/aigentify",
description: "Audit and generate agent-native product surfaces",

@@ -90,3 +91,4 @@ type: "module",

var CONFIG_FILENAME = `${PKG_NAME}.config.ts`;
var SERVER_SCHEMA_URL = "https://static.modelcontextprotocol.io/schemas/2025-07-09/server.schema.json";
var SERVER_SCHEMA_URL = "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json";
var SERVER_SCHEMA_RE = /^https:\/\/static\.modelcontextprotocol\.io\/schemas\/\d{4}-\d{2}-\d{2}\/server\.schema\.json$/;

@@ -159,3 +161,3 @@ // src/audit.ts

if (!value) return { valid: false, reason: "server.json is not valid JSON." };
if (value.$schema !== SERVER_SCHEMA_URL) return { valid: false, reason: `server.json must use the exact schema URL ${SERVER_SCHEMA_URL}.` };
if (typeof value.$schema !== "string" || !SERVER_SCHEMA_RE.test(value.$schema)) return { valid: false, reason: `server.json "$schema" must be a dated MCP registry schema like ${SERVER_SCHEMA_URL} (the bare .../server.json 404s).` };
const missing = ["name", "description", "repository", "version"].filter((key) => !value[key]);

@@ -383,3 +385,3 @@ if (missing.length) return { valid: false, reason: `server.json is missing: ${missing.join(", ")}.` };

if (config.mcpUrl) server.remotes = [{ type: "streamable-http", url: config.mcpUrl }];
else server.packages = [{ registry_type: "npm", identifier: config.npmPackage ?? "aigentify", version: config.version ?? "0.1.0", runtime_hint: "npx", transport: { type: "stdio" } }];
else server.packages = [{ registryType: "npm", registryBaseUrl: "https://registry.npmjs.org", identifier: config.npmPackage ?? "aigentify", version: config.version ?? "0.1.0", transport: { type: "stdio" }, runtimeHint: "npx", packageArguments: [{ type: "positional", valueHint: "subcommand", value: "mcp" }] }];
return `${JSON.stringify(server, null, 2)}

@@ -386,0 +388,0 @@ `;

@@ -1,1 +0,1 @@

{"version":3,"sources":["../src/mcp.ts","../src/audit.ts","../package.json","../src/constants.ts","../src/config.ts","../src/generators/agents.ts","../src/generators/agents-route.ts","../src/generators/offer.ts","../src/generators/server.ts","../src/generators/index.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport { z } from 'zod';\nimport { auditTarget } from './audit.js';\nimport { PKG_NAME, VERSION } from './constants.js';\nimport { generate, type GenerateParams, type GeneratedArtifact } from './generators/index.js';\n\nconst artifacts = ['agents-md', 'server-json', 'offer', 'agents-route'] as const;\n\nexport function createMcpServer(): McpServer {\n const server = new McpServer({ name: PKG_NAME, version: VERSION });\n server.registerTool('audit', {\n description: 'Audit a local directory or live URL for agent-native readiness.',\n inputSchema: { target: z.string() },\n }, async ({ target }) => ({ content: [{ type: 'text', text: JSON.stringify(await auditTarget(target), null, 2) }] }));\n server.registerTool('gen', {\n description: 'Generate an agent-native artifact as text.',\n inputSchema: { artifact: z.enum(artifacts), params: z.record(z.string(), z.unknown()).optional() },\n }, async ({ artifact, params }) => ({ content: [{ type: 'text', text: generate(artifact as GeneratedArtifact, (params ?? {}) as GenerateParams) }] }));\n return server;\n}\n\nexport async function startMcpServer(): Promise<void> {\n const server = createMcpServer();\n await server.connect(new StdioServerTransport());\n}\n\nif (import.meta.url === `file://${process.argv[1]}`) startMcpServer().catch(error => {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`);\n process.exitCode = 1;\n});\n","import { readFile, readdir, stat } from 'node:fs/promises';\nimport path from 'node:path';\nimport { SERVER_SCHEMA_URL } from './constants.js';\n\nexport type AuditStatus = 'pass' | 'fail' | 'warn' | 'na';\nexport interface AuditCheck { id: string; status: AuditStatus; note: string; weight: number }\nexport interface AuditGap { id: string; note: string; fix: string }\nexport interface AuditReport { target: string; score: number; checks: AuditCheck[]; gaps: AuditGap[] }\nexport interface AuditOptions { fetch?: typeof globalThis.fetch }\n\ninterface Endpoint { status: number; contentType: string; text: string }\ninterface Snapshot {\n agents: Endpoint; server: Endpoint; mcp: Endpoint; home: Endpoint; llms: Endpoint; sitemap: Endpoint;\n honestText: string; hasMcp: boolean; networkFailure: boolean;\n}\n\nconst SKIPPED = new Set(['.git', 'node_modules', 'dist', 'coverage', '.next', '_reference_geoaeo']);\nconst WEIGHTS: Record<string, number> = {\n 'agents-md': 15, 'agents-md-public-safe': 10, 'server-json': 15, mcp: 15,\n 'offer-jsonld': 15, 'honest-offer': 10, 'llms-txt': 10, sitemap: 10,\n};\nconst FIXES: Record<string, string> = {\n 'agents-md': 'Add a public AGENTS.md at the target root or serve /agents.md as text/markdown.',\n 'agents-md-public-safe': 'Rewrite AGENTS.md as product guidance. Remove repository paths and contributor instructions.',\n 'server-json': `Add server.json and set \"$schema\" to \"${SERVER_SCHEMA_URL}\". Include a repository and a remotes or packages entry.`,\n mcp: 'Publish server.json, .mcp.json, or an MCP entry point.',\n 'offer-jsonld': 'Publish JSON-LD with @type Offer, or a SoftwareApplication with an offers property.',\n 'honest-offer': 'State the real price plainly. Remove scarcity, countdown, and urgency language.',\n 'llms-txt': 'Publish /llms.txt with a concise product description.',\n sitemap: 'Publish /sitemap.xml for URL discovery.',\n};\n\nfunction check(id: string, status: AuditStatus, note: string): AuditCheck { return { id, status, note, weight: WEIGHTS[id] }; }\n\nexport function scoreAuditChecks(checks: AuditCheck[]): number {\n const relevant = checks.filter(item => item.status !== 'na');\n const total = relevant.reduce((sum, item) => sum + item.weight, 0);\n if (!total) return 0;\n const earned = relevant.reduce((sum, item) => sum + (item.status === 'pass' ? item.weight : item.status === 'warn' ? item.weight / 2 : 0), 0);\n return Math.round((earned / total) * 100);\n}\n\nasync function walkFiles(directory: string): Promise<string[]> {\n const entries = await readdir(directory, { withFileTypes: true });\n const files: string[] = [];\n for (const entry of entries) {\n if (entry.isDirectory() && !SKIPPED.has(entry.name)) files.push(...await walkFiles(path.join(directory, entry.name)));\n else if (entry.isFile()) files.push(path.join(directory, entry.name));\n }\n return files;\n}\n\nasync function readText(file: string | undefined): Promise<string> {\n if (!file) return '';\n try { return await readFile(file, 'utf8'); } catch { return ''; }\n}\n\nfunction findFile(files: string[], name: string): string | undefined {\n return files.find(file => {\n const normalized = file.replaceAll('\\\\', '/');\n return path.basename(normalized) === name || normalized.endsWith(`/${name}/route.ts`);\n });\n}\n\nfunction parseJson(text: string): Record<string, unknown> | undefined {\n try {\n const value: unknown = JSON.parse(text);\n return value && typeof value === 'object' && !Array.isArray(value) ? value as Record<string, unknown> : undefined;\n } catch { return undefined; }\n}\n\nfunction validServer(text: string): { valid: boolean; reason: string } {\n const value = parseJson(text);\n if (!value) return { valid: false, reason: 'server.json is not valid JSON.' };\n if (value.$schema !== SERVER_SCHEMA_URL) return { valid: false, reason: `server.json must use the exact schema URL ${SERVER_SCHEMA_URL}.` };\n const missing = ['name', 'description', 'repository', 'version'].filter(key => !value[key]);\n if (missing.length) return { valid: false, reason: `server.json is missing: ${missing.join(', ')}.` };\n if (!Array.isArray(value.remotes) && !Array.isArray(value.packages)) return { valid: false, reason: 'server.json needs a remotes or packages entry.' };\n return { valid: true, reason: 'server.json has the required MCP registry fields.' };\n}\n\nfunction hasOffer(texts: string[]): boolean {\n return texts.some(text => /\"@type\"\\s*:\\s*\"Offer\"/i.test(text) || /\"@type\"\\s*:\\s*\"SoftwareApplication\"/i.test(text) && /\"offers\"\\s*:/.test(text));\n}\n\nfunction hasUrgency(text: string): boolean {\n return /limited time|act now|hurry|expires|only\\s+\\d+\\s+left|ends in|sign up now|countdown/i.test(text);\n}\n\nfunction publicSafe(text: string): boolean {\n return !(/\\bsrc\\//i.test(text) || /\\bapps\\//i.test(text) || /\\bpackages\\//i.test(text) || /\\b[\\w.-]+\\.ts\\b/i.test(text) || /npm run build/i.test(text) || /\\btsconfig\\b/i.test(text) || /\\bcontributors?\\b/i.test(text) || /^#+\\s*layout\\b/im.test(text));\n}\n\nfunction offerBlock(text: string): string {\n const match = /^#+\\s*Offer\\b/im.exec(text);\n if (!match || match.index === undefined) return '';\n const rest = text.slice(match.index);\n const nextHeading = /^#+\\s+/m.exec(rest.slice(match[0].length));\n return nextHeading?.index === undefined ? rest : rest.slice(0, match[0].length + nextHeading.index);\n}\n\nasync function directorySnapshot(directory: string): Promise<Snapshot> {\n const files = await walkFiles(directory);\n const agentsFile = findFile(files, 'AGENTS.md');\n const serverFile = findFile(files, 'server.json');\n const mcpFile = files.find(file => /(?:^|\\/)\\.mcp\\.json$/.test(file.replaceAll('\\\\', '/')));\n const packageFile = findFile(files, 'package.json');\n const packageText = await readText(packageFile);\n const hasMcpBin = /\"(?:aigentify|[^\"\\n]*mcp[^\"\\n]*)\"\\s*:/i.test(packageText);\n const agentsText = await readText(agentsFile);\n const offerTexts = [agentsText, ...await Promise.all(files.filter(file => /\\.(html?|json|jsonld|md|mdx|tsx|jsx|js|mjs|ts)$/.test(file)).map(readText))];\n const llmsFile = findFile(files, 'llms.txt');\n const sitemapFile = findFile(files, 'sitemap.xml');\n const offerFiles = files.filter(file => /\\.jsonld$|(?:^|\\/)offer[^/]*\\.(?:json|html?)$/i.test(file));\n const honestText = [offerBlock(agentsText), ...await Promise.all(offerFiles.map(readText))].join('\\n');\n return {\n agents: { status: agentsFile ? 200 : 404, contentType: 'text/markdown', text: agentsText },\n server: { status: serverFile ? 200 : 404, contentType: 'application/json', text: await readText(serverFile) },\n mcp: { status: mcpFile || serverFile || hasMcpBin ? 200 : 404, contentType: '', text: '' },\n home: { status: 200, contentType: 'text/plain', text: offerTexts.join('\\n') },\n llms: { status: llmsFile ? 200 : 404, contentType: 'text/plain', text: await readText(llmsFile) },\n sitemap: { status: sitemapFile ? 200 : 404, contentType: 'application/xml', text: await readText(sitemapFile) },\n honestText, hasMcp: Boolean(mcpFile || serverFile || hasMcpBin), networkFailure: false,\n };\n}\n\nasync function fetchText(fetcher: typeof globalThis.fetch, url: string): Promise<Endpoint> {\n try {\n const response = await fetcher(url, { signal: AbortSignal.timeout(8000) });\n return { status: response.status, contentType: response.headers.get('content-type') ?? '', text: await response.text() };\n } catch { return { status: 0, contentType: '', text: '' }; }\n}\n\nasync function urlSnapshot(target: string, fetcher: typeof globalThis.fetch): Promise<Snapshot> {\n const base = target.replace(/\\/+$/, '');\n const [agents, server, mcp, home, llms, sitemap] = await Promise.all([\n fetchText(fetcher, `${base}/agents.md`), fetchText(fetcher, `${base}/server.json`), fetchText(fetcher, `${base}/.well-known/mcp`),\n fetchText(fetcher, base), fetchText(fetcher, `${base}/llms.txt`), fetchText(fetcher, `${base}/sitemap.xml`),\n ]);\n const endpoints = [agents, server, mcp, home, llms, sitemap];\n return { agents, server, mcp, home, llms, sitemap, honestText: [home.text, offerBlock(agents.text)].join('\\n'), hasMcp: server.status >= 200 && server.status < 400 || mcp.status >= 200 && mcp.status < 400, networkFailure: endpoints.every(item => item.status === 0) };\n}\n\nfunction buildChecks(snapshot: Snapshot): AuditCheck[] {\n const agentsPresent = snapshot.agents.status === 200 && snapshot.agents.text.trim().length > 0 && /(?:text\\/(?:markdown|plain)|application\\/markdown)/i.test(snapshot.agents.contentType);\n const agentsStatus: AuditStatus = snapshot.agents.status === 0 ? 'warn' : agentsPresent ? 'pass' : 'fail';\n const publicStatus: AuditStatus = !agentsPresent ? (snapshot.agents.status === 0 ? 'warn' : 'na') : publicSafe(snapshot.agents.text) ? 'pass' : 'warn';\n const serverInfo = snapshot.server.status === 200 ? validServer(snapshot.server.text) : undefined;\n const serverStatus: AuditStatus = snapshot.server.status === 0 ? 'warn' : !snapshot.hasMcp ? 'na' : serverInfo?.valid ? 'pass' : 'fail';\n const mcpStatus: AuditStatus = snapshot.networkFailure ? 'warn' : snapshot.hasMcp ? 'pass' : 'fail';\n const offerTexts = [snapshot.home.text, snapshot.agents.text];\n const offerStatus: AuditStatus = snapshot.home.status === 0 ? 'warn' : hasOffer(offerTexts) ? 'pass' : 'fail';\n const honestStatus: AuditStatus = !hasOffer(offerTexts) && !agentsPresent ? (snapshot.home.status === 0 ? 'warn' : 'na') : hasUrgency(snapshot.honestText) ? 'warn' : 'pass';\n const llmsStatus: AuditStatus = snapshot.llms.status === 0 ? 'warn' : snapshot.llms.status >= 200 && snapshot.llms.status < 400 && snapshot.llms.text.trim() ? 'pass' : 'fail';\n const sitemapStatus: AuditStatus = snapshot.sitemap.status === 0 ? 'warn' : snapshot.sitemap.status >= 200 && snapshot.sitemap.status < 400 && snapshot.sitemap.text.trim() ? 'pass' : 'fail';\n return [\n check('agents-md', agentsStatus, agentsPresent ? 'AGENTS.md is available.' : snapshot.agents.status === 0 ? 'The AGENTS.md request failed.' : 'AGENTS.md is missing.'),\n check('agents-md-public-safe', publicStatus, publicStatus === 'pass' ? 'AGENTS.md describes the product as a public surface.' : publicStatus === 'na' ? 'No AGENTS.md is available to inspect.' : 'AGENTS.md contains repository-internal guidance.'),\n check('server-json', serverStatus, serverInfo?.valid ? serverInfo.reason : serverInfo?.reason ?? (!snapshot.hasMcp ? 'No MCP surface was detected.' : 'server.json is missing.')),\n check('mcp', mcpStatus, snapshot.networkFailure ? 'The MCP discovery request failed.' : snapshot.hasMcp ? 'An MCP surface is available.' : 'No MCP surface was found.'),\n check('offer-jsonld', offerStatus, offerStatus === 'pass' ? 'Offer JSON-LD is available.' : offerStatus === 'warn' ? 'The offer could not be checked.' : 'No Offer JSON-LD was found.'),\n check('honest-offer', honestStatus, honestStatus === 'pass' ? 'Offer language states the price without pressure.' : honestStatus === 'na' ? 'No offer or Offer block was found.' : 'Offer language contains scarcity, countdown, or urgency copy.'),\n check('llms-txt', llmsStatus, llmsStatus === 'pass' ? 'llms.txt is available.' : llmsStatus === 'warn' ? 'The llms.txt request failed.' : 'llms.txt is missing.'),\n check('sitemap', sitemapStatus, sitemapStatus === 'pass' ? 'sitemap.xml is available.' : sitemapStatus === 'warn' ? 'The sitemap request failed.' : 'sitemap.xml is missing.'),\n ];\n}\n\nexport async function auditTarget(target: string, options: AuditOptions = {}): Promise<AuditReport> {\n const targetStat = await stat(target).catch(() => undefined);\n const snapshot = targetStat?.isDirectory() ? await directorySnapshot(target) : await urlSnapshot(target, options.fetch ?? globalThis.fetch);\n const checks = buildChecks(snapshot);\n const gaps = checks.filter(item => item.status === 'fail' || item.status === 'warn').map(item => ({ id: item.id, note: item.note, fix: FIXES[item.id] }));\n return { target, score: scoreAuditChecks(checks), checks, gaps };\n}\n\nexport function formatAuditReport(report: AuditReport): string {\n const lines = [`${report.target}: ${report.score}/100`, ''];\n for (const item of report.checks) lines.push(`${item.status.toUpperCase().padEnd(4)} ${item.id}: ${item.note}`);\n lines.push('', 'Gaps:');\n if (!report.gaps.length) lines.push('None.');\n else report.gaps.forEach((gap, index) => lines.push(`${index + 1}. ${gap.id}: ${gap.fix}`));\n return lines.join('\\n');\n}\n","{\n \"name\": \"aigentify\",\n \"version\": \"0.1.0\",\n \"description\": \"Audit and generate agent-native product surfaces\",\n \"type\": \"module\",\n \"license\": \"MIT\",\n \"bin\": {\"aigentify\": \"dist/cli.js\", \"aigentify-mcp\": \"dist/mcp.js\"},\n \"exports\": {\".\": {\"types\": \"./dist/index.d.ts\", \"import\": \"./dist/index.js\", \"require\": \"./dist/index.cjs\"}},\n \"files\": [\"dist\"],\n \"repository\": {\"type\": \"git\", \"url\": \"git+https://github.com/pooriaarab/aigentify.git\"},\n \"homepage\": \"https://github.com/pooriaarab/aigentify\",\n \"bugs\": \"https://github.com/pooriaarab/aigentify/issues\",\n \"keywords\": [\"agents\", \"agentification\", \"mcp\", \"ai\", \"json-ld\"],\n \"publishConfig\": {\"access\": \"public\"},\n \"scripts\": {\n \"build\": \"tsup\",\n \"test\": \"vitest run\",\n \"lint\": \"tsc --noEmit --pretty false\",\n \"typecheck\": \"tsc --noEmit\",\n \"verify\": \"npm run typecheck && npm run build && npm run test\",\n \"prepublishOnly\": \"npm run verify\"\n },\n \"engines\": {\"node\": \">=20\"},\n \"dependencies\": {\n \"@modelcontextprotocol/sdk\": \"^1.17.5\",\n \"cheerio\": \"^1.1.2\",\n \"commander\": \"^14.0.0\",\n \"jiti\": \"^2.5.1\",\n \"zod\": \"^4.0.0\"\n },\n \"devDependencies\": {\n \"@types/node\": \"^22.15.0\",\n \"tsup\": \"^8.5.0\",\n \"typescript\": \"^5.8.3\",\n \"vitest\": \"^3.2.4\"\n }\n}\n","import pkg from '../package.json';\n\nexport const PKG_NAME = pkg.name;\nexport const VERSION = pkg.version;\nexport const CONFIG_FILENAME = `${PKG_NAME}.config.ts`;\nexport const SERVER_SCHEMA_URL = 'https://static.modelcontextprotocol.io/schemas/2025-07-09/server.schema.json';\n","export interface OfferConfig {\n name?: string;\n description?: string;\n price?: string | number;\n priceCurrency?: string;\n}\n\nexport interface AigentifyConfig {\n name: string;\n description: string;\n repository: string;\n version?: string;\n mcpUrl?: string;\n npmPackage?: string;\n offer?: OfferConfig;\n}\n\nexport function defineConfig(config: AigentifyConfig): AigentifyConfig {\n return { ...config, repository: config.repository.replace(/\\/+$/, ''), version: config.version ?? '0.1.0' };\n}\n\nexport function defaultConfig(): AigentifyConfig {\n return defineConfig({\n name: 'Your product',\n description: 'A product with an agent-native interface.',\n repository: 'https://github.com/your-org/your-product',\n npmPackage: 'your-package',\n });\n}\n","import type { AigentifyConfig } from '../config.js';\n\nexport function generateAgentsMd(config: AigentifyConfig): string {\n const packageName = config.npmPackage ?? '<NPM_PACKAGE>';\n const mcp = config.mcpUrl ?? `npx ${packageName}`;\n const offer = config.offer;\n const offerLine = offer?.price === undefined ? 'Price: <PRICE>' : `Price: ${offer.priceCurrency ?? 'USD'} ${offer.price}`;\n return `# ${config.name}\n\n## Mental model\n\n${config.name} is ${config.description}\n\nUse the product interface for product work. Use the agent interface for repeatable tasks that need structured results.\n\n## The faces\n\n- Product: ${config.repository}\n- MCP: ${mcp}\n- Package: ${packageName}\n\n## MCP tools\n\n| Tool | Input | Result |\n| --- | --- | --- |\n| audit | target | An agent-readiness report with a score and gaps. |\n| gen | artifact and params | A generated agent-native artifact. |\n\n## The loop\n\n1. Audit the target.\n2. Fix the highest-impact gap.\n3. Generate or publish the missing artifact.\n4. Audit again and keep the report with the release.\n\n## Rules\n\n- Treat the product description and prices as source facts.\n- Return structured data when a tool provides it.\n- Ask for missing information before making a high-impact change.\n- Keep public agent instructions about the product and its use.\n\n## Offer\n\n${offer?.description ?? '<OFFER_DESCRIPTION>'}\n\n${offerLine}\n`;\n}\n","import type { AigentifyConfig } from '../config.js';\n\nexport function generateAgentsRoute(config: AigentifyConfig, framework = 'static'): string {\n if (framework === 'next') {\n return `# Serve /agents.md from a Next route\n\nCopy AGENTS.md to a public directory, or add this force-static route:\n\n\\`\\`\\`ts\nimport { readFile } from 'node:fs/promises';\n\nexport const dynamic = 'force-static';\n\nexport async function GET() {\n const body = await readFile('AGENTS.md', 'utf8');\n return new Response(body, { headers: { 'content-type': 'text/markdown; charset=utf-8' } });\n}\n\\`\\`\\`\n\nProduct: ${config.name}\n`;\n }\n return `# Serve /agents.md\n\nCopy the generated AGENTS.md file to public/agents.md and serve it as a static text/markdown response.\n\nProduct: ${config.name}\n`;\n}\n","import type { AigentifyConfig } from '../config.js';\n\nexport function generateOffer(config: AigentifyConfig): string {\n const offer = config.offer ?? {};\n const data = {\n '@context': 'https://schema.org',\n '@type': 'SoftwareApplication',\n name: config.name,\n description: config.description,\n applicationCategory: 'DeveloperApplication',\n offers: [{\n '@type': 'Offer',\n name: offer.name ?? `${config.name} access`,\n ...(offer.description ? { description: offer.description } : {}),\n ...(offer.price === undefined ? {} : { price: String(offer.price) }),\n priceCurrency: offer.priceCurrency ?? 'USD',\n }],\n };\n return `${JSON.stringify(data, null, 2)}\\n`;\n}\n","import { SERVER_SCHEMA_URL } from '../constants.js';\nimport type { AigentifyConfig } from '../config.js';\n\nexport function generateServerJson(config: AigentifyConfig): string {\n const serverName = config.name.includes('/') ? config.name : `io.github.pooriaarab/${config.name.toLowerCase().replace(/[^a-z0-9._-]+/g, '-')}`;\n const server: Record<string, unknown> = {\n $schema: SERVER_SCHEMA_URL,\n name: serverName,\n description: config.description,\n repository: { url: config.repository, source: 'github' },\n version: config.version ?? '0.1.0',\n };\n if (config.mcpUrl) server.remotes = [{ type: 'streamable-http', url: config.mcpUrl }];\n else server.packages = [{ registry_type: 'npm', identifier: config.npmPackage ?? 'aigentify', version: config.version ?? '0.1.0', runtime_hint: 'npx', transport: { type: 'stdio' } }];\n return `${JSON.stringify(server, null, 2)}\\n`;\n}\n","import type { AigentifyConfig } from '../config.js';\nimport { defaultConfig, defineConfig } from '../config.js';\nimport { generateAgentsMd } from './agents.js';\nimport { generateAgentsRoute } from './agents-route.js';\nimport { generateOffer } from './offer.js';\nimport { generateServerJson } from './server.js';\nexport * from './agents.js';\nexport * from './agents-route.js';\nexport * from './offer.js';\nexport * from './server.js';\n\nexport type GeneratedArtifact = 'agents-md' | 'server-json' | 'offer' | 'agents-route';\nexport type GenerateParams = Partial<AigentifyConfig> & { framework?: string };\n\nfunction configFromParams(params: GenerateParams = {}): AigentifyConfig {\n const base = defaultConfig();\n return defineConfig({ ...base, ...params, offer: { ...(base.offer ?? {}), ...(params.offer ?? {}) } });\n}\n\nexport function generate(artifact: GeneratedArtifact, params: GenerateParams = {}): string {\n const config = configFromParams(params);\n if (artifact === 'agents-md') return generateAgentsMd(config);\n if (artifact === 'server-json') return generateServerJson(config);\n if (artifact === 'offer') return generateOffer(config);\n if (artifact === 'agents-route') return generateAgentsRoute(config, params.framework);\n throw new Error(`Unknown artifact: ${artifact}`);\n}\n"],"mappings":"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","names":["path"]}
{"version":3,"sources":["../src/mcp.ts","../src/audit.ts","../package.json","../src/constants.ts","../src/config.ts","../src/generators/agents.ts","../src/generators/agents-route.ts","../src/generators/offer.ts","../src/generators/server.ts","../src/generators/index.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport { z } from 'zod';\nimport { auditTarget } from './audit.js';\nimport { PKG_NAME, VERSION } from './constants.js';\nimport { generate, type GenerateParams, type GeneratedArtifact } from './generators/index.js';\n\nconst artifacts = ['agents-md', 'server-json', 'offer', 'agents-route'] as const;\n\nexport function createMcpServer(): McpServer {\n const server = new McpServer({ name: PKG_NAME, version: VERSION });\n server.registerTool('audit', {\n description: 'Audit a local directory or live URL for agent-native readiness.',\n inputSchema: { target: z.string() },\n }, async ({ target }) => ({ content: [{ type: 'text', text: JSON.stringify(await auditTarget(target), null, 2) }] }));\n server.registerTool('gen', {\n description: 'Generate an agent-native artifact as text.',\n inputSchema: { artifact: z.enum(artifacts), params: z.record(z.string(), z.unknown()).optional() },\n }, async ({ artifact, params }) => ({ content: [{ type: 'text', text: generate(artifact as GeneratedArtifact, (params ?? {}) as GenerateParams) }] }));\n return server;\n}\n\nexport async function startMcpServer(): Promise<void> {\n const server = createMcpServer();\n await server.connect(new StdioServerTransport());\n}\n\nif (import.meta.url === `file://${process.argv[1]}`) startMcpServer().catch(error => {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`);\n process.exitCode = 1;\n});\n","import { readFile, readdir, stat } from 'node:fs/promises';\nimport path from 'node:path';\nimport { SERVER_SCHEMA_URL, SERVER_SCHEMA_RE } from './constants.js';\n\nexport type AuditStatus = 'pass' | 'fail' | 'warn' | 'na';\nexport interface AuditCheck { id: string; status: AuditStatus; note: string; weight: number }\nexport interface AuditGap { id: string; note: string; fix: string }\nexport interface AuditReport { target: string; score: number; checks: AuditCheck[]; gaps: AuditGap[] }\nexport interface AuditOptions { fetch?: typeof globalThis.fetch }\n\ninterface Endpoint { status: number; contentType: string; text: string }\ninterface Snapshot {\n agents: Endpoint; server: Endpoint; mcp: Endpoint; home: Endpoint; llms: Endpoint; sitemap: Endpoint;\n honestText: string; hasMcp: boolean; networkFailure: boolean;\n}\n\nconst SKIPPED = new Set(['.git', 'node_modules', 'dist', 'coverage', '.next', '_reference_geoaeo']);\nconst WEIGHTS: Record<string, number> = {\n 'agents-md': 15, 'agents-md-public-safe': 10, 'server-json': 15, mcp: 15,\n 'offer-jsonld': 15, 'honest-offer': 10, 'llms-txt': 10, sitemap: 10,\n};\nconst FIXES: Record<string, string> = {\n 'agents-md': 'Add a public AGENTS.md at the target root or serve /agents.md as text/markdown.',\n 'agents-md-public-safe': 'Rewrite AGENTS.md as product guidance. Remove repository paths and contributor instructions.',\n 'server-json': `Add server.json and set \"$schema\" to \"${SERVER_SCHEMA_URL}\". Include a repository and a remotes or packages entry.`,\n mcp: 'Publish server.json, .mcp.json, or an MCP entry point.',\n 'offer-jsonld': 'Publish JSON-LD with @type Offer, or a SoftwareApplication with an offers property.',\n 'honest-offer': 'State the real price plainly. Remove scarcity, countdown, and urgency language.',\n 'llms-txt': 'Publish /llms.txt with a concise product description.',\n sitemap: 'Publish /sitemap.xml for URL discovery.',\n};\n\nfunction check(id: string, status: AuditStatus, note: string): AuditCheck { return { id, status, note, weight: WEIGHTS[id] }; }\n\nexport function scoreAuditChecks(checks: AuditCheck[]): number {\n const relevant = checks.filter(item => item.status !== 'na');\n const total = relevant.reduce((sum, item) => sum + item.weight, 0);\n if (!total) return 0;\n const earned = relevant.reduce((sum, item) => sum + (item.status === 'pass' ? item.weight : item.status === 'warn' ? item.weight / 2 : 0), 0);\n return Math.round((earned / total) * 100);\n}\n\nasync function walkFiles(directory: string): Promise<string[]> {\n const entries = await readdir(directory, { withFileTypes: true });\n const files: string[] = [];\n for (const entry of entries) {\n if (entry.isDirectory() && !SKIPPED.has(entry.name)) files.push(...await walkFiles(path.join(directory, entry.name)));\n else if (entry.isFile()) files.push(path.join(directory, entry.name));\n }\n return files;\n}\n\nasync function readText(file: string | undefined): Promise<string> {\n if (!file) return '';\n try { return await readFile(file, 'utf8'); } catch { return ''; }\n}\n\nfunction findFile(files: string[], name: string): string | undefined {\n return files.find(file => {\n const normalized = file.replaceAll('\\\\', '/');\n return path.basename(normalized) === name || normalized.endsWith(`/${name}/route.ts`);\n });\n}\n\nfunction parseJson(text: string): Record<string, unknown> | undefined {\n try {\n const value: unknown = JSON.parse(text);\n return value && typeof value === 'object' && !Array.isArray(value) ? value as Record<string, unknown> : undefined;\n } catch { return undefined; }\n}\n\nfunction validServer(text: string): { valid: boolean; reason: string } {\n const value = parseJson(text);\n if (!value) return { valid: false, reason: 'server.json is not valid JSON.' };\n if (typeof value.$schema !== 'string' || !SERVER_SCHEMA_RE.test(value.$schema)) return { valid: false, reason: `server.json \"$schema\" must be a dated MCP registry schema like ${SERVER_SCHEMA_URL} (the bare .../server.json 404s).` };\n const missing = ['name', 'description', 'repository', 'version'].filter(key => !value[key]);\n if (missing.length) return { valid: false, reason: `server.json is missing: ${missing.join(', ')}.` };\n if (!Array.isArray(value.remotes) && !Array.isArray(value.packages)) return { valid: false, reason: 'server.json needs a remotes or packages entry.' };\n return { valid: true, reason: 'server.json has the required MCP registry fields.' };\n}\n\nfunction hasOffer(texts: string[]): boolean {\n return texts.some(text => /\"@type\"\\s*:\\s*\"Offer\"/i.test(text) || /\"@type\"\\s*:\\s*\"SoftwareApplication\"/i.test(text) && /\"offers\"\\s*:/.test(text));\n}\n\nfunction hasUrgency(text: string): boolean {\n return /limited time|act now|hurry|expires|only\\s+\\d+\\s+left|ends in|sign up now|countdown/i.test(text);\n}\n\nfunction publicSafe(text: string): boolean {\n return !(/\\bsrc\\//i.test(text) || /\\bapps\\//i.test(text) || /\\bpackages\\//i.test(text) || /\\b[\\w.-]+\\.ts\\b/i.test(text) || /npm run build/i.test(text) || /\\btsconfig\\b/i.test(text) || /\\bcontributors?\\b/i.test(text) || /^#+\\s*layout\\b/im.test(text));\n}\n\nfunction offerBlock(text: string): string {\n const match = /^#+\\s*Offer\\b/im.exec(text);\n if (!match || match.index === undefined) return '';\n const rest = text.slice(match.index);\n const nextHeading = /^#+\\s+/m.exec(rest.slice(match[0].length));\n return nextHeading?.index === undefined ? rest : rest.slice(0, match[0].length + nextHeading.index);\n}\n\nasync function directorySnapshot(directory: string): Promise<Snapshot> {\n const files = await walkFiles(directory);\n const agentsFile = findFile(files, 'AGENTS.md');\n const serverFile = findFile(files, 'server.json');\n const mcpFile = files.find(file => /(?:^|\\/)\\.mcp\\.json$/.test(file.replaceAll('\\\\', '/')));\n const packageFile = findFile(files, 'package.json');\n const packageText = await readText(packageFile);\n const hasMcpBin = /\"(?:aigentify|[^\"\\n]*mcp[^\"\\n]*)\"\\s*:/i.test(packageText);\n const agentsText = await readText(agentsFile);\n const offerTexts = [agentsText, ...await Promise.all(files.filter(file => /\\.(html?|json|jsonld|md|mdx|tsx|jsx|js|mjs|ts)$/.test(file)).map(readText))];\n const llmsFile = findFile(files, 'llms.txt');\n const sitemapFile = findFile(files, 'sitemap.xml');\n const offerFiles = files.filter(file => /\\.jsonld$|(?:^|\\/)offer[^/]*\\.(?:json|html?)$/i.test(file));\n const honestText = [offerBlock(agentsText), ...await Promise.all(offerFiles.map(readText))].join('\\n');\n return {\n agents: { status: agentsFile ? 200 : 404, contentType: 'text/markdown', text: agentsText },\n server: { status: serverFile ? 200 : 404, contentType: 'application/json', text: await readText(serverFile) },\n mcp: { status: mcpFile || serverFile || hasMcpBin ? 200 : 404, contentType: '', text: '' },\n home: { status: 200, contentType: 'text/plain', text: offerTexts.join('\\n') },\n llms: { status: llmsFile ? 200 : 404, contentType: 'text/plain', text: await readText(llmsFile) },\n sitemap: { status: sitemapFile ? 200 : 404, contentType: 'application/xml', text: await readText(sitemapFile) },\n honestText, hasMcp: Boolean(mcpFile || serverFile || hasMcpBin), networkFailure: false,\n };\n}\n\nasync function fetchText(fetcher: typeof globalThis.fetch, url: string): Promise<Endpoint> {\n try {\n const response = await fetcher(url, { signal: AbortSignal.timeout(8000) });\n return { status: response.status, contentType: response.headers.get('content-type') ?? '', text: await response.text() };\n } catch { return { status: 0, contentType: '', text: '' }; }\n}\n\nasync function urlSnapshot(target: string, fetcher: typeof globalThis.fetch): Promise<Snapshot> {\n const base = target.replace(/\\/+$/, '');\n const [agents, server, mcp, home, llms, sitemap] = await Promise.all([\n fetchText(fetcher, `${base}/agents.md`), fetchText(fetcher, `${base}/server.json`), fetchText(fetcher, `${base}/.well-known/mcp`),\n fetchText(fetcher, base), fetchText(fetcher, `${base}/llms.txt`), fetchText(fetcher, `${base}/sitemap.xml`),\n ]);\n const endpoints = [agents, server, mcp, home, llms, sitemap];\n return { agents, server, mcp, home, llms, sitemap, honestText: [home.text, offerBlock(agents.text)].join('\\n'), hasMcp: server.status >= 200 && server.status < 400 || mcp.status >= 200 && mcp.status < 400, networkFailure: endpoints.every(item => item.status === 0) };\n}\n\nfunction buildChecks(snapshot: Snapshot): AuditCheck[] {\n const agentsPresent = snapshot.agents.status === 200 && snapshot.agents.text.trim().length > 0 && /(?:text\\/(?:markdown|plain)|application\\/markdown)/i.test(snapshot.agents.contentType);\n const agentsStatus: AuditStatus = snapshot.agents.status === 0 ? 'warn' : agentsPresent ? 'pass' : 'fail';\n const publicStatus: AuditStatus = !agentsPresent ? (snapshot.agents.status === 0 ? 'warn' : 'na') : publicSafe(snapshot.agents.text) ? 'pass' : 'warn';\n const serverInfo = snapshot.server.status === 200 ? validServer(snapshot.server.text) : undefined;\n const serverStatus: AuditStatus = snapshot.server.status === 0 ? 'warn' : !snapshot.hasMcp ? 'na' : serverInfo?.valid ? 'pass' : 'fail';\n const mcpStatus: AuditStatus = snapshot.networkFailure ? 'warn' : snapshot.hasMcp ? 'pass' : 'fail';\n const offerTexts = [snapshot.home.text, snapshot.agents.text];\n const offerStatus: AuditStatus = snapshot.home.status === 0 ? 'warn' : hasOffer(offerTexts) ? 'pass' : 'fail';\n const honestStatus: AuditStatus = !hasOffer(offerTexts) && !agentsPresent ? (snapshot.home.status === 0 ? 'warn' : 'na') : hasUrgency(snapshot.honestText) ? 'warn' : 'pass';\n const llmsStatus: AuditStatus = snapshot.llms.status === 0 ? 'warn' : snapshot.llms.status >= 200 && snapshot.llms.status < 400 && snapshot.llms.text.trim() ? 'pass' : 'fail';\n const sitemapStatus: AuditStatus = snapshot.sitemap.status === 0 ? 'warn' : snapshot.sitemap.status >= 200 && snapshot.sitemap.status < 400 && snapshot.sitemap.text.trim() ? 'pass' : 'fail';\n return [\n check('agents-md', agentsStatus, agentsPresent ? 'AGENTS.md is available.' : snapshot.agents.status === 0 ? 'The AGENTS.md request failed.' : 'AGENTS.md is missing.'),\n check('agents-md-public-safe', publicStatus, publicStatus === 'pass' ? 'AGENTS.md describes the product as a public surface.' : publicStatus === 'na' ? 'No AGENTS.md is available to inspect.' : 'AGENTS.md contains repository-internal guidance.'),\n check('server-json', serverStatus, serverInfo?.valid ? serverInfo.reason : serverInfo?.reason ?? (!snapshot.hasMcp ? 'No MCP surface was detected.' : 'server.json is missing.')),\n check('mcp', mcpStatus, snapshot.networkFailure ? 'The MCP discovery request failed.' : snapshot.hasMcp ? 'An MCP surface is available.' : 'No MCP surface was found.'),\n check('offer-jsonld', offerStatus, offerStatus === 'pass' ? 'Offer JSON-LD is available.' : offerStatus === 'warn' ? 'The offer could not be checked.' : 'No Offer JSON-LD was found.'),\n check('honest-offer', honestStatus, honestStatus === 'pass' ? 'Offer language states the price without pressure.' : honestStatus === 'na' ? 'No offer or Offer block was found.' : 'Offer language contains scarcity, countdown, or urgency copy.'),\n check('llms-txt', llmsStatus, llmsStatus === 'pass' ? 'llms.txt is available.' : llmsStatus === 'warn' ? 'The llms.txt request failed.' : 'llms.txt is missing.'),\n check('sitemap', sitemapStatus, sitemapStatus === 'pass' ? 'sitemap.xml is available.' : sitemapStatus === 'warn' ? 'The sitemap request failed.' : 'sitemap.xml is missing.'),\n ];\n}\n\nexport async function auditTarget(target: string, options: AuditOptions = {}): Promise<AuditReport> {\n const targetStat = await stat(target).catch(() => undefined);\n const snapshot = targetStat?.isDirectory() ? await directorySnapshot(target) : await urlSnapshot(target, options.fetch ?? globalThis.fetch);\n const checks = buildChecks(snapshot);\n const gaps = checks.filter(item => item.status === 'fail' || item.status === 'warn').map(item => ({ id: item.id, note: item.note, fix: FIXES[item.id] }));\n return { target, score: scoreAuditChecks(checks), checks, gaps };\n}\n\nexport function formatAuditReport(report: AuditReport): string {\n const lines = [`${report.target}: ${report.score}/100`, ''];\n for (const item of report.checks) lines.push(`${item.status.toUpperCase().padEnd(4)} ${item.id}: ${item.note}`);\n lines.push('', 'Gaps:');\n if (!report.gaps.length) lines.push('None.');\n else report.gaps.forEach((gap, index) => lines.push(`${index + 1}. ${gap.id}: ${gap.fix}`));\n return lines.join('\\n');\n}\n","{\n \"name\": \"aigentify\",\n \"version\": \"0.1.1\",\n \"mcpName\": \"io.github.pooriaarab/aigentify\",\n \"description\": \"Audit and generate agent-native product surfaces\",\n \"type\": \"module\",\n \"license\": \"MIT\",\n \"bin\": {\"aigentify\": \"dist/cli.js\", \"aigentify-mcp\": \"dist/mcp.js\"},\n \"exports\": {\".\": {\"types\": \"./dist/index.d.ts\", \"import\": \"./dist/index.js\", \"require\": \"./dist/index.cjs\"}},\n \"files\": [\"dist\"],\n \"repository\": {\"type\": \"git\", \"url\": \"git+https://github.com/pooriaarab/aigentify.git\"},\n \"homepage\": \"https://github.com/pooriaarab/aigentify\",\n \"bugs\": \"https://github.com/pooriaarab/aigentify/issues\",\n \"keywords\": [\"agents\", \"agentification\", \"mcp\", \"ai\", \"json-ld\"],\n \"publishConfig\": {\"access\": \"public\"},\n \"scripts\": {\n \"build\": \"tsup\",\n \"test\": \"vitest run\",\n \"lint\": \"tsc --noEmit --pretty false\",\n \"typecheck\": \"tsc --noEmit\",\n \"verify\": \"npm run typecheck && npm run build && npm run test\",\n \"prepublishOnly\": \"npm run verify\"\n },\n \"engines\": {\"node\": \">=20\"},\n \"dependencies\": {\n \"@modelcontextprotocol/sdk\": \"^1.17.5\",\n \"cheerio\": \"^1.1.2\",\n \"commander\": \"^14.0.0\",\n \"jiti\": \"^2.5.1\",\n \"zod\": \"^4.0.0\"\n },\n \"devDependencies\": {\n \"@types/node\": \"^22.15.0\",\n \"tsup\": \"^8.5.0\",\n \"typescript\": \"^5.8.3\",\n \"vitest\": \"^3.2.4\"\n }\n}\n","import pkg from '../package.json';\n\nexport const PKG_NAME = pkg.name;\nexport const VERSION = pkg.version;\nexport const CONFIG_FILENAME = `${PKG_NAME}.config.ts`;\nexport const SERVER_SCHEMA_URL = 'https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json';\n// Any dated MCP registry schema is valid; only the bare `.../server.json` (no `.schema`) 404s.\nexport const SERVER_SCHEMA_RE = /^https:\\/\\/static\\.modelcontextprotocol\\.io\\/schemas\\/\\d{4}-\\d{2}-\\d{2}\\/server\\.schema\\.json$/;\n","export interface OfferConfig {\n name?: string;\n description?: string;\n price?: string | number;\n priceCurrency?: string;\n}\n\nexport interface AigentifyConfig {\n name: string;\n description: string;\n repository: string;\n version?: string;\n mcpUrl?: string;\n npmPackage?: string;\n offer?: OfferConfig;\n}\n\nexport function defineConfig(config: AigentifyConfig): AigentifyConfig {\n return { ...config, repository: config.repository.replace(/\\/+$/, ''), version: config.version ?? '0.1.0' };\n}\n\nexport function defaultConfig(): AigentifyConfig {\n return defineConfig({\n name: 'Your product',\n description: 'A product with an agent-native interface.',\n repository: 'https://github.com/your-org/your-product',\n npmPackage: 'your-package',\n });\n}\n","import type { AigentifyConfig } from '../config.js';\n\nexport function generateAgentsMd(config: AigentifyConfig): string {\n const packageName = config.npmPackage ?? '<NPM_PACKAGE>';\n const mcp = config.mcpUrl ?? `npx ${packageName}`;\n const offer = config.offer;\n const offerLine = offer?.price === undefined ? 'Price: <PRICE>' : `Price: ${offer.priceCurrency ?? 'USD'} ${offer.price}`;\n return `# ${config.name}\n\n## Mental model\n\n${config.name} is ${config.description}\n\nUse the product interface for product work. Use the agent interface for repeatable tasks that need structured results.\n\n## The faces\n\n- Product: ${config.repository}\n- MCP: ${mcp}\n- Package: ${packageName}\n\n## MCP tools\n\n| Tool | Input | Result |\n| --- | --- | --- |\n| audit | target | An agent-readiness report with a score and gaps. |\n| gen | artifact and params | A generated agent-native artifact. |\n\n## The loop\n\n1. Audit the target.\n2. Fix the highest-impact gap.\n3. Generate or publish the missing artifact.\n4. Audit again and keep the report with the release.\n\n## Rules\n\n- Treat the product description and prices as source facts.\n- Return structured data when a tool provides it.\n- Ask for missing information before making a high-impact change.\n- Keep public agent instructions about the product and its use.\n\n## Offer\n\n${offer?.description ?? '<OFFER_DESCRIPTION>'}\n\n${offerLine}\n`;\n}\n","import type { AigentifyConfig } from '../config.js';\n\nexport function generateAgentsRoute(config: AigentifyConfig, framework = 'static'): string {\n if (framework === 'next') {\n return `# Serve /agents.md from a Next route\n\nCopy AGENTS.md to a public directory, or add this force-static route:\n\n\\`\\`\\`ts\nimport { readFile } from 'node:fs/promises';\n\nexport const dynamic = 'force-static';\n\nexport async function GET() {\n const body = await readFile('AGENTS.md', 'utf8');\n return new Response(body, { headers: { 'content-type': 'text/markdown; charset=utf-8' } });\n}\n\\`\\`\\`\n\nProduct: ${config.name}\n`;\n }\n return `# Serve /agents.md\n\nCopy the generated AGENTS.md file to public/agents.md and serve it as a static text/markdown response.\n\nProduct: ${config.name}\n`;\n}\n","import type { AigentifyConfig } from '../config.js';\n\nexport function generateOffer(config: AigentifyConfig): string {\n const offer = config.offer ?? {};\n const data = {\n '@context': 'https://schema.org',\n '@type': 'SoftwareApplication',\n name: config.name,\n description: config.description,\n applicationCategory: 'DeveloperApplication',\n offers: [{\n '@type': 'Offer',\n name: offer.name ?? `${config.name} access`,\n ...(offer.description ? { description: offer.description } : {}),\n ...(offer.price === undefined ? {} : { price: String(offer.price) }),\n priceCurrency: offer.priceCurrency ?? 'USD',\n }],\n };\n return `${JSON.stringify(data, null, 2)}\\n`;\n}\n","import { SERVER_SCHEMA_URL } from '../constants.js';\nimport type { AigentifyConfig } from '../config.js';\n\nexport function generateServerJson(config: AigentifyConfig): string {\n const serverName = config.name.includes('/') ? config.name : `io.github.pooriaarab/${config.name.toLowerCase().replace(/[^a-z0-9._-]+/g, '-')}`;\n const server: Record<string, unknown> = {\n $schema: SERVER_SCHEMA_URL,\n name: serverName,\n description: config.description,\n repository: { url: config.repository, source: 'github' },\n version: config.version ?? '0.1.0',\n };\n if (config.mcpUrl) server.remotes = [{ type: 'streamable-http', url: config.mcpUrl }];\n else server.packages = [{ registryType: 'npm', registryBaseUrl: 'https://registry.npmjs.org', identifier: config.npmPackage ?? 'aigentify', version: config.version ?? '0.1.0', transport: { type: 'stdio' }, runtimeHint: 'npx', packageArguments: [{ type: 'positional', valueHint: 'subcommand', value: 'mcp' }] }];\n return `${JSON.stringify(server, null, 2)}\\n`;\n}\n","import type { AigentifyConfig } from '../config.js';\nimport { defaultConfig, defineConfig } from '../config.js';\nimport { generateAgentsMd } from './agents.js';\nimport { generateAgentsRoute } from './agents-route.js';\nimport { generateOffer } from './offer.js';\nimport { generateServerJson } from './server.js';\nexport * from './agents.js';\nexport * from './agents-route.js';\nexport * from './offer.js';\nexport * from './server.js';\n\nexport type GeneratedArtifact = 'agents-md' | 'server-json' | 'offer' | 'agents-route';\nexport type GenerateParams = Partial<AigentifyConfig> & { framework?: string };\n\nfunction configFromParams(params: GenerateParams = {}): AigentifyConfig {\n const base = defaultConfig();\n return defineConfig({ ...base, ...params, offer: { ...(base.offer ?? {}), ...(params.offer ?? {}) } });\n}\n\nexport function generate(artifact: GeneratedArtifact, params: GenerateParams = {}): string {\n const config = configFromParams(params);\n if (artifact === 'agents-md') return generateAgentsMd(config);\n if (artifact === 'server-json') return generateServerJson(config);\n if (artifact === 'offer') return generateOffer(config);\n if (artifact === 'agents-route') return generateAgentsRoute(config, params.framework);\n throw new Error(`Unknown artifact: ${artifact}`);\n}\n"],"mappings":"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","names":["path"]}

@@ -15,3 +15,4 @@ #!/usr/bin/env node

name: "aigentify",
version: "0.1.0",
version: "0.1.1",
mcpName: "io.github.pooriaarab/aigentify",
description: "Audit and generate agent-native product surfaces",

@@ -56,3 +57,4 @@ type: "module",

var CONFIG_FILENAME = `${PKG_NAME}.config.ts`;
var SERVER_SCHEMA_URL = "https://static.modelcontextprotocol.io/schemas/2025-07-09/server.schema.json";
var SERVER_SCHEMA_URL = "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json";
var SERVER_SCHEMA_RE = /^https:\/\/static\.modelcontextprotocol\.io\/schemas\/\d{4}-\d{2}-\d{2}\/server\.schema\.json$/;

@@ -125,3 +127,3 @@ // src/audit.ts

if (!value) return { valid: false, reason: "server.json is not valid JSON." };
if (value.$schema !== SERVER_SCHEMA_URL) return { valid: false, reason: `server.json must use the exact schema URL ${SERVER_SCHEMA_URL}.` };
if (typeof value.$schema !== "string" || !SERVER_SCHEMA_RE.test(value.$schema)) return { valid: false, reason: `server.json "$schema" must be a dated MCP registry schema like ${SERVER_SCHEMA_URL} (the bare .../server.json 404s).` };
const missing = ["name", "description", "repository", "version"].filter((key) => !value[key]);

@@ -349,3 +351,3 @@ if (missing.length) return { valid: false, reason: `server.json is missing: ${missing.join(", ")}.` };

if (config.mcpUrl) server.remotes = [{ type: "streamable-http", url: config.mcpUrl }];
else server.packages = [{ registry_type: "npm", identifier: config.npmPackage ?? "aigentify", version: config.version ?? "0.1.0", runtime_hint: "npx", transport: { type: "stdio" } }];
else server.packages = [{ registryType: "npm", registryBaseUrl: "https://registry.npmjs.org", identifier: config.npmPackage ?? "aigentify", version: config.version ?? "0.1.0", transport: { type: "stdio" }, runtimeHint: "npx", packageArguments: [{ type: "positional", valueHint: "subcommand", value: "mcp" }] }];
return `${JSON.stringify(server, null, 2)}

@@ -352,0 +354,0 @@ `;

@@ -1,1 +0,1 @@

{"version":3,"sources":["../src/mcp.ts","../src/audit.ts","../package.json","../src/constants.ts","../src/config.ts","../src/generators/agents.ts","../src/generators/agents-route.ts","../src/generators/offer.ts","../src/generators/server.ts","../src/generators/index.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport { z } from 'zod';\nimport { auditTarget } from './audit.js';\nimport { PKG_NAME, VERSION } from './constants.js';\nimport { generate, type GenerateParams, type GeneratedArtifact } from './generators/index.js';\n\nconst artifacts = ['agents-md', 'server-json', 'offer', 'agents-route'] as const;\n\nexport function createMcpServer(): McpServer {\n const server = new McpServer({ name: PKG_NAME, version: VERSION });\n server.registerTool('audit', {\n description: 'Audit a local directory or live URL for agent-native readiness.',\n inputSchema: { target: z.string() },\n }, async ({ target }) => ({ content: [{ type: 'text', text: JSON.stringify(await auditTarget(target), null, 2) }] }));\n server.registerTool('gen', {\n description: 'Generate an agent-native artifact as text.',\n inputSchema: { artifact: z.enum(artifacts), params: z.record(z.string(), z.unknown()).optional() },\n }, async ({ artifact, params }) => ({ content: [{ type: 'text', text: generate(artifact as GeneratedArtifact, (params ?? {}) as GenerateParams) }] }));\n return server;\n}\n\nexport async function startMcpServer(): Promise<void> {\n const server = createMcpServer();\n await server.connect(new StdioServerTransport());\n}\n\nif (import.meta.url === `file://${process.argv[1]}`) startMcpServer().catch(error => {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`);\n process.exitCode = 1;\n});\n","import { readFile, readdir, stat } from 'node:fs/promises';\nimport path from 'node:path';\nimport { SERVER_SCHEMA_URL } from './constants.js';\n\nexport type AuditStatus = 'pass' | 'fail' | 'warn' | 'na';\nexport interface AuditCheck { id: string; status: AuditStatus; note: string; weight: number }\nexport interface AuditGap { id: string; note: string; fix: string }\nexport interface AuditReport { target: string; score: number; checks: AuditCheck[]; gaps: AuditGap[] }\nexport interface AuditOptions { fetch?: typeof globalThis.fetch }\n\ninterface Endpoint { status: number; contentType: string; text: string }\ninterface Snapshot {\n agents: Endpoint; server: Endpoint; mcp: Endpoint; home: Endpoint; llms: Endpoint; sitemap: Endpoint;\n honestText: string; hasMcp: boolean; networkFailure: boolean;\n}\n\nconst SKIPPED = new Set(['.git', 'node_modules', 'dist', 'coverage', '.next', '_reference_geoaeo']);\nconst WEIGHTS: Record<string, number> = {\n 'agents-md': 15, 'agents-md-public-safe': 10, 'server-json': 15, mcp: 15,\n 'offer-jsonld': 15, 'honest-offer': 10, 'llms-txt': 10, sitemap: 10,\n};\nconst FIXES: Record<string, string> = {\n 'agents-md': 'Add a public AGENTS.md at the target root or serve /agents.md as text/markdown.',\n 'agents-md-public-safe': 'Rewrite AGENTS.md as product guidance. Remove repository paths and contributor instructions.',\n 'server-json': `Add server.json and set \"$schema\" to \"${SERVER_SCHEMA_URL}\". Include a repository and a remotes or packages entry.`,\n mcp: 'Publish server.json, .mcp.json, or an MCP entry point.',\n 'offer-jsonld': 'Publish JSON-LD with @type Offer, or a SoftwareApplication with an offers property.',\n 'honest-offer': 'State the real price plainly. Remove scarcity, countdown, and urgency language.',\n 'llms-txt': 'Publish /llms.txt with a concise product description.',\n sitemap: 'Publish /sitemap.xml for URL discovery.',\n};\n\nfunction check(id: string, status: AuditStatus, note: string): AuditCheck { return { id, status, note, weight: WEIGHTS[id] }; }\n\nexport function scoreAuditChecks(checks: AuditCheck[]): number {\n const relevant = checks.filter(item => item.status !== 'na');\n const total = relevant.reduce((sum, item) => sum + item.weight, 0);\n if (!total) return 0;\n const earned = relevant.reduce((sum, item) => sum + (item.status === 'pass' ? item.weight : item.status === 'warn' ? item.weight / 2 : 0), 0);\n return Math.round((earned / total) * 100);\n}\n\nasync function walkFiles(directory: string): Promise<string[]> {\n const entries = await readdir(directory, { withFileTypes: true });\n const files: string[] = [];\n for (const entry of entries) {\n if (entry.isDirectory() && !SKIPPED.has(entry.name)) files.push(...await walkFiles(path.join(directory, entry.name)));\n else if (entry.isFile()) files.push(path.join(directory, entry.name));\n }\n return files;\n}\n\nasync function readText(file: string | undefined): Promise<string> {\n if (!file) return '';\n try { return await readFile(file, 'utf8'); } catch { return ''; }\n}\n\nfunction findFile(files: string[], name: string): string | undefined {\n return files.find(file => {\n const normalized = file.replaceAll('\\\\', '/');\n return path.basename(normalized) === name || normalized.endsWith(`/${name}/route.ts`);\n });\n}\n\nfunction parseJson(text: string): Record<string, unknown> | undefined {\n try {\n const value: unknown = JSON.parse(text);\n return value && typeof value === 'object' && !Array.isArray(value) ? value as Record<string, unknown> : undefined;\n } catch { return undefined; }\n}\n\nfunction validServer(text: string): { valid: boolean; reason: string } {\n const value = parseJson(text);\n if (!value) return { valid: false, reason: 'server.json is not valid JSON.' };\n if (value.$schema !== SERVER_SCHEMA_URL) return { valid: false, reason: `server.json must use the exact schema URL ${SERVER_SCHEMA_URL}.` };\n const missing = ['name', 'description', 'repository', 'version'].filter(key => !value[key]);\n if (missing.length) return { valid: false, reason: `server.json is missing: ${missing.join(', ')}.` };\n if (!Array.isArray(value.remotes) && !Array.isArray(value.packages)) return { valid: false, reason: 'server.json needs a remotes or packages entry.' };\n return { valid: true, reason: 'server.json has the required MCP registry fields.' };\n}\n\nfunction hasOffer(texts: string[]): boolean {\n return texts.some(text => /\"@type\"\\s*:\\s*\"Offer\"/i.test(text) || /\"@type\"\\s*:\\s*\"SoftwareApplication\"/i.test(text) && /\"offers\"\\s*:/.test(text));\n}\n\nfunction hasUrgency(text: string): boolean {\n return /limited time|act now|hurry|expires|only\\s+\\d+\\s+left|ends in|sign up now|countdown/i.test(text);\n}\n\nfunction publicSafe(text: string): boolean {\n return !(/\\bsrc\\//i.test(text) || /\\bapps\\//i.test(text) || /\\bpackages\\//i.test(text) || /\\b[\\w.-]+\\.ts\\b/i.test(text) || /npm run build/i.test(text) || /\\btsconfig\\b/i.test(text) || /\\bcontributors?\\b/i.test(text) || /^#+\\s*layout\\b/im.test(text));\n}\n\nfunction offerBlock(text: string): string {\n const match = /^#+\\s*Offer\\b/im.exec(text);\n if (!match || match.index === undefined) return '';\n const rest = text.slice(match.index);\n const nextHeading = /^#+\\s+/m.exec(rest.slice(match[0].length));\n return nextHeading?.index === undefined ? rest : rest.slice(0, match[0].length + nextHeading.index);\n}\n\nasync function directorySnapshot(directory: string): Promise<Snapshot> {\n const files = await walkFiles(directory);\n const agentsFile = findFile(files, 'AGENTS.md');\n const serverFile = findFile(files, 'server.json');\n const mcpFile = files.find(file => /(?:^|\\/)\\.mcp\\.json$/.test(file.replaceAll('\\\\', '/')));\n const packageFile = findFile(files, 'package.json');\n const packageText = await readText(packageFile);\n const hasMcpBin = /\"(?:aigentify|[^\"\\n]*mcp[^\"\\n]*)\"\\s*:/i.test(packageText);\n const agentsText = await readText(agentsFile);\n const offerTexts = [agentsText, ...await Promise.all(files.filter(file => /\\.(html?|json|jsonld|md|mdx|tsx|jsx|js|mjs|ts)$/.test(file)).map(readText))];\n const llmsFile = findFile(files, 'llms.txt');\n const sitemapFile = findFile(files, 'sitemap.xml');\n const offerFiles = files.filter(file => /\\.jsonld$|(?:^|\\/)offer[^/]*\\.(?:json|html?)$/i.test(file));\n const honestText = [offerBlock(agentsText), ...await Promise.all(offerFiles.map(readText))].join('\\n');\n return {\n agents: { status: agentsFile ? 200 : 404, contentType: 'text/markdown', text: agentsText },\n server: { status: serverFile ? 200 : 404, contentType: 'application/json', text: await readText(serverFile) },\n mcp: { status: mcpFile || serverFile || hasMcpBin ? 200 : 404, contentType: '', text: '' },\n home: { status: 200, contentType: 'text/plain', text: offerTexts.join('\\n') },\n llms: { status: llmsFile ? 200 : 404, contentType: 'text/plain', text: await readText(llmsFile) },\n sitemap: { status: sitemapFile ? 200 : 404, contentType: 'application/xml', text: await readText(sitemapFile) },\n honestText, hasMcp: Boolean(mcpFile || serverFile || hasMcpBin), networkFailure: false,\n };\n}\n\nasync function fetchText(fetcher: typeof globalThis.fetch, url: string): Promise<Endpoint> {\n try {\n const response = await fetcher(url, { signal: AbortSignal.timeout(8000) });\n return { status: response.status, contentType: response.headers.get('content-type') ?? '', text: await response.text() };\n } catch { return { status: 0, contentType: '', text: '' }; }\n}\n\nasync function urlSnapshot(target: string, fetcher: typeof globalThis.fetch): Promise<Snapshot> {\n const base = target.replace(/\\/+$/, '');\n const [agents, server, mcp, home, llms, sitemap] = await Promise.all([\n fetchText(fetcher, `${base}/agents.md`), fetchText(fetcher, `${base}/server.json`), fetchText(fetcher, `${base}/.well-known/mcp`),\n fetchText(fetcher, base), fetchText(fetcher, `${base}/llms.txt`), fetchText(fetcher, `${base}/sitemap.xml`),\n ]);\n const endpoints = [agents, server, mcp, home, llms, sitemap];\n return { agents, server, mcp, home, llms, sitemap, honestText: [home.text, offerBlock(agents.text)].join('\\n'), hasMcp: server.status >= 200 && server.status < 400 || mcp.status >= 200 && mcp.status < 400, networkFailure: endpoints.every(item => item.status === 0) };\n}\n\nfunction buildChecks(snapshot: Snapshot): AuditCheck[] {\n const agentsPresent = snapshot.agents.status === 200 && snapshot.agents.text.trim().length > 0 && /(?:text\\/(?:markdown|plain)|application\\/markdown)/i.test(snapshot.agents.contentType);\n const agentsStatus: AuditStatus = snapshot.agents.status === 0 ? 'warn' : agentsPresent ? 'pass' : 'fail';\n const publicStatus: AuditStatus = !agentsPresent ? (snapshot.agents.status === 0 ? 'warn' : 'na') : publicSafe(snapshot.agents.text) ? 'pass' : 'warn';\n const serverInfo = snapshot.server.status === 200 ? validServer(snapshot.server.text) : undefined;\n const serverStatus: AuditStatus = snapshot.server.status === 0 ? 'warn' : !snapshot.hasMcp ? 'na' : serverInfo?.valid ? 'pass' : 'fail';\n const mcpStatus: AuditStatus = snapshot.networkFailure ? 'warn' : snapshot.hasMcp ? 'pass' : 'fail';\n const offerTexts = [snapshot.home.text, snapshot.agents.text];\n const offerStatus: AuditStatus = snapshot.home.status === 0 ? 'warn' : hasOffer(offerTexts) ? 'pass' : 'fail';\n const honestStatus: AuditStatus = !hasOffer(offerTexts) && !agentsPresent ? (snapshot.home.status === 0 ? 'warn' : 'na') : hasUrgency(snapshot.honestText) ? 'warn' : 'pass';\n const llmsStatus: AuditStatus = snapshot.llms.status === 0 ? 'warn' : snapshot.llms.status >= 200 && snapshot.llms.status < 400 && snapshot.llms.text.trim() ? 'pass' : 'fail';\n const sitemapStatus: AuditStatus = snapshot.sitemap.status === 0 ? 'warn' : snapshot.sitemap.status >= 200 && snapshot.sitemap.status < 400 && snapshot.sitemap.text.trim() ? 'pass' : 'fail';\n return [\n check('agents-md', agentsStatus, agentsPresent ? 'AGENTS.md is available.' : snapshot.agents.status === 0 ? 'The AGENTS.md request failed.' : 'AGENTS.md is missing.'),\n check('agents-md-public-safe', publicStatus, publicStatus === 'pass' ? 'AGENTS.md describes the product as a public surface.' : publicStatus === 'na' ? 'No AGENTS.md is available to inspect.' : 'AGENTS.md contains repository-internal guidance.'),\n check('server-json', serverStatus, serverInfo?.valid ? serverInfo.reason : serverInfo?.reason ?? (!snapshot.hasMcp ? 'No MCP surface was detected.' : 'server.json is missing.')),\n check('mcp', mcpStatus, snapshot.networkFailure ? 'The MCP discovery request failed.' : snapshot.hasMcp ? 'An MCP surface is available.' : 'No MCP surface was found.'),\n check('offer-jsonld', offerStatus, offerStatus === 'pass' ? 'Offer JSON-LD is available.' : offerStatus === 'warn' ? 'The offer could not be checked.' : 'No Offer JSON-LD was found.'),\n check('honest-offer', honestStatus, honestStatus === 'pass' ? 'Offer language states the price without pressure.' : honestStatus === 'na' ? 'No offer or Offer block was found.' : 'Offer language contains scarcity, countdown, or urgency copy.'),\n check('llms-txt', llmsStatus, llmsStatus === 'pass' ? 'llms.txt is available.' : llmsStatus === 'warn' ? 'The llms.txt request failed.' : 'llms.txt is missing.'),\n check('sitemap', sitemapStatus, sitemapStatus === 'pass' ? 'sitemap.xml is available.' : sitemapStatus === 'warn' ? 'The sitemap request failed.' : 'sitemap.xml is missing.'),\n ];\n}\n\nexport async function auditTarget(target: string, options: AuditOptions = {}): Promise<AuditReport> {\n const targetStat = await stat(target).catch(() => undefined);\n const snapshot = targetStat?.isDirectory() ? await directorySnapshot(target) : await urlSnapshot(target, options.fetch ?? globalThis.fetch);\n const checks = buildChecks(snapshot);\n const gaps = checks.filter(item => item.status === 'fail' || item.status === 'warn').map(item => ({ id: item.id, note: item.note, fix: FIXES[item.id] }));\n return { target, score: scoreAuditChecks(checks), checks, gaps };\n}\n\nexport function formatAuditReport(report: AuditReport): string {\n const lines = [`${report.target}: ${report.score}/100`, ''];\n for (const item of report.checks) lines.push(`${item.status.toUpperCase().padEnd(4)} ${item.id}: ${item.note}`);\n lines.push('', 'Gaps:');\n if (!report.gaps.length) lines.push('None.');\n else report.gaps.forEach((gap, index) => lines.push(`${index + 1}. ${gap.id}: ${gap.fix}`));\n return lines.join('\\n');\n}\n","{\n \"name\": \"aigentify\",\n \"version\": \"0.1.0\",\n \"description\": \"Audit and generate agent-native product surfaces\",\n \"type\": \"module\",\n \"license\": \"MIT\",\n \"bin\": {\"aigentify\": \"dist/cli.js\", \"aigentify-mcp\": \"dist/mcp.js\"},\n \"exports\": {\".\": {\"types\": \"./dist/index.d.ts\", \"import\": \"./dist/index.js\", \"require\": \"./dist/index.cjs\"}},\n \"files\": [\"dist\"],\n \"repository\": {\"type\": \"git\", \"url\": \"git+https://github.com/pooriaarab/aigentify.git\"},\n \"homepage\": \"https://github.com/pooriaarab/aigentify\",\n \"bugs\": \"https://github.com/pooriaarab/aigentify/issues\",\n \"keywords\": [\"agents\", \"agentification\", \"mcp\", \"ai\", \"json-ld\"],\n \"publishConfig\": {\"access\": \"public\"},\n \"scripts\": {\n \"build\": \"tsup\",\n \"test\": \"vitest run\",\n \"lint\": \"tsc --noEmit --pretty false\",\n \"typecheck\": \"tsc --noEmit\",\n \"verify\": \"npm run typecheck && npm run build && npm run test\",\n \"prepublishOnly\": \"npm run verify\"\n },\n \"engines\": {\"node\": \">=20\"},\n \"dependencies\": {\n \"@modelcontextprotocol/sdk\": \"^1.17.5\",\n \"cheerio\": \"^1.1.2\",\n \"commander\": \"^14.0.0\",\n \"jiti\": \"^2.5.1\",\n \"zod\": \"^4.0.0\"\n },\n \"devDependencies\": {\n \"@types/node\": \"^22.15.0\",\n \"tsup\": \"^8.5.0\",\n \"typescript\": \"^5.8.3\",\n \"vitest\": \"^3.2.4\"\n }\n}\n","import pkg from '../package.json';\n\nexport const PKG_NAME = pkg.name;\nexport const VERSION = pkg.version;\nexport const CONFIG_FILENAME = `${PKG_NAME}.config.ts`;\nexport const SERVER_SCHEMA_URL = 'https://static.modelcontextprotocol.io/schemas/2025-07-09/server.schema.json';\n","export interface OfferConfig {\n name?: string;\n description?: string;\n price?: string | number;\n priceCurrency?: string;\n}\n\nexport interface AigentifyConfig {\n name: string;\n description: string;\n repository: string;\n version?: string;\n mcpUrl?: string;\n npmPackage?: string;\n offer?: OfferConfig;\n}\n\nexport function defineConfig(config: AigentifyConfig): AigentifyConfig {\n return { ...config, repository: config.repository.replace(/\\/+$/, ''), version: config.version ?? '0.1.0' };\n}\n\nexport function defaultConfig(): AigentifyConfig {\n return defineConfig({\n name: 'Your product',\n description: 'A product with an agent-native interface.',\n repository: 'https://github.com/your-org/your-product',\n npmPackage: 'your-package',\n });\n}\n","import type { AigentifyConfig } from '../config.js';\n\nexport function generateAgentsMd(config: AigentifyConfig): string {\n const packageName = config.npmPackage ?? '<NPM_PACKAGE>';\n const mcp = config.mcpUrl ?? `npx ${packageName}`;\n const offer = config.offer;\n const offerLine = offer?.price === undefined ? 'Price: <PRICE>' : `Price: ${offer.priceCurrency ?? 'USD'} ${offer.price}`;\n return `# ${config.name}\n\n## Mental model\n\n${config.name} is ${config.description}\n\nUse the product interface for product work. Use the agent interface for repeatable tasks that need structured results.\n\n## The faces\n\n- Product: ${config.repository}\n- MCP: ${mcp}\n- Package: ${packageName}\n\n## MCP tools\n\n| Tool | Input | Result |\n| --- | --- | --- |\n| audit | target | An agent-readiness report with a score and gaps. |\n| gen | artifact and params | A generated agent-native artifact. |\n\n## The loop\n\n1. Audit the target.\n2. Fix the highest-impact gap.\n3. Generate or publish the missing artifact.\n4. Audit again and keep the report with the release.\n\n## Rules\n\n- Treat the product description and prices as source facts.\n- Return structured data when a tool provides it.\n- Ask for missing information before making a high-impact change.\n- Keep public agent instructions about the product and its use.\n\n## Offer\n\n${offer?.description ?? '<OFFER_DESCRIPTION>'}\n\n${offerLine}\n`;\n}\n","import type { AigentifyConfig } from '../config.js';\n\nexport function generateAgentsRoute(config: AigentifyConfig, framework = 'static'): string {\n if (framework === 'next') {\n return `# Serve /agents.md from a Next route\n\nCopy AGENTS.md to a public directory, or add this force-static route:\n\n\\`\\`\\`ts\nimport { readFile } from 'node:fs/promises';\n\nexport const dynamic = 'force-static';\n\nexport async function GET() {\n const body = await readFile('AGENTS.md', 'utf8');\n return new Response(body, { headers: { 'content-type': 'text/markdown; charset=utf-8' } });\n}\n\\`\\`\\`\n\nProduct: ${config.name}\n`;\n }\n return `# Serve /agents.md\n\nCopy the generated AGENTS.md file to public/agents.md and serve it as a static text/markdown response.\n\nProduct: ${config.name}\n`;\n}\n","import type { AigentifyConfig } from '../config.js';\n\nexport function generateOffer(config: AigentifyConfig): string {\n const offer = config.offer ?? {};\n const data = {\n '@context': 'https://schema.org',\n '@type': 'SoftwareApplication',\n name: config.name,\n description: config.description,\n applicationCategory: 'DeveloperApplication',\n offers: [{\n '@type': 'Offer',\n name: offer.name ?? `${config.name} access`,\n ...(offer.description ? { description: offer.description } : {}),\n ...(offer.price === undefined ? {} : { price: String(offer.price) }),\n priceCurrency: offer.priceCurrency ?? 'USD',\n }],\n };\n return `${JSON.stringify(data, null, 2)}\\n`;\n}\n","import { SERVER_SCHEMA_URL } from '../constants.js';\nimport type { AigentifyConfig } from '../config.js';\n\nexport function generateServerJson(config: AigentifyConfig): string {\n const serverName = config.name.includes('/') ? config.name : `io.github.pooriaarab/${config.name.toLowerCase().replace(/[^a-z0-9._-]+/g, '-')}`;\n const server: Record<string, unknown> = {\n $schema: SERVER_SCHEMA_URL,\n name: serverName,\n description: config.description,\n repository: { url: config.repository, source: 'github' },\n version: config.version ?? '0.1.0',\n };\n if (config.mcpUrl) server.remotes = [{ type: 'streamable-http', url: config.mcpUrl }];\n else server.packages = [{ registry_type: 'npm', identifier: config.npmPackage ?? 'aigentify', version: config.version ?? '0.1.0', runtime_hint: 'npx', transport: { type: 'stdio' } }];\n return `${JSON.stringify(server, null, 2)}\\n`;\n}\n","import type { AigentifyConfig } from '../config.js';\nimport { defaultConfig, defineConfig } from '../config.js';\nimport { generateAgentsMd } from './agents.js';\nimport { generateAgentsRoute } from './agents-route.js';\nimport { generateOffer } from './offer.js';\nimport { generateServerJson } from './server.js';\nexport * from './agents.js';\nexport * from './agents-route.js';\nexport * from './offer.js';\nexport * from './server.js';\n\nexport type GeneratedArtifact = 'agents-md' | 'server-json' | 'offer' | 'agents-route';\nexport type GenerateParams = Partial<AigentifyConfig> & { framework?: string };\n\nfunction configFromParams(params: GenerateParams = {}): AigentifyConfig {\n const base = defaultConfig();\n return defineConfig({ ...base, ...params, offer: { ...(base.offer ?? {}), ...(params.offer ?? {}) } });\n}\n\nexport function generate(artifact: GeneratedArtifact, params: GenerateParams = {}): string {\n const config = configFromParams(params);\n if (artifact === 'agents-md') return generateAgentsMd(config);\n if (artifact === 'server-json') return generateServerJson(config);\n if (artifact === 'offer') return generateOffer(config);\n if (artifact === 'agents-route') return generateAgentsRoute(config, params.framework);\n throw new Error(`Unknown artifact: ${artifact}`);\n}\n"],"mappings":"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","names":[]}
{"version":3,"sources":["../src/mcp.ts","../src/audit.ts","../package.json","../src/constants.ts","../src/config.ts","../src/generators/agents.ts","../src/generators/agents-route.ts","../src/generators/offer.ts","../src/generators/server.ts","../src/generators/index.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport { z } from 'zod';\nimport { auditTarget } from './audit.js';\nimport { PKG_NAME, VERSION } from './constants.js';\nimport { generate, type GenerateParams, type GeneratedArtifact } from './generators/index.js';\n\nconst artifacts = ['agents-md', 'server-json', 'offer', 'agents-route'] as const;\n\nexport function createMcpServer(): McpServer {\n const server = new McpServer({ name: PKG_NAME, version: VERSION });\n server.registerTool('audit', {\n description: 'Audit a local directory or live URL for agent-native readiness.',\n inputSchema: { target: z.string() },\n }, async ({ target }) => ({ content: [{ type: 'text', text: JSON.stringify(await auditTarget(target), null, 2) }] }));\n server.registerTool('gen', {\n description: 'Generate an agent-native artifact as text.',\n inputSchema: { artifact: z.enum(artifacts), params: z.record(z.string(), z.unknown()).optional() },\n }, async ({ artifact, params }) => ({ content: [{ type: 'text', text: generate(artifact as GeneratedArtifact, (params ?? {}) as GenerateParams) }] }));\n return server;\n}\n\nexport async function startMcpServer(): Promise<void> {\n const server = createMcpServer();\n await server.connect(new StdioServerTransport());\n}\n\nif (import.meta.url === `file://${process.argv[1]}`) startMcpServer().catch(error => {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`);\n process.exitCode = 1;\n});\n","import { readFile, readdir, stat } from 'node:fs/promises';\nimport path from 'node:path';\nimport { SERVER_SCHEMA_URL, SERVER_SCHEMA_RE } from './constants.js';\n\nexport type AuditStatus = 'pass' | 'fail' | 'warn' | 'na';\nexport interface AuditCheck { id: string; status: AuditStatus; note: string; weight: number }\nexport interface AuditGap { id: string; note: string; fix: string }\nexport interface AuditReport { target: string; score: number; checks: AuditCheck[]; gaps: AuditGap[] }\nexport interface AuditOptions { fetch?: typeof globalThis.fetch }\n\ninterface Endpoint { status: number; contentType: string; text: string }\ninterface Snapshot {\n agents: Endpoint; server: Endpoint; mcp: Endpoint; home: Endpoint; llms: Endpoint; sitemap: Endpoint;\n honestText: string; hasMcp: boolean; networkFailure: boolean;\n}\n\nconst SKIPPED = new Set(['.git', 'node_modules', 'dist', 'coverage', '.next', '_reference_geoaeo']);\nconst WEIGHTS: Record<string, number> = {\n 'agents-md': 15, 'agents-md-public-safe': 10, 'server-json': 15, mcp: 15,\n 'offer-jsonld': 15, 'honest-offer': 10, 'llms-txt': 10, sitemap: 10,\n};\nconst FIXES: Record<string, string> = {\n 'agents-md': 'Add a public AGENTS.md at the target root or serve /agents.md as text/markdown.',\n 'agents-md-public-safe': 'Rewrite AGENTS.md as product guidance. Remove repository paths and contributor instructions.',\n 'server-json': `Add server.json and set \"$schema\" to \"${SERVER_SCHEMA_URL}\". Include a repository and a remotes or packages entry.`,\n mcp: 'Publish server.json, .mcp.json, or an MCP entry point.',\n 'offer-jsonld': 'Publish JSON-LD with @type Offer, or a SoftwareApplication with an offers property.',\n 'honest-offer': 'State the real price plainly. Remove scarcity, countdown, and urgency language.',\n 'llms-txt': 'Publish /llms.txt with a concise product description.',\n sitemap: 'Publish /sitemap.xml for URL discovery.',\n};\n\nfunction check(id: string, status: AuditStatus, note: string): AuditCheck { return { id, status, note, weight: WEIGHTS[id] }; }\n\nexport function scoreAuditChecks(checks: AuditCheck[]): number {\n const relevant = checks.filter(item => item.status !== 'na');\n const total = relevant.reduce((sum, item) => sum + item.weight, 0);\n if (!total) return 0;\n const earned = relevant.reduce((sum, item) => sum + (item.status === 'pass' ? item.weight : item.status === 'warn' ? item.weight / 2 : 0), 0);\n return Math.round((earned / total) * 100);\n}\n\nasync function walkFiles(directory: string): Promise<string[]> {\n const entries = await readdir(directory, { withFileTypes: true });\n const files: string[] = [];\n for (const entry of entries) {\n if (entry.isDirectory() && !SKIPPED.has(entry.name)) files.push(...await walkFiles(path.join(directory, entry.name)));\n else if (entry.isFile()) files.push(path.join(directory, entry.name));\n }\n return files;\n}\n\nasync function readText(file: string | undefined): Promise<string> {\n if (!file) return '';\n try { return await readFile(file, 'utf8'); } catch { return ''; }\n}\n\nfunction findFile(files: string[], name: string): string | undefined {\n return files.find(file => {\n const normalized = file.replaceAll('\\\\', '/');\n return path.basename(normalized) === name || normalized.endsWith(`/${name}/route.ts`);\n });\n}\n\nfunction parseJson(text: string): Record<string, unknown> | undefined {\n try {\n const value: unknown = JSON.parse(text);\n return value && typeof value === 'object' && !Array.isArray(value) ? value as Record<string, unknown> : undefined;\n } catch { return undefined; }\n}\n\nfunction validServer(text: string): { valid: boolean; reason: string } {\n const value = parseJson(text);\n if (!value) return { valid: false, reason: 'server.json is not valid JSON.' };\n if (typeof value.$schema !== 'string' || !SERVER_SCHEMA_RE.test(value.$schema)) return { valid: false, reason: `server.json \"$schema\" must be a dated MCP registry schema like ${SERVER_SCHEMA_URL} (the bare .../server.json 404s).` };\n const missing = ['name', 'description', 'repository', 'version'].filter(key => !value[key]);\n if (missing.length) return { valid: false, reason: `server.json is missing: ${missing.join(', ')}.` };\n if (!Array.isArray(value.remotes) && !Array.isArray(value.packages)) return { valid: false, reason: 'server.json needs a remotes or packages entry.' };\n return { valid: true, reason: 'server.json has the required MCP registry fields.' };\n}\n\nfunction hasOffer(texts: string[]): boolean {\n return texts.some(text => /\"@type\"\\s*:\\s*\"Offer\"/i.test(text) || /\"@type\"\\s*:\\s*\"SoftwareApplication\"/i.test(text) && /\"offers\"\\s*:/.test(text));\n}\n\nfunction hasUrgency(text: string): boolean {\n return /limited time|act now|hurry|expires|only\\s+\\d+\\s+left|ends in|sign up now|countdown/i.test(text);\n}\n\nfunction publicSafe(text: string): boolean {\n return !(/\\bsrc\\//i.test(text) || /\\bapps\\//i.test(text) || /\\bpackages\\//i.test(text) || /\\b[\\w.-]+\\.ts\\b/i.test(text) || /npm run build/i.test(text) || /\\btsconfig\\b/i.test(text) || /\\bcontributors?\\b/i.test(text) || /^#+\\s*layout\\b/im.test(text));\n}\n\nfunction offerBlock(text: string): string {\n const match = /^#+\\s*Offer\\b/im.exec(text);\n if (!match || match.index === undefined) return '';\n const rest = text.slice(match.index);\n const nextHeading = /^#+\\s+/m.exec(rest.slice(match[0].length));\n return nextHeading?.index === undefined ? rest : rest.slice(0, match[0].length + nextHeading.index);\n}\n\nasync function directorySnapshot(directory: string): Promise<Snapshot> {\n const files = await walkFiles(directory);\n const agentsFile = findFile(files, 'AGENTS.md');\n const serverFile = findFile(files, 'server.json');\n const mcpFile = files.find(file => /(?:^|\\/)\\.mcp\\.json$/.test(file.replaceAll('\\\\', '/')));\n const packageFile = findFile(files, 'package.json');\n const packageText = await readText(packageFile);\n const hasMcpBin = /\"(?:aigentify|[^\"\\n]*mcp[^\"\\n]*)\"\\s*:/i.test(packageText);\n const agentsText = await readText(agentsFile);\n const offerTexts = [agentsText, ...await Promise.all(files.filter(file => /\\.(html?|json|jsonld|md|mdx|tsx|jsx|js|mjs|ts)$/.test(file)).map(readText))];\n const llmsFile = findFile(files, 'llms.txt');\n const sitemapFile = findFile(files, 'sitemap.xml');\n const offerFiles = files.filter(file => /\\.jsonld$|(?:^|\\/)offer[^/]*\\.(?:json|html?)$/i.test(file));\n const honestText = [offerBlock(agentsText), ...await Promise.all(offerFiles.map(readText))].join('\\n');\n return {\n agents: { status: agentsFile ? 200 : 404, contentType: 'text/markdown', text: agentsText },\n server: { status: serverFile ? 200 : 404, contentType: 'application/json', text: await readText(serverFile) },\n mcp: { status: mcpFile || serverFile || hasMcpBin ? 200 : 404, contentType: '', text: '' },\n home: { status: 200, contentType: 'text/plain', text: offerTexts.join('\\n') },\n llms: { status: llmsFile ? 200 : 404, contentType: 'text/plain', text: await readText(llmsFile) },\n sitemap: { status: sitemapFile ? 200 : 404, contentType: 'application/xml', text: await readText(sitemapFile) },\n honestText, hasMcp: Boolean(mcpFile || serverFile || hasMcpBin), networkFailure: false,\n };\n}\n\nasync function fetchText(fetcher: typeof globalThis.fetch, url: string): Promise<Endpoint> {\n try {\n const response = await fetcher(url, { signal: AbortSignal.timeout(8000) });\n return { status: response.status, contentType: response.headers.get('content-type') ?? '', text: await response.text() };\n } catch { return { status: 0, contentType: '', text: '' }; }\n}\n\nasync function urlSnapshot(target: string, fetcher: typeof globalThis.fetch): Promise<Snapshot> {\n const base = target.replace(/\\/+$/, '');\n const [agents, server, mcp, home, llms, sitemap] = await Promise.all([\n fetchText(fetcher, `${base}/agents.md`), fetchText(fetcher, `${base}/server.json`), fetchText(fetcher, `${base}/.well-known/mcp`),\n fetchText(fetcher, base), fetchText(fetcher, `${base}/llms.txt`), fetchText(fetcher, `${base}/sitemap.xml`),\n ]);\n const endpoints = [agents, server, mcp, home, llms, sitemap];\n return { agents, server, mcp, home, llms, sitemap, honestText: [home.text, offerBlock(agents.text)].join('\\n'), hasMcp: server.status >= 200 && server.status < 400 || mcp.status >= 200 && mcp.status < 400, networkFailure: endpoints.every(item => item.status === 0) };\n}\n\nfunction buildChecks(snapshot: Snapshot): AuditCheck[] {\n const agentsPresent = snapshot.agents.status === 200 && snapshot.agents.text.trim().length > 0 && /(?:text\\/(?:markdown|plain)|application\\/markdown)/i.test(snapshot.agents.contentType);\n const agentsStatus: AuditStatus = snapshot.agents.status === 0 ? 'warn' : agentsPresent ? 'pass' : 'fail';\n const publicStatus: AuditStatus = !agentsPresent ? (snapshot.agents.status === 0 ? 'warn' : 'na') : publicSafe(snapshot.agents.text) ? 'pass' : 'warn';\n const serverInfo = snapshot.server.status === 200 ? validServer(snapshot.server.text) : undefined;\n const serverStatus: AuditStatus = snapshot.server.status === 0 ? 'warn' : !snapshot.hasMcp ? 'na' : serverInfo?.valid ? 'pass' : 'fail';\n const mcpStatus: AuditStatus = snapshot.networkFailure ? 'warn' : snapshot.hasMcp ? 'pass' : 'fail';\n const offerTexts = [snapshot.home.text, snapshot.agents.text];\n const offerStatus: AuditStatus = snapshot.home.status === 0 ? 'warn' : hasOffer(offerTexts) ? 'pass' : 'fail';\n const honestStatus: AuditStatus = !hasOffer(offerTexts) && !agentsPresent ? (snapshot.home.status === 0 ? 'warn' : 'na') : hasUrgency(snapshot.honestText) ? 'warn' : 'pass';\n const llmsStatus: AuditStatus = snapshot.llms.status === 0 ? 'warn' : snapshot.llms.status >= 200 && snapshot.llms.status < 400 && snapshot.llms.text.trim() ? 'pass' : 'fail';\n const sitemapStatus: AuditStatus = snapshot.sitemap.status === 0 ? 'warn' : snapshot.sitemap.status >= 200 && snapshot.sitemap.status < 400 && snapshot.sitemap.text.trim() ? 'pass' : 'fail';\n return [\n check('agents-md', agentsStatus, agentsPresent ? 'AGENTS.md is available.' : snapshot.agents.status === 0 ? 'The AGENTS.md request failed.' : 'AGENTS.md is missing.'),\n check('agents-md-public-safe', publicStatus, publicStatus === 'pass' ? 'AGENTS.md describes the product as a public surface.' : publicStatus === 'na' ? 'No AGENTS.md is available to inspect.' : 'AGENTS.md contains repository-internal guidance.'),\n check('server-json', serverStatus, serverInfo?.valid ? serverInfo.reason : serverInfo?.reason ?? (!snapshot.hasMcp ? 'No MCP surface was detected.' : 'server.json is missing.')),\n check('mcp', mcpStatus, snapshot.networkFailure ? 'The MCP discovery request failed.' : snapshot.hasMcp ? 'An MCP surface is available.' : 'No MCP surface was found.'),\n check('offer-jsonld', offerStatus, offerStatus === 'pass' ? 'Offer JSON-LD is available.' : offerStatus === 'warn' ? 'The offer could not be checked.' : 'No Offer JSON-LD was found.'),\n check('honest-offer', honestStatus, honestStatus === 'pass' ? 'Offer language states the price without pressure.' : honestStatus === 'na' ? 'No offer or Offer block was found.' : 'Offer language contains scarcity, countdown, or urgency copy.'),\n check('llms-txt', llmsStatus, llmsStatus === 'pass' ? 'llms.txt is available.' : llmsStatus === 'warn' ? 'The llms.txt request failed.' : 'llms.txt is missing.'),\n check('sitemap', sitemapStatus, sitemapStatus === 'pass' ? 'sitemap.xml is available.' : sitemapStatus === 'warn' ? 'The sitemap request failed.' : 'sitemap.xml is missing.'),\n ];\n}\n\nexport async function auditTarget(target: string, options: AuditOptions = {}): Promise<AuditReport> {\n const targetStat = await stat(target).catch(() => undefined);\n const snapshot = targetStat?.isDirectory() ? await directorySnapshot(target) : await urlSnapshot(target, options.fetch ?? globalThis.fetch);\n const checks = buildChecks(snapshot);\n const gaps = checks.filter(item => item.status === 'fail' || item.status === 'warn').map(item => ({ id: item.id, note: item.note, fix: FIXES[item.id] }));\n return { target, score: scoreAuditChecks(checks), checks, gaps };\n}\n\nexport function formatAuditReport(report: AuditReport): string {\n const lines = [`${report.target}: ${report.score}/100`, ''];\n for (const item of report.checks) lines.push(`${item.status.toUpperCase().padEnd(4)} ${item.id}: ${item.note}`);\n lines.push('', 'Gaps:');\n if (!report.gaps.length) lines.push('None.');\n else report.gaps.forEach((gap, index) => lines.push(`${index + 1}. ${gap.id}: ${gap.fix}`));\n return lines.join('\\n');\n}\n","{\n \"name\": \"aigentify\",\n \"version\": \"0.1.1\",\n \"mcpName\": \"io.github.pooriaarab/aigentify\",\n \"description\": \"Audit and generate agent-native product surfaces\",\n \"type\": \"module\",\n \"license\": \"MIT\",\n \"bin\": {\"aigentify\": \"dist/cli.js\", \"aigentify-mcp\": \"dist/mcp.js\"},\n \"exports\": {\".\": {\"types\": \"./dist/index.d.ts\", \"import\": \"./dist/index.js\", \"require\": \"./dist/index.cjs\"}},\n \"files\": [\"dist\"],\n \"repository\": {\"type\": \"git\", \"url\": \"git+https://github.com/pooriaarab/aigentify.git\"},\n \"homepage\": \"https://github.com/pooriaarab/aigentify\",\n \"bugs\": \"https://github.com/pooriaarab/aigentify/issues\",\n \"keywords\": [\"agents\", \"agentification\", \"mcp\", \"ai\", \"json-ld\"],\n \"publishConfig\": {\"access\": \"public\"},\n \"scripts\": {\n \"build\": \"tsup\",\n \"test\": \"vitest run\",\n \"lint\": \"tsc --noEmit --pretty false\",\n \"typecheck\": \"tsc --noEmit\",\n \"verify\": \"npm run typecheck && npm run build && npm run test\",\n \"prepublishOnly\": \"npm run verify\"\n },\n \"engines\": {\"node\": \">=20\"},\n \"dependencies\": {\n \"@modelcontextprotocol/sdk\": \"^1.17.5\",\n \"cheerio\": \"^1.1.2\",\n \"commander\": \"^14.0.0\",\n \"jiti\": \"^2.5.1\",\n \"zod\": \"^4.0.0\"\n },\n \"devDependencies\": {\n \"@types/node\": \"^22.15.0\",\n \"tsup\": \"^8.5.0\",\n \"typescript\": \"^5.8.3\",\n \"vitest\": \"^3.2.4\"\n }\n}\n","import pkg from '../package.json';\n\nexport const PKG_NAME = pkg.name;\nexport const VERSION = pkg.version;\nexport const CONFIG_FILENAME = `${PKG_NAME}.config.ts`;\nexport const SERVER_SCHEMA_URL = 'https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json';\n// Any dated MCP registry schema is valid; only the bare `.../server.json` (no `.schema`) 404s.\nexport const SERVER_SCHEMA_RE = /^https:\\/\\/static\\.modelcontextprotocol\\.io\\/schemas\\/\\d{4}-\\d{2}-\\d{2}\\/server\\.schema\\.json$/;\n","export interface OfferConfig {\n name?: string;\n description?: string;\n price?: string | number;\n priceCurrency?: string;\n}\n\nexport interface AigentifyConfig {\n name: string;\n description: string;\n repository: string;\n version?: string;\n mcpUrl?: string;\n npmPackage?: string;\n offer?: OfferConfig;\n}\n\nexport function defineConfig(config: AigentifyConfig): AigentifyConfig {\n return { ...config, repository: config.repository.replace(/\\/+$/, ''), version: config.version ?? '0.1.0' };\n}\n\nexport function defaultConfig(): AigentifyConfig {\n return defineConfig({\n name: 'Your product',\n description: 'A product with an agent-native interface.',\n repository: 'https://github.com/your-org/your-product',\n npmPackage: 'your-package',\n });\n}\n","import type { AigentifyConfig } from '../config.js';\n\nexport function generateAgentsMd(config: AigentifyConfig): string {\n const packageName = config.npmPackage ?? '<NPM_PACKAGE>';\n const mcp = config.mcpUrl ?? `npx ${packageName}`;\n const offer = config.offer;\n const offerLine = offer?.price === undefined ? 'Price: <PRICE>' : `Price: ${offer.priceCurrency ?? 'USD'} ${offer.price}`;\n return `# ${config.name}\n\n## Mental model\n\n${config.name} is ${config.description}\n\nUse the product interface for product work. Use the agent interface for repeatable tasks that need structured results.\n\n## The faces\n\n- Product: ${config.repository}\n- MCP: ${mcp}\n- Package: ${packageName}\n\n## MCP tools\n\n| Tool | Input | Result |\n| --- | --- | --- |\n| audit | target | An agent-readiness report with a score and gaps. |\n| gen | artifact and params | A generated agent-native artifact. |\n\n## The loop\n\n1. Audit the target.\n2. Fix the highest-impact gap.\n3. Generate or publish the missing artifact.\n4. Audit again and keep the report with the release.\n\n## Rules\n\n- Treat the product description and prices as source facts.\n- Return structured data when a tool provides it.\n- Ask for missing information before making a high-impact change.\n- Keep public agent instructions about the product and its use.\n\n## Offer\n\n${offer?.description ?? '<OFFER_DESCRIPTION>'}\n\n${offerLine}\n`;\n}\n","import type { AigentifyConfig } from '../config.js';\n\nexport function generateAgentsRoute(config: AigentifyConfig, framework = 'static'): string {\n if (framework === 'next') {\n return `# Serve /agents.md from a Next route\n\nCopy AGENTS.md to a public directory, or add this force-static route:\n\n\\`\\`\\`ts\nimport { readFile } from 'node:fs/promises';\n\nexport const dynamic = 'force-static';\n\nexport async function GET() {\n const body = await readFile('AGENTS.md', 'utf8');\n return new Response(body, { headers: { 'content-type': 'text/markdown; charset=utf-8' } });\n}\n\\`\\`\\`\n\nProduct: ${config.name}\n`;\n }\n return `# Serve /agents.md\n\nCopy the generated AGENTS.md file to public/agents.md and serve it as a static text/markdown response.\n\nProduct: ${config.name}\n`;\n}\n","import type { AigentifyConfig } from '../config.js';\n\nexport function generateOffer(config: AigentifyConfig): string {\n const offer = config.offer ?? {};\n const data = {\n '@context': 'https://schema.org',\n '@type': 'SoftwareApplication',\n name: config.name,\n description: config.description,\n applicationCategory: 'DeveloperApplication',\n offers: [{\n '@type': 'Offer',\n name: offer.name ?? `${config.name} access`,\n ...(offer.description ? { description: offer.description } : {}),\n ...(offer.price === undefined ? {} : { price: String(offer.price) }),\n priceCurrency: offer.priceCurrency ?? 'USD',\n }],\n };\n return `${JSON.stringify(data, null, 2)}\\n`;\n}\n","import { SERVER_SCHEMA_URL } from '../constants.js';\nimport type { AigentifyConfig } from '../config.js';\n\nexport function generateServerJson(config: AigentifyConfig): string {\n const serverName = config.name.includes('/') ? config.name : `io.github.pooriaarab/${config.name.toLowerCase().replace(/[^a-z0-9._-]+/g, '-')}`;\n const server: Record<string, unknown> = {\n $schema: SERVER_SCHEMA_URL,\n name: serverName,\n description: config.description,\n repository: { url: config.repository, source: 'github' },\n version: config.version ?? '0.1.0',\n };\n if (config.mcpUrl) server.remotes = [{ type: 'streamable-http', url: config.mcpUrl }];\n else server.packages = [{ registryType: 'npm', registryBaseUrl: 'https://registry.npmjs.org', identifier: config.npmPackage ?? 'aigentify', version: config.version ?? '0.1.0', transport: { type: 'stdio' }, runtimeHint: 'npx', packageArguments: [{ type: 'positional', valueHint: 'subcommand', value: 'mcp' }] }];\n return `${JSON.stringify(server, null, 2)}\\n`;\n}\n","import type { AigentifyConfig } from '../config.js';\nimport { defaultConfig, defineConfig } from '../config.js';\nimport { generateAgentsMd } from './agents.js';\nimport { generateAgentsRoute } from './agents-route.js';\nimport { generateOffer } from './offer.js';\nimport { generateServerJson } from './server.js';\nexport * from './agents.js';\nexport * from './agents-route.js';\nexport * from './offer.js';\nexport * from './server.js';\n\nexport type GeneratedArtifact = 'agents-md' | 'server-json' | 'offer' | 'agents-route';\nexport type GenerateParams = Partial<AigentifyConfig> & { framework?: string };\n\nfunction configFromParams(params: GenerateParams = {}): AigentifyConfig {\n const base = defaultConfig();\n return defineConfig({ ...base, ...params, offer: { ...(base.offer ?? {}), ...(params.offer ?? {}) } });\n}\n\nexport function generate(artifact: GeneratedArtifact, params: GenerateParams = {}): string {\n const config = configFromParams(params);\n if (artifact === 'agents-md') return generateAgentsMd(config);\n if (artifact === 'server-json') return generateServerJson(config);\n if (artifact === 'offer') return generateOffer(config);\n if (artifact === 'agents-route') return generateAgentsRoute(config, params.framework);\n throw new Error(`Unknown artifact: ${artifact}`);\n}\n"],"mappings":";;;AACA,SAAS,iBAAiB;AAC1B,SAAS,4BAA4B;AACrC,SAAS,SAAS;;;ACHlB,SAAS,UAAU,SAAS,YAAY;AACxC,OAAO,UAAU;;;ACDjB;AAAA,EACE,MAAQ;AAAA,EACR,SAAW;AAAA,EACX,SAAW;AAAA,EACX,aAAe;AAAA,EACf,MAAQ;AAAA,EACR,SAAW;AAAA,EACX,KAAO,EAAC,WAAa,eAAe,iBAAiB,cAAa;AAAA,EAClE,SAAW,EAAC,KAAK,EAAC,OAAS,qBAAqB,QAAU,mBAAmB,SAAW,mBAAkB,EAAC;AAAA,EAC3G,OAAS,CAAC,MAAM;AAAA,EAChB,YAAc,EAAC,MAAQ,OAAO,KAAO,kDAAiD;AAAA,EACtF,UAAY;AAAA,EACZ,MAAQ;AAAA,EACR,UAAY,CAAC,UAAU,kBAAkB,OAAO,MAAM,SAAS;AAAA,EAC/D,eAAiB,EAAC,QAAU,SAAQ;AAAA,EACpC,SAAW;AAAA,IACT,OAAS;AAAA,IACT,MAAQ;AAAA,IACR,MAAQ;AAAA,IACR,WAAa;AAAA,IACb,QAAU;AAAA,IACV,gBAAkB;AAAA,EACpB;AAAA,EACA,SAAW,EAAC,MAAQ,OAAM;AAAA,EAC1B,cAAgB;AAAA,IACd,6BAA6B;AAAA,IAC7B,SAAW;AAAA,IACX,WAAa;AAAA,IACb,MAAQ;AAAA,IACR,KAAO;AAAA,EACT;AAAA,EACA,iBAAmB;AAAA,IACjB,eAAe;AAAA,IACf,MAAQ;AAAA,IACR,YAAc;AAAA,IACd,QAAU;AAAA,EACZ;AACF;;;ACnCO,IAAM,WAAW,gBAAI;AACrB,IAAM,UAAU,gBAAI;AACpB,IAAM,kBAAkB,GAAG,QAAQ;AACnC,IAAM,oBAAoB;AAE1B,IAAM,mBAAmB;;;AFShC,IAAM,UAAU,oBAAI,IAAI,CAAC,QAAQ,gBAAgB,QAAQ,YAAY,SAAS,mBAAmB,CAAC;AAClG,IAAM,UAAkC;AAAA,EACtC,aAAa;AAAA,EAAI,yBAAyB;AAAA,EAAI,eAAe;AAAA,EAAI,KAAK;AAAA,EACtE,gBAAgB;AAAA,EAAI,gBAAgB;AAAA,EAAI,YAAY;AAAA,EAAI,SAAS;AACnE;AACA,IAAM,QAAgC;AAAA,EACpC,aAAa;AAAA,EACb,yBAAyB;AAAA,EACzB,eAAe,yCAAyC,iBAAiB;AAAA,EACzE,KAAK;AAAA,EACL,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,YAAY;AAAA,EACZ,SAAS;AACX;AAEA,SAAS,MAAM,IAAY,QAAqB,MAA0B;AAAE,SAAO,EAAE,IAAI,QAAQ,MAAM,QAAQ,QAAQ,EAAE,EAAE;AAAG;AAEvH,SAAS,iBAAiB,QAA8B;AAC7D,QAAM,WAAW,OAAO,OAAO,UAAQ,KAAK,WAAW,IAAI;AAC3D,QAAM,QAAQ,SAAS,OAAO,CAAC,KAAK,SAAS,MAAM,KAAK,QAAQ,CAAC;AACjE,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,SAAS,SAAS,OAAO,CAAC,KAAK,SAAS,OAAO,KAAK,WAAW,SAAS,KAAK,SAAS,KAAK,WAAW,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC;AAC5I,SAAO,KAAK,MAAO,SAAS,QAAS,GAAG;AAC1C;AAEA,eAAe,UAAU,WAAsC;AAC7D,QAAM,UAAU,MAAM,QAAQ,WAAW,EAAE,eAAe,KAAK,CAAC;AAChE,QAAM,QAAkB,CAAC;AACzB,aAAW,SAAS,SAAS;AAC3B,QAAI,MAAM,YAAY,KAAK,CAAC,QAAQ,IAAI,MAAM,IAAI,EAAG,OAAM,KAAK,GAAG,MAAM,UAAU,KAAK,KAAK,WAAW,MAAM,IAAI,CAAC,CAAC;AAAA,aAC3G,MAAM,OAAO,EAAG,OAAM,KAAK,KAAK,KAAK,WAAW,MAAM,IAAI,CAAC;AAAA,EACtE;AACA,SAAO;AACT;AAEA,eAAe,SAAS,MAA2C;AACjE,MAAI,CAAC,KAAM,QAAO;AAClB,MAAI;AAAE,WAAO,MAAM,SAAS,MAAM,MAAM;AAAA,EAAG,QAAQ;AAAE,WAAO;AAAA,EAAI;AAClE;AAEA,SAAS,SAAS,OAAiB,MAAkC;AACnE,SAAO,MAAM,KAAK,UAAQ;AACxB,UAAM,aAAa,KAAK,WAAW,MAAM,GAAG;AAC5C,WAAO,KAAK,SAAS,UAAU,MAAM,QAAQ,WAAW,SAAS,IAAI,IAAI,WAAW;AAAA,EACtF,CAAC;AACH;AAEA,SAAS,UAAU,MAAmD;AACpE,MAAI;AACF,UAAM,QAAiB,KAAK,MAAM,IAAI;AACtC,WAAO,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,IAAI,QAAmC;AAAA,EAC1G,QAAQ;AAAE,WAAO;AAAA,EAAW;AAC9B;AAEA,SAAS,YAAY,MAAkD;AACrE,QAAM,QAAQ,UAAU,IAAI;AAC5B,MAAI,CAAC,MAAO,QAAO,EAAE,OAAO,OAAO,QAAQ,iCAAiC;AAC5E,MAAI,OAAO,MAAM,YAAY,YAAY,CAAC,iBAAiB,KAAK,MAAM,OAAO,EAAG,QAAO,EAAE,OAAO,OAAO,QAAQ,kEAAkE,iBAAiB,oCAAoC;AACtO,QAAM,UAAU,CAAC,QAAQ,eAAe,cAAc,SAAS,EAAE,OAAO,SAAO,CAAC,MAAM,GAAG,CAAC;AAC1F,MAAI,QAAQ,OAAQ,QAAO,EAAE,OAAO,OAAO,QAAQ,2BAA2B,QAAQ,KAAK,IAAI,CAAC,IAAI;AACpG,MAAI,CAAC,MAAM,QAAQ,MAAM,OAAO,KAAK,CAAC,MAAM,QAAQ,MAAM,QAAQ,EAAG,QAAO,EAAE,OAAO,OAAO,QAAQ,iDAAiD;AACrJ,SAAO,EAAE,OAAO,MAAM,QAAQ,oDAAoD;AACpF;AAEA,SAAS,SAAS,OAA0B;AAC1C,SAAO,MAAM,KAAK,UAAQ,yBAAyB,KAAK,IAAI,KAAK,uCAAuC,KAAK,IAAI,KAAK,eAAe,KAAK,IAAI,CAAC;AACjJ;AAEA,SAAS,WAAW,MAAuB;AACzC,SAAO,sFAAsF,KAAK,IAAI;AACxG;AAEA,SAAS,WAAW,MAAuB;AACzC,SAAO,EAAE,WAAW,KAAK,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,gBAAgB,KAAK,IAAI,KAAK,mBAAmB,KAAK,IAAI,KAAK,iBAAiB,KAAK,IAAI,KAAK,gBAAgB,KAAK,IAAI,KAAK,qBAAqB,KAAK,IAAI,KAAK,mBAAmB,KAAK,IAAI;AACzP;AAEA,SAAS,WAAW,MAAsB;AACxC,QAAM,QAAQ,kBAAkB,KAAK,IAAI;AACzC,MAAI,CAAC,SAAS,MAAM,UAAU,OAAW,QAAO;AAChD,QAAM,OAAO,KAAK,MAAM,MAAM,KAAK;AACnC,QAAM,cAAc,UAAU,KAAK,KAAK,MAAM,MAAM,CAAC,EAAE,MAAM,CAAC;AAC9D,SAAO,aAAa,UAAU,SAAY,OAAO,KAAK,MAAM,GAAG,MAAM,CAAC,EAAE,SAAS,YAAY,KAAK;AACpG;AAEA,eAAe,kBAAkB,WAAsC;AACrE,QAAM,QAAQ,MAAM,UAAU,SAAS;AACvC,QAAM,aAAa,SAAS,OAAO,WAAW;AAC9C,QAAM,aAAa,SAAS,OAAO,aAAa;AAChD,QAAM,UAAU,MAAM,KAAK,UAAQ,uBAAuB,KAAK,KAAK,WAAW,MAAM,GAAG,CAAC,CAAC;AAC1F,QAAM,cAAc,SAAS,OAAO,cAAc;AAClD,QAAM,cAAc,MAAM,SAAS,WAAW;AAC9C,QAAM,YAAY,yCAAyC,KAAK,WAAW;AAC3E,QAAM,aAAa,MAAM,SAAS,UAAU;AAC5C,QAAM,aAAa,CAAC,YAAY,GAAG,MAAM,QAAQ,IAAI,MAAM,OAAO,UAAQ,kDAAkD,KAAK,IAAI,CAAC,EAAE,IAAI,QAAQ,CAAC,CAAC;AACtJ,QAAM,WAAW,SAAS,OAAO,UAAU;AAC3C,QAAM,cAAc,SAAS,OAAO,aAAa;AACjD,QAAM,aAAa,MAAM,OAAO,UAAQ,iDAAiD,KAAK,IAAI,CAAC;AACnG,QAAM,aAAa,CAAC,WAAW,UAAU,GAAG,GAAG,MAAM,QAAQ,IAAI,WAAW,IAAI,QAAQ,CAAC,CAAC,EAAE,KAAK,IAAI;AACrG,SAAO;AAAA,IACL,QAAQ,EAAE,QAAQ,aAAa,MAAM,KAAK,aAAa,iBAAiB,MAAM,WAAW;AAAA,IACzF,QAAQ,EAAE,QAAQ,aAAa,MAAM,KAAK,aAAa,oBAAoB,MAAM,MAAM,SAAS,UAAU,EAAE;AAAA,IAC5G,KAAK,EAAE,QAAQ,WAAW,cAAc,YAAY,MAAM,KAAK,aAAa,IAAI,MAAM,GAAG;AAAA,IACzF,MAAM,EAAE,QAAQ,KAAK,aAAa,cAAc,MAAM,WAAW,KAAK,IAAI,EAAE;AAAA,IAC5E,MAAM,EAAE,QAAQ,WAAW,MAAM,KAAK,aAAa,cAAc,MAAM,MAAM,SAAS,QAAQ,EAAE;AAAA,IAChG,SAAS,EAAE,QAAQ,cAAc,MAAM,KAAK,aAAa,mBAAmB,MAAM,MAAM,SAAS,WAAW,EAAE;AAAA,IAC9G;AAAA,IAAY,QAAQ,QAAQ,WAAW,cAAc,SAAS;AAAA,IAAG,gBAAgB;AAAA,EACnF;AACF;AAEA,eAAe,UAAU,SAAkC,KAAgC;AACzF,MAAI;AACF,UAAM,WAAW,MAAM,QAAQ,KAAK,EAAE,QAAQ,YAAY,QAAQ,GAAI,EAAE,CAAC;AACzE,WAAO,EAAE,QAAQ,SAAS,QAAQ,aAAa,SAAS,QAAQ,IAAI,cAAc,KAAK,IAAI,MAAM,MAAM,SAAS,KAAK,EAAE;AAAA,EACzH,QAAQ;AAAE,WAAO,EAAE,QAAQ,GAAG,aAAa,IAAI,MAAM,GAAG;AAAA,EAAG;AAC7D;AAEA,eAAe,YAAY,QAAgB,SAAqD;AAC9F,QAAM,OAAO,OAAO,QAAQ,QAAQ,EAAE;AACtC,QAAM,CAAC,QAAQ,QAAQ,KAAK,MAAM,MAAM,OAAO,IAAI,MAAM,QAAQ,IAAI;AAAA,IACnE,UAAU,SAAS,GAAG,IAAI,YAAY;AAAA,IAAG,UAAU,SAAS,GAAG,IAAI,cAAc;AAAA,IAAG,UAAU,SAAS,GAAG,IAAI,kBAAkB;AAAA,IAChI,UAAU,SAAS,IAAI;AAAA,IAAG,UAAU,SAAS,GAAG,IAAI,WAAW;AAAA,IAAG,UAAU,SAAS,GAAG,IAAI,cAAc;AAAA,EAC5G,CAAC;AACD,QAAM,YAAY,CAAC,QAAQ,QAAQ,KAAK,MAAM,MAAM,OAAO;AAC3D,SAAO,EAAE,QAAQ,QAAQ,KAAK,MAAM,MAAM,SAAS,YAAY,CAAC,KAAK,MAAM,WAAW,OAAO,IAAI,CAAC,EAAE,KAAK,IAAI,GAAG,QAAQ,OAAO,UAAU,OAAO,OAAO,SAAS,OAAO,IAAI,UAAU,OAAO,IAAI,SAAS,KAAK,gBAAgB,UAAU,MAAM,UAAQ,KAAK,WAAW,CAAC,EAAE;AAC3Q;AAEA,SAAS,YAAY,UAAkC;AACrD,QAAM,gBAAgB,SAAS,OAAO,WAAW,OAAO,SAAS,OAAO,KAAK,KAAK,EAAE,SAAS,KAAK,sDAAsD,KAAK,SAAS,OAAO,WAAW;AACxL,QAAM,eAA4B,SAAS,OAAO,WAAW,IAAI,SAAS,gBAAgB,SAAS;AACnG,QAAM,eAA4B,CAAC,gBAAiB,SAAS,OAAO,WAAW,IAAI,SAAS,OAAQ,WAAW,SAAS,OAAO,IAAI,IAAI,SAAS;AAChJ,QAAM,aAAa,SAAS,OAAO,WAAW,MAAM,YAAY,SAAS,OAAO,IAAI,IAAI;AACxF,QAAM,eAA4B,SAAS,OAAO,WAAW,IAAI,SAAS,CAAC,SAAS,SAAS,OAAO,YAAY,QAAQ,SAAS;AACjI,QAAM,YAAyB,SAAS,iBAAiB,SAAS,SAAS,SAAS,SAAS;AAC7F,QAAM,aAAa,CAAC,SAAS,KAAK,MAAM,SAAS,OAAO,IAAI;AAC5D,QAAM,cAA2B,SAAS,KAAK,WAAW,IAAI,SAAS,SAAS,UAAU,IAAI,SAAS;AACvG,QAAM,eAA4B,CAAC,SAAS,UAAU,KAAK,CAAC,gBAAiB,SAAS,KAAK,WAAW,IAAI,SAAS,OAAQ,WAAW,SAAS,UAAU,IAAI,SAAS;AACtK,QAAM,aAA0B,SAAS,KAAK,WAAW,IAAI,SAAS,SAAS,KAAK,UAAU,OAAO,SAAS,KAAK,SAAS,OAAO,SAAS,KAAK,KAAK,KAAK,IAAI,SAAS;AACxK,QAAM,gBAA6B,SAAS,QAAQ,WAAW,IAAI,SAAS,SAAS,QAAQ,UAAU,OAAO,SAAS,QAAQ,SAAS,OAAO,SAAS,QAAQ,KAAK,KAAK,IAAI,SAAS;AACvL,SAAO;AAAA,IACL,MAAM,aAAa,cAAc,gBAAgB,4BAA4B,SAAS,OAAO,WAAW,IAAI,kCAAkC,uBAAuB;AAAA,IACrK,MAAM,yBAAyB,cAAc,iBAAiB,SAAS,yDAAyD,iBAAiB,OAAO,0CAA0C,kDAAkD;AAAA,IACpP,MAAM,eAAe,cAAc,YAAY,QAAQ,WAAW,SAAS,YAAY,WAAW,CAAC,SAAS,SAAS,iCAAiC,0BAA0B;AAAA,IAChL,MAAM,OAAO,WAAW,SAAS,iBAAiB,sCAAsC,SAAS,SAAS,iCAAiC,2BAA2B;AAAA,IACtK,MAAM,gBAAgB,aAAa,gBAAgB,SAAS,gCAAgC,gBAAgB,SAAS,oCAAoC,6BAA6B;AAAA,IACtL,MAAM,gBAAgB,cAAc,iBAAiB,SAAS,sDAAsD,iBAAiB,OAAO,uCAAuC,+DAA+D;AAAA,IAClP,MAAM,YAAY,YAAY,eAAe,SAAS,2BAA2B,eAAe,SAAS,iCAAiC,sBAAsB;AAAA,IAChK,MAAM,WAAW,eAAe,kBAAkB,SAAS,8BAA8B,kBAAkB,SAAS,gCAAgC,yBAAyB;AAAA,EAC/K;AACF;AAEA,eAAsB,YAAY,QAAgB,UAAwB,CAAC,GAAyB;AAClG,QAAM,aAAa,MAAM,KAAK,MAAM,EAAE,MAAM,MAAM,MAAS;AAC3D,QAAM,WAAW,YAAY,YAAY,IAAI,MAAM,kBAAkB,MAAM,IAAI,MAAM,YAAY,QAAQ,QAAQ,SAAS,WAAW,KAAK;AAC1I,QAAM,SAAS,YAAY,QAAQ;AACnC,QAAM,OAAO,OAAO,OAAO,UAAQ,KAAK,WAAW,UAAU,KAAK,WAAW,MAAM,EAAE,IAAI,WAAS,EAAE,IAAI,KAAK,IAAI,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,EAAE,EAAE,EAAE;AACxJ,SAAO,EAAE,QAAQ,OAAO,iBAAiB,MAAM,GAAG,QAAQ,KAAK;AACjE;;;AG5JO,SAAS,aAAa,QAA0C;AACrE,SAAO,EAAE,GAAG,QAAQ,YAAY,OAAO,WAAW,QAAQ,QAAQ,EAAE,GAAG,SAAS,OAAO,WAAW,QAAQ;AAC5G;AAEO,SAAS,gBAAiC;AAC/C,SAAO,aAAa;AAAA,IAClB,MAAM;AAAA,IACN,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,YAAY;AAAA,EACd,CAAC;AACH;;;AC1BO,SAAS,iBAAiB,QAAiC;AAChE,QAAM,cAAc,OAAO,cAAc;AACzC,QAAM,MAAM,OAAO,UAAU,OAAO,WAAW;AAC/C,QAAM,QAAQ,OAAO;AACrB,QAAM,YAAY,OAAO,UAAU,SAAY,mBAAmB,UAAU,MAAM,iBAAiB,KAAK,IAAI,MAAM,KAAK;AACvH,SAAO,KAAK,OAAO,IAAI;AAAA;AAAA;AAAA;AAAA,EAIvB,OAAO,IAAI,OAAO,OAAO,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAMzB,OAAO,UAAU;AAAA,SACrB,GAAG;AAAA,aACC,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyBtB,OAAO,eAAe,qBAAqB;AAAA;AAAA,EAE3C,SAAS;AAAA;AAEX;;;AC9CO,SAAS,oBAAoB,QAAyB,YAAY,UAAkB;AACzF,MAAI,cAAc,QAAQ;AACxB,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAeA,OAAO,IAAI;AAAA;AAAA,EAEpB;AACA,SAAO;AAAA;AAAA;AAAA;AAAA,WAIE,OAAO,IAAI;AAAA;AAEtB;;;AC1BO,SAAS,cAAc,QAAiC;AAC7D,QAAM,QAAQ,OAAO,SAAS,CAAC;AAC/B,QAAM,OAAO;AAAA,IACX,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,MAAM,OAAO;AAAA,IACb,aAAa,OAAO;AAAA,IACpB,qBAAqB;AAAA,IACrB,QAAQ,CAAC;AAAA,MACP,SAAS;AAAA,MACT,MAAM,MAAM,QAAQ,GAAG,OAAO,IAAI;AAAA,MAClC,GAAI,MAAM,cAAc,EAAE,aAAa,MAAM,YAAY,IAAI,CAAC;AAAA,MAC9D,GAAI,MAAM,UAAU,SAAY,CAAC,IAAI,EAAE,OAAO,OAAO,MAAM,KAAK,EAAE;AAAA,MAClE,eAAe,MAAM,iBAAiB;AAAA,IACxC,CAAC;AAAA,EACH;AACA,SAAO,GAAG,KAAK,UAAU,MAAM,MAAM,CAAC,CAAC;AAAA;AACzC;;;AChBO,SAAS,mBAAmB,QAAiC;AAClE,QAAM,aAAa,OAAO,KAAK,SAAS,GAAG,IAAI,OAAO,OAAO,wBAAwB,OAAO,KAAK,YAAY,EAAE,QAAQ,kBAAkB,GAAG,CAAC;AAC7I,QAAM,SAAkC;AAAA,IACtC,SAAS;AAAA,IACT,MAAM;AAAA,IACN,aAAa,OAAO;AAAA,IACpB,YAAY,EAAE,KAAK,OAAO,YAAY,QAAQ,SAAS;AAAA,IACvD,SAAS,OAAO,WAAW;AAAA,EAC7B;AACA,MAAI,OAAO,OAAQ,QAAO,UAAU,CAAC,EAAE,MAAM,mBAAmB,KAAK,OAAO,OAAO,CAAC;AAAA,MAC/E,QAAO,WAAW,CAAC,EAAE,cAAc,OAAO,iBAAiB,8BAA8B,YAAY,OAAO,cAAc,aAAa,SAAS,OAAO,WAAW,SAAS,WAAW,EAAE,MAAM,QAAQ,GAAG,aAAa,OAAO,kBAAkB,CAAC,EAAE,MAAM,cAAc,WAAW,cAAc,OAAO,MAAM,CAAC,EAAE,CAAC;AACrT,SAAO,GAAG,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AAAA;AAC3C;;;ACDA,SAAS,iBAAiB,SAAyB,CAAC,GAAoB;AACtE,QAAM,OAAO,cAAc;AAC3B,SAAO,aAAa,EAAE,GAAG,MAAM,GAAG,QAAQ,OAAO,EAAE,GAAI,KAAK,SAAS,CAAC,GAAI,GAAI,OAAO,SAAS,CAAC,EAAG,EAAE,CAAC;AACvG;AAEO,SAAS,SAAS,UAA6B,SAAyB,CAAC,GAAW;AACzF,QAAM,SAAS,iBAAiB,MAAM;AACtC,MAAI,aAAa,YAAa,QAAO,iBAAiB,MAAM;AAC5D,MAAI,aAAa,cAAe,QAAO,mBAAmB,MAAM;AAChE,MAAI,aAAa,QAAS,QAAO,cAAc,MAAM;AACrD,MAAI,aAAa,eAAgB,QAAO,oBAAoB,QAAQ,OAAO,SAAS;AACpF,QAAM,IAAI,MAAM,qBAAqB,QAAQ,EAAE;AACjD;;;ATlBA,IAAM,YAAY,CAAC,aAAa,eAAe,SAAS,cAAc;AAE/D,SAAS,kBAA6B;AAC3C,QAAM,SAAS,IAAI,UAAU,EAAE,MAAM,UAAU,SAAS,QAAQ,CAAC;AACjE,SAAO,aAAa,SAAS;AAAA,IAC3B,aAAa;AAAA,IACb,aAAa,EAAE,QAAQ,EAAE,OAAO,EAAE;AAAA,EACpC,GAAG,OAAO,EAAE,OAAO,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,KAAK,UAAU,MAAM,YAAY,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE;AACpH,SAAO,aAAa,OAAO;AAAA,IACzB,aAAa;AAAA,IACb,aAAa,EAAE,UAAU,EAAE,KAAK,SAAS,GAAG,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,QAAQ,CAAC,EAAE,SAAS,EAAE;AAAA,EACnG,GAAG,OAAO,EAAE,UAAU,OAAO,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,SAAS,UAAgC,UAAU,CAAC,CAAoB,EAAE,CAAC,EAAE,EAAE;AACrJ,SAAO;AACT;AAEA,eAAsB,iBAAgC;AACpD,QAAM,SAAS,gBAAgB;AAC/B,QAAM,OAAO,QAAQ,IAAI,qBAAqB,CAAC;AACjD;AAEA,IAAI,YAAY,QAAQ,UAAU,QAAQ,KAAK,CAAC,CAAC,GAAI,gBAAe,EAAE,MAAM,WAAS;AACnF,UAAQ,OAAO,MAAM,GAAG,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAAA,CAAI;AAClF,UAAQ,WAAW;AACrB,CAAC;","names":[]}
{
"name": "aigentify",
"version": "0.1.0",
"version": "0.1.1",
"mcpName": "io.github.pooriaarab/aigentify",
"description": "Audit and generate agent-native product surfaces",

@@ -5,0 +6,0 @@ "type": "module",