@intentic/iq-engine 1.176.3 → 1.209.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/README.md +61 -3
  2. package/dist/embed/vector-cache.d.ts +9 -0
  3. package/dist/embed/vector-cache.d.ts.map +1 -0
  4. package/dist/embed/vector-cache.js +103 -0
  5. package/dist/embed/vector-cache.js.map +1 -0
  6. package/dist/engines/semantic.d.ts +2 -1
  7. package/dist/engines/semantic.d.ts.map +1 -1
  8. package/dist/engines/semantic.js +51 -24
  9. package/dist/engines/semantic.js.map +1 -1
  10. package/dist/index.d.ts +17 -0
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +49 -16
  13. package/dist/index.js.map +1 -1
  14. package/dist/indexer/index-worker.d.ts +3 -0
  15. package/dist/indexer/index-worker.d.ts.map +1 -1
  16. package/dist/indexer/index-worker.js +26 -10
  17. package/dist/indexer/index-worker.js.map +1 -1
  18. package/dist/indexer/indexer.d.ts.map +1 -1
  19. package/dist/indexer/indexer.js +2 -1
  20. package/dist/indexer/indexer.js.map +1 -1
  21. package/dist/query/query-worker.d.ts +34 -0
  22. package/dist/query/query-worker.d.ts.map +1 -0
  23. package/dist/query/query-worker.js +38 -0
  24. package/dist/query/query-worker.js.map +1 -0
  25. package/dist/query/scorer.d.ts +22 -0
  26. package/dist/query/scorer.d.ts.map +1 -0
  27. package/dist/query/scorer.js +18 -0
  28. package/dist/query/scorer.js.map +1 -0
  29. package/dist/query/worker-scorer.d.ts +15 -0
  30. package/dist/query/worker-scorer.d.ts.map +1 -0
  31. package/dist/query/worker-scorer.js +85 -0
  32. package/dist/query/worker-scorer.js.map +1 -0
  33. package/dist/store/db.d.ts +1 -0
  34. package/dist/store/db.d.ts.map +1 -1
  35. package/dist/store/db.js +51 -5
  36. package/dist/store/db.js.map +1 -1
  37. package/dist/store/index-store.d.ts.map +1 -1
  38. package/dist/store/index-store.js +8 -6
  39. package/dist/store/index-store.js.map +1 -1
  40. package/dist/store/vectors.d.ts +11 -0
  41. package/dist/store/vectors.d.ts.map +1 -0
  42. package/dist/store/vectors.js +42 -0
  43. package/dist/store/vectors.js.map +1 -0
  44. package/dist/testing.d.ts.map +1 -1
  45. package/dist/testing.js +6 -5
  46. package/dist/testing.js.map +1 -1
  47. package/dist/types.d.ts +2 -0
  48. package/dist/types.d.ts.map +1 -1
  49. package/dist/verbs/dispatch.d.ts +2 -5
  50. package/dist/verbs/dispatch.d.ts.map +1 -1
  51. package/dist/verbs/dispatch.js +39 -18
  52. package/dist/verbs/dispatch.js.map +1 -1
  53. package/dist/workspace/floor.d.ts +1 -1
  54. package/dist/workspace/floor.d.ts.map +1 -1
  55. package/dist/workspace/floor.js +18 -4
  56. package/dist/workspace/floor.js.map +1 -1
  57. package/dist/workspace/glob.d.ts.map +1 -1
  58. package/dist/workspace/glob.js +3 -1
  59. package/dist/workspace/glob.js.map +1 -1
  60. package/dist/workspace/scan.d.ts.map +1 -1
  61. package/dist/workspace/scan.js +2 -1
  62. package/dist/workspace/scan.js.map +1 -1
  63. package/package.json +7 -6
package/README.md CHANGED
@@ -1,8 +1,27 @@
1
1
  # @intentic/iq-engine
2
2
 
3
- The search engine behind the [`iq`](../../_apps/iq) CLI: a disk index (`node:sqlite`) fused across
4
- **lexical** (ripgrep), **structural** (ast-grep), **semantic** (local embed + rerank), and **git** engines,
5
- with rank fusion and a token-budget renderer. This is the heavy lib of the iq cluster.
3
+ The search engine behind the [`iq`](../../_search/iq) CLI, and the heavy lib of the iq cluster.
4
+
5
+ A disk index (`node:sqlite`) fused across **lexical** (ripgrep), **structural** (ast-grep), **semantic** (local
6
+ embed + rerank) and **git** engines, with rank fusion and a token-budget renderer.
7
+
8
+ The rebuildable index lives at `.intentic/cache/iq/`. Fresh databases use SQLite incremental auto-vacuum; a
9
+ completed writer pass compacts when at least 25% of the file is freelist pages, so delete-heavy reindexes do not
10
+ leave a gigabyte-scale sparse cache behind.
11
+
12
+ The agent plane is out of search scope BY DEFAULT: [workspace/floor.ts](src/workspace/floor.ts) allows only the
13
+ state table's own authored slice of `.intentic` (`SEARCHABLE_STATE_PATHS` from `@intentic/sandbox-contract` —
14
+ reviewable config plus drafts, staged docs, workspace extensions) and denies every ledger, cache, profile and
15
+ checkout, including ones added later, without this package changing.
16
+
17
+ Chunk embeddings live in a `sqlite-vec` table beside the chunks, one signed byte per dimension, and the nearest
18
+ ones to a query are found inside SQLite rather than by handing every vector to JavaScript. On this workspace —
19
+ 4,039 files, 67k embedded chunks — that is the difference between 286ms and 31ms a query, 451MB and 79MB of peak
20
+ memory, and a 212MB index and an 85MB one. What the quantizing costs is measured rather than assumed: against
21
+ the float scorer over 30 natural-language queries, the top hit is identical every time, 97.4% of the top 24 are,
22
+ and no displayed score moves by more than the 0.01 it is rounded to. A vector is also a pure function of chunk
23
+ text, so nothing here is precious — [embed/vector-cache.ts](src/embed/vector-cache.ts) keeps full-precision
24
+ copies in a sidecar the index dir's own deletion never touches.
6
25
 
7
26
  Two engines answer "orient me" rather than "find X", and read the index rather than searching it:
8
27
  [engines/map.ts](src/engines/map.ts) PageRanks files over the import graph — specifiers captured by
@@ -18,3 +37,42 @@ codebase-health panel from it. One ranking, two presentations — the verbs keep
18
37
  `composition.ts`) and calls `run` / `health` in-process for `/workspace/search` and `/workspace/health`, which
19
38
  is the only reason app code imports this package at all. Nothing else should: every other path to these
20
39
  results is the `sandbox-contract` wire shape (`WorkspaceSearch*`, `WorkspaceHealth*`), never an import.
40
+
41
+ ## Two engines, and why the resident one has threads
42
+
43
+ `createEngine` is one query and exit — the CLI. It does everything on its own thread because nothing else is
44
+ there to disturb.
45
+
46
+ `createResidentEngine` is the daemon's, and the daemon's thread is also serving every agent stream, the routes
47
+ and the browser. Both of the expensive halves of search are moved off it. Keeping the index current is one
48
+ thread ([indexer/index-worker.ts](src/indexer/index-worker.ts)); answering the model stages of a query is the
49
+ other ([query/query-worker.ts](src/query/query-worker.ts)). The cross-encoder is what still earns that thread —
50
+ a few hundred milliseconds per query, tokenized in JS, yielding at no point. Scoring used to cost about as much
51
+ again and no longer does: since the vector table took over the ranking it is tens of milliseconds, and it is the
52
+ reranker alone that would otherwise stall every agent stream the daemon is serving.
53
+
54
+ ```dag
55
+ { "title": "One index, three threads", "direction": "LR",
56
+ "nodes": [{ "id": "host", "label": "Host thread", "note": "BM25, rg, fusion, render", "accent": "4" },
57
+ { "id": "index", "label": "Index worker", "note": "the only writer", "accent": "4" },
58
+ { "id": "query", "label": "Query worker", "note": "vectors + cross-encoder", "accent": "4" },
59
+ { "id": "db", "label": "index.db", "note": "SQLite, WAL", "accent": "neutral" }],
60
+ "edges": [{ "from": "host", "to": "db" }, { "from": "query", "to": "db" }, { "from": "index", "to": "db" },
61
+ { "from": "host", "to": "index", "dashed": true }, { "from": "host", "to": "query", "dashed": true }] }
62
+ ```
63
+
64
+ Write-ahead logging is what makes that safe: one writer, two readers, no waiting. The dashed edges are
65
+ messages — a change notification out to the indexer, a query out to the scorer and its ranked answer back.
66
+ The resident engine's `metrics()` reports its cached file count, dirty/applied sequence lag, generation, and
67
+ query-worker liveness/backlog without walking the sweep; the sandbox folds those numbers into its durable
68
+ resource time series so a growing host heap can be compared with the state this engine actually retains.
69
+
70
+ ## Key files
71
+
72
+ - [src/verbs](src/verbs) — one file per search verb; the surface `iq` dispatches into.
73
+ - [src/engines](src/engines) — the four searches: lexical, structural, semantic, git.
74
+ - [src/plan](src/plan) — intent detection and rank fusion; how four answers become one.
75
+ - [src/query](src/query) — the two model stages behind an interface, and the thread the daemon runs them on.
76
+ - [src/indexer](src/indexer) — building and updating the disk index.
77
+ - [src/render](src/render) — fitting results into a token budget.
78
+ - [src/store](src/store) — the `node:sqlite` index itself.
@@ -0,0 +1,9 @@
1
+ export interface VectorCache {
2
+ get(hashes: readonly string[]): Map<string, Uint8Array>;
3
+ put(entries: ReadonlyMap<string, Uint8Array>): void;
4
+ compact(): void;
5
+ close(): void;
6
+ }
7
+ export declare const vectorCachePath: (indexDir: string) => string;
8
+ export declare const openVectorCache: (path: string, modelId: string, maxRows?: number) => VectorCache | undefined;
9
+ //# sourceMappingURL=vector-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vector-cache.d.ts","sourceRoot":"","sources":["../../src/embed/vector-cache.ts"],"names":[],"mappings":"AA+BA,MAAM,WAAW,WAAW;IAExB,GAAG,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAExD,GAAG,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,IAAI,CAAC;IAEpD,OAAO,IAAI,IAAI,CAAC;IAChB,KAAK,IAAI,IAAI,CAAC;CACjB;AAGD,eAAO,MAAM,eAAe,aAAc,MAAM,KAAG,MAAkC,CAAC;AAkFtF,eAAO,MAAM,eAAe,SAAU,MAAM,WAAW,MAAM,uBAAuB,WAAW,GAAG,SAejG,CAAC"}
@@ -0,0 +1,103 @@
1
+ import { existsSync, mkdirSync, rmSync } from "node:fs";
2
+ import { dirname } from "node:path";
3
+ import { DatabaseSync } from "node:sqlite";
4
+ const CACHE_SCHEMA = "1";
5
+ const MAX_ROWS = 200_000;
6
+ const DDL = `
7
+ CREATE TABLE IF NOT EXISTS meta (key TEXT PRIMARY KEY, value TEXT NOT NULL);
8
+ CREATE TABLE IF NOT EXISTS vectors (
9
+ hash TEXT PRIMARY KEY,
10
+ embedding BLOB NOT NULL,
11
+ used_at INTEGER NOT NULL
12
+ );
13
+ CREATE INDEX IF NOT EXISTS vectors_used ON vectors(used_at);
14
+ `;
15
+ export const vectorCachePath = (indexDir) => `${indexDir}-vectors.db`;
16
+ const open = (path, modelId, maxRows) => {
17
+ mkdirSync(dirname(path), { recursive: true });
18
+ const db = new DatabaseSync(path);
19
+ db.exec("PRAGMA busy_timeout = 5000;");
20
+ const pageCount = Number(db.prepare("PRAGMA page_count").get()?.page_count ?? 0);
21
+ if (pageCount === 0) {
22
+ db.exec("PRAGMA auto_vacuum = INCREMENTAL;");
23
+ }
24
+ db.exec("PRAGMA journal_mode = WAL; PRAGMA synchronous = NORMAL;");
25
+ db.exec(DDL);
26
+ const meta = (key) => db.prepare("SELECT value FROM meta WHERE key = ?").get(key)?.value;
27
+ const setMeta = (key, value) => {
28
+ db.prepare("INSERT INTO meta (key, value) VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value").run(key, value);
29
+ };
30
+ const version = meta("cache_version");
31
+ if (version !== undefined && version !== CACHE_SCHEMA) {
32
+ db.close();
33
+ throw new Error(`iq vector cache schema ${version} != ${CACHE_SCHEMA}`);
34
+ }
35
+ setMeta("cache_version", CACHE_SCHEMA);
36
+ if (meta("model_id") !== modelId) {
37
+ db.exec("DELETE FROM vectors");
38
+ setMeta("model_id", modelId);
39
+ }
40
+ return {
41
+ get(hashes) {
42
+ const found = new Map();
43
+ if (hashes.length === 0) {
44
+ return found;
45
+ }
46
+ const distinct = [...new Set(hashes)];
47
+ const marks = distinct.map(() => "?").join(", ");
48
+ for (const row of db.prepare(`SELECT hash, embedding FROM vectors WHERE hash IN (${marks})`).all(...distinct)) {
49
+ found.set(row.hash, row.embedding);
50
+ }
51
+ if (found.size > 0) {
52
+ const hitMarks = [...found.keys()].map(() => "?").join(", ");
53
+ db.prepare(`UPDATE vectors SET used_at = ? WHERE hash IN (${hitMarks})`).run(Date.now(), ...found.keys());
54
+ }
55
+ return found;
56
+ },
57
+ put(entries) {
58
+ if (entries.size === 0) {
59
+ return;
60
+ }
61
+ const insert = db.prepare("INSERT INTO vectors (hash, embedding, used_at) VALUES (?, ?, ?) ON CONFLICT(hash) DO UPDATE SET embedding = excluded.embedding, used_at = excluded.used_at");
62
+ db.exec("BEGIN");
63
+ try {
64
+ for (const [hash, embedding] of entries) {
65
+ insert.run(hash, embedding, Date.now());
66
+ }
67
+ db.exec("COMMIT");
68
+ }
69
+ catch (error) {
70
+ db.exec("ROLLBACK");
71
+ throw error;
72
+ }
73
+ },
74
+ compact() {
75
+ const rows = Number(db.prepare("SELECT COUNT(*) AS n FROM vectors").get().n);
76
+ if (rows <= maxRows) {
77
+ return;
78
+ }
79
+ db.prepare("DELETE FROM vectors WHERE hash IN (SELECT hash FROM vectors ORDER BY used_at ASC LIMIT ?)").run(rows - maxRows);
80
+ db.exec("PRAGMA incremental_vacuum");
81
+ },
82
+ close: () => db.close(),
83
+ };
84
+ };
85
+ export const openVectorCache = (path, modelId, maxRows = MAX_ROWS) => {
86
+ try {
87
+ return open(path, modelId, maxRows);
88
+ }
89
+ catch {
90
+ for (const suffix of ["", "-wal", "-shm"]) {
91
+ if (existsSync(`${path}${suffix}`)) {
92
+ rmSync(`${path}${suffix}`, { force: true });
93
+ }
94
+ }
95
+ try {
96
+ return open(path, modelId, maxRows);
97
+ }
98
+ catch {
99
+ return undefined;
100
+ }
101
+ }
102
+ };
103
+ //# sourceMappingURL=vector-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vector-cache.js","sourceRoot":"","sources":["../../src/embed/vector-cache.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import type { Embedder } from "../embed/embedder.js";
2
+ import type { VectorCache } from "../embed/vector-cache.js";
2
3
  import type { IndexDb } from "../store/db.js";
3
4
  import type { EngineHit } from "../types.js";
4
- export declare const embedPending: (db: IndexDb, embedder: Embedder, cap?: number, timeBudgetMs?: number) => Promise<number>;
5
+ export declare const embedPending: (db: IndexDb, embedder: Embedder, cache?: VectorCache, cap?: number, timeBudgetMs?: number) => Promise<number>;
5
6
  export declare const semanticSearch: (db: IndexDb, queryVec: Float32Array, allowed: ReadonlySet<string>) => EngineHit[];
6
7
  //# sourceMappingURL=semantic.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"semantic.d.ts","sourceRoot":"","sources":["../../src/engines/semantic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAS7C,eAAO,MAAM,YAAY,OAAc,OAAO,YAAY,QAAQ,0CAAkD,OAAO,CAAC,MAAM,CAqBjI,CAAC;AAGF,eAAO,MAAM,cAAc,OAAQ,OAAO,YAAY,YAAY,WAAW,WAAW,CAAC,MAAM,CAAC,KAAG,SAAS,EAsB3G,CAAC"}
1
+ {"version":3,"file":"semantic.d.ts","sourceRoot":"","sources":["../../src/engines/semantic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAa7C,eAAO,MAAM,YAAY,OACjB,OAAO,YACD,QAAQ,UACV,WAAW,0CAGpB,OAAO,CAAC,MAAM,CAqChB,CAAC;AAcF,eAAO,MAAM,cAAc,OAAQ,OAAO,YAAY,YAAY,WAAW,WAAW,CAAC,MAAM,CAAC,KAAG,SAAS,EAuC3G,CAAC"}
@@ -1,44 +1,71 @@
1
+ import { nearestChunks, putVector } from "../store/vectors.js";
1
2
  const TOP_K = 24;
2
3
  const TOPUP_CAP = 256;
3
4
  const TOPUP_TIME_MS = 2000;
4
5
  const BATCH = 16;
5
- export const embedPending = async (db, embedder, cap = TOPUP_CAP, timeBudgetMs = TOPUP_TIME_MS) => {
6
+ export const embedPending = async (db, embedder, cache, cap = TOPUP_CAP, timeBudgetMs = TOPUP_TIME_MS) => {
6
7
  const started = Date.now();
7
8
  let done = 0;
8
9
  while (done < cap && Date.now() - started < timeBudgetMs) {
9
- const rows = db.all("SELECT id, text FROM chunks WHERE embedding IS NULL LIMIT ?", Math.min(BATCH, cap - done));
10
+ const rows = db.all("SELECT id, file_id, hash, text FROM chunks WHERE embedded = 0 LIMIT ?", Math.min(BATCH, cap - done));
10
11
  if (rows.length === 0) {
11
12
  break;
12
13
  }
13
- const vectors = await embedder.embedBatch(rows.map((row) => row["text"]));
14
+ const cached = cache?.get(rows.map((row) => row["hash"])) ?? new Map();
15
+ const missing = new Map();
16
+ for (const row of rows) {
17
+ const hash = row["hash"];
18
+ if (!cached.has(hash)) {
19
+ missing.set(hash, row["text"]);
20
+ }
21
+ }
22
+ const misses = [...missing.entries()];
23
+ const vectors = misses.length > 0 ? await embedder.embedBatch(misses.map(([, text]) => text)) : [];
24
+ const fresh = new Map();
25
+ misses.forEach(([hash], i) => {
26
+ const vec = vectors[i];
27
+ fresh.set(hash, new Uint8Array(vec.buffer.slice(vec.byteOffset, vec.byteOffset + vec.byteLength)));
28
+ });
29
+ cache?.put(fresh);
14
30
  db.transaction(() => {
15
- rows.forEach((row, i) => {
16
- db.run("UPDATE chunks SET embedding = ? WHERE id = ?", new Uint8Array(vectors[i].buffer.slice(vectors[i].byteOffset, vectors[i].byteOffset + vectors[i].byteLength)), row["id"]);
17
- });
31
+ for (const row of rows) {
32
+ const hash = row["hash"];
33
+ const blob = cached.get(hash) ?? fresh.get(hash);
34
+ putVector(db, Number(row["id"]), Number(row["file_id"]), new Float32Array(blob.buffer, blob.byteOffset, blob.byteLength / 4));
35
+ }
18
36
  });
19
37
  done += rows.length;
20
38
  }
21
- return Number(db.get("SELECT COUNT(*) AS n FROM chunks WHERE embedding IS NULL")?.["n"] ?? 0);
39
+ return Number(db.get("SELECT COUNT(*) AS n FROM chunks WHERE embedded = 0")?.["n"] ?? 0);
22
40
  };
23
41
  export const semanticSearch = (db, queryVec, allowed) => {
24
- const scored = [];
25
- for (const row of db.all("SELECT f.path, c.start_line, c.text, c.embedding FROM chunks c JOIN files f ON f.id = c.file_id WHERE c.embedding IS NOT NULL")) {
26
- const path = row["path"];
27
- if (!allowed.has(path)) {
28
- continue;
29
- }
30
- const blob = row["embedding"];
31
- const vec = new Float32Array(blob.buffer, blob.byteOffset, blob.byteLength / 4);
32
- let dot = 0;
33
- for (let i = 0; i < queryVec.length; i++) {
34
- dot += queryVec[i] * vec[i];
35
- }
36
- const text = row["text"].split("\n")[1]?.trim() ?? row["text"].split(" § ")[1] ?? "";
37
- scored.push({ path, line: Number(row["start_line"]), text, score: dot });
42
+ const files = db.all("SELECT id, path FROM files");
43
+ const allowedIds = files.filter((file) => allowed.has(file["path"])).map((file) => Number(file["id"]));
44
+ const nearest = nearestChunks(db, queryVec, TOP_K, allowedIds.length === files.length ? undefined : allowedIds);
45
+ if (nearest.length === 0) {
46
+ return [];
38
47
  }
39
- return scored
48
+ const marks = nearest.map(() => "?").join(",");
49
+ const rows = new Map(db
50
+ .all(`SELECT c.id, c.start_line, c.text, f.path FROM chunks c JOIN files f ON f.id = c.file_id WHERE c.id IN (${marks})`, ...nearest.map((hit) => hit.chunkId))
51
+ .map((row) => [Number(row["id"]), row]));
52
+ return (nearest
53
+ .flatMap((hit) => {
54
+ const row = rows.get(hit.chunkId);
55
+ if (row === undefined) {
56
+ return [];
57
+ }
58
+ const text = row["text"];
59
+ return [
60
+ {
61
+ path: row["path"],
62
+ line: Number(row["start_line"]),
63
+ text: text.split("\n")[1]?.trim() ?? text.split(" § ")[1] ?? "",
64
+ score: hit.score,
65
+ },
66
+ ];
67
+ })
40
68
  .toSorted((a, b) => b.score - a.score || (a.path < b.path ? -1 : 1) || a.line - b.line)
41
- .slice(0, TOP_K)
42
- .map(({ path, line, text, score }) => ({ path, line, text, tags: [{ kind: "sem", score: Math.round(score * 100) / 100 }] }));
69
+ .map(({ path, line, text, score }) => ({ path, line, text, tags: [{ kind: "sem", score: Math.round(score * 100) / 100 }] })));
43
70
  };
44
71
  //# sourceMappingURL=semantic.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"semantic.js","sourceRoot":"","sources":["../../src/engines/semantic.ts"],"names":[],"mappings":"AAIA,MAAM,KAAK,GAAG,EAAE,CAAC;AACjB,MAAM,SAAS,GAAG,GAAG,CAAC;AACtB,MAAM,aAAa,GAAG,IAAI,CAAC;AAC3B,MAAM,KAAK,GAAG,EAAE,CAAC;AAIjB,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAAE,EAAW,EAAE,QAAkB,EAAE,GAAG,GAAG,SAAS,EAAE,YAAY,GAAG,aAAa,EAAmB,EAAE;IAClI,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC3B,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,OAAO,IAAI,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,GAAG,YAAY,EAAE,CAAC;QACvD,MAAM,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,6DAA6D,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC;QAChH,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpB,MAAM;QACV,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAW,CAAC,CAAC,CAAC;QACpF,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;YAChB,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;gBACpB,EAAE,CAAC,GAAG,CACF,8CAA8C,EAC9C,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAE,CAAC,UAAU,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC,UAAU,CAAC,CAAC,EACjH,GAAG,CAAC,IAAI,CAAW,CACtB,CAAC;YACN,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QACH,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC;IACxB,CAAC;IACD,OAAO,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,0DAA0D,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AAClG,CAAC,CAAC;AAGF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,EAAW,EAAE,QAAsB,EAAE,OAA4B,EAAe,EAAE;IAC7G,MAAM,MAAM,GAAkE,EAAE,CAAC;IACjF,KAAK,MAAM,GAAG,IAAI,EAAE,CAAC,GAAG,CACpB,+HAA+H,CAClI,EAAE,CAAC;QACA,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAW,CAAC;QACnC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB,SAAS;QACb,CAAC;QACD,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,CAAe,CAAC;QAC5C,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;QAChF,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,GAAG,IAAI,QAAQ,CAAC,CAAC,CAAE,GAAG,GAAG,CAAC,CAAC,CAAE,CAAC;QAClC,CAAC;QACD,MAAM,IAAI,GAAI,GAAG,CAAC,MAAM,CAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAK,GAAG,CAAC,MAAM,CAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7G,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,MAAM;SACR,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;SACtF,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;SACf,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,KAAc,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9I,CAAC,CAAC"}
1
+ {"version":3,"file":"semantic.js","sourceRoot":"","sources":["../../src/engines/semantic.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -7,6 +7,7 @@ export type { HotspotFile } from "./engines/hotspots.js";
7
7
  export { disabledOf, type Feature, FEATURES, parseFeatures } from "./features.js";
8
8
  export { estimateTokens } from "./render/budget.js";
9
9
  export { isIqDenied, IQ_DIR } from "./workspace/floor.js";
10
+ export { globToRegExp } from "./workspace/glob.js";
10
11
  export { canonicalLang } from "./workspace/scan.js";
11
12
  export interface EngineOptions {
12
13
  readonly root: string;
@@ -23,12 +24,28 @@ export interface Engine {
23
24
  }
24
25
  export interface ResidentEngineOptions extends EngineOptions {
25
26
  readonly onIndexError?: (error: Error) => void;
27
+ readonly onQueryError?: (error: Error) => void;
28
+ readonly onIndexProgress?: (remaining: number) => void;
29
+ }
30
+ export interface ResidentEngineMetrics {
31
+ readonly files: number;
32
+ readonly generation: number;
33
+ readonly dirtySequence: number;
34
+ readonly appliedSequence: number;
35
+ readonly revalidated: boolean;
36
+ readonly sweepAgeMs: number | undefined;
37
+ readonly embedBacklog: number;
38
+ readonly queryWorker: {
39
+ readonly live: boolean;
40
+ readonly pendingRequests: number;
41
+ };
26
42
  }
27
43
  export interface ResidentEngine {
28
44
  run(request: QueryRequest, signal?: AbortSignal): Promise<QueryOutcome>;
29
45
  health(request: HealthRequest): Promise<CodebaseHealth>;
30
46
  markDirty(): void;
31
47
  warm(): Promise<IndexStatus>;
48
+ metrics(): ResidentEngineMetrics;
32
49
  close(): Promise<void>;
33
50
  }
34
51
  export declare const createEngine: (options: EngineOptions) => Engine;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,cAAc,EAAkB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAQ9F,OAAO,KAAK,EAAa,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACrF,OAAO,EAAE,KAAK,OAAO,EAAY,MAAM,eAAe,CAAC;AAKvD,YAAY,EACR,SAAS,EACT,YAAY,EACZ,SAAS,EACT,SAAS,EACT,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,SAAS,EACT,aAAa,EACb,KAAK,EACL,SAAS,EACT,IAAI,EACJ,WAAW,GACd,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAClG,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,KAAK,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAClF,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,MAAM,WAAW,aAAa;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAE3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,MAAM;IACnB,GAAG,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAClD,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;IACpC,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAC3E,SAAS,IAAI,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,qBAAsB,SAAQ,aAAa;IAIxD,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClD;AAID,MAAM,WAAW,cAAc;IAI3B,GAAG,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAIxE,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAExD,SAAS,IAAI,IAAI,CAAC;IAGlB,IAAI,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;IAE7B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAcD,eAAO,MAAM,YAAY,YAAa,aAAa,KAAG,MAqHrD,CAAC;AAQF,eAAO,MAAM,oBAAoB,YAAa,qBAAqB,KAAG,cAwJrE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,13 +1,16 @@
1
1
  import { rmSync } from "node:fs";
2
2
  import { join } from "node:path";
3
3
  import { Worker } from "node:worker_threads";
4
- import { loadEmbedder } from "./embed/embedder.js";
4
+ import { loadEmbedder, MODEL_ID } from "./embed/embedder.js";
5
5
  import { loadReranker } from "./embed/reranker.js";
6
+ import { openVectorCache, vectorCachePath } from "./embed/vector-cache.js";
6
7
  import { codebaseHealth } from "./engines/health.js";
7
8
  import { embedPending } from "./engines/semantic.js";
8
9
  import { indexLag, revalidate, syncModel } from "./indexer/indexer.js";
9
10
  import { parseEntry } from "./indexer/parse-entry.js";
10
- import { isIndexBusy, openIndex } from "./store/db.js";
11
+ import { inThreadScorer } from "./query/scorer.js";
12
+ import { workerScorer } from "./query/worker-scorer.js";
13
+ import { compactIndex, isIndexBusy, openIndex } from "./store/db.js";
11
14
  import { generationOf, readIndexStatus } from "./store/index-store.js";
12
15
  import { claimIndexer, indexerAlive, releaseIndexer } from "./store/indexer-lock.js";
13
16
  import { FEATURES } from "./features.js";
@@ -17,6 +20,7 @@ import { sweep } from "./workspace/scan.js";
17
20
  export { disabledOf, FEATURES, parseFeatures } from "./features.js";
18
21
  export { estimateTokens } from "./render/budget.js";
19
22
  export { isIqDenied, IQ_DIR } from "./workspace/floor.js";
23
+ export { globToRegExp } from "./workspace/glob.js";
20
24
  export { canonicalLang } from "./workspace/scan.js";
21
25
  const freshnessOf = (db, entries, sweepStart, wrote) => {
22
26
  const ageMs = Date.now() - sweepStart;
@@ -32,6 +36,15 @@ export const createEngine = (options) => {
32
36
  const getEmbedder = () => (embedderPromise ??= loadEmbedder(options.modelDir));
33
37
  let rerankerPromise;
34
38
  const getReranker = () => (rerankerPromise ??= loadReranker(options.modelDir));
39
+ let cacheOpened = false;
40
+ let cacheHandle;
41
+ const getCache = () => {
42
+ if (!cacheOpened) {
43
+ cacheOpened = true;
44
+ cacheHandle = openVectorCache(vectorCachePath(indexDir), MODEL_ID);
45
+ }
46
+ return cacheHandle;
47
+ };
35
48
  const opened = async () => {
36
49
  const sweepStart = Date.now();
37
50
  const entries = await sweep(options.root, false);
@@ -44,6 +57,7 @@ export const createEngine = (options) => {
44
57
  db = openIndex(indexDir, "write");
45
58
  const { generation } = await revalidate(db, entries, parseEntry);
46
59
  syncModel(db, options.modelDir);
60
+ compactIndex(db);
47
61
  return { db, generation, sweepStart, entries, indexed: true };
48
62
  }
49
63
  catch (error) {
@@ -65,10 +79,14 @@ export const createEngine = (options) => {
65
79
  db,
66
80
  generation,
67
81
  freshness: freshnessOf(db, entries, sweepStart, indexed),
68
- getEmbedder,
69
- getReranker,
70
- topUpEmbeddings: indexed,
71
- features: options.features ?? new Set(FEATURES),
82
+ scorer: inThreadScorer({
83
+ db,
84
+ embedder: getEmbedder,
85
+ reranker: getReranker,
86
+ cache: getCache,
87
+ topUpEmbeddings: indexed,
88
+ }),
89
+ features: request.features ?? options.features ?? new Set(FEATURES),
72
90
  ...(options.rgPath !== undefined ? { rgPath: options.rgPath } : {}),
73
91
  }, request, entries);
74
92
  }
@@ -96,7 +114,7 @@ export const createEngine = (options) => {
96
114
  onProgress?.(`indexed ${entries.length} files`);
97
115
  const embedder = await getEmbedder();
98
116
  if (embedder !== undefined) {
99
- const remaining = await embedPending(db, embedder, Number.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER);
117
+ const remaining = await embedPending(db, embedder, getCache(), Number.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER);
100
118
  onProgress?.(remaining === 0 ? "embeddings complete" : `embeddings incomplete: ${remaining} chunks pending`);
101
119
  }
102
120
  return readIndexStatus(db, generation);
@@ -115,16 +133,18 @@ export const createResidentEngine = (options) => {
115
133
  const indexDir = options.indexDir ?? join(options.root, IQ_DIR);
116
134
  const db = openIndex(indexDir, "write");
117
135
  claimIndexer(indexDir);
118
- let embedderPromise;
119
- const getEmbedder = () => (embedderPromise ??= loadEmbedder(options.modelDir));
120
- let rerankerPromise;
121
- const getReranker = () => (rerankerPromise ??= loadReranker(options.modelDir));
136
+ const scorer = workerScorer({
137
+ indexDir,
138
+ modelDir: options.modelDir,
139
+ ...(options.onQueryError !== undefined ? { onError: options.onQueryError } : {}),
140
+ });
122
141
  let entries = [];
123
142
  let sweepStart = 0;
124
143
  let generation = 0;
125
144
  let revalidatedOnce = false;
126
145
  let dirtySeq = 0;
127
146
  let appliedSeq = 0;
147
+ let embedBacklog = 0;
128
148
  let publishFirstSweep;
129
149
  let failFirstSweep;
130
150
  const firstSweep = new Promise((resolve, reject) => {
@@ -164,6 +184,11 @@ export const createResidentEngine = (options) => {
164
184
  revalidatedOnce = true;
165
185
  return;
166
186
  }
187
+ if (event.type === "embedding") {
188
+ embedBacklog = event.remaining;
189
+ options.onIndexProgress?.(event.remaining);
190
+ return;
191
+ }
167
192
  if (event.type === "warmed") {
168
193
  warmSettled = true;
169
194
  publishWarm(event.status);
@@ -183,6 +208,16 @@ export const createResidentEngine = (options) => {
183
208
  return { state: "fresh", ageMs };
184
209
  };
185
210
  const engine = {
211
+ metrics: () => ({
212
+ files: entries.length,
213
+ generation,
214
+ dirtySequence: dirtySeq,
215
+ appliedSequence: appliedSeq,
216
+ revalidated: revalidatedOnce,
217
+ sweepAgeMs: sweepStart === 0 ? undefined : Date.now() - sweepStart,
218
+ embedBacklog,
219
+ queryWorker: scorer.metrics(),
220
+ }),
186
221
  async run(request, signal) {
187
222
  await firstSweep;
188
223
  return dispatch({
@@ -191,10 +226,8 @@ export const createResidentEngine = (options) => {
191
226
  db,
192
227
  generation,
193
228
  freshness: freshness(),
194
- getEmbedder,
195
- getReranker,
196
- topUpEmbeddings: false,
197
- features: options.features ?? new Set(FEATURES),
229
+ scorer,
230
+ features: request.features ?? options.features ?? new Set(FEATURES),
198
231
  ...(options.rgPath !== undefined ? { rgPath: options.rgPath } : {}),
199
232
  ...(signal !== undefined ? { signal } : {}),
200
233
  }, request, entries);
@@ -209,7 +242,7 @@ export const createResidentEngine = (options) => {
209
242
  },
210
243
  warm: () => warmed,
211
244
  async close() {
212
- await worker.terminate();
245
+ await Promise.all([worker.terminate(), scorer.close()]);
213
246
  db.close();
214
247
  releaseIndexer(indexDir);
215
248
  },
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -16,6 +16,9 @@ export type IndexWorkerEvent = {
16
16
  readonly type: "indexed";
17
17
  readonly generation: number;
18
18
  readonly seq: number;
19
+ } | {
20
+ readonly type: "embedding";
21
+ readonly remaining: number;
19
22
  } | {
20
23
  readonly type: "warmed";
21
24
  readonly status: IndexStatus;
@@ -1 +1 @@
1
- {"version":3,"file":"index-worker.d.ts","sourceRoot":"","sources":["../../src/indexer/index-worker.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AA0B1D,MAAM,WAAW,eAAe;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;CACzC;AAID,MAAM,WAAW,kBAAkB;IAC/B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACxB;AAKD,MAAM,MAAM,gBAAgB,GACtB;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACtF;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAC/E;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;CAAE,GACzD;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;CAAE,CAAC"}
1
+ {"version":3,"file":"index-worker.d.ts","sourceRoot":"","sources":["../../src/indexer/index-worker.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AA0B1D,MAAM,WAAW,eAAe;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;CACzC;AAID,MAAM,WAAW,kBAAkB;IAC/B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACxB;AAKD,MAAM,MAAM,gBAAgB,GACtB;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACtF;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAG/E;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC1D;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;CAAE,GACzD;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;CAAE,CAAC"}