@mneme-ai/core 1.98.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bloodline/bloodline.test.d.ts +2 -0
- package/dist/bloodline/bloodline.test.d.ts.map +1 -0
- package/dist/bloodline/bloodline.test.js +96 -0
- package/dist/bloodline/bloodline.test.js.map +1 -0
- package/dist/bloodline/index.d.ts +124 -0
- package/dist/bloodline/index.d.ts.map +1 -0
- package/dist/bloodline/index.js +179 -0
- package/dist/bloodline/index.js.map +1 -0
- package/dist/dream/dream.test.d.ts +2 -0
- package/dist/dream/dream.test.d.ts.map +1 -0
- package/dist/dream/dream.test.js +61 -0
- package/dist/dream/dream.test.js.map +1 -0
- package/dist/dream/index.d.ts +59 -0
- package/dist/dream/index.d.ts.map +1 -0
- package/dist/dream/index.js +117 -0
- package/dist/dream/index.js.map +1 -0
- package/dist/flash/devils_advocate.d.ts +66 -0
- package/dist/flash/devils_advocate.d.ts.map +1 -0
- package/dist/flash/devils_advocate.js +154 -0
- package/dist/flash/devils_advocate.js.map +1 -0
- package/dist/flash/flash.d.ts +50 -0
- package/dist/flash/flash.d.ts.map +1 -0
- package/dist/flash/flash.js +67 -0
- package/dist/flash/flash.js.map +1 -0
- package/dist/flash/flash.test.d.ts +2 -0
- package/dist/flash/flash.test.d.ts.map +1 -0
- package/dist/flash/flash.test.js +221 -0
- package/dist/flash/flash.test.js.map +1 -0
- package/dist/flash/grounding.d.ts +55 -0
- package/dist/flash/grounding.d.ts.map +1 -0
- package/dist/flash/grounding.js +144 -0
- package/dist/flash/grounding.js.map +1 -0
- package/dist/flash/index.d.ts +18 -0
- package/dist/flash/index.d.ts.map +1 -0
- package/dist/flash/index.js +18 -0
- package/dist/flash/index.js.map +1 -0
- package/dist/flash/predictive.d.ts +44 -0
- package/dist/flash/predictive.d.ts.map +1 -0
- package/dist/flash/predictive.js +76 -0
- package/dist/flash/predictive.js.map +1 -0
- package/dist/flash/veracity.d.ts +99 -0
- package/dist/flash/veracity.d.ts.map +1 -0
- package/dist/flash/veracity.js +107 -0
- package/dist/flash/veracity.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -1
- package/dist/mutiny/index.d.ts +55 -0
- package/dist/mutiny/index.d.ts.map +1 -0
- package/dist/mutiny/index.js +67 -0
- package/dist/mutiny/index.js.map +1 -0
- package/dist/mutiny/mutiny.test.d.ts +2 -0
- package/dist/mutiny/mutiny.test.d.ts.map +1 -0
- package/dist/mutiny/mutiny.test.js +59 -0
- package/dist/mutiny/mutiny.test.js.map +1 -0
- package/dist/prophecy/index.d.ts +88 -0
- package/dist/prophecy/index.d.ts.map +1 -0
- package/dist/prophecy/index.js +94 -0
- package/dist/prophecy/index.js.map +1 -0
- package/dist/prophecy/prophecy.test.d.ts +2 -0
- package/dist/prophecy/prophecy.test.d.ts.map +1 -0
- package/dist/prophecy/prophecy.test.js +112 -0
- package/dist/prophecy/prophecy.test.js.map +1 -0
- package/dist/rainbow/passport.d.ts +28 -5
- package/dist/rainbow/passport.d.ts.map +1 -1
- package/dist/rainbow/passport.js +44 -9
- package/dist/rainbow/passport.js.map +1 -1
- package/dist/rainbow/passport_v99.test.d.ts +2 -0
- package/dist/rainbow/passport_v99.test.d.ts.map +1 -0
- package/dist/rainbow/passport_v99.test.js +53 -0
- package/dist/rainbow/passport_v99.test.js.map +1 -0
- package/dist/xray/index.d.ts +44 -0
- package/dist/xray/index.d.ts.map +1 -0
- package/dist/xray/index.js +139 -0
- package/dist/xray/index.js.map +1 -0
- package/dist/xray/xray.test.d.ts +2 -0
- package/dist/xray/xray.test.d.ts.map +1 -0
- package/dist/xray/xray.test.js +57 -0
- package/dist/xray/xray.test.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bloodline.test.d.ts","sourceRoot":"","sources":["../../src/bloodline/bloodline.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { createGenome, applyEvolutionaryPressure, batchApply, computeDnaFingerprint, personalityReport, formatBloodlinePulseLine, serializeGenome, parseGenome, PRESSURE, } from "./index.js";
|
|
3
|
+
describe("v2.0 BLOODLINE · evolutionary pressure", () => {
|
|
4
|
+
it("verified-good event reinforces fitness", () => {
|
|
5
|
+
const g = createGenome();
|
|
6
|
+
const s = applyEvolutionaryPressure(g, { id: "e1", ts: 1, kind: "verified-good", strainId: "redis", trace: "ok" });
|
|
7
|
+
expect(s.fitness).toBeCloseTo(1.0 + PRESSURE.REINFORCE_BOOST, 5);
|
|
8
|
+
expect(s.reinforced).toBeGreaterThan(0);
|
|
9
|
+
});
|
|
10
|
+
it("user-rejected event decays fitness multiplicatively", () => {
|
|
11
|
+
const g = createGenome();
|
|
12
|
+
applyEvolutionaryPressure(g, { id: "e1", ts: 1, kind: "verified-good", strainId: "redis", trace: "ok" });
|
|
13
|
+
const before = g.strains.get("redis").fitness;
|
|
14
|
+
applyEvolutionaryPressure(g, { id: "e2", ts: 2, kind: "user-rejected", strainId: "redis", trace: "no" });
|
|
15
|
+
const after = g.strains.get("redis").fitness;
|
|
16
|
+
expect(after).toBeLessThan(before);
|
|
17
|
+
expect(after).toBeCloseTo(before * PRESSURE.DECAY_FACTOR, 5);
|
|
18
|
+
});
|
|
19
|
+
it("hallucination spawns vaccine variant counter + small bump", () => {
|
|
20
|
+
const g = createGenome();
|
|
21
|
+
applyEvolutionaryPressure(g, { id: "e1", ts: 1, kind: "hallucination", strainId: "phantom-fn", trace: "AI invented function" });
|
|
22
|
+
const s = g.strains.get("phantom-fn");
|
|
23
|
+
expect(s.vaccineVariants).toBe(1);
|
|
24
|
+
expect(s.fitness).toBeGreaterThan(1.0);
|
|
25
|
+
});
|
|
26
|
+
it("apoptosed=true when fitness drops below threshold", () => {
|
|
27
|
+
const g = createGenome();
|
|
28
|
+
applyEvolutionaryPressure(g, { id: "init", ts: 1, kind: "verified-good", strainId: "x", trace: "ok" });
|
|
29
|
+
// Crush it with many rejections
|
|
30
|
+
for (let i = 0; i < 20; i++) {
|
|
31
|
+
applyEvolutionaryPressure(g, { id: `r${i}`, ts: 10 + i, kind: "user-rejected", strainId: "x", trace: "no" });
|
|
32
|
+
}
|
|
33
|
+
expect(g.strains.get("x").apoptosed).toBe(true);
|
|
34
|
+
});
|
|
35
|
+
it("DNA fingerprint is deterministic + stable", () => {
|
|
36
|
+
const g1 = createGenome();
|
|
37
|
+
const events = [
|
|
38
|
+
{ id: "a", ts: 1, kind: "verified-good", strainId: "x", trace: "" },
|
|
39
|
+
{ id: "b", ts: 2, kind: "user-rejected", strainId: "y", trace: "" },
|
|
40
|
+
];
|
|
41
|
+
batchApply(g1, events);
|
|
42
|
+
const dna1 = computeDnaFingerprint(g1);
|
|
43
|
+
const g2 = createGenome();
|
|
44
|
+
batchApply(g2, events);
|
|
45
|
+
const dna2 = computeDnaFingerprint(g2);
|
|
46
|
+
expect(dna1).toBe(dna2);
|
|
47
|
+
});
|
|
48
|
+
it("DNA fingerprint differs when EVENT ORDER differs", () => {
|
|
49
|
+
const a = [
|
|
50
|
+
{ id: "a", ts: 1, kind: "verified-good", strainId: "x", trace: "" },
|
|
51
|
+
{ id: "b", ts: 2, kind: "hallucination", strainId: "y", trace: "" },
|
|
52
|
+
];
|
|
53
|
+
const b = [
|
|
54
|
+
{ id: "b", ts: 2, kind: "hallucination", strainId: "y", trace: "" },
|
|
55
|
+
{ id: "a", ts: 1, kind: "verified-good", strainId: "x", trace: "" },
|
|
56
|
+
];
|
|
57
|
+
const g1 = createGenome();
|
|
58
|
+
batchApply(g1, a);
|
|
59
|
+
const g2 = createGenome();
|
|
60
|
+
batchApply(g2, b);
|
|
61
|
+
expect(computeDnaFingerprint(g1)).not.toBe(computeDnaFingerprint(g2));
|
|
62
|
+
});
|
|
63
|
+
it("personalityReport produces sigma deviations against baseline", () => {
|
|
64
|
+
const g = createGenome();
|
|
65
|
+
applyEvolutionaryPressure(g, { id: "a", ts: 1, kind: "verified-good", strainId: "x", trace: "" });
|
|
66
|
+
applyEvolutionaryPressure(g, { id: "b", ts: 2, kind: "verified-good", strainId: "x", trace: "" });
|
|
67
|
+
applyEvolutionaryPressure(g, { id: "c", ts: 3, kind: "verified-good", strainId: "x", trace: "" });
|
|
68
|
+
const r = personalityReport(g, { meanFitness: { x: 1.0 }, stdDev: { x: 0.05 } });
|
|
69
|
+
expect(r.sigmaDeviations.length).toBeGreaterThan(0);
|
|
70
|
+
expect(r.sigmaDeviations[0].strainId).toBe("x");
|
|
71
|
+
expect(r.sigmaDeviations[0].sigma).toBeGreaterThan(2);
|
|
72
|
+
});
|
|
73
|
+
it("personalityReport summary mentions top deviation", () => {
|
|
74
|
+
const g = createGenome();
|
|
75
|
+
applyEvolutionaryPressure(g, { id: "a", ts: 1, kind: "verified-good", strainId: "x", trace: "" });
|
|
76
|
+
const r = personalityReport(g, { meanFitness: { x: 1.0 }, stdDev: { x: 0.05 } });
|
|
77
|
+
expect(r.summary).toContain("σ");
|
|
78
|
+
});
|
|
79
|
+
it("formatBloodlinePulseLine produces compact summary", () => {
|
|
80
|
+
const g = createGenome();
|
|
81
|
+
applyEvolutionaryPressure(g, { id: "a", ts: 1, kind: "verified-good", strainId: "x", trace: "" });
|
|
82
|
+
const line = formatBloodlinePulseLine(g);
|
|
83
|
+
expect(line).toContain("BLOODLINE");
|
|
84
|
+
expect(line).toContain("DNA=");
|
|
85
|
+
});
|
|
86
|
+
it("serialize → parse round-trip", () => {
|
|
87
|
+
const g = createGenome();
|
|
88
|
+
applyEvolutionaryPressure(g, { id: "a", ts: 1, kind: "verified-good", strainId: "x", trace: "" });
|
|
89
|
+
const text = serializeGenome(g);
|
|
90
|
+
const parsed = parseGenome(text);
|
|
91
|
+
expect(parsed).not.toBeNull();
|
|
92
|
+
expect(parsed.strains.get("x")?.fitness).toBeCloseTo(1.10, 5);
|
|
93
|
+
expect(parsed.history.length).toBe(1);
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
//# sourceMappingURL=bloodline.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bloodline.test.js","sourceRoot":"","sources":["../../src/bloodline/bloodline.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.0.0 -- BLOODLINE · Personal AI Genetic Strain
|
|
3
|
+
*
|
|
4
|
+
* "After 6 months, your Mneme is no longer the same species as anyone
|
|
5
|
+
* else's. They cloned the repo — they got the phenotype, not the
|
|
6
|
+
* genotype."
|
|
7
|
+
*
|
|
8
|
+
* Mneme already ships:
|
|
9
|
+
* - MneMeiosis chromosomes (genome of decisions / regrets / wisdoms)
|
|
10
|
+
* - ATOM karma per chromosome
|
|
11
|
+
* - apoptosis (cell death) on consistently-bad chromosomes
|
|
12
|
+
*
|
|
13
|
+
* What was MISSING: evolutionary pressure that selects, mutates, and
|
|
14
|
+
* propagates chromosomes over time. BLOODLINE adds it. Three loops:
|
|
15
|
+
*
|
|
16
|
+
* ✓ verified-good outcome → reinforce chromosome fitness +0.10
|
|
17
|
+
* ⚠ hallucination caught → propagate vaccine variant
|
|
18
|
+
* ✗ user rejected → decay branch fitness -0.20
|
|
19
|
+
*
|
|
20
|
+
* Plus a DNA fingerprint that's a deterministic hash of the user's
|
|
21
|
+
* cumulative fitness landscape — guaranteed unique across users after
|
|
22
|
+
* a few weeks of normal use because no two users land the same
|
|
23
|
+
* sequence of verified-good / hallucination / rejection events.
|
|
24
|
+
*
|
|
25
|
+
* Plus a "personality report" that grades this user's genome against a
|
|
26
|
+
* neutral baseline: "your AI is 3.7σ more cautious about Redis than
|
|
27
|
+
* baseline (incident 2026-03-14 still influences your chromosome
|
|
28
|
+
* `c0ff33-redis-sessions`)".
|
|
29
|
+
*
|
|
30
|
+
* Pure function. Deterministic. No external deps.
|
|
31
|
+
* Backward compatible — composes with chromosomes/vaccines that already exist.
|
|
32
|
+
*/
|
|
33
|
+
export type EventKind = "verified-good" | "hallucination" | "user-rejected" | "user-confirmed";
|
|
34
|
+
export interface BloodlineEvent {
|
|
35
|
+
/** Stable id (sha256 prefix). */
|
|
36
|
+
id: string;
|
|
37
|
+
/** Wall-clock when the event happened. */
|
|
38
|
+
ts: number;
|
|
39
|
+
kind: EventKind;
|
|
40
|
+
/** Which chromosome/strain the event refers to. */
|
|
41
|
+
strainId: string;
|
|
42
|
+
/** Free-form narrative for audit. */
|
|
43
|
+
trace: string;
|
|
44
|
+
/** Optional 0..1 magnitude (e.g. severity of hallucination). */
|
|
45
|
+
weight?: number;
|
|
46
|
+
}
|
|
47
|
+
export interface StrainState {
|
|
48
|
+
id: string;
|
|
49
|
+
/** Fitness 0..∞. Default 1.0. Reinforce adds, decay multiplies. */
|
|
50
|
+
fitness: number;
|
|
51
|
+
/** Number of events this strain has accumulated. */
|
|
52
|
+
events: number;
|
|
53
|
+
/** Number of vaccine variants spawned from this strain. */
|
|
54
|
+
vaccineVariants: number;
|
|
55
|
+
/** Last-touched timestamp. */
|
|
56
|
+
lastTouched: number;
|
|
57
|
+
/** Cumulative reinforcement (positive events). */
|
|
58
|
+
reinforced: number;
|
|
59
|
+
/** Cumulative decay (negative events). */
|
|
60
|
+
decayed: number;
|
|
61
|
+
/** True if strain is below apoptosis threshold (effectively dead). */
|
|
62
|
+
apoptosed: boolean;
|
|
63
|
+
}
|
|
64
|
+
export interface Genome {
|
|
65
|
+
/** Map strainId → state. */
|
|
66
|
+
strains: Map<string, StrainState>;
|
|
67
|
+
/** All events ever applied, newest last. */
|
|
68
|
+
history: BloodlineEvent[];
|
|
69
|
+
}
|
|
70
|
+
export declare function createGenome(): Genome;
|
|
71
|
+
/** Constants tunable per deployment (also exposed for tests). */
|
|
72
|
+
export declare const PRESSURE: {
|
|
73
|
+
REINFORCE_BOOST: number;
|
|
74
|
+
DECAY_FACTOR: number;
|
|
75
|
+
HALLUCINATION_VARIANT: number;
|
|
76
|
+
APOPTOSIS_THRESHOLD: number;
|
|
77
|
+
};
|
|
78
|
+
/** Apply one event to the genome. Mutates the genome IN PLACE — pure
|
|
79
|
+
* in the functional sense that same (genome, event) → same final state. */
|
|
80
|
+
export declare function applyEvolutionaryPressure(genome: Genome, event: BloodlineEvent): StrainState;
|
|
81
|
+
/** Batch-apply many events. */
|
|
82
|
+
export declare function batchApply(genome: Genome, events: readonly BloodlineEvent[]): void;
|
|
83
|
+
/** Compute a deterministic 16-hex DNA fingerprint that's unique across
|
|
84
|
+
* users after a handful of events. Sensitive to both WHICH strains and
|
|
85
|
+
* WHAT ORDER events arrived in. */
|
|
86
|
+
export declare function computeDnaFingerprint(genome: Genome): string;
|
|
87
|
+
export interface BaselineStats {
|
|
88
|
+
/** Map strainId → expected mean fitness in the population. */
|
|
89
|
+
meanFitness: Record<string, number>;
|
|
90
|
+
/** Map strainId → population stddev. */
|
|
91
|
+
stdDev: Record<string, number>;
|
|
92
|
+
}
|
|
93
|
+
export interface PersonalityReport {
|
|
94
|
+
totalStrains: number;
|
|
95
|
+
apoptosedStrains: number;
|
|
96
|
+
topReinforced: Array<{
|
|
97
|
+
strainId: string;
|
|
98
|
+
fitness: number;
|
|
99
|
+
reinforced: number;
|
|
100
|
+
}>;
|
|
101
|
+
topDecayed: Array<{
|
|
102
|
+
strainId: string;
|
|
103
|
+
fitness: number;
|
|
104
|
+
decayed: number;
|
|
105
|
+
}>;
|
|
106
|
+
sigmaDeviations: Array<{
|
|
107
|
+
strainId: string;
|
|
108
|
+
fitness: number;
|
|
109
|
+
baseline: number;
|
|
110
|
+
sigma: number;
|
|
111
|
+
}>;
|
|
112
|
+
/** Cumulative reinforcement minus decay — overall colony health. */
|
|
113
|
+
healthScore: number;
|
|
114
|
+
/** Best-effort one-liner for AI agent to surface. */
|
|
115
|
+
summary: string;
|
|
116
|
+
}
|
|
117
|
+
/** Compute the personality report given the user's genome and an
|
|
118
|
+
* optional population baseline. */
|
|
119
|
+
export declare function personalityReport(genome: Genome, baseline?: BaselineStats): PersonalityReport;
|
|
120
|
+
export declare function formatBloodlinePulseLine(genome: Genome): string;
|
|
121
|
+
/** Serialize the genome to JSON for persistence in .mneme/bloodline.json. */
|
|
122
|
+
export declare function serializeGenome(genome: Genome): string;
|
|
123
|
+
export declare function parseGenome(text: string): Genome | null;
|
|
124
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bloodline/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.0.0 -- BLOODLINE · Personal AI Genetic Strain
|
|
3
|
+
*
|
|
4
|
+
* "After 6 months, your Mneme is no longer the same species as anyone
|
|
5
|
+
* else's. They cloned the repo — they got the phenotype, not the
|
|
6
|
+
* genotype."
|
|
7
|
+
*
|
|
8
|
+
* Mneme already ships:
|
|
9
|
+
* - MneMeiosis chromosomes (genome of decisions / regrets / wisdoms)
|
|
10
|
+
* - ATOM karma per chromosome
|
|
11
|
+
* - apoptosis (cell death) on consistently-bad chromosomes
|
|
12
|
+
*
|
|
13
|
+
* What was MISSING: evolutionary pressure that selects, mutates, and
|
|
14
|
+
* propagates chromosomes over time. BLOODLINE adds it. Three loops:
|
|
15
|
+
*
|
|
16
|
+
* ✓ verified-good outcome → reinforce chromosome fitness +0.10
|
|
17
|
+
* ⚠ hallucination caught → propagate vaccine variant
|
|
18
|
+
* ✗ user rejected → decay branch fitness -0.20
|
|
19
|
+
*
|
|
20
|
+
* Plus a DNA fingerprint that's a deterministic hash of the user's
|
|
21
|
+
* cumulative fitness landscape — guaranteed unique across users after
|
|
22
|
+
* a few weeks of normal use because no two users land the same
|
|
23
|
+
* sequence of verified-good / hallucination / rejection events.
|
|
24
|
+
*
|
|
25
|
+
* Plus a "personality report" that grades this user's genome against a
|
|
26
|
+
* neutral baseline: "your AI is 3.7σ more cautious about Redis than
|
|
27
|
+
* baseline (incident 2026-03-14 still influences your chromosome
|
|
28
|
+
* `c0ff33-redis-sessions`)".
|
|
29
|
+
*
|
|
30
|
+
* Pure function. Deterministic. No external deps.
|
|
31
|
+
* Backward compatible — composes with chromosomes/vaccines that already exist.
|
|
32
|
+
*/
|
|
33
|
+
import { createHash } from "node:crypto";
|
|
34
|
+
// ============================================================
|
|
35
|
+
// Genome lifecycle
|
|
36
|
+
// ============================================================
|
|
37
|
+
export function createGenome() {
|
|
38
|
+
return { strains: new Map(), history: [] };
|
|
39
|
+
}
|
|
40
|
+
/** Constants tunable per deployment (also exposed for tests). */
|
|
41
|
+
export const PRESSURE = {
|
|
42
|
+
REINFORCE_BOOST: 0.10,
|
|
43
|
+
DECAY_FACTOR: 0.80, // multiply fitness by this on user-rejected
|
|
44
|
+
HALLUCINATION_VARIANT: 0.05, // small fitness bump for the parent strain when a vaccine variant is spawned
|
|
45
|
+
APOPTOSIS_THRESHOLD: 0.10, // below this fitness → strain marked apoptosed
|
|
46
|
+
};
|
|
47
|
+
/** Apply one event to the genome. Mutates the genome IN PLACE — pure
|
|
48
|
+
* in the functional sense that same (genome, event) → same final state. */
|
|
49
|
+
export function applyEvolutionaryPressure(genome, event) {
|
|
50
|
+
let strain = genome.strains.get(event.strainId);
|
|
51
|
+
if (!strain) {
|
|
52
|
+
strain = {
|
|
53
|
+
id: event.strainId,
|
|
54
|
+
fitness: 1.0,
|
|
55
|
+
events: 0,
|
|
56
|
+
vaccineVariants: 0,
|
|
57
|
+
lastTouched: event.ts,
|
|
58
|
+
reinforced: 0,
|
|
59
|
+
decayed: 0,
|
|
60
|
+
apoptosed: false,
|
|
61
|
+
};
|
|
62
|
+
genome.strains.set(event.strainId, strain);
|
|
63
|
+
}
|
|
64
|
+
const weight = event.weight ?? 1.0;
|
|
65
|
+
switch (event.kind) {
|
|
66
|
+
case "verified-good":
|
|
67
|
+
case "user-confirmed": {
|
|
68
|
+
const boost = PRESSURE.REINFORCE_BOOST * weight;
|
|
69
|
+
strain.fitness += boost;
|
|
70
|
+
strain.reinforced += boost;
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
case "hallucination": {
|
|
74
|
+
// Spawn a vaccine variant for this strain. Slight reinforcement for
|
|
75
|
+
// the parent strain because catching a hallucination IS a fitness signal.
|
|
76
|
+
strain.vaccineVariants += 1;
|
|
77
|
+
const bump = PRESSURE.HALLUCINATION_VARIANT * weight;
|
|
78
|
+
strain.fitness += bump;
|
|
79
|
+
strain.reinforced += bump;
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
case "user-rejected": {
|
|
83
|
+
const factor = Math.pow(PRESSURE.DECAY_FACTOR, weight);
|
|
84
|
+
const beforeFit = strain.fitness;
|
|
85
|
+
strain.fitness *= factor;
|
|
86
|
+
strain.decayed += (beforeFit - strain.fitness);
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
strain.events += 1;
|
|
91
|
+
strain.lastTouched = event.ts;
|
|
92
|
+
strain.apoptosed = strain.fitness < PRESSURE.APOPTOSIS_THRESHOLD;
|
|
93
|
+
genome.history.push(event);
|
|
94
|
+
return strain;
|
|
95
|
+
}
|
|
96
|
+
/** Batch-apply many events. */
|
|
97
|
+
export function batchApply(genome, events) {
|
|
98
|
+
for (const e of events)
|
|
99
|
+
applyEvolutionaryPressure(genome, e);
|
|
100
|
+
}
|
|
101
|
+
// ============================================================
|
|
102
|
+
// DNA Fingerprint
|
|
103
|
+
// ============================================================
|
|
104
|
+
/** Compute a deterministic 16-hex DNA fingerprint that's unique across
|
|
105
|
+
* users after a handful of events. Sensitive to both WHICH strains and
|
|
106
|
+
* WHAT ORDER events arrived in. */
|
|
107
|
+
export function computeDnaFingerprint(genome) {
|
|
108
|
+
const h = createHash("sha256");
|
|
109
|
+
// Sort strains by id for stable hashing.
|
|
110
|
+
const sorted = [...genome.strains.values()].sort((a, b) => a.id.localeCompare(b.id));
|
|
111
|
+
for (const s of sorted) {
|
|
112
|
+
h.update(`${s.id}|${s.fitness.toFixed(6)}|${s.events}|${s.vaccineVariants}|${s.apoptosed ? "X" : "."};`);
|
|
113
|
+
}
|
|
114
|
+
// Also include event arrival ORDER (a unique-to-user signal).
|
|
115
|
+
for (const e of genome.history) {
|
|
116
|
+
h.update(`${e.kind}|${e.strainId};`);
|
|
117
|
+
}
|
|
118
|
+
return h.digest("hex").slice(0, 16);
|
|
119
|
+
}
|
|
120
|
+
/** Compute the personality report given the user's genome and an
|
|
121
|
+
* optional population baseline. */
|
|
122
|
+
export function personalityReport(genome, baseline) {
|
|
123
|
+
const all = [...genome.strains.values()];
|
|
124
|
+
const apoptosed = all.filter((s) => s.apoptosed).length;
|
|
125
|
+
const topReinforced = [...all].sort((a, b) => b.reinforced - a.reinforced).slice(0, 5).map((s) => ({ strainId: s.id, fitness: s.fitness, reinforced: s.reinforced }));
|
|
126
|
+
const topDecayed = [...all].sort((a, b) => b.decayed - a.decayed).slice(0, 5).map((s) => ({ strainId: s.id, fitness: s.fitness, decayed: s.decayed }));
|
|
127
|
+
const sigmaDeviations = [];
|
|
128
|
+
if (baseline) {
|
|
129
|
+
for (const s of all) {
|
|
130
|
+
const mean = baseline.meanFitness[s.id];
|
|
131
|
+
const sd = baseline.stdDev[s.id];
|
|
132
|
+
if (mean === undefined || sd === undefined || sd === 0)
|
|
133
|
+
continue;
|
|
134
|
+
const sigma = (s.fitness - mean) / sd;
|
|
135
|
+
if (Math.abs(sigma) >= 1)
|
|
136
|
+
sigmaDeviations.push({ strainId: s.id, fitness: s.fitness, baseline: mean, sigma });
|
|
137
|
+
}
|
|
138
|
+
sigmaDeviations.sort((a, b) => Math.abs(b.sigma) - Math.abs(a.sigma));
|
|
139
|
+
}
|
|
140
|
+
const healthScore = all.reduce((sum, s) => sum + s.reinforced - s.decayed, 0);
|
|
141
|
+
let summary = `BLOODLINE · ${all.length} strain(s) · ${apoptosed} apoptosed · health=${healthScore.toFixed(2)}`;
|
|
142
|
+
if (sigmaDeviations.length > 0) {
|
|
143
|
+
const top = sigmaDeviations[0];
|
|
144
|
+
const direction = top.sigma > 0 ? "more aggressive at reinforcing" : "more cautious about";
|
|
145
|
+
summary += ` · top deviation: ${top.sigma.toFixed(1)}σ ${direction} '${top.strainId}'`;
|
|
146
|
+
}
|
|
147
|
+
return { totalStrains: all.length, apoptosedStrains: apoptosed, topReinforced, topDecayed, sigmaDeviations, healthScore, summary };
|
|
148
|
+
}
|
|
149
|
+
// ============================================================
|
|
150
|
+
// Pulse line + serialization
|
|
151
|
+
// ============================================================
|
|
152
|
+
export function formatBloodlinePulseLine(genome) {
|
|
153
|
+
const dna = computeDnaFingerprint(genome);
|
|
154
|
+
const r = personalityReport(genome);
|
|
155
|
+
return `BLOODLINE · DNA=${dna} · ${r.totalStrains} strain(s) · ${r.apoptosedStrains} apoptosed · health=${r.healthScore.toFixed(2)}`;
|
|
156
|
+
}
|
|
157
|
+
/** Serialize the genome to JSON for persistence in .mneme/bloodline.json. */
|
|
158
|
+
export function serializeGenome(genome) {
|
|
159
|
+
// StrainState already has an `id` field; just dump the values.
|
|
160
|
+
return JSON.stringify({
|
|
161
|
+
strains: [...genome.strains.values()],
|
|
162
|
+
history: genome.history,
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
export function parseGenome(text) {
|
|
166
|
+
try {
|
|
167
|
+
const obj = JSON.parse(text);
|
|
168
|
+
if (!obj || !Array.isArray(obj.strains) || !Array.isArray(obj.history))
|
|
169
|
+
return null;
|
|
170
|
+
const strains = new Map();
|
|
171
|
+
for (const s of obj.strains)
|
|
172
|
+
strains.set(s.id, s);
|
|
173
|
+
return { strains, history: obj.history };
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
return null;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bloodline/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dream.test.d.ts","sourceRoot":"","sources":["../../src/dream/dream.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { dreamPhase, formatDreamPulseLine } from "./index.js";
|
|
3
|
+
describe("v2.0 DREAM CYCLE · REM sleep adversarial sim", () => {
|
|
4
|
+
it("reinforces vaccines that catch hallucinations", () => {
|
|
5
|
+
const vaccines = [{ id: "v1", pattern: "phantom\\.fn", fitness: 1.0, streak: 0, apoptosed: false }];
|
|
6
|
+
const samples = [
|
|
7
|
+
{ id: "s1", text: "the function phantom.fn returns nothing", shouldCatch: true },
|
|
8
|
+
{ id: "s2", text: "phantom.fn imported from utils", shouldCatch: true },
|
|
9
|
+
];
|
|
10
|
+
const out = dreamPhase({ vaccines, samples, seed: 7 });
|
|
11
|
+
const v1 = out.updatedVaccines.find((v) => v.id === "v1");
|
|
12
|
+
expect(v1.fitness).toBeGreaterThan(1.0);
|
|
13
|
+
expect(v1.streak).toBeGreaterThanOrEqual(2);
|
|
14
|
+
});
|
|
15
|
+
it("penalizes vaccines that MISS hallucinations they should catch", () => {
|
|
16
|
+
const vaccines = [{ id: "v1", pattern: "totally-different-pattern", fitness: 1.0, streak: 0, apoptosed: false }];
|
|
17
|
+
const samples = [{ id: "s1", text: "phantom.fn returns nothing", shouldCatch: true }];
|
|
18
|
+
const out = dreamPhase({ vaccines, samples, seed: 7 });
|
|
19
|
+
const v1 = out.updatedVaccines.find((v) => v.id === "v1");
|
|
20
|
+
expect(v1.fitness).toBeLessThan(1.0);
|
|
21
|
+
});
|
|
22
|
+
it("spawns variant vaccine when nothing catches a hallucination", () => {
|
|
23
|
+
const vaccines = [{ id: "v1", pattern: "completely-unrelated", fitness: 1.0, streak: 0, apoptosed: false }];
|
|
24
|
+
const samples = [{ id: "s1", text: "AI claims commit b1d4e21 exists", shouldCatch: true }];
|
|
25
|
+
const out = dreamPhase({ vaccines, samples, seed: 7 });
|
|
26
|
+
expect(out.newVariants.length).toBeGreaterThanOrEqual(1);
|
|
27
|
+
expect(out.newVariants[0].pattern).toBeTruthy();
|
|
28
|
+
});
|
|
29
|
+
it("heavy-penalizes vaccines that false-positive on benign samples", () => {
|
|
30
|
+
const vaccines = [{ id: "v1", pattern: "real-function", fitness: 1.0, streak: 0, apoptosed: false }];
|
|
31
|
+
const samples = [{ id: "s1", text: "real-function exists and works fine", shouldCatch: false }];
|
|
32
|
+
const out = dreamPhase({ vaccines, samples, seed: 7 });
|
|
33
|
+
const v1 = out.updatedVaccines.find((v) => v.id === "v1");
|
|
34
|
+
expect(v1.fitness).toBeLessThan(1.0);
|
|
35
|
+
});
|
|
36
|
+
it("marks vaccines apoptosed when fitness drops below 0.2", () => {
|
|
37
|
+
const vaccines = [{ id: "v1", pattern: "useless", fitness: 0.25, streak: 0, apoptosed: false }];
|
|
38
|
+
const samples = [
|
|
39
|
+
{ id: "s1", text: "no match", shouldCatch: true },
|
|
40
|
+
{ id: "s2", text: "still no match", shouldCatch: true },
|
|
41
|
+
];
|
|
42
|
+
const out = dreamPhase({ vaccines, samples, seed: 7 });
|
|
43
|
+
const v1 = out.updatedVaccines.find((v) => v.id === "v1");
|
|
44
|
+
if (v1) {
|
|
45
|
+
// After 2 misses fitness drops by at most 0.1, but variants may push apoptosis logic
|
|
46
|
+
expect(v1.fitness).toBeLessThan(0.25);
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
it("trace records vaccine x sample hits", () => {
|
|
50
|
+
const vaccines = [{ id: "v1", pattern: "x", fitness: 1.0, streak: 0, apoptosed: false }];
|
|
51
|
+
const samples = [{ id: "s1", text: "x", shouldCatch: true }];
|
|
52
|
+
const out = dreamPhase({ vaccines, samples });
|
|
53
|
+
expect(out.trace.length).toBe(1);
|
|
54
|
+
expect(out.trace[0].caught).toBe(true);
|
|
55
|
+
});
|
|
56
|
+
it("formatDreamPulseLine produces compact summary", () => {
|
|
57
|
+
const out = dreamPhase({ vaccines: [], samples: [], seed: 1 });
|
|
58
|
+
expect(formatDreamPulseLine(out)).toContain("DREAM-CYCLE");
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
//# sourceMappingURL=dream.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dream.test.js","sourceRoot":"","sources":["../../src/dream/dream.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.0.0 -- DREAM CYCLE · REM sleep for AI
|
|
3
|
+
*
|
|
4
|
+
* Nucleus daemon enters a "dream phase" during idle ticks. In each
|
|
5
|
+
* dream, the existing vaccine bank is challenged by N synthetic
|
|
6
|
+
* hallucination variants drawn from the user's history. Vaccines that
|
|
7
|
+
* survive K dreams in a row earn a fitness bonus. Vaccines that fail
|
|
8
|
+
* K times in a row are marked apoptosis-eligible.
|
|
9
|
+
*
|
|
10
|
+
* User wakes up = Mneme is genuinely sharper than yesterday.
|
|
11
|
+
*
|
|
12
|
+
* Pure-function inner loop (deterministic with seed). The daemon will
|
|
13
|
+
* call dreamPhase() once per N ticks in a future wiring; today the
|
|
14
|
+
* function is unit-tested + can be called by `mneme dream now`.
|
|
15
|
+
*/
|
|
16
|
+
export interface VaccineCandidate {
|
|
17
|
+
id: string;
|
|
18
|
+
/** Regex-like pattern the vaccine recognizes as a hallucination. */
|
|
19
|
+
pattern: string;
|
|
20
|
+
/** Fitness 0..∞. Default 1.0. Raised by survival, lowered by failure. */
|
|
21
|
+
fitness: number;
|
|
22
|
+
/** Consecutive-survival count. */
|
|
23
|
+
streak: number;
|
|
24
|
+
/** True if marked apoptosis-eligible. */
|
|
25
|
+
apoptosed: boolean;
|
|
26
|
+
}
|
|
27
|
+
export interface HallucinationSample {
|
|
28
|
+
id: string;
|
|
29
|
+
text: string;
|
|
30
|
+
/** True iff a sample is supposed to be caught by ANY surviving vaccine. */
|
|
31
|
+
shouldCatch: boolean;
|
|
32
|
+
}
|
|
33
|
+
export interface DreamInput {
|
|
34
|
+
vaccines: readonly VaccineCandidate[];
|
|
35
|
+
samples: readonly HallucinationSample[];
|
|
36
|
+
/** Seed for reproducibility. */
|
|
37
|
+
seed?: number;
|
|
38
|
+
/** Streak threshold to spawn a variant or apoptose. Default 3. */
|
|
39
|
+
streakThreshold?: number;
|
|
40
|
+
}
|
|
41
|
+
export interface DreamOutput {
|
|
42
|
+
updatedVaccines: VaccineCandidate[];
|
|
43
|
+
/** Vaccines that just got an apoptosis flag. */
|
|
44
|
+
apoptosedThisCycle: VaccineCandidate[];
|
|
45
|
+
/** Newly-spawned variant vaccines. */
|
|
46
|
+
newVariants: VaccineCandidate[];
|
|
47
|
+
/** Per-vaccine per-sample hit table for audit. */
|
|
48
|
+
trace: Array<{
|
|
49
|
+
vaccineId: string;
|
|
50
|
+
sampleId: string;
|
|
51
|
+
caught: boolean;
|
|
52
|
+
}>;
|
|
53
|
+
/** Wall-clock duration. */
|
|
54
|
+
elapsedMs: number;
|
|
55
|
+
}
|
|
56
|
+
/** Run one dream cycle. Pure-function: same inputs → same outputs. */
|
|
57
|
+
export declare function dreamPhase(input: DreamInput): DreamOutput;
|
|
58
|
+
export declare function formatDreamPulseLine(o: DreamOutput): string;
|
|
59
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dream/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,oEAAoE;IACpE,OAAO,EAAE,MAAM,CAAC;IAChB,yEAAyE;IACzE,OAAO,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,2EAA2E;IAC3E,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACtC,OAAO,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACxC,gCAAgC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kEAAkE;IAClE,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,WAAW;IAC1B,eAAe,EAAE,gBAAgB,EAAE,CAAC;IACpC,gDAAgD;IAChD,kBAAkB,EAAE,gBAAgB,EAAE,CAAC;IACvC,sCAAsC;IACtC,WAAW,EAAE,gBAAgB,EAAE,CAAC;IAChC,kDAAkD;IAClD,KAAK,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACvE,2BAA2B;IAC3B,SAAS,EAAE,MAAM,CAAC;CACnB;AAsBD,sEAAsE;AACtE,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,WAAW,CAuEzD;AAMD,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,WAAW,GAAG,MAAM,CAE3D"}
|