yakmesh 2.9.0 → 3.0.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.
Files changed (225) hide show
  1. package/CHANGELOG.md +637 -0
  2. package/Caddyfile +77 -0
  3. package/README.md +119 -29
  4. package/content/api.js +50 -41
  5. package/content/index.js +1 -2
  6. package/content/store.js +323 -177
  7. package/dashboard/index.html +19 -3
  8. package/database/replication.js +117 -37
  9. package/docs/CRYPTO-AGILITY.md +204 -0
  10. package/docs/MTLS-RESEARCH.md +367 -0
  11. package/docs/NAMCHE-SPEC.md +681 -0
  12. package/docs/PEERQUANTA-YAKMESH-INTEGRATION.md +407 -0
  13. package/docs/PRECISION-DISCLOSURE.md +96 -0
  14. package/docs/README.md +76 -0
  15. package/docs/ROADMAP-2.4.0.md +447 -0
  16. package/docs/ROADMAP-2.5.0.md +244 -0
  17. package/docs/SECURITY-AUDIT-REPORT.md +306 -0
  18. package/docs/SST-INTEGRATION.md +712 -0
  19. package/docs/STEADYWATCH-IMPLEMENTATION.md +303 -0
  20. package/docs/TERNARY-AUDIT-REPORT.md +247 -0
  21. package/docs/TME-FAQ.md +221 -0
  22. package/docs/WHITEPAPER.md +623 -0
  23. package/docs/adapters.html +1001 -0
  24. package/docs/advanced-systems.html +1045 -0
  25. package/docs/annex.html +1046 -0
  26. package/docs/api.html +970 -0
  27. package/docs/business/response-templates.md +160 -0
  28. package/docs/c2c.html +1225 -0
  29. package/docs/cli.html +1332 -0
  30. package/docs/configuration.html +1248 -0
  31. package/docs/darshan.html +1085 -0
  32. package/docs/dharma.html +966 -0
  33. package/docs/docs-bundle.html +1075 -0
  34. package/docs/docs.css +3120 -0
  35. package/docs/docs.js +556 -0
  36. package/docs/doko.html +969 -0
  37. package/docs/geo-proof.html +858 -0
  38. package/docs/getting-started.html +840 -0
  39. package/docs/gumba-tutorial.html +1144 -0
  40. package/docs/gumba.html +1098 -0
  41. package/docs/index.html +914 -0
  42. package/docs/jhilke.html +1312 -0
  43. package/docs/karma.html +1100 -0
  44. package/docs/katha.html +1037 -0
  45. package/docs/lama.html +978 -0
  46. package/docs/mandala.html +1067 -0
  47. package/docs/mani.html +964 -0
  48. package/docs/mantra.html +967 -0
  49. package/docs/mesh.html +1409 -0
  50. package/docs/nakpak.html +869 -0
  51. package/docs/namche.html +928 -0
  52. package/docs/nav-order.json +53 -0
  53. package/docs/prahari.html +1043 -0
  54. package/docs/prism-bash.min.js +1 -0
  55. package/docs/prism-javascript.min.js +1 -0
  56. package/docs/prism-json.min.js +1 -0
  57. package/docs/prism-tomorrow.min.css +1 -0
  58. package/docs/prism.min.js +1 -0
  59. package/docs/privacy.html +699 -0
  60. package/docs/quick-reference.html +1181 -0
  61. package/docs/sakshi.html +1402 -0
  62. package/docs/sandboxing.md +386 -0
  63. package/docs/seva.html +911 -0
  64. package/docs/sherpa.html +871 -0
  65. package/docs/studio.html +860 -0
  66. package/docs/stupa.html +995 -0
  67. package/docs/tailwind.min.css +2 -0
  68. package/docs/tattva.html +1332 -0
  69. package/docs/terms.html +686 -0
  70. package/docs/time-server-deployment.md +166 -0
  71. package/docs/time-sources.html +1392 -0
  72. package/docs/tivra.html +1127 -0
  73. package/docs/trademark-policy.html +686 -0
  74. package/docs/tribhuj.html +1183 -0
  75. package/docs/trust-security.html +1029 -0
  76. package/docs/tutorials/backup-recovery.html +654 -0
  77. package/docs/tutorials/dashboard.html +604 -0
  78. package/docs/tutorials/domain-setup.html +605 -0
  79. package/docs/tutorials/host-website.html +456 -0
  80. package/docs/tutorials/mesh-network.html +505 -0
  81. package/docs/tutorials/mobile-access.html +445 -0
  82. package/docs/tutorials/privacy.html +467 -0
  83. package/docs/tutorials/raspberry-pi.html +600 -0
  84. package/docs/tutorials/security-basics.html +539 -0
  85. package/docs/tutorials/share-files.html +431 -0
  86. package/docs/tutorials/troubleshooting.html +637 -0
  87. package/docs/tutorials/trust-karma.html +419 -0
  88. package/docs/tutorials/yak-protocol.html +456 -0
  89. package/docs/tutorials.html +1034 -0
  90. package/docs/vani.html +1270 -0
  91. package/docs/webserver.html +809 -0
  92. package/docs/yak-protocol.html +940 -0
  93. package/docs/yak-timeserver-design.md +475 -0
  94. package/docs/yakapp.html +1015 -0
  95. package/docs/ypc27.html +1069 -0
  96. package/docs/yurt.html +1344 -0
  97. package/embedded-docs/bundle.js +274 -114
  98. package/gossip/protocol.js +247 -27
  99. package/identity/key-resolver.js +262 -0
  100. package/identity/machine-seed.js +632 -0
  101. package/identity/node-key.js +669 -368
  102. package/identity/tribhuj-ratchet.js +506 -0
  103. package/knowledge-base.js +37 -8
  104. package/launcher/yakmesh.bat +62 -0
  105. package/launcher/yakmesh.sh +70 -0
  106. package/mesh/annex.js +462 -108
  107. package/mesh/beacon-broadcast.js +4 -1
  108. package/mesh/darshan.js +17 -5
  109. package/mesh/gumba.js +47 -13
  110. package/mesh/jhilke.js +651 -0
  111. package/mesh/katha.js +5 -2
  112. package/mesh/nakpak-routing.js +8 -5
  113. package/mesh/network.js +724 -34
  114. package/mesh/pulse-sync.js +4 -1
  115. package/mesh/seva.js +526 -0
  116. package/mesh/sherpa-discovery.js +89 -8
  117. package/mesh/sybil-defense.js +19 -5
  118. package/mesh/temporal-encoder.js +4 -3
  119. package/mesh/yurt.js +72 -17
  120. package/models/entropy-sentinel.onnx +0 -0
  121. package/models/karma-trust.onnx +0 -0
  122. package/models/manifest.json +43 -0
  123. package/models/sakshi-anomaly.onnx +0 -0
  124. package/oracle/code-proof-protocol.js +7 -6
  125. package/oracle/codebase-lock.js +257 -28
  126. package/oracle/index.js +74 -15
  127. package/oracle/ma902-snmp.js +678 -0
  128. package/oracle/module-sealer.js +5 -3
  129. package/oracle/packet-checksum.js +201 -0
  130. package/oracle/ternary-144t.js +714 -0
  131. package/oracle/ternary-ml.js +481 -0
  132. package/oracle/time-api.js +239 -0
  133. package/oracle/time-source.js +137 -47
  134. package/oracle/validation-oracle-hardened.js +1111 -1071
  135. package/oracle/validation-oracle.js +4 -2
  136. package/oracle/ypc27.js +211 -0
  137. package/package.json +20 -3
  138. package/protocol/yak-handler.js +35 -9
  139. package/protocol/yak-protocol.js +6 -5
  140. package/reference/cpp/yakmesh_mceliece_shard.cpp +168 -0
  141. package/reference/cpp/yakmesh_ypc27.cpp +179 -0
  142. package/sbom.json +87 -0
  143. package/scripts/security-audit.mjs +264 -0
  144. package/scripts/update-docs-sidebar.cjs +164 -0
  145. package/security/crypto-config.js +4 -3
  146. package/security/dharma-moderation.js +4 -3
  147. package/security/doko-identity.js +193 -143
  148. package/security/domain-consensus.js +86 -85
  149. package/security/fs-hardening.js +620 -0
  150. package/security/hardware-attestation.js +5 -3
  151. package/security/hybrid-trust.js +227 -87
  152. package/security/karma-rate-limiter.js +692 -0
  153. package/security/khata-protocol.js +22 -21
  154. package/security/khata-trust-integration.js +277 -150
  155. package/security/memory-safety.js +635 -0
  156. package/security/mesh-auth.js +11 -10
  157. package/security/mesh-revocation.js +18 -5
  158. package/security/namche-gateway.js +298 -69
  159. package/security/sakshi.js +102 -3
  160. package/security/sangha.js +770 -0
  161. package/security/secure-config.js +473 -0
  162. package/security/silicon-parity.js +13 -10
  163. package/security/steadywatch.js +1142 -0
  164. package/security/strike-system.js +32 -3
  165. package/security/temporal-signing.js +488 -0
  166. package/security/trit-commitment.js +464 -0
  167. package/server/crypto/annex.js +247 -0
  168. package/server/darshan-api.js +343 -0
  169. package/server/index.js +3259 -362
  170. package/server/komm-api.js +668 -0
  171. package/utils/accel.js +2273 -0
  172. package/utils/ternary-id.js +79 -0
  173. package/utils/verify-worker.js +57 -0
  174. package/webserver/index.js +95 -5
  175. package/assets/yakmesh-logo.png +0 -0
  176. package/assets/yakmesh-logo.svg +0 -80
  177. package/assets/yakmesh-logo2.png +0 -0
  178. package/assets/yakmesh-logo2sm.png +0 -0
  179. package/assets/ymsm.png +0 -0
  180. package/scripts/update-docs-nav.cjs +0 -194
  181. package/update-docs-nav.cjs +0 -18
  182. package/update-nav.ps1 +0 -16
  183. package/website/assets/silhouettes/adapters.svg +0 -107
  184. package/website/assets/silhouettes/api-endpoints.svg +0 -115
  185. package/website/assets/silhouettes/atomic-clock.svg +0 -83
  186. package/website/assets/silhouettes/base-camp.svg +0 -81
  187. package/website/assets/silhouettes/bridge.svg +0 -69
  188. package/website/assets/silhouettes/docs-bundle.svg +0 -113
  189. package/website/assets/silhouettes/doko-basket.svg +0 -70
  190. package/website/assets/silhouettes/fortress.svg +0 -93
  191. package/website/assets/silhouettes/gateway.svg +0 -54
  192. package/website/assets/silhouettes/gears.svg +0 -93
  193. package/website/assets/silhouettes/globe-satellite.svg +0 -67
  194. package/website/assets/silhouettes/karma-wheel.svg +0 -137
  195. package/website/assets/silhouettes/lama-council.svg +0 -141
  196. package/website/assets/silhouettes/mandala-network.svg +0 -169
  197. package/website/assets/silhouettes/mani-stones.svg +0 -149
  198. package/website/assets/silhouettes/mantra-wheel.svg +0 -116
  199. package/website/assets/silhouettes/mesh-nodes.svg +0 -113
  200. package/website/assets/silhouettes/nakpak.svg +0 -56
  201. package/website/assets/silhouettes/peak-lightning.svg +0 -73
  202. package/website/assets/silhouettes/sherpa.svg +0 -69
  203. package/website/assets/silhouettes/stupa-tower.svg +0 -119
  204. package/website/assets/silhouettes/tattva-eye.svg +0 -78
  205. package/website/assets/silhouettes/terminal.svg +0 -74
  206. package/website/assets/silhouettes/webserver.svg +0 -145
  207. package/website/assets/silhouettes/yak.svg +0 -78
  208. package/website/assets/yakmesh-logo.png +0 -0
  209. package/website/assets/yakmesh-logo.webp +0 -0
  210. package/website/assets/yakmesh-logo128x140.webp +0 -0
  211. package/website/assets/yakmesh-logo2.png +0 -0
  212. package/website/assets/yakmesh-logo2.svg +0 -51
  213. package/website/assets/yakmesh-logo40x44.webp +0 -0
  214. package/website/assets/yakmesh.gif +0 -0
  215. package/website/assets/yakmesh.ico +0 -0
  216. package/website/assets/yakmesh.jpg +0 -0
  217. package/website/assets/yakmesh.pdf +0 -0
  218. package/website/assets/yakmesh.png +0 -0
  219. package/website/assets/yakmesh.svg +0 -70
  220. package/website/assets/yakmesh128.webp +0 -0
  221. package/website/assets/yakmesh32.png +0 -0
  222. package/website/assets/yakmesh32.svg +0 -65
  223. package/website/assets/yakmesh32o.ico +0 -2
  224. package/website/assets/yakmesh32o.svg +0 -65
  225. package/website/assets/yakmesh32o.svgz +0 -0
@@ -17,6 +17,7 @@
17
17
  */
18
18
 
19
19
  import { YPC27Checksum, ypc27, bytesToTrits, tritsToBytes, seedFromPeerId, Poly27 } from './ypc27.js';
20
+ import { YPC27_SST } from './ypc27.js';
20
21
 
21
22
  // =============================================================================
22
23
  // PROTOCOL DOMAIN TAGS
@@ -327,6 +328,204 @@ export function unwrapWithChecksum(wrappedMessage, domain, nodeId = null) {
327
328
  }
328
329
  }
329
330
 
331
+ // =============================================================================
332
+ // BATCH CHECKSUM VERIFICATION ENGINE
333
+ // =============================================================================
334
+
335
+ /**
336
+ * BatchChecksumVerifier — Batched YPC-27 verification for high-throughput
337
+ * packet processing. Collects individual verify requests and processes them
338
+ * in a single flush, suitable for routing through the ComputeScheduler.
339
+ *
340
+ * Why batch?
341
+ * - YPC-27 verification involves Poly27 cyclic convolution (O(N²) per check)
342
+ * - Batching amortizes JS object creation overhead
343
+ * - The batch can be routed to GPU via ComputeScheduler for parallel execution
344
+ * - Under load, 50-100 packets/cycle is typical — perfect batch size
345
+ *
346
+ * Usage patterns:
347
+ *
348
+ * 1. Direct (no scheduler):
349
+ * const verifier = new BatchChecksumVerifier();
350
+ * const p1 = verifier.enqueue(data1, checksum1, PROTOCOL_DOMAIN.STUPA);
351
+ * const p2 = verifier.enqueue(data2, checksum2, PROTOCOL_DOMAIN.NAKPAK);
352
+ * // Auto-flushes after threshold or timer
353
+ *
354
+ * 2. Via ComputeScheduler (recommended for production):
355
+ * const result = await scheduler.submit({
356
+ * type: 'ypc27-batch-verify',
357
+ * priority: Priority.HIGH,
358
+ * affinity: Affinity.GPU_PREFERRED,
359
+ * executors: {
360
+ * gpu: () => verifier.flush(),
361
+ * cpu: () => verifier.flush(),
362
+ * }
363
+ * });
364
+ */
365
+ export class BatchChecksumVerifier {
366
+ /**
367
+ * @param {Object} [options]
368
+ * @param {number} [options.minBatchSize=8] — Minimum items before auto-flush
369
+ * @param {number} [options.maxBatchSize=128] — Maximum items per flush
370
+ * @param {number} [options.flushInterval=5] — Ms before timer-triggered flush
371
+ * @param {boolean} [options.useSST=false] — Use YPC27_SST enhanced checksums
372
+ */
373
+ constructor(options = {}) {
374
+ this.minBatchSize = options.minBatchSize ?? 8;
375
+ this.maxBatchSize = options.maxBatchSize ?? 128;
376
+ this.flushInterval = options.flushInterval ?? 5;
377
+ this.useSST = options.useSST ?? false;
378
+
379
+ /** @type {Array<{data: Buffer, checksum: Poly27, domain: string, nodeId: string|null, resolve: Function, reject: Function}>} */
380
+ this._queue = [];
381
+ this._timer = null;
382
+
383
+ // Telemetry
384
+ this._stats = {
385
+ totalEnqueued: 0,
386
+ totalFlushed: 0,
387
+ totalValid: 0,
388
+ totalInvalid: 0,
389
+ totalErrors: 0,
390
+ batchCount: 0,
391
+ avgBatchSize: 0,
392
+ lastFlushMs: 0,
393
+ };
394
+ }
395
+
396
+ /**
397
+ * Enqueue a checksum verification.
398
+ * Returns a promise that resolves with { valid: boolean, index: number }.
399
+ *
400
+ * @param {Object|string|Buffer|Uint8Array} data — Packet data to verify
401
+ * @param {Poly27|string} checksum — Expected checksum (Poly27 or wire format)
402
+ * @param {string} domain — Protocol domain from PROTOCOL_DOMAIN
403
+ * @param {string} [nodeId] — Optional node ID for seed derivation
404
+ * @returns {Promise<{valid: boolean, index: number}>}
405
+ */
406
+ enqueue(data, checksum, domain, nodeId = null) {
407
+ return new Promise((resolve, reject) => {
408
+ const parsedChecksum = typeof checksum === 'string'
409
+ ? checksumFromWire(checksum)
410
+ : checksum;
411
+
412
+ this._queue.push({
413
+ data,
414
+ checksum: parsedChecksum,
415
+ domain,
416
+ nodeId,
417
+ resolve,
418
+ reject,
419
+ });
420
+
421
+ this._stats.totalEnqueued++;
422
+
423
+ if (this._queue.length >= this.minBatchSize) {
424
+ this.flush();
425
+ } else if (!this._timer) {
426
+ this._timer = setTimeout(() => this.flush(), this.flushInterval);
427
+ }
428
+ });
429
+ }
430
+
431
+ /**
432
+ * Process all queued verifications in a single batch.
433
+ * This is the method to pass as an executor to ComputeScheduler.
434
+ *
435
+ * The batch verification leverages:
436
+ * - Shared seed derivation (reuse for same domain+nodeId pairs)
437
+ * - Pre-allocated typed arrays for trit conversion
438
+ * - Sequential Poly27 operations (GPU-parallelizable in future)
439
+ *
440
+ * @returns {{ verified: number, valid: number, invalid: number, errors: number, durationMs: number }}
441
+ */
442
+ flush() {
443
+ if (this._timer) {
444
+ clearTimeout(this._timer);
445
+ this._timer = null;
446
+ }
447
+
448
+ if (this._queue.length === 0) {
449
+ return { verified: 0, valid: 0, invalid: 0, errors: 0, durationMs: 0 };
450
+ }
451
+
452
+ const batch = this._queue.splice(0, this.maxBatchSize);
453
+ const t0 = performance.now();
454
+
455
+ // Cache engines by domain+nodeId to avoid redundant seed derivation
456
+ const engineCache = new Map();
457
+
458
+ let valid = 0;
459
+ let invalid = 0;
460
+ let errors = 0;
461
+
462
+ for (let i = 0; i < batch.length; i++) {
463
+ const item = batch[i];
464
+ try {
465
+ const cacheKey = `${item.domain}:${item.nodeId || ''}`;
466
+
467
+ if (!engineCache.has(cacheKey)) {
468
+ engineCache.set(cacheKey, new PacketChecksum(item.domain, item.nodeId));
469
+ }
470
+
471
+ const engine = engineCache.get(cacheKey);
472
+ const isValid = engine.verify(item.data, item.checksum);
473
+
474
+ if (isValid) {
475
+ valid++;
476
+ this._stats.totalValid++;
477
+ } else {
478
+ invalid++;
479
+ this._stats.totalInvalid++;
480
+ }
481
+
482
+ item.resolve({ valid: isValid, index: i });
483
+ } catch (err) {
484
+ errors++;
485
+ this._stats.totalErrors++;
486
+ item.reject(err);
487
+ }
488
+ }
489
+
490
+ const durationMs = performance.now() - t0;
491
+
492
+ // Update telemetry
493
+ this._stats.totalFlushed += batch.length;
494
+ this._stats.batchCount++;
495
+ this._stats.avgBatchSize = this._stats.totalFlushed / this._stats.batchCount;
496
+ this._stats.lastFlushMs = durationMs;
497
+
498
+ return { verified: batch.length, valid, invalid, errors, durationMs };
499
+ }
500
+
501
+ /**
502
+ * Get verification statistics.
503
+ * @returns {Object}
504
+ */
505
+ getStats() {
506
+ return {
507
+ ...this._stats,
508
+ queueDepth: this._queue.length,
509
+ avgBatchSize: +this._stats.avgBatchSize.toFixed(1),
510
+ lastFlushMs: +this._stats.lastFlushMs.toFixed(2),
511
+ };
512
+ }
513
+
514
+ /**
515
+ * Drain queue and release timer.
516
+ */
517
+ destroy() {
518
+ this.flush();
519
+ if (this._timer) {
520
+ clearTimeout(this._timer);
521
+ this._timer = null;
522
+ }
523
+ }
524
+ }
525
+
526
+ /** Singleton batch verifier for packet checksums */
527
+ export const batchChecksumVerifier = new BatchChecksumVerifier();
528
+
330
529
  // =============================================================================
331
530
  // EXPORTS
332
531
  // =============================================================================
@@ -343,4 +542,6 @@ export default {
343
542
  createMantraChecksum,
344
543
  wrapWithChecksum,
345
544
  unwrapWithChecksum,
545
+ BatchChecksumVerifier,
546
+ batchChecksumVerifier,
346
547
  };