@claude-flow/cli 3.5.2 → 3.5.3

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 (111) hide show
  1. package/README.md +156 -26
  2. package/dist/src/appliance/gguf-engine.d.ts +91 -0
  3. package/dist/src/appliance/gguf-engine.d.ts.map +1 -0
  4. package/dist/src/appliance/gguf-engine.js +425 -0
  5. package/dist/src/appliance/gguf-engine.js.map +1 -0
  6. package/dist/src/appliance/ruvllm-bridge.d.ts +102 -0
  7. package/dist/src/appliance/ruvllm-bridge.d.ts.map +1 -0
  8. package/dist/src/appliance/ruvllm-bridge.js +292 -0
  9. package/dist/src/appliance/ruvllm-bridge.js.map +1 -0
  10. package/dist/src/appliance/rvfa-builder.d.ts +44 -0
  11. package/dist/src/appliance/rvfa-builder.d.ts.map +1 -0
  12. package/dist/src/appliance/rvfa-builder.js +329 -0
  13. package/dist/src/appliance/rvfa-builder.js.map +1 -0
  14. package/dist/src/appliance/rvfa-distribution.d.ts +97 -0
  15. package/dist/src/appliance/rvfa-distribution.d.ts.map +1 -0
  16. package/dist/src/appliance/rvfa-distribution.js +370 -0
  17. package/dist/src/appliance/rvfa-distribution.js.map +1 -0
  18. package/dist/src/appliance/rvfa-format.d.ts +111 -0
  19. package/dist/src/appliance/rvfa-format.d.ts.map +1 -0
  20. package/dist/src/appliance/rvfa-format.js +393 -0
  21. package/dist/src/appliance/rvfa-format.js.map +1 -0
  22. package/dist/src/appliance/rvfa-runner.d.ts +69 -0
  23. package/dist/src/appliance/rvfa-runner.d.ts.map +1 -0
  24. package/dist/src/appliance/rvfa-runner.js +237 -0
  25. package/dist/src/appliance/rvfa-runner.js.map +1 -0
  26. package/dist/src/appliance/rvfa-signing.d.ts +123 -0
  27. package/dist/src/appliance/rvfa-signing.d.ts.map +1 -0
  28. package/dist/src/appliance/rvfa-signing.js +347 -0
  29. package/dist/src/appliance/rvfa-signing.js.map +1 -0
  30. package/dist/src/commands/appliance-advanced.d.ts +9 -0
  31. package/dist/src/commands/appliance-advanced.d.ts.map +1 -0
  32. package/dist/src/commands/appliance-advanced.js +215 -0
  33. package/dist/src/commands/appliance-advanced.js.map +1 -0
  34. package/dist/src/commands/appliance.d.ts +8 -0
  35. package/dist/src/commands/appliance.d.ts.map +1 -0
  36. package/dist/src/commands/appliance.js +406 -0
  37. package/dist/src/commands/appliance.js.map +1 -0
  38. package/dist/src/commands/benchmark.js +2 -2
  39. package/dist/src/commands/benchmark.js.map +1 -1
  40. package/dist/src/commands/claims.js +1 -1
  41. package/dist/src/commands/claims.js.map +1 -1
  42. package/dist/src/commands/config.js +1 -1
  43. package/dist/src/commands/config.js.map +1 -1
  44. package/dist/src/commands/deployment.js +1 -1
  45. package/dist/src/commands/deployment.js.map +1 -1
  46. package/dist/src/commands/doctor.js +1 -1
  47. package/dist/src/commands/doctor.js.map +1 -1
  48. package/dist/src/commands/embeddings.js +1 -1
  49. package/dist/src/commands/embeddings.js.map +1 -1
  50. package/dist/src/commands/hooks.js +1 -1
  51. package/dist/src/commands/hooks.js.map +1 -1
  52. package/dist/src/commands/index.d.ts +2 -0
  53. package/dist/src/commands/index.d.ts.map +1 -1
  54. package/dist/src/commands/index.js +6 -0
  55. package/dist/src/commands/index.js.map +1 -1
  56. package/dist/src/commands/init.js +11 -11
  57. package/dist/src/commands/init.js.map +1 -1
  58. package/dist/src/commands/memory.d.ts.map +1 -1
  59. package/dist/src/commands/memory.js +24 -0
  60. package/dist/src/commands/memory.js.map +1 -1
  61. package/dist/src/commands/neural.js +1 -1
  62. package/dist/src/commands/neural.js.map +1 -1
  63. package/dist/src/commands/performance.js +1 -1
  64. package/dist/src/commands/performance.js.map +1 -1
  65. package/dist/src/commands/plugins.js +1 -1
  66. package/dist/src/commands/plugins.js.map +1 -1
  67. package/dist/src/commands/providers.js +1 -1
  68. package/dist/src/commands/providers.js.map +1 -1
  69. package/dist/src/commands/security.js +1 -1
  70. package/dist/src/commands/security.js.map +1 -1
  71. package/dist/src/commands/start.js +11 -11
  72. package/dist/src/commands/start.js.map +1 -1
  73. package/dist/src/commands/status.js +3 -3
  74. package/dist/src/commands/status.js.map +1 -1
  75. package/dist/src/commands/transfer-store.js +1 -1
  76. package/dist/src/commands/transfer-store.js.map +1 -1
  77. package/dist/src/index.js +2 -2
  78. package/dist/src/index.js.map +1 -1
  79. package/dist/src/init/claudemd-generator.js +1 -1
  80. package/dist/src/init/claudemd-generator.js.map +1 -1
  81. package/dist/src/init/executor.d.ts.map +1 -1
  82. package/dist/src/init/executor.js +9 -8
  83. package/dist/src/init/executor.js.map +1 -1
  84. package/dist/src/init/settings-generator.d.ts.map +1 -1
  85. package/dist/src/init/settings-generator.js +66 -16
  86. package/dist/src/init/settings-generator.js.map +1 -1
  87. package/dist/src/init/statusline-generator.d.ts +1 -1
  88. package/dist/src/init/statusline-generator.js +4 -4
  89. package/dist/src/mcp-tools/coordination-tools.js +1 -1
  90. package/dist/src/mcp-tools/coordination-tools.js.map +1 -1
  91. package/dist/src/mcp-tools/daa-tools.js +5 -5
  92. package/dist/src/mcp-tools/daa-tools.js.map +1 -1
  93. package/dist/src/mcp-tools/github-tools.js +2 -2
  94. package/dist/src/mcp-tools/github-tools.js.map +1 -1
  95. package/dist/src/mcp-tools/hooks-tools.js +1 -1
  96. package/dist/src/mcp-tools/hooks-tools.js.map +1 -1
  97. package/dist/src/mcp-tools/performance-tools.js +1 -1
  98. package/dist/src/mcp-tools/performance-tools.js.map +1 -1
  99. package/dist/src/mcp-tools/system-tools.d.ts.map +1 -1
  100. package/dist/src/mcp-tools/system-tools.js +21 -6
  101. package/dist/src/mcp-tools/system-tools.js.map +1 -1
  102. package/dist/src/memory/memory-initializer.d.ts +6 -0
  103. package/dist/src/memory/memory-initializer.d.ts.map +1 -1
  104. package/dist/src/memory/memory-initializer.js +54 -2
  105. package/dist/src/memory/memory-initializer.js.map +1 -1
  106. package/dist/src/runtime/headless.js +3 -3
  107. package/dist/src/runtime/headless.js.map +1 -1
  108. package/dist/src/services/claim-service.js +1 -1
  109. package/dist/src/services/claim-service.js.map +1 -1
  110. package/dist/tsconfig.tsbuildinfo +1 -1
  111. package/package.json +1 -1
@@ -0,0 +1,370 @@
1
+ /**
2
+ * RVFA Distribution & Hot-Patch Module
3
+ *
4
+ * IPFS publishing of RVFA appliances via Pinata and RVFP binary patches
5
+ * for section-level hot updates with atomic rollback.
6
+ *
7
+ * RVFP layout: [4B "RVFP"] [4B version u32LE] [4B header_len u32LE]
8
+ * [header JSON] [new section data] [32B SHA256 footer]
9
+ */
10
+ import { createHash, sign, verify as edVerify } from 'node:crypto';
11
+ import { readFile, writeFile, rename, unlink, copyFile, mkdir } from 'node:fs/promises';
12
+ import { dirname } from 'node:path';
13
+ import { request as httpsRequest } from 'node:https';
14
+ import { gzipSync, gunzipSync } from 'node:zlib';
15
+ import { RvfaReader, RvfaWriter } from './rvfa-format.js';
16
+ // ── Constants ────────────────────────────────────────────────
17
+ const RVFP_VERSION = 1;
18
+ const PRE = 12; // preamble: 4 magic + 4 version + 4 header_len
19
+ const SHA_LEN = 32;
20
+ const DEFAULT_GW = 'https://gateway.pinata.cloud';
21
+ const DEFAULT_API = 'https://api.pinata.cloud';
22
+ // ── Crypto helpers ───────────────────────────────────────────
23
+ function sha256(d) { return createHash('sha256').update(d).digest('hex'); }
24
+ function sha256B(d) { return createHash('sha256').update(d).digest(); }
25
+ function detectKeyFormat(key) {
26
+ const str = key.toString('utf-8');
27
+ if (str.includes('BEGIN PRIVATE KEY'))
28
+ return { format: 'pem', type: 'pkcs8' };
29
+ if (str.includes('BEGIN PUBLIC KEY'))
30
+ return { format: 'pem', type: 'spki' };
31
+ // Heuristic: DER-encoded keys are raw binary, never valid UTF-8 "BEGIN"
32
+ return { format: 'der', type: 'pkcs8' }; // caller must override type for public keys
33
+ }
34
+ function edSign(data, key) {
35
+ const det = detectKeyFormat(key);
36
+ return sign(null, data, { key, format: det.format, type: det.type }).toString('hex');
37
+ }
38
+ function edCheck(data, sig, key) {
39
+ try {
40
+ const det = detectKeyFormat(key);
41
+ const type = det.format === 'pem' ? det.type : 'spki'; // public key for verify
42
+ return edVerify(null, data, { key, format: det.format, type }, Buffer.from(sig, 'hex'));
43
+ }
44
+ catch {
45
+ return false;
46
+ }
47
+ }
48
+ // ── HTTP helpers ─────────────────────────────────────────────
49
+ function pinataReq(method, path, jwt, body, ct) {
50
+ return new Promise((resolve, reject) => {
51
+ const u = new URL(path);
52
+ const h = { Authorization: `Bearer ${jwt}` };
53
+ if (ct)
54
+ h['Content-Type'] = ct;
55
+ if (body)
56
+ h['Content-Length'] = String(body.length);
57
+ const req = httpsRequest({ hostname: u.hostname, path: u.pathname + u.search, method, headers: h }, (res) => {
58
+ const ch = [];
59
+ res.on('data', (c) => ch.push(c));
60
+ res.on('end', () => {
61
+ const raw = Buffer.concat(ch);
62
+ let data;
63
+ try {
64
+ data = JSON.parse(raw.toString('utf-8'));
65
+ }
66
+ catch {
67
+ data = raw;
68
+ }
69
+ resolve({ status: res.statusCode ?? 0, data });
70
+ });
71
+ });
72
+ req.setTimeout(30_000, () => { req.destroy(new Error('Request timed out after 30s')); });
73
+ req.on('error', reject);
74
+ if (body)
75
+ req.write(body);
76
+ req.end();
77
+ });
78
+ }
79
+ function httpGet(url, maxRedirects = 5) {
80
+ return new Promise((resolve, reject) => {
81
+ if (maxRedirects <= 0)
82
+ return reject(new Error('Too many redirects'));
83
+ const u = new URL(url);
84
+ const req = httpsRequest({ hostname: u.hostname, path: u.pathname + u.search, method: 'GET' }, (res) => {
85
+ if (res.statusCode && res.statusCode >= 300 && res.statusCode < 400 && res.headers.location) {
86
+ return void httpGet(res.headers.location, maxRedirects - 1).then(resolve, reject);
87
+ }
88
+ const ch = [];
89
+ res.on('data', (c) => ch.push(c));
90
+ res.on('end', () => resolve(Buffer.concat(ch)));
91
+ });
92
+ req.setTimeout(30_000, () => { req.destroy(new Error('Request timed out after 30s')); });
93
+ req.on('error', reject);
94
+ req.end();
95
+ });
96
+ }
97
+ function multipart(name, file, data, meta) {
98
+ const b = `----Rvfa${Date.now()}${Math.random().toString(36).slice(2)}`;
99
+ const parts = [];
100
+ if (meta) {
101
+ parts.push(Buffer.from(`--${b}\r\nContent-Disposition: form-data; name="pinataMetadata"\r\n` +
102
+ `Content-Type: application/json\r\n\r\n${meta}\r\n`));
103
+ }
104
+ parts.push(Buffer.from(`--${b}\r\nContent-Disposition: form-data; name="${name}"; filename="${file}"\r\n` +
105
+ `Content-Type: application/octet-stream\r\n\r\n`));
106
+ parts.push(data, Buffer.from(`\r\n--${b}--\r\n`));
107
+ return { body: Buffer.concat(parts), ct: `multipart/form-data; boundary=${b}` };
108
+ }
109
+ /** Extract patch section data and bounds from a parsed patch buffer. */
110
+ function patchData(buf) {
111
+ const hLen = buf.readUInt32LE(8);
112
+ const start = PRE + hLen;
113
+ const end = buf.length - SHA_LEN;
114
+ return { start, end, section: buf.subarray(start, end) };
115
+ }
116
+ /** Canonical JSON: recursive key-sorting for deterministic serialization. */
117
+ function canonicalJson(value) {
118
+ return JSON.stringify(value, (_key, val) => {
119
+ if (val !== null && typeof val === 'object' && !Array.isArray(val) && !Buffer.isBuffer(val)) {
120
+ const sorted = {};
121
+ for (const k of Object.keys(val).sort()) {
122
+ sorted[k] = val[k];
123
+ }
124
+ return sorted;
125
+ }
126
+ return val;
127
+ });
128
+ }
129
+ /** Build a failed ApplyResult. */
130
+ function failResult(sec, errs, extra) {
131
+ return { success: false, newSize: 0, patchedSection: sec, errors: errs, ...extra };
132
+ }
133
+ // ── RvfaPatcher ──────────────────────────────────────────────
134
+ export class RvfaPatcher {
135
+ static async createPatch(opts) {
136
+ const comp = opts.compression ?? 'none';
137
+ const payload = comp === 'gzip' ? gzipSync(opts.sectionData) : opts.sectionData;
138
+ const header = {
139
+ magic: 'RVFP', version: RVFP_VERSION,
140
+ targetApplianceName: opts.targetName, targetApplianceVersion: opts.targetVersion,
141
+ targetSection: opts.sectionId, patchVersion: opts.patchVersion,
142
+ created: new Date().toISOString(), newSectionSize: payload.length,
143
+ newSectionSha256: sha256(payload), compression: comp,
144
+ };
145
+ if (opts.privateKey && opts.signedBy) {
146
+ const signable = Buffer.concat([Buffer.from(canonicalJson(header), 'utf-8'), payload]);
147
+ header.signature = edSign(signable, opts.privateKey);
148
+ header.signedBy = opts.signedBy;
149
+ }
150
+ const hJson = Buffer.from(JSON.stringify(header), 'utf-8');
151
+ const magic = Buffer.from('RVFP');
152
+ const ver = Buffer.alloc(4);
153
+ ver.writeUInt32LE(RVFP_VERSION, 0);
154
+ const hLen = Buffer.alloc(4);
155
+ hLen.writeUInt32LE(hJson.length, 0);
156
+ return Buffer.concat([magic, ver, hLen, hJson, payload, sha256B(payload)]);
157
+ }
158
+ static parsePatchHeader(buf) {
159
+ if (buf.length < PRE)
160
+ throw new Error('Buffer too small for RVFP preamble');
161
+ const magic = buf.subarray(0, 4).toString('ascii');
162
+ if (magic !== 'RVFP')
163
+ throw new Error(`Invalid RVFP magic: "${magic}"`);
164
+ const ver = buf.readUInt32LE(4);
165
+ if (ver !== RVFP_VERSION)
166
+ throw new Error(`Unsupported RVFP version: ${ver}`);
167
+ const hLen = buf.readUInt32LE(8);
168
+ if (PRE + hLen > buf.length)
169
+ throw new Error('Buffer too small for declared header');
170
+ const h = JSON.parse(buf.subarray(PRE, PRE + hLen).toString('utf-8'));
171
+ if (h.magic !== 'RVFP')
172
+ throw new Error('RVFP header magic mismatch');
173
+ return h;
174
+ }
175
+ static async verifyPatch(buf) {
176
+ const errors = [];
177
+ let header;
178
+ try {
179
+ header = RvfaPatcher.parsePatchHeader(buf);
180
+ }
181
+ catch (e) {
182
+ const empty = {
183
+ magic: 'RVFP', version: 0, targetApplianceName: '', targetApplianceVersion: '',
184
+ targetSection: '', patchVersion: '', created: '', newSectionSize: 0,
185
+ newSectionSha256: '', compression: 'none',
186
+ };
187
+ return { valid: false, header: empty, errors: [e.message] };
188
+ }
189
+ const { start, end, section } = patchData(buf);
190
+ if (end < start) {
191
+ errors.push('Patch too small: no room for section data and footer');
192
+ return { valid: false, header, errors };
193
+ }
194
+ if (section.length !== header.newSectionSize)
195
+ errors.push(`Size mismatch: header=${header.newSectionSize}, actual=${section.length}`);
196
+ if (sha256(section) !== header.newSectionSha256)
197
+ errors.push('Section SHA256 mismatch');
198
+ if (!sha256B(section).equals(buf.subarray(buf.length - SHA_LEN)))
199
+ errors.push('Footer SHA256 mismatch');
200
+ return { valid: errors.length === 0, header, errors };
201
+ }
202
+ static async applyPatch(rvfaPath, patchBuf, opts) {
203
+ const doBackup = opts?.backup ?? true;
204
+ const doVerify = opts?.verify ?? true;
205
+ // Parse & verify patch
206
+ let header;
207
+ try {
208
+ header = RvfaPatcher.parsePatchHeader(patchBuf);
209
+ }
210
+ catch (e) {
211
+ return failResult('', [e.message]);
212
+ }
213
+ const sec = header.targetSection;
214
+ // Verify signature
215
+ if (opts?.publicKey && header.signature) {
216
+ const { section } = patchData(patchBuf);
217
+ const unsigned = { ...header };
218
+ delete unsigned.signature;
219
+ delete unsigned.signedBy;
220
+ const signable = Buffer.concat([Buffer.from(canonicalJson(unsigned), 'utf-8'), section]);
221
+ if (!edCheck(signable, header.signature, opts.publicKey))
222
+ return failResult(sec, ['Patch signature verification failed']);
223
+ }
224
+ // Verify patch integrity
225
+ const check = await RvfaPatcher.verifyPatch(patchBuf);
226
+ if (!check.valid)
227
+ return failResult(sec, check.errors);
228
+ // Read target RVFA
229
+ let reader;
230
+ try {
231
+ reader = await RvfaReader.fromFile(rvfaPath);
232
+ }
233
+ catch (e) {
234
+ return failResult(sec, [`Failed to read RVFA: ${e.message}`]);
235
+ }
236
+ const rh = reader.getHeader();
237
+ // Verify target matches
238
+ const errs = [];
239
+ if (rh.name !== header.targetApplianceName)
240
+ errs.push(`Name mismatch: patch="${header.targetApplianceName}", file="${rh.name}"`);
241
+ if (rh.appVersion !== header.targetApplianceVersion)
242
+ errs.push(`Version mismatch: patch="${header.targetApplianceVersion}", file="${rh.appVersion}"`);
243
+ if (errs.length)
244
+ return failResult(sec, errs);
245
+ if (!rh.sections.find((s) => s.id === sec))
246
+ return failResult(sec, [`Section "${sec}" not found in appliance`]);
247
+ // Backup
248
+ let backupPath;
249
+ if (doBackup) {
250
+ backupPath = rvfaPath + '.bak';
251
+ await copyFile(rvfaPath, backupPath);
252
+ }
253
+ // Extract new section data from patch (decompress if needed)
254
+ let newData = patchData(patchBuf).section;
255
+ if (header.compression === 'gzip')
256
+ newData = gunzipSync(newData);
257
+ // Rebuild RVFA with replaced section
258
+ const writer = new RvfaWriter({ ...rh, sections: [] });
259
+ for (const s of rh.sections) {
260
+ const comp = s.compression === 'zstd' ? 'gzip' : s.compression;
261
+ if (s.id === sec) {
262
+ writer.addSection(s.id, newData, { compression: comp, type: s.type });
263
+ }
264
+ else {
265
+ writer.addSection(s.id, reader.extractSection(s.id), { compression: comp, type: s.type });
266
+ }
267
+ }
268
+ const newRvfa = writer.build();
269
+ // Atomic write (tmp + rename)
270
+ const tmpPath = rvfaPath + `.tmp.${Date.now()}`;
271
+ try {
272
+ await writeFile(tmpPath, newRvfa);
273
+ await rename(tmpPath, rvfaPath);
274
+ }
275
+ catch (e) {
276
+ await unlink(tmpPath).catch(() => { });
277
+ if (backupPath)
278
+ await copyFile(backupPath, rvfaPath).catch(() => { });
279
+ return failResult(sec, [`Atomic write failed: ${e.message}`], { backupPath });
280
+ }
281
+ // Post-patch verification with rollback
282
+ if (doVerify) {
283
+ try {
284
+ const vr = await RvfaReader.fromFile(rvfaPath);
285
+ const vResult = vr.verify();
286
+ if (!vResult.valid) {
287
+ if (backupPath)
288
+ await copyFile(backupPath, rvfaPath).catch(() => { });
289
+ return failResult(sec, [`Post-patch verification failed: ${vResult.errors.join('; ')}`], { backupPath, newSize: newRvfa.length });
290
+ }
291
+ }
292
+ catch (e) {
293
+ if (backupPath)
294
+ await copyFile(backupPath, rvfaPath).catch(() => { });
295
+ return failResult(sec, [`Post-patch verify error: ${e.message}`], { backupPath, newSize: newRvfa.length });
296
+ }
297
+ }
298
+ return { success: true, backupPath, newSize: newRvfa.length, patchedSection: sec, errors: [] };
299
+ }
300
+ }
301
+ // ── RvfaPublisher ────────────────────────────────────────────
302
+ export class RvfaPublisher {
303
+ jwt;
304
+ gw;
305
+ api;
306
+ constructor(config) {
307
+ this.jwt = config.pinataJwt || process.env.PINATA_API_JWT || '';
308
+ this.gw = (config.gatewayUrl || DEFAULT_GW).replace(/\/+$/, '');
309
+ this.api = (config.apiUrl || DEFAULT_API).replace(/\/+$/, '');
310
+ if (!this.jwt)
311
+ throw new Error('Pinata JWT required (config.pinataJwt or PINATA_API_JWT)');
312
+ }
313
+ async upload(fileName, data, kv) {
314
+ const meta = JSON.stringify({ name: fileName, keyvalues: kv });
315
+ const { body, ct } = multipart('file', fileName, data, meta);
316
+ const res = await pinataReq('POST', `${this.api}/pinning/pinFileToIPFS`, this.jwt, body, ct);
317
+ if (res.status !== 200)
318
+ throw new Error(`Pinata upload failed (HTTP ${res.status}): ${JSON.stringify(res.data)}`);
319
+ const r = res.data;
320
+ return {
321
+ cid: r.IpfsHash, size: r.PinSize,
322
+ gatewayUrl: `${this.gw}/ipfs/${r.IpfsHash}`, pinataUrl: `${this.api}/pinning/pins/${r.IpfsHash}`,
323
+ };
324
+ }
325
+ async publish(rvfaPath, meta) {
326
+ const data = await readFile(rvfaPath);
327
+ const name = meta?.name || rvfaPath.split('/').pop() || 'appliance.rvf';
328
+ return this.upload(name, data, {
329
+ type: 'rvfa-appliance', version: meta?.version || '',
330
+ profile: meta?.profile || '', description: meta?.description || '',
331
+ });
332
+ }
333
+ async publishPatch(patchBuf, meta) {
334
+ const name = meta?.name || `patch-${Date.now()}.rvfp`;
335
+ return this.upload(name, patchBuf, {
336
+ type: 'rvfp-patch', version: meta?.version || '', description: meta?.description || '',
337
+ });
338
+ }
339
+ async fetch(cid, outputPath) {
340
+ const data = await httpGet(`${this.gw}/ipfs/${cid}`);
341
+ await mkdir(dirname(outputPath), { recursive: true });
342
+ await writeFile(outputPath, data);
343
+ }
344
+ async list() {
345
+ const res = await pinataReq('GET', `${this.api}/data/pinList?status=pinned&pageLimit=100`, this.jwt);
346
+ if (res.status !== 200)
347
+ throw new Error(`Pinata list failed (HTTP ${res.status}): ${JSON.stringify(res.data)}`);
348
+ const d = res.data;
349
+ return (d.rows || []).map((r) => ({
350
+ cid: r.ipfs_pin_hash, name: r.metadata?.name || r.ipfs_pin_hash,
351
+ size: r.size, date: r.date_pinned,
352
+ }));
353
+ }
354
+ async pin(cid, name) {
355
+ const body = Buffer.from(JSON.stringify({ hashToPin: cid, pinataMetadata: { name: name || cid } }));
356
+ const res = await pinataReq('POST', `${this.api}/pinning/pinByHash`, this.jwt, body, 'application/json');
357
+ if (res.status !== 200)
358
+ throw new Error(`Pinata pin failed (HTTP ${res.status}): ${JSON.stringify(res.data)}`);
359
+ }
360
+ }
361
+ // ── Convenience exports ──────────────────────────────────────
362
+ export function createPublisher(config) {
363
+ return new RvfaPublisher({ pinataJwt: config?.pinataJwt, gatewayUrl: config?.gatewayUrl, apiUrl: config?.apiUrl });
364
+ }
365
+ export async function createAndVerifyPatch(options) {
366
+ const patch = await RvfaPatcher.createPatch(options);
367
+ const verification = await RvfaPatcher.verifyPatch(patch);
368
+ return { patch, verification };
369
+ }
370
+ //# sourceMappingURL=rvfa-distribution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rvfa-distribution.js","sourceRoot":"","sources":["../../../src/appliance/rvfa-distribution.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * RVFA (RuVector Format Appliance) — Binary format reader/writer
3
+ * for self-contained Ruflo appliances.
4
+ *
5
+ * Binary layout:
6
+ * [4B magic "RVFA"] [4B version u32LE] [4B header_len u32LE]
7
+ * [header_len B JSON header] [section data ...] [32B SHA256 footer]
8
+ */
9
+ export declare const RVFA_MAGIC: Buffer<ArrayBuffer>;
10
+ export declare const RVFA_VERSION = 1;
11
+ export interface RvfaHeader {
12
+ magic: string;
13
+ version: number;
14
+ name: string;
15
+ appVersion: string;
16
+ arch: string;
17
+ platform: string;
18
+ profile: 'cloud' | 'hybrid' | 'offline';
19
+ created: string;
20
+ sections: RvfaSection[];
21
+ boot: RvfaBootConfig;
22
+ models: RvfaModelConfig;
23
+ capabilities: string[];
24
+ }
25
+ export interface RvfaSection {
26
+ id: string;
27
+ type: string;
28
+ offset: number;
29
+ size: number;
30
+ originalSize: number;
31
+ sha256: string;
32
+ compression: 'none' | 'gzip' | 'zstd';
33
+ }
34
+ export interface RvfaBootConfig {
35
+ entrypoint: string;
36
+ args: string[];
37
+ env: Record<string, string>;
38
+ isolation: 'container' | 'microvm' | 'native';
39
+ }
40
+ export interface RvfaModelConfig {
41
+ provider: 'ruvllm' | 'api-vault' | 'hybrid';
42
+ engine?: string;
43
+ models?: string[];
44
+ vaultEncryption?: string;
45
+ }
46
+ /** Format bytes into a human-readable string (e.g. '2.3 GB'). */
47
+ export declare function formatSize(bytes: number): string;
48
+ /** Create a sensible default header for a given profile. */
49
+ export declare function createDefaultHeader(profile: 'cloud' | 'hybrid' | 'offline'): RvfaHeader;
50
+ /** Type-guard that validates an unknown value is a well-formed RvfaHeader. */
51
+ export declare function validateHeader(header: unknown): header is RvfaHeader;
52
+ export declare class RvfaWriter {
53
+ private header;
54
+ private staged;
55
+ constructor(partial: Partial<RvfaHeader>);
56
+ /**
57
+ * Add a section to the appliance image.
58
+ *
59
+ * @param id Section identifier (e.g. 'kernel', 'runtime', 'ruflo').
60
+ * @param data Raw (uncompressed) section payload.
61
+ * @param options Optional compression and MIME type overrides.
62
+ */
63
+ addSection(id: string, data: Buffer, options?: {
64
+ compression?: 'none' | 'gzip' | 'zstd';
65
+ type?: string;
66
+ }): void;
67
+ /**
68
+ * Assemble the final RVFA binary image.
69
+ *
70
+ * Layout:
71
+ * [4B magic] [4B version] [4B header_len]
72
+ * [header JSON bytes]
73
+ * [section 0 bytes] [section 1 bytes] ...
74
+ * [32B SHA256 of all section bytes combined]
75
+ */
76
+ build(): Buffer;
77
+ }
78
+ export declare class RvfaReader {
79
+ private buf;
80
+ private header;
81
+ private constructor();
82
+ /** Parse an RVFA image from an in-memory Buffer. */
83
+ static fromBuffer(buf: Buffer): RvfaReader;
84
+ /** Read an RVFA image from a file path. */
85
+ static fromFile(path: string): Promise<RvfaReader>;
86
+ /** Return the parsed header. */
87
+ getHeader(): RvfaHeader;
88
+ /** List all sections declared in the header. */
89
+ getSections(): RvfaSection[];
90
+ /**
91
+ * Extract and decompress a section by its id.
92
+ *
93
+ * @param id The section identifier (e.g. 'kernel', 'runtime').
94
+ * @returns The decompressed section payload.
95
+ */
96
+ extractSection(id: string): Buffer;
97
+ /**
98
+ * Verify the integrity of the RVFA image.
99
+ *
100
+ * Checks:
101
+ * 1. Magic bytes
102
+ * 2. Version number
103
+ * 3. SHA256 of each section's compressed data
104
+ * 4. SHA256 footer (all section data combined)
105
+ */
106
+ verify(): {
107
+ valid: boolean;
108
+ errors: string[];
109
+ };
110
+ }
111
+ //# sourceMappingURL=rvfa-format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rvfa-format.d.ts","sourceRoot":"","sources":["../../../src/appliance/rvfa-format.ts"],"names":[],"mappings":"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"}