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
@@ -1440,7 +1440,7 @@ export function assessComputationTrust(computation, computedBy, options = {}) {
1440
1440
  }))
1441
1441
  );
1442
1442
 
1443
- if (verificationAgreement.agreed && verificationAgreement.value === 'VALID') {
1443
+ if (verificationAgreement.agreed && verificationAgreement.data?.value === 'VALID') {
1444
1444
  return {
1445
1445
  trusted: true,
1446
1446
  basis: 'VERIFIED',
@@ -1449,7 +1449,7 @@ export function assessComputationTrust(computation, computedBy, options = {}) {
1449
1449
  };
1450
1450
  }
1451
1451
 
1452
- if (verificationAgreement.agreed && verificationAgreement.value === 'INVALID') {
1452
+ if (verificationAgreement.agreed && verificationAgreement.data?.value === 'INVALID') {
1453
1453
  return {
1454
1454
  trusted: false,
1455
1455
  basis: 'VERIFICATION_FAILED',
@@ -1462,7 +1462,7 @@ export function assessComputationTrust(computation, computedBy, options = {}) {
1462
1462
  return {
1463
1463
  trusted: false,
1464
1464
  basis: 'VERIFIERS_DISAGREE',
1465
- action: verificationAgreement.action,
1465
+ action: verificationAgreement.data?.action,
1466
1466
  suggestion: 'Need more verifiers or investigate disagreement',
1467
1467
  };
1468
1468
  }
@@ -1515,6 +1515,8 @@ export const BEHAVIOR_DIMENSION = Object.freeze({
1515
1515
  export class BehaviorVelocityMonitor {
1516
1516
  constructor(options = {}) {
1517
1517
  this.profiles = new Map(); // nodeId -> BehaviorProfile
1518
+ this._inferenceEngine = options.inferenceEngine || null;
1519
+ this._modelName = 'sakshi-anomaly';
1518
1520
 
1519
1521
  // Configuration
1520
1522
  this.config = {
@@ -1775,6 +1777,103 @@ export class BehaviorVelocityMonitor {
1775
1777
  };
1776
1778
  }
1777
1779
 
1780
+ /**
1781
+ * NPU-accelerated anomaly assessment for a node.
1782
+ * Feeds all behavioral dimensions + contextual features into the
1783
+ * sakshi-anomaly ONNX model for multi-class attack detection.
1784
+ *
1785
+ * Falls back to CPU heuristic (z-score based) if ONNX Runtime is unavailable.
1786
+ *
1787
+ * @param {string} nodeId - Node to assess
1788
+ * @param {Object} context - Additional context features
1789
+ * @param {number} [context.uptimePercent=0.5] - Node uptime (0-1)
1790
+ * @param {number} [context.networkAgeDays=0] - Days on network
1791
+ * @param {number} [context.karmaScore=0.5] - Current KARMA score (0-1)
1792
+ * @param {boolean} [context.hasAesni=false] - Hardware AES-NI attestation
1793
+ * @param {number} [context.timeSourceQuality=0] - Time source quality (0=system, 0.5=ntp, 1=ptp)
1794
+ * @param {number} [context.observationCount=0] - Total observations recorded
1795
+ * @returns {Promise<Object>} Anomaly assessment with scores per threat type
1796
+ */
1797
+ async assessNode(nodeId, context = {}) {
1798
+ const profile = this.profiles.get(nodeId);
1799
+
1800
+ // Default feature values (zero-filled if no profile)
1801
+ const getDimValue = (dim) => {
1802
+ if (!profile) return 0;
1803
+ const stats = profile.dimensions.get(dim);
1804
+ return stats ? stats.lastValue : 0;
1805
+ };
1806
+
1807
+ // Build 12-feature input vector (must match training data order)
1808
+ const features = new Float32Array([
1809
+ getDimValue(BEHAVIOR_DIMENSION.MESSAGE_RATE),
1810
+ getDimValue(BEHAVIOR_DIMENSION.GOSSIP_RATIO),
1811
+ getDimValue(BEHAVIOR_DIMENSION.ERROR_RATE),
1812
+ getDimValue(BEHAVIOR_DIMENSION.ATTESTATION_RATE),
1813
+ getDimValue(BEHAVIOR_DIMENSION.CONNECTION_CHURN),
1814
+ getDimValue(BEHAVIOR_DIMENSION.RESPONSE_LATENCY),
1815
+ Math.min(1.0, context.uptimePercent ?? 0.5),
1816
+ Math.min(1.0, (context.networkAgeDays ?? 0) / 365),
1817
+ Math.min(1.0, context.karmaScore ?? 0.5),
1818
+ context.hasAesni ? 1.0 : 0.0,
1819
+ Math.min(1.0, context.timeSourceQuality ?? 0),
1820
+ Math.min(1.0, (context.observationCount ?? 0) / 1000),
1821
+ ]);
1822
+
1823
+ // NPU path: use ONNX model if available
1824
+ const engine = this._inferenceEngine;
1825
+ if (engine && engine.hasModel(this._modelName)) {
1826
+ try {
1827
+ const result = await engine.infer(this._modelName, {
1828
+ behavior_features: features,
1829
+ });
1830
+ if (result && result.anomaly_scores) {
1831
+ const scores = result.anomaly_scores;
1832
+ return {
1833
+ source: 'NPU',
1834
+ nodeId,
1835
+ anomalyScore: scores[0],
1836
+ sybilScore: scores[1],
1837
+ eclipseScore: scores[2],
1838
+ floodScore: scores[3],
1839
+ features,
1840
+ };
1841
+ }
1842
+ } catch (err) {
1843
+ log.warn('vegati', `NPU assessment failed for ${nodeId}: ${err.message}`);
1844
+ }
1845
+ }
1846
+
1847
+ // CPU fallback: aggregate z-scores across dimensions
1848
+ let maxZScore = 0;
1849
+ let anomalySum = 0;
1850
+ let dimCount = 0;
1851
+
1852
+ if (profile) {
1853
+ for (const [, stats] of profile.dimensions) {
1854
+ if (stats.count >= this.config.minObservationsForBaseline) {
1855
+ const stdDev = Math.sqrt(stats.emVar);
1856
+ const zScore = stdDev > 0 ? Math.abs(stats.lastValue - stats.ema) / stdDev : 0;
1857
+ maxZScore = Math.max(maxZScore, zScore);
1858
+ anomalySum += Math.min(1.0, zScore / this.config.thresholds.critical);
1859
+ dimCount++;
1860
+ }
1861
+ }
1862
+ }
1863
+
1864
+ const anomalyScore = dimCount > 0 ? anomalySum / dimCount : 0;
1865
+ return {
1866
+ source: 'CPU',
1867
+ nodeId,
1868
+ anomalyScore,
1869
+ sybilScore: 0, // CPU fallback cannot distinguish attack types
1870
+ eclipseScore: 0,
1871
+ floodScore: 0,
1872
+ maxZScore,
1873
+ features,
1874
+ };
1875
+ }
1876
+
1778
1877
  /**
1779
1878
  * Cleanup old profiles
1780
1879
  */