@robthepcguy/rag-vault 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.
Files changed (131) hide show
  1. package/LICENSE +24 -0
  2. package/README.md +421 -0
  3. package/dist/bin/install-skills.d.ts +20 -0
  4. package/dist/bin/install-skills.d.ts.map +1 -0
  5. package/dist/bin/install-skills.js +196 -0
  6. package/dist/bin/install-skills.js.map +1 -0
  7. package/dist/chunker/index.d.ts +11 -0
  8. package/dist/chunker/index.d.ts.map +1 -0
  9. package/dist/chunker/index.js +6 -0
  10. package/dist/chunker/index.js.map +1 -0
  11. package/dist/chunker/semantic-chunker.d.ts +96 -0
  12. package/dist/chunker/semantic-chunker.d.ts.map +1 -0
  13. package/dist/chunker/semantic-chunker.js +267 -0
  14. package/dist/chunker/semantic-chunker.js.map +1 -0
  15. package/dist/chunker/sentence-splitter.d.ts +16 -0
  16. package/dist/chunker/sentence-splitter.d.ts.map +1 -0
  17. package/dist/chunker/sentence-splitter.js +114 -0
  18. package/dist/chunker/sentence-splitter.js.map +1 -0
  19. package/dist/embedder/index.d.ts +55 -0
  20. package/dist/embedder/index.d.ts.map +1 -0
  21. package/dist/embedder/index.js +146 -0
  22. package/dist/embedder/index.js.map +1 -0
  23. package/dist/errors/index.d.ts +73 -0
  24. package/dist/errors/index.d.ts.map +1 -0
  25. package/dist/errors/index.js +170 -0
  26. package/dist/errors/index.js.map +1 -0
  27. package/dist/index.d.ts +3 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +91 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/parser/html-parser.d.ts +14 -0
  32. package/dist/parser/html-parser.d.ts.map +1 -0
  33. package/dist/parser/html-parser.js +99 -0
  34. package/dist/parser/html-parser.js.map +1 -0
  35. package/dist/parser/index.d.ts +144 -0
  36. package/dist/parser/index.d.ts.map +1 -0
  37. package/dist/parser/index.js +446 -0
  38. package/dist/parser/index.js.map +1 -0
  39. package/dist/parser/pdf-filter.d.ts +89 -0
  40. package/dist/parser/pdf-filter.d.ts.map +1 -0
  41. package/dist/parser/pdf-filter.js +304 -0
  42. package/dist/parser/pdf-filter.js.map +1 -0
  43. package/dist/server/index.d.ts +144 -0
  44. package/dist/server/index.d.ts.map +1 -0
  45. package/dist/server/index.js +518 -0
  46. package/dist/server/index.js.map +1 -0
  47. package/dist/server/raw-data-utils.d.ts +81 -0
  48. package/dist/server/raw-data-utils.d.ts.map +1 -0
  49. package/dist/server/raw-data-utils.js +196 -0
  50. package/dist/server/raw-data-utils.js.map +1 -0
  51. package/dist/server/schemas.d.ts +186 -0
  52. package/dist/server/schemas.d.ts.map +1 -0
  53. package/dist/server/schemas.js +99 -0
  54. package/dist/server/schemas.js.map +1 -0
  55. package/dist/utils/config-parsers.d.ts +14 -0
  56. package/dist/utils/config-parsers.d.ts.map +1 -0
  57. package/dist/utils/config-parsers.js +47 -0
  58. package/dist/utils/config-parsers.js.map +1 -0
  59. package/dist/utils/config.d.ts +37 -0
  60. package/dist/utils/config.d.ts.map +1 -0
  61. package/dist/utils/config.js +52 -0
  62. package/dist/utils/config.js.map +1 -0
  63. package/dist/utils/logger.d.ts +36 -0
  64. package/dist/utils/logger.d.ts.map +1 -0
  65. package/dist/utils/logger.js +64 -0
  66. package/dist/utils/logger.js.map +1 -0
  67. package/dist/utils/math.d.ts +34 -0
  68. package/dist/utils/math.d.ts.map +1 -0
  69. package/dist/utils/math.js +73 -0
  70. package/dist/utils/math.js.map +1 -0
  71. package/dist/utils/process-handlers.d.ts +26 -0
  72. package/dist/utils/process-handlers.d.ts.map +1 -0
  73. package/dist/utils/process-handlers.js +69 -0
  74. package/dist/utils/process-handlers.js.map +1 -0
  75. package/dist/vectordb/index.d.ts +210 -0
  76. package/dist/vectordb/index.d.ts.map +1 -0
  77. package/dist/vectordb/index.js +613 -0
  78. package/dist/vectordb/index.js.map +1 -0
  79. package/dist/web/api-routes.d.ts +9 -0
  80. package/dist/web/api-routes.d.ts.map +1 -0
  81. package/dist/web/api-routes.js +127 -0
  82. package/dist/web/api-routes.js.map +1 -0
  83. package/dist/web/config-routes.d.ts +7 -0
  84. package/dist/web/config-routes.d.ts.map +1 -0
  85. package/dist/web/config-routes.js +54 -0
  86. package/dist/web/config-routes.js.map +1 -0
  87. package/dist/web/database-manager.d.ts +130 -0
  88. package/dist/web/database-manager.d.ts.map +1 -0
  89. package/dist/web/database-manager.js +382 -0
  90. package/dist/web/database-manager.js.map +1 -0
  91. package/dist/web/http-server.d.ts +28 -0
  92. package/dist/web/http-server.d.ts.map +1 -0
  93. package/dist/web/http-server.js +311 -0
  94. package/dist/web/http-server.js.map +1 -0
  95. package/dist/web/index.d.ts +3 -0
  96. package/dist/web/index.d.ts.map +1 -0
  97. package/dist/web/index.js +114 -0
  98. package/dist/web/index.js.map +1 -0
  99. package/dist/web/middleware/async-handler.d.ts +17 -0
  100. package/dist/web/middleware/async-handler.d.ts.map +1 -0
  101. package/dist/web/middleware/async-handler.js +26 -0
  102. package/dist/web/middleware/async-handler.js.map +1 -0
  103. package/dist/web/middleware/auth.d.ts +22 -0
  104. package/dist/web/middleware/auth.d.ts.map +1 -0
  105. package/dist/web/middleware/auth.js +81 -0
  106. package/dist/web/middleware/auth.js.map +1 -0
  107. package/dist/web/middleware/error-handler.d.ts +36 -0
  108. package/dist/web/middleware/error-handler.d.ts.map +1 -0
  109. package/dist/web/middleware/error-handler.js +68 -0
  110. package/dist/web/middleware/error-handler.js.map +1 -0
  111. package/dist/web/middleware/index.d.ts +6 -0
  112. package/dist/web/middleware/index.d.ts.map +1 -0
  113. package/dist/web/middleware/index.js +19 -0
  114. package/dist/web/middleware/index.js.map +1 -0
  115. package/dist/web/middleware/rate-limit.d.ts +38 -0
  116. package/dist/web/middleware/rate-limit.d.ts.map +1 -0
  117. package/dist/web/middleware/rate-limit.js +116 -0
  118. package/dist/web/middleware/rate-limit.js.map +1 -0
  119. package/dist/web/middleware/request-logger.d.ts +52 -0
  120. package/dist/web/middleware/request-logger.d.ts.map +1 -0
  121. package/dist/web/middleware/request-logger.js +74 -0
  122. package/dist/web/middleware/request-logger.js.map +1 -0
  123. package/dist/web/types.d.ts +6 -0
  124. package/dist/web/types.d.ts.map +1 -0
  125. package/dist/web/types.js +4 -0
  126. package/dist/web/types.js.map +1 -0
  127. package/package.json +135 -0
  128. package/skills/rag-vault/SKILL.md +111 -0
  129. package/skills/rag-vault/references/html-ingestion.md +73 -0
  130. package/skills/rag-vault/references/query-optimization.md +57 -0
  131. package/skills/rag-vault/references/result-refinement.md +54 -0
@@ -0,0 +1,36 @@
1
+ interface LogMeta {
2
+ [key: string]: unknown;
3
+ }
4
+ /**
5
+ * Logger utility with structured output
6
+ *
7
+ * All output goes to stderr to avoid interfering with MCP stdio transport.
8
+ * Use this instead of console.log/console.error directly.
9
+ *
10
+ * @internal - This is for internal use only, not part of public API.
11
+ * Currently exported for future migration of console.error() calls.
12
+ *
13
+ * @example
14
+ * logger.info('Server started', { port: 3000 })
15
+ * logger.error('Failed to process', { error: err.message })
16
+ */
17
+ export declare const logger: {
18
+ /**
19
+ * Debug-level logging (only when DEBUG=true or LOG_LEVEL=debug)
20
+ */
21
+ debug(message: string, meta?: LogMeta): void;
22
+ /**
23
+ * Info-level logging for normal operations
24
+ */
25
+ info(message: string, meta?: LogMeta): void;
26
+ /**
27
+ * Warning-level logging for potential issues
28
+ */
29
+ warn(message: string, meta?: LogMeta): void;
30
+ /**
31
+ * Error-level logging for failures
32
+ */
33
+ error(message: string, meta?: LogMeta): void;
34
+ };
35
+ export {};
36
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAKA,UAAU,OAAO;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAsBD;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,MAAM;IACjB;;OAEG;mBACY,MAAM,SAAS,OAAO,GAAG,IAAI;IAM5C;;OAEG;kBACW,MAAM,SAAS,OAAO,GAAG,IAAI;IAI3C;;OAEG;kBACW,MAAM,SAAS,OAAO,GAAG,IAAI;IAI3C;;OAEG;mBACY,MAAM,SAAS,OAAO,GAAG,IAAI;CAG7C,CAAA"}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ // Centralized logging utility
3
+ // Provides structured logging with levels and optional metadata
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.logger = void 0;
6
+ /**
7
+ * Format a log message with optional metadata
8
+ */
9
+ function formatMessage(level, message, meta) {
10
+ const timestamp = new Date().toISOString();
11
+ const prefix = `[${timestamp}] [${level.toUpperCase()}]`;
12
+ if (meta && Object.keys(meta).length > 0) {
13
+ return `${prefix} ${message} ${JSON.stringify(meta)}`;
14
+ }
15
+ return `${prefix} ${message}`;
16
+ }
17
+ /**
18
+ * Check if debug logging is enabled
19
+ */
20
+ function isDebugEnabled() {
21
+ return process.env['DEBUG'] === 'true' || process.env['LOG_LEVEL'] === 'debug';
22
+ }
23
+ /**
24
+ * Logger utility with structured output
25
+ *
26
+ * All output goes to stderr to avoid interfering with MCP stdio transport.
27
+ * Use this instead of console.log/console.error directly.
28
+ *
29
+ * @internal - This is for internal use only, not part of public API.
30
+ * Currently exported for future migration of console.error() calls.
31
+ *
32
+ * @example
33
+ * logger.info('Server started', { port: 3000 })
34
+ * logger.error('Failed to process', { error: err.message })
35
+ */
36
+ exports.logger = {
37
+ /**
38
+ * Debug-level logging (only when DEBUG=true or LOG_LEVEL=debug)
39
+ */
40
+ debug(message, meta) {
41
+ if (isDebugEnabled()) {
42
+ console.error(formatMessage('debug', message, meta));
43
+ }
44
+ },
45
+ /**
46
+ * Info-level logging for normal operations
47
+ */
48
+ info(message, meta) {
49
+ console.error(formatMessage('info', message, meta));
50
+ },
51
+ /**
52
+ * Warning-level logging for potential issues
53
+ */
54
+ warn(message, meta) {
55
+ console.error(formatMessage('warn', message, meta));
56
+ },
57
+ /**
58
+ * Error-level logging for failures
59
+ */
60
+ error(message, meta) {
61
+ console.error(formatMessage('error', message, meta));
62
+ },
63
+ };
64
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":";AAAA,8BAA8B;AAC9B,gEAAgE;;;AAQhE;;GAEG;AACH,SAAS,aAAa,CAAC,KAAe,EAAE,OAAe,EAAE,IAAc;IACrE,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IAC1C,MAAM,MAAM,GAAG,IAAI,SAAS,MAAM,KAAK,CAAC,WAAW,EAAE,GAAG,CAAA;IAExD,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzC,OAAO,GAAG,MAAM,IAAI,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAA;IACvD,CAAC;IACD,OAAO,GAAG,MAAM,IAAI,OAAO,EAAE,CAAA;AAC/B,CAAC;AAED;;GAEG;AACH,SAAS,cAAc;IACrB,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,OAAO,CAAA;AAChF,CAAC;AAED;;;;;;;;;;;;GAYG;AACU,QAAA,MAAM,GAAG;IACpB;;OAEG;IACH,KAAK,CAAC,OAAe,EAAE,IAAc;QACnC,IAAI,cAAc,EAAE,EAAE,CAAC;YACrB,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAA;QACtD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,OAAe,EAAE,IAAc;QAClC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAA;IACrD,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,OAAe,EAAE,IAAc;QAClC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAA;IACrD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAe,EAAE,IAAc;QACnC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAA;IACtD,CAAC;CACF,CAAA"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Calculate cosine similarity between two vectors.
3
+ *
4
+ * Cosine similarity measures the cosine of the angle between two vectors,
5
+ * ranging from -1 (opposite) to 1 (identical), with 0 being orthogonal.
6
+ *
7
+ * @param vec1 - First vector
8
+ * @param vec2 - Second vector
9
+ * @returns Cosine similarity value between -1 and 1, or 0 if vectors are invalid
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * const similarity = cosineSimilarity([1, 0, 0], [1, 0, 0]) // 1.0 (identical)
14
+ * const orthogonal = cosineSimilarity([1, 0, 0], [0, 1, 0]) // 0.0 (orthogonal)
15
+ * const opposite = cosineSimilarity([1, 0, 0], [-1, 0, 0]) // -1.0 (opposite)
16
+ * ```
17
+ */
18
+ export declare function cosineSimilarity(vec1: number[], vec2: number[]): number;
19
+ /**
20
+ * Calculate the dot product of two vectors.
21
+ *
22
+ * @param vec1 - First vector
23
+ * @param vec2 - Second vector
24
+ * @returns Dot product value, or 0 if vectors have different lengths
25
+ */
26
+ export declare function dotProduct(vec1: number[], vec2: number[]): number;
27
+ /**
28
+ * Calculate the Euclidean norm (L2 norm) of a vector.
29
+ *
30
+ * @param vec - Input vector
31
+ * @returns Euclidean norm (magnitude) of the vector
32
+ */
33
+ export declare function euclideanNorm(vec: number[]): number;
34
+ //# sourceMappingURL=math.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"math.d.ts","sourceRoot":"","sources":["../../src/utils/math.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAqBvE;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAWjE;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,CAMnD"}
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ // Mathematical utility functions for vector operations
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.cosineSimilarity = cosineSimilarity;
5
+ exports.dotProduct = dotProduct;
6
+ exports.euclideanNorm = euclideanNorm;
7
+ /**
8
+ * Calculate cosine similarity between two vectors.
9
+ *
10
+ * Cosine similarity measures the cosine of the angle between two vectors,
11
+ * ranging from -1 (opposite) to 1 (identical), with 0 being orthogonal.
12
+ *
13
+ * @param vec1 - First vector
14
+ * @param vec2 - Second vector
15
+ * @returns Cosine similarity value between -1 and 1, or 0 if vectors are invalid
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * const similarity = cosineSimilarity([1, 0, 0], [1, 0, 0]) // 1.0 (identical)
20
+ * const orthogonal = cosineSimilarity([1, 0, 0], [0, 1, 0]) // 0.0 (orthogonal)
21
+ * const opposite = cosineSimilarity([1, 0, 0], [-1, 0, 0]) // -1.0 (opposite)
22
+ * ```
23
+ */
24
+ function cosineSimilarity(vec1, vec2) {
25
+ if (vec1.length !== vec2.length || vec1.length === 0) {
26
+ return 0;
27
+ }
28
+ let dotProduct = 0;
29
+ let norm1 = 0;
30
+ let norm2 = 0;
31
+ for (let i = 0; i < vec1.length; i++) {
32
+ const v1 = vec1[i] ?? 0;
33
+ const v2 = vec2[i] ?? 0;
34
+ dotProduct += v1 * v2;
35
+ norm1 += v1 * v1;
36
+ norm2 += v2 * v2;
37
+ }
38
+ const denominator = Math.sqrt(norm1) * Math.sqrt(norm2);
39
+ if (denominator === 0)
40
+ return 0;
41
+ return dotProduct / denominator;
42
+ }
43
+ /**
44
+ * Calculate the dot product of two vectors.
45
+ *
46
+ * @param vec1 - First vector
47
+ * @param vec2 - Second vector
48
+ * @returns Dot product value, or 0 if vectors have different lengths
49
+ */
50
+ function dotProduct(vec1, vec2) {
51
+ if (vec1.length !== vec2.length) {
52
+ return 0;
53
+ }
54
+ let result = 0;
55
+ for (let i = 0; i < vec1.length; i++) {
56
+ result += (vec1[i] ?? 0) * (vec2[i] ?? 0);
57
+ }
58
+ return result;
59
+ }
60
+ /**
61
+ * Calculate the Euclidean norm (L2 norm) of a vector.
62
+ *
63
+ * @param vec - Input vector
64
+ * @returns Euclidean norm (magnitude) of the vector
65
+ */
66
+ function euclideanNorm(vec) {
67
+ let sum = 0;
68
+ for (const v of vec) {
69
+ sum += v * v;
70
+ }
71
+ return Math.sqrt(sum);
72
+ }
73
+ //# sourceMappingURL=math.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"math.js","sourceRoot":"","sources":["../../src/utils/math.ts"],"names":[],"mappings":";AAAA,uDAAuD;;AAmBvD,4CAqBC;AASD,gCAWC;AAQD,sCAMC;AAxED;;;;;;;;;;;;;;;;GAgBG;AACH,SAAgB,gBAAgB,CAAC,IAAc,EAAE,IAAc;IAC7D,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrD,OAAO,CAAC,CAAA;IACV,CAAC;IAED,IAAI,UAAU,GAAG,CAAC,CAAA;IAClB,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,IAAI,KAAK,GAAG,CAAC,CAAA;IAEb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QACvB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QACvB,UAAU,IAAI,EAAE,GAAG,EAAE,CAAA;QACrB,KAAK,IAAI,EAAE,GAAG,EAAE,CAAA;QAChB,KAAK,IAAI,EAAE,GAAG,EAAE,CAAA;IAClB,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACvD,IAAI,WAAW,KAAK,CAAC;QAAE,OAAO,CAAC,CAAA;IAE/B,OAAO,UAAU,GAAG,WAAW,CAAA;AACjC,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,UAAU,CAAC,IAAc,EAAE,IAAc;IACvD,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;QAChC,OAAO,CAAC,CAAA;IACV,CAAC;IAED,IAAI,MAAM,GAAG,CAAC,CAAA;IACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;IAC3C,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;;;;GAKG;AACH,SAAgB,aAAa,CAAC,GAAa;IACzC,IAAI,GAAG,GAAG,CAAC,CAAA;IACX,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;QACpB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA;IACd,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACvB,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Register a cleanup callback for graceful shutdown
3
+ *
4
+ * Callbacks are executed in order when SIGTERM or SIGINT is received.
5
+ *
6
+ * @param callback - Cleanup function to execute on shutdown
7
+ */
8
+ export declare function onShutdown(callback: () => void | Promise<void>): void;
9
+ /**
10
+ * Setup global process error handlers
11
+ *
12
+ * Handles:
13
+ * - unhandledRejection: Logs promise rejection and exits
14
+ * - uncaughtException: Logs exception and exits
15
+ *
16
+ * @param exitCode - Exit code to use on error (default: 1)
17
+ */
18
+ export declare function setupProcessHandlers(exitCode?: number): void;
19
+ /**
20
+ * Setup graceful shutdown handlers for SIGTERM and SIGINT
21
+ *
22
+ * Executes all registered cleanup callbacks before exiting.
23
+ * Use onShutdown() to register cleanup functions.
24
+ */
25
+ export declare function setupGracefulShutdown(): void;
26
+ //# sourceMappingURL=process-handlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-handlers.d.ts","sourceRoot":"","sources":["../../src/utils/process-handlers.ts"],"names":[],"mappings":"AAMA;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAErE;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,SAAI,GAAG,IAAI,CAUvD;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CA2B5C"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ // Shared process error handlers
3
+ // Used by both MCP server (src/index.ts) and Web server (src/web/index.ts)
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.onShutdown = onShutdown;
6
+ exports.setupProcessHandlers = setupProcessHandlers;
7
+ exports.setupGracefulShutdown = setupGracefulShutdown;
8
+ /** Cleanup callbacks registered for graceful shutdown */
9
+ const cleanupCallbacks = [];
10
+ /**
11
+ * Register a cleanup callback for graceful shutdown
12
+ *
13
+ * Callbacks are executed in order when SIGTERM or SIGINT is received.
14
+ *
15
+ * @param callback - Cleanup function to execute on shutdown
16
+ */
17
+ function onShutdown(callback) {
18
+ cleanupCallbacks.push(callback);
19
+ }
20
+ /**
21
+ * Setup global process error handlers
22
+ *
23
+ * Handles:
24
+ * - unhandledRejection: Logs promise rejection and exits
25
+ * - uncaughtException: Logs exception and exits
26
+ *
27
+ * @param exitCode - Exit code to use on error (default: 1)
28
+ */
29
+ function setupProcessHandlers(exitCode = 1) {
30
+ process.on('unhandledRejection', (reason, promise) => {
31
+ console.error('Unhandled Rejection at:', promise, 'reason:', reason);
32
+ process.exit(exitCode);
33
+ });
34
+ process.on('uncaughtException', (error) => {
35
+ console.error('Uncaught Exception:', error);
36
+ process.exit(exitCode);
37
+ });
38
+ }
39
+ /**
40
+ * Setup graceful shutdown handlers for SIGTERM and SIGINT
41
+ *
42
+ * Executes all registered cleanup callbacks before exiting.
43
+ * Use onShutdown() to register cleanup functions.
44
+ */
45
+ function setupGracefulShutdown() {
46
+ let isShuttingDown = false;
47
+ const shutdown = async (signal) => {
48
+ if (isShuttingDown) {
49
+ console.error('Shutdown already in progress...');
50
+ return;
51
+ }
52
+ isShuttingDown = true;
53
+ console.error(`Received ${signal}, shutting down gracefully...`);
54
+ // Execute cleanup callbacks
55
+ for (const callback of cleanupCallbacks) {
56
+ try {
57
+ await callback();
58
+ }
59
+ catch (error) {
60
+ console.error('Error during cleanup:', error);
61
+ }
62
+ }
63
+ console.error('Shutdown complete');
64
+ process.exit(0);
65
+ };
66
+ process.on('SIGTERM', () => shutdown('SIGTERM'));
67
+ process.on('SIGINT', () => shutdown('SIGINT'));
68
+ }
69
+ //# sourceMappingURL=process-handlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-handlers.js","sourceRoot":"","sources":["../../src/utils/process-handlers.ts"],"names":[],"mappings":";AAAA,gCAAgC;AAChC,2EAA2E;;AAY3E,gCAEC;AAWD,oDAUC;AAQD,sDA2BC;AApED,yDAAyD;AACzD,MAAM,gBAAgB,GAAsC,EAAE,CAAA;AAE9D;;;;;;GAMG;AACH,SAAgB,UAAU,CAAC,QAAoC;IAC7D,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;AACjC,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,oBAAoB,CAAC,QAAQ,GAAG,CAAC;IAC/C,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;QACnD,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;QACpE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACxB,CAAC,CAAC,CAAA;IAEF,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,KAAK,EAAE,EAAE;QACxC,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAA;QAC3C,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACxB,CAAC,CAAC,CAAA;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAgB,qBAAqB;IACnC,IAAI,cAAc,GAAG,KAAK,CAAA;IAE1B,MAAM,QAAQ,GAAG,KAAK,EAAE,MAAc,EAAiB,EAAE;QACvD,IAAI,cAAc,EAAE,CAAC;YACnB,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAA;YAChD,OAAM;QACR,CAAC;QACD,cAAc,GAAG,IAAI,CAAA;QAErB,OAAO,CAAC,KAAK,CAAC,YAAY,MAAM,+BAA+B,CAAC,CAAA;QAEhE,4BAA4B;QAC5B,KAAK,MAAM,QAAQ,IAAI,gBAAgB,EAAE,CAAC;YACxC,IAAI,CAAC;gBACH,MAAM,QAAQ,EAAE,CAAA;YAClB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAA;YAC/C,CAAC;QACH,CAAC;QAED,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAA;QAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC,CAAA;IAED,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAA;IAChD,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAA;AAChD,CAAC"}
@@ -0,0 +1,210 @@
1
+ export { DatabaseError } from '../errors/index.js';
2
+ /**
3
+ * Grouping mode for quality filtering
4
+ * - 'similar': Only return the most similar group (stops at first distance jump)
5
+ * - 'related': Include related groups (stops at second distance jump)
6
+ */
7
+ export type GroupingMode = 'similar' | 'related';
8
+ /**
9
+ * VectorStore configuration
10
+ */
11
+ export interface VectorStoreConfig {
12
+ /** LanceDB database path */
13
+ dbPath: string;
14
+ /** Table name */
15
+ tableName: string;
16
+ /** Maximum distance threshold for filtering results (optional) */
17
+ maxDistance?: number;
18
+ /** Grouping mode for quality filtering (optional) */
19
+ grouping?: GroupingMode;
20
+ /**
21
+ * Hybrid weight: controls how strongly BM25 boosts candidates from vector search.
22
+ * 0 = no keyword boost (vector-only), higher values increase keyword match influence.
23
+ * Default: 0.6
24
+ */
25
+ hybridWeight?: number;
26
+ }
27
+ /**
28
+ * Document metadata
29
+ */
30
+ export interface DocumentMetadata {
31
+ /** File name */
32
+ fileName: string;
33
+ /** File size in bytes */
34
+ fileSize: number;
35
+ /** File type (extension) */
36
+ fileType: string;
37
+ }
38
+ /**
39
+ * Vector chunk
40
+ */
41
+ export interface VectorChunk {
42
+ /** Chunk ID (UUID) */
43
+ id: string;
44
+ /** File path (absolute) */
45
+ filePath: string;
46
+ /** Chunk index (zero-based) */
47
+ chunkIndex: number;
48
+ /** Chunk text */
49
+ text: string;
50
+ /** Embedding vector (dimension depends on model) */
51
+ vector: number[];
52
+ /** Metadata */
53
+ metadata: DocumentMetadata;
54
+ /** Ingestion timestamp (ISO 8601 format) */
55
+ timestamp: string;
56
+ }
57
+ /**
58
+ * Search result
59
+ */
60
+ export interface SearchResult {
61
+ /** File path */
62
+ filePath: string;
63
+ /** Chunk index */
64
+ chunkIndex: number;
65
+ /** Chunk text */
66
+ text: string;
67
+ /**
68
+ * Distance score (lower = more similar).
69
+ * Uses dot product on normalized embeddings (equivalent to cosine distance).
70
+ * Range: [0, 2] where 0 = identical, 1 = orthogonal, 2 = opposite.
71
+ */
72
+ score: number;
73
+ /** Metadata */
74
+ metadata: DocumentMetadata;
75
+ }
76
+ /**
77
+ * Vector storage class using LanceDB
78
+ *
79
+ * Responsibilities:
80
+ * - LanceDB operations (insert, delete, search)
81
+ * - Transaction handling (atomicity of delete→insert)
82
+ * - Metadata management
83
+ *
84
+ * FTS Circuit Breaker:
85
+ * - Tracks FTS failures (max 3 before disabling)
86
+ * - Auto-recovers after 5-minute cooldown
87
+ * - Prevents permanent FTS disable from transient errors
88
+ */
89
+ export declare class VectorStore {
90
+ private db;
91
+ private table;
92
+ private readonly config;
93
+ private ftsEnabled;
94
+ private ftsFailureCount;
95
+ private ftsLastFailure;
96
+ /** Mutex to prevent race conditions in circuit breaker state transitions */
97
+ private circuitBreakerResetting;
98
+ constructor(config: VectorStoreConfig);
99
+ /**
100
+ * Check if FTS should be attempted (circuit breaker logic)
101
+ * - Returns false if max failures reached and cooldown not elapsed
102
+ * - Resets failure count after successful cooldown period
103
+ * - Uses mutex to prevent race conditions during reset
104
+ */
105
+ private shouldAttemptFts;
106
+ /**
107
+ * Record FTS failure (circuit breaker)
108
+ */
109
+ private recordFtsFailure;
110
+ /**
111
+ * Record FTS success (resets circuit breaker)
112
+ */
113
+ private recordFtsSuccess;
114
+ /**
115
+ * Initialize LanceDB and create table
116
+ */
117
+ initialize(): Promise<void>;
118
+ /**
119
+ * Delete all chunks for specified file path
120
+ *
121
+ * @param filePath - File path (absolute)
122
+ */
123
+ deleteChunks(filePath: string): Promise<void>;
124
+ /**
125
+ * Batch insert vector chunks
126
+ *
127
+ * @param chunks - Array of vector chunks
128
+ */
129
+ insertChunks(chunks: VectorChunk[]): Promise<void>;
130
+ /**
131
+ * Ensure FTS index exists for hybrid search
132
+ * Creates ngram-based index if it doesn't exist, drops old versions
133
+ * @throws DatabaseError if index creation fails (Fail-Fast principle)
134
+ */
135
+ private ensureFtsIndex;
136
+ /**
137
+ * Rebuild FTS index after data changes (insert/delete)
138
+ * LanceDB OSS requires explicit optimize() call to update FTS index
139
+ * Also cleans up old index versions to prevent storage bloat
140
+ */
141
+ private rebuildFtsIndex;
142
+ /**
143
+ * Apply grouping algorithm to filter results by detecting group boundaries.
144
+ *
145
+ * Uses statistical threshold (mean + k*std) to identify significant gaps (group boundaries).
146
+ * - 'similar': Returns only the first group (cuts at first boundary)
147
+ * - 'related': Returns up to 2 groups (cuts at second boundary)
148
+ *
149
+ * @param results - Search results sorted by distance (ascending)
150
+ * @param mode - Grouping mode ('similar' = 1 group, 'related' = 2 groups)
151
+ * @returns Filtered results
152
+ */
153
+ private applyGrouping;
154
+ /**
155
+ * Execute vector search with quality filtering
156
+ * Architecture: Semantic search → Filter (maxDistance, grouping) → Keyword boost
157
+ *
158
+ * This "prefetch then rerank" approach ensures:
159
+ * - maxDistance and grouping work on meaningful vector distances
160
+ * - Keyword matching acts as a boost, not a replacement for semantic similarity
161
+ *
162
+ * @param queryVector - Query vector (dimension depends on model)
163
+ * @param queryText - Optional query text for keyword boost (BM25)
164
+ * @param limit - Number of results to retrieve (default 10)
165
+ * @returns Array of search results (sorted by distance ascending, filtered by quality settings)
166
+ */
167
+ search(queryVector: number[], queryText?: string, limit?: number): Promise<SearchResult[]>;
168
+ /**
169
+ * Apply keyword boost to rerank vector search results
170
+ * Uses multiplicative formula: final_distance = distance / (1 + keyword_normalized * weight)
171
+ *
172
+ * This proportional boost ensures:
173
+ * - Keyword matches improve ranking without dominating semantic similarity
174
+ * - Documents without keyword matches keep their original vector distance
175
+ * - Higher weight = stronger influence of keyword matching
176
+ *
177
+ * @param vectorResults - Results from vector search (already filtered by maxDistance/grouping)
178
+ * @param ftsResults - Raw FTS results with BM25 scores
179
+ * @param weight - Boost weight (0-1, from hybridWeight config)
180
+ */
181
+ private applyKeywordBoost;
182
+ /**
183
+ * Get list of ingested files
184
+ *
185
+ * @returns Array of file information
186
+ */
187
+ listFiles(): Promise<{
188
+ filePath: string;
189
+ chunkCount: number;
190
+ timestamp: string;
191
+ }[]>;
192
+ /**
193
+ * Close the database connection and release resources
194
+ */
195
+ close(): Promise<void>;
196
+ /**
197
+ * Get system status
198
+ *
199
+ * @returns System status information
200
+ */
201
+ getStatus(): Promise<{
202
+ documentCount: number;
203
+ chunkCount: number;
204
+ memoryUsage: number;
205
+ uptime: number;
206
+ ftsIndexEnabled: boolean;
207
+ searchMode: 'hybrid' | 'vector-only';
208
+ }>;
209
+ }
210
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vectordb/index.ts"],"names":[],"mappings":"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"}