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.
- package/CHANGELOG.md +637 -0
- package/Caddyfile +77 -0
- package/README.md +119 -29
- package/content/api.js +50 -41
- package/content/index.js +1 -2
- package/content/store.js +323 -177
- package/dashboard/index.html +19 -3
- package/database/replication.js +117 -37
- package/docs/CRYPTO-AGILITY.md +204 -0
- package/docs/MTLS-RESEARCH.md +367 -0
- package/docs/NAMCHE-SPEC.md +681 -0
- package/docs/PEERQUANTA-YAKMESH-INTEGRATION.md +407 -0
- package/docs/PRECISION-DISCLOSURE.md +96 -0
- package/docs/README.md +76 -0
- package/docs/ROADMAP-2.4.0.md +447 -0
- package/docs/ROADMAP-2.5.0.md +244 -0
- package/docs/SECURITY-AUDIT-REPORT.md +306 -0
- package/docs/SST-INTEGRATION.md +712 -0
- package/docs/STEADYWATCH-IMPLEMENTATION.md +303 -0
- package/docs/TERNARY-AUDIT-REPORT.md +247 -0
- package/docs/TME-FAQ.md +221 -0
- package/docs/WHITEPAPER.md +623 -0
- package/docs/adapters.html +1001 -0
- package/docs/advanced-systems.html +1045 -0
- package/docs/annex.html +1046 -0
- package/docs/api.html +970 -0
- package/docs/business/response-templates.md +160 -0
- package/docs/c2c.html +1225 -0
- package/docs/cli.html +1332 -0
- package/docs/configuration.html +1248 -0
- package/docs/darshan.html +1085 -0
- package/docs/dharma.html +966 -0
- package/docs/docs-bundle.html +1075 -0
- package/docs/docs.css +3120 -0
- package/docs/docs.js +556 -0
- package/docs/doko.html +969 -0
- package/docs/geo-proof.html +858 -0
- package/docs/getting-started.html +840 -0
- package/docs/gumba-tutorial.html +1144 -0
- package/docs/gumba.html +1098 -0
- package/docs/index.html +914 -0
- package/docs/jhilke.html +1312 -0
- package/docs/karma.html +1100 -0
- package/docs/katha.html +1037 -0
- package/docs/lama.html +978 -0
- package/docs/mandala.html +1067 -0
- package/docs/mani.html +964 -0
- package/docs/mantra.html +967 -0
- package/docs/mesh.html +1409 -0
- package/docs/nakpak.html +869 -0
- package/docs/namche.html +928 -0
- package/docs/nav-order.json +53 -0
- package/docs/prahari.html +1043 -0
- package/docs/prism-bash.min.js +1 -0
- package/docs/prism-javascript.min.js +1 -0
- package/docs/prism-json.min.js +1 -0
- package/docs/prism-tomorrow.min.css +1 -0
- package/docs/prism.min.js +1 -0
- package/docs/privacy.html +699 -0
- package/docs/quick-reference.html +1181 -0
- package/docs/sakshi.html +1402 -0
- package/docs/sandboxing.md +386 -0
- package/docs/seva.html +911 -0
- package/docs/sherpa.html +871 -0
- package/docs/studio.html +860 -0
- package/docs/stupa.html +995 -0
- package/docs/tailwind.min.css +2 -0
- package/docs/tattva.html +1332 -0
- package/docs/terms.html +686 -0
- package/docs/time-server-deployment.md +166 -0
- package/docs/time-sources.html +1392 -0
- package/docs/tivra.html +1127 -0
- package/docs/trademark-policy.html +686 -0
- package/docs/tribhuj.html +1183 -0
- package/docs/trust-security.html +1029 -0
- package/docs/tutorials/backup-recovery.html +654 -0
- package/docs/tutorials/dashboard.html +604 -0
- package/docs/tutorials/domain-setup.html +605 -0
- package/docs/tutorials/host-website.html +456 -0
- package/docs/tutorials/mesh-network.html +505 -0
- package/docs/tutorials/mobile-access.html +445 -0
- package/docs/tutorials/privacy.html +467 -0
- package/docs/tutorials/raspberry-pi.html +600 -0
- package/docs/tutorials/security-basics.html +539 -0
- package/docs/tutorials/share-files.html +431 -0
- package/docs/tutorials/troubleshooting.html +637 -0
- package/docs/tutorials/trust-karma.html +419 -0
- package/docs/tutorials/yak-protocol.html +456 -0
- package/docs/tutorials.html +1034 -0
- package/docs/vani.html +1270 -0
- package/docs/webserver.html +809 -0
- package/docs/yak-protocol.html +940 -0
- package/docs/yak-timeserver-design.md +475 -0
- package/docs/yakapp.html +1015 -0
- package/docs/ypc27.html +1069 -0
- package/docs/yurt.html +1344 -0
- package/embedded-docs/bundle.js +274 -114
- package/gossip/protocol.js +247 -27
- package/identity/key-resolver.js +262 -0
- package/identity/machine-seed.js +632 -0
- package/identity/node-key.js +669 -368
- package/identity/tribhuj-ratchet.js +506 -0
- package/knowledge-base.js +37 -8
- package/launcher/yakmesh.bat +62 -0
- package/launcher/yakmesh.sh +70 -0
- package/mesh/annex.js +462 -108
- package/mesh/beacon-broadcast.js +4 -1
- package/mesh/darshan.js +17 -5
- package/mesh/gumba.js +47 -13
- package/mesh/jhilke.js +651 -0
- package/mesh/katha.js +5 -2
- package/mesh/nakpak-routing.js +8 -5
- package/mesh/network.js +724 -34
- package/mesh/pulse-sync.js +4 -1
- package/mesh/seva.js +526 -0
- package/mesh/sherpa-discovery.js +89 -8
- package/mesh/sybil-defense.js +19 -5
- package/mesh/temporal-encoder.js +4 -3
- package/mesh/yurt.js +72 -17
- package/models/entropy-sentinel.onnx +0 -0
- package/models/karma-trust.onnx +0 -0
- package/models/manifest.json +43 -0
- package/models/sakshi-anomaly.onnx +0 -0
- package/oracle/code-proof-protocol.js +7 -6
- package/oracle/codebase-lock.js +257 -28
- package/oracle/index.js +74 -15
- package/oracle/ma902-snmp.js +678 -0
- package/oracle/module-sealer.js +5 -3
- package/oracle/packet-checksum.js +201 -0
- package/oracle/ternary-144t.js +714 -0
- package/oracle/ternary-ml.js +481 -0
- package/oracle/time-api.js +239 -0
- package/oracle/time-source.js +137 -47
- package/oracle/validation-oracle-hardened.js +1111 -1071
- package/oracle/validation-oracle.js +4 -2
- package/oracle/ypc27.js +211 -0
- package/package.json +20 -3
- package/protocol/yak-handler.js +35 -9
- package/protocol/yak-protocol.js +6 -5
- package/reference/cpp/yakmesh_mceliece_shard.cpp +168 -0
- package/reference/cpp/yakmesh_ypc27.cpp +179 -0
- package/sbom.json +87 -0
- package/scripts/security-audit.mjs +264 -0
- package/scripts/update-docs-sidebar.cjs +164 -0
- package/security/crypto-config.js +4 -3
- package/security/dharma-moderation.js +4 -3
- package/security/doko-identity.js +193 -143
- package/security/domain-consensus.js +86 -85
- package/security/fs-hardening.js +620 -0
- package/security/hardware-attestation.js +5 -3
- package/security/hybrid-trust.js +227 -87
- package/security/karma-rate-limiter.js +692 -0
- package/security/khata-protocol.js +22 -21
- package/security/khata-trust-integration.js +277 -150
- package/security/memory-safety.js +635 -0
- package/security/mesh-auth.js +11 -10
- package/security/mesh-revocation.js +18 -5
- package/security/namche-gateway.js +298 -69
- package/security/sakshi.js +102 -3
- package/security/sangha.js +770 -0
- package/security/secure-config.js +473 -0
- package/security/silicon-parity.js +13 -10
- package/security/steadywatch.js +1142 -0
- package/security/strike-system.js +32 -3
- package/security/temporal-signing.js +488 -0
- package/security/trit-commitment.js +464 -0
- package/server/crypto/annex.js +247 -0
- package/server/darshan-api.js +343 -0
- package/server/index.js +3259 -362
- package/server/komm-api.js +668 -0
- package/utils/accel.js +2273 -0
- package/utils/ternary-id.js +79 -0
- package/utils/verify-worker.js +57 -0
- package/webserver/index.js +95 -5
- package/assets/yakmesh-logo.png +0 -0
- package/assets/yakmesh-logo.svg +0 -80
- package/assets/yakmesh-logo2.png +0 -0
- package/assets/yakmesh-logo2sm.png +0 -0
- package/assets/ymsm.png +0 -0
- package/scripts/update-docs-nav.cjs +0 -194
- package/update-docs-nav.cjs +0 -18
- package/update-nav.ps1 +0 -16
- package/website/assets/silhouettes/adapters.svg +0 -107
- package/website/assets/silhouettes/api-endpoints.svg +0 -115
- package/website/assets/silhouettes/atomic-clock.svg +0 -83
- package/website/assets/silhouettes/base-camp.svg +0 -81
- package/website/assets/silhouettes/bridge.svg +0 -69
- package/website/assets/silhouettes/docs-bundle.svg +0 -113
- package/website/assets/silhouettes/doko-basket.svg +0 -70
- package/website/assets/silhouettes/fortress.svg +0 -93
- package/website/assets/silhouettes/gateway.svg +0 -54
- package/website/assets/silhouettes/gears.svg +0 -93
- package/website/assets/silhouettes/globe-satellite.svg +0 -67
- package/website/assets/silhouettes/karma-wheel.svg +0 -137
- package/website/assets/silhouettes/lama-council.svg +0 -141
- package/website/assets/silhouettes/mandala-network.svg +0 -169
- package/website/assets/silhouettes/mani-stones.svg +0 -149
- package/website/assets/silhouettes/mantra-wheel.svg +0 -116
- package/website/assets/silhouettes/mesh-nodes.svg +0 -113
- package/website/assets/silhouettes/nakpak.svg +0 -56
- package/website/assets/silhouettes/peak-lightning.svg +0 -73
- package/website/assets/silhouettes/sherpa.svg +0 -69
- package/website/assets/silhouettes/stupa-tower.svg +0 -119
- package/website/assets/silhouettes/tattva-eye.svg +0 -78
- package/website/assets/silhouettes/terminal.svg +0 -74
- package/website/assets/silhouettes/webserver.svg +0 -145
- package/website/assets/silhouettes/yak.svg +0 -78
- package/website/assets/yakmesh-logo.png +0 -0
- package/website/assets/yakmesh-logo.webp +0 -0
- package/website/assets/yakmesh-logo128x140.webp +0 -0
- package/website/assets/yakmesh-logo2.png +0 -0
- package/website/assets/yakmesh-logo2.svg +0 -51
- package/website/assets/yakmesh-logo40x44.webp +0 -0
- package/website/assets/yakmesh.gif +0 -0
- package/website/assets/yakmesh.ico +0 -0
- package/website/assets/yakmesh.jpg +0 -0
- package/website/assets/yakmesh.pdf +0 -0
- package/website/assets/yakmesh.png +0 -0
- package/website/assets/yakmesh.svg +0 -70
- package/website/assets/yakmesh128.webp +0 -0
- package/website/assets/yakmesh32.png +0 -0
- package/website/assets/yakmesh32.svg +0 -65
- package/website/assets/yakmesh32o.ico +0 -2
- package/website/assets/yakmesh32o.svg +0 -65
- package/website/assets/yakmesh32o.svgz +0 -0
package/security/sakshi.js
CHANGED
|
@@ -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
|
*/
|