@jcode.labs/ragmir 2.6.0 → 2.8.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 (108) hide show
  1. package/README.md +4 -2
  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 +77 -7
  7. package/dist/chunking.js.map +1 -1
  8. package/dist/cli-options.d.ts +2 -0
  9. package/dist/cli-options.d.ts.map +1 -1
  10. package/dist/cli-options.js +8 -0
  11. package/dist/cli-options.js.map +1 -1
  12. package/dist/cli.js +106 -29
  13. package/dist/cli.js.map +1 -1
  14. package/dist/config.d.ts.map +1 -1
  15. package/dist/config.js +73 -29
  16. package/dist/config.js.map +1 -1
  17. package/dist/defaults.d.ts +2 -0
  18. package/dist/defaults.d.ts.map +1 -1
  19. package/dist/defaults.js +7 -1
  20. package/dist/defaults.js.map +1 -1
  21. package/dist/destroy.d.ts.map +1 -1
  22. package/dist/destroy.js +23 -1
  23. package/dist/destroy.js.map +1 -1
  24. package/dist/doctor.d.ts.map +1 -1
  25. package/dist/doctor.js +40 -9
  26. package/dist/doctor.js.map +1 -1
  27. package/dist/embeddings.d.ts +4 -1
  28. package/dist/embeddings.d.ts.map +1 -1
  29. package/dist/embeddings.js +62 -14
  30. package/dist/embeddings.js.map +1 -1
  31. package/dist/evaluate.d.ts.map +1 -1
  32. package/dist/evaluate.js +89 -4
  33. package/dist/evaluate.js.map +1 -1
  34. package/dist/files.d.ts +8 -1
  35. package/dist/files.d.ts.map +1 -1
  36. package/dist/files.js +44 -8
  37. package/dist/files.js.map +1 -1
  38. package/dist/index-diagnostics.d.ts +1 -1
  39. package/dist/index-diagnostics.d.ts.map +1 -1
  40. package/dist/index-diagnostics.js +14 -4
  41. package/dist/index-diagnostics.js.map +1 -1
  42. package/dist/index-policy.d.ts +3 -0
  43. package/dist/index-policy.d.ts.map +1 -0
  44. package/dist/index-policy.js +28 -0
  45. package/dist/index-policy.js.map +1 -0
  46. package/dist/index.d.ts +2 -1
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/index.js +1 -0
  49. package/dist/index.js.map +1 -1
  50. package/dist/ingest.d.ts.map +1 -1
  51. package/dist/ingest.js +119 -53
  52. package/dist/ingest.js.map +1 -1
  53. package/dist/init.d.ts.map +1 -1
  54. package/dist/init.js +15 -3
  55. package/dist/init.js.map +1 -1
  56. package/dist/limits.d.ts +9 -0
  57. package/dist/limits.d.ts.map +1 -0
  58. package/dist/limits.js +25 -0
  59. package/dist/limits.js.map +1 -0
  60. package/dist/mcp.d.ts +4 -1
  61. package/dist/mcp.d.ts.map +1 -1
  62. package/dist/mcp.js +84 -18
  63. package/dist/mcp.js.map +1 -1
  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-sanitizer.d.ts +8 -0
  72. package/dist/query-sanitizer.d.ts.map +1 -0
  73. package/dist/query-sanitizer.js +170 -0
  74. package/dist/query-sanitizer.js.map +1 -0
  75. package/dist/query.d.ts +2 -2
  76. package/dist/query.d.ts.map +1 -1
  77. package/dist/query.js +285 -29
  78. package/dist/query.js.map +1 -1
  79. package/dist/research.d.ts.map +1 -1
  80. package/dist/research.js +42 -4
  81. package/dist/research.js.map +1 -1
  82. package/dist/security.d.ts.map +1 -1
  83. package/dist/security.js +110 -14
  84. package/dist/security.js.map +1 -1
  85. package/dist/store.d.ts +4 -0
  86. package/dist/store.d.ts.map +1 -1
  87. package/dist/store.js +86 -55
  88. package/dist/store.js.map +1 -1
  89. package/dist/text.d.ts.map +1 -1
  90. package/dist/text.js +13 -1
  91. package/dist/text.js.map +1 -1
  92. package/dist/types.d.ts +131 -0
  93. package/dist/types.d.ts.map +1 -1
  94. package/dist/version.d.ts +1 -1
  95. package/dist/version.js +1 -1
  96. package/examples/document-evidence-benchmark/.ragmir/config.json +22 -0
  97. package/examples/document-evidence-benchmark/README.md +36 -0
  98. package/examples/document-evidence-benchmark/golden-queries.json +41 -0
  99. package/examples/document-evidence-benchmark/raw/contracts/master-services-agreement.md +11 -0
  100. package/examples/document-evidence-benchmark/raw/contracts/pdf-control-evidence.pdf +32 -0
  101. package/examples/document-evidence-benchmark/raw/legal-tax/residency-review-note.md +10 -0
  102. package/examples/document-evidence-benchmark/raw/rfp/security-questionnaire.md +12 -0
  103. package/examples/document-evidence-benchmark/raw/runbooks/incident-response-runbook.md +11 -0
  104. package/examples/document-evidence-benchmark/raw/specs/agent-integration-spec.md +11 -0
  105. package/examples/sovereign-rag-demo/.ragmir/config.json +2 -1
  106. package/examples/sovereign-rag-demo/README.md +9 -1
  107. package/package.json +3 -3
  108. package/skills/ragmir/SKILL.md +11 -3
package/dist/security.js CHANGED
@@ -1,23 +1,34 @@
1
+ import { execFile } from "node:child_process";
1
2
  import { existsSync } from "node:fs";
2
- import { readFile } from "node:fs/promises";
3
+ import { readFile, stat } from "node:fs/promises";
3
4
  import path from "node:path";
4
- import { loadConfig } from "./config.js";
5
- import { LEGACY_KB_DIR, LEGACY_KB_GITIGNORE_ENTRY, LEGACY_PRIVATE_DIR, LEGACY_PRIVATE_GITIGNORE_ENTRY, LEGACY_PRIVATE_GITIGNORE_FALLBACK_ENTRY, RAGMIR_GITIGNORE_ENTRY, } from "./defaults.js";
5
+ import { findProjectConfig, loadConfig } from "./config.js";
6
+ import { LEGACY_KB_DIR, LEGACY_KB_GITIGNORE_ENTRY, LEGACY_PRIVATE_DIR, LEGACY_PRIVATE_GITIGNORE_ENTRY, RAGMIR_GITIGNORE_ENTRY, } from "./defaults.js";
6
7
  export async function securityAudit(cwd = process.cwd()) {
7
8
  const config = await loadConfig(cwd);
8
9
  const gitignore = await readGitignore(config.projectRoot);
9
10
  const warnings = [];
10
- const legacyKbIgnored = hasGitignoreEntry(gitignore, LEGACY_KB_GITIGNORE_ENTRY);
11
- const ragmirIgnored = hasGitignoreEntry(gitignore, RAGMIR_GITIGNORE_ENTRY);
12
- const legacyPrivateIgnored = hasGitignoreEntry(gitignore, LEGACY_PRIVATE_GITIGNORE_ENTRY) ||
13
- hasGitignoreEntry(gitignore, LEGACY_PRIVATE_GITIGNORE_FALLBACK_ENTRY);
14
11
  const usesLegacyKb = [config.storageDir, config.sourcesFile, config.accessLogPath].some((filePath) => usesProjectDirectory(config.projectRoot, filePath, LEGACY_KB_DIR));
15
12
  const usesLegacyPrivate = usesProjectDirectory(config.projectRoot, config.rawDir, LEGACY_PRIVATE_DIR);
16
- const storageGitIgnored = isPathIgnored(config.projectRoot, config.storageDir, gitignore);
17
- if (config.embeddingProvider === "transformers" && config.transformersAllowRemoteModels) {
13
+ const [legacyKbIgnored, ragmirIgnored, legacyPrivateIgnored, storageGitIgnored, accessLogGitIgnored,] = await Promise.all([
14
+ isPathIgnored(config.projectRoot, path.join(config.projectRoot, LEGACY_KB_GITIGNORE_ENTRY), gitignore),
15
+ isPathIgnored(config.projectRoot, path.join(config.projectRoot, RAGMIR_GITIGNORE_ENTRY), gitignore),
16
+ isPathIgnored(config.projectRoot, path.join(config.projectRoot, LEGACY_PRIVATE_GITIGNORE_ENTRY), gitignore),
17
+ isPathIgnored(config.projectRoot, config.storageDir, gitignore),
18
+ isPathIgnored(config.projectRoot, config.accessLogPath, gitignore),
19
+ ]);
20
+ const permissions = await inspectPermissions({
21
+ configPath: findProjectConfig(cwd).configPath,
22
+ rawDir: config.rawDir,
23
+ storageDir: config.storageDir,
24
+ accessLogPath: config.accessLogPath,
25
+ });
26
+ if (config.privacyProfile !== "trusted" &&
27
+ config.embeddingProvider === "transformers" &&
28
+ config.transformersAllowRemoteModels) {
18
29
  warnings.push("Transformers remote model loading is enabled; model files can be downloaded from Hugging Face.");
19
30
  }
20
- if (!config.redaction.enabled) {
31
+ if (config.privacyProfile !== "trusted" && !config.redaction.enabled) {
21
32
  warnings.push("Redaction is disabled; secrets and identifiers may be embedded in the index.");
22
33
  }
23
34
  if (!ragmirIgnored) {
@@ -29,12 +40,27 @@ export async function securityAudit(cwd = process.cwd()) {
29
40
  if (usesLegacyPrivate && !legacyPrivateIgnored) {
30
41
  warnings.push(`${LEGACY_PRIVATE_GITIGNORE_ENTRY} is not ignored by Git.`);
31
42
  }
43
+ if (!storageGitIgnored) {
44
+ warnings.push("The configured storageDir is not ignored by Git.");
45
+ }
46
+ if (config.accessLog && !accessLogGitIgnored) {
47
+ warnings.push("The configured accessLogPath is not ignored by Git.");
48
+ }
49
+ addPermissionWarning(warnings, permissions.configPrivate, "Ragmir config file");
50
+ addPermissionWarning(warnings, permissions.rawDirPrivate, "raw document directory");
51
+ addPermissionWarning(warnings, permissions.storageDirPrivate, "index storage directory");
52
+ if (config.accessLog) {
53
+ addPermissionWarning(warnings, permissions.accessLogPrivate, "access log");
54
+ }
32
55
  return {
33
56
  projectRoot: config.projectRoot,
34
57
  zeroTelemetry: true,
58
+ privacyProfile: config.privacyProfile,
59
+ retrievalProfile: config.retrievalProfile,
35
60
  providers: {
36
61
  embedding: config.embeddingProvider,
37
62
  embeddingModel: config.embeddingModel,
63
+ embeddingModelRevision: config.embeddingModelRevision,
38
64
  embeddingModelPath: config.embeddingModelPath,
39
65
  transformersAllowRemoteModels: config.transformersAllowRemoteModels,
40
66
  llmGeneration: false,
@@ -54,6 +80,7 @@ export async function securityAudit(cwd = process.cwd()) {
54
80
  gitIgnored: storageGitIgnored,
55
81
  encryptedAtRest: "external-required",
56
82
  },
83
+ permissions,
57
84
  mcp: {
58
85
  maxTopK: config.mcpMaxTopK,
59
86
  destructiveToolsExposed: false,
@@ -72,6 +99,50 @@ export async function securityAudit(cwd = process.cwd()) {
72
99
  warnings,
73
100
  };
74
101
  }
102
+ async function inspectPermissions(paths) {
103
+ if (process.platform === "win32") {
104
+ return {
105
+ checked: false,
106
+ configPrivate: null,
107
+ rawDirPrivate: null,
108
+ storageDirPrivate: null,
109
+ accessLogPrivate: null,
110
+ };
111
+ }
112
+ const [configPrivate, rawDirPrivate, storageDirPrivate, accessLogPrivate] = await Promise.all([
113
+ isPrivatePath(paths.configPath),
114
+ isPrivatePath(paths.rawDir),
115
+ isPrivatePath(paths.storageDir),
116
+ isPrivatePath(paths.accessLogPath),
117
+ ]);
118
+ return {
119
+ checked: true,
120
+ configPrivate,
121
+ rawDirPrivate,
122
+ storageDirPrivate,
123
+ accessLogPrivate,
124
+ };
125
+ }
126
+ async function isPrivatePath(filePath) {
127
+ try {
128
+ const mode = (await stat(filePath)).mode & 0o777;
129
+ return (mode & 0o077) === 0;
130
+ }
131
+ catch (error) {
132
+ if (isNodeError(error) && error.code === "ENOENT") {
133
+ return null;
134
+ }
135
+ throw error;
136
+ }
137
+ }
138
+ function addPermissionWarning(warnings, privatePath, label) {
139
+ if (privatePath === false) {
140
+ warnings.push(`The ${label} is readable or writable by group/other users; restrict it to owner-only permissions or run \`rgr doctor --fix\` for Ragmir-owned default paths.`);
141
+ }
142
+ }
143
+ function isNodeError(error) {
144
+ return error instanceof Error && "code" in error;
145
+ }
75
146
  async function readGitignore(projectRoot) {
76
147
  const gitignorePath = path.join(projectRoot, ".gitignore");
77
148
  if (!existsSync(gitignorePath)) {
@@ -82,15 +153,37 @@ async function readGitignore(projectRoot) {
82
153
  .map((line) => line.trim())
83
154
  .filter(Boolean));
84
155
  }
85
- function hasGitignoreEntry(lines, entry) {
86
- return lines.has(entry);
87
- }
88
156
  function usesProjectDirectory(projectRoot, filePath, directory) {
89
157
  const relativePath = normalizeRelativePath(projectRoot, filePath);
90
158
  return relativePath === directory || relativePath.startsWith(`${directory}/`);
91
159
  }
92
- function isPathIgnored(projectRoot, filePath, lines) {
160
+ async function isPathIgnored(projectRoot, filePath, lines) {
93
161
  const relativePath = normalizeRelativePath(projectRoot, filePath);
162
+ if (isOutsideProject(relativePath)) {
163
+ return false;
164
+ }
165
+ const gitResult = await checkGitIgnored(projectRoot, relativePath);
166
+ if (gitResult !== null) {
167
+ return gitResult;
168
+ }
169
+ return isPathIgnoredByEntries(relativePath, lines);
170
+ }
171
+ function checkGitIgnored(projectRoot, relativePath) {
172
+ return new Promise((resolve) => {
173
+ execFile("git", ["check-ignore", "--quiet", "--", relativePath], { cwd: projectRoot, windowsHide: true }, (error) => {
174
+ if (!error) {
175
+ resolve(true);
176
+ return;
177
+ }
178
+ if (error.code === 1) {
179
+ resolve(false);
180
+ return;
181
+ }
182
+ resolve(null);
183
+ });
184
+ });
185
+ }
186
+ function isPathIgnoredByEntries(relativePath, lines) {
94
187
  const segments = relativePath.split("/");
95
188
  for (let index = 1; index <= segments.length; index += 1) {
96
189
  const prefix = segments.slice(0, index).join("/");
@@ -100,6 +193,9 @@ function isPathIgnored(projectRoot, filePath, lines) {
100
193
  }
101
194
  return false;
102
195
  }
196
+ function isOutsideProject(relativePath) {
197
+ return relativePath === ".." || relativePath.startsWith("../") || path.isAbsolute(relativePath);
198
+ }
103
199
  function normalizeRelativePath(projectRoot, filePath) {
104
200
  return path.relative(projectRoot, filePath).split(path.sep).join("/");
105
201
  }
@@ -1 +1 @@
1
- {"version":3,"file":"security.js","sourceRoot":"","sources":["../src/security.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"security.js","sourceRoot":"","sources":["../src/security.ts"],"names":[],"mappings":"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"}
package/dist/store.d.ts CHANGED
@@ -3,11 +3,15 @@ import type { Config, IndexManifest, VectorRow } from "./types.js";
3
3
  export interface EmptyTextFileRecord {
4
4
  relativePath: string;
5
5
  checksum: string;
6
+ bytes?: number;
7
+ mtimeMs?: number;
6
8
  }
7
9
  export interface IndexWriteResult {
8
10
  vectorIndexWarning: string | null;
11
+ lexicalIndexWarning: string | null;
9
12
  }
10
13
  export declare function writeRows(rows: VectorRow[], config: Config): Promise<IndexWriteResult>;
14
+ export declare function updateRows(rows: VectorRow[], replacePaths: string[], config: Config): Promise<IndexWriteResult>;
11
15
  export declare function writeIndexManifest(manifest: IndexManifest, config: Config): Promise<void>;
12
16
  export declare function readIndexManifest(config: Config): Promise<IndexManifest | null>;
13
17
  export declare function writeEmptyTextFiles(records: EmptyTextFileRecord[], config: Config): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAA;AAE3C,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAkBlE,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAA;CAClC;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA4B5F;AA4CD,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAI/F;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAqBrF;AAmBD,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,mBAAmB,EAAE,EAC9B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAcf;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAevF;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAOjF;AAED,wBAAsB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CASnE;AAED,wBAAsB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAG/D"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAA;AAI3C,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAIlE,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAA;CACnC;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAuB5F;AAED,wBAAsB,UAAU,CAC9B,IAAI,EAAE,SAAS,EAAE,EACjB,YAAY,EAAE,MAAM,EAAE,EACtB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,gBAAgB,CAAC,CAiB3B;AA4BD,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAK/F;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAqBrF;AAmCD,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,mBAAmB,EAAE,EAC9B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAef;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAevF;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAQjF;AAED,wBAAsB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAMnE;AAED,wBAAsB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAG/D"}
package/dist/store.js CHANGED
@@ -1,87 +1,76 @@
1
- import { mkdir, readFile, rm, writeFile } from "node:fs/promises";
1
+ import { readFile, rm, writeFile } from "node:fs/promises";
2
2
  import path from "node:path";
3
3
  import * as lancedb from "@lancedb/lancedb";
4
+ import { INDEX_MANIFEST_FILENAME } from "./defaults.js";
4
5
  import { isRecord } from "./guards.js";
6
+ import { ensurePrivateDirectory, hardenPrivateFile } from "./permissions.js";
5
7
  const EMPTY_TEXT_FILES_MANIFEST = "empty-text-files.json";
6
- const INDEX_MANIFEST = "index-manifest.json";
7
- /**
8
- * LanceDB requires a minimum number of rows to train an IVF_PQ vector index.
9
- * Below this threshold, brute-force (flat) scan is used instead, which is
10
- * optimal for small corpora and avoids wasted index-training work.
11
- */
12
- const MIN_INDEX_ROWS = 256;
13
- /**
14
- * IVF partition count heuristic: roughly sqrt(row_count), bounded to keep both
15
- * small corpora (too many empty partitions) and very large corpora (training
16
- * cost) well-behaved. See LanceDB production guidance.
17
- */
18
- const MIN_IVF_PARTITIONS = 8;
19
- const MAX_IVF_PARTITIONS = 1024;
20
8
  export async function writeRows(rows, config) {
21
- await mkdir(config.storageDir, { recursive: true });
9
+ await ensurePrivateDirectory(config.storageDir);
22
10
  const db = await lancedb.connect(config.storageDir);
23
11
  if (rows.length === 0) {
24
12
  const tableNames = await db.tableNames();
25
13
  if (tableNames.includes(config.tableName)) {
26
14
  await db.dropTable(config.tableName);
27
15
  }
28
- await rm(path.join(config.storageDir, INDEX_MANIFEST), { force: true });
29
- return { vectorIndexWarning: null };
16
+ await rm(path.join(config.storageDir, INDEX_MANIFEST_FILENAME), { force: true });
17
+ return { vectorIndexWarning: null, lexicalIndexWarning: null };
30
18
  }
31
- const records = rows.map((row) => ({ ...row }));
19
+ const records = storedRows(rows);
32
20
  const table = await db.createTable(config.tableName, records, {
33
21
  mode: "overwrite",
34
22
  });
35
- // Train an IVF_PQ vector index once the corpus is large enough to benefit
36
- // from approximate nearest-neighbour search. Below the threshold, LanceDB
37
- // falls back to an exact flat scan, which is faster for small corpora and
38
- // avoids wasting work training an index on too few vectors.
39
- if (rows.length < MIN_INDEX_ROWS) {
40
- return { vectorIndexWarning: null };
23
+ const lexicalResult = await ensureLexicalIndex(table);
24
+ return {
25
+ vectorIndexWarning: null,
26
+ lexicalIndexWarning: lexicalResult.warning,
27
+ };
28
+ }
29
+ export async function updateRows(rows, replacePaths, config) {
30
+ const table = await openRowsTable(config);
31
+ if (!table) {
32
+ return writeRows(rows, config);
33
+ }
34
+ for (const paths of batches([...new Set(replacePaths)], 200)) {
35
+ if (paths.length > 0) {
36
+ await table.delete(`relativePath IN (${paths.map(sqlString).join(", ")})`);
37
+ }
41
38
  }
42
- const result = await ensureVectorIndex(table, rows.length);
43
- return { vectorIndexWarning: result.warning };
39
+ if (rows.length > 0) {
40
+ await table.add(storedRows(rows));
41
+ }
42
+ const lexicalResult = await ensureLexicalIndex(table);
43
+ return { vectorIndexWarning: null, lexicalIndexWarning: lexicalResult.warning };
44
44
  }
45
- async function ensureVectorIndex(table, rowCount) {
45
+ async function ensureLexicalIndex(table) {
46
46
  const existing = await table.listIndices();
47
- const hasVectorIndex = existing.some((index) => index.name === "vector_idx");
48
- if (hasVectorIndex) {
47
+ const hasTextIndex = existing.some((index) => index.name === "text_idx");
48
+ if (hasTextIndex) {
49
49
  return { created: false, warning: null };
50
50
  }
51
- // numSubVectors must divide the vector dimension evenly. 16 is a safe default
52
- // for the 384-dim local-hash and mxbai-xsmall models; LanceDB validates and
53
- // will reject a value that does not divide evenly, so larger models still
54
- // fall back to flat scan rather than corrupting the index.
55
- const numSubVectors = 16;
56
- const numPartitions = clampIvfPartitions(Math.round(Math.sqrt(rowCount)));
57
51
  try {
58
- await table.createIndex("vector", {
59
- config: lancedb.Index.ivfPq({ numPartitions, numSubVectors }),
52
+ await table.createIndex("text", {
53
+ config: lancedb.Index.fts({ asciiFolding: true, lowercase: true }),
60
54
  });
61
55
  return { created: true, warning: null };
62
56
  }
63
57
  catch (error) {
64
- // Index training can fail on edge-case dimensionality or tiny effective
65
- // corpora; the table remains usable via flat scan, but the operator
66
- // deserves to know queries will be slower than expected.
67
58
  const detail = error instanceof Error ? error.message : String(error);
68
59
  return {
69
60
  created: false,
70
- warning: `Vector index training failed (${detail}). Falling back to flat scan; queries will be slower on large corpora.`,
61
+ warning: `Full-text index training failed (${detail}). Falling back to bounded lexical scans; keyword recall may be lower on large corpora.`,
71
62
  };
72
63
  }
73
64
  }
74
- function clampIvfPartitions(value) {
75
- return Math.min(MAX_IVF_PARTITIONS, Math.max(MIN_IVF_PARTITIONS, value));
76
- }
77
65
  export async function writeIndexManifest(manifest, config) {
78
- await mkdir(config.storageDir, { recursive: true });
79
- const manifestPath = path.join(config.storageDir, INDEX_MANIFEST);
66
+ await ensurePrivateDirectory(config.storageDir);
67
+ const manifestPath = path.join(config.storageDir, INDEX_MANIFEST_FILENAME);
80
68
  await writeFile(manifestPath, JSON.stringify(manifest, null, 2), "utf8");
69
+ await hardenPrivateFile(manifestPath);
81
70
  }
82
71
  export async function readIndexManifest(config) {
83
72
  try {
84
- const raw = JSON.parse(await readFile(path.join(config.storageDir, INDEX_MANIFEST), "utf8"));
73
+ const raw = JSON.parse(await readFile(path.join(config.storageDir, INDEX_MANIFEST_FILENAME), "utf8"));
85
74
  if (!isRecord(raw)) {
86
75
  return null;
87
76
  }
@@ -109,10 +98,23 @@ function isIndexManifest(value) {
109
98
  typeof value.ragmirVersion === "string" &&
110
99
  (value.embeddingProvider === "local-hash" || value.embeddingProvider === "transformers") &&
111
100
  typeof value.embeddingModel === "string" &&
101
+ (!("indexPolicyFingerprint" in value) || typeof value.indexPolicyFingerprint === "string") &&
102
+ (!("vectorDimension" in value) || typeof value.vectorDimension === "number") &&
103
+ (!("vectorDistanceMetric" in value) || typeof value.vectorDistanceMetric === "string") &&
112
104
  typeof value.chunkSize === "number" &&
113
105
  typeof value.chunkOverlap === "number" &&
114
106
  typeof value.fileCount === "number" &&
115
- typeof value.chunkCount === "number");
107
+ typeof value.chunkCount === "number" &&
108
+ (!("indexedFiles" in value) ||
109
+ (Array.isArray(value.indexedFiles) && value.indexedFiles.every(isIndexManifestFile))));
110
+ }
111
+ function isIndexManifestFile(value) {
112
+ return (isRecord(value) &&
113
+ typeof value.relativePath === "string" &&
114
+ typeof value.checksum === "string" &&
115
+ typeof value.chunkCount === "number" &&
116
+ (!("bytes" in value) || typeof value.bytes === "number") &&
117
+ (!("mtimeMs" in value) || typeof value.mtimeMs === "number"));
116
118
  }
117
119
  export async function writeEmptyTextFiles(records, config) {
118
120
  const manifestPath = path.join(config.storageDir, EMPTY_TEXT_FILES_MANIFEST);
@@ -120,9 +122,10 @@ export async function writeEmptyTextFiles(records, config) {
120
122
  await rm(manifestPath, { force: true });
121
123
  return;
122
124
  }
123
- await mkdir(config.storageDir, { recursive: true });
125
+ await ensurePrivateDirectory(config.storageDir);
124
126
  const sortedRecords = [...records].sort((a, b) => a.relativePath.localeCompare(b.relativePath));
125
127
  await writeFile(manifestPath, JSON.stringify({ version: 1, files: sortedRecords }, null, 2), "utf8");
128
+ await hardenPrivateFile(manifestPath);
126
129
  }
127
130
  export async function readEmptyTextFiles(config) {
128
131
  try {
@@ -140,6 +143,7 @@ export async function readEmptyTextFiles(config) {
140
143
  }
141
144
  }
142
145
  export async function openRowsTable(config) {
146
+ await ensurePrivateDirectory(config.storageDir);
143
147
  const db = await lancedb.connect(config.storageDir);
144
148
  const tableNames = await db.tableNames();
145
149
  if (!tableNames.includes(config.tableName)) {
@@ -152,15 +156,38 @@ export async function readRows(config) {
152
156
  if (!table) {
153
157
  return [];
154
158
  }
155
- return (await table.query().toArray()).map((row) => ({
156
- ...row,
157
- vector: normalizeVector(row.vector),
158
- }));
159
+ return (await table.query().toArray()).map(vectorRowFromStored);
159
160
  }
160
161
  export async function countRows(config) {
161
162
  const table = await openRowsTable(config);
162
163
  return table ? table.countRows() : 0;
163
164
  }
165
+ function storedRows(rows) {
166
+ return rows.map((row) => ({
167
+ ...row,
168
+ pageStart: row.pageStart ?? 0,
169
+ pageEnd: row.pageEnd ?? 0,
170
+ }));
171
+ }
172
+ function vectorRowFromStored(row) {
173
+ const { pageStart, pageEnd, ...rest } = row;
174
+ return {
175
+ ...rest,
176
+ vector: normalizeVector(row.vector),
177
+ ...(typeof pageStart === "number" && pageStart > 0 ? { pageStart } : {}),
178
+ ...(typeof pageEnd === "number" && pageEnd > 0 ? { pageEnd } : {}),
179
+ };
180
+ }
181
+ function sqlString(value) {
182
+ return `'${value.replaceAll("'", "''")}'`;
183
+ }
184
+ function batches(values, size) {
185
+ const result = [];
186
+ for (let index = 0; index < values.length; index += size) {
187
+ result.push(values.slice(index, index + size));
188
+ }
189
+ return result;
190
+ }
164
191
  function normalizeVector(vector) {
165
192
  if (Array.isArray(vector) && vector.every((value) => typeof value === "number")) {
166
193
  return vector;
@@ -182,7 +209,11 @@ function hasIndexedNumberGetter(value) {
182
209
  typeof value.get === "function");
183
210
  }
184
211
  function isEmptyTextFileRecord(value) {
185
- return (isRecord(value) && typeof value.relativePath === "string" && typeof value.checksum === "string");
212
+ return (isRecord(value) &&
213
+ typeof value.relativePath === "string" &&
214
+ typeof value.checksum === "string" &&
215
+ (!("bytes" in value) || typeof value.bytes === "number") &&
216
+ (!("mtimeMs" in value) || typeof value.mtimeMs === "number"));
186
217
  }
187
218
  function isNodeError(error) {
188
219
  return error instanceof Error && "code" in error;
package/dist/store.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../src/text.ts"],"names":[],"mappings":"AAAA,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKtD;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAE/C"}
1
+ {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../src/text.ts"],"names":[],"mappings":"AAAA,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKtD;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAgB/C"}
package/dist/text.js CHANGED
@@ -5,6 +5,18 @@ export function normalizeForMatch(text) {
5
5
  .replace(/\p{Diacritic}/gu, "");
6
6
  }
7
7
  export function tokenize(text) {
8
- return normalizeForMatch(text).match(/[\p{L}\p{N}]{2,}/gu) ?? [];
8
+ const normalized = normalizeForMatch(text);
9
+ const tokens = [];
10
+ const segmenter = new Intl.Segmenter("und", { granularity: "word" });
11
+ for (const segment of segmenter.segment(normalized)) {
12
+ if (!segment.isWordLike) {
13
+ continue;
14
+ }
15
+ const token = segment.segment;
16
+ if (token.length >= 2 || /[^\p{Script=Latin}\p{N}]/u.test(token)) {
17
+ tokens.push(token);
18
+ }
19
+ }
20
+ return tokens;
9
21
  }
10
22
  //# sourceMappingURL=text.js.map
package/dist/text.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"text.js","sourceRoot":"","sources":["../src/text.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO,IAAI;SACR,WAAW,EAAE;SACb,SAAS,CAAC,MAAM,CAAC;SACjB,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAA;AACnC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAA;AAClE,CAAC"}
1
+ {"version":3,"file":"text.js","sourceRoot":"","sources":["../src/text.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO,IAAI;SACR,WAAW,EAAE;SACb,SAAS,CAAC,MAAM,CAAC;SACjB,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAA;AACnC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAA;IAC1C,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAA;IAEpE,KAAK,MAAM,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QACpD,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YACxB,SAAQ;QACV,CAAC;QACD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAA;QAC7B,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,2BAA2B,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACjE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACpB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"}