@framers/agentos 0.1.121 → 0.1.123

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 (136) hide show
  1. package/dist/api/TextToolCallParser.d.ts +61 -0
  2. package/dist/api/TextToolCallParser.d.ts.map +1 -0
  3. package/dist/api/TextToolCallParser.js +137 -0
  4. package/dist/api/TextToolCallParser.js.map +1 -0
  5. package/dist/api/agent.d.ts +7 -0
  6. package/dist/api/agent.d.ts.map +1 -1
  7. package/dist/api/agent.js +1 -0
  8. package/dist/api/agent.js.map +1 -1
  9. package/dist/api/generateText.d.ts +105 -0
  10. package/dist/api/generateText.d.ts.map +1 -1
  11. package/dist/api/generateText.js +191 -2
  12. package/dist/api/generateText.js.map +1 -1
  13. package/dist/cognitive_substrate/GMI.d.ts.map +1 -1
  14. package/dist/cognitive_substrate/GMI.js +27 -1
  15. package/dist/cognitive_substrate/GMI.js.map +1 -1
  16. package/dist/cognitive_substrate/IGMI.d.ts +5 -0
  17. package/dist/cognitive_substrate/IGMI.d.ts.map +1 -1
  18. package/dist/cognitive_substrate/IGMI.js.map +1 -1
  19. package/dist/emergent/AdaptPersonalityTool.d.ts +142 -0
  20. package/dist/emergent/AdaptPersonalityTool.d.ts.map +1 -0
  21. package/dist/emergent/AdaptPersonalityTool.js +198 -0
  22. package/dist/emergent/AdaptPersonalityTool.js.map +1 -0
  23. package/dist/emergent/CreateWorkflowTool.d.ts +182 -0
  24. package/dist/emergent/CreateWorkflowTool.d.ts.map +1 -0
  25. package/dist/emergent/CreateWorkflowTool.js +330 -0
  26. package/dist/emergent/CreateWorkflowTool.js.map +1 -0
  27. package/dist/emergent/EmergentCapabilityEngine.d.ts +68 -0
  28. package/dist/emergent/EmergentCapabilityEngine.d.ts.map +1 -1
  29. package/dist/emergent/EmergentCapabilityEngine.js +99 -0
  30. package/dist/emergent/EmergentCapabilityEngine.js.map +1 -1
  31. package/dist/emergent/ManageSkillsTool.d.ts +154 -0
  32. package/dist/emergent/ManageSkillsTool.d.ts.map +1 -0
  33. package/dist/emergent/ManageSkillsTool.js +241 -0
  34. package/dist/emergent/ManageSkillsTool.js.map +1 -0
  35. package/dist/emergent/PersonalityMutationStore.d.ts +183 -0
  36. package/dist/emergent/PersonalityMutationStore.d.ts.map +1 -0
  37. package/dist/emergent/PersonalityMutationStore.js +222 -0
  38. package/dist/emergent/PersonalityMutationStore.js.map +1 -0
  39. package/dist/emergent/SelfEvaluateTool.d.ts +199 -0
  40. package/dist/emergent/SelfEvaluateTool.d.ts.map +1 -0
  41. package/dist/emergent/SelfEvaluateTool.js +410 -0
  42. package/dist/emergent/SelfEvaluateTool.js.map +1 -0
  43. package/dist/emergent/SelfImprovementConfig.d.ts +177 -0
  44. package/dist/emergent/SelfImprovementConfig.d.ts.map +1 -0
  45. package/dist/emergent/SelfImprovementConfig.js +43 -0
  46. package/dist/emergent/SelfImprovementConfig.js.map +1 -0
  47. package/dist/emergent/index.d.ts +8 -0
  48. package/dist/emergent/index.d.ts.map +1 -1
  49. package/dist/emergent/index.js +6 -0
  50. package/dist/emergent/index.js.map +1 -1
  51. package/dist/emergent/types.d.ts +9 -0
  52. package/dist/emergent/types.d.ts.map +1 -1
  53. package/dist/emergent/types.js.map +1 -1
  54. package/dist/memory/AgentMemory.d.ts +2 -2
  55. package/dist/memory/AgentMemory.d.ts.map +1 -1
  56. package/dist/memory/AgentMemory.js +4 -3
  57. package/dist/memory/AgentMemory.js.map +1 -1
  58. package/dist/memory/consolidation/ConsolidationLoop.d.ts +31 -4
  59. package/dist/memory/consolidation/ConsolidationLoop.d.ts.map +1 -1
  60. package/dist/memory/consolidation/ConsolidationLoop.js +112 -69
  61. package/dist/memory/consolidation/ConsolidationLoop.js.map +1 -1
  62. package/dist/memory/facade/Memory.d.ts +12 -6
  63. package/dist/memory/facade/Memory.d.ts.map +1 -1
  64. package/dist/memory/facade/Memory.js +216 -212
  65. package/dist/memory/facade/Memory.js.map +1 -1
  66. package/dist/memory/facade/types.d.ts +11 -1
  67. package/dist/memory/facade/types.d.ts.map +1 -1
  68. package/dist/memory/feedback/RetrievalFeedbackSignal.d.ts +7 -10
  69. package/dist/memory/feedback/RetrievalFeedbackSignal.d.ts.map +1 -1
  70. package/dist/memory/feedback/RetrievalFeedbackSignal.js +40 -36
  71. package/dist/memory/feedback/RetrievalFeedbackSignal.js.map +1 -1
  72. package/dist/memory/io/ChatGptImporter.d.ts.map +1 -1
  73. package/dist/memory/io/ChatGptImporter.js +24 -18
  74. package/dist/memory/io/ChatGptImporter.js.map +1 -1
  75. package/dist/memory/io/CsvImporter.d.ts.map +1 -1
  76. package/dist/memory/io/CsvImporter.js +21 -8
  77. package/dist/memory/io/CsvImporter.js.map +1 -1
  78. package/dist/memory/io/JsonExporter.d.ts.map +1 -1
  79. package/dist/memory/io/JsonExporter.js +6 -17
  80. package/dist/memory/io/JsonExporter.js.map +1 -1
  81. package/dist/memory/io/JsonImporter.d.ts +3 -0
  82. package/dist/memory/io/JsonImporter.d.ts.map +1 -1
  83. package/dist/memory/io/JsonImporter.js +58 -29
  84. package/dist/memory/io/JsonImporter.js.map +1 -1
  85. package/dist/memory/io/MarkdownExporter.d.ts.map +1 -1
  86. package/dist/memory/io/MarkdownExporter.js +1 -4
  87. package/dist/memory/io/MarkdownExporter.js.map +1 -1
  88. package/dist/memory/io/MarkdownImporter.d.ts.map +1 -1
  89. package/dist/memory/io/MarkdownImporter.js +12 -7
  90. package/dist/memory/io/MarkdownImporter.js.map +1 -1
  91. package/dist/memory/io/ObsidianExporter.d.ts +14 -9
  92. package/dist/memory/io/ObsidianExporter.d.ts.map +1 -1
  93. package/dist/memory/io/ObsidianExporter.js +35 -23
  94. package/dist/memory/io/ObsidianExporter.js.map +1 -1
  95. package/dist/memory/io/ObsidianImporter.d.ts.map +1 -1
  96. package/dist/memory/io/ObsidianImporter.js +34 -27
  97. package/dist/memory/io/ObsidianImporter.js.map +1 -1
  98. package/dist/memory/io/SqliteExporter.d.ts +1 -2
  99. package/dist/memory/io/SqliteExporter.d.ts.map +1 -1
  100. package/dist/memory/io/SqliteExporter.js +2 -3
  101. package/dist/memory/io/SqliteExporter.js.map +1 -1
  102. package/dist/memory/io/SqliteImporter.d.ts +3 -0
  103. package/dist/memory/io/SqliteImporter.d.ts.map +1 -1
  104. package/dist/memory/io/SqliteImporter.js +62 -27
  105. package/dist/memory/io/SqliteImporter.js.map +1 -1
  106. package/dist/memory/store/SqliteBrain.d.ts +84 -24
  107. package/dist/memory/store/SqliteBrain.d.ts.map +1 -1
  108. package/dist/memory/store/SqliteBrain.js +139 -55
  109. package/dist/memory/store/SqliteBrain.js.map +1 -1
  110. package/dist/memory/store/SqliteKnowledgeGraph.d.ts +6 -2
  111. package/dist/memory/store/SqliteKnowledgeGraph.d.ts.map +1 -1
  112. package/dist/memory/store/SqliteKnowledgeGraph.js +94 -120
  113. package/dist/memory/store/SqliteKnowledgeGraph.js.map +1 -1
  114. package/dist/memory/store/SqliteMemoryGraph.d.ts +4 -5
  115. package/dist/memory/store/SqliteMemoryGraph.d.ts.map +1 -1
  116. package/dist/memory/store/SqliteMemoryGraph.js +31 -41
  117. package/dist/memory/store/SqliteMemoryGraph.js.map +1 -1
  118. package/dist/memory/tools/MemoryAddTool.d.ts.map +1 -1
  119. package/dist/memory/tools/MemoryAddTool.js +12 -16
  120. package/dist/memory/tools/MemoryAddTool.js.map +1 -1
  121. package/dist/memory/tools/MemoryDeleteTool.d.ts.map +1 -1
  122. package/dist/memory/tools/MemoryDeleteTool.js +1 -3
  123. package/dist/memory/tools/MemoryDeleteTool.js.map +1 -1
  124. package/dist/memory/tools/MemoryMergeTool.d.ts.map +1 -1
  125. package/dist/memory/tools/MemoryMergeTool.js +13 -22
  126. package/dist/memory/tools/MemoryMergeTool.js.map +1 -1
  127. package/dist/memory/tools/MemorySearchTool.js +4 -4
  128. package/dist/memory/tools/MemorySearchTool.js.map +1 -1
  129. package/dist/memory/tools/MemoryUpdateTool.d.ts.map +1 -1
  130. package/dist/memory/tools/MemoryUpdateTool.js +10 -18
  131. package/dist/memory/tools/MemoryUpdateTool.js.map +1 -1
  132. package/dist/orchestration/runtime/LoopController.d.ts +7 -0
  133. package/dist/orchestration/runtime/LoopController.d.ts.map +1 -1
  134. package/dist/orchestration/runtime/LoopController.js +7 -0
  135. package/dist/orchestration/runtime/LoopController.js.map +1 -1
  136. package/package.json +1 -1
@@ -90,7 +90,7 @@ export class ObsidianImporter extends MarkdownImporter {
90
90
  inlineTags.push(tagMatch[1]);
91
91
  }
92
92
  if (inlineTags.length > 0) {
93
- this._mergeTagsIntoTrace(traceId, inlineTags, result);
93
+ await this._mergeTagsIntoTrace(traceId, inlineTags, result);
94
94
  }
95
95
  // ---- 3. Parse wikilinks and create knowledge_edges ----
96
96
  const wikiTargets = [];
@@ -101,7 +101,7 @@ export class ObsidianImporter extends MarkdownImporter {
101
101
  wikiTargets.push(wikilinkMatch[1].trim());
102
102
  }
103
103
  for (const target of wikiTargets) {
104
- this._upsertWikiEdge(traceId, target, result);
104
+ await this._upsertWikiEdge(traceId, target, result);
105
105
  }
106
106
  }
107
107
  // -------------------------------------------------------------------------
@@ -116,12 +116,10 @@ export class ObsidianImporter extends MarkdownImporter {
116
116
  * @param newTags - Hashtag names to add (without the leading `#`).
117
117
  * @param result - Mutable result accumulator (errors recorded here).
118
118
  */
119
- _mergeTagsIntoTrace(traceId, newTags, result) {
119
+ async _mergeTagsIntoTrace(traceId, newTags, result) {
120
120
  try {
121
- const db = this.brain.db;
122
- const row = db
123
- .prepare('SELECT tags FROM memory_traces WHERE id = ?')
124
- .get(traceId);
121
+ const brainRef = this.brain;
122
+ const row = await brainRef.get('SELECT tags FROM memory_traces WHERE id = ?', [traceId]);
125
123
  if (!row)
126
124
  return;
127
125
  let existing = [];
@@ -132,7 +130,7 @@ export class ObsidianImporter extends MarkdownImporter {
132
130
  existing = [];
133
131
  }
134
132
  const merged = Array.from(new Set([...existing, ...newTags]));
135
- db.prepare('UPDATE memory_traces SET tags = ? WHERE id = ?').run(JSON.stringify(merged), traceId);
133
+ await brainRef.run('UPDATE memory_traces SET tags = ? WHERE id = ?', [JSON.stringify(merged), traceId]);
136
134
  }
137
135
  catch (err) {
138
136
  result.errors.push(`Tag merge error for trace ${traceId}: ${String(err)}`);
@@ -155,10 +153,9 @@ export class ObsidianImporter extends MarkdownImporter {
155
153
  * @param targetLabel - The label of the linked note (wikilink target).
156
154
  * @param result - Mutable result accumulator.
157
155
  */
158
- _upsertWikiEdge(sourceTraceId, targetLabel, result) {
156
+ async _upsertWikiEdge(sourceTraceId, targetLabel, result) {
159
157
  try {
160
- // Access brain.db through the protected field inherited from MarkdownImporter.
161
- const db = this.brain.db;
158
+ const brainRef = this.brain;
162
159
  // ---- Upsert source knowledge node for the trace ----
163
160
  // We use the trace ID itself as the node label so the graph stays navigable.
164
161
  const sourceLabel = `trace:${sourceTraceId}`;
@@ -167,17 +164,20 @@ export class ObsidianImporter extends MarkdownImporter {
167
164
  .update(`wiki-source::${sourceTraceId}`)
168
165
  .digest('hex');
169
166
  let sourceNodeId;
170
- const existingSource = db
171
- .prepare(`SELECT id FROM knowledge_nodes WHERE label = ? LIMIT 1`)
172
- .get(sourceLabel);
167
+ const existingSource = await brainRef.get(`SELECT id FROM knowledge_nodes WHERE label = ? LIMIT 1`, [sourceLabel]);
173
168
  if (existingSource) {
174
169
  sourceNodeId = existingSource.id;
175
170
  }
176
171
  else {
177
172
  sourceNodeId = `kn_${uuidv4()}`;
178
- db.prepare(`INSERT OR IGNORE INTO knowledge_nodes
173
+ await brainRef.run(`INSERT OR IGNORE INTO knowledge_nodes
179
174
  (id, type, label, properties, embedding, confidence, source, created_at)
180
- VALUES (?, 'trace', ?, ?, NULL, 1.0, '{}', ?)`).run(sourceNodeId, sourceLabel, JSON.stringify({ import_hash: sourceHash, trace_id: sourceTraceId }), Date.now());
175
+ VALUES (?, 'trace', ?, ?, NULL, 1.0, '{}', ?)`, [
176
+ sourceNodeId,
177
+ sourceLabel,
178
+ JSON.stringify({ import_hash: sourceHash, trace_id: sourceTraceId }),
179
+ Date.now(),
180
+ ]);
181
181
  }
182
182
  // ---- Upsert target knowledge node for the wikilink label ----
183
183
  const targetHash = crypto
@@ -185,17 +185,20 @@ export class ObsidianImporter extends MarkdownImporter {
185
185
  .update(`wiki::${targetLabel}`)
186
186
  .digest('hex');
187
187
  let targetNodeId;
188
- const existingTarget = db
189
- .prepare(`SELECT id FROM knowledge_nodes WHERE label = ? LIMIT 1`)
190
- .get(targetLabel);
188
+ const existingTarget = await brainRef.get(`SELECT id FROM knowledge_nodes WHERE label = ? LIMIT 1`, [targetLabel]);
191
189
  if (existingTarget) {
192
190
  targetNodeId = existingTarget.id;
193
191
  }
194
192
  else {
195
193
  targetNodeId = `kn_${uuidv4()}`;
196
- db.prepare(`INSERT OR IGNORE INTO knowledge_nodes
194
+ await brainRef.run(`INSERT OR IGNORE INTO knowledge_nodes
197
195
  (id, type, label, properties, embedding, confidence, source, created_at)
198
- VALUES (?, 'concept', ?, ?, NULL, 1.0, '{}', ?)`).run(targetNodeId, targetLabel, JSON.stringify({ import_hash: targetHash, obsidian_wikilink: true }), Date.now());
196
+ VALUES (?, 'concept', ?, ?, NULL, 1.0, '{}', ?)`, [
197
+ targetNodeId,
198
+ targetLabel,
199
+ JSON.stringify({ import_hash: targetHash, obsidian_wikilink: true }),
200
+ Date.now(),
201
+ ]);
199
202
  }
200
203
  // ---- Create the directed edge: source node → target node ----
201
204
  const edgeHash = crypto
@@ -203,14 +206,18 @@ export class ObsidianImporter extends MarkdownImporter {
203
206
  .update(`${sourceNodeId}::${targetNodeId}::related_to`)
204
207
  .digest('hex');
205
208
  // Check for existing edge before insert (extra safety beyond OR IGNORE).
206
- const existingEdge = db
207
- .prepare(`SELECT id FROM knowledge_edges
208
- WHERE json_extract(metadata, '$.import_hash') = ? LIMIT 1`)
209
- .get(edgeHash);
209
+ const existingEdge = await brainRef.get(`SELECT id FROM knowledge_edges
210
+ WHERE json_extract(metadata, '$.import_hash') = ? LIMIT 1`, [edgeHash]);
210
211
  if (!existingEdge) {
211
- db.prepare(`INSERT OR IGNORE INTO knowledge_edges
212
+ await brainRef.run(`INSERT OR IGNORE INTO knowledge_edges
212
213
  (id, source_id, target_id, type, weight, bidirectional, metadata, created_at)
213
- VALUES (?, ?, ?, 'related_to', 1.0, 0, ?, ?)`).run(`ke_${uuidv4()}`, sourceNodeId, targetNodeId, JSON.stringify({ import_hash: edgeHash, source: 'obsidian_wikilink', trace_id: sourceTraceId }), Date.now());
214
+ VALUES (?, ?, ?, 'related_to', 1.0, 0, ?, ?)`, [
215
+ `ke_${uuidv4()}`,
216
+ sourceNodeId,
217
+ targetNodeId,
218
+ JSON.stringify({ import_hash: edgeHash, source: 'obsidian_wikilink', trace_id: sourceTraceId }),
219
+ Date.now(),
220
+ ]);
214
221
  }
215
222
  }
216
223
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"ObsidianImporter.js","sourceRoot":"","sources":["../../../src/memory/io/ObsidianImporter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ObsidianImporter.js","sourceRoot":"","sources":["../../../src/memory/io/ObsidianImporter.ts"],"names":[],"mappings":"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"}
@@ -5,8 +5,7 @@
5
5
  * the database file to a specified output path. This is the highest-fidelity
6
6
  * export format — it preserves all tables, indexes, and metadata exactly.
7
7
  *
8
- * Because `better-sqlite3` keeps the file open in WAL mode, we use the
9
- * built-in `VACUUM INTO` SQL command (SQLite 3.27+) which atomically creates
8
+ * Uses the `VACUUM INTO` SQL command (SQLite 3.27+) which atomically creates
10
9
  * a clean, fully checkpointed copy without any WAL sidecar file.
11
10
  *
12
11
  * @module memory/io/SqliteExporter
@@ -1 +1 @@
1
- {"version":3,"file":"SqliteExporter.d.ts","sourceRoot":"","sources":["../../../src/memory/io/SqliteExporter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAM3D;;;;;;;;GAQG;AACH,qBAAa,cAAc;IAIb,OAAO,CAAC,QAAQ,CAAC,KAAK;IAHlC;;OAEG;gBAC0B,KAAK,EAAE,WAAW;IAM/C;;;;;;;;;;;;;OAaG;IACG,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;CAK1E"}
1
+ {"version":3,"file":"SqliteExporter.d.ts","sourceRoot":"","sources":["../../../src/memory/io/SqliteExporter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAM3D;;;;;;;;GAQG;AACH,qBAAa,cAAc;IAIb,OAAO,CAAC,QAAQ,CAAC,KAAK;IAHlC;;OAEG;gBAC0B,KAAK,EAAE,WAAW;IAM/C;;;;;;;;;;;;;OAaG;IACG,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;CAK1E"}
@@ -5,8 +5,7 @@
5
5
  * the database file to a specified output path. This is the highest-fidelity
6
6
  * export format — it preserves all tables, indexes, and metadata exactly.
7
7
  *
8
- * Because `better-sqlite3` keeps the file open in WAL mode, we use the
9
- * built-in `VACUUM INTO` SQL command (SQLite 3.27+) which atomically creates
8
+ * Uses the `VACUUM INTO` SQL command (SQLite 3.27+) which atomically creates
10
9
  * a clean, fully checkpointed copy without any WAL sidecar file.
11
10
  *
12
11
  * @module memory/io/SqliteExporter
@@ -50,7 +49,7 @@ export class SqliteExporter {
50
49
  async export(outputPath, _options) {
51
50
  // VACUUM INTO creates a compact, defragmented copy of the live database.
52
51
  // It is an atomic operation from SQLite's perspective.
53
- this.brain.db.exec(`VACUUM INTO '${outputPath.replace(/'/g, "''")}'`);
52
+ await this.brain.exec(`VACUUM INTO '${outputPath.replace(/'/g, "''")}'`);
54
53
  }
55
54
  }
56
55
  //# sourceMappingURL=SqliteExporter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SqliteExporter.js","sourceRoot":"","sources":["../../../src/memory/io/SqliteExporter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,8EAA8E;AAC9E,iBAAiB;AACjB,8EAA8E;AAE9E;;;;;;;;GAQG;AACH,MAAM,OAAO,cAAc;IACzB;;OAEG;IACH,YAA6B,KAAkB;QAAlB,UAAK,GAAL,KAAK,CAAa;IAAG,CAAC;IAEnD,4EAA4E;IAC5E,aAAa;IACb,4EAA4E;IAE5E;;;;;;;;;;;;;OAaG;IACH,KAAK,CAAC,MAAM,CAAC,UAAkB,EAAE,QAAwB;QACvD,yEAAyE;QACzE,uDAAuD;QACvD,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,gBAAgB,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IACxE,CAAC;CACF"}
1
+ {"version":3,"file":"SqliteExporter.js","sourceRoot":"","sources":["../../../src/memory/io/SqliteExporter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,8EAA8E;AAC9E,iBAAiB;AACjB,8EAA8E;AAE9E;;;;;;;;GAQG;AACH,MAAM,OAAO,cAAc;IACzB;;OAEG;IACH,YAA6B,KAAkB;QAAlB,UAAK,GAAL,KAAK,CAAa;IAAG,CAAC;IAEnD,4EAA4E;IAC5E,aAAa;IACb,4EAA4E;IAE5E;;;;;;;;;;;;;OAaG;IACH,KAAK,CAAC,MAAM,CAAC,UAAkB,EAAE,QAAwB;QACvD,yEAAyE;QACzE,uDAAuD;QACvD,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3E,CAAC;CACF"}
@@ -57,6 +57,7 @@ export declare class SqliteImporter {
57
57
  *
58
58
  * @param src - Open source `better-sqlite3` database.
59
59
  * @param result - Mutable result accumulator.
60
+ * @param trx - Transactional storage adapter for target writes.
60
61
  */
61
62
  private _mergeTraces;
62
63
  /**
@@ -66,6 +67,7 @@ export declare class SqliteImporter {
66
67
  *
67
68
  * @param src - Open source database.
68
69
  * @param result - Mutable result accumulator.
70
+ * @param trx - Transactional storage adapter for target writes.
69
71
  */
70
72
  private _mergeNodes;
71
73
  /**
@@ -76,6 +78,7 @@ export declare class SqliteImporter {
76
78
  *
77
79
  * @param src - Open source database.
78
80
  * @param result - Mutable result accumulator.
81
+ * @param trx - Transactional storage adapter for target writes.
79
82
  */
80
83
  private _mergeEdges;
81
84
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SqliteImporter.d.ts","sourceRoot":"","sources":["../../../src/memory/io/SqliteImporter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAgD3D;;;;;;;;GAQG;AACH,qBAAa,cAAc;IAIb,OAAO,CAAC,QAAQ,CAAC,KAAK;IAHlC;;OAEG;gBAC0B,KAAK,EAAE,WAAW;IAM/C;;;;;;;;OAQG;IACG,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IA8BvD;;OAEG;IACH,OAAO,CAAC,OAAO;IAIf;;;;;;;;OAQG;IACH,OAAO,CAAC,YAAY;IA8EpB;;;;;;;OAOG;IACH,OAAO,CAAC,WAAW;IA4CnB;;;;;;;;OAQG;IACH,OAAO,CAAC,WAAW;CAmDpB"}
1
+ {"version":3,"file":"SqliteImporter.d.ts","sourceRoot":"","sources":["../../../src/memory/io/SqliteImporter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAgD3D;;;;;;;;GAQG;AACH,qBAAa,cAAc;IAIb,OAAO,CAAC,QAAQ,CAAC,KAAK;IAHlC;;OAEG;gBAC0B,KAAK,EAAE,WAAW;IAM/C;;;;;;;;OAQG;IACG,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IA8BvD;;OAEG;IACH,OAAO,CAAC,OAAO;IAIf;;;;;;;;;OASG;YACW,YAAY;IA8E1B;;;;;;;;OAQG;YACW,WAAW;IA4CzB;;;;;;;;;OASG;YACW,WAAW;CAqD1B"}
@@ -65,11 +65,11 @@ export class SqliteImporter {
65
65
  }
66
66
  try {
67
67
  // Run the whole merge in a single transaction on the target brain.
68
- this.brain.db.transaction(() => {
69
- this._mergeTraces(sourceDb, result);
70
- this._mergeNodes(sourceDb, result);
71
- this._mergeEdges(sourceDb, result);
72
- })();
68
+ await this.brain.transaction(async (trx) => {
69
+ await this._mergeTraces(sourceDb, result, trx);
70
+ await this._mergeNodes(sourceDb, result, trx);
71
+ await this._mergeEdges(sourceDb, result, trx);
72
+ });
73
73
  }
74
74
  finally {
75
75
  sourceDb.close();
@@ -93,8 +93,9 @@ export class SqliteImporter {
93
93
  *
94
94
  * @param src - Open source `better-sqlite3` database.
95
95
  * @param result - Mutable result accumulator.
96
+ * @param trx - Transactional storage adapter for target writes.
96
97
  */
97
- _mergeTraces(src, result) {
98
+ async _mergeTraces(src, result, trx) {
98
99
  let sourceRows;
99
100
  try {
100
101
  sourceRows = src.prepare('SELECT * FROM memory_traces').all();
@@ -103,20 +104,20 @@ export class SqliteImporter {
103
104
  // Table might not exist in an incompatible source.
104
105
  return;
105
106
  }
106
- const checkStmt = this.brain.db.prepare(`SELECT id, created_at, tags
107
+ const checkSql = `SELECT id, created_at, tags
107
108
  FROM memory_traces
108
109
  WHERE json_extract(metadata, '$.import_hash') = ?
109
110
  OR content = ?
110
- LIMIT 1`);
111
- const insertStmt = this.brain.db.prepare(`INSERT INTO memory_traces
111
+ LIMIT 1`;
112
+ const insertSql = `INSERT INTO memory_traces
112
113
  (id, type, scope, content, embedding, strength, created_at, last_accessed,
113
114
  retrieval_count, tags, emotions, metadata, deleted)
114
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`);
115
- const updateTimestampStmt = this.brain.db.prepare(`UPDATE memory_traces SET created_at = ?, tags = ? WHERE id = ?`);
115
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`;
116
+ const updateTimestampSql = `UPDATE memory_traces SET created_at = ?, tags = ? WHERE id = ?`;
116
117
  for (const row of sourceRows) {
117
118
  try {
118
119
  const hash = this._sha256(row.content);
119
- const existing = checkStmt.get(hash, row.content);
120
+ const existing = await trx.get(checkSql, [hash, row.content]);
120
121
  if (existing) {
121
122
  // Keep the newer timestamp and union the tags.
122
123
  const newerAt = Math.max(existing.created_at, row.created_at);
@@ -131,7 +132,7 @@ export class SqliteImporter {
131
132
  }
132
133
  catch { /* ignore */ }
133
134
  const merged = Array.from(new Set([...existingTags, ...sourceTags]));
134
- updateTimestampStmt.run(newerAt, JSON.stringify(merged), existing.id);
135
+ await trx.run(updateTimestampSql, [newerAt, JSON.stringify(merged), existing.id]);
135
136
  result.skipped++;
136
137
  continue;
137
138
  }
@@ -142,7 +143,21 @@ export class SqliteImporter {
142
143
  }
143
144
  catch { /* ignore */ }
144
145
  meta['import_hash'] = hash;
145
- insertStmt.run(row.id ?? `mt_${uuidv4()}`, row.type ?? 'episodic', row.scope ?? 'user', row.content, row.embedding ?? null, row.strength ?? 1.0, row.created_at ?? Date.now(), row.last_accessed ?? null, row.retrieval_count ?? 0, row.tags ?? '[]', row.emotions ?? '{}', JSON.stringify(meta), row.deleted ?? 0);
146
+ await trx.run(insertSql, [
147
+ row.id ?? `mt_${uuidv4()}`,
148
+ row.type ?? 'episodic',
149
+ row.scope ?? 'user',
150
+ row.content,
151
+ row.embedding ?? null,
152
+ row.strength ?? 1.0,
153
+ row.created_at ?? Date.now(),
154
+ row.last_accessed ?? null,
155
+ row.retrieval_count ?? 0,
156
+ row.tags ?? '[]',
157
+ row.emotions ?? '{}',
158
+ JSON.stringify(meta),
159
+ row.deleted ?? 0,
160
+ ]);
146
161
  result.imported++;
147
162
  }
148
163
  catch (err) {
@@ -157,8 +172,9 @@ export class SqliteImporter {
157
172
  *
158
173
  * @param src - Open source database.
159
174
  * @param result - Mutable result accumulator.
175
+ * @param trx - Transactional storage adapter for target writes.
160
176
  */
161
- _mergeNodes(src, result) {
177
+ async _mergeNodes(src, result, trx) {
162
178
  let sourceRows;
163
179
  try {
164
180
  sourceRows = src.prepare('SELECT * FROM knowledge_nodes').all();
@@ -166,18 +182,27 @@ export class SqliteImporter {
166
182
  catch {
167
183
  return;
168
184
  }
169
- const checkStmt = this.brain.db.prepare(`SELECT id FROM knowledge_nodes WHERE label = ? AND type = ? LIMIT 1`);
170
- const insertStmt = this.brain.db.prepare(`INSERT OR IGNORE INTO knowledge_nodes
185
+ const checkSql = `SELECT id FROM knowledge_nodes WHERE label = ? AND type = ? LIMIT 1`;
186
+ const insertSql = `INSERT OR IGNORE INTO knowledge_nodes
171
187
  (id, type, label, properties, embedding, confidence, source, created_at)
172
- VALUES (?, ?, ?, ?, ?, ?, ?, ?)`);
188
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)`;
173
189
  for (const row of sourceRows) {
174
190
  try {
175
- const existing = checkStmt.get(row.label ?? '', row.type ?? '');
191
+ const existing = await trx.get(checkSql, [row.label ?? '', row.type ?? '']);
176
192
  if (existing) {
177
193
  result.skipped++;
178
194
  continue;
179
195
  }
180
- insertStmt.run(row.id ?? `kn_${uuidv4()}`, row.type ?? 'concept', row.label ?? '', row.properties ?? '{}', row.embedding ?? null, row.confidence ?? 1.0, row.source ?? '{}', row.created_at ?? Date.now());
196
+ await trx.run(insertSql, [
197
+ row.id ?? `kn_${uuidv4()}`,
198
+ row.type ?? 'concept',
199
+ row.label ?? '',
200
+ row.properties ?? '{}',
201
+ row.embedding ?? null,
202
+ row.confidence ?? 1.0,
203
+ row.source ?? '{}',
204
+ row.created_at ?? Date.now(),
205
+ ]);
181
206
  result.imported++;
182
207
  }
183
208
  catch (err) {
@@ -193,8 +218,9 @@ export class SqliteImporter {
193
218
  *
194
219
  * @param src - Open source database.
195
220
  * @param result - Mutable result accumulator.
221
+ * @param trx - Transactional storage adapter for target writes.
196
222
  */
197
- _mergeEdges(src, result) {
223
+ async _mergeEdges(src, result, trx) {
198
224
  let sourceRows;
199
225
  try {
200
226
  sourceRows = src.prepare('SELECT * FROM knowledge_edges').all();
@@ -202,24 +228,33 @@ export class SqliteImporter {
202
228
  catch {
203
229
  return;
204
230
  }
205
- const checkStmt = this.brain.db.prepare(`SELECT id FROM knowledge_edges
231
+ const checkSql = `SELECT id FROM knowledge_edges
206
232
  WHERE source_id = ? AND target_id = ? AND type = ?
207
- LIMIT 1`);
208
- const insertStmt = this.brain.db.prepare(`INSERT OR IGNORE INTO knowledge_edges
233
+ LIMIT 1`;
234
+ const insertSql = `INSERT OR IGNORE INTO knowledge_edges
209
235
  (id, source_id, target_id, type, weight, bidirectional, metadata, created_at)
210
- VALUES (?, ?, ?, ?, ?, ?, ?, ?)`);
236
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)`;
211
237
  for (const row of sourceRows) {
212
238
  try {
213
239
  if (!row.source_id || !row.target_id) {
214
240
  result.skipped++;
215
241
  continue;
216
242
  }
217
- const existing = checkStmt.get(row.source_id, row.target_id, row.type ?? '');
243
+ const existing = await trx.get(checkSql, [row.source_id, row.target_id, row.type ?? '']);
218
244
  if (existing) {
219
245
  result.skipped++;
220
246
  continue;
221
247
  }
222
- insertStmt.run(row.id ?? `ke_${uuidv4()}`, row.source_id, row.target_id, row.type ?? 'related_to', row.weight ?? 1.0, row.bidirectional ?? 0, row.metadata ?? '{}', row.created_at ?? Date.now());
248
+ await trx.run(insertSql, [
249
+ row.id ?? `ke_${uuidv4()}`,
250
+ row.source_id,
251
+ row.target_id,
252
+ row.type ?? 'related_to',
253
+ row.weight ?? 1.0,
254
+ row.bidirectional ?? 0,
255
+ row.metadata ?? '{}',
256
+ row.created_at ?? Date.now(),
257
+ ]);
223
258
  result.imported++;
224
259
  }
225
260
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"SqliteImporter.js","sourceRoot":"","sources":["../../../src/memory/io/SqliteImporter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SqliteImporter.js","sourceRoot":"","sources":["../../../src/memory/io/SqliteImporter.ts"],"names":[],"mappings":"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"}
@@ -15,7 +15,10 @@
15
15
  * - `retrieval_feedback` → Hebbian reinforcement ("neurons that fire together wire together")
16
16
  *
17
17
  * ## Storage design choices
18
- * - **WAL mode**: allows concurrent reads during writes (important for multi-subsystem access).
18
+ * - **Cross-platform**: Uses `@framers/sql-storage-adapter` StorageAdapter interface,
19
+ * enabling browser (IndexedDB/sql.js), mobile (Capacitor), and Postgres backends
20
+ * in addition to the default Node.js better-sqlite3 path.
21
+ * - **WAL mode**: allows concurrent reads during writes (when adapter supports it).
19
22
  * - **FTS5 with Porter tokenizer**: enables fast full-text search over memory content with
20
23
  * morphological stemming (retrieval cue → "retriev*").
21
24
  * - **Embeddings as BLOBs**: raw Float32Array buffers stored directly — no external vector DB
@@ -25,43 +28,52 @@
25
28
  *
26
29
  * @module memory/store/SqliteBrain
27
30
  */
28
- import Database from 'better-sqlite3';
31
+ import type { StorageAdapter, StorageRunResult, StorageParameters } from '@framers/sql-storage-adapter';
29
32
  /**
30
- * Unified SQLite connection manager for a single agent's persistent brain.
33
+ * Unified cross-platform connection manager for a single agent's persistent brain.
34
+ *
35
+ * Uses the `StorageAdapter` interface from `@framers/sql-storage-adapter` to
36
+ * support multiple backends (better-sqlite3, sql.js, IndexedDB, Postgres, etc.)
37
+ * transparently. All methods are async.
31
38
  *
32
39
  * **Usage:**
33
40
  * ```ts
34
- * const brain = new SqliteBrain('/path/to/agent/brain.sqlite');
41
+ * const brain = await SqliteBrain.open('/path/to/agent/brain.sqlite');
35
42
  *
36
- * // Direct DB access for subsystems
37
- * const row = brain.db.prepare('SELECT * FROM memory_traces WHERE id = ?').get(id);
43
+ * // Async query API for subsystems
44
+ * const row = await brain.get<{ value: string }>('SELECT value FROM brain_meta WHERE key = ?', ['schema_version']);
38
45
  *
39
46
  * // Meta helpers
40
- * brain.setMeta('last_sync', Date.now().toString());
41
- * const ver = brain.getMeta('schema_version'); // '1'
47
+ * await brain.setMeta('last_sync', Date.now().toString());
48
+ * const ver = await brain.getMeta('schema_version'); // '1'
42
49
  *
43
- * brain.close();
50
+ * await brain.close();
44
51
  * ```
45
52
  *
46
- * Subsystems (MemoryTraceRepository, KnowledgeGraphStore, DocumentChunkStore, etc.)
47
- * receive the `SqliteBrain` instance and call `brain.db` directly to prepare
48
- * statements this avoids redundant connection overhead across subsystems.
53
+ * Subsystems (KnowledgeGraph, MemoryGraph, ConsolidationLoop, etc.)
54
+ * receive the `SqliteBrain` instance and call its async proxy methods
55
+ * (`run`, `get`, `all`, `exec`, `transaction`) for all database operations.
49
56
  */
50
57
  export declare class SqliteBrain {
51
58
  /**
52
- * The raw `better-sqlite3` database handle.
59
+ * The cross-platform storage adapter backing this brain.
60
+ * Not exposed publicly — consumers use the async proxy methods instead.
61
+ */
62
+ private readonly _adapter;
63
+ /**
64
+ * Private constructor — use `SqliteBrain.open(dbPath)` instead.
53
65
  *
54
- * Exposed as `readonly` so subsystems can prepare their own statements
55
- * without going through an intermediary layer. `better-sqlite3` is
56
- * synchronous and thread-safe for single-writer, multi-reader scenarios.
66
+ * @param adapter - A fully initialised StorageAdapter instance.
57
67
  */
58
- readonly db: Database.Database;
68
+ private constructor();
59
69
  /**
60
70
  * Create or open the agent's brain database at `dbPath`.
61
71
  *
72
+ * Async factory that replaces the previous synchronous constructor.
73
+ *
62
74
  * Initialization sequence:
63
- * 1. Open (or create) the SQLite file.
64
- * 2. Enable WAL journal mode for concurrent read access.
75
+ * 1. Resolve the best available storage adapter for the current runtime.
76
+ * 2. Enable WAL journal mode for concurrent read access (when supported).
65
77
  * 3. Enable foreign key enforcement (OFF by default in SQLite).
66
78
  * 4. Execute the full DDL schema (all `CREATE TABLE IF NOT EXISTS`).
67
79
  * 5. Create the FTS5 virtual table for full-text memory search.
@@ -69,8 +81,56 @@ export declare class SqliteBrain {
69
81
  *
70
82
  * @param dbPath - Absolute path to the `.sqlite` file. The file is created
71
83
  * if it does not exist; parent directories must already exist.
84
+ * @returns A fully initialised `SqliteBrain` instance.
85
+ */
86
+ static open(dbPath: string): Promise<SqliteBrain>;
87
+ /**
88
+ * Execute a mutation statement (INSERT, UPDATE, DELETE).
89
+ *
90
+ * @param sql - SQL statement with `?` positional placeholders.
91
+ * @param params - Parameter array matching the placeholders.
92
+ * @returns Metadata about affected rows.
93
+ */
94
+ run(sql: string, params?: StorageParameters): Promise<StorageRunResult>;
95
+ /**
96
+ * Retrieve a single row (or null if none found).
97
+ *
98
+ * @param sql - SQL SELECT statement.
99
+ * @param params - Parameter array.
100
+ * @returns First matching row or null.
101
+ */
102
+ get<T = unknown>(sql: string, params?: StorageParameters): Promise<T | null>;
103
+ /**
104
+ * Retrieve all rows matching the statement.
105
+ *
106
+ * @param sql - SQL SELECT statement.
107
+ * @param params - Parameter array.
108
+ * @returns Array of matching rows (empty array if none).
109
+ */
110
+ all<T = unknown>(sql: string, params?: StorageParameters): Promise<T[]>;
111
+ /**
112
+ * Execute a script containing multiple SQL statements.
113
+ *
114
+ * @param sql - SQL script (semicolon-delimited statements).
115
+ */
116
+ exec(sql: string): Promise<void>;
117
+ /**
118
+ * Execute a callback within a database transaction.
119
+ *
120
+ * The transaction is automatically committed on success or rolled back
121
+ * on error.
122
+ *
123
+ * @param fn - Async callback receiving a transactional adapter.
124
+ * @returns Result of the callback.
125
+ */
126
+ transaction<T>(fn: (trx: StorageAdapter) => Promise<T>): Promise<T>;
127
+ /**
128
+ * Expose the raw storage adapter for advanced usage.
129
+ *
130
+ * Primarily used by SqliteExporter (VACUUM INTO) and SqliteImporter
131
+ * (which needs direct adapter access for the target brain).
72
132
  */
73
- constructor(dbPath: string);
133
+ get adapter(): StorageAdapter;
74
134
  /**
75
135
  * Execute all DDL statements inside a single transaction.
76
136
  * `CREATE TABLE IF NOT EXISTS` is idempotent, so re-running on an existing
@@ -88,7 +148,7 @@ export declare class SqliteBrain {
88
148
  * @param key - The metadata key to look up.
89
149
  * @returns The stored string value, or `undefined` if the key does not exist.
90
150
  */
91
- getMeta(key: string): string | undefined;
151
+ getMeta(key: string): Promise<string | undefined>;
92
152
  /**
93
153
  * Upsert a value into the `brain_meta` key-value store.
94
154
  *
@@ -98,7 +158,7 @@ export declare class SqliteBrain {
98
158
  * @param key - The metadata key.
99
159
  * @param value - The string value to store.
100
160
  */
101
- setMeta(key: string, value: string): void;
161
+ setMeta(key: string, value: string): Promise<void>;
102
162
  /**
103
163
  * Check whether a given embedding dimension is compatible with this brain.
104
164
  *
@@ -112,7 +172,7 @@ export declare class SqliteBrain {
112
172
  * @param dimensions - The embedding vector length to check (e.g. 1536 for OpenAI ada-002).
113
173
  * @returns `true` if compatible (or no prior value), `false` on mismatch.
114
174
  */
115
- checkEmbeddingCompat(dimensions: number): boolean;
175
+ checkEmbeddingCompat(dimensions: number): Promise<boolean>;
116
176
  /**
117
177
  * Close the database connection.
118
178
  *
@@ -120,6 +180,6 @@ export declare class SqliteBrain {
120
180
  * the file lock. Failing to close may leave the database in WAL mode with
121
181
  * an unconsumed WAL file.
122
182
  */
123
- close(): void;
183
+ close(): Promise<void>;
124
184
  }
125
185
  //# sourceMappingURL=SqliteBrain.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SqliteBrain.d.ts","sourceRoot":"","sources":["../../../src/memory/store/SqliteBrain.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAmPtC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,WAAW;IACtB;;;;;;OAMG;IACH,SAAgB,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;IAMtC;;;;;;;;;;;;;OAaG;gBACS,MAAM,EAAE,MAAM;IAuB1B;;;;OAIG;IACH,OAAO,CAAC,WAAW;IAoBnB;;;OAGG;IACH,OAAO,CAAC,SAAS;IAiBjB;;;;;OAKG;IACH,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAQxC;;;;;;;;OAQG;IACH,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAMzC;;;;;;;;;;;;OAYG;IACH,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAYjD;;;;;;OAMG;IACH,KAAK,IAAI,IAAI;CAGd"}
1
+ {"version":3,"file":"SqliteBrain.d.ts","sourceRoot":"","sources":["../../../src/memory/store/SqliteBrain.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,8BAA8B,CAAC;AAoPtC;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,WAAW;IACtB;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiB;IAM1C;;;;OAIG;IACH,OAAO;IAQP;;;;;;;;;;;;;;;;OAgBG;WACU,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAiCvD;;;;;;OAMG;IACG,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAI7E;;;;;;OAMG;IACG,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAIlF;;;;;;OAMG;IACG,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAI7E;;;;OAIG;IACG,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAItC;;;;;;;;OAQG;IACG,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAIzE;;;;;OAKG;IACH,IAAI,OAAO,IAAI,cAAc,CAE5B;IAMD;;;;OAIG;YACW,WAAW;IAkBzB;;;OAGG;YACW,SAAS;IAiBvB;;;;;OAKG;IACG,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IASvD;;;;;;;;OAQG;IACG,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOxD;;;;;;;;;;;;OAYG;IACG,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAYhE;;;;;;OAMG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}