cursor-recursive-rag 0.2.0-alpha.1

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.
Files changed (144) hide show
  1. package/README.md +354 -0
  2. package/bin/cursor-rag.js +18 -0
  3. package/dist/adapters/embeddings/index.d.ts +5 -0
  4. package/dist/adapters/embeddings/index.d.ts.map +1 -0
  5. package/dist/adapters/embeddings/index.js +16 -0
  6. package/dist/adapters/embeddings/index.js.map +1 -0
  7. package/dist/adapters/embeddings/ollama.d.ts +11 -0
  8. package/dist/adapters/embeddings/ollama.d.ts.map +1 -0
  9. package/dist/adapters/embeddings/ollama.js +30 -0
  10. package/dist/adapters/embeddings/ollama.js.map +1 -0
  11. package/dist/adapters/embeddings/openai.d.ts +11 -0
  12. package/dist/adapters/embeddings/openai.d.ts.map +1 -0
  13. package/dist/adapters/embeddings/openai.js +28 -0
  14. package/dist/adapters/embeddings/openai.js.map +1 -0
  15. package/dist/adapters/embeddings/types.d.ts +6 -0
  16. package/dist/adapters/embeddings/types.d.ts.map +1 -0
  17. package/dist/adapters/embeddings/types.js +2 -0
  18. package/dist/adapters/embeddings/types.js.map +1 -0
  19. package/dist/adapters/embeddings/xenova.d.ts +11 -0
  20. package/dist/adapters/embeddings/xenova.d.ts.map +1 -0
  21. package/dist/adapters/embeddings/xenova.js +26 -0
  22. package/dist/adapters/embeddings/xenova.js.map +1 -0
  23. package/dist/adapters/vector/chroma.d.ts +23 -0
  24. package/dist/adapters/vector/chroma.d.ts.map +1 -0
  25. package/dist/adapters/vector/chroma.js +91 -0
  26. package/dist/adapters/vector/chroma.js.map +1 -0
  27. package/dist/adapters/vector/index.d.ts +5 -0
  28. package/dist/adapters/vector/index.d.ts.map +1 -0
  29. package/dist/adapters/vector/index.js +22 -0
  30. package/dist/adapters/vector/index.js.map +1 -0
  31. package/dist/adapters/vector/memory.d.ts +22 -0
  32. package/dist/adapters/vector/memory.d.ts.map +1 -0
  33. package/dist/adapters/vector/memory.js +105 -0
  34. package/dist/adapters/vector/memory.js.map +1 -0
  35. package/dist/adapters/vector/qdrant.d.ts +14 -0
  36. package/dist/adapters/vector/qdrant.d.ts.map +1 -0
  37. package/dist/adapters/vector/qdrant.js +120 -0
  38. package/dist/adapters/vector/qdrant.js.map +1 -0
  39. package/dist/adapters/vector/redis.d.ts +31 -0
  40. package/dist/adapters/vector/redis.d.ts.map +1 -0
  41. package/dist/adapters/vector/redis.js +164 -0
  42. package/dist/adapters/vector/redis.js.map +1 -0
  43. package/dist/adapters/vector/vectorize.d.ts +10 -0
  44. package/dist/adapters/vector/vectorize.d.ts.map +1 -0
  45. package/dist/adapters/vector/vectorize.js +22 -0
  46. package/dist/adapters/vector/vectorize.js.map +1 -0
  47. package/dist/cli/commands/dashboard.d.ts +3 -0
  48. package/dist/cli/commands/dashboard.d.ts.map +1 -0
  49. package/dist/cli/commands/dashboard.js +23 -0
  50. package/dist/cli/commands/dashboard.js.map +1 -0
  51. package/dist/cli/commands/ingest.d.ts +3 -0
  52. package/dist/cli/commands/ingest.d.ts.map +1 -0
  53. package/dist/cli/commands/ingest.js +133 -0
  54. package/dist/cli/commands/ingest.js.map +1 -0
  55. package/dist/cli/commands/search.d.ts +3 -0
  56. package/dist/cli/commands/search.d.ts.map +1 -0
  57. package/dist/cli/commands/search.js +39 -0
  58. package/dist/cli/commands/search.js.map +1 -0
  59. package/dist/cli/commands/setup.d.ts +3 -0
  60. package/dist/cli/commands/setup.d.ts.map +1 -0
  61. package/dist/cli/commands/setup.js +311 -0
  62. package/dist/cli/commands/setup.js.map +1 -0
  63. package/dist/cli/commands/status.d.ts +3 -0
  64. package/dist/cli/commands/status.d.ts.map +1 -0
  65. package/dist/cli/commands/status.js +39 -0
  66. package/dist/cli/commands/status.js.map +1 -0
  67. package/dist/cli/index.d.ts +3 -0
  68. package/dist/cli/index.d.ts.map +1 -0
  69. package/dist/cli/index.js +34 -0
  70. package/dist/cli/index.js.map +1 -0
  71. package/dist/dashboard/public/index.html +819 -0
  72. package/dist/dashboard/server.d.ts +10 -0
  73. package/dist/dashboard/server.d.ts.map +1 -0
  74. package/dist/dashboard/server.js +397 -0
  75. package/dist/dashboard/server.js.map +1 -0
  76. package/dist/integrations/index.d.ts +3 -0
  77. package/dist/integrations/index.d.ts.map +1 -0
  78. package/dist/integrations/index.js +3 -0
  79. package/dist/integrations/index.js.map +1 -0
  80. package/dist/integrations/mcp-gateway.d.ts +91 -0
  81. package/dist/integrations/mcp-gateway.d.ts.map +1 -0
  82. package/dist/integrations/mcp-gateway.js +128 -0
  83. package/dist/integrations/mcp-gateway.js.map +1 -0
  84. package/dist/integrations/openskills.d.ts +67 -0
  85. package/dist/integrations/openskills.d.ts.map +1 -0
  86. package/dist/integrations/openskills.js +223 -0
  87. package/dist/integrations/openskills.js.map +1 -0
  88. package/dist/proxy/index.d.ts +29 -0
  89. package/dist/proxy/index.d.ts.map +1 -0
  90. package/dist/proxy/index.js +124 -0
  91. package/dist/proxy/index.js.map +1 -0
  92. package/dist/server/index.d.ts +2 -0
  93. package/dist/server/index.d.ts.map +1 -0
  94. package/dist/server/index.js +43 -0
  95. package/dist/server/index.js.map +1 -0
  96. package/dist/server/tools/crawl.d.ts +15 -0
  97. package/dist/server/tools/crawl.d.ts.map +1 -0
  98. package/dist/server/tools/crawl.js +97 -0
  99. package/dist/server/tools/crawl.js.map +1 -0
  100. package/dist/server/tools/gateway.d.ts +27 -0
  101. package/dist/server/tools/gateway.d.ts.map +1 -0
  102. package/dist/server/tools/gateway.js +58 -0
  103. package/dist/server/tools/gateway.js.map +1 -0
  104. package/dist/server/tools/index.d.ts +10 -0
  105. package/dist/server/tools/index.d.ts.map +1 -0
  106. package/dist/server/tools/index.js +302 -0
  107. package/dist/server/tools/index.js.map +1 -0
  108. package/dist/server/tools/ingest.d.ts +15 -0
  109. package/dist/server/tools/ingest.d.ts.map +1 -0
  110. package/dist/server/tools/ingest.js +84 -0
  111. package/dist/server/tools/ingest.js.map +1 -0
  112. package/dist/server/tools/list-sources.d.ts +9 -0
  113. package/dist/server/tools/list-sources.d.ts.map +1 -0
  114. package/dist/server/tools/list-sources.js +63 -0
  115. package/dist/server/tools/list-sources.js.map +1 -0
  116. package/dist/server/tools/recursive-query.d.ts +16 -0
  117. package/dist/server/tools/recursive-query.d.ts.map +1 -0
  118. package/dist/server/tools/recursive-query.js +65 -0
  119. package/dist/server/tools/recursive-query.js.map +1 -0
  120. package/dist/server/tools/search.d.ts +15 -0
  121. package/dist/server/tools/search.d.ts.map +1 -0
  122. package/dist/server/tools/search.js +20 -0
  123. package/dist/server/tools/search.js.map +1 -0
  124. package/dist/server/tools/skills.d.ts +30 -0
  125. package/dist/server/tools/skills.d.ts.map +1 -0
  126. package/dist/server/tools/skills.js +85 -0
  127. package/dist/server/tools/skills.js.map +1 -0
  128. package/dist/services/chunker.d.ts +3 -0
  129. package/dist/services/chunker.d.ts.map +1 -0
  130. package/dist/services/chunker.js +75 -0
  131. package/dist/services/chunker.js.map +1 -0
  132. package/dist/services/config.d.ts +8 -0
  133. package/dist/services/config.d.ts.map +1 -0
  134. package/dist/services/config.js +66 -0
  135. package/dist/services/config.js.map +1 -0
  136. package/dist/services/query-decomposer.d.ts +44 -0
  137. package/dist/services/query-decomposer.d.ts.map +1 -0
  138. package/dist/services/query-decomposer.js +79 -0
  139. package/dist/services/query-decomposer.js.map +1 -0
  140. package/dist/types/index.d.ts +93 -0
  141. package/dist/types/index.d.ts.map +1 -0
  142. package/dist/types/index.js +2 -0
  143. package/dist/types/index.js.map +1 -0
  144. package/package.json +56 -0
@@ -0,0 +1,10 @@
1
+ interface ActivityLog {
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;
8
+ export declare function startDashboard(port?: number): void;
9
+ export {};
10
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/dashboard/server.ts"],"names":[],"mappings":"AA2BA,UAAU,WAAW;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAC;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC/B;AAKD,wBAAgB,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAWpG;AA0XD,wBAAgB,cAAc,CAAC,IAAI,GAAE,MAAa,GAAG,IAAI,CA4BxD"}
@@ -0,0 +1,397 @@
1
+ import { createServer } from 'http';
2
+ import { readFileSync, existsSync } from 'fs';
3
+ import { join, extname } from 'path';
4
+ import { fileURLToPath } from 'url';
5
+ import { dirname } from 'path';
6
+ import { loadConfig, writeConfig } from '../services/config.js';
7
+ import { createVectorStore } from '../adapters/vector/index.js';
8
+ import { createEmbedder } from '../adapters/embeddings/index.js';
9
+ import { createOpenSkillsClient } from '../integrations/openskills.js';
10
+ const __filename = fileURLToPath(import.meta.url);
11
+ const __dirname = dirname(__filename);
12
+ // In-memory activity log (would use a proper store in production)
13
+ const activityLog = [];
14
+ export function logActivity(type, message, details) {
15
+ activityLog.unshift({
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
+ }
25
+ }
26
+ const MIME_TYPES = {
27
+ '.html': 'text/html',
28
+ '.css': 'text/css',
29
+ '.js': 'application/javascript',
30
+ '.json': 'application/json',
31
+ '.png': 'image/png',
32
+ '.svg': 'image/svg+xml',
33
+ '.ico': 'image/x-icon',
34
+ };
35
+ async function getStats() {
36
+ try {
37
+ const config = loadConfig();
38
+ const vectorStore = createVectorStore(config.vectorStore, config);
39
+ let totalChunks = 0;
40
+ try {
41
+ totalChunks = await vectorStore.count();
42
+ }
43
+ catch (e) {
44
+ // Vector store might not be initialized yet
45
+ }
46
+ return {
47
+ vectorStore: config.vectorStore,
48
+ embeddings: config.embeddings,
49
+ totalChunks,
50
+ sources: [], // Would need to implement source tracking
51
+ proxyEnabled: config.proxy?.enabled || false,
52
+ firecrawlConfigured: !!config.apiKeys?.firecrawl,
53
+ mcpGatewayEnabled: config.mcpGateway?.enabled || false,
54
+ mcpGatewayUrl: config.mcpGateway?.url || null,
55
+ openSkillsEnabled: config.openSkills?.enabled || false,
56
+ lastUpdated: new Date().toISOString()
57
+ };
58
+ }
59
+ catch (error) {
60
+ return {
61
+ vectorStore: 'unknown',
62
+ embeddings: 'unknown',
63
+ totalChunks: 0,
64
+ sources: [],
65
+ proxyEnabled: false,
66
+ firecrawlConfigured: false,
67
+ mcpGatewayEnabled: false,
68
+ mcpGatewayUrl: null,
69
+ openSkillsEnabled: false,
70
+ lastUpdated: new Date().toISOString()
71
+ };
72
+ }
73
+ }
74
+ async function handleAPI(req, res, path) {
75
+ res.setHeader('Content-Type', 'application/json');
76
+ try {
77
+ if (path === '/api/stats' && req.method === 'GET') {
78
+ const stats = await getStats();
79
+ res.end(JSON.stringify(stats));
80
+ return;
81
+ }
82
+ if (path === '/api/config' && req.method === 'GET') {
83
+ try {
84
+ const config = loadConfig();
85
+ // Don't expose sensitive keys
86
+ const safeConfig = {
87
+ ...config,
88
+ apiKeys: {
89
+ openai: config.apiKeys?.openai ? '***configured***' : null,
90
+ firecrawl: config.apiKeys?.firecrawl ? '***configured***' : null,
91
+ qdrant: config.apiKeys?.qdrant ? { url: config.apiKeys.qdrant.url, apiKey: '***' } : null,
92
+ ollama: config.apiKeys?.ollama
93
+ },
94
+ proxy: config.proxy ? {
95
+ ...config.proxy,
96
+ password: config.proxy.password ? '***' : undefined
97
+ } : null
98
+ };
99
+ res.end(JSON.stringify(safeConfig));
100
+ }
101
+ catch (e) {
102
+ res.end(JSON.stringify({ error: 'Config not found. Run cursor-rag setup first.' }));
103
+ }
104
+ return;
105
+ }
106
+ if (path === '/api/config' && req.method === 'POST') {
107
+ let body = '';
108
+ req.on('data', chunk => body += chunk);
109
+ req.on('end', () => {
110
+ try {
111
+ const updates = JSON.parse(body);
112
+ const currentConfig = loadConfig();
113
+ const newConfig = { ...currentConfig, ...updates };
114
+ writeConfig(newConfig);
115
+ res.end(JSON.stringify({ success: true }));
116
+ }
117
+ catch (e) {
118
+ res.statusCode = 400;
119
+ res.end(JSON.stringify({ error: 'Invalid JSON' }));
120
+ }
121
+ });
122
+ return;
123
+ }
124
+ if (path === '/api/activity' && req.method === 'GET') {
125
+ res.end(JSON.stringify(activityLog));
126
+ return;
127
+ }
128
+ if (path === '/api/search' && req.method === 'POST') {
129
+ let body = '';
130
+ req.on('data', chunk => body += chunk);
131
+ req.on('end', async () => {
132
+ try {
133
+ const { query, topK = 10 } = JSON.parse(body);
134
+ const config = loadConfig();
135
+ const vectorStore = createVectorStore(config.vectorStore, config);
136
+ const embedder = await createEmbedder(config.embeddings, config);
137
+ const embedding = await embedder.embed(query);
138
+ const results = await vectorStore.search(embedding, { topK });
139
+ logActivity('search', `Searched: "${query}"`, { resultsCount: results.length });
140
+ res.end(JSON.stringify(results));
141
+ }
142
+ catch (e) {
143
+ res.statusCode = 500;
144
+ res.end(JSON.stringify({ error: e instanceof Error ? e.message : 'Search failed' }));
145
+ }
146
+ });
147
+ return;
148
+ }
149
+ if (path === '/api/skills' && req.method === 'GET') {
150
+ try {
151
+ const config = loadConfig();
152
+ const skillsClient = createOpenSkillsClient(config);
153
+ if (!skillsClient.isEnabled()) {
154
+ res.end(JSON.stringify({ skills: [], enabled: false }));
155
+ return;
156
+ }
157
+ const skills = skillsClient.discoverSkills();
158
+ res.end(JSON.stringify({
159
+ skills: skills.map(s => ({
160
+ name: s.name,
161
+ description: s.description,
162
+ location: s.location
163
+ })),
164
+ enabled: true
165
+ }));
166
+ }
167
+ catch (e) {
168
+ res.end(JSON.stringify({ skills: [], error: e instanceof Error ? e.message : 'Failed to load skills' }));
169
+ }
170
+ return;
171
+ }
172
+ // Serve knowledge base as browsable docs for Cursor @Docs integration
173
+ if (path === '/api/docs' && req.method === 'GET') {
174
+ try {
175
+ const config = loadConfig();
176
+ const vectorStore = createVectorStore(config.vectorStore, config);
177
+ const embedder = await createEmbedder(config.embeddings, config);
178
+ // Get a sample to extract sources
179
+ const sampleEmbedding = await embedder.embed('documentation guide');
180
+ const results = await vectorStore.search(sampleEmbedding, { topK: 1000 });
181
+ // Group by source
182
+ const sourceMap = new Map();
183
+ for (const result of results) {
184
+ const source = result.metadata?.source || 'unknown';
185
+ if (!sourceMap.has(source)) {
186
+ sourceMap.set(source, []);
187
+ }
188
+ sourceMap.get(source).push({ content: result.content, score: result.score });
189
+ }
190
+ // Return as JSON for the docs index
191
+ const docs = Array.from(sourceMap.entries()).map(([source, chunks]) => ({
192
+ source,
193
+ chunkCount: chunks.length,
194
+ preview: chunks[0]?.content.substring(0, 200) + '...'
195
+ }));
196
+ res.end(JSON.stringify({ docs, totalSources: docs.length }));
197
+ }
198
+ catch (e) {
199
+ res.end(JSON.stringify({ docs: [], error: e instanceof Error ? e.message : 'Failed to load docs' }));
200
+ }
201
+ return;
202
+ }
203
+ // Proxy requests to MCP Gateway to avoid CORS
204
+ if (path.startsWith('/api/gateway/') && req.method === 'GET') {
205
+ try {
206
+ const config = loadConfig();
207
+ const gatewayUrl = config.mcpGateway?.url || 'http://localhost:3010';
208
+ // Preserve query string when proxying
209
+ const fullUrl = new URL(req.url || '', `http://${req.headers.host}`);
210
+ const gatewayPath = fullUrl.pathname.replace('/api/gateway', '');
211
+ const queryString = fullUrl.search; // includes the '?' if present
212
+ const gatewayRes = await fetch(`${gatewayUrl}${gatewayPath}${queryString}`);
213
+ const data = await gatewayRes.json();
214
+ res.end(JSON.stringify(data));
215
+ }
216
+ catch (e) {
217
+ res.statusCode = 502;
218
+ res.end(JSON.stringify({ error: e instanceof Error ? e.message : 'Gateway request failed' }));
219
+ }
220
+ return;
221
+ }
222
+ res.statusCode = 404;
223
+ res.end(JSON.stringify({ error: 'Not found' }));
224
+ }
225
+ catch (error) {
226
+ res.statusCode = 500;
227
+ res.end(JSON.stringify({ error: error instanceof Error ? error.message : 'Internal error' }));
228
+ }
229
+ }
230
+ async function serveDocsPage(req, res, path, port) {
231
+ res.setHeader('Content-Type', 'text/html');
232
+ try {
233
+ const config = loadConfig();
234
+ const vectorStore = createVectorStore(config.vectorStore, config);
235
+ const embedder = await createEmbedder(config.embeddings, config);
236
+ if (path === '/docs' || path === '/docs/') {
237
+ // Index page - list all sources
238
+ const sampleEmbedding = await embedder.embed('documentation');
239
+ const results = await vectorStore.search(sampleEmbedding, { topK: 1000 });
240
+ const sourceMap = new Map();
241
+ for (const result of results) {
242
+ const source = result.metadata?.source || 'unknown';
243
+ sourceMap.set(source, (sourceMap.get(source) || 0) + 1);
244
+ }
245
+ const sourceLinks = Array.from(sourceMap.entries())
246
+ .map(([source, count]) => {
247
+ const encodedSource = encodeURIComponent(source);
248
+ return `<li><a href="/docs/source/${encodedSource}">${escapeHtml(source)}</a> (${count} chunks)</li>`;
249
+ })
250
+ .join('\n');
251
+ res.end(`<!DOCTYPE html>
252
+ <html>
253
+ <head>
254
+ <title>Knowledge Base - cursor-recursive-rag</title>
255
+ <meta name="description" content="Indexed documentation and knowledge base for RAG retrieval">
256
+ </head>
257
+ <body>
258
+ <h1>Knowledge Base Index</h1>
259
+ <p>This knowledge base contains ${results.length} chunks from ${sourceMap.size} sources.</p>
260
+ <h2>Sources</h2>
261
+ <ul>
262
+ ${sourceLinks || '<li>No sources indexed yet. Use <code>cursor-rag ingest</code> to add documents.</li>'}
263
+ </ul>
264
+ <hr>
265
+ <p><a href="/docs/search">Search the knowledge base</a></p>
266
+ </body>
267
+ </html>`);
268
+ return;
269
+ }
270
+ if (path.startsWith('/docs/source/')) {
271
+ // Show chunks from a specific source
272
+ const encodedSource = path.replace('/docs/source/', '');
273
+ const source = decodeURIComponent(encodedSource);
274
+ const embedding = await embedder.embed(source);
275
+ const results = await vectorStore.search(embedding, { topK: 500 });
276
+ const sourceChunks = results.filter(r => r.metadata?.source === source);
277
+ const chunkHtml = sourceChunks
278
+ .map((chunk, idx) => `
279
+ <article>
280
+ <h3>Chunk ${idx + 1}</h3>
281
+ <pre>${escapeHtml(chunk.content)}</pre>
282
+ </article>
283
+ `)
284
+ .join('\n');
285
+ res.end(`<!DOCTYPE html>
286
+ <html>
287
+ <head>
288
+ <title>${escapeHtml(source)} - Knowledge Base</title>
289
+ <meta name="description" content="Documentation from ${escapeHtml(source)}">
290
+ </head>
291
+ <body>
292
+ <h1>${escapeHtml(source)}</h1>
293
+ <p><a href="/docs">← Back to index</a></p>
294
+ <p>${sourceChunks.length} chunks from this source</p>
295
+ ${chunkHtml}
296
+ </body>
297
+ </html>`);
298
+ return;
299
+ }
300
+ if (path === '/docs/search') {
301
+ const url = new URL(req.url || '/', `http://localhost:${port}`);
302
+ const query = url.searchParams.get('q') || '';
303
+ let resultsHtml = '';
304
+ if (query) {
305
+ const embedding = await embedder.embed(query);
306
+ const results = await vectorStore.search(embedding, { topK: 20 });
307
+ resultsHtml = results
308
+ .map((r, idx) => `
309
+ <article>
310
+ <h3>${idx + 1}. Score: ${r.score.toFixed(4)}</h3>
311
+ <p><strong>Source:</strong> ${escapeHtml(r.metadata?.source || 'unknown')}</p>
312
+ <pre>${escapeHtml(r.content)}</pre>
313
+ </article>
314
+ `)
315
+ .join('\n');
316
+ }
317
+ res.end(`<!DOCTYPE html>
318
+ <html>
319
+ <head>
320
+ <title>Search - Knowledge Base</title>
321
+ </head>
322
+ <body>
323
+ <h1>Search Knowledge Base</h1>
324
+ <p><a href="/docs">← Back to index</a></p>
325
+ <form method="get" action="/docs/search">
326
+ <input type="text" name="q" value="${escapeHtml(query)}" placeholder="Search..." style="width: 300px">
327
+ <button type="submit">Search</button>
328
+ </form>
329
+ ${query ? `<h2>Results for "${escapeHtml(query)}"</h2>${resultsHtml}` : ''}
330
+ </body>
331
+ </html>`);
332
+ return;
333
+ }
334
+ res.statusCode = 404;
335
+ res.end('<html><body><h1>Not Found</h1><p><a href="/docs">Back to docs</a></p></body></html>');
336
+ }
337
+ catch (error) {
338
+ res.statusCode = 500;
339
+ res.end(`<html><body><h1>Error</h1><p>${escapeHtml(error instanceof Error ? error.message : 'Unknown error')}</p></body></html>`);
340
+ }
341
+ }
342
+ function escapeHtml(text) {
343
+ return text
344
+ .replace(/&/g, '&amp;')
345
+ .replace(/</g, '&lt;')
346
+ .replace(/>/g, '&gt;')
347
+ .replace(/"/g, '&quot;')
348
+ .replace(/'/g, '&#039;');
349
+ }
350
+ function serveStatic(res, filePath) {
351
+ const publicDir = join(__dirname, 'public');
352
+ const fullPath = join(publicDir, filePath === '/' ? 'index.html' : filePath);
353
+ if (!existsSync(fullPath)) {
354
+ // Serve index.html for SPA routing
355
+ const indexPath = join(publicDir, 'index.html');
356
+ if (existsSync(indexPath)) {
357
+ res.setHeader('Content-Type', 'text/html');
358
+ res.end(readFileSync(indexPath));
359
+ return;
360
+ }
361
+ res.statusCode = 404;
362
+ res.end('Not found');
363
+ return;
364
+ }
365
+ const ext = extname(fullPath);
366
+ const mimeType = MIME_TYPES[ext] || 'application/octet-stream';
367
+ res.setHeader('Content-Type', mimeType);
368
+ res.end(readFileSync(fullPath));
369
+ }
370
+ export function startDashboard(port = 3333) {
371
+ const server = createServer(async (req, res) => {
372
+ const url = new URL(req.url || '/', `http://localhost:${port}`);
373
+ const path = url.pathname;
374
+ // CORS headers for development
375
+ res.setHeader('Access-Control-Allow-Origin', '*');
376
+ res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
377
+ res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
378
+ if (req.method === 'OPTIONS') {
379
+ res.end();
380
+ return;
381
+ }
382
+ if (path.startsWith('/api/')) {
383
+ await handleAPI(req, res, path);
384
+ }
385
+ else if (path === '/docs' || path.startsWith('/docs/')) {
386
+ // Serve knowledge base as HTML for Cursor @Docs crawling
387
+ await serveDocsPage(req, res, path, port);
388
+ }
389
+ else {
390
+ serveStatic(res, path);
391
+ }
392
+ });
393
+ server.listen(port, () => {
394
+ console.log(`Dashboard running at http://localhost:${port}`);
395
+ });
396
+ }
397
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/dashboard/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAmC,MAAM,MAAM,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,OAAO,EAAE,UAAU,EAAE,WAAW,EAAe,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAsBtC,kEAAkE;AAClE,MAAM,WAAW,GAAkB,EAAE,CAAC;AAEtC,MAAM,UAAU,WAAW,CAAC,IAAyB,EAAE,OAAe,EAAE,OAA6B;IACnG,WAAW,CAAC,OAAO,CAAC;QAClB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,IAAI;QACJ,OAAO;QACP,OAAO;KACR,CAAC,CAAC;IACH,6BAA6B;IAC7B,IAAI,WAAW,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QAC7B,WAAW,CAAC,GAAG,EAAE,CAAC;IACpB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,GAA2B;IACzC,OAAO,EAAE,WAAW;IACpB,MAAM,EAAE,UAAU;IAClB,KAAK,EAAE,wBAAwB;IAC/B,OAAO,EAAE,kBAAkB;IAC3B,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,eAAe;IACvB,MAAM,EAAE,cAAc;CACvB,CAAC;AAEF,KAAK,UAAU,QAAQ;IACrB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,MAAM,WAAW,GAAG,iBAAiB,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAElE,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,CAAC;YACH,WAAW,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,CAAC;QAC1C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,4CAA4C;QAC9C,CAAC;QAED,OAAO;YACL,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,WAAW;YACX,OAAO,EAAE,EAAE,EAAE,0CAA0C;YACvD,YAAY,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,IAAI,KAAK;YAC5C,mBAAmB,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS;YAChD,iBAAiB,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,IAAI,KAAK;YACtD,aAAa,EAAE,MAAM,CAAC,UAAU,EAAE,GAAG,IAAI,IAAI;YAC7C,iBAAiB,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,IAAI,KAAK;YACtD,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACtC,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,WAAW,EAAE,SAAS;YACtB,UAAU,EAAE,SAAS;YACrB,WAAW,EAAE,CAAC;YACd,OAAO,EAAE,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,mBAAmB,EAAE,KAAK;YAC1B,iBAAiB,EAAE,KAAK;YACxB,aAAa,EAAE,IAAI;YACnB,iBAAiB,EAAE,KAAK;YACxB,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACtC,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,GAAoB,EAAE,GAAmB,EAAE,IAAY;IAC9E,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;IAElD,IAAI,CAAC;QACH,IAAI,IAAI,KAAK,YAAY,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YAClD,MAAM,KAAK,GAAG,MAAM,QAAQ,EAAE,CAAC;YAC/B,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;YAC/B,OAAO;QACT,CAAC;QAED,IAAI,IAAI,KAAK,aAAa,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YACnD,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;gBAC5B,8BAA8B;gBAC9B,MAAM,UAAU,GAAG;oBACjB,GAAG,MAAM;oBACT,OAAO,EAAE;wBACP,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI;wBAC1D,SAAS,EAAE,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI;wBAChE,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI;wBACzF,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM;qBAC/B;oBACD,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;wBACpB,GAAG,MAAM,CAAC,KAAK;wBACf,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;qBACpD,CAAC,CAAC,CAAC,IAAI;iBACT,CAAC;gBACF,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;YACtC,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,+CAA+C,EAAE,CAAC,CAAC,CAAC;YACtF,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,IAAI,KAAK,aAAa,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YACpD,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC;YACvC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;gBACjB,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBACjC,MAAM,aAAa,GAAG,UAAU,EAAE,CAAC;oBACnC,MAAM,SAAS,GAAG,EAAE,GAAG,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;oBACnD,WAAW,CAAC,SAAS,CAAC,CAAC;oBACvB,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;gBAC7C,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;oBACrB,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;gBACrD,CAAC;YACH,CAAC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,IAAI,IAAI,KAAK,eAAe,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YACrD,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;YACrC,OAAO;QACT,CAAC;QAED,IAAI,IAAI,KAAK,aAAa,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YACpD,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC;YACvC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE;gBACvB,IAAI,CAAC;oBACH,MAAM,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC9C,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;oBAC5B,MAAM,WAAW,GAAG,iBAAiB,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;oBAClE,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;oBAEjE,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBAC9C,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;oBAE9D,WAAW,CAAC,QAAQ,EAAE,cAAc,KAAK,GAAG,EAAE,EAAE,YAAY,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;oBAChF,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;gBACnC,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;oBACrB,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;gBACvF,CAAC;YACH,CAAC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,IAAI,IAAI,KAAK,aAAa,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YACnD,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;gBAC5B,MAAM,YAAY,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;gBAEpD,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,EAAE,CAAC;oBAC9B,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;oBACxD,OAAO;gBACT,CAAC;gBAED,MAAM,MAAM,GAAG,YAAY,CAAC,cAAc,EAAE,CAAC;gBAC7C,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;oBACrB,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBACvB,IAAI,EAAE,CAAC,CAAC,IAAI;wBACZ,WAAW,EAAE,CAAC,CAAC,WAAW;wBAC1B,QAAQ,EAAE,CAAC,CAAC,QAAQ;qBACrB,CAAC,CAAC;oBACH,OAAO,EAAE,IAAI;iBACd,CAAC,CAAC,CAAC;YACN,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB,EAAE,CAAC,CAAC,CAAC;YAC3G,CAAC;YACD,OAAO;QACT,CAAC;QAED,sEAAsE;QACtE,IAAI,IAAI,KAAK,WAAW,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YACjD,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;gBAC5B,MAAM,WAAW,GAAG,iBAAiB,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;gBAClE,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;gBAEjE,kCAAkC;gBAClC,MAAM,eAAe,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;gBACpE,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;gBAE1E,kBAAkB;gBAClB,MAAM,SAAS,GAAG,IAAI,GAAG,EAAqD,CAAC;gBAC/E,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;oBAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,EAAE,MAAM,IAAI,SAAS,CAAC;oBACpD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;wBAC3B,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;oBAC5B,CAAC;oBACD,SAAS,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;gBAChF,CAAC;gBAED,oCAAoC;gBACpC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;oBACtE,MAAM;oBACN,UAAU,EAAE,MAAM,CAAC,MAAM;oBACzB,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK;iBACtD,CAAC,CAAC,CAAC;gBAEJ,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAC/D,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC;YACvG,CAAC;YACD,OAAO;QACT,CAAC;QAED,8CAA8C;QAC9C,IAAI,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YAC7D,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;gBAC5B,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,EAAE,GAAG,IAAI,uBAAuB,CAAC;gBACrE,sCAAsC;gBACtC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE,UAAU,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;gBACrE,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;gBACjE,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,8BAA8B;gBAElE,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,GAAG,UAAU,GAAG,WAAW,GAAG,WAAW,EAAE,CAAC,CAAC;gBAC5E,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;gBACrC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;YAChC,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;gBACrB,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB,EAAE,CAAC,CAAC,CAAC;YAChG,CAAC;YACD,OAAO;QACT,CAAC;QAED,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;QACrB,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;QACrB,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;IAChG,CAAC;AACH,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,GAAoB,EAAE,GAAmB,EAAE,IAAY,EAAE,IAAY;IAChG,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;IAE3C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,MAAM,WAAW,GAAG,iBAAiB,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAClE,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAEjE,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC1C,gCAAgC;YAChC,MAAM,eAAe,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YAC9D,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAE1E,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;YAC5C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,EAAE,MAAM,IAAI,SAAS,CAAC;gBACpD,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1D,CAAC;YAED,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;iBAChD,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE;gBACvB,MAAM,aAAa,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;gBACjD,OAAO,6BAA6B,aAAa,KAAK,UAAU,CAAC,MAAM,CAAC,SAAS,KAAK,eAAe,CAAC;YACxG,CAAC,CAAC;iBACD,IAAI,CAAC,IAAI,CAAC,CAAC;YAEd,GAAG,CAAC,GAAG,CAAC;;;;;;;;oCAQsB,OAAO,CAAC,MAAM,gBAAgB,SAAS,CAAC,IAAI;;;MAG1E,WAAW,IAAI,uFAAuF;;;;;QAKpG,CAAC,CAAC;YACJ,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YACrC,qCAAqC;YACrC,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;YACxD,MAAM,MAAM,GAAG,kBAAkB,CAAC,aAAa,CAAC,CAAC;YAEjD,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC/C,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;YACnE,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC;YAExE,MAAM,SAAS,GAAG,YAAY;iBAC3B,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC;;wBAEL,GAAG,GAAG,CAAC;mBACZ,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC;;SAEnC,CAAC;iBACD,IAAI,CAAC,IAAI,CAAC,CAAC;YAEd,GAAG,CAAC,GAAG,CAAC;;;WAGH,UAAU,CAAC,MAAM,CAAC;yDAC4B,UAAU,CAAC,MAAM,CAAC;;;QAGnE,UAAU,CAAC,MAAM,CAAC;;OAEnB,YAAY,CAAC,MAAM;IACtB,SAAS;;QAEL,CAAC,CAAC;YACJ,OAAO;QACT,CAAC;QAED,IAAI,IAAI,KAAK,cAAc,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,oBAAoB,IAAI,EAAE,CAAC,CAAC;YAChE,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YAE9C,IAAI,WAAW,GAAG,EAAE,CAAC;YACrB,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC9C,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;gBAElE,WAAW,GAAG,OAAO;qBAClB,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC;;oBAEP,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;4CACb,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,IAAI,SAAS,CAAC;qBAClE,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC;;WAE/B,CAAC;qBACD,IAAI,CAAC,IAAI,CAAC,CAAC;YAChB,CAAC;YAED,GAAG,CAAC,GAAG,CAAC;;;;;;;;;yCAS2B,UAAU,CAAC,KAAK,CAAC;;;IAGtD,KAAK,CAAC,CAAC,CAAC,oBAAoB,UAAU,CAAC,KAAK,CAAC,SAAS,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE;;QAEpE,CAAC,CAAC;YACJ,OAAO;QACT,CAAC;QAED,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;QACrB,GAAG,CAAC,GAAG,CAAC,qFAAqF,CAAC,CAAC;IACjG,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;QACrB,GAAG,CAAC,GAAG,CAAC,gCAAgC,UAAU,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,oBAAoB,CAAC,CAAC;IACpI,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,IAAI;SACR,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,WAAW,CAAC,GAAmB,EAAE,QAAgB;IACxD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,KAAK,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAE7E,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,mCAAmC;QACnC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QAChD,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;YAC3C,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC;YACjC,OAAO;QACT,CAAC;QACD,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;QACrB,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC9B,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,0BAA0B,CAAC;IAC/D,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;IACxC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAe,IAAI;IAChD,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QAC7C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,oBAAoB,IAAI,EAAE,CAAC,CAAC;QAChE,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC;QAE1B,+BAA+B;QAC/B,GAAG,CAAC,SAAS,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC;QAClD,GAAG,CAAC,SAAS,CAAC,8BAA8B,EAAE,oBAAoB,CAAC,CAAC;QACpE,GAAG,CAAC,SAAS,CAAC,8BAA8B,EAAE,cAAc,CAAC,CAAC;QAE9D,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC7B,GAAG,CAAC,GAAG,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7B,MAAM,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAClC,CAAC;aAAM,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzD,yDAAyD;YACzD,MAAM,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACzB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;QACvB,OAAO,CAAC,GAAG,CAAC,yCAAyC,IAAI,EAAE,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { MCPGatewayClient, createMCPGatewayClient, type MCPGatewayConfig } from './mcp-gateway.js';
2
+ export { OpenSkillsClient, createOpenSkillsClient, type OpenSkillsConfig, type Skill } from './openskills.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/integrations/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACnG,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,KAAK,gBAAgB,EAAE,KAAK,KAAK,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { MCPGatewayClient, createMCPGatewayClient } from './mcp-gateway.js';
2
+ export { OpenSkillsClient, createOpenSkillsClient } from './openskills.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/integrations/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAyB,MAAM,kBAAkB,CAAC;AACnG,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAqC,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,91 @@
1
+ import type { RAGConfig } from '../types/index.js';
2
+ export interface MCPGatewayConfig {
3
+ enabled: boolean;
4
+ url: string;
5
+ apiKey?: string;
6
+ }
7
+ export interface GatewayToolCall {
8
+ toolName: string;
9
+ args: Record<string, any>;
10
+ filter?: {
11
+ maxRows?: number;
12
+ fields?: string[];
13
+ format?: 'full' | 'summary' | 'count';
14
+ };
15
+ }
16
+ export interface GatewaySearchResult {
17
+ tools: Array<{
18
+ name: string;
19
+ description: string;
20
+ backend: string;
21
+ }>;
22
+ }
23
+ export declare class MCPGatewayClient {
24
+ private config;
25
+ constructor(ragConfig: RAGConfig);
26
+ isEnabled(): boolean;
27
+ private request;
28
+ /**
29
+ * Search available tools in the gateway
30
+ */
31
+ searchTools(query: string, options?: {
32
+ backend?: string;
33
+ detailLevel?: 'name_only' | 'name_description' | 'full_schema';
34
+ }): Promise<GatewaySearchResult>;
35
+ /**
36
+ * Get tool schema (lazy loading)
37
+ */
38
+ getToolSchema(toolName: string, compact?: boolean): Promise<any>;
39
+ /**
40
+ * Call a tool with optional result filtering
41
+ */
42
+ callTool(call: GatewayToolCall): Promise<any>;
43
+ /**
44
+ * Call tool with aggregation (for analytics)
45
+ */
46
+ callToolAggregate(toolName: string, args: Record<string, any>, aggregation: {
47
+ operation: 'count' | 'sum' | 'avg' | 'min' | 'max' | 'groupBy' | 'distinct';
48
+ field?: string;
49
+ groupByField?: string;
50
+ }): Promise<any>;
51
+ /**
52
+ * Execute code in the gateway sandbox
53
+ */
54
+ executeCode(code: string, timeout?: number): Promise<{
55
+ output: string;
56
+ error?: string;
57
+ }>;
58
+ /**
59
+ * List available skills from the gateway
60
+ */
61
+ listSkills(): Promise<Array<{
62
+ name: string;
63
+ description: string;
64
+ tags: string[];
65
+ }>>;
66
+ /**
67
+ * Execute a gateway skill
68
+ */
69
+ executeSkill(name: string, inputs?: Record<string, any>): Promise<any>;
70
+ /**
71
+ * Get gateway health status
72
+ */
73
+ getHealth(): Promise<{
74
+ status: string;
75
+ backends: {
76
+ connected: number;
77
+ total: number;
78
+ };
79
+ tools: number;
80
+ }>;
81
+ /**
82
+ * Search the RAG knowledge base through gateway (if configured)
83
+ * This allows using the gateway's token optimization on RAG results
84
+ */
85
+ searchWithOptimization(query: string, options?: {
86
+ maxTokens?: number;
87
+ summarize?: boolean;
88
+ }): Promise<any>;
89
+ }
90
+ export declare function createMCPGatewayClient(config: RAGConfig): MCPGatewayClient;
91
+ //# sourceMappingURL=mcp-gateway.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-gateway.d.ts","sourceRoot":"","sources":["../../src/integrations/mcp-gateway.ts"],"names":[],"mappings":"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"}