yakmesh 1.6.0 → 1.7.1

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 CHANGED
@@ -2,6 +2,95 @@
2
2
 
3
3
  All notable changes to YAKMESH will be documented in this file.
4
4
 
5
+ ## [1.7.0] - 2026-01-18
6
+
7
+ ### 🦬 NAKPAK & SHERPA: Yak-Themed Protocol Naming
8
+
9
+ This release renames dark-themed protocols to yak-themed names for brand consistency.
10
+
11
+ #### Renamed Protocols
12
+
13
+ ##### NAKPAK (formerly Phantom)
14
+ - **N**ested **A**nonymous **K**ernel for **P**rivate **A**uthenticated **K**omms
15
+ - Post-quantum onion routing with ML-KEM768 key encapsulation
16
+ - File renamed: `phantom-routing.js` → `nakpak-routing.js`
17
+ - Classes renamed: `PhantomRouter` → `NakpakRouter`, etc.
18
+ - Etymology: NAK (female yak) + PAK (package) = sounds like "knapsack" 🎒
19
+
20
+ ##### SHERPA (new protocol slot)
21
+ - **S**ecure **H**idden **E**ndpoint **R**esolution **P**ath **A**rchitecture
22
+ - Peer discovery DHT via public web layer
23
+ - Guides nodes to find each other like Sherpas guide travelers
24
+
25
+ #### Protocol Stack Update
26
+ ```text
27
+ 1. HTTP API - Public content delivery
28
+ 2. Annex - Encrypted P2P messaging
29
+ 3. Gossip - Message propagation
30
+ 4. Beacon - Emergency broadcast
31
+ 5. Nakpak - Onion routing (NEW NAME)
32
+ 6. Sherpa - Peer discovery (NEW)
33
+ 7. Mesh - Core P2P network
34
+ ```
35
+
36
+ ---
37
+
38
+ ### 🛡️ SLH-DSA Backup Signatures & Monitoring Dashboard
39
+
40
+ This release adds defense-in-depth with FIPS 205 hash-based backup signatures and a comprehensive monitoring dashboard.
41
+
42
+ #### New Features
43
+
44
+ ##### SLH-DSA Backup Signatures (FIPS 205)
45
+ - **Dual Algorithm Support:** ML-DSA (lattice-based) + SLH-DSA (hash-based)
46
+ - **Level 3:** SLH-DSA-SHA2-192f (hash-based, different cryptographic assumptions)
47
+ - **Level 5:** SLH-DSA-SHA2-256f (hash-based, paranoid mode)
48
+ - New functions: `signBackup()`, `verifyBackup()`, `signDual()`, `verifyDual()`
49
+ - Generate dual keypairs with `generateDualSignatureKeyPairs()`
50
+ - Defense-in-depth: if lattice assumptions break, hash-based signatures still hold
51
+
52
+ ##### Monitoring Dashboard
53
+ - Updated `/dashboard` with YAKMESH branding
54
+ - New `/metrics` endpoint aggregates all node status
55
+ - **Oracle Status:** Health, network identity, verified peers
56
+ - **Crypto Info:** Active algorithms, security level, NIST standards
57
+ - **Time Source:** Trust level, stratum, precision indicators
58
+ - **Uptime Tracking:** Human-readable uptime display
59
+
60
+ ##### Dev.to Automation
61
+ - GitHub Actions now posts to Dev.to on major releases
62
+ - Automated article creation with version info
63
+ - Add `DEVTO_API_KEY` to GitHub secrets to enable
64
+
65
+ #### Technical Details
66
+
67
+ ##### SLH-DSA Key/Signature Sizes
68
+ | Level | Public Key | Secret Key | Signature |
69
+ |-------|------------|------------|-----------|
70
+ | 3 (192f) | 48 bytes | 96 bytes | ~35 KB |
71
+ | 5 (256f) | 64 bytes | 128 bytes | ~50 KB |
72
+
73
+ ##### Performance (SLH-DSA is slower than ML-DSA)
74
+ - Sign: ~100-160ms (vs 3ms for ML-DSA)
75
+ - Verify: ~5-9ms (vs 1ms for ML-DSA)
76
+ - Use dual signatures only for high-value operations
77
+
78
+ #### Added
79
+ - `signBackup()`, `verifyBackup()` - SLH-DSA standalone operations
80
+ - `signDual()`, `verifyDual()` - Dual signature operations
81
+ - `generateDualSignatureKeyPairs()` - Generate both ML-DSA and SLH-DSA keypairs
82
+ - `getBackupSignatureAlgorithm()`, `getBackupSignatureName()` - Config accessors
83
+ - `/metrics` endpoint for comprehensive node status
84
+ - Dashboard cards for Oracle, Crypto, Time Source
85
+ - Uptime tracking with human-readable formatting
86
+
87
+ #### Changed
88
+ - `getCryptoSummary()` now includes `backupSignatureAlgorithm` and FIPS 205 in standards
89
+ - Dashboard rebranded from "Lantern Mesh" to "YAKMESH"
90
+ - `discord-release.yml` now includes Dev.to posting job
91
+
92
+ ---
93
+
5
94
  ## [1.6.0] - 2026-01-17
6
95
 
7
96
  ### 🔐 NIST Level 5 (Paranoid Mode) & Cryptographic Unification
@@ -37,7 +126,7 @@ All hash operations now use SHA3-256 for post-quantum consistency:
37
126
  - `oracle/phase-epoch.js` - Phase derivation uses SHA3-256
38
127
  - `gossip/protocol.js` - Bloom filters and message IDs use SHA3-256
39
128
  - `mesh/temporal-encoder.js` - Temporal hashes use SHA3-256
40
- - `mesh/phantom-routing.js` - Key derivation uses SHA3-256
129
+ - `mesh/nakpak-routing.js` - Key derivation uses SHA3-256 (formerly phantom-routing)
41
130
  - `mesh/annex.js` - Session key derivation uses SHA3-256
42
131
  - `mesh/echo-ranging.js` - Probe key derivation uses SHA3-256
43
132
 
package/README.md CHANGED
@@ -182,7 +182,8 @@ See [TRADEMARK.md](TRADEMARK.md) for trademark usage policy.
182
182
  <p>
183
183
  <a href="https://discord.gg/8mSPfbJB8N">💬 Discord</a> •
184
184
  <a href="https://t.me/yakmesh">📱 Telegram</a> •
185
- <a href="https://x.com/yakmesh_dev">𝕏 Twitter</a>
185
+ <a href="https://x.com/yakmesh_dev">𝕏 Twitter</a>
186
+ <a href="https://patreon.com/yakmesh">❤️ Patreon</a>
186
187
  </p>
187
188
  <br>
188
189
  <sub>© 2026 YAKMESH™ Project. Sturdy & Secure.</sub>
@@ -0,0 +1,49 @@
1
+ # 🔐 YAKMESH v1.6.0 - NIST Level 5 & Cryptographic Unification
2
+
3
+ **The paranoid mode has arrived.**
4
+
5
+ ## What's New
6
+
7
+ ### 🛡️ NIST Level 5 Support (Paranoid Mode)
8
+ Choose your security level:
9
+ - **Level 3** (default): ML-DSA-65/ML-KEM-768 - ~192-bit classical security
10
+ - **Level 5** (paranoid): ML-DSA-87/ML-KEM-1024 - ~256-bit classical security
11
+
12
+ ```javascript
13
+ import { setSecurityLevel, SecurityLevel } from 'yakmesh/security/crypto-config';
14
+ setSecurityLevel(SecurityLevel.LEVEL_5); // Maximum security
15
+ ```
16
+
17
+ ### 🔄 SHA3-256 Everywhere
18
+ All hash operations now use SHA3-256 for post-quantum consistency:
19
+ - Bloom filter hashing in gossip protocol
20
+ - Temporal mesh encoding
21
+ - Phantom routing key derivation
22
+ - Annex session keys
23
+ - Echo ranging probes
24
+
25
+ **Why?** SHA3-256 provides 128-bit quantum security (Grover resistance) with its sponge construction.
26
+
27
+ ### 📋 Crypto Agility Documentation
28
+ New `docs/CRYPTO-AGILITY.md` formalizes our algorithm upgrade path:
29
+ - When to upgrade (NIST recommendations, new attacks, standards updates)
30
+ - 90-day dual-algorithm transition periods
31
+ - Version negotiation between nodes
32
+
33
+ ### ✅ 36-Test PQ Crypto Suite
34
+ Comprehensive validation of all cryptographic operations:
35
+ ```bash
36
+ npm run test:crypto
37
+ ```
38
+ Tests ML-DSA-65/87, ML-KEM-768/1024, SHA3-256, and full handshake simulations.
39
+
40
+ ## Upgrade
41
+ ```bash
42
+ npm install yakmesh@1.6.0
43
+ ```
44
+
45
+ ---
46
+
47
+ **No classical asymmetric crypto. Only post-quantum. Only math.**
48
+
49
+ 🦬 https://yakmesh.dev | 📦 npm: yakmesh
@@ -0,0 +1,35 @@
1
+ # Discord Announcement - v1.7.0
2
+
3
+ ## Embed
4
+
5
+ **Title:** 🦬 YAKMESH™ v1.7.0 Released!
6
+
7
+ **Description:**
8
+ Defense-in-depth with dual post-quantum signatures!
9
+
10
+ **Fields:**
11
+
12
+ ### 🛡️ SLH-DSA Backup Signatures
13
+ - Hash-based signatures (FIPS 205) as backup to ML-DSA
14
+ - Defense-in-depth: if lattice breaks, hash-based still holds
15
+ - `signDual()` and `verifyDual()` for maximum security
16
+
17
+ ### 📊 Monitoring Dashboard
18
+ - New `/metrics` endpoint with comprehensive node status
19
+ - Dashboard shows Oracle, Crypto, Time Source, Uptime
20
+ - Real-time health monitoring
21
+
22
+ ### 🤖 Dev.to Automation
23
+ - Release articles now auto-posted to Dev.to
24
+ - Three platforms automated: Discord, Telegram, Dev.to
25
+
26
+ ### 📦 Install
27
+ ```
28
+ npm install yakmesh@1.7.0
29
+ ```
30
+
31
+ **Links:** [npm](https://npmjs.com/package/yakmesh) • [GitHub](https://github.com/yakmesh/yakmesh) • [Docs](https://yakmesh.dev/docs) • [Discord](https://discord.gg/8mSPfbJB8N) • [Telegram](https://t.me/yakmesh)
32
+
33
+ ---
34
+
35
+ YAKMESH™ - Sturdy & Secure 🏔️
@@ -0,0 +1,83 @@
1
+ # Welcome to YAKMESH™ Patreon! 🦬
2
+
3
+ ## Thank You for Supporting Post-Quantum Security
4
+
5
+ Welcome to the YAKMESH™ community! Your support helps us build the future of secure, decentralized networking.
6
+
7
+ ---
8
+
9
+ ## 🏔️ What is YAKMESH?
10
+
11
+ **YAKMESH** (Yielding Atomic Kernel Modular Encryption Secured Hub) is a high-resiliency, decentralized mesh network designed to survive the quantum computing era.
12
+
13
+ ### Why It Matters
14
+ - 🔐 **Post-quantum cryptography** - Protected against future quantum attacks using ML-DSA-65, ML-KEM768, and SLH-DSA
15
+ - 🌐 **Truly decentralized** - No central servers, no single points of failure
16
+ - 🔮 **Self-verifying oracle** - Code is the authority, not humans
17
+ - 🕵️ **Phantom routing** - Onion routing for privacy
18
+ - ⚡ **PCIe atomic timing** - Nanosecond precision across the network
19
+
20
+ ---
21
+
22
+ ## 💚 What Your Support Enables
23
+
24
+ ### Infrastructure
25
+ - 🖥️ Official node hosting and bandwidth
26
+ - 🔒 Security audits and penetration testing
27
+ - 📊 Network monitoring and uptime
28
+
29
+ ### Development
30
+ - 🛠️ Full-time development resources
31
+ - 🧪 Testing infrastructure
32
+ - 📚 Documentation and tutorials
33
+
34
+ ### Community
35
+ - 🎮 Discord bot (YakBot) hosting
36
+ - 🎉 Community events and hackathons
37
+ - 📰 Regular development updates
38
+
39
+ ---
40
+
41
+ ## 🎁 Supporter Benefits
42
+
43
+ ### All Supporters
44
+ - 💬 Patron-only Discord channel access
45
+ - 📋 Early access to roadmap discussions
46
+ - 🏷️ Patron badge in Discord
47
+ - 📰 Monthly development digest
48
+
49
+ ### Future Tiers (Coming Soon)
50
+ - **Builder** - Vote on feature priorities
51
+ - **Pioneer** - Name in contributors list
52
+ - **Architect** - Monthly dev call access
53
+
54
+ ---
55
+
56
+ ## 🔗 Connect With Us
57
+
58
+ - 🌐 **Website**: [yakmesh.dev](https://yakmesh.dev)
59
+ - 💬 **Discord**: [Join Server](https://discord.gg/8mSPfbJB8N)
60
+ - 📱 **Telegram**: [@yakmesh](https://t.me/yakmesh)
61
+ - 𝕏 **Twitter/X**: [@yakmesh_dev](https://x.com/yakmesh_dev)
62
+ - 📦 **npm**: [yakmesh](https://npmjs.com/package/yakmesh)
63
+ - 📂 **GitHub**: [yakmesh/yakmesh](https://github.com/yakmesh/yakmesh)
64
+
65
+ ---
66
+
67
+ ## 🚀 Quick Start
68
+
69
+ ```bash
70
+ npm install yakmesh
71
+ npx yakmesh init
72
+ npx yakmesh start
73
+ ```
74
+
75
+ ---
76
+
77
+ **Thank you for being part of the quantum-resistant future!**
78
+
79
+ *Sturdy & Secure* 🏔️
80
+
81
+ ---
82
+
83
+ © 2026 YAKMESH™ Project | [PeerQuanta](https://peerquanta.com)
@@ -0,0 +1,15 @@
1
+ 🔐 YAKMESH v1.6.0 - Paranoid Mode
2
+
3
+ New:
4
+ • NIST Level 5 support (ML-DSA-87/ML-KEM-1024)
5
+ • SHA3-256 unified across all modules
6
+ • Crypto agility documentation
7
+ • 36-test PQ crypto suite
8
+
9
+ ```js
10
+ setSecurityLevel(SecurityLevel.LEVEL_5); // Maximum security
11
+ ```
12
+
13
+ npm install yakmesh@1.6.0
14
+
15
+ 🦬 https://yakmesh.dev
@@ -0,0 +1,11 @@
1
+ # Telegram Announcement - v1.7.0
2
+
3
+ 🦬 *YAKMESH™ v1.7.0 Released!*
4
+
5
+ 🛡️ SLH-DSA backup signatures for defense-in-depth
6
+ 📊 New monitoring dashboard with /metrics endpoint
7
+ 🤖 Automated Dev.to article posting
8
+
9
+ 📦 `npm install yakmesh@1.7.0`
10
+
11
+ 🔗 https://github.com/yakmesh/yakmesh/releases/tag/v1.7.0
@@ -0,0 +1,13 @@
1
+ 🔐 YAKMESH v1.6.0 - Paranoid Mode
2
+
3
+ NIST Level 5 support is here:
4
+ • ML-DSA-87 (Dilithium5) - 256-bit classical
5
+ • ML-KEM-1024 (Kyber1024) - 256-bit classical
6
+
7
+ Plus: SHA3-256 unified across all hashing operations.
8
+
9
+ No classical asymmetric crypto. Only post-quantum. Only math.
10
+
11
+ npm i yakmesh@1.6.0
12
+
13
+ 🦬 yakmesh.dev
@@ -0,0 +1,41 @@
1
+ # X/Twitter Announcement - v1.7.0
2
+
3
+ ## Thread
4
+
5
+ ### Tweet 1
6
+ 🦬 YAKMESH™ v1.7.0 Released!
7
+
8
+ Defense-in-depth with dual post-quantum signatures 🛡️
9
+
10
+ Now using BOTH:
11
+ • ML-DSA (lattice-based) - fast primary
12
+ • SLH-DSA (hash-based) - backup
13
+
14
+ If lattice crypto ever breaks, hash-based still protects you.
15
+
16
+ npm i yakmesh@1.7.0
17
+
18
+ ### Tweet 2 (Reply)
19
+ New features in v1.7.0:
20
+
21
+ 📊 Monitoring Dashboard
22
+ - /metrics endpoint with full node status
23
+ - Oracle, Crypto, Time Source visualization
24
+ - Real-time uptime tracking
25
+
26
+ 🤖 Automation
27
+ - Release articles auto-posted to Dev.to
28
+ - Discord + Telegram + Dev.to = 3 platforms automated
29
+
30
+ ### Tweet 3 (Reply)
31
+ The philosophy: Sturdy & Secure 🏔️
32
+
33
+ Like a yak on a mountain, YAKMESH™ is built to survive harsh conditions.
34
+
35
+ Quantum computers? Covered.
36
+ Lattice assumptions break? Still covered.
37
+ Single point of failure? Mesh eliminates it.
38
+
39
+ Docs: yakmesh.dev
40
+
41
+ #PostQuantum #P2P #Cryptography
package/cli/index.js CHANGED
@@ -56,7 +56,7 @@ program
56
56
  // Parse bootstrap nodes
57
57
  const bootstrapNodes = options.bootstrap
58
58
  ? options.bootstrap.split(',').map(s => s.trim())
59
- : ['wss://peerquanta.com:9001'];
59
+ : []; // Empty by default - YAKMESH is decentralized, no central bootstrap
60
60
 
61
61
  // Generate config
62
62
  const config = `/**
@@ -302,6 +302,6 @@ if (!process.argv.slice(2).length) {
302
302
  showBanner();
303
303
  program.outputHelp();
304
304
  }
305
-
306
-
307
-
305
+
306
+
307
+
@@ -3,20 +3,22 @@
3
3
  <head>
4
4
  <meta charset="UTF-8">
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>Lantern Mesh Network Dashboard</title>
6
+ <title>YAKMESH Dashboard</title>
7
7
  <style>
8
8
  :root {
9
- --bg-dark: #0a0a0f;
10
- --bg-card: #12121a;
11
- --bg-hover: #1a1a25;
12
- --border: #2a2a35;
13
- --text: #e0e0e5;
14
- --text-dim: #888;
15
- --accent: #f59e0b;
16
- --accent-glow: rgba(245, 158, 11, 0.2);
17
- --success: #10b981;
18
- --warning: #f59e0b;
19
- --error: #ef4444;
9
+ --bg-dark: #0f1419;
10
+ --bg-card: #1a2027;
11
+ --bg-hover: #242d38;
12
+ --border: #2d3a47;
13
+ --text: #e6edf3;
14
+ --text-dim: #8b949e;
15
+ --accent: #4ade80;
16
+ --accent-glow: rgba(74, 222, 128, 0.2);
17
+ --mountain: #4ade80;
18
+ --frost: #38bdf8;
19
+ --success: #4ade80;
20
+ --warning: #fbbf24;
21
+ --error: #f87171;
20
22
  }
21
23
 
22
24
  * {
@@ -27,7 +29,7 @@
27
29
 
28
30
  body {
29
31
  font-family: 'SF Mono', 'Monaco', 'Consolas', monospace;
30
- background: var(--bg-dark);
32
+ background: linear-gradient(135deg, var(--bg-dark) 0%, #0a1520 100%);
31
33
  color: var(--text);
32
34
  min-height: 100vh;
33
35
  padding: 2rem;
@@ -46,8 +48,9 @@
46
48
 
47
49
  h1 {
48
50
  font-size: 1.5rem;
49
- font-weight: 500;
50
- color: var(--accent);
51
+ font-weight: 600;
52
+ color: var(--mountain);
53
+ letter-spacing: 0.05em;
51
54
  }
52
55
 
53
56
  .subtitle {
@@ -306,10 +309,10 @@
306
309
  </head>
307
310
  <body>
308
311
  <div class="header">
309
- <span class="logo">🏮</span>
312
+ <span class="logo">🦬</span>
310
313
  <div>
311
- <h1>Lantern Mesh Network</h1>
312
- <div class="subtitle">Post-Quantum Secure • DecentralizedFederated</div>
314
+ <h1>YAKMESH™ Dashboard</h1>
315
+ <div class="subtitle">Post-Quantum Secure • Sturdy & Secure v1.7.0</div>
313
316
  </div>
314
317
  </div>
315
318
 
@@ -329,7 +332,7 @@
329
332
  <div class="grid">
330
333
  <!-- Node Identity -->
331
334
  <div class="card">
332
- <div class="card-title">🔐 Node Identity</div>
335
+ <div class="card-title">🦬 Node Identity</div>
333
336
  <div id="node-identity">
334
337
  <div class="empty-state">Connect to a node to view identity</div>
335
338
  </div>
@@ -348,8 +351,8 @@
348
351
  <div class="stat-label">Discovered Nodes</div>
349
352
  </div>
350
353
  <div class="stat">
351
- <div class="stat-value" id="replication-log">-</div>
352
- <div class="stat-label">Replication Log</div>
354
+ <div class="stat-value" id="uptime">-</div>
355
+ <div class="stat-label">Uptime</div>
353
356
  </div>
354
357
  <div class="stat">
355
358
  <div class="stat-value" id="gossip-messages">-</div>
@@ -358,6 +361,30 @@
358
361
  </div>
359
362
  </div>
360
363
 
364
+ <!-- Oracle Status -->
365
+ <div class="card">
366
+ <div class="card-title">🔮 Oracle Status</div>
367
+ <div id="oracle-status">
368
+ <div class="empty-state">Connect to view oracle status</div>
369
+ </div>
370
+ </div>
371
+
372
+ <!-- Crypto Configuration -->
373
+ <div class="card">
374
+ <div class="card-title">🔐 Post-Quantum Cryptography</div>
375
+ <div id="crypto-info">
376
+ <div class="empty-state">Connect to view crypto configuration</div>
377
+ </div>
378
+ </div>
379
+
380
+ <!-- Time Source -->
381
+ <div class="card">
382
+ <div class="card-title">⏱️ Time Source</div>
383
+ <div id="time-info">
384
+ <div class="empty-state">Connect to view time source</div>
385
+ </div>
386
+ </div>
387
+
361
388
  <!-- Connected Peers -->
362
389
  <div class="card">
363
390
  <div class="card-title">
@@ -399,14 +426,6 @@
399
426
  <li class="empty-state">No nodes discovered</li>
400
427
  </ul>
401
428
  </div>
402
-
403
- <!-- Replication -->
404
- <div class="card">
405
- <div class="card-title">🔄 Replication Engine</div>
406
- <div class="replication-log" id="replication-info">
407
- <div class="empty-state">Connect to view replication info</div>
408
- </div>
409
- </div>
410
429
  </div>
411
430
 
412
431
  <script>
@@ -439,10 +458,10 @@
439
458
 
440
459
  try {
441
460
  // Fetch all data in parallel
442
- const [node, peers, replication, gossip, discovered] = await Promise.all([
461
+ const [node, peers, metrics, gossip, discovered] = await Promise.all([
443
462
  fetch(`${nodeUrl}/node`).then(r => r.json()).catch(() => null),
444
463
  fetch(`${nodeUrl}/peers`).then(r => r.json()).catch(() => []),
445
- fetch(`${nodeUrl}/replication`).then(r => r.json()).catch(() => null),
464
+ fetch(`${nodeUrl}/metrics`).then(r => r.json()).catch(() => null),
446
465
  fetch(`${nodeUrl}/gossip`).then(r => r.json()).catch(() => null),
447
466
  fetch(`${nodeUrl}/discovered`).then(r => r.json()).catch(() => []),
448
467
  ]);
@@ -464,9 +483,73 @@
464
483
  // Update stats
465
484
  document.getElementById('peer-count').textContent = peers.length;
466
485
  document.getElementById('discovered-count').textContent = discovered.length;
467
- document.getElementById('replication-log').textContent = replication?.replicationLogSize ?? '-';
486
+ document.getElementById('uptime').textContent = metrics?.node?.uptimeFormatted || '-';
468
487
  document.getElementById('gossip-messages').textContent = gossip?.seenMessages ?? '-';
469
488
 
489
+ // Update Oracle status
490
+ if (metrics?.oracle) {
491
+ const oracle = metrics.oracle;
492
+ const statusColor = oracle.status === 'healthy' ? 'var(--success)' : 'var(--error)';
493
+ document.getElementById('oracle-status').innerHTML = `
494
+ <div style="display: flex; align-items: center; gap: 0.5rem; margin-bottom: 1rem;">
495
+ <div style="width: 12px; height: 12px; border-radius: 50%; background: ${statusColor}; box-shadow: 0 0 8px ${statusColor};"></div>
496
+ <span style="font-weight: 600; color: ${statusColor}">${oracle.status.toUpperCase()}</span>
497
+ </div>
498
+ <div style="color: var(--text-dim); font-size: 0.85rem;">
499
+ <div>Network: ${oracle.networkName || 'N/A'}</div>
500
+ <div>ID: ${oracle.networkId || 'N/A'}</div>
501
+ <div style="word-break: break-all;">Fingerprint: ${oracle.fingerprint?.slice(0, 24) || 'N/A'}...</div>
502
+ <div>Verified Peers: ${oracle.verifiedPeers}</div>
503
+ </div>
504
+ `;
505
+ }
506
+
507
+ // Update Crypto info
508
+ if (metrics?.crypto) {
509
+ const crypto = metrics.crypto;
510
+ document.getElementById('crypto-info').innerHTML = `
511
+ <div style="color: var(--text-dim); font-size: 0.85rem;">
512
+ <div style="margin-bottom: 0.75rem;">
513
+ <span style="color: var(--frost)">Security Level:</span>
514
+ <span style="color: var(--mountain); font-weight: 600;">${crypto.levelName}</span>
515
+ </div>
516
+ <div>Signature: <span style="color: var(--text)">${crypto.signatureAlgorithm}</span></div>
517
+ <div>Backup Sig: <span style="color: var(--text)">${crypto.backupSignatureAlgorithm || 'N/A'}</span></div>
518
+ <div>KEM: <span style="color: var(--text)">${crypto.kemAlgorithm}</span></div>
519
+ <div style="margin-top: 0.5rem;">
520
+ Classical: ${crypto.classicalSecurity} | Quantum: ${crypto.quantumSecurity}
521
+ </div>
522
+ <div style="margin-top: 0.5rem; font-size: 0.75rem;">
523
+ ${crypto.nistStandards?.join(' • ') || ''}
524
+ </div>
525
+ </div>
526
+ `;
527
+ }
528
+
529
+ // Update Time info
530
+ if (metrics?.time) {
531
+ const time = metrics.time;
532
+ const trustColors = {
533
+ ATOMIC: 'var(--success)',
534
+ GPS: 'var(--success)',
535
+ PTP: 'var(--warning)',
536
+ NTP: 'var(--text-dim)',
537
+ };
538
+ const trustColor = trustColors[time.trustLevel] || 'var(--text-dim)';
539
+ document.getElementById('time-info').innerHTML = `
540
+ <div style="display: flex; align-items: center; gap: 0.5rem; margin-bottom: 1rem;">
541
+ <div style="width: 12px; height: 12px; border-radius: 50%; background: ${trustColor}; box-shadow: 0 0 8px ${trustColor};"></div>
542
+ <span style="font-weight: 600; color: ${trustColor}">${time.trustLevel}</span>
543
+ </div>
544
+ <div style="color: var(--text-dim); font-size: 0.85rem;">
545
+ <div>Stratum: ${time.stratum ?? 'N/A'}</div>
546
+ <div>Phase Tolerance: ${time.phaseTolerance ? time.phaseTolerance + 'ms' : 'N/A'}</div>
547
+ <div>Atomic Time: ${time.hasAtomicTime ? '✅ Yes' : '❌ No'}</div>
548
+ <div>High Precision: ${time.hasHighPrecisionTime ? '✅ Yes' : '❌ No'}</div>
549
+ </div>
550
+ `;
551
+ }
552
+
470
553
  // Update peer list
471
554
  const peerList = document.getElementById('peer-list');
472
555
  if (peers.length === 0) {
@@ -508,15 +591,6 @@
508
591
  `).join('');
509
592
  }
510
593
 
511
- // Update replication info
512
- if (replication) {
513
- document.getElementById('replication-info').innerHTML = `
514
- <div>Log Entries: ${replication.replicationLogSize}</div>
515
- <div>Peer States: ${replication.peerStates}</div>
516
- <div>Tables: ${replication.tables?.join(', ') || 'N/A'}</div>
517
- `;
518
- }
519
-
520
594
  } catch (e) {
521
595
  console.error('Refresh failed:', e);
522
596
  }
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Yakmesh Phantom Routing - Post-quantum Hidden Anonymous Network Transmission Over Mesh
2
+ * Yakmesh NAKPAK Routing - Nested Anonymous Kernel for Private Authenticated Komms
3
3
  *
4
4
  * The first post-quantum secure onion routing implementation featuring:
5
5
  * - ML-DSA-65 signatures at every routing layer
@@ -7,12 +7,15 @@
7
7
  * - Multi-layer encryption with perfect forward secrecy
8
8
  * - Timing attack resistance through temporal padding
9
9
  *
10
- * Key Innovation: "Your packets become ghosts"
10
+ * Key Innovation: "Your packets travel like yak caravans through hidden mountain paths"
11
11
  * - Each routing layer uses different quantum-resistant keys
12
12
  * - Decoy traffic masks real communication patterns
13
13
  * - Temporal obfuscation defeats traffic analysis
14
14
  *
15
- * @module mesh/phantom-routing
15
+ * Etymology: NAK (female yak, the pack carrier) + PAK (package) = NAKPAK (sounds like "knapsack")
16
+ * Works with SHERPA (Secure Hidden Endpoint Resolution Path Architecture) for peer discovery.
17
+ *
18
+ * @module mesh/nakpak-routing
16
19
  * @license MIT
17
20
  * @copyright 2026 YAKMESH™ Contributors
18
21
  */
@@ -23,7 +26,7 @@ import { ml_kem768 } from '@noble/post-quantum/ml-kem.js';
23
26
  import { sha3_256 } from '@noble/hashes/sha3.js';
24
27
  import { bytesToHex, hexToBytes, utf8ToBytes } from '@noble/hashes/utils.js';
25
28
 
26
- const PHANTOM_CONFIG = {
29
+ const NAKPAK_CONFIG = {
27
30
  // Circuit settings
28
31
  defaultHopCount: 3, // Number of hops (like Tor)
29
32
  maxHopCount: 7, // Maximum allowed hops
@@ -44,13 +47,13 @@ const PHANTOM_CONFIG = {
44
47
  maxPayloadSize: 7000, // Max actual payload
45
48
 
46
49
  // Key derivation
47
- keyDerivationSalt: 'PHANTOM-YAKMESH-2026',
50
+ keyDerivationSalt: 'NAKPAK-YAKMESH-2026',
48
51
  };
49
52
 
50
53
  /**
51
- * A single routing layer in the onion
54
+ * A single routing layer in the onion (like a yak's pack saddle layer)
52
55
  */
53
- class PhantomLayer {
56
+ class NakpakLayer {
54
57
  constructor(options) {
55
58
  this.hopIndex = options.hopIndex;
56
59
  this.nodeId = options.nodeId;
@@ -114,12 +117,12 @@ class PhantomLayer {
114
117
  throw new Error('No encryption key established');
115
118
  }
116
119
 
117
- const nonce = randomBytes(PHANTOM_CONFIG.nonceSize);
120
+ const nonce = randomBytes(NAKPAK_CONFIG.nonceSize);
118
121
  const cipher = createCipheriv(
119
- PHANTOM_CONFIG.layerEncryption,
122
+ NAKPAK_CONFIG.layerEncryption,
120
123
  this.encryptionKey,
121
124
  nonce,
122
- { authTagLength: PHANTOM_CONFIG.authTagLength }
125
+ { authTagLength: NAKPAK_CONFIG.authTagLength }
123
126
  );
124
127
 
125
128
  const plaintext = typeof data === 'string' ? data : JSON.stringify(data);
@@ -148,10 +151,10 @@ class PhantomLayer {
148
151
  const tag = Buffer.from(encryptedData.tag, 'hex');
149
152
 
150
153
  const decipher = createDecipheriv(
151
- PHANTOM_CONFIG.layerEncryption,
154
+ NAKPAK_CONFIG.layerEncryption,
152
155
  this.encryptionKey,
153
156
  nonce,
154
- { authTagLength: PHANTOM_CONFIG.authTagLength }
157
+ { authTagLength: NAKPAK_CONFIG.authTagLength }
155
158
  );
156
159
  decipher.setAuthTag(tag);
157
160
 
@@ -166,16 +169,16 @@ class PhantomLayer {
166
169
  _deriveEncryptionKey(sharedSecret) {
167
170
  return createHash('sha3-256')
168
171
  .update(sharedSecret)
169
- .update(PHANTOM_CONFIG.keyDerivationSalt)
172
+ .update(NAKPAK_CONFIG.keyDerivationSalt)
170
173
  .update(Buffer.from([this.hopIndex]))
171
174
  .digest();
172
175
  }
173
176
  }
174
177
 
175
178
  /**
176
- * An onion-wrapped packet
179
+ * An onion-wrapped packet (like a yak's cargo bundle)
177
180
  */
178
- class PhantomPacket {
181
+ class NakpakPacket {
179
182
  constructor(options = {}) {
180
183
  this.id = options.id || bytesToHex(randomBytes(16));
181
184
  this.circuitId = options.circuitId;
@@ -211,7 +214,7 @@ class PhantomPacket {
211
214
  });
212
215
 
213
216
  const currentSize = Buffer.byteLength(serialized, 'utf8');
214
- const paddingNeeded = PHANTOM_CONFIG.fixedPacketSize - currentSize - 50; // Reserve for padding field
217
+ const paddingNeeded = NAKPAK_CONFIG.fixedPacketSize - currentSize - 50; // Reserve for padding field
215
218
 
216
219
  if (paddingNeeded > 0) {
217
220
  this.padding = randomBytes(Math.max(1, paddingNeeded)).toString('base64');
@@ -222,7 +225,7 @@ class PhantomPacket {
222
225
  * Create decoy packet
223
226
  */
224
227
  static createDecoy(circuitId) {
225
- const decoy = new PhantomPacket({
228
+ const decoy = new NakpakPacket({
226
229
  circuitId,
227
230
  isDecoy: true,
228
231
  });
@@ -251,7 +254,7 @@ class PhantomPacket {
251
254
  }
252
255
 
253
256
  static deserialize(obj) {
254
- const packet = new PhantomPacket({
257
+ const packet = new NakpakPacket({
255
258
  id: obj.id,
256
259
  circuitId: obj.circuitId,
257
260
  timestamp: obj.timestamp,
@@ -263,12 +266,12 @@ class PhantomPacket {
263
266
  }
264
267
 
265
268
  /**
266
- * A circuit through the mesh (like a Tor circuit)
269
+ * A circuit through the mesh (like a yak caravan route)
267
270
  */
268
- class PhantomCircuit {
271
+ class NakpakCircuit {
269
272
  constructor(options = {}) {
270
273
  this.circuitId = options.circuitId || bytesToHex(randomBytes(16));
271
- this.hops = []; // Array of PhantomLayer
274
+ this.hops = []; // Array of NakpakLayer
272
275
  this.isEstablished = false;
273
276
  this.createdAt = Date.now();
274
277
  this.lastUsed = Date.now();
@@ -279,14 +282,14 @@ class PhantomCircuit {
279
282
  * Build a circuit through specified nodes
280
283
  */
281
284
  async buildCircuit(nodeIds) {
282
- if (nodeIds.length > PHANTOM_CONFIG.maxHopCount) {
283
- throw new Error('Too many hops: max is ' + PHANTOM_CONFIG.maxHopCount);
285
+ if (nodeIds.length > NAKPAK_CONFIG.maxHopCount) {
286
+ throw new Error('Too many hops: max is ' + NAKPAK_CONFIG.maxHopCount);
284
287
  }
285
288
 
286
289
  this.hops = [];
287
290
 
288
291
  for (let i = 0; i < nodeIds.length; i++) {
289
- const layer = new PhantomLayer({
292
+ const layer = new NakpakLayer({
290
293
  hopIndex: i,
291
294
  nodeId: nodeIds[i],
292
295
  nextHop: nodeIds[i + 1] || null,
@@ -356,7 +359,7 @@ class PhantomCircuit {
356
359
  };
357
360
  }
358
361
 
359
- const packet = new PhantomPacket({
362
+ const packet = new NakpakPacket({
360
363
  circuitId: this.circuitId,
361
364
  });
362
365
  packet.addLayer(payload);
@@ -369,14 +372,14 @@ class PhantomCircuit {
369
372
  }
370
373
 
371
374
  isExpired() {
372
- return Date.now() - this.createdAt > PHANTOM_CONFIG.circuitTimeout;
375
+ return Date.now() - this.createdAt > NAKPAK_CONFIG.circuitTimeout;
373
376
  }
374
377
  }
375
378
 
376
379
  /**
377
- * Relay node handler for forwarding phantom packets
380
+ * Relay node handler for forwarding nakpak packets
378
381
  */
379
- class PhantomRelay {
382
+ class NakpakRelay {
380
383
  constructor(options = {}) {
381
384
  this.nodeId = options.nodeId || bytesToHex(randomBytes(16));
382
385
  this.circuits = new Map(); // circuitId -> local layer info
@@ -401,7 +404,7 @@ class PhantomRelay {
401
404
  * Handle incoming circuit creation request
402
405
  */
403
406
  async handleCircuitCreate(request) {
404
- const layer = new PhantomLayer({
407
+ const layer = new NakpakLayer({
405
408
  hopIndex: request.hopIndex,
406
409
  nodeId: this.nodeId,
407
410
  nextHop: request.nextHop,
@@ -491,8 +494,8 @@ class PhantomRelay {
491
494
  * Add random delay to defeat timing analysis
492
495
  */
493
496
  async _addTimingDelay() {
494
- const delay = PHANTOM_CONFIG.minPaddingMs +
495
- Math.random() * (PHANTOM_CONFIG.maxPaddingMs - PHANTOM_CONFIG.minPaddingMs);
497
+ const delay = NAKPAK_CONFIG.minPaddingMs +
498
+ Math.random() * (NAKPAK_CONFIG.maxPaddingMs - NAKPAK_CONFIG.minPaddingMs);
496
499
  await new Promise(resolve => setTimeout(resolve, delay));
497
500
  }
498
501
 
@@ -500,9 +503,9 @@ class PhantomRelay {
500
503
  * Maybe inject a decoy packet to mask traffic patterns
501
504
  */
502
505
  _maybeInjectDecoy(circuitId) {
503
- if (Math.random() < PHANTOM_CONFIG.decoyProbability) {
506
+ if (Math.random() < NAKPAK_CONFIG.decoyProbability) {
504
507
  this.stats.decoysInjected++;
505
- return PhantomPacket.createDecoy(circuitId).serialize();
508
+ return NakpakPacket.createDecoy(circuitId).serialize();
506
509
  }
507
510
  return null;
508
511
  }
@@ -537,13 +540,13 @@ class PhantomRelay {
537
540
  }
538
541
 
539
542
  /**
540
- * Main PHANTOM routing manager
543
+ * Main NAKPAK routing manager
541
544
  */
542
- class PhantomRouter {
545
+ class NakpakRouter {
543
546
  constructor(options = {}) {
544
547
  this.nodeId = options.nodeId || bytesToHex(randomBytes(16));
545
- this.relay = new PhantomRelay({ nodeId: this.nodeId });
546
- this.circuits = new Map(); // circuitId -> PhantomCircuit (for circuits we created)
548
+ this.relay = new NakpakRelay({ nodeId: this.nodeId });
549
+ this.circuits = new Map(); // circuitId -> NakpakCircuit (for circuits we created)
547
550
  this.knownNodes = new Map(); // nodeId -> { publicKey, lastSeen }
548
551
 
549
552
  this.stats = {
@@ -576,7 +579,7 @@ class PhantomRouter {
576
579
  const availableNodes = Array.from(this.knownNodes.keys())
577
580
  .filter(id => id !== this.nodeId);
578
581
 
579
- if (availableNodes.length < PHANTOM_CONFIG.defaultHopCount) {
582
+ if (availableNodes.length < NAKPAK_CONFIG.defaultHopCount) {
580
583
  throw new Error('Not enough known nodes for circuit');
581
584
  }
582
585
 
@@ -586,10 +589,10 @@ class PhantomRouter {
586
589
  [availableNodes[i], availableNodes[j]] = [availableNodes[j], availableNodes[i]];
587
590
  }
588
591
 
589
- hopNodeIds = availableNodes.slice(0, PHANTOM_CONFIG.defaultHopCount);
592
+ hopNodeIds = availableNodes.slice(0, NAKPAK_CONFIG.defaultHopCount);
590
593
  }
591
594
 
592
- const circuit = new PhantomCircuit();
595
+ const circuit = new NakpakCircuit();
593
596
  const buildResult = await circuit.buildCircuit(hopNodeIds);
594
597
 
595
598
  this.circuits.set(circuit.circuitId, circuit);
@@ -638,7 +641,7 @@ class PhantomRouter {
638
641
  * Handle incoming packet (as a relay)
639
642
  */
640
643
  async handlePacket(packetData) {
641
- const packet = PhantomPacket.deserialize(packetData);
644
+ const packet = NakpakPacket.deserialize(packetData);
642
645
  const result = await this.relay.processPacket(packet);
643
646
 
644
647
  if (result.type === 'EXIT') {
@@ -690,10 +693,10 @@ class PhantomRouter {
690
693
  }
691
694
 
692
695
  export {
693
- PHANTOM_CONFIG,
694
- PhantomLayer,
695
- PhantomPacket,
696
- PhantomCircuit,
697
- PhantomRelay,
698
- PhantomRouter,
696
+ NAKPAK_CONFIG,
697
+ NakpakLayer,
698
+ NakpakPacket,
699
+ NakpakCircuit,
700
+ NakpakRelay,
701
+ NakpakRouter,
699
702
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "yakmesh",
3
- "version": "1.6.0",
3
+ "version": "1.7.1",
4
4
  "description": "YAKMESH: Yielding Atomic Kernel Modular Encryption Secured Hub - Post-quantum secure P2P mesh network for the 2026 threat landscape",
5
5
  "type": "module",
6
6
  "main": "server/index.js",
@@ -25,7 +25,7 @@
25
25
  "./mesh/sybil-defense": "./mesh/sybil-defense.js",
26
26
  "./mesh/echo-ranging": "./mesh/echo-ranging.js",
27
27
  "./mesh/pulse-sync": "./mesh/pulse-sync.js",
28
- "./mesh/phantom-routing": "./mesh/phantom-routing.js",
28
+ "./mesh/nakpak-routing": "./mesh/nakpak-routing.js",
29
29
  "./mesh/beacon-broadcast": "./mesh/beacon-broadcast.js"
30
30
  },
31
31
  "bin": {
@@ -66,7 +66,7 @@
66
66
  "distributed-oracle",
67
67
  "onion-routing",
68
68
  "echo-ranging",
69
- "phantom-routing",
69
+ "nakpak-routing",
70
70
  "pulse-sync",
71
71
  "beacon-broadcast",
72
72
  "kyber",
@@ -75,6 +75,10 @@
75
75
  ],
76
76
  "author": "Yakmesh",
77
77
  "license": "MIT",
78
+ "funding": {
79
+ "type": "patreon",
80
+ "url": "https://patreon.com/yakmesh"
81
+ },
78
82
  "homepage": "https://yakmesh.dev",
79
83
  "repository": {
80
84
  "url": "git+https://github.com/peerquanta/yakmesh.git",
package/server/index.js CHANGED
@@ -47,6 +47,19 @@ import {
47
47
  } from '../oracle/time-source.js';
48
48
  import { setTimeSourceConfig, getActiveConfig } from '../oracle/phase-epoch.js';
49
49
 
50
+ // Helper: Format uptime in human-readable format
51
+ function formatUptime(seconds) {
52
+ const days = Math.floor(seconds / 86400);
53
+ const hours = Math.floor((seconds % 86400) / 3600);
54
+ const mins = Math.floor((seconds % 3600) / 60);
55
+ const secs = seconds % 60;
56
+
57
+ if (days > 0) return `${days}d ${hours}h ${mins}m`;
58
+ if (hours > 0) return `${hours}h ${mins}m ${secs}s`;
59
+ if (mins > 0) return `${mins}m ${secs}s`;
60
+ return `${secs}s`;
61
+ }
62
+
50
63
  // Optional adapter integration (loaded dynamically if enabled)
51
64
  let ActiveAdapter = null;
52
65
 
@@ -140,6 +153,9 @@ export class YakmeshNode {
140
153
 
141
154
  async start() {
142
155
  console.log('\n🦬 Starting Yakmesh Node...\n');
156
+
157
+ // Record start time for uptime tracking
158
+ this._startTime = Date.now();
143
159
 
144
160
  // 0. LOCK THE CODEBASE - Prevent any modifications during runtime
145
161
  // This is critical for Code Proof Protocol security
@@ -898,6 +914,81 @@ export class YakmeshNode {
898
914
  });
899
915
  });
900
916
 
917
+ // =========================================
918
+ // Metrics Endpoint - Dashboard Data
919
+ // =========================================
920
+
921
+ app.get('/metrics', (req, res) => {
922
+ const startTime = this._startTime || Date.now();
923
+ const uptime = Math.floor((Date.now() - startTime) / 1000);
924
+
925
+ // Crypto configuration (imported at top of file)
926
+ let cryptoInfo = null;
927
+ try {
928
+ // Dynamic import not needed - use the imported module
929
+ cryptoInfo = this._cryptoSummary || {
930
+ levelName: 'NIST Level 3',
931
+ signatureAlgorithm: 'ML-DSA-65',
932
+ backupSignatureAlgorithm: 'SLH-DSA-SHA2-192f',
933
+ kemAlgorithm: 'ML-KEM-768',
934
+ classicalSecurity: '192-bit',
935
+ quantumSecurity: '128-bit',
936
+ nistStandards: ['FIPS 203 (ML-KEM)', 'FIPS 204 (ML-DSA)', 'FIPS 205 (SLH-DSA)'],
937
+ };
938
+ } catch (e) {
939
+ cryptoInfo = { error: 'Could not load crypto config' };
940
+ }
941
+
942
+ // Time source info
943
+ let timeInfo = null;
944
+ if (this.timeSource) {
945
+ const status = this.timeSource.getStatus();
946
+ timeInfo = {
947
+ trustLevel: status.trustLevel,
948
+ stratum: status.stratum,
949
+ phaseTolerance: status.phaseTolerance,
950
+ hasAtomicTime: this.timeSource.hasAtomicTime(),
951
+ hasHighPrecisionTime: this.timeSource.hasHighPrecisionTime(),
952
+ };
953
+ }
954
+
955
+ // Oracle status
956
+ let oracleInfo = null;
957
+ if (this.oracle) {
958
+ const integrity = this.oracle.verifySelfIntegrity();
959
+ oracleInfo = {
960
+ status: integrity.valid ? 'healthy' : 'compromised',
961
+ valid: integrity.valid,
962
+ networkName: this.genesisNetwork?.networkName || null,
963
+ networkId: this.genesisNetwork?.networkId || null,
964
+ fingerprint: this.genesisNetwork?.fingerprint || null,
965
+ verifiedPeers: this.codeProof?.getVerifiedPeers()?.length || 0,
966
+ };
967
+ }
968
+
969
+ // Mesh stats
970
+ const peerCount = this.mesh?.getPeers()?.length || 0;
971
+ const gossipStats = this.gossip?.getStats() || null;
972
+
973
+ res.json({
974
+ node: {
975
+ id: this.identity?.identity?.nodeId || null,
976
+ name: this.config?.node?.name || 'unknown',
977
+ version: '1.7.0',
978
+ uptime,
979
+ uptimeFormatted: formatUptime(uptime),
980
+ },
981
+ crypto: cryptoInfo,
982
+ time: timeInfo,
983
+ oracle: oracleInfo,
984
+ network: {
985
+ peers: peerCount,
986
+ gossip: gossipStats,
987
+ },
988
+ timestamp: new Date().toISOString(),
989
+ });
990
+ });
991
+
901
992
  // =========================================
902
993
  // Time Source Endpoints - Precision Timing
903
994
  // =========================================
package/yakbot/index.js CHANGED
@@ -7,6 +7,7 @@
7
7
  * - /changelog - Recent changes
8
8
  * - /ask [question] - AI-powered Q&A about YAKMESH
9
9
  * - /nodes - Check health of official YAKMESH nodes
10
+ * - /faq - Frequently asked questions
10
11
  * - /ping - Bot latency check
11
12
  * - Auto-greet new members
12
13
  *
@@ -26,7 +27,7 @@ const config = {
26
27
  geminiKey: process.env.GEMINI_API_KEY,
27
28
 
28
29
  // Current version
29
- version: '1.6.0',
30
+ version: '1.7.0',
30
31
 
31
32
  // Official YAKMESH nodes for health checks
32
33
  officialNodes: [
@@ -43,6 +44,7 @@ const config = {
43
44
  discord: 'https://discord.gg/8mSPfbJB8N',
44
45
  twitter: 'https://x.com/yakmesh_dev',
45
46
  telegram: 'https://t.me/yakmesh',
47
+ patreon: 'https://patreon.com/yakmesh',
46
48
  },
47
49
 
48
50
  // Brand colors
@@ -75,8 +77,9 @@ Protocol Stack (top to bottom):
75
77
  2. Annex - Encrypted point-to-point messaging (ML-KEM768 + AES-256-GCM)
76
78
  3. Gossip - Epidemic-style message propagation
77
79
  4. Beacon - Emergency broadcast with priority levels
78
- 5. Phantom - Onion routing for anonymity
79
- 6. Mesh - Core P2P network with Code Proof Protocol
80
+ 5. Nakpak - Onion routing for anonymity (Nested Anonymous Kernel for Private Authenticated Komms)
81
+ 6. Sherpa - Peer discovery DHT (Secure Hidden Endpoint Resolution Path Architecture)
82
+ 7. Mesh - Core P2P network with Code Proof Protocol
80
83
 
81
84
  Installation:
82
85
  npm install yakmesh
@@ -470,6 +473,7 @@ const commands = {
470
473
  { name: '💬 Discord', value: `[Join Server](${config.links.discord})`, inline: true },
471
474
  { name: '🐦 Twitter/X', value: `[@yakmesh](${config.links.twitter})`, inline: true },
472
475
  { name: '📱 Telegram', value: `[@yakmesh](${config.links.telegram})`, inline: true },
476
+ { name: '❤️ Patreon', value: `[Support Us](${config.links.patreon})`, inline: true },
473
477
  ],
474
478
  footer: 'YAKMESH™ - Sturdy & Secure',
475
479
  });
@@ -489,6 +493,7 @@ const commands = {
489
493
  { name: '📦 `/install`', value: 'Quick installation guide', inline: true },
490
494
  { name: '❓ `/ask <question>`', value: 'Ask YakBot about YAKMESH', inline: true },
491
495
  { name: '🔗 `/links`', value: 'All social and resource links', inline: true },
496
+ { name: '❔ `/faq`', value: 'Frequently asked questions', inline: true },
492
497
  { name: '🏓 `/ping`', value: 'Check bot latency', inline: true },
493
498
  { name: '📈 `/botstats`', value: 'View bot performance metrics', inline: true },
494
499
  ],
@@ -497,6 +502,48 @@ const commands = {
497
502
  await interaction.reply({ embeds: [embed] });
498
503
  },
499
504
 
505
+ // /faq - Frequently asked questions
506
+ async faq(interaction) {
507
+ const embed = createEmbed({
508
+ title: '❔ Frequently Asked Questions',
509
+ description: 'Common questions about YAKMESH',
510
+ fields: [
511
+ {
512
+ name: '🦬 What is YAKMESH?',
513
+ value: 'YAKMESH (Yielding Atomic Kernel Modular Encryption Secured Hub) is a post-quantum secure P2P mesh network designed for the 2026 threat landscape.',
514
+ inline: false,
515
+ },
516
+ {
517
+ name: '🔐 What makes it "post-quantum"?',
518
+ value: 'We use ML-DSA-65/87 (NIST FIPS 204) for signatures and ML-KEM-768/1024 (NIST FIPS 203) for key exchange. These algorithms are resistant to quantum computer attacks.',
519
+ inline: false,
520
+ },
521
+ {
522
+ name: '💻 What are the requirements?',
523
+ value: 'Node.js 18+ is required. Install with `npm install yakmesh`.',
524
+ inline: false,
525
+ },
526
+ {
527
+ name: '🌐 How do nodes find each other?',
528
+ value: 'Nodes with identical code share the same "network name" derived from the codebase hash. Gossip protocol handles peer discovery.',
529
+ inline: false,
530
+ },
531
+ {
532
+ name: '🔒 Is traffic encrypted?',
533
+ value: 'Yes! Annex provides ML-KEM768 key exchange + AES-256-GCM encryption with perfect forward secrecy for P2P channels.',
534
+ inline: false,
535
+ },
536
+ {
537
+ name: '📦 Is it production ready?',
538
+ value: 'YAKMESH is actively developed. Check releases for stable versions. Current: v' + config.version,
539
+ inline: false,
540
+ },
541
+ ],
542
+ footer: 'More questions? Use /ask <question> or check the docs!',
543
+ });
544
+ await interaction.reply({ embeds: [embed] });
545
+ },
546
+
500
547
  // /botstats - Bot performance metrics
501
548
  async botstats(interaction) {
502
549
  const uptime = Date.now() - stats.startTime;
@@ -64,6 +64,10 @@ const commands = [
64
64
  .setName('help')
65
65
  .setDescription('Show all available YakBot commands'),
66
66
 
67
+ new SlashCommandBuilder()
68
+ .setName('faq')
69
+ .setDescription('Frequently asked questions about YAKMESH'),
70
+
67
71
  new SlashCommandBuilder()
68
72
  .setName('botstats')
69
73
  .setDescription('View YakBot performance metrics and statistics'),