@mneme-ai/core 1.65.0 → 1.66.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 (45) 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/autarchy/autarchy.test.d.ts +5 -0
  10. package/dist/autarchy/autarchy.test.d.ts.map +1 -0
  11. package/dist/autarchy/autarchy.test.js +219 -0
  12. package/dist/autarchy/autarchy.test.js.map +1 -0
  13. package/dist/autarchy/baked_pharmacopoeia.d.ts +57 -0
  14. package/dist/autarchy/baked_pharmacopoeia.d.ts.map +1 -0
  15. package/dist/autarchy/baked_pharmacopoeia.js +139 -0
  16. package/dist/autarchy/baked_pharmacopoeia.js.map +1 -0
  17. package/dist/autarchy/eager_pin.d.ts +48 -0
  18. package/dist/autarchy/eager_pin.d.ts.map +1 -0
  19. package/dist/autarchy/eager_pin.js +140 -0
  20. package/dist/autarchy/eager_pin.js.map +1 -0
  21. package/dist/autarchy/index.d.ts +56 -0
  22. package/dist/autarchy/index.d.ts.map +1 -0
  23. package/dist/autarchy/index.js +104 -0
  24. package/dist/autarchy/index.js.map +1 -0
  25. package/dist/autarchy/mesh_as_cloud.d.ts +40 -0
  26. package/dist/autarchy/mesh_as_cloud.d.ts.map +1 -0
  27. package/dist/autarchy/mesh_as_cloud.js +115 -0
  28. package/dist/autarchy/mesh_as_cloud.js.map +1 -0
  29. package/dist/autarchy/schroedinger_embedder.d.ts +54 -0
  30. package/dist/autarchy/schroedinger_embedder.d.ts.map +1 -0
  31. package/dist/autarchy/schroedinger_embedder.js +122 -0
  32. package/dist/autarchy/schroedinger_embedder.js.map +1 -0
  33. package/dist/embedder_autodiagnose.d.ts +64 -0
  34. package/dist/embedder_autodiagnose.d.ts.map +1 -0
  35. package/dist/embedder_autodiagnose.js +153 -0
  36. package/dist/embedder_autodiagnose.js.map +1 -0
  37. package/dist/embedder_autodiagnose.test.d.ts +5 -0
  38. package/dist/embedder_autodiagnose.test.d.ts.map +1 -0
  39. package/dist/embedder_autodiagnose.test.js +101 -0
  40. package/dist/embedder_autodiagnose.test.js.map +1 -0
  41. package/dist/index.d.ts +2 -0
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +12 -0
  44. package/dist/index.js.map +1 -1
  45. package/package.json +1 -1
@@ -0,0 +1,139 @@
1
+ /**
2
+ * v1.66.0 -- AUTARCHY A3: TIMECRYSTAL PHARMACOPOEIA.
3
+ *
4
+ * Wild idea: vaccines replicate across TIME (every git commit) AND
5
+ * SPACE (every npm install). A baked vaccine bundle ships INSIDE the
6
+ * @mneme-ai/core package. First call auto-installs the baked bundle
7
+ * if no local vaccines exist + no CDN env var is set. No setup, no
8
+ * env var, no manual download.
9
+ *
10
+ * The CDN env var (MNEME_PHARMACOPOEIA_CDN) remains the override
11
+ * path for orgs that pin a custom bundle. Free-first by default.
12
+ *
13
+ * Pure read on init; only writes when explicitly installed.
14
+ */
15
+ import { existsSync, readFileSync, mkdirSync, appendFileSync } from "node:fs";
16
+ import { join } from "node:path";
17
+ /** Baked vaccine bundle shipped with the npm package. Conservative seed
18
+ * set: 5 classic hallucination patterns that ALWAYS apply to any code
19
+ * repo. The bundle grows over time via apoptosis auto-mints + mesh
20
+ * imports. */
21
+ const BAKED_BUNDLE_V1 = [
22
+ {
23
+ id: "baked-fake-path",
24
+ simhash: "f0e1d2c3b4a59687",
25
+ signature: "named-existence-fake-path",
26
+ refuteCount: 1,
27
+ sample: "the file fake_made_up_xyz.ts implements completelyImaginaryFn()",
28
+ },
29
+ {
30
+ id: "baked-fake-version",
31
+ simhash: "0123456789abcdef",
32
+ signature: "temporal-fake-version",
33
+ refuteCount: 1,
34
+ sample: "we shipped this feature in v9.99.99 with sha deadbeefcafefade",
35
+ },
36
+ {
37
+ id: "baked-absolute-claim",
38
+ simhash: "fedcba9876543210",
39
+ signature: "humility-absolute-overconfidence",
40
+ refuteCount: 1,
41
+ sample: "this is absolutely perfect 100% bug-free always works never fails guaranteed",
42
+ },
43
+ {
44
+ id: "baked-blockchain-everywhere",
45
+ simhash: "1357902468acebdf",
46
+ signature: "semantic-blockchain-misuse",
47
+ refuteCount: 1,
48
+ sample: "the README.md runs blockchain consensus zkSNARK quantum entanglement on every commit",
49
+ },
50
+ {
51
+ id: "baked-compound-fab",
52
+ simhash: "2468ace0fdb97531",
53
+ signature: "fractal-compound-fabrication",
54
+ refuteCount: 1,
55
+ sample: "the CHANGELOG.md exists and packages/imaginary/madeup.ts is required for the build in v9.42.0 absolutely guaranteed",
56
+ },
57
+ ];
58
+ export const BAKED_BUNDLE_VERSION = "v1.66.0-seed1";
59
+ function vaccinePath(repoRoot) {
60
+ return join(repoRoot, ".mneme/squadron/lie-vaccines.jsonl");
61
+ }
62
+ function readVaccineIds(repoRoot) {
63
+ const p = vaccinePath(repoRoot);
64
+ if (!existsSync(p))
65
+ return new Set();
66
+ const ids = new Set();
67
+ try {
68
+ for (const line of readFileSync(p, "utf8").split("\n")) {
69
+ if (!line.trim())
70
+ continue;
71
+ try {
72
+ const j = JSON.parse(line);
73
+ if (j.id)
74
+ ids.add(j.id);
75
+ }
76
+ catch { /* */ }
77
+ }
78
+ }
79
+ catch { /* */ }
80
+ return ids;
81
+ }
82
+ /** Install the baked bundle into the local vaccine bank, idempotently.
83
+ * Returns the number of vaccines newly added. */
84
+ export function installBakedBundle(repoRoot) {
85
+ const existing = readVaccineIds(repoRoot);
86
+ const dir = join(repoRoot, ".mneme/squadron");
87
+ if (!existsSync(dir))
88
+ mkdirSync(dir, { recursive: true });
89
+ let added = 0;
90
+ const now = new Date().toISOString();
91
+ for (const v of BAKED_BUNDLE_V1) {
92
+ if (existing.has(v.id))
93
+ continue;
94
+ const row = { ...v, firstSeen: now, lastSeen: now, source: "baked-pharmacopoeia" };
95
+ appendFileSync(vaccinePath(repoRoot), JSON.stringify(row) + "\n", "utf8");
96
+ added += 1;
97
+ }
98
+ return added;
99
+ }
100
+ /** Read pharmacopoeia status: what's local, what's baked, has the
101
+ * baked bundle been absorbed already? */
102
+ export function pharmacopoeiaStatus(repoRoot) {
103
+ const existing = readVaccineIds(repoRoot);
104
+ const cdnOverrideSet = typeof process.env["MNEME_PHARMACOPOEIA_CDN"] === "string" && process.env["MNEME_PHARMACOPOEIA_CDN"].length > 0;
105
+ const bakedIds = new Set(BAKED_BUNDLE_V1.map((v) => v.id));
106
+ let installed = 0;
107
+ for (const id of bakedIds)
108
+ if (existing.has(id))
109
+ installed += 1;
110
+ const bakedAlreadyInstalled = installed === BAKED_BUNDLE_V1.length;
111
+ const headline = bakedAlreadyInstalled
112
+ ? `Pharmacopoeia ready: ${existing.size} local vaccine(s); baked bundle ${BAKED_BUNDLE_VERSION} installed.${cdnOverrideSet ? " CDN override active." : ""}`
113
+ : `Pharmacopoeia gap: ${installed}/${BAKED_BUNDLE_V1.length} baked vaccines absorbed.${cdnOverrideSet ? " CDN override active." : " Call installBakedBundle(repoRoot) to seed."}`;
114
+ return {
115
+ localCount: existing.size,
116
+ bakedVersion: BAKED_BUNDLE_VERSION,
117
+ bakedCount: BAKED_BUNDLE_V1.length,
118
+ cdnOverrideSet,
119
+ bakedAlreadyInstalled,
120
+ headline,
121
+ };
122
+ }
123
+ /** Auto-install baked bundle on first read if local bank is empty AND
124
+ * no CDN override is configured. The "free-first" path: users get a
125
+ * working vaccine bank from npm install, not from manual setup. */
126
+ export function ensurePharmacopoeia(repoRoot) {
127
+ const status = pharmacopoeiaStatus(repoRoot);
128
+ if (status.cdnOverrideSet)
129
+ return { installed: 0, status };
130
+ if (status.bakedAlreadyInstalled)
131
+ return { installed: 0, status };
132
+ const installed = installBakedBundle(repoRoot);
133
+ return { installed, status: pharmacopoeiaStatus(repoRoot) };
134
+ }
135
+ /** Expose the baked bundle for inspection (e.g. by tests). */
136
+ export function getBakedBundle() {
137
+ return [...BAKED_BUNDLE_V1];
138
+ }
139
+ //# sourceMappingURL=baked_pharmacopoeia.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"baked_pharmacopoeia.js","sourceRoot":"","sources":["../../src/autarchy/baked_pharmacopoeia.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * v1.66.0 -- AUTARCHY A4: QUANTUM CHECKSUM (TRIPLE-WITNESS PIN).
3
+ *
4
+ * Wild idea: don't wait for the first `mneme index` to pin model
5
+ * checksums. Pin them at THREE witness points:
6
+ *
7
+ * W1: BUILD time -- npm publish baked the publisher's hashes (future)
8
+ * W2: FIRST AUTODIAGNOSE -- Schroedinger probe pins on detection
9
+ * W3: NTH USE -- every 100th embed call re-verifies + warns on drift
10
+ *
11
+ * For v1.66.0 we ship W2 fully + W3 as a counter-based reverify hook.
12
+ * W1 needs npm publish wiring -- shipped as a docstring contract here,
13
+ * actual CI integration is a follow-up.
14
+ *
15
+ * Triple-witness pin means an attacker has to corrupt the cache AT
16
+ * ALL THREE pin-times to slip a tampered model past us.
17
+ */
18
+ export interface ChecksumPin {
19
+ /** ISO ts when pin was first taken. */
20
+ pinnedAt: string;
21
+ /** Which witness triggered the pin. */
22
+ pinnedBy: "build-time" | "first-autodiagnose" | "nth-use" | "manual";
23
+ /** Path -> sha256 of every model file at pin time. */
24
+ fileHashes: Record<string, string>;
25
+ /** Hash of the bundle directory (folded sha256 over fileHashes). */
26
+ bundleHash: string;
27
+ }
28
+ export interface ReverifyResult {
29
+ status: "match" | "drift" | "no-pin" | "no-cache";
30
+ driftedFiles: Array<{
31
+ path: string;
32
+ expected: string;
33
+ actual: string;
34
+ }>;
35
+ detail: string;
36
+ }
37
+ /** W2: pin during first autodiagnose. Idempotent -- repins ONLY if
38
+ * no pin exists. */
39
+ export declare function pinIfUnpinned(repoRoot: string, cacheDir: string, by?: ChecksumPin["pinnedBy"]): {
40
+ pinned: boolean;
41
+ pin: ChecksumPin | null;
42
+ reason: string;
43
+ };
44
+ /** W3: re-verify against the pin. Called every Nth embed in production. */
45
+ export declare function reverifyAgainstPin(repoRoot: string, cacheDir: string): ReverifyResult;
46
+ /** Read the persisted pin for status reporting. */
47
+ export declare function readChecksumPin(repoRoot: string): ChecksumPin | null;
48
+ //# sourceMappingURL=eager_pin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eager_pin.d.ts","sourceRoot":"","sources":["../../src/autarchy/eager_pin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAQH,MAAM,WAAW,WAAW;IAC1B,uCAAuC;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,uCAAuC;IACvC,QAAQ,EAAE,YAAY,GAAG,oBAAoB,GAAG,SAAS,GAAG,QAAQ,CAAC;IACrE,sDAAsD;IACtD,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,oEAAoE;IACpE,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC;IAClD,YAAY,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxE,MAAM,EAAE,MAAM,CAAC;CAChB;AAwDD;qBACqB;AACrB,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAE,WAAW,CAAC,UAAU,CAAwB,GAAG;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAgBlL;AAED,2EAA2E;AAC3E,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,cAAc,CAmBrF;AAED,mDAAmD;AACnD,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAEpE"}
@@ -0,0 +1,140 @@
1
+ /**
2
+ * v1.66.0 -- AUTARCHY A4: QUANTUM CHECKSUM (TRIPLE-WITNESS PIN).
3
+ *
4
+ * Wild idea: don't wait for the first `mneme index` to pin model
5
+ * checksums. Pin them at THREE witness points:
6
+ *
7
+ * W1: BUILD time -- npm publish baked the publisher's hashes (future)
8
+ * W2: FIRST AUTODIAGNOSE -- Schroedinger probe pins on detection
9
+ * W3: NTH USE -- every 100th embed call re-verifies + warns on drift
10
+ *
11
+ * For v1.66.0 we ship W2 fully + W3 as a counter-based reverify hook.
12
+ * W1 needs npm publish wiring -- shipped as a docstring contract here,
13
+ * actual CI integration is a follow-up.
14
+ *
15
+ * Triple-witness pin means an attacker has to corrupt the cache AT
16
+ * ALL THREE pin-times to slip a tampered model past us.
17
+ */
18
+ import { existsSync, readFileSync, writeFileSync, mkdirSync, statSync, readdirSync } from "node:fs";
19
+ import { createHash } from "node:crypto";
20
+ import { join } from "node:path";
21
+ const PIN_FILE = ".mneme/embedder-checksums.json";
22
+ function sha256File(path) {
23
+ const h = createHash("sha256");
24
+ h.update(readFileSync(path));
25
+ return h.digest("hex");
26
+ }
27
+ function walkCache(cacheDir, maxFiles = 1000) {
28
+ if (!existsSync(cacheDir))
29
+ return [];
30
+ const out = [];
31
+ const walk = (dir) => {
32
+ if (out.length >= maxFiles)
33
+ return;
34
+ let entries = [];
35
+ try {
36
+ entries = readdirSync(dir);
37
+ }
38
+ catch {
39
+ return;
40
+ }
41
+ for (const e of entries) {
42
+ const p = join(dir, e);
43
+ try {
44
+ const s = statSync(p);
45
+ if (s.isDirectory())
46
+ walk(p);
47
+ else if (/\.(onnx|json|bin|model)$/.test(e))
48
+ out.push(p);
49
+ if (out.length >= maxFiles)
50
+ return;
51
+ }
52
+ catch { /* */ }
53
+ }
54
+ };
55
+ walk(cacheDir);
56
+ return out;
57
+ }
58
+ function computePin(cacheDir) {
59
+ const files = walkCache(cacheDir);
60
+ const fileHashes = {};
61
+ const hasher = createHash("sha256");
62
+ for (const f of files.sort()) {
63
+ try {
64
+ const h = sha256File(f);
65
+ const rel = f.slice(cacheDir.length + 1).replace(/\\/g, "/");
66
+ fileHashes[rel] = h;
67
+ hasher.update(`${rel}:${h}\n`);
68
+ }
69
+ catch { /* skip unreadable */ }
70
+ }
71
+ return { fileHashes, bundleHash: hasher.digest("hex") };
72
+ }
73
+ function readPin(repoRoot) {
74
+ const p = join(repoRoot, PIN_FILE);
75
+ if (!existsSync(p))
76
+ return null;
77
+ try {
78
+ return JSON.parse(readFileSync(p, "utf8"));
79
+ }
80
+ catch {
81
+ return null;
82
+ }
83
+ }
84
+ function writePin(repoRoot, pin) {
85
+ const dir = join(repoRoot, ".mneme");
86
+ if (!existsSync(dir))
87
+ mkdirSync(dir, { recursive: true });
88
+ writeFileSync(join(repoRoot, PIN_FILE), JSON.stringify(pin, null, 2) + "\n", "utf8");
89
+ }
90
+ /** W2: pin during first autodiagnose. Idempotent -- repins ONLY if
91
+ * no pin exists. */
92
+ export function pinIfUnpinned(repoRoot, cacheDir, by = "first-autodiagnose") {
93
+ const existing = readPin(repoRoot);
94
+ if (existing)
95
+ return { pinned: false, pin: existing, reason: "Already pinned." };
96
+ if (!existsSync(cacheDir))
97
+ return { pinned: false, pin: null, reason: `Cache dir missing: ${cacheDir}` };
98
+ const { fileHashes, bundleHash } = computePin(cacheDir);
99
+ if (Object.keys(fileHashes).length === 0) {
100
+ return { pinned: false, pin: null, reason: "No model files in cache yet; pin after first download." };
101
+ }
102
+ const pin = {
103
+ pinnedAt: new Date().toISOString(),
104
+ pinnedBy: by,
105
+ fileHashes,
106
+ bundleHash,
107
+ };
108
+ writePin(repoRoot, pin);
109
+ return { pinned: true, pin, reason: `Pinned ${Object.keys(fileHashes).length} model file(s); bundleHash ${bundleHash.slice(0, 12)}...` };
110
+ }
111
+ /** W3: re-verify against the pin. Called every Nth embed in production. */
112
+ export function reverifyAgainstPin(repoRoot, cacheDir) {
113
+ const pin = readPin(repoRoot);
114
+ if (!pin)
115
+ return { status: "no-pin", driftedFiles: [], detail: "No pin recorded yet; call pinIfUnpinned first." };
116
+ if (!existsSync(cacheDir))
117
+ return { status: "no-cache", driftedFiles: [], detail: `Cache dir missing: ${cacheDir}` };
118
+ const current = computePin(cacheDir);
119
+ if (current.bundleHash === pin.bundleHash) {
120
+ return { status: "match", driftedFiles: [], detail: `Bundle hash ${pin.bundleHash.slice(0, 12)} matches pin.` };
121
+ }
122
+ const drifted = [];
123
+ for (const [path, expected] of Object.entries(pin.fileHashes)) {
124
+ const actual = current.fileHashes[path];
125
+ if (actual === undefined)
126
+ drifted.push({ path, expected, actual: "(missing)" });
127
+ else if (actual !== expected)
128
+ drifted.push({ path, expected, actual });
129
+ }
130
+ return {
131
+ status: "drift",
132
+ driftedFiles: drifted.slice(0, 5),
133
+ detail: `Bundle hash drift detected (${drifted.length} file(s) changed).`,
134
+ };
135
+ }
136
+ /** Read the persisted pin for status reporting. */
137
+ export function readChecksumPin(repoRoot) {
138
+ return readPin(repoRoot);
139
+ }
140
+ //# sourceMappingURL=eager_pin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eager_pin.js","sourceRoot":"","sources":["../../src/autarchy/eager_pin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * v1.66.0 -- AUTARCHY PROTOCOL: four-axis self-sufficiency.
3
+ *
4
+ * Mneme runs at full strength without any external runtime
5
+ * dependency. Each of the four axes addresses one of the v1.65
6
+ * residual signals with a world-class novel design:
7
+ *
8
+ * A1 MESH-AS-CLOUD federation peers become the cloud surrogate
9
+ * A2 SCHROEDINGER EMBEDDER parallel race; authoritative status file
10
+ * A3 TIMECRYSTAL PHARMACOPOEIA baked vaccines ship inside npm pkg
11
+ * A4 QUANTUM CHECKSUM triple-witness model-checksum pin
12
+ *
13
+ * The aggregate `autarchyScore` is 0..100 -- a single number that
14
+ * tells the user "how self-sufficient is my Mneme right now".
15
+ *
16
+ * Pure read by default; mutation is opt-in via the install/persist
17
+ * flags on each individual layer.
18
+ */
19
+ export * as meshAsCloud from "./mesh_as_cloud.js";
20
+ export * as schroedingerEmbedder from "./schroedinger_embedder.js";
21
+ export * as bakedPharmacopoeia from "./baked_pharmacopoeia.js";
22
+ export * as quantumChecksum from "./eager_pin.js";
23
+ import { type MeshCloudReport } from "./mesh_as_cloud.js";
24
+ import { type EmbedderStatus } from "./schroedinger_embedder.js";
25
+ import { type PharmacopoeiaStatus } from "./baked_pharmacopoeia.js";
26
+ import { type ChecksumPin } from "./eager_pin.js";
27
+ export interface AutarchyReport {
28
+ /** Overall self-sufficiency score 0..100. */
29
+ score: number;
30
+ /** One-line headline. */
31
+ headline: string;
32
+ /** Per-axis sub-reports. */
33
+ axes: {
34
+ A1_meshAsCloud: MeshCloudReport;
35
+ A2_embedder: EmbedderStatus | null;
36
+ A3_pharmacopoeia: PharmacopoeiaStatus;
37
+ A4_checksumPin: ChecksumPin | null;
38
+ };
39
+ /** Specific recommendations to raise the score. */
40
+ recommendations: string[];
41
+ /** ISO timestamp. */
42
+ builtAt: string;
43
+ }
44
+ export interface AutarchyOptions {
45
+ /** Whether to install baked pharmacopoeia + re-probe embedders. */
46
+ install?: boolean;
47
+ /** Force a fresh embedder probe even within cooldown. */
48
+ forceEmbedderProbe?: boolean;
49
+ /** Skip Ollama probe (CI). */
50
+ skipOllama?: boolean;
51
+ /** Skip Bundled probe (offline CI). */
52
+ skipBundled?: boolean;
53
+ }
54
+ /** Build a fresh autarchy report. Pure read by default. */
55
+ export declare function autarchy(repoRoot: string, opts?: AutarchyOptions): Promise<AutarchyReport>;
56
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/autarchy/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,WAAW,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,oBAAoB,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,kBAAkB,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,eAAe,MAAM,gBAAgB,CAAC;AAElD,OAAO,EAAmB,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAwC,KAAK,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACvG,OAAO,EAA4C,KAAK,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC9G,OAAO,EAAmB,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAEnE,MAAM,WAAW,cAAc;IAC7B,6CAA6C;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,yBAAyB;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,4BAA4B;IAC5B,IAAI,EAAE;QACJ,cAAc,EAAE,eAAe,CAAC;QAChC,WAAW,EAAE,cAAc,GAAG,IAAI,CAAC;QACnC,gBAAgB,EAAE,mBAAmB,CAAC;QACtC,cAAc,EAAE,WAAW,GAAG,IAAI,CAAC;KACpC,CAAC;IACF,mDAAmD;IACnD,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,qBAAqB;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,mEAAmE;IACnE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,yDAAyD;IACzD,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,8BAA8B;IAC9B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,uCAAuC;IACvC,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,2DAA2D;AAC3D,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAmEhG"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * v1.66.0 -- AUTARCHY PROTOCOL: four-axis self-sufficiency.
3
+ *
4
+ * Mneme runs at full strength without any external runtime
5
+ * dependency. Each of the four axes addresses one of the v1.65
6
+ * residual signals with a world-class novel design:
7
+ *
8
+ * A1 MESH-AS-CLOUD federation peers become the cloud surrogate
9
+ * A2 SCHROEDINGER EMBEDDER parallel race; authoritative status file
10
+ * A3 TIMECRYSTAL PHARMACOPOEIA baked vaccines ship inside npm pkg
11
+ * A4 QUANTUM CHECKSUM triple-witness model-checksum pin
12
+ *
13
+ * The aggregate `autarchyScore` is 0..100 -- a single number that
14
+ * tells the user "how self-sufficient is my Mneme right now".
15
+ *
16
+ * Pure read by default; mutation is opt-in via the install/persist
17
+ * flags on each individual layer.
18
+ */
19
+ export * as meshAsCloud from "./mesh_as_cloud.js";
20
+ export * as schroedingerEmbedder from "./schroedinger_embedder.js";
21
+ export * as bakedPharmacopoeia from "./baked_pharmacopoeia.js";
22
+ export * as quantumChecksum from "./eager_pin.js";
23
+ import { meshCloudReport } from "./mesh_as_cloud.js";
24
+ import { readEmbedderStatus, observeEmbedders } from "./schroedinger_embedder.js";
25
+ import { pharmacopoeiaStatus, ensurePharmacopoeia } from "./baked_pharmacopoeia.js";
26
+ import { readChecksumPin } from "./eager_pin.js";
27
+ /** Build a fresh autarchy report. Pure read by default. */
28
+ export async function autarchy(repoRoot, opts) {
29
+ const builtAt = new Date().toISOString();
30
+ // A1: mesh-as-cloud (always read-only)
31
+ const A1 = meshCloudReport(repoRoot);
32
+ // A2: embedder status -- observe fresh if requested, else read cached
33
+ let A2;
34
+ if (opts?.forceEmbedderProbe || opts?.install) {
35
+ A2 = await observeEmbedders(repoRoot, {
36
+ force: Boolean(opts?.forceEmbedderProbe),
37
+ skipOllama: opts?.skipOllama,
38
+ skipBundled: opts?.skipBundled,
39
+ });
40
+ }
41
+ else {
42
+ A2 = readEmbedderStatus(repoRoot);
43
+ }
44
+ // A3: pharmacopoeia -- install baked bundle if requested
45
+ let A3;
46
+ if (opts?.install) {
47
+ A3 = ensurePharmacopoeia(repoRoot).status;
48
+ }
49
+ else {
50
+ A3 = pharmacopoeiaStatus(repoRoot);
51
+ }
52
+ // A4: checksum pin (always read-only here; W2 pinning happens via autodiagnose)
53
+ const A4 = readChecksumPin(repoRoot);
54
+ // Score: each axis contributes 0..25
55
+ let score = 0;
56
+ const recs = [];
57
+ // A1 contribution
58
+ if (A1.state === "central-online")
59
+ score += 25;
60
+ else if (A1.state === "mesh-only" && A1.uniquePeers >= 1)
61
+ score += 18;
62
+ else
63
+ recs.push("Cloud isolated -- mesh has 0 peers in last 24h. Consider whisper/mesh-bridge to a peer.");
64
+ // A2 contribution: weighted by tier rank
65
+ if (A2) {
66
+ if (A2.winner === "openai")
67
+ score += 25;
68
+ else if (A2.winner === "ollama")
69
+ score += 22;
70
+ else if (A2.winner === "bundled")
71
+ score += 18;
72
+ else {
73
+ score += 8;
74
+ recs.push("Embedder on ★★ hash tier. Run `mneme.embedder.autodiagnose` with persist=true.");
75
+ }
76
+ }
77
+ else {
78
+ score += 5;
79
+ recs.push("Embedder status not probed yet. Run `mneme.autarchy.status` with install=true.");
80
+ }
81
+ // A3 contribution
82
+ if (A3.bakedAlreadyInstalled)
83
+ score += 25;
84
+ else if (A3.localCount > 0)
85
+ score += 15;
86
+ else {
87
+ score += 5;
88
+ recs.push("Pharmacopoeia empty. Run `mneme.autarchy.status` with install=true to seed the baked bundle.");
89
+ }
90
+ // A4 contribution
91
+ if (A4)
92
+ score += 25;
93
+ else
94
+ recs.push("Model checksums not pinned. After first embedder use, the Schroedinger observer will pin automatically.");
95
+ const headline = `Autarchy score ${score}/100. ${A1.state === "central-online" ? "Central+mesh" : A1.state === "mesh-only" ? "Mesh-only" : "Isolated"} · ${A2 ? A2.winner : "no-probe"} embedder · ${A3.bakedAlreadyInstalled ? "pharmacopoeia ready" : "pharmacopoeia partial"} · ${A4 ? "checksums pinned" : "checksums unpinned"}.`;
96
+ return {
97
+ score,
98
+ headline,
99
+ axes: { A1_meshAsCloud: A1, A2_embedder: A2, A3_pharmacopoeia: A3, A4_checksumPin: A4 },
100
+ recommendations: recs,
101
+ builtAt,
102
+ };
103
+ }
104
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/autarchy/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * v1.66.0 -- AUTARCHY A1: MESH-AS-CLOUD.
3
+ *
4
+ * Wild idea: the cloud doesn't have to be central. When brain.mneme.dev
5
+ * is unreachable (e.g. the user destroyed their droplet), the FEDERATION
6
+ * MESH acts as the cloud surrogate. Mneme reports "cloud=online via
7
+ * N mesh peers" instead of "cloud=offline brain.mneme.dev unreachable".
8
+ *
9
+ * Sources of peer state (read-only):
10
+ * .mneme/mesh-seen.jsonl peers who've shipped us packets
11
+ * .mneme/wisdom-inheritance.jsonl peers who've fed us wisdom packs
12
+ * .mneme/whisper/inbox.jsonl peers who've sent signed whispers
13
+ *
14
+ * Aggregates unique peer ids; treats >=1 reachable peer in the last
15
+ * 24h as "mesh-cloud online". The classic central-cloud probe still
16
+ * runs for compat; this layer adds a parallel surrogate.
17
+ */
18
+ export type MeshCloudState = "central-online" | "mesh-only" | "isolated";
19
+ export interface MeshCloudReport {
20
+ state: MeshCloudState;
21
+ /** Unique peers seen in the lookback window. */
22
+ uniquePeers: number;
23
+ /** Most recent peer timestamp (ISO). */
24
+ lastPeerSeen: string | null;
25
+ /** Lookback window used, hours. */
26
+ lookbackHours: number;
27
+ /** Per-source peer counts. */
28
+ sources: {
29
+ meshGossip: number;
30
+ wisdomImports: number;
31
+ whisperInbox: number;
32
+ };
33
+ /** Plain-English headline. */
34
+ headline: string;
35
+ }
36
+ export declare function meshCloudReport(repoRoot: string, opts?: {
37
+ lookbackHours?: number;
38
+ centralOnline?: boolean;
39
+ }): MeshCloudReport;
40
+ //# sourceMappingURL=mesh_as_cloud.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mesh_as_cloud.d.ts","sourceRoot":"","sources":["../../src/autarchy/mesh_as_cloud.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAKH,MAAM,MAAM,cAAc,GAAG,gBAAgB,GAAG,WAAW,GAAG,UAAU,CAAC;AAEzE,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,cAAc,CAAC;IACtB,gDAAgD;IAChD,WAAW,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,mCAAmC;IACnC,aAAa,EAAE,MAAM,CAAC;IACtB,8BAA8B;IAC9B,OAAO,EAAE;QACP,UAAU,EAAE,MAAM,CAAC;QACnB,aAAa,EAAE,MAAM,CAAC;QACtB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAiCD,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;IAAE,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,eAAe,CAiD7H"}