@jcode.labs/ragmir 2.17.2 → 2.18.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 (203) hide show
  1. package/README.md +53 -6
  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 +3 -2
  202. package/examples/document-evidence-benchmark/golden-queries.json +1 -1
  203. package/package.json +36 -11
@@ -1,9 +1,10 @@
1
1
  import { loadConfig } from "./config.js";
2
- import { doctor } from "./doctor.js";
3
- import { audit } from "./ingest.js";
2
+ import { doctorWithConfig } from "./doctor.js";
4
3
  import { knowledgeBaseIdentity } from "./knowledge-bases.js";
5
4
  import { operationSignal, throwIfAborted } from "./operation.js";
5
+ import { readIndexManifestFilePage, readIndexManifestHeader } from "./store.js";
6
6
  const SOURCE_CATALOG_LIMIT = 50;
7
+ const MAX_SOURCE_CATALOG_LIMIT = 100;
7
8
  const RAGMIR_MCP_TOOLS = [
8
9
  "ragmir_status",
9
10
  "ragmir_route_prompt",
@@ -21,8 +22,12 @@ export async function getKnowledgeBaseContext(cwd = process.cwd(), options = {})
21
22
  const signal = operationSignal(options);
22
23
  throwIfAborted(signal);
23
24
  const config = await loadConfig(cwd);
25
+ return getKnowledgeBaseContextWithConfig(config, options);
26
+ }
27
+ export async function getKnowledgeBaseContextWithConfig(config, options = {}) {
28
+ const signal = operationSignal(options);
24
29
  throwIfAborted(signal);
25
- const report = await doctor(config.projectRoot, signal ? { signal } : {});
30
+ const report = await doctorWithConfig(config, signal ? { signal } : {});
26
31
  throwIfAborted(signal);
27
32
  const identity = knowledgeBaseIdentity(config.projectRoot);
28
33
  return {
@@ -31,6 +36,7 @@ export async function getKnowledgeBaseContext(cwd = process.cwd(), options = {})
31
36
  privacyProfile: config.privacyProfile,
32
37
  retrievalProfile: config.retrievalProfile,
33
38
  embeddingProvider: config.embeddingProvider,
39
+ corpusFingerprint: report.corpusFingerprint,
34
40
  ready: report.ready,
35
41
  coverage: {
36
42
  supportedFiles: report.supportedFiles,
@@ -55,42 +61,67 @@ export async function getKnowledgeBaseSourceCatalog(cwd = process.cwd(), options
55
61
  const signal = operationSignal(options);
56
62
  throwIfAborted(signal);
57
63
  const config = await loadConfig(cwd);
64
+ return getKnowledgeBaseSourceCatalogWithConfig(config, options);
65
+ }
66
+ export async function getKnowledgeBaseSourceCatalogWithConfig(config, options = {}) {
67
+ const signal = operationSignal(options);
58
68
  throwIfAborted(signal);
59
- const report = await audit(config.projectRoot, signal ? { signal } : {});
69
+ const offset = sourceCatalogOffset(options.offset);
70
+ const limit = sourceCatalogLimit(options.limit);
71
+ const [manifest, filePage] = await Promise.all([
72
+ readIndexManifestHeader(config),
73
+ readIndexManifestFilePage(config, offset, limit),
74
+ ]);
60
75
  throwIfAborted(signal);
61
76
  const identity = knowledgeBaseIdentity(config.projectRoot);
62
- const indexedFiles = report.indexedFiles.slice(0, SOURCE_CATALOG_LIMIT);
63
- const missingFromIndex = report.missingFromIndex.slice(0, SOURCE_CATALOG_LIMIT);
64
- const staleInIndex = report.staleInIndex.slice(0, SOURCE_CATALOG_LIMIT);
65
- const emptyTextFiles = report.emptyTextFiles.slice(0, SOURCE_CATALOG_LIMIT);
77
+ const health = manifest?.health;
78
+ const indexedFiles = (filePage?.files ?? []).map((file) => ({
79
+ source: file.relativePath,
80
+ chunks: file.chunkCount,
81
+ }));
82
+ const missingFromIndex = health?.previews.missingFromIndex.slice(0, limit) ?? [];
83
+ const staleInIndex = health?.previews.staleInIndex.slice(0, limit) ?? [];
84
+ const emptyTextFiles = health?.previews.emptyTextFiles.slice(0, limit) ?? [];
66
85
  return {
67
86
  knowledgeBaseId: identity?.id ?? null,
68
87
  totals: {
69
- indexedFiles: report.indexedFiles.length,
70
- chunks: report.totalChunks,
71
- missingFromIndex: report.missingFromIndex.length,
72
- staleInIndex: report.staleInIndex.length,
73
- emptyTextFiles: report.emptyTextFiles.length,
74
- skippedFiles: report.skippedFiles.length,
88
+ indexedFiles: manifest?.fileCount ?? 0,
89
+ chunks: manifest?.chunkCount ?? 0,
90
+ missingFromIndex: health?.missingFromIndex ?? 0,
91
+ staleInIndex: health?.staleInIndex ?? 0,
92
+ emptyTextFiles: health?.emptyTextFiles ?? 0,
93
+ skippedFiles: health?.skippedFiles ?? 0,
75
94
  },
76
95
  indexedFiles,
77
96
  missingFromIndex,
78
97
  staleInIndex,
79
98
  emptyTextFiles,
80
- skippedByReason: skippedCounts(report.skippedFiles),
99
+ skippedByReason: health?.skippedByReason ?? {},
81
100
  omitted: {
82
- indexedFiles: report.indexedFiles.length - indexedFiles.length,
83
- missingFromIndex: report.missingFromIndex.length - missingFromIndex.length,
84
- staleInIndex: report.staleInIndex.length - staleInIndex.length,
85
- emptyTextFiles: report.emptyTextFiles.length - emptyTextFiles.length,
101
+ indexedFiles: Math.max(0, (manifest?.fileCount ?? 0) - indexedFiles.length),
102
+ missingFromIndex: Math.max(0, (health?.missingFromIndex ?? 0) - missingFromIndex.length),
103
+ staleInIndex: Math.max(0, (health?.staleInIndex ?? 0) - staleInIndex.length),
104
+ emptyTextFiles: Math.max(0, (health?.emptyTextFiles ?? 0) - emptyTextFiles.length),
105
+ },
106
+ page: {
107
+ offset,
108
+ limit,
109
+ nextOffset: filePage?.nextOffset ?? null,
86
110
  },
87
111
  };
88
112
  }
89
- function skippedCounts(skippedFiles) {
90
- const counts = new Map();
91
- for (const skipped of skippedFiles) {
92
- counts.set(skipped.reason, (counts.get(skipped.reason) ?? 0) + 1);
113
+ function sourceCatalogOffset(value) {
114
+ const offset = value ?? 0;
115
+ if (!Number.isSafeInteger(offset) || offset < 0) {
116
+ throw new Error("Source catalog offset must be a non-negative integer.");
117
+ }
118
+ return offset;
119
+ }
120
+ function sourceCatalogLimit(value) {
121
+ const limit = value ?? SOURCE_CATALOG_LIMIT;
122
+ if (!Number.isSafeInteger(limit) || limit <= 0 || limit > MAX_SOURCE_CATALOG_LIMIT) {
123
+ throw new Error(`Source catalog limit must be a positive integer no greater than ${MAX_SOURCE_CATALOG_LIMIT}.`);
93
124
  }
94
- return Object.fromEntries([...counts.entries()].sort(([left], [right]) => left.localeCompare(right)));
125
+ return limit;
95
126
  }
96
127
  //# sourceMappingURL=context-resources.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"context-resources.js","sourceRoot":"","sources":["../src/context-resources.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context-resources.js","sourceRoot":"","sources":["../src/context-resources.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,33 @@ export declare const DEFAULT_SKILL_TARGET_DIR = ".ragmir/skills";
9
9
  export declare const INDEX_MANIFEST_FILENAME = "index-manifest.json";
10
10
  export declare const RAGMIR_PROJECT_ROOT_ENV = "RAGMIR_PROJECT_ROOT";
11
11
  export declare const VECTOR_DISTANCE_METRIC = "l2";
12
+ export declare const MAX_CONFIGURED_FILE_BYTES = 50000000;
13
+ export declare const MAX_INGEST_CONCURRENCY = 8;
14
+ export declare const MAX_EMBEDDING_BATCH_SIZE = 128;
15
+ export declare const MAX_INGEST_FILE_BATCH_SIZE = 128;
16
+ export declare const MAX_INGEST_SOURCE_WINDOW_BYTES = 50000000;
17
+ export declare const MAX_INGEST_CHUNK_WINDOW = 8192;
18
+ export declare const MAX_INGEST_CHUNKS_PER_FILE = 65536;
19
+ export declare const MAX_INGEST_VECTOR_BYTES_PER_FILE: number;
20
+ export declare const MAX_SEARCH_TOP_K = 100;
21
+ export declare const MAX_HYBRID_TEXT_SCAN_LIMIT = 10000;
22
+ export declare const MAX_CONFIG_ARRAY_ITEMS = 10000;
23
+ export declare const MAX_CONFIG_PATH_CHARACTERS = 4096;
24
+ export declare const MAX_CONFIG_TEXT_CHARACTERS = 2048;
25
+ export declare const MAX_EXTERNAL_COMMAND_ARGUMENTS = 128;
26
+ export declare const MAX_EXTERNAL_COMMAND_TIMEOUT_MS = 900000;
27
+ export declare const MAX_INCLUDE_EXTENSIONS = 128;
28
+ export declare const MAX_MCP_OUTPUT_BYTES = 1048576;
29
+ export declare const MAX_REDACTION_PATTERNS = 64;
30
+ export declare const MAX_REDACTION_PATTERN_CHARACTERS = 2048;
31
+ export declare const MAX_CHUNK_SIZE = 1000000;
32
+ export declare const MAX_WORKLOAD_CONCURRENCY = 16;
33
+ export declare const MAX_WORKLOAD_QUEUE = 1000;
34
+ export declare const MAX_WORKLOAD_QUEUE_TIMEOUT_MS = 900000;
35
+ export declare const DEFAULT_EMBEDDING_MODEL = "intfloat/multilingual-e5-small";
36
+ export declare const DEFAULT_EMBEDDING_MODEL_REVISION = "614241f622f53c4eeff9890bdc4f31cfecc418b3";
37
+ export declare const KNOWN_EMBEDDING_MODEL_REVISIONS: Readonly<Record<string, string>>;
38
+ export declare function defaultEmbeddingModelRevision(model: string): string;
12
39
  export declare const RAGMIR_GITIGNORE_ENTRY = ".ragmir/";
13
40
  export declare const LEGACY_KB_GITIGNORE_ENTRY = ".kb/";
14
41
  export declare const LEGACY_PRIVATE_GITIGNORE_ENTRY = "private/";
@@ -1 +1 @@
1
- {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../src/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAExC,eAAO,MAAM,UAAU,YAAY,CAAA;AACnC,eAAO,MAAM,aAAa,QAAQ,CAAA;AAClC,eAAO,MAAM,kBAAkB,YAAY,CAAA;AAC3C,eAAO,MAAM,cAAc,gBAAsB,CAAA;AACjD,eAAO,MAAM,WAAW,wBAA8B,CAAA;AACtD,eAAO,MAAM,kBAAkB,oBAAiC,CAAA;AAChE,eAAO,MAAM,wBAAwB,mBAAyB,CAAA;AAC9D,eAAO,MAAM,uBAAuB,wBAAwB,CAAA;AAE5D,eAAO,MAAM,uBAAuB,wBAAwB,CAAA;AAC5D,eAAO,MAAM,sBAAsB,OAAO,CAAA;AAE1C,eAAO,MAAM,sBAAsB,aAAmB,CAAA;AACtD,eAAO,MAAM,yBAAyB,SAAsB,CAAA;AAC5D,eAAO,MAAM,8BAA8B,aAA2B,CAAA;AACtE,eAAO,MAAM,uCAAuC,eAA6B,CAAA;AAEjF,eAAO,MAAM,cAAc,EAAE,IAAI,CAAC,MAAM,EAAE,aAAa,CAqCtD,CAAA;AAED,eAAO,MAAM,qBAAqB,EAAE,IAAI,CAAC,MAAM,EAAE,aAAa,CAM7D,CAAA"}
1
+ {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../src/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAExC,eAAO,MAAM,UAAU,YAAY,CAAA;AACnC,eAAO,MAAM,aAAa,QAAQ,CAAA;AAClC,eAAO,MAAM,kBAAkB,YAAY,CAAA;AAC3C,eAAO,MAAM,cAAc,gBAAsB,CAAA;AACjD,eAAO,MAAM,WAAW,wBAA8B,CAAA;AACtD,eAAO,MAAM,kBAAkB,oBAAiC,CAAA;AAChE,eAAO,MAAM,wBAAwB,mBAAyB,CAAA;AAC9D,eAAO,MAAM,uBAAuB,wBAAwB,CAAA;AAE5D,eAAO,MAAM,uBAAuB,wBAAwB,CAAA;AAC5D,eAAO,MAAM,sBAAsB,OAAO,CAAA;AAE1C,eAAO,MAAM,yBAAyB,WAAa,CAAA;AACnD,eAAO,MAAM,sBAAsB,IAAI,CAAA;AACvC,eAAO,MAAM,wBAAwB,MAAM,CAAA;AAC3C,eAAO,MAAM,0BAA0B,MAAM,CAAA;AAC7C,eAAO,MAAM,8BAA8B,WAAa,CAAA;AACxD,eAAO,MAAM,uBAAuB,OAAQ,CAAA;AAC5C,eAAO,MAAM,0BAA0B,QAAS,CAAA;AAChD,eAAO,MAAM,gCAAgC,QAAsB,CAAA;AACnE,eAAO,MAAM,gBAAgB,MAAM,CAAA;AACnC,eAAO,MAAM,0BAA0B,QAAS,CAAA;AAChD,eAAO,MAAM,sBAAsB,QAAS,CAAA;AAC5C,eAAO,MAAM,0BAA0B,OAAQ,CAAA;AAC/C,eAAO,MAAM,0BAA0B,OAAQ,CAAA;AAC/C,eAAO,MAAM,8BAA8B,MAAM,CAAA;AACjD,eAAO,MAAM,+BAA+B,SAAU,CAAA;AACtD,eAAO,MAAM,sBAAsB,MAAM,CAAA;AACzC,eAAO,MAAM,oBAAoB,UAAY,CAAA;AAC7C,eAAO,MAAM,sBAAsB,KAAK,CAAA;AACxC,eAAO,MAAM,gCAAgC,OAAQ,CAAA;AACrD,eAAO,MAAM,cAAc,UAAY,CAAA;AACvC,eAAO,MAAM,wBAAwB,KAAK,CAAA;AAC1C,eAAO,MAAM,kBAAkB,OAAQ,CAAA;AACvC,eAAO,MAAM,6BAA6B,SAAU,CAAA;AACpD,eAAO,MAAM,uBAAuB,mCAAmC,CAAA;AACvE,eAAO,MAAM,gCAAgC,6CAA6C,CAAA;AAC1F,eAAO,MAAM,+BAA+B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAG5E,CAAA;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED,eAAO,MAAM,sBAAsB,aAAmB,CAAA;AACtD,eAAO,MAAM,yBAAyB,SAAsB,CAAA;AAC5D,eAAO,MAAM,8BAA8B,aAA2B,CAAA;AACtE,eAAO,MAAM,uCAAuC,eAA6B,CAAA;AAEjF,eAAO,MAAM,cAAc,EAAE,IAAI,CAAC,MAAM,EAAE,aAAa,CA6CtD,CAAA;AAED,eAAO,MAAM,qBAAqB,EAAE,IAAI,CAAC,MAAM,EAAE,aAAa,CAM7D,CAAA"}
package/dist/defaults.js CHANGED
@@ -8,6 +8,38 @@ export const DEFAULT_SKILL_TARGET_DIR = `${RAGMIR_DIR}/skills`;
8
8
  export const INDEX_MANIFEST_FILENAME = "index-manifest.json";
9
9
  export const RAGMIR_PROJECT_ROOT_ENV = "RAGMIR_PROJECT_ROOT";
10
10
  export const VECTOR_DISTANCE_METRIC = "l2";
11
+ export const MAX_CONFIGURED_FILE_BYTES = 50_000_000;
12
+ export const MAX_INGEST_CONCURRENCY = 8;
13
+ export const MAX_EMBEDDING_BATCH_SIZE = 128;
14
+ export const MAX_INGEST_FILE_BATCH_SIZE = 128;
15
+ export const MAX_INGEST_SOURCE_WINDOW_BYTES = 50_000_000;
16
+ export const MAX_INGEST_CHUNK_WINDOW = 8_192;
17
+ export const MAX_INGEST_CHUNKS_PER_FILE = 65_536;
18
+ export const MAX_INGEST_VECTOR_BYTES_PER_FILE = 256 * 1_024 * 1_024;
19
+ export const MAX_SEARCH_TOP_K = 100;
20
+ export const MAX_HYBRID_TEXT_SCAN_LIMIT = 10_000;
21
+ export const MAX_CONFIG_ARRAY_ITEMS = 10_000;
22
+ export const MAX_CONFIG_PATH_CHARACTERS = 4_096;
23
+ export const MAX_CONFIG_TEXT_CHARACTERS = 2_048;
24
+ export const MAX_EXTERNAL_COMMAND_ARGUMENTS = 128;
25
+ export const MAX_EXTERNAL_COMMAND_TIMEOUT_MS = 900_000;
26
+ export const MAX_INCLUDE_EXTENSIONS = 128;
27
+ export const MAX_MCP_OUTPUT_BYTES = 1_048_576;
28
+ export const MAX_REDACTION_PATTERNS = 64;
29
+ export const MAX_REDACTION_PATTERN_CHARACTERS = 2_048;
30
+ export const MAX_CHUNK_SIZE = 1_000_000;
31
+ export const MAX_WORKLOAD_CONCURRENCY = 16;
32
+ export const MAX_WORKLOAD_QUEUE = 1_000;
33
+ export const MAX_WORKLOAD_QUEUE_TIMEOUT_MS = 900_000;
34
+ export const DEFAULT_EMBEDDING_MODEL = "intfloat/multilingual-e5-small";
35
+ export const DEFAULT_EMBEDDING_MODEL_REVISION = "614241f622f53c4eeff9890bdc4f31cfecc418b3";
36
+ export const KNOWN_EMBEDDING_MODEL_REVISIONS = {
37
+ [DEFAULT_EMBEDDING_MODEL]: DEFAULT_EMBEDDING_MODEL_REVISION,
38
+ "mixedbread-ai/mxbai-embed-xsmall-v1": "e6ac24e5d6efb8782b59de1647b3ececb4ece94e",
39
+ };
40
+ export function defaultEmbeddingModelRevision(model) {
41
+ return KNOWN_EMBEDDING_MODEL_REVISIONS[model] ?? "main";
42
+ }
11
43
  export const RAGMIR_GITIGNORE_ENTRY = `${RAGMIR_DIR}/`;
12
44
  export const LEGACY_KB_GITIGNORE_ENTRY = `${LEGACY_KB_DIR}/`;
13
45
  export const LEGACY_PRIVATE_GITIGNORE_ENTRY = `${LEGACY_PRIVATE_DIR}/`;
@@ -24,8 +56,9 @@ export const DEFAULT_CONFIG = {
24
56
  embeddingModelPath: `${RAGMIR_DIR}/models`,
25
57
  tableName: "chunks",
26
58
  embeddingProvider: "local-hash",
27
- embeddingModel: "intfloat/multilingual-e5-small",
28
- embeddingModelRevision: "main",
59
+ embeddingModel: DEFAULT_EMBEDDING_MODEL,
60
+ embeddingModelRevision: DEFAULT_EMBEDDING_MODEL_REVISION,
61
+ embeddingModelDigest: null,
29
62
  transformersAllowRemoteModels: false,
30
63
  redaction: {
31
64
  enabled: true,
@@ -41,7 +74,14 @@ export const DEFAULT_CONFIG = {
41
74
  maxFileBytes: 50_000_000,
42
75
  ingestConcurrency: 4,
43
76
  embeddingBatchSize: 32,
77
+ sourceFingerprintMode: "fast",
78
+ incrementalFailurePolicy: "preserve-last-good",
44
79
  hybridTextScanLimit: 5_000,
80
+ workloadLimits: {
81
+ search: { concurrency: 8, maxQueue: 64, queueTimeoutMs: 30_000 },
82
+ embedding: { concurrency: 1, maxQueue: 64, queueTimeoutMs: 30_000 },
83
+ ingestion: { concurrency: 1, maxQueue: 4, queueTimeoutMs: 120_000 },
84
+ },
45
85
  includeExtensions: [],
46
86
  pdfOcrCommand: [],
47
87
  pdfOcrTimeoutMs: 120_000,
@@ -1 +1 @@
1
- {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../src/defaults.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,UAAU,GAAG,SAAS,CAAA;AACnC,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAA;AAClC,MAAM,CAAC,MAAM,kBAAkB,GAAG,SAAS,CAAA;AAC3C,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,UAAU,MAAM,CAAA;AACjD,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,UAAU,cAAc,CAAA;AACtD,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,aAAa,cAAc,CAAA;AAChE,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,UAAU,SAAS,CAAA;AAC9D,MAAM,CAAC,MAAM,uBAAuB,GAAG,qBAAqB,CAAA;AAE5D,MAAM,CAAC,MAAM,uBAAuB,GAAG,qBAAqB,CAAA;AAC5D,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAA;AAE1C,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,UAAU,GAAG,CAAA;AACtD,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAG,aAAa,GAAG,CAAA;AAC5D,MAAM,CAAC,MAAM,8BAA8B,GAAG,GAAG,kBAAkB,GAAG,CAAA;AACtE,MAAM,CAAC,MAAM,uCAAuC,GAAG,GAAG,kBAAkB,KAAK,CAAA;AAEjF,MAAM,CAAC,MAAM,cAAc,GAAgC;IACzD,cAAc,EAAE,SAAS;IACzB,gBAAgB,EAAE,UAAU;IAC5B,aAAa,EAAE,EAAE;IACjB,MAAM,EAAE,cAAc;IACtB,UAAU,EAAE,GAAG,UAAU,UAAU;IACnC,WAAW,EAAE,GAAG,UAAU,cAAc;IACxC,OAAO,EAAE,EAAE;IACX,aAAa,EAAE,GAAG,UAAU,aAAa;IACzC,kBAAkB,EAAE,GAAG,UAAU,SAAS;IAC1C,SAAS,EAAE,QAAQ;IACnB,iBAAiB,EAAE,YAAY;IAC/B,cAAc,EAAE,gCAAgC;IAChD,sBAAsB,EAAE,MAAM;IAC9B,6BAA6B,EAAE,KAAK;IACpC,SAAS,EAAE;QACT,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,EAAE;KACb;IACD,SAAS,EAAE,IAAI;IACf,UAAU,EAAE,EAAE;IACd,iBAAiB,EAAE,MAAM;IACzB,IAAI,EAAE,CAAC;IACP,SAAS,EAAE,IAAI;IACf,YAAY,EAAE,GAAG;IACjB,YAAY,EAAE,UAAU;IACxB,iBAAiB,EAAE,CAAC;IACpB,kBAAkB,EAAE,EAAE;IACtB,mBAAmB,EAAE,KAAK;IAC1B,iBAAiB,EAAE,EAAE;IACrB,aAAa,EAAE,EAAE;IACjB,eAAe,EAAE,OAAO;IACxB,eAAe,EAAE,EAAE;IACnB,iBAAiB,EAAE,OAAO;IAC1B,iBAAiB,EAAE,EAAE;IACrB,mBAAmB,EAAE,OAAO;CAC7B,CAAA;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAgC;IAChE,GAAG,cAAc;IACjB,MAAM,EAAE,kBAAkB;IAC1B,UAAU,EAAE,GAAG,aAAa,UAAU;IACtC,WAAW,EAAE,GAAG,aAAa,cAAc;IAC3C,aAAa,EAAE,GAAG,aAAa,aAAa;CAC7C,CAAA"}
1
+ {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../src/defaults.ts"],"names":[],"mappings":"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"}
package/dist/destroy.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- import type { DestroyIndexResult } from "./types.js";
2
- export declare function destroyIndex(cwd?: string): Promise<DestroyIndexResult>;
1
+ import type { DestroyIndexResult, OperationOptions } from "./types.js";
2
+ export declare function destroyIndex(cwd?: string, options?: OperationOptions): Promise<DestroyIndexResult>;
3
3
  //# sourceMappingURL=destroy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"destroy.d.ts","sourceRoot":"","sources":["../src/destroy.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAEpD,wBAAsB,YAAY,CAAC,GAAG,SAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAkBnF"}
1
+ {"version":3,"file":"destroy.d.ts","sourceRoot":"","sources":["../src/destroy.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAEtE,wBAAsB,YAAY,CAChC,GAAG,SAAgB,EACnB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,kBAAkB,CAAC,CAkC7B"}
package/dist/destroy.js CHANGED
@@ -6,24 +6,43 @@ import { recordAccess } from "./access-log.js";
6
6
  import { loadConfig } from "./config.js";
7
7
  import { INDEX_MANIFEST_FILENAME } from "./defaults.js";
8
8
  import { disposeTransformersCache } from "./embeddings.js";
9
+ import { withIndexWriteLock } from "./index-write-lock.js";
9
10
  import { readIngestionState } from "./ingestion-state.js";
10
- export async function destroyIndex(cwd = process.cwd()) {
11
+ import { operationSignal } from "./operation.js";
12
+ import { SOURCE_FINGERPRINT_CACHE_FILENAME } from "./source-fingerprint-cache.js";
13
+ export async function destroyIndex(cwd = process.cwd(), options = {}) {
11
14
  const config = await loadConfig(cwd);
12
- const existed = existsSync(config.storageDir);
13
- const hasIngestionState = existed && (await readIngestionState(config)) !== null;
14
- await assertSafeIndexStorage(config.projectRoot, config.storageDir, existed, hasIngestionState);
15
- await recordAccess(config, { action: "destroy-index" });
16
- await rm(config.storageDir, { recursive: true, force: true });
17
- // Release any cached Transformers.js pipelines so a subsequent re-ingest with
18
- // a different embedding config does not pin stale ONNX weights in memory.
19
- await disposeTransformersCache();
20
- return {
21
- storageDir: config.storageDir,
22
- removed: existed,
23
- note: "Generated index removed. For forensic deletion guarantees, keep .ragmir/ on an encrypted volume and rotate/destroy the volume key.",
24
- };
15
+ const existedBeforeLock = existsSync(config.storageDir);
16
+ const signal = operationSignal(options);
17
+ await assertSafeIndexStoragePath(config.projectRoot, config.storageDir, existedBeforeLock);
18
+ return withIndexWriteLock(config.storageDir, signal, async () => {
19
+ const hasIngestionState = (await readIngestionState(config)) !== null;
20
+ const hasManifest = existsSync(path.join(config.storageDir, INDEX_MANIFEST_FILENAME));
21
+ const hasFingerprintCache = existsSync(path.join(config.storageDir, SOURCE_FINGERPRINT_CACHE_FILENAME));
22
+ const existed = existedBeforeLock || hasIngestionState || hasManifest || hasFingerprintCache;
23
+ await assertSafeIndexStorage(config.projectRoot, config.storageDir, existed, hasIngestionState, hasFingerprintCache);
24
+ await recordAccess(config, { action: "destroy-index" });
25
+ await rm(config.storageDir, { recursive: true, force: true });
26
+ // Release any cached Transformers.js pipelines so a subsequent re-ingest with
27
+ // a different embedding config does not pin stale ONNX weights in memory.
28
+ await disposeTransformersCache();
29
+ return {
30
+ storageDir: config.storageDir,
31
+ removed: existed,
32
+ note: "Generated index removed. For forensic deletion guarantees, keep .ragmir/ on an encrypted volume and rotate/destroy the volume key.",
33
+ };
34
+ });
25
35
  }
26
- async function assertSafeIndexStorage(projectRoot, storageDir, existed, hasIngestionState) {
36
+ async function assertSafeIndexStorage(projectRoot, storageDir, existed, hasIngestionState, hasFingerprintCache) {
37
+ await assertSafeIndexStoragePath(projectRoot, storageDir, existed);
38
+ if (existed &&
39
+ !hasIngestionState &&
40
+ !hasFingerprintCache &&
41
+ !existsSync(path.join(storageDir, INDEX_MANIFEST_FILENAME))) {
42
+ throw new Error(`Refusing to remove ${JSON.stringify(storageDir)} because it contains neither ${INDEX_MANIFEST_FILENAME} nor a valid ingestion state.`);
43
+ }
44
+ }
45
+ async function assertSafeIndexStoragePath(projectRoot, storageDir, existed) {
27
46
  const resolvedProjectRoot = await realpath(projectRoot);
28
47
  const resolvedStorageDir = existed ? await realpath(storageDir) : path.resolve(storageDir);
29
48
  const filesystemRoot = path.parse(resolvedStorageDir).root;
@@ -33,11 +52,6 @@ async function assertSafeIndexStorage(projectRoot, storageDir, existed, hasInges
33
52
  isSameOrAncestor(resolvedStorageDir, homeDir)) {
34
53
  throw new Error(`Refusing to remove unsafe storageDir ${JSON.stringify(storageDir)}. Configure a dedicated Ragmir index directory.`);
35
54
  }
36
- if (existed &&
37
- !hasIngestionState &&
38
- !existsSync(path.join(resolvedStorageDir, INDEX_MANIFEST_FILENAME))) {
39
- throw new Error(`Refusing to remove ${JSON.stringify(storageDir)} because it contains neither ${INDEX_MANIFEST_FILENAME} nor a valid ingestion state.`);
40
- }
41
55
  }
42
56
  function isSameOrAncestor(candidate, target) {
43
57
  const relative = path.relative(candidate, target);
@@ -1 +1 @@
1
- {"version":3,"file":"destroy.js","sourceRoot":"","sources":["../src/destroy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"destroy.js","sourceRoot":"","sources":["../src/destroy.ts"],"names":[],"mappings":"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"}
package/dist/doctor.d.ts CHANGED
@@ -1,3 +1,4 @@
1
- import type { DoctorReport, OperationOptions } from "./types.js";
2
- export declare function doctor(cwd?: string, options?: OperationOptions): Promise<DoctorReport>;
1
+ import type { Config, DoctorOptions, DoctorReport } from "./types.js";
2
+ export declare function doctor(cwd?: string, options?: DoctorOptions): Promise<DoctorReport>;
3
+ export declare function doctorWithConfig(config: Config, options?: DoctorOptions): Promise<DoctorReport>;
3
4
  //# sourceMappingURL=doctor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAEhE,wBAAsB,MAAM,CAC1B,GAAG,SAAgB,EACnB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,YAAY,CAAC,CAuGvB"}
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAErE,wBAAsB,MAAM,CAC1B,GAAG,SAAgB,EACnB,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,YAAY,CAAC,CAKvB;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,YAAY,CAAC,CAsIvB"}
package/dist/doctor.js CHANGED
@@ -3,61 +3,95 @@ import path from "node:path";
3
3
  import { findProjectConfig, loadConfig } from "./config.js";
4
4
  import { RAGMIR_DIR } from "./defaults.js";
5
5
  import { countSkippedByReason } from "./files.js";
6
- import { getIndexFreshnessWarning, getLexicalScanWarning } from "./index-diagnostics.js";
7
- import { audit } from "./ingest.js";
6
+ import { getLexicalScanWarning, indexFreshnessWarning } from "./index-diagnostics.js";
7
+ import { auditWithConfig } from "./ingest.js";
8
8
  import { operationSignal, throwIfAborted } from "./operation.js";
9
9
  import { RGR_RUNNER_FILENAME, rgrCommand } from "./package-manager.js";
10
- import { securityAudit } from "./security.js";
10
+ import { isCompatibleQualityReport } from "./quality-report.js";
11
+ import { runtimeInfo } from "./runtime-info.js";
12
+ import { securityAuditWithConfig } from "./security.js";
11
13
  import { AGENT_HELPER_CONFIG_FILENAMES, AGENT_SETUP_FILENAME, inspectAgentIntegration, MCP_CONFIG_FILENAME, SKILL_NAMES, } from "./skill.js";
12
- import { countRows, readIndexManifest } from "./store.js";
14
+ import { readIndexManifest, readIndexManifestHeader } from "./store.js";
13
15
  export async function doctor(cwd = process.cwd(), options = {}) {
14
16
  const signal = operationSignal(options);
15
17
  throwIfAborted(signal);
16
- const projectConfig = findProjectConfig(cwd);
17
- const initialized = existsSync(projectConfig.configPath);
18
18
  const config = await loadConfig(cwd);
19
+ return doctorWithConfig(config, options);
20
+ }
21
+ export async function doctorWithConfig(config, options = {}) {
22
+ const signal = operationSignal(options);
23
+ throwIfAborted(signal);
24
+ const projectConfig = findProjectConfig(config.projectRoot);
25
+ const initialized = existsSync(projectConfig.configPath);
19
26
  throwIfAborted(signal);
20
27
  const command = await rgrCommand(config.projectRoot, []);
21
28
  throwIfAborted(signal);
22
29
  const agentKitInstalled = isAgentKitInstalled(config.projectRoot);
23
30
  const agentIntegration = inspectAgentIntegration(config.projectRoot);
24
31
  const operationOptions = signal ? { signal } : {};
25
- const [auditReport, securityReport, chunksIndexed, manifest, freshnessWarning] = await Promise.all([
26
- audit(config.projectRoot, operationOptions),
27
- securityAudit(config.projectRoot, operationOptions),
28
- countRows(config),
29
- readIndexManifest(config),
30
- getIndexFreshnessWarning(config),
31
- ]);
32
+ const deep = options.deep === true;
33
+ const [auditReport, securityReport, manifest] = deep
34
+ ? await Promise.all([
35
+ auditWithConfig(config, operationOptions),
36
+ securityAuditWithConfig(config, operationOptions),
37
+ readIndexManifest(config),
38
+ ])
39
+ : [null, null, await readIndexManifestHeader(config)];
32
40
  throwIfAborted(signal);
41
+ const health = manifest?.health;
42
+ const supportedFiles = auditReport?.supportedFiles.length ?? health?.supportedFiles ?? 0;
43
+ const supportedBytes = auditReport?.supportedBytes ?? health?.supportedBytes ?? 0;
44
+ const largestFileBytes = auditReport?.largestFileBytes ?? health?.largestFileBytes ?? 0;
45
+ const skippedFiles = auditReport?.skippedFiles.length ?? health?.skippedFiles ?? 0;
46
+ const unsupportedFiles = auditReport
47
+ ? countSkippedByReason(auditReport.skippedFiles, "unsupported-extension")
48
+ : (health?.unsupportedFiles ?? 0);
49
+ const oversizedFiles = auditReport
50
+ ? countSkippedByReason(auditReport.skippedFiles, "oversized")
51
+ : (health?.oversizedFiles ?? 0);
52
+ const sensitiveFiles = auditReport
53
+ ? countSkippedByReason(auditReport.skippedFiles, "sensitive-name")
54
+ : (health?.sensitiveFiles ?? 0);
55
+ const emptyTextFiles = auditReport?.emptyTextFiles.length ?? health?.emptyTextFiles ?? 0;
56
+ const indexedFiles = auditReport?.indexedFiles.length ?? manifest?.fileCount ?? 0;
57
+ const chunksIndexed = auditReport?.totalChunks ?? manifest?.chunkCount ?? 0;
58
+ const missingFromIndex = auditReport?.missingFromIndex.length ?? health?.missingFromIndex ?? 0;
59
+ const staleInIndex = auditReport?.staleInIndex.length ?? health?.staleInIndex ?? 0;
60
+ const securityWarnings = securityReport?.warnings ?? health?.securityWarnings ?? [];
61
+ const freshnessWarning = indexFreshnessWarning(config, manifest);
33
62
  const lexicalScanWarning = chunksIndexed > 0 ? getLexicalScanWarning(config, chunksIndexed) : null;
34
63
  const indexFreshness = {
35
64
  manifestFound: manifest !== null,
36
65
  warning: freshnessWarning,
37
66
  };
38
- const oversizedFiles = countSkippedByReason(auditReport.skippedFiles, "oversized");
39
- const sensitiveFiles = countSkippedByReason(auditReport.skippedFiles, "sensitive-name");
40
- const coverageComplete = auditReport.missingFromIndex.length === 0 &&
41
- auditReport.staleInIndex.length === 0 &&
42
- auditReport.emptyTextFiles.length === 0 &&
67
+ const diagnosticSnapshotAvailable = deep || health !== undefined;
68
+ const coverageComplete = diagnosticSnapshotAvailable &&
69
+ missingFromIndex === 0 &&
70
+ staleInIndex === 0 &&
71
+ emptyTextFiles === 0 &&
43
72
  oversizedFiles === 0;
44
- const operationalReady = initialized && chunksIndexed > 0 && coverageComplete;
45
- const indexPolicyCurrent = freshnessWarning === null;
46
- const privacyCompliant = securityReport.warnings.length === 0;
73
+ const operationalReady = initialized && manifest !== null && chunksIndexed > 0 && coverageComplete;
74
+ const indexPolicyCurrent = manifest !== null && freshnessWarning === null;
75
+ const privacyCompliant = diagnosticSnapshotAvailable && securityWarnings.length === 0;
76
+ const retrievalQualityVerified = deep
77
+ ? await isCompatibleQualityReport(manifest?.qualityReport, manifest, config)
78
+ : false;
79
+ throwIfAborted(signal);
47
80
  const nextSteps = nextActions({
48
81
  initialized,
49
- supportedFiles: auditReport.supportedFiles.length,
50
- supportedBytes: auditReport.supportedBytes,
51
- largestFileBytes: auditReport.largestFileBytes,
52
- skippedFiles: auditReport.skippedFiles.length,
53
- unsupportedFiles: countSkippedByReason(auditReport.skippedFiles, "unsupported-extension"),
82
+ diagnosticSnapshotAvailable,
83
+ supportedFiles,
84
+ supportedBytes,
85
+ largestFileBytes,
86
+ skippedFiles,
87
+ unsupportedFiles,
54
88
  chunksIndexed,
55
- missingFromIndex: auditReport.missingFromIndex.length,
56
- staleInIndex: auditReport.staleInIndex.length,
57
- emptyTextFiles: auditReport.emptyTextFiles.length,
89
+ missingFromIndex,
90
+ staleInIndex,
91
+ emptyTextFiles,
58
92
  oversizedFiles,
59
93
  sensitiveFiles,
60
- warnings: securityReport.warnings.length,
94
+ warnings: securityWarnings.length,
61
95
  embeddingProvider: config.embeddingProvider,
62
96
  agentKitInstalled,
63
97
  agentRunnerReady: agentIntegration.runnerReady,
@@ -68,10 +102,15 @@ export async function doctor(cwd = process.cwd(), options = {}) {
68
102
  });
69
103
  throwIfAborted(signal);
70
104
  return {
105
+ mode: deep ? "deep" : "manifest",
106
+ inventoryVerified: deep,
107
+ securityVerified: deep,
108
+ cost: deep ? "O(corpus)" : "O(1)",
71
109
  projectRoot: config.projectRoot,
72
110
  initialized,
73
111
  packageManager: command.packageManager,
74
112
  runCommand: command.display,
113
+ runtime: runtimeInfo(),
75
114
  agentKitInstalled,
76
115
  agentIntegration,
77
116
  rawDir: config.rawDir,
@@ -82,20 +121,21 @@ export async function doctor(cwd = process.cwd(), options = {}) {
82
121
  accessLog: config.accessLog,
83
122
  privacyProfile: config.privacyProfile,
84
123
  retrievalProfile: config.retrievalProfile,
85
- supportedFiles: auditReport.supportedFiles.length,
86
- supportedBytes: auditReport.supportedBytes,
87
- largestFileBytes: auditReport.largestFileBytes,
124
+ supportedFiles,
125
+ supportedBytes,
126
+ largestFileBytes,
88
127
  maxFileBytes: config.maxFileBytes,
89
- skippedFiles: auditReport.skippedFiles.length,
90
- unsupportedFiles: countSkippedByReason(auditReport.skippedFiles, "unsupported-extension"),
128
+ skippedFiles,
129
+ unsupportedFiles,
91
130
  oversizedFiles,
92
131
  sensitiveFiles,
93
- emptyTextFiles: auditReport.emptyTextFiles.length,
94
- indexedFiles: auditReport.indexedFiles.length,
132
+ emptyTextFiles,
133
+ indexedFiles,
95
134
  chunksIndexed,
96
- missingFromIndex: auditReport.missingFromIndex.length,
97
- staleInIndex: auditReport.staleInIndex.length,
98
- securityWarnings: securityReport.warnings,
135
+ missingFromIndex,
136
+ staleInIndex,
137
+ corpusFingerprint: manifest?.corpusFingerprint ?? null,
138
+ securityWarnings,
99
139
  indexFreshness,
100
140
  ready: operationalReady && indexPolicyCurrent && privacyCompliant,
101
141
  readiness: {
@@ -103,7 +143,7 @@ export async function doctor(cwd = process.cwd(), options = {}) {
103
143
  coverageComplete,
104
144
  indexPolicyCurrent,
105
145
  privacyCompliant,
106
- retrievalQualityVerified: false,
146
+ retrievalQualityVerified,
107
147
  acceptedRisks: config.acceptedRisks,
108
148
  },
109
149
  nextSteps,
@@ -115,6 +155,11 @@ function nextActions(input) {
115
155
  steps.push(`Run \`${input.run(["setup"])}\` to initialize Ragmir and install the agent kit.`);
116
156
  return steps;
117
157
  }
158
+ if (!input.diagnosticSnapshotAvailable) {
159
+ steps.push(`Run \`${input.run(["doctor", "--deep"])}\` for an O(corpus) source and security audit.`);
160
+ steps.push(`Run \`${input.run(["ingest"])}\` to create a current manifest before relying on status or search.`);
161
+ return steps;
162
+ }
118
163
  if (input.supportedFiles === 0) {
119
164
  if (input.skippedFiles > 0) {
120
165
  steps.push("Ragmir found files, but none are currently indexable. Run `rgr audit --unsupported` to inspect skipped files.");