@mmnto/totem 1.109.0 → 1.110.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 +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- 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 +315 -29
- package/dist/ingest/pipeline.js.map +1 -1
- package/dist/ingest/pipeline.test.js +397 -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/types.d.ts +39 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { execFileSync } from 'node:child_process';
|
|
1
2
|
import * as fs from 'node:fs';
|
|
2
3
|
import * as os from 'node:os';
|
|
3
4
|
import * as path from 'node:path';
|
|
@@ -144,6 +145,402 @@ describe('runSync embedding guard', () => {
|
|
|
144
145
|
await expect(runSync(config, { projectRoot: os.tmpdir(), incremental: false })).rejects.toThrow('No embedding provider configured');
|
|
145
146
|
});
|
|
146
147
|
});
|
|
148
|
+
// ─── Full-sync crash recovery (#2562, ADR-115 Train-1 induced regression) ───
|
|
149
|
+
//
|
|
150
|
+
// The defect: `--full` reset the store, crashed mid-embed, and left the
|
|
151
|
+
// previous SUCCESSFUL sync's baseline behind — so the next plain `totem sync`
|
|
152
|
+
// diffed from the old SHA, saw 0 changed files, and reported "Sync complete:
|
|
153
|
+
// 0 files" over the gutted store. These tests reproduce that state with a
|
|
154
|
+
// crash-at-flush-K embedder and lock in the checkpoint/resume contract.
|
|
155
|
+
const FULL_SYNC_CHECKPOINT_FILE = 'cache/full-sync-checkpoint.json';
|
|
156
|
+
const HEAVY_TIMEOUT_MS = 60_000;
|
|
157
|
+
/** Embeds deterministically; throws a quota-shaped 429 from call N onward. */
|
|
158
|
+
class ScriptedEmbedder {
|
|
159
|
+
dimensions;
|
|
160
|
+
embedCalls = [];
|
|
161
|
+
failFromCall = null;
|
|
162
|
+
onCall;
|
|
163
|
+
describeEffective;
|
|
164
|
+
resolveEffective;
|
|
165
|
+
calls = 0;
|
|
166
|
+
constructor(dimensions = 4) {
|
|
167
|
+
this.dimensions = dimensions;
|
|
168
|
+
}
|
|
169
|
+
embed(texts) {
|
|
170
|
+
this.calls++;
|
|
171
|
+
this.onCall?.();
|
|
172
|
+
if (this.failFromCall !== null && this.calls >= this.failFromCall) {
|
|
173
|
+
return Promise.reject(Object.assign(new Error('quota exceeded: RESOURCE_EXHAUSTED'), { status: 429 }));
|
|
174
|
+
}
|
|
175
|
+
this.embedCalls.push([...texts]);
|
|
176
|
+
return Promise.resolve(texts.map((_, i) => new Array(this.dimensions).fill(i % 7)));
|
|
177
|
+
}
|
|
178
|
+
/** All text embedded across every call, joined for content assertions. */
|
|
179
|
+
allText() {
|
|
180
|
+
return this.embedCalls.flat().join('\n');
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
describe('full-sync crash recovery (#2562)', () => {
|
|
184
|
+
let tmpDir;
|
|
185
|
+
let config;
|
|
186
|
+
const run = (embedder, incremental) => runSync(config, { projectRoot: tmpDir, incremental, embedder });
|
|
187
|
+
const checkpointPath = () => path.join(tmpDir, '.totem', FULL_SYNC_CHECKPOINT_FILE);
|
|
188
|
+
const syncStatePath = () => path.join(tmpDir, '.totem', 'cache/sync-state.json');
|
|
189
|
+
const git = (...args) => execFileSync('git', args, { cwd: tmpDir, stdio: 'pipe' });
|
|
190
|
+
/** Exactly 80 chunks per file (one per `##` section; the `#` preamble has
|
|
191
|
+
* no body text, so it yields no chunk) — 240 total. Two files overflow
|
|
192
|
+
* EMBED_BATCH_SIZE (100), so the first flush lands at a file boundary and
|
|
193
|
+
* the crash-at-flush-2 embedder dies on the third file's flush with two
|
|
194
|
+
* files already in the store. */
|
|
195
|
+
const TOTAL_CHUNKS = 240;
|
|
196
|
+
const writeCorpusFileTo = (dir, name, stem) => {
|
|
197
|
+
const sections = Array.from({ length: 80 }, (_, i) => `## ${stem} ${i}\n\n${stem}-content-${i}\n`).join('\n');
|
|
198
|
+
fs.writeFileSync(path.join(dir, name), `# ${stem}\n\n${sections}`, 'utf-8');
|
|
199
|
+
};
|
|
200
|
+
const writeCorpusFile = (name, stem) => writeCorpusFileTo(tmpDir, name, stem);
|
|
201
|
+
beforeEach(() => {
|
|
202
|
+
tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'totem-fullsync-'));
|
|
203
|
+
config = TotemConfigSchema.parse({
|
|
204
|
+
targets: [{ glob: '*.md', type: 'spec', strategy: 'markdown-heading' }],
|
|
205
|
+
embedding: { provider: 'gemini', model: 'test-model', dimensions: 4 },
|
|
206
|
+
});
|
|
207
|
+
writeCorpusFile('a.md', 'alpha');
|
|
208
|
+
writeCorpusFile('b.md', 'bravo');
|
|
209
|
+
writeCorpusFile('c.md', 'charlie');
|
|
210
|
+
git('init');
|
|
211
|
+
git('config', 'user.email', 'test@test.com');
|
|
212
|
+
git('config', 'user.name', 'Test');
|
|
213
|
+
git('add', '--', 'a.md', 'b.md', 'c.md');
|
|
214
|
+
git('commit', '-m', 'init');
|
|
215
|
+
});
|
|
216
|
+
afterEach(() => {
|
|
217
|
+
cleanTmpDir(tmpDir);
|
|
218
|
+
});
|
|
219
|
+
const ALL_FILES = ['a.md', 'b.md', 'c.md'];
|
|
220
|
+
const STEM = { 'a.md': 'alpha', 'b.md': 'bravo', 'c.md': 'charlie' };
|
|
221
|
+
const readCheckpoint = () => JSON.parse(fs.readFileSync(checkpointPath(), 'utf-8'));
|
|
222
|
+
/** The one file the crashed epoch never flushed (glob order is not guaranteed,
|
|
223
|
+
* so which file that is must be READ from the checkpoint, not assumed). */
|
|
224
|
+
const unflushedFile = () => {
|
|
225
|
+
const { completedFiles } = readCheckpoint();
|
|
226
|
+
const missing = ALL_FILES.filter((f) => !completedFiles.includes(f));
|
|
227
|
+
expect(missing).toHaveLength(1);
|
|
228
|
+
return missing[0];
|
|
229
|
+
};
|
|
230
|
+
/** Crash a full sync at the second flush: two files land, the third does not. */
|
|
231
|
+
async function crashFullSync() {
|
|
232
|
+
const crasher = new ScriptedEmbedder();
|
|
233
|
+
crasher.failFromCall = 2;
|
|
234
|
+
await expect(run(crasher, false)).rejects.toThrow('RESOURCE_EXHAUSTED');
|
|
235
|
+
return crasher;
|
|
236
|
+
}
|
|
237
|
+
it('a crashed --full leaves the dirty marker with only fully-flushed files checkpointed', { timeout: HEAVY_TIMEOUT_MS }, async () => {
|
|
238
|
+
const crasher = new ScriptedEmbedder();
|
|
239
|
+
crasher.failFromCall = 2;
|
|
240
|
+
let markerSeenDuringEmbed = false;
|
|
241
|
+
crasher.onCall = () => {
|
|
242
|
+
markerSeenDuringEmbed ||= fs.existsSync(checkpointPath());
|
|
243
|
+
};
|
|
244
|
+
await expect(run(crasher, false)).rejects.toThrow('RESOURCE_EXHAUSTED');
|
|
245
|
+
// The marker was already on disk when the first embed call ran — no
|
|
246
|
+
// window exists where the store is reset but unmarked.
|
|
247
|
+
expect(markerSeenDuringEmbed).toBe(true);
|
|
248
|
+
// Exactly the two fully-flushed files are checkpointed; the file whose
|
|
249
|
+
// flush crashed is not (whole-file flush boundaries).
|
|
250
|
+
const cp = JSON.parse(fs.readFileSync(checkpointPath(), 'utf-8'));
|
|
251
|
+
expect(cp.completedFiles).toHaveLength(2);
|
|
252
|
+
expect(ALL_FILES.filter((f) => !cp.completedFiles.includes(f))).toHaveLength(1);
|
|
253
|
+
expect(cp.embedder).toEqual({ provider: 'gemini', model: 'test-model', dimensions: 4 });
|
|
254
|
+
expect(typeof cp.startedHeadSha).toBe('string');
|
|
255
|
+
// No successful sync ever completed — no baseline may exist.
|
|
256
|
+
expect(fs.existsSync(syncStatePath())).toBe(false);
|
|
257
|
+
});
|
|
258
|
+
it('INDUCED REGRESSION: the next plain sync resumes the full re-index instead of reporting complete over a partial store', { timeout: HEAVY_TIMEOUT_MS }, async () => {
|
|
259
|
+
// The lying sensor NEEDS a surviving baseline from a previous
|
|
260
|
+
// SUCCESSFUL sync: pre-fix, the crashed --full left this state file
|
|
261
|
+
// intact over the reset store, the next plain sync diffed
|
|
262
|
+
// lastSyncSha..HEAD, saw 0 changed files, and reported "Sync
|
|
263
|
+
// complete: 0 files" (falsification round 1, MAJOR 5 — without this
|
|
264
|
+
// baseline the pre-fix code fails via the git-diff fallback instead).
|
|
265
|
+
const first = await run(new ScriptedEmbedder(), false);
|
|
266
|
+
expect(first.totalChunks).toBe(TOTAL_CHUNKS);
|
|
267
|
+
const staleState = fs.readFileSync(syncStatePath(), 'utf-8');
|
|
268
|
+
await crashFullSync();
|
|
269
|
+
const missing = unflushedFile();
|
|
270
|
+
const flushed = ALL_FILES.filter((f) => f !== missing);
|
|
271
|
+
// The crash left the stale baseline byte-identical — the defect's
|
|
272
|
+
// exact precondition.
|
|
273
|
+
expect(fs.readFileSync(syncStatePath(), 'utf-8')).toBe(staleState);
|
|
274
|
+
const resumer = new ScriptedEmbedder();
|
|
275
|
+
const result = await run(resumer, true); // plain `totem sync`
|
|
276
|
+
// Pre-fix this reported 0 files processed over a partial store.
|
|
277
|
+
expect(result.filesProcessed).toBe(1);
|
|
278
|
+
expect(resumer.allText()).toContain(`${STEM[missing]}-content-1`);
|
|
279
|
+
for (const kept of flushed) {
|
|
280
|
+
expect(resumer.allText()).not.toContain(`${STEM[kept]}-content-1`);
|
|
281
|
+
}
|
|
282
|
+
// The store now holds the whole corpus, the marker is gone, and the
|
|
283
|
+
// baseline points at HEAD — the epoch completed for real.
|
|
284
|
+
expect(result.totalChunks).toBe(TOTAL_CHUNKS);
|
|
285
|
+
expect(fs.existsSync(checkpointPath())).toBe(false);
|
|
286
|
+
const state = JSON.parse(fs.readFileSync(syncStatePath(), 'utf-8'));
|
|
287
|
+
const headSha = execFileSync('git', ['rev-parse', 'HEAD'], {
|
|
288
|
+
cwd: tmpDir,
|
|
289
|
+
encoding: 'utf-8',
|
|
290
|
+
}).trim();
|
|
291
|
+
expect(state.lastSyncSha).toBe(headSha);
|
|
292
|
+
});
|
|
293
|
+
it('a file changed since the crashed epoch re-embeds on resume', { timeout: HEAVY_TIMEOUT_MS }, async () => {
|
|
294
|
+
await crashFullSync();
|
|
295
|
+
const missing = unflushedFile();
|
|
296
|
+
const [mutated, untouched] = ALL_FILES.filter((f) => f !== missing);
|
|
297
|
+
fs.appendFileSync(path.join(tmpDir, mutated), `\n## ${STEM[mutated]} extra\n\n${STEM[mutated]}-mutated\n`, 'utf-8');
|
|
298
|
+
git('add', '--', mutated);
|
|
299
|
+
git('commit', '-m', 'mutate a flushed file');
|
|
300
|
+
const resumer = new ScriptedEmbedder();
|
|
301
|
+
const result = await run(resumer, true);
|
|
302
|
+
// The changed-since-epoch flushed file re-embeds alongside the
|
|
303
|
+
// never-flushed one; the untouched flushed file stays skipped.
|
|
304
|
+
expect(result.filesProcessed).toBe(2);
|
|
305
|
+
expect(resumer.allText()).toContain(`${STEM[mutated]}-mutated`);
|
|
306
|
+
expect(resumer.allText()).toContain(`${STEM[missing]}-content-1`);
|
|
307
|
+
expect(resumer.allText()).not.toContain(`${STEM[untouched]}-content-1`);
|
|
308
|
+
});
|
|
309
|
+
it('GT round: a completed file EMPTIED since the epoch purges its stale rows on resume', { timeout: HEAVY_TIMEOUT_MS }, async () => {
|
|
310
|
+
await crashFullSync();
|
|
311
|
+
const missing = unflushedFile();
|
|
312
|
+
const [emptied] = ALL_FILES.filter((f) => f !== missing);
|
|
313
|
+
// The file now yields ZERO chunks. Its old rows must still purge —
|
|
314
|
+
// after this run the baseline advances past the change, so no later
|
|
315
|
+
// incremental diff revisits it and stale rows would be searchable
|
|
316
|
+
// forever (#2569 Greptile P1).
|
|
317
|
+
fs.writeFileSync(path.join(tmpDir, emptied), `# ${STEM[emptied]}\n`, 'utf-8');
|
|
318
|
+
git('add', '--', emptied);
|
|
319
|
+
git('commit', '-m', 'empty a flushed file');
|
|
320
|
+
const resumer = new ScriptedEmbedder();
|
|
321
|
+
const result = await run(resumer, true);
|
|
322
|
+
// The emptied file's 80 rows are gone; the never-flushed file's 80 landed.
|
|
323
|
+
expect(result.totalChunks).toBe(TOTAL_CHUNKS - 80);
|
|
324
|
+
expect(resumer.allText()).not.toContain(`${STEM[emptied]}-content-1`);
|
|
325
|
+
expect(fs.existsSync(checkpointPath())).toBe(false);
|
|
326
|
+
});
|
|
327
|
+
it('a corrupt checkpoint is dirty-but-unusable: the full re-index restarts from zero', { timeout: HEAVY_TIMEOUT_MS }, async () => {
|
|
328
|
+
await crashFullSync();
|
|
329
|
+
fs.writeFileSync(checkpointPath(), '{ not json !!', 'utf-8');
|
|
330
|
+
const resumer = new ScriptedEmbedder();
|
|
331
|
+
const result = await run(resumer, true);
|
|
332
|
+
expect(result.filesProcessed).toBe(3);
|
|
333
|
+
expect(fs.existsSync(checkpointPath())).toBe(false);
|
|
334
|
+
});
|
|
335
|
+
it('an embedder-config change makes checkpointed progress unusable — restart from zero', { timeout: HEAVY_TIMEOUT_MS }, async () => {
|
|
336
|
+
await crashFullSync();
|
|
337
|
+
const differentDims = new ScriptedEmbedder(8);
|
|
338
|
+
const result = await run(differentDims, true);
|
|
339
|
+
expect(result.filesProcessed).toBe(3);
|
|
340
|
+
expect(differentDims.allText()).toContain('alpha-content-1');
|
|
341
|
+
expect(fs.existsSync(checkpointPath())).toBe(false);
|
|
342
|
+
});
|
|
343
|
+
it('a marker-write failure aborts BEFORE the store is destroyed', { timeout: HEAVY_TIMEOUT_MS }, async () => {
|
|
344
|
+
const healthy = new ScriptedEmbedder();
|
|
345
|
+
const first = await run(healthy, false);
|
|
346
|
+
expect(first.totalChunks).toBe(TOTAL_CHUNKS);
|
|
347
|
+
// Occupy the checkpoint path with a directory. The run first reads it
|
|
348
|
+
// as a checkpoint (EISDIR → dirty-but-unusable), then the restart's
|
|
349
|
+
// marker write fails at the atomic rename — and the reset never runs.
|
|
350
|
+
fs.mkdirSync(checkpointPath(), { recursive: true });
|
|
351
|
+
await expect(run(new ScriptedEmbedder(), false)).rejects.toThrow();
|
|
352
|
+
fs.rmSync(checkpointPath(), { recursive: true, force: true });
|
|
353
|
+
fs.rmSync(`${checkpointPath()}.${process.pid}.tmp`, { force: true });
|
|
354
|
+
// The store survived the aborted run: a plain incremental sync sees a
|
|
355
|
+
// clean baseline and the full chunk count, not an empty or partial store.
|
|
356
|
+
const after = await run(new ScriptedEmbedder(), true);
|
|
357
|
+
expect(after.filesProcessed).toBe(0);
|
|
358
|
+
expect(after.totalChunks).toBe(first.totalChunks);
|
|
359
|
+
});
|
|
360
|
+
// ─── Falsification round 1 regressions ───
|
|
361
|
+
it('MAJOR 1: a store emptied under a live checkpoint is re-embedded in full, not trusted from paper', { timeout: HEAVY_TIMEOUT_MS }, async () => {
|
|
362
|
+
const first = await run(new ScriptedEmbedder(), false);
|
|
363
|
+
expect(first.totalChunks).toBe(TOTAL_CHUNKS);
|
|
364
|
+
await crashFullSync();
|
|
365
|
+
// Simulate the heal-by-nuke path (LanceStore.connect on a corrupt
|
|
366
|
+
// dataset): the store vanishes while the checkpoint still claims two
|
|
367
|
+
// files are embedded.
|
|
368
|
+
fs.rmSync(path.join(tmpDir, config.lanceDir), { recursive: true, force: true });
|
|
369
|
+
const resumer = new ScriptedEmbedder();
|
|
370
|
+
const result = await run(resumer, true);
|
|
371
|
+
// Pre-fold this embedded ONLY the unflushed file over an empty store
|
|
372
|
+
// and wrote a clean baseline — the #2562 lying sensor by another door.
|
|
373
|
+
expect(result.filesProcessed).toBe(3);
|
|
374
|
+
expect(result.totalChunks).toBe(TOTAL_CHUNKS);
|
|
375
|
+
expect(fs.existsSync(checkpointPath())).toBe(false);
|
|
376
|
+
});
|
|
377
|
+
it('MAJOR 2: untracked corpus files stay checkpointed across a resume (quota convergence)', { timeout: HEAVY_TIMEOUT_MS }, async () => {
|
|
378
|
+
// Make the corpus untracked-but-live: git has no history for it, so it
|
|
379
|
+
// is a PERMANENT member of git's changed-union. Pre-fold that union
|
|
380
|
+
// evicted these files from the completed set on every resume — quota
|
|
381
|
+
// re-spent on the same files forever, never converging.
|
|
382
|
+
git('rm', '--cached', '--', 'a.md', 'b.md', 'c.md');
|
|
383
|
+
git('commit', '-m', 'untrack corpus');
|
|
384
|
+
await crashFullSync();
|
|
385
|
+
const missing = unflushedFile();
|
|
386
|
+
const resumer = new ScriptedEmbedder();
|
|
387
|
+
const result = await run(resumer, true);
|
|
388
|
+
expect(result.filesProcessed).toBe(1);
|
|
389
|
+
expect(resumer.allText()).toContain(`${STEM[missing]}-content-1`);
|
|
390
|
+
expect(result.totalChunks).toBe(TOTAL_CHUNKS);
|
|
391
|
+
expect(fs.existsSync(checkpointPath())).toBe(false);
|
|
392
|
+
});
|
|
393
|
+
it('MAJOR 2: an untracked completed file MODIFIED after the crash still re-embeds (mtime arm)', { timeout: HEAVY_TIMEOUT_MS }, async () => {
|
|
394
|
+
git('rm', '--cached', '--', 'a.md', 'b.md', 'c.md');
|
|
395
|
+
git('commit', '-m', 'untrack corpus');
|
|
396
|
+
await crashFullSync();
|
|
397
|
+
const missing = unflushedFile();
|
|
398
|
+
const [mutated] = ALL_FILES.filter((f) => f !== missing);
|
|
399
|
+
// Ensure the edit's mtime lands measurably after the epoch start.
|
|
400
|
+
await new Promise((resolve) => setTimeout(resolve, 20));
|
|
401
|
+
fs.appendFileSync(path.join(tmpDir, mutated), `\n## ${STEM[mutated]} extra\n\n${STEM[mutated]}-mutated\n`, 'utf-8');
|
|
402
|
+
const resumer = new ScriptedEmbedder();
|
|
403
|
+
const result = await run(resumer, true);
|
|
404
|
+
expect(result.filesProcessed).toBe(2); // mutated (mtime > epoch) + never-flushed
|
|
405
|
+
expect(resumer.allText()).toContain(`${STEM[mutated]}-mutated`);
|
|
406
|
+
expect(resumer.allText()).toContain(`${STEM[missing]}-content-1`);
|
|
407
|
+
});
|
|
408
|
+
it('MAJOR 3: a checkpoint stamped with a fallback embedder identity restarts instead of resuming', { timeout: HEAVY_TIMEOUT_MS }, async () => {
|
|
409
|
+
// The crashing run's embedder reports an EFFECTIVE identity (the
|
|
410
|
+
// LazyEmbedder Ollama-fallback shape) that differs from the configured
|
|
411
|
+
// gemini fingerprint — the checkpoint must record the effective one.
|
|
412
|
+
const crasher = new ScriptedEmbedder();
|
|
413
|
+
crasher.failFromCall = 2;
|
|
414
|
+
crasher.describeEffective = () => ({
|
|
415
|
+
provider: 'ollama',
|
|
416
|
+
model: 'nomic-embed-text',
|
|
417
|
+
dimensions: 4,
|
|
418
|
+
});
|
|
419
|
+
await expect(run(crasher, false)).rejects.toThrow('RESOURCE_EXHAUSTED');
|
|
420
|
+
const cp = JSON.parse(fs.readFileSync(checkpointPath(), 'utf-8'));
|
|
421
|
+
expect(cp.embedder.provider).toBe('ollama');
|
|
422
|
+
// The resume runs under the configured gemini fingerprint — the
|
|
423
|
+
// stamped ollama progress is unusable: vector spaces must not mix.
|
|
424
|
+
const resumer = new ScriptedEmbedder();
|
|
425
|
+
const result = await run(resumer, true);
|
|
426
|
+
expect(result.filesProcessed).toBe(3);
|
|
427
|
+
expect(result.totalChunks).toBe(TOTAL_CHUNKS);
|
|
428
|
+
});
|
|
429
|
+
it('F2: a PERSISTENT fallback resumes as itself instead of restart-looping', { timeout: HEAVY_TIMEOUT_MS }, async () => {
|
|
430
|
+
const ollamaId = { provider: 'ollama', model: 'nomic-embed-text', dimensions: 4 };
|
|
431
|
+
const crasher = new ScriptedEmbedder();
|
|
432
|
+
crasher.failFromCall = 2;
|
|
433
|
+
crasher.describeEffective = () => ollamaId;
|
|
434
|
+
await expect(run(crasher, false)).rejects.toThrow('RESOURCE_EXHAUSTED');
|
|
435
|
+
const missing = unflushedFile();
|
|
436
|
+
// The fallback persists into the next run: it resolves to the SAME
|
|
437
|
+
// effective identity, so the epoch continues. Pre-fold, the gate
|
|
438
|
+
// compared the stamped ollama identity against the CONFIG (gemini)
|
|
439
|
+
// fingerprint and restart-looped forever, resetting the store on
|
|
440
|
+
// every attempt — a corpus needing more than one run never completed.
|
|
441
|
+
const resumer = new ScriptedEmbedder();
|
|
442
|
+
resumer.resolveEffective = () => Promise.resolve(ollamaId);
|
|
443
|
+
const result = await run(resumer, true);
|
|
444
|
+
expect(result.filesProcessed).toBe(1);
|
|
445
|
+
expect(resumer.allText()).toContain(`${STEM[missing]}-content-1`);
|
|
446
|
+
expect(result.totalChunks).toBe(TOTAL_CHUNKS);
|
|
447
|
+
expect(fs.existsSync(checkpointPath())).toBe(false);
|
|
448
|
+
});
|
|
449
|
+
it('F1: a run falling back mid-resume restarts BEFORE inserting into the genuine epoch', { timeout: HEAVY_TIMEOUT_MS }, async () => {
|
|
450
|
+
await crashFullSync(); // checkpoint carries the genuine (gemini) fingerprint
|
|
451
|
+
// This run's embedder RESOLVES to an ollama fallback. The gate must
|
|
452
|
+
// compare effective-vs-effective and restart — pre-fold it compared
|
|
453
|
+
// config-vs-stamped (gemini vs gemini → match) and ollama vectors were
|
|
454
|
+
// inserted beside the epoch's gemini rows, mixing vector spaces.
|
|
455
|
+
const resumer = new ScriptedEmbedder();
|
|
456
|
+
resumer.resolveEffective = () => Promise.resolve({ provider: 'ollama', model: 'nomic-embed-text', dimensions: 4 });
|
|
457
|
+
const result = await run(resumer, true);
|
|
458
|
+
expect(result.filesProcessed).toBe(3);
|
|
459
|
+
expect(result.totalChunks).toBe(TOTAL_CHUNKS);
|
|
460
|
+
expect(fs.existsSync(checkpointPath())).toBe(false);
|
|
461
|
+
});
|
|
462
|
+
it('MINOR 10: a zero-work resume clears the marker WITHOUT requiring an embedder', { timeout: HEAVY_TIMEOUT_MS }, async () => {
|
|
463
|
+
// Epoch crashed between its final flush and the marker delete: the
|
|
464
|
+
// store is complete but the marker survives. The resume has nothing to
|
|
465
|
+
// embed, so the identity gate must not force embedder resolution — a
|
|
466
|
+
// missing embedder would otherwise wedge the epoch closed forever.
|
|
467
|
+
const first = await run(new ScriptedEmbedder(), false);
|
|
468
|
+
expect(first.totalChunks).toBe(TOTAL_CHUNKS);
|
|
469
|
+
const headSha = execFileSync('git', ['rev-parse', 'HEAD'], {
|
|
470
|
+
cwd: tmpDir,
|
|
471
|
+
encoding: 'utf-8',
|
|
472
|
+
}).trim();
|
|
473
|
+
fs.writeFileSync(checkpointPath(), JSON.stringify({
|
|
474
|
+
startedHeadSha: headSha,
|
|
475
|
+
startedAt: Date.now(),
|
|
476
|
+
indexExclusionHash: 'whatever',
|
|
477
|
+
embedder: { provider: 'gemini', model: 'test-model', dimensions: 4 },
|
|
478
|
+
completedFiles: ALL_FILES,
|
|
479
|
+
}), 'utf-8');
|
|
480
|
+
const unresolvable = new ScriptedEmbedder();
|
|
481
|
+
unresolvable.resolveEffective = () => Promise.reject(new Error('no embedder available'));
|
|
482
|
+
const result = await run(unresolvable, true);
|
|
483
|
+
expect(result.filesProcessed).toBe(0);
|
|
484
|
+
expect(unresolvable.embedCalls).toHaveLength(0);
|
|
485
|
+
expect(result.totalChunks).toBe(TOTAL_CHUNKS);
|
|
486
|
+
expect(fs.existsSync(checkpointPath())).toBe(false);
|
|
487
|
+
});
|
|
488
|
+
it('ROUND 4: a RESOLVABLE identity mismatch restarts even with zero work remaining', { timeout: HEAVY_TIMEOUT_MS }, async () => {
|
|
489
|
+
// The zero-work exemption is for RESOLUTION FAILURE only. A resolvable
|
|
490
|
+
// mismatch with nothing left to embed must still restart: clearing the
|
|
491
|
+
// marker would rewrite index-meta to the new identity and launder the
|
|
492
|
+
// DATABASE_MISMATCH evidence over a store built in the old space.
|
|
493
|
+
const first = await run(new ScriptedEmbedder(), false);
|
|
494
|
+
expect(first.totalChunks).toBe(TOTAL_CHUNKS);
|
|
495
|
+
const headSha = execFileSync('git', ['rev-parse', 'HEAD'], {
|
|
496
|
+
cwd: tmpDir,
|
|
497
|
+
encoding: 'utf-8',
|
|
498
|
+
}).trim();
|
|
499
|
+
fs.writeFileSync(checkpointPath(), JSON.stringify({
|
|
500
|
+
startedHeadSha: headSha,
|
|
501
|
+
startedAt: Date.now(),
|
|
502
|
+
indexExclusionHash: 'whatever',
|
|
503
|
+
embedder: { provider: 'ollama', model: 'nomic-embed-text', dimensions: 4 },
|
|
504
|
+
completedFiles: ALL_FILES,
|
|
505
|
+
}), 'utf-8');
|
|
506
|
+
// Plain resolvable embedder — falls back to the config (gemini)
|
|
507
|
+
// fingerprint, which mismatches the stamped ollama identity.
|
|
508
|
+
const resumer = new ScriptedEmbedder();
|
|
509
|
+
const result = await run(resumer, true);
|
|
510
|
+
expect(result.filesProcessed).toBe(3); // restarted, not cleared
|
|
511
|
+
expect(result.totalChunks).toBe(TOTAL_CHUNKS);
|
|
512
|
+
expect(fs.existsSync(checkpointPath())).toBe(false);
|
|
513
|
+
});
|
|
514
|
+
it('MAJOR 4: a non-git project resumes via the mtime arm instead of restarting every run', { timeout: HEAVY_TIMEOUT_MS }, async () => {
|
|
515
|
+
const dir = fs.mkdtempSync(path.join(os.tmpdir(), 'totem-nongit-'));
|
|
516
|
+
try {
|
|
517
|
+
writeCorpusFileTo(dir, 'a.md', 'alpha');
|
|
518
|
+
writeCorpusFileTo(dir, 'b.md', 'bravo');
|
|
519
|
+
writeCorpusFileTo(dir, 'c.md', 'charlie');
|
|
520
|
+
const crasher = new ScriptedEmbedder();
|
|
521
|
+
crasher.failFromCall = 2;
|
|
522
|
+
await expect(runSync(config, { projectRoot: dir, incremental: false, embedder: crasher })).rejects.toThrow('RESOURCE_EXHAUSTED');
|
|
523
|
+
const cpPath = path.join(dir, '.totem', FULL_SYNC_CHECKPOINT_FILE);
|
|
524
|
+
const cp = JSON.parse(fs.readFileSync(cpPath, 'utf-8'));
|
|
525
|
+
expect(cp.startedHeadSha).toBeNull();
|
|
526
|
+
expect(cp.completedFiles).toHaveLength(2);
|
|
527
|
+
const resumer = new ScriptedEmbedder();
|
|
528
|
+
const result = await runSync(config, {
|
|
529
|
+
projectRoot: dir,
|
|
530
|
+
incremental: true,
|
|
531
|
+
embedder: resumer,
|
|
532
|
+
});
|
|
533
|
+
// Pre-fold, null startedHeadSha mapped to restart-from-zero on every
|
|
534
|
+
// run — the population with no diff signal could never converge.
|
|
535
|
+
expect(result.filesProcessed).toBe(1);
|
|
536
|
+
expect(result.totalChunks).toBe(TOTAL_CHUNKS);
|
|
537
|
+
expect(fs.existsSync(cpPath)).toBe(false);
|
|
538
|
+
}
|
|
539
|
+
finally {
|
|
540
|
+
cleanTmpDir(dir);
|
|
541
|
+
}
|
|
542
|
+
});
|
|
543
|
+
});
|
|
147
544
|
describe('buildIndexManifest', () => {
|
|
148
545
|
const writtenAt = new Date('2026-05-07T00:00:00.000Z');
|
|
149
546
|
const docs = [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.test.js","sourceRoot":"","sources":["../../src/ingest/pipeline.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pipeline.test.js","sourceRoot":"","sources":["../../src/ingest/pipeline.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAGrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EACL,kBAAkB,EAClB,yBAAyB,EACzB,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,OAAO,GACR,MAAM,eAAe,CAAC;AAEvB,iFAAiF;AACjF,gEAAgE;AAEhE,MAAM,eAAe,GAAG,uBAAuB,CAAC;AAEhD,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,IAAI,MAAc,CAAC;IAEnB,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,mBAAmB,CAAC,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,WAAW,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QACrD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACpC,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEvC,MAAM,KAAK,GAAG,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QACrE,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;QAE5E,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAChD,MAAM,CAAC,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QACrD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACpC,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEvC,MAAM,KAAK,GAAG,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;QACjE,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;QAE5D,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QACrD,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QACrD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACpC,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACvC,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,kBAAkB,EAAE,OAAO,CAAC,CAAC;QAEzD,IAAI,MAAM,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;QAC3D,CAAC;QAAC,MAAM,CAAC;YACP,WAAW;QACb,CAAC;QACD,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC5B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,4CAA4C,EAAE,GAAG,EAAE;IAC1D,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACzE,MAAM,CAAC,kBAAkB,CAAC,CAAC,UAAU,EAAE,aAAa,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;IACjG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,CAAC,kBAAkB,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC7F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wFAAwF,EAAE,GAAG,EAAE;QAChG,kFAAkF;QAClF,MAAM,CAAC,kBAAkB,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2FAA2F,EAAE,GAAG,EAAE;QACnG,MAAM,CAAC,kBAAkB,CAAC,CAAC,iBAAiB,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACjG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4FAA4F,EAAE,GAAG,EAAE;QACpG,MAAM,CAAC,kBAAkB,CAAC,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+FAA+F,EAAE,GAAG,EAAE;QACvG,MAAM,CAAC,kBAAkB,CAAC,CAAC,yBAAyB,CAAC,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YACtF,yBAAyB;SAC1B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oFAAoF,EAAE,GAAG,EAAE;QAC5F,2EAA2E;QAC3E,iDAAiD;QACjD,MAAM,CAAC,kBAAkB,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;IAC5F,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,sDAAsD,EAAE,GAAG,EAAE;IACpE,EAAE,CAAC,qEAAqE,EAAE,GAAG,EAAE;QAC7E,0EAA0E;QAC1E,sCAAsC;QACtC,MAAM,CAAC,qBAAqB,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAC1D,qBAAqB,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAChD,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,CAAC,qBAAqB,CAAC,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAC9D,qBAAqB,CAAC,CAAC,SAAS,CAAC,CAAC,CACnC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,MAAM,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC,CAAC;QAClE,MAAM,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,mEAAmE,EAAE,GAAG,EAAE;IACjF,EAAE,CAAC,4EAA4E,EAAE,GAAG,EAAE;QACpF,8EAA8E;QAC9E,8EAA8E;QAC9E,wCAAwC;QACxC,MAAM,CAAC,yBAAyB,CAAC,CAAC,UAAU,EAAE,eAAe,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YACrF,eAAe;SAChB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+FAA+F,EAAE,GAAG,EAAE;QACvG,MAAM,QAAQ,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAC1C,kFAAkF;QAClF,MAAM,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QACnF,oFAAoF;QACpF,MAAM,CAAC,yBAAyB,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAC3F,EAAE,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gIAAgI,EAAE,GAAG,EAAE;QACxI,yEAAyE;QACzE,yEAAyE;QACzE,6EAA6E;QAC7E,MAAM,CAAC,yBAAyB,CAAC,CAAC,UAAU,EAAE,mBAAmB,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YACzF,mBAAmB;SACpB,CAAC,CAAC;QACH,4EAA4E;QAC5E,yDAAyD;QACzD,MAAM,CAAC,yBAAyB,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAC3F,EAAE,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6FAA6F,EAAE,GAAG,EAAE;QACrG,MAAM,CAAC,yBAAyB,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6EAA6E,EAAE,GAAG,EAAE;QACrF,MAAM,CAAC,yBAAyB,CAAC,CAAC,aAAa,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;YACzE,aAAa;YACb,UAAU;SACX,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACnE,MAAM,MAAM,GAAgB,iBAAiB,CAAC,KAAK,CAAC;YAClD,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,EAAE,CAAC;SAC3E,CAAC,CAAC;QAEH,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAC7F,kCAAkC,CACnC,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,+EAA+E;AAC/E,EAAE;AACF,wEAAwE;AACxE,8EAA8E;AAC9E,6EAA6E;AAC7E,0EAA0E;AAC1E,wEAAwE;AAExE,MAAM,yBAAyB,GAAG,iCAAiC,CAAC;AACpE,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEhC,8EAA8E;AAC9E,MAAM,gBAAgB;IACX,UAAU,CAAS;IAC5B,UAAU,GAAe,EAAE,CAAC;IAC5B,YAAY,GAAkB,IAAI,CAAC;IACnC,MAAM,CAA2B;IACjC,iBAAiB,CAAwE;IACzF,gBAAgB,CAA0E;IAClF,KAAK,GAAG,CAAC,CAAC;IAElB,YAAY,aAAqB,CAAC;QAChC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,KAAe;QACnB,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;QAChB,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAClE,OAAO,OAAO,CAAC,MAAM,CACnB,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,oCAAoC,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAChF,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;QACjC,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACtF,CAAC;IAED,0EAA0E;IAC1E,OAAO;QACL,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;CACF;AAED,QAAQ,CAAC,kCAAkC,EAAE,GAAG,EAAE;IAChD,IAAI,MAAc,CAAC;IACnB,IAAI,MAAmB,CAAC;IAExB,MAAM,GAAG,GAAG,CAAC,QAAkB,EAAE,WAAoB,EAAE,EAAE,CACvD,OAAO,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,CAAC;IAElE,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,yBAAyB,CAAC,CAAC;IACpF,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,uBAAuB,CAAC,CAAC;IACjF,MAAM,GAAG,GAAG,CAAC,GAAG,IAAc,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAE7F;;;;sCAIkC;IAClC,MAAM,YAAY,GAAG,GAAG,CAAC;IACzB,MAAM,iBAAiB,GAAG,CAAC,GAAW,EAAE,IAAY,EAAE,IAAY,EAAE,EAAE;QACpE,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CACzB,EAAE,MAAM,EAAE,EAAE,EAAE,EACd,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,IAAI,YAAY,CAAC,IAAI,CACtD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,KAAK,IAAI,OAAO,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAC;IAC9E,CAAC,CAAC;IACF,MAAM,eAAe,GAAG,CAAC,IAAY,EAAE,IAAY,EAAE,EAAE,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAE9F,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,iBAAiB,CAAC,CAAC,CAAC;QACnE,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC;YAC/B,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,EAAE,CAAC;YACvE,SAAS,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE;SACtE,CAAC,CAAC;QACH,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACjC,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACjC,eAAe,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACnC,GAAG,CAAC,MAAM,CAAC,CAAC;QACZ,GAAG,CAAC,QAAQ,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC;QAC7C,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;QACnC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACzC,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,WAAW,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,MAAM,IAAI,GAA2B,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAE7F,MAAM,cAAc,GAAG,GAAG,EAAE,CAC1B,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,cAAc,EAAE,EAAE,OAAO,CAAC,CAAiC,CAAC;IAEzF;gFAC4E;IAC5E,MAAM,aAAa,GAAG,GAAG,EAAE;QACzB,MAAM,EAAE,cAAc,EAAE,GAAG,cAAc,EAAE,CAAC;QAC5C,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACrE,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAChC,OAAO,OAAO,CAAC,CAAC,CAAE,CAAC;IACrB,CAAC,CAAC;IAEF,iFAAiF;IACjF,KAAK,UAAU,aAAa;QAC1B,MAAM,OAAO,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACvC,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC;QACzB,MAAM,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QACxE,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,EAAE,CACA,qFAAqF,EACrF,EAAE,OAAO,EAAE,gBAAgB,EAAE,EAC7B,KAAK,IAAI,EAAE;QACT,MAAM,OAAO,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACvC,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC;QACzB,IAAI,qBAAqB,GAAG,KAAK,CAAC;QAClC,OAAO,CAAC,MAAM,GAAG,GAAG,EAAE;YACpB,qBAAqB,KAAK,EAAE,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC;QAC5D,CAAC,CAAC;QAEF,MAAM,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QAExE,oEAAoE;QACpE,uDAAuD;QACvD,MAAM,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEzC,uEAAuE;QACvE,sDAAsD;QACtD,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,cAAc,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;QAClE,MAAM,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC1C,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACxF,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;QACxF,MAAM,CAAC,OAAO,EAAE,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChD,6DAA6D;QAC7D,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrD,CAAC,CACF,CAAC;IAEF,EAAE,CACA,sHAAsH,EACtH,EAAE,OAAO,EAAE,gBAAgB,EAAE,EAC7B,KAAK,IAAI,EAAE;QACT,8DAA8D;QAC9D,oEAAoE;QACpE,0DAA0D;QAC1D,6DAA6D;QAC7D,oEAAoE;QACpE,sEAAsE;QACtE,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,IAAI,gBAAgB,EAAE,EAAE,KAAK,CAAC,CAAC;QACvD,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC7C,MAAM,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,EAAE,OAAO,CAAC,CAAC;QAE7D,MAAM,aAAa,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC;QAEvD,kEAAkE;QAClE,sBAAsB;QACtB,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAEnE,MAAM,OAAO,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,qBAAqB;QAE9D,gEAAgE;QAChE,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAClE,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;YAC3B,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACrE,CAAC;QAED,oEAAoE;QACpE,0DAA0D;QAC1D,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC9C,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;QACpE,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE;YACzD,GAAG,EAAE,MAAM;YACX,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC,CACF,CAAC;IAEF,EAAE,CACA,4DAA4D,EAC5D,EAAE,OAAO,EAAE,gBAAgB,EAAE,EAC7B,KAAK,IAAI,EAAE;QACT,MAAM,aAAa,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;QAChC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC;QAEpE,EAAE,CAAC,cAAc,CACf,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAQ,CAAC,EAC3B,QAAQ,IAAI,CAAC,OAAQ,CAAC,aAAa,IAAI,CAAC,OAAQ,CAAC,YAAY,EAC7D,OAAO,CACR,CAAC;QACF,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,OAAQ,CAAC,CAAC;QAC3B,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,uBAAuB,CAAC,CAAC;QAE7C,MAAM,OAAO,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAExC,+DAA+D;QAC/D,+DAA+D;QAC/D,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,OAAQ,CAAC,UAAU,CAAC,CAAC;QACjE,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAClE,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,SAAU,CAAC,YAAY,CAAC,CAAC;IAC3E,CAAC,CACF,CAAC;IAEF,EAAE,CACA,oFAAoF,EACpF,EAAE,OAAO,EAAE,gBAAgB,EAAE,EAC7B,KAAK,IAAI,EAAE;QACT,MAAM,aAAa,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;QAChC,MAAM,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC;QAEzD,mEAAmE;QACnE,oEAAoE;QACpE,kEAAkE;QAClE,+BAA+B;QAC/B,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAQ,CAAC,EAAE,KAAK,IAAI,CAAC,OAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAChF,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,OAAQ,CAAC,CAAC;QAC3B,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,sBAAsB,CAAC,CAAC;QAE5C,MAAM,OAAO,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAExC,2EAA2E;QAC3E,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC;QACnD,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,OAAQ,CAAC,YAAY,CAAC,CAAC;QACvE,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtD,CAAC,CACF,CAAC;IAEF,EAAE,CACA,kFAAkF,EAClF,EAAE,OAAO,EAAE,gBAAgB,EAAE,EAC7B,KAAK,IAAI,EAAE;QACT,MAAM,aAAa,EAAE,CAAC;QACtB,EAAE,CAAC,aAAa,CAAC,cAAc,EAAE,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;QAE7D,MAAM,OAAO,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAExC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtD,CAAC,CACF,CAAC;IAEF,EAAE,CACA,oFAAoF,EACpF,EAAE,OAAO,EAAE,gBAAgB,EAAE,EAC7B,KAAK,IAAI,EAAE;QACT,MAAM,aAAa,EAAE,CAAC;QAEtB,MAAM,aAAa,GAAG,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QAE9C,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QAC7D,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtD,CAAC,CACF,CAAC;IAEF,EAAE,CACA,6DAA6D,EAC7D,EAAE,OAAO,EAAE,gBAAgB,EAAE,EAC7B,KAAK,IAAI,EAAE;QACT,MAAM,OAAO,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACxC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAE7C,sEAAsE;QACtE,oEAAoE;QACpE,sEAAsE;QACtE,EAAE,CAAC,SAAS,CAAC,cAAc,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,gBAAgB,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QAEnE,EAAE,CAAC,MAAM,CAAC,cAAc,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9D,EAAE,CAAC,MAAM,CAAC,GAAG,cAAc,EAAE,IAAI,OAAO,CAAC,GAAG,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAErE,sEAAsE;QACtE,0EAA0E;QAC1E,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,IAAI,gBAAgB,EAAE,EAAE,IAAI,CAAC,CAAC;QACtD,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACpD,CAAC,CACF,CAAC;IAEF,4CAA4C;IAE5C,EAAE,CACA,iGAAiG,EACjG,EAAE,OAAO,EAAE,gBAAgB,EAAE,EAC7B,KAAK,IAAI,EAAE;QACT,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,IAAI,gBAAgB,EAAE,EAAE,KAAK,CAAC,CAAC;QACvD,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC7C,MAAM,aAAa,EAAE,CAAC;QAEtB,kEAAkE;QAClE,qEAAqE;QACrE,sBAAsB;QACtB,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAEhF,MAAM,OAAO,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAExC,qEAAqE;QACrE,uEAAuE;QACvE,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC9C,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtD,CAAC,CACF,CAAC;IAEF,EAAE,CACA,uFAAuF,EACvF,EAAE,OAAO,EAAE,gBAAgB,EAAE,EAC7B,KAAK,IAAI,EAAE;QACT,uEAAuE;QACvE,oEAAoE;QACpE,qEAAqE;QACrE,wDAAwD;QACxD,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACpD,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC;QAEtC,MAAM,aAAa,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;QAEhC,MAAM,OAAO,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAExC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAClE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC9C,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtD,CAAC,CACF,CAAC;IAEF,EAAE,CACA,2FAA2F,EAC3F,EAAE,OAAO,EAAE,gBAAgB,EAAE,EAC7B,KAAK,IAAI,EAAE;QACT,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACpD,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC;QAEtC,MAAM,aAAa,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;QAChC,MAAM,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC;QAEzD,kEAAkE;QAClE,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;QACxD,EAAE,CAAC,cAAc,CACf,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAQ,CAAC,EAC3B,QAAQ,IAAI,CAAC,OAAQ,CAAC,aAAa,IAAI,CAAC,OAAQ,CAAC,YAAY,EAC7D,OAAO,CACR,CAAC;QAEF,MAAM,OAAO,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAExC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,0CAA0C;QACjF,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,OAAQ,CAAC,UAAU,CAAC,CAAC;QACjE,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACpE,CAAC,CACF,CAAC;IAEF,EAAE,CACA,8FAA8F,EAC9F,EAAE,OAAO,EAAE,gBAAgB,EAAE,EAC7B,KAAK,IAAI,EAAE;QACT,iEAAiE;QACjE,uEAAuE;QACvE,qEAAqE;QACrE,MAAM,OAAO,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACvC,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC;QACzB,OAAO,CAAC,iBAAiB,GAAG,GAAG,EAAE,CAAC,CAAC;YACjC,QAAQ,EAAE,QAAQ;YAClB,KAAK,EAAE,kBAAkB;YACzB,UAAU,EAAE,CAAC;SACd,CAAC,CAAC;QACH,MAAM,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QACxE,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,cAAc,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;QAClE,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE5C,gEAAgE;QAChE,mEAAmE;QACnE,MAAM,OAAO,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACxC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAChD,CAAC,CACF,CAAC;IAEF,EAAE,CACA,wEAAwE,EACxE,EAAE,OAAO,EAAE,gBAAgB,EAAE,EAC7B,KAAK,IAAI,EAAE;QACT,MAAM,QAAQ,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;QAClF,MAAM,OAAO,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACvC,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC;QACzB,OAAO,CAAC,iBAAiB,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC;QAC3C,MAAM,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QACxE,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;QAEhC,mEAAmE;QACnE,iEAAiE;QACjE,mEAAmE;QACnE,iEAAiE;QACjE,sEAAsE;QACtE,MAAM,OAAO,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACvC,OAAO,CAAC,gBAAgB,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAExC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAClE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC9C,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtD,CAAC,CACF,CAAC;IAEF,EAAE,CACA,oFAAoF,EACpF,EAAE,OAAO,EAAE,gBAAgB,EAAE,EAC7B,KAAK,IAAI,EAAE;QACT,MAAM,aAAa,EAAE,CAAC,CAAC,sDAAsD;QAE7E,oEAAoE;QACpE,oEAAoE;QACpE,uEAAuE;QACvE,iEAAiE;QACjE,MAAM,OAAO,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACvC,OAAO,CAAC,gBAAgB,GAAG,GAAG,EAAE,CAC9B,OAAO,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;QACpF,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAExC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC9C,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtD,CAAC,CACF,CAAC;IAEF,EAAE,CACA,8EAA8E,EAC9E,EAAE,OAAO,EAAE,gBAAgB,EAAE,EAC7B,KAAK,IAAI,EAAE;QACT,mEAAmE;QACnE,uEAAuE;QACvE,qEAAqE;QACrE,mEAAmE;QACnE,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,IAAI,gBAAgB,EAAE,EAAE,KAAK,CAAC,CAAC;QACvD,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE;YACzD,GAAG,EAAE,MAAM;YACX,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC,IAAI,EAAE,CAAC;QACV,EAAE,CAAC,aAAa,CACd,cAAc,EAAE,EAChB,IAAI,CAAC,SAAS,CAAC;YACb,cAAc,EAAE,OAAO;YACvB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,kBAAkB,EAAE,UAAU;YAC9B,QAAQ,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE;YACpE,cAAc,EAAE,SAAS;SAC1B,CAAC,EACF,OAAO,CACR,CAAC;QAEF,MAAM,YAAY,GAAG,IAAI,gBAAgB,EAAE,CAAC;QAC5C,YAAY,CAAC,gBAAgB,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC;QACzF,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QAE7C,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAChD,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC9C,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtD,CAAC,CACF,CAAC;IAEF,EAAE,CACA,gFAAgF,EAChF,EAAE,OAAO,EAAE,gBAAgB,EAAE,EAC7B,KAAK,IAAI,EAAE;QACT,uEAAuE;QACvE,uEAAuE;QACvE,sEAAsE;QACtE,kEAAkE;QAClE,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,IAAI,gBAAgB,EAAE,EAAE,KAAK,CAAC,CAAC;QACvD,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE;YACzD,GAAG,EAAE,MAAM;YACX,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC,IAAI,EAAE,CAAC;QACV,EAAE,CAAC,aAAa,CACd,cAAc,EAAE,EAChB,IAAI,CAAC,SAAS,CAAC;YACb,cAAc,EAAE,OAAO;YACvB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,kBAAkB,EAAE,UAAU;YAC9B,QAAQ,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,CAAC,EAAE;YAC1E,cAAc,EAAE,SAAS;SAC1B,CAAC,EACF,OAAO,CACR,CAAC;QAEF,gEAAgE;QAChE,6DAA6D;QAC7D,MAAM,OAAO,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAExC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,yBAAyB;QAChE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC9C,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtD,CAAC,CACF,CAAC;IAEF,EAAE,CACA,sFAAsF,EACtF,EAAE,OAAO,EAAE,gBAAgB,EAAE,EAC7B,KAAK,IAAI,EAAE;QACT,MAAM,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,eAAe,CAAC,CAAC,CAAC;QACpE,IAAI,CAAC;YACH,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YACxC,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YACxC,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;YAE1C,MAAM,OAAO,GAAG,IAAI,gBAAgB,EAAE,CAAC;YACvC,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC;YACzB,MAAM,MAAM,CACV,OAAO,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAC7E,CAAC,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;YAExC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,yBAAyB,CAAC,CAAC;YACnE,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;YACxD,MAAM,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE,CAAC;YACrC,MAAM,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAE1C,MAAM,OAAO,GAAG,IAAI,gBAAgB,EAAE,CAAC;YACvC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE;gBACnC,WAAW,EAAE,GAAG;gBAChB,WAAW,EAAE,IAAI;gBACjB,QAAQ,EAAE,OAAO;aAClB,CAAC,CAAC;YAEH,qEAAqE;YACrE,iEAAiE;YACjE,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC9C,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC;gBAAS,CAAC;YACT,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,0BAA0B,CAAC,CAAC;IACvD,MAAM,IAAI,GAAG;QACX;YACE,UAAU,EAAE,UAAU;YACtB,MAAM,EAAE,OAAO;YACf,QAAQ,EAAE,CAAC;YACX,UAAU,EAAE,0BAA0B;SACvC;KACF,CAAC;IAEF,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,CAAC,GAAG,kBAAkB,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;QAChF,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QACnD,MAAM,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,CAAC,GAAG,kBAAkB,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;QAChF,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,CAAC,GAAG,kBAAkB,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;QAChF,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,MAAM,CAAC,GAAG,kBAAkB,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC,CAAC;QACtF,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,CAAC,GAAG,kBAAkB,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QAC5E,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,aAAa,EAAE,CAAC;QACpC,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,CAAC,GAAG,kBAAkB,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QAC1E,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0EAA0E,EAAE,GAAG,EAAE;QAClF,MAAM,CAAC,GAAG,kBAAkB,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;QACjF,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QACjD,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACxC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gFAAgF,EAAE,GAAG,EAAE;QACxF,MAAM,CAAC,GAAG,kBAAkB,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;QAChF,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/dist/ingest/sync.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export type { ResolvedFile } from './file-resolver.js';
|
|
2
|
-
export { getChangedFiles, getHeadSha, resolveFiles } from './file-resolver.js';
|
|
2
|
+
export { getChangedFiles, getChangedFilesDetailed, getHeadSha, resolveFiles, } from './file-resolver.js';
|
|
3
3
|
export type { IndexManifest, ManifestDocument } from './pipeline.js';
|
|
4
|
-
export { buildIndexManifest, INDEX_MANIFEST_SCHEMA, runSync, verifyIndexMeta } from './pipeline.js';
|
|
4
|
+
export { buildIndexManifest, hasFullSyncCheckpoint, INDEX_MANIFEST_SCHEMA, runSync, verifyIndexMeta, } from './pipeline.js';
|
|
5
5
|
//# sourceMappingURL=sync.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/ingest/sync.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/ingest/sync.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EACL,eAAe,EACf,uBAAuB,EACvB,UAAU,EACV,YAAY,GACb,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,OAAO,EACP,eAAe,GAChB,MAAM,eAAe,CAAC"}
|
package/dist/ingest/sync.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { getChangedFiles, getHeadSha, resolveFiles } from './file-resolver.js';
|
|
2
|
-
export { buildIndexManifest, INDEX_MANIFEST_SCHEMA, runSync, verifyIndexMeta } from './pipeline.js';
|
|
1
|
+
export { getChangedFiles, getChangedFilesDetailed, getHeadSha, resolveFiles, } from './file-resolver.js';
|
|
2
|
+
export { buildIndexManifest, hasFullSyncCheckpoint, INDEX_MANIFEST_SCHEMA, runSync, verifyIndexMeta, } from './pipeline.js';
|
|
3
3
|
//# sourceMappingURL=sync.js.map
|
package/dist/ingest/sync.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/ingest/sync.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/ingest/sync.ts"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EACf,uBAAuB,EACvB,UAAU,EACV,YAAY,GACb,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,OAAO,EACP,eAAe,GAChB,MAAM,eAAe,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import type { ChunkStrategy, ContentType } from './config-schema.js';
|
|
3
|
+
import type { Embedder } from './embedders/embedder.js';
|
|
3
4
|
/**
|
|
4
5
|
* A single chunk produced by any chunker.
|
|
5
6
|
* This is the unit that gets embedded and stored.
|
|
@@ -131,6 +132,11 @@ export interface SyncOptions {
|
|
|
131
132
|
changedFiles?: string[];
|
|
132
133
|
/** Callback for progress reporting */
|
|
133
134
|
onProgress?: (message: string) => void;
|
|
135
|
+
/**
|
|
136
|
+
* Injection seam for the embedder (tests / embedding hosts). When absent,
|
|
137
|
+
* the pipeline builds one from `config.embedding` via `createEmbedder`.
|
|
138
|
+
*/
|
|
139
|
+
embedder?: Embedder;
|
|
134
140
|
}
|
|
135
141
|
/**
|
|
136
142
|
* Persisted state for incremental sync tracking.
|
|
@@ -149,6 +155,39 @@ export interface SyncState {
|
|
|
149
155
|
*/
|
|
150
156
|
indexExclusionHash?: string;
|
|
151
157
|
}
|
|
158
|
+
/**
|
|
159
|
+
* Persisted checkpoint for a full re-index in progress (mmnto-ai/totem#2562).
|
|
160
|
+
*
|
|
161
|
+
* The file's EXISTENCE is the dirty marker: it is written (atomically) before
|
|
162
|
+
* `store.reset()` and deleted only on successful completion, so a crashed
|
|
163
|
+
* `--full` leaves a detectable, resumable state instead of a partial store
|
|
164
|
+
* behind a stale `SyncState` baseline — the lying "Sync complete: 0 files"
|
|
165
|
+
* sensor. `SyncState` itself keeps its clean "last successful sync" semantics.
|
|
166
|
+
*/
|
|
167
|
+
export interface FullSyncCheckpoint {
|
|
168
|
+
/** HEAD at epoch start; resume re-diffs against it so changed files re-embed. Null when git is unavailable. */
|
|
169
|
+
startedHeadSha: string | null;
|
|
170
|
+
/** Epoch start time (ms since Unix epoch) — provenance only */
|
|
171
|
+
startedAt: number;
|
|
172
|
+
/** Exclusion-set hash at epoch start — provenance; resume re-resolves the live set */
|
|
173
|
+
indexExclusionHash: string;
|
|
174
|
+
/**
|
|
175
|
+
* Resume-compatibility fingerprint. A mismatch with the current embedding
|
|
176
|
+
* config restarts the full sync from zero — vectors from two embedder
|
|
177
|
+
* configurations must never mix in one store.
|
|
178
|
+
*/
|
|
179
|
+
embedder: {
|
|
180
|
+
provider: string;
|
|
181
|
+
model: string;
|
|
182
|
+
dimensions: number;
|
|
183
|
+
};
|
|
184
|
+
/**
|
|
185
|
+
* Relative paths whose chunks are FULLY flushed to the store. Appended only
|
|
186
|
+
* after a successful flush; flushes happen at whole-file boundaries, so
|
|
187
|
+
* membership here means the file is complete in the store for this epoch.
|
|
188
|
+
*/
|
|
189
|
+
completedFiles: string[];
|
|
190
|
+
}
|
|
152
191
|
/**
|
|
153
192
|
* Options for search queries.
|
|
154
193
|
*/
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mmnto/totem",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.110.0",
|
|
4
4
|
"description": "Core engine for Totem, the local-first toolkit that keeps AI-agent work queryable, enforceable, and derivable as plain files in your codebase",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"engines": {
|