@cosmocoder/mcp-web-docs 1.0.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 +22 -0
- package/README.md +368 -0
- package/build/__mocks__/embeddings.d.ts +17 -0
- package/build/__mocks__/embeddings.js +66 -0
- package/build/__mocks__/embeddings.js.map +1 -0
- package/build/config.d.ts +44 -0
- package/build/config.js +158 -0
- package/build/config.js.map +1 -0
- package/build/config.test.d.ts +1 -0
- package/build/config.test.js +165 -0
- package/build/config.test.js.map +1 -0
- package/build/crawler/auth.d.ts +128 -0
- package/build/crawler/auth.js +546 -0
- package/build/crawler/auth.js.map +1 -0
- package/build/crawler/auth.test.d.ts +1 -0
- package/build/crawler/auth.test.js +174 -0
- package/build/crawler/auth.test.js.map +1 -0
- package/build/crawler/base.d.ts +24 -0
- package/build/crawler/base.js +149 -0
- package/build/crawler/base.js.map +1 -0
- package/build/crawler/base.test.d.ts +1 -0
- package/build/crawler/base.test.js +234 -0
- package/build/crawler/base.test.js.map +1 -0
- package/build/crawler/browser-config.d.ts +2 -0
- package/build/crawler/browser-config.js +29 -0
- package/build/crawler/browser-config.js.map +1 -0
- package/build/crawler/browser-config.test.d.ts +1 -0
- package/build/crawler/browser-config.test.js +56 -0
- package/build/crawler/browser-config.test.js.map +1 -0
- package/build/crawler/cheerio.d.ts +11 -0
- package/build/crawler/cheerio.js +134 -0
- package/build/crawler/cheerio.js.map +1 -0
- package/build/crawler/chromium.d.ts +21 -0
- package/build/crawler/chromium.js +596 -0
- package/build/crawler/chromium.js.map +1 -0
- package/build/crawler/content-extractor-types.d.ts +25 -0
- package/build/crawler/content-extractor-types.js +2 -0
- package/build/crawler/content-extractor-types.js.map +1 -0
- package/build/crawler/content-extractors.d.ts +9 -0
- package/build/crawler/content-extractors.js +9 -0
- package/build/crawler/content-extractors.js.map +1 -0
- package/build/crawler/content-utils.d.ts +2 -0
- package/build/crawler/content-utils.js +22 -0
- package/build/crawler/content-utils.js.map +1 -0
- package/build/crawler/content-utils.test.d.ts +1 -0
- package/build/crawler/content-utils.test.js +99 -0
- package/build/crawler/content-utils.test.js.map +1 -0
- package/build/crawler/crawlee-crawler.d.ts +63 -0
- package/build/crawler/crawlee-crawler.js +342 -0
- package/build/crawler/crawlee-crawler.js.map +1 -0
- package/build/crawler/crawlee-crawler.test.d.ts +1 -0
- package/build/crawler/crawlee-crawler.test.js +280 -0
- package/build/crawler/crawlee-crawler.test.js.map +1 -0
- package/build/crawler/default-extractor.d.ts +4 -0
- package/build/crawler/default-extractor.js +26 -0
- package/build/crawler/default-extractor.js.map +1 -0
- package/build/crawler/default-extractor.test.d.ts +1 -0
- package/build/crawler/default-extractor.test.js +200 -0
- package/build/crawler/default-extractor.test.js.map +1 -0
- package/build/crawler/default.d.ts +11 -0
- package/build/crawler/default.js +138 -0
- package/build/crawler/default.js.map +1 -0
- package/build/crawler/docs-crawler.d.ts +26 -0
- package/build/crawler/docs-crawler.js +97 -0
- package/build/crawler/docs-crawler.js.map +1 -0
- package/build/crawler/docs-crawler.test.d.ts +1 -0
- package/build/crawler/docs-crawler.test.js +185 -0
- package/build/crawler/docs-crawler.test.js.map +1 -0
- package/build/crawler/factory.d.ts +6 -0
- package/build/crawler/factory.js +83 -0
- package/build/crawler/factory.js.map +1 -0
- package/build/crawler/github-pages-extractor.d.ts +4 -0
- package/build/crawler/github-pages-extractor.js +33 -0
- package/build/crawler/github-pages-extractor.js.map +1 -0
- package/build/crawler/github-pages-extractor.test.d.ts +1 -0
- package/build/crawler/github-pages-extractor.test.js +184 -0
- package/build/crawler/github-pages-extractor.test.js.map +1 -0
- package/build/crawler/github.d.ts +20 -0
- package/build/crawler/github.js +181 -0
- package/build/crawler/github.js.map +1 -0
- package/build/crawler/github.test.d.ts +1 -0
- package/build/crawler/github.test.js +326 -0
- package/build/crawler/github.test.js.map +1 -0
- package/build/crawler/puppeteer.d.ts +16 -0
- package/build/crawler/puppeteer.js +191 -0
- package/build/crawler/puppeteer.js.map +1 -0
- package/build/crawler/queue-manager.d.ts +43 -0
- package/build/crawler/queue-manager.js +169 -0
- package/build/crawler/queue-manager.js.map +1 -0
- package/build/crawler/queue-manager.test.d.ts +1 -0
- package/build/crawler/queue-manager.test.js +509 -0
- package/build/crawler/queue-manager.test.js.map +1 -0
- package/build/crawler/site-rules.d.ts +11 -0
- package/build/crawler/site-rules.js +104 -0
- package/build/crawler/site-rules.js.map +1 -0
- package/build/crawler/site-rules.test.d.ts +1 -0
- package/build/crawler/site-rules.test.js +139 -0
- package/build/crawler/site-rules.test.js.map +1 -0
- package/build/crawler/storybook-extractor.d.ts +34 -0
- package/build/crawler/storybook-extractor.js +767 -0
- package/build/crawler/storybook-extractor.js.map +1 -0
- package/build/crawler/storybook-extractor.test.d.ts +1 -0
- package/build/crawler/storybook-extractor.test.js +491 -0
- package/build/crawler/storybook-extractor.test.js.map +1 -0
- package/build/embeddings/fastembed.d.ts +25 -0
- package/build/embeddings/fastembed.js +188 -0
- package/build/embeddings/fastembed.js.map +1 -0
- package/build/embeddings/fastembed.test.d.ts +1 -0
- package/build/embeddings/fastembed.test.js +307 -0
- package/build/embeddings/fastembed.test.js.map +1 -0
- package/build/embeddings/openai.d.ts +8 -0
- package/build/embeddings/openai.js +56 -0
- package/build/embeddings/openai.js.map +1 -0
- package/build/embeddings/types.d.ts +4 -0
- package/build/embeddings/types.js +2 -0
- package/build/embeddings/types.js.map +1 -0
- package/build/index.d.ts +2 -0
- package/build/index.js +1007 -0
- package/build/index.js.map +1 -0
- package/build/index.test.d.ts +1 -0
- package/build/index.test.js +364 -0
- package/build/index.test.js.map +1 -0
- package/build/indexing/queue-manager.d.ts +36 -0
- package/build/indexing/queue-manager.js +86 -0
- package/build/indexing/queue-manager.js.map +1 -0
- package/build/indexing/queue-manager.test.d.ts +1 -0
- package/build/indexing/queue-manager.test.js +257 -0
- package/build/indexing/queue-manager.test.js.map +1 -0
- package/build/indexing/status.d.ts +39 -0
- package/build/indexing/status.js +207 -0
- package/build/indexing/status.js.map +1 -0
- package/build/indexing/status.test.d.ts +1 -0
- package/build/indexing/status.test.js +246 -0
- package/build/indexing/status.test.js.map +1 -0
- package/build/processor/content.d.ts +16 -0
- package/build/processor/content.js +286 -0
- package/build/processor/content.js.map +1 -0
- package/build/processor/content.test.d.ts +1 -0
- package/build/processor/content.test.js +369 -0
- package/build/processor/content.test.js.map +1 -0
- package/build/processor/markdown.d.ts +11 -0
- package/build/processor/markdown.js +256 -0
- package/build/processor/markdown.js.map +1 -0
- package/build/processor/markdown.test.d.ts +1 -0
- package/build/processor/markdown.test.js +312 -0
- package/build/processor/markdown.test.js.map +1 -0
- package/build/processor/metadata-parser.d.ts +37 -0
- package/build/processor/metadata-parser.js +245 -0
- package/build/processor/metadata-parser.js.map +1 -0
- package/build/processor/metadata-parser.test.d.ts +1 -0
- package/build/processor/metadata-parser.test.js +357 -0
- package/build/processor/metadata-parser.test.js.map +1 -0
- package/build/processor/processor.d.ts +8 -0
- package/build/processor/processor.js +190 -0
- package/build/processor/processor.js.map +1 -0
- package/build/processor/processor.test.d.ts +1 -0
- package/build/processor/processor.test.js +357 -0
- package/build/processor/processor.test.js.map +1 -0
- package/build/rag/cache.d.ts +10 -0
- package/build/rag/cache.js +10 -0
- package/build/rag/cache.js.map +1 -0
- package/build/rag/code-generator.d.ts +11 -0
- package/build/rag/code-generator.js +30 -0
- package/build/rag/code-generator.js.map +1 -0
- package/build/rag/context-assembler.d.ts +23 -0
- package/build/rag/context-assembler.js +113 -0
- package/build/rag/context-assembler.js.map +1 -0
- package/build/rag/docs-search.d.ts +55 -0
- package/build/rag/docs-search.js +380 -0
- package/build/rag/docs-search.js.map +1 -0
- package/build/rag/pipeline.d.ts +26 -0
- package/build/rag/pipeline.js +91 -0
- package/build/rag/pipeline.js.map +1 -0
- package/build/rag/query-processor.d.ts +14 -0
- package/build/rag/query-processor.js +57 -0
- package/build/rag/query-processor.js.map +1 -0
- package/build/rag/reranker.d.ts +55 -0
- package/build/rag/reranker.js +210 -0
- package/build/rag/reranker.js.map +1 -0
- package/build/rag/response-generator.d.ts +20 -0
- package/build/rag/response-generator.js +101 -0
- package/build/rag/response-generator.js.map +1 -0
- package/build/rag/retriever.d.ts +19 -0
- package/build/rag/retriever.js +111 -0
- package/build/rag/retriever.js.map +1 -0
- package/build/rag/validator.d.ts +22 -0
- package/build/rag/validator.js +128 -0
- package/build/rag/validator.js.map +1 -0
- package/build/rag/version-manager.d.ts +23 -0
- package/build/rag/version-manager.js +98 -0
- package/build/rag/version-manager.js.map +1 -0
- package/build/setupTests.d.ts +4 -0
- package/build/setupTests.js +50 -0
- package/build/setupTests.js.map +1 -0
- package/build/storage/storage.d.ts +38 -0
- package/build/storage/storage.js +700 -0
- package/build/storage/storage.js.map +1 -0
- package/build/storage/storage.test.d.ts +1 -0
- package/build/storage/storage.test.js +338 -0
- package/build/storage/storage.test.js.map +1 -0
- package/build/types/rag.d.ts +27 -0
- package/build/types/rag.js +2 -0
- package/build/types/rag.js.map +1 -0
- package/build/types.d.ts +120 -0
- package/build/types.js +2 -0
- package/build/types.js.map +1 -0
- package/build/util/content-utils.d.ts +31 -0
- package/build/util/content-utils.js +120 -0
- package/build/util/content-utils.js.map +1 -0
- package/build/util/content.d.ts +1 -0
- package/build/util/content.js +16 -0
- package/build/util/content.js.map +1 -0
- package/build/util/docs.d.ts +1 -0
- package/build/util/docs.js +26 -0
- package/build/util/docs.js.map +1 -0
- package/build/util/docs.test.d.ts +1 -0
- package/build/util/docs.test.js +49 -0
- package/build/util/docs.test.js.map +1 -0
- package/build/util/favicon.d.ts +6 -0
- package/build/util/favicon.js +88 -0
- package/build/util/favicon.js.map +1 -0
- package/build/util/favicon.test.d.ts +1 -0
- package/build/util/favicon.test.js +140 -0
- package/build/util/favicon.test.js.map +1 -0
- package/build/util/logger.d.ts +17 -0
- package/build/util/logger.js +72 -0
- package/build/util/logger.js.map +1 -0
- package/build/util/logger.test.d.ts +1 -0
- package/build/util/logger.test.js +46 -0
- package/build/util/logger.test.js.map +1 -0
- package/build/util/security.d.ts +312 -0
- package/build/util/security.js +719 -0
- package/build/util/security.js.map +1 -0
- package/build/util/security.test.d.ts +1 -0
- package/build/util/security.test.js +524 -0
- package/build/util/security.test.js.map +1 -0
- package/build/util/site-detector.d.ts +22 -0
- package/build/util/site-detector.js +42 -0
- package/build/util/site-detector.js.map +1 -0
- package/package.json +112 -0
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import OpenAI from "openai";
|
|
2
|
+
export class ResponseValidator {
|
|
3
|
+
openai;
|
|
4
|
+
constructor(apiKey) {
|
|
5
|
+
this.openai = new OpenAI({ apiKey });
|
|
6
|
+
}
|
|
7
|
+
async validateResponse(response, context) {
|
|
8
|
+
const [factCheck, codeCheck, consistencyCheck] = await Promise.all([
|
|
9
|
+
this.validateFacts(response, context),
|
|
10
|
+
this.validateCode(response),
|
|
11
|
+
this.validateConsistency(response, context)
|
|
12
|
+
]);
|
|
13
|
+
return {
|
|
14
|
+
factCheck: factCheck.valid,
|
|
15
|
+
codeCheck: codeCheck.valid,
|
|
16
|
+
consistencyCheck: consistencyCheck.valid,
|
|
17
|
+
details: {
|
|
18
|
+
factCheckDetails: factCheck.details,
|
|
19
|
+
codeCheckDetails: codeCheck.details,
|
|
20
|
+
consistencyCheckDetails: consistencyCheck.details
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
async validateFacts(response, context) {
|
|
25
|
+
const completion = await this.openai.chat.completions.create({
|
|
26
|
+
model: "gpt-3.5-turbo",
|
|
27
|
+
messages: [
|
|
28
|
+
{
|
|
29
|
+
role: "system",
|
|
30
|
+
content: `You are a fact-checking assistant. Compare the generated response against the source documentation and identify any factual inconsistencies or inaccuracies. Focus on technical accuracy and completeness.
|
|
31
|
+
|
|
32
|
+
Return a JSON response in this format:
|
|
33
|
+
{
|
|
34
|
+
"isAccurate": true/false,
|
|
35
|
+
"issues": ["array of identified issues or inconsistencies"]
|
|
36
|
+
}`
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
role: "user",
|
|
40
|
+
content: `Source Documentation:\n${this.formatContext(context)}\n\nGenerated Response:\n${response.text}\n\nVerify the factual accuracy of the response.`
|
|
41
|
+
}
|
|
42
|
+
],
|
|
43
|
+
response_format: { type: "json_object" }
|
|
44
|
+
});
|
|
45
|
+
const result = JSON.parse(completion.choices[0].message.content || "{}");
|
|
46
|
+
return {
|
|
47
|
+
valid: result.isAccurate || false,
|
|
48
|
+
details: result.issues || []
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
async validateCode(response) {
|
|
52
|
+
if (!response.codeExamples?.length) {
|
|
53
|
+
return { valid: true, details: [] };
|
|
54
|
+
}
|
|
55
|
+
const issues = [];
|
|
56
|
+
for (const example of response.codeExamples) {
|
|
57
|
+
try {
|
|
58
|
+
// Basic syntax validation
|
|
59
|
+
Function(`"use strict";${example}`);
|
|
60
|
+
// Check for common issues
|
|
61
|
+
const commonIssues = this.checkCommonCodeIssues(example);
|
|
62
|
+
issues.push(...commonIssues);
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
issues.push(`Syntax error: ${error instanceof Error ? error.message : String(error)}`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return {
|
|
69
|
+
valid: issues.length === 0,
|
|
70
|
+
details: issues
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
async validateConsistency(response, context) {
|
|
74
|
+
const completion = await this.openai.chat.completions.create({
|
|
75
|
+
model: "gpt-3.5-turbo",
|
|
76
|
+
messages: [
|
|
77
|
+
{
|
|
78
|
+
role: "system",
|
|
79
|
+
content: `You are a consistency checker. Verify that the response maintains consistency with the documentation context, uses consistent terminology, and provides a coherent explanation.
|
|
80
|
+
|
|
81
|
+
Return a JSON response in this format:
|
|
82
|
+
{
|
|
83
|
+
"isConsistent": true/false,
|
|
84
|
+
"issues": ["array of identified consistency issues"]
|
|
85
|
+
}`
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
role: "user",
|
|
89
|
+
content: `Context:\n${this.formatContext(context)}\n\nResponse:\n${response.text}\n\nCheck for consistency issues.`
|
|
90
|
+
}
|
|
91
|
+
],
|
|
92
|
+
response_format: { type: "json_object" }
|
|
93
|
+
});
|
|
94
|
+
const result = JSON.parse(completion.choices[0].message.content || "{}");
|
|
95
|
+
return {
|
|
96
|
+
valid: result.isConsistent || false,
|
|
97
|
+
details: result.issues || []
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
formatContext(context) {
|
|
101
|
+
return context.hierarchicalContext
|
|
102
|
+
.map(chunk => `[${chunk.metadata.type}]\n${chunk.content}`)
|
|
103
|
+
.join('\n\n');
|
|
104
|
+
}
|
|
105
|
+
checkCommonCodeIssues(code) {
|
|
106
|
+
const issues = [];
|
|
107
|
+
// Check for undefined variables
|
|
108
|
+
const undefinedVarRegex = /\b(?:let|const|var)\s+([a-zA-Z_$][a-zA-Z0-9_$]*)\s*(?:;|$)/;
|
|
109
|
+
const matches = code.match(new RegExp(undefinedVarRegex, 'g'));
|
|
110
|
+
if (matches) {
|
|
111
|
+
const vars = matches.map(m => m.match(undefinedVarRegex)[1]);
|
|
112
|
+
const unusedVars = vars.filter(v => !code.includes(v));
|
|
113
|
+
if (unusedVars.length > 0) {
|
|
114
|
+
issues.push(`Unused variables: ${unusedVars.join(', ')}`);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
// Check for missing error handling
|
|
118
|
+
if (code.includes('async') && !code.includes('try') && !code.includes('catch')) {
|
|
119
|
+
issues.push('Missing error handling in async code');
|
|
120
|
+
}
|
|
121
|
+
// Check for hardcoded values
|
|
122
|
+
if (code.match(/(['"])(?:https?:\/\/|www\.)[^\s'"]+\1/)) {
|
|
123
|
+
issues.push('Contains hardcoded URLs');
|
|
124
|
+
}
|
|
125
|
+
return issues;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/rag/validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { AssembledContext } from "./context-assembler.js";
|
|
2
|
+
import { EnhancedChunk } from "../types/rag.js";
|
|
3
|
+
export interface VersionedContext {
|
|
4
|
+
compatibleChunks: EnhancedChunk[];
|
|
5
|
+
versionedExamples: {
|
|
6
|
+
version: string;
|
|
7
|
+
examples: string[];
|
|
8
|
+
compatibility: {
|
|
9
|
+
minVersion: string;
|
|
10
|
+
maxVersion?: string;
|
|
11
|
+
deprecatedIn?: string;
|
|
12
|
+
removedIn?: string;
|
|
13
|
+
};
|
|
14
|
+
}[];
|
|
15
|
+
}
|
|
16
|
+
export declare class VersionManager {
|
|
17
|
+
getVersionedContext(context: AssembledContext, version: string): Promise<VersionedContext>;
|
|
18
|
+
private filterCompatibleChunks;
|
|
19
|
+
private extractVersionedExamples;
|
|
20
|
+
private extractVersionInfo;
|
|
21
|
+
private isVersionCompatible;
|
|
22
|
+
private sortExamplesByVersion;
|
|
23
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import semver from "semver";
|
|
2
|
+
export class VersionManager {
|
|
3
|
+
async getVersionedContext(context, version) {
|
|
4
|
+
// Extract version information from chunks
|
|
5
|
+
const versionedChunks = this.filterCompatibleChunks(context.hierarchicalContext, version);
|
|
6
|
+
// Group examples by version
|
|
7
|
+
const versionedExamples = this.extractVersionedExamples(versionedChunks);
|
|
8
|
+
// Sort examples by version compatibility
|
|
9
|
+
const sortedExamples = this.sortExamplesByVersion(versionedExamples, version);
|
|
10
|
+
return {
|
|
11
|
+
compatibleChunks: versionedChunks,
|
|
12
|
+
versionedExamples: sortedExamples
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
filterCompatibleChunks(chunks, targetVersion) {
|
|
16
|
+
return chunks.filter(chunk => {
|
|
17
|
+
const versionInfo = this.extractVersionInfo(chunk);
|
|
18
|
+
return this.isVersionCompatible(versionInfo, targetVersion);
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
extractVersionedExamples(chunks) {
|
|
22
|
+
const examples = new Map();
|
|
23
|
+
for (const chunk of chunks) {
|
|
24
|
+
if (chunk.metadata.type === 'example') {
|
|
25
|
+
const versionInfo = this.extractVersionInfo(chunk);
|
|
26
|
+
const key = versionInfo.version;
|
|
27
|
+
if (!examples.has(key)) {
|
|
28
|
+
examples.set(key, {
|
|
29
|
+
examples: [],
|
|
30
|
+
compatibility: versionInfo
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
examples.get(key).examples.push(chunk.content);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return Array.from(examples.entries()).map(([version, data]) => ({
|
|
37
|
+
version,
|
|
38
|
+
examples: data.examples,
|
|
39
|
+
compatibility: {
|
|
40
|
+
minVersion: data.compatibility.minVersion || version,
|
|
41
|
+
maxVersion: data.compatibility.maxVersion,
|
|
42
|
+
deprecatedIn: data.compatibility.deprecatedIn,
|
|
43
|
+
removedIn: data.compatibility.removedIn
|
|
44
|
+
}
|
|
45
|
+
}));
|
|
46
|
+
}
|
|
47
|
+
extractVersionInfo(chunk) {
|
|
48
|
+
const citationInfo = chunk.metadata.citationInfo;
|
|
49
|
+
return {
|
|
50
|
+
version: citationInfo.version,
|
|
51
|
+
minVersion: citationInfo.version, // Default to current version as minimum
|
|
52
|
+
maxVersion: undefined, // No upper bound by default
|
|
53
|
+
deprecatedIn: undefined,
|
|
54
|
+
removedIn: undefined
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
isVersionCompatible(versionInfo, targetVersion) {
|
|
58
|
+
// If no version information is available, consider it compatible
|
|
59
|
+
if (!versionInfo.version)
|
|
60
|
+
return true;
|
|
61
|
+
try {
|
|
62
|
+
// Check if the version is removed
|
|
63
|
+
if (versionInfo.removedIn && semver.gte(targetVersion, versionInfo.removedIn)) {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
// Check version range compatibility
|
|
67
|
+
const minVersion = versionInfo.minVersion || versionInfo.version;
|
|
68
|
+
if (!semver.gte(targetVersion, minVersion)) {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
if (versionInfo.maxVersion && semver.gt(targetVersion, versionInfo.maxVersion)) {
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
// If version comparison fails, default to compatible
|
|
78
|
+
console.warn(`Version comparison failed for ${targetVersion}:`, error);
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
sortExamplesByVersion(examples, targetVersion) {
|
|
83
|
+
return examples.sort((a, b) => {
|
|
84
|
+
// Prioritize non-deprecated examples
|
|
85
|
+
const aDeprecated = a.compatibility.deprecatedIn && semver.gte(targetVersion, a.compatibility.deprecatedIn);
|
|
86
|
+
const bDeprecated = b.compatibility.deprecatedIn && semver.gte(targetVersion, b.compatibility.deprecatedIn);
|
|
87
|
+
if (aDeprecated && !bDeprecated)
|
|
88
|
+
return 1;
|
|
89
|
+
if (!aDeprecated && bDeprecated)
|
|
90
|
+
return -1;
|
|
91
|
+
// Sort by version proximity to target
|
|
92
|
+
const aDistance = Math.abs(semver.compare(targetVersion, a.version));
|
|
93
|
+
const bDistance = Math.abs(semver.compare(targetVersion, b.version));
|
|
94
|
+
return aDistance - bDistance;
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=version-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version-manager.js","sourceRoot":"","sources":["../../src/rag/version-manager.ts"],"names":[],"mappings":"AAEA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAwB5B,MAAM,OAAO,cAAc;IACzB,KAAK,CAAC,mBAAmB,CAAC,OAAyB,EAAE,OAAe;QAClE,0CAA0C;QAC1C,MAAM,eAAe,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;QAE1F,4BAA4B;QAC5B,MAAM,iBAAiB,GAAG,IAAI,CAAC,wBAAwB,CAAC,eAAe,CAAC,CAAC;QAEzE,yCAAyC;QACzC,MAAM,cAAc,GAAG,IAAI,CAAC,qBAAqB,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;QAE9E,OAAO;YACL,gBAAgB,EAAE,eAAe;YACjC,iBAAiB,EAAE,cAAc;SAClC,CAAC;IACJ,CAAC;IAEO,sBAAsB,CAAC,MAAuB,EAAE,aAAqB;QAC3E,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YAC3B,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;YACnD,OAAO,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,wBAAwB,CAAC,MAAuB;QACtD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAGpB,CAAC;QAEL,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBACtC,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;gBACnD,MAAM,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC;gBAEhC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBACvB,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE;wBAChB,QAAQ,EAAE,EAAE;wBACZ,aAAa,EAAE,WAAW;qBAC3B,CAAC,CAAC;gBACL,CAAC;gBAED,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9D,OAAO;YACP,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,aAAa,EAAE;gBACb,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,UAAU,IAAI,OAAO;gBACpD,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,UAAU;gBACzC,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,YAAY;gBAC7C,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,SAAS;aACxC;SACF,CAAC,CAAC,CAAC;IACN,CAAC;IAEO,kBAAkB,CAAC,KAAoB;QAC7C,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC;QACjD,OAAO;YACL,OAAO,EAAE,YAAY,CAAC,OAAO;YAC7B,UAAU,EAAE,YAAY,CAAC,OAAO,EAAE,wCAAwC;YAC1E,UAAU,EAAE,SAAS,EAAE,4BAA4B;YACnD,YAAY,EAAE,SAAS;YACvB,SAAS,EAAE,SAAS;SACrB,CAAC;IACJ,CAAC;IAEO,mBAAmB,CAAC,WAAwB,EAAE,aAAqB;QACzE,iEAAiE;QACjE,IAAI,CAAC,WAAW,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAEtC,IAAI,CAAC;YACH,kCAAkC;YAClC,IAAI,WAAW,CAAC,SAAS,IAAI,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC9E,OAAO,KAAK,CAAC;YACf,CAAC;YAED,oCAAoC;YACpC,MAAM,UAAU,GAAG,WAAW,CAAC,UAAU,IAAI,WAAW,CAAC,OAAO,CAAC;YACjE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,UAAU,CAAC,EAAE,CAAC;gBAC3C,OAAO,KAAK,CAAC;YACf,CAAC;YAED,IAAI,WAAW,CAAC,UAAU,IAAI,MAAM,CAAC,EAAE,CAAC,aAAa,EAAE,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC/E,OAAO,KAAK,CAAC;YACf,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,qDAAqD;YACrD,OAAO,CAAC,IAAI,CAAC,iCAAiC,aAAa,GAAG,EAAE,KAAK,CAAC,CAAC;YACvE,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAEO,qBAAqB,CAAC,QAA+C,EAAE,aAAqB;QAClG,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAC5B,qCAAqC;YACrC,MAAM,WAAW,GAAG,CAAC,CAAC,aAAa,CAAC,YAAY,IAAI,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;YAC5G,MAAM,WAAW,GAAG,CAAC,CAAC,aAAa,CAAC,YAAY,IAAI,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;YAE5G,IAAI,WAAW,IAAI,CAAC,WAAW;gBAAE,OAAO,CAAC,CAAC;YAC1C,IAAI,CAAC,WAAW,IAAI,WAAW;gBAAE,OAAO,CAAC,CAAC,CAAC;YAE3C,sCAAsC;YACtC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;YACrE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;YAErE,OAAO,SAAS,GAAG,SAAS,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Global test setup for Vitest
|
|
3
|
+
*/
|
|
4
|
+
import createFetchMock from 'vitest-fetch-mock';
|
|
5
|
+
// Initialize fetch mock
|
|
6
|
+
const fetchMocker = createFetchMock(vi);
|
|
7
|
+
fetchMocker.enableMocks();
|
|
8
|
+
// Mock the logger to prevent console output during tests
|
|
9
|
+
vi.mock('./util/logger.js', () => ({
|
|
10
|
+
logger: {
|
|
11
|
+
debug: vi.fn(),
|
|
12
|
+
info: vi.fn(),
|
|
13
|
+
warn: vi.fn(),
|
|
14
|
+
error: vi.fn(),
|
|
15
|
+
},
|
|
16
|
+
}));
|
|
17
|
+
// Mock cli-progress to prevent progress bar output during tests
|
|
18
|
+
const mockSingleBar = {
|
|
19
|
+
start: vi.fn(),
|
|
20
|
+
update: vi.fn(),
|
|
21
|
+
stop: vi.fn(),
|
|
22
|
+
increment: vi.fn(),
|
|
23
|
+
};
|
|
24
|
+
vi.mock('cli-progress', () => {
|
|
25
|
+
return {
|
|
26
|
+
SingleBar: class MockSingleBar {
|
|
27
|
+
start = vi.fn();
|
|
28
|
+
update = vi.fn();
|
|
29
|
+
stop = vi.fn();
|
|
30
|
+
increment = vi.fn();
|
|
31
|
+
},
|
|
32
|
+
MultiBar: class MockMultiBar {
|
|
33
|
+
create = vi.fn().mockReturnValue(mockSingleBar);
|
|
34
|
+
stop = vi.fn();
|
|
35
|
+
remove = vi.fn();
|
|
36
|
+
},
|
|
37
|
+
Presets: {
|
|
38
|
+
shades_classic: {},
|
|
39
|
+
shades_grey: {},
|
|
40
|
+
rect: {},
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
});
|
|
44
|
+
// Set up test environment variables
|
|
45
|
+
process.env.MCP_WEB_DOCS_SECRET = 'test-secret-key-for-encryption';
|
|
46
|
+
// Clean up after each test file
|
|
47
|
+
afterEach(() => {
|
|
48
|
+
vi.clearAllMocks();
|
|
49
|
+
});
|
|
50
|
+
//# sourceMappingURL=setupTests.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setupTests.js","sourceRoot":"","sources":["../src/setupTests.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAEhD,wBAAwB;AACxB,MAAM,WAAW,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC;AACxC,WAAW,CAAC,WAAW,EAAE,CAAC;AAE1B,yDAAyD;AACzD,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAC,CAAC;IACjC,MAAM,EAAE;QACN,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;QACd,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE;QACb,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE;QACb,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;KACf;CACF,CAAC,CAAC,CAAC;AAEJ,gEAAgE;AAChE,MAAM,aAAa,GAAG;IACpB,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;IACd,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE;IACf,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE;IACb,SAAS,EAAE,EAAE,CAAC,EAAE,EAAE;CACnB,CAAC;AAEF,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,EAAE;IAC3B,OAAO;QACL,SAAS,EAAE,MAAM,aAAa;YAC5B,KAAK,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAChB,MAAM,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YACjB,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YACf,SAAS,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;SACrB;QACD,QAAQ,EAAE,MAAM,YAAY;YAC1B,MAAM,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;YAChD,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YACf,MAAM,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;SAClB;QACD,OAAO,EAAE;YACP,cAAc,EAAE,EAAE;YAClB,WAAW,EAAE,EAAE;YACf,IAAI,EAAE,EAAE;SACT;KACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,oCAAoC;AACpC,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,gCAAgC,CAAC;AAEnE,gCAAgC;AAChC,SAAS,CAAC,GAAG,EAAE;IACb,EAAE,CAAC,aAAa,EAAE,CAAC;AACrB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { DocumentMetadata, ProcessedDocument, SearchResult, SearchOptions, StorageProvider } from '../types.js';
|
|
2
|
+
import { EmbeddingsProvider } from '../embeddings/types.js';
|
|
3
|
+
export declare class DocumentStore implements StorageProvider {
|
|
4
|
+
private readonly dbPath;
|
|
5
|
+
private readonly vectorDbPath;
|
|
6
|
+
private readonly embeddings;
|
|
7
|
+
private sqliteDb?;
|
|
8
|
+
private lanceConn?;
|
|
9
|
+
private lanceTable?;
|
|
10
|
+
private readonly searchCache;
|
|
11
|
+
private ftsIndexCreated;
|
|
12
|
+
constructor(dbPath: string, vectorDbPath: string, embeddings: EmbeddingsProvider, maxCacheSize?: number);
|
|
13
|
+
initialize(): Promise<void>;
|
|
14
|
+
addDocument(doc: ProcessedDocument): Promise<void>;
|
|
15
|
+
searchDocuments(queryVector: number[], options?: SearchOptions): Promise<SearchResult[]>;
|
|
16
|
+
/**
|
|
17
|
+
* Create full-text search index on the content field
|
|
18
|
+
*/
|
|
19
|
+
private createFTSIndex;
|
|
20
|
+
searchByText(query: string, options?: SearchOptions): Promise<SearchResult[]>;
|
|
21
|
+
/**
|
|
22
|
+
* Merge FTS and vector results using Reciprocal Rank Fusion (RRF)
|
|
23
|
+
*/
|
|
24
|
+
private mergeAndRankResults;
|
|
25
|
+
/**
|
|
26
|
+
* Format raw LanceDB results into SearchResult objects
|
|
27
|
+
*/
|
|
28
|
+
private formatSearchResults;
|
|
29
|
+
listDocuments(): Promise<DocumentMetadata[]>;
|
|
30
|
+
deleteDocument(url: string): Promise<void>;
|
|
31
|
+
getDocument(url: string): Promise<DocumentMetadata | null>;
|
|
32
|
+
private clearCacheForUrl;
|
|
33
|
+
/**
|
|
34
|
+
* Validates that vectors are properly stored and retrievable from LanceDB
|
|
35
|
+
* @returns Promise<boolean> True if vectors are valid, false otherwise
|
|
36
|
+
*/
|
|
37
|
+
validateVectors(): Promise<boolean>;
|
|
38
|
+
}
|