@monoes/memory 1.0.20 → 1.0.21

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 (73) hide show
  1. package/dist/hnsw-distance.d.ts +31 -0
  2. package/dist/hnsw-distance.d.ts.map +1 -0
  3. package/dist/hnsw-distance.js +106 -0
  4. package/dist/hnsw-distance.js.map +1 -0
  5. package/dist/hnsw-graph-ops.d.ts +29 -0
  6. package/dist/hnsw-graph-ops.d.ts.map +1 -0
  7. package/dist/hnsw-graph-ops.js +96 -0
  8. package/dist/hnsw-graph-ops.js.map +1 -0
  9. package/dist/hnsw-heap.d.ts +45 -0
  10. package/dist/hnsw-heap.d.ts.map +1 -0
  11. package/dist/hnsw-heap.js +155 -0
  12. package/dist/hnsw-heap.js.map +1 -0
  13. package/dist/hnsw-index.d.ts +14 -41
  14. package/dist/hnsw-index.d.ts.map +1 -1
  15. package/dist/hnsw-index.js +17 -461
  16. package/dist/hnsw-index.js.map +1 -1
  17. package/dist/hnsw-quantizer.d.ts +28 -0
  18. package/dist/hnsw-quantizer.d.ts.map +1 -0
  19. package/dist/hnsw-quantizer.js +100 -0
  20. package/dist/hnsw-quantizer.js.map +1 -0
  21. package/dist/hnsw-serialize.d.ts +39 -0
  22. package/dist/hnsw-serialize.d.ts.map +1 -0
  23. package/dist/hnsw-serialize.js +54 -0
  24. package/dist/hnsw-serialize.js.map +1 -0
  25. package/dist/migration-loaders.d.ts +38 -0
  26. package/dist/migration-loaders.d.ts.map +1 -0
  27. package/dist/migration-loaders.js +269 -0
  28. package/dist/migration-loaders.js.map +1 -0
  29. package/dist/migration-transform.d.ts +21 -0
  30. package/dist/migration-transform.d.ts.map +1 -0
  31. package/dist/migration-transform.js +124 -0
  32. package/dist/migration-transform.js.map +1 -0
  33. package/dist/migration.d.ts +38 -22
  34. package/dist/migration.d.ts.map +1 -1
  35. package/dist/migration.js +35 -348
  36. package/dist/migration.js.map +1 -1
  37. package/dist/sql-backend-ann.d.ts +46 -0
  38. package/dist/sql-backend-ann.d.ts.map +1 -0
  39. package/dist/sql-backend-ann.js +120 -0
  40. package/dist/sql-backend-ann.js.map +1 -0
  41. package/dist/sql-backend-introspect.d.ts +17 -0
  42. package/dist/sql-backend-introspect.d.ts.map +1 -0
  43. package/dist/sql-backend-introspect.js +114 -0
  44. package/dist/sql-backend-introspect.js.map +1 -0
  45. package/dist/sql-backend-reads.d.ts +53 -0
  46. package/dist/sql-backend-reads.d.ts.map +1 -0
  47. package/dist/sql-backend-reads.js +295 -0
  48. package/dist/sql-backend-reads.js.map +1 -0
  49. package/dist/sql-backend-writes.d.ts +64 -0
  50. package/dist/sql-backend-writes.d.ts.map +1 -0
  51. package/dist/sql-backend-writes.js +270 -0
  52. package/dist/sql-backend-writes.js.map +1 -0
  53. package/dist/sql-backend.d.ts +39 -96
  54. package/dist/sql-backend.d.ts.map +1 -1
  55. package/dist/sql-backend.js +49 -706
  56. package/dist/sql-backend.js.map +1 -1
  57. package/dist/types-backend.d.ts +187 -0
  58. package/dist/types-backend.d.ts.map +1 -0
  59. package/dist/types-backend.js +8 -0
  60. package/dist/types-backend.js.map +1 -0
  61. package/dist/types-core.d.ts +180 -0
  62. package/dist/types-core.d.ts.map +1 -0
  63. package/dist/types-core.js +8 -0
  64. package/dist/types-core.js.map +1 -0
  65. package/dist/types-misc.d.ts +172 -0
  66. package/dist/types-misc.d.ts.map +1 -0
  67. package/dist/types-misc.js +56 -0
  68. package/dist/types-misc.js.map +1 -0
  69. package/dist/types.d.ts +8 -516
  70. package/dist/types.d.ts.map +1 -1
  71. package/dist/types.js +5 -49
  72. package/dist/types.js.map +1 -1
  73. package/package.json +1 -1
@@ -0,0 +1,100 @@
1
+ /**
2
+ * V1 HNSW Vector Index — vector quantizer
3
+ *
4
+ * Split out of hnsw-index.ts (file-size sweep). Pure move: no behaviour change.
5
+ *
6
+ * @module v1/memory/hnsw-quantizer
7
+ */
8
+ /**
9
+ * Quantizer for vector compression
10
+ */
11
+ export class Quantizer {
12
+ config;
13
+ dimensions;
14
+ constructor(config, dimensions) {
15
+ this.config = config;
16
+ this.dimensions = dimensions;
17
+ }
18
+ /**
19
+ * Encode a vector using quantization
20
+ */
21
+ encode(vector) {
22
+ if (vector.length !== this.dimensions) {
23
+ throw new Error(`Vector dimension mismatch: expected ${this.dimensions}, got ${vector.length}`);
24
+ }
25
+ switch (this.config.type) {
26
+ case 'binary':
27
+ return this.binaryQuantize(vector);
28
+ case 'scalar':
29
+ return this.scalarQuantize(vector);
30
+ case 'product':
31
+ return this.productQuantize(vector);
32
+ default:
33
+ return vector;
34
+ }
35
+ }
36
+ /**
37
+ * Get compression ratio
38
+ */
39
+ getCompressionRatio() {
40
+ switch (this.config.type) {
41
+ case 'binary':
42
+ return 1.0; // sign quantization: same dimension, no compression
43
+ case 'scalar':
44
+ return 32 / (this.config.bits || 8);
45
+ case 'product':
46
+ return this.config.subquantizers || 8;
47
+ default:
48
+ return 1;
49
+ }
50
+ }
51
+ binaryQuantize(vector) {
52
+ // Sign quantization: map each component to 0.0 (≤0) or 1.0 (>0).
53
+ // Result is a valid float vector compatible with all distance metrics.
54
+ const binary = new Float32Array(vector.length);
55
+ for (let i = 0; i < vector.length; i++) {
56
+ binary[i] = vector[i] > 0 ? 1.0 : 0.0;
57
+ }
58
+ return binary;
59
+ }
60
+ scalarQuantize(vector) {
61
+ // Find min/max for normalization
62
+ let min = Infinity;
63
+ let max = -Infinity;
64
+ for (let i = 0; i < vector.length; i++) {
65
+ if (vector[i] < min)
66
+ min = vector[i];
67
+ if (vector[i] > max)
68
+ max = vector[i];
69
+ }
70
+ const range = max - min || 1;
71
+ const bits = this.config.bits || 8;
72
+ const levels = 2 ** bits;
73
+ // Quantize each value to [0, levels-1] and normalize back to [0, 1]
74
+ // so the resulting vector is compatible with cosine/euclidean distance.
75
+ const quantized = new Float32Array(vector.length);
76
+ for (let i = 0; i < vector.length; i++) {
77
+ const normalized = (vector[i] - min) / range;
78
+ quantized[i] = Math.round(normalized * (levels - 1)) / (levels - 1);
79
+ }
80
+ return quantized;
81
+ }
82
+ productQuantize(vector) {
83
+ // Simplified product quantization
84
+ // In production, would use trained codebooks
85
+ const subquantizers = this.config.subquantizers || 8;
86
+ const subvectorSize = Math.ceil(vector.length / subquantizers);
87
+ const quantized = new Float32Array(subquantizers);
88
+ for (let i = 0; i < subquantizers; i++) {
89
+ let sum = 0;
90
+ const start = i * subvectorSize;
91
+ const end = Math.min(start + subvectorSize, vector.length);
92
+ for (let j = start; j < end; j++) {
93
+ sum += vector[j];
94
+ }
95
+ quantized[i] = sum / (end - start);
96
+ }
97
+ return quantized;
98
+ }
99
+ }
100
+ //# sourceMappingURL=hnsw-quantizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hnsw-quantizer.js","sourceRoot":"","sources":["../src/hnsw-quantizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * V1 HNSW Vector Index — graph (de)serialization
3
+ *
4
+ * Split out of hnsw-index.ts (file-size sweep). Pure move: the method bodies
5
+ * are unchanged; the node map, config, entry point and max level previously
6
+ * reached via `this` are now passed in explicitly by the caller.
7
+ *
8
+ * @module v1/memory/hnsw-serialize
9
+ */
10
+ import type { HNSWNode } from './hnsw-index.js';
11
+ import type { HNSWConfig } from './types.js';
12
+ /**
13
+ * On-disk representation produced by HNSWIndex.serialize() / consumed by
14
+ * HNSWIndex.deserialize(). `version` guards against loading a shape from a
15
+ * future/incompatible format.
16
+ */
17
+ export interface HNSWSerialized {
18
+ version: 1;
19
+ config: HNSWConfig;
20
+ entryPoint: string | null;
21
+ maxLevel: number;
22
+ nodes: Array<{
23
+ id: string;
24
+ vectorB64: string;
25
+ level: number;
26
+ connections: Array<[number, string[]]>;
27
+ }>;
28
+ }
29
+ /**
30
+ * Serialize the built graph (config, entry point, and every node's vector +
31
+ * per-level connections) so a caller can persist it to disk and reconstruct
32
+ * an identical index later without re-inserting every point. Vectors are
33
+ * base64-encoded Float32 bytes rather than JSON number arrays to keep the
34
+ * serialized size and parse cost down for large indexes.
35
+ */
36
+ export declare function serializeGraph(nodes: Map<string, HNSWNode>, config: HNSWConfig, entryPoint: string | null, maxLevel: number): HNSWSerialized;
37
+ /** Reconstruct the node map from data previously produced by serializeGraph(). */
38
+ export declare function deserializeNodes(data: HNSWSerialized): Map<string, HNSWNode>;
39
+ //# sourceMappingURL=hnsw-serialize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hnsw-serialize.d.ts","sourceRoot":"","sources":["../src/hnsw-serialize.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,CAAC,CAAC;IACX,MAAM,EAAE,UAAU,CAAC;IACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,KAAK,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;KACxC,CAAC,CAAC;CACJ;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,EAC5B,MAAM,EAAE,UAAU,EAClB,UAAU,EAAE,MAAM,GAAG,IAAI,EACzB,QAAQ,EAAE,MAAM,GACf,cAAc,CAqBhB;AAED,kFAAkF;AAClF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,cAAc,GAAG,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAW5E"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * V1 HNSW Vector Index — graph (de)serialization
3
+ *
4
+ * Split out of hnsw-index.ts (file-size sweep). Pure move: the method bodies
5
+ * are unchanged; the node map, config, entry point and max level previously
6
+ * reached via `this` are now passed in explicitly by the caller.
7
+ *
8
+ * @module v1/memory/hnsw-serialize
9
+ */
10
+ import { normalizeVector } from './hnsw-distance.js';
11
+ /**
12
+ * Serialize the built graph (config, entry point, and every node's vector +
13
+ * per-level connections) so a caller can persist it to disk and reconstruct
14
+ * an identical index later without re-inserting every point. Vectors are
15
+ * base64-encoded Float32 bytes rather than JSON number arrays to keep the
16
+ * serialized size and parse cost down for large indexes.
17
+ */
18
+ export function serializeGraph(nodes, config, entryPoint, maxLevel) {
19
+ const nodesOut = [];
20
+ for (const node of nodes.values()) {
21
+ const buf = Buffer.from(node.vector.buffer, node.vector.byteOffset, node.vector.byteLength);
22
+ nodesOut.push({
23
+ id: node.id,
24
+ vectorB64: buf.toString('base64'),
25
+ level: node.level,
26
+ connections: Array.from(node.connections.entries()).map(([lvl, set]) => [
27
+ lvl,
28
+ Array.from(set),
29
+ ]),
30
+ });
31
+ }
32
+ return {
33
+ version: 1,
34
+ config,
35
+ entryPoint,
36
+ maxLevel,
37
+ nodes: nodesOut,
38
+ };
39
+ }
40
+ /** Reconstruct the node map from data previously produced by serializeGraph(). */
41
+ export function deserializeNodes(data) {
42
+ const nodes = new Map();
43
+ for (const n of data.nodes) {
44
+ const buf = Buffer.from(n.vectorB64, 'base64');
45
+ const vector = new Float32Array(buf.buffer, buf.byteOffset, buf.byteLength / 4);
46
+ const normalizedVector = data.config.metric === 'cosine' ? normalizeVector(vector) : null;
47
+ const connections = new Map();
48
+ for (const [lvl, ids] of n.connections)
49
+ connections.set(lvl, new Set(ids));
50
+ nodes.set(n.id, { id: n.id, vector, normalizedVector, connections, level: n.level });
51
+ }
52
+ return nodes;
53
+ }
54
+ //# sourceMappingURL=hnsw-serialize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hnsw-serialize.js","sourceRoot":"","sources":["../src/hnsw-serialize.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAsBrD;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAC5B,KAA4B,EAC5B,MAAkB,EAClB,UAAyB,EACzB,QAAgB;IAEhB,MAAM,QAAQ,GAA4B,EAAE,CAAC;IAC7C,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;QAClC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC5F,QAAQ,CAAC,IAAI,CAAC;YACZ,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,SAAS,EAAE,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACjC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;gBACtE,GAAG;gBACH,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;aAChB,CAAC;SACH,CAAC,CAAC;IACL,CAAC;IACD,OAAO;QACL,OAAO,EAAE,CAAC;QACV,MAAM;QACN,UAAU;QACV,QAAQ;QACR,KAAK,EAAE,QAAQ;KAChB,CAAC;AACJ,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,gBAAgB,CAAC,IAAoB;IACnD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC1C,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;QAChF,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC1F,MAAM,WAAW,GAAG,IAAI,GAAG,EAAuB,CAAC;QACnD,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,WAAW;YAAE,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3E,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IACvF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Legacy source loaders for MemoryMigrator (SQLite/Markdown/JSON/swarm/
3
+ * distributed-memory sources).
4
+ * File-size sweep: split out of migration.ts. Mixed into
5
+ * MemoryMigrator.prototype at the bottom of migration.ts.
6
+ *
7
+ * @module v1/memory/migration-loaders
8
+ */
9
+ import type { MemoryMigrator } from './migration.js';
10
+ /**
11
+ * Legacy entry format (common structure)
12
+ */
13
+ export interface LegacyEntry {
14
+ id?: string;
15
+ key: string;
16
+ value: unknown;
17
+ namespace?: string;
18
+ tags?: string[];
19
+ metadata?: Record<string, unknown>;
20
+ timestamp?: number;
21
+ createdAt?: string | number;
22
+ updatedAt?: string | number;
23
+ created_at?: string | number;
24
+ updated_at?: string | number;
25
+ }
26
+ export declare const migrationLoaderMethods: {
27
+ loadFromSource(this: MemoryMigrator): Promise<LegacyEntry[]>;
28
+ loadFromSQLite(this: MemoryMigrator): Promise<LegacyEntry[]>;
29
+ safeJsonParse<T>(this: MemoryMigrator, value: string | undefined, fallback: T): T;
30
+ loadFromMarkdown(this: MemoryMigrator): Promise<LegacyEntry[]>;
31
+ loadFromJSON(this: MemoryMigrator, filePathOverride?: string): Promise<LegacyEntry[]>;
32
+ loadFromMemoryManager(this: MemoryMigrator): Promise<LegacyEntry[]>;
33
+ loadFromSwarmMemory(this: MemoryMigrator): Promise<LegacyEntry[]>;
34
+ loadFromDistributedMemory(this: MemoryMigrator): Promise<LegacyEntry[]>;
35
+ walkDirectory(this: MemoryMigrator, dir: string, extension: string): Promise<string[]>;
36
+ parseMarkdownEntry(this: MemoryMigrator, filePath: string, content: string, basePath: string): LegacyEntry | null;
37
+ };
38
+ //# sourceMappingURL=migration-loaders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration-loaders.d.ts","sourceRoot":"","sources":["../src/migration-loaders.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC9B;AAED,eAAO,MAAM,sBAAsB;IAC3B,cAAc,OAAO,cAAc,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAmB5D,cAAc,OAAO,cAAc,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IA8DlE,aAAa,CAAC,CAAC,QAAQ,cAAc,SAAS,MAAM,GAAG,SAAS,YAAY,CAAC,GAAG,CAAC;IAS3E,gBAAgB,OAAO,cAAc,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAyB9D,YAAY,OAAO,cAAc,qBAAqB,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IA+BrF,qBAAqB,OAAO,cAAc,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAuBnE,mBAAmB,OAAO,cAAc,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAmCjE,yBAAyB,OAAO,cAAc,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAKvE,aAAa,OAAO,cAAc,OAAO,MAAM,aAAa,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAuB5F,kBAAkB,OACV,cAAc,YACV,MAAM,WACP,MAAM,YACL,MAAM,GACf,WAAW,GAAG,IAAI;CAsDtB,CAAC"}
@@ -0,0 +1,269 @@
1
+ /**
2
+ * Legacy source loaders for MemoryMigrator (SQLite/Markdown/JSON/swarm/
3
+ * distributed-memory sources).
4
+ * File-size sweep: split out of migration.ts. Mixed into
5
+ * MemoryMigrator.prototype at the bottom of migration.ts.
6
+ *
7
+ * @module v1/memory/migration-loaders
8
+ */
9
+ import { promises as fs } from 'node:fs';
10
+ import * as path from 'node:path';
11
+ export const migrationLoaderMethods = {
12
+ async loadFromSource() {
13
+ switch (this.config.source) {
14
+ case 'sqlite':
15
+ return this.loadFromSQLite();
16
+ case 'markdown':
17
+ return this.loadFromMarkdown();
18
+ case 'json':
19
+ return this.loadFromJSON();
20
+ case 'memory-manager':
21
+ return this.loadFromMemoryManager();
22
+ case 'monoswarm-memory':
23
+ return this.loadFromSwarmMemory();
24
+ case 'distributed-memory':
25
+ return this.loadFromDistributedMemory();
26
+ default:
27
+ throw new Error(`Unknown migration source: ${this.config.source}`);
28
+ }
29
+ },
30
+ async loadFromSQLite() {
31
+ const dbPath = this.config.sourcePath;
32
+ // A .json-suffixed "sqlite" source is actually an exported JSON dump —
33
+ // route it through the real JSON loader instead of opening it as a DB.
34
+ if (dbPath.endsWith('.json')) {
35
+ return this.loadFromJSON();
36
+ }
37
+ let Database;
38
+ try {
39
+ const mod = await import('better-sqlite3');
40
+ Database = mod.default;
41
+ }
42
+ catch (error) {
43
+ throw new Error(`Cannot read SQLite source "${dbPath}": better-sqlite3 is not available (${error.message})`);
44
+ }
45
+ let db;
46
+ try {
47
+ db = new Database(dbPath, { readonly: true, fileMustExist: true });
48
+ }
49
+ catch (error) {
50
+ throw new Error(`Failed to open SQLite database "${dbPath}": ${error.message}`);
51
+ }
52
+ try {
53
+ const tables = db
54
+ .prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='memory_entries'")
55
+ .all();
56
+ if (tables.length === 0) {
57
+ throw new Error(`SQLite source "${dbPath}" has no "memory_entries" table — not a recognized memory backend database`);
58
+ }
59
+ const rows = db.prepare('SELECT * FROM memory_entries').all();
60
+ return rows.map((row) => ({
61
+ id: row.id,
62
+ key: row.key,
63
+ value: row.content,
64
+ namespace: row.namespace,
65
+ tags: this.safeJsonParse(row.tags, []),
66
+ metadata: this.safeJsonParse(row.metadata, {}),
67
+ createdAt: row.created_at,
68
+ updatedAt: row.updated_at,
69
+ }));
70
+ }
71
+ finally {
72
+ db.close();
73
+ }
74
+ },
75
+ safeJsonParse(value, fallback) {
76
+ if (!value)
77
+ return fallback;
78
+ try {
79
+ return JSON.parse(value);
80
+ }
81
+ catch {
82
+ return fallback;
83
+ }
84
+ },
85
+ async loadFromMarkdown() {
86
+ const entries = [];
87
+ const basePath = this.config.sourcePath;
88
+ try {
89
+ const files = await this.walkDirectory(basePath, '.md');
90
+ for (const filePath of files) {
91
+ try {
92
+ const content = await fs.readFile(filePath, 'utf-8');
93
+ const entry = this.parseMarkdownEntry(filePath, content, basePath);
94
+ if (entry) {
95
+ entries.push(entry);
96
+ }
97
+ }
98
+ catch (error) {
99
+ this.addError(filePath, error.message, 'PARSE_ERROR', true);
100
+ }
101
+ }
102
+ return entries;
103
+ }
104
+ catch (error) {
105
+ throw new Error(`Failed to load Markdown: ${error.message}`);
106
+ }
107
+ },
108
+ async loadFromJSON(filePathOverride) {
109
+ const filePath = filePathOverride ?? this.config.sourcePath;
110
+ try {
111
+ const content = await fs.readFile(filePath, 'utf-8');
112
+ const data = JSON.parse(content);
113
+ // Handle different JSON formats
114
+ if (Array.isArray(data)) {
115
+ return data;
116
+ }
117
+ else if (data.entries) {
118
+ return data.entries;
119
+ }
120
+ else if (typeof data === 'object') {
121
+ // Assume it's a namespace -> entries map
122
+ const entries = [];
123
+ for (const [namespace, namespaceEntries] of Object.entries(data)) {
124
+ if (Array.isArray(namespaceEntries)) {
125
+ for (const entry of namespaceEntries) {
126
+ entries.push({ ...entry, namespace });
127
+ }
128
+ }
129
+ }
130
+ return entries;
131
+ }
132
+ return [];
133
+ }
134
+ catch (error) {
135
+ throw new Error(`Failed to load JSON: ${error.message}`);
136
+ }
137
+ },
138
+ async loadFromMemoryManager() {
139
+ // Would integrate with existing MemoryManager instance
140
+ // For now, try to load from common paths
141
+ const possiblePaths = ['./memory/memory-store.json', './.swarm/memory.db', './memory.json'];
142
+ for (const p of possiblePaths) {
143
+ try {
144
+ const fullPath = path.resolve(this.config.sourcePath, p);
145
+ await fs.access(fullPath);
146
+ // #85: read the verified fullPath, not this.config.sourcePath — the
147
+ // latter is the search directory, so readFile() on it throws EISDIR,
148
+ // the catch swallowed it, and the migration silently returned [].
149
+ // `await` is required: a bare `return promise` inside try/catch does
150
+ // not route rejections through the catch below.
151
+ const stat = await fs.stat(fullPath);
152
+ if (!stat.isFile())
153
+ continue;
154
+ return await this.loadFromJSON(fullPath);
155
+ }
156
+ catch { }
157
+ }
158
+ return [];
159
+ },
160
+ async loadFromSwarmMemory() {
161
+ // Would integrate with SwarmMemory partitions
162
+ const entries = [];
163
+ const basePath = this.config.sourcePath;
164
+ try {
165
+ // Check for swarm memory directory structure
166
+ const partitionsPath = path.join(basePath, '.swarm', 'memory');
167
+ const files = await this.walkDirectory(partitionsPath, '.json');
168
+ for (const filePath of files) {
169
+ try {
170
+ const content = await fs.readFile(filePath, 'utf-8');
171
+ const data = JSON.parse(content);
172
+ // Extract namespace from file path
173
+ const relativePath = path.relative(partitionsPath, filePath);
174
+ const namespace = path.dirname(relativePath).replace(/\\/g, '/');
175
+ if (Array.isArray(data)) {
176
+ entries.push(...data.map((e) => ({ ...e, namespace })));
177
+ }
178
+ else if (data.entries) {
179
+ entries.push(...data.entries.map((e) => ({ ...e, namespace })));
180
+ }
181
+ }
182
+ catch (error) {
183
+ this.addError(filePath, error.message, 'PARSE_ERROR', true);
184
+ }
185
+ }
186
+ return entries;
187
+ }
188
+ catch (_error) {
189
+ return [];
190
+ }
191
+ },
192
+ async loadFromDistributedMemory() {
193
+ // Would integrate with DistributedMemorySystem nodes
194
+ return this.loadFromSwarmMemory(); // Similar structure
195
+ },
196
+ async walkDirectory(dir, extension) {
197
+ const files = [];
198
+ try {
199
+ const entries = await fs.readdir(dir, { withFileTypes: true });
200
+ for (const entry of entries) {
201
+ const fullPath = path.join(dir, entry.name);
202
+ if (entry.isDirectory()) {
203
+ const subFiles = await this.walkDirectory(fullPath, extension);
204
+ files.push(...subFiles);
205
+ }
206
+ else if (entry.isFile() && entry.name.endsWith(extension)) {
207
+ files.push(fullPath);
208
+ }
209
+ }
210
+ }
211
+ catch (_error) {
212
+ // Directory doesn't exist or isn't readable
213
+ }
214
+ return files;
215
+ },
216
+ parseMarkdownEntry(filePath, content, basePath) {
217
+ // Extract frontmatter if present
218
+ const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);
219
+ const metadata = {};
220
+ let body = content;
221
+ if (frontmatterMatch) {
222
+ try {
223
+ // Simple YAML-like parsing
224
+ const frontmatter = frontmatterMatch[1];
225
+ for (const line of frontmatter.split('\n')) {
226
+ const colonIndex = line.indexOf(':');
227
+ if (colonIndex > 0) {
228
+ const key = line.substring(0, colonIndex).trim();
229
+ let value = line.substring(colonIndex + 1).trim();
230
+ // Parse common types
231
+ if (value === 'true')
232
+ value = true;
233
+ else if (value === 'false')
234
+ value = false;
235
+ else if (typeof value === 'string' && /^\d+$/.test(value))
236
+ value = parseInt(value, 10);
237
+ else if (typeof value === 'string' && value.startsWith('[') && value.endsWith(']')) {
238
+ try {
239
+ value = JSON.parse(value.replace(/'/g, '"'));
240
+ }
241
+ catch {
242
+ // Keep as string
243
+ }
244
+ }
245
+ metadata[key] = value;
246
+ }
247
+ }
248
+ body = frontmatterMatch[2];
249
+ }
250
+ catch {
251
+ // Failed to parse frontmatter, use whole content
252
+ }
253
+ }
254
+ // Derive key from file path
255
+ const relativePath = path.relative(basePath, filePath);
256
+ const key = relativePath.replace(/\\/g, '/').replace(/\.md$/, '').replace(/\//g, ':');
257
+ // Derive namespace from directory structure
258
+ const namespace = path.dirname(relativePath).replace(/\\/g, '/') || 'default';
259
+ return {
260
+ key,
261
+ value: body.trim(),
262
+ namespace,
263
+ tags: Array.isArray(metadata.tags) ? metadata.tags : [],
264
+ metadata,
265
+ timestamp: Date.now(),
266
+ };
267
+ },
268
+ };
269
+ //# sourceMappingURL=migration-loaders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration-loaders.js","sourceRoot":"","sources":["../src/migration-loaders.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Batch processing and legacy-entry transformation for MemoryMigrator.
3
+ * File-size sweep: split out of migration.ts. Mixed into
4
+ * MemoryMigrator.prototype at the bottom of migration.ts.
5
+ *
6
+ * @module v1/memory/migration-transform
7
+ */
8
+ import type { MemoryMigrator } from './migration.js';
9
+ import type { LegacyEntry } from './migration-loaders.js';
10
+ import { type MemoryEntry } from './types.js';
11
+ export declare const migrationTransformMethods: {
12
+ processBatch(this: MemoryMigrator, batch: LegacyEntry[]): Promise<void>;
13
+ transformEntry(this: MemoryMigrator, legacy: LegacyEntry): Promise<MemoryEntry>;
14
+ validateEntry(this: MemoryMigrator, entry: LegacyEntry): {
15
+ valid: boolean;
16
+ reason?: string;
17
+ };
18
+ isValidMemoryType(this: MemoryMigrator, type: string): boolean;
19
+ parseTimestamp(this: MemoryMigrator, value: string | number | undefined): number;
20
+ };
21
+ //# sourceMappingURL=migration-transform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration-transform.d.ts","sourceRoot":"","sources":["../src/migration-transform.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAEL,KAAK,WAAW,EAGjB,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,yBAAyB;IAC9B,YAAY,OAAO,cAAc,SAAS,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA4CvE,cAAc,OAAO,cAAc,UAAU,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IA8DrF,aAAa,OAAO,cAAc,SAAS,WAAW,GAAG;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;IAgB5F,iBAAiB,OAAO,cAAc,QAAQ,MAAM,GAAG,OAAO;IAM9D,cAAc,OAAO,cAAc,SAAS,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM;CAWjF,CAAC"}