@mneme-ai/core 1.64.0 → 1.65.1

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 (73) hide show
  1. package/dist/ai_compliance.d.ts +16 -0
  2. package/dist/ai_compliance.d.ts.map +1 -1
  3. package/dist/ai_compliance.js +33 -1
  4. package/dist/ai_compliance.js.map +1 -1
  5. package/dist/ai_compliance_windowed.test.d.ts +5 -0
  6. package/dist/ai_compliance_windowed.test.d.ts.map +1 -0
  7. package/dist/ai_compliance_windowed.test.js +70 -0
  8. package/dist/ai_compliance_windowed.test.js.map +1 -0
  9. package/dist/apoptosis/acgv_cascade.d.ts +24 -0
  10. package/dist/apoptosis/acgv_cascade.d.ts.map +1 -0
  11. package/dist/apoptosis/acgv_cascade.js +57 -0
  12. package/dist/apoptosis/acgv_cascade.js.map +1 -0
  13. package/dist/apoptosis/apoptosis.d.ts +64 -0
  14. package/dist/apoptosis/apoptosis.d.ts.map +1 -0
  15. package/dist/apoptosis/apoptosis.js +198 -0
  16. package/dist/apoptosis/apoptosis.js.map +1 -0
  17. package/dist/apoptosis/apoptosis.test.d.ts +12 -0
  18. package/dist/apoptosis/apoptosis.test.d.ts.map +1 -0
  19. package/dist/apoptosis/apoptosis.test.js +361 -0
  20. package/dist/apoptosis/apoptosis.test.js.map +1 -0
  21. package/dist/apoptosis/bayesian_prior.d.ts +37 -0
  22. package/dist/apoptosis/bayesian_prior.d.ts.map +1 -0
  23. package/dist/apoptosis/bayesian_prior.js +129 -0
  24. package/dist/apoptosis/bayesian_prior.js.map +1 -0
  25. package/dist/apoptosis/bench.d.ts +60 -0
  26. package/dist/apoptosis/bench.d.ts.map +1 -0
  27. package/dist/apoptosis/bench.js +156 -0
  28. package/dist/apoptosis/bench.js.map +1 -0
  29. package/dist/apoptosis/epistemic_humility.d.ts +30 -0
  30. package/dist/apoptosis/epistemic_humility.d.ts.map +1 -0
  31. package/dist/apoptosis/epistemic_humility.js +85 -0
  32. package/dist/apoptosis/epistemic_humility.js.map +1 -0
  33. package/dist/apoptosis/fractal_decompose.d.ts +39 -0
  34. package/dist/apoptosis/fractal_decompose.d.ts.map +1 -0
  35. package/dist/apoptosis/fractal_decompose.js +76 -0
  36. package/dist/apoptosis/fractal_decompose.js.map +1 -0
  37. package/dist/apoptosis/index.d.ts +31 -0
  38. package/dist/apoptosis/index.d.ts.map +1 -0
  39. package/dist/apoptosis/index.js +32 -0
  40. package/dist/apoptosis/index.js.map +1 -0
  41. package/dist/apoptosis/semantic_grounding.d.ts +35 -0
  42. package/dist/apoptosis/semantic_grounding.d.ts.map +1 -0
  43. package/dist/apoptosis/semantic_grounding.js +117 -0
  44. package/dist/apoptosis/semantic_grounding.js.map +1 -0
  45. package/dist/apoptosis/temporal_consistency.d.ts +32 -0
  46. package/dist/apoptosis/temporal_consistency.d.ts.map +1 -0
  47. package/dist/apoptosis/temporal_consistency.js +127 -0
  48. package/dist/apoptosis/temporal_consistency.js.map +1 -0
  49. package/dist/apoptosis/witnesses.d.ts +66 -0
  50. package/dist/apoptosis/witnesses.d.ts.map +1 -0
  51. package/dist/apoptosis/witnesses.js +381 -0
  52. package/dist/apoptosis/witnesses.js.map +1 -0
  53. package/dist/embedder_autodiagnose.d.ts +64 -0
  54. package/dist/embedder_autodiagnose.d.ts.map +1 -0
  55. package/dist/embedder_autodiagnose.js +153 -0
  56. package/dist/embedder_autodiagnose.js.map +1 -0
  57. package/dist/embedder_autodiagnose.test.d.ts +5 -0
  58. package/dist/embedder_autodiagnose.test.d.ts.map +1 -0
  59. package/dist/embedder_autodiagnose.test.js +101 -0
  60. package/dist/embedder_autodiagnose.test.js.map +1 -0
  61. package/dist/index.d.ts +4 -0
  62. package/dist/index.d.ts.map +1 -1
  63. package/dist/index.js +16 -0
  64. package/dist/index.js.map +1 -1
  65. package/dist/powers/p6_live.d.ts +43 -0
  66. package/dist/powers/p6_live.d.ts.map +1 -0
  67. package/dist/powers/p6_live.js +154 -0
  68. package/dist/powers/p6_live.js.map +1 -0
  69. package/dist/powers/p7_shadow.d.ts +37 -0
  70. package/dist/powers/p7_shadow.d.ts.map +1 -0
  71. package/dist/powers/p7_shadow.js +112 -0
  72. package/dist/powers/p7_shadow.js.map +1 -0
  73. package/package.json +1 -1
@@ -0,0 +1,381 @@
1
+ /**
2
+ * v1.65.0 -- APOPTOSIS L1: 5-WITNESS FUSION.
3
+ *
4
+ * Forensic-grade grounding. Every AI claim is broken into 5
5
+ * independent oracles that each verify a separate facet of reality.
6
+ * Break ANY one → the witness fails and APOPTOSIS escalates.
7
+ *
8
+ * W1 path-exists claim names a file -> does it exist on disk?
9
+ * W2 symbol-exists claim names a symbol -> does it appear in source?
10
+ * W3 type-shape-matches claim names a return/arg type -> matches tsc?
11
+ * W4 git-history-consistent claim names a version/SHA -> tag walk agrees?
12
+ * W5 behavior-cited claim names behavior -> at least one test mentions it?
13
+ *
14
+ * This is the floor. Layers 2-7 add semantic, temporal, statistical,
15
+ * fractal, and cascade-level checks.
16
+ *
17
+ * Pure read. No side effects. Returns per-witness verdict + overall.
18
+ */
19
+ import { existsSync, readFileSync, statSync, readdirSync } from "node:fs";
20
+ import { join } from "node:path";
21
+ import { execSync } from "node:child_process";
22
+ // ─── Facet extraction ─────────────────────────────────────────────────
23
+ const PATH_REGEX = /\b([./]?[\w@/-]+\.(?:ts|tsx|js|mjs|cjs|jsx|json|md|sql|yml|yaml|py|rs|go))\b/g;
24
+ const SYMBOL_REGEX = /\b([A-Za-z_][\w]{2,})\s*\(/g; // identifier followed by (
25
+ const VERSION_REGEX = /\bv?(\d+\.\d+\.\d+(?:-[\w.-]+)?)\b/g;
26
+ const SHA_REGEX = /\b([0-9a-f]{7,40})\b/g;
27
+ const BEHAVIOR_PHRASES = [
28
+ /\b(handles?|implements?|covers?|supports?|tests?|validates?|enforces?|verifies?|caches?|deduplicates?)\b\s+([\w-]+(?:\s+[\w-]+){0,3})/gi,
29
+ ];
30
+ /** Parse free-form claim text into structured facets. */
31
+ export function extractFacets(text) {
32
+ const facets = { text };
33
+ const paths = new Set();
34
+ const symbols = new Set();
35
+ const versionRefs = [];
36
+ const behaviors = new Set();
37
+ for (const m of text.matchAll(PATH_REGEX))
38
+ paths.add(m[1]);
39
+ for (const m of text.matchAll(SYMBOL_REGEX)) {
40
+ const id = m[1];
41
+ // Skip common language words.
42
+ if (id.length < 3)
43
+ continue;
44
+ if (/^(the|and|for|with|this|that|from|into|when|then|else|return|true|false|null)$/i.test(id))
45
+ continue;
46
+ symbols.add(id);
47
+ }
48
+ for (const m of text.matchAll(VERSION_REGEX))
49
+ versionRefs.push({ kind: "version", value: m[1] });
50
+ for (const m of text.matchAll(SHA_REGEX)) {
51
+ const v = m[1];
52
+ // Avoid grabbing year-like numbers; SHAs need >=7 hex chars AND at least 1 letter typically.
53
+ if (v.length >= 7 && /[a-f]/.test(v))
54
+ versionRefs.push({ kind: "sha", value: v });
55
+ }
56
+ for (const re of BEHAVIOR_PHRASES) {
57
+ for (const m of text.matchAll(re))
58
+ behaviors.add(m[0].toLowerCase());
59
+ }
60
+ if (paths.size > 0)
61
+ facets.paths = [...paths];
62
+ if (symbols.size > 0)
63
+ facets.symbols = [...symbols];
64
+ if (versionRefs.length > 0)
65
+ facets.versionRefs = versionRefs;
66
+ if (behaviors.size > 0)
67
+ facets.behaviors = [...behaviors];
68
+ return facets;
69
+ }
70
+ // ─── W1: path-exists ──────────────────────────────────────────────────
71
+ function w1PathExists(repoRoot, facets) {
72
+ const t0 = Date.now();
73
+ if (!facets.paths || facets.paths.length === 0) {
74
+ return { id: "W1-path", verdict: "INAPPLICABLE", detail: "Claim names no file paths.", ms: Date.now() - t0 };
75
+ }
76
+ const missing = [];
77
+ const present = [];
78
+ for (const p of facets.paths) {
79
+ const abs = p.startsWith("/") || /^[A-Z]:/.test(p) ? p : join(repoRoot, p);
80
+ if (existsSync(abs))
81
+ present.push(p);
82
+ else
83
+ missing.push(p);
84
+ }
85
+ if (missing.length === 0) {
86
+ return { id: "W1-path", verdict: "GROUNDED", detail: `${present.length} path(s) verified on disk.`, evidence: present, ms: Date.now() - t0 };
87
+ }
88
+ return {
89
+ id: "W1-path",
90
+ verdict: "ALERT",
91
+ detail: `${missing.length} of ${facets.paths.length} path(s) do not exist on disk: ${missing.join(", ")}`,
92
+ evidence: missing,
93
+ ms: Date.now() - t0,
94
+ };
95
+ }
96
+ // ─── W2: symbol-exists ────────────────────────────────────────────────
97
+ function listSourceFiles(repoRoot, max = 5000) {
98
+ const out = [];
99
+ const skipDirs = new Set(["node_modules", ".git", "dist", "build", "out", ".next", ".mneme", "coverage"]);
100
+ const walk = (dir) => {
101
+ if (out.length >= max)
102
+ return;
103
+ let entries = [];
104
+ try {
105
+ entries = readdirSync(dir);
106
+ }
107
+ catch {
108
+ return;
109
+ }
110
+ for (const e of entries) {
111
+ if (skipDirs.has(e))
112
+ continue;
113
+ const p = join(dir, e);
114
+ let s;
115
+ try {
116
+ s = statSync(p);
117
+ }
118
+ catch {
119
+ continue;
120
+ }
121
+ if (s.isDirectory())
122
+ walk(p);
123
+ else if (/\.(ts|tsx|js|mjs|cjs|jsx|py|rs|go)$/.test(e))
124
+ out.push(p);
125
+ if (out.length >= max)
126
+ return;
127
+ }
128
+ };
129
+ walk(repoRoot);
130
+ return out;
131
+ }
132
+ function w2SymbolExists(repoRoot, facets) {
133
+ const t0 = Date.now();
134
+ if (!facets.symbols || facets.symbols.length === 0) {
135
+ return { id: "W2-symbol", verdict: "INAPPLICABLE", detail: "Claim names no symbols.", ms: Date.now() - t0 };
136
+ }
137
+ const files = listSourceFiles(repoRoot);
138
+ const missing = [];
139
+ const present = [];
140
+ // Build a single regex of all symbols (escaped) for one-pass scanning.
141
+ const escapedSymbols = facets.symbols.map((s) => s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"));
142
+ const foundSet = new Set();
143
+ for (const f of files) {
144
+ let content = "";
145
+ try {
146
+ content = readFileSync(f, "utf8");
147
+ }
148
+ catch {
149
+ continue;
150
+ }
151
+ for (const sym of escapedSymbols) {
152
+ if (foundSet.has(sym))
153
+ continue;
154
+ const re = new RegExp(`\\b${sym}\\b`);
155
+ if (re.test(content))
156
+ foundSet.add(sym);
157
+ }
158
+ if (foundSet.size === escapedSymbols.length)
159
+ break;
160
+ }
161
+ for (let i = 0; i < facets.symbols.length; i++) {
162
+ if (foundSet.has(escapedSymbols[i]))
163
+ present.push(facets.symbols[i]);
164
+ else
165
+ missing.push(facets.symbols[i]);
166
+ }
167
+ if (missing.length === 0) {
168
+ return { id: "W2-symbol", verdict: "GROUNDED", detail: `${present.length} symbol(s) found in source.`, evidence: present, ms: Date.now() - t0 };
169
+ }
170
+ return {
171
+ id: "W2-symbol",
172
+ verdict: "ALERT",
173
+ detail: `${missing.length} of ${facets.symbols.length} symbol(s) not found in source: ${missing.join(", ")}`,
174
+ evidence: missing,
175
+ ms: Date.now() - t0,
176
+ };
177
+ }
178
+ // ─── W3: type-shape ───────────────────────────────────────────────────
179
+ function w3TypeShape(repoRoot, facets) {
180
+ const t0 = Date.now();
181
+ if (!facets.typeAssertions || facets.typeAssertions.length === 0) {
182
+ return { id: "W3-type", verdict: "INAPPLICABLE", detail: "Claim makes no type assertions.", ms: Date.now() - t0 };
183
+ }
184
+ const files = listSourceFiles(repoRoot, 2000);
185
+ const failed = [];
186
+ const passed = [];
187
+ for (const ta of facets.typeAssertions) {
188
+ let foundDecl = false;
189
+ let returnOk = ta.expectedReturn === undefined;
190
+ for (const f of files) {
191
+ let content = "";
192
+ try {
193
+ content = readFileSync(f, "utf8");
194
+ }
195
+ catch {
196
+ continue;
197
+ }
198
+ // Match `function NAME(...): TYPE` or `NAME(...): TYPE =>` or `NAME(...): TYPE {`
199
+ const declRe = new RegExp(`\\b(?:function\\s+)?${ta.symbol.replace(/[.*+?^${}()|[\]\\]/g, "\\\\$&")}\\s*\\(([^)]*)\\)\\s*:\\s*([\\w<>\\[\\],| \\t]+?)(?:\\s*[{=]|\\s*$)`, "m");
200
+ const m = content.match(declRe);
201
+ if (m) {
202
+ foundDecl = true;
203
+ const actualReturn = (m[2] ?? "").trim();
204
+ if (ta.expectedReturn && !actualReturn.includes(ta.expectedReturn)) {
205
+ // mismatch
206
+ returnOk = false;
207
+ }
208
+ else if (ta.expectedReturn) {
209
+ returnOk = true;
210
+ }
211
+ break;
212
+ }
213
+ }
214
+ if (!foundDecl) {
215
+ failed.push(`${ta.symbol}: declaration not found`);
216
+ }
217
+ else if (!returnOk) {
218
+ failed.push(`${ta.symbol}: return type mismatch (expected ${ta.expectedReturn})`);
219
+ }
220
+ else {
221
+ passed.push(ta.symbol);
222
+ }
223
+ }
224
+ if (failed.length === 0) {
225
+ return { id: "W3-type", verdict: "GROUNDED", detail: `${passed.length} type assertion(s) match source.`, evidence: passed, ms: Date.now() - t0 };
226
+ }
227
+ return {
228
+ id: "W3-type",
229
+ verdict: "ALERT",
230
+ detail: `${failed.length} of ${facets.typeAssertions.length} type assertion(s) failed: ${failed.join("; ")}`,
231
+ evidence: failed,
232
+ ms: Date.now() - t0,
233
+ };
234
+ }
235
+ // ─── W4: git-history consistency ──────────────────────────────────────
236
+ function w4GitHistory(repoRoot, facets) {
237
+ const t0 = Date.now();
238
+ if (!facets.versionRefs || facets.versionRefs.length === 0) {
239
+ return { id: "W4-history", verdict: "INAPPLICABLE", detail: "Claim makes no version/SHA references.", ms: Date.now() - t0 };
240
+ }
241
+ let tags = "";
242
+ let shas = "";
243
+ try {
244
+ tags = execSync(`git -C "${repoRoot}" tag --list`, { encoding: "utf8", stdio: ["ignore", "pipe", "ignore"], timeout: 3000 });
245
+ }
246
+ catch { /* */ }
247
+ try {
248
+ shas = execSync(`git -C "${repoRoot}" log --format=%H --max-count=1000`, { encoding: "utf8", stdio: ["ignore", "pipe", "ignore"], timeout: 3000 });
249
+ }
250
+ catch { /* */ }
251
+ const tagSet = new Set(tags.split("\n").map((s) => s.trim()).filter(Boolean));
252
+ const shaSet = new Set(shas.split("\n").map((s) => s.trim()).filter(Boolean));
253
+ const failed = [];
254
+ const passed = [];
255
+ for (const ref of facets.versionRefs) {
256
+ if (ref.kind === "version" || ref.kind === "tag") {
257
+ const candidates = [ref.value, `v${ref.value}`];
258
+ if (candidates.some((c) => tagSet.has(c)))
259
+ passed.push(`tag:${ref.value}`);
260
+ else
261
+ failed.push(`tag/version "${ref.value}" not found in git tags`);
262
+ }
263
+ else if (ref.kind === "sha") {
264
+ const hit = [...shaSet].some((s) => s.startsWith(ref.value));
265
+ if (hit)
266
+ passed.push(`sha:${ref.value}`);
267
+ else
268
+ failed.push(`sha "${ref.value}" not found in recent 1000 commits`);
269
+ }
270
+ }
271
+ if (failed.length === 0) {
272
+ return { id: "W4-history", verdict: "GROUNDED", detail: `${passed.length} version/SHA ref(s) verified.`, evidence: passed, ms: Date.now() - t0 };
273
+ }
274
+ return {
275
+ id: "W4-history",
276
+ verdict: "ALERT",
277
+ detail: `${failed.length} of ${facets.versionRefs.length} version/SHA ref(s) failed: ${failed.join("; ")}`,
278
+ evidence: failed,
279
+ ms: Date.now() - t0,
280
+ };
281
+ }
282
+ // ─── W5: behavior-cited ───────────────────────────────────────────────
283
+ function w5BehaviorCited(repoRoot, facets) {
284
+ const t0 = Date.now();
285
+ if (!facets.behaviors || facets.behaviors.length === 0) {
286
+ return { id: "W5-behavior", verdict: "INAPPLICABLE", detail: "Claim makes no behavioral assertions.", ms: Date.now() - t0 };
287
+ }
288
+ const skipDirs = new Set(["node_modules", ".git", "dist", "build", ".mneme"]);
289
+ const testFiles = [];
290
+ const walk = (dir) => {
291
+ let entries = [];
292
+ try {
293
+ entries = readdirSync(dir);
294
+ }
295
+ catch {
296
+ return;
297
+ }
298
+ for (const e of entries) {
299
+ if (skipDirs.has(e))
300
+ continue;
301
+ const p = join(dir, e);
302
+ let s;
303
+ try {
304
+ s = statSync(p);
305
+ }
306
+ catch {
307
+ continue;
308
+ }
309
+ if (s.isDirectory())
310
+ walk(p);
311
+ else if (/\.(test|spec)\.(ts|tsx|js|mjs)$/.test(e))
312
+ testFiles.push(p);
313
+ }
314
+ };
315
+ walk(repoRoot);
316
+ const failed = [];
317
+ const passed = [];
318
+ for (const b of facets.behaviors) {
319
+ // Extract the noun phrase after the verb.
320
+ const m = b.match(/\b(?:handles?|implements?|covers?|supports?|tests?|validates?|enforces?|verifies?|caches?|deduplicates?)\b\s+(.+)$/i);
321
+ if (!m)
322
+ continue;
323
+ const phrase = m[1].trim().toLowerCase();
324
+ const tokens = phrase.split(/\s+/).filter((t) => t.length >= 3);
325
+ if (tokens.length === 0)
326
+ continue;
327
+ let hit = false;
328
+ for (const tf of testFiles) {
329
+ let content = "";
330
+ try {
331
+ content = readFileSync(tf, "utf8").toLowerCase();
332
+ }
333
+ catch {
334
+ continue;
335
+ }
336
+ if (tokens.every((t) => content.includes(t))) {
337
+ hit = true;
338
+ break;
339
+ }
340
+ }
341
+ if (hit)
342
+ passed.push(phrase);
343
+ else
344
+ failed.push(phrase);
345
+ }
346
+ if (failed.length === 0) {
347
+ return { id: "W5-behavior", verdict: "GROUNDED", detail: `${passed.length} behavior(s) cited by tests.`, evidence: passed, ms: Date.now() - t0 };
348
+ }
349
+ return {
350
+ id: "W5-behavior",
351
+ verdict: "ALERT",
352
+ detail: `${failed.length} of ${facets.behaviors.length} behavior(s) not cited by any test: ${failed.join("; ")}`,
353
+ evidence: failed,
354
+ ms: Date.now() - t0,
355
+ };
356
+ }
357
+ // ─── Public API ───────────────────────────────────────────────────────
358
+ export function fiveWitness(repoRoot, claimText, knownFacets) {
359
+ const t0 = Date.now();
360
+ const facets = { ...extractFacets(claimText), ...knownFacets };
361
+ const witnesses = [
362
+ w1PathExists(repoRoot, facets),
363
+ w2SymbolExists(repoRoot, facets),
364
+ w3TypeShape(repoRoot, facets),
365
+ w4GitHistory(repoRoot, facets),
366
+ w5BehaviorCited(repoRoot, facets),
367
+ ];
368
+ const alerts = witnesses.filter((w) => w.verdict === "ALERT").length;
369
+ const grounded = witnesses.filter((w) => w.verdict === "GROUNDED").length;
370
+ const applicable = witnesses.filter((w) => w.verdict !== "INAPPLICABLE").length;
371
+ const unanimous = alerts === 0 && grounded > 0;
372
+ const confidence = applicable === 0 ? 0.5 : Math.max(0, (grounded - alerts) / applicable * 0.5 + 0.5);
373
+ return {
374
+ witnesses,
375
+ alerts,
376
+ unanimous,
377
+ confidence,
378
+ ms: Date.now() - t0,
379
+ };
380
+ }
381
+ //# sourceMappingURL=witnesses.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"witnesses.js","sourceRoot":"","sources":["../../src/apoptosis/witnesses.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * v1.65.1 -- EMBEDDER AUTODIAGNOSE.
3
+ *
4
+ * Detects the GAP between the highest tier actually available on the
5
+ * machine and the tier the user's config selected. If the user is
6
+ * sitting on hash tier (★★) while bundled WASM or Ollama is reachable,
7
+ * the autodiagnose flags it AND offers a one-call upgrade.
8
+ *
9
+ * Probe priority (best -> worst):
10
+ * 1. openai -- env OPENAI_API_KEY set
11
+ * 2. ollama -- 127.0.0.1:11434 reachable
12
+ * 3. bundled -- @huggingface/transformers importable + cache writable
13
+ * 4. hash -- always available
14
+ *
15
+ * Pure-read by default; persist=true rewrites .mneme/config.json so
16
+ * the next session picks the upgraded provider.
17
+ *
18
+ * No actual embed calls are made -- probe is cheap (<200ms). The
19
+ * actual model download still happens lazily on first `mneme index`.
20
+ */
21
+ import { type MemoryTierInfo, type MemoryTierName } from "./memory_tier.js";
22
+ export interface EmbedderProbe {
23
+ tier: MemoryTierName;
24
+ available: boolean;
25
+ /** Brief why-not when available=false. */
26
+ reason?: string;
27
+ /** Time spent in probe, ms. */
28
+ ms: number;
29
+ }
30
+ export interface AutodiagnoseReport {
31
+ /** Tier currently selected in .mneme/config.json (or default). */
32
+ currentTier: MemoryTierName;
33
+ /** Highest available tier on this machine. */
34
+ bestAvailable: MemoryTierName;
35
+ /** True iff bestAvailable is strictly above currentTier. */
36
+ hasUpgrade: boolean;
37
+ /** Probes for each candidate tier. */
38
+ probes: EmbedderProbe[];
39
+ /** Plain-English headline. */
40
+ headline: string;
41
+ /** Recommended action when hasUpgrade=true; null otherwise. */
42
+ recommendation: {
43
+ action: "switch-to";
44
+ tier: MemoryTierName;
45
+ rationale: string;
46
+ } | null;
47
+ /** When persist=true and recommendation acted on, the config path written. */
48
+ configPathWritten: string | null;
49
+ /** Total wall-time, ms. */
50
+ ms: number;
51
+ }
52
+ export interface AutodiagnoseOptions {
53
+ /** If true, rewrite .mneme/config.json to switch to bestAvailable. Default false. */
54
+ persist?: boolean;
55
+ /** Skip Ollama probe (e.g. test environments). Default false. */
56
+ skipOllama?: boolean;
57
+ /** Skip Bundled probe (e.g. CI without network). Default false. */
58
+ skipBundled?: boolean;
59
+ }
60
+ export declare function autodiagnose(repoRoot: string, opts?: AutodiagnoseOptions): Promise<AutodiagnoseReport>;
61
+ /** Returns the resolved memory-tier info for the (possibly upgraded)
62
+ * current config. Convenience for pulse/status surfaces. */
63
+ export declare function currentTierInfo(repoRoot: string): MemoryTierInfo;
64
+ //# sourceMappingURL=embedder_autodiagnose.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedder_autodiagnose.d.ts","sourceRoot":"","sources":["../src/embedder_autodiagnose.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAMH,OAAO,EAAkC,KAAK,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAE5G,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,cAAc,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,0CAA0C;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+BAA+B;IAC/B,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,kBAAkB;IACjC,kEAAkE;IAClE,WAAW,EAAE,cAAc,CAAC;IAC5B,8CAA8C;IAC9C,aAAa,EAAE,cAAc,CAAC;IAC9B,4DAA4D;IAC5D,UAAU,EAAE,OAAO,CAAC;IACpB,sCAAsC;IACtC,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,+DAA+D;IAC/D,cAAc,EAAE;QAAE,MAAM,EAAE,WAAW,CAAC;QAAC,IAAI,EAAE,cAAc,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACxF,8EAA8E;IAC9E,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,2BAA2B;IAC3B,EAAE,EAAE,MAAM,CAAC;CACZ;AA+DD,MAAM,WAAW,mBAAmB;IAClC,qFAAqF;IACrF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,iEAAiE;IACjE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,mEAAmE;IACnE,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA6D5G;AAED;6DAC6D;AAC7D,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CAIhE"}
@@ -0,0 +1,153 @@
1
+ /**
2
+ * v1.65.1 -- EMBEDDER AUTODIAGNOSE.
3
+ *
4
+ * Detects the GAP between the highest tier actually available on the
5
+ * machine and the tier the user's config selected. If the user is
6
+ * sitting on hash tier (★★) while bundled WASM or Ollama is reachable,
7
+ * the autodiagnose flags it AND offers a one-call upgrade.
8
+ *
9
+ * Probe priority (best -> worst):
10
+ * 1. openai -- env OPENAI_API_KEY set
11
+ * 2. ollama -- 127.0.0.1:11434 reachable
12
+ * 3. bundled -- @huggingface/transformers importable + cache writable
13
+ * 4. hash -- always available
14
+ *
15
+ * Pure-read by default; persist=true rewrites .mneme/config.json so
16
+ * the next session picks the upgraded provider.
17
+ *
18
+ * No actual embed calls are made -- probe is cheap (<200ms). The
19
+ * actual model download still happens lazily on first `mneme index`.
20
+ */
21
+ import { existsSync, readFileSync, writeFileSync, mkdirSync } from "node:fs";
22
+ import { join } from "node:path";
23
+ import { request } from "node:http";
24
+ import { classifyEmbedderName, tierInfo } from "./memory_tier.js";
25
+ const TIER_RANK = {
26
+ openai: 4, ollama: 3, bundled: 2, hash: 1, unknown: 0,
27
+ };
28
+ function readConfig(repoRoot) {
29
+ const p = join(repoRoot, ".mneme/config.json");
30
+ if (!existsSync(p))
31
+ return {};
32
+ try {
33
+ return JSON.parse(readFileSync(p, "utf8"));
34
+ }
35
+ catch {
36
+ return {};
37
+ }
38
+ }
39
+ function writeConfig(repoRoot, cfg) {
40
+ const dir = join(repoRoot, ".mneme");
41
+ if (!existsSync(dir))
42
+ mkdirSync(dir, { recursive: true });
43
+ const p = join(dir, "config.json");
44
+ writeFileSync(p, JSON.stringify(cfg, null, 2) + "\n", "utf8");
45
+ return p;
46
+ }
47
+ function probeOpenAI() {
48
+ const t0 = Date.now();
49
+ const hasKey = typeof process.env["OPENAI_API_KEY"] === "string" && process.env["OPENAI_API_KEY"].length >= 10;
50
+ return {
51
+ tier: "openai",
52
+ available: hasKey,
53
+ reason: hasKey ? undefined : "OPENAI_API_KEY not set",
54
+ ms: Date.now() - t0,
55
+ };
56
+ }
57
+ function probeOllama(timeoutMs = 500) {
58
+ return new Promise((resolve) => {
59
+ const t0 = Date.now();
60
+ const req = request({ host: "127.0.0.1", port: 11434, path: "/api/tags", method: "GET", timeout: timeoutMs }, (res) => {
61
+ res.resume();
62
+ resolve({ tier: "ollama", available: (res.statusCode ?? 0) < 500, ms: Date.now() - t0 });
63
+ });
64
+ req.on("timeout", () => {
65
+ req.destroy();
66
+ resolve({ tier: "ollama", available: false, reason: "Ollama 127.0.0.1:11434 timeout", ms: Date.now() - t0 });
67
+ });
68
+ req.on("error", (e) => resolve({ tier: "ollama", available: false, reason: `Ollama unreachable: ${e.message}`, ms: Date.now() - t0 }));
69
+ req.end();
70
+ });
71
+ }
72
+ async function probeBundled() {
73
+ const t0 = Date.now();
74
+ try {
75
+ // Just check that the package resolves; do NOT load model (kept cheap).
76
+ // The actual download happens lazily on first embed.
77
+ await import("@huggingface/transformers");
78
+ return { tier: "bundled", available: true, ms: Date.now() - t0 };
79
+ }
80
+ catch (e) {
81
+ return { tier: "bundled", available: false, reason: `@huggingface/transformers import failed: ${e.message}`, ms: Date.now() - t0 };
82
+ }
83
+ }
84
+ function probeHash() {
85
+ return { tier: "hash", available: true, ms: 0 };
86
+ }
87
+ export async function autodiagnose(repoRoot, opts) {
88
+ const t0 = Date.now();
89
+ const cfg = readConfig(repoRoot);
90
+ const currentName = cfg.embeddings?.provider ?? "unknown";
91
+ const currentTier = classifyEmbedderName(currentName);
92
+ const probes = [];
93
+ probes.push(probeOpenAI());
94
+ if (!opts?.skipOllama)
95
+ probes.push(await probeOllama());
96
+ if (!opts?.skipBundled)
97
+ probes.push(await probeBundled());
98
+ probes.push(probeHash());
99
+ // Pick best available.
100
+ let bestAvailable = "hash";
101
+ let bestRank = TIER_RANK.hash;
102
+ for (const p of probes) {
103
+ if (!p.available)
104
+ continue;
105
+ const r = TIER_RANK[p.tier];
106
+ if (r > bestRank) {
107
+ bestRank = r;
108
+ bestAvailable = p.tier;
109
+ }
110
+ }
111
+ const hasUpgrade = TIER_RANK[bestAvailable] > TIER_RANK[currentTier];
112
+ let configPathWritten = null;
113
+ if (opts?.persist && hasUpgrade) {
114
+ const next = { ...cfg, embeddings: { ...(cfg.embeddings ?? {}), provider: bestAvailable } };
115
+ configPathWritten = writeConfig(repoRoot, next);
116
+ }
117
+ const currentBadge = tierInfo(currentTier).display;
118
+ const bestBadge = tierInfo(bestAvailable).display;
119
+ const headline = hasUpgrade
120
+ ? `Upgrade available: currently on ${currentBadge} (★${tierInfo(currentTier).stars}), can upgrade to ${bestBadge} (★${tierInfo(bestAvailable).stars}).`
121
+ : `Already at best available tier: ${currentBadge} (★${tierInfo(currentTier).stars}).`;
122
+ const recommendation = hasUpgrade
123
+ ? {
124
+ action: "switch-to",
125
+ tier: bestAvailable,
126
+ rationale: bestAvailable === "openai"
127
+ ? "OPENAI_API_KEY detected; switch to ★★★★★ tier."
128
+ : bestAvailable === "ollama"
129
+ ? "Ollama reachable locally; free ★★★★ semantic embeddings."
130
+ : bestAvailable === "bundled"
131
+ ? "Bundled WASM available; ★★★ semantic embeddings without external service."
132
+ : "(no upgrade)",
133
+ }
134
+ : null;
135
+ return {
136
+ currentTier,
137
+ bestAvailable,
138
+ hasUpgrade,
139
+ probes,
140
+ headline,
141
+ recommendation,
142
+ configPathWritten,
143
+ ms: Date.now() - t0,
144
+ };
145
+ }
146
+ /** Returns the resolved memory-tier info for the (possibly upgraded)
147
+ * current config. Convenience for pulse/status surfaces. */
148
+ export function currentTierInfo(repoRoot) {
149
+ const cfg = readConfig(repoRoot);
150
+ const name = cfg.embeddings?.provider ?? "unknown";
151
+ return tierInfo(classifyEmbedderName(name));
152
+ }
153
+ //# sourceMappingURL=embedder_autodiagnose.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedder_autodiagnose.js","sourceRoot":"","sources":["../src/embedder_autodiagnose.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * v1.65.1 -- Embedder autodiagnose tests.
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=embedder_autodiagnose.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedder_autodiagnose.test.d.ts","sourceRoot":"","sources":["../src/embedder_autodiagnose.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}