{"id":49815760,"url":"https://github.com/tapeshn/qulib","last_synced_at":"2026-05-27T08:01:52.113Z","repository":{"id":356067477,"uuid":"1230886851","full_name":"TapeshN/qulib","owner":"TapeshN","description":"Honest QA gap analysis for deployed web apps. Auth-aware scanning, real accessibility checks, and an MCP server for AI agents.","archived":false,"fork":false,"pushed_at":"2026-05-21T04:49:27.000Z","size":323,"stargazers_count":1,"open_issues_count":6,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-21T11:26:21.742Z","etag":null,"topics":["accessibility","ai-agents","axe-core","mcp","playwright","qa","quality-engineering","release-readiness","testing","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/TapeshN.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"TapeshN"}},"created_at":"2026-05-06T12:19:24.000Z","updated_at":"2026-05-21T04:19:57.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/TapeshN/qulib","commit_stats":null,"previous_names":["tapeshn/quilib","tapeshn/qulib"],"tags_count":13,"template":false,"template_full_name":null,"purl":"pkg:github/TapeshN/qulib","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TapeshN%2Fqulib","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TapeshN%2Fqulib/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TapeshN%2Fqulib/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TapeshN%2Fqulib/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TapeshN","download_url":"https://codeload.github.com/TapeshN/qulib/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TapeshN%2Fqulib/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33556554,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-27T02:00:06.184Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["accessibility","ai-agents","axe-core","mcp","playwright","qa","quality-engineering","release-readiness","testing","typescript"],"created_at":"2026-05-13T06:14:50.822Z","updated_at":"2026-05-27T08:01:52.104Z","avatar_url":"https://github.com/TapeshN.png","language":"TypeScript","funding_links":["https://github.com/sponsors/TapeshN"],"categories":[],"sub_categories":[],"readme":"# Qulib\n\n**Honest QA gap analysis for deployed web apps.**\n\nQulib is an opinionated harness that answers one question: **is this app ready to ship?** It prefers **honest uncertainty** over fake confidence: if auth blocks the crawl, coverage is thin, or data is incomplete, the report says so.\n\n**Design line:** AI should explore unknown gaps; **deterministic checks** (crawl, axe, links, console) should scale. Cost Intelligence tracks LLM usage so repeated reasoning can graduate into checks you own in CI.\n\nOn npm: **`@qulib/core`** (engine + CLI `qulib`) and **`@qulib/mcp`** (MCP server for AI agents).\n\n[![npm @qulib/core](https://img.shields.io/npm/v/@qulib/core?label=%40qulib%2Fcore)](https://www.npmjs.com/package/@qulib/core)\n[![npm @qulib/mcp](https://img.shields.io/npm/v/@qulib/mcp?label=%40qulib%2Fmcp)](https://www.npmjs.com/package/@qulib/mcp)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)\n\n---\n\n## What Qulib does\n\n- Crawls deployed apps (anonymous or authenticated via Playwright)\n- Runs **axe-core** accessibility checks (WCAG 2 A/AA)\n- Detects broken links, console errors, navigation failures\n- Computes **release confidence** (0–100) with a **coverage floor** when too few pages were scanned\n- Emits **JSON** and **Markdown** reports (or **ephemeral** JSON on stdout)\n- **Auth-aware:** optional `detect-auth`, `explore-auth`, form-login, and storage-state flows\n- **Cost Intelligence** (optional block on gap analysis): token usage, budget warnings vs per-call output ceiling, prompt fingerprints, maturity hints, conversion recommendations\n\n---\n\n## Packages\n\n| Package | Purpose |\n|---------|---------|\n| [`@qulib/core`](./packages/core) | Analyzer engine and CLI (`qulib`) |\n| [`@qulib/mcp`](./packages/mcp) | MCP server exposing Qulib to AI clients |\n\n---\n\n## Quick start (CLI)\n\n```bash\nnpx @qulib/core analyze --url https://example.com\n```\n\nFrom a clone (repo root):\n\n```bash\nnpm run analyze -w @qulib/core -- --url https://example.com\n```\n\nOr `cd packages/core` and `npm run analyze -- --url https://example.com`.\n\n**Smoke (no disk writes):**\n\n```bash\nnpm run smoke\n```\n\n**Cost doctor** (after a normal analyze that wrote `output/report.json`):\n\n```bash\ncd packages/core \u0026\u0026 npx tsx src/cli/index.ts cost doctor\n```\n\n---\n\n## Quick start (MCP)\n\n```json\n{\n  \"mcpServers\": {\n    \"qulib\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@qulib/mcp\"]\n    }\n  }\n}\n```\n\nAsk your agent:\n\n\u003e Use Qulib to analyze https://example.com and tell me if it's ready to ship.\n\nDefault **`analyze_app`** responses are **summary-first** (top gaps, cost summary, next deterministic checks). Pass **`includeFullReport: true`** for the full `gapAnalysis` including all scenarios.\n\n---\n\n## Release confidence (short)\n\n- Score starts from **100** and is reduced by **high / medium / low** gaps (see [`gap-engine`](./packages/core/src/tools/gap-engine.ts)).\n- If **fewer than `minPagesForConfidence`** pages were scanned, confidence is **capped at 40** and a **`low-coverage`** warning is set—thin coverage must not read as “ready”.\n- **`auth-required`** early exit sets confidence **0** with no gap inventory: the deployment was not actually exercised.\n\nDetails: [packages/core/README.md](./packages/core/README.md).\n\n---\n\n## Documentation\n\n- [Core (CLI, API, Cost Intelligence)](./packages/core/README.md)\n- [MCP server](./packages/mcp/README.md)\n- [Source map](./docs/source-map.md) — new contributors: start here to navigate the codebase\n- [Contributing](./CONTRIBUTING.md)\n- [Security](./SECURITY.md)\n- [Code of Conduct](./CODE_OF_CONDUCT.md)\n- [Manual testing checklist](./docs/manual-testing-checklist.md)\n\n---\n\n## Contributing\n\nIssues and PRs are welcome. See [CONTRIBUTING.md](./CONTRIBUTING.md). Follow the [Code of Conduct](./CODE_OF_CONDUCT.md).\n\n---\n\n## License\n\nMIT — see [LICENSE](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftapeshn%2Fqulib","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftapeshn%2Fqulib","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftapeshn%2Fqulib/lists"}