@mneme-ai/core 0.8.3 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (144) hide show
  1. package/dist/entities/go-parser.d.ts +47 -0
  2. package/dist/entities/go-parser.d.ts.map +1 -0
  3. package/dist/entities/go-parser.js +315 -0
  4. package/dist/entities/go-parser.js.map +1 -0
  5. package/dist/entities/go-parser.test.d.ts +2 -0
  6. package/dist/entities/go-parser.test.d.ts.map +1 -0
  7. package/dist/entities/go-parser.test.js +147 -0
  8. package/dist/entities/go-parser.test.js.map +1 -0
  9. package/dist/entities/index.d.ts +1 -0
  10. package/dist/entities/index.d.ts.map +1 -1
  11. package/dist/entities/index.js +1 -0
  12. package/dist/entities/index.js.map +1 -1
  13. package/dist/index.d.ts +2 -0
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +2 -0
  16. package/dist/index.js.map +1 -1
  17. package/dist/indexer/indexer.d.ts +12 -0
  18. package/dist/indexer/indexer.d.ts.map +1 -1
  19. package/dist/indexer/indexer.js +28 -1
  20. package/dist/indexer/indexer.js.map +1 -1
  21. package/dist/insights/decisions.d.ts +38 -0
  22. package/dist/insights/decisions.d.ts.map +1 -0
  23. package/dist/insights/decisions.js +125 -0
  24. package/dist/insights/decisions.js.map +1 -0
  25. package/dist/insights/decisions.test.d.ts +2 -0
  26. package/dist/insights/decisions.test.d.ts.map +1 -0
  27. package/dist/insights/decisions.test.js +141 -0
  28. package/dist/insights/decisions.test.js.map +1 -0
  29. package/dist/insights/dream.d.ts +71 -0
  30. package/dist/insights/dream.d.ts.map +1 -0
  31. package/dist/insights/dream.js +235 -0
  32. package/dist/insights/dream.js.map +1 -0
  33. package/dist/insights/dream.test.d.ts +2 -0
  34. package/dist/insights/dream.test.d.ts.map +1 -0
  35. package/dist/insights/dream.test.js +127 -0
  36. package/dist/insights/dream.test.js.map +1 -0
  37. package/dist/insights/index.d.ts +16 -0
  38. package/dist/insights/index.d.ts.map +1 -0
  39. package/dist/insights/index.js +16 -0
  40. package/dist/insights/index.js.map +1 -0
  41. package/dist/insights/obsidian.d.ts +42 -0
  42. package/dist/insights/obsidian.d.ts.map +1 -0
  43. package/dist/insights/obsidian.js +263 -0
  44. package/dist/insights/obsidian.js.map +1 -0
  45. package/dist/insights/obsidian.test.d.ts +2 -0
  46. package/dist/insights/obsidian.test.d.ts.map +1 -0
  47. package/dist/insights/obsidian.test.js +241 -0
  48. package/dist/insights/obsidian.test.js.map +1 -0
  49. package/dist/insights/stack-trace.d.ts +40 -0
  50. package/dist/insights/stack-trace.d.ts.map +1 -0
  51. package/dist/insights/stack-trace.js +127 -0
  52. package/dist/insights/stack-trace.js.map +1 -0
  53. package/dist/insights/stack-trace.test.d.ts +2 -0
  54. package/dist/insights/stack-trace.test.d.ts.map +1 -0
  55. package/dist/insights/stack-trace.test.js +103 -0
  56. package/dist/insights/stack-trace.test.js.map +1 -0
  57. package/dist/insights/story.d.ts +34 -0
  58. package/dist/insights/story.d.ts.map +1 -0
  59. package/dist/insights/story.js +100 -0
  60. package/dist/insights/story.js.map +1 -0
  61. package/dist/insights/story.test.d.ts +2 -0
  62. package/dist/insights/story.test.d.ts.map +1 -0
  63. package/dist/insights/story.test.js +99 -0
  64. package/dist/insights/story.test.js.map +1 -0
  65. package/dist/insights/suggest.d.ts +29 -0
  66. package/dist/insights/suggest.d.ts.map +1 -0
  67. package/dist/insights/suggest.js +93 -0
  68. package/dist/insights/suggest.js.map +1 -0
  69. package/dist/insights/suggest.test.d.ts +2 -0
  70. package/dist/insights/suggest.test.d.ts.map +1 -0
  71. package/dist/insights/suggest.test.js +71 -0
  72. package/dist/insights/suggest.test.js.map +1 -0
  73. package/dist/insights/who-knows.d.ts +48 -0
  74. package/dist/insights/who-knows.d.ts.map +1 -0
  75. package/dist/insights/who-knows.js +96 -0
  76. package/dist/insights/who-knows.js.map +1 -0
  77. package/dist/insights/who-knows.test.d.ts +2 -0
  78. package/dist/insights/who-knows.test.d.ts.map +1 -0
  79. package/dist/insights/who-knows.test.js +47 -0
  80. package/dist/insights/who-knows.test.js.map +1 -0
  81. package/dist/retrieve/index.d.ts +2 -0
  82. package/dist/retrieve/index.d.ts.map +1 -1
  83. package/dist/retrieve/index.js +2 -0
  84. package/dist/retrieve/index.js.map +1 -1
  85. package/dist/retrieve/intent.d.ts +32 -0
  86. package/dist/retrieve/intent.d.ts.map +1 -0
  87. package/dist/retrieve/intent.js +104 -0
  88. package/dist/retrieve/intent.js.map +1 -0
  89. package/dist/retrieve/intent.test.d.ts +2 -0
  90. package/dist/retrieve/intent.test.d.ts.map +1 -0
  91. package/dist/retrieve/intent.test.js +106 -0
  92. package/dist/retrieve/intent.test.js.map +1 -0
  93. package/dist/retrieve/search.d.ts +30 -0
  94. package/dist/retrieve/search.d.ts.map +1 -1
  95. package/dist/retrieve/search.js +48 -0
  96. package/dist/retrieve/search.js.map +1 -1
  97. package/dist/retrieve/search.test.js +84 -1
  98. package/dist/retrieve/search.test.js.map +1 -1
  99. package/dist/retrieve/synthesize.d.ts +57 -0
  100. package/dist/retrieve/synthesize.d.ts.map +1 -0
  101. package/dist/retrieve/synthesize.js +160 -0
  102. package/dist/retrieve/synthesize.js.map +1 -0
  103. package/dist/retrieve/synthesize.test.d.ts +2 -0
  104. package/dist/retrieve/synthesize.test.d.ts.map +1 -0
  105. package/dist/retrieve/synthesize.test.js +116 -0
  106. package/dist/retrieve/synthesize.test.js.map +1 -0
  107. package/dist/store/schema.d.ts +2 -2
  108. package/dist/store/schema.d.ts.map +1 -1
  109. package/dist/store/schema.js +55 -1
  110. package/dist/store/schema.js.map +1 -1
  111. package/dist/store/sqlite.test.js +1 -1
  112. package/dist/util/index.d.ts +2 -0
  113. package/dist/util/index.d.ts.map +1 -1
  114. package/dist/util/index.js +2 -1
  115. package/dist/util/index.js.map +1 -1
  116. package/dist/util/redact.d.ts +58 -0
  117. package/dist/util/redact.d.ts.map +1 -0
  118. package/dist/util/redact.js +129 -0
  119. package/dist/util/redact.js.map +1 -0
  120. package/dist/util/redact.test.d.ts +2 -0
  121. package/dist/util/redact.test.d.ts.map +1 -0
  122. package/dist/util/redact.test.js +148 -0
  123. package/dist/util/redact.test.js.map +1 -0
  124. package/dist/wisdom/calibrator.d.ts +43 -0
  125. package/dist/wisdom/calibrator.d.ts.map +1 -0
  126. package/dist/wisdom/calibrator.js +120 -0
  127. package/dist/wisdom/calibrator.js.map +1 -0
  128. package/dist/wisdom/feedback.d.ts +45 -0
  129. package/dist/wisdom/feedback.d.ts.map +1 -0
  130. package/dist/wisdom/feedback.js +116 -0
  131. package/dist/wisdom/feedback.js.map +1 -0
  132. package/dist/wisdom/index.d.ts +15 -0
  133. package/dist/wisdom/index.d.ts.map +1 -0
  134. package/dist/wisdom/index.js +15 -0
  135. package/dist/wisdom/index.js.map +1 -0
  136. package/dist/wisdom/types.d.ts +67 -0
  137. package/dist/wisdom/types.d.ts.map +1 -0
  138. package/dist/wisdom/types.js +20 -0
  139. package/dist/wisdom/types.js.map +1 -0
  140. package/dist/wisdom/wisdom.test.d.ts +2 -0
  141. package/dist/wisdom/wisdom.test.d.ts.map +1 -0
  142. package/dist/wisdom/wisdom.test.js +144 -0
  143. package/dist/wisdom/wisdom.test.js.map +1 -0
  144. package/package.json +1 -1
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Go entity parser — regex-based v1.
3
+ *
4
+ * Why regex and not tree-sitter?
5
+ * 1. Zero new native deps — Mneme runs on every machine without a
6
+ * C toolchain.
7
+ * 2. Go's grammar at the *declaration level* (the only thing we extract)
8
+ * is regular enough that bounded patterns capture 95%+ of real code.
9
+ * 3. We never need to *understand* the body — only its name, line range,
10
+ * and signature. AST overkill for that.
11
+ *
12
+ * Trade-offs (honest):
13
+ * - We do not handle declarations split across line boundaries with weird
14
+ * formatting (e.g. a struct field on every line of a function signature).
15
+ * Mneme degrades gracefully — those entities are simply not surfaced.
16
+ * - Methods on generic receivers (Go 1.18+: `func (r *Foo[T]) Bar()`) are
17
+ * supported. Type parameters in plain func decls are supported.
18
+ * - Interfaces, structs, and type aliases are surfaced as separate kinds.
19
+ *
20
+ * Extracts these top-level kinds:
21
+ * - function // func Name[T](...)
22
+ * - method // func (r *Recv) Name(...) — named "Recv.Name"
23
+ * - struct // type Name struct { ... }
24
+ * - interface // type Name interface { ... }
25
+ * - type // type Name OtherType
26
+ */
27
+ import type { Entity } from "../types.js";
28
+ import type { EntityParser, ParseOptions } from "./index.js";
29
+ export interface GoMatch {
30
+ kind: Entity["kind"];
31
+ name: string;
32
+ signature: string;
33
+ startOffset: number;
34
+ endOffset: number;
35
+ }
36
+ /**
37
+ * Pure parsing — given Go source text, yield the entity matches found.
38
+ * Exported so the test suite can exercise it without filesystem ceremony.
39
+ */
40
+ export declare function findGoEntities(source: string): GoMatch[];
41
+ export declare class GoParser implements EntityParser {
42
+ readonly name = "go-regex";
43
+ readonly languages: string[];
44
+ parseRepo(opts: ParseOptions): AsyncIterable<Entity>;
45
+ parseFile(filePath: string, source: string): Iterable<Entity>;
46
+ }
47
+ //# sourceMappingURL=go-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"go-parser.d.ts","sourceRoot":"","sources":["../../src/entities/go-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAMH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AA4G7D,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,EAAE,CAqFxD;AA4BD,qBAAa,QAAS,YAAW,YAAY;IAC3C,QAAQ,CAAC,IAAI,cAAc;IAC3B,QAAQ,CAAC,SAAS,WAAU;IAErB,SAAS,CAAC,IAAI,EAAE,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC;IAqB1D,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;CAe/D"}
@@ -0,0 +1,315 @@
1
+ /**
2
+ * Go entity parser — regex-based v1.
3
+ *
4
+ * Why regex and not tree-sitter?
5
+ * 1. Zero new native deps — Mneme runs on every machine without a
6
+ * C toolchain.
7
+ * 2. Go's grammar at the *declaration level* (the only thing we extract)
8
+ * is regular enough that bounded patterns capture 95%+ of real code.
9
+ * 3. We never need to *understand* the body — only its name, line range,
10
+ * and signature. AST overkill for that.
11
+ *
12
+ * Trade-offs (honest):
13
+ * - We do not handle declarations split across line boundaries with weird
14
+ * formatting (e.g. a struct field on every line of a function signature).
15
+ * Mneme degrades gracefully — those entities are simply not surfaced.
16
+ * - Methods on generic receivers (Go 1.18+: `func (r *Foo[T]) Bar()`) are
17
+ * supported. Type parameters in plain func decls are supported.
18
+ * - Interfaces, structs, and type aliases are surfaced as separate kinds.
19
+ *
20
+ * Extracts these top-level kinds:
21
+ * - function // func Name[T](...)
22
+ * - method // func (r *Recv) Name(...) — named "Recv.Name"
23
+ * - struct // type Name struct { ... }
24
+ * - interface // type Name interface { ... }
25
+ * - type // type Name OtherType
26
+ */
27
+ import { createHash } from "node:crypto";
28
+ import { readFile } from "node:fs/promises";
29
+ import { join, extname } from "node:path";
30
+ import { execGit } from "../git/exec.js";
31
+ const GO_EXTENSIONS = new Set([".go"]);
32
+ // Strip line/block comments and string/rune literals BEFORE running the
33
+ // declaration regexes. This is the difference between "regex parser" and
34
+ // "regex parser that pretends to know about Go strings".
35
+ function stripCommentsAndStrings(src) {
36
+ // We replace each masked region with whitespace of the same length so that
37
+ // line numbers and offsets stay stable for the regex pass.
38
+ let i = 0;
39
+ const out = [];
40
+ while (i < src.length) {
41
+ const ch = src[i];
42
+ const next = src[i + 1];
43
+ // Line comment
44
+ if (ch === "/" && next === "/") {
45
+ while (i < src.length && src[i] !== "\n") {
46
+ out.push(src[i] === "\n" ? "\n" : " ");
47
+ i += 1;
48
+ }
49
+ continue;
50
+ }
51
+ // Block comment
52
+ if (ch === "/" && next === "*") {
53
+ out.push(" ");
54
+ i += 2;
55
+ while (i < src.length && !(src[i] === "*" && src[i + 1] === "/")) {
56
+ out.push(src[i] === "\n" ? "\n" : " ");
57
+ i += 1;
58
+ }
59
+ if (i < src.length) {
60
+ out.push(" ");
61
+ i += 2;
62
+ }
63
+ continue;
64
+ }
65
+ // Raw string literal (backtick)
66
+ if (ch === "`") {
67
+ out.push("`");
68
+ i += 1;
69
+ while (i < src.length && src[i] !== "`") {
70
+ out.push(src[i] === "\n" ? "\n" : " ");
71
+ i += 1;
72
+ }
73
+ if (i < src.length) {
74
+ out.push("`");
75
+ i += 1;
76
+ }
77
+ continue;
78
+ }
79
+ // Interpreted string / rune
80
+ if (ch === '"' || ch === "'") {
81
+ const quote = ch;
82
+ out.push(quote);
83
+ i += 1;
84
+ while (i < src.length && src[i] !== quote) {
85
+ if (src[i] === "\\" && i + 1 < src.length) {
86
+ out.push(" ");
87
+ i += 2;
88
+ continue;
89
+ }
90
+ out.push(src[i] === "\n" ? "\n" : " ");
91
+ i += 1;
92
+ }
93
+ if (i < src.length) {
94
+ out.push(quote);
95
+ i += 1;
96
+ }
97
+ continue;
98
+ }
99
+ out.push(ch);
100
+ i += 1;
101
+ }
102
+ return out.join("");
103
+ }
104
+ // Helper: line number from absolute char offset (1-based).
105
+ function lineOf(src, offset) {
106
+ let n = 1;
107
+ for (let i = 0; i < offset && i < src.length; i++) {
108
+ if (src[i] === "\n")
109
+ n += 1;
110
+ }
111
+ return n;
112
+ }
113
+ /**
114
+ * Find the matching `}` for the `{` at openIdx in masked source.
115
+ * Returns the absolute offset of the closing brace, or -1 if not found.
116
+ */
117
+ function matchBrace(masked, openIdx) {
118
+ let depth = 0;
119
+ for (let i = openIdx; i < masked.length; i++) {
120
+ const c = masked[i];
121
+ if (c === "{")
122
+ depth += 1;
123
+ else if (c === "}") {
124
+ depth -= 1;
125
+ if (depth === 0)
126
+ return i;
127
+ }
128
+ }
129
+ return -1;
130
+ }
131
+ /**
132
+ * Pure parsing — given Go source text, yield the entity matches found.
133
+ * Exported so the test suite can exercise it without filesystem ceremony.
134
+ */
135
+ export function findGoEntities(source) {
136
+ const masked = stripCommentsAndStrings(source);
137
+ const out = [];
138
+ // Functions and methods: optional receiver, optional type params, args, optional return type.
139
+ // Group anatomy:
140
+ // recv (optional `(...)` receiver)
141
+ // name the identifier
142
+ // typeParams (optional `[...]` for generics)
143
+ // args the `(...)` parameter list
144
+ // ret everything after `)` up to the opening `{` or end-of-line
145
+ const funcRe = /\bfunc\s*(?:\(([^)]*)\)\s*)?([A-Za-z_][A-Za-z0-9_]*)(\[[^\]]*\])?\s*\(/g;
146
+ let m;
147
+ while ((m = funcRe.exec(masked)) !== null) {
148
+ const recv = m[1];
149
+ const name = m[2];
150
+ const typeParams = m[3] ?? "";
151
+ const start = m.index;
152
+ // Find the matching close paren of the arg list.
153
+ const argsOpen = m.index + m[0].length - 1;
154
+ const argsClose = findMatching(masked, argsOpen, "(", ")");
155
+ if (argsClose < 0)
156
+ continue;
157
+ // Find the start of the body or end-of-decl: next `{` on same line(s).
158
+ const afterArgs = argsClose + 1;
159
+ const braceIdx = masked.indexOf("{", afterArgs);
160
+ if (braceIdx < 0)
161
+ continue;
162
+ const bodyEnd = matchBrace(masked, braceIdx);
163
+ if (bodyEnd < 0)
164
+ continue;
165
+ const sig = source.slice(start, braceIdx).trim();
166
+ const isMethod = !!recv && recv.trim().length > 0;
167
+ let entityName = name;
168
+ if (isMethod) {
169
+ const recvType = parseReceiverType(recv);
170
+ if (recvType)
171
+ entityName = `${recvType}.${name}`;
172
+ }
173
+ out.push({
174
+ kind: isMethod ? "function" : "function", // both stored as 'function'; method-ness in name
175
+ name: entityName,
176
+ signature: typeParams ? sig.replace(name, name + typeParams) : sig,
177
+ startOffset: start,
178
+ endOffset: bodyEnd,
179
+ });
180
+ }
181
+ // type Name struct { ... } | interface { ... } | OtherType
182
+ const typeRe = /\btype\s+([A-Za-z_][A-Za-z0-9_]*)(\[[^\]]*\])?\s+(struct|interface)?/g;
183
+ while ((m = typeRe.exec(masked)) !== null) {
184
+ const name = m[1];
185
+ const tparams = m[2] ?? "";
186
+ const compoundKw = m[3];
187
+ const start = m.index;
188
+ if (compoundKw === "struct" || compoundKw === "interface") {
189
+ const braceIdx = masked.indexOf("{", m.index + m[0].length);
190
+ if (braceIdx < 0)
191
+ continue;
192
+ const bodyEnd = matchBrace(masked, braceIdx);
193
+ if (bodyEnd < 0)
194
+ continue;
195
+ // Map Go's struct → 'class' (nominal type with members) and
196
+ // interface → 'type' to fit the cross-language Entity.kind union.
197
+ // The actual `struct` / `interface` keyword is preserved in `signature`.
198
+ const kind = compoundKw === "struct" ? "class" : "type";
199
+ out.push({
200
+ kind,
201
+ name,
202
+ signature: source.slice(start, braceIdx).trim(),
203
+ startOffset: start,
204
+ endOffset: bodyEnd,
205
+ });
206
+ }
207
+ else {
208
+ // type alias / named type — single line
209
+ const nl = masked.indexOf("\n", m.index + m[0].length);
210
+ const end = nl < 0 ? masked.length : nl;
211
+ out.push({
212
+ kind: "type",
213
+ name,
214
+ signature: source.slice(start, end).trim(),
215
+ startOffset: start,
216
+ endOffset: end,
217
+ });
218
+ }
219
+ if (tparams) {
220
+ // tparams already absorbed into the regex via group 2 — nothing more to do
221
+ }
222
+ }
223
+ return out;
224
+ }
225
+ /**
226
+ * Find a balanced closing of `close` matching `open` starting at openIdx.
227
+ * Skips nothing — callers should pass already-masked source.
228
+ */
229
+ function findMatching(s, openIdx, open, close) {
230
+ let depth = 0;
231
+ for (let i = openIdx; i < s.length; i++) {
232
+ const c = s[i];
233
+ if (c === open)
234
+ depth += 1;
235
+ else if (c === close) {
236
+ depth -= 1;
237
+ if (depth === 0)
238
+ return i;
239
+ }
240
+ }
241
+ return -1;
242
+ }
243
+ /**
244
+ * Extract the receiver type from a method receiver like `r *Foo` or `f Foo[T]`.
245
+ * Returns just the bare type name (without `*` or generics).
246
+ */
247
+ function parseReceiverType(recv) {
248
+ const m = recv.match(/^\s*(?:[A-Za-z_][A-Za-z0-9_]*\s+)?\*?\s*([A-Za-z_][A-Za-z0-9_]*)/);
249
+ return m?.[1];
250
+ }
251
+ export class GoParser {
252
+ name = "go-regex";
253
+ languages = ["go"];
254
+ async *parseRepo(opts) {
255
+ const files = await listGoFiles(opts.cwd, opts.paths);
256
+ let i = 0;
257
+ for (const relPath of files) {
258
+ i += 1;
259
+ let source;
260
+ try {
261
+ source = await readFile(join(opts.cwd, relPath), "utf8");
262
+ }
263
+ catch {
264
+ opts.onProgress?.(i);
265
+ continue;
266
+ }
267
+ try {
268
+ for (const e of this.parseFile(relPath, source))
269
+ yield e;
270
+ }
271
+ catch {
272
+ // best-effort — keep going on bad files
273
+ }
274
+ opts.onProgress?.(i);
275
+ }
276
+ }
277
+ *parseFile(filePath, source) {
278
+ const matches = findGoEntities(source);
279
+ for (const mm of matches) {
280
+ yield {
281
+ id: stableId(filePath, mm.kind, mm.name, lineOf(source, mm.startOffset)),
282
+ kind: mm.kind,
283
+ name: mm.name,
284
+ filePath,
285
+ startLine: lineOf(source, mm.startOffset),
286
+ endLine: lineOf(source, mm.endOffset),
287
+ signature: mm.signature,
288
+ language: "go",
289
+ };
290
+ }
291
+ }
292
+ }
293
+ async function listGoFiles(cwd, paths) {
294
+ const r = await execGit(["ls-files"], { cwd });
295
+ if (r.code !== 0)
296
+ return [];
297
+ const tracked = r.stdout
298
+ .split("\n")
299
+ .map((l) => l.trim())
300
+ .filter(Boolean)
301
+ .filter((p) => GO_EXTENSIONS.has(extname(p).toLowerCase()))
302
+ .filter((p) => !/_test\.go$/.test(p))
303
+ .filter((p) => !/(^|\/)(vendor|testdata|node_modules)\//.test(p));
304
+ if (!paths || paths.length === 0)
305
+ return tracked;
306
+ return tracked.filter((p) => paths.some((needle) => p === needle || p.startsWith(needle + "/")));
307
+ }
308
+ function stableId(filePath, kind, name, line) {
309
+ const h = createHash("sha1")
310
+ .update(`${filePath}|${kind}|${name}|${line}`)
311
+ .digest("hex")
312
+ .slice(0, 12);
313
+ return `e_${h}`;
314
+ }
315
+ //# sourceMappingURL=go-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"go-parser.js","sourceRoot":"","sources":["../../src/entities/go-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=go-parser.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"go-parser.test.d.ts","sourceRoot":"","sources":["../../src/entities/go-parser.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,147 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { GoParser, findGoEntities } from "./go-parser.js";
3
+ const SAMPLE = `// Package math2 provides math utilities.
4
+ package math2
5
+
6
+ import (
7
+ "fmt"
8
+ )
9
+
10
+ const Pi = 3.14159
11
+
12
+ type Point struct {
13
+ X int
14
+ Y int
15
+ }
16
+
17
+ type Shape interface {
18
+ Area() float64
19
+ }
20
+
21
+ type Distance int
22
+
23
+ func Add(a, b int) int {
24
+ return a + b
25
+ }
26
+
27
+ func (p *Point) String() string {
28
+ return fmt.Sprintf("(%d, %d)", p.X, p.Y)
29
+ }
30
+
31
+ func GenericMax[T int | float64](a, b T) T {
32
+ if a > b {
33
+ return a
34
+ }
35
+ return b
36
+ }
37
+
38
+ // This // is // not // a // function — it's in a comment.
39
+ // func ShouldNotBeFound() {}
40
+
41
+ func WithRawString(name string) string {
42
+ return ` + "`func FakeFunc() {}`" + `
43
+ }
44
+ `;
45
+ describe("findGoEntities — pure regex extraction", () => {
46
+ it("finds top-level functions", () => {
47
+ const out = findGoEntities(SAMPLE);
48
+ const names = out.map((e) => e.name);
49
+ expect(names).toContain("Add");
50
+ });
51
+ it("captures struct as kind=class with name preserved", () => {
52
+ const out = findGoEntities(SAMPLE);
53
+ const point = out.find((e) => e.name === "Point");
54
+ expect(point?.kind).toBe("class");
55
+ expect(point?.signature).toContain("type Point struct");
56
+ });
57
+ it("captures interface as kind=type", () => {
58
+ const out = findGoEntities(SAMPLE);
59
+ const shape = out.find((e) => e.name === "Shape");
60
+ expect(shape?.kind).toBe("type");
61
+ expect(shape?.signature).toContain("interface");
62
+ });
63
+ it("captures named type alias as kind=type", () => {
64
+ const out = findGoEntities(SAMPLE);
65
+ const dist = out.find((e) => e.name === "Distance");
66
+ expect(dist?.kind).toBe("type");
67
+ });
68
+ it("methods are named Receiver.Method", () => {
69
+ const out = findGoEntities(SAMPLE);
70
+ const stringMethod = out.find((e) => e.name === "Point.String");
71
+ expect(stringMethod).toBeDefined();
72
+ expect(stringMethod?.kind).toBe("function");
73
+ });
74
+ it("supports generic functions (Go 1.18+)", () => {
75
+ const out = findGoEntities(SAMPLE);
76
+ const generic = out.find((e) => e.name === "GenericMax");
77
+ expect(generic).toBeDefined();
78
+ expect(generic?.signature).toContain("[T int | float64]");
79
+ });
80
+ it("ignores function-like content inside line comments", () => {
81
+ const out = findGoEntities(SAMPLE);
82
+ expect(out.find((e) => e.name === "ShouldNotBeFound")).toBeUndefined();
83
+ });
84
+ it("ignores function-like content inside raw strings", () => {
85
+ const out = findGoEntities(SAMPLE);
86
+ expect(out.find((e) => e.name === "FakeFunc")).toBeUndefined();
87
+ });
88
+ it("counts the right number of declarations on the sample", () => {
89
+ const out = findGoEntities(SAMPLE);
90
+ // Expected: Add, Point.String, GenericMax, WithRawString, Point, Shape, Distance = 7
91
+ expect(out.length).toBe(7);
92
+ });
93
+ });
94
+ describe("GoParser — file-level integration", () => {
95
+ it("yields Entity records via parseFile", () => {
96
+ const parser = new GoParser();
97
+ const entities = Array.from(parser.parseFile("foo/bar.go", SAMPLE));
98
+ expect(entities.length).toBe(7);
99
+ for (const e of entities) {
100
+ expect(e.language).toBe("go");
101
+ expect(e.filePath).toBe("foo/bar.go");
102
+ expect(e.startLine).toBeGreaterThan(0);
103
+ expect(e.endLine).toBeGreaterThanOrEqual(e.startLine);
104
+ expect(e.id).toMatch(/^e_[0-9a-f]{12}$/);
105
+ }
106
+ });
107
+ it("reports stable ids — same input → same id", () => {
108
+ const parser = new GoParser();
109
+ const e1 = Array.from(parser.parseFile("foo/bar.go", SAMPLE));
110
+ const e2 = Array.from(parser.parseFile("foo/bar.go", SAMPLE));
111
+ expect(e1.map((e) => e.id)).toEqual(e2.map((e) => e.id));
112
+ });
113
+ it("declares language='go' and supports the EntityParser contract", () => {
114
+ const parser = new GoParser();
115
+ expect(parser.languages).toEqual(["go"]);
116
+ expect(parser.name).toBe("go-regex");
117
+ });
118
+ });
119
+ describe("findGoEntities — edge cases", () => {
120
+ it("handles a file with no declarations", () => {
121
+ expect(findGoEntities("package empty\n")).toEqual([]);
122
+ });
123
+ it("handles malformed files without throwing", () => {
124
+ const out = findGoEntities("package x\nfunc Broken(");
125
+ expect(Array.isArray(out)).toBe(true);
126
+ });
127
+ it("ignores function keyword inside block comments", () => {
128
+ const src = `package x
129
+ /*
130
+ func InsideBlock() {}
131
+ */
132
+ func Real() {}
133
+ `;
134
+ const out = findGoEntities(src);
135
+ expect(out.map((e) => e.name)).toEqual(["Real"]);
136
+ });
137
+ it("captures methods on generic receivers", () => {
138
+ const src = `package x
139
+ type Stack[T any] struct { items []T }
140
+ func (s *Stack[T]) Push(v T) { s.items = append(s.items, v) }
141
+ `;
142
+ const out = findGoEntities(src);
143
+ const push = out.find((e) => e.name === "Stack.Push");
144
+ expect(push).toBeDefined();
145
+ });
146
+ });
147
+ //# sourceMappingURL=go-parser.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"go-parser.test.js","sourceRoot":"","sources":["../../src/entities/go-parser.test.ts"],"names":[],"mappings":"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"}
@@ -70,5 +70,6 @@ export declare const DEFAULT_CLONE_THRESHOLD = 0.85;
70
70
  export declare const DEFAULT_MAX_CLUSTER_SIZE = 12;
71
71
  export { TypeScriptParser, entityEmbeddingText } from "./typescript-parser.js";
72
72
  export { PythonParser } from "./python-parser.js";
73
+ export { GoParser, findGoEntities } from "./go-parser.js";
73
74
  export { CosineCloneDetector } from "./cosine-clones.js";
74
75
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/entities/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C;;;;;;;GAOG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;IAC7B,SAAS,CAAC,IAAI,EAAE,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACrD,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;CAC/D;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,qEAAqE;IACrE,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5C;AAED;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;CACvD;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,gDAAgD;IAChD,EAAE,EAAE,MAAM,CAAC;IACX,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAC5C,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAE3C,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/entities/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C;;;;;;;GAOG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;IAC7B,SAAS,CAAC,IAAI,EAAE,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACrD,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;CAC/D;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,qEAAqE;IACrE,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5C;AAED;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;CACvD;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,gDAAgD;IAChD,EAAE,EAAE,MAAM,CAAC;IACX,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAC5C,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAE3C,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -20,5 +20,6 @@ export const DEFAULT_CLONE_THRESHOLD = 0.85;
20
20
  export const DEFAULT_MAX_CLUSTER_SIZE = 12;
21
21
  export { TypeScriptParser, entityEmbeddingText } from "./typescript-parser.js";
22
22
  export { PythonParser } from "./python-parser.js";
23
+ export { GoParser, findGoEntities } from "./go-parser.js";
23
24
  export { CosineCloneDetector } from "./cosine-clones.js";
24
25
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/entities/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AA0DH;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,CAAC;AAC5C,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,CAAC;AAE3C,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/entities/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AA0DH;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,CAAC;AAC5C,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,CAAC;AAE3C,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC"}
package/dist/index.d.ts CHANGED
@@ -7,4 +7,6 @@ export * as correlate from "./correlate/index.js";
7
7
  export * as entities from "./entities/index.js";
8
8
  export * as enrich from "./enrich/index.js";
9
9
  export * as util from "./util/index.js";
10
+ export * as wisdom from "./wisdom/index.js";
11
+ export * as insights from "./insights/index.js";
10
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAC;AAC9C,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAC;AAChD,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAC;AAChD,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAC;AAC9C,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAC;AAChD,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAC;AAChD,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAC;AACxC,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAC"}
package/dist/index.js CHANGED
@@ -7,4 +7,6 @@ export * as correlate from "./correlate/index.js";
7
7
  export * as entities from "./entities/index.js";
8
8
  export * as enrich from "./enrich/index.js";
9
9
  export * as util from "./util/index.js";
10
+ export * as wisdom from "./wisdom/index.js";
11
+ export * as insights from "./insights/index.js";
10
12
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAC;AAC9C,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAC;AAChD,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAC;AAChD,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAC;AAC9C,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAC;AAChD,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAC;AAChD,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAC;AACxC,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import type { Commit, CommitChunk, EmbeddingProvider, IndexerProgress } from "../types.js";
2
2
  import { MnemeStore } from "../store/sqlite.js";
3
+ import { type RedactOptions } from "../util/redact.js";
3
4
  export interface IndexerOptions {
4
5
  cwd: string;
5
6
  store: MnemeStore;
@@ -8,6 +9,16 @@ export interface IndexerOptions {
8
9
  maxCount?: number;
9
10
  embedBatchSize?: number;
10
11
  onProgress?: (p: IndexerProgress) => void;
12
+ /**
13
+ * Strip secrets from chunk text before storage and embedding.
14
+ * true | undefined → built-in rules with default settings
15
+ * false → no redaction (kept as escape hatch for trusted repos)
16
+ * { ... } → forwarded to redact()
17
+ *
18
+ * Default: ON (true). Honest "no secret should ever leave the machine"
19
+ * is more important than slightly more readable indexed text.
20
+ */
21
+ redact?: boolean | RedactOptions;
11
22
  }
12
23
  export declare class Indexer {
13
24
  private opts;
@@ -15,6 +26,7 @@ export declare class Indexer {
15
26
  run(): Promise<{
16
27
  commits: number;
17
28
  chunks: number;
29
+ redactionHits: Record<string, number>;
18
30
  }>;
19
31
  }
20
32
  export declare function buildChunks(commits: Commit[]): CommitChunk[];
@@ -1 +1 @@
1
- {"version":3,"file":"indexer.d.ts","sourceRoot":"","sources":["../../src/indexer/indexer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,MAAM,EACN,WAAW,EACX,iBAAiB,EACjB,eAAe,EAChB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,UAAU,CAAC;IAClB,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,eAAe,KAAK,IAAI,CAAC;CAC3C;AAED,qBAAa,OAAO;IACN,OAAO,CAAC,IAAI;gBAAJ,IAAI,EAAE,cAAc;IAElC,GAAG,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAwD1D;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,WAAW,EAAE,CAmB5D;AAOD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,SAAM,GAAG,MAAM,EAAE,CAgBhE"}
1
+ {"version":3,"file":"indexer.d.ts","sourceRoot":"","sources":["../../src/indexer/indexer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,MAAM,EACN,WAAW,EACX,iBAAiB,EACjB,eAAe,EAChB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAqB,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAE1E,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,UAAU,CAAC;IAClB,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,eAAe,KAAK,IAAI,CAAC;IAC1C;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,OAAO,GAAG,aAAa,CAAC;CAClC;AAED,qBAAa,OAAO;IACN,OAAO,CAAC,IAAI;gBAAJ,IAAI,EAAE,cAAc;IAElC,GAAG,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC;CAmFjG;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,WAAW,EAAE,CAmB5D;AAOD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,SAAM,GAAG,MAAM,EAAE,CAgBhE"}