Monorepo for tools.serp.co and shared SERP tool packages.
AGENTS.md maps the repository's areas and the doc that owns each one. Start with the architecture map and the domain glossary.
pnpm install --frozen-lockfile
pnpm check
pnpm build
pnpm dev
pnpm test
pnpm lint
pnpm typecheck
pnpm verify:catalog
pnpm check:linkspnpm check is the highest local verification seam. It composes deterministic
lint, typechecking, the complete automated-test suite, agent workflow and Tool
catalog structural verification, and the production-faithful Cloudflare build.
It does not exercise deployed systems or run link checks, canaries, benchmarks,
syncs, uploads, deploys, or remote migrations.
CI also runs a browser smoke test against the real Worker on a freshly
migrated local D1 (the smoke job). What it covers and how to run it locally
or against staging: docs/runbooks/browser-smoke.md.
Use Node.js >=20 <23 and pnpm 10.4.1. From a fresh clone:
pnpm install --frozen-lockfile
pnpm checkThe root test command discovers committed node:test entrypoints, rejects
misnamed or non-test files, and runs them in app, package, and repository-owned
groups. It is deterministic and requires no network access, production
credentials, ignored local inputs, or repository writes.
Downloader Landers must not contain guessed outbound links. Before changing a
URL under content.productLinks or content.sourceLinks in the Tool registry,
follow docs/agents/downloader-lander-links.md
and run the network-backed pnpm check:links.
Enable the repository hooks under .githooks/ once per clone:
git config core.hooksPath .githookspre-commitrunspnpm check:linkswhen the Tool registry, the link validator, anAGENTS.mdor aREADME.mdchanges, andnode scripts/validate-tools.mjswhen app or registry code changes.pre-pushruns the app's lint and typecheck,pnpm verify:catalogandpnpm test, a push-level subset ofpnpm check. CI runs the full check.