Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Changelog

## Unreleased
## 0.7.0

- **First use finds the docs sites too.** The automatic first-use fetch (`docs`/`api` before any `lockdocs fetch`) skipped the separate docs-site repositories, so React 19, Express, tokio and Tailwind answers came from package files only. It now reads them as well: the site archive within the same 64 MB cap, else one REST tree request plus raw files (tailwindcss.com is 190 MB and prisma/docs over 800 MB as archives, but a few hundred files). The REST call follows a redirect to the same API host once, which a renamed repository such as prisma/docs answers. A docs-site failure keeps the package docs and says what was skipped in the manifest note; `lockdocs fetch` retries it. On the benchmark's first-use run (empty isolated cache, no credentials, 97 of 105 questions installable locally) 76 become 88 correct and held-out 13/16 becomes 14/16; the first-use floor in `bench/run.py` is 88/105. `upstream::FORMAT` is 6.
- **Free upgrade preview.** Without a Pro licence, `lockdocs upgrade <pkg> <ver>` (and `docs --upgrade-to`, and the `docs` tool's `upgrade_to`) now answers with a short local preview instead of only "Pro required": how many of the APIs your project calls were removed, renamed, re-signed or deprecated, across how many call sites, plus one sample, then the Pro price and link. The full list stays Pro. The MCP answer still carries `structuredContent.pro_required`, the CLI still exits 3, and the preview reads the same installed, cached or opted-in files as the report (no new downloads).
Expand Down
4 changes: 2 additions & 2 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ members = ["crates/lockdocs-core", "crates/lockdocs"]
resolver = "2"

[workspace.package]
version = "0.6.0"
version = "0.7.0"
edition = "2021"
license = "MIT"
authors = ["SylphxAI"]
Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,7 @@ Registry package downloads remain opt-in; default upstream enrichment uses insta
| Context7 (anonymous) | 77/105 | 19/45 | 53/55 | 5/5 | 15/18 | 908 | 2,583 ms |
<!-- bench:end -->

- **Default first use is 88/105 in 0.7.0** (local first-use run; the table's 70/105 row is the earlier 0.4.0 run and is replaced by the next full benchmark run), above Context7's 77/105.
- **Where versions matter most, lockdocs wins by 2x** (38/45 vs 19/45 on older majors). Context7 often answers with the newest API (pydantic 1 questions get pydantic 2 answers).
- **Tied on the newest majors (53/55 each) and on tokio (5/5 each); ahead on held-out questions (16/18 vs 15/18)**, which were written before the ranking changes they measure and not used for tuning.
- **Faster, fewer tokens, no quota.** Median 58 ms per question after `lockdocs fetch` (185 ms on first use), a fresh CLI process each time. Context7's hosted API took a median 2,583 ms in the earlier runs its reused answers come from.
Expand Down
2 changes: 1 addition & 1 deletion crates/lockdocs/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ path = "src/main.rs"

[dependencies]
anyhow = "1"
lockdocs-core = { path = "../lockdocs-core", version = "0.6.0" }
lockdocs-core = { path = "../lockdocs-core", version = "0.7.0" }
serde_json = "1"
sylphx-mcp-kit = { version = "0.7.0", features = ["licence"] }

Expand Down
2 changes: 1 addition & 1 deletion docs/benchmarks.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ The per-question table, index build times and `lockdocs fetch` times are in the
## Reading the results

- **lockdocs is ahead overall (96/105 vs 77/105) and on older majors by 2x (38/45 vs 19/45), ties Context7 on the newest majors (53/55 each) and on tokio (5/5 each), and is ahead on the held-out questions (16/18 vs 15/18).** It also uses fewer tokens (880 vs 908 median) and answers in 58 ms instead of 2,583 ms (Context7 latency from the earlier runs its reused answers were measured in).
- **Default first use: 70/105.** From an empty cache with no GitHub token, the first query downloads release-tag docs anonymously; median 185 ms including those downloads (p95 2258 ms). Running `lockdocs fetch` once raises it to 96/105.
- **Default first use: 88/105 in 0.7.0 (70/105 in the run above, which predates it).** From an empty cache with no GitHub token, the first query downloads release-tag docs anonymously, and since 0.7.0 also the docs-site repositories (React, Express, tokio, Tailwind, Prisma); the 0.7.0 figure is a local first-use run (97 of 105 questions installable on that machine, held-out 14/16), and the table above is replaced by the next full benchmark run. The 0.4.0 run's median was 185 ms including downloads (p95 2258 ms). Running `lockdocs fetch` once raises it to 96/105.
- **Where each still misses.** lockdocs: seven older-major questions (among them Next.js 14 `cookies()`, React Router 6 `json()`, FastAPI 0.88 `on_event`, Prisma 5 `Buffer`, ESLint 8 `env`), and two held-out newer-major questions (ESLint 9 plugins, Tailwind 4 `@source`). Context7 mostly answers older-major questions with the newest API, and two of its Tailwind answers came from unrelated libraries its search ranked first.
- **Configurations matter (from run 36204404336).** Keyword-only on package files: 59/105. Adding the local embedding model: 60/105. Adding `lockdocs fetch` (upstream docs at each version's git tag, plus docs-site repositories for your major): 96/105.
- Latency for lockdocs is a fresh CLI process per question, including loading the embedding model; the MCP server keeps it loaded.
Expand Down
2 changes: 1 addition & 1 deletion docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ proof:
- value: "96/105"
label: version-sensitive questions right after lockdocs fetch (Context7 77/105)
link: /benchmarks
- value: "70/105"
- value: "88/105"
label: with default settings from an empty cache
link: /benchmarks
- value: "58 ms"
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "lockdocs-workspace",
"version": "0.6.0",
"version": "0.7.0",
"private": true,
"type": "module",
"description": "lockdocs monorepo: Rust engine (crates/), npm packages (packages/), docs (docs/), benchmark (bench/).",
Expand Down
12 changes: 6 additions & 6 deletions packages/lockdocs/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@sylphx/lockdocs",
"version": "0.6.0",
"version": "0.7.0",
"mcpName": "io.github.SylphxAI/lockdocs",
"description": "Exact-version library docs from your lockfile — local, offline, no rate limits.",
"bin": {
Expand All @@ -15,11 +15,11 @@
"node": ">=18"
},
"optionalDependencies": {
"@sylphx/lockdocs-darwin-arm64": "0.6.0",
"@sylphx/lockdocs-darwin-x64": "0.6.0",
"@sylphx/lockdocs-linux-x64-gnu": "0.6.0",
"@sylphx/lockdocs-linux-arm64-gnu": "0.6.0",
"@sylphx/lockdocs-win32-x64-msvc": "0.6.0"
"@sylphx/lockdocs-darwin-arm64": "0.7.0",
"@sylphx/lockdocs-darwin-x64": "0.7.0",
"@sylphx/lockdocs-linux-x64-gnu": "0.7.0",
"@sylphx/lockdocs-linux-arm64-gnu": "0.7.0",
"@sylphx/lockdocs-win32-x64-msvc": "0.7.0"
},
"keywords": [
"mcp",
Expand Down
2 changes: 1 addition & 1 deletion packages/npm/darwin-arm64/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@sylphx/lockdocs-darwin-arm64",
"version": "0.6.0",
"version": "0.7.0",
"description": "lockdocs native binary for darwin-arm64",
"os": [
"darwin"
Expand Down
2 changes: 1 addition & 1 deletion packages/npm/darwin-x64/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@sylphx/lockdocs-darwin-x64",
"version": "0.6.0",
"version": "0.7.0",
"description": "lockdocs native binary for darwin-x64",
"os": [
"darwin"
Expand Down
2 changes: 1 addition & 1 deletion packages/npm/linux-arm64-gnu/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@sylphx/lockdocs-linux-arm64-gnu",
"version": "0.6.0",
"version": "0.7.0",
"description": "lockdocs native binary for linux-arm64-gnu",
"os": [
"linux"
Expand Down
2 changes: 1 addition & 1 deletion packages/npm/linux-x64-gnu/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@sylphx/lockdocs-linux-x64-gnu",
"version": "0.6.0",
"version": "0.7.0",
"description": "lockdocs native binary for linux-x64-gnu",
"os": [
"linux"
Expand Down
2 changes: 1 addition & 1 deletion packages/npm/win32-x64-msvc/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@sylphx/lockdocs-win32-x64-msvc",
"version": "0.6.0",
"version": "0.7.0",
"description": "lockdocs native binary for win32-x64-msvc",
"os": [
"win32"
Expand Down
4 changes: 2 additions & 2 deletions server.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,13 @@
"url": "https://github.com/SylphxAI/lockdocs",
"source": "github"
},
"version": "0.6.0",
"version": "0.7.0",
"websiteUrl": "https://sylphxai.github.io/lockdocs/",
"packages": [
{
"registryType": "npm",
"identifier": "@sylphx/lockdocs",
"version": "0.6.0",
"version": "0.7.0",
"transport": {
"type": "stdio"
},
Expand Down
Loading