@framers/agentos 0.1.104 → 0.1.106
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/AgentOS.d.ts +80 -0
- package/dist/api/AgentOS.d.ts.map +1 -1
- package/dist/api/AgentOS.js +128 -9
- package/dist/api/AgentOS.js.map +1 -1
- package/dist/api/AgentOSOrchestrator.d.ts.map +1 -1
- package/dist/api/AgentOSOrchestrator.js +32 -4
- package/dist/api/AgentOSOrchestrator.js.map +1 -1
- package/dist/memory/AgentMemory.d.ts +62 -16
- package/dist/memory/AgentMemory.d.ts.map +1 -1
- package/dist/memory/AgentMemory.js +236 -28
- package/dist/memory/AgentMemory.js.map +1 -1
- package/dist/memory/consolidation/ConsolidationLoop.d.ts.map +1 -1
- package/dist/memory/consolidation/ConsolidationLoop.js +32 -9
- package/dist/memory/consolidation/ConsolidationLoop.js.map +1 -1
- package/dist/memory/extension/MemoryToolsExtension.d.ts +53 -0
- package/dist/memory/extension/MemoryToolsExtension.d.ts.map +1 -0
- package/dist/memory/extension/MemoryToolsExtension.js +54 -0
- package/dist/memory/extension/MemoryToolsExtension.js.map +1 -0
- package/dist/memory/extension/StandaloneMemoryExtension.d.ts +27 -0
- package/dist/memory/extension/StandaloneMemoryExtension.d.ts.map +1 -0
- package/dist/memory/extension/StandaloneMemoryExtension.js +122 -0
- package/dist/memory/extension/StandaloneMemoryExtension.js.map +1 -0
- package/dist/memory/facade/Memory.d.ts +45 -0
- package/dist/memory/facade/Memory.d.ts.map +1 -1
- package/dist/memory/facade/Memory.js +296 -137
- package/dist/memory/facade/Memory.js.map +1 -1
- package/dist/memory/facade/types.d.ts +12 -8
- package/dist/memory/facade/types.d.ts.map +1 -1
- package/dist/memory/feedback/RetrievalFeedbackSignal.d.ts +14 -5
- package/dist/memory/feedback/RetrievalFeedbackSignal.d.ts.map +1 -1
- package/dist/memory/feedback/RetrievalFeedbackSignal.js +131 -20
- package/dist/memory/feedback/RetrievalFeedbackSignal.js.map +1 -1
- package/dist/memory/index.d.ts +7 -1
- package/dist/memory/index.d.ts.map +1 -1
- package/dist/memory/index.js +5 -1
- package/dist/memory/index.js.map +1 -1
- package/dist/memory/integration/StandaloneMemoryBridge.d.ts +55 -0
- package/dist/memory/integration/StandaloneMemoryBridge.d.ts.map +1 -0
- package/dist/memory/integration/StandaloneMemoryBridge.js +398 -0
- package/dist/memory/integration/StandaloneMemoryBridge.js.map +1 -0
- package/dist/memory/io/CsvImporter.d.ts +51 -0
- package/dist/memory/io/CsvImporter.d.ts.map +1 -0
- package/dist/memory/io/CsvImporter.js +229 -0
- package/dist/memory/io/CsvImporter.js.map +1 -0
- package/dist/memory/io/index.d.ts +2 -0
- package/dist/memory/io/index.d.ts.map +1 -1
- package/dist/memory/io/index.js +2 -0
- package/dist/memory/io/index.js.map +1 -1
- package/dist/memory/store/tracePersistence.d.ts +68 -0
- package/dist/memory/store/tracePersistence.d.ts.map +1 -0
- package/dist/memory/store/tracePersistence.js +159 -0
- package/dist/memory/store/tracePersistence.js.map +1 -0
- package/dist/memory/tools/MemoryAddTool.d.ts.map +1 -1
- package/dist/memory/tools/MemoryAddTool.js +18 -6
- package/dist/memory/tools/MemoryAddTool.js.map +1 -1
- package/dist/memory/tools/MemoryMergeTool.d.ts.map +1 -1
- package/dist/memory/tools/MemoryMergeTool.js +41 -13
- package/dist/memory/tools/MemoryMergeTool.js.map +1 -1
- package/dist/memory/tools/MemorySearchTool.d.ts.map +1 -1
- package/dist/memory/tools/MemorySearchTool.js +24 -4
- package/dist/memory/tools/MemorySearchTool.js.map +1 -1
- package/dist/memory/tools/MemoryUpdateTool.d.ts.map +1 -1
- package/dist/memory/tools/MemoryUpdateTool.js +38 -16
- package/dist/memory/tools/MemoryUpdateTool.js.map +1 -1
- package/package.json +1 -1
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
*
|
|
16
16
|
* @module memory/tools/MemoryMergeTool
|
|
17
17
|
*/
|
|
18
|
+
import { parseTraceMetadata, readPersistedDecayState, sha256Hex, withPersistedDecayState, } from '../store/tracePersistence.js';
|
|
18
19
|
// ---------------------------------------------------------------------------
|
|
19
20
|
// MemoryMergeTool
|
|
20
21
|
// ---------------------------------------------------------------------------
|
|
@@ -103,7 +104,7 @@ export class MemoryMergeTool {
|
|
|
103
104
|
// Load all matching active traces.
|
|
104
105
|
const placeholders = traceIds.map(() => '?').join(', ');
|
|
105
106
|
const rows = this.brain.db
|
|
106
|
-
.prepare(`SELECT id, content, retrieval_count, tags
|
|
107
|
+
.prepare(`SELECT rowid AS rowid, id, content, retrieval_count, tags, metadata, last_accessed, created_at
|
|
107
108
|
FROM memory_traces
|
|
108
109
|
WHERE id IN (${placeholders}) AND deleted = 0`)
|
|
109
110
|
.all(...traceIds);
|
|
@@ -133,21 +134,48 @@ export class MemoryMergeTool {
|
|
|
133
134
|
// Malformed JSON tag — skip gracefully.
|
|
134
135
|
}
|
|
135
136
|
}
|
|
137
|
+
const finalTags = JSON.stringify([...allTags]);
|
|
138
|
+
const survivorMetadata = parseTraceMetadata(survivor.metadata);
|
|
139
|
+
survivorMetadata.content_hash = sha256Hex(finalContent);
|
|
140
|
+
delete survivorMetadata.import_hash;
|
|
141
|
+
const mergedDecay = rows.map((row) => readPersistedDecayState(parseTraceMetadata(row.metadata), row.retrieval_count));
|
|
142
|
+
const mergedMetadata = JSON.stringify(withPersistedDecayState(survivorMetadata, {
|
|
143
|
+
stability: Math.max(...mergedDecay.map((state) => state.stability)),
|
|
144
|
+
accessCount: mergedDecay.reduce((sum, state) => sum + state.accessCount, 0),
|
|
145
|
+
reinforcementInterval: Math.max(...mergedDecay.map((state) => state.reinforcementInterval)),
|
|
146
|
+
...(mergedDecay.some((state) => state.nextReinforcementAt !== undefined)
|
|
147
|
+
? {
|
|
148
|
+
nextReinforcementAt: Math.max(...mergedDecay.map((state) => state.nextReinforcementAt ?? 0)),
|
|
149
|
+
}
|
|
150
|
+
: {}),
|
|
151
|
+
}));
|
|
152
|
+
const mergedRetrievalCount = rows.reduce((sum, row) => sum + row.retrieval_count, 0);
|
|
153
|
+
const mergedLastAccessed = Math.max(...rows.map((row) => row.last_accessed ?? row.created_at));
|
|
136
154
|
// Update survivor: new content, cleared embedding, unioned tags.
|
|
137
|
-
this.brain.db
|
|
138
|
-
.prepare(`UPDATE memory_traces
|
|
139
|
-
SET content = ?, embedding = NULL, tags = ?
|
|
140
|
-
WHERE id = ?`)
|
|
141
|
-
.run(finalContent, JSON.stringify([...allTags]), survivor.id);
|
|
142
|
-
// Soft-delete all non-survivors.
|
|
143
155
|
const deletedIds = [];
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
156
|
+
this.brain.db.transaction(() => {
|
|
157
|
+
this.brain.db
|
|
158
|
+
.prepare(`INSERT INTO memory_traces_fts (memory_traces_fts, rowid, content, tags)
|
|
159
|
+
VALUES ('delete', ?, ?, ?)`)
|
|
160
|
+
.run(survivor.rowid, survivor.content, survivor.tags);
|
|
161
|
+
this.brain.db
|
|
162
|
+
.prepare(`UPDATE memory_traces
|
|
163
|
+
SET content = ?, embedding = NULL, tags = ?, metadata = ?, retrieval_count = ?, last_accessed = ?
|
|
164
|
+
WHERE id = ?`)
|
|
165
|
+
.run(finalContent, finalTags, mergedMetadata, mergedRetrievalCount, mergedLastAccessed, survivor.id);
|
|
166
|
+
this.brain.db
|
|
167
|
+
.prepare(`INSERT INTO memory_traces_fts (rowid, content, tags)
|
|
168
|
+
VALUES (?, ?, ?)`)
|
|
169
|
+
.run(survivor.rowid, finalContent, finalTags);
|
|
170
|
+
// Soft-delete all non-survivors.
|
|
171
|
+
const deleteStmt = this.brain.db.prepare(`UPDATE memory_traces SET deleted = 1 WHERE id = ?`);
|
|
172
|
+
for (const row of rows) {
|
|
173
|
+
if (row.id !== survivor.id) {
|
|
174
|
+
deleteStmt.run(row.id);
|
|
175
|
+
deletedIds.push(row.id);
|
|
176
|
+
}
|
|
149
177
|
}
|
|
150
|
-
}
|
|
178
|
+
})();
|
|
151
179
|
return {
|
|
152
180
|
success: true,
|
|
153
181
|
output: { survivorId: survivor.id, deletedIds },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MemoryMergeTool.js","sourceRoot":"","sources":["../../../src/memory/tools/MemoryMergeTool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;
|
|
1
|
+
{"version":3,"file":"MemoryMergeTool.js","sourceRoot":"","sources":["../../../src/memory/tools/MemoryMergeTool.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MemorySearchTool.d.ts","sourceRoot":"","sources":["../../../src/memory/tools/MemorySearchTool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AACpH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"MemorySearchTool.d.ts","sourceRoot":"","sources":["../../../src/memory/tools/MemorySearchTool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AACpH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAqB3D;;;;;;;;GAQG;AACH,MAAM,WAAW,iBAAkB,SAAQ,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAC5D,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,kBAAkB,EAAE,CAAC;CAC/B;AAMD;;;;;;;;;;;;GAYG;AACH,qBAAa,gBAAiB,YAAW,KAAK,CAAC,iBAAiB,EAAE,kBAAkB,CAAC;IAsDvE,OAAO,CAAC,QAAQ,CAAC,KAAK;IArDlC,uCAAuC;IACvC,QAAQ,CAAC,EAAE,sBAAsB;IAEjC,4BAA4B;IAC5B,QAAQ,CAAC,IAAI,mBAAmB;IAEhC,mCAAmC;IACnC,QAAQ,CAAC,WAAW,mBAAmB;IAEvC,8BAA8B;IAC9B,QAAQ,CAAC,WAAW,SAGuF;IAE3G,mDAAmD;IACnD,QAAQ,CAAC,QAAQ,YAAY;IAE7B,gEAAgE;IAChE,QAAQ,CAAC,cAAc,SAAS;IAEhC,uEAAuE;IACvE,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CA0BpC;IAEF;;OAEG;gBAC0B,KAAK,EAAE,WAAW;IAM/C;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACG,OAAO,CACX,IAAI,EAAE,iBAAiB,EACvB,QAAQ,EAAE,oBAAoB,GAC7B,OAAO,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,CAAC;CAqFpD"}
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
*
|
|
13
13
|
* @module memory/tools/MemorySearchTool
|
|
14
14
|
*/
|
|
15
|
+
import { buildNaturalLanguageFtsQuery } from '../store/tracePersistence.js';
|
|
15
16
|
// ---------------------------------------------------------------------------
|
|
16
17
|
// MemorySearchTool
|
|
17
18
|
// ---------------------------------------------------------------------------
|
|
@@ -105,6 +106,10 @@ export class MemorySearchTool {
|
|
|
105
106
|
*/
|
|
106
107
|
async execute(args, _context) {
|
|
107
108
|
try {
|
|
109
|
+
const rawQuery = args.query.trim();
|
|
110
|
+
if (!rawQuery) {
|
|
111
|
+
return { success: true, output: { results: [] } };
|
|
112
|
+
}
|
|
108
113
|
const limit = args.limit ?? 10;
|
|
109
114
|
// Build WHERE clause additions for optional filters.
|
|
110
115
|
const extraClauses = [];
|
|
@@ -128,10 +133,25 @@ export class MemorySearchTool {
|
|
|
128
133
|
ORDER BY rank
|
|
129
134
|
LIMIT ?
|
|
130
135
|
`;
|
|
131
|
-
const
|
|
132
|
-
|
|
133
|
-
.
|
|
134
|
-
|
|
136
|
+
const runSearch = (query) => {
|
|
137
|
+
const params = [query, ...extraParams, limit];
|
|
138
|
+
return this.brain.db
|
|
139
|
+
.prepare(sql)
|
|
140
|
+
.all(...params);
|
|
141
|
+
};
|
|
142
|
+
let rows;
|
|
143
|
+
try {
|
|
144
|
+
rows = runSearch(rawQuery);
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
const fallbackQuery = buildNaturalLanguageFtsQuery(rawQuery);
|
|
148
|
+
if (error?.code !== 'SQLITE_ERROR' ||
|
|
149
|
+
!fallbackQuery ||
|
|
150
|
+
fallbackQuery === rawQuery) {
|
|
151
|
+
throw error;
|
|
152
|
+
}
|
|
153
|
+
rows = runSearch(fallbackQuery);
|
|
154
|
+
}
|
|
135
155
|
const results = rows.map((row) => {
|
|
136
156
|
let tags = [];
|
|
137
157
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MemorySearchTool.js","sourceRoot":"","sources":["../../../src/memory/tools/MemorySearchTool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;
|
|
1
|
+
{"version":3,"file":"MemorySearchTool.js","sourceRoot":"","sources":["../../../src/memory/tools/MemorySearchTool.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MemoryUpdateTool.d.ts","sourceRoot":"","sources":["../../../src/memory/tools/MemoryUpdateTool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AACpH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"MemoryUpdateTool.d.ts","sourceRoot":"","sources":["../../../src/memory/tools/MemoryUpdateTool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AACpH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAO3D;;;;;;;;;GASG;AACH,MAAM,WAAW,iBAAkB,SAAQ,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAC5D,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;CAClB;AAMD;;;;;;;;;;;;;GAaG;AACH,qBAAa,gBAAiB,YAAW,KAAK,CAAC,iBAAiB,EAAE,kBAAkB,CAAC;IA6CvE,OAAO,CAAC,QAAQ,CAAC,KAAK;IA5ClC,uCAAuC;IACvC,QAAQ,CAAC,EAAE,sBAAsB;IAEjC,4BAA4B;IAC5B,QAAQ,CAAC,IAAI,mBAAmB;IAEhC,mCAAmC;IACnC,QAAQ,CAAC,WAAW,mBAAmB;IAEvC,8BAA8B;IAC9B,QAAQ,CAAC,WAAW,SAE2E;IAE/F,mDAAmD;IACnD,QAAQ,CAAC,QAAQ,YAAY;IAE7B,wCAAwC;IACxC,QAAQ,CAAC,cAAc,QAAQ;IAE/B,uEAAuE;IACvE,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CAkBpC;IAEF;;OAEG;gBAC0B,KAAK,EAAE,WAAW;IAM/C;;;;;;;;;;;;;;;;;OAiBG;IACG,OAAO,CACX,IAAI,EAAE,iBAAiB,EACvB,QAAQ,EAAE,oBAAoB,GAC7B,OAAO,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,CAAC;CAuEpD"}
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
*
|
|
10
10
|
* @module memory/tools/MemoryUpdateTool
|
|
11
11
|
*/
|
|
12
|
+
import { parseTraceMetadata, sha256Hex } from '../store/tracePersistence.js';
|
|
12
13
|
// ---------------------------------------------------------------------------
|
|
13
14
|
// MemoryUpdateTool
|
|
14
15
|
// ---------------------------------------------------------------------------
|
|
@@ -94,24 +95,45 @@ export class MemoryUpdateTool {
|
|
|
94
95
|
if (content === undefined && tags === undefined) {
|
|
95
96
|
return { success: true, output: { updated: false } };
|
|
96
97
|
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
98
|
+
const current = this.brain.db
|
|
99
|
+
.prepare(`SELECT rowid AS rowid, content, tags, metadata
|
|
100
|
+
FROM memory_traces
|
|
101
|
+
WHERE id = ? AND deleted = 0`)
|
|
102
|
+
.get(traceId);
|
|
103
|
+
if (!current) {
|
|
104
|
+
return { success: true, output: { updated: false } };
|
|
104
105
|
}
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
106
|
+
const nextContent = content ?? current.content;
|
|
107
|
+
const nextTags = tags !== undefined ? JSON.stringify(tags) : current.tags;
|
|
108
|
+
const nextMetadataObject = parseTraceMetadata(current.metadata);
|
|
109
|
+
if (content !== undefined) {
|
|
110
|
+
nextMetadataObject.content_hash = sha256Hex(nextContent);
|
|
111
|
+
delete nextMetadataObject.import_hash;
|
|
108
112
|
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
113
|
+
const nextMetadata = JSON.stringify(nextMetadataObject);
|
|
114
|
+
const sql = content !== undefined
|
|
115
|
+
? `UPDATE memory_traces
|
|
116
|
+
SET content = ?, tags = ?, metadata = ?, embedding = NULL
|
|
117
|
+
WHERE id = ? AND deleted = 0`
|
|
118
|
+
: `UPDATE memory_traces
|
|
119
|
+
SET content = ?, tags = ?, metadata = ?
|
|
120
|
+
WHERE id = ? AND deleted = 0`;
|
|
121
|
+
const changes = this.brain.db.transaction(() => {
|
|
122
|
+
this.brain.db
|
|
123
|
+
.prepare(`INSERT INTO memory_traces_fts (memory_traces_fts, rowid, content, tags)
|
|
124
|
+
VALUES ('delete', ?, ?, ?)`)
|
|
125
|
+
.run(current.rowid, current.content, current.tags);
|
|
126
|
+
const info = this.brain.db
|
|
127
|
+
.prepare(sql)
|
|
128
|
+
.run(nextContent, nextTags, nextMetadata, traceId);
|
|
129
|
+
if (info.changes > 0) {
|
|
130
|
+
this.brain.db
|
|
131
|
+
.prepare(`INSERT INTO memory_traces_fts (rowid, content, tags)
|
|
132
|
+
VALUES (?, ?, ?)`)
|
|
133
|
+
.run(current.rowid, nextContent, nextTags);
|
|
134
|
+
}
|
|
135
|
+
return info.changes;
|
|
136
|
+
})();
|
|
115
137
|
return { success: true, output: { updated: changes > 0 } };
|
|
116
138
|
}
|
|
117
139
|
catch (err) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MemoryUpdateTool.js","sourceRoot":"","sources":["../../../src/memory/tools/MemoryUpdateTool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"MemoryUpdateTool.js","sourceRoot":"","sources":["../../../src/memory/tools/MemoryUpdateTool.ts"],"names":[],"mappings":"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"}
|