@page2ai/core
Advanced tools
@@ -20,3 +20,3 @@ import type { ProfileName } from '../shared/types.js'; | ||
| extractedAt: string; | ||
| source: 'html-parse' | 'md-suffix' | 'llms-txt'; | ||
| source: 'html-parse' | 'md-suffix' | 'content-negotiation' | 'llms-txt'; | ||
| } | ||
@@ -23,0 +23,0 @@ export declare const htmlToMarkdown: (html: string, opts?: HtmlToMarkdownOptions) => ConversionResult; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/node/index.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;IAC/B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,sBAAuB,SAAQ,qBAAqB;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,YAAY,GAAG,WAAW,GAAG,UAAU,CAAC;CACjD;AAED,eAAO,MAAM,cAAc,GACzB,MAAM,MAAM,EACZ,OAAM,qBAA0B,KAC/B,gBA+CF,CAAC;AAqDF,eAAO,MAAM,eAAe,GAC1B,KAAK,MAAM,EACX,OAAM,sBAA2B,KAChC,OAAO,CAAC,gBAAgB,CAa1B,CAAC;AAGF,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC"} | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/node/index.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;IAC/B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,sBAAuB,SAAQ,qBAAqB;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,YAAY,GAAG,WAAW,GAAG,qBAAqB,GAAG,UAAU,CAAC;CACzE;AAED,eAAO,MAAM,cAAc,GACzB,MAAM,MAAM,EACZ,OAAM,qBAA0B,KAC/B,gBA+CF,CAAC;AAoEF,eAAO,MAAM,eAAe,GAC1B,KAAK,MAAM,EACX,OAAM,sBAA2B,KAChC,OAAO,CAAC,gBAAgB,CAiC1B,CAAC;AAGF,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC"} |
+32
-6
@@ -68,5 +68,7 @@ // @page2ai/core — Node.js entry point. | ||
| }; | ||
| // Wrap a raw markdown response (from .md suffix) in the frontmatter block so | ||
| // downstream consumers see the same shape as html-to-md output. | ||
| const wrapMdWithFrontmatter = (raw, url, title) => { | ||
| // Wrap a raw markdown response in the frontmatter block so downstream consumers | ||
| // see the same shape as html-to-md output. `via` records which channel produced | ||
| // it, because a caller measuring conversion quality needs to know that no | ||
| // conversion happened. | ||
| const wrapMdWithFrontmatter = (raw, url, title, via) => { | ||
| const yq = (s) => '"' + String(s).replace(/"/g, '\\"') + '"'; | ||
@@ -80,3 +82,3 @@ const fm = [ | ||
| `extractor_version: ${yq('0.1.0')}`, | ||
| `extractor_source: ${yq('md-suffix')}`, | ||
| `extractor_source: ${yq(via)}`, | ||
| '---', | ||
@@ -87,2 +89,8 @@ '', | ||
| }; | ||
| // A Markdown body must never reach the HTML parser. linkedom will happily accept | ||
| // it, find no <article> or <main>, and return an empty document, which reads as | ||
| // "extraction failed" when in fact the server handed over exactly what was asked | ||
| // for. See page2ai-benchmark RETRACTION-2026-07-25.md. | ||
| const MARKDOWN_CONTENT_TYPE = /^(text\/markdown|text\/x-markdown)/i; | ||
| const looksLikeHtml = (s) => /^\s*<(!doctype|html)\b/i.test(s); | ||
| // Attempt the URL.md convention (Mintlify, Anthropic docs, some others). | ||
@@ -105,7 +113,7 @@ // Returns null if not applicable or on any failure — callers fall back to HTML. | ||
| // Cheap sanity: markdown response should not look like HTML | ||
| if (/^\s*<(!doctype|html)/i.test(resp.text)) | ||
| if (looksLikeHtml(resp.text)) | ||
| return null; | ||
| const title = (resp.text.match(/^#\s+(.+)$/m)?.[1] || '').trim(); | ||
| return { | ||
| markdown: wrapMdWithFrontmatter(resp.text, resp.finalUrl, title), | ||
| markdown: wrapMdWithFrontmatter(resp.text, resp.finalUrl, title, 'md-suffix'), | ||
| title, | ||
@@ -135,2 +143,20 @@ baseUrl: resp.finalUrl, | ||
| }); | ||
| // The Accept header above lists text/markdown, and a growing number of | ||
| // documentation platforms honour it: Fumadocs, Mintlify, Vercel and Supabase | ||
| // all answer `content-type: text/markdown` with the page already converted. | ||
| // Handing that to the HTML parser produces an empty document. Return it as-is | ||
| // and say which channel it came from. | ||
| if (MARKDOWN_CONTENT_TYPE.test(resp.contentType) && !looksLikeHtml(resp.text)) { | ||
| const raw = resp.text.replace(/^/, '').trim(); | ||
| const title = (raw.match(/^#\s+(.+)$/m)?.[1] || '').trim(); | ||
| const markdown = wrapMdWithFrontmatter(raw, resp.finalUrl, title, 'content-negotiation'); | ||
| return { | ||
| markdown, | ||
| title, | ||
| baseUrl: resp.finalUrl, | ||
| charCount: raw.length, | ||
| extractedAt: new Date().toISOString(), | ||
| source: 'content-negotiation', | ||
| }; | ||
| } | ||
| return htmlToMarkdown(resp.text, { ...opts, baseUrl: opts.baseUrl ?? resp.finalUrl }); | ||
@@ -137,0 +163,0 @@ }; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/node/index.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/node/index.ts"],"names":[],"mappings":"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"} |
+7
-3
| { | ||
| "name": "@page2ai/core", | ||
| "version": "0.1.0", | ||
| "version": "0.1.1", | ||
| "description": "Extract clean Markdown from any web page HTML. Works in Node.js (via linkedom) and browsers. Powers the Page2AI extension and @page2ai/mcp server.", | ||
@@ -71,5 +71,9 @@ "type": "module", | ||
| ], | ||
| "author": "Igor Saevets, AI Expert and Entrepreneur", | ||
| "author": { | ||
| "name": "Igor Saevets", | ||
| "email": "igorsaevets@gmail.com", | ||
| "url": "https://igorsaevets.github.io/page2ai-docs/about/" | ||
| }, | ||
| "license": "MIT", | ||
| "homepage": "https://github.com/igorsaevets/page2ai-core", | ||
| "homepage": "https://igorsaevets.github.io/page2ai-docs/", | ||
| "repository": { | ||
@@ -76,0 +80,0 @@ "type": "git", |
+20
-1
@@ -84,3 +84,3 @@ # @page2ai/core | ||
| - **v0.2** — full port of `lib/core/html-to-md.ts` via PageAdapter, browser entry migrated from extension repo | ||
| - **v0.3** — profile auto-detection in Node path, structured-data extraction | ||
| - **v0.3** — headless-browser adapter (Playwright or Puppeteer) for React/Vue/SPA rendering, profile auto-detection in Node path, structured-data extraction. Client-rendered pages (e.g. platform.claude.com) that ship a nearly empty `<div id="root">` from static HTML currently produce a graceful fallback error under v0.1 — the SPA adapter in v0.3 will handle them. | ||
| - **v0.4** — official-markdown fallback (llms.txt, .md sibling URLs), MDX handling | ||
@@ -127,4 +127,23 @@ | ||
| ## Build provenance | ||
| Releases from v0.1.1 onward are published from GitHub Actions with | ||
| [npm provenance](https://docs.npmjs.com/generating-provenance-statements). Each published | ||
| version carries a Sigstore attestation recording which commit and which workflow run produced | ||
| the tarball, logged in the public Rekor transparency ledger. npmjs.com shows a provenance badge | ||
| next to the version, linking to both. | ||
| Verify it yourself, without trusting this README: | ||
| ```bash | ||
| npm audit signatures | ||
| npm view @page2ai/core --json | jq '.dist.attestations' | ||
| ``` | ||
| The point is that the link between the source you can read and the artifact you install is | ||
| checkable by a third party rather than asserted here. | ||
| ## License | ||
| MIT — Copyright (c) 2026 Igor Saevets. See [LICENSE](./LICENSE). |
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
188126
1.85%2378
1.11%148
14.73%