@nxuss/lemma 1.7.1 → 1.8.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/README.md +69 -8
- package/bin/brain-ingest.js +56 -0
- package/dist/cjs/mcp/tools.d.ts.map +1 -1
- package/dist/cjs/mcp/tools.js +247 -48
- package/dist/cjs/mcp/tools.js.map +1 -1
- package/dist/cjs/pr-review/bridge/BrainBridge.d.ts +11 -1
- package/dist/cjs/pr-review/bridge/BrainBridge.d.ts.map +1 -1
- package/dist/cjs/pr-review/bridge/BrainBridge.js +18 -23
- package/dist/cjs/pr-review/bridge/BrainBridge.js.map +1 -1
- package/dist/cjs/protocol/utils.d.ts.map +1 -1
- package/dist/cjs/protocol/utils.js +6 -5
- package/dist/cjs/protocol/utils.js.map +1 -1
- package/dist/cjs/proxy/ComplexityRouter.d.ts +7 -0
- package/dist/cjs/proxy/ComplexityRouter.d.ts.map +1 -1
- package/dist/cjs/proxy/ComplexityRouter.js +18 -5
- package/dist/cjs/proxy/ComplexityRouter.js.map +1 -1
- package/dist/cjs/subconscious/GitIngest.d.ts +48 -0
- package/dist/cjs/subconscious/GitIngest.d.ts.map +1 -0
- package/dist/cjs/subconscious/GitIngest.js +175 -0
- package/dist/cjs/subconscious/GitIngest.js.map +1 -0
- package/dist/cjs/subconscious/TheBrainV2.d.ts +23 -1
- package/dist/cjs/subconscious/TheBrainV2.d.ts.map +1 -1
- package/dist/cjs/subconscious/TheBrainV2.js +124 -17
- package/dist/cjs/subconscious/TheBrainV2.js.map +1 -1
- package/dist/cjs/utils/ConversationCheckpoint.d.ts +2 -0
- package/dist/cjs/utils/ConversationCheckpoint.d.ts.map +1 -1
- package/dist/cjs/utils/ConversationCheckpoint.js +38 -0
- package/dist/cjs/utils/ConversationCheckpoint.js.map +1 -1
- package/dist/cjs/utils/TokenReceipt.d.ts +6 -0
- package/dist/cjs/utils/TokenReceipt.d.ts.map +1 -1
- package/dist/cjs/utils/TokenReceipt.js +9 -0
- package/dist/cjs/utils/TokenReceipt.js.map +1 -1
- package/dist/esm/mcp/tools.d.ts.map +1 -1
- package/dist/esm/mcp/tools.js +250 -51
- package/dist/esm/mcp/tools.js.map +1 -1
- package/dist/esm/pr-review/bridge/BrainBridge.d.ts +11 -1
- package/dist/esm/pr-review/bridge/BrainBridge.d.ts.map +1 -1
- package/dist/esm/pr-review/bridge/BrainBridge.js +18 -20
- package/dist/esm/pr-review/bridge/BrainBridge.js.map +1 -1
- package/dist/esm/protocol/utils.d.ts.map +1 -1
- package/dist/esm/protocol/utils.js +6 -5
- package/dist/esm/protocol/utils.js.map +1 -1
- package/dist/esm/proxy/ComplexityRouter.d.ts +7 -0
- package/dist/esm/proxy/ComplexityRouter.d.ts.map +1 -1
- package/dist/esm/proxy/ComplexityRouter.js +18 -5
- package/dist/esm/proxy/ComplexityRouter.js.map +1 -1
- package/dist/esm/subconscious/GitIngest.d.ts +48 -0
- package/dist/esm/subconscious/GitIngest.d.ts.map +1 -0
- package/dist/esm/subconscious/GitIngest.js +166 -0
- package/dist/esm/subconscious/GitIngest.js.map +1 -0
- package/dist/esm/subconscious/TheBrainV2.d.ts +23 -1
- package/dist/esm/subconscious/TheBrainV2.d.ts.map +1 -1
- package/dist/esm/subconscious/TheBrainV2.js +124 -17
- package/dist/esm/subconscious/TheBrainV2.js.map +1 -1
- package/dist/esm/utils/ConversationCheckpoint.d.ts +2 -0
- package/dist/esm/utils/ConversationCheckpoint.d.ts.map +1 -1
- package/dist/esm/utils/ConversationCheckpoint.js +37 -0
- package/dist/esm/utils/ConversationCheckpoint.js.map +1 -1
- package/dist/esm/utils/TokenReceipt.d.ts +6 -0
- package/dist/esm/utils/TokenReceipt.d.ts.map +1 -1
- package/dist/esm/utils/TokenReceipt.js +8 -0
- package/dist/esm/utils/TokenReceipt.js.map +1 -1
- package/package.json +4 -2
|
@@ -4,8 +4,18 @@ interface BrainMemory {
|
|
|
4
4
|
response: string;
|
|
5
5
|
similarity: number;
|
|
6
6
|
}
|
|
7
|
+
/**
|
|
8
|
+
* Talks to TheBrainV2 directly instead of the proxy's /api/search and /api/memory/store
|
|
9
|
+
* routes. Those routes are backed by ChromaDB + a local Ollama embeddings server on :11434 —
|
|
10
|
+
* the exact stack TheBrainV2 was built to replace — so whenever Ollama wasn't running (the
|
|
11
|
+
* common case now), every call here silently no-opped: findPriorBugs always returned empty
|
|
12
|
+
* and storeReview always failed, both swallowed by try/catch. PR review memory and
|
|
13
|
+
* interactive coding memory were two disconnected systems as a result. Using the same
|
|
14
|
+
* zero-dependency Brain instance everything else reads from means a review actually sees
|
|
15
|
+
* what search_memory/get_telepathic_hints already know about a file, and vice versa.
|
|
16
|
+
*/
|
|
7
17
|
export declare class BrainBridge {
|
|
8
|
-
searchQuery
|
|
18
|
+
private searchQuery;
|
|
9
19
|
findPriorBugs(files: string[]): Promise<Map<string, BrainMemory[]>>;
|
|
10
20
|
getContextualHints(files: string[], baseBranch: string): Promise<{
|
|
11
21
|
file: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BrainBridge.d.ts","sourceRoot":"","sources":["../../../../src/pr-review/bridge/BrainBridge.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"BrainBridge.d.ts","sourceRoot":"","sources":["../../../../src/pr-review/bridge/BrainBridge.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAEnC,UAAU,WAAW;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,WAAW;IAKb,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;IAWnE,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,EAAE,CAAC;IAcrG,WAAW,CACf,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,OAAO,EAAE,EACnB,KAAK,EAAE,MAAM,EAAE,GACd,OAAO,CAAC,OAAO,CAAC;IAoBb,wBAAwB,CAC5B,KAAK,EAAE,MAAM,EAAE,EACf,WAAW,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GACrF,OAAO,CAAC,OAAO,WAAW,CAAC;CAkC/B"}
|
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.BrainBridge = void 0;
|
|
7
|
-
const
|
|
8
|
-
|
|
4
|
+
const TheBrainV2_1 = require("../../subconscious/TheBrainV2");
|
|
5
|
+
/**
|
|
6
|
+
* Talks to TheBrainV2 directly instead of the proxy's /api/search and /api/memory/store
|
|
7
|
+
* routes. Those routes are backed by ChromaDB + a local Ollama embeddings server on :11434 —
|
|
8
|
+
* the exact stack TheBrainV2 was built to replace — so whenever Ollama wasn't running (the
|
|
9
|
+
* common case now), every call here silently no-opped: findPriorBugs always returned empty
|
|
10
|
+
* and storeReview always failed, both swallowed by try/catch. PR review memory and
|
|
11
|
+
* interactive coding memory were two disconnected systems as a result. Using the same
|
|
12
|
+
* zero-dependency Brain instance everything else reads from means a review actually sees
|
|
13
|
+
* what search_memory/get_telepathic_hints already know about a file, and vice versa.
|
|
14
|
+
*/
|
|
9
15
|
class BrainBridge {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const res = await axios_1.default.get(`http://localhost:${port}/api/search?q=${encodeURIComponent(query)}&limit=${limit}`);
|
|
14
|
-
return (res.data.results || []).filter((r) => r.similarity >= 0.5);
|
|
15
|
-
}
|
|
16
|
-
catch {
|
|
17
|
-
return [];
|
|
18
|
-
}
|
|
16
|
+
searchQuery(query, limit = 3) {
|
|
17
|
+
const results = (0, TheBrainV2_1.getBrain)().search(query, limit, 0.5, { projectId: (0, TheBrainV2_1.deriveProjectId)() });
|
|
18
|
+
return results.map((r) => ({ prompt: r.query, response: r.response, similarity: r.similarity }));
|
|
19
19
|
}
|
|
20
20
|
async findPriorBugs(files) {
|
|
21
21
|
const results = new Map();
|
|
22
22
|
for (const file of files) {
|
|
23
|
-
const memories =
|
|
23
|
+
const memories = this.searchQuery(`bug ${file} error fix regression`, 2);
|
|
24
24
|
if (memories.length > 0) {
|
|
25
25
|
results.set(file, memories);
|
|
26
26
|
}
|
|
@@ -30,7 +30,7 @@ class BrainBridge {
|
|
|
30
30
|
async getContextualHints(files, baseBranch) {
|
|
31
31
|
const hints = [];
|
|
32
32
|
for (const file of files) {
|
|
33
|
-
const memories =
|
|
33
|
+
const memories = this.searchQuery(`${file} ${baseBranch} architecture pattern`, 2);
|
|
34
34
|
if (memories.length > 0) {
|
|
35
35
|
hints.push({
|
|
36
36
|
file,
|
|
@@ -42,7 +42,6 @@ class BrainBridge {
|
|
|
42
42
|
}
|
|
43
43
|
async storeReview(reviewId, repo, prNumber, score, verdict, findings, files) {
|
|
44
44
|
try {
|
|
45
|
-
const port = (0, utils_1.getProxyPort)();
|
|
46
45
|
const query = `PR #${prNumber} — ${repo}: ${files.join(", ")}`;
|
|
47
46
|
const response = JSON.stringify({
|
|
48
47
|
reviewId,
|
|
@@ -54,11 +53,7 @@ class BrainBridge {
|
|
|
54
53
|
files,
|
|
55
54
|
summary: findings.map(f => `[${f.severity}] ${f.filePath}:${f.line || "?"} — ${f.message}`),
|
|
56
55
|
});
|
|
57
|
-
|
|
58
|
-
query,
|
|
59
|
-
response,
|
|
60
|
-
provider: "pr-review",
|
|
61
|
-
});
|
|
56
|
+
(0, TheBrainV2_1.getBrain)().store(query, response, "pr-review", 0.92, undefined, (0, TheBrainV2_1.deriveProjectId)());
|
|
62
57
|
return true;
|
|
63
58
|
}
|
|
64
59
|
catch {
|
|
@@ -69,7 +64,7 @@ class BrainBridge {
|
|
|
69
64
|
const weights = { ...baseWeights };
|
|
70
65
|
const highRiskModules = [];
|
|
71
66
|
for (const file of files) {
|
|
72
|
-
const memories =
|
|
67
|
+
const memories = this.searchQuery(`high risk bug ${file}`, 2);
|
|
73
68
|
const hasBugs = memories.some(m => {
|
|
74
69
|
try {
|
|
75
70
|
const data = JSON.parse(typeof m.response === "string" ? m.response : "");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BrainBridge.js","sourceRoot":"","sources":["../../../../src/pr-review/bridge/BrainBridge.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"BrainBridge.js","sourceRoot":"","sources":["../../../../src/pr-review/bridge/BrainBridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/protocol/utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/protocol/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -36,6 +36,7 @@ exports.formatMessageForLog = formatMessageForLog;
|
|
|
36
36
|
exports.batchMessages = batchMessages;
|
|
37
37
|
exports.unbatchMessages = unbatchMessages;
|
|
38
38
|
const uuid_1 = require("uuid");
|
|
39
|
+
const zlib_1 = require("zlib");
|
|
39
40
|
const types_1 = require("./types");
|
|
40
41
|
const validators_1 = require("./validators");
|
|
41
42
|
/**
|
|
@@ -199,11 +200,11 @@ function getMessageSize(message) {
|
|
|
199
200
|
function compressPayload(payload) {
|
|
200
201
|
const serialized = JSON.stringify(payload);
|
|
201
202
|
const size = new Blob([serialized]).size;
|
|
202
|
-
// Compress if larger than 10KB
|
|
203
|
+
// Compress if larger than 10KB
|
|
203
204
|
if (size > 10240) {
|
|
204
|
-
|
|
205
|
+
const gzipped = (0, zlib_1.gzipSync)(Buffer.from(serialized, 'utf-8'));
|
|
205
206
|
return {
|
|
206
|
-
data:
|
|
207
|
+
data: gzipped.toString('base64'),
|
|
207
208
|
compressed: true
|
|
208
209
|
};
|
|
209
210
|
}
|
|
@@ -219,8 +220,8 @@ function decompressPayload(data, compressed) {
|
|
|
219
220
|
if (!compressed) {
|
|
220
221
|
return JSON.parse(data);
|
|
221
222
|
}
|
|
222
|
-
|
|
223
|
-
return JSON.parse(
|
|
223
|
+
const gunzipped = (0, zlib_1.gunzipSync)(Buffer.from(data, 'base64'));
|
|
224
|
+
return JSON.parse(gunzipped.toString('utf-8'));
|
|
224
225
|
}
|
|
225
226
|
/**
|
|
226
227
|
* Creates a response message from a request
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/protocol/utils.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/protocol/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,18 @@
|
|
|
1
1
|
export interface ComplexityRouterConfig {
|
|
2
2
|
cheapModel?: string;
|
|
3
|
+
/**
|
|
4
|
+
* Cheap model to fall back to per provider family, keyed by a substring of the
|
|
5
|
+
* requested model id ('claude', 'gemini', ...). Overridable from lemma.config.json
|
|
6
|
+
* so a retired model id can be corrected without shipping a new build.
|
|
7
|
+
*/
|
|
8
|
+
cheapModelsByFamily?: Record<string, string>;
|
|
3
9
|
complexKeywords?: string[];
|
|
4
10
|
complexityThreshold?: number;
|
|
5
11
|
disabled?: boolean;
|
|
6
12
|
}
|
|
7
13
|
export declare class ComplexityRouter {
|
|
8
14
|
private cheapModel;
|
|
15
|
+
private cheapModelsByFamily;
|
|
9
16
|
private complexKeywords;
|
|
10
17
|
private syntaxDensityThreshold;
|
|
11
18
|
constructor(config?: ComplexityRouterConfig);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ComplexityRouter.d.ts","sourceRoot":"","sources":["../../../src/proxy/ComplexityRouter.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,sBAAsB;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;
|
|
1
|
+
{"version":3,"file":"ComplexityRouter.d.ts","sourceRoot":"","sources":["../../../src/proxy/ComplexityRouter.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,sBAAsB;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAYD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,mBAAmB,CAAyB;IACpD,OAAO,CAAC,eAAe,CAAW;IAClC,OAAO,CAAC,sBAAsB,CAAS;gBAE3B,MAAM,GAAE,sBAA2B;IAYxC,YAAY,CAAC,MAAM,EAAE,sBAAsB,GAAG,IAAI;IASlD,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,KAAK,GAAG,MAAM,CAAA;KAAE;CAsEvG;AAED,eAAe,gBAAgB,CAAC"}
|
|
@@ -1,9 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ComplexityRouter = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Model ids go stale as providers retire them; these are defaults, not truth. If the
|
|
6
|
+
* router starts recommending a model your provider rejects, override
|
|
7
|
+
* routing.complexity.cheapModelsByFamily in lemma.config.json.
|
|
8
|
+
*/
|
|
9
|
+
const DEFAULT_CHEAP_MODELS_BY_FAMILY = {
|
|
10
|
+
claude: 'claude-haiku-4-5-20251001',
|
|
11
|
+
gemini: 'gemini-2.0-flash',
|
|
12
|
+
};
|
|
4
13
|
class ComplexityRouter {
|
|
5
14
|
constructor(config = {}) {
|
|
6
15
|
this.cheapModel = config.cheapModel || 'gpt-4o-mini';
|
|
16
|
+
this.cheapModelsByFamily = { ...DEFAULT_CHEAP_MODELS_BY_FAMILY, ...(config.cheapModelsByFamily || {}) };
|
|
7
17
|
this.complexKeywords = config.complexKeywords || [
|
|
8
18
|
'architecture', 'design', 'debug', 'trace', 'system', 'microservices',
|
|
9
19
|
'refactor', 'optimize', 'implement', 'algorithm', 'distributed',
|
|
@@ -15,6 +25,9 @@ class ComplexityRouter {
|
|
|
15
25
|
updateConfig(config) {
|
|
16
26
|
if (config.cheapModel)
|
|
17
27
|
this.cheapModel = config.cheapModel;
|
|
28
|
+
if (config.cheapModelsByFamily) {
|
|
29
|
+
this.cheapModelsByFamily = { ...this.cheapModelsByFamily, ...config.cheapModelsByFamily };
|
|
30
|
+
}
|
|
18
31
|
if (config.complexKeywords)
|
|
19
32
|
this.complexKeywords = config.complexKeywords;
|
|
20
33
|
if (config.complexityThreshold)
|
|
@@ -72,11 +85,11 @@ class ComplexityRouter {
|
|
|
72
85
|
let cheapModel = this.cheapModel;
|
|
73
86
|
if (originalModel) {
|
|
74
87
|
const lowerModel = originalModel.toLowerCase();
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
88
|
+
for (const [family, model] of Object.entries(this.cheapModelsByFamily)) {
|
|
89
|
+
if (lowerModel.includes(family)) {
|
|
90
|
+
cheapModel = model;
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
80
93
|
}
|
|
81
94
|
}
|
|
82
95
|
console.log(`[ComplexityRouter] Low complexity detected. Routing to ${cheapModel}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ComplexityRouter.js","sourceRoot":"","sources":["../../../src/proxy/ComplexityRouter.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"ComplexityRouter.js","sourceRoot":"","sources":["../../../src/proxy/ComplexityRouter.ts"],"names":[],"mappings":";;;AAcA;;;;GAIG;AACH,MAAM,8BAA8B,GAA2B;IAC7D,MAAM,EAAE,2BAA2B;IACnC,MAAM,EAAE,kBAAkB;CAC3B,CAAC;AAEF,MAAa,gBAAgB;IAM3B,YAAY,SAAiC,EAAE;QAC7C,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,aAAa,CAAC;QACrD,IAAI,CAAC,mBAAmB,GAAG,EAAE,GAAG,8BAA8B,EAAE,GAAG,CAAC,MAAM,CAAC,mBAAmB,IAAI,EAAE,CAAC,EAAE,CAAC;QACxG,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,IAAI;YAC/C,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,eAAe;YACrE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa;YAC/D,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU;YAC7D,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB;SAC7D,CAAC;QACF,IAAI,CAAC,sBAAsB,GAAG,MAAM,CAAC,mBAAmB,IAAI,IAAI,CAAC,CAAC,uBAAuB;IAC3F,CAAC;IAEM,YAAY,CAAC,MAA8B;QAChD,IAAI,MAAM,CAAC,UAAU;YAAE,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QAC3D,IAAI,MAAM,CAAC,mBAAmB,EAAE,CAAC;YAC/B,IAAI,CAAC,mBAAmB,GAAG,EAAE,GAAG,IAAI,CAAC,mBAAmB,EAAE,GAAG,MAAM,CAAC,mBAAmB,EAAE,CAAC;QAC5F,CAAC;QACD,IAAI,MAAM,CAAC,eAAe;YAAE,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;QAC1E,IAAI,MAAM,CAAC,mBAAmB;YAAE,IAAI,CAAC,sBAAsB,GAAG,MAAM,CAAC,mBAAmB,CAAC;IAC3F,CAAC;IAEM,QAAQ,CAAC,MAAc,EAAE,aAAsB;QACpD,+DAA+D;QAC/D,MAAM,OAAO,GAAG,aAAa,EAAE,UAAU,CAAC,OAAO,CAAC;YAClC,aAAa,EAAE,UAAU,CAAC,SAAS,CAAC;YACpC,aAAa,EAAE,UAAU,CAAC,QAAQ,CAAC;YACnC,aAAa,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;QAEnD,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,EAAE,KAAK,EAAE,aAAa,IAAI,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;QAClE,CAAC;QAED,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YAClC,OAAO,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;QACvF,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;QACnC,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI,gBAAgB,GAAG,EAAE,CAAC;QAE1B,+CAA+C;QAC/C,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,SAAS,GAAG,IAAI,CAAC;YACjB,gBAAgB,GAAG,gCAAgC,CAAC;QACtD,CAAC;QAED,oCAAoC;QACpC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,cAAc,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;YAC9E,MAAM,OAAO,GAAG,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;YAC/C,IAAI,OAAO,GAAG,IAAI,CAAC,sBAAsB,IAAI,MAAM,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;gBAChE,SAAS,GAAG,IAAI,CAAC;gBACjB,gBAAgB,GAAG,wBAAwB,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;YAC5E,CAAC;QACH,CAAC;QAED,kDAAkD;QAClD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;gBACtC,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;oBACvB,SAAS,GAAG,IAAI,CAAC;oBACjB,gBAAgB,GAAG,6BAA6B,EAAE,GAAG,CAAC;oBACtD,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QAED,iFAAiF;QACjF,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;YACvC,SAAS,GAAG,IAAI,CAAC;YACjB,gBAAgB,GAAG,yBAAyB,MAAM,CAAC,MAAM,SAAS,CAAC;QACrE,CAAC;QAED,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,gDAAgD,gBAAgB,iBAAiB,aAAa,IAAI,QAAQ,EAAE,CAAC,CAAC;YAC1H,OAAO,EAAE,KAAK,EAAE,aAAa,IAAI,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;QAClE,CAAC;aAAM,CAAC;YACN,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;YACjC,IAAI,aAAa,EAAE,CAAC;gBAClB,MAAM,UAAU,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC;gBAC/C,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC;oBACvE,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;wBAChC,UAAU,GAAG,KAAK,CAAC;wBACnB,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,0DAA0D,UAAU,EAAE,CAAC,CAAC;YACpF,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;QAClD,CAAC;IACH,CAAC;CACF;AAjGD,4CAiGC;AAED,kBAAe,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitIngest — feeds The Brain from sources that already exist and already have context,
|
|
3
|
+
* instead of depending on the model remembering to call `store_memory`:
|
|
4
|
+
*
|
|
5
|
+
* - Every git commit (message + files touched) — one entry per commit, incremental.
|
|
6
|
+
* - CHANGELOG.md release notes — one entry per version, no LLM involved.
|
|
7
|
+
*
|
|
8
|
+
* Both are deterministic, git/fs-only, and safe to run on every commit or on demand.
|
|
9
|
+
*/
|
|
10
|
+
import { TheBrainV2 } from './TheBrainV2';
|
|
11
|
+
export interface CommitIngestResult {
|
|
12
|
+
ingested: number;
|
|
13
|
+
skipped: number;
|
|
14
|
+
lastSha: string | null;
|
|
15
|
+
}
|
|
16
|
+
/** Store one commit as a Brain entry. Exported for the post-commit hook (ingests just HEAD). */
|
|
17
|
+
export declare function ingestCommit(projectRoot: string, sha: string, brain?: TheBrainV2): {
|
|
18
|
+
stored: boolean;
|
|
19
|
+
reason: string;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Ingest commits since the last marker (or the last `maxCommits` on a first run). Safe to call
|
|
23
|
+
* on every commit — with a marker in place it only ever processes what's new, so wiring this to
|
|
24
|
+
* a post-commit hook and running the full backfill manually both go through the same path.
|
|
25
|
+
*/
|
|
26
|
+
export declare function ingestRecentCommits(projectRoot: string, opts?: {
|
|
27
|
+
maxCommits?: number;
|
|
28
|
+
}): CommitIngestResult;
|
|
29
|
+
export interface ChangelogIngestResult {
|
|
30
|
+
ingested: number;
|
|
31
|
+
skipped: number;
|
|
32
|
+
versionsSeen: number;
|
|
33
|
+
}
|
|
34
|
+
interface ChangelogEntry {
|
|
35
|
+
version: string;
|
|
36
|
+
date: string;
|
|
37
|
+
body: string;
|
|
38
|
+
}
|
|
39
|
+
/** Splits a Keep-a-Changelog-style file on `## [version] - date` headers. */
|
|
40
|
+
export declare function parseChangelog(markdown: string): ChangelogEntry[];
|
|
41
|
+
/**
|
|
42
|
+
* Store each changelog release as one Brain entry. No LLM involved — this is already
|
|
43
|
+
* human-written, dense project history that just isn't in The Brain's search surface today.
|
|
44
|
+
* Marker is the last version ingested (changelogs are prepended-to, newest first).
|
|
45
|
+
*/
|
|
46
|
+
export declare function ingestChangelog(projectRoot: string, changelogPath?: string): ChangelogIngestResult;
|
|
47
|
+
export {};
|
|
48
|
+
//# sourceMappingURL=GitIngest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GitIngest.d.ts","sourceRoot":"","sources":["../../../src/subconscious/GitIngest.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,EAAE,UAAU,EAA6B,MAAM,cAAc,CAAC;AAsCrE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AA0BD,gGAAgG;AAChG,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,UAAuB,GAAG;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAalI;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,kBAAkB,CAiB/G;AAID,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,cAAc;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,6EAA6E;AAC7E,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,EAAE,CAyBjE;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,qBAAqB,CA+BlG"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* GitIngest — feeds The Brain from sources that already exist and already have context,
|
|
4
|
+
* instead of depending on the model remembering to call `store_memory`:
|
|
5
|
+
*
|
|
6
|
+
* - Every git commit (message + files touched) — one entry per commit, incremental.
|
|
7
|
+
* - CHANGELOG.md release notes — one entry per version, no LLM involved.
|
|
8
|
+
*
|
|
9
|
+
* Both are deterministic, git/fs-only, and safe to run on every commit or on demand.
|
|
10
|
+
*/
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.ingestCommit = ingestCommit;
|
|
16
|
+
exports.ingestRecentCommits = ingestRecentCommits;
|
|
17
|
+
exports.parseChangelog = parseChangelog;
|
|
18
|
+
exports.ingestChangelog = ingestChangelog;
|
|
19
|
+
const fs_1 = __importDefault(require("fs"));
|
|
20
|
+
const path_1 = __importDefault(require("path"));
|
|
21
|
+
const child_process_1 = require("child_process");
|
|
22
|
+
const TheBrainV2_1 = require("./TheBrainV2");
|
|
23
|
+
const MARKER_DIR = '.lemma/session';
|
|
24
|
+
const COMMIT_MARKER_FILE = 'brain-commit-marker';
|
|
25
|
+
const CHANGELOG_MARKER_FILE = 'brain-changelog-marker';
|
|
26
|
+
function git(projectRoot, args) {
|
|
27
|
+
try {
|
|
28
|
+
return (0, child_process_1.execFileSync)('git', ['-C', projectRoot, ...args], {
|
|
29
|
+
encoding: 'utf8',
|
|
30
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
31
|
+
}).trim();
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return '';
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function markerPath(projectRoot, file) {
|
|
38
|
+
return path_1.default.join(projectRoot, MARKER_DIR, file);
|
|
39
|
+
}
|
|
40
|
+
function readMarker(projectRoot, file) {
|
|
41
|
+
try {
|
|
42
|
+
const v = fs_1.default.readFileSync(markerPath(projectRoot, file), 'utf8').trim();
|
|
43
|
+
return v || null;
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
function writeMarker(projectRoot, file, value) {
|
|
50
|
+
const p = markerPath(projectRoot, file);
|
|
51
|
+
fs_1.default.mkdirSync(path_1.default.dirname(p), { recursive: true });
|
|
52
|
+
fs_1.default.writeFileSync(p, value, 'utf8');
|
|
53
|
+
}
|
|
54
|
+
/** Field separator unlikely to appear in commit metadata; avoids parsing ambiguity. */
|
|
55
|
+
const FS = '\x1f';
|
|
56
|
+
function commitShas(projectRoot, opts) {
|
|
57
|
+
const args = opts.sinceSha
|
|
58
|
+
? ['log', '--format=%H', `${opts.sinceSha}..HEAD`]
|
|
59
|
+
: ['log', `-n`, String(opts.maxCommits), '--format=%H'];
|
|
60
|
+
const out = git(projectRoot, args);
|
|
61
|
+
return out ? out.split('\n').filter(Boolean) : [];
|
|
62
|
+
}
|
|
63
|
+
function commitMeta(projectRoot, sha) {
|
|
64
|
+
const meta = git(projectRoot, ['show', '-s', `--format=%s${FS}%an${FS}%aI${FS}%b`, sha]);
|
|
65
|
+
const [subject = '', author = '', date = '', ...bodyParts] = meta.split(FS);
|
|
66
|
+
const filesOut = git(projectRoot, ['show', '--name-only', '--format=', sha]);
|
|
67
|
+
return {
|
|
68
|
+
subject,
|
|
69
|
+
author,
|
|
70
|
+
date,
|
|
71
|
+
body: bodyParts.join(FS).trim(),
|
|
72
|
+
files: filesOut.split('\n').filter(Boolean),
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/** Store one commit as a Brain entry. Exported for the post-commit hook (ingests just HEAD). */
|
|
76
|
+
function ingestCommit(projectRoot, sha, brain = (0, TheBrainV2_1.getBrain)()) {
|
|
77
|
+
const meta = commitMeta(projectRoot, sha);
|
|
78
|
+
if (!meta.subject)
|
|
79
|
+
return { stored: false, reason: 'commit not found or has no subject' };
|
|
80
|
+
const shortSha = sha.substring(0, 12);
|
|
81
|
+
const query = `commit ${shortSha}: ${meta.subject}`;
|
|
82
|
+
const response = [
|
|
83
|
+
meta.body,
|
|
84
|
+
meta.files.length ? `Files: ${meta.files.join(', ')}` : '',
|
|
85
|
+
`Author: ${meta.author} — ${meta.date}`,
|
|
86
|
+
].filter(Boolean).join('\n');
|
|
87
|
+
return brain.store(query, response, 'git-commit', 0.92, undefined, (0, TheBrainV2_1.deriveProjectId)(projectRoot));
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Ingest commits since the last marker (or the last `maxCommits` on a first run). Safe to call
|
|
91
|
+
* on every commit — with a marker in place it only ever processes what's new, so wiring this to
|
|
92
|
+
* a post-commit hook and running the full backfill manually both go through the same path.
|
|
93
|
+
*/
|
|
94
|
+
function ingestRecentCommits(projectRoot, opts = {}) {
|
|
95
|
+
const maxCommits = opts.maxCommits ?? 200;
|
|
96
|
+
const marker = readMarker(projectRoot, COMMIT_MARKER_FILE);
|
|
97
|
+
const shas = commitShas(projectRoot, { maxCommits, sinceSha: marker });
|
|
98
|
+
const brain = (0, TheBrainV2_1.getBrain)();
|
|
99
|
+
let ingested = 0;
|
|
100
|
+
let skipped = 0;
|
|
101
|
+
for (const sha of shas) {
|
|
102
|
+
const res = ingestCommit(projectRoot, sha, brain);
|
|
103
|
+
if (res.stored)
|
|
104
|
+
ingested++;
|
|
105
|
+
else
|
|
106
|
+
skipped++;
|
|
107
|
+
}
|
|
108
|
+
// git log lists newest-first, so shas[0] is the most recent commit processed this run.
|
|
109
|
+
if (shas.length > 0)
|
|
110
|
+
writeMarker(projectRoot, COMMIT_MARKER_FILE, shas[0]);
|
|
111
|
+
return { ingested, skipped, lastSha: shas[0] || marker };
|
|
112
|
+
}
|
|
113
|
+
/** Splits a Keep-a-Changelog-style file on `## [version] - date` headers. */
|
|
114
|
+
function parseChangelog(markdown) {
|
|
115
|
+
const lines = markdown.split('\n');
|
|
116
|
+
const entries = [];
|
|
117
|
+
let current = null;
|
|
118
|
+
let bodyLines = [];
|
|
119
|
+
const headerRe = /^##\s+\[([^\]]+)\]\s*-?\s*(.*)$/;
|
|
120
|
+
const flush = () => {
|
|
121
|
+
if (current)
|
|
122
|
+
entries.push({ ...current, body: bodyLines.join('\n').trim() });
|
|
123
|
+
bodyLines = [];
|
|
124
|
+
};
|
|
125
|
+
for (const line of lines) {
|
|
126
|
+
const m = line.match(headerRe);
|
|
127
|
+
if (m) {
|
|
128
|
+
flush();
|
|
129
|
+
current = { version: m[1].trim(), date: m[2].trim(), body: '' };
|
|
130
|
+
}
|
|
131
|
+
else if (current) {
|
|
132
|
+
bodyLines.push(line);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
flush();
|
|
136
|
+
return entries.filter((e) => e.body.length > 0);
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Store each changelog release as one Brain entry. No LLM involved — this is already
|
|
140
|
+
* human-written, dense project history that just isn't in The Brain's search surface today.
|
|
141
|
+
* Marker is the last version ingested (changelogs are prepended-to, newest first).
|
|
142
|
+
*/
|
|
143
|
+
function ingestChangelog(projectRoot, changelogPath) {
|
|
144
|
+
// Root CHANGELOG.md is preferred: in this repo it's the one that actually gets updated
|
|
145
|
+
// release to release, while docs/CHANGELOG.md stopped being touched months ago. Ingesting
|
|
146
|
+
// whichever one happened to exist first would have silently indexed the stale one forever.
|
|
147
|
+
const candidates = changelogPath
|
|
148
|
+
? [changelogPath]
|
|
149
|
+
: [path_1.default.join(projectRoot, 'CHANGELOG.md'), path_1.default.join(projectRoot, 'docs', 'CHANGELOG.md')];
|
|
150
|
+
const file = candidates.find((p) => fs_1.default.existsSync(p));
|
|
151
|
+
if (!file)
|
|
152
|
+
return { ingested: 0, skipped: 0, versionsSeen: 0 };
|
|
153
|
+
const entries = parseChangelog(fs_1.default.readFileSync(file, 'utf8'));
|
|
154
|
+
const marker = readMarker(projectRoot, CHANGELOG_MARKER_FILE);
|
|
155
|
+
const markerIdx = marker ? entries.findIndex((e) => e.version === marker) : -1;
|
|
156
|
+
// Entries are newest-first in the file (Keep a Changelog convention): everything before the
|
|
157
|
+
// marker's index is new since last ingest. markerIdx === -1 means "never ingested" -> all of it.
|
|
158
|
+
const toIngest = markerIdx >= 0 ? entries.slice(0, markerIdx) : entries;
|
|
159
|
+
const brain = (0, TheBrainV2_1.getBrain)();
|
|
160
|
+
const projectId = (0, TheBrainV2_1.deriveProjectId)(projectRoot);
|
|
161
|
+
let ingested = 0;
|
|
162
|
+
let skipped = 0;
|
|
163
|
+
for (const entry of toIngest) {
|
|
164
|
+
const query = `Lemma changelog v${entry.version}${entry.date ? ` — ${entry.date}` : ''}`;
|
|
165
|
+
const res = brain.store(query, entry.body, 'changelog', 0.92, undefined, projectId);
|
|
166
|
+
if (res.stored)
|
|
167
|
+
ingested++;
|
|
168
|
+
else
|
|
169
|
+
skipped++;
|
|
170
|
+
}
|
|
171
|
+
if (entries.length > 0)
|
|
172
|
+
writeMarker(projectRoot, CHANGELOG_MARKER_FILE, entries[0].version);
|
|
173
|
+
return { ingested, skipped, versionsSeen: entries.length };
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=GitIngest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GitIngest.js","sourceRoot":"","sources":["../../../src/subconscious/GitIngest.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,6 +31,27 @@ export interface BrainEntry {
|
|
|
31
31
|
*/
|
|
32
32
|
projectId?: string;
|
|
33
33
|
fileHashes?: Record<string, string>;
|
|
34
|
+
/**
|
|
35
|
+
* Whether this memory is a working solution or a documented dead end. Absent means
|
|
36
|
+
* 'confirmed' for backward compatibility with every entry written before this existed.
|
|
37
|
+
* Without a 'failed' tag, a prior failed attempt is indistinguishable from a working
|
|
38
|
+
* fix — the Brain can only ever suggest reuse, never warn "we already tried this."
|
|
39
|
+
*/
|
|
40
|
+
outcome?: 'confirmed' | 'failed';
|
|
41
|
+
/**
|
|
42
|
+
* Absolute-path::symbolName -> sha256 of just that symbol's extracted source (via
|
|
43
|
+
* SymbolSurgicalContext), not the whole file. When a file has an entry here, freshness
|
|
44
|
+
* checks that file by this instead of fileHashes' whole-file hash — an edit elsewhere in
|
|
45
|
+
* the same file (a different function, an import, a comment) no longer invalidates a
|
|
46
|
+
* memory that was only ever about one specific symbol. Absent means whole-file hashing
|
|
47
|
+
* still applies, so every entry written before this existed keeps working unchanged.
|
|
48
|
+
*/
|
|
49
|
+
symbolHashes?: Record<string, string>;
|
|
50
|
+
}
|
|
51
|
+
export interface SymbolRef {
|
|
52
|
+
/** Relative or absolute; resolved against process.cwd() the same way filePaths is. */
|
|
53
|
+
filePath: string;
|
|
54
|
+
symbolName: string;
|
|
34
55
|
}
|
|
35
56
|
export interface BrainSearchResult {
|
|
36
57
|
id: string;
|
|
@@ -41,6 +62,7 @@ export interface BrainSearchResult {
|
|
|
41
62
|
timestamp: string;
|
|
42
63
|
fresh: boolean;
|
|
43
64
|
staleFiles?: string[];
|
|
65
|
+
outcome?: 'confirmed' | 'failed';
|
|
44
66
|
}
|
|
45
67
|
export interface BrainSearchOptions {
|
|
46
68
|
/**
|
|
@@ -108,7 +130,7 @@ export declare class TheBrainV2 {
|
|
|
108
130
|
* Store a query+response pair in the brain.
|
|
109
131
|
* Returns false if detected as duplicate (>= dupThreshold similarity).
|
|
110
132
|
*/
|
|
111
|
-
store(query: string, response: string, provider?: string, dupThreshold?: number, filePaths?: string[], projectId?: string): {
|
|
133
|
+
store(query: string, response: string, provider?: string, dupThreshold?: number, filePaths?: string[], projectId?: string, outcome?: 'confirmed' | 'failed', symbolRefs?: SymbolRef[]): {
|
|
112
134
|
stored: boolean;
|
|
113
135
|
reason: string;
|
|
114
136
|
duplicate?: BrainSearchResult;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TheBrainV2.d.ts","sourceRoot":"","sources":["../../../src/subconscious/TheBrainV2.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"TheBrainV2.d.ts","sourceRoot":"","sources":["../../../src/subconscious/TheBrainV2.ts"],"names":[],"mappings":"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"}
|