@robthepcguy/rag-vault 1.5.3 → 1.7.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 (141) hide show
  1. package/README.md +86 -14
  2. package/dist/bin/install-skills.d.ts.map +1 -0
  3. package/dist/bin/install-skills.js +16 -17
  4. package/dist/bin/install-skills.js.map +1 -0
  5. package/dist/chunker/index.d.ts.map +1 -0
  6. package/dist/chunker/index.js +1 -5
  7. package/dist/chunker/index.js.map +1 -0
  8. package/dist/chunker/semantic-chunker.d.ts.map +1 -0
  9. package/dist/chunker/semantic-chunker.js +9 -13
  10. package/dist/chunker/semantic-chunker.js.map +1 -0
  11. package/dist/chunker/sentence-splitter.d.ts.map +1 -0
  12. package/dist/chunker/sentence-splitter.js +1 -4
  13. package/dist/chunker/sentence-splitter.js.map +1 -0
  14. package/dist/embedder/index.d.ts +10 -0
  15. package/dist/embedder/index.d.ts.map +1 -0
  16. package/dist/embedder/index.js +58 -32
  17. package/dist/embedder/index.js.map +1 -0
  18. package/dist/errors/index.d.ts.map +1 -0
  19. package/dist/errors/index.js +10 -17
  20. package/dist/errors/index.js.map +1 -0
  21. package/dist/explainability/index.d.ts.map +1 -0
  22. package/dist/explainability/index.js +1 -5
  23. package/dist/explainability/index.js.map +1 -0
  24. package/dist/explainability/keywords.d.ts.map +1 -0
  25. package/dist/explainability/keywords.js +1 -4
  26. package/dist/explainability/keywords.js.map +1 -0
  27. package/dist/flywheel/feedback.d.ts.map +1 -0
  28. package/dist/flywheel/feedback.js +15 -19
  29. package/dist/flywheel/feedback.js.map +1 -0
  30. package/dist/flywheel/index.d.ts.map +1 -0
  31. package/dist/flywheel/index.js +1 -5
  32. package/dist/flywheel/index.js.map +1 -0
  33. package/dist/index.d.ts.map +1 -0
  34. package/dist/index.js +86 -64
  35. package/dist/index.js.map +1 -0
  36. package/dist/parser/html-parser.d.ts.map +1 -0
  37. package/dist/parser/html-parser.js +7 -13
  38. package/dist/parser/html-parser.js.map +1 -0
  39. package/dist/parser/index.d.ts.map +1 -0
  40. package/dist/parser/index.js +44 -52
  41. package/dist/parser/index.js.map +1 -0
  42. package/dist/parser/pdf-filter.d.ts.map +1 -0
  43. package/dist/parser/pdf-filter.js +10 -16
  44. package/dist/parser/pdf-filter.js.map +1 -0
  45. package/dist/query/index.d.ts.map +1 -0
  46. package/dist/query/index.js +1 -8
  47. package/dist/query/index.js.map +1 -0
  48. package/dist/query/parser.d.ts.map +1 -0
  49. package/dist/query/parser.js +5 -12
  50. package/dist/query/parser.js.map +1 -0
  51. package/dist/server/index.d.ts +6 -0
  52. package/dist/server/index.d.ts.map +1 -0
  53. package/dist/server/index.js +106 -95
  54. package/dist/server/index.js.map +1 -0
  55. package/dist/server/raw-data-utils.d.ts.map +1 -0
  56. package/dist/server/raw-data-utils.js +21 -33
  57. package/dist/server/raw-data-utils.js.map +1 -0
  58. package/dist/server/remote-transport.d.ts +31 -0
  59. package/dist/server/remote-transport.d.ts.map +1 -0
  60. package/dist/server/remote-transport.js +177 -0
  61. package/dist/server/remote-transport.js.map +1 -0
  62. package/dist/server/schemas.d.ts.map +1 -0
  63. package/dist/server/schemas.js +35 -38
  64. package/dist/server/schemas.js.map +1 -0
  65. package/dist/utils/config-parsers.d.ts.map +1 -0
  66. package/dist/utils/config-parsers.js +3 -8
  67. package/dist/utils/config-parsers.js.map +1 -0
  68. package/dist/utils/config.d.ts.map +1 -0
  69. package/dist/utils/config.js +12 -19
  70. package/dist/utils/config.js.map +1 -0
  71. package/dist/utils/embedding-device-cli.d.ts +12 -0
  72. package/dist/utils/embedding-device-cli.d.ts.map +1 -0
  73. package/dist/utils/embedding-device-cli.js +61 -0
  74. package/dist/utils/embedding-device-cli.js.map +1 -0
  75. package/dist/utils/file-utils.d.ts.map +1 -0
  76. package/dist/utils/file-utils.js +12 -18
  77. package/dist/utils/file-utils.js.map +1 -0
  78. package/dist/utils/math.d.ts.map +1 -0
  79. package/dist/utils/math.js +2 -6
  80. package/dist/utils/math.js.map +1 -0
  81. package/dist/utils/process-handlers.d.ts.map +1 -0
  82. package/dist/utils/process-handlers.js +5 -10
  83. package/dist/utils/process-handlers.js.map +1 -0
  84. package/dist/vectordb/index.d.ts.map +1 -0
  85. package/dist/vectordb/index.js +39 -45
  86. package/dist/vectordb/index.js.map +1 -0
  87. package/dist/web/api-routes.d.ts.map +1 -0
  88. package/dist/web/api-routes.js +41 -47
  89. package/dist/web/api-routes.js.map +1 -0
  90. package/dist/web/config-routes.d.ts.map +1 -0
  91. package/dist/web/config-routes.js +30 -33
  92. package/dist/web/config-routes.js.map +1 -0
  93. package/dist/web/database-manager.d.ts.map +1 -0
  94. package/dist/web/database-manager.js +67 -72
  95. package/dist/web/database-manager.js.map +1 -0
  96. package/dist/web/http-server.d.ts.map +1 -0
  97. package/dist/web/http-server.js +45 -86
  98. package/dist/web/http-server.js.map +1 -0
  99. package/dist/web/index.d.ts.map +1 -0
  100. package/dist/web/index.js +20 -58
  101. package/dist/web/index.js.map +1 -0
  102. package/dist/web/middleware/async-handler.d.ts.map +1 -0
  103. package/dist/web/middleware/async-handler.js +1 -4
  104. package/dist/web/middleware/async-handler.js.map +1 -0
  105. package/dist/web/middleware/auth.d.ts.map +1 -0
  106. package/dist/web/middleware/auth.js +3 -6
  107. package/dist/web/middleware/auth.js.map +1 -0
  108. package/dist/web/middleware/error-handler.d.ts.map +1 -0
  109. package/dist/web/middleware/error-handler.js +4 -8
  110. package/dist/web/middleware/error-handler.js.map +1 -0
  111. package/dist/web/middleware/index.d.ts.map +1 -0
  112. package/dist/web/middleware/index.js +5 -17
  113. package/dist/web/middleware/index.js.map +1 -0
  114. package/dist/web/middleware/rate-limit.d.ts.map +1 -0
  115. package/dist/web/middleware/rate-limit.js +3 -8
  116. package/dist/web/middleware/rate-limit.js.map +1 -0
  117. package/dist/web/middleware/request-logger.d.ts.map +1 -0
  118. package/dist/web/middleware/request-logger.js +2 -6
  119. package/dist/web/middleware/request-logger.js.map +1 -0
  120. package/dist/web/types.d.ts.map +1 -0
  121. package/dist/web/types.js +1 -2
  122. package/dist/web/types.js.map +1 -0
  123. package/package.json +31 -35
  124. package/web-ui/dist/assets/CollectionsPage-BDmEfv3V.js +1 -0
  125. package/web-ui/dist/assets/FilesPage-pG9HmpgQ.js +1 -0
  126. package/web-ui/dist/assets/ReaderPage-CwMN03NU.js +28 -0
  127. package/web-ui/dist/assets/ReaderSettingsContext-CkSjqsRh.js +1 -0
  128. package/web-ui/dist/assets/SearchPage-DAltjnLL.js +1 -0
  129. package/web-ui/dist/assets/SettingsPage-C6J5BITP.js +1 -0
  130. package/web-ui/dist/assets/StatusPage-powRGmW3.js +1 -0
  131. package/web-ui/dist/assets/UploadPage-eyfSjL4u.js +8 -0
  132. package/web-ui/dist/assets/format-DOJ3IkRX.js +1 -0
  133. package/web-ui/dist/assets/index-BpwaiuGL.css +1 -0
  134. package/web-ui/dist/assets/index-D068MV_o.js +6 -0
  135. package/web-ui/dist/assets/link-indexer.worker-DGXNsXmZ.js +1 -0
  136. package/web-ui/dist/assets/motion-CKwJwI3J.js +9 -0
  137. package/web-ui/dist/assets/query-DPt-uCb6.js +1 -0
  138. package/web-ui/dist/assets/vendor-C2QPsZ3S.js +10 -0
  139. package/web-ui/dist/index.html +7 -2
  140. package/web-ui/dist/assets/index-SBHxoAwi.js +0 -120
  141. package/web-ui/dist/assets/index-ej8i4PGl.css +0 -1
@@ -1,19 +1,7 @@
1
- "use strict";
2
1
  // Raw Data Utilities for ingest_data tool
3
2
  // Handles: base64url encoding, source normalization, file saving, source extraction
4
- Object.defineProperty(exports, "__esModule", { value: true });
5
- exports.encodeBase64Url = encodeBase64Url;
6
- exports.decodeBase64Url = decodeBase64Url;
7
- exports.validateSourceProtocol = validateSourceProtocol;
8
- exports.normalizeSource = normalizeSource;
9
- exports.getRawDataDir = getRawDataDir;
10
- exports.generateRawDataPath = generateRawDataPath;
11
- exports.saveRawData = saveRawData;
12
- exports.isRawDataPath = isRawDataPath;
13
- exports.isManagedRawDataPath = isManagedRawDataPath;
14
- exports.extractSourceFromPath = extractSourceFromPath;
15
- const promises_1 = require("node:fs/promises");
16
- const node_path_1 = require("node:path");
3
+ import { mkdir, writeFile } from 'node:fs/promises';
4
+ import { dirname, isAbsolute, join, relative, resolve, sep } from 'node:path';
17
5
  // ============================================
18
6
  // Base64URL Encoding/Decoding
19
7
  // ============================================
@@ -26,7 +14,7 @@ const node_path_1 = require("node:path");
26
14
  * @param str - String to encode
27
15
  * @returns URL-safe base64 encoded string
28
16
  */
29
- function encodeBase64Url(str) {
17
+ export function encodeBase64Url(str) {
30
18
  return Buffer.from(str, 'utf-8')
31
19
  .toString('base64')
32
20
  .replace(/\+/g, '-')
@@ -39,7 +27,7 @@ function encodeBase64Url(str) {
39
27
  * @param base64url - URL-safe base64 encoded string
40
28
  * @returns Decoded string
41
29
  */
42
- function decodeBase64Url(base64url) {
30
+ export function decodeBase64Url(base64url) {
43
31
  // Convert base64url to standard base64
44
32
  let base64 = base64url.replace(/-/g, '+').replace(/_/g, '/');
45
33
  // Add padding if needed
@@ -64,7 +52,7 @@ const BLOCKED_PROTOCOLS = ['javascript:', 'vbscript:', 'data:'];
64
52
  * @param source - Source identifier to validate
65
53
  * @throws Error if the protocol is blocked
66
54
  */
67
- function validateSourceProtocol(source) {
55
+ export function validateSourceProtocol(source) {
68
56
  try {
69
57
  const parsed = new URL(source);
70
58
  if (BLOCKED_PROTOCOLS.includes(parsed.protocol)) {
@@ -87,7 +75,7 @@ function validateSourceProtocol(source) {
87
75
  * @returns Normalized source
88
76
  * @throws Error if the source uses a disallowed protocol
89
77
  */
90
- function normalizeSource(source) {
78
+ export function normalizeSource(source) {
91
79
  // Validate protocol before processing
92
80
  validateSourceProtocol(source);
93
81
  try {
@@ -113,8 +101,8 @@ function normalizeSource(source) {
113
101
  * @param dbPath - LanceDB database path
114
102
  * @returns Raw-data directory path
115
103
  */
116
- function getRawDataDir(dbPath) {
117
- return (0, node_path_1.join)(dbPath, 'raw-data');
104
+ export function getRawDataDir(dbPath) {
105
+ return join(dbPath, 'raw-data');
118
106
  }
119
107
  /**
120
108
  * Generate raw-data file path from source and format
@@ -125,12 +113,12 @@ function getRawDataDir(dbPath) {
125
113
  * @param format - Content format
126
114
  * @returns Generated file path
127
115
  */
128
- function generateRawDataPath(dbPath, source, _format) {
116
+ export function generateRawDataPath(dbPath, source, _format) {
129
117
  const normalizedSource = normalizeSource(source);
130
118
  const encoded = encodeBase64Url(normalizedSource);
131
119
  // All formats use .md extension for consistency
132
120
  // This allows generating unique path from source without knowing original format
133
- return (0, node_path_1.resolve)(getRawDataDir(dbPath), `${encoded}.md`);
121
+ return resolve(getRawDataDir(dbPath), `${encoded}.md`);
134
122
  }
135
123
  // ============================================
136
124
  // File Operations
@@ -145,12 +133,12 @@ function generateRawDataPath(dbPath, source, _format) {
145
133
  * @param format - Content format
146
134
  * @returns Saved file path
147
135
  */
148
- async function saveRawData(dbPath, source, content, format) {
136
+ export async function saveRawData(dbPath, source, content, format) {
149
137
  const filePath = generateRawDataPath(dbPath, source, format);
150
138
  // Ensure directory exists
151
- await (0, promises_1.mkdir)((0, node_path_1.dirname)(filePath), { recursive: true });
139
+ await mkdir(dirname(filePath), { recursive: true });
152
140
  // Write content to file
153
- await (0, promises_1.writeFile)(filePath, content, 'utf-8');
141
+ await writeFile(filePath, content, 'utf-8');
154
142
  return filePath;
155
143
  }
156
144
  // ============================================
@@ -158,14 +146,14 @@ async function saveRawData(dbPath, source, content, format) {
158
146
  // ============================================
159
147
  // Path patterns for raw-data directory detection (cross-platform)
160
148
  const RAW_DATA_POSIX = '/raw-data/';
161
- const RAW_DATA_NATIVE = `${node_path_1.sep}raw-data${node_path_1.sep}`;
149
+ const RAW_DATA_NATIVE = `${sep}raw-data${sep}`;
162
150
  /**
163
151
  * Check if file path is in raw-data directory
164
152
  *
165
153
  * @param filePath - File path to check
166
154
  * @returns True if path is in raw-data directory
167
155
  */
168
- function isRawDataPath(filePath) {
156
+ export function isRawDataPath(filePath) {
169
157
  return filePath.includes(RAW_DATA_NATIVE) || filePath.includes(RAW_DATA_POSIX);
170
158
  }
171
159
  /**
@@ -176,11 +164,11 @@ function isRawDataPath(filePath) {
176
164
  * @param filePath - File path to validate
177
165
  * @returns True only if filePath is inside <dbPath>/raw-data
178
166
  */
179
- function isManagedRawDataPath(dbPath, filePath) {
180
- const rawDataDir = (0, node_path_1.resolve)(getRawDataDir(dbPath));
181
- const resolvedPath = (0, node_path_1.resolve)(filePath);
182
- const rel = (0, node_path_1.relative)(rawDataDir, resolvedPath);
183
- return rel === '' || (!rel.startsWith('..') && !(0, node_path_1.isAbsolute)(rel));
167
+ export function isManagedRawDataPath(dbPath, filePath) {
168
+ const rawDataDir = resolve(getRawDataDir(dbPath));
169
+ const resolvedPath = resolve(filePath);
170
+ const rel = relative(rawDataDir, resolvedPath);
171
+ return rel === '' || (!rel.startsWith('..') && !isAbsolute(rel));
184
172
  }
185
173
  /**
186
174
  * Extract original source from raw-data file path
@@ -189,7 +177,7 @@ function isManagedRawDataPath(dbPath, filePath) {
189
177
  * @param filePath - Raw-data file path
190
178
  * @returns Original source or null
191
179
  */
192
- function extractSourceFromPath(filePath) {
180
+ export function extractSourceFromPath(filePath) {
193
181
  // Try native path separator first, then POSIX
194
182
  let rawDataIndex = filePath.indexOf(RAW_DATA_NATIVE);
195
183
  let markerLength = RAW_DATA_NATIVE.length;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"raw-data-utils.js","sourceRoot":"","sources":["../../src/server/raw-data-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Remote MCP transport: Streamable HTTP + SSE (backwards-compat)
3
+ *
4
+ * Allows RAG Vault to be connected from Claude.ai, Claude Desktop,
5
+ * or any MCP client that supports remote servers.
6
+ *
7
+ * Usage:
8
+ * npx github:RobThePCGuy/rag-vault --remote # starts on port 3001
9
+ * npx github:RobThePCGuy/rag-vault --remote --port 8080
10
+ */
11
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
12
+ export interface RemoteTransportOptions {
13
+ /** Port to listen on (default: 3001, or WEB_PORT env) */
14
+ port?: number;
15
+ /** Factory that returns a fresh McpServer per session */
16
+ createServer: () => McpServer;
17
+ /** Optional API key for authentication (uses RAG_API_KEY env if not set) */
18
+ apiKey?: string;
19
+ /** Allowed CORS origins (default: "*" for dev, restrict in production) */
20
+ corsOrigins?: string | string[];
21
+ }
22
+ /**
23
+ * Starts the MCP server with Streamable HTTP + SSE transports.
24
+ *
25
+ * POST/GET/DELETE /mcp -> Streamable HTTP (modern clients)
26
+ * GET /sse -> SSE endpoint (legacy clients)
27
+ * POST /messages -> SSE message endpoint (legacy clients)
28
+ * GET /health -> Health check
29
+ */
30
+ export declare function startRemoteTransport(options: RemoteTransportOptions): Promise<void>;
31
+ //# sourceMappingURL=remote-transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-transport.d.ts","sourceRoot":"","sources":["../../src/server/remote-transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AASxE,MAAM,WAAW,sBAAsB;IACrC,yDAAyD;IACzD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,yDAAyD;IACzD,YAAY,EAAE,MAAM,SAAS,CAAA;IAC7B,4EAA4E;IAC5E,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,0EAA0E;IAC1E,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CAChC;AAMD;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8KzF"}
@@ -0,0 +1,177 @@
1
+ /**
2
+ * Remote MCP transport: Streamable HTTP + SSE (backwards-compat)
3
+ *
4
+ * Allows RAG Vault to be connected from Claude.ai, Claude Desktop,
5
+ * or any MCP client that supports remote servers.
6
+ *
7
+ * Usage:
8
+ * npx github:RobThePCGuy/rag-vault --remote # starts on port 3001
9
+ * npx github:RobThePCGuy/rag-vault --remote --port 8080
10
+ */
11
+ import express from 'express';
12
+ import { randomUUID } from 'node:crypto';
13
+ import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
14
+ import { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js';
15
+ import { isInitializeRequest } from '@modelcontextprotocol/sdk/types.js';
16
+ // =============================================================================
17
+ // TRANSPORT SETUP
18
+ // =============================================================================
19
+ /**
20
+ * Starts the MCP server with Streamable HTTP + SSE transports.
21
+ *
22
+ * POST/GET/DELETE /mcp -> Streamable HTTP (modern clients)
23
+ * GET /sse -> SSE endpoint (legacy clients)
24
+ * POST /messages -> SSE message endpoint (legacy clients)
25
+ * GET /health -> Health check
26
+ */
27
+ export async function startRemoteTransport(options) {
28
+ const { createServer, port = Number.parseInt(process.env['WEB_PORT'] || '3001', 10), apiKey = process.env['RAG_API_KEY'], corsOrigins = process.env['CORS_ORIGINS'] || '*', } = options;
29
+ const app = express();
30
+ app.use(express.json());
31
+ // ---------------------------------------------------------------------------
32
+ // CORS - required for Claude.ai to connect
33
+ // ---------------------------------------------------------------------------
34
+ app.use((_req, res, next) => {
35
+ const origin = Array.isArray(corsOrigins) ? corsOrigins.join(', ') : corsOrigins;
36
+ res.header('Access-Control-Allow-Origin', origin);
37
+ res.header('Access-Control-Allow-Methods', 'GET, POST, DELETE, OPTIONS');
38
+ res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Mcp-Session-Id');
39
+ res.header('Access-Control-Expose-Headers', 'Mcp-Session-Id');
40
+ next();
41
+ });
42
+ // Handle preflight separately to avoid return-type issues
43
+ app.options('*', (_req, res) => {
44
+ res.sendStatus(204);
45
+ });
46
+ // ---------------------------------------------------------------------------
47
+ // Optional: API Key Authentication
48
+ // ---------------------------------------------------------------------------
49
+ const authMiddleware = (req, res, next) => {
50
+ if (!apiKey)
51
+ return next();
52
+ const authHeader = req.headers.authorization;
53
+ if (!authHeader || authHeader !== `Bearer ${apiKey}`) {
54
+ res.status(401).json({ error: 'Unauthorized' });
55
+ return;
56
+ }
57
+ next();
58
+ };
59
+ // ---------------------------------------------------------------------------
60
+ // Session tracking
61
+ // ---------------------------------------------------------------------------
62
+ const sessions = new Map();
63
+ // ---------------------------------------------------------------------------
64
+ // 1. STREAMABLE HTTP TRANSPORT (modern - recommended)
65
+ // ---------------------------------------------------------------------------
66
+ app.post('/mcp', authMiddleware, async (req, res) => {
67
+ const sessionId = req.headers['mcp-session-id'];
68
+ if (sessionId && sessions.has(sessionId)) {
69
+ const session = sessions.get(sessionId);
70
+ const transport = session.transport;
71
+ await transport.handleRequest(req, res, req.body);
72
+ }
73
+ else if (!sessionId && isInitializeRequest(req.body)) {
74
+ const server = createServer();
75
+ const transport = new StreamableHTTPServerTransport({
76
+ sessionIdGenerator: () => randomUUID(),
77
+ onsessioninitialized: (newSessionId) => {
78
+ sessions.set(newSessionId, { transport, server });
79
+ },
80
+ });
81
+ res.on('close', () => {
82
+ const sid = transport.sessionId;
83
+ if (sid)
84
+ sessions.delete(sid);
85
+ transport.close();
86
+ server.close();
87
+ });
88
+ // biome-ignore lint/suspicious/noExplicitAny: McpServer.connect accepts Transport but TS exact-optional mismatch
89
+ await server.connect(transport);
90
+ await transport.handleRequest(req, res, req.body);
91
+ }
92
+ else {
93
+ res.status(400).json({
94
+ jsonrpc: '2.0',
95
+ error: { code: -32000, message: 'Bad Request: No valid session' },
96
+ id: null,
97
+ });
98
+ }
99
+ });
100
+ app.get('/mcp', authMiddleware, async (req, res) => {
101
+ const sessionId = req.headers['mcp-session-id'];
102
+ if (sessionId && sessions.has(sessionId)) {
103
+ const session = sessions.get(sessionId);
104
+ const transport = session.transport;
105
+ await transport.handleRequest(req, res);
106
+ }
107
+ else {
108
+ res.status(400).json({ error: 'No valid session for GET' });
109
+ }
110
+ });
111
+ app.delete('/mcp', authMiddleware, async (req, res) => {
112
+ const sessionId = req.headers['mcp-session-id'];
113
+ if (sessionId && sessions.has(sessionId)) {
114
+ const session = sessions.get(sessionId);
115
+ sessions.delete(sessionId);
116
+ session.transport.close();
117
+ session.server.close();
118
+ res.status(200).json({ message: 'Session closed' });
119
+ }
120
+ else {
121
+ res.status(404).json({ error: 'Session not found' });
122
+ }
123
+ });
124
+ // ---------------------------------------------------------------------------
125
+ // 2. SSE TRANSPORT (legacy - backwards compatibility)
126
+ // ---------------------------------------------------------------------------
127
+ app.get('/sse', authMiddleware, async (_req, res) => {
128
+ const transport = new SSEServerTransport('/messages', res);
129
+ const server = createServer();
130
+ sessions.set(transport.sessionId, { transport, server });
131
+ res.on('close', () => {
132
+ sessions.delete(transport.sessionId);
133
+ server.close();
134
+ });
135
+ // biome-ignore lint/suspicious/noExplicitAny: McpServer.connect accepts Transport but TS exact-optional mismatch
136
+ await server.connect(transport);
137
+ });
138
+ app.post('/messages', authMiddleware, async (req, res) => {
139
+ const sessionId = req.query['sessionId'];
140
+ const session = sessions.get(sessionId);
141
+ if (session && session.transport instanceof SSEServerTransport) {
142
+ await session.transport.handlePostMessage(req, res);
143
+ }
144
+ else {
145
+ res.status(404).json({ error: 'Session not found' });
146
+ }
147
+ });
148
+ // ---------------------------------------------------------------------------
149
+ // 3. HEALTH CHECK
150
+ // ---------------------------------------------------------------------------
151
+ app.get('/health', (_req, res) => {
152
+ res.json({
153
+ status: 'ok',
154
+ transport: 'streamable-http + sse',
155
+ sessions: sessions.size,
156
+ });
157
+ });
158
+ // ---------------------------------------------------------------------------
159
+ // START
160
+ // ---------------------------------------------------------------------------
161
+ app.listen(port, () => {
162
+ console.error(`RAG Vault MCP server (remote) listening on port ${port}`);
163
+ console.error(` Streamable HTTP: http://localhost:${port}/mcp`);
164
+ console.error(` SSE (legacy): http://localhost:${port}/sse`);
165
+ console.error(` Health check: http://localhost:${port}/health`);
166
+ console.error();
167
+ console.error('To connect from Claude.ai or Claude Desktop:');
168
+ console.error(` URL: http://localhost:${port}/mcp`);
169
+ if (apiKey) {
170
+ console.error(' Auth: Bearer token required (RAG_API_KEY is set)');
171
+ }
172
+ else {
173
+ console.error(' Auth: None (set RAG_API_KEY for production)');
174
+ }
175
+ });
176
+ }
177
+ //# sourceMappingURL=remote-transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-transport.js","sourceRoot":"","sources":["../../src/server/remote-transport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/server/schemas.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB;;GAEG;AACH,eAAO,MAAM,mBAAmB,yCAAuC,CAAA;AAEvE;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;EAoB/B,CAAA;AAEF;;;GAGG;AACH,eAAO,MAAM,oBAAoB,sDAQ9B,CAAA;AAEH;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;EAM3B,CAAA;AAEF;;GAEG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;EASnC,CAAA;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAM3B,CAAA;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;EAiBzB,CAAA;AAMJ,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AACtE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAC9D,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAC9D,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAM9D;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,+CAA+C;IAC/C,cAAc,EAAE,MAAM,EAAE,CAAA;IACxB,iEAAiE;IACjE,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,4BAA4B;IAC5B,WAAW,EAAE,UAAU,GAAG,cAAc,GAAG,eAAe,GAAG,iBAAiB,CAAA;CAC/E;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACjC,8EAA8E;IAC9E,WAAW,CAAC,EAAE,sBAAsB,CAAA;CACrC;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,eAAe,EAAE,OAAO,CAAA;IACxB,UAAU,EAAE,QAAQ,GAAG,aAAa,CAAA;CACrC;AAMD;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;EAO/B,CAAA;AAEF;;GAEG;AACH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUpC,CAAA"}
@@ -1,29 +1,26 @@
1
- "use strict";
2
1
  // Zod schemas for MCP tool validation
3
2
  // Used by RAGServer with McpServer high-level API
4
- Object.defineProperty(exports, "__esModule", { value: true });
5
- exports.RecentDatabasesFileSchema = exports.StatusResponseSchema = exports.DeleteFileSchema = exports.IngestDataSchema = exports.IngestDataMetadataSchema = exports.IngestFileSchema = exports.CustomMetadataSchema = exports.QueryDocumentsSchema = exports.ContentFormatSchema = void 0;
6
- const zod_1 = require("zod");
3
+ import { z } from 'zod';
7
4
  /**
8
5
  * Content format enum for ingest_data
9
6
  */
10
- exports.ContentFormatSchema = zod_1.z.enum(['text', 'html', 'markdown']);
7
+ export const ContentFormatSchema = z.enum(['text', 'html', 'markdown']);
11
8
  /**
12
9
  * query_documents tool input schema
13
10
  */
14
- exports.QueryDocumentsSchema = zod_1.z.object({
15
- query: zod_1.z
11
+ export const QueryDocumentsSchema = z.object({
12
+ query: z
16
13
  .string()
17
14
  .min(1, 'Query cannot be empty')
18
15
  .describe('Search query. Include specific terms and add context if needed.'),
19
- limit: zod_1.z
16
+ limit: z
20
17
  .number()
21
18
  .int()
22
19
  .positive()
23
20
  .max(20, 'Limit cannot exceed 20')
24
21
  .optional()
25
22
  .describe('Maximum number of results to return (default: 10, max: 20). Recommended: 5 for precision, 10 for balance, 20 for broad exploration.'),
26
- explain: zod_1.z
23
+ explain: z
27
24
  .boolean()
28
25
  .optional()
29
26
  .describe('Include explanation of why each result matched (shared keywords, phrases, match type).'),
@@ -32,51 +29,51 @@ exports.QueryDocumentsSchema = zod_1.z.object({
32
29
  * Custom metadata schema for ingestion
33
30
  * Enforces reasonable limits on key/value sizes to prevent abuse
34
31
  */
35
- exports.CustomMetadataSchema = zod_1.z
36
- .record(zod_1.z.string().max(100, 'Metadata key must be at most 100 characters'), zod_1.z.string().max(1000, 'Metadata value must be at most 1000 characters'))
32
+ export const CustomMetadataSchema = z
33
+ .record(z.string().max(100, 'Metadata key must be at most 100 characters'), z.string().max(1000, 'Metadata value must be at most 1000 characters'))
37
34
  .optional()
38
35
  .describe('Optional custom metadata fields (e.g., {"author": "John", "domain": "legal", "tags": "contract,review"})');
39
36
  /**
40
37
  * ingest_file tool input schema
41
38
  */
42
- exports.IngestFileSchema = zod_1.z.object({
43
- filePath: zod_1.z
39
+ export const IngestFileSchema = z.object({
40
+ filePath: z
44
41
  .string()
45
42
  .min(1, 'File path cannot be empty')
46
43
  .describe('Absolute path to the file to ingest. Example: "/Users/user/documents/manual.pdf"'),
47
- metadata: exports.CustomMetadataSchema,
44
+ metadata: CustomMetadataSchema,
48
45
  });
49
46
  /**
50
47
  * ingest_data metadata schema
51
48
  */
52
- exports.IngestDataMetadataSchema = zod_1.z.object({
53
- source: zod_1.z
49
+ export const IngestDataMetadataSchema = z.object({
50
+ source: z
54
51
  .string()
55
52
  .min(1, 'Source cannot be empty')
56
53
  .describe('Source identifier. For web pages, use the URL (e.g., "https://example.com/page"). For other content, use URL-scheme format: "{type}://{date}" or "{type}://{date}/{detail}". Examples: "clipboard://2024-12-30", "chat://2024-12-30/project-discussion".'),
57
- format: exports.ContentFormatSchema.describe('Content format: "text", "html", or "markdown"'),
58
- custom: exports.CustomMetadataSchema,
54
+ format: ContentFormatSchema.describe('Content format: "text", "html", or "markdown"'),
55
+ custom: CustomMetadataSchema,
59
56
  });
60
57
  /**
61
58
  * ingest_data tool input schema
62
59
  */
63
- exports.IngestDataSchema = zod_1.z.object({
64
- content: zod_1.z
60
+ export const IngestDataSchema = z.object({
61
+ content: z
65
62
  .string()
66
63
  .min(1, 'Content cannot be empty')
67
64
  .describe('The content to ingest (text, HTML, or Markdown)'),
68
- metadata: exports.IngestDataMetadataSchema.describe('Content metadata'),
65
+ metadata: IngestDataMetadataSchema.describe('Content metadata'),
69
66
  });
70
67
  /**
71
68
  * delete_file tool input schema
72
69
  */
73
- exports.DeleteFileSchema = zod_1.z
70
+ export const DeleteFileSchema = z
74
71
  .object({
75
- filePath: zod_1.z
72
+ filePath: z
76
73
  .string()
77
74
  .optional()
78
75
  .describe('Absolute path to the file (for ingest_file). Example: "/Users/user/documents/manual.pdf"'),
79
- source: zod_1.z
76
+ source: z
80
77
  .string()
81
78
  .optional()
82
79
  .describe('Source identifier used in ingest_data. Examples: "https://example.com/page", "clipboard://2024-12-30"'),
@@ -90,24 +87,24 @@ exports.DeleteFileSchema = zod_1.z
90
87
  /**
91
88
  * Schema for validating status response from RAG server
92
89
  */
93
- exports.StatusResponseSchema = zod_1.z.object({
94
- documentCount: zod_1.z.number(),
95
- chunkCount: zod_1.z.number(),
96
- memoryUsage: zod_1.z.number(),
97
- uptime: zod_1.z.number(),
98
- ftsIndexEnabled: zod_1.z.boolean(),
99
- searchMode: zod_1.z.enum(['hybrid', 'vector-only']),
90
+ export const StatusResponseSchema = z.object({
91
+ documentCount: z.number(),
92
+ chunkCount: z.number(),
93
+ memoryUsage: z.number(),
94
+ uptime: z.number(),
95
+ ftsIndexEnabled: z.boolean(),
96
+ searchMode: z.enum(['hybrid', 'vector-only']),
100
97
  });
101
98
  /**
102
99
  * Schema for validating recent databases file structure
103
100
  */
104
- exports.RecentDatabasesFileSchema = zod_1.z.object({
105
- version: zod_1.z.number(),
106
- databases: zod_1.z.array(zod_1.z.object({
107
- path: zod_1.z.string(),
108
- name: zod_1.z.string(),
109
- lastAccessed: zod_1.z.string(),
110
- modelName: zod_1.z.string().optional(),
101
+ export const RecentDatabasesFileSchema = z.object({
102
+ version: z.number(),
103
+ databases: z.array(z.object({
104
+ path: z.string(),
105
+ name: z.string(),
106
+ lastAccessed: z.string(),
107
+ modelName: z.string().optional(),
111
108
  })),
112
109
  });
113
110
  //# sourceMappingURL=schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/server/schemas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-parsers.d.ts","sourceRoot":"","sources":["../../src/utils/config-parsers.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAExD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,YAAY,GAAG,SAAS,CAUrF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAQ9E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAU/E"}
@@ -1,14 +1,9 @@
1
- "use strict";
2
1
  // Shared configuration parsing utilities
3
2
  // Used by both MCP server (src/index.ts) and Web server (src/web/index.ts)
4
- Object.defineProperty(exports, "__esModule", { value: true });
5
- exports.parseGroupingMode = parseGroupingMode;
6
- exports.parseMaxDistance = parseMaxDistance;
7
- exports.parseHybridWeight = parseHybridWeight;
8
3
  /**
9
4
  * Parse grouping mode from environment variable
10
5
  */
11
- function parseGroupingMode(value) {
6
+ export function parseGroupingMode(value) {
12
7
  if (!value)
13
8
  return undefined;
14
9
  const normalized = value.toLowerCase().trim();
@@ -21,7 +16,7 @@ function parseGroupingMode(value) {
21
16
  /**
22
17
  * Parse max distance from environment variable
23
18
  */
24
- function parseMaxDistance(value) {
19
+ export function parseMaxDistance(value) {
25
20
  if (!value)
26
21
  return undefined;
27
22
  const parsed = Number.parseFloat(value);
@@ -34,7 +29,7 @@ function parseMaxDistance(value) {
34
29
  /**
35
30
  * Parse hybrid weight from environment variable
36
31
  */
37
- function parseHybridWeight(value) {
32
+ export function parseHybridWeight(value) {
38
33
  if (!value)
39
34
  return undefined;
40
35
  const parsed = Number.parseFloat(value);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-parsers.js","sourceRoot":"","sources":["../../src/utils/config-parsers.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,2EAA2E;AAI3E;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAyB;IACzD,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAA;IAC5B,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAA;IAC7C,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QACzD,OAAO,UAAU,CAAA;IACnB,CAAC;IACD,OAAO,CAAC,KAAK,CACX,gCAAgC,KAAK,+CAA+C,CACrF,CAAA;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAyB;IACxD,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAA;IAC5B,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;IACvC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;QACxC,OAAO,CAAC,KAAK,CAAC,oCAAoC,KAAK,wCAAwC,CAAC,CAAA;QAChG,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAyB;IACzD,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAA;IAC5B,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;IACvC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QACrD,OAAO,CAAC,KAAK,CACX,qCAAqC,KAAK,2CAA2C,CACtF,CAAA;QACD,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAgBxD;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,4BAA4B;IAC5B,MAAM,EAAE,MAAM,CAAA;IACd,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAA;IACjB,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,CAAA;IAChB,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAA;IACf,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAA;IACnB,kEAAkE;IAClE,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB,yEAAyE;IACzE,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAYD;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,SAAS,CA6BxE;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAwDzD;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,EAAE,CAqBnD"}