thumbgate 1.27.2 → 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.
@@ -263,7 +263,7 @@
263
263
  <div class="panel" id="chatPanel" style="margin-bottom:20px;">
264
264
  <div style="display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin-bottom:10px;">
265
265
  <h2 style="margin:0;">💬 Chat with your data</h2>
266
- <span style="font-size:13px;color:var(--text-muted);">Ask about your captured lessons, mistakes, and rules — answered by Gemini, grounded only in your data.</span>
266
+ <span style="font-size:13px;color:var(--text-muted);">Ask about your gates, blocks, feedback, and lessons — answered <strong>locally from your own data</strong>, no cloud. (An optional BYO model only kicks in for open-ended questions.)</span>
267
267
  </div>
268
268
  <div id="chatMessages" style="max-height:360px;overflow-y:auto;margin-bottom:12px;display:none;padding-right:4px;"></div>
269
269
  <div style="display:flex;gap:8px;">
@@ -271,8 +271,8 @@
271
271
  <button class="btn" id="chatSend" onclick="sendChat()">Ask</button>
272
272
  </div>
273
273
  <div id="chatHint" style="font-size:12px;color:var(--text-muted);margin-top:8px;display:flex;align-items:center;gap:8px;">
274
- <span>Powered by your captured lessons + Gemini/Perplexity hybrid (local-cloud).</span>
275
- <input type="password" id="geminiKeyInput" placeholder="Set GEMINI_API_KEY..." style="background:var(--bg-raised); border:1px solid var(--border); border-radius:4px; padding:4px 8px; color:var(--text); font-family:var(--mono); font-size:11px; flex:1; max-width: 250px;" onkeydown="if(event.key==='Enter'){event.preventDefault();saveGeminiKey();}" />
274
+ <span>Powered by local dashboard data. Optional Gemini/Perplexity keys only expand open-ended analysis.</span>
275
+ <input type="password" id="geminiKeyInput" placeholder="Optional GEMINI_API_KEY..." style="background:var(--bg-raised); border:1px solid var(--border); border-radius:4px; padding:4px 8px; color:var(--text); font-family:var(--mono); font-size:11px; flex:1; max-width: 250px;" onkeydown="if(event.key==='Enter'){event.preventDefault();saveGeminiKey();}" />
276
276
  <button class="btn-outline" style="padding:4px 10px;font-size:11px;border-radius:4px;" onclick="saveGeminiKey()">Save</button>
277
277
  </div>
278
278
  </div>
@@ -308,7 +308,7 @@
308
308
  <div class="tab active" onclick="switchTab('search')">🔍 Search Memories</div>
309
309
  <div class="tab" onclick="switchTab('gates')">🛡️ Active Gates</div>
310
310
  <div class="tab" onclick="switchTab('team')">👥 Team</div>
311
- <div class="tab" onclick="switchTab('enterprise')">🏢 Enterprise Data Chat</div>
311
+ <div class="tab" onclick="switchTab('enterprise')">🏢 Governed Data Chat</div>
312
312
  <div class="tab" onclick="switchTab('ai-inventory')">🧬 AI Inventory</div>
313
313
  <div class="tab" onclick="switchTab('generated')">🧩 Generated Views</div>
314
314
  <div class="tab" onclick="switchTab('settings')">⚙️ Policy Origins</div>
@@ -416,25 +416,25 @@
416
416
  <!-- ENTERPRISE CHAT TAB -->
417
417
  <div class="tab-content" id="tab-enterprise">
418
418
  <div class="templates-section">
419
- <h2>Enterprise Data Chat</h2>
420
- <p class="template-summary">Ask questions over local ThumbGate feedback, lessons, gates, team posture, and Vertex/DFCX readiness. This is a governed local data-query panel with a DFCX-compatible guard before data access; it does not claim a live Google Dialogflow CX agent unless deployment evidence is configured.</p>
419
+ <h2>Governed Data Chat</h2>
420
+ <p class="template-summary">Ask questions over your local ThumbGate data (lessons, raw feedback via LanceDB vectors, gate stats, receipts). Uses local retrieval plus your configured LLM, including open-source/local endpoints through <code>THUMBGATE_LOCAL_LLM_ENDPOINT</code>. Dialogflow is not the chatbot layer; DFCX/Vertex cards are optional deployment-readiness checks for buyers who run their own Google agent stack.</p>
421
421
  <div class="enterprise-chat-layout">
422
422
  <div class="panel">
423
423
  <h3>Chat With Local ThumbGate Data</h3>
424
- <textarea class="enterprise-chat-box" id="enterpriseChatPrompt" placeholder="Ask: What mistakes are recurring? Which gates blocked the most? Is Vertex configured? What is our DFCX readiness?"></textarea>
424
+ <textarea class="enterprise-chat-box" id="enterpriseChatPrompt" placeholder="Ask: What mistakes are recurring? Which gates blocked the most? Are we running local-only or cloud-integrated?"></textarea>
425
425
  <div style="display:flex;gap:10px;align-items:center;margin-top:12px;flex-wrap:wrap;">
426
426
  <button class="btn" id="enterpriseChatBtn" onclick="sendEnterpriseChat()">Ask ThumbGate</button>
427
427
  <button class="btn-outline" onclick="setEnterprisePrompt('Which gates are blocking risky actions?')">Gates</button>
428
428
  <button class="btn-outline" onclick="setEnterprisePrompt('What feedback mistakes keep repeating?')">Feedback</button>
429
- <button class="btn-outline" onclick="setEnterprisePrompt('Is Vertex and DFCX configured?')">Cloud</button>
429
+ <button class="btn-outline" onclick="setEnterprisePrompt('Are we running local-only or cloud-integrated?')">Runtime</button>
430
430
  </div>
431
431
  <div class="enterprise-answer" id="enterpriseChatAnswer">Connect your dashboard, then ask about local ThumbGate data.</div>
432
432
  <div class="enterprise-source-list" id="enterpriseChatSources"></div>
433
433
  </div>
434
434
  <div class="panel">
435
- <h3>Enterprise Readiness</h3>
435
+ <h3>Runtime Readiness</h3>
436
436
  <div class="inventory-tools" id="enterpriseStatusCards"><div class="loading">Loading enterprise status...</div></div>
437
- <div class="template-summary" style="margin-top:14px;margin-bottom:0;">Live DFCX proof must come from the Conversational Agents console, deployed webhook URL, Cloud Run logs, or the Dialogflow CX REST API <code style="font-family:var(--mono);font-size:12px;">projects.locations.agents</code>. Without that proof, the panel stays local-only.</div>
437
+ <div class="template-summary" style="margin-top:14px;margin-bottom:0;">The chat itself is local RAG plus your LLM. Open-source/local models are the default enterprise path; DFCX/Vertex readiness is optional evidence for teams that already operate Google agents in their own tenancy.</div>
438
438
  </div>
439
439
  </div>
440
440
  </div>
@@ -1308,7 +1308,7 @@ function renderDashboardData(data) {
1308
1308
  renderTemplates(data.templateLibrary || {});
1309
1309
  renderInsights(data);
1310
1310
  loadAiInventory();
1311
- loadEnterpriseDialogflowStatus();
1311
+ loadEnterpriseDataChatStatus();
1312
1312
  }
1313
1313
 
1314
1314
  async function loadAiInventory() {
@@ -1813,28 +1813,29 @@ function renderEnterpriseStatus(status) {
1813
1813
  if (!target) return;
1814
1814
  var vertex = status && status.vertex ? status.vertex : {};
1815
1815
  var dfcx = status && status.dfcx ? status.dfcx : {};
1816
- var connectionMode = dfcx.liveAgentConfigured
1817
- ? 'Dialogflow CX configured'
1818
- : (vertex.configured ? 'Vertex configured' : 'Local-only');
1816
+ var localLlm = status && status.chat ? status.chat.localLlmEndpointConfigured : false;
1817
+ var connectionMode = localLlm
1818
+ ? 'Local/open-source LLM configured'
1819
+ : (dfcx.liveAgentConfigured ? 'Google agent guard configured' : (vertex.configured ? 'Vertex routing configured' : 'Local deterministic fallback'));
1819
1820
  var rows = [
1820
- { name: 'Connection mode', value: connectionMode, note: dfcx.liveAgentConfigured ? 'Live DFCX evidence is present in env.' : (vertex.configured ? 'Vertex routing is configured; DFCX still needs live-agent proof.' : 'Local data Q&A only; no cloud agent claim.') },
1821
- { name: 'Vertex routing', value: vertex.configured ? 'Configured' : 'Not configured', note: vertex.projectId ? ('Project: ' + vertex.projectId + ' · ' + (vertex.location || '')) : 'Run setup-vertex or set GOOGLE_VERTEX_PROJECT.' },
1822
- { name: 'DFCX live agent', value: dfcx.liveAgentConfigured ? 'Env present' : 'Not proven', note: dfcx.verification || 'Verify with REST/console evidence.' },
1823
- { name: 'Fulfillment proxy', value: dfcx.fulfillmentProxyConfigured ? 'Configured' : 'Not configured', note: 'Set THUMBGATE_DFCX_FULFILLMENT_URL for a deployed proxy.' },
1824
- { name: 'gcloud CX command', value: 'Unsupported', note: 'Do not use the old alpha gcloud CX command group; use REST API or console.' }
1821
+ { name: 'Chat runtime', value: connectionMode, note: localLlm ? 'Using THUMBGATE_LOCAL_LLM_ENDPOINT for local/open-source inference.' : 'Local deterministic summaries work without cloud credentials; configure a local LLM for generated answers.' },
1822
+ { name: 'Data boundary', value: 'Local by default', note: 'Dashboard answers are grounded in local ThumbGate data and do not require Google Cloud.' },
1823
+ { name: 'Vertex adapter', value: vertex.configured ? 'Configured' : 'Optional', note: vertex.projectId ? ('Project: ' + vertex.projectId + ' · ' + (vertex.location || '')) : 'Only needed when the buyer chooses Google-hosted routing.' },
1824
+ { name: 'Dialogflow guard adapter', value: dfcx.liveAgentConfigured ? 'Configured' : 'Optional', note: dfcx.verification || 'Only needed for customer-owned Dialogflow CX agent deployments.' },
1825
+ { name: 'Legacy gcloud CX command', value: 'Unsupported', note: 'Do not use the old alpha gcloud CX command group; use REST API or console for DFCX proof.' }
1825
1826
  ];
1826
1827
  target.innerHTML = rows.map(function(row) {
1827
1828
  return '<div class="inventory-row"><div><div class="inventory-name">' + escHtml(row.name) + '</div><div class="inventory-subtitle">' + escHtml(row.note) + '</div></div><span class="remediation-action">' + escHtml(row.value) + '</span></div>';
1828
1829
  }).join('');
1829
1830
  }
1830
1831
 
1831
- async function loadEnterpriseDialogflowStatus() {
1832
+ async function loadEnterpriseDataChatStatus() {
1832
1833
  if (!API_KEY || isDemo) {
1833
1834
  renderEnterpriseStatus({ vertex: {}, dfcx: { verification: 'Connect to load local status.' } });
1834
1835
  return;
1835
1836
  }
1836
1837
  try {
1837
- var res = await fetch('/v1/enterprise/dialogflow/status', { headers: getHeaders() });
1838
+ var res = await fetch('/v1/enterprise/data-chat/status', { headers: getHeaders() });
1838
1839
  if (!res.ok) throw new Error('status unavailable');
1839
1840
  renderEnterpriseStatus(await res.json());
1840
1841
  } catch (err) {
@@ -1864,26 +1865,27 @@ async function sendEnterpriseChat() {
1864
1865
  }
1865
1866
  button.disabled = true;
1866
1867
  answer.className = 'enterprise-answer';
1867
- answer.textContent = 'Running the data-access guard and reading local dashboard data...';
1868
+ answer.textContent = 'Local RAG (LanceDB + lessons) plus your LLM...';
1868
1869
  sources.innerHTML = '';
1869
1870
  try {
1870
- var res = await fetch('/v1/enterprise/dialogflow/chat', {
1871
+ var res = await fetch('/v1/chat', {
1871
1872
  method: 'POST',
1872
1873
  headers: getHeaders(),
1873
- body: JSON.stringify({ prompt: prompt })
1874
+ body: JSON.stringify({ question: prompt })
1874
1875
  });
1875
1876
  var data = await res.json();
1876
- if (!res.ok) throw new Error(data.detail || data.error || 'chat failed');
1877
- answer.className = 'enterprise-answer' + (data.blocked ? ' blocked' : '');
1878
- answer.textContent = data.answer || 'No answer returned.';
1877
+ if (!res.ok) throw new Error(data.detail || data.error || data.message || 'chat failed');
1878
+ answer.className = 'enterprise-answer';
1879
+ answer.textContent = data.answer || data.message || 'No answer returned.';
1879
1880
  var list = Array.isArray(data.sources) ? data.sources : [];
1880
1881
  sources.innerHTML = list.map(function(source) {
1881
- return '<span class="enterprise-source">' + escHtml(source) + '</span>';
1882
+ var label = typeof source === 'string' ? source : (source && (source.title || source.id || ''));
1883
+ return '<span class="enterprise-source">' + escHtml(label) + '</span>';
1882
1884
  }).join('');
1883
- renderEnterpriseStatus(data.status || {});
1885
+ loadEnterpriseDataChatStatus();
1884
1886
  } catch (err) {
1885
1887
  answer.className = 'enterprise-answer blocked';
1886
- answer.textContent = err.message || 'Enterprise chat failed.';
1888
+ answer.textContent = err.message || 'Chat failed. Configure a local LLM endpoint or API key for RAG.';
1887
1889
  } finally {
1888
1890
  button.disabled = false;
1889
1891
  }
package/public/guide.html CHANGED
@@ -330,7 +330,7 @@ npx thumbgate init --agent gemini</code></pre>
330
330
  <tr><td>Auto-generates rules</td><td>Yes — from repeated failures</td><td>No</td><td>No</td></tr>
331
331
  <tr><td>Agent support</td><td>Claude Code, Codex, Gemini, Amp, Cursor, OpenCode</td><td>Claude Code, Cursor, Windsurf, Cline</td><td>Claude, Cursor</td></tr>
332
332
  <tr><td>Install</td><td><code>npx thumbgate init</code></td><td><code>npx speclock setup</code></td><td>Cloud signup</td></tr>
333
- <tr><td>Cost</td><td>Free (Pro $19/mo or $149/yr, Team rollout $49/seat/mo)</td><td>Free</td><td>Free tier + paid</td></tr>
333
+ <tr><td>Cost</td><td>Free (Pro $19/mo or $149/yr, Enterprise custom pricing)</td><td>Free</td><td>Free tier + paid</td></tr>
334
334
  </table>
335
335
 
336
336
  <h2>Common Scenarios</h2>
@@ -379,7 +379,7 @@ npx thumbgate init --agent gemini</code></pre>
379
379
  <a rel="nofollow noopener noreferrer" target="_blank" href="https://buy.stripe.com/00w14neyUcXA5pL5e33sI0e" class="cta cta-secondary">Pay $499 diagnostic</a>
380
380
  <a rel="nofollow noopener noreferrer" target="_blank" href="https://buy.stripe.com/fZu9AT76saPsg4pbCr3sI0f" class="cta cta-secondary">Pay $1500 sprint</a>
381
381
  <a href="https://thumbgate.ai/#workflow-sprint-intake" class="cta cta-secondary">Send workflow first</a>
382
- <p style="color:var(--muted); font-size:0.85rem;">Free: 5 captures/day, 25 total captures, 3 active prevention rules, hook blocking. Pro: hosted sync, dashboard, recall, lesson search, unlimited captures/rules, DPO export. Team: intake first, then $49/seat/mo with a 3-seat minimum.</p>
382
+ <p style="color:var(--muted); font-size:0.85rem;">Free: 5 captures/day, 25 total captures, 3 active prevention rules, hook blocking. Pro: hosted sync, dashboard, recall, lesson search, unlimited captures/rules, DPO export. Enterprise: intake first, then custom pricing scoped to your rollout.</p>
383
383
 
384
384
  </div>
385
385
  </body>
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.27.2">
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": "Team",
120
- "price": "49",
119
+ "name": "Enterprise",
121
120
  "priceCurrency": "USD",
122
- "description": "Intake-led team rollout with a workflow hardening sprint, shared enforcement memory, org dashboard visibility, approval boundaries, release confidence, Docker Sandboxes guidance for risky local autonomy, and pilot support for teams shipping AI-generated changes",
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
  {
@@ -752,9 +751,9 @@ __GA_BOOTSTRAP__
752
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>
753
752
  </div>
754
753
  <div class="offer-route">
755
- <strong>Team workflow: Start with intake</strong>
756
- <p>Proof before rollout.</p>
757
- <a href="#workflow-sprint-intake" onclick="sendFirstPartyTelemetry('workflow_sprint_intake_started',{ctaId:'router_workflow_sprint',ctaPlacement:'offer_router',offer:'workflow_sprint'});">Send the workflow first →</a>
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>
758
757
  </div>
759
758
  <div class="offer-route">
760
759
  <strong>Still evaluating: Free CLI</strong>
@@ -828,7 +827,7 @@ __GA_BOOTSTRAP__
828
827
  <div hidden aria-hidden="true" data-thumbgate-test-anchors style="display:none">
829
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>
830
829
  <span data-anchor="dashboard-preview">dashboard-preview What your Pro dashboard looks like check:no-force-push</span>
831
- <span data-anchor="team-intake-form">Start Team 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" Team 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>
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>
832
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>
833
832
  </div>
834
833
  </div>
@@ -1353,6 +1352,33 @@ __GA_BOOTSTRAP__
1353
1352
  <div class="container">
1354
1353
  <div class="section-label">Pricing</div>
1355
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 &amp; regulated orgs</td></tr>
1378
+ </tbody>
1379
+ </table>
1380
+ </div>
1381
+
1356
1382
  <div class="pricing-grid">
1357
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;">
1358
1384
  <div class="tier" style="color:var(--cyan);">Free</div>
@@ -1399,23 +1425,6 @@ __GA_BOOTSTRAP__
1399
1425
  <p style="font-size:11px;color:var(--text-muted);margin-top:8px;text-align:center;">Billed today · cancel anytime.</p>
1400
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;">
1401
1427
  </div>
1402
- <div class="price-card team">
1403
- <div class="tier">Team</div>
1404
- <div class="price">$49<span style="font-size:16px;color:var(--text-dim)">/seat/mo</span></div>
1405
- <div class="price-sub">Shared enforcement memory for one team workflow first.</div>
1406
- <ul>
1407
- <li>Everything in Pro for each seat</li>
1408
- <li>Shared lesson database for Team seats, with export/import and shared workflow rules</li>
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>
1411
- <li>Hosted review views for team verification evidence</li>
1412
- <li>Check template library for deploys, publish, refunds, and DB work</li>
1413
- <li>Workflow hardening sprint intake for approval boundaries and rollback safety</li>
1414
- <li>Email support during pilot rollout</li>
1415
- </ul>
1416
- <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>
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>
1418
- </div>
1419
1428
  </div>
1420
1429
  <div class="pricing-matrix" aria-label="Plan capability comparison">
1421
1430
  <table>
@@ -1425,8 +1434,7 @@ __GA_BOOTSTRAP__
1425
1434
  <th scope="col">Capability</th>
1426
1435
  <th scope="col">Free</th>
1427
1436
  <th scope="col">Pro</th>
1428
- <th scope="col">Team</th>
1429
- <th scope="col">Regulated</th>
1437
+ <th scope="col">Enterprise</th>
1430
1438
  </tr>
1431
1439
  </thead>
1432
1440
  <tbody>
@@ -1434,60 +1442,59 @@ __GA_BOOTSTRAP__
1434
1442
  <td><strong>Best for</strong></td>
1435
1443
  <td>Solo proof that a repeat mistake can be blocked</td>
1436
1444
  <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>
1445
+ <td>Teams &amp; regulated orgs — one person's correction protects every seat; banking, insurance, healthcare, public sector, audited workflows</td>
1439
1446
  </tr>
1440
1447
  <tr>
1441
1448
  <td><strong>Price</strong></td>
1442
1449
  <td>$0</td>
1443
1450
  <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>
1451
+ <td>Custom scoped after intake</td>
1446
1452
  </tr>
1447
1453
  <tr>
1448
1454
  <td><strong>Feedback captures</strong></td>
1449
1455
  <td>5/day, 25 total</td>
1450
1456
  <td>Unlimited</td>
1451
- <td>Unlimited shared across seats</td>
1452
- <td>Custom retention and evidence policy</td>
1457
+ <td>Unlimited, shared across the org; custom retention and evidence policy</td>
1453
1458
  </tr>
1454
1459
  <tr>
1455
1460
  <td><strong>Active prevention rules</strong></td>
1456
1461
  <td>3 active rules</td>
1457
1462
  <td>Unlimited personal rules</td>
1458
- <td>Shared org rules plus per-seat rules</td>
1459
- <td>Policy templates, approvals, and audit export</td>
1463
+ <td>Shared org rules, policy templates, approvals, and audit export</td>
1460
1464
  </tr>
1461
1465
  <tr>
1462
1466
  <td><strong>Dashboard and proof</strong></td>
1463
1467
  <td>Local CLI evidence</td>
1464
1468
  <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>
1469
+ <td>Org dashboard, hosted review views, rollout proof, SIEM-ready decision trail and compliance evidence</td>
1467
1470
  </tr>
1468
1471
  <tr>
1469
1472
  <td><strong>How to start</strong></td>
1470
1473
  <td><code>npx thumbgate init</code></td>
1471
1474
  <td>Self-serve Stripe checkout</td>
1472
- <td>Send one repeated workflow failure first</td>
1473
- <td>Start regulated workflow review</td>
1475
+ <td>Send one repeated workflow failure first — intake before checkout</td>
1474
1476
  </tr>
1475
1477
  </tbody>
1476
1478
  </table>
1477
1479
  </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>
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>
1479
1481
  <div style="max-width:1080px;margin:24px auto 0;">
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;">
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;">
1481
1483
  <div style="display:flex;flex-wrap:wrap;align-items:flex-start;gap:24px;justify-content:space-between;">
1482
1484
  <div style="flex:1 1 420px;min-width:280px;">
1483
- <div class="tier" style="color:var(--cyan);">Regulated</div>
1484
- <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>
1485
- <div style="font-size:18px;color:var(--text);margin-bottom:6px;font-weight:700;">Regulated workflow review</div>
1486
- <div class="price-sub" style="margin-bottom:14px;">For teams operating AI coding agents 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>
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 &amp; 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>
1487
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>
1488
1493
  <li><strong>Audit-grade decision trail</strong> — every PreToolUse evaluation logged with the rule that fired, ready for SIEM export</li>
1489
1494
  <li><strong>Immutable rule provenance</strong> — each prevention rule traceable to the feedback event that generated it</li>
1490
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>
1491
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>
1492
1499
  <li><strong>SSO + role separation</strong> — operator, reviewer, and auditor roles enforced at the gate layer</li>
1493
1500
  <li><strong>Enterprise Data Chat</strong> — local ThumbGate data Q&amp;A with Dialogflow CX / Vertex-ready governance; live cloud-agent claims require deployment evidence first</li>
@@ -1496,7 +1503,7 @@ __GA_BOOTSTRAP__
1496
1503
  </ul>
1497
1504
  </div>
1498
1505
  <div style="flex:0 0 260px;min-width:240px;display:flex;flex-direction:column;gap:10px;">
1499
- <a href="/?tier=regulated#workflow-sprint-intake" onclick="try{posthog.capture('regulated_intake_click',{cta:'regulated_contact_sales',placement:'pricing'})}catch(_){};sendFirstPartyTelemetry('regulated_intake_started',{ctaId:'pricing_regulated_intake',ctaPlacement:'pricing',planId:'regulated'});" class="btn-team" style="display:block;text-align:center;background:var(--cyan);color:#06121a;font-weight:800;">Start regulated intake →</a>
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>
1500
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>
1501
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>
1502
1509
  </div>
@@ -1508,21 +1515,21 @@ __GA_BOOTSTRAP__
1508
1515
 
1509
1516
  <section class="compatibility" id="workflow-sprint-intake">
1510
1517
  <div class="container">
1511
- <div class="section-label">Team Pilot</div>
1518
+ <div class="section-label">Enterprise Pilot</div>
1512
1519
  <h2 class="section-title">Start the AI Agent Governance Sprint with one repeat failure</h2>
1513
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>
1514
1521
  <div class="team-intake-panel">
1515
1522
  <div class="team-intake-panel-head">
1516
1523
  <div>
1517
1524
  <h3>Tell us the workflow. Get a proof plan.</h3>
1518
- <p>The highest-fit Team 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>
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>
1519
1526
  </div>
1520
1527
  <span class="team-intake-badge">30-minute intake</span>
1521
1528
  </div>
1522
1529
  <div class="team-intake-recovery" aria-label="Checkout recovery path for workflow sprint buyers">
1523
1530
  <div>
1524
- <strong>Team checkout happens after scope.</strong>
1525
- <span>Send the workflow first. We will qualify the blocker, confirm whether Pro, Team, or a scoped rollout is the right next step, and keep the purchase path tied to real evidence.</span>
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>
1526
1533
  </div>
1527
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>
1528
1535
  </div>
@@ -1542,7 +1549,7 @@ __GA_BOOTSTRAP__
1542
1549
  <textarea class="full" name="blocker" placeholder="What repeat mistake, rollout blocker, or team handoff failure keeps happening?" required></textarea>
1543
1550
  <textarea class="full" name="note" placeholder="Optional context: team size, repos involved, target rollout date, or what you need to prove internally."></textarea>
1544
1551
  <div class="full">
1545
- <button type="submit" class="btn-team">Start Team Pilot Intake</button>
1552
+ <button type="submit" class="btn-team">Start Enterprise Pilot Intake</button>
1546
1553
  </div>
1547
1554
  </form>
1548
1555
  </div>
@@ -1609,11 +1616,11 @@ __GA_BOOTSTRAP__
1609
1616
  </div>
1610
1617
  <div class="faq-item">
1611
1618
  <div class="faq-q" role="button" tabindex="0" aria-expanded="false" onclick="toggleFaq(this)" onkeydown="handleFaqKeydown(event)">What does Pro cost?</div>
1612
- <div class="faq-a">Pro is $19/mo or $149/yr for individual operators and bills immediately through Stripe. Team is $49/seat/mo with a 3-seat minimum and starts through the workflow intake so scope, shared rules, and rollout proof are explicit before a team rollout.</div>
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>
1613
1620
  </div>
1614
1621
  <div class="faq-item">
1615
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>
1616
- <div class="faq-a">Yes! ThumbGate features a zero-friction enterprise setup path via <code>npx thumbgate setup-vertex</code>. This command automatically detects your active gcloud session, enables the Vertex AI API on your Google Cloud project, and configures secure Application Default Credentials (ADC) to route all evaluations within your corporate VPC.</div>
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>
1617
1624
  </div>
1618
1625
  <div class="faq-item">
1619
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>
@@ -1669,7 +1676,7 @@ __GA_BOOTSTRAP__
1669
1676
  <a href="https://www.linkedin.com/in/igorganapolsky" target="_blank" rel="noopener">LinkedIn</a>
1670
1677
  <a href="/blog">Blog</a>
1671
1678
  </div>
1672
- <span class="footer-copy">© 2026 ThumbGate · MIT License · npm v1.27.2</span>
1679
+ <span class="footer-copy">© 2026 ThumbGate · MIT License · npm v1.27.3</span>
1673
1680
  </div>
1674
1681
  </footer>
1675
1682
 
@@ -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.27.2",
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.27.2</div>
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>