diff options
| author | amankumarsingh77 <amankumarsingh7702@gmail.com> | 2026-07-28 20:30:49 +0530 |
|---|---|---|
| committer | Aman Kumar <145339995+amankumarsingh77@users.noreply.github.com> | 2026-08-02 19:12:46 +0530 |
| commit | b67faca60b21b0cf74d5c967f0f8d215ad601e93 (patch) | |
| tree | 12e8580e1b88c3ce6a2d9157cfa678cb7a55a73c /src/domains/readpage/readability.ts | |
| parent | a6ec1d0915106b127affbd6b5fcc9efec48ef712 (diff) | |
refactor(domains): strip comment noise
Removes module banners, step markers, and comments restating the code.
Keeps one-line notes for safeJs's trust boundary, the select-match null
sentinels, the TUI width clamp, the single-window tab rule, the input
synthesis quirks (char events, keyCode, mousemove, focus, compositor),
the stale AX value, ignored-wrapper recursion, and isolated-tab routing.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'src/domains/readpage/readability.ts')
| -rw-r--r-- | src/domains/readpage/readability.ts | 23 |
1 files changed, 0 insertions, 23 deletions
diff --git a/src/domains/readpage/readability.ts b/src/domains/readpage/readability.ts index 37f2a38..b20cacd 100644 --- a/src/domains/readpage/readability.ts +++ b/src/domains/readpage/readability.ts @@ -1,35 +1,18 @@ -/** - * Pure reader-mode extraction — no CDP, no DOM. The in-page script - * (see capture.ts) serializes candidate content blocks; these pure functions - * score them and assemble clean article text, so the selection logic is - * unit-testable against saved fixtures (test/deep-research/readability-test.ts). - * - * Dependency-free by design (no jsdom / Readability): the harness ships no new - * runtime deps. The heuristic favors blocks with high text density and low link - * density, which is what separates article body from nav/ads/boilerplate. - */ -/** One candidate content block captured in-page. */ export type ContentBlock = { - /** Semantic tag: paragraph | heading | listitem | blockquote | other. */ readonly kind: "paragraph" | "heading" | "listitem" | "blockquote" | "other"; readonly text: string; - /** Chars of text that sit inside <a> tags — high ratio ⇒ nav/menu, not prose. */ readonly linkTextLength: number; - /** True when an ancestor is nav/header/footer/aside — structural boilerplate. */ readonly inBoilerplate: boolean; }; -/** The JSON payload capture.ts returns from the page. */ export type PageCapture = { readonly url: string; readonly title: string; readonly blocks: ReadonlyArray<ContentBlock>; - /** Bounded innerText fallback when block extraction finds nothing usable. */ readonly bodyText: string; }; -/** The tool's public output shape. */ export type ReadablePage = { readonly title: string; readonly url: string; @@ -46,7 +29,6 @@ const linkDensity = (block: ContentBlock): number => { return block.linkTextLength / block.text.length; }; -/** A block is article prose if it is substantive, text-dense, and not chrome. */ const isArticleBlock = (block: ContentBlock): boolean => { if (block.inBoilerplate) return false; if (linkDensity(block) > MAX_LINK_DENSITY) return false; @@ -69,11 +51,6 @@ const wordCountOf = (text: string): number => { return trimmed.length === 0 ? 0 : trimmed.split(/\s+/).length; }; -/** - * Assemble readable article text from a page capture. Keeps text-dense, - * non-boilerplate blocks; falls back to the bounded body text when the article - * is too thin (e.g. a page with no clear content structure). - */ export const extractReadable = (capture: PageCapture): ReadablePage => { const articleText = capture.blocks.filter(isArticleBlock).map(render).join("\n\n").replace(/\n{3,}/g, "\n\n").trim(); |
