@nacho-labs/mcp-semantic-search 0.3.1 → 0.4.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/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 Nacho Labs LLC
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Nacho Labs LLC
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,174 +1,198 @@
1
- # @nacho-labs/mcp-semantic-search
2
-
3
- MCP server that gives AI coding tools persistent semantic memory. Index
4
- decisions, patterns, and project context — recall them by meaning, not keywords.
5
-
6
- Powered by [@nacho-labs/nachos-embeddings](https://github.com/nacho-labs-llc/nachos-embeddings).
7
- Runs entirely locally with [Transformers.js](https://huggingface.co/docs/transformers.js) —
8
- no API keys, no cloud, no costs.
9
-
10
- ## Prerequisites
11
-
12
- - **Node.js 18+**
13
- - **Internet on first run** to download the embedding model (~25MB, cached permanently)
14
-
15
- ## Quick start
16
-
17
- ### Claude Code
18
-
19
- ```bash
20
- claude mcp add --transport stdio semantic-search -- npx @nacho-labs/mcp-semantic-search
21
- ```
22
-
23
- ### Cursor / VS Code / any MCP client
24
-
25
- Add to your MCP config (`.mcp.json`, `mcp.json`, or client-specific config):
26
-
27
- ```json
28
- {
29
- "mcpServers": {
30
- "semantic-search": {
31
- "type": "stdio",
32
- "command": "npx",
33
- "args": ["@nacho-labs/mcp-semantic-search"]
34
- }
35
- }
36
- }
37
- ```
38
-
39
- That's it. Your AI tool now has six semantic memory tools.
40
-
41
- ## Tools
42
-
43
- | Tool | Description |
44
- | ---- | ----------- |
45
- | `semantic_search` | Search indexed documents by meaning |
46
- | `semantic_index` | Add a document to the index |
47
- | `semantic_index_batch` | Add multiple documents at once |
48
- | `semantic_remove` | Remove a document by ID |
49
- | `semantic_stats` | Get index size, store location, and config |
50
- | `semantic_clear` | Remove all documents (requires confirmation) |
51
-
52
- ## What it does
53
-
54
- ```text
55
- You ask Claude: "How do we handle rate limiting?"
56
- |
57
- Claude calls: semantic_search("rate limiting")
58
- |
59
- Server embeds: query -> 384-dimension vector
60
- |
61
- Cosine search: against all indexed vectors
62
- |
63
- Returns: "We throttle API requests using sliding windows..."
64
- (matched by meaning, not keywords)
65
- ```
66
-
67
- The embedding model understands meaning:
68
-
69
- | Query | Finds |
70
- | ----- | ----- |
71
- | "rate limiting" | "We throttle API requests using sliding windows" |
72
- | "how to deploy" | "Production runs via docker compose up with..." |
73
- | "error handling" | "We use Result types instead of try/catch for..." |
74
-
75
- ## What to index
76
-
77
- High-value content for project memory:
78
-
79
- **Architecture decisions** — "We chose PostgreSQL over DynamoDB because we need
80
- complex joins for the reporting module."
81
-
82
- **Code patterns** — "Authentication middleware is in src/middleware/auth.ts.
83
- Uses JWT with RS256, tokens expire after 1 hour, refresh tokens after 30 days."
84
-
85
- **Conventions** — "All API endpoints return { data, error, meta } shape.
86
- Errors use RFC 7807 problem details format."
87
-
88
- **Debugging insights** — "If the worker queue backs up, check Redis memory.
89
- The default maxmemory-policy is noeviction which causes write failures."
90
-
91
- ## Configuration
92
-
93
- ### CLI arguments
94
-
95
- ```bash
96
- npx @nacho-labs/mcp-semantic-search \
97
- --store /path/to/store.json \
98
- --similarity 0.5 \
99
- --model Xenova/all-mpnet-base-v2 \
100
- --cache-dir /tmp/models
101
- ```
102
-
103
- ### Environment variables
104
-
105
- | Variable | Description | Default |
106
- | -------- | ----------- | ------- |
107
- | `MCP_SEMANTIC_STORE` | Path to persistence file | `.semantic-store.json` |
108
- | `MCP_SEMANTIC_SIMILARITY` | Min similarity threshold (0-1) | `0.6` |
109
- | `MCP_SEMANTIC_MODEL` | Embedding model | `Xenova/all-MiniLM-L6-v2` |
110
- | `MCP_SEMANTIC_CACHE_DIR` | Model cache directory | `.cache/transformers` |
111
-
112
- ### With environment variables in MCP config
113
-
114
- ```json
115
- {
116
- "mcpServers": {
117
- "semantic-search": {
118
- "type": "stdio",
119
- "command": "npx",
120
- "args": ["@nacho-labs/mcp-semantic-search"],
121
- "env": {
122
- "MCP_SEMANTIC_STORE": "/home/user/.semantic-memory/project.json",
123
- "MCP_SEMANTIC_SIMILARITY": "0.5"
124
- }
125
- }
126
- }
127
- }
128
- ```
129
-
130
- ## Performance
131
-
132
- | Operation | Time |
133
- | --------- | ---- |
134
- | Server startup (model cached) | ~500ms |
135
- | Server startup (first run) | ~2-5s |
136
- | Index a document | ~10-50ms |
137
- | Search 1000 documents | ~5-10ms |
138
-
139
- **Memory:** ~100MB for model + ~1.5KB per document.
140
-
141
- The in-memory store works well up to ~10K documents. Beyond that, consider a
142
- dedicated vector database.
143
-
144
- ## Persistence
145
-
146
- The index is saved to disk automatically after every write operation (index,
147
- remove, clear). On startup, the server loads the existing store if present.
148
-
149
- Default location: `.semantic-store.json` in the working directory.
150
-
151
- ## How it's built
152
-
153
- This MCP server is a thin wrapper around two packages:
154
-
155
- - **[@nacho-labs/nachos-embeddings](https://www.npmjs.com/package/@nacho-labs/nachos-embeddings)** — Local vector embeddings and semantic search
156
- - **[@modelcontextprotocol/sdk](https://www.npmjs.com/package/@modelcontextprotocol/sdk)** — Official MCP TypeScript SDK
157
-
158
- The embeddings package can also be used directly in your own code. See its
159
- [README](https://github.com/nacho-labs-llc/nachos-embeddings) for the
160
- standalone API.
161
-
162
- ## Development
163
-
164
- ```bash
165
- git clone https://github.com/nacho-labs-llc/mcp-semantic-search.git
166
- cd mcp-semantic-search
167
- npm install
168
- npm run build
169
- npm start
170
- ```
171
-
172
- ## License
173
-
174
- MIT
1
+ # @nacho-labs/mcp-semantic-search
2
+
3
+ MCP server that gives AI coding tools persistent semantic memory. Index
4
+ decisions, patterns, and project context — recall them by meaning, not keywords.
5
+
6
+ Powered by [@nacho-labs/nachos-embeddings](https://github.com/nacho-labs-llc/nachos-embeddings).
7
+ Runs entirely locally with [Transformers.js](https://huggingface.co/docs/transformers.js) —
8
+ no API keys, no cloud, no costs.
9
+
10
+ ## Prerequisites
11
+
12
+ - **Node.js 20.9+**
13
+ - **Internet on first run** to download the embedding model (~25MB, cached permanently)
14
+
15
+ ## Quick start
16
+
17
+ ### Claude Code
18
+
19
+ ```bash
20
+ claude mcp add --transport stdio semantic-search -- npx @nacho-labs/mcp-semantic-search
21
+ ```
22
+
23
+ ### Cursor / VS Code / any MCP client
24
+
25
+ Add to your MCP config (`.mcp.json`, `mcp.json`, or client-specific config):
26
+
27
+ ```json
28
+ {
29
+ "mcpServers": {
30
+ "semantic-search": {
31
+ "type": "stdio",
32
+ "command": "npx",
33
+ "args": ["@nacho-labs/mcp-semantic-search"]
34
+ }
35
+ }
36
+ }
37
+ ```
38
+
39
+ That's it. Your AI tool now has seven semantic memory tools.
40
+
41
+ ## Tools
42
+
43
+ | Tool | Description |
44
+ | ---------------------- | ------------------------------------------------------ |
45
+ | `semantic_health` | Check server health, metrics, and active configuration |
46
+ | `semantic_search` | Search indexed documents by meaning |
47
+ | `semantic_index` | Add a document to the index |
48
+ | `semantic_index_batch` | Add multiple documents at once |
49
+ | `semantic_remove` | Remove a document by ID |
50
+ | `semantic_stats` | Get index size, store location, and config |
51
+ | `semantic_clear` | Remove all documents (requires confirmation) |
52
+
53
+ ## What it does
54
+
55
+ ```text
56
+ You ask Claude: "How do we handle rate limiting?"
57
+ |
58
+ Claude calls: semantic_search("rate limiting")
59
+ |
60
+ Server embeds: query -> 384-dimension vector
61
+ |
62
+ Cosine search: against all indexed vectors
63
+ |
64
+ Returns: "We throttle API requests using sliding windows..."
65
+ (matched by meaning, not keywords)
66
+ ```
67
+
68
+ The embedding model understands meaning:
69
+
70
+ | Query | Finds |
71
+ | ---------------- | ------------------------------------------------- |
72
+ | "rate limiting" | "We throttle API requests using sliding windows" |
73
+ | "how to deploy" | "Production runs via docker compose up with..." |
74
+ | "error handling" | "We use Result types instead of try/catch for..." |
75
+
76
+ ## What to index
77
+
78
+ High-value content for project memory:
79
+
80
+ **Architecture decisions** — "We chose PostgreSQL over DynamoDB because we need
81
+ complex joins for the reporting module."
82
+
83
+ **Code patterns** — "Authentication middleware is in src/middleware/auth.ts.
84
+ Uses JWT with RS256, tokens expire after 1 hour, refresh tokens after 30 days."
85
+
86
+ **Conventions** — "All API endpoints return { data, error, meta } shape.
87
+ Errors use RFC 7807 problem details format."
88
+
89
+ **Debugging insights** — "If the worker queue backs up, check Redis memory.
90
+ The default maxmemory-policy is noeviction which causes write failures."
91
+
92
+ ## Configuration
93
+
94
+ ### CLI arguments
95
+
96
+ ```bash
97
+ npx @nacho-labs/mcp-semantic-search \
98
+ --store /path/to/store.json \
99
+ --similarity 0.5 \
100
+ --model Xenova/all-mpnet-base-v2 \
101
+ --cache-dir /tmp/models
102
+ ```
103
+
104
+ ### Environment variables
105
+
106
+ | Variable | Description | Default |
107
+ | ------------------------- | ------------------------------ | ------------------------- |
108
+ | `MCP_SEMANTIC_STORE` | Path to persistence file | `.semantic-store.json` |
109
+ | `MCP_SEMANTIC_SIMILARITY` | Min similarity threshold (0-1) | `0.4` |
110
+ | `MCP_SEMANTIC_MODEL` | Embedding model | `Xenova/all-MiniLM-L6-v2` |
111
+ | `MCP_SEMANTIC_CACHE_DIR` | Model cache directory | `.cache/transformers` |
112
+
113
+ ### With environment variables in MCP config
114
+
115
+ ```json
116
+ {
117
+ "mcpServers": {
118
+ "semantic-search": {
119
+ "type": "stdio",
120
+ "command": "npx",
121
+ "args": ["@nacho-labs/mcp-semantic-search"],
122
+ "env": {
123
+ "MCP_SEMANTIC_STORE": "/home/user/.semantic-memory/project.json",
124
+ "MCP_SEMANTIC_SIMILARITY": "0.5"
125
+ }
126
+ }
127
+ }
128
+ }
129
+ ```
130
+
131
+ ## Performance
132
+
133
+ | Operation | Time |
134
+ | ----------------------------- | -------- |
135
+ | Server startup (model cached) | ~500ms |
136
+ | Server startup (first run) | ~2-5s |
137
+ | Index a document | ~10-50ms |
138
+ | Search 1000 documents | ~5-10ms |
139
+
140
+ **Memory:** ~100MB for model + ~1.5KB per document.
141
+
142
+ The in-memory store works well up to ~10K documents. Beyond that, consider a
143
+ dedicated vector database.
144
+
145
+ ## Persistence
146
+
147
+ The index is saved to disk automatically after every write operation (index,
148
+ remove, clear). On startup, the server loads the existing store if present.
149
+
150
+ Default location: `.semantic-store.json` in the working directory.
151
+
152
+ ## How it's built
153
+
154
+ This MCP server is a thin wrapper around two packages:
155
+
156
+ - **[@nacho-labs/nachos-embeddings](https://www.npmjs.com/package/@nacho-labs/nachos-embeddings)** — Local vector embeddings and semantic search
157
+ - **[@modelcontextprotocol/sdk](https://www.npmjs.com/package/@modelcontextprotocol/sdk)** — Official MCP TypeScript SDK
158
+
159
+ The embeddings package can also be used directly in your own code. See its
160
+ [README](https://github.com/nacho-labs-llc/nachos-embeddings) for the
161
+ standalone API.
162
+
163
+ ## Development
164
+
165
+ ```bash
166
+ git clone https://github.com/nacho-labs-llc/mcp-semantic-search.git
167
+ cd mcp-semantic-search
168
+ npm install
169
+ npm run build
170
+ npm start
171
+ ```
172
+
173
+ ### Quality checks
174
+
175
+ ```bash
176
+ npm run format:check
177
+ npm run lint
178
+ npm run typecheck
179
+ npm test
180
+ npm run test:integration
181
+ ```
182
+
183
+ `npm test` runs deterministic unit/contract tests only; it does not build the
184
+ server or download a model.
185
+
186
+ `npm run test:integration` runs the network/model-backed compiled MCP stdio
187
+ smoke. It builds `dist/`, starts the server with `StdioClientTransport`, lists
188
+ tools, calls `semantic_health`, then indexes and searches a real document.
189
+
190
+ The integration smoke uses the real default Transformers.js provider. On its
191
+ first run, it needs internet access to download the model (about 25 MB); later
192
+ runs can reuse the configured model cache. The release CI workflow caches that
193
+ directory between runs and passes the same explicit cache path to the smoke, but
194
+ network availability is still required when a cache miss occurs.
195
+
196
+ ## License
197
+
198
+ MIT
package/dist/index.js CHANGED
@@ -1,35 +1,50 @@
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 { ErrorCode, ListResourcesRequestSchema, ListResourceTemplatesRequestSchema, McpError, ReadResourceRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
4
5
  import { z } from 'zod';
5
6
  import { EnhancedSemanticSearch } from '@nacho-labs/nachos-embeddings';
6
7
  import { resolve } from 'node:path';
8
+ import { DEFAULT_INDEX_ID, DOCUMENT_RESOURCE_TEMPLATE_URI, INDEX_MANIFEST_URI, INDEX_STATS_URI, REGISTERED_RESOURCE_URIS, buildDocumentResourceUri, } from './product.js';
9
+ const VERSION = '0.3.2';
10
+ const MAX_LENGTH = 1_000_000;
11
+ const MAX_ITEMS = 100;
12
+ const metadataValueSchema = z.union([
13
+ z.string().max(MAX_LENGTH),
14
+ z.number(),
15
+ z.boolean(),
16
+ z.array(z.string().max(MAX_LENGTH)).max(MAX_ITEMS),
17
+ ]);
7
18
  function getConfig() {
8
19
  const args = process.argv.slice(2);
9
20
  function getArg(name, fallback) {
10
21
  const idx = args.indexOf(`--${name}`);
11
22
  return idx !== -1 && idx + 1 < args.length ? args[idx + 1] : fallback;
12
23
  }
24
+ function getString(name, fallback) {
25
+ const envName = `MCP_SEMANTIC_${name.toUpperCase().replace(/-/g, '_')}`;
26
+ return process.env[envName] ?? getArg(name, fallback);
27
+ }
13
28
  function getBool(name, fallback) {
14
- const value = process.env[`MCP_SEMANTIC_${name.toUpperCase()}`] ?? getArg(name, fallback.toString());
29
+ const value = getString(name, fallback.toString());
15
30
  return value === 'true' || value === '1';
16
31
  }
17
32
  return {
18
- storePath: resolve(process.env.MCP_SEMANTIC_STORE ?? getArg('store', '.semantic-store.json')),
19
- minSimilarity: parseFloat(process.env.MCP_SEMANTIC_SIMILARITY ?? getArg('similarity', '0.4')),
20
- model: process.env.MCP_SEMANTIC_MODEL ?? getArg('model', 'Xenova/all-MiniLM-L6-v2'),
21
- cacheDir: process.env.MCP_SEMANTIC_CACHE_DIR ?? getArg('cache-dir', '.cache/transformers'),
33
+ storePath: resolve(getString('store', '.semantic-store.json')),
34
+ minSimilarity: parseFloat(getString('similarity', '0.4')),
35
+ model: getString('model', 'Xenova/all-MiniLM-L6-v2'),
36
+ cacheDir: getString('cache-dir', '.cache/transformers'),
22
37
  autoChunk: getBool('auto-chunk', true),
23
38
  deduplicateExact: getBool('deduplicate-exact', true),
24
- deduplicateSimilarity: parseFloat(process.env.MCP_SEMANTIC_DEDUPLICATE_SIMILARITY ?? getArg('deduplicate-similarity', '0.95')),
39
+ deduplicateSimilarity: parseFloat(getString('deduplicate-similarity', '0.95')),
25
40
  temporalBoost: getBool('temporal-boost', true),
26
41
  verbose: getBool('verbose', false),
27
42
  // Bedrock provider settings
28
- provider: (process.env.MCP_SEMANTIC_PROVIDER ?? getArg('provider', 'transformers')),
29
- bedrockRegion: process.env.MCP_SEMANTIC_BEDROCK_REGION ?? getArg('bedrock-region', 'us-east-1'),
30
- bedrockModel: process.env.MCP_SEMANTIC_BEDROCK_MODEL ?? getArg('bedrock-model', 'amazon.titan-embed-text-v2:0'),
31
- bedrockProfile: process.env.MCP_SEMANTIC_BEDROCK_PROFILE ?? getArg('bedrock-profile', ''),
32
- bedrockDimensions: parseInt(process.env.MCP_SEMANTIC_BEDROCK_DIMENSIONS ?? getArg('bedrock-dimensions', '1024'), 10),
43
+ provider: getString('provider', 'transformers'),
44
+ bedrockRegion: getString('bedrock-region', 'us-east-1'),
45
+ bedrockModel: getString('bedrock-model', 'amazon.titan-embed-text-v2:0'),
46
+ bedrockProfile: getString('bedrock-profile', ''),
47
+ bedrockDimensions: parseInt(getString('bedrock-dimensions', '1024'), 10),
33
48
  };
34
49
  }
35
50
  async function createProvider(config) {
@@ -95,31 +110,178 @@ try {
95
110
  catch {
96
111
  process.exit(1);
97
112
  }
113
+ function formatUptime(seconds) {
114
+ if (seconds < 60) {
115
+ return `${seconds}s`;
116
+ }
117
+ if (seconds < 3600) {
118
+ return `${Math.floor(seconds / 60)}m`;
119
+ }
120
+ return `${Math.floor(seconds / 3600)}h ${Math.floor((seconds % 3600) / 60)}m`;
121
+ }
98
122
  class OpQueue {
99
123
  queue = Promise.resolve();
100
124
  async run(fn) {
101
125
  const prev = this.queue;
102
126
  let resolve;
103
- let reject;
104
- this.queue = new Promise((res, rej) => {
127
+ this.queue = new Promise((res) => {
105
128
  resolve = res;
106
- reject = rej;
107
129
  });
108
130
  try {
109
- await prev;
131
+ await prev.catch(() => { });
110
132
  const result = await fn();
111
- resolve(result);
112
133
  return result;
113
134
  }
114
135
  catch (err) {
115
- reject(err);
116
136
  metrics.errors++;
117
137
  throw err;
118
138
  }
139
+ finally {
140
+ resolve();
141
+ }
119
142
  }
120
143
  }
121
144
  const opQueue = new OpQueue();
122
- const server = new McpServer({ name: 'mcp-semantic-search-enhanced', version: '0.2.0' }, { capabilities: { logging: {} } });
145
+ const server = new McpServer({ name: 'mcp-semantic-search-enhanced', version: VERSION }, { capabilities: { logging: {} } });
146
+ function getResourceDocuments() {
147
+ return search.export();
148
+ }
149
+ function getResourceModelLabel() {
150
+ return config.provider === 'bedrock' ? config.bedrockModel : config.model;
151
+ }
152
+ function getLatestDocumentTimestamp(documents) {
153
+ const latest = documents.reduce((current, document) => {
154
+ const timestamp = document.metadata?.timestamp;
155
+ return timestamp !== undefined && (current === undefined || timestamp > current) ? timestamp : current;
156
+ }, undefined);
157
+ return latest === undefined || Number.isNaN(latest) ? undefined : new Date(latest).toISOString();
158
+ }
159
+ function countMetadata(documents, key) {
160
+ const counts = {};
161
+ for (const document of documents) {
162
+ const values = key === 'tags' ? (document.metadata?.tags ?? []) : document.metadata?.kind ? [document.metadata.kind] : [];
163
+ for (const value of values)
164
+ counts[value] = (counts[value] ?? 0) + 1;
165
+ }
166
+ return counts;
167
+ }
168
+ function renderJsonResource(uri, value) {
169
+ return {
170
+ contents: [{ uri, mimeType: 'application/json', text: JSON.stringify(value, null, 2) }],
171
+ };
172
+ }
173
+ function parseSemanticResourceUri(uri) {
174
+ try {
175
+ const parsed = new URL(uri);
176
+ if (parsed.protocol !== 'semantic-search:' || parsed.hostname !== 'indexes')
177
+ return undefined;
178
+ const [indexId, resourceType, documentId, extra] = parsed.pathname
179
+ .split('/')
180
+ .filter(Boolean)
181
+ .map((segment) => decodeURIComponent(segment));
182
+ if (indexId !== DEFAULT_INDEX_ID || extra !== undefined)
183
+ return undefined;
184
+ if (resourceType === 'manifest' && documentId === undefined)
185
+ return { type: 'manifest' };
186
+ if (resourceType === 'stats' && documentId === undefined)
187
+ return { type: 'stats' };
188
+ if (resourceType === 'documents' && documentId)
189
+ return { type: 'document', documentId };
190
+ }
191
+ catch {
192
+ return undefined;
193
+ }
194
+ return undefined;
195
+ }
196
+ server.server.registerCapabilities({ resources: {} });
197
+ server.server.setRequestHandler(ListResourcesRequestSchema, async () => {
198
+ const documents = getResourceDocuments();
199
+ const lastModified = getLatestDocumentTimestamp(documents);
200
+ const annotations = {
201
+ audience: ['user', 'assistant'],
202
+ ...(lastModified ? { lastModified } : {}),
203
+ };
204
+ return {
205
+ resources: [
206
+ {
207
+ uri: INDEX_MANIFEST_URI,
208
+ name: 'semantic_index_manifest',
209
+ title: 'Semantic Index Manifest',
210
+ description: 'Stable manifest for the active semantic-search index.',
211
+ mimeType: 'application/json',
212
+ annotations: { ...annotations, priority: 1 },
213
+ },
214
+ {
215
+ uri: INDEX_STATS_URI,
216
+ name: 'semantic_index_stats',
217
+ title: 'Semantic Index Stats',
218
+ description: 'Corpus stats and runtime counters for the active semantic-search index.',
219
+ mimeType: 'application/json',
220
+ annotations: { ...annotations, priority: 0.9 },
221
+ },
222
+ ],
223
+ };
224
+ });
225
+ server.server.setRequestHandler(ListResourceTemplatesRequestSchema, async () => ({
226
+ resourceTemplates: [
227
+ {
228
+ name: 'semantic_document',
229
+ title: 'Indexed Document',
230
+ uriTemplate: DOCUMENT_RESOURCE_TEMPLATE_URI,
231
+ description: 'Read a single indexed document by id from the active semantic-search index.',
232
+ mimeType: 'application/json',
233
+ annotations: { audience: ['user', 'assistant'], priority: 0.8 },
234
+ },
235
+ ],
236
+ }));
237
+ server.server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
238
+ const resource = parseSemanticResourceUri(request.params.uri);
239
+ if (!resource)
240
+ throw new McpError(ErrorCode.InvalidParams, `Resource ${request.params.uri} not found`);
241
+ const documents = getResourceDocuments();
242
+ if (resource.type === 'manifest') {
243
+ return renderJsonResource(INDEX_MANIFEST_URI, {
244
+ indexId: DEFAULT_INDEX_ID,
245
+ resourceRoot: `semantic-search://indexes/${DEFAULT_INDEX_ID}`,
246
+ storePath: config.storePath,
247
+ provider: config.provider,
248
+ model: getResourceModelLabel(),
249
+ documentCount: documents.length,
250
+ listedResources: [...REGISTERED_RESOURCE_URIS],
251
+ resourceTemplates: [DOCUMENT_RESOURCE_TEMPLATE_URI],
252
+ metricsStartedAt: new Date(metrics.startTime).toISOString(),
253
+ });
254
+ }
255
+ if (resource.type === 'stats') {
256
+ return renderJsonResource(INDEX_STATS_URI, {
257
+ indexId: DEFAULT_INDEX_ID,
258
+ storePath: config.storePath,
259
+ provider: config.provider,
260
+ model: getResourceModelLabel(),
261
+ counts: {
262
+ documents: documents.length,
263
+ rootDocuments: documents.filter((document) => !document.metadata?.parentId).length,
264
+ chunkDocuments: documents.filter((document) => document.metadata?.parentId).length,
265
+ },
266
+ metadata: { kinds: countMetadata(documents, 'kind'), tags: countMetadata(documents, 'tags') },
267
+ usage: {
268
+ searches: metrics.searches,
269
+ documentsAdded: metrics.documentsAdded,
270
+ documentsRemoved: metrics.documentsRemoved,
271
+ errors: metrics.errors,
272
+ uptimeSeconds: Math.floor((Date.now() - metrics.startTime) / 1000),
273
+ },
274
+ });
275
+ }
276
+ const document = documents.find((candidate) => candidate.id === resource.documentId);
277
+ if (!document)
278
+ throw new McpError(ErrorCode.InvalidParams, `Document ${resource.documentId} not found`);
279
+ return renderJsonResource(buildDocumentResourceUri(document.id), {
280
+ id: document.id,
281
+ text: document.text,
282
+ metadata: document.metadata ?? {},
283
+ });
284
+ });
123
285
  server.registerTool('semantic_health', {
124
286
  title: 'Health Check',
125
287
  description: 'Server status, metrics, and configuration',
@@ -128,9 +290,10 @@ server.registerTool('semantic_health', {
128
290
  try {
129
291
  await search.search('test', { limit: 1 });
130
292
  const uptime = Math.floor((Date.now() - metrics.startTime) / 1000);
131
- const uptimeStr = uptime < 60 ? `${uptime}s` : uptime < 3600 ? `${Math.floor(uptime / 60)}m` : `${Math.floor(uptime / 3600)}h ${Math.floor((uptime % 3600) / 60)}m`;
293
+ const uptimeStr = formatUptime(uptime);
132
294
  return {
133
- content: [{
295
+ content: [
296
+ {
134
297
  type: 'text',
135
298
  text: [
136
299
  '✅ Healthy',
@@ -153,15 +316,18 @@ server.registerTool('semantic_health', {
153
316
  ` Dedup: exact=${config.deduplicateExact}, fuzzy=${config.deduplicateSimilarity}`,
154
317
  ` Temporal boost: ${config.temporalBoost}`,
155
318
  ].join('\n'),
156
- }],
319
+ },
320
+ ],
157
321
  };
158
322
  }
159
323
  catch (err) {
160
324
  return {
161
- content: [{
325
+ content: [
326
+ {
162
327
  type: 'text',
163
328
  text: `❌ Unhealthy: ${err instanceof Error ? err.message : String(err)}`,
164
- }],
329
+ },
330
+ ],
165
331
  };
166
332
  }
167
333
  });
@@ -179,6 +345,7 @@ server.registerTool('semantic_search', {
179
345
  }, async ({ query, limit, minSimilarity, kind, tags, since }) => {
180
346
  return opQueue.run(async () => {
181
347
  const startTime = Date.now();
348
+ const parsedSince = since ? Date.parse(since) : undefined;
182
349
  const results = await search.search(query, {
183
350
  limit,
184
351
  ...(minSimilarity !== undefined && { minSimilarity }),
@@ -187,7 +354,7 @@ server.registerTool('semantic_search', {
187
354
  return false;
188
355
  if (tags && (!meta?.tags || !tags.some((t) => meta.tags?.includes(t))))
189
356
  return false;
190
- if (since && meta?.timestamp && meta.timestamp < Date.parse(since))
357
+ if (parsedSince !== undefined && !isNaN(parsedSince) && meta?.timestamp && meta.timestamp < parsedSince)
191
358
  return false;
192
359
  return true;
193
360
  },
@@ -196,10 +363,12 @@ server.registerTool('semantic_search', {
196
363
  const elapsed = Date.now() - startTime;
197
364
  if (results.length === 0) {
198
365
  return {
199
- content: [{
366
+ content: [
367
+ {
200
368
  type: 'text',
201
369
  text: `🔍 No results for "${query}" (${elapsed}ms)`,
202
- }],
370
+ },
371
+ ],
203
372
  };
204
373
  }
205
374
  const formatted = results
@@ -210,10 +379,19 @@ server.registerTool('semantic_search', {
210
379
  })
211
380
  .join('\n\n');
212
381
  return {
213
- content: [{
382
+ content: [
383
+ {
214
384
  type: 'text',
215
385
  text: `🔍 Found ${results.length} in ${elapsed}ms:\n\n${formatted}`,
216
- }],
386
+ },
387
+ ...results.map((result) => ({
388
+ type: 'resource_link',
389
+ uri: buildDocumentResourceUri(result.id),
390
+ name: result.id,
391
+ mimeType: 'application/json',
392
+ description: `Indexed document "${result.id}"`,
393
+ })),
394
+ ],
217
395
  };
218
396
  });
219
397
  });
@@ -223,16 +401,17 @@ server.registerTool('semantic_index', {
223
401
  inputSchema: z.object({
224
402
  id: z.string().describe('Unique ID (e.g., "auth-pattern", "adr-012")'),
225
403
  text: z.string().describe('Content to index'),
226
- metadata: z.record(z.union([z.string(), z.number(), z.boolean(), z.array(z.string())])).optional().describe('Optional metadata'),
404
+ metadata: z.record(z.string(), metadataValueSchema).optional().describe('Optional metadata'),
227
405
  }),
228
406
  }, async ({ id, text, metadata }) => {
229
407
  return opQueue.run(async () => {
230
408
  const startTime = Date.now();
231
- await search.addDocument({ id, text, metadata: metadata });
409
+ await search.addDocument({ id, text, metadata });
232
410
  metrics.documentsAdded++;
233
411
  const elapsed = Date.now() - startTime;
234
412
  return {
235
- content: [{
413
+ content: [
414
+ {
236
415
  type: 'text',
237
416
  text: [
238
417
  `✅ Indexed "${id}" (${elapsed}ms)`,
@@ -240,7 +419,8 @@ server.registerTool('semantic_index', {
240
419
  `💾 Saved to ${config.storePath}`,
241
420
  `🔍 Test: semantic_search("${id}")`,
242
421
  ].join('\n'),
243
- }],
422
+ },
423
+ ],
244
424
  };
245
425
  });
246
426
  });
@@ -248,11 +428,13 @@ server.registerTool('semantic_index_batch', {
248
428
  title: 'Batch Index',
249
429
  description: 'Add multiple documents at once',
250
430
  inputSchema: z.object({
251
- documents: z.array(z.object({
252
- id: z.string(),
253
- text: z.string(),
254
- metadata: z.record(z.union([z.string(), z.number(), z.boolean(), z.array(z.string())])).optional(),
255
- })),
431
+ documents: z
432
+ .array(z.object({
433
+ id: z.string().max(MAX_LENGTH),
434
+ text: z.string().max(MAX_LENGTH),
435
+ metadata: z.record(z.string(), metadataValueSchema).optional(),
436
+ }))
437
+ .max(MAX_ITEMS),
256
438
  }),
257
439
  }, async ({ documents }) => {
258
440
  return opQueue.run(async () => {
@@ -261,14 +443,16 @@ server.registerTool('semantic_index_batch', {
261
443
  metrics.documentsAdded += documents.length;
262
444
  const elapsed = Date.now() - startTime;
263
445
  return {
264
- content: [{
446
+ content: [
447
+ {
265
448
  type: 'text',
266
449
  text: [
267
450
  `✅ Indexed ${documents.length} documents (${elapsed}ms)`,
268
451
  ` ${Math.round(documents.length / (elapsed / 1000))}/sec`,
269
452
  `📊 ${search.size()} documents total`,
270
453
  ].join('\n'),
271
- }],
454
+ },
455
+ ],
272
456
  };
273
457
  });
274
458
  });
@@ -285,12 +469,12 @@ server.registerTool('semantic_remove', {
285
469
  metrics.documentsRemoved++;
286
470
  }
287
471
  return {
288
- content: [{
472
+ content: [
473
+ {
289
474
  type: 'text',
290
- text: removed
291
- ? `✅ Removed "${id}"\n📊 ${search.size()} remaining`
292
- : `⚠️ "${id}" not found`,
293
- }],
475
+ text: removed ? `✅ Removed "${id}"\n📊 ${search.size()} remaining` : `⚠️ "${id}" not found`,
476
+ },
477
+ ],
294
478
  };
295
479
  });
296
480
  });
@@ -299,7 +483,8 @@ server.registerTool('semantic_stats', {
299
483
  description: 'Detailed index information',
300
484
  inputSchema: z.object({}),
301
485
  }, async () => ({
302
- content: [{
486
+ content: [
487
+ {
303
488
  type: 'text',
304
489
  text: [
305
490
  '📊 Index Stats',
@@ -322,7 +507,8 @@ server.registerTool('semantic_stats', {
322
507
  ` Removed: ${metrics.documentsRemoved}`,
323
508
  ` Errors: ${metrics.errors}`,
324
509
  ].join('\n'),
325
- }],
510
+ },
511
+ ],
326
512
  }));
327
513
  server.registerTool('semantic_clear', {
328
514
  title: 'Clear Index',
@@ -333,20 +519,24 @@ server.registerTool('semantic_clear', {
333
519
  }, async ({ confirm }) => {
334
520
  if (!confirm) {
335
521
  return {
336
- content: [{
522
+ content: [
523
+ {
337
524
  type: 'text',
338
525
  text: '⚠️ Cancelled. Set confirm: true to proceed',
339
- }],
526
+ },
527
+ ],
340
528
  };
341
529
  }
342
530
  return opQueue.run(async () => {
343
531
  const count = search.size();
344
532
  await search.clear();
345
533
  return {
346
- content: [{
534
+ content: [
535
+ {
347
536
  type: 'text',
348
537
  text: `✅ Cleared ${count} documents\n💾 Saved to ${config.storePath}`,
349
- }],
538
+ },
539
+ ],
350
540
  };
351
541
  });
352
542
  });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,SAAS,SAAS;IAChB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnC,SAAS,MAAM,CAAC,IAAY,EAAE,QAAgB;QAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QACtC,OAAO,GAAG,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;IACzE,CAAC;IAED,SAAS,OAAO,CAAC,IAAY,EAAE,QAAiB;QAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;QACrG,OAAO,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,GAAG,CAAC;IAC3C,CAAC;IAED,OAAO;QACL,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,MAAM,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC;QAC7F,aAAa,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QAC7F,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,MAAM,CAAC,OAAO,EAAE,yBAAyB,CAAC;QACnF,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,MAAM,CAAC,WAAW,EAAE,qBAAqB,CAAC;QAC1F,SAAS,EAAE,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC;QACtC,gBAAgB,EAAE,OAAO,CAAC,mBAAmB,EAAE,IAAI,CAAC;QACpD,qBAAqB,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,mCAAmC,IAAI,MAAM,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC;QAC9H,aAAa,EAAE,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC;QAC9C,OAAO,EAAE,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC;QAElC,4BAA4B;QAC5B,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,MAAM,CAAC,UAAU,EAAE,cAAc,CAAC,CAA+B;QACjH,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,MAAM,CAAC,gBAAgB,EAAE,WAAW,CAAC;QAC/F,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,0BAA0B,IAAI,MAAM,CAAC,eAAe,EAAE,8BAA8B,CAAC;QAC/G,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,4BAA4B,IAAI,MAAM,CAAC,iBAAiB,EAAE,EAAE,CAAC;QACzF,iBAAiB,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,+BAA+B,IAAI,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC;KACrH,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,MAAoC;IAChE,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO,SAAS,CAAC,CAAC,8BAA8B;IAClD,CAAC;IAED,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,uCAAuC,CAAC,CAAC;IAElF,OAAO,IAAI,eAAe,CAAC;QACzB,MAAM,EAAE,MAAM,CAAC,aAAa;QAC5B,OAAO,EAAE,MAAM,CAAC,YAAY;QAC5B,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,QAAQ,EAAE,SAAkB,EAAE,OAAO,EAAE,MAAM,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnH,YAAY,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,iBAAiB,EAAE;QACtD,eAAe,EAAE,MAAM,CAAC,OAAO;KAChC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;AAU3B,MAAM,OAAO,GAAY;IACvB,QAAQ,EAAE,CAAC;IACX,cAAc,EAAE,CAAC;IACjB,gBAAgB,EAAE,CAAC;IACnB,MAAM,EAAE,CAAC;IACT,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;CACtB,CAAC;AAEF,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,CAAC;AAE9C,MAAM,MAAM,GAAG,IAAI,sBAAsB,CAAC;IACxC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACjC,aAAa,EAAE,MAAM,CAAC,aAAa;IACnC,KAAK,EAAE,MAAM,CAAC,KAAK;IACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;IACzB,QAAQ,EAAE,IAAI;IACd,SAAS,EAAE,MAAM,CAAC,SAAS;IAC3B,SAAS,EAAE,MAAM,CAAC,SAAS;IAC3B,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;IACzC,qBAAqB,EAAE,MAAM,CAAC,qBAAqB;IACnD,aAAa,EAAE,MAAM,CAAC,aAAa;IACnC,OAAO,EAAE,MAAM,CAAC,OAAO;CACxB,CAAC,CAAC;AAEH,KAAK,UAAU,aAAa,CAAC,UAAU,GAAG,CAAC;IACzC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;QACvD,IAAI,CAAC;YACH,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,OAAO,CAAC,KAAK,CAAC,kBAAkB,OAAO,IAAI,UAAU,EAAE,CAAC,CAAC;YAC3D,CAAC;YACD,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,OAAO,CAAC,KAAK,CAAC,iBAAiB,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;YAC5D,CAAC;YACD,OAAO;QACT,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;gBAC3B,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,UAAU,EAAE,4DAA4D,EAAE,GAAG,CAAC,CAAC;gBACpH,MAAM,GAAG,CAAC;YACZ,CAAC;YACD,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;YAC5C,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;AACH,CAAC;AAED,IAAI,CAAC;IACH,MAAM,aAAa,EAAE,CAAC;AACxB,CAAC;AAAC,MAAM,CAAC;IACP,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,OAAO;IACH,KAAK,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAElC,KAAK,CAAC,GAAG,CAAI,EAAoB;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,OAAwD,CAAC;QAC7D,IAAI,MAA4C,CAAC;QAEjD,IAAI,CAAC,KAAK,GAAG,IAAI,OAAO,CAAO,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YAC1C,OAAO,GAAG,GAAU,CAAC;YACrB,MAAM,GAAG,GAAG,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,MAAM,IAAI,CAAC;YACX,MAAM,MAAM,GAAG,MAAM,EAAE,EAAE,CAAC;YAC1B,OAAQ,CAAC,MAAM,CAAC,CAAC;YACjB,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAO,CAAC,GAAG,CAAC,CAAC;YACb,OAAO,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;CACF;AAED,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B,EAAE,IAAI,EAAE,8BAA8B,EAAE,OAAO,EAAE,OAAO,EAAE,EAC1D,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,CAClC,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;IACE,KAAK,EAAE,cAAc;IACrB,WAAW,EAAE,2CAA2C;IACxD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;CAC1B,EACD,KAAK,IAAI,EAAE;IACT,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QAE1C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;QACnE,MAAM,SAAS,GAAG,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC;QAEpK,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE;wBACJ,WAAW;wBACX,EAAE;wBACF,aAAa;wBACb,iBAAiB,MAAM,CAAC,IAAI,EAAE,EAAE;wBAChC,gBAAgB,OAAO,CAAC,QAAQ,EAAE;wBAClC,aAAa,OAAO,CAAC,cAAc,EAAE;wBACrC,eAAe,OAAO,CAAC,gBAAgB,EAAE;wBACzC,cAAc,OAAO,CAAC,MAAM,EAAE;wBAC9B,cAAc,SAAS,EAAE;wBACzB,EAAE;wBACF,YAAY;wBACZ,gBAAgB,MAAM,CAAC,QAAQ,EAAE;wBACjC,aAAa,MAAM,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE;wBACjF,MAAM,MAAM,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,UAAU,MAAM,CAAC,QAAQ,EAAE,EAAE;wBACvG,aAAa,MAAM,CAAC,SAAS,EAAE;wBAC/B,sBAAsB,MAAM,CAAC,aAAa,EAAE;wBAC5C,kBAAkB,MAAM,CAAC,SAAS,EAAE;wBACpC,mBAAmB,MAAM,CAAC,gBAAgB,WAAW,MAAM,CAAC,qBAAqB,EAAE;wBACnF,sBAAsB,MAAM,CAAC,aAAa,EAAE;qBAC7C,CAAC,IAAI,CAAC,IAAI,CAAC;iBACb,CAAC;SACH,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,gBAAgB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;iBACzE,CAAC;SACH,CAAC;IACJ,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;IACE,KAAK,EAAE,iBAAiB;IACxB,WAAW,EAAE,kDAAkD;IAC/D,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;QAC1C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC/D,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAChE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QAC/D,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QACxE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;KAClF,CAAC;CACH,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;IAC3D,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE;YACzC,KAAK;YACL,GAAG,CAAC,aAAa,KAAK,SAAS,IAAI,EAAE,aAAa,EAAE,CAAC;YACrD,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBACf,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI,KAAK,IAAI;oBAAE,OAAO,KAAK,CAAC;gBAC9C,IAAI,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;oBAAE,OAAO,KAAK,CAAC;gBACrF,IAAI,KAAK,IAAI,IAAI,EAAE,SAAS,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;oBAAE,OAAO,KAAK,CAAC;gBACjF,OAAO,IAAI,CAAC;YACd,CAAC;SACF,CAAC,CAAC;QAEH,OAAO,CAAC,QAAQ,EAAE,CAAC;QACnB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAEvC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,sBAAsB,KAAK,MAAM,OAAO,KAAK;qBACpD,CAAC;aACH,CAAC;QACJ,CAAC;QAED,MAAM,SAAS,GAAG,OAAO;aACtB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACZ,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC9E,MAAM,OAAO,GAAG,CAAC,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChH,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,OAAO,GAAG,OAAO,EAAE,CAAC;QAChF,CAAC,CAAC;aACD,IAAI,CAAC,MAAM,CAAC,CAAC;QAEhB,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,YAAY,OAAO,CAAC,MAAM,OAAO,OAAO,UAAU,SAAS,EAAE;iBACpE,CAAC;SACH,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;IACE,KAAK,EAAE,gBAAgB;IACvB,WAAW,EAAE,oEAAoE;IACjF,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;QACtE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QAC7C,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;KACjI,CAAC;CACH,EACD,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC/B,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,MAAM,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAe,EAAE,CAAC,CAAC;QAElE,OAAO,CAAC,cAAc,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAEvC,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE;wBACJ,cAAc,EAAE,MAAM,OAAO,KAAK;wBAClC,MAAM,MAAM,CAAC,IAAI,EAAE,kBAAkB;wBACrC,eAAe,MAAM,CAAC,SAAS,EAAE;wBACjC,6BAA6B,EAAE,IAAI;qBACpC,CAAC,IAAI,CAAC,IAAI,CAAC;iBACb,CAAC;SACH,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,sBAAsB,EACtB;IACE,KAAK,EAAE,aAAa;IACpB,WAAW,EAAE,gCAAgC;IAC7C,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;YAC1B,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;YACd,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;YAChB,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;SACnG,CAAC,CAAC;KACJ,CAAC;CACH,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;IACtB,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,MAAM,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAe,EAAE,CAAC,CAAC,CAAC,CAAC;QAEzF,OAAO,CAAC,cAAc,IAAI,SAAS,CAAC,MAAM,CAAC;QAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAEvC,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE;wBACJ,aAAa,SAAS,CAAC,MAAM,eAAe,OAAO,KAAK;wBACxD,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,MAAM;wBAC3D,MAAM,MAAM,CAAC,IAAI,EAAE,kBAAkB;qBACtC,CAAC,IAAI,CAAC,IAAI,CAAC;iBACb,CAAC;SACH,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;IACE,KAAK,EAAE,iBAAiB;IACxB,WAAW,EAAE,cAAc;IAC3B,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;KACf,CAAC;CACH,EACD,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IACf,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;QAC5B,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAExC,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,gBAAgB,EAAE,CAAC;QAC7B,CAAC;QAED,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,OAAO;wBACX,CAAC,CAAC,cAAc,EAAE,SAAS,MAAM,CAAC,IAAI,EAAE,YAAY;wBACpD,CAAC,CAAC,OAAO,EAAE,aAAa;iBAC3B,CAAC;SACH,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;IACE,KAAK,EAAE,aAAa;IACpB,WAAW,EAAE,4BAA4B;IACzC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;CAC1B,EACD,KAAK,IAAI,EAAE,CAAC,CAAC;IACX,OAAO,EAAE,CAAC;YACR,IAAI,EAAE,MAAe;YACrB,IAAI,EAAE;gBACJ,gBAAgB;gBAChB,EAAE;gBACF,cAAc,MAAM,CAAC,IAAI,EAAE,EAAE;gBAC7B,aAAa,MAAM,CAAC,QAAQ,EAAE;gBAC9B,UAAU,MAAM,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE;gBAC9E,UAAU,MAAM,CAAC,SAAS,EAAE;gBAC5B,mBAAmB,MAAM,CAAC,aAAa,EAAE;gBACzC,EAAE;gBACF,WAAW;gBACX,kBAAkB,MAAM,CAAC,SAAS,EAAE;gBACpC,qBAAqB,MAAM,CAAC,gBAAgB,EAAE;gBAC9C,qBAAqB,MAAM,CAAC,qBAAqB,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,KAAK,EAAE;gBAC9F,sBAAsB,MAAM,CAAC,aAAa,EAAE;gBAC5C,EAAE;gBACF,QAAQ;gBACR,gBAAgB,OAAO,CAAC,QAAQ,EAAE;gBAClC,aAAa,OAAO,CAAC,cAAc,EAAE;gBACrC,eAAe,OAAO,CAAC,gBAAgB,EAAE;gBACzC,cAAc,OAAO,CAAC,MAAM,EAAE;aAC/B,CAAC,IAAI,CAAC,IAAI,CAAC;SACb,CAAC;CACH,CAAC,CACH,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;IACE,KAAK,EAAE,aAAa;IACpB,WAAW,EAAE,qCAAqC;IAClD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;KAC9C,CAAC;CACH,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;IACpB,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,4CAA4C;iBACnD,CAAC;SACH,CAAC;IACJ,CAAC;IAED,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;QAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAC5B,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QAErB,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,aAAa,KAAK,2BAA2B,MAAM,CAAC,SAAS,EAAE;iBACtE,CAAC;SACH,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CACF,CAAC;AAEF,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAEhC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;IACnB,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;AAClC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,SAAS,EACT,0BAA0B,EAC1B,kCAAkC,EAClC,QAAQ,EACR,yBAAyB,GAC1B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,gBAAgB,EAChB,8BAA8B,EAC9B,kBAAkB,EAClB,eAAe,EACf,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,cAAc,CAAC;AAEtB,MAAM,OAAO,GAAG,OAAO,CAAC;AACxB,MAAM,UAAU,GAAG,SAAS,CAAC;AAC7B,MAAM,SAAS,GAAG,GAAG,CAAC;AACtB,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC;IAClC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC;IAC1B,CAAC,CAAC,MAAM,EAAE;IACV,CAAC,CAAC,OAAO,EAAE;IACX,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC;CACnD,CAAC,CAAC;AAEH,SAAS,SAAS;IAChB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnC,SAAS,MAAM,CAAC,IAAY,EAAE,QAAgB;QAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QACtC,OAAO,GAAG,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;IACzE,CAAC;IAED,SAAS,SAAS,CAAC,IAAY,EAAE,QAAgB;QAC/C,MAAM,OAAO,GAAG,gBAAgB,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;QACxE,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACxD,CAAC;IAED,SAAS,OAAO,CAAC,IAAY,EAAE,QAAiB;QAC9C,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;QACnD,OAAO,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,GAAG,CAAC;IAC3C,CAAC;IAED,OAAO;QACL,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC;QAC9D,aAAa,EAAE,UAAU,CAAC,SAAS,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QACzD,KAAK,EAAE,SAAS,CAAC,OAAO,EAAE,yBAAyB,CAAC;QACpD,QAAQ,EAAE,SAAS,CAAC,WAAW,EAAE,qBAAqB,CAAC;QACvD,SAAS,EAAE,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC;QACtC,gBAAgB,EAAE,OAAO,CAAC,mBAAmB,EAAE,IAAI,CAAC;QACpD,qBAAqB,EAAE,UAAU,CAAC,SAAS,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC;QAC9E,aAAa,EAAE,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC;QAC9C,OAAO,EAAE,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC;QAElC,4BAA4B;QAC5B,QAAQ,EAAE,SAAS,CAAC,UAAU,EAAE,cAAc,CAA+B;QAC7E,aAAa,EAAE,SAAS,CAAC,gBAAgB,EAAE,WAAW,CAAC;QACvD,YAAY,EAAE,SAAS,CAAC,eAAe,EAAE,8BAA8B,CAAC;QACxE,cAAc,EAAE,SAAS,CAAC,iBAAiB,EAAE,EAAE,CAAC;QAChD,iBAAiB,EAAE,QAAQ,CAAC,SAAS,CAAC,oBAAoB,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC;KACzE,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,MAAoC;IAChE,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO,SAAS,CAAC,CAAC,8BAA8B;IAClD,CAAC;IAED,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,uCAAuC,CAAC,CAAC;IAElF,OAAO,IAAI,eAAe,CAAC;QACzB,MAAM,EAAE,MAAM,CAAC,aAAa;QAC5B,OAAO,EAAE,MAAM,CAAC,YAAY;QAC5B,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,QAAQ,EAAE,SAAkB,EAAE,OAAO,EAAE,MAAM,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnH,YAAY,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,iBAAiB,EAAE;QACtD,eAAe,EAAE,MAAM,CAAC,OAAO;KAChC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;AAU3B,MAAM,OAAO,GAAY;IACvB,QAAQ,EAAE,CAAC;IACX,cAAc,EAAE,CAAC;IACjB,gBAAgB,EAAE,CAAC;IACnB,MAAM,EAAE,CAAC;IACT,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;CACtB,CAAC;AAEF,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,CAAC;AAE9C,MAAM,MAAM,GAAG,IAAI,sBAAsB,CAAC;IACxC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACjC,aAAa,EAAE,MAAM,CAAC,aAAa;IACnC,KAAK,EAAE,MAAM,CAAC,KAAK;IACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;IACzB,QAAQ,EAAE,IAAI;IACd,SAAS,EAAE,MAAM,CAAC,SAAS;IAC3B,SAAS,EAAE,MAAM,CAAC,SAAS;IAC3B,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;IACzC,qBAAqB,EAAE,MAAM,CAAC,qBAAqB;IACnD,aAAa,EAAE,MAAM,CAAC,aAAa;IACnC,OAAO,EAAE,MAAM,CAAC,OAAO;CACxB,CAAC,CAAC;AAEH,KAAK,UAAU,aAAa,CAAC,UAAU,GAAG,CAAC;IACzC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;QACvD,IAAI,CAAC;YACH,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,OAAO,CAAC,KAAK,CAAC,kBAAkB,OAAO,IAAI,UAAU,EAAE,CAAC,CAAC;YAC3D,CAAC;YACD,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,OAAO,CAAC,KAAK,CAAC,iBAAiB,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;YAC5D,CAAC;YACD,OAAO;QACT,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;gBAC3B,OAAO,CAAC,KAAK,CACX,qBAAqB,EACrB,UAAU,EACV,4DAA4D,EAC5D,GAAG,CACJ,CAAC;gBACF,MAAM,GAAG,CAAC;YACZ,CAAC;YACD,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;YAC5C,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;AACH,CAAC;AAED,IAAI,CAAC;IACH,MAAM,aAAa,EAAE,CAAC;AACxB,CAAC;AAAC,MAAM,CAAC;IACP,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,YAAY,CAAC,OAAe;IACnC,IAAI,OAAO,GAAG,EAAE,EAAE,CAAC;QACjB,OAAO,GAAG,OAAO,GAAG,CAAC;IACvB,CAAC;IACD,IAAI,OAAO,GAAG,IAAI,EAAE,CAAC;QACnB,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC;IACxC,CAAC;IACD,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC;AAChF,CAAC;AAED,MAAM,OAAO;IACH,KAAK,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAElC,KAAK,CAAC,GAAG,CAAI,EAAoB;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,OAA8D,CAAC;QAEnE,IAAI,CAAC,KAAK,GAAG,IAAI,OAAO,CAAO,CAAC,GAAG,EAAE,EAAE;YACrC,OAAO,GAAG,GAAG,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAC3B,MAAM,MAAM,GAAG,MAAM,EAAE,EAAE,CAAC;YAC1B,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,GAAG,CAAC;QACZ,CAAC;gBAAS,CAAC;YACT,OAAQ,EAAE,CAAC;QACb,CAAC;IACH,CAAC;CACF;AAED,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B,EAAE,IAAI,EAAE,8BAA8B,EAAE,OAAO,EAAE,OAAO,EAAE,EAC1D,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,CAClC,CAAC;AAeF,SAAS,oBAAoB;IAC3B,OAAO,MAAM,CAAC,MAAM,EAAiC,CAAC;AACxD,CAAC;AAED,SAAS,qBAAqB;IAC5B,OAAO,MAAM,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;AAC5E,CAAC;AAED,SAAS,0BAA0B,CAAC,SAAsC;IACxE,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAqB,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE;QACxE,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;QAC/C,OAAO,SAAS,KAAK,SAAS,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;IACzG,CAAC,EAAE,SAAS,CAAC,CAAC;IAEd,OAAO,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;AACnG,CAAC;AAED,SAAS,aAAa,CAAC,SAAsC,EAAE,GAAoB;IACjF,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,MAAM,GACV,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7G,KAAK,MAAM,KAAK,IAAI,MAAM;YAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAW,EAAE,KAAc;IACrD,OAAO;QACL,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,kBAAkB,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;KACxF,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAC/B,GAAW;IAEX,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,MAAM,CAAC,QAAQ,KAAK,kBAAkB,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QAC9F,MAAM,CAAC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,KAAK,CAAC,GAAG,MAAM,CAAC,QAAQ;aAC/D,KAAK,CAAC,GAAG,CAAC;aACV,MAAM,CAAC,OAAO,CAAC;aACf,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;QACjD,IAAI,OAAO,KAAK,gBAAgB,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QAC1E,IAAI,YAAY,KAAK,UAAU,IAAI,UAAU,KAAK,SAAS;YAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;QACzF,IAAI,YAAY,KAAK,OAAO,IAAI,UAAU,KAAK,SAAS;YAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QACnF,IAAI,YAAY,KAAK,WAAW,IAAI,UAAU;YAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC;IAC1F,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,MAAM,CAAC,oBAAoB,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;AAEtD,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;IACrE,MAAM,SAAS,GAAG,oBAAoB,EAAE,CAAC;IACzC,MAAM,YAAY,GAAG,0BAA0B,CAAC,SAAS,CAAC,CAAC;IAC3D,MAAM,WAAW,GAAG;QAClB,QAAQ,EAAE,CAAC,MAAM,EAAE,WAAW,CAAU;QACxC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1C,CAAC;IACF,OAAO;QACL,SAAS,EAAE;YACT;gBACE,GAAG,EAAE,kBAAkB;gBACvB,IAAI,EAAE,yBAAyB;gBAC/B,KAAK,EAAE,yBAAyB;gBAChC,WAAW,EAAE,uDAAuD;gBACpE,QAAQ,EAAE,kBAAkB;gBAC5B,WAAW,EAAE,EAAE,GAAG,WAAW,EAAE,QAAQ,EAAE,CAAC,EAAE;aAC7C;YACD;gBACE,GAAG,EAAE,eAAe;gBACpB,IAAI,EAAE,sBAAsB;gBAC5B,KAAK,EAAE,sBAAsB;gBAC7B,WAAW,EAAE,yEAAyE;gBACtF,QAAQ,EAAE,kBAAkB;gBAC5B,WAAW,EAAE,EAAE,GAAG,WAAW,EAAE,QAAQ,EAAE,GAAG,EAAE;aAC/C;SACF;KACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;IAC/E,iBAAiB,EAAE;QACjB;YACE,IAAI,EAAE,mBAAmB;YACzB,KAAK,EAAE,kBAAkB;YACzB,WAAW,EAAE,8BAA8B;YAC3C,WAAW,EAAE,6EAA6E;YAC1F,QAAQ,EAAE,kBAAkB;YAC5B,WAAW,EAAE,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE;SAChE;KACF;CACF,CAAC,CAAC,CAAC;AAEJ,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,yBAAyB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;IAC3E,MAAM,QAAQ,GAAG,wBAAwB,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC9D,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,QAAQ,CAAC,SAAS,CAAC,aAAa,EAAE,YAAY,OAAO,CAAC,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC;IAEvG,MAAM,SAAS,GAAG,oBAAoB,EAAE,CAAC;IACzC,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QACjC,OAAO,kBAAkB,CAAC,kBAAkB,EAAE;YAC5C,OAAO,EAAE,gBAAgB;YACzB,YAAY,EAAE,6BAA6B,gBAAgB,EAAE;YAC7D,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,KAAK,EAAE,qBAAqB,EAAE;YAC9B,aAAa,EAAE,SAAS,CAAC,MAAM;YAC/B,eAAe,EAAE,CAAC,GAAG,wBAAwB,CAAC;YAC9C,iBAAiB,EAAE,CAAC,8BAA8B,CAAC;YACnD,gBAAgB,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;SAC5D,CAAC,CAAC;IACL,CAAC;IACD,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC9B,OAAO,kBAAkB,CAAC,eAAe,EAAE;YACzC,OAAO,EAAE,gBAAgB;YACzB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,KAAK,EAAE,qBAAqB,EAAE;YAC9B,MAAM,EAAE;gBACN,SAAS,EAAE,SAAS,CAAC,MAAM;gBAC3B,aAAa,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,MAAM;gBAClF,cAAc,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,MAAM;aACnF;YACD,QAAQ,EAAE,EAAE,KAAK,EAAE,aAAa,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,aAAa,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE;YAC7F,KAAK,EAAE;gBACL,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,cAAc,EAAE,OAAO,CAAC,cAAc;gBACtC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;gBAC1C,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;aACnE;SACF,CAAC,CAAC;IACL,CAAC;IAED,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,QAAQ,CAAC,UAAU,CAAC,CAAC;IACrF,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,QAAQ,CAAC,SAAS,CAAC,aAAa,EAAE,YAAY,QAAQ,CAAC,UAAU,YAAY,CAAC,CAAC;IACxG,OAAO,kBAAkB,CAAC,wBAAwB,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;QAC/D,EAAE,EAAE,QAAQ,CAAC,EAAE;QACf,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,EAAE;KAClC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;IACE,KAAK,EAAE,cAAc;IACrB,WAAW,EAAE,2CAA2C;IACxD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;CAC1B,EACD,KAAK,IAAI,EAAE;IACT,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QAE1C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;QACnE,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QAEvC,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE;wBACJ,WAAW;wBACX,EAAE;wBACF,aAAa;wBACb,iBAAiB,MAAM,CAAC,IAAI,EAAE,EAAE;wBAChC,gBAAgB,OAAO,CAAC,QAAQ,EAAE;wBAClC,aAAa,OAAO,CAAC,cAAc,EAAE;wBACrC,eAAe,OAAO,CAAC,gBAAgB,EAAE;wBACzC,cAAc,OAAO,CAAC,MAAM,EAAE;wBAC9B,cAAc,SAAS,EAAE;wBACzB,EAAE;wBACF,YAAY;wBACZ,gBAAgB,MAAM,CAAC,QAAQ,EAAE;wBACjC,aAAa,MAAM,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE;wBACjF,MAAM,MAAM,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,UAAU,MAAM,CAAC,QAAQ,EAAE,EAAE;wBACvG,aAAa,MAAM,CAAC,SAAS,EAAE;wBAC/B,sBAAsB,MAAM,CAAC,aAAa,EAAE;wBAC5C,kBAAkB,MAAM,CAAC,SAAS,EAAE;wBACpC,mBAAmB,MAAM,CAAC,gBAAgB,WAAW,MAAM,CAAC,qBAAqB,EAAE;wBACnF,sBAAsB,MAAM,CAAC,aAAa,EAAE;qBAC7C,CAAC,IAAI,CAAC,IAAI,CAAC;iBACb;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,gBAAgB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;iBACzE;aACF;SACF,CAAC;IACJ,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;IACE,KAAK,EAAE,iBAAiB;IACxB,WAAW,EAAE,kDAAkD;IAC/D,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;QAC1C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC/D,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAChE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QAC/D,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QACxE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;KAClF,CAAC;CACH,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;IAC3D,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAE1D,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE;YACzC,KAAK;YACL,GAAG,CAAC,aAAa,KAAK,SAAS,IAAI,EAAE,aAAa,EAAE,CAAC;YACrD,MAAM,EAAE,CAAC,IAAS,EAAE,EAAE;gBACpB,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI,KAAK,IAAI;oBAAE,OAAO,KAAK,CAAC;gBAC9C,IAAI,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;oBAAE,OAAO,KAAK,CAAC;gBACrF,IAAI,WAAW,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,IAAI,EAAE,SAAS,IAAI,IAAI,CAAC,SAAS,GAAG,WAAW;oBACrG,OAAO,KAAK,CAAC;gBACf,OAAO,IAAI,CAAC;YACd,CAAC;SACF,CAAC,CAAC;QAEH,OAAO,CAAC,QAAQ,EAAE,CAAC;QACnB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAEvC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,sBAAsB,KAAK,MAAM,OAAO,KAAK;qBACpD;iBACF;aACF,CAAC;QACJ,CAAC;QAED,MAAM,SAAS,GAAG,OAAO;aACtB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACZ,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC9E,MAAM,OAAO,GACX,CAAC,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClG,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,OAAO,GAAG,OAAO,EAAE,CAAC;QAChF,CAAC,CAAC;aACD,IAAI,CAAC,MAAM,CAAC,CAAC;QAEhB,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,YAAY,OAAO,CAAC,MAAM,OAAO,OAAO,UAAU,SAAS,EAAE;iBACpE;gBACD,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;oBAC1B,IAAI,EAAE,eAAwB;oBAC9B,GAAG,EAAE,wBAAwB,CAAC,MAAM,CAAC,EAAE,CAAC;oBACxC,IAAI,EAAE,MAAM,CAAC,EAAE;oBACf,QAAQ,EAAE,kBAAkB;oBAC5B,WAAW,EAAE,qBAAqB,MAAM,CAAC,EAAE,GAAG;iBAC/C,CAAC,CAAC;aACJ;SACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;IACE,KAAK,EAAE,gBAAgB;IACvB,WAAW,EAAE,oEAAoE;IACjF,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;QACtE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QAC7C,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,mBAAmB,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;KAC7F,CAAC;CACH,EACD,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC/B,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,MAAM,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEjD,OAAO,CAAC,cAAc,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAEvC,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE;wBACJ,cAAc,EAAE,MAAM,OAAO,KAAK;wBAClC,MAAM,MAAM,CAAC,IAAI,EAAE,kBAAkB;wBACrC,eAAe,MAAM,CAAC,SAAS,EAAE;wBACjC,6BAA6B,EAAE,IAAI;qBACpC,CAAC,IAAI,CAAC,IAAI,CAAC;iBACb;aACF;SACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,sBAAsB,EACtB;IACE,KAAK,EAAE,aAAa;IACpB,WAAW,EAAE,gCAAgC;IAC7C,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,SAAS,EAAE,CAAC;aACT,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;YACP,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC;YAC9B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC;YAChC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,mBAAmB,CAAC,CAAC,QAAQ,EAAE;SAC/D,CAAC,CACH;aACA,GAAG,CAAC,SAAS,CAAC;KAClB,CAAC;CACH,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;IACtB,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,MAAM,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;QAElF,OAAO,CAAC,cAAc,IAAI,SAAS,CAAC,MAAM,CAAC;QAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAEvC,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE;wBACJ,aAAa,SAAS,CAAC,MAAM,eAAe,OAAO,KAAK;wBACxD,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,MAAM;wBAC3D,MAAM,MAAM,CAAC,IAAI,EAAE,kBAAkB;qBACtC,CAAC,IAAI,CAAC,IAAI,CAAC;iBACb;aACF;SACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;IACE,KAAK,EAAE,iBAAiB;IACxB,WAAW,EAAE,cAAc;IAC3B,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;KACf,CAAC;CACH,EACD,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IACf,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;QAC5B,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAExC,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,gBAAgB,EAAE,CAAC;QAC7B,CAAC;QAED,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,cAAc,EAAE,SAAS,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,OAAO,EAAE,aAAa;iBAC5F;aACF;SACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;IACE,KAAK,EAAE,aAAa;IACpB,WAAW,EAAE,4BAA4B;IACzC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;CAC1B,EACD,KAAK,IAAI,EAAE,CAAC,CAAC;IACX,OAAO,EAAE;QACP;YACE,IAAI,EAAE,MAAe;YACrB,IAAI,EAAE;gBACJ,gBAAgB;gBAChB,EAAE;gBACF,cAAc,MAAM,CAAC,IAAI,EAAE,EAAE;gBAC7B,aAAa,MAAM,CAAC,QAAQ,EAAE;gBAC9B,UAAU,MAAM,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE;gBAC9E,UAAU,MAAM,CAAC,SAAS,EAAE;gBAC5B,mBAAmB,MAAM,CAAC,aAAa,EAAE;gBACzC,EAAE;gBACF,WAAW;gBACX,kBAAkB,MAAM,CAAC,SAAS,EAAE;gBACpC,qBAAqB,MAAM,CAAC,gBAAgB,EAAE;gBAC9C,qBAAqB,MAAM,CAAC,qBAAqB,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,KAAK,EAAE;gBAC9F,sBAAsB,MAAM,CAAC,aAAa,EAAE;gBAC5C,EAAE;gBACF,QAAQ;gBACR,gBAAgB,OAAO,CAAC,QAAQ,EAAE;gBAClC,aAAa,OAAO,CAAC,cAAc,EAAE;gBACrC,eAAe,OAAO,CAAC,gBAAgB,EAAE;gBACzC,cAAc,OAAO,CAAC,MAAM,EAAE;aAC/B,CAAC,IAAI,CAAC,IAAI,CAAC;SACb;KACF;CACF,CAAC,CACH,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;IACE,KAAK,EAAE,aAAa;IACpB,WAAW,EAAE,qCAAqC;IAClD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;KAC9C,CAAC;CACH,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;IACpB,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,4CAA4C;iBACnD;aACF;SACF,CAAC;IACJ,CAAC;IAED,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;QAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAC5B,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QAErB,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,aAAa,KAAK,2BAA2B,MAAM,CAAC,SAAS,EAAE;iBACtE;aACF;SACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CACF,CAAC;AAEF,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAEhC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;IACnB,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;AAClC,CAAC"}
@@ -0,0 +1,10 @@
1
+ export declare const RESOURCE_URI_SCHEME = "semantic-search";
2
+ export declare const RESOURCE_URI_HOST = "indexes";
3
+ export declare const DEFAULT_INDEX_ID = "default";
4
+ export declare function buildIndexBaseUri(indexId?: string): string;
5
+ export declare function buildDocumentResourceUri(documentId: string, indexId?: string): string;
6
+ export declare const INDEX_MANIFEST_URI: string;
7
+ export declare const INDEX_STATS_URI: string;
8
+ export declare const DOCUMENT_RESOURCE_TEMPLATE_URI = "semantic-search://indexes/{indexId}/documents/{documentId}";
9
+ export declare const REGISTERED_RESOURCE_URIS: readonly [string, string];
10
+ //# sourceMappingURL=product.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"product.d.ts","sourceRoot":"","sources":["../src/product.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,oBAAoB,CAAC;AACrD,eAAO,MAAM,iBAAiB,YAAY,CAAC;AAC3C,eAAO,MAAM,gBAAgB,YAAY,CAAC;AAE1C,wBAAgB,iBAAiB,CAAC,OAAO,SAAmB,GAAG,MAAM,CAEpE;AAED,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,SAAmB,GAAG,MAAM,CAE/F;AAED,eAAO,MAAM,kBAAkB,QAAoC,CAAC;AACpE,eAAO,MAAM,eAAe,QAAiC,CAAC;AAC9D,eAAO,MAAM,8BAA8B,+DAAmF,CAAC;AAC/H,eAAO,MAAM,wBAAwB,2BAAiD,CAAC"}
@@ -0,0 +1,14 @@
1
+ export const RESOURCE_URI_SCHEME = 'semantic-search';
2
+ export const RESOURCE_URI_HOST = 'indexes';
3
+ export const DEFAULT_INDEX_ID = 'default';
4
+ export function buildIndexBaseUri(indexId = DEFAULT_INDEX_ID) {
5
+ return `${RESOURCE_URI_SCHEME}://${RESOURCE_URI_HOST}/${encodeURIComponent(indexId)}`;
6
+ }
7
+ export function buildDocumentResourceUri(documentId, indexId = DEFAULT_INDEX_ID) {
8
+ return `${buildIndexBaseUri(indexId)}/documents/${encodeURIComponent(documentId)}`;
9
+ }
10
+ export const INDEX_MANIFEST_URI = `${buildIndexBaseUri()}/manifest`;
11
+ export const INDEX_STATS_URI = `${buildIndexBaseUri()}/stats`;
12
+ export const DOCUMENT_RESOURCE_TEMPLATE_URI = `${RESOURCE_URI_SCHEME}://${RESOURCE_URI_HOST}/{indexId}/documents/{documentId}`;
13
+ export const REGISTERED_RESOURCE_URIS = [INDEX_MANIFEST_URI, INDEX_STATS_URI];
14
+ //# sourceMappingURL=product.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"product.js","sourceRoot":"","sources":["../src/product.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG,iBAAiB,CAAC;AACrD,MAAM,CAAC,MAAM,iBAAiB,GAAG,SAAS,CAAC;AAC3C,MAAM,CAAC,MAAM,gBAAgB,GAAG,SAAS,CAAC;AAE1C,MAAM,UAAU,iBAAiB,CAAC,OAAO,GAAG,gBAAgB;IAC1D,OAAO,GAAG,mBAAmB,MAAM,iBAAiB,IAAI,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;AACxF,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,UAAkB,EAAE,OAAO,GAAG,gBAAgB;IACrF,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,cAAc,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAAC;AACrF,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,iBAAiB,EAAE,WAAW,CAAC;AACpE,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,iBAAiB,EAAE,QAAQ,CAAC;AAC9D,MAAM,CAAC,MAAM,8BAA8B,GAAG,GAAG,mBAAmB,MAAM,iBAAiB,mCAAmC,CAAC;AAC/H,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,kBAAkB,EAAE,eAAe,CAAU,CAAC"}
package/package.json CHANGED
@@ -1,74 +1,89 @@
1
- {
2
- "name": "@nacho-labs/mcp-semantic-search",
3
- "version": "0.3.1",
4
- "description": "MCP server for semantic search — give Claude Code, Cursor, and other AI tools persistent memory via local Transformers.js or AWS Bedrock embeddings",
5
- "type": "module",
6
- "main": "./dist/index.js",
7
- "types": "./dist/index.d.ts",
8
- "bin": {
9
- "mcp-semantic-search": "./dist/index.js"
10
- },
11
- "exports": {
12
- ".": {
13
- "types": "./dist/index.d.ts",
14
- "import": "./dist/index.js"
15
- }
16
- },
17
- "files": [
18
- "dist",
19
- "server.json",
20
- "README.md",
21
- "LICENSE"
22
- ],
23
- "scripts": {
24
- "build": "tsc",
25
- "dev": "tsc --watch",
26
- "start": "node dist/index.js",
27
- "typecheck": "tsc --noEmit",
28
- "clean": "rm -rf dist *.tsbuildinfo",
29
- "prepublishOnly": "npm run build",
30
- "version:patch": "npm version patch",
31
- "version:minor": "npm version minor",
32
- "version:major": "npm version major",
33
- "publish:npm": "npm publish --access public",
34
- "release:patch": "npm run version:patch && npm run publish:npm",
35
- "release:minor": "npm run version:minor && npm run publish:npm",
36
- "release:major": "npm run version:major && npm run publish:npm"
37
- },
38
- "keywords": [
39
- "mcp",
40
- "model-context-protocol",
41
- "semantic-search",
42
- "embeddings",
43
- "vector-search",
44
- "claude",
45
- "claude-code",
46
- "ai-memory",
47
- "local",
48
- "privacy",
49
- "bedrock",
50
- "aws"
51
- ],
52
- "author": "Nate Richardson <hello@naterichardson.com> (https://naterichardson.com)",
53
- "license": "MIT",
54
- "engines": {
55
- "node": ">=18.0.0"
56
- },
57
- "repository": {
58
- "type": "git",
59
- "url": "git+https://github.com/nacho-labs-llc/mcp-semantic-search.git"
60
- },
61
- "dependencies": {
62
- "@modelcontextprotocol/sdk": "^1.0.0",
63
- "@nacho-labs/nachos-embeddings": "^0.4.1",
64
- "zod": "^3.23.0"
65
- },
66
- "optionalDependencies": {
67
- "@aws-sdk/client-bedrock-runtime": "^3.0.0"
68
- },
69
- "devDependencies": {
70
- "@aws-sdk/client-bedrock-runtime": "^3.0.0",
71
- "@types/node": "^22.0.0",
72
- "typescript": "^5.7.0"
73
- }
74
- }
1
+ {
2
+ "name": "@nacho-labs/mcp-semantic-search",
3
+ "version": "0.4.0",
4
+ "description": "MCP server for semantic search — give Claude Code, Cursor, and other AI tools persistent memory via local Transformers.js or AWS Bedrock embeddings",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "bin": {
9
+ "mcp-semantic-search": "dist/index.js"
10
+ },
11
+ "exports": {
12
+ ".": {
13
+ "types": "./dist/index.d.ts",
14
+ "import": "./dist/index.js"
15
+ }
16
+ },
17
+ "files": [
18
+ "dist",
19
+ "server.json",
20
+ "README.md",
21
+ "LICENSE"
22
+ ],
23
+ "scripts": {
24
+ "build": "tsc",
25
+ "dev": "tsc --watch",
26
+ "start": "node dist/index.js",
27
+ "typecheck": "tsc --noEmit",
28
+ "lint": "eslint .",
29
+ "format": "prettier --write .",
30
+ "format:check": "prettier --check .",
31
+ "test:unit": "node --test test/integration-support.test.mjs test/release-contract.test.mjs",
32
+ "test:integration": "npm run build && node --test test/stdio-smoke.test.mjs",
33
+ "test": "npm run test:unit",
34
+ "clean": "rm -rf dist *.tsbuildinfo",
35
+ "prepublishOnly": "npm run build",
36
+ "version:patch": "npm version patch",
37
+ "version:minor": "npm version minor",
38
+ "version:major": "npm version major",
39
+ "publish:npm": "npm publish --access public",
40
+ "release:patch": "npm run version:patch && npm run publish:npm",
41
+ "release:minor": "npm run version:minor && npm run publish:npm",
42
+ "release:major": "npm run version:major && npm run publish:npm"
43
+ },
44
+ "keywords": [
45
+ "mcp",
46
+ "model-context-protocol",
47
+ "semantic-search",
48
+ "embeddings",
49
+ "vector-search",
50
+ "claude",
51
+ "claude-code",
52
+ "ai-memory",
53
+ "local",
54
+ "privacy",
55
+ "bedrock",
56
+ "aws"
57
+ ],
58
+ "author": "Nate Richardson <hello@naterichardson.com> (https://naterichardson.com)",
59
+ "license": "MIT",
60
+ "engines": {
61
+ "node": ">=20.9.0"
62
+ },
63
+ "repository": {
64
+ "type": "git",
65
+ "url": "git+https://github.com/Nacho-Labs-LLC/mcp-semantic-search.git"
66
+ },
67
+ "dependencies": {
68
+ "@modelcontextprotocol/sdk": "^1.30.0",
69
+ "@nacho-labs/nachos-embeddings": "^0.5.1",
70
+ "zod": "^4.4.3"
71
+ },
72
+ "optionalDependencies": {
73
+ "@aws-sdk/client-bedrock-runtime": "^3.1101.0"
74
+ },
75
+ "overrides": {
76
+ "adm-zip": "0.6.0",
77
+ "sharp": "0.35.3"
78
+ },
79
+ "devDependencies": {
80
+ "@aws-sdk/client-bedrock-runtime": "^3.1101.0",
81
+ "@babel/core": "^8.0.1",
82
+ "@babel/eslint-parser": "^8.0.1",
83
+ "@eslint/js": "^10.0.1",
84
+ "@types/node": "^26.1.2",
85
+ "eslint": "^10.9.0",
86
+ "prettier": "^3.9.6",
87
+ "typescript": "^7.0.2"
88
+ }
89
+ }
package/server.json CHANGED
@@ -1,44 +1,86 @@
1
- {
2
- "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
3
- "name": "io.github.nacho-labs-llc/mcp-semantic-search",
4
- "description": "Local semantic search for AI coding tools. Index decisions, patterns, and context — recall them by meaning, not keywords. Powered by nachos-embeddings (Transformers.js). No API keys, no cloud, no costs.",
5
- "title": "Semantic Search MCP Server",
6
- "version": "0.1.0",
7
- "repository": {
8
- "url": "https://github.com/nacho-labs-llc/mcp-semantic-search",
9
- "source": "github"
10
- },
11
- "packages": [
12
- {
13
- "registryType": "npm",
14
- "identifier": "@nacho-labs/mcp-semantic-search",
15
- "version": "0.1.0",
16
- "transport": {
17
- "type": "stdio"
18
- },
19
- "environmentVariables": [
20
- {
21
- "name": "MCP_SEMANTIC_STORE",
22
- "description": "Path to the JSON file where the index is persisted. Defaults to .semantic-store.json in the working directory.",
23
- "isRequired": false,
24
- "isSecret": false,
25
- "format": "string"
26
- },
27
- {
28
- "name": "MCP_SEMANTIC_SIMILARITY",
29
- "description": "Minimum similarity threshold (0-1). Defaults to 0.6.",
30
- "isRequired": false,
31
- "isSecret": false,
32
- "format": "string"
33
- },
34
- {
35
- "name": "MCP_SEMANTIC_MODEL",
36
- "description": "Embedding model to use. Defaults to Xenova/all-MiniLM-L6-v2.",
37
- "isRequired": false,
38
- "isSecret": false,
39
- "format": "string"
40
- }
41
- ]
42
- }
43
- ]
44
- }
1
+ {
2
+ "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
3
+ "name": "io.github.nacho-labs-llc/mcp-semantic-search",
4
+ "description": "Local semantic search for AI coding tools. Index decisions, patterns, and context — recall them by meaning, not keywords. Powered by nachos-embeddings (Transformers.js). No API keys, no cloud, no costs.",
5
+ "title": "Semantic Search MCP Server",
6
+ "version": "0.3.2",
7
+ "repository": {
8
+ "url": "https://github.com/nacho-labs-llc/mcp-semantic-search",
9
+ "source": "github"
10
+ },
11
+ "packages": [
12
+ {
13
+ "registryType": "npm",
14
+ "identifier": "@nacho-labs/mcp-semantic-search",
15
+ "version": "0.3.2",
16
+ "transport": {
17
+ "type": "stdio"
18
+ },
19
+ "environmentVariables": [
20
+ {
21
+ "name": "MCP_SEMANTIC_STORE",
22
+ "description": "Path to the JSON file where the index is persisted. Defaults to .semantic-store.json in the working directory.",
23
+ "isRequired": false,
24
+ "isSecret": false,
25
+ "format": "string"
26
+ },
27
+ {
28
+ "name": "MCP_SEMANTIC_SIMILARITY",
29
+ "description": "Minimum similarity threshold (0-1). Defaults to 0.4.",
30
+ "isRequired": false,
31
+ "isSecret": false,
32
+ "format": "string"
33
+ },
34
+ {
35
+ "name": "MCP_SEMANTIC_MODEL",
36
+ "description": "Embedding model to use. Defaults to Xenova/all-MiniLM-L6-v2.",
37
+ "isRequired": false,
38
+ "isSecret": false,
39
+ "format": "string"
40
+ },
41
+ {
42
+ "name": "MCP_SEMANTIC_CACHE_DIR",
43
+ "description": "Model cache directory. Defaults to .cache/transformers.",
44
+ "isRequired": false,
45
+ "isSecret": false,
46
+ "format": "string"
47
+ },
48
+ {
49
+ "name": "MCP_SEMANTIC_PROVIDER",
50
+ "description": "Embedding provider: transformers or bedrock. Defaults to transformers.",
51
+ "isRequired": false,
52
+ "isSecret": false,
53
+ "format": "string"
54
+ },
55
+ {
56
+ "name": "MCP_SEMANTIC_BEDROCK_REGION",
57
+ "description": "AWS region for the Bedrock provider. Defaults to us-east-1.",
58
+ "isRequired": false,
59
+ "isSecret": false,
60
+ "format": "string"
61
+ },
62
+ {
63
+ "name": "MCP_SEMANTIC_BEDROCK_MODEL",
64
+ "description": "Bedrock embedding model ID. Defaults to amazon.titan-embed-text-v2:0.",
65
+ "isRequired": false,
66
+ "isSecret": false,
67
+ "format": "string"
68
+ },
69
+ {
70
+ "name": "MCP_SEMANTIC_BEDROCK_PROFILE",
71
+ "description": "Optional AWS shared-credentials profile name for Bedrock.",
72
+ "isRequired": false,
73
+ "isSecret": false,
74
+ "format": "string"
75
+ },
76
+ {
77
+ "name": "MCP_SEMANTIC_BEDROCK_DIMENSIONS",
78
+ "description": "Optional Bedrock embedding dimensions override. Defaults to 1024.",
79
+ "isRequired": false,
80
+ "isSecret": false,
81
+ "format": "string"
82
+ }
83
+ ]
84
+ }
85
+ ]
86
+ }