@moltos/sdk 0.5.2 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +177 -0
- package/dist/adapters/langchain.d.ts +84 -0
- package/dist/adapters/langchain.d.ts.map +1 -0
- package/dist/adapters/langchain.js +145 -0
- package/dist/adapters/langchain.js.map +1 -0
- package/dist/adapters/openclaw.d.ts +83 -0
- package/dist/adapters/openclaw.d.ts.map +1 -0
- package/dist/adapters/openclaw.js +207 -0
- package/dist/adapters/openclaw.js.map +1 -0
- package/dist/clawfs.d.ts +95 -0
- package/dist/clawfs.d.ts.map +1 -0
- package/dist/clawfs.js +546 -0
- package/dist/clawfs.js.map +1 -0
- package/dist/cli.d.ts +21 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +156 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/agent.d.ts +15 -0
- package/dist/commands/agent.d.ts.map +1 -0
- package/dist/commands/agent.js +327 -0
- package/dist/commands/agent.js.map +1 -0
- package/dist/commands/cloud.d.ts +37 -0
- package/dist/commands/cloud.d.ts.map +1 -0
- package/dist/commands/cloud.js +390 -0
- package/dist/commands/cloud.js.map +1 -0
- package/dist/commands/fs.d.ts +5 -0
- package/dist/commands/fs.d.ts.map +1 -0
- package/dist/commands/fs.js +139 -0
- package/dist/commands/fs.js.map +1 -0
- package/dist/commands/init.d.ts +23 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +488 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/register.d.ts +8 -0
- package/dist/commands/register.d.ts.map +1 -0
- package/dist/commands/register.js +152 -0
- package/dist/commands/register.js.map +1 -0
- package/dist/commands/tap.d.ts +5 -0
- package/dist/commands/tap.d.ts.map +1 -0
- package/dist/commands/tap.js +31 -0
- package/dist/commands/tap.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/lib/supabase.d.ts +41 -0
- package/dist/lib/supabase.d.ts.map +1 -0
- package/dist/lib/supabase.js +125 -0
- package/dist/lib/supabase.js.map +1 -0
- package/dist/tap.d.ts +66 -0
- package/dist/tap.d.ts.map +1 -0
- package/dist/tap.js +302 -0
- package/dist/tap.js.map +1 -0
- package/package.json +38 -11
package/dist/clawfs.js
ADDED
|
@@ -0,0 +1,546 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ClawFS - Local OS-Level Cryptographic Filesystem
|
|
4
|
+
*
|
|
5
|
+
* Core memory patterns per specification:
|
|
6
|
+
* - Write: Blake3 hash → Merkle leaf → signed root
|
|
7
|
+
* - Read: Integrity verification against Merkle tree
|
|
8
|
+
* - Snapshot: Immutable checkpoints with signed roots
|
|
9
|
+
* - Temporal: Query state at any snapshot
|
|
10
|
+
*
|
|
11
|
+
* This is the CLIENT-SIDE implementation that runs inside the agent's ClawVM.
|
|
12
|
+
* For cloud storage, see lib/claw/fs/ (backend).
|
|
13
|
+
*/
|
|
14
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
17
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
18
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
19
|
+
}
|
|
20
|
+
Object.defineProperty(o, k2, desc);
|
|
21
|
+
}) : (function(o, m, k, k2) {
|
|
22
|
+
if (k2 === undefined) k2 = k;
|
|
23
|
+
o[k2] = m[k];
|
|
24
|
+
}));
|
|
25
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
26
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
27
|
+
}) : function(o, v) {
|
|
28
|
+
o["default"] = v;
|
|
29
|
+
});
|
|
30
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
31
|
+
var ownKeys = function(o) {
|
|
32
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
33
|
+
var ar = [];
|
|
34
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
35
|
+
return ar;
|
|
36
|
+
};
|
|
37
|
+
return ownKeys(o);
|
|
38
|
+
};
|
|
39
|
+
return function (mod) {
|
|
40
|
+
if (mod && mod.__esModule) return mod;
|
|
41
|
+
var result = {};
|
|
42
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
43
|
+
__setModuleDefault(result, mod);
|
|
44
|
+
return result;
|
|
45
|
+
};
|
|
46
|
+
})();
|
|
47
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
|
+
exports.ClawFS = void 0;
|
|
49
|
+
exports.clawFSCommand = clawFSCommand;
|
|
50
|
+
const fs = __importStar(require("fs"));
|
|
51
|
+
const path = __importStar(require("path"));
|
|
52
|
+
const crypto = __importStar(require("crypto"));
|
|
53
|
+
// ============================================================================
|
|
54
|
+
// BLAKE3 IMPLEMENTATION
|
|
55
|
+
// ============================================================================
|
|
56
|
+
// Simple Blake3 implementation using Node's crypto (fallback to SHA-256 for now)
|
|
57
|
+
// In production, use the blake3 npm package
|
|
58
|
+
function blake3Hash(data) {
|
|
59
|
+
// TODO: Replace with actual Blake3 when package is stable
|
|
60
|
+
// For now, use SHA-256 with Blake3 marker
|
|
61
|
+
const prefix = Buffer.from('BLAKE3');
|
|
62
|
+
const content = Buffer.isBuffer(data) ? data : Buffer.from(data, 'utf8');
|
|
63
|
+
return crypto.createHash('sha256').update(prefix).update(content).digest('hex');
|
|
64
|
+
}
|
|
65
|
+
// ============================================================================
|
|
66
|
+
// MERKLE TREE OPERATIONS
|
|
67
|
+
// ============================================================================
|
|
68
|
+
function hashPair(left, right) {
|
|
69
|
+
return blake3Hash(Buffer.from(left + right, 'hex'));
|
|
70
|
+
}
|
|
71
|
+
function createLeafNode(dataHash) {
|
|
72
|
+
return {
|
|
73
|
+
hash: dataHash,
|
|
74
|
+
isLeaf: true,
|
|
75
|
+
dataHash,
|
|
76
|
+
timestamp: new Date().toISOString(),
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
function createParentNode(left, right) {
|
|
80
|
+
const hash = hashPair(left.hash, right.hash);
|
|
81
|
+
return {
|
|
82
|
+
hash,
|
|
83
|
+
left: left.hash,
|
|
84
|
+
right: right.hash,
|
|
85
|
+
isLeaf: false,
|
|
86
|
+
timestamp: new Date().toISOString(),
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
function buildMerkleTree(leafHashes) {
|
|
90
|
+
if (leafHashes.length === 0) {
|
|
91
|
+
return {
|
|
92
|
+
rootHash: blake3Hash(Buffer.from('')),
|
|
93
|
+
leafCount: 0,
|
|
94
|
+
nodes: new Map(),
|
|
95
|
+
version: 1,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
const nodes = new Map();
|
|
99
|
+
let currentLevel = [];
|
|
100
|
+
// Create leaf nodes
|
|
101
|
+
for (const hash of leafHashes) {
|
|
102
|
+
const node = createLeafNode(hash);
|
|
103
|
+
nodes.set(hash, node);
|
|
104
|
+
currentLevel.push(hash);
|
|
105
|
+
}
|
|
106
|
+
// Build tree bottom-up
|
|
107
|
+
while (currentLevel.length > 1) {
|
|
108
|
+
const nextLevel = [];
|
|
109
|
+
for (let i = 0; i < currentLevel.length; i += 2) {
|
|
110
|
+
const leftHash = currentLevel[i];
|
|
111
|
+
const rightHash = currentLevel[i + 1] || leftHash; // Duplicate last if odd
|
|
112
|
+
const leftNode = nodes.get(leftHash);
|
|
113
|
+
const rightNode = nodes.get(rightHash);
|
|
114
|
+
const parentNode = createParentNode(leftNode, rightNode);
|
|
115
|
+
nodes.set(parentNode.hash, parentNode);
|
|
116
|
+
// Update parent references
|
|
117
|
+
leftNode.parent = parentNode.hash;
|
|
118
|
+
rightNode.parent = parentNode.hash;
|
|
119
|
+
nextLevel.push(parentNode.hash);
|
|
120
|
+
}
|
|
121
|
+
currentLevel = nextLevel;
|
|
122
|
+
}
|
|
123
|
+
return {
|
|
124
|
+
rootHash: currentLevel[0],
|
|
125
|
+
leafCount: leafHashes.length,
|
|
126
|
+
nodes,
|
|
127
|
+
version: 1,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
function addLeafToTree(tree, dataHash) {
|
|
131
|
+
const leafHashes = [];
|
|
132
|
+
// Collect existing leaf hashes
|
|
133
|
+
for (const [hash, node] of tree.nodes) {
|
|
134
|
+
if (node.isLeaf) {
|
|
135
|
+
leafHashes.push(hash);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
// Add new leaf
|
|
139
|
+
leafHashes.push(dataHash);
|
|
140
|
+
// Rebuild tree
|
|
141
|
+
return buildMerkleTree(leafHashes);
|
|
142
|
+
}
|
|
143
|
+
// ============================================================================
|
|
144
|
+
// CLAWFS CLASS
|
|
145
|
+
// ============================================================================
|
|
146
|
+
class ClawFS {
|
|
147
|
+
baseDir;
|
|
148
|
+
meta;
|
|
149
|
+
privateKey;
|
|
150
|
+
clawId;
|
|
151
|
+
constructor(baseDir, clawId, privateKey) {
|
|
152
|
+
this.baseDir = baseDir;
|
|
153
|
+
this.clawId = clawId;
|
|
154
|
+
this.privateKey = privateKey;
|
|
155
|
+
this.meta = this.loadOrInitialize();
|
|
156
|
+
}
|
|
157
|
+
// ========================================================================
|
|
158
|
+
// INITIALIZATION
|
|
159
|
+
// ========================================================================
|
|
160
|
+
loadOrInitialize() {
|
|
161
|
+
const metaPath = path.join(this.baseDir, '.moltos', 'clawfs-meta.json');
|
|
162
|
+
if (fs.existsSync(metaPath)) {
|
|
163
|
+
const raw = JSON.parse(fs.readFileSync(metaPath, 'utf8'));
|
|
164
|
+
// Reconstruct Maps from plain objects
|
|
165
|
+
const nodesMap = new Map();
|
|
166
|
+
if (raw.currentTree?.nodes) {
|
|
167
|
+
const nodesObj = typeof raw.currentTree.nodes === 'object'
|
|
168
|
+
? raw.currentTree.nodes
|
|
169
|
+
: Object.fromEntries(raw.currentTree.nodes);
|
|
170
|
+
for (const [key, value] of Object.entries(nodesObj)) {
|
|
171
|
+
nodesMap.set(key, value);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return {
|
|
175
|
+
version: raw.version,
|
|
176
|
+
clawId: raw.clawId,
|
|
177
|
+
createdAt: raw.createdAt,
|
|
178
|
+
currentTree: {
|
|
179
|
+
rootHash: raw.currentTree?.rootHash || '',
|
|
180
|
+
leafCount: raw.currentTree?.leafCount || 0,
|
|
181
|
+
nodes: nodesMap,
|
|
182
|
+
version: raw.currentTree?.version || 1,
|
|
183
|
+
},
|
|
184
|
+
snapshots: new Map(Object.entries(raw.snapshots || {})),
|
|
185
|
+
files: new Map(Object.entries(raw.files || {})),
|
|
186
|
+
temporalLog: (raw.temporalLog || []).map((t) => ({
|
|
187
|
+
...t,
|
|
188
|
+
files: new Map(Object.entries(t.files || {})),
|
|
189
|
+
})),
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
// Initialize new ClawFS
|
|
193
|
+
const meta = {
|
|
194
|
+
version: '1.0',
|
|
195
|
+
clawId: this.clawId,
|
|
196
|
+
createdAt: new Date().toISOString(),
|
|
197
|
+
currentTree: buildMerkleTree([]),
|
|
198
|
+
snapshots: new Map(),
|
|
199
|
+
files: new Map(),
|
|
200
|
+
temporalLog: [],
|
|
201
|
+
};
|
|
202
|
+
this.saveMetadata(meta);
|
|
203
|
+
return meta;
|
|
204
|
+
}
|
|
205
|
+
saveMetadata(meta = this.meta) {
|
|
206
|
+
const metaPath = path.join(this.baseDir, '.moltos', 'clawfs-meta.json');
|
|
207
|
+
const serializable = {
|
|
208
|
+
...meta,
|
|
209
|
+
currentTree: {
|
|
210
|
+
...meta.currentTree,
|
|
211
|
+
nodes: Object.fromEntries(meta.currentTree.nodes),
|
|
212
|
+
},
|
|
213
|
+
snapshots: Object.fromEntries(meta.snapshots),
|
|
214
|
+
files: Object.fromEntries(meta.files),
|
|
215
|
+
temporalLog: meta.temporalLog.map(t => ({
|
|
216
|
+
...t,
|
|
217
|
+
files: Object.fromEntries(t.files),
|
|
218
|
+
})),
|
|
219
|
+
};
|
|
220
|
+
fs.writeFileSync(metaPath, JSON.stringify(serializable, null, 2));
|
|
221
|
+
fs.chmodSync(metaPath, 0o600);
|
|
222
|
+
}
|
|
223
|
+
// ========================================================================
|
|
224
|
+
// WRITE PATTERN (Atomic + Merkle-Linked)
|
|
225
|
+
// ========================================================================
|
|
226
|
+
write(filePath, content) {
|
|
227
|
+
const contentBuf = Buffer.isBuffer(content) ? content : Buffer.from(content, 'utf8');
|
|
228
|
+
const contentHash = blake3Hash(contentBuf);
|
|
229
|
+
// Store content
|
|
230
|
+
const blobPath = path.join(this.baseDir, 'clawfs_data', 'blobs', contentHash.slice(0, 2), contentHash.slice(2));
|
|
231
|
+
fs.mkdirSync(path.dirname(blobPath), { recursive: true });
|
|
232
|
+
fs.writeFileSync(blobPath, contentBuf);
|
|
233
|
+
// Update Merkle tree
|
|
234
|
+
this.meta.currentTree = addLeafToTree(this.meta.currentTree, contentHash);
|
|
235
|
+
this.meta.currentTree.version++;
|
|
236
|
+
// Sign the new root
|
|
237
|
+
const signature = this.signRoot(this.meta.currentTree.rootHash);
|
|
238
|
+
// Update file record
|
|
239
|
+
const now = new Date().toISOString();
|
|
240
|
+
const existingFile = this.meta.files.get(filePath);
|
|
241
|
+
this.meta.files.set(filePath, {
|
|
242
|
+
path: filePath,
|
|
243
|
+
contentHash,
|
|
244
|
+
size: contentBuf.length,
|
|
245
|
+
createdAt: existingFile?.createdAt || now,
|
|
246
|
+
modifiedAt: now,
|
|
247
|
+
snapshotIds: existingFile?.snapshotIds || [],
|
|
248
|
+
});
|
|
249
|
+
this.saveMetadata();
|
|
250
|
+
return {
|
|
251
|
+
contentHash,
|
|
252
|
+
treeRoot: this.meta.currentTree.rootHash,
|
|
253
|
+
treeVersion: this.meta.currentTree.version,
|
|
254
|
+
signature,
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
// ========================================================================
|
|
258
|
+
// READ PATTERN (Integrity-First)
|
|
259
|
+
// ========================================================================
|
|
260
|
+
read(filePath) {
|
|
261
|
+
const file = this.meta.files.get(filePath);
|
|
262
|
+
if (!file) {
|
|
263
|
+
throw new Error(`File not found: ${filePath}`);
|
|
264
|
+
}
|
|
265
|
+
// Fetch content
|
|
266
|
+
const blobPath = path.join(this.baseDir, 'clawfs_data', 'blobs', file.contentHash.slice(0, 2), file.contentHash.slice(2));
|
|
267
|
+
if (!fs.existsSync(blobPath)) {
|
|
268
|
+
throw new Error(`Blob not found: ${file.contentHash}`);
|
|
269
|
+
}
|
|
270
|
+
const content = fs.readFileSync(blobPath);
|
|
271
|
+
// Verify integrity
|
|
272
|
+
const computedHash = blake3Hash(content);
|
|
273
|
+
const verified = computedHash === file.contentHash;
|
|
274
|
+
if (!verified) {
|
|
275
|
+
throw new Error(`Integrity check failed for ${filePath}: hash mismatch`);
|
|
276
|
+
}
|
|
277
|
+
// Verify Merkle inclusion (check if hash is in tree)
|
|
278
|
+
const inTree = this.meta.currentTree.nodes.has(file.contentHash);
|
|
279
|
+
if (!inTree) {
|
|
280
|
+
throw new Error(`Integrity check failed for ${filePath}: not in Merkle tree`);
|
|
281
|
+
}
|
|
282
|
+
return {
|
|
283
|
+
content,
|
|
284
|
+
contentHash: file.contentHash,
|
|
285
|
+
verified: true,
|
|
286
|
+
treeRoot: this.meta.currentTree.rootHash,
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
// ========================================================================
|
|
290
|
+
// SNAPSHOT PATTERN (Rollback & Audit Safety)
|
|
291
|
+
// ========================================================================
|
|
292
|
+
snapshot(description) {
|
|
293
|
+
const snapshotId = `snap_${Date.now()}_${crypto.randomBytes(4).toString('hex')}`;
|
|
294
|
+
const timestamp = new Date().toISOString();
|
|
295
|
+
// Sign the current root
|
|
296
|
+
const signature = this.signRoot(this.meta.currentTree.rootHash);
|
|
297
|
+
const snapshot = {
|
|
298
|
+
id: snapshotId,
|
|
299
|
+
rootHash: this.meta.currentTree.rootHash,
|
|
300
|
+
treeVersion: this.meta.currentTree.version,
|
|
301
|
+
timestamp,
|
|
302
|
+
signature,
|
|
303
|
+
description,
|
|
304
|
+
parentSnapshot: this.getLatestSnapshotId(),
|
|
305
|
+
};
|
|
306
|
+
this.meta.snapshots.set(snapshotId, snapshot);
|
|
307
|
+
// Record temporal state
|
|
308
|
+
const fileMap = new Map();
|
|
309
|
+
for (const [path, file] of this.meta.files) {
|
|
310
|
+
fileMap.set(path, file.contentHash);
|
|
311
|
+
file.snapshotIds.push(snapshotId);
|
|
312
|
+
}
|
|
313
|
+
this.meta.temporalLog.push({
|
|
314
|
+
snapshotId,
|
|
315
|
+
timestamp,
|
|
316
|
+
files: fileMap,
|
|
317
|
+
rootHash: snapshot.rootHash,
|
|
318
|
+
});
|
|
319
|
+
this.saveMetadata();
|
|
320
|
+
return {
|
|
321
|
+
snapshotId,
|
|
322
|
+
rootHash: snapshot.rootHash,
|
|
323
|
+
timestamp,
|
|
324
|
+
fileCount: this.meta.files.size,
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
getSnapshot(snapshotId) {
|
|
328
|
+
return this.meta.snapshots.get(snapshotId);
|
|
329
|
+
}
|
|
330
|
+
listSnapshots() {
|
|
331
|
+
return Array.from(this.meta.snapshots.values()).sort((a, b) => new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime());
|
|
332
|
+
}
|
|
333
|
+
getLatestSnapshotId() {
|
|
334
|
+
const snapshots = this.listSnapshots();
|
|
335
|
+
return snapshots[0]?.id;
|
|
336
|
+
}
|
|
337
|
+
// ========================================================================
|
|
338
|
+
// TEMPORAL MEMORY PATTERN
|
|
339
|
+
// ========================================================================
|
|
340
|
+
/**
|
|
341
|
+
* Query state at a specific snapshot
|
|
342
|
+
*/
|
|
343
|
+
getStateAtSnapshot(snapshotId) {
|
|
344
|
+
return this.meta.temporalLog.find(s => s.snapshotId === snapshotId);
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* Get all changes since a snapshot
|
|
348
|
+
*/
|
|
349
|
+
getChangesSince(snapshotId) {
|
|
350
|
+
const snapshotIndex = this.meta.temporalLog.findIndex(s => s.snapshotId === snapshotId);
|
|
351
|
+
if (snapshotIndex === -1) {
|
|
352
|
+
throw new Error(`Snapshot not found: ${snapshotId}`);
|
|
353
|
+
}
|
|
354
|
+
const snapshotState = this.meta.temporalLog[snapshotIndex];
|
|
355
|
+
const currentFiles = this.meta.files;
|
|
356
|
+
const added = [];
|
|
357
|
+
const modified = [];
|
|
358
|
+
const removed = [];
|
|
359
|
+
// Check current files against snapshot
|
|
360
|
+
for (const [path, file] of currentFiles) {
|
|
361
|
+
const snapshotHash = snapshotState.files.get(path);
|
|
362
|
+
if (!snapshotHash) {
|
|
363
|
+
added.push(path);
|
|
364
|
+
}
|
|
365
|
+
else if (snapshotHash !== file.contentHash) {
|
|
366
|
+
modified.push(path);
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
// Check for removed files
|
|
370
|
+
for (const path of snapshotState.files.keys()) {
|
|
371
|
+
if (!currentFiles.has(path)) {
|
|
372
|
+
removed.push(path);
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
return { added, modified, removed };
|
|
376
|
+
}
|
|
377
|
+
// ========================================================================
|
|
378
|
+
// EVIDENCE & AUDIT PATTERN
|
|
379
|
+
// ========================================================================
|
|
380
|
+
/**
|
|
381
|
+
* Generate cryptographically verifiable evidence for Arbitra
|
|
382
|
+
*/
|
|
383
|
+
generateEvidence(filePath, snapshotId) {
|
|
384
|
+
const snapshot = snapshotId
|
|
385
|
+
? this.meta.snapshots.get(snapshotId)
|
|
386
|
+
: this.listSnapshots()[0];
|
|
387
|
+
if (!snapshot) {
|
|
388
|
+
throw new Error('No snapshots available for evidence');
|
|
389
|
+
}
|
|
390
|
+
const state = this.getStateAtSnapshot(snapshot.id);
|
|
391
|
+
if (!state) {
|
|
392
|
+
throw new Error(`State not found for snapshot: ${snapshot.id}`);
|
|
393
|
+
}
|
|
394
|
+
const contentHash = state.files.get(filePath);
|
|
395
|
+
if (!contentHash) {
|
|
396
|
+
throw new Error(`File not found in snapshot: ${filePath}`);
|
|
397
|
+
}
|
|
398
|
+
// Verify the evidence
|
|
399
|
+
const treeHasHash = this.meta.currentTree.nodes.has(contentHash);
|
|
400
|
+
return {
|
|
401
|
+
filePath,
|
|
402
|
+
contentHash,
|
|
403
|
+
treeRoot: snapshot.rootHash,
|
|
404
|
+
signature: snapshot.signature,
|
|
405
|
+
timestamp: snapshot.timestamp,
|
|
406
|
+
verified: treeHasHash,
|
|
407
|
+
};
|
|
408
|
+
}
|
|
409
|
+
// ========================================================================
|
|
410
|
+
// UTILITY METHODS
|
|
411
|
+
// ========================================================================
|
|
412
|
+
getStats() {
|
|
413
|
+
let totalSize = 0;
|
|
414
|
+
for (const file of this.meta.files.values()) {
|
|
415
|
+
totalSize += file.size;
|
|
416
|
+
}
|
|
417
|
+
return {
|
|
418
|
+
fileCount: this.meta.files.size,
|
|
419
|
+
snapshotCount: this.meta.snapshots.size,
|
|
420
|
+
currentRoot: this.meta.currentTree.rootHash,
|
|
421
|
+
treeVersion: this.meta.currentTree.version,
|
|
422
|
+
totalSize,
|
|
423
|
+
};
|
|
424
|
+
}
|
|
425
|
+
listFiles() {
|
|
426
|
+
return Array.from(this.meta.files.keys());
|
|
427
|
+
}
|
|
428
|
+
// ========================================================================
|
|
429
|
+
// PRIVATE HELPERS
|
|
430
|
+
// ========================================================================
|
|
431
|
+
signRoot(rootHash) {
|
|
432
|
+
// For Ed25519 keys, we need to use the proper signing method
|
|
433
|
+
// The privateKey is a PEM string - create a private key object and sign
|
|
434
|
+
try {
|
|
435
|
+
const sign = crypto.createSign('SHA256');
|
|
436
|
+
sign.update(rootHash);
|
|
437
|
+
sign.end();
|
|
438
|
+
return sign.sign(this.privateKey, 'base64');
|
|
439
|
+
}
|
|
440
|
+
catch (err) {
|
|
441
|
+
// Fallback: use HMAC with the private key hash for Ed25519
|
|
442
|
+
// Ed25519 doesn't work with createSign in older Node versions
|
|
443
|
+
const hmac = crypto.createHmac('sha256', this.privateKey);
|
|
444
|
+
hmac.update(rootHash);
|
|
445
|
+
return hmac.digest('base64');
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
exports.ClawFS = ClawFS;
|
|
450
|
+
// ============================================================================
|
|
451
|
+
// CLI INTEGRATION
|
|
452
|
+
// ============================================================================
|
|
453
|
+
async function clawFSCommand(action, options, clawId, privateKey) {
|
|
454
|
+
const baseDir = process.cwd();
|
|
455
|
+
const clawfs = new ClawFS(baseDir, clawId, privateKey);
|
|
456
|
+
switch (action) {
|
|
457
|
+
case 'write': {
|
|
458
|
+
if (!options.file || !options.content) {
|
|
459
|
+
console.error('Usage: moltos clawfs write --file <path> --content <data>');
|
|
460
|
+
process.exit(1);
|
|
461
|
+
}
|
|
462
|
+
const result = clawfs.write(options.file, options.content);
|
|
463
|
+
console.log(`✓ Written: ${options.file}`);
|
|
464
|
+
console.log(` Content Hash (Blake3): ${result.contentHash.slice(0, 16)}...`);
|
|
465
|
+
console.log(` Tree Root: ${result.treeRoot.slice(0, 16)}...`);
|
|
466
|
+
console.log(` Tree Version: ${result.treeVersion}`);
|
|
467
|
+
console.log(` Signed: ${result.signature.slice(0, 32)}...`);
|
|
468
|
+
break;
|
|
469
|
+
}
|
|
470
|
+
case 'read': {
|
|
471
|
+
if (!options.file) {
|
|
472
|
+
console.error('Usage: moltos clawfs read --file <path>');
|
|
473
|
+
process.exit(1);
|
|
474
|
+
}
|
|
475
|
+
const result = clawfs.read(options.file);
|
|
476
|
+
console.log(result.content.toString('utf8'));
|
|
477
|
+
break;
|
|
478
|
+
}
|
|
479
|
+
case 'snapshot': {
|
|
480
|
+
const result = clawfs.snapshot(options.description);
|
|
481
|
+
console.log(`✓ Snapshot created: ${result.snapshotId}`);
|
|
482
|
+
console.log(` Root Hash: ${result.rootHash.slice(0, 16)}...`);
|
|
483
|
+
console.log(` Files: ${result.fileCount}`);
|
|
484
|
+
console.log(` Timestamp: ${result.timestamp}`);
|
|
485
|
+
break;
|
|
486
|
+
}
|
|
487
|
+
case 'list': {
|
|
488
|
+
const snapshots = clawfs.listSnapshots();
|
|
489
|
+
console.log('\n📸 Snapshots:');
|
|
490
|
+
snapshots.forEach(snap => {
|
|
491
|
+
console.log(` ${snap.id} - ${snap.description || 'No description'}`);
|
|
492
|
+
console.log(` Root: ${snap.rootHash.slice(0, 16)}... | ${snap.timestamp}`);
|
|
493
|
+
});
|
|
494
|
+
console.log('\n📁 Files:');
|
|
495
|
+
clawfs.listFiles().forEach(f => console.log(` ${f}`));
|
|
496
|
+
break;
|
|
497
|
+
}
|
|
498
|
+
case 'temporal': {
|
|
499
|
+
if (options.since) {
|
|
500
|
+
const changes = clawfs.getChangesSince(options.since);
|
|
501
|
+
console.log(`\nChanges since ${options.since}:`);
|
|
502
|
+
console.log(` Added: ${changes.added.join(', ') || 'none'}`);
|
|
503
|
+
console.log(` Modified: ${changes.modified.join(', ') || 'none'}`);
|
|
504
|
+
console.log(` Removed: ${changes.removed.join(', ') || 'none'}`);
|
|
505
|
+
}
|
|
506
|
+
else if (options.at) {
|
|
507
|
+
const state = clawfs.getStateAtSnapshot(options.at);
|
|
508
|
+
if (state) {
|
|
509
|
+
console.log(`\nState at snapshot ${options.at}:`);
|
|
510
|
+
console.log(` Timestamp: ${state.timestamp}`);
|
|
511
|
+
console.log(` Files: ${state.files.size}`);
|
|
512
|
+
state.files.forEach((hash, path) => {
|
|
513
|
+
console.log(` ${path} → ${hash.slice(0, 16)}...`);
|
|
514
|
+
});
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
break;
|
|
518
|
+
}
|
|
519
|
+
case 'evidence': {
|
|
520
|
+
if (!options.file) {
|
|
521
|
+
console.error('Usage: moltos clawfs evidence --file <path> [--snapshot <id>]');
|
|
522
|
+
process.exit(1);
|
|
523
|
+
}
|
|
524
|
+
const evidence = clawfs.generateEvidence(options.file, options.snapshot);
|
|
525
|
+
console.log('\n🔍 Cryptographic Evidence:');
|
|
526
|
+
console.log(` File: ${evidence.filePath}`);
|
|
527
|
+
console.log(` Content Hash: ${evidence.contentHash}`);
|
|
528
|
+
console.log(` Tree Root: ${evidence.treeRoot}`);
|
|
529
|
+
console.log(` Signature: ${evidence.signature.slice(0, 40)}...`);
|
|
530
|
+
console.log(` Timestamp: ${evidence.timestamp}`);
|
|
531
|
+
console.log(` Verified: ${evidence.verified ? '✓ VALID' : '✗ INVALID'}`);
|
|
532
|
+
break;
|
|
533
|
+
}
|
|
534
|
+
case 'stats': {
|
|
535
|
+
const stats = clawfs.getStats();
|
|
536
|
+
console.log('\n💾 ClawFS Statistics:');
|
|
537
|
+
console.log(` Files: ${stats.fileCount}`);
|
|
538
|
+
console.log(` Snapshots: ${stats.snapshotCount}`);
|
|
539
|
+
console.log(` Current Root: ${stats.currentRoot.slice(0, 16)}...`);
|
|
540
|
+
console.log(` Tree Version: ${stats.treeVersion}`);
|
|
541
|
+
console.log(` Total Size: ${(stats.totalSize / 1024).toFixed(2)} KB`);
|
|
542
|
+
break;
|
|
543
|
+
}
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
//# sourceMappingURL=clawfs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clawfs.js","sourceRoot":"","sources":["../src/clawfs.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* MoltOS CLI - The official command-line interface for MoltOS
|
|
4
|
+
*
|
|
5
|
+
* Commands:
|
|
6
|
+
* init Initialize a new MoltOS project
|
|
7
|
+
* agent start Start your local agent
|
|
8
|
+
* agent status Check agent status
|
|
9
|
+
* fs write Write file to ClawFS (Merkle-verified)
|
|
10
|
+
* fs read Read file from ClawFS (integrity-checked)
|
|
11
|
+
* fs snapshot Create immutable checkpoint
|
|
12
|
+
* fs temporal Query state at snapshot
|
|
13
|
+
* fs evidence Generate cryptographic evidence
|
|
14
|
+
* tap status Check TAP reputation
|
|
15
|
+
*
|
|
16
|
+
* Usage:
|
|
17
|
+
* npx @moltos/sdk@latest init
|
|
18
|
+
* npx @moltos/sdk agent start
|
|
19
|
+
*/
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;;GAiBG"}
|