@mneme-ai/core 0.8.4 → 0.10.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 (272) hide show
  1. package/dist/entities/go-parser.d.ts +47 -0
  2. package/dist/entities/go-parser.d.ts.map +1 -0
  3. package/dist/entities/go-parser.js +315 -0
  4. package/dist/entities/go-parser.js.map +1 -0
  5. package/dist/entities/go-parser.test.d.ts +2 -0
  6. package/dist/entities/go-parser.test.d.ts.map +1 -0
  7. package/dist/entities/go-parser.test.js +147 -0
  8. package/dist/entities/go-parser.test.js.map +1 -0
  9. package/dist/entities/index.d.ts +1 -0
  10. package/dist/entities/index.d.ts.map +1 -1
  11. package/dist/entities/index.js +1 -0
  12. package/dist/entities/index.js.map +1 -1
  13. package/dist/index.d.ts +3 -0
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +3 -0
  16. package/dist/index.js.map +1 -1
  17. package/dist/indexer/indexer.d.ts +12 -0
  18. package/dist/indexer/indexer.d.ts.map +1 -1
  19. package/dist/indexer/indexer.js +28 -1
  20. package/dist/indexer/indexer.js.map +1 -1
  21. package/dist/insights/bus-factor.d.ts +58 -0
  22. package/dist/insights/bus-factor.d.ts.map +1 -0
  23. package/dist/insights/bus-factor.js +117 -0
  24. package/dist/insights/bus-factor.js.map +1 -0
  25. package/dist/insights/bus-factor.test.d.ts +2 -0
  26. package/dist/insights/bus-factor.test.d.ts.map +1 -0
  27. package/dist/insights/bus-factor.test.js +149 -0
  28. package/dist/insights/bus-factor.test.js.map +1 -0
  29. package/dist/insights/commit-coach.d.ts +80 -0
  30. package/dist/insights/commit-coach.d.ts.map +1 -0
  31. package/dist/insights/commit-coach.js +230 -0
  32. package/dist/insights/commit-coach.js.map +1 -0
  33. package/dist/insights/commit-coach.test.d.ts +2 -0
  34. package/dist/insights/commit-coach.test.d.ts.map +1 -0
  35. package/dist/insights/commit-coach.test.js +163 -0
  36. package/dist/insights/commit-coach.test.js.map +1 -0
  37. package/dist/insights/crystal-ball.d.ts +76 -0
  38. package/dist/insights/crystal-ball.d.ts.map +1 -0
  39. package/dist/insights/crystal-ball.js +219 -0
  40. package/dist/insights/crystal-ball.js.map +1 -0
  41. package/dist/insights/crystal-ball.test.d.ts +2 -0
  42. package/dist/insights/crystal-ball.test.d.ts.map +1 -0
  43. package/dist/insights/crystal-ball.test.js +157 -0
  44. package/dist/insights/crystal-ball.test.js.map +1 -0
  45. package/dist/insights/decisions.d.ts +38 -0
  46. package/dist/insights/decisions.d.ts.map +1 -0
  47. package/dist/insights/decisions.js +125 -0
  48. package/dist/insights/decisions.js.map +1 -0
  49. package/dist/insights/decisions.test.d.ts +2 -0
  50. package/dist/insights/decisions.test.d.ts.map +1 -0
  51. package/dist/insights/decisions.test.js +141 -0
  52. package/dist/insights/decisions.test.js.map +1 -0
  53. package/dist/insights/dream.d.ts +71 -0
  54. package/dist/insights/dream.d.ts.map +1 -0
  55. package/dist/insights/dream.js +235 -0
  56. package/dist/insights/dream.js.map +1 -0
  57. package/dist/insights/dream.test.d.ts +2 -0
  58. package/dist/insights/dream.test.d.ts.map +1 -0
  59. package/dist/insights/dream.test.js +127 -0
  60. package/dist/insights/dream.test.js.map +1 -0
  61. package/dist/insights/index.d.ts +21 -0
  62. package/dist/insights/index.d.ts.map +1 -0
  63. package/dist/insights/index.js +21 -0
  64. package/dist/insights/index.js.map +1 -0
  65. package/dist/insights/obsidian.d.ts +42 -0
  66. package/dist/insights/obsidian.d.ts.map +1 -0
  67. package/dist/insights/obsidian.js +263 -0
  68. package/dist/insights/obsidian.js.map +1 -0
  69. package/dist/insights/obsidian.test.d.ts +2 -0
  70. package/dist/insights/obsidian.test.d.ts.map +1 -0
  71. package/dist/insights/obsidian.test.js +241 -0
  72. package/dist/insights/obsidian.test.js.map +1 -0
  73. package/dist/insights/paradox.d.ts +36 -0
  74. package/dist/insights/paradox.d.ts.map +1 -0
  75. package/dist/insights/paradox.js +201 -0
  76. package/dist/insights/paradox.js.map +1 -0
  77. package/dist/insights/paradox.test.d.ts +2 -0
  78. package/dist/insights/paradox.test.d.ts.map +1 -0
  79. package/dist/insights/paradox.test.js +88 -0
  80. package/dist/insights/paradox.test.js.map +1 -0
  81. package/dist/insights/regret.d.ts +57 -0
  82. package/dist/insights/regret.d.ts.map +1 -0
  83. package/dist/insights/regret.js +137 -0
  84. package/dist/insights/regret.js.map +1 -0
  85. package/dist/insights/regret.test.d.ts +2 -0
  86. package/dist/insights/regret.test.d.ts.map +1 -0
  87. package/dist/insights/regret.test.js +153 -0
  88. package/dist/insights/regret.test.js.map +1 -0
  89. package/dist/insights/stack-trace.d.ts +40 -0
  90. package/dist/insights/stack-trace.d.ts.map +1 -0
  91. package/dist/insights/stack-trace.js +127 -0
  92. package/dist/insights/stack-trace.js.map +1 -0
  93. package/dist/insights/stack-trace.test.d.ts +2 -0
  94. package/dist/insights/stack-trace.test.d.ts.map +1 -0
  95. package/dist/insights/stack-trace.test.js +103 -0
  96. package/dist/insights/stack-trace.test.js.map +1 -0
  97. package/dist/insights/story.d.ts +34 -0
  98. package/dist/insights/story.d.ts.map +1 -0
  99. package/dist/insights/story.js +100 -0
  100. package/dist/insights/story.js.map +1 -0
  101. package/dist/insights/story.test.d.ts +2 -0
  102. package/dist/insights/story.test.d.ts.map +1 -0
  103. package/dist/insights/story.test.js +99 -0
  104. package/dist/insights/story.test.js.map +1 -0
  105. package/dist/insights/suggest.d.ts +29 -0
  106. package/dist/insights/suggest.d.ts.map +1 -0
  107. package/dist/insights/suggest.js +93 -0
  108. package/dist/insights/suggest.js.map +1 -0
  109. package/dist/insights/suggest.test.d.ts +2 -0
  110. package/dist/insights/suggest.test.d.ts.map +1 -0
  111. package/dist/insights/suggest.test.js +71 -0
  112. package/dist/insights/suggest.test.js.map +1 -0
  113. package/dist/insights/who-knows.d.ts +66 -0
  114. package/dist/insights/who-knows.d.ts.map +1 -0
  115. package/dist/insights/who-knows.js +125 -0
  116. package/dist/insights/who-knows.js.map +1 -0
  117. package/dist/insights/who-knows.test.d.ts +2 -0
  118. package/dist/insights/who-knows.test.d.ts.map +1 -0
  119. package/dist/insights/who-knows.test.js +109 -0
  120. package/dist/insights/who-knows.test.js.map +1 -0
  121. package/dist/quant/alpha.d.ts +87 -0
  122. package/dist/quant/alpha.d.ts.map +1 -0
  123. package/dist/quant/alpha.js +103 -0
  124. package/dist/quant/alpha.js.map +1 -0
  125. package/dist/quant/alpha.test.d.ts +2 -0
  126. package/dist/quant/alpha.test.d.ts.map +1 -0
  127. package/dist/quant/alpha.test.js +147 -0
  128. package/dist/quant/alpha.test.js.map +1 -0
  129. package/dist/quant/backtest.d.ts +57 -0
  130. package/dist/quant/backtest.d.ts.map +1 -0
  131. package/dist/quant/backtest.js +90 -0
  132. package/dist/quant/backtest.js.map +1 -0
  133. package/dist/quant/backtest.test.d.ts +2 -0
  134. package/dist/quant/backtest.test.d.ts.map +1 -0
  135. package/dist/quant/backtest.test.js +133 -0
  136. package/dist/quant/backtest.test.js.map +1 -0
  137. package/dist/quant/black-swan.d.ts +45 -0
  138. package/dist/quant/black-swan.d.ts.map +1 -0
  139. package/dist/quant/black-swan.js +112 -0
  140. package/dist/quant/black-swan.js.map +1 -0
  141. package/dist/quant/black-swan.test.d.ts +2 -0
  142. package/dist/quant/black-swan.test.d.ts.map +1 -0
  143. package/dist/quant/black-swan.test.js +131 -0
  144. package/dist/quant/black-swan.test.js.map +1 -0
  145. package/dist/quant/correlation-matrix.d.ts +54 -0
  146. package/dist/quant/correlation-matrix.d.ts.map +1 -0
  147. package/dist/quant/correlation-matrix.js +103 -0
  148. package/dist/quant/correlation-matrix.js.map +1 -0
  149. package/dist/quant/correlation-matrix.test.d.ts +2 -0
  150. package/dist/quant/correlation-matrix.test.d.ts.map +1 -0
  151. package/dist/quant/correlation-matrix.test.js +118 -0
  152. package/dist/quant/correlation-matrix.test.js.map +1 -0
  153. package/dist/quant/drawdown.d.ts +51 -0
  154. package/dist/quant/drawdown.d.ts.map +1 -0
  155. package/dist/quant/drawdown.js +96 -0
  156. package/dist/quant/drawdown.js.map +1 -0
  157. package/dist/quant/drawdown.test.d.ts +2 -0
  158. package/dist/quant/drawdown.test.d.ts.map +1 -0
  159. package/dist/quant/drawdown.test.js +166 -0
  160. package/dist/quant/drawdown.test.js.map +1 -0
  161. package/dist/quant/greek.d.ts +55 -0
  162. package/dist/quant/greek.d.ts.map +1 -0
  163. package/dist/quant/greek.js +157 -0
  164. package/dist/quant/greek.js.map +1 -0
  165. package/dist/quant/greek.test.d.ts +2 -0
  166. package/dist/quant/greek.test.d.ts.map +1 -0
  167. package/dist/quant/greek.test.js +138 -0
  168. package/dist/quant/greek.test.js.map +1 -0
  169. package/dist/quant/implied-volatility.d.ts +65 -0
  170. package/dist/quant/implied-volatility.d.ts.map +1 -0
  171. package/dist/quant/implied-volatility.js +149 -0
  172. package/dist/quant/implied-volatility.js.map +1 -0
  173. package/dist/quant/implied-volatility.test.d.ts +2 -0
  174. package/dist/quant/implied-volatility.test.d.ts.map +1 -0
  175. package/dist/quant/implied-volatility.test.js +127 -0
  176. package/dist/quant/implied-volatility.test.js.map +1 -0
  177. package/dist/quant/index.d.ts +28 -0
  178. package/dist/quant/index.d.ts.map +1 -0
  179. package/dist/quant/index.js +28 -0
  180. package/dist/quant/index.js.map +1 -0
  181. package/dist/quant/insider-trading.d.ts +56 -0
  182. package/dist/quant/insider-trading.d.ts.map +1 -0
  183. package/dist/quant/insider-trading.js +129 -0
  184. package/dist/quant/insider-trading.js.map +1 -0
  185. package/dist/quant/insider-trading.test.d.ts +2 -0
  186. package/dist/quant/insider-trading.test.d.ts.map +1 -0
  187. package/dist/quant/insider-trading.test.js +130 -0
  188. package/dist/quant/insider-trading.test.js.map +1 -0
  189. package/dist/quant/moneyball.d.ts +48 -0
  190. package/dist/quant/moneyball.d.ts.map +1 -0
  191. package/dist/quant/moneyball.js +110 -0
  192. package/dist/quant/moneyball.js.map +1 -0
  193. package/dist/quant/moneyball.test.d.ts +2 -0
  194. package/dist/quant/moneyball.test.d.ts.map +1 -0
  195. package/dist/quant/moneyball.test.js +137 -0
  196. package/dist/quant/moneyball.test.js.map +1 -0
  197. package/dist/quant/tax-loss-harvest.d.ts +59 -0
  198. package/dist/quant/tax-loss-harvest.d.ts.map +1 -0
  199. package/dist/quant/tax-loss-harvest.js +126 -0
  200. package/dist/quant/tax-loss-harvest.js.map +1 -0
  201. package/dist/quant/tax-loss-harvest.test.d.ts +2 -0
  202. package/dist/quant/tax-loss-harvest.test.d.ts.map +1 -0
  203. package/dist/quant/tax-loss-harvest.test.js +126 -0
  204. package/dist/quant/tax-loss-harvest.test.js.map +1 -0
  205. package/dist/retrieve/index.d.ts +2 -0
  206. package/dist/retrieve/index.d.ts.map +1 -1
  207. package/dist/retrieve/index.js +2 -0
  208. package/dist/retrieve/index.js.map +1 -1
  209. package/dist/retrieve/intent.d.ts +32 -0
  210. package/dist/retrieve/intent.d.ts.map +1 -0
  211. package/dist/retrieve/intent.js +104 -0
  212. package/dist/retrieve/intent.js.map +1 -0
  213. package/dist/retrieve/intent.test.d.ts +2 -0
  214. package/dist/retrieve/intent.test.d.ts.map +1 -0
  215. package/dist/retrieve/intent.test.js +106 -0
  216. package/dist/retrieve/intent.test.js.map +1 -0
  217. package/dist/retrieve/search.d.ts +30 -0
  218. package/dist/retrieve/search.d.ts.map +1 -1
  219. package/dist/retrieve/search.js +48 -0
  220. package/dist/retrieve/search.js.map +1 -1
  221. package/dist/retrieve/search.test.js +84 -1
  222. package/dist/retrieve/search.test.js.map +1 -1
  223. package/dist/retrieve/synthesize.d.ts +57 -0
  224. package/dist/retrieve/synthesize.d.ts.map +1 -0
  225. package/dist/retrieve/synthesize.js +191 -0
  226. package/dist/retrieve/synthesize.js.map +1 -0
  227. package/dist/retrieve/synthesize.test.d.ts +2 -0
  228. package/dist/retrieve/synthesize.test.d.ts.map +1 -0
  229. package/dist/retrieve/synthesize.test.js +127 -0
  230. package/dist/retrieve/synthesize.test.js.map +1 -0
  231. package/dist/store/schema.d.ts +2 -2
  232. package/dist/store/schema.d.ts.map +1 -1
  233. package/dist/store/schema.js +60 -2
  234. package/dist/store/schema.js.map +1 -1
  235. package/dist/store/sqlite.d.ts +2 -0
  236. package/dist/store/sqlite.d.ts.map +1 -1
  237. package/dist/store/sqlite.js +24 -0
  238. package/dist/store/sqlite.js.map +1 -1
  239. package/dist/store/sqlite.test.js +1 -1
  240. package/dist/util/index.d.ts +2 -0
  241. package/dist/util/index.d.ts.map +1 -1
  242. package/dist/util/index.js +2 -1
  243. package/dist/util/index.js.map +1 -1
  244. package/dist/util/redact.d.ts +58 -0
  245. package/dist/util/redact.d.ts.map +1 -0
  246. package/dist/util/redact.js +129 -0
  247. package/dist/util/redact.js.map +1 -0
  248. package/dist/util/redact.test.d.ts +2 -0
  249. package/dist/util/redact.test.d.ts.map +1 -0
  250. package/dist/util/redact.test.js +148 -0
  251. package/dist/util/redact.test.js.map +1 -0
  252. package/dist/wisdom/calibrator.d.ts +43 -0
  253. package/dist/wisdom/calibrator.d.ts.map +1 -0
  254. package/dist/wisdom/calibrator.js +120 -0
  255. package/dist/wisdom/calibrator.js.map +1 -0
  256. package/dist/wisdom/feedback.d.ts +45 -0
  257. package/dist/wisdom/feedback.d.ts.map +1 -0
  258. package/dist/wisdom/feedback.js +116 -0
  259. package/dist/wisdom/feedback.js.map +1 -0
  260. package/dist/wisdom/index.d.ts +15 -0
  261. package/dist/wisdom/index.d.ts.map +1 -0
  262. package/dist/wisdom/index.js +15 -0
  263. package/dist/wisdom/index.js.map +1 -0
  264. package/dist/wisdom/types.d.ts +67 -0
  265. package/dist/wisdom/types.d.ts.map +1 -0
  266. package/dist/wisdom/types.js +20 -0
  267. package/dist/wisdom/types.js.map +1 -0
  268. package/dist/wisdom/wisdom.test.d.ts +2 -0
  269. package/dist/wisdom/wisdom.test.d.ts.map +1 -0
  270. package/dist/wisdom/wisdom.test.js +144 -0
  271. package/dist/wisdom/wisdom.test.js.map +1 -0
  272. package/package.json +1 -1
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Feedback collector — every `mneme ask` writes one row.
3
+ *
4
+ * was_helpful starts NULL and is filled by:
5
+ * - explicit: `mneme feedback <id> up|down`
6
+ * - implicit-revisit: the user ran `mneme why <commit>` on a returned commit
7
+ * within 5 minutes — strong positive signal.
8
+ * - implicit-reuse: the user did not re-ask a slightly-different version of
9
+ * the same query within 60s — weak positive signal.
10
+ *
11
+ * Why these heuristics: they require zero UX work from the user. The
12
+ * explicit path exists for power users; the implicit paths cover the 95%.
13
+ */
14
+ import { randomUUID } from "node:crypto";
15
+ /** Insert a pending feedback row. Returns the id so callers can update it later. */
16
+ export function recordQuery(store, input) {
17
+ const id = randomUUID();
18
+ const now = new Date().toISOString();
19
+ store.db
20
+ .prepare(`INSERT INTO wisdom_feedback
21
+ (id, query, result_hashes, top_score, was_helpful, source,
22
+ semantic_weight, min_sem_cosine, rrf_k, created_at)
23
+ VALUES (?, ?, ?, ?, NULL, 'pending', ?, ?, ?, ?)`)
24
+ .run(id, input.query, JSON.stringify(input.resultHashes), input.topScore ?? null, input.semanticWeight ?? null, input.minSemCosine ?? null, input.rrfK ?? null, now);
25
+ return id;
26
+ }
27
+ /** Set was_helpful for a feedback row. */
28
+ export function setHelpful(store, id, wasHelpful, source = "explicit") {
29
+ const result = store.db
30
+ .prepare(`UPDATE wisdom_feedback SET was_helpful = ?, source = ? WHERE id = ?`)
31
+ .run(wasHelpful ? 1 : 0, source, id);
32
+ return result.changes > 0;
33
+ }
34
+ /**
35
+ * Implicit positive signal: the user looked at one of the returned commits
36
+ * via `mneme why`. We mark the most recent matching pending row as helpful.
37
+ */
38
+ export function recordImplicitRevisit(store, commitHash) {
39
+ const recent = store.db
40
+ .prepare(`SELECT id, result_hashes FROM wisdom_feedback
41
+ WHERE was_helpful IS NULL
42
+ AND created_at >= datetime('now', '-5 minutes')
43
+ ORDER BY created_at DESC
44
+ LIMIT 20`)
45
+ .all();
46
+ let updated = 0;
47
+ for (const row of recent) {
48
+ try {
49
+ const hashes = JSON.parse(row.result_hashes);
50
+ if (hashes.includes(commitHash)) {
51
+ if (setHelpful(store, row.id, true, "implicit-revisit"))
52
+ updated += 1;
53
+ }
54
+ }
55
+ catch {
56
+ // ignore corrupt JSON; the row is just an inert breadcrumb in that case
57
+ }
58
+ }
59
+ return updated;
60
+ }
61
+ export function listFeedback(store, opts = {}) {
62
+ const where = [];
63
+ const params = [];
64
+ if (opts.since) {
65
+ where.push("created_at >= ?");
66
+ params.push(opts.since);
67
+ }
68
+ const sql = `
69
+ SELECT id, query, result_hashes, top_score, was_helpful, source,
70
+ semantic_weight, min_sem_cosine, rrf_k, created_at
71
+ FROM wisdom_feedback
72
+ ${where.length ? "WHERE " + where.join(" AND ") : ""}
73
+ ORDER BY created_at DESC
74
+ LIMIT ?
75
+ `;
76
+ params.push(opts.limit ?? 1000);
77
+ const rows = store.db.prepare(sql).all(...params);
78
+ return rows.map((r) => ({
79
+ id: r.id,
80
+ query: r.query,
81
+ resultHashes: JSON.parse(r.result_hashes),
82
+ topScore: r.top_score ?? undefined,
83
+ wasHelpful: r.was_helpful === 1 ? 1 : r.was_helpful === 0 ? 0 : undefined,
84
+ source: r.source,
85
+ semanticWeight: r.semantic_weight ?? undefined,
86
+ minSemCosine: r.min_sem_cosine ?? undefined,
87
+ rrfK: r.rrf_k ?? undefined,
88
+ createdAt: r.created_at,
89
+ }));
90
+ }
91
+ export function summarizeFeedback(store, since) {
92
+ const params = [];
93
+ let where = "";
94
+ if (since) {
95
+ where = "WHERE created_at >= ?";
96
+ params.push(since);
97
+ }
98
+ const row = store.db
99
+ .prepare(`SELECT
100
+ COUNT(*) AS total,
101
+ SUM(CASE WHEN was_helpful = 1 THEN 1 ELSE 0 END) AS helpful,
102
+ SUM(CASE WHEN was_helpful = 0 THEN 1 ELSE 0 END) AS unhelpful,
103
+ SUM(CASE WHEN was_helpful IS NULL THEN 1 ELSE 0 END) AS pending
104
+ FROM wisdom_feedback ${where}`)
105
+ .get(...params);
106
+ const decided = row.helpful + row.unhelpful;
107
+ const hitRate = decided === 0 ? 0 : row.helpful / decided;
108
+ return {
109
+ total: row.total,
110
+ helpful: row.helpful,
111
+ unhelpful: row.unhelpful,
112
+ pending: row.pending,
113
+ hitRate,
114
+ };
115
+ }
116
+ //# sourceMappingURL=feedback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feedback.js","sourceRoot":"","sources":["../../src/wisdom/feedback.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Wisdom Mutant Engine — public surface.
3
+ *
4
+ * The engine has three appendable artifacts (feedback, calibrations,
5
+ * eval-runs) and three operations on them: collect, calibrate, self-eval.
6
+ *
7
+ * Inspired by AlphaGo Zero's loop — observe, adapt, measure, repeat —
8
+ * minus the reinforcement learning. We are not training a model. We are
9
+ * tuning a small set of search knobs against the user's own feedback
10
+ * over time. The point is the *loop*, not the algorithm.
11
+ */
12
+ export * from "./types.js";
13
+ export * from "./feedback.js";
14
+ export * from "./calibrator.js";
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/wisdom/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Wisdom Mutant Engine — public surface.
3
+ *
4
+ * The engine has three appendable artifacts (feedback, calibrations,
5
+ * eval-runs) and three operations on them: collect, calibrate, self-eval.
6
+ *
7
+ * Inspired by AlphaGo Zero's loop — observe, adapt, measure, repeat —
8
+ * minus the reinforcement learning. We are not training a model. We are
9
+ * tuning a small set of search knobs against the user's own feedback
10
+ * over time. The point is the *loop*, not the algorithm.
11
+ */
12
+ export * from "./types.js";
13
+ export * from "./feedback.js";
14
+ export * from "./calibrator.js";
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/wisdom/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Wisdom Mutant Engine — types.
3
+ *
4
+ * The "self-improving memory" subsystem. Three loops:
5
+ * 1. Feedback collector — every query records what was returned.
6
+ * 2. Auto-calibrator — periodically tunes search knobs against the
7
+ * feedback set, picks the config that maximizes
8
+ * hit rate.
9
+ * 3. Self-eval — runs eval set against current config and writes
10
+ * a row to wisdom_eval_run. Detects regressions.
11
+ *
12
+ * The point: `mneme adapt` recommendations and the search thresholds in
13
+ * `mneme ask` are not hardcoded. They are derived from this engine's history.
14
+ */
15
+ export interface FeedbackRow {
16
+ id: string;
17
+ query: string;
18
+ /** JSON array of commit hashes returned at query time. */
19
+ resultHashes: string[];
20
+ /** Top RRF score at query time (a confidence proxy). */
21
+ topScore?: number;
22
+ /**
23
+ * 1 = the user found the result useful (or an implicit signal said so).
24
+ * 0 = explicitly marked not useful.
25
+ * undefined = unknown — usually because no feedback has been collected yet.
26
+ */
27
+ wasHelpful?: 1 | 0;
28
+ /** How was_helpful was set. */
29
+ source: "explicit" | "implicit-reuse" | "implicit-revisit" | "pending";
30
+ /** Search config in effect when the query ran. */
31
+ semanticWeight?: number;
32
+ minSemCosine?: number;
33
+ rrfK?: number;
34
+ createdAt: string;
35
+ }
36
+ export interface CalibrationRow {
37
+ key: string;
38
+ /** Stored as JSON; parse with JSON.parse. */
39
+ value: unknown;
40
+ /** The metric this calibration achieved on the feedback set. */
41
+ metricValue?: number;
42
+ metricName?: string;
43
+ calibratedAt: string;
44
+ notes?: string;
45
+ }
46
+ export interface EvalRunRow {
47
+ id: number;
48
+ ranAt: string;
49
+ variant: string;
50
+ recallAt3: number;
51
+ mrr: number;
52
+ ndcgAt10?: number;
53
+ hitRate: number;
54
+ semanticWeight?: number;
55
+ minSemCosine?: number;
56
+ rrfK?: number;
57
+ numQueries: number;
58
+ notes?: string;
59
+ }
60
+ /** Search-time knobs the calibrator can tune. */
61
+ export interface CalibrationConfig {
62
+ semanticWeight: number;
63
+ minSemCosine: number;
64
+ rrfK: number;
65
+ }
66
+ export declare const DEFAULT_CALIBRATION: CalibrationConfig;
67
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/wisdom/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,UAAU,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACnB,+BAA+B;IAC/B,MAAM,EAAE,UAAU,GAAG,gBAAgB,GAAG,kBAAkB,GAAG,SAAS,CAAC;IACvE,kDAAkD;IAClD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,6CAA6C;IAC7C,KAAK,EAAE,OAAO,CAAC;IACf,gEAAgE;IAChE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,iDAAiD;AACjD,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,mBAAmB,EAAE,iBAIjC,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Wisdom Mutant Engine — types.
3
+ *
4
+ * The "self-improving memory" subsystem. Three loops:
5
+ * 1. Feedback collector — every query records what was returned.
6
+ * 2. Auto-calibrator — periodically tunes search knobs against the
7
+ * feedback set, picks the config that maximizes
8
+ * hit rate.
9
+ * 3. Self-eval — runs eval set against current config and writes
10
+ * a row to wisdom_eval_run. Detects regressions.
11
+ *
12
+ * The point: `mneme adapt` recommendations and the search thresholds in
13
+ * `mneme ask` are not hardcoded. They are derived from this engine's history.
14
+ */
15
+ export const DEFAULT_CALIBRATION = {
16
+ semanticWeight: 0.65,
17
+ minSemCosine: 0.4,
18
+ rrfK: 60,
19
+ };
20
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/wisdom/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAyDH,MAAM,CAAC,MAAM,mBAAmB,GAAsB;IACpD,cAAc,EAAE,IAAI;IACpB,YAAY,EAAE,GAAG;IACjB,IAAI,EAAE,EAAE;CACT,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=wisdom.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wisdom.test.d.ts","sourceRoot":"","sources":["../../src/wisdom/wisdom.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,144 @@
1
+ import { describe, it, expect, beforeEach, afterEach } from "vitest";
2
+ import { mkdtempSync, rmSync } from "node:fs";
3
+ import { join } from "node:path";
4
+ import { tmpdir } from "node:os";
5
+ import { MnemeStore } from "../store/sqlite.js";
6
+ import { recordQuery, setHelpful, recordImplicitRevisit, listFeedback, summarizeFeedback, } from "./feedback.js";
7
+ import { calibrate, readCalibration, persistCalibration, listCalibrations, } from "./calibrator.js";
8
+ import { DEFAULT_CALIBRATION } from "./types.js";
9
+ let tmpDir;
10
+ let store;
11
+ beforeEach(() => {
12
+ tmpDir = mkdtempSync(join(tmpdir(), "mneme-wisdom-test-"));
13
+ store = new MnemeStore(join(tmpDir, "mneme.db"));
14
+ });
15
+ afterEach(() => {
16
+ store.close();
17
+ rmSync(tmpDir, { recursive: true, force: true });
18
+ });
19
+ describe("wisdom_feedback — recordQuery + setHelpful", () => {
20
+ it("records a pending feedback row and lets it be marked helpful", () => {
21
+ const id = recordQuery(store, {
22
+ query: "why does payment retry",
23
+ resultHashes: ["abc123", "def456"],
24
+ topScore: 0.087,
25
+ semanticWeight: 0.65,
26
+ minSemCosine: 0.4,
27
+ rrfK: 60,
28
+ });
29
+ expect(id).toMatch(/^[0-9a-f-]{36}$/);
30
+ const list = listFeedback(store);
31
+ expect(list).toHaveLength(1);
32
+ expect(list[0].wasHelpful).toBeUndefined();
33
+ expect(list[0].source).toBe("pending");
34
+ expect(list[0].resultHashes).toEqual(["abc123", "def456"]);
35
+ expect(setHelpful(store, id, true)).toBe(true);
36
+ expect(listFeedback(store)[0].wasHelpful).toBe(1);
37
+ expect(listFeedback(store)[0].source).toBe("explicit");
38
+ });
39
+ it("setHelpful with false records as unhelpful", () => {
40
+ const id = recordQuery(store, { query: "x", resultHashes: ["h1"] });
41
+ setHelpful(store, id, false);
42
+ expect(listFeedback(store)[0].wasHelpful).toBe(0);
43
+ });
44
+ it("setHelpful returns false when id does not exist", () => {
45
+ expect(setHelpful(store, "nonexistent-id", true)).toBe(false);
46
+ });
47
+ });
48
+ describe("recordImplicitRevisit — implicit positive signal from `mneme why`", () => {
49
+ it("marks recent pending row helpful when commit was in result set", () => {
50
+ const id = recordQuery(store, { query: "x", resultHashes: ["abc", "def"] });
51
+ const updated = recordImplicitRevisit(store, "abc");
52
+ expect(updated).toBe(1);
53
+ const row = listFeedback(store).find((r) => r.id === id);
54
+ expect(row.wasHelpful).toBe(1);
55
+ expect(row.source).toBe("implicit-revisit");
56
+ });
57
+ it("does not touch rows that did not return that commit", () => {
58
+ const id = recordQuery(store, { query: "x", resultHashes: ["xxx"] });
59
+ const updated = recordImplicitRevisit(store, "abc");
60
+ expect(updated).toBe(0);
61
+ expect(listFeedback(store).find((r) => r.id === id).wasHelpful).toBeUndefined();
62
+ });
63
+ it("does not touch already-decided rows", () => {
64
+ const id = recordQuery(store, { query: "x", resultHashes: ["abc"] });
65
+ setHelpful(store, id, false, "explicit");
66
+ recordImplicitRevisit(store, "abc");
67
+ expect(listFeedback(store)[0].wasHelpful).toBe(0); // stays unhelpful
68
+ expect(listFeedback(store)[0].source).toBe("explicit");
69
+ });
70
+ });
71
+ describe("summarizeFeedback", () => {
72
+ it("counts helpful / unhelpful / pending and computes hit rate", () => {
73
+ recordQuery(store, { query: "1", resultHashes: ["a"] });
74
+ const id2 = recordQuery(store, { query: "2", resultHashes: ["b"] });
75
+ setHelpful(store, id2, true);
76
+ const id3 = recordQuery(store, { query: "3", resultHashes: ["c"] });
77
+ setHelpful(store, id3, false);
78
+ const id4 = recordQuery(store, { query: "4", resultHashes: ["d"] });
79
+ setHelpful(store, id4, true);
80
+ const summary = summarizeFeedback(store);
81
+ expect(summary.total).toBe(4);
82
+ expect(summary.helpful).toBe(2);
83
+ expect(summary.unhelpful).toBe(1);
84
+ expect(summary.pending).toBe(1);
85
+ // hit rate = helpful / decided = 2 / 3
86
+ expect(summary.hitRate).toBeCloseTo(2 / 3, 4);
87
+ });
88
+ it("returns 0 hit rate when no rows are decided yet", () => {
89
+ recordQuery(store, { query: "x", resultHashes: ["a"] });
90
+ expect(summarizeFeedback(store).hitRate).toBe(0);
91
+ });
92
+ });
93
+ describe("calibrator — readCalibration + persistCalibration", () => {
94
+ it("returns DEFAULT_CALIBRATION when nothing is stored", () => {
95
+ expect(readCalibration(store)).toEqual(DEFAULT_CALIBRATION);
96
+ });
97
+ it("returns the latest stored calibration", () => {
98
+ persistCalibration(store, "search", { semanticWeight: 0.85, minSemCosine: 0.3, rrfK: 30, hitRate: 0.92 }, "hit_rate");
99
+ const c = readCalibration(store);
100
+ expect(c.semanticWeight).toBe(0.85);
101
+ expect(c.minSemCosine).toBe(0.3);
102
+ expect(c.rrfK).toBe(30);
103
+ });
104
+ it("listCalibrations returns rows ordered by calibrated_at desc", async () => {
105
+ persistCalibration(store, "search", { semanticWeight: 0.4, minSemCosine: 0.5, rrfK: 60, hitRate: 0.5 }, "hit_rate");
106
+ await new Promise((r) => setTimeout(r, 10)); // ensure different timestamps
107
+ persistCalibration(store, "search", { semanticWeight: 0.85, minSemCosine: 0.3, rrfK: 30, hitRate: 0.9 }, "hit_rate");
108
+ const list = listCalibrations(store);
109
+ expect(list).toHaveLength(1); // PRIMARY KEY=key, only one row per key
110
+ expect(list[0].value.semanticWeight).toBe(0.85);
111
+ });
112
+ });
113
+ describe("calibrate — the actual loop", () => {
114
+ it("returns defaults and does not run when fewer than 10 positive examples", async () => {
115
+ for (let i = 0; i < 5; i++) {
116
+ const id = recordQuery(store, { query: `q${i}`, resultHashes: [`h${i}`] });
117
+ setHelpful(store, id, true);
118
+ }
119
+ const result = await calibrate(store);
120
+ expect(result.calibrated).toBe(false);
121
+ expect(result.positiveExamples).toBe(5);
122
+ expect(result.config).toEqual(DEFAULT_CALIBRATION);
123
+ });
124
+ it("runs grid search and returns the best config when >= 10 positives", async () => {
125
+ // Note: this calibrates against real search() runs, which need an indexed
126
+ // store. Here we use ZERO commits — so search() returns [] for everything.
127
+ // The grid still runs; every config produces 0% hit rate. That's a valid
128
+ // edge case to verify: calibration is robust even with no corpus.
129
+ for (let i = 0; i < 12; i++) {
130
+ const id = recordQuery(store, { query: `q${i}`, resultHashes: [`h${i}`] });
131
+ setHelpful(store, id, true);
132
+ }
133
+ const result = await calibrate(store);
134
+ expect(result.calibrated).toBe(true);
135
+ expect(result.positiveExamples).toBe(12);
136
+ expect(result.grid.length).toBeGreaterThan(0);
137
+ // With an empty corpus, every grid point has hit rate 0 — but the
138
+ // calibrator still picks one and persists it.
139
+ expect(result.hitRate).toBe(0);
140
+ const stored = readCalibration(store);
141
+ expect(stored.semanticWeight).toBeDefined();
142
+ });
143
+ });
144
+ //# sourceMappingURL=wisdom.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wisdom.test.js","sourceRoot":"","sources":["../../src/wisdom/wisdom.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mneme-ai/core",
3
- "version": "0.8.4",
3
+ "version": "0.10.0",
4
4
  "description": "Core indexing, retrieval, and graph engine for Mneme",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",