@jcode.labs/ragmir 2.7.0 → 2.9.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 (101) hide show
  1. package/README.md +9 -103
  2. package/dist/access-log.d.ts.map +1 -1
  3. package/dist/access-log.js +65 -8
  4. package/dist/access-log.js.map +1 -1
  5. package/dist/chunking.d.ts.map +1 -1
  6. package/dist/chunking.js +29 -3
  7. package/dist/chunking.js.map +1 -1
  8. package/dist/cli.js +166 -22
  9. package/dist/cli.js.map +1 -1
  10. package/dist/config.d.ts.map +1 -1
  11. package/dist/config.js +73 -29
  12. package/dist/config.js.map +1 -1
  13. package/dist/defaults.d.ts +1 -0
  14. package/dist/defaults.d.ts.map +1 -1
  15. package/dist/defaults.js +6 -1
  16. package/dist/defaults.js.map +1 -1
  17. package/dist/destroy.d.ts.map +1 -1
  18. package/dist/destroy.js +23 -1
  19. package/dist/destroy.js.map +1 -1
  20. package/dist/doctor.d.ts.map +1 -1
  21. package/dist/doctor.js +40 -9
  22. package/dist/doctor.js.map +1 -1
  23. package/dist/embeddings.d.ts +4 -1
  24. package/dist/embeddings.d.ts.map +1 -1
  25. package/dist/embeddings.js +62 -14
  26. package/dist/embeddings.js.map +1 -1
  27. package/dist/evaluate.d.ts.map +1 -1
  28. package/dist/evaluate.js +48 -4
  29. package/dist/evaluate.js.map +1 -1
  30. package/dist/files.d.ts +8 -1
  31. package/dist/files.d.ts.map +1 -1
  32. package/dist/files.js +44 -8
  33. package/dist/files.js.map +1 -1
  34. package/dist/index-diagnostics.d.ts +1 -1
  35. package/dist/index-diagnostics.d.ts.map +1 -1
  36. package/dist/index-diagnostics.js +8 -3
  37. package/dist/index-diagnostics.js.map +1 -1
  38. package/dist/index-policy.d.ts +3 -0
  39. package/dist/index-policy.d.ts.map +1 -0
  40. package/dist/index-policy.js +28 -0
  41. package/dist/index-policy.js.map +1 -0
  42. package/dist/index.d.ts +4 -1
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +2 -0
  45. package/dist/index.js.map +1 -1
  46. package/dist/ingest.d.ts.map +1 -1
  47. package/dist/ingest.js +112 -54
  48. package/dist/ingest.js.map +1 -1
  49. package/dist/init.d.ts.map +1 -1
  50. package/dist/init.js +15 -3
  51. package/dist/init.js.map +1 -1
  52. package/dist/limits.d.ts +9 -0
  53. package/dist/limits.d.ts.map +1 -0
  54. package/dist/limits.js +25 -0
  55. package/dist/limits.js.map +1 -0
  56. package/dist/mcp.d.ts +3 -1
  57. package/dist/mcp.d.ts.map +1 -1
  58. package/dist/mcp.js +71 -14
  59. package/dist/mcp.js.map +1 -1
  60. package/dist/ocr.d.ts +46 -0
  61. package/dist/ocr.d.ts.map +1 -0
  62. package/dist/ocr.js +340 -0
  63. package/dist/ocr.js.map +1 -0
  64. package/dist/parsing.d.ts.map +1 -1
  65. package/dist/parsing.js +124 -24
  66. package/dist/parsing.js.map +1 -1
  67. package/dist/permissions.d.ts +3 -0
  68. package/dist/permissions.d.ts.map +1 -0
  69. package/dist/permissions.js +13 -0
  70. package/dist/permissions.js.map +1 -0
  71. package/dist/query.d.ts +2 -2
  72. package/dist/query.d.ts.map +1 -1
  73. package/dist/query.js +198 -39
  74. package/dist/query.js.map +1 -1
  75. package/dist/research.d.ts.map +1 -1
  76. package/dist/research.js +33 -4
  77. package/dist/research.js.map +1 -1
  78. package/dist/security.d.ts.map +1 -1
  79. package/dist/security.js +110 -14
  80. package/dist/security.js.map +1 -1
  81. package/dist/store.d.ts +3 -0
  82. package/dist/store.d.ts.map +1 -1
  83. package/dist/store.js +71 -72
  84. package/dist/store.js.map +1 -1
  85. package/dist/text.d.ts.map +1 -1
  86. package/dist/text.js +13 -1
  87. package/dist/text.js.map +1 -1
  88. package/dist/types.d.ts +94 -0
  89. package/dist/types.d.ts.map +1 -1
  90. package/dist/version.d.ts +1 -1
  91. package/dist/version.js +1 -1
  92. package/examples/document-evidence-benchmark/.ragmir/config.json +2 -1
  93. package/examples/document-evidence-benchmark/README.md +5 -2
  94. package/examples/document-evidence-benchmark/golden-queries.json +7 -1
  95. package/examples/document-evidence-benchmark/raw/contracts/pdf-control-evidence.pdf +32 -0
  96. package/examples/document-evidence-benchmark/raw/runbooks/incident-response-runbook.md +3 -3
  97. package/examples/sovereign-rag-demo/.ragmir/config.json +2 -1
  98. package/examples/sovereign-rag-demo/README.md +9 -1
  99. package/package.json +3 -3
  100. package/skills/ragmir/SKILL.md +59 -326
  101. package/skills/ragmir-audio-summary/SKILL.md +49 -204
package/dist/ingest.js CHANGED
@@ -1,4 +1,3 @@
1
- import path from "node:path";
2
1
  import { recordAccess } from "./access-log.js";
3
2
  import { chunkDocument } from "./chunking.js";
4
3
  import { loadConfig } from "./config.js";
@@ -6,12 +5,11 @@ import { VECTOR_DISTANCE_METRIC } from "./defaults.js";
6
5
  import { embedTexts } from "./embeddings.js";
7
6
  import { countSkippedByReason, inventorySourceFiles, summarizeUnsupportedExtensions, } from "./files.js";
8
7
  import { INDEX_SCHEMA_VERSION } from "./index-diagnostics.js";
8
+ import { indexPolicyFingerprint } from "./index-policy.js";
9
9
  import { parseFile } from "./parsing.js";
10
10
  import { redactText, totalRedactions } from "./redaction.js";
11
- import { openRowsTable, readEmptyTextFiles, readRows, writeEmptyTextFiles, writeIndexManifest, writeRows, } from "./store.js";
12
- import { normalizeForMatch } from "./text.js";
11
+ import { openRowsTable, readEmptyTextFiles, readIndexManifest, updateRows, writeEmptyTextFiles, writeIndexManifest, writeRows, } from "./store.js";
13
12
  import { VERSION } from "./version.js";
14
- const MAX_AUDIT_ROWS = 100_000;
15
13
  const MAX_SOURCE_DIAGNOSTIC_ITEMS = 20;
16
14
  const ARCHIVE_PATH_PATTERNS = [
17
15
  /(^|[/_-])archive(s)?([/_-]|$)/iu,
@@ -29,15 +27,36 @@ const MIRROR_PATH_PATTERNS = [
29
27
  ];
30
28
  export async function ingest(options = {}) {
31
29
  const config = await loadConfig(String(options.cwd ?? process.cwd()));
32
- const inventory = await inventorySourceFiles(config);
30
+ const policyFingerprint = indexPolicyFingerprint(config);
31
+ const existingManifest = await readIndexManifest(config);
32
+ const manifestCompatible = !options.rebuild &&
33
+ existingManifest?.schemaVersion === INDEX_SCHEMA_VERSION &&
34
+ existingManifest.indexPolicyFingerprint === policyFingerprint &&
35
+ existingManifest.indexedFiles !== undefined;
36
+ const existingTable = manifestCompatible ? await openRowsTable(config) : null;
37
+ const storedEmptyFiles = manifestCompatible ? await readEmptyTextFiles(config) : [];
38
+ const knownFiles = new Map([...(existingManifest?.indexedFiles ?? []), ...storedEmptyFiles].map((file) => [
39
+ file.relativePath,
40
+ file,
41
+ ]));
42
+ const inventory = await inventorySourceFiles(config, { knownFiles });
33
43
  const files = inventory.supportedFiles;
44
+ const inventoryMetrics = sourceInventoryMetrics(files);
34
45
  const currentFiles = new Map(files.map((file) => [file.relativePath, file]));
35
- const existingRows = options.rebuild ? [] : await readRows(config);
36
- const reusableRows = options.rebuild ? [] : reusableIndexRows(existingRows, currentFiles, config);
37
- const reusableFiles = new Set(reusableRows.map((row) => row.relativePath));
38
- const filesToIndex = options.rebuild
39
- ? files
40
- : files.filter((file) => !reusableFiles.has(file.relativePath));
46
+ const policyRebuild = !options.rebuild &&
47
+ existingManifest !== null &&
48
+ (existingManifest.schemaVersion !== INDEX_SCHEMA_VERSION ||
49
+ existingManifest.indexPolicyFingerprint !== policyFingerprint);
50
+ const canReuse = manifestCompatible && existingTable !== null;
51
+ const previousIndexedFiles = canReuse ? (existingManifest.indexedFiles ?? []) : [];
52
+ const previousEmptyFiles = canReuse ? storedEmptyFiles : [];
53
+ const reusableIndexedFiles = previousIndexedFiles.filter((file) => currentFiles.get(file.relativePath)?.checksum === file.checksum);
54
+ const reusableEmptyFiles = previousEmptyFiles.filter((file) => currentFiles.get(file.relativePath)?.checksum === file.checksum);
55
+ const reusableFiles = new Set([
56
+ ...reusableIndexedFiles.map((file) => file.relativePath),
57
+ ...reusableEmptyFiles.map((file) => file.relativePath),
58
+ ]);
59
+ const filesToIndex = files.filter((file) => !reusableFiles.has(file.relativePath));
41
60
  const allChunks = [];
42
61
  const errors = [];
43
62
  const redactionCounts = [];
@@ -89,10 +108,22 @@ export async function ingest(options = {}) {
89
108
  });
90
109
  }
91
110
  }
92
- const indexRows = [...reusableRows, ...rows];
93
- const writeResult = await writeRows(indexRows, config);
94
- if (indexRows.length > 0) {
95
- const firstRow = indexRows[0];
111
+ const rebuiltIndexedFiles = indexedFileRecords(rows);
112
+ const indexedFiles = [...reusableIndexedFiles, ...rebuiltIndexedFiles].sort((a, b) => a.relativePath.localeCompare(b.relativePath));
113
+ const chunkCount = indexedFiles.reduce((sum, file) => sum + file.chunkCount, 0);
114
+ const previousPaths = new Set(previousIndexedFiles.map((file) => file.relativePath));
115
+ const currentPaths = new Set(files.map((file) => file.relativePath));
116
+ const replacePaths = [
117
+ ...filesToIndex.map((file) => file.relativePath),
118
+ ...[...previousPaths].filter((relativePath) => !currentPaths.has(relativePath)),
119
+ ];
120
+ const writeResult = !canReuse || chunkCount === 0
121
+ ? await writeRows(rows, config)
122
+ : replacePaths.length > 0
123
+ ? await updateRows(rows, replacePaths, config)
124
+ : { vectorIndexWarning: null, lexicalIndexWarning: null };
125
+ if (chunkCount > 0) {
126
+ const firstRow = rows[0] ?? (await firstStoredRow(config));
96
127
  if (!firstRow) {
97
128
  throw new Error("Cannot write an index manifest without indexed rows.");
98
129
  }
@@ -102,35 +133,55 @@ export async function ingest(options = {}) {
102
133
  ragmirVersion: VERSION,
103
134
  embeddingProvider: config.embeddingProvider,
104
135
  embeddingModel: config.embeddingModel,
136
+ indexPolicyFingerprint: policyFingerprint,
105
137
  vectorDimension: firstRow.vector.length,
106
138
  vectorDistanceMetric: VECTOR_DISTANCE_METRIC,
107
139
  chunkSize: config.chunkSize,
108
140
  chunkOverlap: config.chunkOverlap,
109
- fileCount: new Set(indexRows.map((row) => row.relativePath)).size,
110
- chunkCount: indexRows.length,
141
+ fileCount: indexedFiles.length,
142
+ chunkCount,
143
+ indexedFiles,
111
144
  }, config);
112
145
  }
113
- await writeEmptyTextFiles(emptyTextFiles.flatMap((relativePath) => {
114
- const file = currentFiles.get(relativePath);
115
- return file ? [{ relativePath, checksum: file.checksum }] : [];
116
- }), config);
146
+ await writeEmptyTextFiles([
147
+ ...reusableEmptyFiles,
148
+ ...emptyTextFiles.flatMap((relativePath) => {
149
+ const file = currentFiles.get(relativePath);
150
+ return file
151
+ ? [
152
+ {
153
+ relativePath,
154
+ checksum: file.checksum,
155
+ bytes: file.bytes,
156
+ mtimeMs: file.mtimeMs,
157
+ },
158
+ ]
159
+ : [];
160
+ }),
161
+ ], config);
117
162
  await recordAccess(config, {
118
163
  action: "ingest",
119
- resultCount: indexRows.length,
164
+ resultCount: chunkCount,
120
165
  redactions: totalRedactions(redactionCounts),
121
166
  });
122
167
  return {
123
- indexedFiles: new Set(indexRows.map((row) => row.relativePath)).size,
168
+ indexedFiles: indexedFiles.length,
124
169
  rebuiltFiles: new Set(rows.map((row) => row.relativePath)).size,
125
170
  reusedFiles: reusableFiles.size,
126
- chunks: indexRows.length,
171
+ policyRebuild,
172
+ chunks: chunkCount,
127
173
  discoveredFiles: inventory.discoveredFiles,
128
174
  supportedFiles: files.length,
175
+ supportedBytes: inventoryMetrics.supportedBytes,
176
+ largestFileBytes: inventoryMetrics.largestFileBytes,
129
177
  skippedFiles: inventory.skippedFiles.length + emptyTextFiles.length,
130
178
  unsupportedFiles: countSkippedByReason(inventory.skippedFiles, "unsupported-extension"),
131
179
  oversizedFiles: countSkippedByReason(inventory.skippedFiles, "oversized"),
132
180
  sensitiveFiles: countSkippedByReason(inventory.skippedFiles, "sensitive-name"),
133
- emptyTextFiles,
181
+ emptyTextFiles: [
182
+ ...reusableEmptyFiles.map((file) => file.relativePath),
183
+ ...emptyTextFiles,
184
+ ].sort(),
134
185
  unsupportedExtensions: summarizeUnsupportedExtensions(inventory.skippedFiles),
135
186
  redactions: totalRedactions(redactionCounts),
136
187
  vectorIndexWarning: writeResult.vectorIndexWarning,
@@ -138,36 +189,41 @@ export async function ingest(options = {}) {
138
189
  errors,
139
190
  };
140
191
  }
141
- function reusableIndexRows(rows, currentFiles, config) {
142
- const rowsByFile = new Map();
192
+ function indexedFileRecords(rows) {
193
+ const records = new Map();
143
194
  for (const row of rows) {
144
- const fileRows = rowsByFile.get(row.relativePath) ?? [];
145
- fileRows.push(row);
146
- rowsByFile.set(row.relativePath, fileRows);
195
+ const current = records.get(row.relativePath);
196
+ records.set(row.relativePath, {
197
+ relativePath: row.relativePath,
198
+ checksum: row.checksum,
199
+ chunkCount: (current?.chunkCount ?? 0) + 1,
200
+ bytes: row.bytes,
201
+ mtimeMs: row.mtimeMs,
202
+ });
147
203
  }
148
- const reusableRows = [];
149
- for (const [relativePath, fileRows] of rowsByFile) {
150
- const file = currentFiles.get(relativePath);
151
- if (!file) {
152
- continue;
153
- }
154
- if (fileRows.every((row) => row.checksum === file.checksum &&
155
- row.embeddingProvider === config.embeddingProvider &&
156
- row.embeddingModel === config.embeddingModel)) {
157
- reusableRows.push(...fileRows);
158
- }
204
+ return [...records.values()];
205
+ }
206
+ async function firstStoredRow(config) {
207
+ const table = await openRowsTable(config);
208
+ if (!table) {
209
+ return null;
159
210
  }
160
- return reusableRows;
211
+ const [row] = (await table.query().limit(1).toArray());
212
+ return row ?? null;
161
213
  }
162
214
  export async function audit(cwd = process.cwd()) {
163
215
  const config = await loadConfig(cwd);
164
216
  const inventory = await inventorySourceFiles(config);
165
217
  const files = inventory.supportedFiles;
218
+ const inventoryMetrics = sourceInventoryMetrics(files);
166
219
  const supportedFiles = files.map((file) => file.relativePath);
167
220
  const table = await openRowsTable(config);
168
221
  const emptyTextFiles = await currentEmptyTextFiles(config, files);
169
222
  if (!table) {
170
223
  return {
224
+ discoveredFiles: inventory.discoveredFiles,
225
+ supportedBytes: inventoryMetrics.supportedBytes,
226
+ largestFileBytes: inventoryMetrics.largestFileBytes,
171
227
  indexedFiles: [],
172
228
  supportedFiles,
173
229
  skippedFiles: inventory.skippedFiles,
@@ -179,7 +235,7 @@ export async function audit(cwd = process.cwd()) {
179
235
  totalChunks: 0,
180
236
  };
181
237
  }
182
- const rows = (await table.query().limit(MAX_AUDIT_ROWS).toArray());
238
+ const rows = (await table.query().select(["relativePath", "checksum"]).toArray());
183
239
  const counts = new Map();
184
240
  const checksums = new Map();
185
241
  for (const row of rows) {
@@ -194,6 +250,9 @@ export async function audit(cwd = process.cwd()) {
194
250
  const indexedSet = new Set(counts.keys());
195
251
  const currentChecksums = new Map(files.map((file) => [file.relativePath, file.checksum]));
196
252
  return {
253
+ discoveredFiles: inventory.discoveredFiles,
254
+ supportedBytes: inventoryMetrics.supportedBytes,
255
+ largestFileBytes: inventoryMetrics.largestFileBytes,
197
256
  indexedFiles: [...counts.entries()]
198
257
  .sort(([a], [b]) => a.localeCompare(b))
199
258
  .map(([source, chunks]) => ({ source, chunks })),
@@ -216,6 +275,15 @@ export async function audit(cwd = process.cwd()) {
216
275
  totalChunks: rows.length,
217
276
  };
218
277
  }
278
+ function sourceInventoryMetrics(files) {
279
+ let supportedBytes = 0;
280
+ let largestFileBytes = 0;
281
+ for (const file of files) {
282
+ supportedBytes += file.bytes;
283
+ largestFileBytes = Math.max(largestFileBytes, file.bytes);
284
+ }
285
+ return { supportedBytes, largestFileBytes };
286
+ }
219
287
  function sourceDiagnostics(supportedFiles, skippedFiles) {
220
288
  const relativePaths = [
221
289
  ...supportedFiles.map((file) => file.relativePath),
@@ -229,17 +297,10 @@ function sourceDiagnostics(supportedFiles, skippedFiles) {
229
297
  }
230
298
  function duplicateCandidates(files) {
231
299
  const byChecksum = new Map();
232
- const byLogicalName = new Map();
233
300
  for (const file of files) {
234
301
  appendGrouped(byChecksum, `sha256:${file.checksum.slice(0, 12)}`, file.relativePath);
235
- const logicalName = normalizedLogicalName(file.relativePath);
236
- if (logicalName.length >= 6) {
237
- appendGrouped(byLogicalName, `name:${logicalName}`, file.relativePath);
238
- }
239
302
  }
240
- const exact = groupedDuplicates(byChecksum);
241
- const logical = groupedDuplicates(byLogicalName).filter((candidate) => !exact.some((exactCandidate) => candidate.files.every((file) => exactCandidate.files.includes(file))));
242
- return [...exact, ...logical]
303
+ return groupedDuplicates(byChecksum)
243
304
  .sort((a, b) => b.files.length - a.files.length || a.key.localeCompare(b.key))
244
305
  .slice(0, MAX_SOURCE_DIAGNOSTIC_ITEMS);
245
306
  }
@@ -260,9 +321,6 @@ function groupedDuplicates(groups) {
260
321
  .filter(([, files]) => files.length > 1)
261
322
  .map(([key, files]) => ({ key, files: [...new Set(files)].sort() }));
262
323
  }
263
- function normalizedLogicalName(relativePath) {
264
- return normalizeForMatch(path.basename(relativePath, path.extname(relativePath))).replace(/[^a-z0-9]+/gu, "");
265
- }
266
324
  async function currentEmptyTextFiles(config, files) {
267
325
  const currentChecksums = new Map(files.map((file) => [file.relativePath, file.checksum]));
268
326
  const emptyTextFiles = new Set();
@@ -1 +1 @@
1
- {"version":3,"file":"ingest.js","sourceRoot":"","sources":["../src/ingest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ingest.js","sourceRoot":"","sources":["../src/ingest.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAMA,wBAAsB,WAAW,CAAC,GAAG,SAAgB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAmCxE"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAOA,wBAAsB,WAAW,CAAC,GAAG,SAAgB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CA8CxE"}
package/dist/init.js CHANGED
@@ -1,27 +1,39 @@
1
1
  import { existsSync } from "node:fs";
2
- import { mkdir, writeFile } from "node:fs/promises";
2
+ import { writeFile } from "node:fs/promises";
3
3
  import path from "node:path";
4
4
  import { CONFIG_PATH, DEFAULT_CONFIG, LEGACY_CONFIG_PATH, RAGMIR_DIR } from "./defaults.js";
5
5
  import { ensureRagmirGitignore } from "./gitignore.js";
6
+ import { ensurePrivateDirectory, hardenPrivateFile } from "./permissions.js";
6
7
  export async function initProject(cwd = process.cwd()) {
7
8
  const root = path.resolve(cwd);
8
9
  const ragmirDir = path.join(root, RAGMIR_DIR);
9
10
  const rawDir = path.join(root, DEFAULT_CONFIG.rawDir);
10
11
  const created = [];
11
- await mkdir(ragmirDir, { recursive: true });
12
+ await ensurePrivateDirectory(ragmirDir);
13
+ if (existsSync(rawDir)) {
14
+ await ensurePrivateDirectory(rawDir);
15
+ }
12
16
  const configPath = path.join(root, CONFIG_PATH);
13
17
  const legacyConfigPath = path.join(root, LEGACY_CONFIG_PATH);
14
18
  const hasConfig = existsSync(configPath);
15
19
  const hasLegacyConfig = existsSync(legacyConfigPath);
20
+ if (hasConfig) {
21
+ await hardenPrivateFile(configPath);
22
+ }
23
+ if (hasLegacyConfig) {
24
+ await hardenPrivateFile(legacyConfigPath);
25
+ }
16
26
  if (!hasConfig && !hasLegacyConfig) {
17
- await mkdir(rawDir, { recursive: true });
27
+ await ensurePrivateDirectory(rawDir);
18
28
  await writeFile(configPath, `${JSON.stringify(DEFAULT_CONFIG, null, 2)}\n`, "utf8");
29
+ await hardenPrivateFile(configPath);
19
30
  created.push(path.relative(root, configPath));
20
31
  }
21
32
  if (!hasConfig && !hasLegacyConfig) {
22
33
  const readmePath = path.join(rawDir, "README.md");
23
34
  if (!existsSync(readmePath)) {
24
35
  await writeFile(readmePath, "# Ragmir raw documents\n\nPut local documents to ingest here. Keep this folder ignored by Git.\n", "utf8");
36
+ await hardenPrivateFile(readmePath);
25
37
  created.push(path.relative(root, readmePath));
26
38
  }
27
39
  }
package/dist/init.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC3F,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAEtD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IACnD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;IAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,CAAA;IACrD,MAAM,OAAO,GAAa,EAAE,CAAA;IAE5B,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAE3C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAA;IAC/C,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAA;IAC5D,MAAM,SAAS,GAAG,UAAU,CAAC,UAAU,CAAC,CAAA;IACxC,MAAM,eAAe,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAA;IACpD,IAAI,CAAC,SAAS,IAAI,CAAC,eAAe,EAAE,CAAC;QACnC,MAAM,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACxC,MAAM,SAAS,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QACnF,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAA;IAC/C,CAAC;IAED,IAAI,CAAC,SAAS,IAAI,CAAC,eAAe,EAAE,CAAC;QACnC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;QACjD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,MAAM,SAAS,CACb,UAAU,EACV,kGAAkG,EAClG,MAAM,CACP,CAAA;YACD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAA;QAC/C,CAAC;IACH,CAAC;IAED,IAAI,MAAM,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IAC5B,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC3F,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAE5E,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IACnD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;IAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,CAAA;IACrD,MAAM,OAAO,GAAa,EAAE,CAAA;IAE5B,MAAM,sBAAsB,CAAC,SAAS,CAAC,CAAA;IACvC,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACvB,MAAM,sBAAsB,CAAC,MAAM,CAAC,CAAA;IACtC,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAA;IAC/C,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAA;IAC5D,MAAM,SAAS,GAAG,UAAU,CAAC,UAAU,CAAC,CAAA;IACxC,MAAM,eAAe,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAA;IACpD,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,iBAAiB,CAAC,UAAU,CAAC,CAAA;IACrC,CAAC;IACD,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,iBAAiB,CAAC,gBAAgB,CAAC,CAAA;IAC3C,CAAC;IACD,IAAI,CAAC,SAAS,IAAI,CAAC,eAAe,EAAE,CAAC;QACnC,MAAM,sBAAsB,CAAC,MAAM,CAAC,CAAA;QACpC,MAAM,SAAS,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QACnF,MAAM,iBAAiB,CAAC,UAAU,CAAC,CAAA;QACnC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAA;IAC/C,CAAC;IAED,IAAI,CAAC,SAAS,IAAI,CAAC,eAAe,EAAE,CAAC;QACnC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;QACjD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,MAAM,SAAS,CACb,UAAU,EACV,kGAAkG,EAClG,MAAM,CACP,CAAA;YACD,MAAM,iBAAiB,CAAC,UAAU,CAAC,CAAA;YACnC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAA;QAC/C,CAAC;IACH,CAAC;IAED,IAAI,MAAM,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IAC5B,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { Config, IngestionLimitsReport } from "./types.js";
2
+ export declare const MAX_OFFICE_XML_ENTRY_BYTES = 25000000;
3
+ export declare const MAX_OFFICE_TEXT_ENTRY_COUNT = 512;
4
+ export declare const MAX_OFFICE_XML_TOTAL_BYTES = 50000000;
5
+ export declare const MAX_EXTERNAL_TEXT_STDIO_BYTES = 25000000;
6
+ export declare const MAX_PDF_PAGES = 1000;
7
+ export declare const MAX_PDF_TEXT_CHARACTERS = 25000000;
8
+ export declare function ingestionLimits(config: Pick<Config, "maxFileBytes">): IngestionLimitsReport;
9
+ //# sourceMappingURL=limits.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"limits.d.ts","sourceRoot":"","sources":["../src/limits.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAE/D,eAAO,MAAM,0BAA0B,WAAa,CAAA;AACpD,eAAO,MAAM,2BAA2B,MAAM,CAAA;AAC9C,eAAO,MAAM,0BAA0B,WAAa,CAAA;AACpD,eAAO,MAAM,6BAA6B,WAAa,CAAA;AACvD,eAAO,MAAM,aAAa,OAAQ,CAAA;AAClC,eAAO,MAAM,uBAAuB,WAAa,CAAA;AAEjD,wBAAgB,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,qBAAqB,CAiB3F"}
package/dist/limits.js ADDED
@@ -0,0 +1,25 @@
1
+ export const MAX_OFFICE_XML_ENTRY_BYTES = 25_000_000;
2
+ export const MAX_OFFICE_TEXT_ENTRY_COUNT = 512;
3
+ export const MAX_OFFICE_XML_TOTAL_BYTES = 50_000_000;
4
+ export const MAX_EXTERNAL_TEXT_STDIO_BYTES = 25_000_000;
5
+ export const MAX_PDF_PAGES = 1_000;
6
+ export const MAX_PDF_TEXT_CHARACTERS = 25_000_000;
7
+ export function ingestionLimits(config) {
8
+ return {
9
+ maxFileBytes: config.maxFileBytes,
10
+ maxFiles: null,
11
+ maxCorpusBytes: null,
12
+ maxPdfPages: MAX_PDF_PAGES,
13
+ maxPdfTextCharacters: MAX_PDF_TEXT_CHARACTERS,
14
+ maxOfficeTextEntries: MAX_OFFICE_TEXT_ENTRY_COUNT,
15
+ maxOfficeEntryBytes: MAX_OFFICE_XML_ENTRY_BYTES,
16
+ maxOfficeTotalTextBytes: MAX_OFFICE_XML_TOTAL_BYTES,
17
+ maxExternalTextOutputBytes: MAX_EXTERNAL_TEXT_STDIO_BYTES,
18
+ notes: [
19
+ "Ragmir has no hard file-count or total-corpus-size limit; available disk, memory, embedding throughput, and exact-search latency are the practical constraints.",
20
+ "Files larger than maxFileBytes are skipped before parsing and reported by ingest, audit, and doctor.",
21
+ "PDF, Office/archive, and external extractor limits are hard safety blocks and surface as ingestion errors.",
22
+ ],
23
+ };
24
+ }
25
+ //# sourceMappingURL=limits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"limits.js","sourceRoot":"","sources":["../src/limits.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,0BAA0B,GAAG,UAAU,CAAA;AACpD,MAAM,CAAC,MAAM,2BAA2B,GAAG,GAAG,CAAA;AAC9C,MAAM,CAAC,MAAM,0BAA0B,GAAG,UAAU,CAAA;AACpD,MAAM,CAAC,MAAM,6BAA6B,GAAG,UAAU,CAAA;AACvD,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAA;AAClC,MAAM,CAAC,MAAM,uBAAuB,GAAG,UAAU,CAAA;AAEjD,MAAM,UAAU,eAAe,CAAC,MAAoC;IAClE,OAAO;QACL,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,QAAQ,EAAE,IAAI;QACd,cAAc,EAAE,IAAI;QACpB,WAAW,EAAE,aAAa;QAC1B,oBAAoB,EAAE,uBAAuB;QAC7C,oBAAoB,EAAE,2BAA2B;QACjD,mBAAmB,EAAE,0BAA0B;QAC/C,uBAAuB,EAAE,0BAA0B;QACnD,0BAA0B,EAAE,6BAA6B;QACzD,KAAK,EAAE;YACL,iKAAiK;YACjK,sGAAsG;YACtG,4GAA4G;SAC7G;KACF,CAAA;AACH,CAAC"}
package/dist/mcp.d.ts CHANGED
@@ -1,9 +1,11 @@
1
1
  export declare function serveMcp(cwd?: string): Promise<void>;
2
2
  export declare function resolveMcpProjectRoot(env?: NodeJS.ProcessEnv, fallback?: string): string;
3
- export declare function searchOptions(cwd: string, topK: number | undefined, contextRadius?: number | undefined): Promise<{
3
+ export declare function searchOptions(cwd: string, topK: number | undefined, contextRadius?: number | undefined, includePaths?: string[] | undefined, excludePaths?: string[] | undefined): Promise<{
4
4
  cwd: string;
5
5
  topK?: number;
6
6
  contextRadius?: number;
7
+ includePaths?: string[];
8
+ excludePaths?: string[];
7
9
  }>;
8
10
  export declare function projectRelativeGoldenPath(cwd: string, goldenPath: string): string;
9
11
  //# sourceMappingURL=mcp.d.ts.map
package/dist/mcp.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAgDA,wBAAsB,QAAQ,CAAC,GAAG,SAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,CA4J3E;AAED,wBAAgB,qBAAqB,CACnC,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,QAAQ,SAAgB,GACvB,MAAM,CAYR;AAaD,wBAAsB,aAAa,CACjC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,GACjC,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAWjE;AAmBD,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAQjF"}
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAqDA,wBAAsB,QAAQ,CAAC,GAAG,SAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,CAmN3E;AAED,wBAAgB,qBAAqB,CACnC,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,QAAQ,SAAgB,GACvB,MAAM,CAYR;AAaD,wBAAsB,aAAa,CACjC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,EAClC,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,EACnC,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,GAClC,OAAO,CAAC;IACT,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;CACxB,CAAC,CAmBD;AAmBD,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAQjF"}
package/dist/mcp.js CHANGED
@@ -8,6 +8,7 @@ import { findProjectConfig, loadConfig } from "./config.js";
8
8
  import { RAGMIR_PROJECT_ROOT_ENV } from "./defaults.js";
9
9
  import { evaluateGoldenQueries } from "./evaluate.js";
10
10
  import { audit } from "./ingest.js";
11
+ import { ingestionLimits } from "./limits.js";
11
12
  import { routePrompt } from "./prompt-routing.js";
12
13
  import { ask, search } from "./query.js";
13
14
  import { compactResearchReport, compactSearchResults, research } from "./research.js";
@@ -18,12 +19,16 @@ const queryToolInputSchema = z.object({
18
19
  query: z.string().min(1),
19
20
  topK: z.number().int().positive().optional(),
20
21
  contextRadius: z.number().int().min(0).optional(),
22
+ includePaths: z.array(z.string().min(1).max(500)).max(20).optional(),
23
+ excludePaths: z.array(z.string().min(1).max(500)).max(20).optional(),
21
24
  });
22
25
  const researchToolInputSchema = z.object({
23
26
  query: z.string().min(1),
24
27
  topK: z.number().int().positive().optional(),
25
28
  includeCode: z.boolean().optional(),
26
29
  compact: z.boolean().optional(),
30
+ includePaths: z.array(z.string().min(1).max(500)).max(20).optional(),
31
+ excludePaths: z.array(z.string().min(1).max(500)).max(20).optional(),
27
32
  });
28
33
  const searchToolInputSchema = queryToolInputSchema.extend({
29
34
  compact: z.boolean().optional(),
@@ -51,14 +56,24 @@ export async function serveMcp(cwd = resolveMcpProjectRoot()) {
51
56
  }, async () => {
52
57
  const config = await loadConfig(cwd);
53
58
  const chunksIndexed = await countRows(config);
59
+ const strict = config.privacyProfile === "strict";
54
60
  const output = {
55
- projectRoot: config.projectRoot,
56
- rawDir: config.rawDir,
57
- storageDir: config.storageDir,
58
- sourcesFile: config.sourcesFile,
61
+ projectRoot: strict ? "." : config.projectRoot,
62
+ rawDir: strict ? path.relative(config.projectRoot, config.rawDir) : config.rawDir,
63
+ storageDir: strict
64
+ ? path.relative(config.projectRoot, config.storageDir)
65
+ : config.storageDir,
66
+ sourcesFile: strict
67
+ ? path.relative(config.projectRoot, config.sourcesFile)
68
+ : config.sourcesFile,
69
+ privacyProfile: config.privacyProfile,
70
+ retrievalProfile: config.retrievalProfile,
59
71
  embeddingProvider: config.embeddingProvider,
60
72
  embeddingModel: config.embeddingModel,
61
- embeddingModelPath: config.embeddingModelPath,
73
+ embeddingModelRevision: config.embeddingModelRevision,
74
+ embeddingModelPath: strict
75
+ ? path.relative(config.projectRoot, config.embeddingModelPath)
76
+ : config.embeddingModelPath,
62
77
  transformersAllowRemoteModels: config.transformersAllowRemoteModels,
63
78
  llmGeneration: false,
64
79
  redactionEnabled: config.redaction.enabled,
@@ -73,6 +88,7 @@ export async function serveMcp(cwd = resolveMcpProjectRoot()) {
73
88
  imageOcrTimeoutMs: config.imageOcrTimeoutMs,
74
89
  legacyWordCommand: config.legacyWordCommand,
75
90
  legacyWordTimeoutMs: config.legacyWordTimeoutMs,
91
+ ingestionLimits: ingestionLimits(config),
76
92
  chunksIndexed,
77
93
  };
78
94
  return textResult(output);
@@ -86,26 +102,43 @@ export async function serveMcp(cwd = resolveMcpProjectRoot()) {
86
102
  title: "Ragmir Search",
87
103
  description: "Retrieve relevant passages from the local Ragmir knowledge base.",
88
104
  inputSchema: searchToolInputSchema,
89
- }, async ({ query, topK, contextRadius, compact }) => {
90
- const results = await search(query, await searchOptions(cwd, topK, contextRadius));
91
- return textResult(compact ? compactSearchResults(results) : results);
105
+ }, async ({ query, topK, contextRadius, compact, includePaths, excludePaths }) => {
106
+ const config = await loadConfig(cwd);
107
+ const results = await search(query, await searchOptions(cwd, topK, contextRadius, includePaths, excludePaths));
108
+ const compactOutput = compact ?? config.privacyProfile === "strict";
109
+ return textResult(compactOutput ? compactSearchResults(results) : results);
92
110
  });
93
111
  server.registerTool("ragmir_ask", {
94
112
  title: "Ragmir Ask",
95
113
  description: "Return cited retrieval context for a question without calling an LLM.",
96
114
  inputSchema: queryToolInputSchema,
97
- }, async ({ query, topK, contextRadius }) => textResult(await ask(query, await searchOptions(cwd, topK, contextRadius))));
115
+ }, async ({ query, topK, contextRadius, includePaths, excludePaths }) => {
116
+ const config = await loadConfig(cwd);
117
+ const options = await searchOptions(cwd, topK, contextRadius, includePaths, excludePaths);
118
+ if (config.privacyProfile === "strict") {
119
+ const results = await search(query, options);
120
+ return textResult({
121
+ answer: "Strict privacy profile returns compact cited retrieval only.",
122
+ sources: compactSearchResults(results),
123
+ });
124
+ }
125
+ return textResult(await ask(query, options));
126
+ });
98
127
  server.registerTool("ragmir_research", {
99
128
  title: "Ragmir Research",
100
129
  description: "Run an audit-backed multi-query research pass with cited evidence and optional code matches.",
101
130
  inputSchema: researchToolInputSchema,
102
- }, async ({ query, topK, includeCode, compact }) => {
103
- const options = await searchOptions(cwd, topK);
131
+ }, async ({ query, topK, includeCode, compact, includePaths, excludePaths }) => {
132
+ const config = await loadConfig(cwd);
133
+ const options = await searchOptions(cwd, topK, undefined, includePaths, excludePaths);
104
134
  const researchOptions = { cwd };
105
135
  addOption(researchOptions, "topK", options.topK);
106
136
  addOption(researchOptions, "includeCode", includeCode);
137
+ addOption(researchOptions, "includePaths", options.includePaths);
138
+ addOption(researchOptions, "excludePaths", options.excludePaths);
107
139
  const result = await research(query, researchOptions);
108
- return textResult(compact ? compactResearchReport(result) : result);
140
+ const compactOutput = compact ?? config.privacyProfile === "strict";
141
+ return textResult(compactOutput ? compactResearchReport(result) : result);
109
142
  });
110
143
  server.registerTool("ragmir_audit", {
111
144
  title: "Ragmir Audit",
@@ -132,7 +165,29 @@ export async function serveMcp(cwd = resolveMcpProjectRoot()) {
132
165
  title: "Ragmir Security Audit",
133
166
  description: "Show local privacy, provider, redaction, MCP, and gitignore posture.",
134
167
  inputSchema: z.object({}),
135
- }, async () => textResult(await securityAudit(cwd)));
168
+ }, async () => {
169
+ const config = await loadConfig(cwd);
170
+ const report = await securityAudit(cwd);
171
+ if (config.privacyProfile !== "strict") {
172
+ return textResult(report);
173
+ }
174
+ return textResult({
175
+ ...report,
176
+ projectRoot: ".",
177
+ providers: {
178
+ ...report.providers,
179
+ embeddingModelPath: path.relative(config.projectRoot, report.providers.embeddingModelPath),
180
+ },
181
+ accessLog: {
182
+ ...report.accessLog,
183
+ path: path.relative(config.projectRoot, report.accessLog.path),
184
+ },
185
+ storage: {
186
+ ...report.storage,
187
+ path: path.relative(config.projectRoot, report.storage.path),
188
+ },
189
+ });
190
+ });
136
191
  server.registerTool("ragmir_usage_report", {
137
192
  title: "Ragmir Usage Report",
138
193
  description: "Summarize the metadata-only local access log.",
@@ -167,7 +222,7 @@ function textResult(value) {
167
222
  ],
168
223
  };
169
224
  }
170
- export async function searchOptions(cwd, topK, contextRadius) {
225
+ export async function searchOptions(cwd, topK, contextRadius, includePaths, excludePaths) {
171
226
  const config = await loadConfig(cwd);
172
227
  const boundedTopK = Math.min(topK ?? config.topK, config.mcpMaxTopK);
173
228
  const boundedContextRadius = contextRadius === undefined ? undefined : Math.min(Math.max(0, contextRadius), 3);
@@ -176,6 +231,8 @@ export async function searchOptions(cwd, topK, contextRadius) {
176
231
  topK: boundedTopK,
177
232
  };
178
233
  addOption(result, "contextRadius", boundedContextRadius);
234
+ addOption(result, "includePaths", includePaths);
235
+ addOption(result, "excludePaths", excludePaths);
179
236
  return result;
180
237
  }
181
238
  async function evaluationOptions(cwd, goldenPath, topK) {