ghagga-core 2.8.0 → 2.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 (316) hide show
  1. package/dist/acp/adapter.d.ts +91 -0
  2. package/dist/acp/adapter.d.ts.map +1 -0
  3. package/dist/acp/adapter.js +315 -0
  4. package/dist/acp/adapter.js.map +1 -0
  5. package/dist/acp/index.d.ts +4 -0
  6. package/dist/acp/index.d.ts.map +1 -0
  7. package/dist/acp/index.js +2 -0
  8. package/dist/acp/index.js.map +1 -0
  9. package/dist/acp/types.d.ts +142 -0
  10. package/dist/acp/types.d.ts.map +1 -0
  11. package/dist/acp/types.js +13 -0
  12. package/dist/acp/types.js.map +1 -0
  13. package/dist/adversarial-qa.d.ts +60 -0
  14. package/dist/adversarial-qa.d.ts.map +1 -0
  15. package/dist/adversarial-qa.js +85 -0
  16. package/dist/adversarial-qa.js.map +1 -0
  17. package/dist/agents/audit.d.ts +18 -0
  18. package/dist/agents/audit.d.ts.map +1 -0
  19. package/dist/agents/audit.js +78 -0
  20. package/dist/agents/audit.js.map +1 -0
  21. package/dist/agents/consensus.d.ts +1 -1
  22. package/dist/agents/consensus.d.ts.map +1 -1
  23. package/dist/agents/consensus.js +10 -8
  24. package/dist/agents/consensus.js.map +1 -1
  25. package/dist/agents/diagnostic.d.ts.map +1 -1
  26. package/dist/agents/diagnostic.js +22 -20
  27. package/dist/agents/diagnostic.js.map +1 -1
  28. package/dist/agents/fan-out-lenses.d.ts +41 -0
  29. package/dist/agents/fan-out-lenses.d.ts.map +1 -1
  30. package/dist/agents/fan-out-lenses.js +117 -3
  31. package/dist/agents/fan-out-lenses.js.map +1 -1
  32. package/dist/agents/prompts.d.ts +12 -0
  33. package/dist/agents/prompts.d.ts.map +1 -1
  34. package/dist/agents/prompts.js +31 -0
  35. package/dist/agents/prompts.js.map +1 -1
  36. package/dist/agents/simple.d.ts +1 -1
  37. package/dist/agents/simple.d.ts.map +1 -1
  38. package/dist/agents/simple.js +10 -6
  39. package/dist/agents/simple.js.map +1 -1
  40. package/dist/agents/workflow.d.ts +1 -1
  41. package/dist/agents/workflow.d.ts.map +1 -1
  42. package/dist/agents/workflow.js +9 -8
  43. package/dist/agents/workflow.js.map +1 -1
  44. package/dist/aisvs.d.ts +44 -0
  45. package/dist/aisvs.d.ts.map +1 -0
  46. package/dist/aisvs.js +189 -0
  47. package/dist/aisvs.js.map +1 -0
  48. package/dist/checklist/context.d.ts.map +1 -1
  49. package/dist/checklist/context.js +2 -8
  50. package/dist/checklist/context.js.map +1 -1
  51. package/dist/checklist/defaults.d.ts.map +1 -1
  52. package/dist/checklist/defaults.js.map +1 -1
  53. package/dist/checklist/scorer.d.ts.map +1 -1
  54. package/dist/checklist/scorer.js +105 -12
  55. package/dist/checklist/scorer.js.map +1 -1
  56. package/dist/code-intel/client.d.ts +30 -0
  57. package/dist/code-intel/client.d.ts.map +1 -0
  58. package/dist/code-intel/client.js +91 -0
  59. package/dist/code-intel/client.js.map +1 -0
  60. package/dist/code-intel/context.d.ts +21 -0
  61. package/dist/code-intel/context.d.ts.map +1 -0
  62. package/dist/code-intel/context.js +72 -0
  63. package/dist/code-intel/context.js.map +1 -0
  64. package/dist/code-intel/index.d.ts +10 -0
  65. package/dist/code-intel/index.d.ts.map +1 -0
  66. package/dist/code-intel/index.js +11 -0
  67. package/dist/code-intel/index.js.map +1 -0
  68. package/dist/code-intel/types.d.ts +63 -0
  69. package/dist/code-intel/types.d.ts.map +1 -0
  70. package/dist/code-intel/types.js +9 -0
  71. package/dist/code-intel/types.js.map +1 -0
  72. package/dist/compress/index.d.ts +55 -0
  73. package/dist/compress/index.d.ts.map +1 -0
  74. package/dist/compress/index.js +166 -0
  75. package/dist/compress/index.js.map +1 -0
  76. package/dist/cost-footer.d.ts +38 -0
  77. package/dist/cost-footer.d.ts.map +1 -0
  78. package/dist/cost-footer.js +95 -0
  79. package/dist/cost-footer.js.map +1 -0
  80. package/dist/critique/critique.d.ts +40 -0
  81. package/dist/critique/critique.d.ts.map +1 -0
  82. package/dist/critique/critique.js +194 -0
  83. package/dist/critique/critique.js.map +1 -0
  84. package/dist/critique/cross-model.d.ts +123 -0
  85. package/dist/critique/cross-model.d.ts.map +1 -0
  86. package/dist/critique/cross-model.js +267 -0
  87. package/dist/critique/cross-model.js.map +1 -0
  88. package/dist/critique/index.d.ts +8 -0
  89. package/dist/critique/index.d.ts.map +1 -0
  90. package/dist/critique/index.js +6 -0
  91. package/dist/critique/index.js.map +1 -0
  92. package/dist/critique/prompts.d.ts +11 -0
  93. package/dist/critique/prompts.d.ts.map +1 -0
  94. package/dist/critique/prompts.js +66 -0
  95. package/dist/critique/prompts.js.map +1 -0
  96. package/dist/critique/types.d.ts +84 -0
  97. package/dist/critique/types.d.ts.map +1 -0
  98. package/dist/critique/types.js +13 -0
  99. package/dist/critique/types.js.map +1 -0
  100. package/dist/doc-validation/index.d.ts +9 -0
  101. package/dist/doc-validation/index.d.ts.map +1 -0
  102. package/dist/doc-validation/index.js +9 -0
  103. package/dist/doc-validation/index.js.map +1 -0
  104. package/dist/doc-validation/scanner.d.ts +40 -0
  105. package/dist/doc-validation/scanner.d.ts.map +1 -0
  106. package/dist/doc-validation/scanner.js +163 -0
  107. package/dist/doc-validation/scanner.js.map +1 -0
  108. package/dist/doc-validation/types.d.ts +27 -0
  109. package/dist/doc-validation/types.d.ts.map +1 -0
  110. package/dist/doc-validation/types.js +8 -0
  111. package/dist/doc-validation/types.js.map +1 -0
  112. package/dist/embed.d.ts +27 -0
  113. package/dist/embed.d.ts.map +1 -0
  114. package/dist/embed.js +47 -0
  115. package/dist/embed.js.map +1 -0
  116. package/dist/enhance/enhance.d.ts.map +1 -1
  117. package/dist/enhance/enhance.js +7 -25
  118. package/dist/enhance/enhance.js.map +1 -1
  119. package/dist/enhance/types.d.ts +5 -0
  120. package/dist/enhance/types.d.ts.map +1 -1
  121. package/dist/exploitability/analyzer.d.ts +42 -0
  122. package/dist/exploitability/analyzer.d.ts.map +1 -1
  123. package/dist/exploitability/analyzer.js +225 -0
  124. package/dist/exploitability/analyzer.js.map +1 -1
  125. package/dist/exploitability/index.d.ts +3 -2
  126. package/dist/exploitability/index.d.ts.map +1 -1
  127. package/dist/exploitability/index.js +1 -2
  128. package/dist/exploitability/index.js.map +1 -1
  129. package/dist/exploitability/types.d.ts +27 -0
  130. package/dist/exploitability/types.d.ts.map +1 -1
  131. package/dist/fetch-fix.d.ts +60 -0
  132. package/dist/fetch-fix.d.ts.map +1 -0
  133. package/dist/fetch-fix.js +137 -0
  134. package/dist/fetch-fix.js.map +1 -0
  135. package/dist/flood/index.d.ts +34 -0
  136. package/dist/flood/index.d.ts.map +1 -0
  137. package/dist/flood/index.js +67 -0
  138. package/dist/flood/index.js.map +1 -0
  139. package/dist/format.d.ts.map +1 -1
  140. package/dist/format.js +6 -1
  141. package/dist/format.js.map +1 -1
  142. package/dist/graph/blast-radius.js +2 -2
  143. package/dist/graph/blast-radius.js.map +1 -1
  144. package/dist/graph/call-chain.d.ts +36 -0
  145. package/dist/graph/call-chain.d.ts.map +1 -0
  146. package/dist/graph/call-chain.js +291 -0
  147. package/dist/graph/call-chain.js.map +1 -0
  148. package/dist/graph/index.d.ts +4 -0
  149. package/dist/graph/index.d.ts.map +1 -1
  150. package/dist/graph/index.js +2 -0
  151. package/dist/graph/index.js.map +1 -1
  152. package/dist/graph/reverse-deps.d.ts +37 -0
  153. package/dist/graph/reverse-deps.d.ts.map +1 -0
  154. package/dist/graph/reverse-deps.js +136 -0
  155. package/dist/graph/reverse-deps.js.map +1 -0
  156. package/dist/index.d.ts +50 -11
  157. package/dist/index.d.ts.map +1 -1
  158. package/dist/index.js +34 -7
  159. package/dist/index.js.map +1 -1
  160. package/dist/injection-corpus.d.ts +41 -0
  161. package/dist/injection-corpus.d.ts.map +1 -0
  162. package/dist/injection-corpus.js +181 -0
  163. package/dist/injection-corpus.js.map +1 -0
  164. package/dist/latent-comms.d.ts +31 -0
  165. package/dist/latent-comms.d.ts.map +1 -0
  166. package/dist/latent-comms.js +139 -0
  167. package/dist/latent-comms.js.map +1 -0
  168. package/dist/memory/pageindex/chunker.d.ts +33 -0
  169. package/dist/memory/pageindex/chunker.d.ts.map +1 -0
  170. package/dist/memory/pageindex/chunker.js +112 -0
  171. package/dist/memory/pageindex/chunker.js.map +1 -0
  172. package/dist/memory/pageindex/example.d.ts +22 -0
  173. package/dist/memory/pageindex/example.d.ts.map +1 -0
  174. package/dist/memory/pageindex/example.js +94 -0
  175. package/dist/memory/pageindex/example.js.map +1 -0
  176. package/dist/memory/pageindex/index.d.ts +15 -0
  177. package/dist/memory/pageindex/index.d.ts.map +1 -0
  178. package/dist/memory/pageindex/index.js +17 -0
  179. package/dist/memory/pageindex/index.js.map +1 -0
  180. package/dist/memory/pageindex/service.d.ts +53 -0
  181. package/dist/memory/pageindex/service.d.ts.map +1 -0
  182. package/dist/memory/pageindex/service.js +229 -0
  183. package/dist/memory/pageindex/service.js.map +1 -0
  184. package/dist/memory/pageindex/types.d.ts +67 -0
  185. package/dist/memory/pageindex/types.d.ts.map +1 -0
  186. package/dist/memory/pageindex/types.js +14 -0
  187. package/dist/memory/pageindex/types.js.map +1 -0
  188. package/dist/memory/persist.d.ts.map +1 -1
  189. package/dist/memory/persist.js +6 -2
  190. package/dist/memory/persist.js.map +1 -1
  191. package/dist/memory/sqlite.d.ts +69 -2
  192. package/dist/memory/sqlite.d.ts.map +1 -1
  193. package/dist/memory/sqlite.js +312 -5
  194. package/dist/memory/sqlite.js.map +1 -1
  195. package/dist/memory/taxonomy.d.ts +34 -0
  196. package/dist/memory/taxonomy.d.ts.map +1 -0
  197. package/dist/memory/taxonomy.js +189 -0
  198. package/dist/memory/taxonomy.js.map +1 -0
  199. package/dist/memory/versioning.d.ts.map +1 -1
  200. package/dist/memory/versioning.js.map +1 -1
  201. package/dist/negative.d.ts +23 -0
  202. package/dist/negative.d.ts.map +1 -0
  203. package/dist/negative.js +40 -0
  204. package/dist/negative.js.map +1 -0
  205. package/dist/pipeline.d.ts.map +1 -1
  206. package/dist/pipeline.js +455 -46
  207. package/dist/pipeline.js.map +1 -1
  208. package/dist/prompt-intel.d.ts +39 -0
  209. package/dist/prompt-intel.d.ts.map +1 -0
  210. package/dist/prompt-intel.js +148 -0
  211. package/dist/prompt-intel.js.map +1 -0
  212. package/dist/providers/cli-bridge.d.ts +4 -0
  213. package/dist/providers/cli-bridge.d.ts.map +1 -1
  214. package/dist/providers/cli-bridge.js +4 -0
  215. package/dist/providers/cli-bridge.js.map +1 -1
  216. package/dist/providers/generate-fn.d.ts +3 -15
  217. package/dist/providers/generate-fn.d.ts.map +1 -1
  218. package/dist/providers/generate-fn.js +3 -30
  219. package/dist/providers/generate-fn.js.map +1 -1
  220. package/dist/providers/index.d.ts.map +1 -1
  221. package/dist/providers/index.js.map +1 -1
  222. package/dist/providers/ollama.d.ts +15 -0
  223. package/dist/providers/ollama.d.ts.map +1 -0
  224. package/dist/providers/ollama.js +30 -0
  225. package/dist/providers/ollama.js.map +1 -0
  226. package/dist/ranking/index.d.ts +9 -0
  227. package/dist/ranking/index.d.ts.map +1 -0
  228. package/dist/ranking/index.js +82 -0
  229. package/dist/ranking/index.js.map +1 -0
  230. package/dist/recursive/circuit-breaker.d.ts +36 -0
  231. package/dist/recursive/circuit-breaker.d.ts.map +1 -0
  232. package/dist/recursive/circuit-breaker.js +62 -0
  233. package/dist/recursive/circuit-breaker.js.map +1 -0
  234. package/dist/recursive/index.d.ts +4 -0
  235. package/dist/recursive/index.d.ts.map +1 -1
  236. package/dist/recursive/index.js +18 -1
  237. package/dist/recursive/index.js.map +1 -1
  238. package/dist/recursive/types.d.ts +2 -0
  239. package/dist/recursive/types.d.ts.map +1 -1
  240. package/dist/recursive/types.js +1 -0
  241. package/dist/recursive/types.js.map +1 -1
  242. package/dist/scope/diff-mapper.js.map +1 -1
  243. package/dist/scope/entity-diff.d.ts +58 -0
  244. package/dist/scope/entity-diff.d.ts.map +1 -0
  245. package/dist/scope/entity-diff.js +224 -0
  246. package/dist/scope/entity-diff.js.map +1 -0
  247. package/dist/scope/extractor.d.ts.map +1 -1
  248. package/dist/scope/extractor.js.map +1 -1
  249. package/dist/scope/index.d.ts +3 -1
  250. package/dist/scope/index.d.ts.map +1 -1
  251. package/dist/scope/index.js +3 -0
  252. package/dist/scope/index.js.map +1 -1
  253. package/dist/scope/parser.d.ts +1 -1
  254. package/dist/scope/parser.d.ts.map +1 -1
  255. package/dist/scope/parser.js.map +1 -1
  256. package/dist/scope/types.d.ts +32 -0
  257. package/dist/scope/types.d.ts.map +1 -1
  258. package/dist/scope/types.js +7 -1
  259. package/dist/scope/types.js.map +1 -1
  260. package/dist/search/index.d.ts +11 -0
  261. package/dist/search/index.d.ts.map +1 -0
  262. package/dist/search/index.js +10 -0
  263. package/dist/search/index.js.map +1 -0
  264. package/dist/search/indexer.d.ts +67 -0
  265. package/dist/search/indexer.d.ts.map +1 -0
  266. package/dist/search/indexer.js +196 -0
  267. package/dist/search/indexer.js.map +1 -0
  268. package/dist/search/searcher.d.ts +34 -0
  269. package/dist/search/searcher.d.ts.map +1 -0
  270. package/dist/search/searcher.js +101 -0
  271. package/dist/search/searcher.js.map +1 -0
  272. package/dist/search/types.d.ts +81 -0
  273. package/dist/search/types.d.ts.map +1 -0
  274. package/dist/search/types.js +8 -0
  275. package/dist/search/types.js.map +1 -0
  276. package/dist/self-improve/index.d.ts +53 -0
  277. package/dist/self-improve/index.d.ts.map +1 -0
  278. package/dist/self-improve/index.js +136 -0
  279. package/dist/self-improve/index.js.map +1 -0
  280. package/dist/semantic-diff/index.d.ts +31 -0
  281. package/dist/semantic-diff/index.d.ts.map +1 -0
  282. package/dist/semantic-diff/index.js +215 -0
  283. package/dist/semantic-diff/index.js.map +1 -0
  284. package/dist/testing/index.d.ts +67 -0
  285. package/dist/testing/index.d.ts.map +1 -0
  286. package/dist/testing/index.js +76 -0
  287. package/dist/testing/index.js.map +1 -0
  288. package/dist/testing/vitest-helpers.d.ts +26 -0
  289. package/dist/testing/vitest-helpers.d.ts.map +1 -0
  290. package/dist/testing/vitest-helpers.js +37 -0
  291. package/dist/testing/vitest-helpers.js.map +1 -0
  292. package/dist/tools/index.d.ts +3 -1
  293. package/dist/tools/index.d.ts.map +1 -1
  294. package/dist/tools/index.js +2 -1
  295. package/dist/tools/index.js.map +1 -1
  296. package/dist/tools/remote-query.d.ts +40 -0
  297. package/dist/tools/remote-query.d.ts.map +1 -0
  298. package/dist/tools/remote-query.js +71 -0
  299. package/dist/tools/remote-query.js.map +1 -0
  300. package/dist/tracing/index.d.ts +39 -0
  301. package/dist/tracing/index.d.ts.map +1 -0
  302. package/dist/tracing/index.js +70 -0
  303. package/dist/tracing/index.js.map +1 -0
  304. package/dist/trajectory.d.ts +65 -0
  305. package/dist/trajectory.d.ts.map +1 -0
  306. package/dist/trajectory.js +126 -0
  307. package/dist/trajectory.js.map +1 -0
  308. package/dist/trust/index.d.ts +34 -0
  309. package/dist/trust/index.d.ts.map +1 -0
  310. package/dist/trust/index.js +78 -0
  311. package/dist/trust/index.js.map +1 -0
  312. package/dist/types.d.ts +144 -5
  313. package/dist/types.d.ts.map +1 -1
  314. package/dist/types.js +2 -11
  315. package/dist/types.js.map +1 -1
  316. package/package.json +1 -3
@@ -0,0 +1,229 @@
1
+ /**
2
+ * PageIndex Service for GHAGGA
3
+ *
4
+ * Manages paginated project memory using GHAGGA's sql.js database.
5
+ */
6
+ import { PageDirection } from './types.js';
7
+ import { chunkProjectMemory, shouldCompact } from './chunker.js';
8
+ export class ProjectPageIndexService {
9
+ db;
10
+ constructor(db) {
11
+ this.db = db;
12
+ this.initSchema();
13
+ }
14
+ initSchema() {
15
+ // Page index table
16
+ this.db.exec(`
17
+ CREATE TABLE IF NOT EXISTS project_page_index (
18
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
19
+ project_id TEXT NOT NULL,
20
+ page_num INTEGER NOT NULL,
21
+ total_pages INTEGER NOT NULL,
22
+ content TEXT NOT NULL,
23
+ topics TEXT, -- JSON array
24
+ file_refs TEXT, -- JSON array
25
+ token_count INTEGER NOT NULL,
26
+ prev_page_id INTEGER,
27
+ next_page_id INTEGER,
28
+ created_at INTEGER DEFAULT (CAST((julianday('now') - 2440587.5) * 86400000 AS INTEGER)),
29
+ FOREIGN KEY (prev_page_id) REFERENCES project_page_index(id),
30
+ FOREIGN KEY (next_page_id) REFERENCES project_page_index(id),
31
+ UNIQUE(project_id, page_num)
32
+ )
33
+ `);
34
+ // Create indexes
35
+ this.db.exec(`
36
+ CREATE INDEX IF NOT EXISTS idx_project_pages_project ON project_page_index(project_id);
37
+ CREATE INDEX IF NOT EXISTS idx_project_pages_number ON project_page_index(project_id, page_num);
38
+ `);
39
+ }
40
+ /**
41
+ * Create page index for project memory
42
+ */
43
+ async createPageIndex(projectId, content) {
44
+ // Check if already exists
45
+ const existing = this.db.exec(`SELECT COUNT(*) as count FROM project_page_index WHERE project_id = ?`, [projectId]);
46
+ if (existing[0]?.values[0][0] > 0) {
47
+ // Return existing stats
48
+ const stats = this.getProjectStats(projectId);
49
+ return { pages: stats.pages, tokens: stats.tokens };
50
+ }
51
+ // Chunk content
52
+ const chunks = chunkProjectMemory(projectId, content);
53
+ // Insert pages
54
+ const insertSql = `
55
+ INSERT INTO project_page_index
56
+ (project_id, page_num, total_pages, content, topics, file_refs, token_count)
57
+ VALUES (?, ?, ?, ?, ?, ?, ?)
58
+ `;
59
+ const pageIds = [];
60
+ for (const chunk of chunks) {
61
+ const result = this.db.exec(insertSql, [
62
+ chunk.projectId,
63
+ chunk.pageNum,
64
+ chunk.totalPages,
65
+ chunk.content,
66
+ JSON.stringify(chunk.topics),
67
+ JSON.stringify(chunk.fileRefs),
68
+ chunk.tokenCount,
69
+ ]);
70
+ // Get last insert ID
71
+ const lastId = this.db.exec('SELECT last_insert_rowid() as id');
72
+ pageIds.push(lastId[0].values[0][0]);
73
+ }
74
+ // Link pages
75
+ for (let i = 0; i < pageIds.length; i++) {
76
+ const prevId = i > 0 ? pageIds[i - 1] : null;
77
+ const nextId = i < pageIds.length - 1 ? pageIds[i + 1] : null;
78
+ this.db.exec(`UPDATE project_page_index SET prev_page_id = ?, next_page_id = ? WHERE id = ?`, [prevId, nextId, pageIds[i]]);
79
+ }
80
+ const totalTokens = chunks.reduce((sum, c) => sum + c.tokenCount, 0);
81
+ return { pages: chunks.length, tokens: totalTokens };
82
+ }
83
+ /**
84
+ * Get a specific page
85
+ */
86
+ getPage(projectId, pageNum) {
87
+ const result = this.db.exec(`SELECT * FROM project_page_index WHERE project_id = ? AND page_num = ?`, [projectId, pageNum]);
88
+ if (!result[0] || result[0].values.length === 0) {
89
+ return null;
90
+ }
91
+ return this.rowToPageChunk(result[0]);
92
+ }
93
+ /**
94
+ * Get context window around a page
95
+ */
96
+ getContext(request) {
97
+ const { projectId, pageNum, windowSize } = request;
98
+ const current = this.getPage(projectId, pageNum);
99
+ if (!current) {
100
+ throw new Error(`Page ${pageNum} not found in project ${projectId}`);
101
+ }
102
+ const startPage = Math.max(1, pageNum - windowSize);
103
+ const endPage = pageNum + windowSize;
104
+ const result = this.db.exec(`SELECT * FROM project_page_index
105
+ WHERE project_id = ? AND page_num BETWEEN ? AND ?
106
+ ORDER BY page_num`, [projectId, startPage, endPage]);
107
+ const pages = result[0] ? this.rowsToPageChunks(result[0]) : [];
108
+ const previousPages = pages.filter(p => p.pageNum < pageNum);
109
+ const nextPages = pages.filter(p => p.pageNum > pageNum);
110
+ const totalTokens = pages.reduce((sum, p) => sum + p.tokenCount, 0);
111
+ return {
112
+ currentPage: current,
113
+ previousPages,
114
+ nextPages,
115
+ totalInContext: pages.length,
116
+ totalTokens,
117
+ };
118
+ }
119
+ /**
120
+ * Navigate to adjacent page
121
+ */
122
+ navigate(request) {
123
+ const { projectId, currentPageNum, direction } = request;
124
+ switch (direction) {
125
+ case PageDirection.NEXT:
126
+ return this.getPage(projectId, currentPageNum + 1);
127
+ case PageDirection.PREV:
128
+ return this.getPage(projectId, currentPageNum - 1);
129
+ case PageDirection.FIRST:
130
+ return this.getPage(projectId, 1);
131
+ case PageDirection.LAST:
132
+ const stats = this.getProjectStats(projectId);
133
+ return stats.pages > 0 ? this.getPage(projectId, stats.pages) : null;
134
+ default:
135
+ return null;
136
+ }
137
+ }
138
+ /**
139
+ * Find pages relevant to PR context
140
+ */
141
+ findRelevantPages(request) {
142
+ const { projectId, prContext, maxPages } = request;
143
+ // Build keywords from PR context
144
+ const keywords = [
145
+ ...prContext.title.toLowerCase().split(/\s+/),
146
+ ...prContext.description.toLowerCase().split(/\s+/),
147
+ ...prContext.files.map(f => f.toLowerCase()),
148
+ ].filter(k => k.length > 2);
149
+ // Get all pages for project
150
+ const result = this.db.exec(`SELECT * FROM project_page_index WHERE project_id = ? ORDER BY page_num`, [projectId]);
151
+ if (!result[0])
152
+ return [];
153
+ const pages = this.rowsToPageChunks(result[0]);
154
+ // Score pages by keyword matches
155
+ const scored = pages.map(page => {
156
+ const content = (page.content + ' ' + page.topics.join(' ')).toLowerCase();
157
+ const score = keywords.reduce((sum, kw) => {
158
+ const matches = (content.match(new RegExp(kw, 'g')) || []).length;
159
+ return sum + matches;
160
+ }, 0);
161
+ // Bonus for file ref matches
162
+ const fileMatches = page.fileRefs.filter(ref => prContext.files.some(f => f.includes(ref) || ref.includes(f))).length;
163
+ return { page, score: score + fileMatches * 3 };
164
+ });
165
+ // Sort by score and return top N
166
+ return scored
167
+ .filter(s => s.score > 0)
168
+ .sort((a, b) => b.score - a.score)
169
+ .slice(0, maxPages)
170
+ .map(s => s.page);
171
+ }
172
+ /**
173
+ * Check if compaction is needed
174
+ */
175
+ checkCompaction(projectId, modelMaxTokens) {
176
+ const stats = this.getProjectStats(projectId);
177
+ const check = shouldCompact(stats.tokens, modelMaxTokens);
178
+ check.projectId = projectId;
179
+ return check;
180
+ }
181
+ /**
182
+ * Get project stats
183
+ */
184
+ getProjectStats(projectId) {
185
+ const result = this.db.exec(`SELECT
186
+ COUNT(*) as pages,
187
+ COALESCE(SUM(token_count), 0) as tokens
188
+ FROM project_page_index
189
+ WHERE project_id = ?`, [projectId]);
190
+ if (!result[0] || result[0].values.length === 0) {
191
+ return { pages: 0, tokens: 0 };
192
+ }
193
+ return {
194
+ pages: result[0].values[0][0],
195
+ tokens: result[0].values[0][1],
196
+ };
197
+ }
198
+ /**
199
+ * Delete project page index
200
+ */
201
+ deletePageIndex(projectId) {
202
+ this.db.exec(`DELETE FROM project_page_index WHERE project_id = ?`, [projectId]);
203
+ }
204
+ rowToPageChunk(row) {
205
+ const values = row.values[0];
206
+ const columns = row.columns;
207
+ const get = (name) => values[columns.indexOf(name)];
208
+ return {
209
+ id: get('id'),
210
+ projectId: get('project_id'),
211
+ pageNum: get('page_num'),
212
+ totalPages: get('total_pages'),
213
+ content: get('content'),
214
+ topics: JSON.parse(get('topics') || '[]'),
215
+ fileRefs: JSON.parse(get('file_refs') || '[]'),
216
+ tokenCount: get('token_count'),
217
+ prevPageId: get('prev_page_id'),
218
+ nextPageId: get('next_page_id'),
219
+ createdAt: get('created_at'),
220
+ };
221
+ }
222
+ rowsToPageChunks(rows) {
223
+ return rows.values.map((_, idx) => {
224
+ const singleRow = { columns: rows.columns, values: [rows.values[idx]] };
225
+ return this.rowToPageChunk(singleRow);
226
+ });
227
+ }
228
+ }
229
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/memory/pageindex/service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * PageIndex for GHAGGA Project Memory
3
+ *
4
+ * Enables navigable access to large project memories for small context models.
5
+ * Adapts MCP-LLM-Bridge PageIndex pattern for GHAGGA's sql.js architecture.
6
+ */
7
+ export interface ProjectPageChunk {
8
+ id?: number;
9
+ projectId: string;
10
+ pageNum: number;
11
+ totalPages: number;
12
+ content: string;
13
+ topics: string[];
14
+ fileRefs: string[];
15
+ tokenCount: number;
16
+ prevPageId?: number;
17
+ nextPageId?: number;
18
+ createdAt: number;
19
+ }
20
+ export interface ProjectPageIndex {
21
+ projectId: string;
22
+ totalPages: number;
23
+ totalTokens: number;
24
+ createdAt: number;
25
+ lastAccessed: number;
26
+ }
27
+ export interface PageContextRequest {
28
+ projectId: string;
29
+ pageNum: number;
30
+ windowSize: number;
31
+ }
32
+ export interface PageContextResponse {
33
+ currentPage: ProjectPageChunk;
34
+ previousPages: ProjectPageChunk[];
35
+ nextPages: ProjectPageChunk[];
36
+ totalInContext: number;
37
+ totalTokens: number;
38
+ }
39
+ export declare enum PageDirection {
40
+ NEXT = "next",
41
+ PREV = "prev",
42
+ FIRST = "first",
43
+ LAST = "last"
44
+ }
45
+ export interface PageNavigationRequest {
46
+ projectId: string;
47
+ currentPageNum: number;
48
+ direction: PageDirection;
49
+ }
50
+ export interface CompactionCheck {
51
+ currentTokens: number;
52
+ maxTokens: number;
53
+ projectId: string;
54
+ shouldCompact: boolean;
55
+ safeToProceed: boolean;
56
+ suggestedAction: 'compact' | 'paginate' | 'none';
57
+ }
58
+ export interface RelevantPageRequest {
59
+ projectId: string;
60
+ prContext: {
61
+ title: string;
62
+ description: string;
63
+ files: string[];
64
+ };
65
+ maxPages: number;
66
+ }
67
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/memory/pageindex/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,gBAAgB,CAAC;IAC9B,aAAa,EAAE,gBAAgB,EAAE,CAAC;IAClC,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,oBAAY,aAAa;IACvB,IAAI,SAAS;IACb,IAAI,SAAS;IACb,KAAK,UAAU;IACf,IAAI,SAAS;CACd;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,aAAa,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,EAAE,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;CAClD;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE;QACT,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,EAAE,CAAC;KACjB,CAAC;IACF,QAAQ,EAAE,MAAM,CAAC;CAClB"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * PageIndex for GHAGGA Project Memory
3
+ *
4
+ * Enables navigable access to large project memories for small context models.
5
+ * Adapts MCP-LLM-Bridge PageIndex pattern for GHAGGA's sql.js architecture.
6
+ */
7
+ export var PageDirection;
8
+ (function (PageDirection) {
9
+ PageDirection["NEXT"] = "next";
10
+ PageDirection["PREV"] = "prev";
11
+ PageDirection["FIRST"] = "first";
12
+ PageDirection["LAST"] = "last";
13
+ })(PageDirection || (PageDirection = {}));
14
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/memory/pageindex/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAsCH,MAAM,CAAN,IAAY,aAKX;AALD,WAAY,aAAa;IACvB,8BAAa,CAAA;IACb,8BAAa,CAAA;IACb,gCAAe,CAAA;IACf,8BAAa,CAAA;AACf,CAAC,EALW,aAAa,KAAb,aAAa,QAKxB"}
@@ -1 +1 @@
1
- {"version":3,"file":"persist.d.ts","sourceRoot":"","sources":["../../src/memory/persist.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAkC,YAAY,EAAE,MAAM,aAAa,CAAC;AAuC/F;;;;;;;;;;;GAWG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,IAAI,CAAC,CA4Df"}
1
+ {"version":3,"file":"persist.d.ts","sourceRoot":"","sources":["../../src/memory/persist.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAkC,YAAY,EAAE,MAAM,aAAa,CAAC;AAwC/F;;;;;;;;;;;GAWG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,IAAI,CAAC,CA+Df"}
@@ -6,6 +6,7 @@
6
6
  * the same project can benefit from past context.
7
7
  */
8
8
  import { stripPrivateData } from './privacy.js';
9
+ import { classifyObservation } from './taxonomy.js';
9
10
  // ─── Helpers ────────────────────────────────────────────────────
10
11
  /**
11
12
  * Map a finding's category to an observation type.
@@ -63,8 +64,11 @@ export async function persistReviewObservations(storage, project, prNumber, resu
63
64
  const sanitizedSuggestion = finding.suggestion
64
65
  ? stripPrivateData(finding.suggestion)
65
66
  : undefined;
67
+ const observationTitle = `${finding.category}: ${sanitizedMessage.slice(0, 80)}`;
68
+ const taxonomyTag = classifyObservation(sanitizedMessage, observationTitle);
69
+ const categoryLabel = taxonomyTag.category.toUpperCase().replace('_', ' ');
66
70
  const content = [
67
- `[${finding.severity.toUpperCase()}] ${finding.category}`,
71
+ `[${categoryLabel}] [${finding.severity.toUpperCase()}] ${finding.category}`,
68
72
  `File: ${finding.file}${finding.line ? `:${finding.line}` : ''}`,
69
73
  `Issue: ${sanitizedMessage}`,
70
74
  sanitizedSuggestion ? `Fix: ${sanitizedSuggestion}` : '',
@@ -75,7 +79,7 @@ export async function persistReviewObservations(storage, project, prNumber, resu
75
79
  sessionId: session.id,
76
80
  project,
77
81
  type: findingToObservationType(finding),
78
- title: `${finding.category}: ${sanitizedMessage.slice(0, 80)}`,
82
+ title: `[${categoryLabel}] ${observationTitle}`,
79
83
  content,
80
84
  filePaths: [finding.file],
81
85
  severity: finding.severity,
@@ -1 +1 @@
1
- {"version":3,"file":"persist.js","sourceRoot":"","sources":["../../src/memory/persist.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,mEAAmE;AAEnE;;;GAGG;AACH,SAAS,wBAAwB,CAAC,OAAsB;IACtD,QAAQ,OAAO,CAAC,QAAQ,EAAE,CAAC;QACzB,KAAK,UAAU;YACb,OAAO,WAAW,CAAC;QACrB,KAAK,KAAK;YACR,OAAO,QAAQ,CAAC;QAClB,KAAK,aAAa;YAChB,OAAO,SAAS,CAAC;QACnB,KAAK,OAAO,CAAC;QACb,KAAK,iBAAiB;YACpB,OAAO,SAAS,CAAC;QACnB,KAAK,gBAAgB;YACnB,OAAO,UAAU,CAAC;QACpB;YACE,OAAO,UAAU,CAAC;IACtB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,oBAAoB,CAAC,OAAsB;IAClD,OAAO,CACL,OAAO,CAAC,QAAQ,KAAK,UAAU,IAAI,OAAO,CAAC,QAAQ,KAAK,MAAM,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAChG,CAAC;AACJ,CAAC;AAED,mEAAmE;AAEnE;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,OAAsB,EACtB,OAAe,EACf,QAAgB,EAChB,MAAoB;IAEpB,IAAI,CAAC;QACH,IAAI,CAAC,OAAO;YAAE,OAAO;QAErB,0EAA0E;QAC1E,MAAM,mBAAmB,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACzE,IAAI,mBAAmB,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAE7C,0CAA0C;QAC1C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEnE,KAAK,MAAM,OAAO,IAAI,mBAAmB,EAAE,CAAC;YAC1C,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC3D,MAAM,mBAAmB,GAAG,OAAO,CAAC,UAAU;gBAC5C,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC,UAAU,CAAC;gBACtC,CAAC,CAAC,SAAS,CAAC;YAEd,MAAM,OAAO,GAAG;gBACd,IAAI,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,QAAQ,EAAE;gBACzD,SAAS,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;gBAChE,UAAU,gBAAgB,EAAE;gBAC5B,mBAAmB,CAAC,CAAC,CAAC,QAAQ,mBAAmB,EAAE,CAAC,CAAC,CAAC,EAAE;aACzD;iBACE,MAAM,CAAC,OAAO,CAAC;iBACf,IAAI,CAAC,IAAI,CAAC,CAAC;YAEd,MAAM,OAAO,CAAC,eAAe,CAAC;gBAC5B,SAAS,EAAE,OAAO,CAAC,EAAE;gBACrB,OAAO;gBACP,IAAI,EAAE,wBAAwB,CAAC,OAAO,CAAC;gBACvC,KAAK,EAAE,GAAG,OAAO,CAAC,QAAQ,KAAK,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;gBAC9D,OAAO;gBACP,SAAS,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;gBACzB,QAAQ,EAAE,OAAO,CAAC,QAAQ;aAC3B,CAAC,CAAC;QACL,CAAC;QAED,oDAAoD;QACpD,MAAM,OAAO,CAAC,eAAe,CAAC;YAC5B,SAAS,EAAE,OAAO,CAAC,EAAE;YACrB,OAAO;YACP,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,OAAO,QAAQ,YAAY,MAAM,CAAC,MAAM,EAAE;YACjD,OAAO,EAAE,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC;YACzC,QAAQ,EAAE,MAAM,QAAQ,SAAS;YACjC,SAAS,EAAE,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;SAClD,CAAC,CAAC;QAEH,iCAAiC;QACjC,MAAM,OAAO,CAAC,UAAU,CACtB,OAAO,CAAC,EAAE,EACV,iBAAiB,QAAQ,KAAK,MAAM,CAAC,MAAM,SAAS,mBAAmB,CAAC,MAAM,wBAAwB,CACvG,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,mEAAmE;QACnE,OAAO,CAAC,IAAI,CACV,6DAA6D,EAC7D,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvD,CAAC;IACJ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"persist.js","sourceRoot":"","sources":["../../src/memory/persist.ts"],"names":[],"mappings":"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"}
@@ -6,14 +6,16 @@
6
6
  * environments (CLI, GitHub Action).
7
7
  */
8
8
  import { type Database } from 'fts5-sql-bundle';
9
- import type { ListObservationsOptions, MemoryObservationDetail, MemoryObservationRow, MemoryStats, MemoryStorage } from '../types.js';
9
+ import { type EmbeddingProvider } from '../embed.js';
10
+ import type { AuthorTrustScore, ListObservationsOptions, MemoryObservationDetail, MemoryObservationRow, MemoryStats, MemoryStorage, NegativeExample } from '../types.js';
10
11
  import { type DecayConfig } from '../types.js';
12
+ import { ProjectPageIndexService } from './pageindex/service.js';
11
13
  /**
12
14
  * Extended Database interface — fts5-sql-bundle types omit the params overload
13
15
  * for exec(), but the runtime (sql.js core) supports it.
14
16
  */
15
17
  interface DatabaseWithParams extends Database {
16
- exec(sql: string, params?: (string | number | null)[]): Array<{
18
+ exec(sql: string, params?: (string | number | Buffer | null)[]): Array<{
17
19
  columns: string[];
18
20
  values: unknown[][];
19
21
  }>;
@@ -23,18 +25,32 @@ export interface SqliteMemoryStorageOptions {
23
25
  dedupWindowMinutes?: number;
24
26
  /** Decay configuration for memory strength. Uses defaults when not provided. */
25
27
  decayConfig?: DecayConfig;
28
+ /**
29
+ * Optional embedding provider for hybrid search.
30
+ * When provided, embeddings are stored on save and hybrid BM25+semantic scoring
31
+ * is used for search. When undefined, falls back to keyword-only search.
32
+ */
33
+ embeddingProvider?: EmbeddingProvider;
26
34
  }
27
35
  export declare class SqliteMemoryStorage implements MemoryStorage {
28
36
  private db;
29
37
  private filePath;
30
38
  private dedupWindowMinutes;
31
39
  private decayConfig;
40
+ private embeddingProvider;
41
+ private pageIndex;
32
42
  private constructor();
33
43
  /**
34
44
  * Expose the underlying database for the versioning layer.
35
45
  * Only used by MemoryVersioning — not part of the MemoryStorage interface.
36
46
  */
37
47
  getDatabase(): DatabaseWithParams;
48
+ /**
49
+ * Get the PageIndex service for paginated project memory access.
50
+ * Enables small context models (4K-8K tokens) to handle large project memories
51
+ * without compaction loops.
52
+ */
53
+ getPageIndex(): ProjectPageIndexService;
38
54
  /**
39
55
  * Async factory — handles WASM initialization and file loading.
40
56
  * If filePath exists, loads the existing DB. Otherwise, creates a fresh one.
@@ -44,6 +60,19 @@ export declare class SqliteMemoryStorage implements MemoryStorage {
44
60
  limit?: number;
45
61
  type?: string;
46
62
  }): Promise<MemoryObservationRow[]>;
63
+ /**
64
+ * Hybrid BM25 + semantic search (70% semantic, 30% keyword).
65
+ * Only called when embeddingProvider is set.
66
+ *
67
+ * Strategy:
68
+ * 1. Run FTS5 to get keyword candidates (up to limit * 5 to have enough for re-ranking)
69
+ * 2. Embed the query
70
+ * 3. For each candidate, deserialize its stored embedding and compute cosine similarity
71
+ * 4. Candidates without embeddings get cosine_sim = 0 (keyword-only score still applies)
72
+ * 5. Combine: final_score = 0.7 * cosine_sim + 0.3 * normalized_bm25
73
+ * 6. Sort descending, apply decay filter, return top-k
74
+ */
75
+ private _hybridSearch;
47
76
  saveObservation(data: {
48
77
  sessionId?: number;
49
78
  project: string;
@@ -54,6 +83,12 @@ export declare class SqliteMemoryStorage implements MemoryStorage {
54
83
  filePaths?: string[];
55
84
  severity?: string;
56
85
  }): Promise<MemoryObservationRow>;
86
+ /**
87
+ * Compute embedding buffer for storage.
88
+ * Returns the serialized float32 Buffer when embeddingProvider is available,
89
+ * or null (no-op) when it is not — enabling graceful degradation.
90
+ */
91
+ private _computeEmbeddingBuffer;
57
92
  createSession(data: {
58
93
  project: string;
59
94
  prNumber?: number;
@@ -69,6 +104,38 @@ export declare class SqliteMemoryStorage implements MemoryStorage {
69
104
  clearObservations(options?: {
70
105
  project?: string;
71
106
  }): Promise<number>;
107
+ /**
108
+ * Retrieve a cached author trust score.
109
+ * Returns null when the author has no entry in the cache.
110
+ */
111
+ getTrustScore(author: string): AuthorTrustScore | null;
112
+ /**
113
+ * Insert or replace an author trust score in the cache.
114
+ */
115
+ upsertTrustScore(score: AuthorTrustScore): void;
116
+ /**
117
+ * Persist a dismissed finding as a negative example.
118
+ * Uses INSERT OR REPLACE to make saves idempotent.
119
+ */
120
+ saveNegativeExample(example: NegativeExample & {
121
+ filePath?: string;
122
+ }): void;
123
+ /**
124
+ * Retrieve all negative examples scoped to a file path.
125
+ * Uses context_hash (SHA256 of filePath) as the lookup key.
126
+ */
127
+ getNegativeExamplesForFile(filePath: string): NegativeExample[];
128
+ /**
129
+ * Retrieve all stored negative examples (for listing/management).
130
+ */
131
+ getAllNegativeExamples(): (NegativeExample & {
132
+ filePath?: string;
133
+ })[];
134
+ /**
135
+ * Delete a negative example by its finding hash.
136
+ * Returns true if a row was deleted, false otherwise.
137
+ */
138
+ deleteNegativeExample(findingHash: string): boolean;
72
139
  close(): Promise<void>;
73
140
  }
74
141
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/memory/sqlite.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAwB,EAAE,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAQjE,OAAO,KAAK,EACV,uBAAuB,EACvB,uBAAuB,EACvB,oBAAoB,EACpB,WAAW,EACX,aAAa,EACd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAwB,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAGrE;;;GAGG;AACH,UAAU,kBAAmB,SAAQ,QAAQ;IAC3C,IAAI,CACF,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,EAAE,GAClC,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAA;KAAE,CAAC,CAAC;CACtD;AAmFD,MAAM,WAAW,0BAA0B;IACzC,4HAA4H;IAC5H,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B,gFAAgF;IAChF,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED,qBAAa,mBAAoB,YAAW,aAAa;IAKrD,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,QAAQ;IALlB,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,WAAW,CAAc;IAEjC,OAAO;IASP;;;OAGG;IACH,WAAW,IAAI,kBAAkB;IAIjC;;;OAGG;WACU,MAAM,CACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,0BAA0B,GACnC,OAAO,CAAC,mBAAmB,CAAC;IAoCzB,kBAAkB,CACtB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAO,GAC9C,OAAO,CAAC,oBAAoB,EAAE,CAAC;IA6E5B,eAAe,CAAC,IAAI,EAAE;QAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAmI3B,aAAa,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IAapF,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAanE,OAAO,CAAC,WAAW;IAgBb,gBAAgB,CACpB,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,uBAAuB,EAAE,CAAC;IAmC/B,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC;IAmBnE,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK/C,QAAQ,IAAI,OAAO,CAAC,WAAW,CAAC;IAmChC,iBAAiB,CAAC,OAAO,GAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAStE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAU7B"}
1
+ {"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/memory/sqlite.ts"],"names":[],"mappings":"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"}