claude-local-docs 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.mcp.json CHANGED
@@ -1,9 +1,6 @@
1
1
  {
2
- "mcpServers": {
3
- "local-docs": {
4
- "command": "npx",
5
- "args": ["-y", "claude-local-docs"],
6
- "type": "stdio"
7
- }
2
+ "local-docs": {
3
+ "command": "npx",
4
+ "args": ["-y", "claude-local-docs"]
8
5
  }
9
6
  }
package/README.md CHANGED
@@ -14,6 +14,7 @@ A local-first alternative to Context7 for Claude Code. Indexes your project's de
14
14
  | **Doc sources** | Prefers llms.txt, falls back to official docs | Pre-indexed source repos |
15
15
  | **Scope** | Your project's actual dependencies | Any library |
16
16
  | **Setup** | `npm install` + `/fetch-docs` | Install plugin |
17
+ | **Monorepo** | Detects pnpm/npm/yarn workspaces, resolves catalogs | N/A |
17
18
 
18
19
  ## How it works
19
20
 
@@ -21,18 +22,18 @@ A local-first alternative to Context7 for Claude Code. Indexes your project's de
21
22
  /fetch-docs search_docs("how to use useState")
22
23
  │ │
23
24
  ▼ ▼
24
- Read package.json ┌─── Vector search (LanceDB) ───┐
25
- nomic-embed-text-v1.5 │
26
- │ │
27
- For each dependency: │ ├─→ RRF Fusion
28
- - Search web for llms.txt │ │ (k=60)
29
- - Fetch best docs ├─── BM25 search (MiniSearch) ──┘
30
- - Chunk + embed + store │ keyword + fuzzy match
31
- │ ▼
32
- │ Cross-encoder rerank
33
- │ ms-marco-MiniLM-L-6-v2
34
- │ │
35
- └──────────────────────────────────┘
25
+ Detect monorepo ┌─── Vector search (LanceDB) ───┐
26
+ Scan all workspace pkgs │ nomic-embed-text-v1.5 │
27
+ Resolve catalog: versions │ │
28
+ ├─→ RRF Fusion
29
+ │ │ (k=60)
30
+ For each runtime dep: ├── BM25 search (LanceDB FTS) ──┘
31
+ - Search for llms.txt │ keyword + stemming
32
+ - Raw fetch (no truncation)│ ▼
33
+ - Chunk + embed + store │ Cross-encoder rerank
34
+ │ ms-marco-MiniLM-L-6-v2
35
+ │ │
36
+ └──────────────────────────────────┘
36
37
 
37
38
 
38
39
  Top-K results
@@ -60,7 +61,7 @@ Or install as a project-local plugin by cloning into your project and referencin
60
61
  /fetch-docs
61
62
  ```
62
63
 
63
- Claude reads your `package.json`, searches the web for the best documentation for each dependency (preferring `llms.txt` / `llms-full.txt`), and indexes everything locally.
64
+ Claude analyzes your project (including monorepo workspaces), finds all runtime dependencies, searches the web for the best documentation for each one (preferring `llms-full.txt` > `llms.txt` > official docs), and indexes everything locally. Progress is reported one library at a time.
64
65
 
65
66
  ### 2. Search
66
67
 
@@ -76,7 +77,8 @@ Show me the API for zod's .refine()
76
77
 
77
78
  - **`list_docs`** — See what's indexed, when it was fetched, chunk counts
78
79
  - **`get_doc_section`** — Retrieve specific sections by heading or chunk ID
79
- - **`analyze_dependencies`** — List all deps from package.json
80
+ - **`analyze_dependencies`** — List all deps (monorepo-aware, catalog-resolved, runtime/dev tagged)
81
+ - **`fetch_and_store_doc`** — Fetch a URL and index it directly (no AI truncation)
80
82
 
81
83
  ## Search pipeline
82
84
 
@@ -85,7 +87,7 @@ This plugin implements a 4-stage advanced RAG pipeline, the current production s
85
87
  | Stage | Technology | Purpose |
86
88
  |---|---|---|
87
89
  | **Vector search** | LanceDB + nomic-embed-text-v1.5 | Semantic similarity (understands meaning) |
88
- | **BM25 search** | MiniSearch (BM25+ algorithm) | Keyword matching (exact terms like `useEffect`) |
90
+ | **BM25 search** | LanceDB native FTS (BM25, stemming, stop words) | Keyword matching (exact terms like `useEffect`) |
89
91
  | **RRF fusion** | Reciprocal Rank Fusion (k=60) | Merges both ranked lists, handles different score scales |
90
92
  | **Cross-encoder rerank** | ms-marco-MiniLM-L-6-v2 | Rescores top 30 candidates with deep relevance model |
91
93
 
@@ -107,7 +109,7 @@ All models run locally via ONNX. Downloaded once on first use, then cached.
107
109
  ## Chunking strategy
108
110
 
109
111
  - Split markdown by headings (`##`, `###`, `####`) preserving the heading path
110
- - Target ~2000 characters per chunk
112
+ - Target ~1500 characters per chunk
111
113
  - 10% overlap between chunks to prevent losing context at boundaries
112
114
  - Large sections split at paragraph boundaries
113
115
 
@@ -129,8 +131,9 @@ your-project/.claude/docs/
129
131
 
130
132
  | Tool | Description |
131
133
  |---|---|
132
- | `analyze_dependencies` | Read package.json, return all deps with versions |
134
+ | `analyze_dependencies` | Monorepo-aware dep analysis: detects workspaces, resolves catalog versions, tags runtime/dev |
133
135
  | `store_and_index_doc` | Receive markdown, chunk, embed, store in LanceDB |
136
+ | `fetch_and_store_doc` | Fetch URL directly (raw HTTP, no truncation), then chunk + embed + store |
134
137
  | `search_docs` | Full RAG pipeline: vector + BM25 + RRF + rerank |
135
138
  | `list_docs` | List indexed libraries with metadata |
136
139
  | `get_doc_section` | Get specific chunks by library + heading or chunk ID |
@@ -141,12 +144,13 @@ All open source:
141
144
 
142
145
  | Package | License | Purpose |
143
146
  |---|---|---|
144
- | `@lancedb/lancedb` | Apache 2.0 | Embedded vector database |
147
+ | `@lancedb/lancedb` | Apache 2.0 | Embedded vector database + native FTS |
145
148
  | `@huggingface/transformers` | Apache 2.0 | Run ONNX models locally |
146
- | `minisearch` | MIT | BM25+ full-text search |
147
149
  | `@modelcontextprotocol/sdk` | MIT | MCP server framework |
148
150
  | `zod` | MIT | Schema validation |
149
151
 
152
+ No additional dependencies were added for monorepo support or HTTP fetching — everything uses Node built-ins.
153
+
150
154
  ## Development
151
155
 
152
156
  ```bash
@@ -171,11 +175,13 @@ claude-local-docs/
171
175
  ├── commands/
172
176
  │ └── fetch-docs.md # /fetch-docs command — Claude as research agent
173
177
  ├── src/
174
- │ ├── index.ts # MCP server entry, 5 tool definitions
178
+ │ ├── index.ts # MCP server entry, 6 tool definitions
175
179
  │ ├── indexer.ts # Chunking + nomic-embed-text-v1.5 embeddings
176
180
  │ ├── search.ts # 4-stage pipeline: vector + BM25 + RRF + rerank
177
181
  │ ├── reranker.ts # Cross-encoder (ms-marco-MiniLM-L-6-v2)
178
182
  │ ├── store.ts # LanceDB storage + metadata persistence
183
+ │ ├── fetcher.ts # Raw HTTP fetch (no AI truncation)
184
+ │ ├── workspace.ts # Monorepo detection + pnpm catalog + dep collection
179
185
  │ └── types.ts # Shared TypeScript interfaces
180
186
  ├── LICENSE
181
187
  ├── package.json
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  description: "Fetch and index documentation for all project dependencies"
3
- allowed-tools: ["mcp__local-docs__analyze_dependencies", "mcp__local-docs__list_docs", "mcp__local-docs__store_and_index_doc", "WebFetch", "WebSearch"]
3
+ allowed-tools: ["mcp__local-docs__analyze_dependencies", "mcp__local-docs__list_docs", "mcp__local-docs__store_and_index_doc", "mcp__local-docs__fetch_and_store_doc", "WebFetch", "WebSearch"]
4
4
  ---
5
5
 
6
6
  # Fetch Documentation for Project Dependencies
@@ -10,46 +10,78 @@ You are a documentation research agent. Your job is to find and fetch the best a
10
10
  ## Steps
11
11
 
12
12
  ### 1. Analyze Dependencies
13
- Call the `analyze_dependencies` MCP tool to get the list of dependencies from package.json.
14
13
 
15
- ### 2. Check Existing Cache
16
- Call the `list_docs` MCP tool to see which libraries are already indexed. **Skip** any library that was fetched within the last 7 days unless the user explicitly asks to refresh.
14
+ Call `analyze_dependencies` to get the full dependency list. This automatically:
15
+ - Detects monorepos (pnpm workspaces, npm/yarn workspaces)
16
+ - Resolves `catalog:` versions from pnpm-workspace.yaml
17
+ - Collects deps from ALL workspace packages
18
+ - Deduplicates and tags each dep as `runtime` or `dev`
17
19
 
18
- ### 3. Fetch Documentation for Each Library
20
+ ### 2. Filter Dependencies
19
21
 
20
- Process libraries in batches of 3-5. For each library that needs fetching:
22
+ From the returned list, **skip** all of the following:
23
+ - All `dev` dependencies (eslint, prettier, typescript, vitest, jest, etc.)
24
+ - All `@types/*` packages (these are just TypeScript type definitions)
25
+ - Workspace-internal packages (listed in `workspacePackages`)
26
+ - Known tooling that doesn't need docs: `tslib`, `tsconfig-*`, `eslint-*`, `prettier-*`, `@eslint/*`
21
27
 
22
- #### a. Search for llms.txt (preferred)
23
- 1. **Search the web** for `"{library name} llms.txt documentation"`
24
- 2. If you find a URL to `llms-full.txt` or `llms.txt`, **fetch it** using WebFetch
25
- 3. `llms-full.txt` is preferred over `llms.txt` (it has more detail)
28
+ This leaves only **runtime dependencies** that actually need documentation.
26
29
 
27
- #### b. Fallback: Official Documentation
30
+ ### 3. Check Existing Cache
31
+
32
+ Call `list_docs` to see which libraries are already indexed. **Skip** any library that was fetched within the last 7 days unless the user explicitly asks to refresh.
33
+
34
+ ### 4. Fetch Documentation — One Library at a Time
35
+
36
+ Process each remaining library **one at a time** with clear progress reporting. For each library:
37
+
38
+ #### a. Search for llms-full.txt (best source)
39
+ 1. **WebSearch** for `"{library name} llms-full.txt"`
40
+ 2. If you find a direct URL to `llms-full.txt`:
41
+ - Call **`fetch_and_store_doc`** with the URL (this fetches raw content — no truncation)
42
+ - Report: `[1/N] library-name — chunks from llms-full.txt (size)`
43
+
44
+ #### b. Search for llms.txt (good source)
45
+ If no llms-full.txt found:
46
+ 1. **WebSearch** for `"{library name} llms.txt"`
47
+ 2. If you find a direct URL to `llms.txt`:
48
+ - Call **`fetch_and_store_doc`** with the URL
49
+ - Report: `[2/N] library-name — chunks from llms.txt (size)`
50
+
51
+ #### c. Fallback: Official docs via WebFetch
28
52
  If no llms.txt exists:
29
- 1. **Search the web** for `"{library name} {version} official documentation"`
30
- 2. Find the main documentation page
31
- 3. **Fetch** the docs page content using WebFetch
32
- 4. If the docs have multiple important pages (API reference, guides), fetch the most critical 2-3 pages and combine them
33
-
34
- #### c. Store the Documentation
35
- For each library, call the `store_and_index_doc` MCP tool with:
36
- - `library`: the package name (e.g., "react", "@tanstack/query")
37
- - `version`: the version from package.json
38
- - `content`: the fetched markdown content
39
- - `sourceUrl`: the URL where the content was fetched from
40
-
41
- ### 4. Report Results
42
-
43
- After processing all libraries, provide a summary:
44
- - Which libraries were successfully indexed (with chunk counts)
45
- - Which libraries failed and why
46
- - Total chunks in the index
47
- - Remind the user they can now use `search_docs` to query the documentation
48
-
49
- ## Important Notes
50
-
51
- - **Be thorough but efficient**: Don't fetch huge API references if a concise llms.txt is available
52
- - **Prefer quality over quantity**: A good llms.txt is better than scraping dozens of doc pages
53
- - **Handle errors gracefully**: If a library's docs can't be found, log it and move on
54
- - **Respect rate limits**: Don't fire off too many web requests simultaneously
53
+ 1. **WebSearch** for `"{library name} official documentation"`
54
+ 2. **WebFetch** the main documentation page
55
+ 3. Call **`store_and_index_doc`** with the fetched content
56
+ 4. Report: `[3/N] library-name chunks from official docs`
57
+
58
+ #### d. If all attempts fail
59
+ Report: `[4/N] library-name SKIPPED (no docs found)` and move on.
60
+
61
+ ### 5. Final Summary
62
+
63
+ After processing all libraries, report:
64
+
65
+ ```
66
+ Done! Indexed X/Y libraries.
67
+
68
+ react — 85 chunks (llms-full.txt, 340KB)
69
+ next — 120 chunks (llms-full.txt, 510KB)
70
+ zod — 45 chunks (llms.txt, 95KB)
71
+ express — 30 chunks (official docs)
72
+ lodash — SKIPPED (no docs found)
73
+
74
+ Total: 280 chunks across 4 libraries.
75
+ Use search_docs to query your documentation.
76
+ ```
77
+
78
+ ## Critical Rules
79
+
80
+ - **NEVER write files to the filesystem directly.** Do NOT use the Write tool, Bash tool, or any other method to save documentation content to disk. ALL storage goes through the MCP tools (`fetch_and_store_doc` and `store_and_index_doc`), which save everything inside `.claude/docs/`. No exceptions.
81
+ - **NEVER create markdown files, text files, or any other files** in the project directory. The MCP tools handle all file storage internally.
82
+ - **Use `fetch_and_store_doc` for all llms.txt URLs** — this fetches raw content without AI truncation, preserving full documentation
83
+ - **Use `store_and_index_doc` only for WebFetch fallback** — pass the WebFetch result content directly to the tool, do NOT save it to a file first
84
+ - **One library at a time** — clear progress, no batching
85
+ - **Skip dev deps by default** — runtime deps only
55
86
  - For scoped packages like `@scope/package`, search for both the full name and just the package part
87
+ - Handle errors gracefully: if a library fails, log it and move to the next one
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Raw HTTP fetch for documentation content.
3
+ * No AI processing, no truncation — returns full text as-is.
4
+ */
5
+ export type FetchResult = {
6
+ ok: true;
7
+ content: string;
8
+ byteLength: number;
9
+ contentType: string;
10
+ } | {
11
+ ok: false;
12
+ error: string;
13
+ };
14
+ export declare function fetchDocContent(url: string): Promise<FetchResult>;
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Raw HTTP fetch for documentation content.
3
+ * No AI processing, no truncation — returns full text as-is.
4
+ */
5
+ const TIMEOUT_MS = 30_000;
6
+ const MAX_SIZE = 5 * 1024 * 1024; // 5MB
7
+ export async function fetchDocContent(url) {
8
+ try {
9
+ const controller = new AbortController();
10
+ const timer = setTimeout(() => controller.abort(), TIMEOUT_MS);
11
+ const res = await fetch(url, {
12
+ signal: controller.signal,
13
+ headers: {
14
+ "User-Agent": "claude-local-docs/1.0",
15
+ "Accept": "text/plain, text/markdown, text/html, */*",
16
+ },
17
+ redirect: "follow",
18
+ });
19
+ clearTimeout(timer);
20
+ if (!res.ok) {
21
+ return { ok: false, error: `HTTP ${res.status} ${res.statusText}` };
22
+ }
23
+ const contentType = res.headers.get("content-type") ?? "text/plain";
24
+ // Check content-length header if available
25
+ const contentLength = res.headers.get("content-length");
26
+ if (contentLength && parseInt(contentLength, 10) > MAX_SIZE) {
27
+ return { ok: false, error: `Content too large: ${contentLength} bytes (limit: ${MAX_SIZE})` };
28
+ }
29
+ // Read body with size guard
30
+ const buffer = await res.arrayBuffer();
31
+ if (buffer.byteLength > MAX_SIZE) {
32
+ return { ok: false, error: `Content too large: ${buffer.byteLength} bytes (limit: ${MAX_SIZE})` };
33
+ }
34
+ const content = new TextDecoder().decode(buffer);
35
+ return {
36
+ ok: true,
37
+ content,
38
+ byteLength: buffer.byteLength,
39
+ contentType,
40
+ };
41
+ }
42
+ catch (err) {
43
+ if (err.name === "AbortError") {
44
+ return { ok: false, error: `Request timed out after ${TIMEOUT_MS / 1000}s` };
45
+ }
46
+ return { ok: false, error: err.message ?? String(err) };
47
+ }
48
+ }
49
+ //# sourceMappingURL=fetcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetcher.js","sourceRoot":"","sources":["../src/fetcher.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,UAAU,GAAG,MAAM,CAAC;AAC1B,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,MAAM;AAMxC,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,GAAW;IAC/C,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,UAAU,CAAC,CAAC;QAE/D,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC3B,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,OAAO,EAAE;gBACP,YAAY,EAAE,uBAAuB;gBACrC,QAAQ,EAAE,2CAA2C;aACtD;YACD,QAAQ,EAAE,QAAQ;SACnB,CAAC,CAAC;QAEH,YAAY,CAAC,KAAK,CAAC,CAAC;QAEpB,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC;QACtE,CAAC;QAED,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,YAAY,CAAC;QAEpE,2CAA2C;QAC3C,MAAM,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QACxD,IAAI,aAAa,IAAI,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC;YAC5D,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,sBAAsB,aAAa,kBAAkB,QAAQ,GAAG,EAAE,CAAC;QAChG,CAAC;QAED,4BAA4B;QAC5B,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC;QACvC,IAAI,MAAM,CAAC,UAAU,GAAG,QAAQ,EAAE,CAAC;YACjC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,sBAAsB,MAAM,CAAC,UAAU,kBAAkB,QAAQ,GAAG,EAAE,CAAC;QACpG,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAEjD,OAAO;YACL,EAAE,EAAE,IAAI;YACR,OAAO;YACP,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,WAAW;SACZ,CAAC;IACJ,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC9B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,2BAA2B,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;QAC/E,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;IAC1D,CAAC;AACH,CAAC"}
package/dist/index.js CHANGED
@@ -1,12 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
3
3
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
- import { readFile } from "node:fs/promises";
5
4
  import { join } from "node:path";
6
5
  import { z } from "zod";
7
6
  import { DocStore, resolveProjectRoot } from "./store.js";
8
7
  import { indexDocument } from "./indexer.js";
9
8
  import { searchDocs } from "./search.js";
9
+ import { analyzeDependencies } from "./workspace.js";
10
+ import { fetchDocContent } from "./fetcher.js";
10
11
  const projectRoot = resolveProjectRoot();
11
12
  const store = new DocStore(projectRoot);
12
13
  const server = new McpServer({
@@ -14,35 +15,44 @@ const server = new McpServer({
14
15
  version: "1.0.0",
15
16
  });
16
17
  // --- Tool 1: analyze_dependencies ---
17
- server.tool("analyze_dependencies", "Read package.json and return all dependencies with their versions", { packageJsonPath: z.string().optional().describe("Path to package.json. Defaults to the project root.") }, async ({ packageJsonPath }) => {
18
+ server.registerTool("analyze_dependencies", {
19
+ description: "Analyze project dependencies. Detects monorepos (pnpm workspaces, npm/yarn workspaces), resolves catalog: versions, collects deps from all workspace packages, and deduplicates. Returns deps tagged as runtime/dev plus monorepo info.",
20
+ inputSchema: {
21
+ packageJsonPath: z
22
+ .string()
23
+ .optional()
24
+ .describe("Path to package.json or project root. Defaults to the project root."),
25
+ },
26
+ }, async ({ packageJsonPath }) => {
18
27
  try {
19
- const pkgPath = packageJsonPath ?? join(projectRoot, "package.json");
20
- const raw = await readFile(pkgPath, "utf-8");
21
- const pkg = JSON.parse(raw);
22
- const deps = [];
23
- for (const [name, version] of Object.entries(pkg.dependencies ?? {})) {
24
- deps.push({ name, version: version });
25
- }
26
- for (const [name, version] of Object.entries(pkg.devDependencies ?? {})) {
27
- deps.push({ name, version: version });
28
- }
28
+ const root = packageJsonPath
29
+ ? packageJsonPath.endsWith("package.json")
30
+ ? join(packageJsonPath, "..")
31
+ : packageJsonPath
32
+ : projectRoot;
33
+ const result = await analyzeDependencies(root);
29
34
  return {
30
- content: [{ type: "text", text: JSON.stringify(deps, null, 2) }],
35
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
31
36
  };
32
37
  }
33
38
  catch (err) {
34
39
  return {
35
- content: [{ type: "text", text: `Error reading package.json: ${err.message}` }],
40
+ content: [
41
+ { type: "text", text: `Error analyzing dependencies: ${err.message}` },
42
+ ],
36
43
  isError: true,
37
44
  };
38
45
  }
39
46
  });
40
47
  // --- Tool 2: store_and_index_doc ---
41
- server.tool("store_and_index_doc", "Store and index documentation for a library. Chunks markdown, generates embeddings via nomic-embed-text-v1.5, and persists to LanceDB in .claude/docs/", {
42
- library: z.string().describe("Library name (e.g. 'react', '@tanstack/query')"),
43
- version: z.string().describe("Library version"),
44
- content: z.string().describe("Raw markdown documentation content"),
45
- sourceUrl: z.string().describe("URL where the docs were fetched from"),
48
+ server.registerTool("store_and_index_doc", {
49
+ description: "Store and index documentation for a library. Chunks markdown, generates embeddings via nomic-embed-text-v1.5, and persists to LanceDB in .claude/docs/",
50
+ inputSchema: {
51
+ library: z.string().describe("Library name (e.g. 'react', '@tanstack/query')"),
52
+ version: z.string().describe("Library version"),
53
+ content: z.string().describe("Raw markdown documentation content"),
54
+ sourceUrl: z.string().describe("URL where the docs were fetched from"),
55
+ },
46
56
  }, async ({ library, version, content, sourceUrl }) => {
47
57
  try {
48
58
  // Save raw doc
@@ -74,10 +84,13 @@ server.tool("store_and_index_doc", "Store and index documentation for a library.
74
84
  }
75
85
  });
76
86
  // --- Tool 3: search_docs ---
77
- server.tool("search_docs", "Advanced RAG search: BM25 keyword search + vector similarity → RRF fusion → cross-encoder reranking. Uses nomic-embed-text-v1.5 for embeddings and ms-marco-MiniLM for reranking.", {
78
- query: z.string().describe("Search query"),
79
- library: z.string().optional().describe("Filter results to a specific library"),
80
- topK: z.number().optional().describe("Number of results to return (default: 10)"),
87
+ server.registerTool("search_docs", {
88
+ description: "Advanced RAG search: BM25 keyword search + vector similarity → RRF fusion → cross-encoder reranking. Uses nomic-embed-text-v1.5 for embeddings and ms-marco-MiniLM for reranking.",
89
+ inputSchema: {
90
+ query: z.string().describe("Search query"),
91
+ library: z.string().optional().describe("Filter results to a specific library"),
92
+ topK: z.number().optional().describe("Number of results to return (default: 10)"),
93
+ },
81
94
  }, async ({ query, library, topK }) => {
82
95
  try {
83
96
  if (await store.isEmpty()) {
@@ -112,7 +125,9 @@ server.tool("search_docs", "Advanced RAG search: BM25 keyword search + vector si
112
125
  }
113
126
  });
114
127
  // --- Tool 4: list_docs ---
115
- server.tool("list_docs", "List all indexed documentation libraries with metadata", {}, async () => {
128
+ server.registerTool("list_docs", {
129
+ description: "List all indexed documentation libraries with metadata",
130
+ }, async () => {
116
131
  try {
117
132
  const metadata = await store.loadMetadata();
118
133
  if (metadata.libraries.length === 0) {
@@ -139,10 +154,13 @@ server.tool("list_docs", "List all indexed documentation libraries with metadata
139
154
  }
140
155
  });
141
156
  // --- Tool 5: get_doc_section ---
142
- server.tool("get_doc_section", "Retrieve specific documentation chunks by library + heading or chunk ID", {
143
- library: z.string().describe("Library name"),
144
- heading: z.string().optional().describe("Heading text to search for in the heading path"),
145
- chunkId: z.number().optional().describe("Specific chunk ID to retrieve"),
157
+ server.registerTool("get_doc_section", {
158
+ description: "Retrieve specific documentation chunks by library + heading or chunk ID",
159
+ inputSchema: {
160
+ library: z.string().describe("Library name"),
161
+ heading: z.string().optional().describe("Heading text to search for in the heading path"),
162
+ chunkId: z.number().optional().describe("Specific chunk ID to retrieve"),
163
+ },
146
164
  }, async ({ library, heading, chunkId }) => {
147
165
  try {
148
166
  if (chunkId !== undefined) {
@@ -217,6 +235,63 @@ server.tool("get_doc_section", "Retrieve specific documentation chunks by librar
217
235
  };
218
236
  }
219
237
  });
238
+ // --- Tool 6: fetch_and_store_doc ---
239
+ server.registerTool("fetch_and_store_doc", {
240
+ description: "Fetch documentation from a URL (raw HTTP, no AI processing or truncation) and index it. Use this for llms.txt and llms-full.txt URLs to preserve full content. Handles up to 5MB, 30s timeout.",
241
+ inputSchema: {
242
+ library: z.string().describe("Library name (e.g. 'react', '@tanstack/query')"),
243
+ version: z.string().describe("Library version"),
244
+ url: z.string().describe("URL to fetch documentation from (e.g. llms-full.txt URL)"),
245
+ },
246
+ }, async ({ library, version, url }) => {
247
+ try {
248
+ // Fetch raw content
249
+ const fetchResult = await fetchDocContent(url);
250
+ if (!fetchResult.ok) {
251
+ return {
252
+ content: [
253
+ {
254
+ type: "text",
255
+ text: JSON.stringify({ success: false, error: fetchResult.error }),
256
+ },
257
+ ],
258
+ isError: true,
259
+ };
260
+ }
261
+ // Save raw doc
262
+ await store.saveRawDoc(library, fetchResult.content);
263
+ // Chunk and embed
264
+ const chunks = await indexDocument(fetchResult.content, library);
265
+ // Store in LanceDB
266
+ const result = await store.addLibrary(library, version, url, chunks);
267
+ return {
268
+ content: [
269
+ {
270
+ type: "text",
271
+ text: JSON.stringify({
272
+ success: true,
273
+ library,
274
+ chunkCount: result.chunkCount,
275
+ byteLength: fetchResult.byteLength,
276
+ totalIndexSize: result.indexSize,
277
+ storedAt: store.getDocsDir(),
278
+ }),
279
+ },
280
+ ],
281
+ };
282
+ }
283
+ catch (err) {
284
+ return {
285
+ content: [
286
+ {
287
+ type: "text",
288
+ text: JSON.stringify({ success: false, error: err.message }),
289
+ },
290
+ ],
291
+ isError: true,
292
+ };
293
+ }
294
+ });
220
295
  // --- Start server ---
221
296
  async function main() {
222
297
  const transport = new StdioServerTransport();
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/indexer.js CHANGED
@@ -24,7 +24,7 @@ export function chunkMarkdown(markdown, library) {
24
24
  const trimmed = currentText.trim();
25
25
  if (trimmed.length > 0) {
26
26
  const headingPath = headingStack.map((h) => h.text);
27
- const subChunks = splitWithOverlap(trimmed, 2000, 200);
27
+ const subChunks = splitWithOverlap(trimmed, 1500, 200);
28
28
  for (const sub of subChunks) {
29
29
  chunks.push({
30
30
  library,
package/dist/search.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Advanced RAG search pipeline:
3
3
  * 1. Vector search (LanceDB) — semantic similarity
4
- * 2. BM25 search (MiniSearch) — keyword/exact match
4
+ * 2. BM25 search (LanceDB native FTS) — keyword/exact match
5
5
  * 3. Reciprocal Rank Fusion — merge both ranked lists
6
6
  * 4. Cross-encoder rerank — rescore top candidates
7
7
  */
package/dist/search.js CHANGED
@@ -1,42 +1,12 @@
1
1
  /**
2
2
  * Advanced RAG search pipeline:
3
3
  * 1. Vector search (LanceDB) — semantic similarity
4
- * 2. BM25 search (MiniSearch) — keyword/exact match
4
+ * 2. BM25 search (LanceDB native FTS) — keyword/exact match
5
5
  * 3. Reciprocal Rank Fusion — merge both ranked lists
6
6
  * 4. Cross-encoder rerank — rescore top candidates
7
7
  */
8
- import MiniSearch from "minisearch";
9
8
  import { embedTexts } from "./indexer.js";
10
9
  import { rerank } from "./reranker.js";
11
- // --- BM25 index (lazy-built, cached per session) ---
12
- let bm25Index = null;
13
- let bm25IndexedCount = 0;
14
- async function getBM25Index(store) {
15
- const allChunks = await store.getChunks();
16
- // Rebuild if chunk count changed (new docs indexed)
17
- if (bm25Index && bm25IndexedCount === allChunks.length) {
18
- return bm25Index;
19
- }
20
- bm25Index = new MiniSearch({
21
- fields: ["text"],
22
- storeFields: ["id", "library", "headingPath", "text"],
23
- searchOptions: {
24
- boost: { text: 1 },
25
- fuzzy: 0.2,
26
- prefix: true,
27
- },
28
- });
29
- // MiniSearch needs objects with a unique `id` field
30
- const docs = allChunks.map((chunk) => ({
31
- id: chunk.id,
32
- library: chunk.library,
33
- headingPath: chunk.headingPath,
34
- text: chunk.text,
35
- }));
36
- bm25Index.addAll(docs);
37
- bm25IndexedCount = allChunks.length;
38
- return bm25Index;
39
- }
40
10
  /**
41
11
  * RRF: score = sum( weight_r / (k + rank_r) ) for each ranker r.
42
12
  * k=60 is the standard default (Azure, Weaviate, OpenSearch).
@@ -86,18 +56,13 @@ export async function searchDocs(query, store, options) {
86
56
  library: row.library,
87
57
  headingPath: row.headingPath,
88
58
  }));
89
- // Step 2: BM25 search via MiniSearch
90
- const index = await getBM25Index(store);
91
- const bm25Options = {};
92
- if (options?.library) {
93
- bm25Options.filter = (result) => result.library === options.library;
94
- }
95
- const bm25Hits = index.search(query, bm25Options).slice(0, candidateCount);
96
- const bm25Ranked = bm25Hits.map((hit) => ({
97
- id: hit.id,
98
- text: hit.text,
99
- library: hit.library,
100
- headingPath: hit.headingPath,
59
+ // Step 2: BM25 search via LanceDB native FTS
60
+ const ftsHits = await store.ftsSearch(query, candidateCount, options?.library);
61
+ const bm25Ranked = ftsHits.map((row) => ({
62
+ id: row.id,
63
+ text: row.text,
64
+ library: row.library,
65
+ headingPath: row.headingPath,
101
66
  }));
102
67
  // Step 3: RRF fusion (k=60, BM25 weight=1.0, vector weight=0.7)
103
68
  const fused = reciprocalRankFusion(vectorRanked, bm25Ranked, {
@@ -1 +1 @@
1
- {"version":3,"file":"search.js","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"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"}
package/dist/store.d.ts CHANGED
@@ -24,6 +24,10 @@ export declare class DocStore {
24
24
  getChunks(library?: string): Promise<DocRow[]>;
25
25
  getChunkById(chunkId: number): Promise<DocRow | undefined>;
26
26
  getChunksByHeading(library: string, heading: string): Promise<DocRow[]>;
27
+ /** Create BM25 full-text search index on the text column. Safe to call repeatedly (replace=true). */
28
+ createFtsIndex(): Promise<void>;
29
+ /** BM25 full-text search using LanceDB native FTS index. */
30
+ ftsSearch(query: string, limit: number, library?: string): Promise<DocRow[]>;
27
31
  isEmpty(): Promise<boolean>;
28
32
  getDocsDir(): string;
29
33
  }
package/dist/store.js CHANGED
@@ -105,6 +105,8 @@ export class DocStore {
105
105
  metadata.libraries.push(libMeta);
106
106
  }
107
107
  await this.saveMetadata(metadata);
108
+ // Rebuild FTS index after adding new rows
109
+ await this.createFtsIndex();
108
110
  // Count total rows
109
111
  const totalRows = table
110
112
  ? (await table.countRows())
@@ -152,6 +154,34 @@ export class DocStore {
152
154
  return path.some((h) => h.toLowerCase().includes(lowerHeading));
153
155
  });
154
156
  }
157
+ /** Create BM25 full-text search index on the text column. Safe to call repeatedly (replace=true). */
158
+ async createFtsIndex() {
159
+ const table = await this.getTable();
160
+ if (!table)
161
+ return;
162
+ const lancedb = await import("@lancedb/lancedb");
163
+ await table.createIndex("text", {
164
+ config: lancedb.Index.fts({ stem: true, lowercase: true, removeStopWords: true }),
165
+ replace: true,
166
+ });
167
+ }
168
+ /** BM25 full-text search using LanceDB native FTS index. */
169
+ async ftsSearch(query, limit, library) {
170
+ const table = await this.getTable();
171
+ if (!table)
172
+ return [];
173
+ try {
174
+ let q = table.query().fullTextSearch(query, { columns: ["text"] }).limit(limit);
175
+ if (library) {
176
+ q = q.where(`library = '${library.replace(/'/g, "''")}'`);
177
+ }
178
+ return await q.toArray();
179
+ }
180
+ catch {
181
+ // FTS index doesn't exist yet (first search before any docs indexed)
182
+ return [];
183
+ }
184
+ }
155
185
  async isEmpty() {
156
186
  const table = await this.getTable();
157
187
  return !table;
package/dist/store.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -1,6 +1,12 @@
1
1
  export interface Dependency {
2
2
  name: string;
3
3
  version: string;
4
+ kind: "runtime" | "dev";
5
+ }
6
+ export interface AnalyzeResult {
7
+ dependencies: Dependency[];
8
+ isMonorepo: boolean;
9
+ workspacePackages?: string[];
4
10
  }
5
11
  export interface LibraryMetadata {
6
12
  library: string;
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Monorepo detection, pnpm workspace parsing, and dependency collection.
3
+ * No external YAML library — uses simple line-by-line parsing.
4
+ */
5
+ import type { Dependency, AnalyzeResult } from "./types.js";
6
+ export interface MonorepoInfo {
7
+ isMonorepo: boolean;
8
+ type?: "pnpm" | "npm" | "yarn";
9
+ workspacePatterns: string[];
10
+ catalog: Record<string, string>;
11
+ }
12
+ /**
13
+ * Detect whether the project root is a monorepo.
14
+ * Checks for pnpm-workspace.yaml and package.json workspaces field.
15
+ */
16
+ export declare function detectMonorepo(root: string): Promise<MonorepoInfo>;
17
+ /**
18
+ * Parse pnpm-workspace.yaml without a YAML library.
19
+ * Extracts `packages:` glob patterns and `catalog:` version map.
20
+ */
21
+ export declare function parsePnpmWorkspace(content: string): {
22
+ packages: string[];
23
+ catalog: Record<string, string>;
24
+ };
25
+ /**
26
+ * Expand workspace glob patterns into actual package.json paths.
27
+ * Supports simple patterns like "apps/*", "packages/*", "libs/**".
28
+ * Uses readdir instead of glob for Node 20 compatibility.
29
+ */
30
+ export declare function resolveWorkspacePackageJsonPaths(root: string, patterns: string[]): Promise<string[]>;
31
+ /**
32
+ * Collect all dependencies from multiple package.json files.
33
+ * Resolves `catalog:` versions, skips `workspace:*` internal deps, deduplicates.
34
+ */
35
+ export declare function collectAllDependencies(packageJsonPaths: string[], catalog: Record<string, string>): Promise<{
36
+ deps: Dependency[];
37
+ internalPackages: string[];
38
+ }>;
39
+ /**
40
+ * Full monorepo-aware dependency analysis.
41
+ */
42
+ export declare function analyzeDependencies(root: string): Promise<AnalyzeResult>;
@@ -0,0 +1,216 @@
1
+ /**
2
+ * Monorepo detection, pnpm workspace parsing, and dependency collection.
3
+ * No external YAML library — uses simple line-by-line parsing.
4
+ */
5
+ import { readFile, readdir } from "node:fs/promises";
6
+ import { existsSync } from "node:fs";
7
+ import { join, resolve } from "node:path";
8
+ /**
9
+ * Detect whether the project root is a monorepo.
10
+ * Checks for pnpm-workspace.yaml and package.json workspaces field.
11
+ */
12
+ export async function detectMonorepo(root) {
13
+ // Check pnpm-workspace.yaml first
14
+ const pnpmWsPath = join(root, "pnpm-workspace.yaml");
15
+ if (existsSync(pnpmWsPath)) {
16
+ const content = await readFile(pnpmWsPath, "utf-8");
17
+ const parsed = parsePnpmWorkspace(content);
18
+ return {
19
+ isMonorepo: true,
20
+ type: "pnpm",
21
+ workspacePatterns: parsed.packages,
22
+ catalog: parsed.catalog,
23
+ };
24
+ }
25
+ // Check package.json workspaces
26
+ const pkgPath = join(root, "package.json");
27
+ if (existsSync(pkgPath)) {
28
+ try {
29
+ const raw = await readFile(pkgPath, "utf-8");
30
+ const pkg = JSON.parse(raw);
31
+ if (pkg.workspaces) {
32
+ const patterns = Array.isArray(pkg.workspaces)
33
+ ? pkg.workspaces
34
+ : pkg.workspaces.packages ?? [];
35
+ if (patterns.length > 0) {
36
+ return {
37
+ isMonorepo: true,
38
+ type: pkg.workspaces ? "npm" : "yarn",
39
+ workspacePatterns: patterns,
40
+ catalog: {},
41
+ };
42
+ }
43
+ }
44
+ }
45
+ catch {
46
+ // Invalid package.json, treat as non-monorepo
47
+ }
48
+ }
49
+ return { isMonorepo: false, workspacePatterns: [], catalog: {} };
50
+ }
51
+ /**
52
+ * Parse pnpm-workspace.yaml without a YAML library.
53
+ * Extracts `packages:` glob patterns and `catalog:` version map.
54
+ */
55
+ export function parsePnpmWorkspace(content) {
56
+ const packages = [];
57
+ const catalog = {};
58
+ const lines = content.split("\n");
59
+ let section = "none";
60
+ let catalogKey = ""; // for nested catalog like "catalog:" at top level
61
+ for (const rawLine of lines) {
62
+ const line = rawLine.trimEnd();
63
+ // Detect top-level sections
64
+ if (/^packages\s*:/.test(line)) {
65
+ section = "packages";
66
+ continue;
67
+ }
68
+ if (/^catalog\s*:/.test(line)) {
69
+ section = "catalog";
70
+ continue;
71
+ }
72
+ // Any other top-level key ends the current section
73
+ if (/^\S/.test(line) && line.trim().length > 0) {
74
+ section = "none";
75
+ continue;
76
+ }
77
+ if (section === "packages") {
78
+ // Lines like: - "apps/*" or - 'packages/*' or - packages/*
79
+ const match = line.match(/^\s+-\s+['"]?([^'"]+)['"]?\s*$/);
80
+ if (match) {
81
+ packages.push(match[1].trim());
82
+ }
83
+ }
84
+ if (section === "catalog") {
85
+ // Lines like: react: "^18.0.0" or react: ^18.0.0
86
+ const match = line.match(/^\s+(['"]?)([@\w\/-]+)\1\s*:\s*['"]?([^'"#]+)['"]?\s*$/);
87
+ if (match) {
88
+ catalog[match[2].trim()] = match[3].trim();
89
+ }
90
+ }
91
+ }
92
+ return { packages, catalog };
93
+ }
94
+ /**
95
+ * Expand workspace glob patterns into actual package.json paths.
96
+ * Supports simple patterns like "apps/*", "packages/*", "libs/**".
97
+ * Uses readdir instead of glob for Node 20 compatibility.
98
+ */
99
+ export async function resolveWorkspacePackageJsonPaths(root, patterns) {
100
+ const paths = [];
101
+ for (const rawPattern of patterns) {
102
+ // Normalize: strip trailing /*, /**, or /
103
+ const pattern = rawPattern.replace(/\/?\*{1,2}$/, "").replace(/\/$/, "");
104
+ const parentDir = resolve(root, pattern);
105
+ if (!existsSync(parentDir))
106
+ continue;
107
+ try {
108
+ const entries = await readdir(parentDir, { withFileTypes: true });
109
+ for (const entry of entries) {
110
+ if (!entry.isDirectory())
111
+ continue;
112
+ const pkgPath = join(parentDir, entry.name, "package.json");
113
+ if (existsSync(pkgPath)) {
114
+ paths.push(pkgPath);
115
+ }
116
+ }
117
+ }
118
+ catch {
119
+ // Directory not readable, skip
120
+ }
121
+ }
122
+ // Always include root package.json
123
+ const rootPkg = join(root, "package.json");
124
+ if (existsSync(rootPkg) && !paths.includes(rootPkg)) {
125
+ paths.unshift(rootPkg);
126
+ }
127
+ return paths;
128
+ }
129
+ /**
130
+ * Collect all dependencies from multiple package.json files.
131
+ * Resolves `catalog:` versions, skips `workspace:*` internal deps, deduplicates.
132
+ */
133
+ export async function collectAllDependencies(packageJsonPaths, catalog) {
134
+ const seen = new Map();
135
+ const internalPackages = [];
136
+ // First pass: collect internal package names
137
+ for (const pkgPath of packageJsonPaths) {
138
+ try {
139
+ const raw = await readFile(pkgPath, "utf-8");
140
+ const pkg = JSON.parse(raw);
141
+ if (pkg.name) {
142
+ internalPackages.push(pkg.name);
143
+ }
144
+ }
145
+ catch {
146
+ // Skip unreadable files
147
+ }
148
+ }
149
+ const internalSet = new Set(internalPackages);
150
+ // Second pass: collect dependencies
151
+ for (const pkgPath of packageJsonPaths) {
152
+ try {
153
+ const raw = await readFile(pkgPath, "utf-8");
154
+ const pkg = JSON.parse(raw);
155
+ const addDeps = (deps, kind) => {
156
+ for (const [name, rawVersion] of Object.entries(deps)) {
157
+ // Skip workspace-internal deps
158
+ if (internalSet.has(name))
159
+ continue;
160
+ if (typeof rawVersion !== "string")
161
+ continue;
162
+ let version = rawVersion;
163
+ // Resolve catalog: references
164
+ if (version === "catalog:" || version === "catalog:default") {
165
+ version = catalog[name] ?? version;
166
+ }
167
+ else if (version.startsWith("catalog:")) {
168
+ // Named catalog like "catalog:react18"
169
+ const catalogName = version.slice("catalog:".length);
170
+ version = catalog[catalogName] ?? catalog[name] ?? version;
171
+ }
172
+ // Skip workspace protocol
173
+ if (version.startsWith("workspace:"))
174
+ continue;
175
+ // Deduplicate: runtime wins over dev
176
+ const existing = seen.get(name);
177
+ if (!existing || (existing.kind === "dev" && kind === "runtime")) {
178
+ seen.set(name, { name, version, kind });
179
+ }
180
+ }
181
+ };
182
+ addDeps(pkg.dependencies ?? {}, "runtime");
183
+ addDeps(pkg.devDependencies ?? {}, "dev");
184
+ }
185
+ catch {
186
+ // Skip unreadable files
187
+ }
188
+ }
189
+ return {
190
+ deps: Array.from(seen.values()),
191
+ internalPackages,
192
+ };
193
+ }
194
+ /**
195
+ * Full monorepo-aware dependency analysis.
196
+ */
197
+ export async function analyzeDependencies(root) {
198
+ const mono = await detectMonorepo(root);
199
+ if (mono.isMonorepo) {
200
+ const pkgPaths = await resolveWorkspacePackageJsonPaths(root, mono.workspacePatterns);
201
+ const { deps, internalPackages } = await collectAllDependencies(pkgPaths, mono.catalog);
202
+ return {
203
+ dependencies: deps,
204
+ isMonorepo: true,
205
+ workspacePackages: internalPackages,
206
+ };
207
+ }
208
+ // Single package.json
209
+ const pkgPath = join(root, "package.json");
210
+ const { deps } = await collectAllDependencies([pkgPath], {});
211
+ return {
212
+ dependencies: deps,
213
+ isMonorepo: false,
214
+ };
215
+ }
216
+ //# sourceMappingURL=workspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-local-docs",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "Local-first Context7 alternative — indexes JS/TS dependency docs with a 4-stage RAG pipeline. All models run locally via ONNX.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -42,7 +42,6 @@
42
42
  "@huggingface/transformers": "^3.4.1",
43
43
  "@lancedb/lancedb": "^0.17.0",
44
44
  "@modelcontextprotocol/sdk": "^1.12.1",
45
- "minisearch": "^7.1.0",
46
45
  "zod": "^3.24.0"
47
46
  },
48
47
  "devDependencies": {