thumbgate 1.26.8 โ 1.27.2
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/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/.well-known/agentic-verify.txt +1 -0
- package/.well-known/llms.txt +2 -0
- package/.well-known/mcp/server-card.json +1 -1
- package/README.md +20 -9
- package/adapters/claude/.mcp.json +2 -2
- package/adapters/gcp/dfcx-webhook-gate.js +295 -0
- package/adapters/mcp/server-stdio.js +28 -1
- package/adapters/opencode/opencode.json +1 -1
- package/bench/thumbgate-bench.json +2 -2
- package/bin/cli.js +132 -7
- package/bin/dashboard-cli.js +7 -0
- package/config/gate-classifier-routing.json +98 -0
- package/config/gate-templates.json +60 -0
- package/config/mcp-allowlists.json +8 -7
- package/config/model-candidates.json +71 -6
- package/package.json +26 -10
- package/public/chatgpt-app.html +330 -0
- package/public/codex-plugin.html +66 -14
- package/public/dashboard.html +203 -17
- package/public/index.html +79 -4
- package/public/learn.html +70 -0
- package/public/lessons.html +129 -6
- package/public/numbers.html +2 -2
- package/public/pricing.html +20 -2
- package/scripts/agent-operations-planner.js +621 -0
- package/scripts/agent-reward-model.js +53 -1
- package/scripts/ai-component-inventory.js +367 -0
- package/scripts/classifier-routing.js +130 -0
- package/scripts/cli-schema.js +26 -0
- package/scripts/dashboard-chat.js +64 -17
- package/scripts/feedback-sanitizer.js +105 -0
- package/scripts/gates-engine.js +258 -61
- package/scripts/hybrid-feedback-context.js +141 -7
- package/scripts/memory-scope-readiness.js +159 -0
- package/scripts/parallel-workflow-orchestrator.js +293 -0
- package/scripts/plausible-domain-config.js +86 -0
- package/scripts/plausible-server-events.js +4 -2
- package/scripts/proxy-pointer-rag-guardrails.js +42 -1
- package/scripts/qa-scenario-planner.js +136 -0
- package/scripts/repeat-metric.js +28 -12
- package/scripts/secret-fixture-tokens.js +61 -0
- package/scripts/secret-scanner.js +44 -5
- package/scripts/security-scanner.js +80 -0
- package/scripts/seo-gsd.js +53 -0
- package/scripts/thumbgate-bench.js +16 -1
- package/scripts/tool-registry.js +37 -0
- package/scripts/workflow-sentinel.js +189 -4
- package/src/api/server.js +276 -10
package/public/index.html
CHANGED
|
@@ -20,7 +20,7 @@ __GOOGLE_SITE_VERIFICATION_META__
|
|
|
20
20
|
<meta property="og:image" content="https://thumbgate.ai/og.png">
|
|
21
21
|
<meta name="twitter:card" content="summary_large_image">
|
|
22
22
|
<meta name="twitter:image" content="https://thumbgate.ai/og.png">
|
|
23
|
-
<meta name="thumbgate-version" content="1.
|
|
23
|
+
<meta name="thumbgate-version" content="1.27.2">
|
|
24
24
|
<meta name="keywords" content="ThumbGate, thumbgate, AI agent orchestration, AI experience orchestration, agentic development cycle, AC/DC framework, Guide Generate Verify Solve, agent enforcement layer, save LLM tokens, reduce Claude API cost, reduce OpenAI cost, AI agent token savings, prevent LLM retries, prevent hallucination retries, stop AI token waste, pre-action checks, agent governance, Claude Code, Cursor, Codex, Gemini, Amp, Cline, OpenCode, workflow hardening, context engineering, AI authenticity, brand authenticity AI">
|
|
25
25
|
<link rel="canonical" href="__APP_ORIGIN__/">
|
|
26
26
|
<link rel="alternate" type="text/markdown" title="ThumbGate LLM context" href="__APP_ORIGIN__/llm-context.md">
|
|
@@ -574,6 +574,15 @@ __GA_BOOTSTRAP__
|
|
|
574
574
|
.price-card li { font-size: 14px; color: var(--text-muted); padding: 6px 0; display: flex; align-items: flex-start; gap: 8px; }
|
|
575
575
|
.price-card li::before { content: "โ"; color: var(--cyan); font-weight: 700; flex-shrink: 0; }
|
|
576
576
|
.price-card.pro li::before { color: var(--cyan); }
|
|
577
|
+
.pricing-matrix { max-width: 1080px; margin: 24px auto 0; overflow-x: auto; border: 1px solid var(--border); border-radius: 12px; background: var(--bg-card); }
|
|
578
|
+
.pricing-matrix table { width: 100%; min-width: 760px; border-collapse: collapse; }
|
|
579
|
+
.pricing-matrix caption { text-align: left; padding: 18px 18px 0; color: var(--text); font-weight: 800; font-size: 16px; }
|
|
580
|
+
.pricing-matrix th,
|
|
581
|
+
.pricing-matrix td { padding: 13px 16px; border-bottom: 1px solid var(--border); text-align: left; vertical-align: top; font-size: 13px; line-height: 1.45; color: var(--text-muted); }
|
|
582
|
+
.pricing-matrix th { color: var(--cyan); background: rgba(34,211,238,0.06); font-weight: 800; }
|
|
583
|
+
.pricing-matrix tr:last-child td { border-bottom: 0; }
|
|
584
|
+
.pricing-matrix strong { color: var(--text); }
|
|
585
|
+
.pricing-note { max-width: 880px; margin: 14px auto 0; color: var(--text-muted); font-size: 12px; line-height: 1.55; text-align: center; }
|
|
577
586
|
.btn-free,
|
|
578
587
|
.btn-demo-link { display: block; text-align: center; padding: 10px; border: 1px solid var(--border); border-radius: 8px; color: var(--text); text-decoration: none; font-size: 14px; font-weight: 500; transition: border-color 0.15s; }
|
|
579
588
|
.btn-free:hover,
|
|
@@ -722,7 +731,7 @@ __GA_BOOTSTRAP__
|
|
|
722
731
|
<div class="container">
|
|
723
732
|
<div class="hero-badge">๐ ๐ The Firewall for AI Agents</div>
|
|
724
733
|
<h1>The Infrastructure Firewall for AI Coding Agents.</h1>
|
|
725
|
-
<p class="hero-lede">AI will always hallucinate and break things
|
|
734
|
+
<p class="hero-lede">AI agents will always hallucinate and break things โ we make their mistakes harmless. ThumbGate runs in the PreToolUse hook on your machine and blocks the dangerous tool call โ rm -rf, leaked keys, off-scope edits, a bad git push โ before it executes. No server, no gateway, no waiting on an enterprise rollout.</p>
|
|
726
735
|
|
|
727
736
|
<div class="hero-proof-card" aria-label="ThumbGate blocking example">
|
|
728
737
|
<div class="terminal-row muted">$ agent attempts risky action</div>
|
|
@@ -765,6 +774,11 @@ __GA_BOOTSTRAP__
|
|
|
765
774
|
<blockquote style="margin:0;font-size:18px;line-height:1.5;color:var(--text);font-style:italic;">“A better dashboard doesn’t make the agents more reliable. The hard part isn’t visibility. It’s trust.”</blockquote>
|
|
766
775
|
<figcaption style="margin-top:12px;font-size:13px;color:var(--text-muted);">โ Rob May, CEO & co-founder, Neurometric AI, in <a href="https://thenewstack.io/claude-code-agent-view/" target="_blank" rel="noopener" style="color:var(--cyan);">The New Stack</a> on Anthropic’s Claude Code Agent View (May 2026). ThumbGate is the open-source layer that makes the trust part real: PreToolUse gates, thumbs-down to rule, audit trail on every interception.</figcaption>
|
|
767
776
|
</figure>
|
|
777
|
+
<figure style="max-width:760px;margin:24px auto 0;padding:20px 24px;border-left:3px solid var(--cyan);background:rgba(34,211,238,0.04);border-radius:0 8px 8px 0;">
|
|
778
|
+
<p style="margin:0 0 8px;font-size:14px;color:var(--text-muted);text-transform:uppercase;letter-spacing:0.08em;">Local-first is the new default</p>
|
|
779
|
+
<blockquote style="margin:0;font-size:16px;line-height:1.55;color:var(--text);">Perplexity demoed a Personal Computer agent at Computex 2026 that <strong>asks the user before sending sensitive content to the cloud</strong>. Automation Anywhere shipped EnterpriseClaw with Cisco, NVIDIA, Okta, and OpenAI โ <strong>central policy, locally enforced, audit reported back</strong>. The architectural debate is settled. ThumbGate runs the same pattern for the coding agent already on your laptop.</blockquote>
|
|
780
|
+
<figcaption style="margin-top:12px;font-size:13px;color:var(--text-muted);">Sources: Perplexity at Intel Computex keynote (2026-06-02), Automation Anywhere EnterpriseClaw launch (Imagine 2026), <a href="https://thenewstack.io/automation-anywhere-enterpriseclaw-ai-agents/" target="_blank" rel="noopener" style="color:var(--cyan);">The New Stack coverage</a>.</figcaption>
|
|
781
|
+
</figure>
|
|
768
782
|
<div class="first-check-card" id="first-check">
|
|
769
783
|
<div class="section-label" style="text-align:left;margin-bottom:8px;">First-Dollar Activation Path</div>
|
|
770
784
|
<h2>Block your first repeated AI mistake in 5 minutes.</h2>
|
|
@@ -1364,7 +1378,7 @@ __GA_BOOTSTRAP__
|
|
|
1364
1378
|
<div class="price-card pro" data-price-dollars="19">
|
|
1365
1379
|
<div class="tier">Pro</div>
|
|
1366
1380
|
<div class="price">$19<span style="font-size:16px;color:var(--text-dim)">/mo</span></div>
|
|
1367
|
-
<div class="price-sub"><strong>The free
|
|
1381
|
+
<div class="price-sub"><strong>Don't buy a tool โ buy hosted sync + compatibility insurance.</strong> The free CLI runs your gates locally, but Pro is what we operate for you: secure SQLite sync across all your machines (saving you from managing database migrations manually across developer boxes) and active adapter maintenance to stay compatible with weekly breaking updates in Claude Code, Cursor, and Cline.</div>
|
|
1368
1382
|
<ul>
|
|
1369
1383
|
<li><strong>Block every repeat mistake</strong> โ unlimited feedback captures and prevention rules (Free caps at 3 active rules)</li>
|
|
1370
1384
|
<li><strong>Never re-explain a correction</strong> โ lesson recall and search across sessions on every agent surface</li>
|
|
@@ -1393,6 +1407,7 @@ __GA_BOOTSTRAP__
|
|
|
1393
1407
|
<li>Everything in Pro for each seat</li>
|
|
1394
1408
|
<li>Shared lesson database for Team seats, with export/import and shared workflow rules</li>
|
|
1395
1409
|
<li>Org dashboard visibility across agent surfaces</li>
|
|
1410
|
+
<li>Enterprise Data Chat over local ThumbGate lessons, gates, and rollout readiness; Dialogflow CX / Vertex integration is enabled only when deployment evidence is configured</li>
|
|
1396
1411
|
<li>Hosted review views for team verification evidence</li>
|
|
1397
1412
|
<li>Check template library for deploys, publish, refunds, and DB work</li>
|
|
1398
1413
|
<li>Workflow hardening sprint intake for approval boundaries and rollback safety</li>
|
|
@@ -1402,6 +1417,65 @@ __GA_BOOTSTRAP__
|
|
|
1402
1417
|
<p style="font-size:11px;color:var(--text-muted);margin-top:8px;text-align:center;">Team is $49/seat/mo with a 3-seat minimum, but team rollouts start through intake so the workflow, shared rules, and rollout proof are explicit before checkout.</p>
|
|
1403
1418
|
</div>
|
|
1404
1419
|
</div>
|
|
1420
|
+
<div class="pricing-matrix" aria-label="Plan capability comparison">
|
|
1421
|
+
<table>
|
|
1422
|
+
<caption>Compare plans at a glance</caption>
|
|
1423
|
+
<thead>
|
|
1424
|
+
<tr>
|
|
1425
|
+
<th scope="col">Capability</th>
|
|
1426
|
+
<th scope="col">Free</th>
|
|
1427
|
+
<th scope="col">Pro</th>
|
|
1428
|
+
<th scope="col">Team</th>
|
|
1429
|
+
<th scope="col">Regulated</th>
|
|
1430
|
+
</tr>
|
|
1431
|
+
</thead>
|
|
1432
|
+
<tbody>
|
|
1433
|
+
<tr>
|
|
1434
|
+
<td><strong>Best for</strong></td>
|
|
1435
|
+
<td>Solo proof that a repeat mistake can be blocked</td>
|
|
1436
|
+
<td>One operator who wants hosted sync, dashboard proof, and exports</td>
|
|
1437
|
+
<td>Teams that need one person's correction to protect every seat</td>
|
|
1438
|
+
<td>Banking, insurance, healthcare, public sector, or audited workflows</td>
|
|
1439
|
+
</tr>
|
|
1440
|
+
<tr>
|
|
1441
|
+
<td><strong>Price</strong></td>
|
|
1442
|
+
<td>$0</td>
|
|
1443
|
+
<td>$19/mo or $149/yr</td>
|
|
1444
|
+
<td>$49/seat/mo after scope, 3-seat minimum</td>
|
|
1445
|
+
<td>Scoped after regulated intake</td>
|
|
1446
|
+
</tr>
|
|
1447
|
+
<tr>
|
|
1448
|
+
<td><strong>Feedback captures</strong></td>
|
|
1449
|
+
<td>5/day, 25 total</td>
|
|
1450
|
+
<td>Unlimited</td>
|
|
1451
|
+
<td>Unlimited shared across seats</td>
|
|
1452
|
+
<td>Custom retention and evidence policy</td>
|
|
1453
|
+
</tr>
|
|
1454
|
+
<tr>
|
|
1455
|
+
<td><strong>Active prevention rules</strong></td>
|
|
1456
|
+
<td>3 active rules</td>
|
|
1457
|
+
<td>Unlimited personal rules</td>
|
|
1458
|
+
<td>Shared org rules plus per-seat rules</td>
|
|
1459
|
+
<td>Policy templates, approvals, and audit export</td>
|
|
1460
|
+
</tr>
|
|
1461
|
+
<tr>
|
|
1462
|
+
<td><strong>Dashboard and proof</strong></td>
|
|
1463
|
+
<td>Local CLI evidence</td>
|
|
1464
|
+
<td>Personal dashboard, check debugger, DPO/HF exports</td>
|
|
1465
|
+
<td>Org dashboard, hosted review views, workflow rollout proof</td>
|
|
1466
|
+
<td>SIEM-ready decision trail and compliance evidence package</td>
|
|
1467
|
+
</tr>
|
|
1468
|
+
<tr>
|
|
1469
|
+
<td><strong>How to start</strong></td>
|
|
1470
|
+
<td><code>npx thumbgate init</code></td>
|
|
1471
|
+
<td>Self-serve Stripe checkout</td>
|
|
1472
|
+
<td>Send one repeated workflow failure first</td>
|
|
1473
|
+
<td>Start regulated workflow review</td>
|
|
1474
|
+
</tr>
|
|
1475
|
+
</tbody>
|
|
1476
|
+
</table>
|
|
1477
|
+
</div>
|
|
1478
|
+
<p class="pricing-note">Free proves the enforcement loop. Pro removes solo limits. Team and Regulated plans start through intake because shared rules, permissions, rollback paths, and rollout proof must be explicit before checkout.</p>
|
|
1405
1479
|
<div style="max-width:1080px;margin:24px auto 0;">
|
|
1406
1480
|
<div class="price-card regulated" style="border:1px solid var(--cyan);background:linear-gradient(180deg, rgba(34,211,238,0.04), transparent);padding:24px 28px;">
|
|
1407
1481
|
<div style="display:flex;flex-wrap:wrap;align-items:flex-start;gap:24px;justify-content:space-between;">
|
|
@@ -1416,6 +1490,7 @@ __GA_BOOTSTRAP__
|
|
|
1416
1490
|
<li><strong>Self-managed deployment</strong> โ air-gapped or VPC-hosted; no agent state leaves your boundary</li>
|
|
1417
1491
|
<li><strong>DORA / EU AI Act evidence packaging</strong> โ machine-readable reports aligned to Article 6, 28, and high-risk provider monitoring obligations</li>
|
|
1418
1492
|
<li><strong>SSO + role separation</strong> โ operator, reviewer, and auditor roles enforced at the gate layer</li>
|
|
1493
|
+
<li><strong>Enterprise Data Chat</strong> โ local ThumbGate data Q&A with Dialogflow CX / Vertex-ready governance; live cloud-agent claims require deployment evidence first</li>
|
|
1419
1494
|
<li><strong>Workflow proof plan included</strong> โ a scoped review that proves the boundary against one of your real repeated-failure cases before broader rollout</li>
|
|
1420
1495
|
<li><strong>Quarterly red-team review</strong> โ prompt-injection and policy-bypass exercises with written findings</li>
|
|
1421
1496
|
</ul>
|
|
@@ -1594,7 +1669,7 @@ __GA_BOOTSTRAP__
|
|
|
1594
1669
|
<a href="https://www.linkedin.com/in/igorganapolsky" target="_blank" rel="noopener">LinkedIn</a>
|
|
1595
1670
|
<a href="/blog">Blog</a>
|
|
1596
1671
|
</div>
|
|
1597
|
-
<span class="footer-copy">ยฉ 2026 ThumbGate ยท MIT License ยท npm v1.
|
|
1672
|
+
<span class="footer-copy">ยฉ 2026 ThumbGate ยท MIT License ยท npm v1.27.2</span>
|
|
1598
1673
|
</div>
|
|
1599
1674
|
</footer>
|
|
1600
1675
|
|
package/public/learn.html
CHANGED
|
@@ -79,6 +79,36 @@
|
|
|
79
79
|
{
|
|
80
80
|
"@type": "ListItem",
|
|
81
81
|
"position": 7,
|
|
82
|
+
"url": "https://thumbgate.ai/learn/agentic-enterprise-context-brain",
|
|
83
|
+
"name": "Agentic Enterprise Context Brain: Memory Plus Enforcement"
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"@type": "ListItem",
|
|
87
|
+
"position": 8,
|
|
88
|
+
"url": "https://thumbgate.ai/learn/deterministic-agent-workflows",
|
|
89
|
+
"name": "Deterministic Agent Workflows Need Runtime Gates"
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"@type": "ListItem",
|
|
93
|
+
"position": 9,
|
|
94
|
+
"url": "https://thumbgate.ai/learn/codex-role-plugins-need-governance",
|
|
95
|
+
"name": "Codex Role Plugins Need Pre-Action Governance"
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"@type": "ListItem",
|
|
99
|
+
"position": 10,
|
|
100
|
+
"url": "https://thumbgate.ai/learn/agentic-os-team-governance",
|
|
101
|
+
"name": "Agentic OS Team Governance: Three Tiers Plus Gates"
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"@type": "ListItem",
|
|
105
|
+
"position": 11,
|
|
106
|
+
"url": "https://thumbgate.ai/learn/cost-aware-agent-gate-routing",
|
|
107
|
+
"name": "Cost-Aware Agent Gate Routing"
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"@type": "ListItem",
|
|
111
|
+
"position": 12,
|
|
82
112
|
"url": "https://thumbgate.ai/learn/from-prototype-to-production",
|
|
83
113
|
"name": "From git init to v1.17.0 in 70 days: an honest ThumbGate build log"
|
|
84
114
|
},
|
|
@@ -327,6 +357,46 @@
|
|
|
327
357
|
<span class="article-tag">Session Persistence</span>
|
|
328
358
|
</a>
|
|
329
359
|
|
|
360
|
+
<a href="/learn/agentic-enterprise-context-brain" class="article-card">
|
|
361
|
+
<h3>Agentic Enterprise Context Brain: Memory Plus Enforcement</h3>
|
|
362
|
+
<p>Enterprise agents need a context brain, but memory alone does not stop a repeated bad action. This guide turns facts, trust scores, prior failures, approvals, and evidence into pre-action gates.</p>
|
|
363
|
+
<span class="article-tag">Agentic Enterprise</span>
|
|
364
|
+
<span class="article-tag">Memory OS</span>
|
|
365
|
+
<span class="article-tag">Enforcement</span>
|
|
366
|
+
</a>
|
|
367
|
+
|
|
368
|
+
<a href="/learn/deterministic-agent-workflows" class="article-card">
|
|
369
|
+
<h3>Deterministic Agent Workflows Need Runtime Gates</h3>
|
|
370
|
+
<p>Claude Code workflows make orchestration scriptable and reviewable. ThumbGate adds the missing trust layer: run contracts, proof gates, and repeat-failure blocks before each tool call executes.</p>
|
|
371
|
+
<span class="article-tag">Claude Code</span>
|
|
372
|
+
<span class="article-tag">Workflows</span>
|
|
373
|
+
<span class="article-tag">Proof Gates</span>
|
|
374
|
+
</a>
|
|
375
|
+
|
|
376
|
+
<a href="/learn/codex-role-plugins-need-governance" class="article-card">
|
|
377
|
+
<h3>Codex Role Plugins Need Pre-Action Governance</h3>
|
|
378
|
+
<p>Codex plugins, Sites, and annotations move agent work into sales, analytics, design, finance, and documents. ThumbGate gates role-specific writes before they publish, share, or update business systems.</p>
|
|
379
|
+
<span class="article-tag">Codex Plugins</span>
|
|
380
|
+
<span class="article-tag">Sites</span>
|
|
381
|
+
<span class="article-tag">Governance</span>
|
|
382
|
+
</a>
|
|
383
|
+
|
|
384
|
+
<a href="/learn/agentic-os-team-governance" class="article-card">
|
|
385
|
+
<h3>Agentic OS Team Governance: Three Tiers Plus Gates</h3>
|
|
386
|
+
<p>A team Agentic OS needs human-editable source of truth, agent-operating files, git backup, permission mirroring, and memory scope. ThumbGate turns that architecture into runtime checks.</p>
|
|
387
|
+
<span class="article-tag">Agentic OS</span>
|
|
388
|
+
<span class="article-tag">Team Memory</span>
|
|
389
|
+
<span class="article-tag">Enterprise</span>
|
|
390
|
+
</a>
|
|
391
|
+
|
|
392
|
+
<a href="/learn/cost-aware-agent-gate-routing" class="article-card">
|
|
393
|
+
<h3>Cost-Aware Agent Gate Routing</h3>
|
|
394
|
+
<p>Use deterministic rules, semantic cache, local classifiers, local semantic recall, LLM judges, and human review in the right order so governance stays fast enough to leave on.</p>
|
|
395
|
+
<span class="article-tag">Semantic Cache</span>
|
|
396
|
+
<span class="article-tag">Rubrics</span>
|
|
397
|
+
<span class="article-tag">Cost Control</span>
|
|
398
|
+
</a>
|
|
399
|
+
|
|
330
400
|
<a href="/learn/from-prototype-to-production" class="article-card">
|
|
331
401
|
<h3>From git init to v1.17.0 in 70 days: an honest ThumbGate build log</h3>
|
|
332
402
|
<p>70 days, 112 commits, 17 minor releases, 6k npm downloads, $0 cold-traffic revenue. The unedited story of taking ThumbGate from a one-line repo init to live production โ including the part that's still broken.</p>
|
package/public/lessons.html
CHANGED
|
@@ -385,8 +385,32 @@ const LOCAL_PRO_BOOTSTRAP = __LESSONS_BOOTSTRAP_ENABLED__;
|
|
|
385
385
|
function escHtml(s) { var d = document.createElement('div'); d.textContent = s; return d.innerHTML; }
|
|
386
386
|
function escAttr(s) { return escHtml(String(s || '')).replace(/"/g, '"'); }
|
|
387
387
|
|
|
388
|
+
let ACTIVE_PROJECT_DIR = '';
|
|
389
|
+
try {
|
|
390
|
+
var urlParams = new URLSearchParams(window.location.search);
|
|
391
|
+
ACTIVE_PROJECT_DIR = urlParams.get('project') || '';
|
|
392
|
+
} catch (e) {}
|
|
393
|
+
|
|
394
|
+
function preserveProjectQueryParams() {
|
|
395
|
+
if (!ACTIVE_PROJECT_DIR) return;
|
|
396
|
+
var links = document.querySelectorAll('a[href^="/dashboard"], a[href^="/lessons"], a[href="/"]');
|
|
397
|
+
links.forEach(function(link) {
|
|
398
|
+
try {
|
|
399
|
+
var url = new URL(link.href, window.location.origin);
|
|
400
|
+
url.searchParams.set('project', ACTIVE_PROJECT_DIR);
|
|
401
|
+
link.href = url.pathname + url.search + url.hash;
|
|
402
|
+
} catch (e) {}
|
|
403
|
+
});
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
window.addEventListener('DOMContentLoaded', preserveProjectQueryParams);
|
|
407
|
+
|
|
388
408
|
function getHeaders() {
|
|
389
|
-
|
|
409
|
+
var headers = { 'Authorization': 'Bearer ' + API_KEY, 'Content-Type': 'application/json' };
|
|
410
|
+
if (ACTIVE_PROJECT_DIR) {
|
|
411
|
+
headers['x-thumbgate-project-dir'] = ACTIVE_PROJECT_DIR;
|
|
412
|
+
}
|
|
413
|
+
return headers;
|
|
390
414
|
}
|
|
391
415
|
|
|
392
416
|
function hasBootstrapKey() {
|
|
@@ -791,14 +815,107 @@ function deriveSeverity(lesson) {
|
|
|
791
815
|
return 'info';
|
|
792
816
|
}
|
|
793
817
|
|
|
818
|
+
function cleanLiveTitle(titleText, contextText) {
|
|
819
|
+
if (!titleText) return 'Lesson';
|
|
820
|
+
var prefix = '';
|
|
821
|
+
var rest = titleText;
|
|
822
|
+
var match = titleText.match(/^(MISTAKE|SUCCESS|LEARNING|PREFERENCE):\s*(.*)/i);
|
|
823
|
+
if (match) {
|
|
824
|
+
prefix = match[1].toUpperCase() + ': ';
|
|
825
|
+
rest = match[2];
|
|
826
|
+
}
|
|
827
|
+
|
|
828
|
+
var trimmed = rest.trim();
|
|
829
|
+
var isJson = trimmed.indexOf('{') === 0;
|
|
830
|
+
|
|
831
|
+
if (isJson) {
|
|
832
|
+
try {
|
|
833
|
+
var parsed = JSON.parse(trimmed);
|
|
834
|
+
var promptVal = parsed.prompt;
|
|
835
|
+
var hookVal = parsed.hook_event_name || parsed.hookEventName;
|
|
836
|
+
if (promptVal) {
|
|
837
|
+
var dirName = parsed.cwd ? parsed.cwd.split('/').pop() : '';
|
|
838
|
+
return prefix + 'Prompt "' + promptVal + '"' + (dirName ? ' inside ' + dirName : '');
|
|
839
|
+
}
|
|
840
|
+
if (hookVal) {
|
|
841
|
+
var dirName = parsed.cwd ? parsed.cwd.split('/').pop() : '';
|
|
842
|
+
return prefix + 'Hook event ' + hookVal + (dirName ? ' inside ' + dirName : '');
|
|
843
|
+
}
|
|
844
|
+
if (parsed.signal) {
|
|
845
|
+
var dirName = parsed.cwd ? parsed.cwd.split('/').pop() : '';
|
|
846
|
+
return prefix + (parsed.signal === 'up' ? 'Thumbs Up' : 'Thumbs Down') + (dirName ? ' inside ' + dirName : '');
|
|
847
|
+
}
|
|
848
|
+
} catch (e) {
|
|
849
|
+
if (contextText) {
|
|
850
|
+
var ctxTrimmed = contextText.trim();
|
|
851
|
+
if (ctxTrimmed.indexOf('{') === 0) {
|
|
852
|
+
try {
|
|
853
|
+
var parsedCtx = JSON.parse(ctxTrimmed);
|
|
854
|
+
var promptValCtx = parsedCtx.prompt;
|
|
855
|
+
var hookValCtx = parsedCtx.hook_event_name || parsedCtx.hookEventName;
|
|
856
|
+
if (promptValCtx) {
|
|
857
|
+
var dirName = parsedCtx.cwd ? parsedCtx.cwd.split('/').pop() : '';
|
|
858
|
+
return prefix + 'Prompt "' + promptValCtx + '"' + (dirName ? ' inside ' + dirName : '');
|
|
859
|
+
}
|
|
860
|
+
if (hookValCtx) {
|
|
861
|
+
var dirName = parsedCtx.cwd ? parsedCtx.cwd.split('/').pop() : '';
|
|
862
|
+
return prefix + 'Hook event ' + hookValCtx + (dirName ? ' inside ' + dirName : '');
|
|
863
|
+
}
|
|
864
|
+
} catch (err) {
|
|
865
|
+
// ignore
|
|
866
|
+
}
|
|
867
|
+
}
|
|
868
|
+
}
|
|
869
|
+
}
|
|
870
|
+
|
|
871
|
+
var promptMatch = rest.match(/"prompt"\s*:\s*"([^"]+)"/) || (contextText && contextText.match(/"prompt"\s*:\s*"([^"]+)"/));
|
|
872
|
+
if (promptMatch) {
|
|
873
|
+
var cwdMatch = rest.match(/"cwd"\s*:\s*"([^"]+)"/) || (contextText && contextText.match(/"cwd"\s*:\s*"([^"]+)"/));
|
|
874
|
+
var dirName = cwdMatch ? cwdMatch[1].split('/').pop() : '';
|
|
875
|
+
return prefix + 'Prompt "' + promptMatch[1] + '"' + (dirName ? ' inside ' + dirName : '');
|
|
876
|
+
}
|
|
877
|
+
|
|
878
|
+
var hookMatch = rest.match(/"hook_?event_?name"\s*:\s*"([^"]+)"/i) || (contextText && contextText.match(/"hook_?event_?name"\s*:\s*"([^"]+)"/i));
|
|
879
|
+
if (hookMatch) {
|
|
880
|
+
var cwdMatch = rest.match(/"cwd"\s*:\s*"([^"]+)"/) || (contextText && contextText.match(/"cwd"\s*:\s*"([^"]+)"/));
|
|
881
|
+
var dirName = cwdMatch ? cwdMatch[1].split('/').pop() : '';
|
|
882
|
+
return prefix + 'Hook event ' + hookMatch[1] + (dirName ? ' inside ' + dirName : '');
|
|
883
|
+
}
|
|
884
|
+
}
|
|
885
|
+
return titleText;
|
|
886
|
+
}
|
|
887
|
+
|
|
888
|
+
function cleanLiveContext(contextText) {
|
|
889
|
+
if (!contextText) return '';
|
|
890
|
+
var trimmed = contextText.trim();
|
|
891
|
+
if (trimmed.indexOf('{') === 0 && trimmed.indexOf('}') === trimmed.length - 1) {
|
|
892
|
+
try {
|
|
893
|
+
var parsed = JSON.parse(trimmed);
|
|
894
|
+
if (parsed.prompt) {
|
|
895
|
+
var dirName = parsed.cwd ? parsed.cwd.split('/').pop() : '';
|
|
896
|
+
var parts = [];
|
|
897
|
+
parts.push('Prompt: "' + parsed.prompt + '"');
|
|
898
|
+
if (parsed.cwd) parts.push('Working dir: ' + parsed.cwd);
|
|
899
|
+
if (parsed.hook_event_name) parts.push('Hook event: ' + parsed.hook_event_name);
|
|
900
|
+
return parts.join(' ยท ');
|
|
901
|
+
}
|
|
902
|
+
} catch (e) {
|
|
903
|
+
// ignore
|
|
904
|
+
}
|
|
905
|
+
}
|
|
906
|
+
return contextText;
|
|
907
|
+
}
|
|
908
|
+
|
|
794
909
|
function mapLiveRules(payload) {
|
|
795
910
|
return (payload.results || []).map(function(result) {
|
|
796
911
|
var linkedGate = (((result.systemResponse || {}).linkedAutoGates) || [])[0] || null;
|
|
797
912
|
var sourceFeedback = ((result.systemResponse || {}).sourceFeedback) || null;
|
|
913
|
+
var rawTitle = result.title || ((result.lesson || {}).summary) || 'Lesson';
|
|
914
|
+
var rawContext = ((result.lesson || {}).howToAvoid) || ((result.lesson || {}).summary) || (sourceFeedback && sourceFeedback.context) || '';
|
|
798
915
|
return {
|
|
799
916
|
id: result.id,
|
|
800
|
-
title:
|
|
801
|
-
context: (
|
|
917
|
+
title: cleanLiveTitle(rawTitle, rawContext),
|
|
918
|
+
context: cleanLiveContext(rawContext),
|
|
802
919
|
occurrences: linkedGate && linkedGate.occurrences ? linkedGate.occurrences : 1,
|
|
803
920
|
severity: deriveSeverity(result),
|
|
804
921
|
tags: Array.isArray(result.tags) ? result.tags : [],
|
|
@@ -812,13 +929,14 @@ function mapTimelineItems(payload, lessonMap) {
|
|
|
812
929
|
return (payload.results || []).map(function(entry) {
|
|
813
930
|
var linkedLesson = lessonMap.get(entry.id) || null;
|
|
814
931
|
var timestamp = entry.timestamp || null;
|
|
932
|
+
var rawContext = entry.context || entry.title || '';
|
|
815
933
|
return {
|
|
816
934
|
signal: normalizeSignal(entry.signal || entry.feedback),
|
|
817
|
-
context:
|
|
935
|
+
context: cleanLiveContext(rawContext),
|
|
818
936
|
date: formatDate(entry.timestamp),
|
|
819
937
|
timestamp: timestamp,
|
|
820
938
|
dayKey: toDayKey(timestamp),
|
|
821
|
-
learned: linkedLesson ? linkedLesson.title : '',
|
|
939
|
+
learned: linkedLesson ? cleanLiveTitle(linkedLesson.title, rawContext) : '',
|
|
822
940
|
feedbackId: entry.id || ''
|
|
823
941
|
};
|
|
824
942
|
});
|
|
@@ -926,8 +1044,13 @@ async function loadLive() {
|
|
|
926
1044
|
renderTimeline(allTimeline);
|
|
927
1045
|
renderInsights(dashboardSnapshot);
|
|
928
1046
|
renderImprovementMetrics(stats, dashboardSnapshot);
|
|
1047
|
+
var isEnterprise = API_KEY.startsWith('tg_op_') || API_KEY.startsWith('tg_creator_');
|
|
1048
|
+
if (stats.tier) {
|
|
1049
|
+
isEnterprise = (stats.tier === 'Enterprise');
|
|
1050
|
+
}
|
|
1051
|
+
const tierName = isEnterprise ? 'Enterprise' : 'Pro';
|
|
929
1052
|
document.getElementById('proBadge').style.display = 'none';
|
|
930
|
-
setMode('Local
|
|
1053
|
+
setMode('Local ' + tierName + ' connected โ this lessons view is reading your live rules, feedback timeline, and insights.', false);
|
|
931
1054
|
} catch (_err) {
|
|
932
1055
|
loadDemo();
|
|
933
1056
|
}
|
package/public/numbers.html
CHANGED
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"alternateName": "thumbgate",
|
|
26
26
|
"applicationCategory": "DeveloperApplication",
|
|
27
27
|
"operatingSystem": "Cross-platform, Node.js >=18.18.0",
|
|
28
|
-
"softwareVersion": "1.
|
|
28
|
+
"softwareVersion": "1.27.2",
|
|
29
29
|
"url": "https://thumbgate.ai/numbers",
|
|
30
30
|
"dateModified": "2026-05-07",
|
|
31
31
|
"creator": {
|
|
@@ -202,7 +202,7 @@
|
|
|
202
202
|
<main class="container">
|
|
203
203
|
<h1>The Numbers</h1>
|
|
204
204
|
<p class="subtitle">Generated first-party operational snapshot from the ThumbGate runtime. This is not customer traction, install volume, revenue, or proof that a configured gate has fired.</p>
|
|
205
|
-
<div class="freshness">Updated: 2026-05-07 ยท Version 1.
|
|
205
|
+
<div class="freshness">Updated: 2026-05-07 ยท Version 1.27.2</div>
|
|
206
206
|
<div class="truth-note"><strong>Read this first:</strong> configured checks are inventory. Recorded blocks and warnings are usage evidence. This snapshot currently reports 0 recorded hard-block event(s) and 0 recorded warning event(s).</div>
|
|
207
207
|
|
|
208
208
|
<h2>Gate enforcement</h2>
|
package/public/pricing.html
CHANGED
|
@@ -251,8 +251,7 @@ __GA_BOOTSTRAP__
|
|
|
251
251
|
<div class="tier">Pro</div>
|
|
252
252
|
<div class="price">$19<span>/mo</span></div>
|
|
253
253
|
<div class="price-sub">
|
|
254
|
-
The free CLI runs your gates locally and
|
|
255
|
-
Pro is what we operate for you: hosted lesson sync across all your machines, adapter matrix kept current as agent runtimes ship breaking changes, and a dashboard you never have to self-host.
|
|
254
|
+
<strong>Don't buy a tool โ buy hosted sync + compatibility insurance.</strong> The free CLI runs your gates locally, but Pro is what we operate for you: secure SQLite sync across all your machines (saving you from managing database migrations manually across developer boxes) and active adapter maintenance to stay compatible with weekly breaking updates in Claude Code, Cursor, and Cline.
|
|
256
255
|
</div>
|
|
257
256
|
<ul>
|
|
258
257
|
<li><strong>Hosted lesson sync</strong> โ corrections follow you across machines, no manual export</li>
|
|
@@ -275,6 +274,7 @@ __GA_BOOTSTRAP__
|
|
|
275
274
|
<li>Everything in Pro for each seat</li>
|
|
276
275
|
<li><strong>Shared lesson database</strong> โ one engineer's fix protects every agent on the team</li>
|
|
277
276
|
<li><strong>Org dashboard</strong> โ visibility across all agent surfaces and developers</li>
|
|
277
|
+
<li><strong>Enterprise Data Chat</strong> โ query local ThumbGate feedback, lessons, gates, and rollout readiness; Dialogflow CX / Vertex integration is enabled only when deployment evidence is configured</li>
|
|
278
278
|
<li>Check template library for deploys, publish, and DB operations</li>
|
|
279
279
|
<li>Email support during pilot rollout</li>
|
|
280
280
|
<li>3-seat minimum after scope; rollout starts only after workflow and proof review are explicit</li>
|
|
@@ -285,6 +285,20 @@ __GA_BOOTSTRAP__
|
|
|
285
285
|
|
|
286
286
|
</div>
|
|
287
287
|
|
|
288
|
+
<div class="enterprise-band" style="max-width:920px;margin:0 auto 8px;padding:24px 28px;border:1px solid rgba(34,211,238,0.24);border-radius:10px;background:#090d12;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:16px;">
|
|
289
|
+
<div style="flex:1 1 460px;text-align:left;">
|
|
290
|
+
<div class="tier" style="color:var(--cyan);">Enterprise</div>
|
|
291
|
+
<div class="price-sub" style="margin:4px 0 10px;">For regulated teams that need agent checks routed through their own cloud โ talk to us.</div>
|
|
292
|
+
<ul style="margin:0;padding-left:18px;font-size:13px;color:var(--text-muted);line-height:1.7;">
|
|
293
|
+
<li><strong>Vertex AI / VPC gating</strong> โ route agent checks through Gemini models in your Google Cloud project (<code>npx thumbgate setup-vertex</code>)</li>
|
|
294
|
+
<li><strong>Regulatory gate templates</strong> โ legal intake, financial compliance, healthcare</li>
|
|
295
|
+
<li>Custom policy layers scoped to firm / practice area</li>
|
|
296
|
+
<li>Compliance audit export + dedicated onboarding with SLA</li>
|
|
297
|
+
</ul>
|
|
298
|
+
</div>
|
|
299
|
+
<a class="btn-team" style="white-space:nowrap;" href="/?utm_source=pricing&utm_medium=enterprise_band&utm_campaign=enterprise_intake&cta_id=pricing_enterprise&cta_placement=pricing&plan_id=enterprise#workflow-sprint-intake" onclick="try{posthog.capture('pricing_cta_click',{cta:'enterprise_intake',tier:'enterprise',placement:'pricing_page',price:0})}catch(_){};try{plausible('pricing_cta_click',{props:{cta:'enterprise_intake',tier:'enterprise'}})}catch(_){}">Talk to us</a>
|
|
300
|
+
</div>
|
|
301
|
+
|
|
288
302
|
<div style="text-align:center;margin:32px 0;color:var(--text-muted);font-size:14px;">
|
|
289
303
|
Need founder help? Do not buy a blind diagnostic from a pricing table.
|
|
290
304
|
<a href="/?utm_source=pricing&utm_medium=scope_first&utm_campaign=team_intake&cta_id=pricing_scope_first&cta_placement=pricing_note&plan_id=team#workflow-sprint-intake" style="color:var(--cyan);text-decoration:none;font-weight:600;" onclick="try{posthog.capture('pricing_cta_click',{cta:'scope_first',tier:'team',price:0})}catch(_){};try{plausible('pricing_cta_click',{props:{cta:'scope_first',tier:'team'}})}catch(_){}">Send the workflow first</a> โ then we scope the smallest paid rollout that can prove one repeated failure is blocked.
|
|
@@ -299,6 +313,10 @@ __GA_BOOTSTRAP__
|
|
|
299
313
|
<div class="faq-q">What does Pro add over the free CLI?</div>
|
|
300
314
|
<div class="faq-a">Free gives you 5 captures/day and 3 active rules, running entirely on your machine. Pro is the hosted layer: unlimited captures, unlimited rules, lesson sync across machines, a dashboard without self-hosting, managed adapter updates, and DPO export. You're paying for infrastructure we run, not features we hide.</div>
|
|
301
315
|
</div>
|
|
316
|
+
<div class="faq-item">
|
|
317
|
+
<div class="faq-q">Why not just use an enterprise AI control plane?</div>
|
|
318
|
+
<div class="faq-a">Enterprise control planes govern agents from a server-side gateway, sold to platform teams on a Fortune-500 timeline. ThumbGate runs local-first, in the PreToolUse hook on your machine, and ships enforcement for the coding agents developers actually use today โ Claude Code, Cursor, Codex, Gemini, Amp, Cline, OpenCode โ with an <code>npm install</code> and minutes to value, not a procurement cycle.</div>
|
|
319
|
+
</div>
|
|
302
320
|
<div class="faq-item">
|
|
303
321
|
<div class="faq-q">Does ThumbGate send my code to the cloud?</div>
|
|
304
322
|
<div class="faq-a">No. The CLI is local-first and no source code leaves your machine. Pro and Team add hosted sync for dashboards and shared lessons, but your code stays local.</div>
|