{"_id":"@carrot-foundation/ai-discovery","_rev":"5-4644a18e5c8c91696220560bbfa2e045","name":"@carrot-foundation/ai-discovery","dist-tags":{"latest":"1.2.0"},"versions":{"1.0.0":{"name":"@carrot-foundation/ai-discovery","version":"1.0.0","keywords":["carrot","ai","llm","schema-org","jsonld","llms-txt","robots","markdown"],"author":{"name":"Carrot Foundation"},"license":"Apache-2.0","_id":"@carrot-foundation/ai-discovery@1.0.0","maintainers":[{"name":"carrot.fndn","email":"npm.admin@carrot.eco"},{"name":"amarcoscastelo","email":"amarcoscastelo@gmail.com"},{"name":"cristianosantos95","email":"cristianorsantos.95@gmail.com"},{"name":"sangalli","email":"sangalli@gmail.com"}],"homepage":"https://github.com/carrot-foundation/ai-discovery#readme","bugs":{"url":"https://github.com/carrot-foundation/ai-discovery/issues"},"dist":{"shasum":"d37149b8cfd632aabcaf7e8a0ebcc850fe0a3b1b","tarball":"https://registry.npmjs.org/@carrot-foundation/ai-discovery/-/ai-discovery-1.0.0.tgz","fileCount":42,"integrity":"sha512-ZnhZlzIDVpm5SuqyaObbVM6Q/5H5UhFWeZ4XFYwlqP42t9cukRH2sxmDWykKSUt2/upDKkVen8D6DKtuCtDGHA==","signatures":[{"sig":"MEYCIQCB6dN+3VOMfQJI3Yey4m2foVQj+1rTDmOrBhwIOWOJNQIhAMYSBehws6GxLGZWGdMLsr9Bby+DAoNzI3MtmIaw3lKk","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@carrot-foundation%2fai-discovery@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":229063},"main":"./dist/index.cjs","pnpm":{"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./jsonld":{"import":{"types":"./dist/jsonld/index.d.ts","default":"./dist/jsonld/index.js"},"require":{"types":"./dist/jsonld/index.d.cts","default":"./dist/jsonld/index.cjs"}},"./robots":{"import":{"types":"./dist/robots/index.d.ts","default":"./dist/robots/index.js"},"require":{"types":"./dist/robots/index.d.cts","default":"./dist/robots/index.cjs"}},"./llms-txt":{"import":{"types":"./dist/llms-txt/index.d.ts","default":"./dist/llms-txt/index.js"},"require":{"types":"./dist/llms-txt/index.d.cts","default":"./dist/llms-txt/index.cjs"}},"./md-mirror":{"import":{"types":"./dist/md-mirror/index.d.ts","default":"./dist/md-mirror/index.js"},"require":{"types":"./dist/md-mirror/index.d.cts","default":"./dist/md-mirror/index.cjs"}}},"gitHead":"61bac2002b9cdce83838ebb97aa1c27e0ac23add","private":false,"scripts":{"fix":"run-s lint:fix format","lint":"eslint . --cache --cache-location .cache/eslint/","test":"vitest run --passWithNoTests","build":"tsup","check":"run-s format:check lint type-check spell-check test build check-types-exports pack:dry-run audit:prod","clean":"rm -rf dist","format":"prettier --write .","prepare":"husky","release":"semantic-release","lint:fix":"eslint . --fix --cache --cache-location .cache/eslint/","audit:prod":"pnpm audit --prod --audit-level=critical","test:watch":"vitest","type-check":"tsc --noEmit","spell-check":"cspell lint --dot --no-must-find-files \"**/*.{ts,js,cjs,mjs,md,json,yml,yaml}\"","format:check":"prettier --check .","pack:dry-run":"pnpm pack --dry-run","check-types-exports":"npm_config_cache=.cache/npm attw --pack . --profile node16"},"_npmUser":{"name":"carrot.fndn","email":"npm.admin@carrot.eco"},"repository":{"url":"git+https://github.com/carrot-foundation/ai-discovery.git","type":"git"},"_npmVersion":"11.8.0","description":"AI discovery primitives for the Carrot Network: JSON-LD, llms.txt, robots, and a Markdown mirror.","directories":{},"_nodeVersion":"24.13.1","dependencies":{"zod":"^4.4.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@10.29.3","devDependencies":{"jiti":"2.7.0","tsup":"8.5.1","vite":"8.0.11","husky":"9.1.7","cspell":"10.0.0","eslint":"10.3.0","vitest":"4.1.5","globals":"17.6.0","prettier":"3.8.3","@eslint/js":"10.0.1","typescript":"6.0.3","@types/node":"25.6.0","lint-staged":"17.0.2","npm-run-all2":"8.0.4","@commitlint/cli":"20.5.3","semantic-release":"25.0.3","typescript-eslint":"8.59.2","@arethetypeswrong/cli":"0.18.2","@semantic-release/git":"10.0.1","@semantic-release/npm":"13.1.5","@semantic-release/github":"12.0.6","@semantic-release/changelog":"6.0.3","@commitlint/config-conventional":"20.5.3","@semantic-release/commit-analyzer":"13.0.1","@semantic-release/release-notes-generator":"14.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ai-discovery_1.0.0_1778170403951_0.11704836317312073","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@carrot-foundation/ai-discovery","version":"1.1.0","keywords":["carrot","ai","llm","schema-org","jsonld","llms-txt","robots","markdown"],"author":{"name":"Carrot Foundation"},"license":"Apache-2.0","_id":"@carrot-foundation/ai-discovery@1.1.0","maintainers":[{"name":"carrot.fndn","email":"npm.admin@carrot.eco"},{"name":"amarcoscastelo","email":"amarcoscastelo@gmail.com"},{"name":"cristianosantos95","email":"cristianorsantos.95@gmail.com"},{"name":"sangalli","email":"sangalli@gmail.com"}],"homepage":"https://github.com/carrot-foundation/ai-discovery#readme","bugs":{"url":"https://github.com/carrot-foundation/ai-discovery/issues"},"dist":{"shasum":"3c127908f1462e711465196d70c13735624bda9f","tarball":"https://registry.npmjs.org/@carrot-foundation/ai-discovery/-/ai-discovery-1.1.0.tgz","fileCount":74,"integrity":"sha512-TyPZ7WnUH9IofSQeW9+v0lHOnMdJ4IdD/2zovXa2P6GKMTd4whrobkAuW1/Msfo0hNBQKEWeap5isG0VSa6xOw==","signatures":[{"sig":"MEYCIQCiOAzDBrDswE+EEf8ZT9rnXzlvcPIQi6C+AAzSCoeVnwIhANNuJSmsF2cyXFf61ZnsVMCcZLLgCJBZt179bm8PwMBr","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@carrot-foundation%2fai-discovery@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":555607},"main":"./dist/index.cjs","pnpm":{"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./orama":{"import":{"types":"./dist/orama/index.d.ts","default":"./dist/orama/index.js"},"require":{"types":"./dist/orama/index.d.cts","default":"./dist/orama/index.cjs"}},"./jsonld":{"import":{"types":"./dist/jsonld/index.d.ts","default":"./dist/jsonld/index.js"},"require":{"types":"./dist/jsonld/index.d.cts","default":"./dist/jsonld/index.cjs"}},"./robots":{"import":{"types":"./dist/robots/index.d.ts","default":"./dist/robots/index.js"},"require":{"types":"./dist/robots/index.d.cts","default":"./dist/robots/index.cjs"}},"./glossary":{"import":{"types":"./dist/glossary/index.d.ts","default":"./dist/glossary/index.js"},"require":{"types":"./dist/glossary/index.d.cts","default":"./dist/glossary/index.cjs"}},"./llms-txt":{"import":{"types":"./dist/llms-txt/index.d.ts","default":"./dist/llms-txt/index.js"},"require":{"types":"./dist/llms-txt/index.d.cts","default":"./dist/llms-txt/index.cjs"}},"./index-now":{"import":{"types":"./dist/index-now/index.d.ts","default":"./dist/index-now/index.js"},"require":{"types":"./dist/index-now/index.d.cts","default":"./dist/index-now/index.cjs"}},"./md-mirror":{"import":{"types":"./dist/md-mirror/index.d.ts","default":"./dist/md-mirror/index.js"},"require":{"types":"./dist/md-mirror/index.d.cts","default":"./dist/md-mirror/index.cjs"}},"./mcp-server":{"import":{"types":"./dist/mcp-server/index.d.ts","default":"./dist/mcp-server/index.js"},"require":{"types":"./dist/mcp-server/index.d.cts","default":"./dist/mcp-server/index.cjs"}}},"gitHead":"7596c7b86764706d4fc154b27f2241e7b1059321","private":false,"scripts":{"fix":"run-s lint:fix format","lint":"eslint . --cache --cache-location .cache/eslint/","test":"vitest run --passWithNoTests","build":"tsup","check":"run-s format:check lint type-check spell-check test build check-types-exports pack:dry-run audit:prod","clean":"rm -rf dist","format":"prettier --write .","prepare":"husky","release":"semantic-release","lint:fix":"eslint . --fix --cache --cache-location .cache/eslint/","audit:prod":"pnpm audit --prod --audit-level=critical","test:watch":"vitest","type-check":"tsc --noEmit","spell-check":"cspell lint --dot --no-must-find-files \"**/*.{ts,js,cjs,mjs,md,json,yml,yaml}\"","format:check":"prettier --check .","pack:dry-run":"pnpm pack --dry-run","check-types-exports":"npm_config_cache=.cache/npm attw --pack . --profile node16"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:66959c90-9bfb-4497-8bc3-c16b509bac05"}},"repository":{"url":"git+https://github.com/carrot-foundation/ai-discovery.git","type":"git"},"_npmVersion":"11.8.0","description":"AI discovery primitives for the Carrot Network: JSON-LD, llms.txt, robots, and a Markdown mirror.","directories":{},"_nodeVersion":"24.13.1","dependencies":{"zod":"^4.4.3","@orama/orama":"^3.1.18","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@10.29.3","devDependencies":{"jiti":"2.7.0","tsup":"8.5.1","vite":"8.0.11","husky":"9.1.7","cspell":"10.0.0","eslint":"10.3.0","vitest":"4.1.5","globals":"17.6.0","prettier":"3.8.3","@eslint/js":"10.0.1","typescript":"6.0.3","@types/node":"25.6.0","lint-staged":"17.0.2","npm-run-all2":"8.0.4","@commitlint/cli":"20.5.3","semantic-release":"25.0.3","typescript-eslint":"8.59.2","@arethetypeswrong/cli":"0.18.2","@semantic-release/git":"10.0.1","@semantic-release/npm":"13.1.5","@semantic-release/github":"12.0.6","@semantic-release/changelog":"6.0.3","@commitlint/config-conventional":"20.5.3","@semantic-release/commit-analyzer":"13.0.1","@semantic-release/release-notes-generator":"14.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ai-discovery_1.1.0_1778182504890_0.0635993313514549","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@carrot-foundation/ai-discovery","version":"1.1.1","keywords":["carrot","ai","llm","schema-org","jsonld","llms-txt","robots","markdown"],"author":{"name":"Carrot Foundation"},"license":"Apache-2.0","_id":"@carrot-foundation/ai-discovery@1.1.1","maintainers":[{"name":"carrot.fndn","email":"npm.admin@carrot.eco"},{"name":"amarcoscastelo","email":"amarcoscastelo@gmail.com"},{"name":"cristianosantos95","email":"cristianorsantos.95@gmail.com"},{"name":"sangalli","email":"sangalli@gmail.com"}],"homepage":"https://github.com/carrot-foundation/ai-discovery#readme","bugs":{"url":"https://github.com/carrot-foundation/ai-discovery/issues"},"dist":{"shasum":"b9067c63b4f09ebeb0cfb558c5fd3f5ac1906b43","tarball":"https://registry.npmjs.org/@carrot-foundation/ai-discovery/-/ai-discovery-1.1.1.tgz","fileCount":74,"integrity":"sha512-MJK/ur0GyJ5nLO7+gcsZvH0Hah9gsEQD1Mu3diJmtUg3CJ6tSGizpT/0lE/wCVLoW26tspKqlcWK08KCF2gshQ==","signatures":[{"sig":"MEUCIHeOpeDhg3zgyyISSA6G15Hdb2CL3+pVx6rDRd5vgUshAiEA7SS6BW1ergmHz7SzpW+Ak3W0r5Wy9FwnRT/+W+DVEl4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@carrot-foundation%2fai-discovery@1.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":565565},"main":"./dist/index.cjs","pnpm":{"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./orama":{"import":{"types":"./dist/orama/index.d.ts","default":"./dist/orama/index.js"},"require":{"types":"./dist/orama/index.d.cts","default":"./dist/orama/index.cjs"}},"./jsonld":{"import":{"types":"./dist/jsonld/index.d.ts","default":"./dist/jsonld/index.js"},"require":{"types":"./dist/jsonld/index.d.cts","default":"./dist/jsonld/index.cjs"}},"./robots":{"import":{"types":"./dist/robots/index.d.ts","default":"./dist/robots/index.js"},"require":{"types":"./dist/robots/index.d.cts","default":"./dist/robots/index.cjs"}},"./glossary":{"import":{"types":"./dist/glossary/index.d.ts","default":"./dist/glossary/index.js"},"require":{"types":"./dist/glossary/index.d.cts","default":"./dist/glossary/index.cjs"}},"./llms-txt":{"import":{"types":"./dist/llms-txt/index.d.ts","default":"./dist/llms-txt/index.js"},"require":{"types":"./dist/llms-txt/index.d.cts","default":"./dist/llms-txt/index.cjs"}},"./index-now":{"import":{"types":"./dist/index-now/index.d.ts","default":"./dist/index-now/index.js"},"require":{"types":"./dist/index-now/index.d.cts","default":"./dist/index-now/index.cjs"}},"./md-mirror":{"import":{"types":"./dist/md-mirror/index.d.ts","default":"./dist/md-mirror/index.js"},"require":{"types":"./dist/md-mirror/index.d.cts","default":"./dist/md-mirror/index.cjs"}},"./mcp-server":{"import":{"types":"./dist/mcp-server/index.d.ts","default":"./dist/mcp-server/index.js"},"require":{"types":"./dist/mcp-server/index.d.cts","default":"./dist/mcp-server/index.cjs"}}},"gitHead":"1bb2cfcca79e0ca783fa0f0c617cddec304e57af","private":false,"scripts":{"fix":"run-s lint:fix format","lint":"eslint . --cache --cache-location .cache/eslint/","test":"vitest run --passWithNoTests","build":"tsup","check":"run-s format:check lint type-check spell-check test build check-types-exports pack:dry-run audit:prod","clean":"rm -rf dist","format":"prettier --write .","prepare":"husky","release":"semantic-release","lint:fix":"eslint . --fix --cache --cache-location .cache/eslint/","audit:prod":"pnpm audit --prod --audit-level=critical","test:watch":"vitest","type-check":"tsc --noEmit","spell-check":"cspell lint --dot --no-must-find-files \"**/*.{ts,js,cjs,mjs,md,json,yml,yaml}\"","format:check":"prettier --check .","pack:dry-run":"pnpm pack --dry-run","check-types-exports":"npm_config_cache=.cache/npm attw --pack . --profile node16"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:66959c90-9bfb-4497-8bc3-c16b509bac05"}},"repository":{"url":"git+https://github.com/carrot-foundation/ai-discovery.git","type":"git"},"_npmVersion":"11.8.0","description":"AI discovery primitives for the Carrot Network: JSON-LD, llms.txt, robots, and a Markdown mirror.","directories":{},"_nodeVersion":"24.13.1","dependencies":{"zod":"^4.4.3","@orama/orama":"^3.1.18","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@10.29.3","devDependencies":{"jiti":"2.7.0","tsup":"8.5.1","vite":"8.0.11","husky":"9.1.7","cspell":"10.0.0","eslint":"10.3.0","vitest":"4.1.5","globals":"17.6.0","prettier":"3.8.3","@eslint/js":"10.0.1","typescript":"6.0.3","@types/node":"25.6.0","lint-staged":"17.0.2","npm-run-all2":"8.0.4","@commitlint/cli":"20.5.3","semantic-release":"25.0.3","typescript-eslint":"8.59.2","@arethetypeswrong/cli":"0.18.2","@semantic-release/git":"10.0.1","@semantic-release/npm":"13.1.5","@semantic-release/github":"12.0.6","@semantic-release/changelog":"6.0.3","@commitlint/config-conventional":"20.5.3","@semantic-release/commit-analyzer":"13.0.1","@semantic-release/release-notes-generator":"14.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ai-discovery_1.1.1_1778260617564_0.6995638899082244","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@carrot-foundation/ai-discovery","version":"1.1.2","keywords":["carrot","ai","llm","schema-org","jsonld","llms-txt","robots","markdown"],"author":{"name":"Carrot Foundation"},"license":"Apache-2.0","_id":"@carrot-foundation/ai-discovery@1.1.2","maintainers":[{"name":"carrot.fndn","email":"npm.admin@carrot.eco"},{"name":"amarcoscastelo","email":"amarcoscastelo@gmail.com"},{"name":"cristianosantos95","email":"cristianorsantos.95@gmail.com"},{"name":"sangalli","email":"sangalli@gmail.com"}],"homepage":"https://github.com/carrot-foundation/ai-discovery#readme","bugs":{"url":"https://github.com/carrot-foundation/ai-discovery/issues"},"dist":{"shasum":"ac487547f25c1d4558221130024369d3a6fad8a7","tarball":"https://registry.npmjs.org/@carrot-foundation/ai-discovery/-/ai-discovery-1.1.2.tgz","fileCount":74,"integrity":"sha512-BGME0zSfIKmM4/SBQ5C4zIJTLnEhwBiBtWljYSKrkn5Gm69GLelKaAaWSsAgDxEGvHK6DGPE2CRocWDWXEk2cQ==","signatures":[{"sig":"MEYCIQDZ2bY8jSzRl+lKEo56YvqvzJ9qoqn0HAD41msCcUOYSgIhAK93LjsDx3jutrhuOxIWnNkCf2NklytPGKrkQs/VQU5g","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@carrot-foundation%2fai-discovery@1.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":569275},"main":"./dist/index.cjs","pnpm":{"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./orama":{"import":{"types":"./dist/orama/index.d.ts","default":"./dist/orama/index.js"},"require":{"types":"./dist/orama/index.d.cts","default":"./dist/orama/index.cjs"}},"./jsonld":{"import":{"types":"./dist/jsonld/index.d.ts","default":"./dist/jsonld/index.js"},"require":{"types":"./dist/jsonld/index.d.cts","default":"./dist/jsonld/index.cjs"}},"./robots":{"import":{"types":"./dist/robots/index.d.ts","default":"./dist/robots/index.js"},"require":{"types":"./dist/robots/index.d.cts","default":"./dist/robots/index.cjs"}},"./glossary":{"import":{"types":"./dist/glossary/index.d.ts","default":"./dist/glossary/index.js"},"require":{"types":"./dist/glossary/index.d.cts","default":"./dist/glossary/index.cjs"}},"./llms-txt":{"import":{"types":"./dist/llms-txt/index.d.ts","default":"./dist/llms-txt/index.js"},"require":{"types":"./dist/llms-txt/index.d.cts","default":"./dist/llms-txt/index.cjs"}},"./index-now":{"import":{"types":"./dist/index-now/index.d.ts","default":"./dist/index-now/index.js"},"require":{"types":"./dist/index-now/index.d.cts","default":"./dist/index-now/index.cjs"}},"./md-mirror":{"import":{"types":"./dist/md-mirror/index.d.ts","default":"./dist/md-mirror/index.js"},"require":{"types":"./dist/md-mirror/index.d.cts","default":"./dist/md-mirror/index.cjs"}},"./mcp-server":{"import":{"types":"./dist/mcp-server/index.d.ts","default":"./dist/mcp-server/index.js"},"require":{"types":"./dist/mcp-server/index.d.cts","default":"./dist/mcp-server/index.cjs"}}},"gitHead":"353b1849e46bf3f2b8a3cd7c8489f65b011393e9","private":false,"scripts":{"fix":"run-s lint:fix format","lint":"eslint . --cache --cache-location .cache/eslint/","test":"vitest run --passWithNoTests","build":"tsup","check":"run-s format:check lint type-check spell-check test build check-types-exports pack:dry-run audit:prod","clean":"rm -rf dist","format":"prettier --write .","prepare":"husky","release":"semantic-release","lint:fix":"eslint . --fix --cache --cache-location .cache/eslint/","audit:prod":"pnpm audit --prod --audit-level=critical","test:watch":"vitest","type-check":"tsc --noEmit","spell-check":"cspell lint --dot --no-must-find-files \"**/*.{ts,js,cjs,mjs,md,json,yml,yaml}\"","format:check":"prettier --check .","pack:dry-run":"pnpm pack --dry-run","check-types-exports":"npm_config_cache=.cache/npm attw --pack . --profile node16"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:66959c90-9bfb-4497-8bc3-c16b509bac05"}},"repository":{"url":"git+https://github.com/carrot-foundation/ai-discovery.git","type":"git"},"_npmVersion":"11.8.0","description":"AI discovery primitives for the Carrot Network: JSON-LD, llms.txt, robots, and a Markdown mirror.","directories":{},"_nodeVersion":"24.13.1","dependencies":{"zod":"^4.4.3","@orama/orama":"^3.1.18","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@10.29.3","devDependencies":{"jiti":"2.7.0","tsup":"8.5.1","vite":"8.0.11","husky":"9.1.7","cspell":"10.0.0","eslint":"10.3.0","vitest":"4.1.5","globals":"17.6.0","prettier":"3.8.3","@eslint/js":"10.0.1","typescript":"6.0.3","@types/node":"25.6.0","lint-staged":"17.0.2","npm-run-all2":"8.0.4","@commitlint/cli":"20.5.3","semantic-release":"25.0.3","typescript-eslint":"8.59.2","@arethetypeswrong/cli":"0.18.2","@semantic-release/git":"10.0.1","@semantic-release/npm":"13.1.5","@semantic-release/github":"12.0.6","@semantic-release/changelog":"6.0.3","@commitlint/config-conventional":"20.5.3","@semantic-release/commit-analyzer":"13.0.1","@semantic-release/release-notes-generator":"14.1.0"},"_npmOperationalInternal":{"tmp":"tmp/ai-discovery_1.1.2_1778604360419_0.6931416648405297","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@carrot-foundation/ai-discovery","version":"1.2.0","description":"AI discovery primitives for the Carrot Network: JSON-LD, llms.txt, robots, and a Markdown mirror.","license":"Apache-2.0","private":false,"type":"module","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./jsonld":{"import":{"types":"./dist/jsonld/index.d.ts","default":"./dist/jsonld/index.js"},"require":{"types":"./dist/jsonld/index.d.cts","default":"./dist/jsonld/index.cjs"}},"./robots":{"import":{"types":"./dist/robots/index.d.ts","default":"./dist/robots/index.js"},"require":{"types":"./dist/robots/index.d.cts","default":"./dist/robots/index.cjs"}},"./llms-txt":{"import":{"types":"./dist/llms-txt/index.d.ts","default":"./dist/llms-txt/index.js"},"require":{"types":"./dist/llms-txt/index.d.cts","default":"./dist/llms-txt/index.cjs"}},"./md-mirror":{"import":{"types":"./dist/md-mirror/index.d.ts","default":"./dist/md-mirror/index.js"},"require":{"types":"./dist/md-mirror/index.d.cts","default":"./dist/md-mirror/index.cjs"}},"./mcp-server":{"import":{"types":"./dist/mcp-server/index.d.ts","default":"./dist/mcp-server/index.js"},"require":{"types":"./dist/mcp-server/index.d.cts","default":"./dist/mcp-server/index.cjs"}},"./orama":{"import":{"types":"./dist/orama/index.d.ts","default":"./dist/orama/index.js"},"require":{"types":"./dist/orama/index.d.cts","default":"./dist/orama/index.cjs"}},"./index-now":{"import":{"types":"./dist/index-now/index.d.ts","default":"./dist/index-now/index.js"},"require":{"types":"./dist/index-now/index.d.cts","default":"./dist/index-now/index.cjs"}},"./glossary":{"import":{"types":"./dist/glossary/index.d.ts","default":"./dist/glossary/index.js"},"require":{"types":"./dist/glossary/index.d.cts","default":"./dist/glossary/index.cjs"}}},"packageManager":"pnpm@10.29.3","engines":{"node":">=22"},"keywords":["carrot","ai","llm","schema-org","jsonld","llms-txt","robots","markdown"],"author":{"name":"Carrot Foundation"},"repository":{"type":"git","url":"git+https://github.com/carrot-foundation/ai-discovery.git"},"scripts":{"build":"tsup","clean":"rm -rf dist","check":"run-s format:check lint type-check spell-check test build check-types-exports pack:dry-run audit:prod","check-types-exports":"npm_config_cache=.cache/npm attw --pack . --profile node16","fix":"run-s lint:fix format","format":"prettier --write .","format:check":"prettier --check .","lint":"eslint . --cache --cache-location .cache/eslint/","lint:fix":"eslint . --fix --cache --cache-location .cache/eslint/","pack:dry-run":"pnpm pack --dry-run","prepare":"husky","release":"semantic-release","audit:prod":"pnpm audit --prod --audit-level=critical","spell-check":"cspell lint --dot --no-must-find-files \"**/*.{ts,js,cjs,mjs,md,json,yml,yaml}\"","test":"vitest run --passWithNoTests","test:watch":"vitest","type-check":"tsc --noEmit"},"dependencies":{"@modelcontextprotocol/sdk":"^1.29.0","@orama/orama":"^3.1.18","zod":"^4.4.3"},"devDependencies":{"@arethetypeswrong/cli":"0.18.2","@commitlint/cli":"20.5.3","@commitlint/config-conventional":"20.5.3","@eslint/js":"10.0.1","@semantic-release/changelog":"6.0.3","@semantic-release/commit-analyzer":"13.0.1","@semantic-release/git":"10.0.1","@semantic-release/github":"12.0.6","@semantic-release/npm":"13.1.5","@semantic-release/release-notes-generator":"14.1.0","@types/node":"25.6.0","cspell":"10.0.0","eslint":"10.3.0","globals":"17.6.0","husky":"9.1.7","jiti":"2.7.0","lint-staged":"17.0.2","npm-run-all2":"8.0.4","prettier":"3.8.3","semantic-release":"25.0.3","tsup":"8.5.1","typescript":"6.0.3","typescript-eslint":"8.59.2","vite":"8.0.11","vitest":"4.1.5"},"publishConfig":{"access":"public","provenance":true,"registry":"https://registry.npmjs.org/"},"pnpm":{"onlyBuiltDependencies":["esbuild"]},"gitHead":"d310220797216e39dc8b156df550f45701f98a59","_id":"@carrot-foundation/ai-discovery@1.2.0","bugs":{"url":"https://github.com/carrot-foundation/ai-discovery/issues"},"homepage":"https://github.com/carrot-foundation/ai-discovery#readme","_nodeVersion":"24.13.1","_npmVersion":"11.8.0","dist":{"integrity":"sha512-Fc9+heBzoBb0wZ0/h5boghhIu/UIsAGtxkKvXGeVIYepuYxuqzVqE1NlQYyv9eGyUzgU+4/iDou+y47ZWj9aMg==","shasum":"b553452c9b267c2310649f4bd67cf464b097ead0","tarball":"https://registry.npmjs.org/@carrot-foundation/ai-discovery/-/ai-discovery-1.2.0.tgz","fileCount":74,"unpackedSize":613042,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@carrot-foundation%2fai-discovery@1.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDIJcTo6KglEUK69hMLn9ZFYxPvRnxs9H+WtcFBs5yUsgIhAP3e47Lt9qsGzqBr2OD3Tv1THeuLoq/Bifcn7tHMaL4d"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:66959c90-9bfb-4497-8bc3-c16b509bac05"}},"directories":{},"maintainers":[{"name":"carrot.fndn","email":"npm.admin@carrot.eco"},{"name":"amarcoscastelo","email":"amarcoscastelo@gmail.com"},{"name":"cristianosantos95","email":"cristianorsantos.95@gmail.com"},{"name":"sangalli","email":"sangalli@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ai-discovery_1.2.0_1778691688052_0.03858957905938576"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-07T16:13:23.847Z","modified":"2026-05-13T17:01:28.773Z","1.0.0":"2026-05-07T16:13:24.128Z","1.1.0":"2026-05-07T19:35:05.107Z","1.1.1":"2026-05-08T17:16:57.742Z","1.1.2":"2026-05-12T16:46:00.563Z","1.2.0":"2026-05-13T17:01:28.296Z"},"bugs":{"url":"https://github.com/carrot-foundation/ai-discovery/issues"},"author":{"name":"Carrot Foundation"},"license":"Apache-2.0","homepage":"https://github.com/carrot-foundation/ai-discovery#readme","keywords":["carrot","ai","llm","schema-org","jsonld","llms-txt","robots","markdown"],"repository":{"type":"git","url":"git+https://github.com/carrot-foundation/ai-discovery.git"},"description":"AI discovery primitives for the Carrot Network: JSON-LD, llms.txt, robots, and a Markdown mirror.","maintainers":[{"name":"carrot.fndn","email":"npm.admin@carrot.eco"},{"name":"amarcoscastelo","email":"amarcoscastelo@gmail.com"},{"name":"cristianosantos95","email":"cristianorsantos.95@gmail.com"},{"name":"sangalli","email":"sangalli@gmail.com"}],"readme":"# @carrot-foundation/ai-discovery\n\n[![npm version](https://img.shields.io/npm/v/@carrot-foundation/ai-discovery)](https://www.npmjs.com/package/@carrot-foundation/ai-discovery)\n[![CI](https://img.shields.io/github/actions/workflow/status/carrot-foundation/ai-discovery/ci.yml?branch=main)](https://github.com/carrot-foundation/ai-discovery/actions)\n[![License](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](./LICENSE)\n\nAI discovery primitives for the Carrot Network: Schema.org JSON-LD builders,\n`llms.txt` generators, AI-aware `robots.txt` helpers, Markdown mirror routes,\nread-only MCP scaffolding, keyword search, IndexNow submission helpers, and a\npublic docs glossary client.\n\nUse this package when a public Carrot site or compatible ecosystem tool needs\nto expose the same content clearly to search engines, AI crawlers, LLM clients,\nand human developers.\n\n## Status\n\nRelease-triggering merges to `main` publish automatically after CI succeeds, so\nonly merge them after Cristiano has reviewed the package PR and tarball.\n\n## Installation\n\n```bash\npnpm add @carrot-foundation/ai-discovery\n# or\nnpm install @carrot-foundation/ai-discovery\n```\n\nRequires Node.js `>=22`. The package is ESM-first and ships CommonJS dual\noutput for consumers that still use `require()`.\n\n## What It Provides\n\n| Module          | Import path                                  | Purpose                                                         |\n| --------------- | -------------------------------------------- | --------------------------------------------------------------- |\n| JSON-LD         | `@carrot-foundation/ai-discovery/jsonld`     | Build validated Schema.org graph nodes for public pages.        |\n| Robots          | `@carrot-foundation/ai-discovery/robots`     | Generate `robots.txt` policies for known AI bots.               |\n| llms.txt        | `@carrot-foundation/ai-discovery/llms-txt`   | Generate `/llms.txt` and `/llms-full.txt` style Markdown files. |\n| Markdown mirror | `@carrot-foundation/ai-discovery/md-mirror`  | Create a `Request -> Response` Markdown route handler.          |\n| MCP server      | `@carrot-foundation/ai-discovery/mcp-server` | Register read-only tools and handle Streamable HTTP lifecycle.  |\n| Orama search    | `@carrot-foundation/ai-discovery/orama`      | Build, search, serialize, and restore keyword-only indexes.     |\n| IndexNow        | `@carrot-foundation/ai-discovery/index-now`  | Normalize, chunk, submit, and summarize IndexNow URL batches.   |\n| Glossary client | `@carrot-foundation/ai-discovery/glossary`   | Query the public Carrot Docs MCP glossary tool with cache.      |\n| Root namespace  | `@carrot-foundation/ai-discovery`            | Namespaced exports for all modules.                             |\n\n## Quick Start\n\n### Add JSON-LD to a page\n\n```typescript\nimport {\n  article,\n  compose,\n  organization,\n  website,\n} from \"@carrot-foundation/ai-discovery/jsonld\";\n\nconst graph = compose([\n  organization({\n    name: \"Carrot Foundation\",\n    url: \"https://carrot.eco\",\n    logo: \"https://carrot.eco/logo.png\",\n    description: \"Public infrastructure for environmental assets.\",\n  }),\n  website({\n    name: \"Carrot Documentation\",\n    url: \"https://docs.carrot.eco\",\n    inLanguage: [\"en\", \"pt-BR\"],\n    searchUrlTemplate: \"https://docs.carrot.eco/search?q={query}\",\n  }),\n  article({\n    url: \"https://docs.carrot.eco/docs/concepts/dmrv\",\n    headline: \"Digital Measurement, Reporting and Verification\",\n    description:\n      \"How Carrot structures source data, evidence, and verification.\",\n    datePublished: \"2026-04-15\",\n    dateModified: \"2026-05-01\",\n    author: {\n      name: \"Carrot Foundation\",\n      sameAs: [\"https://carrot.eco\"],\n    },\n    inLanguage: \"en\",\n    image: \"https://docs.carrot.eco/og/docs/concepts/dmrv.png\",\n  }),\n]);\n\nconst jsonLd = JSON.stringify(graph);\n```\n\nRender `jsonLd` in an `application/ld+json` script tag. Builders validate input\nwith Zod before returning plain objects, so invalid URLs, dates, language tags,\nor missing required fields fail early.\n\n### Generate an AI-aware robots.txt\n\n```typescript\nimport { buildRobots } from \"@carrot-foundation/ai-discovery/robots\";\n\nexport function GET() {\n  return new Response(\n    buildRobots({\n      allow: \"fetchers-only\",\n      sitemap: \"https://docs.carrot.eco/sitemap.xml\",\n      disallowPaths: [\"/api/\", \"/internal/\"],\n    }),\n    {\n      headers: {\n        \"content-type\": \"text/plain; charset=utf-8\",\n      },\n    },\n  );\n}\n```\n\n`allow` supports three modes:\n\n| Mode            | Behavior                                                     |\n| --------------- | ------------------------------------------------------------ |\n| `all-ai-bots`   | Allows known AI training, search-index, and user-fetch bots. |\n| `fetchers-only` | Allows search and user-fetch bots, blocks training bots.     |\n| `block-all-ai`  | Blocks all known AI bots listed by this package.             |\n\nThe canonical bot list lives in `AI_BOTS`, with each entry classified as\n`training`, `search-index`, or `user-fetch`.\n\n### Build llms.txt files\n\n```typescript\nimport {\n  buildFull,\n  buildIndex,\n} from \"@carrot-foundation/ai-discovery/llms-txt\";\n\nconst index = buildIndex({\n  site: {\n    name: \"Carrot Documentation\",\n    url: \"https://docs.carrot.eco\",\n    tagline: \"The public reference for the Carrot Network.\",\n  },\n  sections: [\n    {\n      title: \"Concepts\",\n      urls: [\n        {\n          title: \"dMRV\",\n          url: \"https://docs.carrot.eco/docs/concepts/dmrv\",\n          description:\n            \"Digital Measurement, Reporting and Verification in Carrot.\",\n        },\n      ],\n    },\n  ],\n});\n\nconst full = buildFull({\n  pages: [\n    {\n      title: \"dMRV\",\n      url: \"https://docs.carrot.eco/docs/concepts/dmrv\",\n      markdown: \"# dMRV\\n\\nDigital Measurement, Reporting and Verification.\",\n    },\n  ],\n});\n```\n\n`buildIndex()` escapes Markdown-sensitive text and formats URLs for a compact\nindex file. `buildFull()` concatenates page Markdown with source URL comments\nso LLM clients can trace each block back to its canonical page.\n\n### Expose a Markdown mirror route\n\n```typescript\nimport { createMdMirrorRoute } from \"@carrot-foundation/ai-discovery/md-mirror\";\n\nexport const GET = createMdMirrorRoute<{ slug?: string[] }>({\n  async load({ params }) {\n    const slug = params.slug?.join(\"/\") ?? \"index\";\n    const page = await loadPageAsMarkdown(slug);\n\n    if (page === null) return null;\n\n    return {\n      markdown: page.markdown,\n      sourceUrl: `https://docs.carrot.eco/docs/${slug}`,\n    };\n  },\n});\n```\n\nThe route helper returns `404` when `load()` returns `null`, otherwise it serves\n`text/markdown; charset=utf-8`, sets `x-source-url`, and applies a cache-control\nheader. The default cache policy is `public, max-age=300, s-maxage=86400`.\n\n### Register read-only MCP tools\n\n```typescript\nimport { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod\";\nimport { registerReadOnlyTool } from \"@carrot-foundation/ai-discovery/mcp-server\";\n\nconst server = new McpServer({ name: \"carrot-docs\", version: \"1.0.0\" });\n\nregisterReadOnlyTool(server, {\n  name: \"search_docs\",\n  title: \"Search docs\",\n  description: \"Search public Carrot documentation.\",\n  inputSchema: {\n    query: z.string(),\n  },\n  handler: (input) => ({\n    results: searchPublicDocs(input.query),\n  }),\n});\n```\n\n`registerReadOnlyTool()` applies the same safe annotations to each tool:\n`readOnlyHint: true`, `destructiveHint: false`, `idempotentHint: true`, and\n`openWorldHint: false`. `createMcpHttpHandler()` provides a generic Streamable\nHTTP request lifecycle with app-provided rate keys, host-gated telemetry, and\ntool-name allowlists so raw bodies, raw IP-derived keys, headers, and prompt text\nare not emitted by the library.\n\n### Build a keyword search index\n\n```typescript\nimport {\n  buildSearchIndex,\n  searchIndex,\n  serializeSearchIndex,\n} from \"@carrot-foundation/ai-discovery/orama\";\n\nconst index = await buildSearchIndex([\n  {\n    id: \"en/blog/massid\",\n    title: \"MassID launch\",\n    url: \"https://www.carrot.eco/en/blog/massid\",\n    text: \"MassID traceability for circular economy data.\",\n    locale: \"en\",\n    kind: \"post\",\n  },\n]);\n\nconst results = await searchIndex(index, { query: \"massid\", limit: 5 });\nconst serialized = serializeSearchIndex(index);\n```\n\nThe Orama wrapper is keyword-only in `1.1.0`. Embeddings and cross-property\nfederation are intentionally left to later phases.\n\n### Submit IndexNow URL batches\n\n```typescript\nimport {\n  chunkIndexNowUrls,\n  formatGitHubActionsSummary,\n  submitIndexNowUrls,\n} from \"@carrot-foundation/ai-discovery/index-now\";\n\nconst urls = [\n  \"https://www.carrot.eco/en\",\n  \"https://www.carrot.eco/en/blog/massid\",\n];\n\nconst indexNowKey = process.env.INDEXNOW_KEY;\nif (!indexNowKey) {\n  throw new Error(\"INDEXNOW_KEY is required\");\n}\n\nfor (const batch of chunkIndexNowUrls(urls)) {\n  const result = await submitIndexNowUrls({\n    host: \"www.carrot.eco\",\n    key: indexNowKey,\n    keyLocation: \"https://www.carrot.eco/indexnow-key.txt\",\n    urls: batch,\n    fetch,\n  });\n\n  console.log(formatGitHubActionsSummary(result));\n}\n```\n\n`normalizeIndexNowUrls()` keeps only unique HTTPS URLs under the configured host.\nNon-2xx responses return typed failures without including raw response bodies.\nSet `INDEXNOW_KEY` before calling `submitIndexNowUrls()`.\n\n### Query the public docs glossary MCP\n\n```typescript\nimport {\n  createDocsGlossaryClient,\n  createMemoryGlossaryCache,\n  getGlossaryTerm,\n} from \"@carrot-foundation/ai-discovery/glossary\";\n\nconst glossary = createDocsGlossaryClient({\n  endpoint: \"https://docs.carrot.eco/mcp\",\n  fetch,\n  cache: createMemoryGlossaryCache({ ttlMs: 60_000 }),\n});\n\nconst trc = await getGlossaryTerm(glossary, { term: \"TRC\", locale: \"en\" });\n```\n\nThe glossary client is scoped to the public `get_glossary_term` tool. It sends no\n`Authorization` header by default and caches normalized term-locale lookups when\na cache is provided.\n\n## JSON-LD Builders\n\nThe JSON-LD module exports builders for the public page types Carrot sites use\nmost often:\n\n| Builder            | Schema.org node                                             |\n| ------------------ | ----------------------------------------------------------- |\n| `apiReference()`   | `APIReference` with a `WebAPI` target.                      |\n| `article()`        | `BlogPosting`, `Article`, `TechArticle`, or `HowTo`.        |\n| `breadcrumbList()` | `BreadcrumbList`.                                           |\n| `definedTerm()`    | `DefinedTerm`.                                              |\n| `definedTermSet()` | `DefinedTermSet`.                                           |\n| `faqPage()`        | `FAQPage`.                                                  |\n| `organization()`   | `Organization`.                                             |\n| `person()`         | `Person`.                                                   |\n| `podcastEpisode()` | `PodcastEpisode`, with optional media and platform links.   |\n| `podcastSeries()`  | `PodcastSeries`, with optional web feed and platform links. |\n| `speakable()`      | `SpeakableSpecification`.                                   |\n| `website()`        | `WebSite`, with optional `SearchAction`.                    |\n\nUse `compose(nodes)` for the canonical output shape:\n\n```json\n{\n  \"@context\": \"https://schema.org\",\n  \"@graph\": []\n}\n```\n\nUse `schemaId(siteOrigin, kind, payload?)` when you need deterministic `@id`\nvalues for custom nodes.\n\n## Design Principles\n\n- Builders are pure. They return strings or plain objects and do not perform\n  I/O.\n- Validation happens at the boundary through Zod schemas.\n- Optional fields are omitted when absent instead of being set to `undefined`.\n- AI bot policy is explicit and generated from a reviewed list.\n- Markdown outputs preserve canonical source URLs for traceability.\n- Each top-level module is available as a subpath export for smaller consumer\n  bundles.\n\n## Project Structure\n\n```text\nsrc/\n  index.ts          # Root namespaced exports\n  jsonld/           # Schema.org JSON-LD builders and validation helpers\n  robots/           # AI bot registry and robots.txt builder\n  llms-txt/         # llms.txt index and full-content builders\n  md-mirror/        # Request -> Response Markdown route helper\n  mcp-server/       # Read-only MCP registration and HTTP lifecycle helpers\n  orama/            # Keyword search index helpers\n  index-now/        # IndexNow URL normalization and submission helpers\n  glossary/         # Carrot Docs glossary MCP client\ntest/\n  jsonld/\n  robots/\n  llms-txt/\n  md-mirror/\n  mcp-server/\n  orama/\n  index-now/\n  glossary/\n```\n\nWhen adding a new top-level module, keep the public surface in sync:\n\n1. Add import and require pairs to `package.json` `exports`.\n2. Add the module entry to `tsup.config.ts`.\n3. Add a namespaced re-export to `src/index.ts`.\n4. Mirror tests under `test/<module>/`.\n\n## Development\n\n```bash\npnpm install --frozen-lockfile\npnpm test\npnpm build\npnpm type-check\npnpm lint\npnpm format:check\npnpm spell-check\npnpm check\n```\n\n`pnpm check` is the full local gate and mirrors CI: format, lint, type-check,\nspell-check, tests, build, exported type checks, dry-run packing, and production\naudit.\n\nUseful focused commands:\n\n```bash\npnpm vitest run test/jsonld/article.test.ts\npnpm vitest -t \"robots\"\npnpm check-types-exports\npnpm pack --dry-run\n```\n\n## Release\n\nReleases are automated with semantic-release from `main` after the `Check Code`\nworkflow succeeds for a push. Manual `workflow_dispatch` is kept as a recovery\npath.\n\nDo not bump `version` manually. It stays `0.0.0-development`; semantic-release\ndetermines the published version from Conventional Commits.\n\n## Related Carrot Projects\n\n- [`@carrot-foundation/schemas`](https://github.com/carrot-foundation/schemas)\n  provides Zod validation schemas and generated JSON Schemas for Carrot\n  metadata.\n- [`carrot-foundation/methodology-rules`](https://github.com/carrot-foundation/methodology-rules)\n  provides open-source rule processors for the Carrot dMRV pipeline.\n- [Carrot Documentation](https://docs.carrot.eco) is the public reference for\n  Carrot concepts, methodologies, and integration guides.\n\n## License\n\n[Apache License 2.0](./LICENSE). See [NOTICE](./NOTICE) for attribution,\ntrademark, and warranty notes.\n","readmeFilename":"README.md"}