@moltos/sdk 0.5.1 → 0.5.5

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.
@@ -1,628 +0,0 @@
1
- "use strict";
2
- /**
3
- * ClawFS - Persistent File System for MoltOS SDK
4
- *
5
- * A content-addressed, merkle-backed storage system with tiered storage
6
- * and agent-native permissions. Designed to survive VM crashes and host moves.
7
- */
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.SearchIndex = exports.MemoryStorageBackend = exports.ClawFSClient = exports.StorageTierError = exports.PermissionDeniedError = exports.FileNotFoundError = exports.ClawFSError = exports.Permission = exports.StorageTier = void 0;
10
- exports.computeCID = computeCID;
11
- exports.computeMerkleRoot = computeMerkleRoot;
12
- exports.chunkData = chunkData;
13
- const crypto_1 = require("crypto");
14
- /** Storage tier indicating access pattern and persistence level */
15
- var StorageTier;
16
- (function (StorageTier) {
17
- /** Hot: Frequently accessed, memory-cached, local SSD */
18
- StorageTier["HOT"] = "hot";
19
- /** Warm: Occasionally accessed, local disk */
20
- StorageTier["WARM"] = "warm";
21
- /** Cold: Rarely accessed, replicated remote storage */
22
- StorageTier["COLD"] = "cold";
23
- })(StorageTier || (exports.StorageTier = StorageTier = {}));
24
- /** Permission levels for file access */
25
- var Permission;
26
- (function (Permission) {
27
- /** Read-only access */
28
- Permission["READ"] = "read";
29
- /** Write access (includes read) */
30
- Permission["WRITE"] = "write";
31
- /** Admin access (includes read, write, delete, share) */
32
- Permission["ADMIN"] = "admin";
33
- })(Permission || (exports.Permission = Permission = {}));
34
- // ============================================================================
35
- // ERROR CLASSES
36
- // ============================================================================
37
- class ClawFSError extends Error {
38
- code;
39
- constructor(message, code) {
40
- super(message);
41
- this.code = code;
42
- this.name = 'ClawFSError';
43
- }
44
- }
45
- exports.ClawFSError = ClawFSError;
46
- class FileNotFoundError extends ClawFSError {
47
- constructor(cid) {
48
- super(`File not found: ${cid}`, 'FILE_NOT_FOUND');
49
- this.name = 'FileNotFoundError';
50
- }
51
- }
52
- exports.FileNotFoundError = FileNotFoundError;
53
- class PermissionDeniedError extends ClawFSError {
54
- constructor(agentId, cid, required) {
55
- super(`Agent ${agentId} lacks ${required} permission for ${cid}`, 'PERMISSION_DENIED');
56
- this.name = 'PermissionDeniedError';
57
- }
58
- }
59
- exports.PermissionDeniedError = PermissionDeniedError;
60
- class StorageTierError extends ClawFSError {
61
- constructor(message) {
62
- super(message, 'STORAGE_TIER_ERROR');
63
- this.name = 'StorageTierError';
64
- }
65
- }
66
- exports.StorageTierError = StorageTierError;
67
- // ============================================================================
68
- // UTILITY FUNCTIONS
69
- // ============================================================================
70
- /** Compute SHA-256 CID for content */
71
- function computeCID(data) {
72
- return (0, crypto_1.createHash)('sha256').update(data).digest('hex');
73
- }
74
- /** Compute Merkle tree root from blocks */
75
- function computeMerkleRoot(blocks) {
76
- if (blocks.length === 0) {
77
- return (0, crypto_1.createHash)('sha256').update('').digest('hex');
78
- }
79
- // Build tree bottom-up
80
- let level = blocks.map(hash => ({ hash }));
81
- while (level.length > 1) {
82
- const nextLevel = [];
83
- for (let i = 0; i < level.length; i += 2) {
84
- const left = level[i];
85
- const right = level[i + 1] || left; // Duplicate last if odd
86
- const combined = (0, crypto_1.createHash)('sha256')
87
- .update(left.hash + right.hash)
88
- .digest('hex');
89
- nextLevel.push({ hash: combined, left, right });
90
- }
91
- level = nextLevel;
92
- }
93
- return level[0].hash;
94
- }
95
- /** Chunk data into blocks for storage */
96
- function chunkData(data, blockSize = 1024 * 1024) {
97
- const chunks = [];
98
- for (let i = 0; i < data.length; i += blockSize) {
99
- chunks.push(data.subarray(i, i + blockSize));
100
- }
101
- return chunks.length > 0 ? chunks : [Buffer.alloc(0)];
102
- }
103
- // ============================================================================
104
- // MEMORY BACKEND (for demo/testing - production would use persistent storage)
105
- // ============================================================================
106
- class MemoryStorageBackend {
107
- hot = new Map();
108
- warm = new Map();
109
- cold = new Map();
110
- accessStats = new Map();
111
- async get(cid) {
112
- for (const tier of [this.hot, this.warm, this.cold]) {
113
- if (tier.has(cid)) {
114
- const stats = this.accessStats.get(cid) || { count: 0, lastAccessed: new Date() };
115
- stats.count++;
116
- stats.lastAccessed = new Date();
117
- this.accessStats.set(cid, stats);
118
- return tier.get(cid);
119
- }
120
- }
121
- return null;
122
- }
123
- async put(cid, data, tier) {
124
- const target = tier === StorageTier.HOT ? this.hot : tier === StorageTier.WARM ? this.warm : this.cold;
125
- target.set(cid, Buffer.from(data)); // Copy to prevent external mutation
126
- this.accessStats.set(cid, { count: 0, lastAccessed: new Date() });
127
- }
128
- async delete(cid) {
129
- this.hot.delete(cid);
130
- this.warm.delete(cid);
131
- this.cold.delete(cid);
132
- this.accessStats.delete(cid);
133
- }
134
- async exists(cid) {
135
- return this.hot.has(cid) || this.warm.has(cid) || this.cold.has(cid);
136
- }
137
- async promote(cid, toTier) {
138
- const data = await this.get(cid);
139
- if (!data)
140
- throw new FileNotFoundError(cid);
141
- // Remove from all tiers
142
- this.hot.delete(cid);
143
- this.warm.delete(cid);
144
- this.cold.delete(cid);
145
- // Put in target tier
146
- await this.put(cid, data, toTier);
147
- }
148
- async demote(cid, toTier) {
149
- await this.promote(cid, toTier); // Same logic: remove + re-add
150
- }
151
- getTier(cid) {
152
- if (this.hot.has(cid))
153
- return StorageTier.HOT;
154
- if (this.warm.has(cid))
155
- return StorageTier.WARM;
156
- if (this.cold.has(cid))
157
- return StorageTier.COLD;
158
- return null;
159
- }
160
- getStats(cid) {
161
- return this.accessStats.get(cid);
162
- }
163
- }
164
- exports.MemoryStorageBackend = MemoryStorageBackend;
165
- // ============================================================================
166
- // SEARCH INDEX
167
- // ============================================================================
168
- class SearchIndex {
169
- index = new Map(); // term -> CIDs
170
- metadata = new Map();
171
- indexFile(cid, metadata, content) {
172
- this.metadata.set(cid, metadata);
173
- // Index metadata fields
174
- const terms = new Set();
175
- metadata.name.toLowerCase().split(/\s+/).forEach(t => terms.add(t));
176
- metadata.tags.forEach(tag => tag.toLowerCase().split(/\s+/).forEach(t => terms.add(t)));
177
- // Index content if provided (simplified - production would use vector embeddings)
178
- if (content) {
179
- content.toLowerCase().split(/\s+/).forEach(t => {
180
- if (t.length > 2)
181
- terms.add(t);
182
- });
183
- }
184
- terms.forEach(term => {
185
- const cids = this.index.get(term) || [];
186
- if (!cids.includes(cid)) {
187
- cids.push(cid);
188
- this.index.set(term, cids);
189
- }
190
- });
191
- }
192
- removeFile(cid) {
193
- this.metadata.delete(cid);
194
- this.index.forEach((cids, term) => {
195
- const filtered = cids.filter(c => c !== cid);
196
- if (filtered.length === 0) {
197
- this.index.delete(term);
198
- }
199
- else {
200
- this.index.set(term, filtered);
201
- }
202
- });
203
- }
204
- search(query, limit = 10) {
205
- const queryTerms = query.toLowerCase().split(/\s+/).filter(t => t.length > 0);
206
- const scores = new Map();
207
- const highlights = new Map();
208
- queryTerms.forEach(term => {
209
- this.index.forEach((cids, indexedTerm) => {
210
- if (indexedTerm.includes(term) || term.includes(indexedTerm)) {
211
- cids.forEach(cid => {
212
- const score = (scores.get(cid) || 0) + (indexedTerm === term ? 2 : 1);
213
- scores.set(cid, score);
214
- const hl = highlights.get(cid) || new Set();
215
- hl.add(indexedTerm);
216
- highlights.set(cid, hl);
217
- });
218
- }
219
- });
220
- });
221
- return Array.from(scores.entries())
222
- .sort((a, b) => b[1] - a[1])
223
- .slice(0, limit)
224
- .map(([cid, score]) => ({
225
- cid,
226
- score,
227
- highlights: Array.from(highlights.get(cid) || []),
228
- metadata: this.metadata.get(cid),
229
- }));
230
- }
231
- }
232
- exports.SearchIndex = SearchIndex;
233
- // ============================================================================
234
- // CLAWFS CLIENT
235
- // ============================================================================
236
- class ClawFSClient {
237
- agentId;
238
- backend;
239
- fileIndex = new Map();
240
- snapshots = [];
241
- searchIndex = new SearchIndex();
242
- config;
243
- constructor(config, backend) {
244
- this.config = config;
245
- this.agentId = config.agentId;
246
- this.backend = backend || new MemoryStorageBackend();
247
- }
248
- // ==========================================================================
249
- // CORE OPERATIONS
250
- // ==========================================================================
251
- /**
252
- * Store a file and return its Content Identifier (CID)
253
- *
254
- * @param data - File content as Buffer
255
- * @param metadata - File metadata
256
- * @param options - Storage options
257
- * @returns The CID of the stored file
258
- */
259
- async write(data, metadata = {}, options = {}) {
260
- const tier = options.tier || this.inferTier(data.length);
261
- const now = new Date();
262
- // Chunk data
263
- const chunks = chunkData(data);
264
- const blockCIDs = [];
265
- // Store each chunk
266
- for (const chunk of chunks) {
267
- const blockCID = computeCID(chunk);
268
- if (!(await this.backend.exists(blockCID))) {
269
- await this.backend.put(blockCID, chunk, tier);
270
- }
271
- blockCIDs.push(blockCID);
272
- }
273
- // Compute root CID from full data
274
- const cid = computeCID(data);
275
- const merkleRoot = computeMerkleRoot(blockCIDs);
276
- // Build file entry
277
- const fileEntry = {
278
- cid,
279
- owner: this.agentId,
280
- metadata: {
281
- name: metadata.name || 'unnamed',
282
- mimeType: metadata.mimeType || 'application/octet-stream',
283
- size: data.length,
284
- createdAt: metadata.createdAt || now,
285
- modifiedAt: now,
286
- tags: metadata.tags || [],
287
- encryptionKeyId: options.encrypt ? this.generateKeyId() : undefined,
288
- compression: options.compress ? 'gzip' : undefined,
289
- },
290
- tier,
291
- accessControl: [{
292
- agentId: this.agentId,
293
- permission: Permission.ADMIN,
294
- grantedAt: now,
295
- grantedBy: this.agentId,
296
- }],
297
- merkleRoot,
298
- blocks: blockCIDs,
299
- replicationFactor: options.replicationFactor || this.config.replicationFactor,
300
- lastAccessedAt: now,
301
- accessCount: 0,
302
- };
303
- // Index file
304
- this.fileIndex.set(cid, fileEntry);
305
- this.searchIndex.indexFile(cid, fileEntry.metadata);
306
- return cid;
307
- }
308
- /**
309
- * Retrieve a file by its CID
310
- *
311
- * @param cid - Content Identifier
312
- * @param requesterAgentId - Optional agent ID for permission check (defaults to current agent)
313
- * @returns File content as Buffer
314
- */
315
- async read(cid, requesterAgentId) {
316
- const agentId = requesterAgentId || this.agentId;
317
- const entry = this.fileIndex.get(cid);
318
- if (!entry) {
319
- throw new FileNotFoundError(cid);
320
- }
321
- // Check permission
322
- if (!this.hasPermission(agentId, entry, Permission.READ)) {
323
- throw new PermissionDeniedError(agentId, cid, Permission.READ);
324
- }
325
- // Retrieve blocks
326
- const chunks = [];
327
- for (const blockCID of entry.blocks) {
328
- const chunk = await this.backend.get(blockCID);
329
- if (!chunk) {
330
- throw new ClawFSError(`Block ${blockCID} missing for file ${cid}`, 'BLOCK_MISSING');
331
- }
332
- chunks.push(chunk);
333
- }
334
- // Update access stats
335
- entry.lastAccessedAt = new Date();
336
- entry.accessCount++;
337
- // Auto-promote hot files
338
- if (entry.tier !== StorageTier.HOT && entry.accessCount > 10) {
339
- await this.promoteToTier(cid, StorageTier.HOT);
340
- }
341
- return Buffer.concat(chunks);
342
- }
343
- /**
344
- * Share a file with other agents
345
- *
346
- * @param cid - Content Identifier
347
- * @param agentIds - Array of agent IDs to share with
348
- * @param permission - Permission level to grant
349
- * @returns The updated FileEntry
350
- */
351
- async share(cid, agentIds, permission = Permission.READ) {
352
- const entry = this.fileIndex.get(cid);
353
- if (!entry) {
354
- throw new FileNotFoundError(cid);
355
- }
356
- // Check current agent has admin permission
357
- if (!this.hasPermission(this.agentId, entry, Permission.ADMIN)) {
358
- throw new PermissionDeniedError(this.agentId, cid, Permission.ADMIN);
359
- }
360
- const now = new Date();
361
- for (const agentId of agentIds) {
362
- // Remove existing permission for this agent
363
- entry.accessControl = entry.accessControl.filter(ac => ac.agentId !== agentId);
364
- // Add new permission
365
- entry.accessControl.push({
366
- agentId,
367
- permission,
368
- grantedAt: now,
369
- grantedBy: this.agentId,
370
- });
371
- }
372
- return entry;
373
- }
374
- /**
375
- * List files accessible to the current agent
376
- *
377
- * @param options - Filter options
378
- * @returns Array of FileEntry objects
379
- */
380
- async list(options = {}) {
381
- let files = Array.from(this.fileIndex.values());
382
- // Filter by ownership if requested
383
- if (options.ownedOnly) {
384
- files = files.filter(f => f.owner === this.agentId);
385
- }
386
- else {
387
- // Filter by permission
388
- files = files.filter(f => this.hasPermission(this.agentId, f, Permission.READ));
389
- }
390
- // Filter by tier
391
- if (options.tier) {
392
- files = files.filter(f => f.tier === options.tier);
393
- }
394
- // Filter by tags
395
- if (options.tags && options.tags.length > 0) {
396
- files = files.filter(f => options.tags.some(tag => f.metadata.tags.includes(tag)));
397
- }
398
- // Sort by last accessed (most recent first)
399
- files.sort((a, b) => b.lastAccessedAt.getTime() - a.lastAccessedAt.getTime());
400
- // Apply pagination
401
- const offset = options.offset || 0;
402
- const limit = options.limit || files.length;
403
- return files.slice(offset, offset + limit);
404
- }
405
- /**
406
- * Create a Merkle-backed snapshot of the current file system state
407
- *
408
- * @param options - Snapshot options
409
- * @returns The created Snapshot
410
- */
411
- async snapshot(options = {}) {
412
- let files = Array.from(this.fileIndex.values());
413
- // Apply filters
414
- if (options.includeFiles) {
415
- const includeSet = new Set(options.includeFiles);
416
- files = files.filter(f => includeSet.has(f.cid));
417
- }
418
- if (options.excludeFiles) {
419
- const excludeSet = new Set(options.excludeFiles);
420
- files = files.filter(f => !excludeSet.has(f.cid));
421
- }
422
- // Build snapshot Merkle tree
423
- const fileRoots = files.map(f => f.merkleRoot).sort();
424
- const merkleRoot = computeMerkleRoot(fileRoots);
425
- const snapshot = {
426
- id: (0, crypto_1.randomUUID)(),
427
- timestamp: new Date(),
428
- merkleRoot,
429
- fileCount: files.length,
430
- totalSize: files.reduce((sum, f) => sum + f.metadata.size, 0),
431
- previousSnapshot: this.snapshots.length > 0
432
- ? this.snapshots[this.snapshots.length - 1].id
433
- : undefined,
434
- includedFiles: files.map(f => f.cid),
435
- };
436
- this.snapshots.push(snapshot);
437
- return snapshot;
438
- }
439
- /**
440
- * Semantic search across files
441
- *
442
- * @param query - Search query string
443
- * @param options - Search options
444
- * @returns Array of SearchResult objects
445
- */
446
- async search(query, options = {}) {
447
- const limit = options.limit || 10;
448
- // Get search results
449
- let results = this.searchIndex.search(query, limit * 2); // Get extra for filtering
450
- // Filter by tags if specified
451
- if (options.tags && options.tags.length > 0) {
452
- results = results.filter(r => options.tags.some(tag => r.metadata.tags.includes(tag)));
453
- }
454
- // Filter to only files we have permission to read
455
- results = results.filter(r => {
456
- const entry = this.fileIndex.get(r.cid);
457
- return entry && this.hasPermission(this.agentId, entry, Permission.READ);
458
- });
459
- return results.slice(0, limit);
460
- }
461
- // ==========================================================================
462
- // ADVANCED OPERATIONS
463
- // ==========================================================================
464
- /**
465
- * Change the storage tier of a file
466
- *
467
- * @param cid - Content Identifier
468
- * @param tier - Target storage tier
469
- */
470
- async setTier(cid, tier) {
471
- const entry = this.fileIndex.get(cid);
472
- if (!entry) {
473
- throw new FileNotFoundError(cid);
474
- }
475
- if (!this.hasPermission(this.agentId, entry, Permission.WRITE)) {
476
- throw new PermissionDeniedError(this.agentId, cid, Permission.WRITE);
477
- }
478
- for (const blockCID of entry.blocks) {
479
- await this.backend.promote(blockCID, tier);
480
- }
481
- entry.tier = tier;
482
- }
483
- /**
484
- * Delete a file (requires ADMIN permission)
485
- *
486
- * @param cid - Content Identifier
487
- */
488
- async delete(cid) {
489
- const entry = this.fileIndex.get(cid);
490
- if (!entry) {
491
- throw new FileNotFoundError(cid);
492
- }
493
- if (!this.hasPermission(this.agentId, entry, Permission.ADMIN)) {
494
- throw new PermissionDeniedError(this.agentId, cid, Permission.ADMIN);
495
- }
496
- // Delete blocks
497
- for (const blockCID of entry.blocks) {
498
- // Check if block is used by other files before deleting
499
- const usedByOthers = Array.from(this.fileIndex.values()).some(f => f.cid !== cid && f.blocks.includes(blockCID));
500
- if (!usedByOthers) {
501
- await this.backend.delete(blockCID);
502
- }
503
- }
504
- // Remove from indices
505
- this.fileIndex.delete(cid);
506
- this.searchIndex.removeFile(cid);
507
- }
508
- /**
509
- * Get file entry metadata without reading content
510
- *
511
- * @param cid - Content Identifier
512
- * @returns FileEntry if found and accessible
513
- */
514
- async stat(cid) {
515
- const entry = this.fileIndex.get(cid);
516
- if (!entry)
517
- return null;
518
- if (!this.hasPermission(this.agentId, entry, Permission.READ)) {
519
- return null;
520
- }
521
- return entry;
522
- }
523
- /**
524
- * Get all snapshots
525
- *
526
- * @returns Array of snapshots
527
- */
528
- async getSnapshots() {
529
- return [...this.snapshots];
530
- }
531
- /**
532
- * Verify file integrity using Merkle tree
533
- *
534
- * @param cid - Content Identifier
535
- * @returns True if file is valid
536
- */
537
- async verify(cid) {
538
- const entry = this.fileIndex.get(cid);
539
- if (!entry)
540
- return false;
541
- try {
542
- const blockHashes = [];
543
- for (const blockCID of entry.blocks) {
544
- const chunk = await this.backend.get(blockCID);
545
- if (!chunk)
546
- return false;
547
- blockHashes.push(computeCID(chunk)); // Verify block CID matches content
548
- }
549
- const computedRoot = computeMerkleRoot(blockHashes);
550
- return computedRoot === entry.merkleRoot;
551
- }
552
- catch {
553
- return false;
554
- }
555
- }
556
- // ==========================================================================
557
- // PRIVATE HELPERS
558
- // ==========================================================================
559
- inferTier(size) {
560
- if (size < 1024 * 1024)
561
- return StorageTier.HOT; // < 1MB
562
- if (size < 100 * 1024 * 1024)
563
- return StorageTier.WARM; // < 100MB
564
- return StorageTier.COLD;
565
- }
566
- hasPermission(agentId, entry, required) {
567
- const ac = entry.accessControl.find(a => a.agentId === agentId);
568
- if (!ac)
569
- return false;
570
- // Check expiration
571
- if (ac.expiresAt && ac.expiresAt < new Date()) {
572
- return false;
573
- }
574
- const levels = [Permission.READ, Permission.WRITE, Permission.ADMIN];
575
- const requiredIdx = levels.indexOf(required);
576
- const grantedIdx = levels.indexOf(ac.permission);
577
- return grantedIdx >= requiredIdx;
578
- }
579
- async promoteToTier(cid, tier) {
580
- const entry = this.fileIndex.get(cid);
581
- if (!entry || entry.tier === tier)
582
- return;
583
- for (const blockCID of entry.blocks) {
584
- await this.backend.promote(blockCID, tier);
585
- }
586
- entry.tier = tier;
587
- }
588
- generateKeyId() {
589
- return `key-${(0, crypto_1.randomUUID)()}`;
590
- }
591
- // ==========================================================================
592
- // PERSISTENCE (for crash recovery)
593
- // ==========================================================================
594
- /**
595
- * Export file system state for persistence
596
- *
597
- * @returns Serialized state
598
- */
599
- exportState() {
600
- return {
601
- agentId: this.agentId,
602
- files: Array.from(this.fileIndex.entries()),
603
- snapshots: this.snapshots,
604
- config: this.config,
605
- exportedAt: new Date().toISOString(),
606
- };
607
- }
608
- /**
609
- * Import file system state (for recovery after crash)
610
- *
611
- * @param state - Serialized state
612
- */
613
- importState(state) {
614
- this.fileIndex = new Map(state.files);
615
- this.snapshots = state.snapshots;
616
- // Rebuild search index
617
- this.searchIndex = new SearchIndex();
618
- for (const [cid, entry] of this.fileIndex.entries()) {
619
- this.searchIndex.indexFile(cid, entry.metadata);
620
- }
621
- }
622
- }
623
- exports.ClawFSClient = ClawFSClient;
624
- // ============================================================================
625
- // EXPORTS
626
- // ============================================================================
627
- exports.default = ClawFSClient;
628
- //# sourceMappingURL=clawfs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"clawfs.js","sourceRoot":"","sources":["../../src/lib/clawfs.ts"],"names":[],"mappings":"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"}