@cosmocoder/mcp-web-docs 1.0.0 → 1.0.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 (84) hide show
  1. package/README.md +132 -10
  2. package/build/crawler/auth.d.ts +17 -6
  3. package/build/crawler/auth.js +166 -31
  4. package/build/crawler/auth.js.map +1 -1
  5. package/build/crawler/auth.test.js +197 -33
  6. package/build/crawler/auth.test.js.map +1 -1
  7. package/build/index.js +68 -16
  8. package/build/index.js.map +1 -1
  9. package/build/index.test.js +134 -0
  10. package/build/index.test.js.map +1 -1
  11. package/build/storage/storage.d.ts +17 -0
  12. package/build/storage/storage.js +102 -5
  13. package/build/storage/storage.js.map +1 -1
  14. package/build/storage/storage.test.js +91 -0
  15. package/build/storage/storage.test.js.map +1 -1
  16. package/build/types.d.ts +4 -0
  17. package/build/util/security.js +8 -0
  18. package/build/util/security.js.map +1 -1
  19. package/build/util/security.test.js +18 -0
  20. package/build/util/security.test.js.map +1 -1
  21. package/package.json +11 -2
  22. package/build/crawler/cheerio.d.ts +0 -11
  23. package/build/crawler/cheerio.js +0 -134
  24. package/build/crawler/cheerio.js.map +0 -1
  25. package/build/crawler/chromium.d.ts +0 -21
  26. package/build/crawler/chromium.js +0 -596
  27. package/build/crawler/chromium.js.map +0 -1
  28. package/build/crawler/default.d.ts +0 -11
  29. package/build/crawler/default.js +0 -138
  30. package/build/crawler/default.js.map +0 -1
  31. package/build/crawler/factory.d.ts +0 -6
  32. package/build/crawler/factory.js +0 -83
  33. package/build/crawler/factory.js.map +0 -1
  34. package/build/crawler/puppeteer.d.ts +0 -16
  35. package/build/crawler/puppeteer.js +0 -191
  36. package/build/crawler/puppeteer.js.map +0 -1
  37. package/build/embeddings/openai.d.ts +0 -8
  38. package/build/embeddings/openai.js +0 -56
  39. package/build/embeddings/openai.js.map +0 -1
  40. package/build/rag/cache.d.ts +0 -10
  41. package/build/rag/cache.js +0 -10
  42. package/build/rag/cache.js.map +0 -1
  43. package/build/rag/code-generator.d.ts +0 -11
  44. package/build/rag/code-generator.js +0 -30
  45. package/build/rag/code-generator.js.map +0 -1
  46. package/build/rag/context-assembler.d.ts +0 -23
  47. package/build/rag/context-assembler.js +0 -113
  48. package/build/rag/context-assembler.js.map +0 -1
  49. package/build/rag/docs-search.d.ts +0 -55
  50. package/build/rag/docs-search.js +0 -380
  51. package/build/rag/docs-search.js.map +0 -1
  52. package/build/rag/pipeline.d.ts +0 -26
  53. package/build/rag/pipeline.js +0 -91
  54. package/build/rag/pipeline.js.map +0 -1
  55. package/build/rag/query-processor.d.ts +0 -14
  56. package/build/rag/query-processor.js +0 -57
  57. package/build/rag/query-processor.js.map +0 -1
  58. package/build/rag/reranker.d.ts +0 -55
  59. package/build/rag/reranker.js +0 -210
  60. package/build/rag/reranker.js.map +0 -1
  61. package/build/rag/response-generator.d.ts +0 -20
  62. package/build/rag/response-generator.js +0 -101
  63. package/build/rag/response-generator.js.map +0 -1
  64. package/build/rag/retriever.d.ts +0 -19
  65. package/build/rag/retriever.js +0 -111
  66. package/build/rag/retriever.js.map +0 -1
  67. package/build/rag/validator.d.ts +0 -22
  68. package/build/rag/validator.js +0 -128
  69. package/build/rag/validator.js.map +0 -1
  70. package/build/rag/version-manager.d.ts +0 -23
  71. package/build/rag/version-manager.js +0 -98
  72. package/build/rag/version-manager.js.map +0 -1
  73. package/build/types/rag.d.ts +0 -27
  74. package/build/types/rag.js +0 -2
  75. package/build/types/rag.js.map +0 -1
  76. package/build/util/content-utils.d.ts +0 -31
  77. package/build/util/content-utils.js +0 -120
  78. package/build/util/content-utils.js.map +0 -1
  79. package/build/util/content.d.ts +0 -1
  80. package/build/util/content.js +0 -16
  81. package/build/util/content.js.map +0 -1
  82. package/build/util/site-detector.d.ts +0 -22
  83. package/build/util/site-detector.js +0 -42
  84. package/build/util/site-detector.js.map +0 -1
@@ -1,111 +0,0 @@
1
- import { logger } from "../util/logger.js";
2
- export class ContextRetriever {
3
- store;
4
- embeddings;
5
- constructor(store, embeddings) {
6
- this.store = store;
7
- this.embeddings = embeddings;
8
- }
9
- async retrieveContext(queryIntent, options = {}) {
10
- const { limit = 10, minScore = 0.7, filterByIntent = true } = options;
11
- logger.debug(`[ContextRetriever] Retrieving context for intent: ${queryIntent.intent}`, {
12
- embedding: {
13
- length: queryIntent.embedding.length,
14
- sample: queryIntent.embedding.slice(0, 5)
15
- },
16
- options: { limit, minScore, filterByIntent }
17
- });
18
- // Validate the embedding
19
- if (!queryIntent.embedding || queryIntent.embedding.length === 0) {
20
- logger.debug('[ContextRetriever] Empty embedding in queryIntent');
21
- return { chunks: [], relevanceScores: [] };
22
- }
23
- // Search for relevant chunks using the original query embedding
24
- logger.debug(`[ContextRetriever] Searching documents with embedding of length ${queryIntent.embedding.length}`);
25
- // Cast to any to work around TypeScript errors with the StorageProvider interface
26
- const searchResults = await this.store.searchDocuments(queryIntent.embedding, // Use the pre-computed query embedding
27
- {
28
- limit: limit * 2, // Get more results initially for filtering
29
- includeVectors: true, // Need vectors for filtering
30
- filterByType: filterByIntent ? queryIntent.intent : undefined
31
- });
32
- logger.debug(`[ContextRetriever] Search returned ${searchResults.length} results`);
33
- // Filter and process results
34
- const filteredResults = searchResults
35
- .filter((result) => {
36
- // Apply minimum relevance score threshold
37
- if (result.score < minScore) {
38
- logger.debug(`[ContextRetriever] Filtering out result with score ${result.score} < ${minScore}`);
39
- return false;
40
- }
41
- if (filterByIntent) {
42
- // Additional intent-based filtering logic here
43
- // For example, for API queries, prioritize chunks with API documentation
44
- // Map intent to metadata type
45
- const typeMap = {
46
- 'overview': ['overview'],
47
- 'api': ['api'],
48
- 'example': ['example'],
49
- 'usage': ['usage', 'overview'],
50
- 'component_usage': ['usage', 'overview'],
51
- 'concept': ['overview'],
52
- 'troubleshooting': ['example', 'usage'],
53
- 'general': ['overview', 'api', 'example', 'usage']
54
- };
55
- const allowedTypes = typeMap[queryIntent.intent] || ['overview'];
56
- const resultType = result.metadata?.type || 'overview';
57
- const isAllowed = allowedTypes.includes(resultType);
58
- if (!isAllowed) {
59
- logger.debug(`[ContextRetriever] Filtering out result with type ${resultType} not in allowed types:`, allowedTypes);
60
- return false;
61
- }
62
- }
63
- return true;
64
- })
65
- .slice(0, limit);
66
- logger.debug(`[ContextRetriever] After filtering, ${filteredResults.length} results remain`);
67
- // Convert search results to EnhancedChunks
68
- const chunks = filteredResults.map((result) => {
69
- // Log vector information for debugging
70
- logger.debug(`[ContextRetriever] Processing result:`, {
71
- id: result.id,
72
- score: result.score,
73
- hasVector: !!result.vector,
74
- vectorLength: result.vector ? result.vector.length : 'N/A'
75
- });
76
- // Use the vector from the search result if available, otherwise create a default vector
77
- const embedding = result.vector && Array.isArray(result.vector) && result.vector.length > 0
78
- ? result.vector
79
- : new Array(this.embeddings.dimensions).fill(0);
80
- return {
81
- id: result.id,
82
- content: result.content,
83
- embedding,
84
- metadata: {
85
- sourceReliability: 1.0, // Default reliability score
86
- lastVerified: new Date(),
87
- citationInfo: {
88
- version: "1.0", // Default version
89
- },
90
- contextualSummary: result.content.substring(0, 200), // Simple summary
91
- prerequisites: [],
92
- validationRules: {
93
- constraints: [],
94
- requirements: []
95
- },
96
- semanticTags: queryIntent.entities,
97
- complexity: 'basic', // Default complexity
98
- type: result.metadata?.type || 'overview', // Use type from search result or default to overview
99
- framework: result.metadata?.framework,
100
- language: result.metadata?.language
101
- },
102
- relationships: []
103
- };
104
- });
105
- return {
106
- chunks,
107
- relevanceScores: filteredResults.map((r) => r.score)
108
- };
109
- }
110
- }
111
- //# sourceMappingURL=retriever.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"retriever.js","sourceRoot":"","sources":["../../src/rag/retriever.ts"],"names":[],"mappings":"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"}
@@ -1,22 +0,0 @@
1
- import { GeneratedResponse } from "./response-generator.js";
2
- import { AssembledContext } from "./context-assembler.js";
3
- export interface ValidationResult {
4
- factCheck: boolean;
5
- codeCheck: boolean;
6
- consistencyCheck: boolean;
7
- details: {
8
- factCheckDetails: string[];
9
- codeCheckDetails: string[];
10
- consistencyCheckDetails: string[];
11
- };
12
- }
13
- export declare class ResponseValidator {
14
- private openai;
15
- constructor(apiKey: string);
16
- validateResponse(response: GeneratedResponse, context: AssembledContext): Promise<ValidationResult>;
17
- private validateFacts;
18
- private validateCode;
19
- private validateConsistency;
20
- private formatContext;
21
- private checkCommonCodeIssues;
22
- }
@@ -1,128 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/rag/validator.ts"],"names":[],"mappings":"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"}
@@ -1,23 +0,0 @@
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
- }
@@ -1,98 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,27 +0,0 @@
1
- export interface RAGMetadata {
2
- sourceReliability: number;
3
- lastVerified: Date;
4
- citationInfo: {
5
- version: string;
6
- commitHash?: string;
7
- documentVersion?: string;
8
- };
9
- contextualSummary: string;
10
- prerequisites: string[];
11
- validationRules: {
12
- constraints: string[];
13
- requirements: string[];
14
- };
15
- semanticTags: string[];
16
- complexity: 'basic' | 'intermediate' | 'advanced';
17
- type: 'overview' | 'api' | 'example' | 'usage';
18
- framework?: string;
19
- language?: string;
20
- }
21
- export interface EnhancedChunk {
22
- id: string;
23
- content: string;
24
- embedding: number[];
25
- metadata: RAGMetadata;
26
- relationships: any[];
27
- }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=rag.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rag.js","sourceRoot":"","sources":["../../src/types/rag.ts"],"names":[],"mappings":""}
@@ -1,31 +0,0 @@
1
- /**
2
- * Utilities for cleaning and formatting content
3
- */
4
- /**
5
- * Cleans text content by normalizing whitespace and line endings
6
- */
7
- export declare function cleanTextContent(text: string): string;
8
- /**
9
- * Cleans and formats code blocks
10
- */
11
- export declare function cleanupCode(code: string): string;
12
- /**
13
- * Formats a code block with language specification
14
- */
15
- export declare function formatCodeBlock(code: string, language: string): string;
16
- /**
17
- * Checks if an element is visible in the DOM
18
- */
19
- export declare function isElementVisible(element: Element): boolean;
20
- /**
21
- * Extracts links and inline code from an element, converting to markdown
22
- */
23
- export declare function extractLinks(element: Element): string;
24
- /**
25
- * Waits for Storybook API to be ready
26
- */
27
- export declare function waitForStorybookAPI(): Promise<void>;
28
- /**
29
- * Waits for Storybook content to be loaded
30
- */
31
- export declare function waitForStorybookContent(document: Document): Promise<Element | null>;
@@ -1,120 +0,0 @@
1
- /**
2
- * Utilities for cleaning and formatting content
3
- */
4
- /**
5
- * Cleans text content by normalizing whitespace and line endings
6
- */
7
- export function cleanTextContent(text) {
8
- return text
9
- .replace(/\\n/g, '\n') // Convert escaped newlines
10
- .replace(/\r\n/g, '\n') // Normalize line endings
11
- .replace(/\t/g, ' ') // Convert tabs to spaces
12
- .replace(/[^\S\n]+/g, ' ') // Replace multiple spaces with single space (except newlines)
13
- .split('\n')
14
- .map(line => line.trim()) // Trim each line
15
- .join('\n')
16
- .replace(/\n{3,}/g, '\n\n') // Max 2 consecutive newlines
17
- .trim();
18
- }
19
- /**
20
- * Cleans and formats code blocks
21
- */
22
- export function cleanupCode(code) {
23
- return code
24
- .replace(/^\s+|\s+$/g, '') // Trim whitespace
25
- .replace(/\t/g, ' ') // Convert tabs to spaces
26
- .replace(/\n{3,}/g, '\n\n') // Reduce multiple blank lines
27
- .replace(/\u00A0/g, ' ') // Replace non-breaking spaces
28
- .replace(/\r\n/g, '\n') // Normalize line endings
29
- .replace(/[ \t]+$/gm, '') // Remove trailing spaces
30
- .replace(/^\n+|\n+$/g, ''); // Trim leading/trailing newlines
31
- }
32
- /**
33
- * Formats a code block with language specification
34
- */
35
- export function formatCodeBlock(code, language) {
36
- const cleanCode = cleanupCode(code);
37
- return `\`\`\`${language}\n${cleanCode}\n\`\`\``;
38
- }
39
- /**
40
- * Checks if an element is visible in the DOM
41
- */
42
- export function isElementVisible(element) {
43
- const style = window.getComputedStyle(element);
44
- return style.display !== 'none' &&
45
- style.visibility !== 'hidden' &&
46
- style.opacity !== '0';
47
- }
48
- /**
49
- * Extracts links and inline code from an element, converting to markdown
50
- */
51
- export function extractLinks(element) {
52
- let content = element.innerHTML;
53
- // Handle links
54
- const links = element.querySelectorAll('a');
55
- links.forEach(link => {
56
- const text = link.textContent?.trim();
57
- const href = link.getAttribute('href');
58
- if (text && href) {
59
- const linkHtml = link.outerHTML;
60
- content = content.replace(linkHtml, `[${text}](${href})`);
61
- }
62
- });
63
- // Handle inline code elements
64
- const codeElements = element.querySelectorAll('code, [class*="code"], [class*="inline-code"], [class*="monospace"]');
65
- codeElements.forEach(code => {
66
- const text = code.textContent?.trim();
67
- if (text) {
68
- const codeHtml = code.outerHTML;
69
- content = content.replace(codeHtml, `\`${text}\``);
70
- }
71
- });
72
- // Convert HTML to plain text while preserving markdown
73
- const div = document.createElement('div');
74
- div.innerHTML = content;
75
- return div.textContent?.trim() || '';
76
- }
77
- /**
78
- * Waits for Storybook API to be ready
79
- */
80
- export async function waitForStorybookAPI() {
81
- const maxAttempts = 5;
82
- for (let attempt = 0; attempt < maxAttempts; attempt++) {
83
- const hasAPI = !!window.__STORYBOOK_CLIENT_API__;
84
- if (hasAPI) {
85
- const api = window.__STORYBOOK_CLIENT_API__;
86
- if (api.storyStore && typeof api.storyStore.ready === 'function') {
87
- await api.storyStore.ready();
88
- }
89
- break;
90
- }
91
- await new Promise(resolve => setTimeout(resolve, 1000));
92
- }
93
- }
94
- /**
95
- * Waits for Storybook content to be loaded
96
- */
97
- export async function waitForStorybookContent(document) {
98
- const maxAttempts = 10;
99
- const delay = 500;
100
- for (let attempt = 0; attempt < maxAttempts; attempt++) {
101
- await new Promise(resolve => setTimeout(resolve, delay));
102
- const mainArea = document.querySelector('.sbdocs-content, #docs-root');
103
- if (!mainArea)
104
- continue;
105
- const hasContent = mainArea.querySelector('h1') && (mainArea.querySelector('p') ||
106
- mainArea.querySelector('table') ||
107
- mainArea.querySelector('ul, ol') ||
108
- mainArea.querySelector('[class*="docblock"]'));
109
- if (hasContent) {
110
- await new Promise(resolve => setTimeout(resolve, 500));
111
- return mainArea;
112
- }
113
- const loadingIndicator = document.querySelector('[class*="loading"], [class*="pending"]');
114
- if (!loadingIndicator) {
115
- console.warn('No loading indicator found but content is missing');
116
- }
117
- }
118
- return null;
119
- }
120
- //# sourceMappingURL=content-utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"content-utils.js","sourceRoot":"","sources":["../../src/util/content-utils.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export declare function cleanContent(text: string): string;
@@ -1,16 +0,0 @@
1
- export function cleanContent(text) {
2
- return text
3
- .replace(/\\n/g, '\n') // Convert escaped newlines
4
- .replace(/\r\n/g, '\n') // Normalize line endings
5
- .replace(/\t/g, ' ') // Convert tabs to spaces
6
- .replace(/[^\S\n]+/g, ' ') // Replace multiple spaces with single space (except newlines)
7
- .replace(/\u00A0/g, ' ') // Replace non-breaking spaces
8
- .replace(/[ \t]+$/gm, '') // Remove trailing spaces
9
- .split('\n')
10
- .map(line => line.trim()) // Trim each line
11
- .join('\n')
12
- .replace(/\n{3,}/g, '\n\n') // Max 2 consecutive newlines
13
- .replace(/^\n+|\n+$/g, '') // Trim leading/trailing newlines
14
- .trim();
15
- }
16
- //# sourceMappingURL=content.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"content.js","sourceRoot":"","sources":["../../src/util/content.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,IAAI;SACR,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAQ,2BAA2B;SACxD,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAO,yBAAyB;SACtD,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAS,yBAAyB;SACtD,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAI,8DAA8D;SAC3F,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAM,8BAA8B;SAC3D,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAK,yBAAyB;SACtD,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAK,iBAAiB;SAC9C,IAAI,CAAC,IAAI,CAAC;SACV,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAG,6BAA6B;SAC1D,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAI,iCAAiC;SAC9D,IAAI,EAAE,CAAC;AACZ,CAAC"}
@@ -1,22 +0,0 @@
1
- /**
2
- * Detects the type of documentation site based on DOM structure and window properties
3
- */
4
- export type SiteType = 'storybook' | 'github' | 'default';
5
- export interface SiteTypeDetector {
6
- canHandle(document: Document): Promise<boolean>;
7
- }
8
- export declare class StorybookDetector implements SiteTypeDetector {
9
- canHandle(document: Document): Promise<boolean>;
10
- }
11
- export declare class GitHubPagesDetector implements SiteTypeDetector {
12
- canHandle(document: Document): Promise<boolean>;
13
- }
14
- export declare class DefaultDetector implements SiteTypeDetector {
15
- canHandle(_document: Document): Promise<boolean>;
16
- }
17
- /**
18
- * Detects the type of documentation site
19
- * @param document The document to analyze
20
- * @returns The detected site type
21
- */
22
- export declare function detectSiteType(document: Document): Promise<SiteType>;