thumbgate 1.26.8 โ 1.27.3
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/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 +44 -31
- package/adapters/claude/.mcp.json +2 -2
- package/adapters/gcp/dfcx-webhook-gate.js +295 -0
- package/adapters/mcp/server-stdio.js +41 -1
- package/adapters/opencode/opencode.json +1 -1
- package/bench/thumbgate-bench.json +2 -2
- package/bin/cli.js +184 -8
- 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 +28 -12
- package/public/about.html +162 -0
- package/public/chatgpt-app.html +330 -0
- package/public/codex-plugin.html +66 -14
- package/public/compare.html +2 -2
- package/public/dashboard.html +224 -36
- package/public/guide.html +2 -2
- package/public/index.html +122 -40
- package/public/learn.html +70 -0
- package/public/lessons.html +129 -6
- package/public/numbers.html +2 -2
- package/public/pricing.html +28 -23
- package/public/pro.html +3 -3
- 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/commercial-offer.js +10 -2
- package/scripts/dashboard-chat.js +199 -51
- package/scripts/feedback-sanitizer.js +105 -0
- package/scripts/gates-engine.js +301 -67
- package/scripts/hybrid-feedback-context.js +141 -7
- package/scripts/memory-scope-readiness.js +159 -0
- package/scripts/oss-pr-opportunity-scout.js +35 -5
- 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/rate-limiter.js +2 -2
- 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 +113 -0
- package/scripts/thumbgate-bench.js +16 -1
- package/scripts/tool-registry.js +37 -0
- package/scripts/workflow-sentinel.js +282 -54
- package/src/api/server.js +466 -60
- package/.claude-plugin/marketplace.json +0 -85
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.3">
|
|
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">
|
|
@@ -116,10 +116,9 @@ __GA_BOOTSTRAP__
|
|
|
116
116
|
},
|
|
117
117
|
{
|
|
118
118
|
"@type": "Offer",
|
|
119
|
-
"name": "
|
|
120
|
-
"price": "49",
|
|
119
|
+
"name": "Enterprise",
|
|
121
120
|
"priceCurrency": "USD",
|
|
122
|
-
"description": "
|
|
121
|
+
"description": "Contact-sales tier with custom pricing scoped after intake: a workflow hardening sprint, shared hosted lesson database, org dashboard visibility, shared enforcement, approval boundaries, audit-grade decision trail, regulatory gate templates, Docker Sandboxes guidance for risky local autonomy, and dedicated onboarding for teams shipping AI-generated changes",
|
|
123
122
|
"url": "https://thumbgate.ai/#workflow-sprint-intake"
|
|
124
123
|
},
|
|
125
124
|
{
|
|
@@ -574,6 +573,15 @@ __GA_BOOTSTRAP__
|
|
|
574
573
|
.price-card li { font-size: 14px; color: var(--text-muted); padding: 6px 0; display: flex; align-items: flex-start; gap: 8px; }
|
|
575
574
|
.price-card li::before { content: "โ"; color: var(--cyan); font-weight: 700; flex-shrink: 0; }
|
|
576
575
|
.price-card.pro li::before { color: var(--cyan); }
|
|
576
|
+
.pricing-matrix { max-width: 1080px; margin: 24px auto 0; overflow-x: auto; border: 1px solid var(--border); border-radius: 12px; background: var(--bg-card); }
|
|
577
|
+
.pricing-matrix table { width: 100%; min-width: 760px; border-collapse: collapse; }
|
|
578
|
+
.pricing-matrix caption { text-align: left; padding: 18px 18px 0; color: var(--text); font-weight: 800; font-size: 16px; }
|
|
579
|
+
.pricing-matrix th,
|
|
580
|
+
.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); }
|
|
581
|
+
.pricing-matrix th { color: var(--cyan); background: rgba(34,211,238,0.06); font-weight: 800; }
|
|
582
|
+
.pricing-matrix tr:last-child td { border-bottom: 0; }
|
|
583
|
+
.pricing-matrix strong { color: var(--text); }
|
|
584
|
+
.pricing-note { max-width: 880px; margin: 14px auto 0; color: var(--text-muted); font-size: 12px; line-height: 1.55; text-align: center; }
|
|
577
585
|
.btn-free,
|
|
578
586
|
.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
587
|
.btn-free:hover,
|
|
@@ -722,7 +730,7 @@ __GA_BOOTSTRAP__
|
|
|
722
730
|
<div class="container">
|
|
723
731
|
<div class="hero-badge">๐ ๐ The Firewall for AI Agents</div>
|
|
724
732
|
<h1>The Infrastructure Firewall for AI Coding Agents.</h1>
|
|
725
|
-
<p class="hero-lede">AI will always hallucinate and break things
|
|
733
|
+
<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
734
|
|
|
727
735
|
<div class="hero-proof-card" aria-label="ThumbGate blocking example">
|
|
728
736
|
<div class="terminal-row muted">$ agent attempts risky action</div>
|
|
@@ -743,9 +751,9 @@ __GA_BOOTSTRAP__
|
|
|
743
751
|
<a href="/checkout/pro?utm_source=website&utm_medium=offer_router&cta_id=router_start_pro&cta_placement=offer_router&plan_id=pro" data-revenue-cta data-cta-id="router_start_pro" data-cta-placement="offer_router" data-tier="pro" data-plan-id="pro" data-price="19" onclick="trackRevenueCta(this);">Pay $19/mo with Stripe โ</a>
|
|
744
752
|
</div>
|
|
745
753
|
<div class="offer-route">
|
|
746
|
-
<strong>
|
|
747
|
-
<p>
|
|
748
|
-
<a href="#workflow-sprint-intake" onclick="sendFirstPartyTelemetry('workflow_sprint_intake_started',{ctaId:'router_workflow_sprint',ctaPlacement:'offer_router',offer:'workflow_sprint'});">
|
|
754
|
+
<strong>Enterprise: Start with intake</strong>
|
|
755
|
+
<p>Shared enforcement, scoped.</p>
|
|
756
|
+
<a href="#workflow-sprint-intake" onclick="sendFirstPartyTelemetry('workflow_sprint_intake_started',{ctaId:'router_workflow_sprint',ctaPlacement:'offer_router',offer:'workflow_sprint'});">Talk to us โ</a>
|
|
749
757
|
</div>
|
|
750
758
|
<div class="offer-route">
|
|
751
759
|
<strong>Still evaluating: Free CLI</strong>
|
|
@@ -765,6 +773,11 @@ __GA_BOOTSTRAP__
|
|
|
765
773
|
<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
774
|
<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
775
|
</figure>
|
|
776
|
+
<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;">
|
|
777
|
+
<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>
|
|
778
|
+
<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>
|
|
779
|
+
<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>
|
|
780
|
+
</figure>
|
|
768
781
|
<div class="first-check-card" id="first-check">
|
|
769
782
|
<div class="section-label" style="text-align:left;margin-bottom:8px;">First-Dollar Activation Path</div>
|
|
770
783
|
<h2>Block your first repeated AI mistake in 5 minutes.</h2>
|
|
@@ -814,7 +827,7 @@ __GA_BOOTSTRAP__
|
|
|
814
827
|
<div hidden aria-hidden="true" data-thumbgate-test-anchors style="display:none">
|
|
815
828
|
<span data-cta="hero_workflow_sprint_intake">ctaId: 'hero_workflow_sprint' ctaId: 'hero_workflow_sprint_recovery_intake' workflow_sprint_intake_started workflow_sprint_recovery_intake_clicked hero_workflow_sprint_recovery_intake</span>
|
|
816
829
|
<span data-anchor="dashboard-preview">dashboard-preview What your Pro dashboard looks like check:no-force-push</span>
|
|
817
|
-
<span data-anchor="team-intake-form">Start
|
|
830
|
+
<span data-anchor="team-intake-form">Start Enterprise Pilot Intake id="team-pilot-intake-form" data-team-intake-form name="ctaPlacement" value="team_visible_intake" name="utmMedium" value="visible_team_intake" name="planId" value="team" name="ctaId" value="workflow_sprint_intake" Enterprise checkout happens after scope. team_workflow_sprint_recovery_intake scope_first workflow_sprint_intake_started workflow_sprint_intake_submit_attempted pricing_team_intake team_intake_started</span>
|
|
818
831
|
<span data-anchor="chatgpt-context">No, you do not have to chat inside the GPT forever. ChatGPT is the discovery and memory surface. Do not rely on ChatGPT's native rating buttons for ThumbGate memory. Explore GPTs choose the GPT by Igor Ganapolsky Programming Do I have to chat inside the ThumbGate GPT for enforcement? capture thumbs-up/down lessons Real blocking for coding agents still runs locally adapters/chatgpt/INSTALL.md Native ChatGPT rating buttons are not the ThumbGate capture path. thumbs up: this review named exact files, commands, and tests. thumbs down: the answer ignored my request.</span>
|
|
819
832
|
</div>
|
|
820
833
|
</div>
|
|
@@ -1339,6 +1352,33 @@ __GA_BOOTSTRAP__
|
|
|
1339
1352
|
<div class="container">
|
|
1340
1353
|
<div class="section-label">Pricing</div>
|
|
1341
1354
|
<h2 class="section-title">Stop paying for agent mistakes you already fixed.</h2>
|
|
1355
|
+
|
|
1356
|
+
<!-- At-a-glance comparison so buyers see plan differences without parsing the cards below. -->
|
|
1357
|
+
<div class="plan-matrix-wrap" style="max-width:1080px;margin:8px auto 28px;overflow-x:auto;">
|
|
1358
|
+
<table class="plan-matrix" style="width:100%;border-collapse:collapse;font-size:14px;min-width:640px;">
|
|
1359
|
+
<thead>
|
|
1360
|
+
<tr>
|
|
1361
|
+
<th style="text-align:left;padding:12px 14px;color:var(--text-muted);font-weight:600;border-bottom:1px solid var(--border);"></th>
|
|
1362
|
+
<th style="text-align:center;padding:12px 14px;border-bottom:1px solid var(--border);">Free<br><span style="font-size:12px;color:var(--text-muted);font-weight:400;">$0 forever</span></th>
|
|
1363
|
+
<th style="text-align:center;padding:12px 14px;border-bottom:1px solid var(--border);color:var(--cyan);">Pro<br><span style="font-size:12px;color:var(--text-muted);font-weight:400;">$19/mo or $149/yr</span></th>
|
|
1364
|
+
<th style="text-align:center;padding:12px 14px;border-bottom:1px solid var(--border);color:var(--cyan);">Enterprise<br><span style="font-size:12px;color:var(--text-muted);font-weight:400;">Custom โ scoped after intake</span></th>
|
|
1365
|
+
</tr>
|
|
1366
|
+
</thead>
|
|
1367
|
+
<tbody>
|
|
1368
|
+
<tr><td style="padding:10px 14px;border-bottom:1px solid var(--border);">Local PreToolUse enforcement (all agents)</td><td style="text-align:center;border-bottom:1px solid var(--border);">โ
</td><td style="text-align:center;border-bottom:1px solid var(--border);">โ
</td><td style="text-align:center;border-bottom:1px solid var(--border);">โ
</td></tr>
|
|
1369
|
+
<tr><td style="padding:10px 14px;border-bottom:1px solid var(--border);">Feedback captures</td><td style="text-align:center;border-bottom:1px solid var(--border);">5/day (25 total)</td><td style="text-align:center;border-bottom:1px solid var(--border);">Unlimited</td><td style="text-align:center;border-bottom:1px solid var(--border);">Unlimited</td></tr>
|
|
1370
|
+
<tr><td style="padding:10px 14px;border-bottom:1px solid var(--border);">Active auto-promoted prevention rules</td><td style="text-align:center;border-bottom:1px solid var(--border);">3</td><td style="text-align:center;border-bottom:1px solid var(--border);">Unlimited</td><td style="text-align:center;border-bottom:1px solid var(--border);">Unlimited</td></tr>
|
|
1371
|
+
<tr><td style="padding:10px 14px;border-bottom:1px solid var(--border);">Lesson recall + search across sessions</td><td style="text-align:center;border-bottom:1px solid var(--border);">โ</td><td style="text-align:center;border-bottom:1px solid var(--border);">โ
</td><td style="text-align:center;border-bottom:1px solid var(--border);">โ
</td></tr>
|
|
1372
|
+
<tr><td style="padding:10px 14px;border-bottom:1px solid var(--border);">Personal dashboard + DPO export</td><td style="text-align:center;border-bottom:1px solid var(--border);">โ</td><td style="text-align:center;border-bottom:1px solid var(--border);">โ
</td><td style="text-align:center;border-bottom:1px solid var(--border);">โ
</td></tr>
|
|
1373
|
+
<tr><td style="padding:10px 14px;border-bottom:1px solid var(--border);">Hosted sync across machines</td><td style="text-align:center;border-bottom:1px solid var(--border);">โ</td><td style="text-align:center;border-bottom:1px solid var(--border);">โ
</td><td style="text-align:center;border-bottom:1px solid var(--border);">โ
</td></tr>
|
|
1374
|
+
<tr><td style="padding:10px 14px;border-bottom:1px solid var(--border);">Shared lesson database + org dashboard</td><td style="text-align:center;border-bottom:1px solid var(--border);">โ</td><td style="text-align:center;border-bottom:1px solid var(--border);">โ</td><td style="text-align:center;border-bottom:1px solid var(--border);">โ
</td></tr>
|
|
1375
|
+
<tr><td style="padding:10px 14px;border-bottom:1px solid var(--border);">Org-wide shared enforcement + approval boundaries</td><td style="text-align:center;border-bottom:1px solid var(--border);">โ</td><td style="text-align:center;border-bottom:1px solid var(--border);">โ</td><td style="text-align:center;border-bottom:1px solid var(--border);">โ
</td></tr>
|
|
1376
|
+
<tr><td style="padding:10px 14px;border-bottom:1px solid var(--border);">Audit trail, SSO, regulatory gate templates</td><td style="text-align:center;border-bottom:1px solid var(--border);">โ</td><td style="text-align:center;border-bottom:1px solid var(--border);">โ</td><td style="text-align:center;border-bottom:1px solid var(--border);">โ
</td></tr>
|
|
1377
|
+
<tr><td style="padding:10px 14px;color:var(--text-muted);">Best for</td><td style="text-align:center;color:var(--text-muted);">One developer</td><td style="text-align:center;color:var(--text-muted);">Solo operators</td><td style="text-align:center;color:var(--text-muted);">Teams & regulated orgs</td></tr>
|
|
1378
|
+
</tbody>
|
|
1379
|
+
</table>
|
|
1380
|
+
</div>
|
|
1381
|
+
|
|
1342
1382
|
<div class="pricing-grid">
|
|
1343
1383
|
<div class="price-card free-highlight" style="border-color:var(--cyan);box-shadow:0 0 40px var(--cyan-dim), inset 0 1px 0 rgba(34,211,238,0.15);position:relative;">
|
|
1344
1384
|
<div class="tier" style="color:var(--cyan);">Free</div>
|
|
@@ -1364,7 +1404,7 @@ __GA_BOOTSTRAP__
|
|
|
1364
1404
|
<div class="price-card pro" data-price-dollars="19">
|
|
1365
1405
|
<div class="tier">Pro</div>
|
|
1366
1406
|
<div class="price">$19<span style="font-size:16px;color:var(--text-dim)">/mo</span></div>
|
|
1367
|
-
<div class="price-sub"><strong>The free
|
|
1407
|
+
<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
1408
|
<ul>
|
|
1369
1409
|
<li><strong>Block every repeat mistake</strong> โ unlimited feedback captures and prevention rules (Free caps at 3 active rules)</li>
|
|
1370
1410
|
<li><strong>Never re-explain a correction</strong> โ lesson recall and search across sessions on every agent surface</li>
|
|
@@ -1385,43 +1425,85 @@ __GA_BOOTSTRAP__
|
|
|
1385
1425
|
<p style="font-size:11px;color:var(--text-muted);margin-top:8px;text-align:center;">Billed today ยท cancel anytime.</p>
|
|
1386
1426
|
<input type="email" id="pro-email" data-buyer-email placeholder="you@company.com" style="margin-top:10px;width:100%;padding:10px 12px;border:1px solid var(--border);border-radius:8px;background:var(--bg-raised);color:var(--text);font-size:14px;">
|
|
1387
1427
|
</div>
|
|
1388
|
-
<div class="price-card team">
|
|
1389
|
-
<div class="tier">Team</div>
|
|
1390
|
-
<div class="price">$49<span style="font-size:16px;color:var(--text-dim)">/seat/mo</span></div>
|
|
1391
|
-
<div class="price-sub">Shared enforcement memory for one team workflow first.</div>
|
|
1392
|
-
<ul>
|
|
1393
|
-
<li>Everything in Pro for each seat</li>
|
|
1394
|
-
<li>Shared lesson database for Team seats, with export/import and shared workflow rules</li>
|
|
1395
|
-
<li>Org dashboard visibility across agent surfaces</li>
|
|
1396
|
-
<li>Hosted review views for team verification evidence</li>
|
|
1397
|
-
<li>Check template library for deploys, publish, refunds, and DB work</li>
|
|
1398
|
-
<li>Workflow hardening sprint intake for approval boundaries and rollback safety</li>
|
|
1399
|
-
<li>Email support during pilot rollout</li>
|
|
1400
|
-
</ul>
|
|
1401
|
-
<a href="#workflow-sprint-intake" onclick="try{posthog.capture('team_intake_click',{cta:'team_intake',seats:3,price:0})}catch(_){};sendFirstPartyTelemetry('team_intake_started',{ctaId:'pricing_team_intake',ctaPlacement:'pricing',planId:'team',seatCount:3,price:0});sendGa4Event('generate_lead',{currency:'USD',value:0,method:'team_workflow_intake'});" class="btn-team" style="display:block;text-align:center;">Send team workflow first โ</a>
|
|
1402
|
-
<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
|
-
</div>
|
|
1404
1428
|
</div>
|
|
1429
|
+
<div class="pricing-matrix" aria-label="Plan capability comparison">
|
|
1430
|
+
<table>
|
|
1431
|
+
<caption>Compare plans at a glance</caption>
|
|
1432
|
+
<thead>
|
|
1433
|
+
<tr>
|
|
1434
|
+
<th scope="col">Capability</th>
|
|
1435
|
+
<th scope="col">Free</th>
|
|
1436
|
+
<th scope="col">Pro</th>
|
|
1437
|
+
<th scope="col">Enterprise</th>
|
|
1438
|
+
</tr>
|
|
1439
|
+
</thead>
|
|
1440
|
+
<tbody>
|
|
1441
|
+
<tr>
|
|
1442
|
+
<td><strong>Best for</strong></td>
|
|
1443
|
+
<td>Solo proof that a repeat mistake can be blocked</td>
|
|
1444
|
+
<td>One operator who wants hosted sync, dashboard proof, and exports</td>
|
|
1445
|
+
<td>Teams & regulated orgs โ one person's correction protects every seat; banking, insurance, healthcare, public sector, audited workflows</td>
|
|
1446
|
+
</tr>
|
|
1447
|
+
<tr>
|
|
1448
|
+
<td><strong>Price</strong></td>
|
|
1449
|
+
<td>$0</td>
|
|
1450
|
+
<td>$19/mo or $149/yr</td>
|
|
1451
|
+
<td>Custom โ scoped after intake</td>
|
|
1452
|
+
</tr>
|
|
1453
|
+
<tr>
|
|
1454
|
+
<td><strong>Feedback captures</strong></td>
|
|
1455
|
+
<td>5/day, 25 total</td>
|
|
1456
|
+
<td>Unlimited</td>
|
|
1457
|
+
<td>Unlimited, shared across the org; custom retention and evidence policy</td>
|
|
1458
|
+
</tr>
|
|
1459
|
+
<tr>
|
|
1460
|
+
<td><strong>Active prevention rules</strong></td>
|
|
1461
|
+
<td>3 active rules</td>
|
|
1462
|
+
<td>Unlimited personal rules</td>
|
|
1463
|
+
<td>Shared org rules, policy templates, approvals, and audit export</td>
|
|
1464
|
+
</tr>
|
|
1465
|
+
<tr>
|
|
1466
|
+
<td><strong>Dashboard and proof</strong></td>
|
|
1467
|
+
<td>Local CLI evidence</td>
|
|
1468
|
+
<td>Personal dashboard, check debugger, DPO/HF exports</td>
|
|
1469
|
+
<td>Org dashboard, hosted review views, rollout proof, SIEM-ready decision trail and compliance evidence</td>
|
|
1470
|
+
</tr>
|
|
1471
|
+
<tr>
|
|
1472
|
+
<td><strong>How to start</strong></td>
|
|
1473
|
+
<td><code>npx thumbgate init</code></td>
|
|
1474
|
+
<td>Self-serve Stripe checkout</td>
|
|
1475
|
+
<td>Send one repeated workflow failure first โ intake before checkout</td>
|
|
1476
|
+
</tr>
|
|
1477
|
+
</tbody>
|
|
1478
|
+
</table>
|
|
1479
|
+
</div>
|
|
1480
|
+
<p class="pricing-note">Free proves the enforcement loop. Pro removes solo limits. Enterprise plans start through intake because shared rules, permissions, rollback paths, and rollout proof must be explicit before checkout.</p>
|
|
1405
1481
|
<div style="max-width:1080px;margin:24px auto 0;">
|
|
1406
|
-
<div class="price-card
|
|
1482
|
+
<div class="price-card enterprise" style="border:1px solid var(--cyan);background:linear-gradient(180deg, rgba(34,211,238,0.04), transparent);padding:24px 28px;">
|
|
1407
1483
|
<div style="display:flex;flex-wrap:wrap;align-items:flex-start;gap:24px;justify-content:space-between;">
|
|
1408
1484
|
<div style="flex:1 1 420px;min-width:280px;">
|
|
1409
|
-
<div class="tier" style="color:var(--cyan);">
|
|
1410
|
-
<div style="font-size:14px;color:var(--text-muted);margin:4px 0 12px;letter-spacing:0.04em;text-transform:uppercase;">Banking ยท Insurance ยท Healthcare ยท Public sector</div>
|
|
1411
|
-
<div style="font-size:18px;color:var(--text);margin-bottom:6px;font-weight:700;">
|
|
1412
|
-
<div class="price-sub" style="margin-bottom:14px;">For teams
|
|
1485
|
+
<div class="tier" style="color:var(--cyan);">Enterprise</div>
|
|
1486
|
+
<div style="font-size:14px;color:var(--text-muted);margin:4px 0 12px;letter-spacing:0.04em;text-transform:uppercase;">Engineering teams ยท Banking ยท Insurance ยท Healthcare ยท Public sector</div>
|
|
1487
|
+
<div style="font-size:18px;color:var(--text);margin-bottom:6px;font-weight:700;">Shared enforcement for teams & regulated workflows โ custom pricing</div>
|
|
1488
|
+
<div class="price-sub" style="margin-bottom:14px;">For teams that need one correction to protect every developer and agent across shared repos, CI, and approval policies โ including teams operating under DORA, the EU AI Act, HIPAA, or comparable audit pressure. Pricing is scoped after intake because the buyer needs evidence, deployment boundaries, and approval ownership before checkout.</div>
|
|
1413
1489
|
<ul style="margin-bottom:0;">
|
|
1490
|
+
<li><strong>Shared lesson database</strong> โ one hosted, shared lesson DB so one team member's correction becomes every developer's prevention rule across the org</li>
|
|
1491
|
+
<li><strong>Org dashboard</strong> โ active agents, check hit-rates, and risk surfaces across the whole team</li>
|
|
1492
|
+
<li><strong>Shared enforcement memory</strong> โ approval boundaries and rollback safety applied org-wide, not per machine</li>
|
|
1414
1493
|
<li><strong>Audit-grade decision trail</strong> โ every PreToolUse evaluation logged with the rule that fired, ready for SIEM export</li>
|
|
1415
1494
|
<li><strong>Immutable rule provenance</strong> โ each prevention rule traceable to the feedback event that generated it</li>
|
|
1416
1495
|
<li><strong>Self-managed deployment</strong> โ air-gapped or VPC-hosted; no agent state leaves your boundary</li>
|
|
1496
|
+
<li><strong>Dialogflow CX fulfillment guard</strong> โ ThumbGate's pre-action gate sits in front of your Dialogflow CX webhook fulfillment, in your own GCP tenant, so risky or repeat turns are blocked before they touch a database, CRM, or billing system (white-glove design-partner pilot)</li>
|
|
1497
|
+
<li><strong>Vertex AI / Gemini scoring, in-tenant</strong> โ risk and planning scoring runs on Gemini via Vertex (<code>npx thumbgate setup-vertex</code>); no conversational data leaves your VPC</li>
|
|
1417
1498
|
<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
1499
|
<li><strong>SSO + role separation</strong> โ operator, reviewer, and auditor roles enforced at the gate layer</li>
|
|
1500
|
+
<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
1501
|
<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
1502
|
<li><strong>Quarterly red-team review</strong> โ prompt-injection and policy-bypass exercises with written findings</li>
|
|
1421
1503
|
</ul>
|
|
1422
1504
|
</div>
|
|
1423
1505
|
<div style="flex:0 0 260px;min-width:240px;display:flex;flex-direction:column;gap:10px;">
|
|
1424
|
-
<a href="/?tier=
|
|
1506
|
+
<a href="/?tier=enterprise#workflow-sprint-intake" onclick="try{posthog.capture('enterprise_intake_click',{cta:'enterprise_contact_sales',placement:'pricing'})}catch(_){};sendFirstPartyTelemetry('enterprise_intake_started',{ctaId:'pricing_enterprise_intake',ctaPlacement:'pricing',planId:'enterprise'});" class="btn-team" style="display:block;text-align:center;background:var(--cyan);color:#06121a;font-weight:800;">Start enterprise intake โ</a>
|
|
1425
1507
|
<a href="/learn/regulated-agent-execution-boundary" style="display:block;text-align:center;padding:10px 14px;font-size:13px;color:var(--cyan);border:1px solid var(--cyan);border-radius:8px;text-decoration:none;">Read the build-vs-buy thesis first</a>
|
|
1426
1508
|
<p style="font-size:11px;color:var(--text-muted);margin:0;text-align:center;line-height:1.5;">Pricing is workflow-scoped and shared after the intake call. Annual pre-pay available.</p>
|
|
1427
1509
|
</div>
|
|
@@ -1433,21 +1515,21 @@ __GA_BOOTSTRAP__
|
|
|
1433
1515
|
|
|
1434
1516
|
<section class="compatibility" id="workflow-sprint-intake">
|
|
1435
1517
|
<div class="container">
|
|
1436
|
-
<div class="section-label">
|
|
1518
|
+
<div class="section-label">Enterprise Pilot</div>
|
|
1437
1519
|
<h2 class="section-title">Start the AI Agent Governance Sprint with one repeat failure</h2>
|
|
1438
1520
|
<p style="color:var(--text-dim);max-width:720px;margin:0 auto 16px;">This is the fastest path to first paid value for teams. Start with one repo, one workflow owner, and one blocker. The intake is designed to prove that ThumbGate reduces review churn, rollout risk, or repeated agent mistakes before a wider rollout.</p>
|
|
1439
1521
|
<div class="team-intake-panel">
|
|
1440
1522
|
<div class="team-intake-panel-head">
|
|
1441
1523
|
<div>
|
|
1442
1524
|
<h3>Tell us the workflow. Get a proof plan.</h3>
|
|
1443
|
-
<p>The highest-fit
|
|
1525
|
+
<p>The highest-fit Enterprise buyer is already feeling one repeated failure. Send the workflow first so the next step is scoped around the real blocker instead of a blind checkout.</p>
|
|
1444
1526
|
</div>
|
|
1445
1527
|
<span class="team-intake-badge">30-minute intake</span>
|
|
1446
1528
|
</div>
|
|
1447
1529
|
<div class="team-intake-recovery" aria-label="Checkout recovery path for workflow sprint buyers">
|
|
1448
1530
|
<div>
|
|
1449
|
-
<strong>
|
|
1450
|
-
<span>Send the workflow first. We will qualify the blocker, confirm whether Pro
|
|
1531
|
+
<strong>Enterprise checkout happens after scope.</strong>
|
|
1532
|
+
<span>Send the workflow first. We will qualify the blocker, confirm whether Pro or a scoped Enterprise rollout is the right next step, and keep the purchase path tied to real evidence.</span>
|
|
1451
1533
|
</div>
|
|
1452
1534
|
<a href="#team-pilot-intake-form" onclick="sendFirstPartyTelemetry('workflow_sprint_recovery_intake_clicked',{ctaId:'team_workflow_sprint_recovery_intake',ctaPlacement:'team_intake_recovery',planId:'team',offer:'workflow_hardening_sprint',reason:'scope_first'});sendGa4Event('generate_lead',{currency:'USD',value:0,method:'workflow_sprint_recovery_intake'});">Send workflow first</a>
|
|
1453
1535
|
</div>
|
|
@@ -1467,7 +1549,7 @@ __GA_BOOTSTRAP__
|
|
|
1467
1549
|
<textarea class="full" name="blocker" placeholder="What repeat mistake, rollout blocker, or team handoff failure keeps happening?" required></textarea>
|
|
1468
1550
|
<textarea class="full" name="note" placeholder="Optional context: team size, repos involved, target rollout date, or what you need to prove internally."></textarea>
|
|
1469
1551
|
<div class="full">
|
|
1470
|
-
<button type="submit" class="btn-team">Start
|
|
1552
|
+
<button type="submit" class="btn-team">Start Enterprise Pilot Intake</button>
|
|
1471
1553
|
</div>
|
|
1472
1554
|
</form>
|
|
1473
1555
|
</div>
|
|
@@ -1534,11 +1616,11 @@ __GA_BOOTSTRAP__
|
|
|
1534
1616
|
</div>
|
|
1535
1617
|
<div class="faq-item">
|
|
1536
1618
|
<div class="faq-q" role="button" tabindex="0" aria-expanded="false" onclick="toggleFaq(this)" onkeydown="handleFaqKeydown(event)">What does Pro cost?</div>
|
|
1537
|
-
<div class="faq-a">Pro is $19/mo or $149/yr for individual operators and bills immediately through Stripe.
|
|
1619
|
+
<div class="faq-a">Pro is $19/mo or $149/yr for individual operators and bills immediately through Stripe. Enterprise is custom pricing, scoped after intake, and starts through the workflow intake so scope, shared rules, and rollout proof are explicit before a rollout.</div>
|
|
1538
1620
|
</div>
|
|
1539
1621
|
<div class="faq-item">
|
|
1540
1622
|
<div class="faq-q" role="button" tabindex="0" aria-expanded="false" onclick="toggleFaq(this)" onkeydown="handleFaqKeydown(event)">Does ThumbGate support enterprise Google Cloud / Vertex AI?</div>
|
|
1541
|
-
<div class="faq-a">Yes
|
|
1623
|
+
<div class="faq-a">Yes. <code>npx thumbgate setup-vertex</code> detects your active gcloud session, enables the Vertex AI API on your Google Cloud project, and configures secure Application Default Credentials (ADC) so evaluations run within your corporate VPC. For Dialogflow CX, the Enterprise pilot puts ThumbGate's pre-action gate in front of your DFCX webhook fulfillment (deployed in your own tenant) so risky or repeat turns are blocked before they touch a database, CRM, or billing system. It's a white-glove design-partner pilot โ ThumbGate gates your own Dialogflow CX agent; it does not host a Dialogflow CX agent for you.</div>
|
|
1542
1624
|
</div>
|
|
1543
1625
|
<div class="faq-item">
|
|
1544
1626
|
<div class="faq-q" role="button" tabindex="0" aria-expanded="false" onclick="toggleFaq(this)" onkeydown="handleFaqKeydown(event)">How does ThumbGate contain enterprise API costs?</div>
|
|
@@ -1594,7 +1676,7 @@ __GA_BOOTSTRAP__
|
|
|
1594
1676
|
<a href="https://www.linkedin.com/in/igorganapolsky" target="_blank" rel="noopener">LinkedIn</a>
|
|
1595
1677
|
<a href="/blog">Blog</a>
|
|
1596
1678
|
</div>
|
|
1597
|
-
<span class="footer-copy">ยฉ 2026 ThumbGate ยท MIT License ยท npm v1.
|
|
1679
|
+
<span class="footer-copy">ยฉ 2026 ThumbGate ยท MIT License ยท npm v1.27.3</span>
|
|
1598
1680
|
</div>
|
|
1599
1681
|
</footer>
|
|
1600
1682
|
|
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.3",
|
|
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.3</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>
|