cursor-recursive-rag 0.2.0-alpha.2 → 0.2.0-alpha.3
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 +47 -18
- package/dist/adapters/vector/index.d.ts.map +1 -1
- package/dist/adapters/vector/index.js +8 -0
- package/dist/adapters/vector/index.js.map +1 -1
- package/dist/adapters/vector/redis-native.d.ts +35 -0
- package/dist/adapters/vector/redis-native.d.ts.map +1 -0
- package/dist/adapters/vector/redis-native.js +170 -0
- package/dist/adapters/vector/redis-native.js.map +1 -0
- package/dist/cli/commands/setup.js +5 -4
- package/dist/cli/commands/setup.js.map +1 -1
- package/dist/dashboard/public/index.html +72 -2
- package/dist/dashboard/server.d.ts +1 -8
- package/dist/dashboard/server.d.ts.map +1 -1
- package/dist/dashboard/server.js +4 -13
- package/dist/dashboard/server.js.map +1 -1
- package/dist/server/tools/crawl.d.ts.map +1 -1
- package/dist/server/tools/crawl.js +8 -0
- package/dist/server/tools/crawl.js.map +1 -1
- package/dist/server/tools/ingest.d.ts.map +1 -1
- package/dist/server/tools/ingest.js +5 -0
- package/dist/server/tools/ingest.js.map +1 -1
- package/dist/server/tools/recursive-query.d.ts.map +1 -1
- package/dist/server/tools/recursive-query.js +6 -0
- package/dist/server/tools/recursive-query.js.map +1 -1
- package/dist/server/tools/search.d.ts.map +1 -1
- package/dist/server/tools/search.js +6 -0
- package/dist/server/tools/search.js.map +1 -1
- package/dist/services/activity-log.d.ts +10 -0
- package/dist/services/activity-log.d.ts.map +1 -0
- package/dist/services/activity-log.js +53 -0
- package/dist/services/activity-log.js.map +1 -0
- package/dist/types/index.d.ts +2 -1
- package/dist/types/index.d.ts.map +1 -1
- package/docs/cursor-recursive-rag-memory-spec.md +4275 -0
- package/docs/cursor-recursive-rag-tasks.md +512 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -12,11 +12,12 @@ Recursive RAG MCP server for Cursor IDE with interactive setup wizard and web da
|
|
|
12
12
|
## Features
|
|
13
13
|
|
|
14
14
|
- **Recursive Query**: Multi-hop retrieval with query decomposition and iterative refinement
|
|
15
|
-
- **Configurable Vector Stores**: Redis Stack (
|
|
15
|
+
- **Configurable Vector Stores**: Redis Stack (Docker), Redis 8.x Native (Homebrew), Qdrant (local/cloud), ChromaDB, Cloudflare Vectorize
|
|
16
16
|
- **Configurable Embeddings**: Local (Xenova/transformers.js), OpenAI, Ollama
|
|
17
17
|
- **Web Crawling**: Firecrawl integration for documentation ingestion
|
|
18
18
|
- **Rotating Proxy Support**: Optional PacketStream/SmartProxy integration for URL fetching
|
|
19
|
-
- **Web Dashboard**: Real-time monitoring, search, and configuration UI (Tailwind CSS)
|
|
19
|
+
- **Web Dashboard**: Real-time monitoring, search, activity logging, and configuration UI (Tailwind CSS)
|
|
20
|
+
- **Activity Logging**: Persistent activity log across MCP tools and dashboard (stored in `~/.cursor-rag/activity.json`)
|
|
20
21
|
- **Interactive Setup**: Guided configuration wizard
|
|
21
22
|
- **MCP Integration**: Automatic registration with Cursor IDE
|
|
22
23
|
- **MCP Gateway Integration**: Connect to [MCP Gateway](https://github.com/abdullah1854/MCPGateway) for 87+ aggregated tools with token optimization
|
|
@@ -69,12 +70,13 @@ npm link # Makes cursor-rag available globally
|
|
|
69
70
|
|
|
70
71
|
Run `cursor-rag setup` to configure the system. The wizard will:
|
|
71
72
|
|
|
72
|
-
1. **Select Vector Store
|
|
73
|
-
- **Redis Stack** (default):
|
|
73
|
+
1. **Select Vector Store**:
|
|
74
|
+
- **Redis Stack** (default): Docker-based with RediSearch module, `docker run -p 6379:6379 redis/redis-stack-server`
|
|
75
|
+
- **Redis 8.x Native**: Homebrew/native Redis 8.x with VADD/VSIM commands, `brew install redis`
|
|
74
76
|
- **Qdrant**: Persistent, local Docker or cloud, `docker run -p 6333:6333 qdrant/qdrant`
|
|
75
|
-
- **Memory**: In-process,
|
|
77
|
+
- **Memory**: In-process, file-based persistence (testing/development)
|
|
76
78
|
- **ChromaDB**: Requires separate server, `docker run -p 8000:8000 chromadb/chroma`
|
|
77
|
-
- **Cloudflare Vectorize**: Serverless (
|
|
79
|
+
- **Cloudflare Vectorize**: Serverless (requires Cloudflare account)
|
|
78
80
|
|
|
79
81
|
2. **Select Embedding Model**:
|
|
80
82
|
- **Xenova (local)**: Free, private, ~384 dimensions
|
|
@@ -145,10 +147,12 @@ cursor-rag dashboard --port 8080
|
|
|
145
147
|
```
|
|
146
148
|
|
|
147
149
|
The dashboard provides:
|
|
148
|
-
- **Overview**: Total chunks, vector store stats,
|
|
150
|
+
- **Overview**: Total chunks, vector store stats, MCP Gateway status, OpenSkills count
|
|
149
151
|
- **Search**: Test queries against your knowledge base
|
|
150
|
-
- **
|
|
151
|
-
- **
|
|
152
|
+
- **MCP Gateway**: Browse and search 87+ aggregated tools from connected backends
|
|
153
|
+
- **OpenSkills**: Browse and search installed skills
|
|
154
|
+
- **Activity Log**: Persistent activity log showing all searches, ingestions, and crawls (shared with MCP tools)
|
|
155
|
+
- **Settings**: Configure vector store (Redis Stack, Redis 8.x, Qdrant, ChromaDB, etc.), embeddings, and proxy settings
|
|
152
156
|
|
|
153
157
|
## Usage in Cursor
|
|
154
158
|
|
|
@@ -191,26 +195,48 @@ Configuration is stored in `~/.cursor-rag/config.json`:
|
|
|
191
195
|
|
|
192
196
|
```json
|
|
193
197
|
{
|
|
194
|
-
"vectorStore": "
|
|
198
|
+
"vectorStore": "redis-stack",
|
|
195
199
|
"embeddings": "xenova",
|
|
196
200
|
"apiKeys": {
|
|
197
|
-
"firecrawl": "fc-..."
|
|
201
|
+
"firecrawl": "fc-...",
|
|
202
|
+
"redis": {
|
|
203
|
+
"url": "redis://localhost:6379"
|
|
204
|
+
}
|
|
198
205
|
},
|
|
199
206
|
"proxy": {
|
|
200
|
-
"enabled":
|
|
201
|
-
"driver": "
|
|
202
|
-
"host": "proxy.packetstream.io",
|
|
203
|
-
"port": 31112,
|
|
204
|
-
"username": "your-username",
|
|
205
|
-
"password": "your-password"
|
|
207
|
+
"enabled": false,
|
|
208
|
+
"driver": "none"
|
|
206
209
|
},
|
|
207
210
|
"dashboard": {
|
|
208
211
|
"enabled": true,
|
|
209
212
|
"port": 3333
|
|
213
|
+
},
|
|
214
|
+
"mcpGateway": {
|
|
215
|
+
"enabled": true,
|
|
216
|
+
"url": "http://localhost:3010"
|
|
217
|
+
},
|
|
218
|
+
"openSkills": {
|
|
219
|
+
"enabled": true,
|
|
220
|
+
"autoIngestSkills": true
|
|
210
221
|
}
|
|
211
222
|
}
|
|
212
223
|
```
|
|
213
224
|
|
|
225
|
+
### Vector Store Options
|
|
226
|
+
|
|
227
|
+
| Type | Description | Setup |
|
|
228
|
+
|------|-------------|-------|
|
|
229
|
+
| `redis-stack` | Redis Stack with RediSearch module (Docker) | `docker run -d -p 6379:6379 redis/redis-stack-server` |
|
|
230
|
+
| `redis` | Redis 8.x native vectors (Homebrew) | `brew install redis && brew services start redis` |
|
|
231
|
+
| `qdrant` | Qdrant vector database | `docker run -d -p 6333:6333 qdrant/qdrant` |
|
|
232
|
+
| `chroma` | ChromaDB | `docker run -d -p 8000:8000 chromadb/chroma` |
|
|
233
|
+
| `memory` | In-memory with file persistence | No setup required |
|
|
234
|
+
| `vectorize` | Cloudflare Vectorize | Requires Cloudflare account |
|
|
235
|
+
|
|
236
|
+
### Activity Logging
|
|
237
|
+
|
|
238
|
+
All operations (searches, ingestions, crawls) are logged to `~/.cursor-rag/activity.json`. This log is shared between the MCP server and dashboard, so activities from Cursor IDE chats will appear in the dashboard's Activity tab.
|
|
239
|
+
|
|
214
240
|
### Proxy Configuration
|
|
215
241
|
|
|
216
242
|
The optional rotating proxy is used for direct URL fetching (not needed when using Firecrawl, which handles proxying internally). Supported providers:
|
|
@@ -300,7 +326,10 @@ cursor-recursive-rag/
|
|
|
300
326
|
|
|
301
327
|
- Node.js >= 20.0.0
|
|
302
328
|
- Cursor IDE (for MCP integration)
|
|
303
|
-
-
|
|
329
|
+
- One of the following vector stores:
|
|
330
|
+
- Docker (for Redis Stack, Qdrant, ChromaDB)
|
|
331
|
+
- Redis 8.x (via Homebrew: `brew install redis`)
|
|
332
|
+
- Memory adapter (no dependencies, for testing)
|
|
304
333
|
- Optional: Ollama (for local embeddings)
|
|
305
334
|
|
|
306
335
|
## API Keys
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/vector/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/vector/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAOrG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC;AAEpE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,WAAW,CAsB9E"}
|
|
@@ -3,6 +3,7 @@ import { QdrantAdapter } from './qdrant.js';
|
|
|
3
3
|
import { VectorizeAdapter } from './vectorize.js';
|
|
4
4
|
import { MemoryAdapter } from './memory.js';
|
|
5
5
|
import { RedisAdapter } from './redis.js';
|
|
6
|
+
import { RedisNativeAdapter } from './redis-native.js';
|
|
6
7
|
export function createVectorStore(type, config) {
|
|
7
8
|
switch (type) {
|
|
8
9
|
case 'memory':
|
|
@@ -12,6 +13,13 @@ export function createVectorStore(type, config) {
|
|
|
12
13
|
case 'qdrant':
|
|
13
14
|
return new QdrantAdapter(config);
|
|
14
15
|
case 'redis':
|
|
16
|
+
// Use native Redis 8.x adapter by default, fall back to RediSearch if specified
|
|
17
|
+
if (config.vectorStoreConfig?.useRediSearch) {
|
|
18
|
+
return new RedisAdapter(config);
|
|
19
|
+
}
|
|
20
|
+
return new RedisNativeAdapter(config);
|
|
21
|
+
case 'redis-stack':
|
|
22
|
+
// Explicit Redis Stack/RediSearch adapter
|
|
15
23
|
return new RedisAdapter(config);
|
|
16
24
|
case 'vectorize':
|
|
17
25
|
return new VectorizeAdapter(config);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/vector/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/vector/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAKvD,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,MAAiB;IAC/D,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,QAAQ;YACX,OAAO,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;QACnC,KAAK,QAAQ;YACX,OAAO,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;QACnC,KAAK,QAAQ;YACX,OAAO,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;QACnC,KAAK,OAAO;YACV,gFAAgF;YAChF,IAAI,MAAM,CAAC,iBAAiB,EAAE,aAAa,EAAE,CAAC;gBAC5C,OAAO,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC;YAClC,CAAC;YACD,OAAO,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACxC,KAAK,aAAa;YAChB,0CAA0C;YAC1C,OAAO,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC;QAClC,KAAK,WAAW;YACd,OAAO,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACtC;YACE,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { VectorStore, VectorDocument, SearchResult, SearchOptions } from '../../types/index.js';
|
|
2
|
+
import type { RAGConfig } from '../../types/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* Redis 8.x Native Vector Adapter
|
|
5
|
+
*
|
|
6
|
+
* Uses Redis 8.x native vector commands (VADD, VSIM, VREM, VCARD).
|
|
7
|
+
* Works with standard Redis 8.x installed via Homebrew or other methods.
|
|
8
|
+
*
|
|
9
|
+
* Command syntax (Redis 8.x):
|
|
10
|
+
* - VADD key VALUES dim v1 v2 ... vN element [CAS] [NOQUANT|BIN|Q8]
|
|
11
|
+
* - VSIM key VALUES dim v1 v2 ... vN [WITHSCORES] [COUNT count]
|
|
12
|
+
* - VREM key element [element ...]
|
|
13
|
+
* - VCARD key
|
|
14
|
+
*
|
|
15
|
+
* Features:
|
|
16
|
+
* - Persistent storage
|
|
17
|
+
* - HNSW index for approximate nearest neighbor search
|
|
18
|
+
* - No additional modules required (uses native Redis 8.x vector support)
|
|
19
|
+
*/
|
|
20
|
+
export declare class RedisNativeAdapter implements VectorStore {
|
|
21
|
+
private client;
|
|
22
|
+
private setName;
|
|
23
|
+
private metadataPrefix;
|
|
24
|
+
private vectorDim;
|
|
25
|
+
private isConnected;
|
|
26
|
+
private redisUrl;
|
|
27
|
+
constructor(config: RAGConfig);
|
|
28
|
+
private initialize;
|
|
29
|
+
add(docs: VectorDocument[]): Promise<void>;
|
|
30
|
+
search(embedding: number[], options: SearchOptions): Promise<SearchResult[]>;
|
|
31
|
+
delete(ids: string[]): Promise<void>;
|
|
32
|
+
count(): Promise<number>;
|
|
33
|
+
disconnect(): Promise<void>;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=redis-native.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redis-native.d.ts","sourceRoot":"","sources":["../../../src/adapters/vector/redis-native.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAItD;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,kBAAmB,YAAW,WAAW;IACpD,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,cAAc,CAAsB;IAC5C,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAS;gBAEb,MAAM,EAAE,SAAS;YAUf,UAAU;IAgBlB,GAAG,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAuC1C,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAqE5E,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAapC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAWxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAMlC"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import { createClient } from 'redis';
|
|
2
|
+
/**
|
|
3
|
+
* Redis 8.x Native Vector Adapter
|
|
4
|
+
*
|
|
5
|
+
* Uses Redis 8.x native vector commands (VADD, VSIM, VREM, VCARD).
|
|
6
|
+
* Works with standard Redis 8.x installed via Homebrew or other methods.
|
|
7
|
+
*
|
|
8
|
+
* Command syntax (Redis 8.x):
|
|
9
|
+
* - VADD key VALUES dim v1 v2 ... vN element [CAS] [NOQUANT|BIN|Q8]
|
|
10
|
+
* - VSIM key VALUES dim v1 v2 ... vN [WITHSCORES] [COUNT count]
|
|
11
|
+
* - VREM key element [element ...]
|
|
12
|
+
* - VCARD key
|
|
13
|
+
*
|
|
14
|
+
* Features:
|
|
15
|
+
* - Persistent storage
|
|
16
|
+
* - HNSW index for approximate nearest neighbor search
|
|
17
|
+
* - No additional modules required (uses native Redis 8.x vector support)
|
|
18
|
+
*/
|
|
19
|
+
export class RedisNativeAdapter {
|
|
20
|
+
client;
|
|
21
|
+
setName = 'cursor-rag-vectors';
|
|
22
|
+
metadataPrefix = 'cursor-rag:meta:';
|
|
23
|
+
vectorDim;
|
|
24
|
+
isConnected = false;
|
|
25
|
+
redisUrl;
|
|
26
|
+
constructor(config) {
|
|
27
|
+
this.redisUrl = config.apiKeys?.redis?.url || config.vectorStoreConfig?.redisUrl || 'redis://localhost:6379';
|
|
28
|
+
this.vectorDim = config.vectorStoreConfig?.vectorDim || 384;
|
|
29
|
+
this.client = createClient({ url: this.redisUrl });
|
|
30
|
+
this.client.on('error', (err) => {
|
|
31
|
+
console.error('Redis Client Error:', err.message);
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
async initialize() {
|
|
35
|
+
if (!this.isConnected) {
|
|
36
|
+
try {
|
|
37
|
+
await this.client.connect();
|
|
38
|
+
this.isConnected = true;
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
const err = error;
|
|
42
|
+
throw new Error(`Failed to connect to Redis at ${this.redisUrl}. ` +
|
|
43
|
+
`Ensure Redis 8.x is running.\n` +
|
|
44
|
+
`Error: ${err.message}`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
async add(docs) {
|
|
49
|
+
await this.initialize();
|
|
50
|
+
for (const doc of docs) {
|
|
51
|
+
// VADD key VALUES dim v1 v2 ... vN element
|
|
52
|
+
// Build command: VADD cursor-rag-vectors VALUES 384 0.1 0.2 ... element_id
|
|
53
|
+
const cmd = [
|
|
54
|
+
'VADD',
|
|
55
|
+
this.setName,
|
|
56
|
+
'VALUES',
|
|
57
|
+
doc.embedding.length.toString(),
|
|
58
|
+
...doc.embedding.map(v => v.toString()),
|
|
59
|
+
doc.id
|
|
60
|
+
];
|
|
61
|
+
try {
|
|
62
|
+
await this.client.sendCommand(cmd);
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
const err = error;
|
|
66
|
+
if (err.message?.includes('unknown command')) {
|
|
67
|
+
throw new Error('Redis native vector commands not available. ' +
|
|
68
|
+
'Ensure you have Redis 8.x with vector support or use Redis Stack.');
|
|
69
|
+
}
|
|
70
|
+
throw error;
|
|
71
|
+
}
|
|
72
|
+
// Store metadata separately
|
|
73
|
+
const metadataKey = `${this.metadataPrefix}${doc.id}`;
|
|
74
|
+
await this.client.hSet(metadataKey, {
|
|
75
|
+
id: doc.id,
|
|
76
|
+
content: doc.content,
|
|
77
|
+
source: doc.metadata?.source || 'unknown',
|
|
78
|
+
metadata: JSON.stringify(doc.metadata || {})
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
async search(embedding, options) {
|
|
83
|
+
await this.initialize();
|
|
84
|
+
const topK = options.topK || 10;
|
|
85
|
+
try {
|
|
86
|
+
// VSIM key VALUES dim v1 v2 ... vN COUNT count WITHSCORES
|
|
87
|
+
const cmd = [
|
|
88
|
+
'VSIM',
|
|
89
|
+
this.setName,
|
|
90
|
+
'VALUES',
|
|
91
|
+
embedding.length.toString(),
|
|
92
|
+
...embedding.map(v => v.toString()),
|
|
93
|
+
'COUNT', topK.toString(),
|
|
94
|
+
'WITHSCORES'
|
|
95
|
+
];
|
|
96
|
+
const results = await this.client.sendCommand(cmd);
|
|
97
|
+
if (!results || results.length === 0) {
|
|
98
|
+
return [];
|
|
99
|
+
}
|
|
100
|
+
// Results come as [id1, score1, id2, score2, ...]
|
|
101
|
+
const searchResults = [];
|
|
102
|
+
for (let i = 0; i < results.length; i += 2) {
|
|
103
|
+
const id = results[i];
|
|
104
|
+
const score = parseFloat(results[i + 1]);
|
|
105
|
+
// Get metadata
|
|
106
|
+
const metadataKey = `${this.metadataPrefix}${id}`;
|
|
107
|
+
const metadataRaw = await this.client.hGetAll(metadataKey);
|
|
108
|
+
if (metadataRaw && metadataRaw.content) {
|
|
109
|
+
let metadata = { source: metadataRaw.source || 'unknown' };
|
|
110
|
+
try {
|
|
111
|
+
metadata = JSON.parse(metadataRaw.metadata || '{}');
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
// Keep default
|
|
115
|
+
}
|
|
116
|
+
// Apply source filter if specified
|
|
117
|
+
if (options.filter?.source) {
|
|
118
|
+
const allowedSources = Array.isArray(options.filter.source.$in)
|
|
119
|
+
? options.filter.source.$in
|
|
120
|
+
: [options.filter.source];
|
|
121
|
+
if (!allowedSources.includes(metadata.source)) {
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
searchResults.push({
|
|
126
|
+
id,
|
|
127
|
+
content: metadataRaw.content,
|
|
128
|
+
metadata,
|
|
129
|
+
score // Redis 8 VSIM returns similarity score directly (1 = identical)
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return searchResults;
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
const err = error;
|
|
137
|
+
console.error('Redis native search error:', err.message);
|
|
138
|
+
return [];
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
async delete(ids) {
|
|
142
|
+
await this.initialize();
|
|
143
|
+
for (const id of ids) {
|
|
144
|
+
try {
|
|
145
|
+
await this.client.sendCommand(['VREM', this.setName, id]);
|
|
146
|
+
await this.client.del(`${this.metadataPrefix}${id}`);
|
|
147
|
+
}
|
|
148
|
+
catch (error) {
|
|
149
|
+
// Ignore errors for non-existent keys
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
async count() {
|
|
154
|
+
await this.initialize();
|
|
155
|
+
try {
|
|
156
|
+
const result = await this.client.sendCommand(['VCARD', this.setName]);
|
|
157
|
+
return result || 0;
|
|
158
|
+
}
|
|
159
|
+
catch {
|
|
160
|
+
return 0;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
async disconnect() {
|
|
164
|
+
if (this.isConnected) {
|
|
165
|
+
await this.client.quit();
|
|
166
|
+
this.isConnected = false;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=redis-native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redis-native.js","sourceRoot":"","sources":["../../../src/adapters/vector/redis-native.ts"],"names":[],"mappings":"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"}
|
|
@@ -65,12 +65,13 @@ async function promptVectorStore() {
|
|
|
65
65
|
type: 'list',
|
|
66
66
|
name: 'vectorStore',
|
|
67
67
|
message: 'Select vector store:',
|
|
68
|
-
default: 'redis',
|
|
68
|
+
default: 'redis-stack',
|
|
69
69
|
choices: [
|
|
70
|
-
{ name: 'Redis Stack (
|
|
71
|
-
{ name: '
|
|
70
|
+
{ name: 'Redis Stack (Docker, RediSearch) - docker run -p 6379:6379 redis/redis-stack-server', value: 'redis-stack' },
|
|
71
|
+
{ name: 'Redis 8.x Native (Homebrew) - brew install redis', value: 'redis' },
|
|
72
|
+
{ name: 'Qdrant (Docker or cloud) - docker run -p 6333:6333 qdrant/qdrant', value: 'qdrant' },
|
|
72
73
|
{ name: 'Memory (in-process, non-persistent, testing only)', value: 'memory' },
|
|
73
|
-
{ name: 'ChromaDB (requires
|
|
74
|
+
{ name: 'ChromaDB (requires server) - docker run -p 8000:8000 chromadb/chroma', value: 'chroma' },
|
|
74
75
|
{ name: 'Cloudflare Vectorize (serverless, requires Cloudflare account)', value: 'vectorize' }
|
|
75
76
|
]
|
|
76
77
|
}]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/cli/commands/setup.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/cli/commands/setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -317,13 +317,33 @@
|
|
|
317
317
|
<div class="grid grid-cols-1 md:grid-cols-2 gap-4">
|
|
318
318
|
<div>
|
|
319
319
|
<label class="block text-sm text-gray-400 mb-2">Type</label>
|
|
320
|
-
<select id="config-vectorstore" class="w-full bg-gray-800 border border-gray-700 rounded-lg px-4 py-2">
|
|
320
|
+
<select id="config-vectorstore" class="w-full bg-gray-800 border border-gray-700 rounded-lg px-4 py-2" onchange="toggleVectorStoreConfig()">
|
|
321
|
+
<option value="redis-stack">Redis Stack (Docker/RediSearch)</option>
|
|
322
|
+
<option value="redis">Redis 8.x Native (Homebrew)</option>
|
|
321
323
|
<option value="memory">Memory (File-based)</option>
|
|
322
324
|
<option value="chroma">ChromaDB (Server)</option>
|
|
323
325
|
<option value="qdrant">Qdrant</option>
|
|
324
326
|
<option value="vectorize">Cloudflare Vectorize</option>
|
|
325
327
|
</select>
|
|
326
328
|
</div>
|
|
329
|
+
<div id="redis-stack-config" class="hidden">
|
|
330
|
+
<label class="block text-sm text-gray-400 mb-2">Redis Stack URL</label>
|
|
331
|
+
<input type="text" id="config-redis-stack-url" placeholder="redis://localhost:6379" class="w-full bg-gray-800 border border-gray-700 rounded-lg px-4 py-2">
|
|
332
|
+
<p class="text-xs text-gray-500 mt-1">Requires Redis Stack with RediSearch module (Docker recommended)</p>
|
|
333
|
+
</div>
|
|
334
|
+
<div id="redis-config" class="hidden">
|
|
335
|
+
<label class="block text-sm text-gray-400 mb-2">Redis URL</label>
|
|
336
|
+
<input type="text" id="config-redis-url" placeholder="redis://localhost:6379" class="w-full bg-gray-800 border border-gray-700 rounded-lg px-4 py-2">
|
|
337
|
+
<p class="text-xs text-gray-500 mt-1">Uses Redis 8.x native vector commands (VADD/VSIM)</p>
|
|
338
|
+
</div>
|
|
339
|
+
<div id="chroma-config" class="hidden">
|
|
340
|
+
<label class="block text-sm text-gray-400 mb-2">ChromaDB URL</label>
|
|
341
|
+
<input type="text" id="config-chroma-url" placeholder="http://localhost:8000" class="w-full bg-gray-800 border border-gray-700 rounded-lg px-4 py-2">
|
|
342
|
+
</div>
|
|
343
|
+
<div id="qdrant-config" class="hidden">
|
|
344
|
+
<label class="block text-sm text-gray-400 mb-2">Qdrant URL</label>
|
|
345
|
+
<input type="text" id="config-qdrant-url" placeholder="http://localhost:6333" class="w-full bg-gray-800 border border-gray-700 rounded-lg px-4 py-2">
|
|
346
|
+
</div>
|
|
327
347
|
</div>
|
|
328
348
|
</div>
|
|
329
349
|
|
|
@@ -678,6 +698,15 @@
|
|
|
678
698
|
}
|
|
679
699
|
}
|
|
680
700
|
|
|
701
|
+
// Toggle vector store config fields visibility
|
|
702
|
+
function toggleVectorStoreConfig() {
|
|
703
|
+
const vectorStore = document.getElementById('config-vectorstore').value;
|
|
704
|
+
document.getElementById('redis-stack-config').classList.toggle('hidden', vectorStore !== 'redis-stack');
|
|
705
|
+
document.getElementById('redis-config').classList.toggle('hidden', vectorStore !== 'redis');
|
|
706
|
+
document.getElementById('chroma-config').classList.toggle('hidden', vectorStore !== 'chroma');
|
|
707
|
+
document.getElementById('qdrant-config').classList.toggle('hidden', vectorStore !== 'qdrant');
|
|
708
|
+
}
|
|
709
|
+
|
|
681
710
|
// Fetch Config
|
|
682
711
|
async function fetchConfig() {
|
|
683
712
|
try {
|
|
@@ -689,6 +718,25 @@
|
|
|
689
718
|
document.getElementById('config-vectorstore').value = config.vectorStore || 'memory';
|
|
690
719
|
document.getElementById('config-embeddings').value = config.embeddings || 'xenova';
|
|
691
720
|
|
|
721
|
+
// Vector store specific configs
|
|
722
|
+
// For redis-stack, use same redis URL field
|
|
723
|
+
if (config.apiKeys?.redis?.url) {
|
|
724
|
+
if (config.vectorStore === 'redis-stack') {
|
|
725
|
+
document.getElementById('config-redis-stack-url').value = config.apiKeys.redis.url;
|
|
726
|
+
} else {
|
|
727
|
+
document.getElementById('config-redis-url').value = config.apiKeys.redis.url;
|
|
728
|
+
}
|
|
729
|
+
}
|
|
730
|
+
if (config.vectorStoreConfig?.chromaUrl) {
|
|
731
|
+
document.getElementById('config-chroma-url').value = config.vectorStoreConfig.chromaUrl;
|
|
732
|
+
}
|
|
733
|
+
if (config.apiKeys?.qdrant?.url) {
|
|
734
|
+
document.getElementById('config-qdrant-url').value = config.apiKeys.qdrant.url;
|
|
735
|
+
}
|
|
736
|
+
|
|
737
|
+
// Show/hide vector store config fields
|
|
738
|
+
toggleVectorStoreConfig();
|
|
739
|
+
|
|
692
740
|
if (config.mcpGateway) {
|
|
693
741
|
document.getElementById('config-gateway-enabled').checked = config.mcpGateway.enabled;
|
|
694
742
|
document.getElementById('config-gateway-url').value = config.mcpGateway.url || 'http://localhost:3010';
|
|
@@ -712,9 +760,17 @@
|
|
|
712
760
|
|
|
713
761
|
// Save Settings
|
|
714
762
|
async function saveSettings() {
|
|
763
|
+
const vectorStore = document.getElementById('config-vectorstore').value;
|
|
764
|
+
const redisStackUrl = document.getElementById('config-redis-stack-url').value;
|
|
765
|
+
const redisUrl = document.getElementById('config-redis-url').value;
|
|
766
|
+
const chromaUrl = document.getElementById('config-chroma-url').value;
|
|
767
|
+
const qdrantUrl = document.getElementById('config-qdrant-url').value;
|
|
768
|
+
|
|
715
769
|
const updates = {
|
|
716
|
-
vectorStore:
|
|
770
|
+
vectorStore: vectorStore,
|
|
717
771
|
embeddings: document.getElementById('config-embeddings').value,
|
|
772
|
+
apiKeys: {},
|
|
773
|
+
vectorStoreConfig: {},
|
|
718
774
|
mcpGateway: {
|
|
719
775
|
enabled: document.getElementById('config-gateway-enabled').checked,
|
|
720
776
|
url: document.getElementById('config-gateway-url').value || 'http://localhost:3010'
|
|
@@ -730,6 +786,20 @@
|
|
|
730
786
|
}
|
|
731
787
|
};
|
|
732
788
|
|
|
789
|
+
// Add vector store specific config
|
|
790
|
+
if (vectorStore === 'redis-stack' && redisStackUrl) {
|
|
791
|
+
updates.apiKeys.redis = { url: redisStackUrl };
|
|
792
|
+
}
|
|
793
|
+
if (vectorStore === 'redis' && redisUrl) {
|
|
794
|
+
updates.apiKeys.redis = { url: redisUrl };
|
|
795
|
+
}
|
|
796
|
+
if (vectorStore === 'chroma' && chromaUrl) {
|
|
797
|
+
updates.vectorStoreConfig.chromaUrl = chromaUrl;
|
|
798
|
+
}
|
|
799
|
+
if (vectorStore === 'qdrant' && qdrantUrl) {
|
|
800
|
+
updates.apiKeys.qdrant = { url: qdrantUrl };
|
|
801
|
+
}
|
|
802
|
+
|
|
733
803
|
try {
|
|
734
804
|
const res = await fetch(`${API_BASE}/api/config`, {
|
|
735
805
|
method: 'POST',
|
|
@@ -1,10 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
timestamp: string;
|
|
3
|
-
type: 'ingest' | 'search' | 'crawl' | 'error';
|
|
4
|
-
message: string;
|
|
5
|
-
details?: Record<string, any>;
|
|
6
|
-
}
|
|
7
|
-
export declare function logActivity(type: ActivityLog['type'], message: string, details?: Record<string, any>): void;
|
|
1
|
+
export declare function logActivity(type: 'ingest' | 'search' | 'crawl' | 'error' | 'query', message: string, details?: Record<string, any>): void;
|
|
8
2
|
export declare function startDashboard(port?: number): void;
|
|
9
|
-
export {};
|
|
10
3
|
//# sourceMappingURL=server.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/dashboard/server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/dashboard/server.ts"],"names":[],"mappings":"AA4BA,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAElI;AA2XD,wBAAgB,cAAc,CAAC,IAAI,GAAE,MAAa,GAAG,IAAI,CA4BxD"}
|
package/dist/dashboard/server.js
CHANGED
|
@@ -7,21 +7,11 @@ import { loadConfig, writeConfig } from '../services/config.js';
|
|
|
7
7
|
import { createVectorStore } from '../adapters/vector/index.js';
|
|
8
8
|
import { createEmbedder } from '../adapters/embeddings/index.js';
|
|
9
9
|
import { createOpenSkillsClient } from '../integrations/openskills.js';
|
|
10
|
+
import { logActivity as sharedLogActivity, getActivityLog } from '../services/activity-log.js';
|
|
10
11
|
const __filename = fileURLToPath(import.meta.url);
|
|
11
12
|
const __dirname = dirname(__filename);
|
|
12
|
-
// In-memory activity log (would use a proper store in production)
|
|
13
|
-
const activityLog = [];
|
|
14
13
|
export function logActivity(type, message, details) {
|
|
15
|
-
|
|
16
|
-
timestamp: new Date().toISOString(),
|
|
17
|
-
type,
|
|
18
|
-
message,
|
|
19
|
-
details
|
|
20
|
-
});
|
|
21
|
-
// Keep only last 100 entries
|
|
22
|
-
if (activityLog.length > 100) {
|
|
23
|
-
activityLog.pop();
|
|
24
|
-
}
|
|
14
|
+
sharedLogActivity(type, message, details);
|
|
25
15
|
}
|
|
26
16
|
const MIME_TYPES = {
|
|
27
17
|
'.html': 'text/html',
|
|
@@ -122,7 +112,8 @@ async function handleAPI(req, res, path) {
|
|
|
122
112
|
return;
|
|
123
113
|
}
|
|
124
114
|
if (path === '/api/activity' && req.method === 'GET') {
|
|
125
|
-
|
|
115
|
+
const activities = getActivityLog();
|
|
116
|
+
res.end(JSON.stringify(activities));
|
|
126
117
|
return;
|
|
127
118
|
}
|
|
128
119
|
if (path === '/api/search' && req.method === 'POST') {
|