web-agent-bridge 3.16.0 → 3.20.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 (61) hide show
  1. package/README.ar.md +27 -8
  2. package/README.md +95 -0
  3. package/bin/wab-init.js +38 -0
  4. package/package.json +1 -1
  5. package/public/atp-semantics.html +216 -0
  6. package/public/benchmarks.html +151 -0
  7. package/public/dashboard.html +1 -0
  8. package/public/docs.html +113 -43
  9. package/public/index.html +142 -8
  10. package/public/key-rotation.html +184 -0
  11. package/public/llms.txt +54 -0
  12. package/public/notary.html +94 -0
  13. package/public/observatory.html +103 -0
  14. package/public/research.html +57 -0
  15. package/public/researchers.html +113 -0
  16. package/public/responsible-disclosure.html +294 -0
  17. package/public/robots.txt +17 -0
  18. package/public/security.html +157 -0
  19. package/public/threat-model.html +153 -0
  20. package/public/viral-coefficient.html +533 -0
  21. package/public/wab-dataset.html +501 -0
  22. package/public/wab-email.html +78 -0
  23. package/public/wab-lens.html +61 -0
  24. package/public/wab-p2p.html +96 -0
  25. package/public/wab-registry.html +481 -0
  26. package/public/wab-today.html +448 -0
  27. package/public/wab-uri.html +88 -0
  28. package/public/webhooks.html +181 -0
  29. package/script/ai-agent-bridge.js +24 -4
  30. package/server/index.js +1193 -827
  31. package/server/models/db.js +2 -1
  32. package/server/routes/admin-shieldlink.js +1 -1
  33. package/server/routes/admin-shieldqr.js +1 -1
  34. package/server/routes/admin-trust-monitor.js +1 -1
  35. package/server/routes/api-keys.js +2 -1
  36. package/server/routes/customer-shieldlink.js +1 -1
  37. package/server/routes/enterprise-mesh.js +2 -1
  38. package/server/routes/genius-bridge.js +256 -0
  39. package/server/routes/genius-gateway.js +137 -0
  40. package/server/routes/governance-saas.js +2 -1
  41. package/server/routes/notary.js +309 -0
  42. package/server/routes/observatory.js +109 -0
  43. package/server/routes/partners.js +2 -1
  44. package/server/routes/registry.js +352 -0
  45. package/server/routes/research.js +83 -0
  46. package/server/routes/ring4.js +2 -1
  47. package/server/routes/runtime.js +98 -25
  48. package/server/routes/security-researchers.js +161 -0
  49. package/server/routes/shieldqr.js +1 -1
  50. package/server/routes/traces.js +247 -0
  51. package/server/services/agent-tasks.js +9 -7
  52. package/server/services/email.js +50 -2
  53. package/server/services/marketplace.js +27 -8
  54. package/server/services/plans.js +1 -1
  55. package/server/services/shieldlink.js +1 -1
  56. package/server/services/ssl-ct-monitor.js +1 -1
  57. package/server/services/ssl-monitor.js +1 -1
  58. package/server/services/stripe.js +29 -4
  59. package/server/services/webhooks.js +61 -1
  60. package/server/utils/migrate.js +1 -1
  61. package/server/utils/safe-compare.js +26 -0
package/public/docs.html CHANGED
@@ -41,80 +41,150 @@
41
41
  <!-- Sidebar -->
42
42
  <aside class="docs-sidebar">
43
43
  <ul>
44
+ <li style="opacity:.6;font-size:.75rem;letter-spacing:.08em;text-transform:uppercase;padding:8px 0 4px;">Protocol</li>
44
45
  <li><a href="#overview" class="active">Overview</a></li>
45
- <li><a href="#quick-start">Quick Start</a></li>
46
- <li><a href="#configuration">Configuration</a></li>
46
+ <li><a href="#quick-start">Quick Start (modern)</a></li>
47
+ <li><a href="#wab-json">wab.json manifest</a></li>
48
+ <li><a href="#dns-discovery">DNS discovery</a></li>
49
+ <li><a href="/spec">Full Spec ↗</a></li>
50
+
51
+ <li style="opacity:.6;font-size:.75rem;letter-spacing:.08em;text-transform:uppercase;padding:14px 0 4px;">Trust &amp; Security</li>
52
+ <li><a href="/security">Security model ↗</a></li>
53
+ <li><a href="/threat-model">Threat model ↗</a></li>
54
+ <li><a href="/responsible-disclosure">Responsible disclosure ↗</a></li>
55
+ <li><a href="/key-rotation">Key rotation ↗</a></li>
56
+
57
+ <li style="opacity:.6;font-size:.75rem;letter-spacing:.08em;text-transform:uppercase;padding:14px 0 4px;">ATP (Transactions)</li>
58
+ <li><a href="/atp">ATP overview ↗</a></li>
59
+ <li><a href="/atp-semantics">Consistency model ↗</a></li>
60
+ <li><a href="/benchmarks">Benchmarks ↗</a></li>
61
+
62
+ <li style="opacity:.6;font-size:.75rem;letter-spacing:.08em;text-transform:uppercase;padding:14px 0 4px;">API</li>
47
63
  <li><a href="#permissions">Permissions</a></li>
48
- <li><a href="#api-reference">API Reference</a></li>
49
- <li><a href="#actions">Actions</a></li>
50
- <li><a href="#events">Events</a></li>
51
- <li><a href="#agent-guide">Agent Integration Guide</a></li>
52
- <li><a href="#security">Security</a></li>
53
- <li><a href="#examples">Examples</a></li>
64
+ <li><a href="#api-reference">Browser API</a></li>
54
65
  <li><a href="#rest-api">REST API</a></li>
55
66
  <li><a href="#faq">FAQ</a></li>
67
+
68
+ <li style="opacity:.6;font-size:.75rem;letter-spacing:.08em;text-transform:uppercase;padding:14px 0 4px;">Legacy (v1)</li>
69
+ <li><a href="#legacy-config">window.AIBridgeConfig</a></li>
70
+ <li><a href="#examples">Legacy examples</a></li>
56
71
  </ul>
57
72
  </aside>
58
73
 
59
74
  <!-- Content -->
60
75
  <div class="docs-content">
61
76
 
77
+ <div style="background:rgba(99,102,241,.08);border:1px solid rgba(99,102,241,.3);border-radius:12px;padding:14px 20px;margin:0 0 28px;display:flex;align-items:center;gap:12px;flex-wrap:wrap;">
78
+ <span style="font-size:1.3rem">📐</span>
79
+ <div>
80
+ <strong>New to WAB?</strong> These docs assume familiarity with the current protocol.
81
+ For a plain-English map of all six architectural layers and how WAB evolved from a browser script to a
82
+ full infrastructure layer, start with <a href="/wab-today" style="color:#818cf8;font-weight:600">WAB Today →</a>
83
+ </div>
84
+ </div>
85
+
62
86
  <h2 id="overview">Overview</h2>
63
87
  <p>
64
- <strong>Web Agent Bridge (WAB)</strong> is an open-source middleware script that creates a standardized
65
- interface between AI agents and websites. Instead of forcing AI agents to parse and guess DOM structures,
66
- WAB provides a clean, documented command layer that agents can read and execute.
88
+ <strong>Web Agent Bridge (WAB)</strong> is an open protocol for discovery, trust, and transactions
89
+ between AI agents and websites. Sites publish a signed <code>wab.json</code> manifest declaring what
90
+ agents can do; agents discover it via DNS (<code>_wab.&lt;domain&gt;</code> TXT) or HTTPS; every action and
91
+ receipt is cryptographically verifiable (Ed25519).
67
92
  </p>
68
93
  <p>
69
- When a website includes the WAB script, it exposes a <code>window.AICommands</code> object that describes
70
- all available actions, their parameters, and how to execute them. AI agents can discover these commands
71
- instantly and interact with the site accurately and securely.
94
+ WAB replaces guesswork (DOM scraping, brittle selectors, vision models) with a contract:
95
+ <em>scoped, rate-limited, idempotent, and auditable</em>. The browser SDK (<code>wab.min.js</code>) and the
96
+ original <code>window.AICommands</code> surface remain available for backward compatibility — see the
97
+ <a href="#legacy-config">Legacy section</a>.
72
98
  </p>
73
99
 
74
- <h3>Key Concepts</h3>
100
+ <h3>The four layers</h3>
75
101
  <ul>
76
- <li><strong>Bridge Script</strong> — The client-side JavaScript file added to websites</li>
77
- <li><strong>Actions</strong> — Defined operations that AI agents can execute (click, fill, scroll, API call)</li>
78
- <li><strong>Permissions</strong> — Granular controls over what agents are allowed to do</li>
79
- <li><strong>License Key</strong> — Unique identifier that links a site to its WAB account</li>
80
- <li><strong>Auto-Discovery</strong> — Automatic detection of interactive elements on the page</li>
102
+ <li><strong>Discovery</strong> — DNS TXT (<code>_wab.&lt;domain&gt;</code>) or <code>/.well-known/wab.json</code>.</li>
103
+ <li><strong>Manifest</strong> — <code>wab.json</code>: capabilities, scopes, public key, version.</li>
104
+ <li><strong>Trust</strong> — Ed25519 signatures, Ring 4 trust graph, replay protection, key rotation.</li>
105
+ <li><strong>Transactions (ATP)</strong> — signed intent contracts, idempotent execution, verifiable receipts. See <a href="/atp">/atp</a>.</li>
81
106
  </ul>
82
107
 
108
+ <div style="background:rgba(34,211,238,.07);border:1px solid rgba(34,211,238,.25);border-radius:12px;padding:14px 18px;margin:18px 0;">
109
+ <strong style="color:#22d3ee">📘 Looking for the full spec?</strong> The normative protocol
110
+ definition lives in <a href="/spec">/spec</a>. For the trust + security architecture, see
111
+ <a href="/security">/security</a> and <a href="/threat-model">/threat-model</a>.
112
+ </div>
113
+
83
114
  <h2 id="quick-start">Quick Start</h2>
84
- <p>Get your website AI-ready in under 5 minutes.</p>
115
+ <p>Make your site discoverable and signed in three steps.</p>
85
116
 
86
- <h3>Step 1: Create an Account</h3>
87
- <p>Sign up at <a href="/register">/register</a> and add your site from the dashboard. You'll receive a license key.</p>
117
+ <h3>Step 1 Initialize</h3>
118
+ <p>From your project root:</p>
119
+ <div class="code-block">
120
+ <div class="code-header">
121
+ <div class="code-dots"><span></span><span></span><span></span></div>
122
+ <span class="code-lang">bash</span>
123
+ </div>
124
+ <div class="code-body">
125
+ <pre><code><span class="cm"># Generates wab.json + Ed25519 key pair, prints DNS TXT to publish</span>
126
+ npx wab-init --site=https://yourdomain.com --yes</code></pre>
127
+ </div>
128
+ </div>
88
129
 
89
- <h3>Step 2: Add the Script</h3>
90
- <p>Include this in your website's HTML:</p>
130
+ <h3 id="wab-json">Step 2 Publish <code>wab.json</code></h3>
131
+ <p>Host the generated manifest at <code>https://yourdomain.com/.well-known/wab.json</code>:</p>
91
132
  <div class="code-block">
92
133
  <div class="code-header">
93
134
  <div class="code-dots"><span></span><span></span><span></span></div>
94
- <span class="code-lang">HTML</span>
135
+ <span class="code-lang">JSON — /.well-known/wab.json</span>
95
136
  </div>
96
137
  <div class="code-body">
97
- <pre><code><span class="cm">&lt;!-- Web Agent Bridge Configuration --&gt;</span>
98
- &lt;script&gt;
99
- window.AIBridgeConfig = {
100
- <span class="prop">licenseKey</span>: <span class="str">"WAB-XXXXX-XXXXX-XXXXX-XXXXX"</span>,
101
- <span class="prop">agentPermissions</span>: {
102
- <span class="prop">readContent</span>: <span class="bool">true</span>,
103
- <span class="prop">click</span>: <span class="bool">true</span>,
104
- <span class="prop">fillForms</span>: <span class="bool">true</span>,
105
- <span class="prop">scroll</span>: <span class="bool">true</span>
106
- }
107
- };
108
- &lt;/script&gt;
109
- &lt;script src=<span class="str">"https://yourserver.com/script/ai-agent-bridge.js"</span>&gt;&lt;/script&gt;</code></pre>
138
+ <pre><code>{
139
+ <span class="prop">"schema_version"</span>: <span class="str">"wab/1"</span>,
140
+ <span class="prop">"site"</span>: <span class="str">"https://yourdomain.com"</span>,
141
+ <span class="prop">"public_key"</span>: <span class="str">"ed25519:BASE64..."</span>,
142
+ <span class="prop">"capabilities"</span>: [
143
+ { <span class="prop">"name"</span>: <span class="str">"search"</span>, <span class="prop">"scope"</span>: <span class="str">"public"</span> },
144
+ { <span class="prop">"name"</span>: <span class="str">"cart.add"</span>, <span class="prop">"scope"</span>: <span class="str">"user"</span>, <span class="prop">"requires"</span>: [<span class="str">"atp:intent"</span>] }
145
+ ],
146
+ <span class="prop">"endpoints"</span>: {
147
+ <span class="prop">"atp"</span>: <span class="str">"https://yourdomain.com/api/atp"</span>
148
+ },
149
+ <span class="prop">"signature"</span>: <span class="str">"ed25519:BASE64..."</span>
150
+ }</code></pre>
151
+ </div>
152
+ </div>
153
+
154
+ <h3 id="dns-discovery">Step 3 — Publish the DNS record</h3>
155
+ <p>Add a single TXT record so agents can discover you without scraping HTML:</p>
156
+ <div class="code-block">
157
+ <div class="code-header">
158
+ <div class="code-dots"><span></span><span></span><span></span></div>
159
+ <span class="code-lang">DNS — _wab.yourdomain.com</span>
160
+ </div>
161
+ <div class="code-body">
162
+ <pre><code>_wab.yourdomain.com. TXT <span class="str">"v=wab1; pk=ed25519:BASE64...; url=https://yourdomain.com/.well-known/wab.json"</span></code></pre>
163
+ </div>
164
+ </div>
165
+
166
+ <p>That's it. Any WAB-aware agent can now discover, verify, and transact with your site.
167
+ Add the optional browser SDK for in-page hints:</p>
168
+ <div class="code-block">
169
+ <div class="code-header">
170
+ <div class="code-dots"><span></span><span></span><span></span></div>
171
+ <span class="code-lang">HTML — optional in-page bridge</span>
172
+ </div>
173
+ <div class="code-body">
174
+ <pre><code>&lt;script src=<span class="str">"https://cdn.webagentbridge.com/wab.min.js"</span>&gt;&lt;/script&gt;</code></pre>
110
175
  </div>
111
176
  </div>
112
177
 
113
- <h3>Step 3: Verify</h3>
114
- <p>Open your browser console and type <code>window.AICommands</code>. You should see the bridge object with discovered actions.</p>
178
+ <h2 id="legacy-config">Legacy (v1) configuration</h2>
179
+ <div style="background:rgba(245,158,11,.08);border:1px solid rgba(245,158,11,.35);border-radius:12px;padding:14px 18px;margin:18px 0;">
180
+ <strong style="color:#fbbf24">⚠️ Legacy surface — backward compatible.</strong> The sections below
181
+ document the original v1 <code>window.AIBridgeConfig</code> object and license-key model. They remain
182
+ supported but are <em>not</em> the recommended path for new integrations. New work should use the
183
+ <code>wab.json</code> manifest + Ed25519 model documented above.
184
+ </div>
115
185
 
116
- <h2 id="configuration">Configuration</h2>
117
- <p>The bridge is configured through the <code>window.AIBridgeConfig</code> object, which must be set before loading the script.</p>
186
+ <h3 id="configuration">Configuration (legacy)</h3>
187
+ <p>The legacy bridge is configured through the <code>window.AIBridgeConfig</code> object, which must be set before loading the script.</p>
118
188
 
119
189
  <div class="code-block">
120
190
  <div class="code-header">
package/public/index.html CHANGED
@@ -78,6 +78,7 @@
78
78
  <li class="nav-dropdown">
79
79
  <button class="nav-trigger" type="button" aria-haspopup="true" aria-expanded="false">Developers <span class="nav-caret" aria-hidden="true">▾</span></button>
80
80
  <div class="nav-menu" role="menu">
81
+ <a href="/wab-today" role="menuitem"><strong>📐 WAB Today</strong><span>Architecture &amp; identity map</span></a>
81
82
  <a href="/api" role="menuitem"><strong>API Reference</strong><span>OpenAPI 3.0</span></a>
82
83
  <a href="/whitepaper" role="menuitem"><strong>Whitepaper</strong><span>Protocol &amp; design</span></a>
83
84
  <a href="/integrations" role="menuitem"><strong>Integrations</strong><span>WordPress · Shopify · Next.js</span></a>
@@ -85,6 +86,14 @@
85
86
  <a href="/milestones" role="menuitem"><strong>🏆 Milestones</strong><span>Release history</span></a>
86
87
  <a href="#latest-additions" role="menuitem"><strong>What's New</strong><span>Latest additions</span></a>
87
88
  <a href="/growth" role="menuitem"><strong>Growth Suite</strong><span>Site-owner tools</span></a>
89
+ <a href="/wab-registry" role="menuitem"><strong>🌐 Spider Registry</strong><span>WAB-enabled sites network</span></a>
90
+ <a href="/wab-dataset" role="menuitem"><strong>📊 Training Dataset</strong><span>HuggingFace agent traces</span></a>
91
+ <a href="/viral-coefficient" role="menuitem"><strong>📈 Viral Coefficient</strong><span>Self-propagating network math</span></a>
92
+ <a href="/observatory" role="menuitem"><strong>🔭 Observatory</strong><span>WAB adoption tracker</span></a>
93
+ <a href="/notary" role="menuitem"><strong>✍️ Notary</strong><span>Ed25519 attestation</span></a>
94
+ <a href="/threat-model" role="menuitem"><strong>🛡️ Threat Model</strong><span>Adversary model &amp; trust boundaries</span></a>
95
+ <a href="/atp-semantics" role="menuitem"><strong>⚙️ ATP Semantics</strong><span>Consistency &amp; delivery guarantees</span></a>
96
+ <a href="/benchmarks" role="menuitem"><strong>📊 Benchmarks</strong><span>Latency, throughput &amp; baselines</span></a>
88
97
  </div>
89
98
  </li>
90
99
  </ul>
@@ -124,18 +133,20 @@
124
133
  <a href="/workspace" class="btn btn-secondary btn-lg" style="background:linear-gradient(135deg,#f59e0b,#ef4444);color:#fff;border:none">🤖 Agent Workspace</a>
125
134
  <a href="/demo" class="btn btn-secondary btn-lg" style="background:linear-gradient(135deg,#10b981,#059669);color:#fff;border:none">🧪 API Playground</a>
126
135
  <a href="/demo" class="btn btn-secondary btn-lg" style="background:linear-gradient(135deg,#06b6d4,#0ea5e9);color:#fff;border:none">🎮 Interactive Demo</a>
136
+ <a href="/viral-coefficient" class="btn btn-secondary btn-lg" style="background:linear-gradient(135deg,#a855f7,#6366f1);color:#fff;border:none">📈 Viral Coefficient <sup style="background:#10b981;color:#000;padding:2px 6px;border-radius:6px;font-size:0.55em;margin-left:6px;">NEW</sup></a>
137
+ <a href="/wab-dataset" class="btn btn-secondary btn-lg" style="background:linear-gradient(135deg,#f59e0b,#ef4444);color:#fff;border:none">📊 Agent Training Dataset <sup style="background:#10b981;color:#000;padding:2px 6px;border-radius:6px;font-size:0.55em;margin-left:6px;">NEW</sup></a>
127
138
  </div>
128
139
 
129
140
  <div class="hero-code fade-in fade-in-delay-2">
130
141
  <code>
131
- <span class="comment">// Add the bridge to your website</span><br>
132
- &lt;<span class="keyword">script</span>&gt;<br>
133
- &nbsp;&nbsp;window.<span class="property">AIBridgeConfig</span> = {<br>
134
- &nbsp;&nbsp;&nbsp;&nbsp;<span class="property">licenseKey</span>: <span class="string">"WAB-XXXXX-XXXXX"</span>,<br>
135
- &nbsp;&nbsp;&nbsp;&nbsp;<span class="property">agentPermissions</span>: { <span class="property">click</span>: <span class="boolean">true</span>, <span class="property">fillForms</span>: <span class="boolean">true</span> }<br>
136
- &nbsp;&nbsp;};<br>
137
- &lt;/<span class="keyword">script</span>&gt;<br>
138
- &lt;<span class="keyword">script</span> <span class="property">src</span>=<span class="string">"/script/ai-agent-bridge.js"</span>&gt;&lt;/<span class="keyword">script</span>&gt;
142
+ <span class="comment"># 1. Initialize generates wab.json + Ed25519 keypair</span><br>
143
+ $ npx wab-init --site=https://yourdomain.com --yes<br>
144
+ <br>
145
+ <span class="comment"># 2. Publish DNS so agents can discover &amp; verify you</span><br>
146
+ _wab.yourdomain.com.&nbsp;&nbsp;<span class="keyword">TXT</span>&nbsp;&nbsp;<span class="string">"v=wab1; pk=ed25519:...; url=/.well-known/wab.json"</span><br>
147
+ <br>
148
+ <span class="comment"># 3. (optional) In-page bridge for SDK integrations</span><br>
149
+ &lt;<span class="keyword">script</span> <span class="property">src</span>=<span class="string">"https://cdn.webagentbridge.com/wab.min.js"</span>&gt;&lt;/<span class="keyword">script</span>&gt;
139
150
  </code>
140
151
  </div>
141
152
  </div>
@@ -1219,6 +1230,121 @@ console.<span class="fn">log</span>(actions);
1219
1230
  </div>
1220
1231
  </section>
1221
1232
 
1233
+ <!-- ═══════════ SELF-PROPAGATING PROTOCOL (Phase 9) ═══════════ -->
1234
+ <section class="section" id="self-propagating" style="background:linear-gradient(180deg,rgba(99,102,241,0.07),rgba(16,185,129,0.04));">
1235
+ <div class="container">
1236
+ <div class="section-header">
1237
+ <span class="label" style="color:#a855f7">🧬 v3.20.0 — Zero Human Intervention</span>
1238
+ <h2>WAB <span style="background:linear-gradient(135deg,#a855f7,#3fb950);-webkit-background-clip:text;-webkit-text-fill-color:transparent">Self-Propagating Protocol</span></h2>
1239
+ <p>Once installed on a single site, the network grows by itself — through Beacons, Gossip, DNA headers, and AI Training Signals. No human needed after the first install.</p>
1240
+ </div>
1241
+
1242
+ <!-- propagation chain visual -->
1243
+ <div style="display:flex;align-items:center;justify-content:center;gap:0;flex-wrap:wrap;margin-bottom:40px;font-size:.82rem;font-weight:600;">
1244
+ <div style="background:#1c2128;border:1px solid #30363d;border-radius:8px;padding:10px 16px;text-align:center;">Human installs WAB<br><span style="color:#8b949e;font-weight:400">once</span></div>
1245
+ <div style="color:#a855f7;font-size:1.4rem;padding:0 6px">→</div>
1246
+ <div style="background:#1a2a4a;border:1px solid #264a8e;border-radius:8px;padding:10px 16px;text-align:center;color:#58a6ff">/.wab Beacon<br><span style="color:#8b949e;font-weight:400">next[] peer list</span></div>
1247
+ <div style="color:#a855f7;font-size:1.4rem;padding:0 6px">→</div>
1248
+ <div style="background:#1a3a2a;border:1px solid #2a6a3a;border-radius:8px;padding:10px 16px;text-align:center;color:#3fb950">Gossip Exchange<br><span style="color:#8b949e;font-weight:400">peers propagate</span></div>
1249
+ <div style="color:#a855f7;font-size:1.4rem;padding:0 6px">→</div>
1250
+ <div style="background:#2a2015;border:1px solid #5a4020;border-radius:8px;padding:10px 16px;text-align:center;color:#f0883e">DNA Headers<br><span style="color:#8b949e;font-weight:400">X-WAB-Next-Sites</span></div>
1251
+ <div style="color:#a855f7;font-size:1.4rem;padding:0 6px">→</div>
1252
+ <div style="background:#1a2a4a;border:1px solid #264a8e;border-radius:8px;padding:10px 16px;text-align:center;color:#58a6ff">Training Dataset<br><span style="color:#8b949e;font-weight:400">HuggingFace JSONL</span></div>
1253
+ <div style="color:#a855f7;font-size:1.4rem;padding:0 6px">→</div>
1254
+ <div style="background:#1a1a3a;border:1px solid #4a3a8a;border-radius:8px;padding:10px 16px;text-align:center;color:#bc8cff">k &gt; 1<br><span style="color:#8b949e;font-weight:400">exponential growth</span></div>
1255
+ </div>
1256
+
1257
+ <div class="grid-3">
1258
+
1259
+ <div class="card fade-in" style="border-left:3px solid #3fb950;background:linear-gradient(180deg,rgba(63,185,80,0.07),transparent);">
1260
+ <div class="card-icon green">🌐</div>
1261
+ <h3>Spider Registry &amp; Gossip Protocol <span style="background:#3fb950;color:#000;padding:2px 8px;border-radius:6px;font-size:0.6em;vertical-align:middle;margin-left:6px;">v3.20</span></h3>
1262
+ <p>AI agents report WAB-enabled sites they discover while browsing. Each report includes a <code>gossip_peers[]</code> list — the server merges new domains and returns its own peer list, creating a bidirectional propagation chain. Every node knows every other node.</p>
1263
+ <ul style="margin-top:10px;font-size:.85rem;color:var(--text-secondary);list-style:disc;padding-left:20px;">
1264
+ <li><strong>POST /api/registry/report</strong> + gossip_peers[]</li>
1265
+ <li><strong>GET /api/registry/gossip</strong> — seed your peer list</li>
1266
+ <li>Registry grows without human action</li>
1267
+ <li>BitTorrent-style DHT for WAB sites</li>
1268
+ </ul>
1269
+ <div style="margin-top:14px;display:flex;gap:10px;flex-wrap:wrap;">
1270
+ <a href="/wab-registry" class="btn btn-primary btn-sm" style="background:linear-gradient(135deg,#3fb950,#0ea5e9);border:none;">Open Registry</a>
1271
+ <a href="/api/registry/gossip" class="btn btn-secondary btn-sm">Gossip API</a>
1272
+ <a href="/api/registry/stats" class="btn btn-secondary btn-sm">Live Stats</a>
1273
+ </div>
1274
+ </div>
1275
+
1276
+ <div class="card fade-in fade-in-delay-1" style="border-left:3px solid #f59e0b;background:linear-gradient(180deg,rgba(245,158,11,0.07),transparent);">
1277
+ <div class="card-icon orange">📊</div>
1278
+ <h3>Agent Training Dataset <span style="background:#f59e0b;color:#000;padding:2px 8px;border-radius:6px;font-size:0.6em;vertical-align:middle;margin-left:6px;">v3.20</span></h3>
1279
+ <p>Every agent interaction — success or failure — is recorded as a public JSONL dataset on HuggingFace. The data proves empirically that WAB sites produce dramatically better outcomes. Future AI models fine-tune on this data and <strong>prefer WAB by default</strong>.</p>
1280
+ <ul style="margin-top:10px;font-size:.85rem;color:var(--text-secondary);list-style:disc;padding-left:20px;">
1281
+ <li>WAB: <strong>100% success</strong>, 1.2s median latency</li>
1282
+ <li>Non-WAB: <strong>0% success</strong>, 8.4s, 3 retries</li>
1283
+ <li>7× speed advantage in first 2 traces</li>
1284
+ <li>CC-BY-4.0 · no PII · real-time JSONL</li>
1285
+ </ul>
1286
+ <div style="margin-top:14px;display:flex;gap:10px;flex-wrap:wrap;">
1287
+ <a href="/wab-dataset" class="btn btn-primary btn-sm" style="background:linear-gradient(135deg,#f59e0b,#ef4444);border:none;">Open Dataset Page</a>
1288
+ <a href="/api/traces/dataset" class="btn btn-secondary btn-sm">Download JSONL</a>
1289
+ <a href="/api/traces/stats" class="btn btn-secondary btn-sm">Live Stats</a>
1290
+ </div>
1291
+ </div>
1292
+
1293
+ <div class="card fade-in fade-in-delay-2" style="border-left:3px solid #a855f7;background:linear-gradient(180deg,rgba(168,85,247,0.07),transparent);">
1294
+ <div class="card-icon purple">📈</div>
1295
+ <h3>Viral Coefficient — k-Factor <span style="background:#a855f7;color:#fff;padding:2px 8px;border-radius:6px;font-size:0.6em;vertical-align:middle;margin-left:6px;">v3.20</span></h3>
1296
+ <p>Live mathematical model of the WAB Spider Network spread. Tracks k-factor (gossip-sourced / manually-seeded sites). When <strong>k &gt; 1</strong>, the network is self-sustaining. When <strong>k &gt; 2</strong>, it's exponential. Includes interactive simulator with sliders.</p>
1297
+ <ul style="margin-top:10px;font-size:.85rem;color:var(--text-secondary);list-style:disc;padding-left:20px;">
1298
+ <li>Live k-factor from registry + traces</li>
1299
+ <li>Canvas growth simulator (seed × k^n)</li>
1300
+ <li>Critical mass progress bar (target: 1,000 sites)</li>
1301
+ <li>Per-source breakdown: gossip / spider / manual</li>
1302
+ </ul>
1303
+ <div style="margin-top:14px;display:flex;gap:10px;flex-wrap:wrap;">
1304
+ <a href="/viral-coefficient" class="btn btn-primary btn-sm" style="background:linear-gradient(135deg,#a855f7,#6366f1);border:none;">Open Model</a>
1305
+ <a href="/api/traces/viral" class="btn btn-secondary btn-sm">Viral API</a>
1306
+ </div>
1307
+ </div>
1308
+
1309
+ <div class="card fade-in" style="border-left:3px solid #58a6ff;">
1310
+ <div class="card-icon blue">🧬</div>
1311
+ <h3>WAB DNA — Every HTTP Response</h3>
1312
+ <p>The <code>X-WAB-Next-Sites</code> header is now emitted on <strong>every single HTTP response</strong> from this server — carrying the top 5 WAB-enabled sites from the registry. Any agent reading HTTP headers learns the network topology passively, with zero interaction.</p>
1313
+ <div style="margin-top:8px;background:#0d1117;border:1px solid #30363d;border-radius:6px;padding:10px 14px;font-family:monospace;font-size:.78rem;line-height:1.8;">
1314
+ <span style="color:#8b949e">HTTP/1.1 200 OK</span><br>
1315
+ <span style="color:#58a6ff">X-WAB-Enabled:</span> <span style="color:#3fb950">true</span><br>
1316
+ <span style="color:#58a6ff">X-WAB-Next-Sites:</span> <span style="color:#f0883e">takeyourappointment.com, …</span>
1317
+ </div>
1318
+ <div style="margin-top:14px;">
1319
+ <a href="/api/registry/gossip" class="btn btn-secondary btn-sm">See Live Peer List</a>
1320
+ </div>
1321
+ </div>
1322
+
1323
+ <div class="card fade-in fade-in-delay-1" style="border-left:3px solid #06b6d4;">
1324
+ <div class="card-icon cyan">🔭</div>
1325
+ <h3>Observatory, Notary &amp; Research</h3>
1326
+ <p>Three interconnected tools for the WAB ecosystem: track WAB adoption across the web, issue Ed25519 Notary attestations with key rotation &amp; web-of-trust, and access a public CC-BY-4.0 research dataset.</p>
1327
+ <div style="margin-top:14px;display:flex;gap:10px;flex-wrap:wrap;">
1328
+ <a href="/observatory" class="btn btn-primary btn-sm">🔭 Observatory</a>
1329
+ <a href="/notary" class="btn btn-secondary btn-sm">✍️ Notary</a>
1330
+ <a href="/research" class="btn btn-secondary btn-sm">📚 Research</a>
1331
+ </div>
1332
+ </div>
1333
+
1334
+ <div class="card fade-in fade-in-delay-2" style="border-left:3px solid #ec4899;">
1335
+ <div class="card-icon pink">🔍</div>
1336
+ <h3>WAB Lens — Browser Extension</h3>
1337
+ <p>Chrome/Edge/Brave MV3 extension. Shows a green checkmark badge on every WAB-verified site. Auto-discovers <code>/.well-known/wab.json</code>, links to Notary attestation, and optionally reports to the Observatory.</p>
1338
+ <div style="margin-top:14px;display:flex;gap:10px;flex-wrap:wrap;">
1339
+ <a href="/wab-lens" class="btn btn-primary btn-sm">Get Lens</a>
1340
+ <a href="/downloads/wab-lens-extension.zip" class="btn btn-secondary btn-sm">Download .zip</a>
1341
+ </div>
1342
+ </div>
1343
+
1344
+ </div>
1345
+ </div>
1346
+ </section>
1347
+
1222
1348
  <!-- ═══════════ LIVE DNS ADOPTION ═══════════ -->
1223
1349
  <section class="section" id="live-dns-adoption">
1224
1350
  <div class="container">
@@ -1292,6 +1418,14 @@ console.<span class="fn">log</span>(actions);
1292
1418
  <li><a href="https://github.com/abokenan444/web-agent-bridge" target="_blank" rel="noopener">GitHub</a></li>
1293
1419
  </ul>
1294
1420
  </div>
1421
+ <div class="footer-col">
1422
+ <h4>Security</h4>
1423
+ <ul>
1424
+ <li><a href="/security">Security Model</a></li>
1425
+ <li><a href="/responsible-disclosure">Responsible Disclosure</a></li>
1426
+ <li><a href="/researchers">Security Researchers</a></li>
1427
+ </ul>
1428
+ </div>
1295
1429
  <div class="footer-col">
1296
1430
  <h4>Legal</h4>
1297
1431
  <ul>
@@ -0,0 +1,184 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Key Rotation &amp; Emergency Revocation — Web Agent Bridge</title>
7
+ <meta name="description" content="How WAB site keys and the Ring 4 trust anchor are rotated, including emergency revocation, grace windows, and audit semantics.">
8
+ <link rel="canonical" href="https://webagentbridge.com/key-rotation">
9
+ <link rel="preload" href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500;600&display=swap" as="style" onload="this.onload=null;this.rel='stylesheet'">
10
+ <link rel="stylesheet" href="/css/styles.css?v=3.0.1">
11
+ <style>
12
+ .trust-page { max-width: 980px; margin: 0 auto; padding: 48px 24px 80px; }
13
+ .trust-page h1 { font-size: clamp(1.9rem, 4vw, 2.6rem); margin: 0 0 10px; }
14
+ .trust-page .lead { color: #94a3b8; font-size: 1.1rem; max-width: 760px; }
15
+ .trust-page h2 { margin-top: 48px; border-bottom: 1px solid #1f2937; padding-bottom: 8px; }
16
+ .trust-page h3 { margin-top: 28px; }
17
+ .trust-page table { width: 100%; border-collapse: collapse; margin: 16px 0; background: #10172a; border: 1px solid #1f2937; border-radius: 10px; overflow: hidden; }
18
+ .trust-page th, .trust-page td { padding: 12px 16px; text-align: left; border-bottom: 1px solid #1f2937; vertical-align: top; }
19
+ .trust-page th { background: #0d1322; color: #94a3b8; font-weight: 600; font-size: 0.85rem; text-transform: uppercase; letter-spacing: 0.05em; }
20
+ .trust-page code { background: rgba(34,211,238,.08); padding: 2px 6px; border-radius: 4px; font-family: 'JetBrains Mono', monospace; }
21
+ .trust-page pre { background: #0d1322; border: 1px solid #1f2937; border-radius: 10px; padding: 16px; overflow-x: auto; font-family: 'JetBrains Mono', monospace; font-size: 0.88rem; line-height: 1.55; }
22
+ .callout { background: rgba(34,211,238,.07); border: 1px solid rgba(34,211,238,.25); border-radius: 12px; padding: 14px 18px; margin: 18px 0; }
23
+ .callout.warn { background: rgba(245,158,11,.08); border-color: rgba(245,158,11,.35); }
24
+ .callout.danger { background: rgba(248,113,113,.08); border-color: rgba(248,113,113,.35); }
25
+ .timeline { border-left: 2px solid #22d3ee; margin: 24px 0; padding-left: 20px; }
26
+ .timeline .step { margin-bottom: 18px; }
27
+ .timeline .step strong { color: #22d3ee; }
28
+ </style>
29
+ </head>
30
+ <body>
31
+
32
+ <nav class="navbar">
33
+ <div class="container">
34
+ <a href="/" class="navbar-brand"><div class="brand-icon">⚡</div><span>WAB</span></a>
35
+ <ul class="navbar-links">
36
+ <li><a href="/docs">Docs</a></li>
37
+ <li><a href="/security">Security</a></li>
38
+ <li><a href="/threat-model">Threat Model</a></li>
39
+ <li><a href="/key-rotation" style="color:#f0f4ff;">Key Rotation</a></li>
40
+ </ul>
41
+ <div class="navbar-actions">
42
+ <a href="/login" class="btn btn-ghost">Sign In</a>
43
+ <a href="/register" class="btn btn-primary btn-sm">Get Started</a>
44
+ </div>
45
+ </div>
46
+ </nav>
47
+
48
+ <main class="trust-page">
49
+
50
+ <h1>Key Rotation &amp; Emergency Revocation</h1>
51
+ <p class="lead">
52
+ WAB key material is rotatable by design. This page documents the routine rotation procedure, the
53
+ emergency revocation procedure, and how downstream agents reconcile a rotation event.
54
+ </p>
55
+
56
+ <h2 id="kinds">1. Key kinds</h2>
57
+ <table>
58
+ <thead><tr><th>Key</th><th>Owner</th><th>Used for</th><th>Routine cadence</th></tr></thead>
59
+ <tbody>
60
+ <tr><td>Site Ed25519</td><td>Site operator</td><td>Signing <code>wab.json</code>, ATP receipts, intents</td><td>Recommended every 365 d</td></tr>
61
+ <tr><td>Site key-signing key (optional)</td><td>Site operator</td><td>Co-signing rotations of the Ed25519 key (anti-lockout)</td><td>3–5 years</td></tr>
62
+ <tr><td>Ring 4 anchor key</td><td>webagentbridge.com</td><td>Trust-graph attestations</td><td>Annual, scheduled</td></tr>
63
+ <tr><td>Webhook secret (HMAC)</td><td>Site operator</td><td>Stripe-style webhook auth</td><td>Per integration; rotate on suspicion</td></tr>
64
+ </tbody>
65
+ </table>
66
+
67
+ <h2 id="routine">2. Routine site-key rotation</h2>
68
+ <div class="timeline">
69
+ <div class="step">
70
+ <strong>T-7 days</strong> — Announce next-key. The site publishes <code>next_public_key</code> inside the current <code>wab.json</code>, co-signed by the existing key.
71
+ </div>
72
+ <div class="step">
73
+ <strong>T-0</strong> — Cutover. The site replaces <code>public_key</code> with the previously announced <code>next_public_key</code>, signs the new manifest with the new key, and lists the old key under <code>previous_keys</code> with a <code>valid_until</code> timestamp.
74
+ </div>
75
+ <div class="step">
76
+ <strong>T+30 days</strong> — Grace expires. Receipts signed by the old key after <code>valid_until</code> are rejected by compliant agents.
77
+ </div>
78
+ <div class="step">
79
+ <strong>T+90 days</strong> — Old key drops out of the manifest. Historical receipts remain verifiable from archived manifest snapshots.
80
+ </div>
81
+ </div>
82
+
83
+ <h3>Example manifest during a routine rotation</h3>
84
+ <pre><code>{
85
+ "schema_version": "wab/1",
86
+ "site": "https://yourdomain.com",
87
+ "public_key": "ed25519:NEW_KEY_BASE64",
88
+ "previous_keys": [
89
+ { "key": "ed25519:OLD_KEY_BASE64", "valid_until": "2026-06-25T00:00:00Z", "reason": "scheduled" }
90
+ ],
91
+ "next_public_key": null,
92
+ "signature": "ed25519:SIG_BY_NEW_KEY"
93
+ }</code></pre>
94
+
95
+ <h2 id="emergency">3. Emergency revocation</h2>
96
+ <div class="callout danger">
97
+ Use this path when you believe the private key is — or may be — compromised. Speed matters more than ceremony.
98
+ </div>
99
+ <ol>
100
+ <li><strong>Generate a new Ed25519 keypair</strong> on a clean host. Keep the private key offline until publishing.</li>
101
+ <li><strong>Publish a revocation record</strong> at <code>https://yourdomain.com/.well-known/wab-revocations.json</code>:
102
+ <pre><code>{
103
+ "site": "https://yourdomain.com",
104
+ "revoked": [
105
+ { "key": "ed25519:COMPROMISED_BASE64", "revoked_at": "2026-05-25T12:00:00Z", "reason": "key_compromise" }
106
+ ],
107
+ "new_public_key": "ed25519:NEW_BASE64",
108
+ "signature_by_new_key": "ed25519:SIG",
109
+ "signature_by_dns_proof": "see wab.json TXT"
110
+ }</code></pre>
111
+ </li>
112
+ <li><strong>Update DNS TXT</strong> at <code>_wab.&lt;domain&gt;</code> with the new public key. DNS propagation determines how quickly off-graph agents pick up the change; we recommend a TTL of 300 s on this record.</li>
113
+ <li><strong>Replace <code>/.well-known/wab.json</code></strong> with a manifest signed by the new key, listing the compromised key in <code>previous_keys</code> with <code>reason="key_compromise"</code> and <code>valid_until</code> set to the revocation timestamp.</li>
114
+ <li><strong>Notify Ring 4</strong> via <code>POST /api/trust/revoke</code> (signed by the new key). The trust graph propagates the revocation to attested agents within minutes.</li>
115
+ <li><strong>Audit receipts</strong> signed by the old key between the suspected compromise window and the revocation timestamp. Anything outside scope or above ambient compensation rate should be reviewed.</li>
116
+ </ol>
117
+
118
+ <h2 id="agent-behavior">4. Agent behavior during/after rotation</h2>
119
+ <ul>
120
+ <li>On every discovery refresh (default TTL ≤ 1 h), agents re-fetch <code>wab.json</code> and check <code>previous_keys</code> + <code>/.well-known/wab-revocations.json</code>.</li>
121
+ <li>Receipts signed by a key listed in <code>previous_keys</code> with <code>reason="key_compromise"</code> are flagged <em>distrusted</em> from <code>revoked_at</code> forward.</li>
122
+ <li>Receipts signed during the grace window (routine rotation) remain valid.</li>
123
+ <li>Agents <strong>must</strong> reject manifests whose <code>signature</code> does not validate against <code>public_key</code>, even if cached. No silent downgrade.</li>
124
+ </ul>
125
+
126
+ <h2 id="ring4">5. Ring 4 anchor rotation</h2>
127
+ <p>
128
+ The Ring 4 anchor key (held by webagentbridge.com) follows a stricter procedure:
129
+ </p>
130
+ <ol>
131
+ <li>New anchor key is generated and committed in a public transparency log <em>30 days</em> before activation.</li>
132
+ <li>Cross-signed by the previous anchor for a 90-day overlap.</li>
133
+ <li>Listed in DNS at <code>_anchor.webagentbridge.com</code> with both the old and new keys during overlap.</li>
134
+ <li>Old anchor key is retired and listed under <code>previous_anchors</code> with <code>valid_until</code>.</li>
135
+ </ol>
136
+ <p>
137
+ Emergency anchor rotation (compromise of the Ring 4 root) requires a published, signed
138
+ statement from the foundation, an out-of-band public announcement, and an attested transparency-log
139
+ entry. Trust scores from before the compromise event are recomputed.
140
+ </p>
141
+
142
+ <h2 id="webhook">6. Webhook secret rotation</h2>
143
+ <p>
144
+ Webhook HMAC secrets are rotated by your provider (e.g. Stripe). On the WAB side, support two secrets
145
+ in parallel for at least 30 days: the operator pastes the new one into the dashboard, requests roll the
146
+ old one out, and the system tries both during the overlap. Reject anything that matches neither.
147
+ </p>
148
+
149
+ <h2 id="checklist">7. Operator checklist</h2>
150
+ <ul>
151
+ <li>☐ Offline backup of the site Ed25519 private key (encrypted, two locations).</li>
152
+ <li>☐ Key-signing key (optional but recommended) on a separate device.</li>
153
+ <li>☐ DNS TXT TTL ≤ 300 s for <code>_wab</code> records.</li>
154
+ <li>☐ Routine rotation calendar entry annually.</li>
155
+ <li>☐ Runbook for emergency revocation tested at least once per year (table-top is fine).</li>
156
+ <li>☐ <code>security@</code> contact wired to a human, not a forwarding void.</li>
157
+ </ul>
158
+
159
+ <h2 id="changelog">8. Document history</h2>
160
+ <ul>
161
+ <li><strong>2026-05-25</strong> — Initial publication.</li>
162
+ </ul>
163
+
164
+ <p style="margin-top: 48px; color:#94a3b8;">
165
+ Related: <a href="/security">/security</a> ·
166
+ <a href="/threat-model">/threat-model</a> ·
167
+ <a href="/responsible-disclosure">/responsible-disclosure</a>
168
+ </p>
169
+
170
+ </main>
171
+
172
+ <footer class="footer" style="margin-top:32px;">
173
+ <div class="container">
174
+ <div class="footer-bottom">
175
+ <span>© 2026 Web Agent Bridge. Open Core.</span>
176
+ <a href="/" class="btn btn-ghost btn-sm">Back to Home</a>
177
+ </div>
178
+ </div>
179
+ </footer>
180
+
181
+ <script src="/js/auth-nav.js?v=3.0.1"></script>
182
+ <script src="/js/cookie-consent.js?v=3.0.1"></script>
183
+ </body>
184
+ </html>