@jcode.labs/ragmir 2.17.2 → 2.18.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (205) hide show
  1. package/README.md +53 -43
  2. package/dist/access-log.d.ts +10 -0
  3. package/dist/access-log.d.ts.map +1 -1
  4. package/dist/access-log.js +119 -49
  5. package/dist/access-log.js.map +1 -1
  6. package/dist/chunking.d.ts +5 -1
  7. package/dist/chunking.d.ts.map +1 -1
  8. package/dist/chunking.js +102 -16
  9. package/dist/chunking.js.map +1 -1
  10. package/dist/citation.d.ts +18 -0
  11. package/dist/citation.d.ts.map +1 -0
  12. package/dist/citation.js +54 -0
  13. package/dist/citation.js.map +1 -0
  14. package/dist/cli-entry.d.ts +3 -0
  15. package/dist/cli-entry.d.ts.map +1 -0
  16. package/dist/cli-entry.js +16 -0
  17. package/dist/cli-entry.js.map +1 -0
  18. package/dist/cli-fast.d.ts +13 -0
  19. package/dist/cli-fast.d.ts.map +1 -0
  20. package/dist/cli-fast.js +145 -0
  21. package/dist/cli-fast.js.map +1 -0
  22. package/dist/cli-options.d.ts +3 -0
  23. package/dist/cli-options.d.ts.map +1 -1
  24. package/dist/cli-options.js +7 -0
  25. package/dist/cli-options.js.map +1 -1
  26. package/dist/cli-stdin.d.ts +3 -0
  27. package/dist/cli-stdin.d.ts.map +1 -0
  28. package/dist/cli-stdin.js +15 -0
  29. package/dist/cli-stdin.js.map +1 -0
  30. package/dist/cli.js +251 -44
  31. package/dist/cli.js.map +1 -1
  32. package/dist/client.d.ts +13 -2
  33. package/dist/client.d.ts.map +1 -1
  34. package/dist/client.js +155 -10
  35. package/dist/client.js.map +1 -1
  36. package/dist/config.d.ts +6 -0
  37. package/dist/config.d.ts.map +1 -1
  38. package/dist/config.js +227 -49
  39. package/dist/config.js.map +1 -1
  40. package/dist/context-resources.d.ts +4 -2
  41. package/dist/context-resources.d.ts.map +1 -1
  42. package/dist/context-resources.js +55 -24
  43. package/dist/context-resources.js.map +1 -1
  44. package/dist/defaults.d.ts +27 -0
  45. package/dist/defaults.d.ts.map +1 -1
  46. package/dist/defaults.js +42 -2
  47. package/dist/defaults.js.map +1 -1
  48. package/dist/destroy.d.ts +2 -2
  49. package/dist/destroy.d.ts.map +1 -1
  50. package/dist/destroy.js +34 -20
  51. package/dist/destroy.js.map +1 -1
  52. package/dist/doctor.d.ts +3 -2
  53. package/dist/doctor.d.ts.map +1 -1
  54. package/dist/doctor.js +86 -41
  55. package/dist/doctor.js.map +1 -1
  56. package/dist/durable-file.d.ts +13 -0
  57. package/dist/durable-file.d.ts.map +1 -0
  58. package/dist/durable-file.js +56 -0
  59. package/dist/durable-file.js.map +1 -0
  60. package/dist/embeddings.d.ts +14 -3
  61. package/dist/embeddings.d.ts.map +1 -1
  62. package/dist/embeddings.js +233 -95
  63. package/dist/embeddings.js.map +1 -1
  64. package/dist/errors.d.ts +1 -1
  65. package/dist/errors.d.ts.map +1 -1
  66. package/dist/errors.js.map +1 -1
  67. package/dist/evaluate.d.ts +4 -3
  68. package/dist/evaluate.d.ts.map +1 -1
  69. package/dist/evaluate.js +611 -110
  70. package/dist/evaluate.js.map +1 -1
  71. package/dist/files.d.ts +4 -1
  72. package/dist/files.d.ts.map +1 -1
  73. package/dist/files.js +119 -33
  74. package/dist/files.js.map +1 -1
  75. package/dist/generation-retention.d.ts +52 -0
  76. package/dist/generation-retention.d.ts.map +1 -0
  77. package/dist/generation-retention.js +318 -0
  78. package/dist/generation-retention.js.map +1 -0
  79. package/dist/index-diagnostics.d.ts +3 -2
  80. package/dist/index-diagnostics.d.ts.map +1 -1
  81. package/dist/index-diagnostics.js +32 -3
  82. package/dist/index-diagnostics.js.map +1 -1
  83. package/dist/index-policy.d.ts.map +1 -1
  84. package/dist/index-policy.js +3 -0
  85. package/dist/index-policy.js.map +1 -1
  86. package/dist/index-write-lock.d.ts +16 -1
  87. package/dist/index-write-lock.d.ts.map +1 -1
  88. package/dist/index-write-lock.js +392 -13
  89. package/dist/index-write-lock.js.map +1 -1
  90. package/dist/index.d.ts +12 -4
  91. package/dist/index.d.ts.map +1 -1
  92. package/dist/index.js +5 -2
  93. package/dist/index.js.map +1 -1
  94. package/dist/ingest.d.ts +11 -2
  95. package/dist/ingest.d.ts.map +1 -1
  96. package/dist/ingest.js +680 -165
  97. package/dist/ingest.js.map +1 -1
  98. package/dist/ingestion-metrics.d.ts +58 -0
  99. package/dist/ingestion-metrics.d.ts.map +1 -0
  100. package/dist/ingestion-metrics.js +216 -0
  101. package/dist/ingestion-metrics.js.map +1 -0
  102. package/dist/ingestion-state.d.ts +11 -2
  103. package/dist/ingestion-state.d.ts.map +1 -1
  104. package/dist/ingestion-state.js +480 -49
  105. package/dist/ingestion-state.js.map +1 -1
  106. package/dist/limits.d.ts.map +1 -1
  107. package/dist/limits.js +11 -1
  108. package/dist/limits.js.map +1 -1
  109. package/dist/mcp-output.d.ts +44 -4
  110. package/dist/mcp-output.d.ts.map +1 -1
  111. package/dist/mcp-output.js +132 -159
  112. package/dist/mcp-output.js.map +1 -1
  113. package/dist/mcp-summaries.d.ts +32 -0
  114. package/dist/mcp-summaries.d.ts.map +1 -0
  115. package/dist/mcp-summaries.js +227 -0
  116. package/dist/mcp-summaries.js.map +1 -0
  117. package/dist/mcp.d.ts +1 -1
  118. package/dist/mcp.d.ts.map +1 -1
  119. package/dist/mcp.js +85 -46
  120. package/dist/mcp.js.map +1 -1
  121. package/dist/ocr-cache.d.ts +15 -0
  122. package/dist/ocr-cache.d.ts.map +1 -0
  123. package/dist/ocr-cache.js +90 -0
  124. package/dist/ocr-cache.js.map +1 -0
  125. package/dist/ocr.d.ts +31 -0
  126. package/dist/ocr.d.ts.map +1 -1
  127. package/dist/ocr.js +193 -17
  128. package/dist/ocr.js.map +1 -1
  129. package/dist/parsing.d.ts.map +1 -1
  130. package/dist/parsing.js +482 -85
  131. package/dist/parsing.js.map +1 -1
  132. package/dist/permissions.js +2 -2
  133. package/dist/permissions.js.map +1 -1
  134. package/dist/preview.d.ts.map +1 -1
  135. package/dist/preview.js +10 -11
  136. package/dist/preview.js.map +1 -1
  137. package/dist/quality-report.d.ts +12 -0
  138. package/dist/quality-report.d.ts.map +1 -0
  139. package/dist/quality-report.js +146 -0
  140. package/dist/quality-report.js.map +1 -0
  141. package/dist/query.d.ts +7 -4
  142. package/dist/query.d.ts.map +1 -1
  143. package/dist/query.js +371 -284
  144. package/dist/query.js.map +1 -1
  145. package/dist/ranking.d.ts +38 -0
  146. package/dist/ranking.d.ts.map +1 -0
  147. package/dist/ranking.js +278 -0
  148. package/dist/ranking.js.map +1 -0
  149. package/dist/redaction.d.ts +6 -1
  150. package/dist/redaction.d.ts.map +1 -1
  151. package/dist/redaction.js +118 -4
  152. package/dist/redaction.js.map +1 -1
  153. package/dist/research.d.ts +6 -1
  154. package/dist/research.d.ts.map +1 -1
  155. package/dist/research.js +330 -130
  156. package/dist/research.js.map +1 -1
  157. package/dist/runtime-info.d.ts +3 -0
  158. package/dist/runtime-info.d.ts.map +1 -0
  159. package/dist/runtime-info.js +81 -0
  160. package/dist/runtime-info.js.map +1 -0
  161. package/dist/security.d.ts +3 -2
  162. package/dist/security.d.ts.map +1 -1
  163. package/dist/security.js +242 -45
  164. package/dist/security.js.map +1 -1
  165. package/dist/semantic-config.d.ts +7 -1
  166. package/dist/semantic-config.d.ts.map +1 -1
  167. package/dist/semantic-config.js +30 -4
  168. package/dist/semantic-config.js.map +1 -1
  169. package/dist/setup.js +6 -3
  170. package/dist/setup.js.map +1 -1
  171. package/dist/skill.js +34 -12
  172. package/dist/skill.js.map +1 -1
  173. package/dist/source-fingerprint-cache.d.ts +20 -0
  174. package/dist/source-fingerprint-cache.d.ts.map +1 -0
  175. package/dist/source-fingerprint-cache.js +133 -0
  176. package/dist/source-fingerprint-cache.js.map +1 -0
  177. package/dist/storage-maintenance.d.ts +46 -0
  178. package/dist/storage-maintenance.d.ts.map +1 -0
  179. package/dist/storage-maintenance.js +329 -0
  180. package/dist/storage-maintenance.js.map +1 -0
  181. package/dist/store.d.ts +39 -2
  182. package/dist/store.d.ts.map +1 -1
  183. package/dist/store.js +559 -24
  184. package/dist/store.js.map +1 -1
  185. package/dist/text.d.ts +1 -1
  186. package/dist/text.d.ts.map +1 -1
  187. package/dist/text.js +12 -2
  188. package/dist/text.js.map +1 -1
  189. package/dist/types.d.ts +414 -5
  190. package/dist/types.d.ts.map +1 -1
  191. package/dist/vector-index.d.ts +42 -0
  192. package/dist/vector-index.d.ts.map +1 -0
  193. package/dist/vector-index.js +249 -0
  194. package/dist/vector-index.js.map +1 -0
  195. package/dist/version.d.ts +1 -1
  196. package/dist/version.js +1 -1
  197. package/dist/workload.d.ts +22 -0
  198. package/dist/workload.d.ts.map +1 -0
  199. package/dist/workload.js +181 -0
  200. package/dist/workload.js.map +1 -0
  201. package/examples/document-evidence-benchmark/README.md +25 -63
  202. package/examples/document-evidence-benchmark/golden-queries.json +1 -1
  203. package/examples/library-api-demo/README.md +17 -57
  204. package/examples/sovereign-rag-demo/README.md +37 -97
  205. package/package.json +36 -11
package/dist/types.d.ts CHANGED
@@ -28,6 +28,7 @@ export interface Config {
28
28
  embeddingProvider: EmbeddingProvider;
29
29
  embeddingModel: string;
30
30
  embeddingModelRevision: string;
31
+ embeddingModelDigest: string | null;
31
32
  transformersAllowRemoteModels: boolean;
32
33
  redaction: RedactionConfig;
33
34
  accessLog: boolean;
@@ -39,7 +40,10 @@ export interface Config {
39
40
  maxFileBytes: number;
40
41
  ingestConcurrency: number;
41
42
  embeddingBatchSize: number;
43
+ sourceFingerprintMode: SourceFingerprintMode;
44
+ incrementalFailurePolicy: IncrementalFailurePolicy;
42
45
  hybridTextScanLimit: number;
46
+ workloadLimits: WorkloadLimits;
43
47
  includeExtensions: string[];
44
48
  pdfOcrCommand: string[];
45
49
  pdfOcrTimeoutMs: number;
@@ -50,6 +54,15 @@ export interface Config {
50
54
  }
51
55
  export type PrivacyProfile = "strict" | "private" | "trusted" | "custom";
52
56
  export type RetrievalProfile = "fast" | "balanced" | "quality" | "custom";
57
+ export type IncrementalFailurePolicy = "preserve-last-good" | "remove-stale";
58
+ export type SourceFingerprintMode = "fast" | "strict";
59
+ export type WorkloadKind = "search" | "embedding" | "ingestion";
60
+ export interface WorkloadLimit {
61
+ concurrency: number;
62
+ maxQueue: number;
63
+ queueTimeoutMs: number;
64
+ }
65
+ export type WorkloadLimits = Record<WorkloadKind, WorkloadLimit>;
53
66
  export type AccessLogAction = "ingest" | "search" | "ask" | "research" | "evaluate" | "destroy-index";
54
67
  export interface AccessLogUsageOptions extends OperationOptions {
55
68
  cwd?: PathLike;
@@ -80,8 +93,16 @@ export interface McpOutputUsageReport {
80
93
  }
81
94
  export interface IngestionLimitsReport {
82
95
  maxFileBytes: number;
96
+ hardMaxFileBytes: number;
83
97
  maxFiles: null;
84
98
  maxCorpusBytes: null;
99
+ maxFileBatchSize: number;
100
+ maxIngestConcurrency: number;
101
+ maxEmbeddingBatchSize: number;
102
+ maxSourceWindowBytes: number;
103
+ maxChunkWindow: number;
104
+ maxChunksPerFile: number;
105
+ maxVectorBytesPerFile: number;
85
106
  maxPdfPages: number;
86
107
  maxPdfTextCharacters: number;
87
108
  maxOfficeTextEntries: number;
@@ -91,11 +112,34 @@ export interface IngestionLimitsReport {
91
112
  notes: string[];
92
113
  }
93
114
  export type EmbeddingProvider = "local-hash" | "transformers";
115
+ export type VectorIndexStrategy = "exact" | "ivf-pq" | "hnsw-sq";
116
+ export interface VectorIndexParameters {
117
+ numPartitions?: number;
118
+ numSubVectors?: number;
119
+ nprobes?: number;
120
+ refineFactor?: number;
121
+ ef?: number;
122
+ }
123
+ export interface VectorIndexManifest {
124
+ policyVersion: 1;
125
+ strategy: VectorIndexStrategy;
126
+ indexName: string | null;
127
+ indexType: string | null;
128
+ column: "vector";
129
+ distanceMetric: string;
130
+ dimension: number;
131
+ modelFingerprint: string;
132
+ indexedRows: number;
133
+ unindexedRows: number;
134
+ coverage: number;
135
+ parameters: VectorIndexParameters;
136
+ }
94
137
  /**
95
138
  * Manifest written next to the LanceDB table at each ingest. It captures the
96
139
  * configuration that produced the indexed vectors so callers can detect a
97
140
  * stale index cheaply (without re-scanning every file's checksum) when the
98
- * embedding model, provider, chunking, or Ragmir schema has changed.
141
+ * embedding model, provider, chunking, or Ragmir schema has changed. The
142
+ * corpus fingerprint identifies indexed relative paths and source bytes.
99
143
  */
100
144
  export interface IndexManifest {
101
145
  schemaVersion: number;
@@ -103,15 +147,71 @@ export interface IndexManifest {
103
147
  ragmirVersion: string;
104
148
  embeddingProvider: EmbeddingProvider;
105
149
  embeddingModel: string;
150
+ embeddingModelRevision?: string;
151
+ embeddingModelDigest?: string | null;
106
152
  indexPolicyFingerprint?: string;
107
153
  vectorDimension?: number;
108
154
  vectorDistanceMetric?: string;
155
+ vectorIndex?: VectorIndexManifest;
109
156
  chunkSize: number;
110
157
  chunkOverlap: number;
111
158
  fileCount: number;
112
159
  chunkCount: number;
160
+ corpusFingerprint?: string;
113
161
  tableName?: string;
114
162
  indexedFiles?: IndexManifestFile[];
163
+ staleFiles?: IndexManifestStaleFile[];
164
+ health?: IndexHealthSnapshot;
165
+ maintenance?: IndexMaintenanceSnapshot;
166
+ qualityReport?: IndexQualityReport;
167
+ }
168
+ export interface IndexHealthSnapshot {
169
+ schemaVersion: 1;
170
+ checkedAt: string;
171
+ discoveredFiles: number;
172
+ supportedFiles: number;
173
+ supportedBytes: number;
174
+ largestFileBytes: number;
175
+ skippedFiles: number;
176
+ unsupportedFiles: number;
177
+ oversizedFiles: number;
178
+ sensitiveFiles: number;
179
+ emptyTextFiles: number;
180
+ missingFromIndex: number;
181
+ staleInIndex: number;
182
+ previews: {
183
+ missingFromIndex: string[];
184
+ staleInIndex: string[];
185
+ emptyTextFiles: string[];
186
+ };
187
+ previewOmitted: {
188
+ missingFromIndex: number;
189
+ staleInIndex: number;
190
+ emptyTextFiles: number;
191
+ };
192
+ skippedByReason: Record<string, number>;
193
+ sourceDiagnostics: SourceDiagnostics;
194
+ securityCheckedAt: string;
195
+ securityWarnings: string[];
196
+ }
197
+ export interface IndexMaintenanceSnapshot {
198
+ schemaVersion: 1;
199
+ checkedAt: string;
200
+ status: "missing" | "healthy" | "needed" | "completed" | "warning";
201
+ tableVersion: number | null;
202
+ mutationsSinceOptimization: number;
203
+ fragments: {
204
+ total: number;
205
+ small: number;
206
+ smallRatio: number;
207
+ };
208
+ fullTextIndex: {
209
+ present: boolean;
210
+ indexedRows: number;
211
+ unindexedRows: number;
212
+ complete: boolean;
213
+ };
214
+ warning: string | null;
115
215
  }
116
216
  export interface IndexManifestFile {
117
217
  relativePath: string;
@@ -120,6 +220,13 @@ export interface IndexManifestFile {
120
220
  bytes?: number;
121
221
  mtimeMs?: number;
122
222
  }
223
+ export interface IndexManifestStaleFile {
224
+ relativePath: string;
225
+ currentChecksum: string;
226
+ lastGoodChecksum: string;
227
+ chunkCount: number;
228
+ error: string;
229
+ }
123
230
  export interface RedactionConfig {
124
231
  enabled: boolean;
125
232
  builtIn: boolean;
@@ -159,17 +266,46 @@ export interface SourceInventory {
159
266
  discoveredFiles: number;
160
267
  supportedFiles: SourceFile[];
161
268
  skippedFiles: SkippedSourceFile[];
269
+ contentBytesRead: number;
270
+ hashedFiles: number;
271
+ reusedFingerprints: number;
162
272
  }
163
273
  export interface ParsedDocument {
164
274
  file: SourceFile;
165
275
  text: string;
276
+ sourceLineCoordinates?: boolean;
166
277
  pages?: ParsedPage[];
278
+ regions?: ParsedRegion[];
279
+ ocr?: PdfOcrMetrics;
280
+ }
281
+ export interface PdfOcrMetrics {
282
+ pages: number;
283
+ cacheHits: number;
284
+ cacheMisses: number;
285
+ batches: number;
286
+ subprocesses: number;
287
+ durationMs: number;
167
288
  }
168
289
  export interface ParsedPage {
169
290
  pageNumber: number;
170
291
  charStart: number;
171
292
  charEnd: number;
172
293
  }
294
+ export type SourceLocationKind = "page" | "slide" | "sheet" | "epub";
295
+ export interface SourceLocation {
296
+ kind: SourceLocationKind;
297
+ start: number;
298
+ end: number;
299
+ label?: string;
300
+ cellStart?: string;
301
+ cellEnd?: string;
302
+ }
303
+ export interface ParsedRegion {
304
+ charStart: number;
305
+ charEnd: number;
306
+ contextPath: string;
307
+ location: SourceLocation;
308
+ }
173
309
  export interface TextChunk {
174
310
  id: string;
175
311
  source: string;
@@ -179,10 +315,16 @@ export interface TextChunk {
179
315
  text: string;
180
316
  charStart: number;
181
317
  charEnd: number;
182
- lineStart: number;
183
- lineEnd: number;
318
+ lineStart?: number;
319
+ lineEnd?: number;
184
320
  pageStart?: number;
185
321
  pageEnd?: number;
322
+ locationKind?: SourceLocationKind;
323
+ locationStart?: number;
324
+ locationEnd?: number;
325
+ locationLabel?: string;
326
+ cellStart?: string;
327
+ cellEnd?: string;
186
328
  checksum: string;
187
329
  bytes: number;
188
330
  mtimeMs: number;
@@ -211,8 +353,51 @@ export interface IngestOptions extends OperationOptions {
211
353
  cwd?: PathLike;
212
354
  rebuild?: boolean;
213
355
  batchSize?: number;
356
+ incrementalFailurePolicy?: IncrementalFailurePolicy;
357
+ collectMetrics?: boolean;
214
358
  onProgress?: (progress: IngestionProgress) => void | Promise<void>;
215
359
  }
360
+ export type IngestionEmbeddingModelState = "unused" | "stateless" | "cold" | "warm" | "mixed";
361
+ export interface IngestionPhaseDurations {
362
+ queueMs: number;
363
+ writeLockWaitMs: number;
364
+ discoveryMs: number;
365
+ hashingMs: number;
366
+ parsingMs: number;
367
+ redactionMs: number;
368
+ chunkingMs: number;
369
+ embeddingMs: number;
370
+ storageWriteMs: number;
371
+ maintenanceMs: number;
372
+ totalMs: number;
373
+ }
374
+ export interface IngestionThroughputMetrics {
375
+ filesPerSecond: number;
376
+ mebibytesPerSecond: number;
377
+ chunksPerSecond: number;
378
+ embeddingsPerSecond: number;
379
+ }
380
+ export interface IngestionMetrics {
381
+ phaseDurations: IngestionPhaseDurations;
382
+ throughput: IngestionThroughputMetrics;
383
+ sourceBytesRead: number;
384
+ storagePayloadBytes: number;
385
+ peakRssBytes: number;
386
+ candidateFiles: number;
387
+ processedFiles: number;
388
+ embeddedChunks: number;
389
+ embeddingProvider: EmbeddingProvider;
390
+ embeddingModelState: IngestionEmbeddingModelState;
391
+ embeddingCacheHits: number;
392
+ embeddingCacheMisses: number;
393
+ embeddingQueueMs: number;
394
+ fallbackFiles: number;
395
+ errorCount: number;
396
+ timeoutCount: number;
397
+ truncationCount: number;
398
+ maintenanceOperations: number;
399
+ ocrSubprocesses: number;
400
+ }
216
401
  export interface IngestResult {
217
402
  runId: string;
218
403
  resumed: boolean;
@@ -224,6 +409,7 @@ export interface IngestResult {
224
409
  indexedFiles: number;
225
410
  rebuiltFiles: number;
226
411
  reusedFiles: number;
412
+ staleLastKnownGood: string[];
227
413
  policyRebuild: boolean;
228
414
  chunks: number;
229
415
  skippedFiles: number;
@@ -236,12 +422,15 @@ export interface IngestResult {
236
422
  count: number;
237
423
  }>;
238
424
  redactions: number;
425
+ ocr: PdfOcrMetrics;
239
426
  vectorIndexWarning: string | null;
240
427
  lexicalIndexWarning: string | null;
428
+ storageWarning: string | null;
241
429
  errors: Array<{
242
430
  path: string;
243
431
  message: string;
244
432
  }>;
433
+ metrics?: IngestionMetrics;
245
434
  }
246
435
  export type IngestionFileStage = "pending" | "parsed" | "embedded" | "indexed" | "error";
247
436
  export type IngestionRunMode = "incremental" | "rebuild";
@@ -258,6 +447,7 @@ export interface IngestionProgress {
258
447
  embeddedFiles: number;
259
448
  indexedFiles: number;
260
449
  errorFiles: number;
450
+ staleFiles: number;
261
451
  chunksIndexed: number;
262
452
  lastActivityAt: string;
263
453
  }
@@ -274,8 +464,8 @@ export interface PreviewChunk {
274
464
  text: string;
275
465
  charStart: number;
276
466
  charEnd: number;
277
- lineStart: number;
278
- lineEnd: number;
467
+ lineStart: number | null;
468
+ lineEnd: number | null;
279
469
  pageStart: number | null;
280
470
  pageEnd: number | null;
281
471
  }
@@ -286,6 +476,7 @@ export interface PreviewFile {
286
476
  bytes: number;
287
477
  parsedChars: number;
288
478
  redactions: number;
479
+ ocr: PdfOcrMetrics | null;
289
480
  chunkStats: ChunkStats;
290
481
  chunks: PreviewChunk[];
291
482
  omittedChunks: number;
@@ -328,6 +519,7 @@ export interface KnowledgeBaseContextReport {
328
519
  privacyProfile: PrivacyProfile;
329
520
  retrievalProfile: RetrievalProfile;
330
521
  embeddingProvider: EmbeddingProvider;
522
+ corpusFingerprint: string | null;
331
523
  ready: boolean;
332
524
  coverage: {
333
525
  supportedFiles: number;
@@ -371,6 +563,15 @@ export interface KnowledgeBaseSourceCatalog {
371
563
  staleInIndex: number;
372
564
  emptyTextFiles: number;
373
565
  };
566
+ page: {
567
+ offset: number;
568
+ limit: number;
569
+ nextOffset: number | null;
570
+ };
571
+ }
572
+ export interface KnowledgeBaseSourceCatalogOptions extends OperationOptions {
573
+ offset?: number;
574
+ limit?: number;
374
575
  }
375
576
  export interface SearchOptions extends OperationOptions {
376
577
  cwd?: PathLike;
@@ -380,6 +581,7 @@ export interface SearchOptions extends OperationOptions {
380
581
  excludePaths?: string[];
381
582
  contextPaths?: string[];
382
583
  explain?: boolean;
584
+ vectorSearchMode?: "adaptive" | "exact";
383
585
  }
384
586
  export interface SearchContextChunk {
385
587
  chunkIndex: number;
@@ -419,6 +621,18 @@ export interface SearchScoreExplanation {
419
621
  lexicalRank: number | null;
420
622
  vectorDistance: number | null;
421
623
  lexicalBackendScore: number | null;
624
+ lexicalBackend: "fts" | "fallback";
625
+ lexicalFallbackActivated: boolean;
626
+ lexicalFallbackReason: "fts-index-unavailable" | "fts-query-failed" | null;
627
+ lexicalExactPathMatch: boolean;
628
+ lexicalCandidateLimit: number;
629
+ lexicalCandidatesMaterialized: number;
630
+ lexicalQueryVariants: number;
631
+ lexicalIndexedRows: number;
632
+ lexicalUnindexedRows: number;
633
+ lexicalCoverage: number;
634
+ workloadQueueMs: number;
635
+ rankingPolicyFingerprint: string;
422
636
  matchedTerms: string[];
423
637
  }
424
638
  export interface ExpandCitationOptions extends OperationOptions {
@@ -464,6 +678,11 @@ export interface ResearchOptions extends OperationOptions {
464
678
  cwd?: PathLike;
465
679
  topK?: number;
466
680
  includeCode?: boolean;
681
+ fullAudit?: boolean;
682
+ codeTopK?: number;
683
+ codeScanMaxFiles?: number;
684
+ codeScanMaxBytes?: number;
685
+ codeScanConcurrency?: number;
467
686
  includePaths?: string[];
468
687
  excludePaths?: string[];
469
688
  contextPaths?: string[];
@@ -481,18 +700,23 @@ export interface ResearchEvidence {
481
700
  pageStart: number | null;
482
701
  pageEnd: number | null;
483
702
  queries: string[];
703
+ bestRank: number;
704
+ researchScore: number;
484
705
  }
485
706
  export interface CodeEvidence {
486
707
  relativePath: string;
487
708
  lineNumber: number;
488
709
  snippet: string;
489
710
  matchedTerms: string[];
711
+ score: number;
490
712
  }
491
713
  export interface ResearchReport {
492
714
  query: string;
493
715
  generatedQueries: string[];
494
716
  ready: boolean;
495
717
  audit: {
718
+ mode: "manifest" | "full";
719
+ inventoryVerified: boolean;
496
720
  supportedFiles: number;
497
721
  supportedBytes: number;
498
722
  largestFileBytes: number;
@@ -509,6 +733,17 @@ export interface ResearchReport {
509
733
  sourceDiagnostics: SourceDiagnostics;
510
734
  evidence: ResearchEvidence[];
511
735
  codeEvidence: CodeEvidence[];
736
+ budgets: {
737
+ timeoutMs: number | null;
738
+ evidenceTopK: number;
739
+ codeEvidenceTopK: number;
740
+ codeScanMaxFiles: number;
741
+ codeScanMaxBytes: number;
742
+ codeScanConcurrency: number;
743
+ codeFilesScanned: number;
744
+ codeBytesScanned: number;
745
+ codeScanTruncated: boolean;
746
+ };
512
747
  gaps: string[];
513
748
  nextSteps: string[];
514
749
  }
@@ -517,16 +752,58 @@ export interface GoldenQuery {
517
752
  query: string;
518
753
  expectedPaths: string[];
519
754
  expectedCitations?: string[];
755
+ answerable?: boolean;
756
+ category?: string;
757
+ locale?: string;
758
+ relevanceJudgments?: RelevanceJudgment[];
759
+ maximumVectorDistance?: number;
520
760
  includePaths?: string[];
521
761
  excludePaths?: string[];
522
762
  contextPaths?: string[];
523
763
  topK?: number;
524
764
  }
765
+ export interface RelevanceJudgment {
766
+ kind: "path" | "citation";
767
+ value: string;
768
+ relevance: 0 | 1 | 2 | 3;
769
+ }
770
+ export interface QualityMetricThresholds {
771
+ recallAt1?: number;
772
+ recallAt3?: number;
773
+ recallAt5?: number;
774
+ recallAt10?: number;
775
+ precisionAt5?: number;
776
+ meanReciprocalRankAt10?: number;
777
+ ndcgAt10?: number;
778
+ exactCitationRate?: number;
779
+ maximumFalsePositiveRate?: number;
780
+ }
781
+ export interface QualityGateResult {
782
+ metric: keyof QualityMetricThresholds;
783
+ direction: "minimum" | "maximum";
784
+ threshold: number;
785
+ actual: number | null;
786
+ passed: boolean;
787
+ applicable: boolean;
788
+ }
789
+ export interface EvaluationGroupResult {
790
+ total: number;
791
+ answerable: number;
792
+ unanswerable: number;
793
+ recallAt10: number;
794
+ precisionAt5: number;
795
+ meanReciprocalRankAt10: number;
796
+ ndcgAt10: number;
797
+ falsePositiveRate: number;
798
+ }
525
799
  export interface EvaluationOptions extends OperationOptions {
526
800
  cwd?: PathLike;
527
801
  goldenPath: PathLike;
528
802
  topK?: number;
529
803
  maxTopK?: number;
804
+ thresholds?: QualityMetricThresholds;
805
+ persistCompatibleReport?: boolean;
806
+ caseDetailLimit?: number;
530
807
  }
531
808
  export interface EvaluationCaseResult {
532
809
  id?: string;
@@ -541,18 +818,36 @@ export interface EvaluationCaseResult {
541
818
  matchedPaths: string[];
542
819
  matchedCitations: string[];
543
820
  expectedCitations?: string[];
821
+ answerable: boolean;
822
+ category?: string;
823
+ locale?: string;
824
+ relevanceJudgments: RelevanceJudgment[];
825
+ abstained: boolean;
826
+ falsePositive: boolean;
827
+ pathHit: boolean;
828
+ exactCitationHit: boolean | null;
544
829
  hit: boolean;
545
830
  bestRank: number | null;
546
831
  reciprocalRank: number;
547
832
  recall: number;
548
833
  precision: number;
549
834
  ndcg: number;
835
+ recallAt: Record<1 | 3 | 5 | 10, number>;
836
+ precisionAt5: number;
837
+ reciprocalRankAt10: number;
838
+ ndcgAt10: number;
550
839
  latencyMs: number;
551
840
  }
552
841
  export interface EvaluationResult {
553
842
  goldenPath: string;
554
843
  embeddingProvider: EmbeddingProvider;
555
844
  embeddingModel: string;
845
+ embeddingModelRevision: string;
846
+ embeddingModelDigest: string | null;
847
+ retrievalProfile: RetrievalProfile;
848
+ rankingPolicyFingerprint: string;
849
+ indexFingerprint: string;
850
+ goldenFingerprint: string;
556
851
  topK: number;
557
852
  total: number;
558
853
  hits: number;
@@ -562,16 +857,70 @@ export interface EvaluationResult {
562
857
  precision: number;
563
858
  meanReciprocalRank: number;
564
859
  ndcg: number;
860
+ recallAt: Record<1 | 3 | 5 | 10, number>;
861
+ precisionAt5: number;
862
+ meanReciprocalRankAt10: number;
863
+ ndcgAt10: number;
864
+ exactCitationRate: number | null;
865
+ falsePositiveRate: number | null;
866
+ abstentionAccuracy: number | null;
867
+ thresholds: QualityMetricThresholds;
868
+ gates: QualityGateResult[];
869
+ passed: boolean;
870
+ verificationEligible: boolean;
871
+ reportStored: boolean;
872
+ qualityReportFingerprint: string | null;
873
+ groups: {
874
+ categories: Record<string, EvaluationGroupResult>;
875
+ locales: Record<string, EvaluationGroupResult>;
876
+ };
565
877
  p50LatencyMs: number;
566
878
  p95LatencyMs: number;
567
879
  cases: EvaluationCaseResult[];
880
+ omittedCases?: number;
881
+ }
882
+ export interface IndexQualityReport {
883
+ schemaVersion: 3;
884
+ createdAt: string;
885
+ goldenPath: string;
886
+ goldenFingerprint: string;
887
+ indexFingerprint: string;
888
+ indexPolicyFingerprint: string;
889
+ embeddingProvider: EmbeddingProvider;
890
+ embeddingModel: string;
891
+ embeddingModelRevision: string;
892
+ embeddingModelDigest: string | null;
893
+ retrievalProfile: RetrievalProfile;
894
+ rankingPolicyFingerprint: string;
895
+ total: number;
896
+ metrics: {
897
+ recallAt1: number;
898
+ recallAt3: number;
899
+ recallAt5: number;
900
+ recallAt10: number;
901
+ precisionAt5: number;
902
+ meanReciprocalRankAt10: number;
903
+ ndcgAt10: number;
904
+ exactCitationRate: number;
905
+ falsePositiveRate: number;
906
+ };
907
+ thresholds: Required<QualityMetricThresholds>;
908
+ passed: true;
909
+ verificationEligible: true;
910
+ qualityReportFingerprint: string;
568
911
  }
569
912
  export interface AskResult {
570
913
  answer: string;
571
914
  sources: SearchResult[];
572
915
  staleWarning: string | null;
573
916
  }
917
+ export interface AuditOptions extends OperationOptions {
918
+ previewLimit?: number;
919
+ }
574
920
  export interface AuditReport {
921
+ mode: "deep";
922
+ inventoryVerified: true;
923
+ cost: "O(corpus)";
575
924
  discoveredFiles: number;
576
925
  supportedBytes: number;
577
926
  largestFileBytes: number;
@@ -591,6 +940,17 @@ export interface AuditReport {
591
940
  staleInIndex: string[];
592
941
  totalChunks: number;
593
942
  chunkStats: ChunkStats;
943
+ omitted?: {
944
+ indexedFiles: number;
945
+ supportedFiles: number;
946
+ skippedFiles: number;
947
+ emptyTextFiles: number;
948
+ duplicateCandidates: number;
949
+ archiveCandidates: number;
950
+ mirrorCandidates: number;
951
+ missingFromIndex: number;
952
+ staleInIndex: number;
953
+ };
594
954
  }
595
955
  export interface DestroyIndexResult {
596
956
  storageDir: string;
@@ -598,10 +958,15 @@ export interface DestroyIndexResult {
598
958
  note: string;
599
959
  }
600
960
  export interface DoctorReport {
961
+ mode: "manifest" | "deep";
962
+ inventoryVerified: boolean;
963
+ securityVerified: boolean;
964
+ cost: "O(1)" | "O(corpus)";
601
965
  projectRoot: string;
602
966
  initialized: boolean;
603
967
  packageManager: PackageManager;
604
968
  runCommand: string;
969
+ runtime: RuntimeInfo;
605
970
  agentKitInstalled: boolean;
606
971
  agentIntegration: AgentIntegrationReport;
607
972
  rawDir: string;
@@ -625,6 +990,7 @@ export interface DoctorReport {
625
990
  chunksIndexed: number;
626
991
  missingFromIndex: number;
627
992
  staleInIndex: number;
993
+ corpusFingerprint: string | null;
628
994
  securityWarnings: string[];
629
995
  indexFreshness: {
630
996
  manifestFound: boolean;
@@ -641,6 +1007,29 @@ export interface DoctorReport {
641
1007
  };
642
1008
  nextSteps: string[];
643
1009
  }
1010
+ export interface RuntimePackageVersion {
1011
+ name: string;
1012
+ version: string;
1013
+ }
1014
+ export interface RuntimeInfo {
1015
+ ragmir: string;
1016
+ node: string;
1017
+ v8: string;
1018
+ napi: string | null;
1019
+ platform: NodeJS.Platform;
1020
+ architecture: string;
1021
+ dependencies: {
1022
+ lanceDb: RuntimePackageVersion | null;
1023
+ lanceDbNative: RuntimePackageVersion | null;
1024
+ apacheArrow: RuntimePackageVersion | null;
1025
+ transformers: RuntimePackageVersion | null;
1026
+ onnxRuntime: RuntimePackageVersion | null;
1027
+ sharp: RuntimePackageVersion | null;
1028
+ };
1029
+ }
1030
+ export interface DoctorOptions extends OperationOptions {
1031
+ deep?: boolean;
1032
+ }
644
1033
  export interface SecurityAuditReport {
645
1034
  projectRoot: string;
646
1035
  zeroTelemetry: true;
@@ -650,6 +1039,7 @@ export interface SecurityAuditReport {
650
1039
  embedding: EmbeddingProvider;
651
1040
  embeddingModel: string;
652
1041
  embeddingModelRevision: string;
1042
+ embeddingModelDigest: string | null;
653
1043
  embeddingModelPath: string;
654
1044
  transformersAllowRemoteModels: boolean;
655
1045
  llmGeneration: false;
@@ -669,12 +1059,28 @@ export interface SecurityAuditReport {
669
1059
  gitIgnored: boolean;
670
1060
  encryptedAtRest: "external-required";
671
1061
  };
1062
+ privatePaths: Array<{
1063
+ kind: "config" | "raw" | "storage" | "sources" | "access-log" | "embedding-models";
1064
+ path: string;
1065
+ insideProject: boolean;
1066
+ gitIgnored: boolean | null;
1067
+ gitTracked: boolean | null;
1068
+ permissionPrivate: boolean | null;
1069
+ }>;
1070
+ externalExtractors: {
1071
+ configured: boolean;
1072
+ enabled: Array<"pdf-ocr" | "image-ocr" | "legacy-word">;
1073
+ disabledByStrictProfile: boolean;
1074
+ executeWithOperatorAuthority: true;
1075
+ };
672
1076
  permissions: {
673
1077
  checked: boolean;
674
1078
  configPrivate: boolean | null;
675
1079
  rawDirPrivate: boolean | null;
676
1080
  storageDirPrivate: boolean | null;
1081
+ sourcesFilePrivate: boolean | null;
677
1082
  accessLogPrivate: boolean | null;
1083
+ embeddingModelPathPrivate: boolean | null;
678
1084
  };
679
1085
  mcp: {
680
1086
  maxTopK: number;
@@ -689,4 +1095,7 @@ export interface SecurityAuditReport {
689
1095
  recommendations: string[];
690
1096
  warnings: string[];
691
1097
  }
1098
+ export interface SecurityAuditOptions extends OperationOptions {
1099
+ deep?: boolean;
1100
+ }
692
1101
  //# sourceMappingURL=types.d.ts.map