npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@boses/marksweep

v0.1.3

Published

A TypeScript CLI for cleaning and AI-organizing browser bookmark HTML exports.

Readme

MarkSweep

English: README.en.md

MarkSweep 是一个 TypeScript 书签整理 CLI。它读取浏览器导出的 bookmarks.html,检测失效链接,清理或重新分类书签,并输出新的 HTML 文件。

默认不会修改原始文件。

使用

推荐通过 npx 直接运行,无需全局安装。显式使用 @latest 可以获取最新发布版本:

需要 Node.js 22.19.0 或更高版本。

npx @boses/marksweep@latest --help

本地开发:

pnpm install
pnpm dev -- --help

构建后运行:

pnpm build
node dist/cli.js --help

快速使用

检测书签:

npx @boses/marksweep@latest check bookmarks.html

清理书签:

npx @boses/marksweep@latest clean bookmarks.html -o bookmarks.cleaned.html

AI 分类:

npx @boses/marksweep@latest classify bookmarks.html \
  --base-url https://api.openai.com/v1 \
  --model gpt-4.1-mini \
  --api-key "$OPENAI_API_KEY" \
  -o bookmarks.classified.html

Windows PowerShell:

npx @boses/marksweep@latest classify bookmarks.html `
  --base-url https://api.openai.com/v1 `
  --model gpt-4.1-mini `
  --api-key $env:OPENAI_API_KEY `
  -o bookmarks.classified.html

PowerShell 多行命令使用反引号 `,不要使用 Bash 的 \

不指定 -o, --output 时,会在输入文件旁生成:

bookmarks.cleaned.html
bookmarks.classified.html

组合使用

如果想先删除坏链再分类,先清理,再把清理后的文件交给 AI 分类:

npx @boses/marksweep@latest clean bookmarks.html -o bookmarks.cleaned.html
npx @boses/marksweep@latest classify bookmarks.cleaned.html -o bookmarks.classified.html

classify 只负责 AI 分类,不会重复检测书签有效性。

命令

check

检测书签有效性,并在终端输出报告。

npx @boses/marksweep@latest check bookmarks.html \
  --concurrency 20 \
  --timeout 10000 \
  --retries 2

可选:

--json                  输出 JSON 检测报告

clean

检测、去重,并输出新的清理后 HTML。

npx @boses/marksweep@latest clean bookmarks.html -o bookmarks.cleaned.html

删除前会进入交互选择:

  • 明确无效:默认勾选。
  • 可疑链接:默认不勾选。

未删除的可疑链接会放入 其他 目录。

classify

去重,然后把书签交给 AI 分类。

npx @boses/marksweep@latest classify bookmarks.html \
  --base-url https://api.openai.com/v1 \
  --model gpt-4.1-mini \
  --api-key "$OPENAI_API_KEY" \
  --lang zh

如需过滤明确无效链接,先运行 clean,再对生成的 HTML 执行 classify

常用参数

--concurrency <number>  check/clean 并发检测数量,默认 20
--timeout <ms>          check/clean 单个 URL 超时时间,默认 10000
--retries <number>      check/clean 失败重试次数,默认 2
-o, --output <path>     输出 HTML 路径
--check-report <path>   clean 复用 check --json 生成的报告

输出路径不能与输入路径相同。

检测规则

MarkSweep 会先尝试 HEAD,必要时回退到 GET。如果 http:// 失败,会再尝试对应的 https://

明确无效:

  • HTTP 404410
  • HTTP 502
  • DNS 失败、连接拒绝
  • 空响应、HTTP/2 协议错误
  • 加长超时后仍失败

可疑:

  • HTTP 401403429
  • 大部分 5xx
  • SSL/TLS 错误
  • 临时网络错误

非网页协议会跳过检测并保留,例如:

chrome://
edge://
about:
javascript:
file://
mailto:

代理

MarkSweep 会自动使用代理:

  • 优先读取 HTTP_PROXYHTTPS_PROXYNO_PROXY 及其小写形式。
  • macOS 下没有环境变量时,会读取系统静态代理设置。

AI 配置

--base-url <url>        OpenAI 兼容 API Base URL
--model <name>          模型名称
--compatibility <mode>  兼容模式:auto、openai、deepseek
--api-key <key>         API Key
--lang <language>       分类目录语言,默认 zh

配置优先级:

CLI 参数 > 环境变量 > 本地配置 > 交互输入

支持环境变量:

MARKSWEEP_AI_BASE_URL
MARKSWEEP_AI_MODEL
MARKSWEEP_AI_API_KEY
MARKSWEEP_AI_COMPATIBILITY
OPENAI_BASE_URL
OPENAI_MODEL
OPENAI_API_KEY
MARKSWEEP_LANG

auto 会为 api.deepseek.com 启用思考模式工具调用兼容;代理网关可显式使用 deepseek

交互输入的 AI 配置可以保存到本机。API Key 会以明文写入本地 JSON 文件。

默认路径:

Windows: %APPDATA%\marksweep\config.json
macOS:   ~/Library/Application Support/marksweep/config.json
Linux:   ~/.config/marksweep/config.json

可用 MARKSWEEP_CONFIG_PATH 覆盖。

页面抓取

AI 分类时,模型只在标题和 URL 不足以判断分类时抓取页面内容。

可选环境变量:

MARKSWEEP_FIRECRAWL_API_KEY
FIRECRAWL_API_KEY
MARKSWEEP_FIRECRAWL_BASE_URL
FIRECRAWL_BASE_URL
MARKSWEEP_JINA_API_KEY
JINA_API_KEY

LangSmith

--langsmith

LangSmith 默认关闭。启用时需要环境变量:

export LANGSMITH_API_KEY="<your-api-key>"
export LANGSMITH_PROJECT="default"

Windows PowerShell:

$env:LANGSMITH_API_KEY = "<your-api-key>"
$env:LANGSMITH_PROJECT = "default"

如果设置了上面两个变量,MarkSweep 会自动开启追踪。也可以显式传 --langsmith 开启。

可选:

export LANGSMITH_TRACING=false
export LANGSMITH_ENDPOINT="https://api.smith.langchain.com"

Windows PowerShell:

$env:LANGSMITH_TRACING = "false"
$env:LANGSMITH_ENDPOINT = "https://api.smith.langchain.com"

隐私

checkclean 会向书签 URL 发送有效性检测请求。

classify 会把书签标题和 URL 发送给配置的 AI 服务。页面抓取可能请求 Firecrawl、Jina Reader,或直接访问目标页面。

启用 LangSmith 后,提示词、输出和工具调用也可能发送到 LangSmith。

许可证

MIT