nexus-prime 0.2.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/README.md +253 -0
- package/dist/agents/adapters/mcp.d.ts +21 -0
- package/dist/agents/adapters/mcp.d.ts.map +1 -0
- package/dist/agents/adapters/mcp.js +447 -0
- package/dist/agents/adapters/mcp.js.map +1 -0
- package/dist/agents/adapters.d.ts +57 -0
- package/dist/agents/adapters.d.ts.map +1 -0
- package/dist/agents/adapters.js +151 -0
- package/dist/agents/adapters.js.map +1 -0
- package/dist/agents/coordinator.d.ts +75 -0
- package/dist/agents/coordinator.d.ts.map +1 -0
- package/dist/agents/coordinator.js +339 -0
- package/dist/agents/coordinator.js.map +1 -0
- package/dist/agents/core/types.d.ts +157 -0
- package/dist/agents/core/types.d.ts.map +1 -0
- package/dist/agents/core/types.js +5 -0
- package/dist/agents/core/types.js.map +1 -0
- package/dist/agents/learner.d.ts +25 -0
- package/dist/agents/learner.d.ts.map +1 -0
- package/dist/agents/learner.js +88 -0
- package/dist/agents/learner.js.map +1 -0
- package/dist/cli.d.ts +6 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +237 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +74 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +73 -0
- package/dist/config.js.map +1 -0
- package/dist/core/evolution.d.ts +122 -0
- package/dist/core/evolution.d.ts.map +1 -0
- package/dist/core/evolution.js +319 -0
- package/dist/core/evolution.js.map +1 -0
- package/dist/core/memory.d.ts +96 -0
- package/dist/core/memory.d.ts.map +1 -0
- package/dist/core/memory.js +304 -0
- package/dist/core/memory.js.map +1 -0
- package/dist/core/optimize.d.ts +100 -0
- package/dist/core/optimize.d.ts.map +1 -0
- package/dist/core/optimize.js +263 -0
- package/dist/core/optimize.js.map +1 -0
- package/dist/core/types.d.ts +155 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +5 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/wave.d.ts +55 -0
- package/dist/core/wave.d.ts.map +1 -0
- package/dist/core/wave.js +119 -0
- package/dist/core/wave.js.map +1 -0
- package/dist/engines/benchmark.d.ts +76 -0
- package/dist/engines/benchmark.d.ts.map +1 -0
- package/dist/engines/benchmark.js +167 -0
- package/dist/engines/benchmark.js.map +1 -0
- package/dist/engines/cache-manager.d.ts +75 -0
- package/dist/engines/cache-manager.d.ts.map +1 -0
- package/dist/engines/cache-manager.js +200 -0
- package/dist/engines/cache-manager.js.map +1 -0
- package/dist/engines/context.d.ts +50 -0
- package/dist/engines/context.d.ts.map +1 -0
- package/dist/engines/context.js +99 -0
- package/dist/engines/context.js.map +1 -0
- package/dist/engines/embedder.d.ts +55 -0
- package/dist/engines/embedder.d.ts.map +1 -0
- package/dist/engines/embedder.js +223 -0
- package/dist/engines/embedder.js.map +1 -0
- package/dist/engines/guardrails-bridge.d.ts +64 -0
- package/dist/engines/guardrails-bridge.d.ts.map +1 -0
- package/dist/engines/guardrails-bridge.js +251 -0
- package/dist/engines/guardrails-bridge.js.map +1 -0
- package/dist/engines/index.d.ts +14 -0
- package/dist/engines/index.d.ts.map +1 -0
- package/dist/engines/index.js +14 -0
- package/dist/engines/index.js.map +1 -0
- package/dist/engines/memory.d.ts +76 -0
- package/dist/engines/memory.d.ts.map +1 -0
- package/dist/engines/memory.js +431 -0
- package/dist/engines/memory.js.map +1 -0
- package/dist/engines/meta-learner.d.ts +87 -0
- package/dist/engines/meta-learner.d.ts.map +1 -0
- package/dist/engines/meta-learner.js +214 -0
- package/dist/engines/meta-learner.js.map +1 -0
- package/dist/engines/orchestrator.d.ts +69 -0
- package/dist/engines/orchestrator.d.ts.map +1 -0
- package/dist/engines/orchestrator.js +175 -0
- package/dist/engines/orchestrator.js.map +1 -0
- package/dist/engines/pod-network.d.ts +31 -0
- package/dist/engines/pod-network.d.ts.map +1 -0
- package/dist/engines/pod-network.js +108 -0
- package/dist/engines/pod-network.js.map +1 -0
- package/dist/engines/token-optimizer.d.ts +53 -0
- package/dist/engines/token-optimizer.d.ts.map +1 -0
- package/dist/engines/token-optimizer.js +115 -0
- package/dist/engines/token-optimizer.js.map +1 -0
- package/dist/engines/token-supremacy.d.ts +86 -0
- package/dist/engines/token-supremacy.d.ts.map +1 -0
- package/dist/engines/token-supremacy.js +403 -0
- package/dist/engines/token-supremacy.js.map +1 -0
- package/dist/index.d.ts +99 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +302 -0
- package/dist/index.js.map +1 -0
- package/dist/nexus-prime.d.ts +15 -0
- package/dist/nexus-prime.d.ts.map +1 -0
- package/dist/nexus-prime.js +15 -0
- package/dist/nexus-prime.js.map +1 -0
- package/dist/phantom/index.d.ts +135 -0
- package/dist/phantom/index.d.ts.map +1 -0
- package/dist/phantom/index.js +286 -0
- package/dist/phantom/index.js.map +1 -0
- package/dist/phantom/merge-oracle.d.ts +35 -0
- package/dist/phantom/merge-oracle.d.ts.map +1 -0
- package/dist/phantom/merge-oracle.js +189 -0
- package/dist/phantom/merge-oracle.js.map +1 -0
- package/dist/phantom/phase4-orchestrator.d.ts +14 -0
- package/dist/phantom/phase4-orchestrator.d.ts.map +1 -0
- package/dist/phantom/phase4-orchestrator.js +488 -0
- package/dist/phantom/phase4-orchestrator.js.map +1 -0
- package/dist/verify-guardrails.d.ts +2 -0
- package/dist/verify-guardrails.d.ts.map +1 -0
- package/dist/verify-guardrails.js +48 -0
- package/dist/verify-guardrails.js.map +1 -0
- package/dist/verify-pod-sync.d.ts +2 -0
- package/dist/verify-pod-sync.d.ts.map +1 -0
- package/dist/verify-pod-sync.js +41 -0
- package/dist/verify-pod-sync.js.map +1 -0
- package/dist/verify-substrate.d.ts +2 -0
- package/dist/verify-substrate.d.ts.map +1 -0
- package/dist/verify-substrate.js +41 -0
- package/dist/verify-substrate.js.map +1 -0
- package/dist/verify-token-scoring.d.ts +2 -0
- package/dist/verify-token-scoring.d.ts.map +1 -0
- package/dist/verify-token-scoring.js +37 -0
- package/dist/verify-token-scoring.js.map +1 -0
- package/package.json +80 -0
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Engine — Persistent Zettelkasten
|
|
3
|
+
*
|
|
4
|
+
* Three-tier memory system backed by SQLite for cross-session persistence.
|
|
5
|
+
* Memories link to each other (Zettelkasten) — recall returns context networks,
|
|
6
|
+
* not just isolated facts. High-value memories trigger fission (broadcast).
|
|
7
|
+
*
|
|
8
|
+
* Persistence: ~/.nexus-prime/memory.db
|
|
9
|
+
* Load on MCP start. Flush on exit.
|
|
10
|
+
*/
|
|
11
|
+
export interface MemoryItem {
|
|
12
|
+
id: string;
|
|
13
|
+
content: string;
|
|
14
|
+
priority: number;
|
|
15
|
+
timestamp: number;
|
|
16
|
+
tags: string[];
|
|
17
|
+
tier: 'prefrontal' | 'hippocampus' | 'cortex';
|
|
18
|
+
sessionId?: string;
|
|
19
|
+
accessCount: number;
|
|
20
|
+
links?: string[];
|
|
21
|
+
parentId?: string;
|
|
22
|
+
depth?: number;
|
|
23
|
+
}
|
|
24
|
+
export interface MemoryLink {
|
|
25
|
+
fromId: string;
|
|
26
|
+
toId: string;
|
|
27
|
+
weight: number;
|
|
28
|
+
type: 'semantic' | 'temporal' | 'tagged';
|
|
29
|
+
}
|
|
30
|
+
export interface MemoryStats {
|
|
31
|
+
prefrontal: number;
|
|
32
|
+
hippocampus: number;
|
|
33
|
+
cortex: number;
|
|
34
|
+
totalLinks: number;
|
|
35
|
+
oldestEntry: number | null;
|
|
36
|
+
topTags: string[];
|
|
37
|
+
}
|
|
38
|
+
export declare class MemoryEngine {
|
|
39
|
+
private db;
|
|
40
|
+
private sessionId;
|
|
41
|
+
private prefrontal;
|
|
42
|
+
private maxPrefrontal;
|
|
43
|
+
private maxHippocampus;
|
|
44
|
+
private embedder;
|
|
45
|
+
private vectorIdToMemoryId;
|
|
46
|
+
private memoryIdToVectorId;
|
|
47
|
+
private nextVectorId;
|
|
48
|
+
constructor(dbPath?: string);
|
|
49
|
+
private initSchema;
|
|
50
|
+
/** Restore hippocampus + cortex from DB on startup */
|
|
51
|
+
load(): void;
|
|
52
|
+
/** Flush prefrontal to DB (called on MCP shutdown) */
|
|
53
|
+
flush(): void;
|
|
54
|
+
store(content: string, priority?: number, tags?: string[], parentId?: string, depth?: number): string;
|
|
55
|
+
recall(query: string, k?: number): Promise<string[]>;
|
|
56
|
+
private vectorEmbeddings;
|
|
57
|
+
private indexMemory;
|
|
58
|
+
private autoLink;
|
|
59
|
+
/** Get a memory's connected context network */
|
|
60
|
+
getNetwork(id: string, depth?: number): MemoryItem[];
|
|
61
|
+
private fission;
|
|
62
|
+
private consolidate;
|
|
63
|
+
private wordOverlap;
|
|
64
|
+
private rowToItem;
|
|
65
|
+
private getAllItems;
|
|
66
|
+
getStats(): MemoryStats;
|
|
67
|
+
clear(): void;
|
|
68
|
+
/**
|
|
69
|
+
* Query memories by tag using direct SQL — precise, no fuzzy matching.
|
|
70
|
+
* Returns memories that contain ANY of the specified tags.
|
|
71
|
+
*/
|
|
72
|
+
queryByTags(tags: string[], limit?: number): MemoryItem[];
|
|
73
|
+
close(): void;
|
|
74
|
+
}
|
|
75
|
+
export declare const createMemoryEngine: (dbPath?: string) => MemoryEngine;
|
|
76
|
+
//# sourceMappingURL=memory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/engines/memory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAcH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,EAAE,YAAY,GAAG,aAAa,GAAG,QAAQ,CAAC;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,UAAU,GAAG,UAAU,GAAG,QAAQ,CAAC;CAC1C;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAMD,qBAAa,YAAY;IACvB,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,SAAS,CAAS;IAG1B,OAAO,CAAC,UAAU,CAAoB;IACtC,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,cAAc,CAAO;IAG7B,OAAO,CAAC,QAAQ,CAAW;IAE3B,OAAO,CAAC,kBAAkB,CAAkC;IAC5D,OAAO,CAAC,kBAAkB,CAAkC;IAC5D,OAAO,CAAC,YAAY,CAAK;gBAEb,MAAM,CAAC,EAAE,MAAM;IAiB3B,OAAO,CAAC,UAAU;IAiDlB,sDAAsD;IACtD,IAAI,IAAI,IAAI;IAiCZ,sDAAsD;IACtD,KAAK,IAAI,IAAI;IAoCb,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAY,EAAE,IAAI,GAAE,MAAM,EAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,MAAM;IA4C3G,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,GAAE,MAAU,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAsE7D,OAAO,CAAC,gBAAgB,CAAoC;IAE5D,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,QAAQ;IAgChB,+CAA+C;IAC/C,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,UAAU,EAAE;IAgCvD,OAAO,CAAC,OAAO;IAiBf,OAAO,CAAC,WAAW;IAyCnB,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,SAAS;IAejB,OAAO,CAAC,WAAW;IAKnB,QAAQ,IAAI,WAAW;IAgCvB,KAAK,IAAI,IAAI;IAKb;;;OAGG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,GAAE,MAAW,GAAG,UAAU,EAAE;IAY7D,KAAK,IAAI,IAAI;CAId;AAED,eAAO,MAAM,kBAAkB,GAAI,SAAS,MAAM,iBAA6B,CAAC"}
|
|
@@ -0,0 +1,431 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Engine — Persistent Zettelkasten
|
|
3
|
+
*
|
|
4
|
+
* Three-tier memory system backed by SQLite for cross-session persistence.
|
|
5
|
+
* Memories link to each other (Zettelkasten) — recall returns context networks,
|
|
6
|
+
* not just isolated facts. High-value memories trigger fission (broadcast).
|
|
7
|
+
*
|
|
8
|
+
* Persistence: ~/.nexus-prime/memory.db
|
|
9
|
+
* Load on MCP start. Flush on exit.
|
|
10
|
+
*/
|
|
11
|
+
import Database from 'better-sqlite3';
|
|
12
|
+
import * as os from 'os';
|
|
13
|
+
import * as path from 'path';
|
|
14
|
+
import * as fs from 'fs';
|
|
15
|
+
import { randomUUID } from 'crypto';
|
|
16
|
+
import { Embedder, HyperbolicMath } from './embedder.js';
|
|
17
|
+
import { podNetwork } from './pod-network.js';
|
|
18
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
19
|
+
// MemoryEngine
|
|
20
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
21
|
+
export class MemoryEngine {
|
|
22
|
+
db;
|
|
23
|
+
sessionId;
|
|
24
|
+
// In-RAM working tiers (flushed to DB periodically)
|
|
25
|
+
prefrontal = [];
|
|
26
|
+
maxPrefrontal = 7;
|
|
27
|
+
maxHippocampus = 200;
|
|
28
|
+
// Vector index (in-memory TF-IDF) — rebuilt on load
|
|
29
|
+
embedder;
|
|
30
|
+
// Maps vector item id → memory id
|
|
31
|
+
vectorIdToMemoryId = new Map();
|
|
32
|
+
memoryIdToVectorId = new Map();
|
|
33
|
+
nextVectorId = 1;
|
|
34
|
+
constructor(dbPath) {
|
|
35
|
+
const dbDir = path.join(os.homedir(), '.nexus-prime');
|
|
36
|
+
fs.mkdirSync(dbDir, { recursive: true });
|
|
37
|
+
const resolvedPath = dbPath ?? path.join(dbDir, 'memory.db');
|
|
38
|
+
this.db = new Database(resolvedPath);
|
|
39
|
+
this.sessionId = randomUUID();
|
|
40
|
+
this.embedder = new Embedder();
|
|
41
|
+
this.initSchema();
|
|
42
|
+
this.load();
|
|
43
|
+
}
|
|
44
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
45
|
+
// Schema
|
|
46
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
47
|
+
initSchema() {
|
|
48
|
+
this.db.exec(`
|
|
49
|
+
CREATE TABLE IF NOT EXISTS memories (
|
|
50
|
+
id TEXT PRIMARY KEY,
|
|
51
|
+
content TEXT NOT NULL,
|
|
52
|
+
priority REAL NOT NULL DEFAULT 1.0,
|
|
53
|
+
timestamp INTEGER NOT NULL,
|
|
54
|
+
tags TEXT NOT NULL DEFAULT '[]',
|
|
55
|
+
tier TEXT NOT NULL DEFAULT 'hippocampus',
|
|
56
|
+
session_id TEXT,
|
|
57
|
+
access_count INTEGER NOT NULL DEFAULT 0,
|
|
58
|
+
parent_id TEXT,
|
|
59
|
+
depth INTEGER DEFAULT 0
|
|
60
|
+
);
|
|
61
|
+
`);
|
|
62
|
+
// Migration logic for existing tables
|
|
63
|
+
const tableInfo = this.db.prepare("PRAGMA table_info(memories)").all();
|
|
64
|
+
const columns = tableInfo.map(c => c.name);
|
|
65
|
+
if (!columns.includes('parent_id')) {
|
|
66
|
+
this.db.exec("ALTER TABLE memories ADD COLUMN parent_id TEXT");
|
|
67
|
+
}
|
|
68
|
+
if (!columns.includes('depth')) {
|
|
69
|
+
this.db.exec("ALTER TABLE memories ADD COLUMN depth INTEGER DEFAULT 0");
|
|
70
|
+
}
|
|
71
|
+
this.db.exec(`
|
|
72
|
+
CREATE TABLE IF NOT EXISTS memory_links(
|
|
73
|
+
from_id TEXT NOT NULL,
|
|
74
|
+
to_id TEXT NOT NULL,
|
|
75
|
+
weight REAL NOT NULL DEFAULT 0.5,
|
|
76
|
+
type TEXT NOT NULL DEFAULT 'semantic',
|
|
77
|
+
PRIMARY KEY(from_id, to_id),
|
|
78
|
+
FOREIGN KEY(from_id) REFERENCES memories(id) ON DELETE CASCADE,
|
|
79
|
+
FOREIGN KEY(to_id) REFERENCES memories(id) ON DELETE CASCADE
|
|
80
|
+
);
|
|
81
|
+
|
|
82
|
+
CREATE INDEX IF NOT EXISTS idx_memories_tier ON memories(tier);
|
|
83
|
+
CREATE INDEX IF NOT EXISTS idx_memories_priority ON memories(priority DESC);
|
|
84
|
+
CREATE INDEX IF NOT EXISTS idx_memories_timestamp ON memories(timestamp DESC);
|
|
85
|
+
CREATE INDEX IF NOT EXISTS idx_links_from ON memory_links(from_id);
|
|
86
|
+
`);
|
|
87
|
+
}
|
|
88
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
89
|
+
// Persistence
|
|
90
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
91
|
+
/** Restore hippocampus + cortex from DB on startup */
|
|
92
|
+
load() {
|
|
93
|
+
const rows = this.db.prepare(`SELECT * FROM memories ORDER BY priority DESC, timestamp DESC LIMIT 500`).all();
|
|
94
|
+
// Fit TF-IDF vocabulary on all stored content
|
|
95
|
+
const allContent = rows.map(r => r.content);
|
|
96
|
+
if (allContent.length > 0) {
|
|
97
|
+
this.embedder.fitVocabulary(allContent);
|
|
98
|
+
}
|
|
99
|
+
for (const row of rows) {
|
|
100
|
+
const item = {
|
|
101
|
+
id: row.id,
|
|
102
|
+
content: row.content,
|
|
103
|
+
priority: row.priority,
|
|
104
|
+
timestamp: row.timestamp,
|
|
105
|
+
tags: JSON.parse(row.tags),
|
|
106
|
+
tier: row.tier,
|
|
107
|
+
sessionId: row.session_id,
|
|
108
|
+
accessCount: row.access_count
|
|
109
|
+
};
|
|
110
|
+
// Restore prefrontal items to RAM
|
|
111
|
+
if (item.tier === 'prefrontal') {
|
|
112
|
+
this.prefrontal.push(item);
|
|
113
|
+
}
|
|
114
|
+
// Rebuild in-memory vector index (synchronously via local embed)
|
|
115
|
+
this.indexMemory(item.id, item.content);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/** Flush prefrontal to DB (called on MCP shutdown) */
|
|
119
|
+
flush() {
|
|
120
|
+
const upsert = this.db.prepare(`
|
|
121
|
+
INSERT INTO memories(id, content, priority, timestamp, tags, tier, session_id, access_count, parent_id, depth)
|
|
122
|
+
VALUES(@id, @content, @priority, @timestamp, @tags, @tier, @session_id, @access_count, @parent_id, @depth)
|
|
123
|
+
ON CONFLICT(id) DO UPDATE SET
|
|
124
|
+
priority = excluded.priority,
|
|
125
|
+
access_count = excluded.access_count,
|
|
126
|
+
tier = excluded.tier,
|
|
127
|
+
parent_id = excluded.parent_id,
|
|
128
|
+
depth = excluded.depth
|
|
129
|
+
`);
|
|
130
|
+
const txn = this.db.transaction((items) => {
|
|
131
|
+
for (const item of items) {
|
|
132
|
+
upsert.run({
|
|
133
|
+
id: item.id,
|
|
134
|
+
content: item.content,
|
|
135
|
+
priority: item.priority,
|
|
136
|
+
timestamp: item.timestamp,
|
|
137
|
+
tags: JSON.stringify(item.tags),
|
|
138
|
+
tier: item.tier,
|
|
139
|
+
session_id: item.sessionId ?? null,
|
|
140
|
+
access_count: item.accessCount,
|
|
141
|
+
parent_id: item.parentId ?? null,
|
|
142
|
+
depth: item.depth ?? 0
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
txn(this.prefrontal);
|
|
147
|
+
}
|
|
148
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
149
|
+
// Core Operations
|
|
150
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
151
|
+
store(content, priority = 1.0, tags = [], parentId, depth = 0) {
|
|
152
|
+
const id = randomUUID();
|
|
153
|
+
const item = {
|
|
154
|
+
id,
|
|
155
|
+
content,
|
|
156
|
+
priority,
|
|
157
|
+
timestamp: Date.now(),
|
|
158
|
+
tags,
|
|
159
|
+
tier: 'prefrontal',
|
|
160
|
+
sessionId: this.sessionId,
|
|
161
|
+
accessCount: 0,
|
|
162
|
+
parentId,
|
|
163
|
+
depth
|
|
164
|
+
};
|
|
165
|
+
// Write to DB immediately (don't wait for flush)
|
|
166
|
+
this.db.prepare(`
|
|
167
|
+
INSERT INTO memories(id, content, priority, timestamp, tags, tier, session_id, access_count, parent_id, depth)
|
|
168
|
+
VALUES(?, ?, ?, ?, ?, 'prefrontal', ?, 0, ?, ?)
|
|
169
|
+
`).run(id, content, priority, item.timestamp, JSON.stringify(tags), this.sessionId, parentId, depth);
|
|
170
|
+
// Update vocabulary and add to vector index
|
|
171
|
+
this.embedder.fitVocabulary([content]);
|
|
172
|
+
this.indexMemory(id, content);
|
|
173
|
+
// Auto-link to semantically similar recent memories
|
|
174
|
+
this.autoLink(item);
|
|
175
|
+
// Add to RAM prefrontal
|
|
176
|
+
this.prefrontal.push(item);
|
|
177
|
+
if (this.prefrontal.length > this.maxPrefrontal) {
|
|
178
|
+
this.consolidate();
|
|
179
|
+
}
|
|
180
|
+
// Fission: broadcast high-value memories
|
|
181
|
+
if (priority > 0.9) {
|
|
182
|
+
this.fission(item);
|
|
183
|
+
}
|
|
184
|
+
return id;
|
|
185
|
+
}
|
|
186
|
+
async recall(query, k = 5) {
|
|
187
|
+
// ── Stage 1: Vector search (semantic) ────────────────────────────────────
|
|
188
|
+
const queryVector = await this.embedder.embed(query);
|
|
189
|
+
const vectorMatches = new Map();
|
|
190
|
+
const allItems = this.getAllItems();
|
|
191
|
+
for (const item of allItems) {
|
|
192
|
+
const itemVector = this.embedder.localEmbed(item.content);
|
|
193
|
+
const hDist = HyperbolicMath.dist(queryVector, itemVector);
|
|
194
|
+
let score = 1 / (1 + hDist);
|
|
195
|
+
// Hierarchy Boost: if item has a parent that matches query, boost child
|
|
196
|
+
if (item.parentId) {
|
|
197
|
+
const parent = allItems.find(i => i.id === item.parentId);
|
|
198
|
+
if (parent) {
|
|
199
|
+
const parentVector = this.embedder.localEmbed(parent.content);
|
|
200
|
+
const pDist = HyperbolicMath.dist(queryVector, parentVector);
|
|
201
|
+
if (pDist < 0.3)
|
|
202
|
+
score *= 1.4; // Boost child if parent is relevant
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
vectorMatches.set(item.id, score);
|
|
206
|
+
}
|
|
207
|
+
// ── Stage 2: SQL scoring (priority + recency) ─────────────────────────────
|
|
208
|
+
const podFindings = podNetwork.recall([]);
|
|
209
|
+
const queryLower = query.toLowerCase();
|
|
210
|
+
const rows = this.db.prepare(`
|
|
211
|
+
SELECT *, access_count FROM memories
|
|
212
|
+
ORDER BY priority DESC, timestamp DESC
|
|
213
|
+
LIMIT 300
|
|
214
|
+
`).all();
|
|
215
|
+
const scored = rows.map(row => {
|
|
216
|
+
const vectorScore = vectorMatches.get(row.id) ?? 0;
|
|
217
|
+
const recencyScore = Math.exp(-(Date.now() - row.timestamp) / (7 * 24 * 3600 * 1000));
|
|
218
|
+
const priorityScore = row.priority;
|
|
219
|
+
const accessBonus = Math.min(row.access_count * 0.05, 0.3);
|
|
220
|
+
return {
|
|
221
|
+
content: row.content,
|
|
222
|
+
id: row.id,
|
|
223
|
+
score: vectorScore * 0.5 + priorityScore * 0.25 + recencyScore * 0.15 + accessBonus * 0.1
|
|
224
|
+
};
|
|
225
|
+
});
|
|
226
|
+
const podMatches = podFindings
|
|
227
|
+
.filter(f => f.content.toLowerCase().includes(queryLower))
|
|
228
|
+
.map(f => ({ content: f.content, score: 0.95 }));
|
|
229
|
+
const top = [...scored, ...podMatches]
|
|
230
|
+
.sort((a, b) => b.score - a.score)
|
|
231
|
+
.slice(0, k);
|
|
232
|
+
// Increment access count for recalled items
|
|
233
|
+
if (top.length > 0) {
|
|
234
|
+
const ids = top.filter(t => t.id).map(t => `'${t.id}'`).join(',');
|
|
235
|
+
if (ids) {
|
|
236
|
+
this.db.exec(`UPDATE memories SET access_count = access_count + 1 WHERE id IN(${ids})`);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
return top.map(r => r.content);
|
|
240
|
+
}
|
|
241
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
242
|
+
// Vector Index Helpers
|
|
243
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
244
|
+
// In-RAM embedding store (id → float[] vector)
|
|
245
|
+
vectorEmbeddings = new Map();
|
|
246
|
+
indexMemory(memoryId, content) {
|
|
247
|
+
const vector = this.embedder.localEmbed(content);
|
|
248
|
+
const vid = this.nextVectorId++;
|
|
249
|
+
this.vectorEmbeddings.set(vid, vector);
|
|
250
|
+
this.vectorIdToMemoryId.set(vid, memoryId);
|
|
251
|
+
this.memoryIdToVectorId.set(memoryId, vid);
|
|
252
|
+
}
|
|
253
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
254
|
+
// Zettelkasten — semantic linking
|
|
255
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
256
|
+
autoLink(newItem) {
|
|
257
|
+
const recentRows = this.db.prepare(`
|
|
258
|
+
SELECT id, content, tags FROM memories
|
|
259
|
+
WHERE id != ? ORDER BY timestamp DESC LIMIT 50
|
|
260
|
+
`).all(newItem.id);
|
|
261
|
+
const newWords = newItem.content.toLowerCase().split(/\s+/);
|
|
262
|
+
for (const row of recentRows) {
|
|
263
|
+
const existingWords = row.content.toLowerCase().split(/\s+/);
|
|
264
|
+
const similarity = this.wordOverlap(newWords, existingWords);
|
|
265
|
+
if (similarity > 0.25) {
|
|
266
|
+
this.db.prepare(`
|
|
267
|
+
INSERT OR IGNORE INTO memory_links(from_id, to_id, weight, type)
|
|
268
|
+
VALUES(?, ?, ?, 'semantic')
|
|
269
|
+
`).run(newItem.id, row.id, similarity);
|
|
270
|
+
}
|
|
271
|
+
// Tag-based linking
|
|
272
|
+
const sharedTags = newItem.tags.filter(t => JSON.parse(row.tags ?? '[]').includes(t));
|
|
273
|
+
if (sharedTags.length > 0) {
|
|
274
|
+
this.db.prepare(`
|
|
275
|
+
INSERT OR IGNORE INTO memory_links(from_id, to_id, weight, type)
|
|
276
|
+
VALUES(?, ?, ?, 'tagged')
|
|
277
|
+
`).run(newItem.id, row.id, 0.6 + sharedTags.length * 0.1);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
/** Get a memory's connected context network */
|
|
282
|
+
getNetwork(id, depth = 1) {
|
|
283
|
+
const visited = new Set([id]);
|
|
284
|
+
const result = [];
|
|
285
|
+
let frontier = [id];
|
|
286
|
+
for (let d = 0; d < depth; d++) {
|
|
287
|
+
const next = [];
|
|
288
|
+
for (const fromId of frontier) {
|
|
289
|
+
const links = this.db.prepare(`
|
|
290
|
+
SELECT to_id FROM memory_links WHERE from_id = ? ORDER BY weight DESC LIMIT 5
|
|
291
|
+
`).all(fromId);
|
|
292
|
+
for (const link of links) {
|
|
293
|
+
const toId = link.to_id;
|
|
294
|
+
if (!visited.has(toId)) {
|
|
295
|
+
visited.add(toId);
|
|
296
|
+
next.push(toId);
|
|
297
|
+
const row = this.db.prepare('SELECT * FROM memories WHERE id = ?').get(toId);
|
|
298
|
+
if (row)
|
|
299
|
+
result.push(this.rowToItem(row));
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
frontier = next;
|
|
304
|
+
}
|
|
305
|
+
return result;
|
|
306
|
+
}
|
|
307
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
308
|
+
// Fission: broadcast high-value discoveries
|
|
309
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
310
|
+
fission(item) {
|
|
311
|
+
// Promote to cortex immediately (permanently important)
|
|
312
|
+
this.db.prepare(`
|
|
313
|
+
UPDATE memories SET tier = 'cortex', priority = MIN(priority * 1.2, 2.0)
|
|
314
|
+
WHERE id = ?
|
|
315
|
+
`).run(item.id);
|
|
316
|
+
// Strengthen links TO this item (makes it easier to discover via related queries)
|
|
317
|
+
this.db.prepare(`
|
|
318
|
+
UPDATE memory_links SET weight = MIN(weight * 1.3, 1.0) WHERE to_id = ?
|
|
319
|
+
`).run(item.id);
|
|
320
|
+
}
|
|
321
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
322
|
+
// Tier Management
|
|
323
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
324
|
+
consolidate() {
|
|
325
|
+
const sorted = [...this.prefrontal].sort((a, b) => b.priority - a.priority);
|
|
326
|
+
const keepInRam = sorted.slice(0, Math.ceil(this.maxPrefrontal / 2));
|
|
327
|
+
const toPromote = sorted.slice(Math.ceil(this.maxPrefrontal / 2));
|
|
328
|
+
this.prefrontal = keepInRam;
|
|
329
|
+
if (toPromote.length > 0) {
|
|
330
|
+
const promoteStmt = this.db.prepare(`UPDATE memories SET tier = 'hippocampus' WHERE id = ? `);
|
|
331
|
+
const txn = this.db.transaction((items) => {
|
|
332
|
+
for (const item of items) {
|
|
333
|
+
promoteStmt.run(item.id);
|
|
334
|
+
item.tier = 'hippocampus';
|
|
335
|
+
}
|
|
336
|
+
});
|
|
337
|
+
txn(toPromote);
|
|
338
|
+
}
|
|
339
|
+
// Compact hippocampus to cortex if overfull
|
|
340
|
+
const hippoCount = this.db.prepare(`SELECT COUNT(*) as c FROM memories WHERE tier = 'hippocampus'`).get().c;
|
|
341
|
+
if (hippoCount > this.maxHippocampus) {
|
|
342
|
+
this.db.prepare(`
|
|
343
|
+
UPDATE memories SET tier = 'cortex'
|
|
344
|
+
WHERE tier = 'hippocampus'
|
|
345
|
+
AND id IN(
|
|
346
|
+
SELECT id FROM memories WHERE tier = 'hippocampus'
|
|
347
|
+
ORDER BY priority DESC LIMIT ?
|
|
348
|
+
)
|
|
349
|
+
`).run(hippoCount - this.maxHippocampus);
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
353
|
+
// Utilities
|
|
354
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
355
|
+
wordOverlap(a, b) {
|
|
356
|
+
const setA = new Set(a.filter(w => w.length > 2));
|
|
357
|
+
const setB = new Set(b.filter(w => w.length > 2));
|
|
358
|
+
if (setA.size === 0 || setB.size === 0)
|
|
359
|
+
return 0;
|
|
360
|
+
const intersection = [...setA].filter(x => setB.has(x));
|
|
361
|
+
const union = new Set([...setA, ...setB]);
|
|
362
|
+
return intersection.length / union.size;
|
|
363
|
+
}
|
|
364
|
+
rowToItem(row) {
|
|
365
|
+
return {
|
|
366
|
+
id: row.id,
|
|
367
|
+
content: row.content,
|
|
368
|
+
priority: row.priority,
|
|
369
|
+
timestamp: row.timestamp,
|
|
370
|
+
tags: JSON.parse(row.tags ?? '[]'),
|
|
371
|
+
tier: row.tier,
|
|
372
|
+
sessionId: row.session_id,
|
|
373
|
+
accessCount: row.access_count,
|
|
374
|
+
parentId: row.parent_id,
|
|
375
|
+
depth: row.depth
|
|
376
|
+
};
|
|
377
|
+
}
|
|
378
|
+
getAllItems() {
|
|
379
|
+
const rows = this.db.prepare('SELECT * FROM memories').all();
|
|
380
|
+
return rows.map(row => this.rowToItem(row));
|
|
381
|
+
}
|
|
382
|
+
getStats() {
|
|
383
|
+
const counts = this.db.prepare(`
|
|
384
|
+
SELECT tier, COUNT(*) as c FROM memories GROUP BY tier
|
|
385
|
+
`).all();
|
|
386
|
+
const tierMap = {};
|
|
387
|
+
for (const row of counts)
|
|
388
|
+
tierMap[row.tier] = row.c;
|
|
389
|
+
const linkCount = this.db.prepare('SELECT COUNT(*) as c FROM memory_links').get().c;
|
|
390
|
+
const oldest = this.db.prepare('SELECT MIN(timestamp) as t FROM memories').get().t;
|
|
391
|
+
const topTagsRaw = this.db.prepare(`
|
|
392
|
+
SELECT value as tag, COUNT(*) as c
|
|
393
|
+
FROM memories, json_each(memories.tags)
|
|
394
|
+
GROUP BY value ORDER BY c DESC LIMIT 5
|
|
395
|
+
`).all();
|
|
396
|
+
return {
|
|
397
|
+
prefrontal: tierMap['prefrontal'] ?? 0,
|
|
398
|
+
hippocampus: tierMap['hippocampus'] ?? 0,
|
|
399
|
+
cortex: tierMap['cortex'] ?? 0,
|
|
400
|
+
totalLinks: linkCount,
|
|
401
|
+
oldestEntry: oldest,
|
|
402
|
+
topTags: topTagsRaw.map(r => r.tag)
|
|
403
|
+
};
|
|
404
|
+
}
|
|
405
|
+
clear() {
|
|
406
|
+
this.prefrontal = [];
|
|
407
|
+
this.db.exec('DELETE FROM memory_links; DELETE FROM memories;');
|
|
408
|
+
}
|
|
409
|
+
/**
|
|
410
|
+
* Query memories by tag using direct SQL — precise, no fuzzy matching.
|
|
411
|
+
* Returns memories that contain ANY of the specified tags.
|
|
412
|
+
*/
|
|
413
|
+
queryByTags(tags, limit = 20) {
|
|
414
|
+
if (tags.length === 0)
|
|
415
|
+
return [];
|
|
416
|
+
const placeholders = tags.map(() => '?').join(',');
|
|
417
|
+
const rows = this.db.prepare(`
|
|
418
|
+
SELECT DISTINCT m.* FROM memories m, json_each(m.tags) jt
|
|
419
|
+
WHERE jt.value IN (${placeholders})
|
|
420
|
+
ORDER BY m.priority DESC, m.timestamp DESC
|
|
421
|
+
LIMIT ?
|
|
422
|
+
`).all(...tags, limit);
|
|
423
|
+
return rows.map(row => this.rowToItem(row));
|
|
424
|
+
}
|
|
425
|
+
close() {
|
|
426
|
+
this.flush();
|
|
427
|
+
this.db.close();
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
export const createMemoryEngine = (dbPath) => new MemoryEngine(dbPath);
|
|
431
|
+
//# sourceMappingURL=memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/engines/memory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Meta-Learner for Adaptive Compression
|
|
3
|
+
*
|
|
4
|
+
* Implements adaptive interpolation and token retention.
|
|
5
|
+
*/
|
|
6
|
+
export interface CompressionFeatures {
|
|
7
|
+
entropy: number;
|
|
8
|
+
taskEmbedding: number[];
|
|
9
|
+
layerDepth: number;
|
|
10
|
+
magnitudeRatio: number;
|
|
11
|
+
cosineSimilarity: number;
|
|
12
|
+
}
|
|
13
|
+
export declare class AdaptiveInterpolator {
|
|
14
|
+
private w1;
|
|
15
|
+
private w2;
|
|
16
|
+
private b;
|
|
17
|
+
/**
|
|
18
|
+
* Adaptive interpolation: t^{l,l-1} = σ(w1 * mag_ratio + w2 * cos_sim + b)
|
|
19
|
+
* Bounds t to [0.3, 0.7]
|
|
20
|
+
*/
|
|
21
|
+
computeT(features: CompressionFeatures): number;
|
|
22
|
+
/**
|
|
23
|
+
* Update weights (simple gradient descent)
|
|
24
|
+
*/
|
|
25
|
+
update(features: CompressionFeatures, targetT: number, learningRate?: number): void;
|
|
26
|
+
/**
|
|
27
|
+
* Extract features from layer outputs
|
|
28
|
+
*/
|
|
29
|
+
extractFeatures(attentionMatrix: number[][], taskQuery: string, layerIndex: number, totalLayers: number, currentLayer: number[], previousLayer: number[]): CompressionFeatures;
|
|
30
|
+
private computeEntropy;
|
|
31
|
+
private simpleEmbedding;
|
|
32
|
+
private magnitudeRatio;
|
|
33
|
+
private cosineSimilarity;
|
|
34
|
+
}
|
|
35
|
+
export declare class TokenRetention {
|
|
36
|
+
private gamma;
|
|
37
|
+
setGamma(g: number): void;
|
|
38
|
+
/**
|
|
39
|
+
* Token Retention Threshold:
|
|
40
|
+
* I = {i | d_i < d_min + (d_max - d_min) * γ}
|
|
41
|
+
* where d_i = (1/π) * arccos(cos_sim_i) is angular distance
|
|
42
|
+
*/
|
|
43
|
+
computeRetentionMask(currentLayer: number[][], previousLayer: number[][]): boolean[];
|
|
44
|
+
/**
|
|
45
|
+
* Get retained tokens
|
|
46
|
+
*/
|
|
47
|
+
getRetained(layer: number[][], mask: boolean[]): number[][];
|
|
48
|
+
/**
|
|
49
|
+
* Get removed tokens
|
|
50
|
+
*/
|
|
51
|
+
getRemoved(layer: number[][], mask: boolean[]): number[][];
|
|
52
|
+
/**
|
|
53
|
+
* Estimate retention ratio
|
|
54
|
+
*/
|
|
55
|
+
getRetentionRatio(mask: boolean[]): number;
|
|
56
|
+
private cosineSimilarity;
|
|
57
|
+
}
|
|
58
|
+
export declare class MetaLearner {
|
|
59
|
+
private interpolator;
|
|
60
|
+
private retention;
|
|
61
|
+
constructor();
|
|
62
|
+
/**
|
|
63
|
+
* Predict compression decision
|
|
64
|
+
*/
|
|
65
|
+
predict(attentionMatrix: number[][], taskQuery: string, layerIndex: number, totalLayers: number, currentLayer: number[], previousLayer: number[]): {
|
|
66
|
+
shouldMerge: boolean;
|
|
67
|
+
t: number;
|
|
68
|
+
gamma: number;
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* Apply compression and get result
|
|
72
|
+
*/
|
|
73
|
+
compress(currentLayer: number[][], previousLayer: number[][], taskQuery: string, layerIndex: number, totalLayers: number, attentionMatrix: number[][]): {
|
|
74
|
+
merged: number[][];
|
|
75
|
+
retained: number[][];
|
|
76
|
+
removed: number[][];
|
|
77
|
+
mask: boolean[];
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* Update from feedback (simple learning)
|
|
81
|
+
*/
|
|
82
|
+
update(features: CompressionFeatures, actualQuality: number, expectedQuality: number): void;
|
|
83
|
+
}
|
|
84
|
+
export declare const createMetaLearner: () => MetaLearner;
|
|
85
|
+
export declare const createAdaptiveInterpolator: () => AdaptiveInterpolator;
|
|
86
|
+
export declare const createTokenRetention: () => TokenRetention;
|
|
87
|
+
//# sourceMappingURL=meta-learner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta-learner.d.ts","sourceRoot":"","sources":["../../src/engines/meta-learner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,EAAE,CAAe;IACzB,OAAO,CAAC,EAAE,CAAe;IACzB,OAAO,CAAC,CAAC,CAAe;IAExB;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,GAAG,MAAM;IAW/C;;OAEG;IACH,MAAM,CAAC,QAAQ,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,GAAE,MAAa,GAAG,IAAI;IAUzF;;OAEG;IACH,eAAe,CACb,eAAe,EAAE,MAAM,EAAE,EAAE,EAC3B,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EAAE,EACtB,aAAa,EAAE,MAAM,EAAE,GACtB,mBAAmB;IAyBtB,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,gBAAgB;CAMzB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,KAAK,CAAgB;IAE7B,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAIzB;;;;OAIG;IACH,oBAAoB,CAClB,YAAY,EAAE,MAAM,EAAE,EAAE,EACxB,aAAa,EAAE,MAAM,EAAE,EAAE,GACxB,OAAO,EAAE;IAiCZ;;OAEG;IACH,WAAW,CACT,KAAK,EAAE,MAAM,EAAE,EAAE,EACjB,IAAI,EAAE,OAAO,EAAE,GACd,MAAM,EAAE,EAAE;IAIb;;OAEG;IACH,UAAU,CACR,KAAK,EAAE,MAAM,EAAE,EAAE,EACjB,IAAI,EAAE,OAAO,EAAE,GACd,MAAM,EAAE,EAAE;IAIb;;OAEG;IACH,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM;IAK1C,OAAO,CAAC,gBAAgB;CAMzB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,SAAS,CAAiB;;IAOlC;;OAEG;IACH,OAAO,CACL,eAAe,EAAE,MAAM,EAAE,EAAE,EAC3B,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EAAE,EACtB,aAAa,EAAE,MAAM,EAAE,GACtB;QACD,WAAW,EAAE,OAAO,CAAC;QACrB,CAAC,EAAE,MAAM,CAAC;QACV,KAAK,EAAE,MAAM,CAAC;KACf;IA4BD;;OAEG;IACH,QAAQ,CACN,YAAY,EAAE,MAAM,EAAE,EAAE,EACxB,aAAa,EAAE,MAAM,EAAE,EAAE,EACzB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,MAAM,EAAE,EAAE,GAC1B;QACD,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC;QACnB,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC;QACrB,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC;QACpB,IAAI,EAAE,OAAO,EAAE,CAAC;KACjB;IA6CD;;OAEG;IACH,MAAM,CACJ,QAAQ,EAAE,mBAAmB,EAC7B,aAAa,EAAE,MAAM,EACrB,eAAe,EAAE,MAAM,GACtB,IAAI;CAQR;AAED,eAAO,MAAM,iBAAiB,mBAA0B,CAAC;AACzD,eAAO,MAAM,0BAA0B,4BAAmC,CAAC;AAC3E,eAAO,MAAM,oBAAoB,sBAA6B,CAAC"}
|