{"_id":"@dualmark/core","_rev":"9-d1a5a8d99c9c37f9ec8ac334f22974a7","name":"@dualmark/core","dist-tags":{"latest":"0.11.0"},"versions":{"0.2.0":{"name":"@dualmark/core","version":"0.2.0","keywords":["aeo","answer-engine-optimization","ai-search","ai-agents","llm","chatgpt","claude","perplexity","markdown","content-negotiation","llms-txt","dualmark"],"author":{"url":"https://dodopayments.com","name":"Dodo Payments","email":"opensource@dodopayments.com"},"license":"MIT","_id":"@dualmark/core@0.2.0","maintainers":[{"name":"dodopayments","email":"ayush@dodopayments.com"}],"homepage":"https://github.com/dodopayments/dualmark/tree/main/packages/core#readme","bugs":{"url":"https://github.com/dodopayments/dualmark/issues"},"dist":{"shasum":"2c939a85c2a76b3935eca76e28047d1d5def5fd7","tarball":"https://registry.npmjs.org/@dualmark/core/-/core-0.2.0.tgz","fileCount":9,"integrity":"sha512-8xpTOoGk41Uz0itarXoCLnb+mxV/V+2d55Oopkha00pA+Lf2tUL2MTemg2rRKiAx2p/LYDuuce776hs5HTX3Pw==","signatures":[{"sig":"MEQCICA5z6SghIoc1LAP5rJiD1ikuDP2HTomNbj6md4GvdBqAiBM4d6AzgePFdv0CcLlNgyaf4MZtMzGEhimg9tglU7JGg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":118566},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.18.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"funding":"https://github.com/sponsors/dodopayments","gitHead":"09810c1cd26cc29241e91dafe71981c2e4282b61","scripts":{"test":"vitest run","build":"tsup","clean":"rm -rf dist .turbo","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"dodopayments","email":"ayush@dodopayments.com"},"repository":{"url":"git+https://github.com/dodopayments/dualmark.git","type":"git","directory":"packages/core"},"_npmVersion":"10.9.7","description":"Framework-agnostic primitives for AEO infrastructure: content negotiation, AI-bot detection, markdown response, token estimation, composition helpers.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","vitest":"^2.1.8","fast-check":"^3.23.2","typescript":"^5.7.2","@types/node":"^22.10.0","@vitest/coverage-v8":"^2.1.8"},"_npmOperationalInternal":{"tmp":"tmp/core_0.2.0_1777998338281_0.31136844319684776","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@dualmark/core","version":"0.2.1","keywords":["aeo","answer-engine-optimization","ai-search","ai-agents","llm","chatgpt","claude","perplexity","markdown","content-negotiation","llms-txt","dualmark"],"author":"Dodo Payments <opensource@dodopayments.com> (https://dodopayments.com)","license":"MIT","_id":"@dualmark/core@0.2.1","maintainers":[{"name":"dodopayments","email":"ayush@dodopayments.com"}],"homepage":"https://github.com/dodopayments/dualmark/tree/main/packages/core#readme","bugs":{"url":"https://github.com/dodopayments/dualmark/issues"},"dist":{"shasum":"b72698083f6f0025daedecc83426b06952896ab1","tarball":"https://registry.npmjs.org/@dualmark/core/-/core-0.2.1.tgz","fileCount":9,"integrity":"sha512-NVXtq4JVl02Trxnsu6L5gnueJtF2SFtAsjeA9VOiL5hv1bY2TCvgY0msBw68mIl6EffJgirHY0JiT4aPWCtUxA==","signatures":[{"sig":"MEUCIQC3SK2zQTyoycuTA3d/aEWeMdNxOtNy7bMH8z4poBKJlQIgTXOqCO1szqkNQgwaTpVYiJ1o/uewY4wTnEIaLugkf/Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":118566},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"b72698083f6f0025daedecc83426b06952896ab1","engines":{"node":">=18.18.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"funding":"https://github.com/sponsors/dodopayments","scripts":{"test":"vitest run","build":"tsup","clean":"rm -rf dist .turbo","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"dodopayments","email":"ayush@dodopayments.com"},"_integrity":"sha512-NVXtq4JVl02Trxnsu6L5gnueJtF2SFtAsjeA9VOiL5hv1bY2TCvgY0msBw68mIl6EffJgirHY0JiT4aPWCtUxA==","repository":{"url":"git+https://github.com/dodopayments/dualmark.git","type":"git","directory":"packages/core"},"_npmVersion":"10.8.3","description":"Framework-agnostic primitives for AEO infrastructure: content negotiation, AI-bot detection, markdown response, token estimation, composition helpers.","directories":{},"sideEffects":false,"_nodeVersion":"24.3.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","vitest":"^2.1.8","fast-check":"^3.23.2","typescript":"^5.7.2","@types/node":"^22.10.0","@vitest/coverage-v8":"^2.1.8"},"_npmOperationalInternal":{"tmp":"tmp/core_0.2.1_1777998909757_0.7624923156676793","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@dualmark/core","version":"0.3.0","keywords":["aeo","answer-engine-optimization","ai-search","ai-agents","llm","chatgpt","claude","perplexity","markdown","content-negotiation","llms-txt","dualmark"],"author":"Dodo Payments <opensource@dodopayments.com> (https://dodopayments.com)","license":"Apache-2.0","_id":"@dualmark/core@0.3.0","maintainers":[{"name":"dodopayments","email":"ayush@dodopayments.com"}],"homepage":"https://github.com/dodopayments/dualmark/tree/main/packages/core#readme","bugs":{"url":"https://github.com/dodopayments/dualmark/issues"},"dist":{"shasum":"293568787391b3e3e48a146801cd2f3eadf61ceb","tarball":"https://registry.npmjs.org/@dualmark/core/-/core-0.3.0.tgz","fileCount":9,"integrity":"sha512-hv3C8q/MewpfIOSQB7z9cFUYPvutt5vBK4V+ui/sAMgG8fNgbdbsK1bzt+ISw+oh/ZeEGArPsbb3bJtQW3UqXA==","signatures":[{"sig":"MEYCIQCfskl7VGFUyLCIpZN/s3esxwyISTo0cNh7IhSfJs0wDwIhAI6080r0Aw9PQEGlx4NJiLh9FtCDhzgES00n4ZtCWMmJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":128795},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"293568787391b3e3e48a146801cd2f3eadf61ceb","engines":{"node":">=18.18.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"funding":"https://github.com/sponsors/dodopayments","scripts":{"test":"vitest run","build":"tsup","clean":"rm -rf dist .turbo","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"dodopayments","email":"ayush@dodopayments.com"},"_integrity":"sha512-hv3C8q/MewpfIOSQB7z9cFUYPvutt5vBK4V+ui/sAMgG8fNgbdbsK1bzt+ISw+oh/ZeEGArPsbb3bJtQW3UqXA==","repository":{"url":"git+https://github.com/dodopayments/dualmark.git","type":"git","directory":"packages/core"},"_npmVersion":"10.8.3","description":"Framework-agnostic primitives for AEO infrastructure: content negotiation, AI-bot detection, markdown response, token estimation, composition helpers.","directories":{},"sideEffects":false,"_nodeVersion":"24.3.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","vitest":"^2.1.8","fast-check":"^3.23.2","typescript":"^5.7.2","@types/node":"^22.10.0","@vitest/coverage-v8":"^2.1.8"},"_npmOperationalInternal":{"tmp":"tmp/core_0.3.0_1778011953513_0.4989786549166828","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@dualmark/core","version":"0.3.1","keywords":["aeo","answer-engine-optimization","ai-search","ai-agents","llm","chatgpt","claude","perplexity","markdown","content-negotiation","llms-txt","dualmark"],"author":"Dodo Payments <opensource@dodopayments.com> (https://dodopayments.com)","license":"Apache-2.0","_id":"@dualmark/core@0.3.1","maintainers":[{"name":"dodopayments","email":"ayush@dodopayments.com"}],"homepage":"https://github.com/dodopayments/dualmark/tree/main/packages/core#readme","bugs":{"url":"https://github.com/dodopayments/dualmark/issues"},"dist":{"shasum":"49616fe5bc64159929d0482715930f42ec42a561","tarball":"https://registry.npmjs.org/@dualmark/core/-/core-0.3.1.tgz","fileCount":9,"integrity":"sha512-Oh+o+RBR4ar5BefZBIFjQJq627/c98TSr4i4vaVmScBlhflNiGpJW6GqCJTlIp5ROt5vtAfFEKY+sdfRMhdF6w==","signatures":[{"sig":"MEYCIQCLZEgeAupEoaib7ve2/1jftP/UBtx1xCnLWQFJb+zKVgIhAMviy4QZ+PcJ44Nyf2pmdQk1Lyoodv4IeoECBR0ZnR9W","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":128795},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"49616fe5bc64159929d0482715930f42ec42a561","engines":{"node":">=18.18.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"funding":"https://github.com/sponsors/dodopayments","scripts":{"test":"vitest run","build":"tsup","clean":"rm -rf dist .turbo","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"dodopayments","email":"ayush@dodopayments.com"},"_integrity":"sha512-Oh+o+RBR4ar5BefZBIFjQJq627/c98TSr4i4vaVmScBlhflNiGpJW6GqCJTlIp5ROt5vtAfFEKY+sdfRMhdF6w==","repository":{"url":"git+https://github.com/dodopayments/dualmark.git","type":"git","directory":"packages/core"},"_npmVersion":"10.8.3","description":"Framework-agnostic primitives for AEO infrastructure: content negotiation, AI-bot detection, markdown response, token estimation, composition helpers.","directories":{},"sideEffects":false,"_nodeVersion":"24.3.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","vitest":"^2.1.8","fast-check":"^3.23.2","typescript":"^5.7.2","@types/node":"^22.10.0","@vitest/coverage-v8":"^2.1.8"},"_npmOperationalInternal":{"tmp":"tmp/core_0.3.1_1778013983082_0.5167833256680978","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@dualmark/core","version":"0.5.0","keywords":["aeo","answer-engine-optimization","ai-search","ai-agents","llm","chatgpt","claude","perplexity","markdown","content-negotiation","llms-txt","dualmark"],"author":"Dodo Payments <opensource@dodopayments.com> (https://dodopayments.com)","license":"Apache-2.0","_id":"@dualmark/core@0.5.0","maintainers":[{"name":"dodopayments","email":"ayush@dodopayments.com"}],"homepage":"https://github.com/dodopayments/dualmark/tree/main/packages/core#readme","bugs":{"url":"https://github.com/dodopayments/dualmark/issues"},"dist":{"shasum":"0913dc9d5e5a9eb229970c972dc2113690ea3ff0","tarball":"https://registry.npmjs.org/@dualmark/core/-/core-0.5.0.tgz","fileCount":9,"integrity":"sha512-1/ysH0zbcDQx0gv1jJvN6ZeeL5EQJy+E5ZhzTAz+qs3Pl2ZNAlzp9HDhffsU+SmoPvgSjIpHBK410E/Jy53lvA==","signatures":[{"sig":"MEQCIH929VGDQwNbg7SsT/OSN9RRH83TuIxPUBRSCLgjo4u8AiB+YhsQv1aSXqNBJl1HiVJn/ptfobiN82yFoYuasFuWmA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":128795},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"0913dc9d5e5a9eb229970c972dc2113690ea3ff0","engines":{"node":">=18.18.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"funding":"https://github.com/sponsors/dodopayments","scripts":{"test":"vitest run","build":"tsup","clean":"rm -rf dist .turbo","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"dodopayments","email":"ayush@dodopayments.com"},"_integrity":"sha512-1/ysH0zbcDQx0gv1jJvN6ZeeL5EQJy+E5ZhzTAz+qs3Pl2ZNAlzp9HDhffsU+SmoPvgSjIpHBK410E/Jy53lvA==","repository":{"url":"git+https://github.com/dodopayments/dualmark.git","type":"git","directory":"packages/core"},"_npmVersion":"10.8.3","description":"Framework-agnostic primitives for AEO infrastructure: content negotiation, AI-bot detection, markdown response, token estimation, composition helpers.","directories":{},"sideEffects":false,"_nodeVersion":"24.3.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","vitest":"^2.1.8","fast-check":"^3.23.2","typescript":"^5.7.2","@types/node":"^22.10.0","@vitest/coverage-v8":"^2.1.8"},"_npmOperationalInternal":{"tmp":"tmp/core_0.5.0_1778151902894_0.6677829604976231","host":"s3://npm-registry-packages-npm-production"}},"0.5.2":{"name":"@dualmark/core","version":"0.5.2","keywords":["aeo","answer-engine-optimization","ai-search","ai-agents","llm","chatgpt","claude","perplexity","markdown","content-negotiation","llms-txt","dualmark"],"author":{"url":"https://dodopayments.com","name":"Dodo Payments","email":"opensource@dodopayments.com"},"license":"Apache-2.0","_id":"@dualmark/core@0.5.2","maintainers":[{"name":"dodopayments","email":"ayush@dodopayments.com"}],"homepage":"https://github.com/dodopayments/dualmark/tree/main/packages/core#readme","bugs":{"url":"https://github.com/dodopayments/dualmark/issues"},"dist":{"shasum":"c64552d3fa366a33189ffe1a3c5c508c9b3ac8f3","tarball":"https://registry.npmjs.org/@dualmark/core/-/core-0.5.2.tgz","fileCount":9,"integrity":"sha512-03IeIV3mgx40hpKryB7sX0xig/u3rTcBQ0Q3n+hEzMqeX86s8X3bVVPJGBF4adGatMdtxGY1YN6IsCLQ4WRXMA==","signatures":[{"sig":"MEUCIQDBN6gwIJLJ56HibCzqO+pb3OpesPWfCLzZGbMdGl2tKwIgEe3iCxCjAIjJjlt8Z5jRKsQD+lgLCcwGPcAyew9O8Uo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dualmark%2fcore@0.5.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":128795},"main":"./dist/index.cjs","type":"module","_from":"file:/home/runner/work/dualmark/dualmark/packages/core/dualmark-core-0.5.2.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.18.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"funding":"https://github.com/sponsors/dodopayments","scripts":{"test":"vitest run","build":"tsup","clean":"rm -rf dist .turbo","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"dodopayments","email":"ayush@dodopayments.com"},"_resolved":"/home/runner/work/dualmark/dualmark/packages/core/dualmark-core-0.5.2.tgz","_integrity":"sha512-03IeIV3mgx40hpKryB7sX0xig/u3rTcBQ0Q3n+hEzMqeX86s8X3bVVPJGBF4adGatMdtxGY1YN6IsCLQ4WRXMA==","repository":{"url":"git+https://github.com/dodopayments/dualmark.git","type":"git","directory":"packages/core"},"_npmVersion":"10.9.7","description":"Framework-agnostic primitives for AEO infrastructure: content negotiation, AI-bot detection, markdown response, token estimation, composition helpers.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","vitest":"^2.1.8","fast-check":"^3.23.2","typescript":"^5.7.2","@types/node":"^22.10.0","@vitest/coverage-v8":"^2.1.8"},"_npmOperationalInternal":{"tmp":"tmp/core_0.5.2_1778586989399_0.17359729247970246","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@dualmark/core","version":"0.7.0","keywords":["aeo","answer-engine-optimization","ai-search","ai-agents","llm","chatgpt","claude","perplexity","markdown","content-negotiation","llms-txt","dualmark"],"author":{"url":"https://dodopayments.com","name":"Dodo Payments","email":"opensource@dodopayments.com"},"license":"Apache-2.0","_id":"@dualmark/core@0.7.0","maintainers":[{"name":"dodopayments","email":"ayush@dodopayments.com"}],"homepage":"https://github.com/dodopayments/dualmark/tree/main/packages/core#readme","bugs":{"url":"https://github.com/dodopayments/dualmark/issues"},"dist":{"shasum":"fc8ee4e89dcd06d2954daa544cf4e01c0a1bf965","tarball":"https://registry.npmjs.org/@dualmark/core/-/core-0.7.0.tgz","fileCount":9,"integrity":"sha512-1mm6fXlfB8aUPhNqT55NyMH7IDeQhkW/nD2cCfP2urMpkV+hQCVl9f8vOVDBJefvaNwT05TmVJXTv5jMGSLnBw==","signatures":[{"sig":"MEUCIC1dXRrybQJYWCNLKMMHf2eSzy89rqBDvqA27RdDmnP+AiEA4k7S9xcrZ8qoUBkexDayVgHlZxtQwqF7TZbbfjcsujk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dualmark%2fcore@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":133435},"main":"./dist/index.cjs","type":"module","_from":"file:/home/runner/work/dualmark/dualmark/packages/core/dualmark-core-0.7.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22.12.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"funding":"https://github.com/sponsors/dodopayments","scripts":{"test":"vitest run","build":"tsup","clean":"rm -rf dist .turbo","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"dodopayments","email":"ayush@dodopayments.com"},"_resolved":"/home/runner/work/dualmark/dualmark/packages/core/dualmark-core-0.7.0.tgz","_integrity":"sha512-1mm6fXlfB8aUPhNqT55NyMH7IDeQhkW/nD2cCfP2urMpkV+hQCVl9f8vOVDBJefvaNwT05TmVJXTv5jMGSLnBw==","repository":{"url":"git+https://github.com/dodopayments/dualmark.git","type":"git","directory":"packages/core"},"_npmVersion":"10.9.7","description":"Framework-agnostic primitives for AEO infrastructure: content negotiation, AI-bot detection, markdown response, token estimation, composition helpers.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","vitest":"^2.1.8","fast-check":"^3.23.2","typescript":"^5.7.2","@types/node":"^22.10.0","@vitest/coverage-v8":"^2.1.8"},"_npmOperationalInternal":{"tmp":"tmp/core_0.7.0_1779304660706_0.017770729875622227","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"@dualmark/core","version":"0.10.0","keywords":["aeo","answer-engine-optimization","ai-search","ai-agents","llm","chatgpt","claude","perplexity","markdown","content-negotiation","llms-txt","dualmark"],"author":{"url":"https://dodopayments.com","name":"Dodo Payments","email":"opensource@dodopayments.com"},"license":"Apache-2.0","_id":"@dualmark/core@0.10.0","maintainers":[{"name":"dodopayments","email":"ayush@dodopayments.com"}],"homepage":"https://github.com/dodopayments/dualmark/tree/main/packages/core#readme","bugs":{"url":"https://github.com/dodopayments/dualmark/issues"},"dist":{"shasum":"aa35bd86e88d727970a5b07b6897ab32fa44de1b","tarball":"https://registry.npmjs.org/@dualmark/core/-/core-0.10.0.tgz","fileCount":9,"integrity":"sha512-2BC3mnJe20dOjeeqZr+u7ndjCcG0CLW8G807f2Ah7XoQAgND01n48Qocy3R9VHEnKSJYNGfdbPQVUJJy0r/fvQ==","signatures":[{"sig":"MEYCIQD1uhUdBBjy//6xIiWELzoW8rXae3Rq/NnDbkJYc4TYjQIhANMX0ANfaeuQgHv732NWw6vi7nYWEMUVY4VKbZeSRxNv","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dualmark%2fcore@0.10.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":135882},"main":"./dist/index.cjs","type":"module","_from":"file:/home/runner/work/dualmark/dualmark/packages/core/dualmark-core-0.10.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22.12.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"funding":"https://github.com/sponsors/dodopayments","scripts":{"test":"vitest run","build":"tsup","clean":"rm -rf dist .turbo","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"dodopayments","email":"ayush@dodopayments.com"},"_resolved":"/home/runner/work/dualmark/dualmark/packages/core/dualmark-core-0.10.0.tgz","_integrity":"sha512-2BC3mnJe20dOjeeqZr+u7ndjCcG0CLW8G807f2Ah7XoQAgND01n48Qocy3R9VHEnKSJYNGfdbPQVUJJy0r/fvQ==","repository":{"url":"git+https://github.com/dodopayments/dualmark.git","type":"git","directory":"packages/core"},"_npmVersion":"10.9.8","description":"Framework-agnostic primitives for AEO infrastructure: content negotiation, AI-bot detection, markdown response, token estimation, composition helpers.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.3","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","vitest":"^2.1.8","fast-check":"^3.23.2","typescript":"^5.7.2","@types/node":"^22.10.0","@vitest/coverage-v8":"^2.1.8"},"_npmOperationalInternal":{"tmp":"tmp/core_0.10.0_1781785160943_0.22001426730946094","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"@dualmark/core","version":"0.11.0","description":"Framework-agnostic primitives for AEO infrastructure: content negotiation, AI-bot detection, markdown response, token estimation, composition helpers.","license":"Apache-2.0","author":{"name":"Dodo Payments","email":"opensource@dodopayments.com","url":"https://dodopayments.com"},"repository":{"type":"git","url":"git+https://github.com/dodopayments/dualmark.git","directory":"packages/core"},"bugs":{"url":"https://github.com/dodopayments/dualmark/issues"},"homepage":"https://github.com/dodopayments/dualmark/tree/main/packages/core#readme","funding":"https://github.com/sponsors/dodopayments","type":"module","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"sideEffects":false,"scripts":{"build":"tsup","test":"vitest run","test:watch":"vitest","test:coverage":"vitest run --coverage","typecheck":"tsc --noEmit","clean":"rm -rf dist .turbo"},"devDependencies":{"@types/node":"^22.10.0","@vitest/coverage-v8":"^2.1.8","fast-check":"^3.23.2","tsup":"^8.3.5","typescript":"^5.7.2","vitest":"^2.1.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"keywords":["aeo","answer-engine-optimization","ai-search","ai-agents","llm","chatgpt","claude","perplexity","markdown","content-negotiation","llms-txt","dualmark"],"engines":{"node":">=22.12.0"},"_id":"@dualmark/core@0.11.0","_integrity":"sha512-cymOrjE6JZShtPB6uv3cw0uJXd+wq4dNUnT7Li7C3coCMTA+uJvIbl1/iNkenBOF5yL3f4bOxLwUH+t40vO+Pg==","_resolved":"/home/runner/work/dualmark/dualmark/packages/core/dualmark-core-0.11.0.tgz","_from":"file:/home/runner/work/dualmark/dualmark/packages/core/dualmark-core-0.11.0.tgz","_nodeVersion":"22.23.2","_npmVersion":"11.6.2","dist":{"integrity":"sha512-cymOrjE6JZShtPB6uv3cw0uJXd+wq4dNUnT7Li7C3coCMTA+uJvIbl1/iNkenBOF5yL3f4bOxLwUH+t40vO+Pg==","shasum":"992ddcf0047c371eec5a5cea8207fb8d67e49868","tarball":"https://registry.npmjs.org/@dualmark/core/-/core-0.11.0.tgz","fileCount":9,"unpackedSize":141702,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dualmark%2fcore@0.11.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIFHKyJshZFzw1Xv2OrFnRjaaF+x3cSxJ6NPMv35LMruLAiEAyw0qhDSDgrZ3Nds5md9tH6YKGltWBBJ56hgaWH1420g="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e50257dd-f3ca-4f3e-8c00-141024fc48f6"}},"directories":{},"maintainers":[{"name":"dodopayments","email":"ayush@dodopayments.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/core_0.11.0_1787551507639_0.3272976557271814"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-05T16:25:38.145Z","modified":"2026-08-24T06:05:08.130Z","0.2.0":"2026-05-05T16:25:38.452Z","0.2.1":"2026-05-05T16:35:10.025Z","0.3.0":"2026-05-05T20:12:33.665Z","0.3.1":"2026-05-05T20:46:23.307Z","0.5.0":"2026-05-07T11:05:03.016Z","0.5.2":"2026-05-12T11:56:29.532Z","0.7.0":"2026-05-20T19:17:40.875Z","0.10.0":"2026-06-18T12:19:21.120Z","0.11.0":"2026-08-24T06:05:07.799Z"},"bugs":{"url":"https://github.com/dodopayments/dualmark/issues"},"author":{"name":"Dodo Payments","email":"opensource@dodopayments.com","url":"https://dodopayments.com"},"license":"Apache-2.0","homepage":"https://github.com/dodopayments/dualmark/tree/main/packages/core#readme","keywords":["aeo","answer-engine-optimization","ai-search","ai-agents","llm","chatgpt","claude","perplexity","markdown","content-negotiation","llms-txt","dualmark"],"repository":{"type":"git","url":"git+https://github.com/dodopayments/dualmark.git","directory":"packages/core"},"description":"Framework-agnostic primitives for AEO infrastructure: content negotiation, AI-bot detection, markdown response, token estimation, composition helpers.","maintainers":[{"name":"dodopayments","email":"ayush@dodopayments.com"}],"readme":"# @dualmark/core\n\nFramework-agnostic primitives for AEO (Answer Engine Optimization) infrastructure.\n\nZero runtime dependencies. ESM + CJS. Strict TypeScript.\n\n## Install\n\n```bash\nbun add @dualmark/core\n```\n\n## What's in it\n\n- **Content negotiation** (`parseAcceptHeader`, `negotiateFormat`) — RFC 7231 §5.3.2 compliant\n- **AI bot detection** (`detectAIBot`, `AI_BOTS`) — registry of 24 known crawlers with vendor + purpose metadata\n- **Markdown response** (`markdownResponse`, `injectMarkdownAlternateLink`) — builds `Response` objects with all AEO headers\n- **Path utilities** (`toMarkdownPath`, `toMarkdownUrl`) — convert HTML paths/URLs to their markdown twins\n- **Token estimation** (`estimateTokens`) — default is whitespace-split\n- **Text utilities** (`normalizeUnicode`, `cleanBody`, `slugToTitle`, `fmtDate`, `joinLines`) — for writing markdown converters\n- **Composition helpers** (`listingToMarkdown`, `renderRelatedLinks`, `renderFAQSection`)\n- **llms.txt rendering** (`renderLlmsTxt`)\n\n## Quick example\n\n```ts\nimport { negotiateFormat, markdownResponse, detectAIBot } from \"@dualmark/core\";\n\nexport default {\n  async fetch(request) {\n    const accept = request.headers.get(\"accept\") ?? \"\";\n    const ua = request.headers.get(\"user-agent\") ?? \"\";\n    const bot = detectAIBot(ua);\n    const fmt = negotiateFormat(accept);\n\n    if (fmt === null) return new Response(\"Not Acceptable\", { status: 406 });\n\n    if (bot.isBot || fmt === \"markdown\") {\n      return markdownResponse(\"# Hello\\n\\nThis is the markdown twin.\");\n    }\n\n    return new Response(\"<html><body>Hello</body></html>\", {\n      headers: { \"Content-Type\": \"text/html\" },\n    });\n  },\n};\n```\n\n## License\n\nApache 2.0 — see [LICENSE](../../LICENSE).\n\n## Spec\n\nThis package implements the [AEO Specification v1.0](../../spec/README.md).\n","readmeFilename":"README.md"}