@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.
- package/dist/entities/go-parser.d.ts +47 -0
- package/dist/entities/go-parser.d.ts.map +1 -0
- package/dist/entities/go-parser.js +315 -0
- package/dist/entities/go-parser.js.map +1 -0
- package/dist/entities/go-parser.test.d.ts +2 -0
- package/dist/entities/go-parser.test.d.ts.map +1 -0
- package/dist/entities/go-parser.test.js +147 -0
- package/dist/entities/go-parser.test.js.map +1 -0
- package/dist/entities/index.d.ts +1 -0
- package/dist/entities/index.d.ts.map +1 -1
- package/dist/entities/index.js +1 -0
- package/dist/entities/index.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/indexer/indexer.d.ts +12 -0
- package/dist/indexer/indexer.d.ts.map +1 -1
- package/dist/indexer/indexer.js +28 -1
- package/dist/indexer/indexer.js.map +1 -1
- package/dist/insights/decisions.d.ts +38 -0
- package/dist/insights/decisions.d.ts.map +1 -0
- package/dist/insights/decisions.js +125 -0
- package/dist/insights/decisions.js.map +1 -0
- package/dist/insights/decisions.test.d.ts +2 -0
- package/dist/insights/decisions.test.d.ts.map +1 -0
- package/dist/insights/decisions.test.js +141 -0
- package/dist/insights/decisions.test.js.map +1 -0
- package/dist/insights/dream.d.ts +71 -0
- package/dist/insights/dream.d.ts.map +1 -0
- package/dist/insights/dream.js +235 -0
- package/dist/insights/dream.js.map +1 -0
- package/dist/insights/dream.test.d.ts +2 -0
- package/dist/insights/dream.test.d.ts.map +1 -0
- package/dist/insights/dream.test.js +127 -0
- package/dist/insights/dream.test.js.map +1 -0
- package/dist/insights/index.d.ts +16 -0
- package/dist/insights/index.d.ts.map +1 -0
- package/dist/insights/index.js +16 -0
- package/dist/insights/index.js.map +1 -0
- package/dist/insights/obsidian.d.ts +42 -0
- package/dist/insights/obsidian.d.ts.map +1 -0
- package/dist/insights/obsidian.js +263 -0
- package/dist/insights/obsidian.js.map +1 -0
- package/dist/insights/obsidian.test.d.ts +2 -0
- package/dist/insights/obsidian.test.d.ts.map +1 -0
- package/dist/insights/obsidian.test.js +241 -0
- package/dist/insights/obsidian.test.js.map +1 -0
- package/dist/insights/stack-trace.d.ts +40 -0
- package/dist/insights/stack-trace.d.ts.map +1 -0
- package/dist/insights/stack-trace.js +127 -0
- package/dist/insights/stack-trace.js.map +1 -0
- package/dist/insights/stack-trace.test.d.ts +2 -0
- package/dist/insights/stack-trace.test.d.ts.map +1 -0
- package/dist/insights/stack-trace.test.js +103 -0
- package/dist/insights/stack-trace.test.js.map +1 -0
- package/dist/insights/story.d.ts +34 -0
- package/dist/insights/story.d.ts.map +1 -0
- package/dist/insights/story.js +100 -0
- package/dist/insights/story.js.map +1 -0
- package/dist/insights/story.test.d.ts +2 -0
- package/dist/insights/story.test.d.ts.map +1 -0
- package/dist/insights/story.test.js +99 -0
- package/dist/insights/story.test.js.map +1 -0
- package/dist/insights/suggest.d.ts +29 -0
- package/dist/insights/suggest.d.ts.map +1 -0
- package/dist/insights/suggest.js +93 -0
- package/dist/insights/suggest.js.map +1 -0
- package/dist/insights/suggest.test.d.ts +2 -0
- package/dist/insights/suggest.test.d.ts.map +1 -0
- package/dist/insights/suggest.test.js +71 -0
- package/dist/insights/suggest.test.js.map +1 -0
- package/dist/insights/who-knows.d.ts +48 -0
- package/dist/insights/who-knows.d.ts.map +1 -0
- package/dist/insights/who-knows.js +96 -0
- package/dist/insights/who-knows.js.map +1 -0
- package/dist/insights/who-knows.test.d.ts +2 -0
- package/dist/insights/who-knows.test.d.ts.map +1 -0
- package/dist/insights/who-knows.test.js +47 -0
- package/dist/insights/who-knows.test.js.map +1 -0
- package/dist/retrieve/index.d.ts +2 -0
- package/dist/retrieve/index.d.ts.map +1 -1
- package/dist/retrieve/index.js +2 -0
- package/dist/retrieve/index.js.map +1 -1
- package/dist/retrieve/intent.d.ts +32 -0
- package/dist/retrieve/intent.d.ts.map +1 -0
- package/dist/retrieve/intent.js +104 -0
- package/dist/retrieve/intent.js.map +1 -0
- package/dist/retrieve/intent.test.d.ts +2 -0
- package/dist/retrieve/intent.test.d.ts.map +1 -0
- package/dist/retrieve/intent.test.js +106 -0
- package/dist/retrieve/intent.test.js.map +1 -0
- package/dist/retrieve/search.d.ts +30 -0
- package/dist/retrieve/search.d.ts.map +1 -1
- package/dist/retrieve/search.js +48 -0
- package/dist/retrieve/search.js.map +1 -1
- package/dist/retrieve/search.test.js +84 -1
- package/dist/retrieve/search.test.js.map +1 -1
- package/dist/retrieve/synthesize.d.ts +57 -0
- package/dist/retrieve/synthesize.d.ts.map +1 -0
- package/dist/retrieve/synthesize.js +160 -0
- package/dist/retrieve/synthesize.js.map +1 -0
- package/dist/retrieve/synthesize.test.d.ts +2 -0
- package/dist/retrieve/synthesize.test.d.ts.map +1 -0
- package/dist/retrieve/synthesize.test.js +116 -0
- package/dist/retrieve/synthesize.test.js.map +1 -0
- package/dist/store/schema.d.ts +2 -2
- package/dist/store/schema.d.ts.map +1 -1
- package/dist/store/schema.js +55 -1
- package/dist/store/schema.js.map +1 -1
- package/dist/store/sqlite.test.js +1 -1
- package/dist/util/index.d.ts +2 -0
- package/dist/util/index.d.ts.map +1 -1
- package/dist/util/index.js +2 -1
- package/dist/util/index.js.map +1 -1
- package/dist/util/redact.d.ts +58 -0
- package/dist/util/redact.d.ts.map +1 -0
- package/dist/util/redact.js +129 -0
- package/dist/util/redact.js.map +1 -0
- package/dist/util/redact.test.d.ts +2 -0
- package/dist/util/redact.test.d.ts.map +1 -0
- package/dist/util/redact.test.js +148 -0
- package/dist/util/redact.test.js.map +1 -0
- package/dist/wisdom/calibrator.d.ts +43 -0
- package/dist/wisdom/calibrator.d.ts.map +1 -0
- package/dist/wisdom/calibrator.js +120 -0
- package/dist/wisdom/calibrator.js.map +1 -0
- package/dist/wisdom/feedback.d.ts +45 -0
- package/dist/wisdom/feedback.d.ts.map +1 -0
- package/dist/wisdom/feedback.js +116 -0
- package/dist/wisdom/feedback.js.map +1 -0
- package/dist/wisdom/index.d.ts +15 -0
- package/dist/wisdom/index.d.ts.map +1 -0
- package/dist/wisdom/index.js +15 -0
- package/dist/wisdom/index.js.map +1 -0
- package/dist/wisdom/types.d.ts +67 -0
- package/dist/wisdom/types.d.ts.map +1 -0
- package/dist/wisdom/types.js +20 -0
- package/dist/wisdom/types.js.map +1 -0
- package/dist/wisdom/wisdom.test.d.ts +2 -0
- package/dist/wisdom/wisdom.test.d.ts.map +1 -0
- package/dist/wisdom/wisdom.test.js +144 -0
- package/dist/wisdom/wisdom.test.js.map +1 -0
- 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 @@
|
|
|
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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"}
|
package/dist/entities/index.d.ts
CHANGED
|
@@ -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"}
|
package/dist/entities/index.js
CHANGED
|
@@ -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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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;
|
|
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"}
|