@mmnto/totem 1.109.0 → 1.111.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.
- package/dist/config-schema.d.ts +22 -0
- package/dist/config-schema.d.ts.map +1 -1
- package/dist/config-schema.js +6 -0
- package/dist/config-schema.js.map +1 -1
- package/dist/config-schema.test.js +21 -0
- package/dist/config-schema.test.js.map +1 -1
- package/dist/embedders/embedder.d.ts +29 -0
- package/dist/embedders/embedder.d.ts.map +1 -1
- package/dist/embedders/embedder.js +26 -3
- package/dist/embedders/embedder.js.map +1 -1
- package/dist/embedders/embedder.test.js +51 -0
- package/dist/embedders/embedder.test.js.map +1 -1
- package/dist/embedders/gemini-embedder.d.ts +18 -1
- package/dist/embedders/gemini-embedder.d.ts.map +1 -1
- package/dist/embedders/gemini-embedder.js +98 -5
- package/dist/embedders/gemini-embedder.js.map +1 -1
- package/dist/embedders/gemini-embedder.test.js +153 -1
- package/dist/embedders/gemini-embedder.test.js.map +1 -1
- package/dist/embedders/openai-embedder.d.ts +2 -1
- package/dist/embedders/openai-embedder.d.ts.map +1 -1
- package/dist/embedders/openai-embedder.js +21 -4
- package/dist/embedders/openai-embedder.js.map +1 -1
- package/dist/embedders/openai-embedder.test.d.ts +2 -0
- package/dist/embedders/openai-embedder.test.d.ts.map +1 -0
- package/dist/embedders/openai-embedder.test.js +102 -0
- package/dist/embedders/openai-embedder.test.js.map +1 -0
- package/dist/embedders/pacing.d.ts +11 -0
- package/dist/embedders/pacing.d.ts.map +1 -0
- package/dist/embedders/pacing.js +23 -0
- package/dist/embedders/pacing.js.map +1 -0
- package/dist/embedders/pacing.test.d.ts +2 -0
- package/dist/embedders/pacing.test.d.ts.map +1 -0
- package/dist/embedders/pacing.test.js +50 -0
- package/dist/embedders/pacing.test.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -2
- package/dist/index.js.map +1 -1
- package/dist/ingest/file-resolver.d.ts +14 -0
- package/dist/ingest/file-resolver.d.ts.map +1 -1
- package/dist/ingest/file-resolver.js +27 -9
- package/dist/ingest/file-resolver.js.map +1 -1
- package/dist/ingest/pipeline.d.ts +9 -0
- package/dist/ingest/pipeline.d.ts.map +1 -1
- package/dist/ingest/pipeline.js +356 -33
- package/dist/ingest/pipeline.js.map +1 -1
- package/dist/ingest/pipeline.test.js +456 -0
- package/dist/ingest/pipeline.test.js.map +1 -1
- package/dist/ingest/sync.d.ts +2 -2
- package/dist/ingest/sync.d.ts.map +1 -1
- package/dist/ingest/sync.js +2 -2
- package/dist/ingest/sync.js.map +1 -1
- package/dist/ledger.d.ts +4 -4
- package/dist/lock.d.ts +55 -6
- package/dist/lock.d.ts.map +1 -1
- package/dist/lock.js +180 -39
- package/dist/lock.js.map +1 -1
- package/dist/lock.test.js +201 -1
- package/dist/lock.test.js.map +1 -1
- package/dist/types.d.ts +45 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
|
@@ -11,6 +11,15 @@ import type { SyncOptions } from '../types.js';
|
|
|
11
11
|
* Throws TotemDatabaseError if the provider has changed.
|
|
12
12
|
*/
|
|
13
13
|
export declare function verifyIndexMeta(totemDir: string, config: TotemConfig): void;
|
|
14
|
+
/**
|
|
15
|
+
* Whether a full re-index epoch is in progress (its dirty marker exists) for
|
|
16
|
+
* the given totem dir (#2562). Exposed for callers that spawn or gate syncs
|
|
17
|
+
* under bounded budgets — e.g. the MCP add-lesson tool's 60s-killed
|
|
18
|
+
* convenience sync, which a promoted paced resume can never finish
|
|
19
|
+
* (falsification round 3, MAJOR 1): such callers should skip and defer to the
|
|
20
|
+
* running epoch instead of timing out against it.
|
|
21
|
+
*/
|
|
22
|
+
export declare function hasFullSyncCheckpoint(totemDir: string): boolean;
|
|
14
23
|
/**
|
|
15
24
|
* One entry in the index-manifest `documents[]` array.
|
|
16
25
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/ingest/pipeline.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/ingest/pipeline.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AASvD,OAAO,KAAK,EAA6B,WAAW,EAAa,MAAM,aAAa,CAAC;AA+CrF;;;GAGG;AACH;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAuB3E;AAuFD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE/D;AAkBD;;;;;;;;GAQG;AACH,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,+FAA+F;IAC/F,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,2EAA2E;AAC3E,eAAO,MAAM,qBAAqB,8BAA8B,CAAC;AAEjE;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IACxC,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACnC,SAAS,EAAE,IAAI,CAAC;CACjB,GAAG,aAAa,CAUhB;AAED,wBAAsB,OAAO,CAC3B,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC;IACT,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC,CAWD;AA6BD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,eAAe,EAAE,MAAM,EAAE,EACzB,iBAAiB,EAAE,MAAM,EAAE,GAC1B,MAAM,EAAE,CAGV;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAIhE;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CACvC,iBAAiB,EAAE,MAAM,EAAE,EAC3B,eAAe,EAAE,MAAM,EAAE,GACxB,MAAM,EAAE,CAGV"}
|
package/dist/ingest/pipeline.js
CHANGED
|
@@ -4,15 +4,16 @@ import { calculateDeterministicHash } from '../artifacts/hash.js';
|
|
|
4
4
|
import { createChunker } from '../chunkers/chunker.js';
|
|
5
5
|
import { requireEmbedding } from '../config-schema.js';
|
|
6
6
|
import { createEmbedder } from '../embedders/embedder.js';
|
|
7
|
-
import { TotemDatabaseError } from '../errors.js';
|
|
7
|
+
import { TotemDatabaseError, TotemError } from '../errors.js';
|
|
8
8
|
import { withLock } from '../lock.js';
|
|
9
9
|
import { sanitizeForIngestion } from '../sanitize.js';
|
|
10
10
|
import { LanceStore } from '../store/lance-store.js';
|
|
11
11
|
import { sanitizeForTerminal } from '../terminal-sanitize.js';
|
|
12
|
-
import { getChangedFiles, getHeadSha, resolveFiles } from './file-resolver.js';
|
|
12
|
+
import { getChangedFiles, getChangedFilesDetailed, getHeadSha, resolveFiles, } from './file-resolver.js';
|
|
13
13
|
const EMBED_BATCH_SIZE = 100;
|
|
14
14
|
const SYNC_STATE_FILE = 'cache/sync-state.json';
|
|
15
15
|
const INDEX_META_FILE = 'cache/index-meta.json';
|
|
16
|
+
const FULL_SYNC_CHECKPOINT_FILE = 'cache/full-sync-checkpoint.json';
|
|
16
17
|
function readIndexMeta(totemDir) {
|
|
17
18
|
const metaPath = path.join(totemDir, INDEX_META_FILE);
|
|
18
19
|
try {
|
|
@@ -83,11 +84,79 @@ function readSyncState(totemDir, onProgress) {
|
|
|
83
84
|
return null;
|
|
84
85
|
}
|
|
85
86
|
}
|
|
87
|
+
/**
|
|
88
|
+
* Atomic JSON write (tmp + rename): a crash mid-write must never leave a torn
|
|
89
|
+
* state file — sync state and the full-sync checkpoint are both trusted by the
|
|
90
|
+
* NEXT run's control flow (#2562), matching the index-manifest write pattern.
|
|
91
|
+
*/
|
|
92
|
+
function writeJsonAtomic(filePath, value) {
|
|
93
|
+
fs.mkdirSync(path.dirname(filePath), { recursive: true });
|
|
94
|
+
// PID-unique tmp name: two writers racing under a stolen stale lock must
|
|
95
|
+
// not interleave through one tmp path (falsification round 1, MINOR 6).
|
|
96
|
+
const tmpPath = `${filePath}.${process.pid}.tmp`;
|
|
97
|
+
fs.writeFileSync(tmpPath, JSON.stringify(value, null, 2) + '\n', 'utf-8');
|
|
98
|
+
fs.renameSync(tmpPath, filePath);
|
|
99
|
+
}
|
|
86
100
|
function writeSyncState(totemDir, state) {
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
101
|
+
writeJsonAtomic(path.join(totemDir, SYNC_STATE_FILE), state);
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Read the full-sync checkpoint (#2562). The caller has already established
|
|
105
|
+
* the file EXISTS (existence = the dirty marker); a parse/shape failure here
|
|
106
|
+
* means "dirty but unusable" — the caller restarts the full re-index from
|
|
107
|
+
* zero. A present-but-corrupt checkpoint is never treated as a clean state.
|
|
108
|
+
*/
|
|
109
|
+
function readFullSyncCheckpoint(totemDir, onProgress) {
|
|
110
|
+
const cpPath = path.join(totemDir, FULL_SYNC_CHECKPOINT_FILE);
|
|
111
|
+
try {
|
|
112
|
+
const parsed = JSON.parse(fs.readFileSync(cpPath, 'utf-8'));
|
|
113
|
+
if (parsed &&
|
|
114
|
+
(parsed.startedHeadSha === null || typeof parsed.startedHeadSha === 'string') &&
|
|
115
|
+
typeof parsed.startedAt === 'number' &&
|
|
116
|
+
typeof parsed.indexExclusionHash === 'string' &&
|
|
117
|
+
typeof parsed.embedder?.provider === 'string' &&
|
|
118
|
+
typeof parsed.embedder?.model === 'string' &&
|
|
119
|
+
typeof parsed.embedder?.dimensions === 'number' &&
|
|
120
|
+
Array.isArray(parsed.completedFiles) &&
|
|
121
|
+
parsed.completedFiles.every((f) => typeof f === 'string')) {
|
|
122
|
+
return parsed;
|
|
123
|
+
}
|
|
124
|
+
onProgress?.(`Warning: malformed full-sync checkpoint at ${cpPath} — ignoring its progress.`);
|
|
125
|
+
return null;
|
|
126
|
+
// totem-context: intentional warn+null on an unreadable checkpoint (mmnto-ai/totem#2562) — dirty-but-unusable restarts the full re-index from zero; failing the sync over a torn checkpoint would wedge every subsequent run.
|
|
127
|
+
}
|
|
128
|
+
catch (err) {
|
|
129
|
+
onProgress?.(`Warning: failed to read full-sync checkpoint: ${err instanceof Error ? err.message : String(err)}`);
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
function writeFullSyncCheckpoint(totemDir, checkpoint) {
|
|
134
|
+
writeJsonAtomic(path.join(totemDir, FULL_SYNC_CHECKPOINT_FILE), checkpoint);
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Whether a full re-index epoch is in progress (its dirty marker exists) for
|
|
138
|
+
* the given totem dir (#2562). Exposed for callers that spawn or gate syncs
|
|
139
|
+
* under bounded budgets — e.g. the MCP add-lesson tool's 60s-killed
|
|
140
|
+
* convenience sync, which a promoted paced resume can never finish
|
|
141
|
+
* (falsification round 3, MAJOR 1): such callers should skip and defer to the
|
|
142
|
+
* running epoch instead of timing out against it.
|
|
143
|
+
*/
|
|
144
|
+
export function hasFullSyncCheckpoint(totemDir) {
|
|
145
|
+
return fs.existsSync(path.join(totemDir, FULL_SYNC_CHECKPOINT_FILE));
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Best-effort marker delete at successful completion. A failed delete is loud
|
|
149
|
+
* but non-fatal: the next run resumes-full as a near-noop and retries the
|
|
150
|
+
* delete, so correctness converges (#2562).
|
|
151
|
+
*/
|
|
152
|
+
function deleteFullSyncCheckpoint(totemDir, onProgress) {
|
|
153
|
+
try {
|
|
154
|
+
fs.rmSync(path.join(totemDir, FULL_SYNC_CHECKPOINT_FILE), { force: true });
|
|
155
|
+
// totem-context: intentional best-effort delete (mmnto-ai/totem#2562) — a failed marker delete only makes the next run resume-full as a near-noop and retry it; aborting a fully-successful sync over it would be the drift.
|
|
156
|
+
}
|
|
157
|
+
catch (err) {
|
|
158
|
+
onProgress?.(`Warning: failed to delete full-sync checkpoint: ${err instanceof Error ? err.message : String(err)}`);
|
|
159
|
+
}
|
|
91
160
|
}
|
|
92
161
|
/** Current schema identifier persisted to `.totem/index-manifest.json`. */
|
|
93
162
|
export const INDEX_MANIFEST_SCHEMA = 'totem-index-manifest-v0.2';
|
|
@@ -119,7 +188,19 @@ export async function runSync(config, options) {
|
|
|
119
188
|
const { projectRoot, onProgress } = options;
|
|
120
189
|
const log = onProgress ?? (() => { });
|
|
121
190
|
const totemDir = path.join(projectRoot, config.totemDir);
|
|
122
|
-
return withLock(totemDir, () => runSyncInner(config, options), (msg) => log(msg));
|
|
191
|
+
return withLock(totemDir, (lock) => runSyncInner(config, options, lock), (msg) => log(msg), options.lockOptions);
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* #2564: the checkpoint invariant stands on mutual exclusion. Once the
|
|
195
|
+
* heartbeat observed the lock stolen, another sync may be mutating the store
|
|
196
|
+
* or the checkpoint under its own epoch — abort loudly before writing
|
|
197
|
+
* anything more. The marker stays on disk, so the next sync resumes this
|
|
198
|
+
* epoch (ADR-115: a mutating degraded path fails loud and preserves state).
|
|
199
|
+
*/
|
|
200
|
+
function assertLockHeld(lock) {
|
|
201
|
+
if (lock?.isLost() === true) {
|
|
202
|
+
throw new TotemError('SYNC_FAILED', 'Sync lock was lost mid-run — another process took it over.', 'The interrupted re-index resumes from its checkpoint on the next totem sync.');
|
|
203
|
+
}
|
|
123
204
|
}
|
|
124
205
|
/**
|
|
125
206
|
* Normalize a path separator to forward slashes for orphan COMPARISON only.
|
|
@@ -169,21 +250,44 @@ export function computeNewlyEligiblePaths(liveRelativePaths, indexedRawPaths) {
|
|
|
169
250
|
const indexed = new Set(indexedRawPaths.map(normalizeRel));
|
|
170
251
|
return liveRelativePaths.filter((rel) => !indexed.has(normalizeRel(rel)));
|
|
171
252
|
}
|
|
172
|
-
async function runSyncInner(config, options) {
|
|
253
|
+
async function runSyncInner(config, options, lock) {
|
|
173
254
|
const { projectRoot, onProgress } = options;
|
|
174
255
|
let incremental = options.incremental;
|
|
175
256
|
const log = onProgress ?? (() => { });
|
|
176
257
|
// 0. Capture HEAD SHA early — before any async work that might race with new commits
|
|
177
258
|
const headSha = getHeadSha(projectRoot, log);
|
|
178
|
-
// 1. Create embedder
|
|
259
|
+
// 1. Create embedder (or take the injected one — tests / embedding hosts).
|
|
260
|
+
// `log` is threaded through so a LazyEmbedder Ollama fallback is AUDIBLE —
|
|
261
|
+
// a silent vector-space switch mid-sync is sensor degradation (#2562).
|
|
179
262
|
const embedding = requireEmbedding(config);
|
|
180
263
|
log('Initializing embedding provider...');
|
|
181
|
-
const embedder = createEmbedder(embedding);
|
|
264
|
+
const embedder = options.embedder ?? createEmbedder(embedding, log);
|
|
265
|
+
// Resume-compatibility fingerprint (#2562): a checkpointed epoch may only
|
|
266
|
+
// continue under the embedder configuration that started it — vectors from
|
|
267
|
+
// two configurations must never mix in one store. Mirrors writeIndexMeta.
|
|
268
|
+
const embedderFingerprint = {
|
|
269
|
+
provider: embedding.provider,
|
|
270
|
+
model: embedding.model ?? 'default',
|
|
271
|
+
dimensions: embedder.dimensions,
|
|
272
|
+
};
|
|
182
273
|
// 2. Connect to store
|
|
183
274
|
const storePath = path.join(projectRoot, config.lanceDir);
|
|
184
275
|
const store = new LanceStore(storePath, embedder, { absolutePathRoot: projectRoot });
|
|
185
276
|
await store.connect();
|
|
186
|
-
|
|
277
|
+
const totemDir = path.join(projectRoot, config.totemDir);
|
|
278
|
+
// 2b (#2562). A live checkpoint marks an unfinished full re-index. It takes
|
|
279
|
+
// precedence over the requested mode — the partial store must complete
|
|
280
|
+
// before any incremental diff can be trusted again — and it subsumes the
|
|
281
|
+
// empty-store heal below (an interrupted full that never flushed).
|
|
282
|
+
let resumeFrom = null;
|
|
283
|
+
if (hasFullSyncCheckpoint(totemDir)) {
|
|
284
|
+
incremental = false;
|
|
285
|
+
resumeFrom = readFullSyncCheckpoint(totemDir, log);
|
|
286
|
+
log(resumeFrom
|
|
287
|
+
? `Previous full re-index did not complete — resuming it (${resumeFrom.completedFiles.length} file(s) checkpointed).`
|
|
288
|
+
: 'Previous full re-index did not complete — restarting it from zero.');
|
|
289
|
+
}
|
|
290
|
+
// 2c. Auto-heal: force full sync when incremental is requested but DB is empty
|
|
187
291
|
if (incremental && (await store.isEmpty())) {
|
|
188
292
|
log('Empty database detected. Forcing full sync...');
|
|
189
293
|
incremental = false;
|
|
@@ -191,7 +295,6 @@ async function runSyncInner(config, options) {
|
|
|
191
295
|
// 3. Resolve files to process. Index exclusion unions both keys:
|
|
192
296
|
// `ignorePatterns` (legacy dual-scope) + `indexIgnorePatterns` (index-only,
|
|
193
297
|
// mmnto-ai/totem#1748) — only the former also gates lint/shield scope.
|
|
194
|
-
const totemDir = path.join(projectRoot, config.totemDir);
|
|
195
298
|
const exclusionPatterns = [...config.ignorePatterns, ...config.indexIgnorePatterns];
|
|
196
299
|
const allFiles = resolveFiles(config.targets, projectRoot, exclusionPatterns, log);
|
|
197
300
|
// Order-normalized hash of the effective exclusion set — persisted below and
|
|
@@ -199,6 +302,30 @@ async function runSyncInner(config, options) {
|
|
|
199
302
|
const indexExclusionHash = hashIndexExclusionSet(exclusionPatterns);
|
|
200
303
|
let filesToProcess;
|
|
201
304
|
let deletedPaths = [];
|
|
305
|
+
// #2562: active-epoch checkpoint (full mode only) — written before the store
|
|
306
|
+
// is destroyed, appended after each successful flush, deleted on success.
|
|
307
|
+
let checkpoint = null;
|
|
308
|
+
let resumedWithoutReset = false;
|
|
309
|
+
const freshCheckpoint = () => ({
|
|
310
|
+
startedHeadSha: headSha,
|
|
311
|
+
startedAt: Date.now(),
|
|
312
|
+
indexExclusionHash,
|
|
313
|
+
embedder: embedderFingerprint,
|
|
314
|
+
completedFiles: [],
|
|
315
|
+
});
|
|
316
|
+
// The dirty marker MUST hit disk before the store is destroyed: a marker
|
|
317
|
+
// write failure aborts loudly with the store intact, so no window exists in
|
|
318
|
+
// which a reset store is unmarked (#2562).
|
|
319
|
+
async function beginFullSync(cp) {
|
|
320
|
+
// #2564 (leg MAJOR-3): never overwrite the marker or reset the store
|
|
321
|
+
// after this hold's exclusion is known-lost — both would destroy the
|
|
322
|
+
// thief's epoch, the exact mutation #2564 names.
|
|
323
|
+
assertLockHeld(lock);
|
|
324
|
+
writeFullSyncCheckpoint(totemDir, cp);
|
|
325
|
+
checkpoint = cp;
|
|
326
|
+
log('Full sync: resetting index...');
|
|
327
|
+
await store.reset();
|
|
328
|
+
}
|
|
202
329
|
if (incremental) {
|
|
203
330
|
// Persisted sync state carries both the diff baseline (lastSyncSha) and the
|
|
204
331
|
// exclusion-set hash used for removal reconciliation (mmnto-ai/totem#2366).
|
|
@@ -212,7 +339,7 @@ async function runSyncInner(config, options) {
|
|
|
212
339
|
const changedPaths = options.changedFiles ?? getChangedFiles(projectRoot, sinceRef, log);
|
|
213
340
|
if (changedPaths === null) {
|
|
214
341
|
log('Git diff failed, falling back to full sync...');
|
|
215
|
-
await
|
|
342
|
+
await beginFullSync(freshCheckpoint());
|
|
216
343
|
filesToProcess = allFiles;
|
|
217
344
|
log(`Full sync (fallback): ${filesToProcess.length} files to process`);
|
|
218
345
|
}
|
|
@@ -261,9 +388,129 @@ async function runSyncInner(config, options) {
|
|
|
261
388
|
` (of ${allFiles.length} total)`);
|
|
262
389
|
}
|
|
263
390
|
}
|
|
391
|
+
else if (resumeFrom) {
|
|
392
|
+
// #2562 resume: NO reset — the interrupted epoch continues. Already-done
|
|
393
|
+
// derives from FOUR signals, not the checkpoint alone:
|
|
394
|
+
// 1. checkpointed (the epoch flushed it);
|
|
395
|
+
// 2. ∩ live (still resolved by the current target set);
|
|
396
|
+
// 3. ∩ actually-in-the-store — the store is ground truth: a store
|
|
397
|
+
// healed/nuked under a live checkpoint must not be trusted from
|
|
398
|
+
// paper (falsification round 1, MAJOR 1);
|
|
399
|
+
// 4. − moved-since-epoch: anything in git's tracked diff against
|
|
400
|
+
// startedHeadSha, PLUS anything whose mtime postdates the epoch
|
|
401
|
+
// start. The mtime arm applies to EVERY file, not only untracked
|
|
402
|
+
// ones (falsification round 2, F3: submodule and assume-unchanged
|
|
403
|
+
// files appear in neither git list, so an untracked-only mtime arm
|
|
404
|
+
// silently kept them stale) — a false-positive eviction is just a
|
|
405
|
+
// harmless re-embed. Untracked files are deliberately NOT evicted by
|
|
406
|
+
// git-list membership (it is permanent — round 1, MAJOR 2), and a
|
|
407
|
+
// non-git epoch (null startedHeadSha) has an empty tracked set, so
|
|
408
|
+
// the mtime arm carries it alone (MAJOR 4).
|
|
409
|
+
// The epoch diff never derives from options.changedFiles — a caller's
|
|
410
|
+
// diff window says nothing about what the crashed epoch covered.
|
|
411
|
+
const detailed = resumeFrom.startedHeadSha
|
|
412
|
+
? getChangedFilesDetailed(projectRoot, resumeFrom.startedHeadSha, log)
|
|
413
|
+
: { tracked: [], untracked: [] };
|
|
414
|
+
if (detailed === null) {
|
|
415
|
+
log('Cannot diff against the interrupted epoch — restarting the full re-index from zero.');
|
|
416
|
+
await beginFullSync(freshCheckpoint());
|
|
417
|
+
filesToProcess = allFiles;
|
|
418
|
+
log(`Full sync: ${filesToProcess.length} files to process`);
|
|
419
|
+
}
|
|
420
|
+
else {
|
|
421
|
+
let indexedRaw = null;
|
|
422
|
+
try {
|
|
423
|
+
indexedRaw = await store.getDistinctPaths();
|
|
424
|
+
// totem-context: intentional warn+degrade on a getDistinctPaths failure (mmnto-ai/totem#2562, falsification round 2 F7 + round 3 MINOR 9a) — the completed set collapses to EMPTY below (every file re-embeds via delete-first, same cost as a reset-restart) but the table is NOT destroyed over a possibly-transient read failure, and the checkpoint's paper progress is RETAINED untrusted so a second crash does not erase a prior epoch's flushed work.
|
|
425
|
+
}
|
|
426
|
+
catch (err) {
|
|
427
|
+
log(`Warning: cannot verify the checkpoint against the store (getDistinctPaths failed: ${err instanceof Error ? err.message : String(err)}) — re-embedding everything without trusting the checkpoint.`);
|
|
428
|
+
}
|
|
429
|
+
const epochStart = resumeFrom.startedAt;
|
|
430
|
+
const byRel = new Map(allFiles.map((f) => [normalizeRel(f.relativePath), f]));
|
|
431
|
+
const tracked = new Set(detailed.tracked.map(normalizeRel));
|
|
432
|
+
const movedSinceEpoch = (rel) => {
|
|
433
|
+
if (tracked.has(rel))
|
|
434
|
+
return true;
|
|
435
|
+
const file = byRel.get(rel);
|
|
436
|
+
if (!file)
|
|
437
|
+
return true;
|
|
438
|
+
try {
|
|
439
|
+
return fs.statSync(file.absolutePath).mtimeMs > epochStart;
|
|
440
|
+
// totem-context: intentional treat-as-moved on a stat failure (mmnto-ai/totem#2562) — the file re-embeds (idempotent via delete-first) or the read site skips a vanished file loudly.
|
|
441
|
+
}
|
|
442
|
+
catch {
|
|
443
|
+
return true;
|
|
444
|
+
}
|
|
445
|
+
};
|
|
446
|
+
const indexed = indexedRaw === null ? null : new Set(indexedRaw.map(normalizeRel));
|
|
447
|
+
const completed = new Set(indexed === null
|
|
448
|
+
? []
|
|
449
|
+
: resumeFrom.completedFiles
|
|
450
|
+
.map(normalizeRel)
|
|
451
|
+
.filter((rel) => byRel.has(rel) && indexed.has(rel) && !movedSinceEpoch(rel)));
|
|
452
|
+
filesToProcess = allFiles.filter((f) => !completed.has(normalizeRel(f.relativePath)));
|
|
453
|
+
// EFFECTIVE-vs-effective identity gate (falsification rounds 2–4). The
|
|
454
|
+
// epoch may only continue under the embedder identity that will
|
|
455
|
+
// ACTUALLY serve this run's embeds — config-vs-stamped is wrong in both
|
|
456
|
+
// directions (a silent fallback would mix vector spaces at the first
|
|
457
|
+
// insert; a persistent fallback would restart-loop forever). The
|
|
458
|
+
// exemption is RESOLUTION FAILURE with zero work remaining (round 3
|
|
459
|
+
// MINOR 10: an epoch that merely needs its marker cleared must not
|
|
460
|
+
// wedge behind a missing embedder) — NOT zero work itself: a resolvable
|
|
461
|
+
// mismatch must restart even with nothing left, or clearing the marker
|
|
462
|
+
// would rewrite index-meta to the new identity and launder the
|
|
463
|
+
// DATABASE_MISMATCH evidence the next incremental needs (round 4,
|
|
464
|
+
// MAJOR 1 — probed: dimension change + zero-work resume ⇒ silent mixed
|
|
465
|
+
// store).
|
|
466
|
+
let identityOk = true;
|
|
467
|
+
let effectiveNow = null;
|
|
468
|
+
try {
|
|
469
|
+
effectiveNow = (await embedder.resolveEffective?.()) ?? embedderFingerprint;
|
|
470
|
+
}
|
|
471
|
+
catch (err) {
|
|
472
|
+
if (filesToProcess.length > 0)
|
|
473
|
+
throw err; // work remains ⇒ fail loud, state intact
|
|
474
|
+
log(`Nothing left to embed and no embedder resolved (${err instanceof Error ? err.message : String(err)}) — clearing the marker unverified.`);
|
|
475
|
+
}
|
|
476
|
+
if (effectiveNow !== null) {
|
|
477
|
+
const fp = resumeFrom.embedder;
|
|
478
|
+
if (fp.provider !== effectiveNow.provider ||
|
|
479
|
+
fp.model !== effectiveNow.model ||
|
|
480
|
+
fp.dimensions !== effectiveNow.dimensions) {
|
|
481
|
+
log(`The embedder serving this run (${effectiveNow.provider}/${effectiveNow.model}) differs from the interrupted epoch's (${fp.provider}/${fp.model}) — its progress is unusable; restarting from zero.`);
|
|
482
|
+
identityOk = false;
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
if (!identityOk) {
|
|
486
|
+
await beginFullSync(freshCheckpoint());
|
|
487
|
+
filesToProcess = allFiles;
|
|
488
|
+
log(`Full sync: ${filesToProcess.length} files to process`);
|
|
489
|
+
}
|
|
490
|
+
else {
|
|
491
|
+
// Carry forward the verified entries, re-keyed to the current run's
|
|
492
|
+
// resolved paths — EXCEPT when the store was unreadable: then the
|
|
493
|
+
// paper progress is retained untrusted (round 3, MINOR 9a) so a
|
|
494
|
+
// second crash does not erase a prior epoch's flushed work; the next
|
|
495
|
+
// resume re-verifies it against a hopefully-readable store.
|
|
496
|
+
// startedHeadSha stays the ORIGINAL epoch SHA so every later resume
|
|
497
|
+
// re-diffs the full window (superset-safe).
|
|
498
|
+
const carried = indexed === null
|
|
499
|
+
? [...resumeFrom.completedFiles]
|
|
500
|
+
: allFiles.map((f) => f.relativePath).filter((rel) => completed.has(normalizeRel(rel)));
|
|
501
|
+
checkpoint = { ...resumeFrom, indexExclusionHash, completedFiles: carried };
|
|
502
|
+
// #2564 (leg MINOR-R2): same class as the beginFullSync probe — never
|
|
503
|
+
// overwrite a marker that may belong to a thief's epoch.
|
|
504
|
+
assertLockHeld(lock);
|
|
505
|
+
writeFullSyncCheckpoint(totemDir, checkpoint);
|
|
506
|
+
resumedWithoutReset = true;
|
|
507
|
+
log(`Resuming full re-index: ${filesToProcess.length} file(s) remaining of ${allFiles.length} ` +
|
|
508
|
+
`(${completed.size} verified already embedded). Delete ${config.totemDir}/${FULL_SYNC_CHECKPOINT_FILE} to restart from scratch.`);
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
}
|
|
264
512
|
else {
|
|
265
|
-
|
|
266
|
-
await store.reset();
|
|
513
|
+
await beginFullSync(freshCheckpoint());
|
|
267
514
|
filesToProcess = allFiles;
|
|
268
515
|
log(`Full sync: ${filesToProcess.length} files to process`);
|
|
269
516
|
}
|
|
@@ -288,28 +535,86 @@ async function runSyncInner(config, options) {
|
|
|
288
535
|
// 4. Chunk files and stream to LanceDB in batches (bounded memory)
|
|
289
536
|
let totalChunks = 0;
|
|
290
537
|
let buffer = [];
|
|
538
|
+
let pendingFiles = [];
|
|
291
539
|
async function flushBuffer() {
|
|
540
|
+
// Probe BEFORE the empty-buffer return so the final flush always checks
|
|
541
|
+
// mutual exclusion, even when nothing is left to write (#2564).
|
|
542
|
+
assertLockHeld(lock);
|
|
292
543
|
if (buffer.length === 0)
|
|
293
544
|
return;
|
|
294
545
|
await store.insert(buffer);
|
|
546
|
+
// Re-probe after the insert: the embed inside it is exactly the
|
|
547
|
+
// multi-minute paced/throttled window a theft happens in (#2564), and
|
|
548
|
+
// the next entry probe may be a whole batch away.
|
|
549
|
+
assertLockHeld(lock);
|
|
295
550
|
totalChunks += buffer.length;
|
|
296
551
|
log(` Embedded ${totalChunks} chunks so far`);
|
|
297
552
|
buffer = [];
|
|
553
|
+
// #2562: chunks buffer at whole-file boundaries and store.insert embeds
|
|
554
|
+
// before any row lands, so a successful flush means every pending file is
|
|
555
|
+
// complete in the store — checkpoint them. An append failure is
|
|
556
|
+
// survivable: the file re-embeds on resume via the delete-first path.
|
|
557
|
+
const cp = checkpoint;
|
|
558
|
+
if (cp && pendingFiles.length > 0) {
|
|
559
|
+
cp.completedFiles.push(...pendingFiles);
|
|
560
|
+
// Persist the EFFECTIVE embedder identity once known (falsification
|
|
561
|
+
// round 1, MAJOR 3): a LazyEmbedder that silently fell back to Ollama
|
|
562
|
+
// must not leave a checkpoint fingerprinted as the configured provider,
|
|
563
|
+
// or the next resume would mix vector spaces across the epoch.
|
|
564
|
+
const effective = embedder.describeEffective?.();
|
|
565
|
+
if (effective)
|
|
566
|
+
cp.embedder = effective;
|
|
567
|
+
try {
|
|
568
|
+
writeFullSyncCheckpoint(totemDir, cp);
|
|
569
|
+
// totem-context: intentional warn+continue on a checkpoint-append failure (mmnto-ai/totem#2562) — the flushed chunks are safe in the store; worst case the file re-embeds on resume via the delete-first path.
|
|
570
|
+
}
|
|
571
|
+
catch (err) {
|
|
572
|
+
log(` Warning: failed to update full-sync checkpoint: ${err instanceof Error ? err.message : String(err)}`);
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
pendingFiles = [];
|
|
298
576
|
}
|
|
299
577
|
for (const file of filesToProcess) {
|
|
300
578
|
const safeRel = sanitizeForTerminal(file.relativePath);
|
|
301
579
|
log(`Chunking ${safeRel}...`);
|
|
580
|
+
// A file whose CURRENT state legitimately yields no rows (emptied of
|
|
581
|
+
// chunkable content, or swapped to a symlink the guard refuses) must
|
|
582
|
+
// still purge its OLD rows when re-processing in place — the baseline
|
|
583
|
+
// advances past the change at the end of this run, so no later
|
|
584
|
+
// incremental diff revisits it and the stale rows would be searchable
|
|
585
|
+
// forever (#2569 Greptile round: stale-rows-on-skip). The transient
|
|
586
|
+
// read-error skip below deliberately does NOT purge: deleting on a
|
|
587
|
+
// maybe-transient failure would LOSE good rows, worse than stale ones.
|
|
588
|
+
const purgeStaleRows = async () => {
|
|
589
|
+
if (incremental || resumedWithoutReset) {
|
|
590
|
+
await store.deleteByFile(file.relativePath);
|
|
591
|
+
}
|
|
592
|
+
};
|
|
593
|
+
// Symlink guard at the READ site (mmnto-ai/totem#2354, #2356 review):
|
|
594
|
+
// resolveFiles skips symlinks at discovery, but this read happens later,
|
|
595
|
+
// so a path swapped to a symlink after resolution would still be followed
|
|
596
|
+
// by readFileSync. Re-check here and skip — closes the discovery→read
|
|
597
|
+
// TOCTOU gap. The purge runs OUTSIDE the read-error catches (#2569 CR
|
|
598
|
+
// round 2): caught there, a purge failure would be mislabeled a read
|
|
599
|
+
// error and silently downgraded to a skip — permanent staleness. Outside
|
|
600
|
+
// them it fails loud and CONVERGES: the marker/stale baseline makes the
|
|
601
|
+
// next run re-evict the file and retry the delete.
|
|
602
|
+
let isSymlink;
|
|
603
|
+
try {
|
|
604
|
+
isSymlink = fs.lstatSync(file.absolutePath).isSymbolicLink();
|
|
605
|
+
// totem-context: intentional skip — a per-file stat failure (vanished/raced file, permission) logs and skips just that file so sync continues over the rest; aborting the whole sync over one unreadable file would be the drift, not the skip.
|
|
606
|
+
}
|
|
607
|
+
catch (err) {
|
|
608
|
+
log(` Skipping (read error: ${sanitizeForTerminal(err instanceof Error ? err.message : String(err))}): ${safeRel}`);
|
|
609
|
+
continue;
|
|
610
|
+
}
|
|
611
|
+
if (isSymlink) {
|
|
612
|
+
log(` Skipping symlink (not indexed): ${safeRel}`);
|
|
613
|
+
await purgeStaleRows();
|
|
614
|
+
continue;
|
|
615
|
+
}
|
|
302
616
|
let content;
|
|
303
617
|
try {
|
|
304
|
-
// Symlink guard at the READ site (mmnto-ai/totem#2354, #2356 review):
|
|
305
|
-
// resolveFiles skips symlinks at discovery, but this read happens later,
|
|
306
|
-
// so a path swapped to a symlink after resolution would still be followed
|
|
307
|
-
// by readFileSync. Re-check here and skip — closes the discovery→read
|
|
308
|
-
// TOCTOU gap.
|
|
309
|
-
if (fs.lstatSync(file.absolutePath).isSymbolicLink()) {
|
|
310
|
-
log(` Skipping symlink (not indexed): ${safeRel}`);
|
|
311
|
-
continue;
|
|
312
|
-
}
|
|
313
618
|
content = fs.readFileSync(file.absolutePath, 'utf-8');
|
|
314
619
|
// totem-context: intentional skip — a per-file read failure (vanished/raced file, permission, decode) logs and skips just that file so sync continues over the rest; aborting the whole sync over one unreadable file would be the drift, not the skip.
|
|
315
620
|
}
|
|
@@ -321,12 +626,14 @@ async function runSyncInner(config, options) {
|
|
|
321
626
|
const chunks = chunker.chunk(content, file.relativePath, file.target.type);
|
|
322
627
|
if (chunks.length === 0) {
|
|
323
628
|
log(` No chunks extracted from ${file.relativePath}`);
|
|
629
|
+
await purgeStaleRows();
|
|
324
630
|
continue;
|
|
325
631
|
}
|
|
326
|
-
//
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
632
|
+
// Delete old chunks for this file before inserting new ones — incremental
|
|
633
|
+
// re-embeds in place, and a #2562 resume (no reset) can hold this file's
|
|
634
|
+
// chunks already (changed-since-epoch, or a flush whose checkpoint append
|
|
635
|
+
// failed). Idempotent either way.
|
|
636
|
+
await purgeStaleRows();
|
|
330
637
|
// Sanitize chunk content before embedding (adversarial ingestion scrubbing)
|
|
331
638
|
// Deduplicate warnings per file to avoid log spam on files with widespread issues
|
|
332
639
|
const warnedMessages = new Set();
|
|
@@ -346,6 +653,7 @@ async function runSyncInner(config, options) {
|
|
|
346
653
|
chunk.contextPrefix = sanitizeForIngestion(chunk.contextPrefix, sanitizeOpts);
|
|
347
654
|
}
|
|
348
655
|
buffer.push(...chunks);
|
|
656
|
+
pendingFiles.push(file.relativePath);
|
|
349
657
|
log(` ${chunks.length} chunks from ${file.relativePath}`);
|
|
350
658
|
// Flush when buffer reaches batch size to keep memory bounded
|
|
351
659
|
if (buffer.length >= EMBED_BATCH_SIZE) {
|
|
@@ -369,10 +677,28 @@ async function runSyncInner(config, options) {
|
|
|
369
677
|
}
|
|
370
678
|
// Persist sync state so the next incremental sync knows where to diff from and
|
|
371
679
|
// can detect an ignore-pattern change (including a removal) via the hash (#2366).
|
|
680
|
+
// #2564: not under a lost lock — a completion-claiming baseline must not land
|
|
681
|
+
// while another process's epoch owns the store.
|
|
682
|
+
assertLockHeld(lock);
|
|
372
683
|
if (headSha) {
|
|
373
684
|
writeSyncState(totemDir, { lastSyncSha: headSha, timestamp: Date.now(), indexExclusionHash });
|
|
374
685
|
}
|
|
375
|
-
//
|
|
686
|
+
// #2562: the epoch is complete — clear the dirty marker only AFTER the fresh
|
|
687
|
+
// baseline is on disk. A crash between the two writes leaves marker + fresh
|
|
688
|
+
// baseline, which the next run resumes as a near-noop; the reverse order
|
|
689
|
+
// would leave a clean-claiming baseline over a still-marked store.
|
|
690
|
+
if (checkpoint) {
|
|
691
|
+
// #2564: after a theft, the on-disk marker may already belong to the
|
|
692
|
+
// thief's epoch — deleting it would erase THAT run's crash safety.
|
|
693
|
+
assertLockHeld(lock);
|
|
694
|
+
deleteFullSyncCheckpoint(totemDir, log);
|
|
695
|
+
}
|
|
696
|
+
// Persist index metadata for dimension mismatch detection.
|
|
697
|
+
// #2564 (leg MINOR-R3): index-meta is DATABASE_MISMATCH evidence, not a
|
|
698
|
+
// freely-regenerable cache — writing it under a thief running a different
|
|
699
|
+
// embedder identity would launder the very signal the next incremental
|
|
700
|
+
// needs (the #2562 round-4 reasoning).
|
|
701
|
+
assertLockHeld(lock);
|
|
376
702
|
writeIndexMeta(totemDir, {
|
|
377
703
|
provider: embedding.provider,
|
|
378
704
|
model: embedding.model ?? 'default',
|
|
@@ -386,10 +712,7 @@ async function runSyncInner(config, options) {
|
|
|
386
712
|
const writtenAt = new Date();
|
|
387
713
|
const docs = await store.manifestDocuments(writtenAt);
|
|
388
714
|
const manifest = buildIndexManifest({ documents: docs, headSha, writtenAt });
|
|
389
|
-
|
|
390
|
-
const tmpManifestPath = manifestPath + '.tmp';
|
|
391
|
-
fs.writeFileSync(tmpManifestPath, JSON.stringify(manifest, null, 2) + '\n', 'utf-8');
|
|
392
|
-
fs.renameSync(tmpManifestPath, manifestPath);
|
|
715
|
+
writeJsonAtomic(path.join(totemDir, 'index-manifest.json'), manifest);
|
|
393
716
|
}
|
|
394
717
|
catch (err) {
|
|
395
718
|
const detail = err instanceof Error ? err.message : typeof err === 'string' ? err : 'unknown error';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/ingest/pipeline.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/ingest/pipeline.ts"],"names":[],"mappings":"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"}
|