@mneme-ai/core 2.19.13 → 2.19.14
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/chimera_embedder/chimera_embedder.test.d.ts +2 -0
- package/dist/chimera_embedder/chimera_embedder.test.d.ts.map +1 -0
- package/dist/chimera_embedder/chimera_embedder.test.js +158 -0
- package/dist/chimera_embedder/chimera_embedder.test.js.map +1 -0
- package/dist/chimera_embedder/index.d.ts +92 -0
- package/dist/chimera_embedder/index.d.ts.map +1 -0
- package/dist/chimera_embedder/index.js +157 -0
- package/dist/chimera_embedder/index.js.map +1 -0
- package/dist/cli_dreams/cli_dreams.test.d.ts +2 -0
- package/dist/cli_dreams/cli_dreams.test.d.ts.map +1 -0
- package/dist/cli_dreams/cli_dreams.test.js +161 -0
- package/dist/cli_dreams/cli_dreams.test.js.map +1 -0
- package/dist/cli_dreams/index.d.ts +124 -0
- package/dist/cli_dreams/index.d.ts.map +1 -0
- package/dist/cli_dreams/index.js +205 -0
- package/dist/cli_dreams/index.js.map +1 -0
- package/dist/consequence_ledger/consequence_ledger.test.d.ts +2 -0
- package/dist/consequence_ledger/consequence_ledger.test.d.ts.map +1 -0
- package/dist/consequence_ledger/consequence_ledger.test.js +140 -0
- package/dist/consequence_ledger/consequence_ledger.test.js.map +1 -0
- package/dist/consequence_ledger/index.d.ts +114 -0
- package/dist/consequence_ledger/index.d.ts.map +1 -0
- package/dist/consequence_ledger/index.js +234 -0
- package/dist/consequence_ledger/index.js.map +1 -0
- package/dist/cosmic/aurelian_v1914.test.d.ts +2 -0
- package/dist/cosmic/aurelian_v1914.test.d.ts.map +1 -0
- package/dist/cosmic/aurelian_v1914.test.js +59 -0
- package/dist/cosmic/aurelian_v1914.test.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/whats_new.d.ts.map +1 -1
- package/dist/whats_new.js +8 -0
- package/dist/whats_new.js.map +1 -1
- package/dist/wrapper_genesis/index.d.ts.map +1 -1
- package/dist/wrapper_genesis/index.js +14 -0
- package/dist/wrapper_genesis/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chimera_embedder.test.d.ts","sourceRoot":"","sources":["../../src/chimera_embedder/chimera_embedder.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { createChimera, classifyDomain, chimeraEmbed, disagreementCheck, listChimeraDomains, formatChimeraLine, DOMAINS, } from "./index.js";
|
|
3
|
+
const TS_SAMPLE = `import { foo } from "./bar";
|
|
4
|
+
export interface UserConfig {
|
|
5
|
+
name: string;
|
|
6
|
+
age: number;
|
|
7
|
+
}
|
|
8
|
+
const greet = (u: UserConfig) => \`Hello \${u.name}\`;`;
|
|
9
|
+
const PY_SAMPLE = `import math
|
|
10
|
+
class Animal:
|
|
11
|
+
def __init__(self, name):
|
|
12
|
+
self.name = name
|
|
13
|
+
def speak(self):
|
|
14
|
+
return f"{self.name} says hi"
|
|
15
|
+
|
|
16
|
+
def main():
|
|
17
|
+
a = Animal("dog")
|
|
18
|
+
print(a.speak())
|
|
19
|
+
`;
|
|
20
|
+
const GO_SAMPLE = `package main
|
|
21
|
+
import "fmt"
|
|
22
|
+
type Greeter interface {
|
|
23
|
+
Greet() string
|
|
24
|
+
}
|
|
25
|
+
type User struct {
|
|
26
|
+
Name string
|
|
27
|
+
Age int
|
|
28
|
+
}
|
|
29
|
+
func (u User) Greet() string { return "Hi " + u.Name }
|
|
30
|
+
ch := make(chan int)`;
|
|
31
|
+
const MD_SAMPLE = `# Mneme README
|
|
32
|
+
|
|
33
|
+
Welcome to **Mneme** — the memory layer for AI agents.
|
|
34
|
+
|
|
35
|
+
## Features
|
|
36
|
+
|
|
37
|
+
- one
|
|
38
|
+
- two
|
|
39
|
+
|
|
40
|
+
\`\`\`ts
|
|
41
|
+
const x = 1;
|
|
42
|
+
\`\`\`
|
|
43
|
+
|
|
44
|
+
See [docs](https://mneme.ai) for more.`;
|
|
45
|
+
const PROSE_SAMPLE = `Yesterday I went to the park. The weather was lovely and I sat by the fountain reading a book about the history of bicycles.`;
|
|
46
|
+
describe("v2.19.14 CHIMERA EMBEDDER · createChimera", () => {
|
|
47
|
+
it("creates 5 SNN instances, one per domain, with distinct seeds", () => {
|
|
48
|
+
const c = createChimera();
|
|
49
|
+
expect(Object.keys(c.embedders).sort()).toEqual([...DOMAINS].sort());
|
|
50
|
+
const seeds = DOMAINS.map((d) => c.embedders[d].config.seed);
|
|
51
|
+
expect(new Set(seeds).size).toBe(5); // all distinct
|
|
52
|
+
});
|
|
53
|
+
it("listChimeraDomains reports per-domain config", () => {
|
|
54
|
+
const c = createChimera();
|
|
55
|
+
const list = listChimeraDomains(c);
|
|
56
|
+
expect(list).toHaveLength(5);
|
|
57
|
+
expect(list.every((x) => x.dimension === 2048)).toBe(true);
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
describe("v2.19.14 CHIMERA EMBEDDER · classifyDomain", () => {
|
|
61
|
+
it("classifies TypeScript correctly", () => {
|
|
62
|
+
const c = classifyDomain({ text: TS_SAMPLE });
|
|
63
|
+
expect(c.domain).toBe("typescript");
|
|
64
|
+
expect(c.scoreboard.typescript).toBeGreaterThan(c.scoreboard.python);
|
|
65
|
+
expect(c.scoreboard.typescript).toBeGreaterThan(c.scoreboard.go);
|
|
66
|
+
});
|
|
67
|
+
it("classifies Python correctly", () => {
|
|
68
|
+
const c = classifyDomain({ text: PY_SAMPLE });
|
|
69
|
+
expect(c.domain).toBe("python");
|
|
70
|
+
expect(c.scoreboard.python).toBeGreaterThan(c.scoreboard.typescript);
|
|
71
|
+
});
|
|
72
|
+
it("classifies Go correctly", () => {
|
|
73
|
+
const c = classifyDomain({ text: GO_SAMPLE });
|
|
74
|
+
expect(c.domain).toBe("go");
|
|
75
|
+
expect(c.scoreboard.go).toBeGreaterThan(c.scoreboard.python);
|
|
76
|
+
});
|
|
77
|
+
it("classifies Markdown correctly", () => {
|
|
78
|
+
const c = classifyDomain({ text: MD_SAMPLE });
|
|
79
|
+
expect(c.domain).toBe("markdown");
|
|
80
|
+
expect(c.scoreboard.markdown).toBeGreaterThan(c.scoreboard.typescript);
|
|
81
|
+
});
|
|
82
|
+
it("falls back to prose for neutral text with no markers", () => {
|
|
83
|
+
const c = classifyDomain({ text: PROSE_SAMPLE });
|
|
84
|
+
expect(c.domain).toBe("prose");
|
|
85
|
+
});
|
|
86
|
+
it("filenameHint adds +5 to that domain — overrides weak signal", () => {
|
|
87
|
+
const c = classifyDomain({ text: PROSE_SAMPLE, filenameHint: "notes.py" });
|
|
88
|
+
expect(c.domain).toBe("python");
|
|
89
|
+
expect(c.scoreboard.python).toBeGreaterThanOrEqual(5);
|
|
90
|
+
});
|
|
91
|
+
it("returns a [0,1] confidence proportional to top-score share", () => {
|
|
92
|
+
const c = classifyDomain({ text: TS_SAMPLE });
|
|
93
|
+
expect(c.confidence).toBeGreaterThan(0);
|
|
94
|
+
expect(c.confidence).toBeLessThanOrEqual(1);
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
describe("v2.19.14 CHIMERA EMBEDDER · chimeraEmbed routing", () => {
|
|
98
|
+
it("routes TS sample to the typescript SNN", () => {
|
|
99
|
+
const c = createChimera();
|
|
100
|
+
const r = chimeraEmbed({ chimera: c, text: TS_SAMPLE });
|
|
101
|
+
expect(r.routedDomain).toBe("typescript");
|
|
102
|
+
expect(r.vector.length).toBe(2048);
|
|
103
|
+
});
|
|
104
|
+
it("forceDomain overrides classifier (caller knows better)", () => {
|
|
105
|
+
const c = createChimera();
|
|
106
|
+
const r = chimeraEmbed({ chimera: c, text: TS_SAMPLE, forceDomain: "go" });
|
|
107
|
+
expect(r.routedDomain).toBe("go");
|
|
108
|
+
// classification still reflects the original signal
|
|
109
|
+
expect(r.classification.domain).toBe("typescript");
|
|
110
|
+
});
|
|
111
|
+
it("same text routed twice → same vector (determinism within a domain)", () => {
|
|
112
|
+
const c = createChimera();
|
|
113
|
+
const a = chimeraEmbed({ chimera: c, text: PY_SAMPLE }).vector;
|
|
114
|
+
const b = chimeraEmbed({ chimera: c, text: PY_SAMPLE }).vector;
|
|
115
|
+
expect(Array.from(a)).toEqual(Array.from(b));
|
|
116
|
+
});
|
|
117
|
+
it("same text routed to different domains → different vectors (per-domain phenotype)", () => {
|
|
118
|
+
const c = createChimera();
|
|
119
|
+
const ts = chimeraEmbed({ chimera: c, text: TS_SAMPLE, forceDomain: "typescript" }).vector;
|
|
120
|
+
const py = chimeraEmbed({ chimera: c, text: TS_SAMPLE, forceDomain: "python" }).vector;
|
|
121
|
+
expect(Array.from(ts)).not.toEqual(Array.from(py));
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
describe("v2.19.14 CHIMERA EMBEDDER · disagreementCheck", () => {
|
|
125
|
+
it("reports cosineSimilarity + cosineDistance + ambiguous flag", () => {
|
|
126
|
+
const c = createChimera();
|
|
127
|
+
const r = disagreementCheck({ chimera: c, text: "hello world", domainA: "typescript", domainB: "python" });
|
|
128
|
+
expect(r.cosineSimilarity).toBeGreaterThanOrEqual(-1);
|
|
129
|
+
expect(r.cosineSimilarity).toBeLessThanOrEqual(1);
|
|
130
|
+
expect(r.cosineDistance).toBeCloseTo(1 - r.cosineSimilarity, 6);
|
|
131
|
+
expect(typeof r.ambiguous).toBe("boolean");
|
|
132
|
+
});
|
|
133
|
+
it("custom threshold tightens or relaxes the ambiguity bar", () => {
|
|
134
|
+
const c = createChimera();
|
|
135
|
+
const strict = disagreementCheck({ chimera: c, text: "hello world", domainA: "typescript", domainB: "python", threshold: 0.01 });
|
|
136
|
+
const lax = disagreementCheck({ chimera: c, text: "hello world", domainA: "typescript", domainB: "python", threshold: 0.99 });
|
|
137
|
+
// strict threshold makes ambiguous=true more likely; lax makes it false
|
|
138
|
+
expect(strict.threshold).toBe(0.01);
|
|
139
|
+
expect(lax.threshold).toBe(0.99);
|
|
140
|
+
expect(lax.ambiguous).toBe(false);
|
|
141
|
+
});
|
|
142
|
+
it("disagreement on the same domain pair on the same text is symmetric (cosine is)", () => {
|
|
143
|
+
const c = createChimera();
|
|
144
|
+
const ab = disagreementCheck({ chimera: c, text: TS_SAMPLE, domainA: "typescript", domainB: "python" });
|
|
145
|
+
const ba = disagreementCheck({ chimera: c, text: TS_SAMPLE, domainA: "python", domainB: "typescript" });
|
|
146
|
+
expect(ab.cosineSimilarity).toBeCloseTo(ba.cosineSimilarity, 6);
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
describe("v2.19.14 CHIMERA EMBEDDER · formatter", () => {
|
|
150
|
+
it("formatter shows domain + confidence + scoreboard", () => {
|
|
151
|
+
const c = classifyDomain({ text: TS_SAMPLE });
|
|
152
|
+
const line = formatChimeraLine(c);
|
|
153
|
+
expect(line).toContain("🧪");
|
|
154
|
+
expect(line).toContain("typescript");
|
|
155
|
+
expect(line).toContain("conf=");
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
//# sourceMappingURL=chimera_embedder.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chimera_embedder.test.js","sourceRoot":"","sources":["../../src/chimera_embedder/chimera_embedder.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.19.14 — MNEME CHIMERA EMBEDDER (domain routing over SNN)
|
|
3
|
+
*
|
|
4
|
+
* "No single embedder is great at everything. ship 5 small SNNs each
|
|
5
|
+
* seeded for a domain (typescript / python / go / markdown / prose),
|
|
6
|
+
* a tiny keyword-heuristic classifier (~50 LOC) picks one. when two
|
|
7
|
+
* embedders' embeddings of the same input disagree by cosine > 0.4,
|
|
8
|
+
* the query is flagged AMBIGUOUS — caller-feedback nobody else's
|
|
9
|
+
* embedder layer provides."
|
|
10
|
+
*
|
|
11
|
+
* Architecture (composes onto v2.19.13 SNN):
|
|
12
|
+
* - Each domain has a SpikeEmbedder seeded distinctively (seeds 101..105)
|
|
13
|
+
* so the populations evolve into different phenotypes across the same
|
|
14
|
+
* corpus over time.
|
|
15
|
+
* - `classifyDomain(text)` — keyword heuristic only:
|
|
16
|
+
* typescript: import/export/interface/const/=>/extends + .ts hint
|
|
17
|
+
* python: def/class/import/None/lambda/__init__ + .py hint
|
|
18
|
+
* go: func/package/struct/interface{}/chan + .go hint
|
|
19
|
+
* markdown: leading ##/###, fenced code, [...](...) link syntax
|
|
20
|
+
* prose: default fallback (no strong domain marker)
|
|
21
|
+
* - `chimeraEmbed(text)` — classifies, routes to the chosen SNN.
|
|
22
|
+
* - `disagreementCheck(text, domainA, domainB)` — embeds via both,
|
|
23
|
+
* returns cosine distance + AMBIGUOUS flag when distance > 0.4.
|
|
24
|
+
*
|
|
25
|
+
* Honest scope:
|
|
26
|
+
* - Classifier is keyword + extension heuristic — NOT trained.
|
|
27
|
+
* Confidence reported per classification so caller can override.
|
|
28
|
+
* - Disagreement is a SIGNAL, not a verdict. AMBIGUOUS query may still
|
|
29
|
+
* be correctly handled by either embedder; the flag tells the user
|
|
30
|
+
* to ask for clarification.
|
|
31
|
+
* - 5 SNNs cost 5× memory of a single SNN — manageable (~5 × 50 KB).
|
|
32
|
+
*/
|
|
33
|
+
import { type SpikeEmbedder } from "../neuromorphic_embedder/index.js";
|
|
34
|
+
declare const PROTOCOL_VERSION: 1;
|
|
35
|
+
export type Domain = "typescript" | "python" | "go" | "markdown" | "prose";
|
|
36
|
+
export declare const DOMAINS: Domain[];
|
|
37
|
+
export interface ChimeraEmbedder {
|
|
38
|
+
v: typeof PROTOCOL_VERSION;
|
|
39
|
+
embedders: Record<Domain, SpikeEmbedder>;
|
|
40
|
+
}
|
|
41
|
+
export interface ClassifyResult {
|
|
42
|
+
domain: Domain;
|
|
43
|
+
confidence: number;
|
|
44
|
+
scoreboard: Record<Domain, number>;
|
|
45
|
+
}
|
|
46
|
+
export declare function createChimera(): ChimeraEmbedder;
|
|
47
|
+
/**
|
|
48
|
+
* Heuristic classifier. ~50 LOC pattern matching across token + character
|
|
49
|
+
* signatures, plus filename-hint affinity if the caller supplies one.
|
|
50
|
+
*
|
|
51
|
+
* Returns the most-confident domain plus a scoreboard so the caller can
|
|
52
|
+
* override or detect close-call.
|
|
53
|
+
*/
|
|
54
|
+
export declare function classifyDomain(opts: {
|
|
55
|
+
text: string;
|
|
56
|
+
filenameHint?: string;
|
|
57
|
+
}): ClassifyResult;
|
|
58
|
+
export interface ChimeraEmbedResult {
|
|
59
|
+
vector: Float32Array;
|
|
60
|
+
routedDomain: Domain;
|
|
61
|
+
classification: ClassifyResult;
|
|
62
|
+
totalSpikes: number;
|
|
63
|
+
}
|
|
64
|
+
export declare function chimeraEmbed(opts: {
|
|
65
|
+
chimera: ChimeraEmbedder;
|
|
66
|
+
text: string;
|
|
67
|
+
filenameHint?: string;
|
|
68
|
+
forceDomain?: Domain;
|
|
69
|
+
}): ChimeraEmbedResult;
|
|
70
|
+
export interface DisagreementResult {
|
|
71
|
+
domainA: Domain;
|
|
72
|
+
domainB: Domain;
|
|
73
|
+
cosineSimilarity: number;
|
|
74
|
+
cosineDistance: number;
|
|
75
|
+
ambiguous: boolean;
|
|
76
|
+
threshold: number;
|
|
77
|
+
}
|
|
78
|
+
export declare function disagreementCheck(opts: {
|
|
79
|
+
chimera: ChimeraEmbedder;
|
|
80
|
+
text: string;
|
|
81
|
+
domainA: Domain;
|
|
82
|
+
domainB: Domain;
|
|
83
|
+
threshold?: number;
|
|
84
|
+
}): DisagreementResult;
|
|
85
|
+
export declare function listChimeraDomains(c: ChimeraEmbedder): Array<{
|
|
86
|
+
domain: Domain;
|
|
87
|
+
seed: number;
|
|
88
|
+
dimension: number;
|
|
89
|
+
}>;
|
|
90
|
+
export declare function formatChimeraLine(c: ClassifyResult): string;
|
|
91
|
+
export {};
|
|
92
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/chimera_embedder/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,EAAiC,KAAK,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAEtG,QAAA,MAAM,gBAAgB,EAAG,CAAU,CAAC;AAGpC,MAAM,MAAM,MAAM,GAAG,YAAY,GAAG,QAAQ,GAAG,IAAI,GAAG,UAAU,GAAG,OAAO,CAAC;AAE3E,eAAO,MAAM,OAAO,EAAE,MAAM,EAAwD,CAAC;AAUrF,MAAM,WAAW,eAAe;IAC9B,CAAC,EAAE,OAAO,gBAAgB,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC;AAED,wBAAgB,aAAa,IAAI,eAAe,CAM/C;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,cAAc,CA4C5F;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,YAAY,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,cAAc,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE;IACjC,OAAO,EAAE,eAAe,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,kBAAkB,CAKrB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IACtC,OAAO,EAAE,eAAe,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,kBAAkB,CAcrB;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,eAAe,GAAG,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAMjH;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,cAAc,GAAG,MAAM,CAE3D"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.19.14 — MNEME CHIMERA EMBEDDER (domain routing over SNN)
|
|
3
|
+
*
|
|
4
|
+
* "No single embedder is great at everything. ship 5 small SNNs each
|
|
5
|
+
* seeded for a domain (typescript / python / go / markdown / prose),
|
|
6
|
+
* a tiny keyword-heuristic classifier (~50 LOC) picks one. when two
|
|
7
|
+
* embedders' embeddings of the same input disagree by cosine > 0.4,
|
|
8
|
+
* the query is flagged AMBIGUOUS — caller-feedback nobody else's
|
|
9
|
+
* embedder layer provides."
|
|
10
|
+
*
|
|
11
|
+
* Architecture (composes onto v2.19.13 SNN):
|
|
12
|
+
* - Each domain has a SpikeEmbedder seeded distinctively (seeds 101..105)
|
|
13
|
+
* so the populations evolve into different phenotypes across the same
|
|
14
|
+
* corpus over time.
|
|
15
|
+
* - `classifyDomain(text)` — keyword heuristic only:
|
|
16
|
+
* typescript: import/export/interface/const/=>/extends + .ts hint
|
|
17
|
+
* python: def/class/import/None/lambda/__init__ + .py hint
|
|
18
|
+
* go: func/package/struct/interface{}/chan + .go hint
|
|
19
|
+
* markdown: leading ##/###, fenced code, [...](...) link syntax
|
|
20
|
+
* prose: default fallback (no strong domain marker)
|
|
21
|
+
* - `chimeraEmbed(text)` — classifies, routes to the chosen SNN.
|
|
22
|
+
* - `disagreementCheck(text, domainA, domainB)` — embeds via both,
|
|
23
|
+
* returns cosine distance + AMBIGUOUS flag when distance > 0.4.
|
|
24
|
+
*
|
|
25
|
+
* Honest scope:
|
|
26
|
+
* - Classifier is keyword + extension heuristic — NOT trained.
|
|
27
|
+
* Confidence reported per classification so caller can override.
|
|
28
|
+
* - Disagreement is a SIGNAL, not a verdict. AMBIGUOUS query may still
|
|
29
|
+
* be correctly handled by either embedder; the flag tells the user
|
|
30
|
+
* to ask for clarification.
|
|
31
|
+
* - 5 SNNs cost 5× memory of a single SNN — manageable (~5 × 50 KB).
|
|
32
|
+
*/
|
|
33
|
+
import { createEmbedder, embed, cosine } from "../neuromorphic_embedder/index.js";
|
|
34
|
+
const PROTOCOL_VERSION = 1;
|
|
35
|
+
const DISAGREEMENT_THRESHOLD = 0.4;
|
|
36
|
+
export const DOMAINS = ["typescript", "python", "go", "markdown", "prose"];
|
|
37
|
+
const DOMAIN_SEEDS = {
|
|
38
|
+
typescript: 101,
|
|
39
|
+
python: 102,
|
|
40
|
+
go: 103,
|
|
41
|
+
markdown: 104,
|
|
42
|
+
prose: 105,
|
|
43
|
+
};
|
|
44
|
+
export function createChimera() {
|
|
45
|
+
const embedders = {};
|
|
46
|
+
for (const d of DOMAINS) {
|
|
47
|
+
embedders[d] = createEmbedder({ seed: DOMAIN_SEEDS[d] });
|
|
48
|
+
}
|
|
49
|
+
return { v: PROTOCOL_VERSION, embedders };
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Heuristic classifier. ~50 LOC pattern matching across token + character
|
|
53
|
+
* signatures, plus filename-hint affinity if the caller supplies one.
|
|
54
|
+
*
|
|
55
|
+
* Returns the most-confident domain plus a scoreboard so the caller can
|
|
56
|
+
* override or detect close-call.
|
|
57
|
+
*/
|
|
58
|
+
export function classifyDomain(opts) {
|
|
59
|
+
const t = opts.text;
|
|
60
|
+
const fname = (opts.filenameHint ?? "").toLowerCase();
|
|
61
|
+
const sb = { typescript: 0, python: 0, go: 0, markdown: 0, prose: 1 }; // prose gets baseline so it wins ties on neutral text
|
|
62
|
+
// filename hints
|
|
63
|
+
if (fname.endsWith(".ts") || fname.endsWith(".tsx"))
|
|
64
|
+
sb.typescript += 5;
|
|
65
|
+
if (fname.endsWith(".py"))
|
|
66
|
+
sb.python += 5;
|
|
67
|
+
if (fname.endsWith(".go"))
|
|
68
|
+
sb.go += 5;
|
|
69
|
+
if (fname.endsWith(".md") || fname.endsWith(".mdx"))
|
|
70
|
+
sb.markdown += 5;
|
|
71
|
+
// typescript markers
|
|
72
|
+
if (/\binterface\s+[A-Z]/.test(t))
|
|
73
|
+
sb.typescript += 2;
|
|
74
|
+
if (/\bimport\s+.*\s+from\s+["']/.test(t))
|
|
75
|
+
sb.typescript += 2;
|
|
76
|
+
if (/\bexport\s+(const|class|function|interface|type)\b/.test(t))
|
|
77
|
+
sb.typescript += 2;
|
|
78
|
+
if (/=>/.test(t))
|
|
79
|
+
sb.typescript += 1;
|
|
80
|
+
if (/\bconst\s+[a-zA-Z_]+\s*[:=]/.test(t))
|
|
81
|
+
sb.typescript += 1;
|
|
82
|
+
// python markers
|
|
83
|
+
if (/^\s*def\s+[a-z_][a-z_0-9]*\s*\(/m.test(t))
|
|
84
|
+
sb.python += 2;
|
|
85
|
+
if (/^\s*class\s+[A-Z][A-Za-z0-9_]*\s*\(?/m.test(t))
|
|
86
|
+
sb.python += 2;
|
|
87
|
+
if (/\bself\b/.test(t))
|
|
88
|
+
sb.python += 1;
|
|
89
|
+
if (/\b__init__\b/.test(t) || /\b__main__\b/.test(t))
|
|
90
|
+
sb.python += 2;
|
|
91
|
+
if (/\blambda\s+[a-z_]+\s*:/.test(t))
|
|
92
|
+
sb.python += 1;
|
|
93
|
+
// go markers
|
|
94
|
+
if (/\bfunc\s+[a-zA-Z_]+\s*\(/.test(t))
|
|
95
|
+
sb.go += 2;
|
|
96
|
+
if (/\bpackage\s+[a-z]+\b/.test(t))
|
|
97
|
+
sb.go += 2;
|
|
98
|
+
if (/\binterface\s*\{\s*\}/.test(t))
|
|
99
|
+
sb.go += 2;
|
|
100
|
+
if (/\bchan\s+[a-zA-Z]/.test(t))
|
|
101
|
+
sb.go += 2;
|
|
102
|
+
if (/\bstruct\s*\{/.test(t))
|
|
103
|
+
sb.go += 1;
|
|
104
|
+
// markdown markers
|
|
105
|
+
if (/^#{1,6}\s+/m.test(t))
|
|
106
|
+
sb.markdown += 2;
|
|
107
|
+
if (/```[a-zA-Z]*\n/.test(t))
|
|
108
|
+
sb.markdown += 2;
|
|
109
|
+
if (/\[[^\]]+\]\([^)]+\)/.test(t))
|
|
110
|
+
sb.markdown += 1;
|
|
111
|
+
if (/^\s*[-*+]\s+\S/m.test(t))
|
|
112
|
+
sb.markdown += 1;
|
|
113
|
+
// pick winner
|
|
114
|
+
let topDomain = "prose";
|
|
115
|
+
let topScore = -1;
|
|
116
|
+
for (const d of DOMAINS) {
|
|
117
|
+
if (sb[d] > topScore) {
|
|
118
|
+
topScore = sb[d];
|
|
119
|
+
topDomain = d;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
const total = DOMAINS.reduce((s, d) => s + sb[d], 0);
|
|
123
|
+
const confidence = total === 0 ? 0 : topScore / total;
|
|
124
|
+
return { domain: topDomain, confidence, scoreboard: sb };
|
|
125
|
+
}
|
|
126
|
+
export function chimeraEmbed(opts) {
|
|
127
|
+
const c = classifyDomain({ text: opts.text, filenameHint: opts.filenameHint });
|
|
128
|
+
const routedDomain = opts.forceDomain ?? c.domain;
|
|
129
|
+
const r = embed(opts.chimera.embedders[routedDomain], opts.text);
|
|
130
|
+
return { vector: r.vector, routedDomain, classification: c, totalSpikes: r.totalSpikes };
|
|
131
|
+
}
|
|
132
|
+
export function disagreementCheck(opts) {
|
|
133
|
+
const thr = opts.threshold ?? DISAGREEMENT_THRESHOLD;
|
|
134
|
+
const va = embed(opts.chimera.embedders[opts.domainA], opts.text).vector;
|
|
135
|
+
const vb = embed(opts.chimera.embedders[opts.domainB], opts.text).vector;
|
|
136
|
+
const sim = cosine(va, vb);
|
|
137
|
+
const dist = 1 - sim;
|
|
138
|
+
return {
|
|
139
|
+
domainA: opts.domainA,
|
|
140
|
+
domainB: opts.domainB,
|
|
141
|
+
cosineSimilarity: sim,
|
|
142
|
+
cosineDistance: dist,
|
|
143
|
+
ambiguous: dist > thr,
|
|
144
|
+
threshold: thr,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
export function listChimeraDomains(c) {
|
|
148
|
+
return DOMAINS.map((d) => ({
|
|
149
|
+
domain: d,
|
|
150
|
+
seed: c.embedders[d].config.seed,
|
|
151
|
+
dimension: c.embedders[d].config.populations * c.embedders[d].config.neuronsPerPop,
|
|
152
|
+
}));
|
|
153
|
+
}
|
|
154
|
+
export function formatChimeraLine(c) {
|
|
155
|
+
return `🧪 CHIMERA · domain=${c.domain} · conf=${c.confidence.toFixed(2)} · scores=${JSON.stringify(c.scoreboard)}`;
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/chimera_embedder/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli_dreams.test.d.ts","sourceRoot":"","sources":["../../src/cli_dreams/cli_dreams.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { emptyDreamLedger, enqueueDreams, recordDreamVerdict, morningDigest, verifyDreamLedger, listPendingDreams, formatDigestLine, } from "./index.js";
|
|
3
|
+
const SECRET = "dream-test-secret-44551122";
|
|
4
|
+
function seed3() {
|
|
5
|
+
const r = enqueueDreams({
|
|
6
|
+
ledger: emptyDreamLedger(),
|
|
7
|
+
seeds: [
|
|
8
|
+
{ claim: "src/foo.ts exports `bar`", source: "ollama:llama3:70b" },
|
|
9
|
+
{ claim: "tests pass for all files matching `*.test.ts`", source: "ollama:llama3:70b" },
|
|
10
|
+
{ claim: "deps array in package.json has no v0.x packages", source: "claude:sonnet" },
|
|
11
|
+
],
|
|
12
|
+
nowMs: 1_000_000,
|
|
13
|
+
secret: SECRET,
|
|
14
|
+
});
|
|
15
|
+
return r.ledger;
|
|
16
|
+
}
|
|
17
|
+
describe("v2.19.14 CLI DREAMS · enqueueDreams", () => {
|
|
18
|
+
it("enqueues fresh seeds, returns count + HMAC-signed records", () => {
|
|
19
|
+
const r = enqueueDreams({
|
|
20
|
+
ledger: emptyDreamLedger(),
|
|
21
|
+
seeds: [{ claim: "claim A", source: "ollama" }],
|
|
22
|
+
nowMs: 1_000_000,
|
|
23
|
+
secret: SECRET,
|
|
24
|
+
});
|
|
25
|
+
expect(r.enqueued).toBe(1);
|
|
26
|
+
expect(r.duplicatesSkipped).toBe(0);
|
|
27
|
+
expect(r.ledger.records[0].status).toBe("pending");
|
|
28
|
+
expect(r.ledger.records[0].prevSig).toBeNull();
|
|
29
|
+
expect(r.ledger.records[0].sig).toMatch(/^[a-f0-9]{64}$/);
|
|
30
|
+
});
|
|
31
|
+
it("dedups exact-match pending claims", () => {
|
|
32
|
+
let ledger = enqueueDreams({
|
|
33
|
+
ledger: emptyDreamLedger(),
|
|
34
|
+
seeds: [{ claim: "X is true", source: "ollama" }],
|
|
35
|
+
nowMs: 1_000_000,
|
|
36
|
+
secret: SECRET,
|
|
37
|
+
}).ledger;
|
|
38
|
+
const r = enqueueDreams({
|
|
39
|
+
ledger,
|
|
40
|
+
seeds: [{ claim: "X is true", source: "ollama" }, { claim: "Y is true", source: "ollama" }],
|
|
41
|
+
nowMs: 1_001_000,
|
|
42
|
+
secret: SECRET,
|
|
43
|
+
});
|
|
44
|
+
expect(r.enqueued).toBe(1);
|
|
45
|
+
expect(r.duplicatesSkipped).toBe(1);
|
|
46
|
+
});
|
|
47
|
+
it("hard cap MAX_DREAMS_PER_NIGHT=1000 prevents runaway queue", () => {
|
|
48
|
+
let ledger = emptyDreamLedger();
|
|
49
|
+
const bigSeeds = Array.from({ length: 1500 }, (_, i) => ({ claim: `claim-${i}`, source: "ollama" }));
|
|
50
|
+
const r = enqueueDreams({ ledger, seeds: bigSeeds, nowMs: 1_000_000, secret: SECRET });
|
|
51
|
+
expect(r.enqueued).toBe(1000);
|
|
52
|
+
expect(r.rejectedAtCap).toBe(500);
|
|
53
|
+
});
|
|
54
|
+
it("multiple chains link via prevSig (record N points at record N-1's sig)", () => {
|
|
55
|
+
const ledger = seed3();
|
|
56
|
+
expect(ledger.records).toHaveLength(3);
|
|
57
|
+
expect(ledger.records[0].prevSig).toBeNull();
|
|
58
|
+
expect(ledger.records[1].prevSig).toBe(ledger.records[0].sig);
|
|
59
|
+
expect(ledger.records[2].prevSig).toBe(ledger.records[1].sig);
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
describe("v2.19.14 CLI DREAMS · recordDreamVerdict + state machine", () => {
|
|
63
|
+
it("recording a verdict appends a new record (chain stays append-only)", () => {
|
|
64
|
+
const ledger = seed3();
|
|
65
|
+
const target = ledger.records[0].id;
|
|
66
|
+
const r = recordDreamVerdict({
|
|
67
|
+
ledger, dreamId: target, verdict: "verified",
|
|
68
|
+
evidence: "src/foo.ts:42 exports bar", confidence: 0.9,
|
|
69
|
+
nowMs: 1_010_000, secret: SECRET,
|
|
70
|
+
});
|
|
71
|
+
expect(r.ok).toBe(true);
|
|
72
|
+
expect(r.ledger.records).toHaveLength(4);
|
|
73
|
+
expect(r.ledger.records[3].status).toBe("verified");
|
|
74
|
+
expect(r.ledger.records[3].evidence).toBe("src/foo.ts:42 exports bar");
|
|
75
|
+
});
|
|
76
|
+
it("refuses to re-resolve a dream that's already verified/refuted", () => {
|
|
77
|
+
let ledger = seed3();
|
|
78
|
+
const id = ledger.records[1].id;
|
|
79
|
+
ledger = recordDreamVerdict({ ledger, dreamId: id, verdict: "refuted", evidence: "tests don't pass", nowMs: 1_010_000, secret: SECRET }).ledger;
|
|
80
|
+
const second = recordDreamVerdict({ ledger, dreamId: id, verdict: "verified", nowMs: 1_011_000, secret: SECRET });
|
|
81
|
+
expect(second.ok).toBe(false);
|
|
82
|
+
expect(second.reason).toContain("already resolved");
|
|
83
|
+
});
|
|
84
|
+
it("refuses to resolve an unknown dream id", () => {
|
|
85
|
+
const ledger = seed3();
|
|
86
|
+
const r = recordDreamVerdict({ ledger, dreamId: "drm-doesnt-exist", verdict: "verified", secret: SECRET });
|
|
87
|
+
expect(r.ok).toBe(false);
|
|
88
|
+
expect(r.reason).toContain("not found");
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
describe("v2.19.14 CLI DREAMS · morningDigest", () => {
|
|
92
|
+
it("returns crystallised/refuted/inconclusive/pending counts + crystallised ratio", () => {
|
|
93
|
+
let ledger = seed3();
|
|
94
|
+
const ids = ledger.records.slice(0, 3).map((r) => r.id);
|
|
95
|
+
ledger = recordDreamVerdict({ ledger, dreamId: ids[0], verdict: "verified", nowMs: 1_010_000, secret: SECRET }).ledger;
|
|
96
|
+
ledger = recordDreamVerdict({ ledger, dreamId: ids[1], verdict: "refuted", nowMs: 1_010_001, secret: SECRET }).ledger;
|
|
97
|
+
// ids[2] stays pending
|
|
98
|
+
const d = morningDigest({ ledger, since: 0, nowMs: 1_100_000 });
|
|
99
|
+
expect(d.totalDreamed).toBe(3);
|
|
100
|
+
expect(d.crystallised.length).toBe(1);
|
|
101
|
+
expect(d.refuted.length).toBe(1);
|
|
102
|
+
expect(d.stillPending).toBe(1);
|
|
103
|
+
expect(d.ratioCrystallised).toBeCloseTo(1 / 3, 3);
|
|
104
|
+
});
|
|
105
|
+
it("`since` filter excludes older dreams from the digest", () => {
|
|
106
|
+
let ledger = seed3(); // generatedAt around 1_000_000
|
|
107
|
+
const ids = ledger.records.slice(0, 3).map((r) => r.id);
|
|
108
|
+
ledger = recordDreamVerdict({ ledger, dreamId: ids[0], verdict: "verified", nowMs: 2_000_000, secret: SECRET }).ledger;
|
|
109
|
+
const d = morningDigest({ ledger, since: 1_500_000, nowMs: 2_100_000 });
|
|
110
|
+
// none generated after 1_500_000 → totalDreamed=0
|
|
111
|
+
expect(d.totalDreamed).toBe(0);
|
|
112
|
+
});
|
|
113
|
+
it("digest never includes more than 1 record per dream id (dedup by latest verdict)", () => {
|
|
114
|
+
let ledger = seed3();
|
|
115
|
+
const id = ledger.records[0].id;
|
|
116
|
+
ledger = recordDreamVerdict({ ledger, dreamId: id, verdict: "verified", nowMs: 1_010_000, secret: SECRET }).ledger;
|
|
117
|
+
// ledger now has 4 records but only 3 distinct ids
|
|
118
|
+
const d = morningDigest({ ledger, since: 0, nowMs: 1_100_000 });
|
|
119
|
+
expect(d.totalDreamed).toBe(3);
|
|
120
|
+
});
|
|
121
|
+
});
|
|
122
|
+
describe("v2.19.14 CLI DREAMS · verifyDreamLedger + listPending + formatter", () => {
|
|
123
|
+
it("verifyDreamLedger passes for an untampered chain", () => {
|
|
124
|
+
let ledger = seed3();
|
|
125
|
+
ledger = recordDreamVerdict({ ledger, dreamId: ledger.records[0].id, verdict: "verified", nowMs: 1_010_000, secret: SECRET }).ledger;
|
|
126
|
+
expect(verifyDreamLedger(ledger, SECRET).ok).toBe(true);
|
|
127
|
+
});
|
|
128
|
+
it("verifyDreamLedger detects tampered claim text at exact step", () => {
|
|
129
|
+
const ledger = seed3();
|
|
130
|
+
const tampered = {
|
|
131
|
+
...ledger,
|
|
132
|
+
records: ledger.records.map((r, i) => (i === 1 ? { ...r, claim: "evil rewrite" } : r)),
|
|
133
|
+
};
|
|
134
|
+
const v = verifyDreamLedger(tampered, SECRET);
|
|
135
|
+
expect(v.ok).toBe(false);
|
|
136
|
+
expect(v.brokenAt).toBe(1);
|
|
137
|
+
});
|
|
138
|
+
it("listPendingDreams returns only dreams whose latest record is 'pending'", () => {
|
|
139
|
+
let ledger = seed3();
|
|
140
|
+
ledger = recordDreamVerdict({ ledger, dreamId: ledger.records[0].id, verdict: "verified", nowMs: 1_010_000, secret: SECRET }).ledger;
|
|
141
|
+
const pending = listPendingDreams(ledger);
|
|
142
|
+
expect(pending.length).toBe(2);
|
|
143
|
+
expect(pending.every((r) => r.status === "pending")).toBe(true);
|
|
144
|
+
});
|
|
145
|
+
it("formatter line uses 🦠 + crystallised/refuted/pending counts", () => {
|
|
146
|
+
const line = formatDigestLine({
|
|
147
|
+
generatedAt: "2026-05-16T00:00:00.000Z",
|
|
148
|
+
windowStartMs: 0,
|
|
149
|
+
totalDreamed: 100,
|
|
150
|
+
crystallised: Array(5).fill(null),
|
|
151
|
+
refuted: Array(20).fill(null),
|
|
152
|
+
inconclusive: Array(10).fill(null),
|
|
153
|
+
stillPending: 65,
|
|
154
|
+
ratioCrystallised: 0.05,
|
|
155
|
+
});
|
|
156
|
+
expect(line).toContain("🦠");
|
|
157
|
+
expect(line).toContain("crystallised");
|
|
158
|
+
expect(line).toContain("0.05");
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
//# sourceMappingURL=cli_dreams.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli_dreams.test.js","sourceRoot":"","sources":["../../src/cli_dreams/cli_dreams.test.ts"],"names":[],"mappings":"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"}
|