tailwindcss-docs-mcp 1.1.0 → 1.2.0
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/README.md +98 -55
- package/dist/auto-index.d.ts +21 -0
- package/dist/auto-index.d.ts.map +1 -0
- package/dist/auto-index.js +27 -0
- package/dist/auto-index.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -1
- package/dist/server.d.ts +8 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +11 -4
- package/dist/server.js.map +1 -1
- package/dist/tools/check-status.d.ts +3 -3
- package/dist/tools/check-status.d.ts.map +1 -1
- package/dist/tools/check-status.js +12 -4
- package/dist/tools/check-status.js.map +1 -1
- package/dist/tools/search-docs.d.ts +2 -1
- package/dist/tools/search-docs.d.ts.map +1 -1
- package/dist/tools/search-docs.js +8 -2
- package/dist/tools/search-docs.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,15 +1,31 @@
|
|
|
1
1
|
# tailwindcss-docs-mcp
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/tailwindcss-docs-mcp)
|
|
4
|
-
[](https://smithery.ai/server/@vitalis/tailwindcss-docs-mcp)
|
|
5
4
|
[](LICENSE)
|
|
6
5
|
|
|
7
6
|
Local semantic search for Tailwind CSS documentation via [Model Context Protocol](https://modelcontextprotocol.io).
|
|
8
7
|
|
|
9
|
-
LLMs hallucinate Tailwind classes. This MCP server downloads the docs once, embeds them locally with ONNX, and gives your AI instant
|
|
8
|
+
LLMs hallucinate Tailwind classes. This MCP server downloads the official docs once, embeds them locally with a 22M-parameter ONNX model, and gives your AI assistant instant hybrid search — no API keys, no external services, no per-query costs. Everything runs on your machine.
|
|
9
|
+
|
|
10
|
+
## Features
|
|
11
|
+
|
|
12
|
+
- **Zero configuration** — install, run, done. No API keys, no Ollama, no database setup.
|
|
13
|
+
- **Hybrid search** — semantic similarity + FTS5 keyword matching, combined with reciprocal rank fusion for consistently relevant results.
|
|
14
|
+
- **Query expansion** — understands Tailwind class names. Searching `text-lg` automatically includes "font size"; `mx-auto` includes "margin".
|
|
15
|
+
- **Tailwind v3 + v4** — full documentation for both major versions, switchable per query.
|
|
16
|
+
- **Fully local embeddings** — `snowflake-arctic-embed-xs` (22M params, 384 dims) runs in-process via ONNX. Nothing leaves your machine.
|
|
17
|
+
- **Incremental indexing** — SHA-256 content hashing per chunk. Only changed content gets re-embedded on refresh.
|
|
18
|
+
|
|
19
|
+
## Requirements
|
|
20
|
+
|
|
21
|
+
- **Node.js 18+**
|
|
22
|
+
|
|
23
|
+
That's it. No Ollama, no Python, no external services. The embedding model (~27 MB) downloads automatically on first run.
|
|
10
24
|
|
|
11
25
|
## Installation
|
|
12
26
|
|
|
27
|
+
Add to your MCP client configuration:
|
|
28
|
+
|
|
13
29
|
```json
|
|
14
30
|
{
|
|
15
31
|
"mcpServers": {
|
|
@@ -30,6 +46,26 @@ claude mcp add tailwindcss-docs-mcp -- npx -y tailwindcss-docs-mcp
|
|
|
30
46
|
|
|
31
47
|
</details>
|
|
32
48
|
|
|
49
|
+
<details>
|
|
50
|
+
<summary>VS Code</summary>
|
|
51
|
+
|
|
52
|
+
Add to your user or workspace `settings.json`:
|
|
53
|
+
|
|
54
|
+
```json
|
|
55
|
+
{
|
|
56
|
+
"mcp": {
|
|
57
|
+
"servers": {
|
|
58
|
+
"tailwindcss-docs-mcp": {
|
|
59
|
+
"command": "npx",
|
|
60
|
+
"args": ["-y", "tailwindcss-docs-mcp"]
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
</details>
|
|
68
|
+
|
|
33
69
|
<details>
|
|
34
70
|
<summary>Cursor / Windsurf</summary>
|
|
35
71
|
|
|
@@ -49,21 +85,33 @@ Add to your project's `.mcp.json`:
|
|
|
49
85
|
</details>
|
|
50
86
|
|
|
51
87
|
<details>
|
|
52
|
-
<summary>
|
|
88
|
+
<summary>Tailwind CSS v3</summary>
|
|
53
89
|
|
|
54
|
-
|
|
55
|
-
|
|
90
|
+
Set the default version via environment variable:
|
|
91
|
+
|
|
92
|
+
```json
|
|
93
|
+
{
|
|
94
|
+
"mcpServers": {
|
|
95
|
+
"tailwindcss-docs-mcp": {
|
|
96
|
+
"command": "npx",
|
|
97
|
+
"args": ["-y", "tailwindcss-docs-mcp"],
|
|
98
|
+
"env": {
|
|
99
|
+
"TAILWIND_DOCS_MCP_DEFAULT_VERSION": "v3"
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
56
104
|
```
|
|
57
105
|
|
|
58
106
|
</details>
|
|
59
107
|
|
|
60
|
-
###
|
|
108
|
+
### Getting started
|
|
61
109
|
|
|
62
|
-
On first boot the embedding model
|
|
110
|
+
On first boot the embedding model downloads in the background (~30 seconds). The server is usable immediately — tools that need embeddings return a status message until the model is ready.
|
|
63
111
|
|
|
64
112
|
The first time you ask a Tailwind question, your assistant will automatically call `fetch_docs` to download and index the documentation. This happens once — subsequent queries use the local index.
|
|
65
113
|
|
|
66
|
-
|
|
114
|
+
**Example prompts:**
|
|
67
115
|
|
|
68
116
|
- _"How do I center a div with Tailwind?"_
|
|
69
117
|
- _"Show me the grid layout utilities"_
|
|
@@ -72,28 +120,28 @@ The first time you ask a Tailwind question, your assistant will automatically ca
|
|
|
72
120
|
|
|
73
121
|
## Tools
|
|
74
122
|
|
|
75
|
-
### `fetch_docs`
|
|
76
|
-
|
|
77
|
-
Download and index Tailwind CSS documentation. Run once, re-run with `force: true` to refresh.
|
|
78
|
-
|
|
79
|
-
| Parameter | Type | Default | Description |
|
|
80
|
-
| --------- | --------- | ------- | ---------------------------------- |
|
|
81
|
-
| `version` | `string` | `"v4"` | `"v3"` or `"v4"` |
|
|
82
|
-
| `force` | `boolean` | `false` | Re-download even if already cached |
|
|
83
|
-
|
|
84
123
|
### `search_docs`
|
|
85
124
|
|
|
86
|
-
|
|
125
|
+
Search indexed documentation using natural language. Returns relevant snippets with code examples and deep links to tailwindcss.com.
|
|
87
126
|
|
|
88
127
|
| Parameter | Type | Default | Description |
|
|
89
128
|
| --------- | -------- | ------- | ----------------------------- |
|
|
90
129
|
| `query` | `string` | — | Natural language search query |
|
|
91
130
|
| `version` | `string` | `"v4"` | `"v3"` or `"v4"` |
|
|
92
|
-
| `limit` | `number` | `5` | Results to return (1
|
|
131
|
+
| `limit` | `number` | `5` | Results to return (1-20) |
|
|
132
|
+
|
|
133
|
+
### `fetch_docs`
|
|
134
|
+
|
|
135
|
+
Download and index Tailwind CSS documentation. Run once per version. Re-run with `force: true` to refresh after Tailwind releases.
|
|
136
|
+
|
|
137
|
+
| Parameter | Type | Default | Description |
|
|
138
|
+
| --------- | --------- | ------- | ---------------------------------- |
|
|
139
|
+
| `version` | `string` | `"v4"` | `"v3"` or `"v4"` |
|
|
140
|
+
| `force` | `boolean` | `false` | Re-download even if already cached |
|
|
93
141
|
|
|
94
142
|
### `list_utilities`
|
|
95
143
|
|
|
96
|
-
Browse all utility categories (Layout, Spacing, Typography, etc.).
|
|
144
|
+
Browse all utility categories (Layout, Spacing, Typography, Flexbox & Grid, etc.).
|
|
97
145
|
|
|
98
146
|
| Parameter | Type | Default | Description |
|
|
99
147
|
| ---------- | -------- | ------- | ----------------------- |
|
|
@@ -102,52 +150,42 @@ Browse all utility categories (Layout, Spacing, Typography, etc.).
|
|
|
102
150
|
|
|
103
151
|
### `check_status`
|
|
104
152
|
|
|
105
|
-
Check index state —
|
|
153
|
+
Check index state — document counts, embedding model status, and last indexed time.
|
|
106
154
|
|
|
107
155
|
| Parameter | Type | Default | Description |
|
|
108
156
|
| --------- | -------- | ------- | --------------------------------------- |
|
|
109
157
|
| `version` | `string` | — | Check specific version, or omit for all |
|
|
110
158
|
|
|
111
|
-
## How
|
|
159
|
+
## How it works
|
|
112
160
|
|
|
113
161
|
```
|
|
114
|
-
GitHub
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
162
|
+
GitHub MDX ─→ Parse ─→ Chunk by heading ─→ Embed (ONNX) ─→ SQLite
|
|
163
|
+
│
|
|
164
|
+
search_docs ◄───┘
|
|
165
|
+
├─ Semantic: cosine similarity
|
|
166
|
+
├─ Keyword: FTS5 full-text
|
|
167
|
+
└─ Reciprocal rank fusion
|
|
119
168
|
```
|
|
120
169
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
170
|
+
1. **Fetch** — downloads MDX source files from the `tailwindcss.com` GitHub repo (v3: `master` branch, v4: `next` branch).
|
|
171
|
+
2. **Chunk** — splits documents by heading hierarchy (`##` → `###` → paragraphs), keeping code blocks intact. ~500 tokens per chunk.
|
|
172
|
+
3. **Embed** — generates 384-dim vectors using `snowflake-arctic-embed-xs` running locally via ONNX. No external API calls.
|
|
173
|
+
4. **Search** — runs semantic similarity and FTS5 keyword search in parallel, merges results with reciprocal rank fusion. Class-name queries get boosted keyword weight.
|
|
125
174
|
|
|
126
175
|
## Configuration
|
|
127
176
|
|
|
128
|
-
| Variable | Default | Description
|
|
129
|
-
| ----------------------------------- | ------------------------- |
|
|
130
|
-
| `TAILWIND_DOCS_MCP_DEFAULT_VERSION` | `v4` |
|
|
131
|
-
| `TAILWIND_DOCS_MCP_PATH` | `~/.tailwindcss-docs-mcp` | Data directory
|
|
177
|
+
| Variable | Default | Description |
|
|
178
|
+
| ----------------------------------- | ------------------------- | -------------------------------------- |
|
|
179
|
+
| `TAILWIND_DOCS_MCP_DEFAULT_VERSION` | `v4` | Default Tailwind version for all tools |
|
|
180
|
+
| `TAILWIND_DOCS_MCP_PATH` | `~/.tailwindcss-docs-mcp` | Data directory (database + cache) |
|
|
132
181
|
|
|
133
|
-
|
|
134
|
-
<summary>Using with Tailwind CSS v3</summary>
|
|
182
|
+
## Troubleshooting
|
|
135
183
|
|
|
136
|
-
|
|
137
|
-
{
|
|
138
|
-
"mcpServers": {
|
|
139
|
-
"tailwindcss-docs-mcp": {
|
|
140
|
-
"command": "npx",
|
|
141
|
-
"args": ["-y", "tailwindcss-docs-mcp"],
|
|
142
|
-
"env": {
|
|
143
|
-
"TAILWIND_DOCS_MCP_DEFAULT_VERSION": "v3"
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
```
|
|
184
|
+
**"Embedding model is initializing"** — The ONNX model (~27 MB) is still downloading. Wait ~30 seconds and try again, or use `check_status` to monitor progress.
|
|
149
185
|
|
|
150
|
-
|
|
186
|
+
**"Index not built for this version"** — Documentation hasn't been fetched yet. Ask your assistant _"Fetch the Tailwind CSS v4 docs"_ or call `fetch_docs` directly.
|
|
187
|
+
|
|
188
|
+
**Getting v3 results when you expect v4** — Set the default version in your MCP config (see [Tailwind CSS v3](#installation) above) or pass `version: "v4"` explicitly in your query.
|
|
151
189
|
|
|
152
190
|
## Development
|
|
153
191
|
|
|
@@ -155,14 +193,19 @@ GitHub → Fetch MDX → Parse → Chunk by heading → Embed (ONNX) → SQLite
|
|
|
155
193
|
git clone https://github.com/vitalis/tailwindcss-docs-mcp.git
|
|
156
194
|
cd tailwindcss-docs-mcp
|
|
157
195
|
bun install
|
|
158
|
-
|
|
159
|
-
bun run
|
|
160
|
-
|
|
196
|
+
|
|
197
|
+
bun run test # Run tests (Vitest)
|
|
198
|
+
bun run build # TypeScript type check
|
|
199
|
+
bunx biome check src/ test/ # Lint + format check
|
|
161
200
|
```
|
|
162
201
|
|
|
202
|
+
## Contributing
|
|
203
|
+
|
|
204
|
+
Contributions are welcome! Please open an [issue](https://github.com/vitalis/tailwindcss-docs-mcp/issues) to discuss what you'd like to change before submitting a pull request.
|
|
205
|
+
|
|
163
206
|
## Acknowledgments
|
|
164
207
|
|
|
165
|
-
Inspired by [HexDocs MCP](https://github.com/bradleygolden/hexdocs-mcp), which
|
|
208
|
+
Inspired by [HexDocs MCP](https://github.com/bradleygolden/hexdocs-mcp), which provides the same semantic search experience for Elixir/Hex documentation.
|
|
166
209
|
|
|
167
210
|
## License
|
|
168
211
|
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Embedder } from "./pipeline/embedder.js";
|
|
2
|
+
import type { Database } from "./storage/database.js";
|
|
3
|
+
import type { Config } from "./utils/config.js";
|
|
4
|
+
/**
|
|
5
|
+
* Callbacks for auto-index lifecycle events.
|
|
6
|
+
*/
|
|
7
|
+
export interface AutoIndexCallbacks {
|
|
8
|
+
onStart: () => void;
|
|
9
|
+
onComplete: () => void;
|
|
10
|
+
onError: (error: unknown) => void;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Auto-index the default Tailwind CSS version if not already indexed.
|
|
14
|
+
*
|
|
15
|
+
* Checks the database for an existing index. If found, calls onComplete
|
|
16
|
+
* immediately. Otherwise, triggers handleFetchDocs in the background.
|
|
17
|
+
*
|
|
18
|
+
* Reuses handleFetchDocs which has its own mutex for concurrent-call safety.
|
|
19
|
+
*/
|
|
20
|
+
export declare function maybeAutoIndex(config: Config, db: Database, embedder: Embedder, callbacks: AutoIndexCallbacks): Promise<void>;
|
|
21
|
+
//# sourceMappingURL=auto-index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-index.d.ts","sourceRoot":"","sources":["../src/auto-index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACnC;AAED;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,QAAQ,EACZ,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,kBAAkB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAkBf"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { handleFetchDocs } from "./tools/fetch-docs.js";
|
|
2
|
+
/**
|
|
3
|
+
* Auto-index the default Tailwind CSS version if not already indexed.
|
|
4
|
+
*
|
|
5
|
+
* Checks the database for an existing index. If found, calls onComplete
|
|
6
|
+
* immediately. Otherwise, triggers handleFetchDocs in the background.
|
|
7
|
+
*
|
|
8
|
+
* Reuses handleFetchDocs which has its own mutex for concurrent-call safety.
|
|
9
|
+
*/
|
|
10
|
+
export async function maybeAutoIndex(config, db, embedder, callbacks) {
|
|
11
|
+
const version = config.defaultVersion;
|
|
12
|
+
// Skip if already indexed
|
|
13
|
+
const status = db.getIndexStatus(version);
|
|
14
|
+
if (status.length > 0) {
|
|
15
|
+
callbacks.onComplete();
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
callbacks.onStart();
|
|
19
|
+
try {
|
|
20
|
+
await handleFetchDocs({ version }, config, db, embedder);
|
|
21
|
+
callbacks.onComplete();
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
callbacks.onError(error);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=auto-index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-index.js","sourceRoot":"","sources":["../src/auto-index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAYxD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAc,EACd,EAAY,EACZ,QAAkB,EAClB,SAA6B;IAE7B,MAAM,OAAO,GAAG,MAAM,CAAC,cAAc,CAAC;IAEtC,0BAA0B;IAC1B,MAAM,MAAM,GAAG,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IAC1C,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,SAAS,CAAC,UAAU,EAAE,CAAC;QACvB,OAAO;IACT,CAAC;IAED,SAAS,CAAC,OAAO,EAAE,CAAC;IAEpB,IAAI,CAAC;QACH,MAAM,eAAe,CAAC,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;QACzD,SAAS,CAAC,UAAU,EAAE,CAAC;IACzB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
* - Success: server is fully operational, check for updates in background
|
|
12
12
|
* - Failure: download model in background, server tools fail until ready
|
|
13
13
|
* 3. Background update/download completes — embedder is hot-swapped immediately
|
|
14
|
+
* 4. Auto-index default version if not already indexed
|
|
14
15
|
*/
|
|
15
16
|
export {};
|
|
16
17
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;GAaG"}
|
package/dist/index.js
CHANGED
|
@@ -11,8 +11,10 @@
|
|
|
11
11
|
* - Success: server is fully operational, check for updates in background
|
|
12
12
|
* - Failure: download model in background, server tools fail until ready
|
|
13
13
|
* 3. Background update/download completes — embedder is hot-swapped immediately
|
|
14
|
+
* 4. Auto-index default version if not already indexed
|
|
14
15
|
*/
|
|
15
16
|
import { mkdirSync } from "node:fs";
|
|
17
|
+
import { maybeAutoIndex } from "./auto-index.js";
|
|
16
18
|
import { createEmbedder, loadCachedEmbedder } from "./pipeline/embedder.js";
|
|
17
19
|
import { createServer } from "./server.js";
|
|
18
20
|
import { createDatabase } from "./storage/database.js";
|
|
@@ -29,12 +31,30 @@ async function main() {
|
|
|
29
31
|
});
|
|
30
32
|
// Start MCP server immediately (embedder loads in background)
|
|
31
33
|
const server = await createServer({ config, db, embedder: null });
|
|
34
|
+
// Auto-index helper: fire-and-forget after embedder is ready
|
|
35
|
+
function triggerAutoIndex(e) {
|
|
36
|
+
maybeAutoIndex(config, db, e, {
|
|
37
|
+
onStart: () => {
|
|
38
|
+
server.setIndexingStatus("indexing");
|
|
39
|
+
console.error("[tailwindcss-docs-mcp] Auto-indexing documentation...");
|
|
40
|
+
},
|
|
41
|
+
onComplete: () => {
|
|
42
|
+
server.setIndexingStatus("complete");
|
|
43
|
+
console.error("[tailwindcss-docs-mcp] Documentation index ready.");
|
|
44
|
+
},
|
|
45
|
+
onError: (error) => {
|
|
46
|
+
server.setIndexingStatus("failed");
|
|
47
|
+
console.error("[tailwindcss-docs-mcp] Auto-indexing failed:", error);
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
}
|
|
32
51
|
// Phase 1: Try local cache (fast, no network)
|
|
33
52
|
const cached = await loadCachedEmbedder(config);
|
|
34
53
|
if (cached) {
|
|
35
54
|
// Model loaded from cache — server is fully operational
|
|
36
55
|
server.setEmbedder(cached);
|
|
37
56
|
console.error("[tailwindcss-docs-mcp] Embedding model loaded from cache.");
|
|
57
|
+
triggerAutoIndex(cached);
|
|
38
58
|
// Phase 2: Check for model updates in background, hot-swap if updated
|
|
39
59
|
createEmbedder(config)
|
|
40
60
|
.then((updated) => {
|
|
@@ -53,6 +73,7 @@ async function main() {
|
|
|
53
73
|
.then((embedder) => {
|
|
54
74
|
server.setEmbedder(embedder);
|
|
55
75
|
console.error("[tailwindcss-docs-mcp] Embedding model downloaded and ready.");
|
|
76
|
+
triggerAutoIndex(embedder);
|
|
56
77
|
})
|
|
57
78
|
.catch((error) => {
|
|
58
79
|
server.setEmbedderStatus("failed");
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
CHANGED
|
@@ -15,6 +15,10 @@ export declare const TOOL_NAMES: {
|
|
|
15
15
|
* Embedder loading status for observability.
|
|
16
16
|
*/
|
|
17
17
|
export type EmbedderStatus = "pending" | "downloading" | "ready" | "failed";
|
|
18
|
+
/**
|
|
19
|
+
* Documentation indexing status for observability.
|
|
20
|
+
*/
|
|
21
|
+
export type IndexingStatus = "idle" | "indexing" | "complete" | "failed";
|
|
18
22
|
/**
|
|
19
23
|
* Server dependencies injected at startup.
|
|
20
24
|
* Embedder may be null if the model is still downloading.
|
|
@@ -34,6 +38,10 @@ export interface ServerHandle {
|
|
|
34
38
|
setEmbedderStatus(status: EmbedderStatus): void;
|
|
35
39
|
/** Get the current embedder loading status. */
|
|
36
40
|
getEmbedderStatus(): EmbedderStatus;
|
|
41
|
+
/** Update the indexing status for observability. */
|
|
42
|
+
setIndexingStatus(status: IndexingStatus): void;
|
|
43
|
+
/** Get the current indexing status. */
|
|
44
|
+
getIndexingStatus(): IndexingStatus;
|
|
37
45
|
}
|
|
38
46
|
export declare const EMBEDDER_STATUS_MESSAGES: Record<EmbedderStatus, string>;
|
|
39
47
|
/**
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAE/E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAKtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAMhD;;GAEG;AACH,eAAO,MAAM,UAAU;;;;;CAKb,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,aAAa,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE5E;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,QAAQ,CAAC;IACb,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,mEAAmE;IACnE,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IACtC,4DAA4D;IAC5D,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC;IAChD,+CAA+C;IAC/C,iBAAiB,IAAI,cAAc,CAAC;CACrC;AAED,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAKnE,CAAC;AAEF;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAE/E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAKtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAMhD;;GAEG;AACH,eAAO,MAAM,UAAU;;;;;CAKb,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,aAAa,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE5E;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,QAAQ,CAAC;AAEzE;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,QAAQ,CAAC;IACb,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,mEAAmE;IACnE,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IACtC,4DAA4D;IAC5D,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC;IAChD,+CAA+C;IAC/C,iBAAiB,IAAI,cAAc,CAAC;IACpC,oDAAoD;IACpD,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC;IAChD,uCAAuC;IACvC,iBAAiB,IAAI,cAAc,CAAC;CACrC;AAED,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAKnE,CAAC;AAEF;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,CAgJjG"}
|
package/dist/server.js
CHANGED
|
@@ -33,6 +33,7 @@ export async function createServer(deps, transport) {
|
|
|
33
33
|
const { config, db } = deps;
|
|
34
34
|
let embedder = deps.embedder;
|
|
35
35
|
let embedderStatus = deps.embedder ? "ready" : "pending";
|
|
36
|
+
let indexingStatus = "idle";
|
|
36
37
|
function requireEmbedder() {
|
|
37
38
|
if (!embedder) {
|
|
38
39
|
throw new Error(EMBEDDER_STATUS_MESSAGES[embedderStatus]);
|
|
@@ -51,7 +52,7 @@ export async function createServer(deps, transport) {
|
|
|
51
52
|
version: SERVER_VERSION,
|
|
52
53
|
});
|
|
53
54
|
// Register fetch_docs
|
|
54
|
-
server.tool(TOOL_NAMES.FETCH_DOCS, "
|
|
55
|
+
server.tool(TOOL_NAMES.FETCH_DOCS, "Re-index Tailwind CSS documentation. Docs are indexed automatically on first start. Use this to force refresh after a new Tailwind release, or to index a different version.", {
|
|
55
56
|
version: z.enum(["v4", "v3"]).optional().describe("Tailwind CSS major version (default: v4)"),
|
|
56
57
|
force: z
|
|
57
58
|
.boolean()
|
|
@@ -67,7 +68,7 @@ export async function createServer(deps, transport) {
|
|
|
67
68
|
}
|
|
68
69
|
});
|
|
69
70
|
// Register search_docs
|
|
70
|
-
server.tool(TOOL_NAMES.SEARCH_DOCS, "Search Tailwind CSS documentation using natural language. Returns the most relevant documentation snippets with code examples.
|
|
71
|
+
server.tool(TOOL_NAMES.SEARCH_DOCS, "Search Tailwind CSS documentation using natural language. Returns the most relevant documentation snippets with code examples.", {
|
|
71
72
|
query: z
|
|
72
73
|
.string()
|
|
73
74
|
.describe("Natural language search query (e.g., 'how to add responsive padding', 'dark mode configuration', 'grid layout with gaps')"),
|
|
@@ -84,7 +85,7 @@ export async function createServer(deps, transport) {
|
|
|
84
85
|
}, async (params) => {
|
|
85
86
|
try {
|
|
86
87
|
const result = await handleSearchDocs(params, db, requireEmbedder(), config.defaultVersion);
|
|
87
|
-
const text = formatSearchResults(result);
|
|
88
|
+
const text = formatSearchResults(result, indexingStatus);
|
|
88
89
|
return { content: [{ type: "text", text }] };
|
|
89
90
|
}
|
|
90
91
|
catch (error) {
|
|
@@ -116,7 +117,7 @@ export async function createServer(deps, transport) {
|
|
|
116
117
|
.describe("Check specific version (v3 or v4). Omit to check all."),
|
|
117
118
|
}, (params) => {
|
|
118
119
|
try {
|
|
119
|
-
const result = handleCheckStatus(params, db, embedderStatus);
|
|
120
|
+
const result = handleCheckStatus(params, db, embedderStatus, indexingStatus);
|
|
120
121
|
return { content: [{ type: "text", text: result.message }] };
|
|
121
122
|
}
|
|
122
123
|
catch (error) {
|
|
@@ -136,6 +137,12 @@ export async function createServer(deps, transport) {
|
|
|
136
137
|
getEmbedderStatus() {
|
|
137
138
|
return embedderStatus;
|
|
138
139
|
},
|
|
140
|
+
setIndexingStatus(status) {
|
|
141
|
+
indexingStatus = status;
|
|
142
|
+
},
|
|
143
|
+
getIndexingStatus() {
|
|
144
|
+
return indexingStatus;
|
|
145
|
+
},
|
|
139
146
|
};
|
|
140
147
|
}
|
|
141
148
|
//# sourceMappingURL=server.js.map
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrF,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG/E,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,KAAK,CAC5C,YAAY,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAC5C,CAAC;AAEzB;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,UAAU,EAAE,YAAY;IACxB,WAAW,EAAE,aAAa;IAC1B,cAAc,EAAE,gBAAgB;IAChC,YAAY,EAAE,cAAc;CACpB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { EmbedderStatus } from "../server.js";
|
|
1
|
+
import type { EmbedderStatus, IndexingStatus } from "../server.js";
|
|
2
2
|
import type { Database, IndexStatus } from "../storage/database.js";
|
|
3
3
|
import type { TailwindVersion } from "../utils/config.js";
|
|
4
4
|
/**
|
|
@@ -27,9 +27,9 @@ export interface CheckStatusResult {
|
|
|
27
27
|
* Reports the current index state without triggering any work.
|
|
28
28
|
* Returns doc/chunk counts, embedding model used, and last indexed timestamp.
|
|
29
29
|
*/
|
|
30
|
-
export declare function handleCheckStatus(input: CheckStatusInput, db: Database, embedderStatus: EmbedderStatus): CheckStatusResult;
|
|
30
|
+
export declare function handleCheckStatus(input: CheckStatusInput, db: Database, embedderStatus: EmbedderStatus, indexingStatus?: IndexingStatus): CheckStatusResult;
|
|
31
31
|
/**
|
|
32
32
|
* Format the status as markdown for LLM consumption.
|
|
33
33
|
*/
|
|
34
|
-
export declare function formatStatus(indexed: boolean, versions: IndexStatus[], embedderStatus: EmbedderStatus): string;
|
|
34
|
+
export declare function formatStatus(indexed: boolean, versions: IndexStatus[], embedderStatus: EmbedderStatus, indexingStatus?: IndexingStatus): string;
|
|
35
35
|
//# sourceMappingURL=check-status.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-status.d.ts","sourceRoot":"","sources":["../../src/tools/check-status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"check-status.d.ts","sourceRoot":"","sources":["../../src/tools/check-status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,iDAAiD;IACjD,OAAO,CAAC,EAAE,eAAe,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,qCAAqC;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,wCAAwC;IACxC,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,sCAAsC;IACtC,cAAc,EAAE,cAAc,CAAC;IAC/B,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,gBAAgB,EACvB,EAAE,EAAE,QAAQ,EACZ,cAAc,EAAE,cAAc,EAC9B,cAAc,CAAC,EAAE,cAAc,GAC9B,iBAAiB,CAOnB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,WAAW,EAAE,EACvB,cAAc,EAAE,cAAc,EAC9B,cAAc,CAAC,EAAE,cAAc,GAC9B,MAAM,CAiCR"}
|
|
@@ -4,16 +4,16 @@
|
|
|
4
4
|
* Reports the current index state without triggering any work.
|
|
5
5
|
* Returns doc/chunk counts, embedding model used, and last indexed timestamp.
|
|
6
6
|
*/
|
|
7
|
-
export function handleCheckStatus(input, db, embedderStatus) {
|
|
7
|
+
export function handleCheckStatus(input, db, embedderStatus, indexingStatus) {
|
|
8
8
|
const versions = db.getIndexStatus(input.version);
|
|
9
9
|
const indexed = versions.length > 0;
|
|
10
|
-
const message = formatStatus(indexed, versions, embedderStatus);
|
|
10
|
+
const message = formatStatus(indexed, versions, embedderStatus, indexingStatus);
|
|
11
11
|
return { indexed, versions, embedderStatus, message };
|
|
12
12
|
}
|
|
13
13
|
/**
|
|
14
14
|
* Format the status as markdown for LLM consumption.
|
|
15
15
|
*/
|
|
16
|
-
export function formatStatus(indexed, versions, embedderStatus) {
|
|
16
|
+
export function formatStatus(indexed, versions, embedderStatus, indexingStatus) {
|
|
17
17
|
const lines = ["# Tailwind CSS Documentation Index Status\n"];
|
|
18
18
|
// Embedding model status
|
|
19
19
|
const statusLabels = {
|
|
@@ -24,7 +24,15 @@ export function formatStatus(indexed, versions, embedderStatus) {
|
|
|
24
24
|
};
|
|
25
25
|
lines.push(`**Embedding model**: ${statusLabels[embedderStatus]}\n`);
|
|
26
26
|
if (!indexed) {
|
|
27
|
-
|
|
27
|
+
if (indexingStatus === "indexing") {
|
|
28
|
+
lines.push("Auto-indexing in progress. This takes 1-2 minutes on first run.");
|
|
29
|
+
}
|
|
30
|
+
else if (indexingStatus === "failed") {
|
|
31
|
+
lines.push("Auto-indexing failed. Run fetch_docs to index manually.");
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
lines.push("Not indexed. Run fetch_docs to index Tailwind CSS documentation.");
|
|
35
|
+
}
|
|
28
36
|
return lines.join("\n");
|
|
29
37
|
}
|
|
30
38
|
for (const v of versions) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-status.js","sourceRoot":"","sources":["../../src/tools/check-status.ts"],"names":[],"mappings":"AA0BA;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAAuB,EACvB,EAAY,EACZ,cAA8B;
|
|
1
|
+
{"version":3,"file":"check-status.js","sourceRoot":"","sources":["../../src/tools/check-status.ts"],"names":[],"mappings":"AA0BA;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAAuB,EACvB,EAAY,EACZ,cAA8B,EAC9B,cAA+B;IAE/B,MAAM,QAAQ,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IAEpC,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;IAEhF,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC;AACxD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAC1B,OAAgB,EAChB,QAAuB,EACvB,cAA8B,EAC9B,cAA+B;IAE/B,MAAM,KAAK,GAAa,CAAC,6CAA6C,CAAC,CAAC;IAExE,yBAAyB;IACzB,MAAM,YAAY,GAAmC;QACnD,OAAO,EAAE,cAAc;QACvB,WAAW,EAAE,sBAAsB;QACnC,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,gBAAgB;KACzB,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,wBAAwB,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAErE,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,IAAI,cAAc,KAAK,UAAU,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;QAChF,CAAC;aAAM,IAAI,cAAc,KAAK,QAAQ,EAAE,CAAC;YACvC,KAAK,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;QACxE,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAC;QACjF,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;QAC9C,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QAC7C,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,eAAe,KAAK,CAAC,CAAC,oBAAoB,cAAc,CAAC,CAAC;QACvF,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;QAClD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Embedder } from "../pipeline/embedder.js";
|
|
2
|
+
import type { IndexingStatus } from "../server.js";
|
|
2
3
|
import type { Database } from "../storage/database.js";
|
|
3
4
|
import { type SearchResult } from "../storage/search.js";
|
|
4
5
|
import type { TailwindVersion } from "../utils/config.js";
|
|
@@ -40,5 +41,5 @@ export declare function handleSearchDocs(input: SearchDocsInput, db: Database, e
|
|
|
40
41
|
* - Content snippet
|
|
41
42
|
* - Deep link to tailwindcss.com
|
|
42
43
|
*/
|
|
43
|
-
export declare function formatSearchResults(result: SearchDocsResult): string;
|
|
44
|
+
export declare function formatSearchResults(result: SearchDocsResult, indexingStatus?: IndexingStatus): string;
|
|
44
45
|
//# sourceMappingURL=search-docs.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-docs.d.ts","sourceRoot":"","sources":["../../src/tools/search-docs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,KAAK,YAAY,EAAgB,MAAM,sBAAsB,CAAC;AACvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,oCAAoC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,eAAe,EACtB,EAAE,EAAE,QAAQ,EACZ,QAAQ,EAAE,QAAQ,EAClB,cAAc,EAAE,eAAe,GAC9B,OAAO,CAAC,gBAAgB,CAAC,CAiB3B;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,
|
|
1
|
+
{"version":3,"file":"search-docs.d.ts","sourceRoot":"","sources":["../../src/tools/search-docs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,KAAK,YAAY,EAAgB,MAAM,sBAAsB,CAAC;AACvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,oCAAoC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,eAAe,EACtB,EAAE,EAAE,QAAQ,EACZ,QAAQ,EAAE,QAAQ,EAClB,cAAc,EAAE,eAAe,GAC9B,OAAO,CAAC,gBAAgB,CAAC,CAiB3B;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,gBAAgB,EACxB,cAAc,CAAC,EAAE,cAAc,GAC9B,MAAM,CA0BR"}
|
|
@@ -33,9 +33,15 @@ export async function handleSearchDocs(input, db, embedder, defaultVersion) {
|
|
|
33
33
|
* - Content snippet
|
|
34
34
|
* - Deep link to tailwindcss.com
|
|
35
35
|
*/
|
|
36
|
-
export function formatSearchResults(result) {
|
|
36
|
+
export function formatSearchResults(result, indexingStatus) {
|
|
37
37
|
if (result.notIndexed) {
|
|
38
|
-
|
|
38
|
+
if (indexingStatus === "indexing") {
|
|
39
|
+
return "Documentation is being indexed automatically. This takes 1-2 minutes on first run. Please wait a moment and try again.";
|
|
40
|
+
}
|
|
41
|
+
if (indexingStatus === "failed") {
|
|
42
|
+
return "Auto-indexing failed. Run fetch_docs to index manually.";
|
|
43
|
+
}
|
|
44
|
+
return "Index not built for this version. Run fetch_docs to index.";
|
|
39
45
|
}
|
|
40
46
|
if (result.results.length === 0) {
|
|
41
47
|
return "No results found for this query.";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-docs.js","sourceRoot":"","sources":["../../src/tools/search-docs.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"search-docs.js","sourceRoot":"","sources":["../../src/tools/search-docs.ts"],"names":[],"mappings":"AAGA,OAAO,EAAqB,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAuBvE;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,KAAsB,EACtB,EAAY,EACZ,QAAkB,EAClB,cAA+B;IAE/B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,cAAc,CAAC;IAChD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAE1D,wBAAwB;IACxB,MAAM,MAAM,GAAG,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IAC1C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAC3C,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,EAAE,EAAE,QAAQ,EAAE;QAC/C,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,OAAO;QACP,KAAK;KACN,CAAC,CAAC;IAEH,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;AACxC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAAwB,EACxB,cAA+B;IAE/B,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,IAAI,cAAc,KAAK,UAAU,EAAE,CAAC;YAClC,OAAO,wHAAwH,CAAC;QAClI,CAAC;QACD,IAAI,cAAc,KAAK,QAAQ,EAAE,CAAC;YAChC,OAAO,yDAAyD,CAAC;QACnE,CAAC;QACD,OAAO,4DAA4D,CAAC;IACtE,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,kCAAkC,CAAC;IAC5C,CAAC;IAED,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/C,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACxD,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;QACpD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|