@mneme-ai/core 2.19.12 → 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.
Files changed (59) hide show
  1. package/dist/chimera_embedder/chimera_embedder.test.d.ts +2 -0
  2. package/dist/chimera_embedder/chimera_embedder.test.d.ts.map +1 -0
  3. package/dist/chimera_embedder/chimera_embedder.test.js +158 -0
  4. package/dist/chimera_embedder/chimera_embedder.test.js.map +1 -0
  5. package/dist/chimera_embedder/index.d.ts +92 -0
  6. package/dist/chimera_embedder/index.d.ts.map +1 -0
  7. package/dist/chimera_embedder/index.js +157 -0
  8. package/dist/chimera_embedder/index.js.map +1 -0
  9. package/dist/cli_dreams/cli_dreams.test.d.ts +2 -0
  10. package/dist/cli_dreams/cli_dreams.test.d.ts.map +1 -0
  11. package/dist/cli_dreams/cli_dreams.test.js +161 -0
  12. package/dist/cli_dreams/cli_dreams.test.js.map +1 -0
  13. package/dist/cli_dreams/index.d.ts +124 -0
  14. package/dist/cli_dreams/index.d.ts.map +1 -0
  15. package/dist/cli_dreams/index.js +205 -0
  16. package/dist/cli_dreams/index.js.map +1 -0
  17. package/dist/consequence_ledger/consequence_ledger.test.d.ts +2 -0
  18. package/dist/consequence_ledger/consequence_ledger.test.d.ts.map +1 -0
  19. package/dist/consequence_ledger/consequence_ledger.test.js +140 -0
  20. package/dist/consequence_ledger/consequence_ledger.test.js.map +1 -0
  21. package/dist/consequence_ledger/index.d.ts +114 -0
  22. package/dist/consequence_ledger/index.d.ts.map +1 -0
  23. package/dist/consequence_ledger/index.js +234 -0
  24. package/dist/consequence_ledger/index.js.map +1 -0
  25. package/dist/cosmic/aurelian_v1913.test.d.ts +2 -0
  26. package/dist/cosmic/aurelian_v1913.test.d.ts.map +1 -0
  27. package/dist/cosmic/aurelian_v1913.test.js +46 -0
  28. package/dist/cosmic/aurelian_v1913.test.js.map +1 -0
  29. package/dist/cosmic/aurelian_v1914.test.d.ts +2 -0
  30. package/dist/cosmic/aurelian_v1914.test.d.ts.map +1 -0
  31. package/dist/cosmic/aurelian_v1914.test.js +59 -0
  32. package/dist/cosmic/aurelian_v1914.test.js.map +1 -0
  33. package/dist/index.d.ts +5 -0
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +5 -0
  36. package/dist/index.js.map +1 -1
  37. package/dist/negative_evidence/index.d.ts +162 -0
  38. package/dist/negative_evidence/index.d.ts.map +1 -0
  39. package/dist/negative_evidence/index.js +244 -0
  40. package/dist/negative_evidence/index.js.map +1 -0
  41. package/dist/negative_evidence/negative_evidence.test.d.ts +2 -0
  42. package/dist/negative_evidence/negative_evidence.test.d.ts.map +1 -0
  43. package/dist/negative_evidence/negative_evidence.test.js +188 -0
  44. package/dist/negative_evidence/negative_evidence.test.js.map +1 -0
  45. package/dist/neuromorphic_embedder/index.d.ts +139 -0
  46. package/dist/neuromorphic_embedder/index.d.ts.map +1 -0
  47. package/dist/neuromorphic_embedder/index.js +306 -0
  48. package/dist/neuromorphic_embedder/index.js.map +1 -0
  49. package/dist/neuromorphic_embedder/neuromorphic_embedder.test.d.ts +2 -0
  50. package/dist/neuromorphic_embedder/neuromorphic_embedder.test.d.ts.map +1 -0
  51. package/dist/neuromorphic_embedder/neuromorphic_embedder.test.js +194 -0
  52. package/dist/neuromorphic_embedder/neuromorphic_embedder.test.js.map +1 -0
  53. package/dist/whats_new.d.ts.map +1 -1
  54. package/dist/whats_new.js +16 -0
  55. package/dist/whats_new.js.map +1 -1
  56. package/dist/wrapper_genesis/index.d.ts.map +1 -1
  57. package/dist/wrapper_genesis/index.js +26 -0
  58. package/dist/wrapper_genesis/index.js.map +1 -1
  59. package/package.json +1 -1
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=chimera_embedder.test.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=cli_dreams.test.d.ts.map
@@ -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":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EAClB,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,GAEjB,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,GAAG,4BAA4B,CAAC;AAE5C,SAAS,KAAK;IACZ,MAAM,CAAC,GAAG,aAAa,CAAC;QACtB,MAAM,EAAE,gBAAgB,EAAE;QAC1B,KAAK,EAAE;YACL,EAAE,KAAK,EAAE,0BAA0B,EAAE,MAAM,EAAE,mBAAmB,EAAE;YAClE,EAAE,KAAK,EAAE,+CAA+C,EAAE,MAAM,EAAE,mBAAmB,EAAE;YACvF,EAAE,KAAK,EAAE,iDAAiD,EAAE,MAAM,EAAE,eAAe,EAAE;SACtF;QACD,KAAK,EAAE,SAAS;QAChB,MAAM,EAAE,MAAM;KACf,CAAC,CAAC;IACH,OAAO,CAAC,CAAC,MAAM,CAAC;AAClB,CAAC;AAED,QAAQ,CAAC,qCAAqC,EAAE,GAAG,EAAE;IACnD,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,MAAM,CAAC,GAAG,aAAa,CAAC;YACtB,MAAM,EAAE,gBAAgB,EAAE;YAC1B,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;YAC/C,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;QACH,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACpD,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;QAChD,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,IAAI,MAAM,GAAG,aAAa,CAAC;YACzB,MAAM,EAAE,gBAAgB,EAAE;YAC1B,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;YACjD,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,MAAM;SACf,CAAC,CAAC,MAAM,CAAC;QACV,MAAM,CAAC,GAAG,aAAa,CAAC;YACtB,MAAM;YACN,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;YAC3F,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;QACH,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,IAAI,MAAM,GAAG,gBAAgB,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QACrG,MAAM,CAAC,GAAG,aAAa,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACvF,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wEAAwE,EAAE,GAAG,EAAE;QAChF,MAAM,MAAM,GAAG,KAAK,EAAE,CAAC;QACvB,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC9C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,GAAG,CAAC,CAAC;QAChE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,GAAG,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,0DAA0D,EAAE,GAAG,EAAE;IACxE,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;QAC5E,MAAM,MAAM,GAAG,KAAK,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,kBAAkB,CAAC;YAC3B,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU;YAC5C,QAAQ,EAAE,2BAA2B,EAAE,UAAU,EAAE,GAAG;YACtD,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM;SACjC,CAAC,CAAC;QACH,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACrD,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,IAAI,MAAM,GAAG,KAAK,EAAE,CAAC;QACrB,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC;QACjC,MAAM,GAAG,kBAAkB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,kBAAkB,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QAChJ,MAAM,MAAM,GAAG,kBAAkB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAClH,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,MAAM,GAAG,KAAK,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,kBAAkB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAC3G,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,qCAAqC,EAAE,GAAG,EAAE;IACnD,EAAE,CAAC,+EAA+E,EAAE,GAAG,EAAE;QACvF,IAAI,MAAM,GAAG,KAAK,EAAE,CAAC;QACrB,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACxD,MAAM,GAAG,kBAAkB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAE,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACxH,MAAM,GAAG,kBAAkB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAE,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACvH,uBAAuB;QACvB,MAAM,CAAC,GAAG,aAAa,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAChE,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,IAAI,MAAM,GAAG,KAAK,EAAE,CAAC,CAAC,+BAA+B;QACrD,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACxD,MAAM,GAAG,kBAAkB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAE,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACxH,MAAM,CAAC,GAAG,aAAa,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QACxE,kDAAkD;QAClD,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iFAAiF,EAAE,GAAG,EAAE;QACzF,IAAI,MAAM,GAAG,KAAK,EAAE,CAAC;QACrB,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC;QACjC,MAAM,GAAG,kBAAkB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACnH,mDAAmD;QACnD,MAAM,CAAC,GAAG,aAAa,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAChE,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,mEAAmE,EAAE,GAAG,EAAE;IACjF,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,IAAI,MAAM,GAAG,KAAK,EAAE,CAAC;QACrB,MAAM,GAAG,kBAAkB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACtI,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,MAAM,GAAG,KAAK,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAgB;YAC5B,GAAG,MAAM;YACT,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACvF,CAAC;QACF,MAAM,CAAC,GAAG,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC9C,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wEAAwE,EAAE,GAAG,EAAE;QAChF,IAAI,MAAM,GAAG,KAAK,EAAE,CAAC;QACrB,MAAM,GAAG,kBAAkB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACtI,MAAM,OAAO,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC1C,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,IAAI,GAAG,gBAAgB,CAAC;YAC5B,WAAW,EAAE,0BAA0B;YACvC,aAAa,EAAE,CAAC;YAChB,YAAY,EAAE,GAAG;YACjB,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAU;YAC1C,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAU;YACtC,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAU;YAC3C,YAAY,EAAE,EAAE;YAChB,iBAAiB,EAAE,IAAI;SACxB,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}