thumbgate 1.4.6 โ†’ 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "thumbgate-marketplace",
3
- "version": "1.4.6",
3
+ "version": "1.5.0",
4
4
  "owner": {
5
5
  "name": "Igor Ganapolsky",
6
6
  "email": "ig5973700@gmail.com"
@@ -13,7 +13,7 @@
13
13
  "source": "npm",
14
14
  "package": "thumbgate"
15
15
  },
16
- "version": "1.4.6",
16
+ "version": "1.5.0",
17
17
  "author": {
18
18
  "name": "Igor Ganapolsky"
19
19
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "thumbgate",
3
3
  "description": "Type ๐Ÿ‘ or ๐Ÿ‘Ž on any agent action. ThumbGate captures it, distills a lesson, and blocks the pattern from repeating. One thumbs-down = the agent physically cannot make that mistake again. 33 pre-action gates, budget enforcement, self-protection, and NIST/SOC2 compliance tags.",
4
- "version": "1.4.6",
4
+ "version": "1.5.0",
5
5
  "author": {
6
6
  "name": "Igor Ganapolsky"
7
7
  },
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "thumbgate",
3
- "version": "1.4.6",
3
+ "version": "1.5.0",
4
4
  "description": "ThumbGate โ€” ๐Ÿ‘๐Ÿ‘Ž feedback that teaches your AI agent. Thumbs down a mistake, it never happens again.",
5
5
  "homepage": "https://github.com/IgorGanapolsky/thumbgate",
6
6
  "transport": "stdio",
package/README.md CHANGED
@@ -18,6 +18,17 @@ ThumbGate checks risky commands, file edits, deploys, API calls, and other agent
18
18
 
19
19
  **Running Codex?** **[Download the standalone Codex plugin bundle](https://github.com/IgorGanapolsky/ThumbGate/releases/latest/download/thumbgate-codex-plugin.zip)** ยท **[Codex install guide](plugins/codex-profile/INSTALL.md)**
20
20
 
21
+ ## First-dollar activation path
22
+
23
+ If someone is not already bought into ThumbGate, do not lead with architecture. Lead with one repeated mistake.
24
+
25
+ 1. **Show the pain:** open the **[ThumbGate GPT](https://thumbgate-production.up.railway.app/go/gpt?utm_source=github&utm_medium=readme&utm_campaign=first_dollar_activation&cta_id=readme_first_dollar_open_gpt&cta_placement=readme_first_dollar)** and paste the bad answer, risky command, deploy, PR action, or agent plan before it runs again.
26
+ 2. **Capture the lesson:** type `thumbs down:` or `thumbs up:` with one concrete sentence. Native ChatGPT rating buttons are not the ThumbGate capture path; typed feedback is.
27
+ 3. **Enforce the repeat:** run `npx thumbgate init` where the agent executes so the lesson can become a Pre-Action Gate instead of another reminder.
28
+ 4. **Upgrade only after proof:** Solo Pro is for the dashboard, DPO export, proof-ready evidence, and higher capture limits after one real blocked repeat. Team starts with the Workflow Hardening Sprint around one repeated failure, one owner, and one proof review.
29
+
30
+ The buying question is simple: **what repeated AI mistake would be worth blocking before the next tool call?**
31
+
21
32
  ## ThumbGate GPT: start here
22
33
 
23
34
  **Use ThumbGate in ChatGPT now:** **[Open the live ThumbGate GPT](https://thumbgate-production.up.railway.app/go/gpt?utm_source=github&utm_medium=readme&utm_campaign=gpt_intro&cta_id=readme_intro_open_gpt&cta_placement=readme_intro)**, paste the action your AI agent wants to run, and ask whether to allow, block, or checkpoint it before the mistake becomes expensive.
@@ -3,7 +3,7 @@
3
3
  - `chatgpt/openapi.yaml`: import into GPT Actions.
4
4
  - `gemini/function-declarations.json`: Gemini function-calling definitions.
5
5
  - `mcp/server-stdio.js`: underlying local MCP stdio server implementation.
6
- - `claude/.mcp.json`: example Claude Code MCP config using `npx --yes --package thumbgate@1.4.6 thumbgate serve`.
6
+ - `claude/.mcp.json`: example Claude Code MCP config using `npx --yes --package thumbgate@1.5.0 thumbgate serve`.
7
7
  - `codex/config.toml`: example Codex MCP profile section using the same version-pinned portable launcher.
8
8
  - `amp/skills/thumbgate-feedback/SKILL.md`: Amp skill template.
9
9
  - `opencode/opencode.json`: portable OpenCode MCP profile using the same version-pinned portable launcher.
@@ -2,13 +2,13 @@
2
2
  "mcpServers": {
3
3
  "thumbgate": {
4
4
  "command": "npx",
5
- "args": ["--yes", "--package", "thumbgate@1.4.6", "thumbgate", "serve"]
5
+ "args": ["--yes", "--package", "thumbgate@1.5.0", "thumbgate", "serve"]
6
6
  }
7
7
  },
8
8
  "hooks": {
9
9
  "preToolUse": {
10
10
  "command": "npx",
11
- "args": ["--yes", "--package", "thumbgate@1.4.6", "thumbgate", "gate-check"]
11
+ "args": ["--yes", "--package", "thumbgate@1.5.0", "thumbgate", "gate-check"]
12
12
  }
13
13
  }
14
14
  }
@@ -1,9 +1,9 @@
1
1
  # Codex MCP profile (copy into ~/.codex/config.toml or merge section)
2
2
  [mcp_servers.thumbgate]
3
3
  command = "npx"
4
- args = ["--yes", "--package", "thumbgate@1.4.6", "thumbgate", "serve"]
4
+ args = ["--yes", "--package", "thumbgate@1.5.0", "thumbgate", "serve"]
5
5
 
6
6
  # Hard PreToolUse hook for Codex
7
7
  [hooks.pre_tool_use]
8
8
  command = "npx"
9
- args = ["--yes", "--package", "thumbgate@1.4.6", "thumbgate", "gate-check"]
9
+ args = ["--yes", "--package", "thumbgate@1.5.0", "thumbgate", "gate-check"]
@@ -124,7 +124,7 @@ const {
124
124
  finalizeSession: finalizeFeedbackSession,
125
125
  } = require('../../scripts/feedback-session');
126
126
 
127
- const SERVER_INFO = { name: 'thumbgate-mcp', version: '1.4.6' };
127
+ const SERVER_INFO = { name: 'thumbgate-mcp', version: '1.5.0' };
128
128
  const COMMERCE_CATEGORIES = [
129
129
  'product_recommendation',
130
130
  'brand_compliance',
@@ -7,7 +7,7 @@
7
7
  "npx",
8
8
  "--yes",
9
9
  "--package",
10
- "thumbgate@1.4.6",
10
+ "thumbgate@1.5.0",
11
11
  "thumbgate",
12
12
  "serve"
13
13
  ],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "thumbgate",
3
- "version": "1.4.6",
3
+ "version": "1.5.0",
4
4
  "description": "Self-improving agent governance: type thumbs-up or thumbs-down on any AI agent action. ThumbGate turns every mistake into a prevention rule and blocks the pattern from repeating. One thumbs-down, never again. 33 pre-action gates, budget enforcement, and self-protection for Claude Code, Cursor, Codex, Gemini CLI, and Amp.",
5
5
  "homepage": "https://thumbgate-production.up.railway.app",
6
6
  "repository": {
package/public/index.html CHANGED
@@ -298,6 +298,14 @@ __GA_BOOTSTRAP__
298
298
  .hero-install .cmd { color: var(--cyan); }
299
299
  .hero-install .copy-hint { font-size: 11px; color: var(--text-muted); font-family: var(--font); margin-left: 8px; }
300
300
  .hero-install .copied { color: var(--green); }
301
+ .first-gate-card { max-width: 820px; margin: 0 auto 28px; text-align: left; border: 1px solid rgba(34,211,238,0.28); background: linear-gradient(135deg, rgba(34,211,238,0.08) 0%, rgba(74,222,128,0.06) 100%); border-radius: 14px; padding: 22px; box-shadow: 0 18px 60px rgba(0,0,0,0.22); }
302
+ .first-gate-card h2 { font-size: clamp(22px, 3vw, 30px); line-height: 1.15; margin-bottom: 8px; letter-spacing: -0.025em; }
303
+ .first-gate-card p { max-width: none; margin: 0 0 16px; color: var(--text-muted); font-size: 15px; }
304
+ .first-gate-steps { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; margin-top: 16px; }
305
+ .first-gate-step { border: 1px solid var(--border); border-radius: 10px; background: rgba(10,10,11,0.62); padding: 14px; }
306
+ .first-gate-step strong { display: block; color: var(--cyan); margin-bottom: 6px; }
307
+ .first-gate-step p { font-size: 13px; line-height: 1.5; margin: 0; }
308
+ .first-gate-example { font-family: var(--mono); color: var(--green); background: rgba(74,222,128,0.08); border: 1px solid rgba(74,222,128,0.24); border-radius: 8px; padding: 10px 12px; font-size: 12px; margin-top: 12px; overflow-x: auto; }
301
309
 
302
310
  /* SOCIAL PROOF BAR */
303
311
  .proof-bar { display: flex; justify-content: center; flex-wrap: wrap; gap: 24px; font-size: 13px; color: var(--text-muted); padding: 0 0 8px; }
@@ -447,6 +455,7 @@ __GA_BOOTSTRAP__
447
455
  @media (max-width: 700px) {
448
456
  .steps { grid-template-columns: 1fr; }
449
457
  .compatibility-grid { grid-template-columns: 1fr; }
458
+ .first-gate-steps { grid-template-columns: 1fr; }
450
459
  .gpt-steps { grid-template-columns: 1fr; }
451
460
  .seo-grid { grid-template-columns: 1fr; }
452
461
  .pricing-grid { grid-template-columns: 1fr; }
@@ -497,9 +506,9 @@ __GA_BOOTSTRAP__
497
506
  <section class="hero">
498
507
  <div class="container">
499
508
  <div class="hero-thumbs">๐Ÿ‘๐Ÿ‘Ž</div>
500
- <div class="hero-badge">โ— Stop costly AI mistakes before they run</div>
501
- <h1>Stop AI agents before<br>they make costly mistakes.</h1>
502
- <p style="font-size:18px;color:var(--text-muted);max-width:640px;margin:0 auto 20px;line-height:1.6;">Paste a risky command, file edit, deploy, payment, API call, or email into the live ThumbGate GPT for allow, block, or checkpoint guidance.<br><strong style="color:var(--text)">Then enforce locally with <code>npx thumbgate init</code> where your agent actually executes.</strong></p>
509
+ <div class="hero-badge">โ— Block your first repeated AI mistake in 5 minutes</div>
510
+ <h1>Stop the same AI mistake<br>before it runs again.</h1>
511
+ <p style="font-size:18px;color:var(--text-muted);max-width:660px;margin:0 auto 20px;line-height:1.6;">Open the ThumbGate GPT, paste the answer or action that went wrong, then type a concrete <code>thumbs down:</code> or <code>thumbs up:</code> lesson.<br><strong style="color:var(--text)">Install locally with <code>npx thumbgate init</code> when you want that lesson enforced before the next agent tool call.</strong></p>
503
512
  <div class="hero-signals">
504
513
  <div class="signal-pill signal-down">๐Ÿ‘Ž Prevent expensive mistakes: force-pushes, destructive SQL, bad deploys</div>
505
514
  <div class="signal-pill signal-up">โœ… Fix it once, then block the repeat before the next tool call</div>
@@ -520,6 +529,26 @@ __GA_BOOTSTRAP__
520
529
  </div>
521
530
  <p style="font-size:13px;color:var(--text-muted);margin:16px auto 0;max-width:660px;">No, you do not have to chat inside the GPT forever. The GPT is advice and checkpointing; local hooks do the hard blocking for Claude Code, Cursor, Codex, Gemini, Amp, OpenCode, and MCP-compatible agents.</p>
522
531
  <p style="font-size:13px;color:var(--text-muted);margin:8px auto 28px;max-width:560px;">Free local CLI proves the enforcement loop on one machine. Pro adds personal enforcement proof, the gate debugger, DPO export, and a dashboard. Team shares the gates across seats. <a href="#pricing" style="color:var(--cyan);text-decoration:none;">See all plans โ†’</a></p>
532
+ <div class="first-gate-card" id="first-gate">
533
+ <div class="section-label" style="text-align:left;margin-bottom:8px;">First-Dollar Activation Path</div>
534
+ <h2>Prove one blocked repeat before asking anyone to buy.</h2>
535
+ <p>The fastest path to revenue is not another feature. It is one person proving ThumbGate prevents one repeated mistake they already care about.</p>
536
+ <div class="first-gate-steps">
537
+ <div class="first-gate-step">
538
+ <strong>1. Open the GPT</strong>
539
+ <p>Paste the bad answer, command, deploy, PR action, or agent plan before it runs again.</p>
540
+ </div>
541
+ <div class="first-gate-step">
542
+ <strong>2. Type the signal</strong>
543
+ <p>Use <code>thumbs down:</code> for the mistake or <code>thumbs up:</code> for the pattern worth repeating. Native ChatGPT rating buttons are not the ThumbGate capture path.</p>
544
+ </div>
545
+ <div class="first-gate-step">
546
+ <strong>3. Enforce the lesson</strong>
547
+ <p>Run <code>npx thumbgate init</code>. Upgrade to Pro when you need the dashboard, proof, exports, or more captures.</p>
548
+ </div>
549
+ </div>
550
+ <div class="first-gate-example">thumbs down: the answer ignored my request for exact files and tests; next time include file paths, commands, and verification evidence.</div>
551
+ </div>
523
552
  <div class="proof-bar">
524
553
  <a href="/guide" rel="noopener">CLI-first setup guide โ†’</a>
525
554
  <span class="dot"></span>
@@ -564,8 +593,8 @@ __GA_BOOTSTRAP__
564
593
  <div class="container">
565
594
  <div class="gpt-panel">
566
595
  <div class="section-label" style="text-align:left;">ChatGPT Entry Point ยท Live ThumbGate GPT for ChatGPT</div>
567
- <h2>Open the GPT. Check the action. Turn the lesson into a gate.</h2>
568
- <p>ThumbGate should meet users where they already ask AI for help. The live GPT is the lowest-friction way to prevent an expensive AI mistake before installing anything.</p>
596
+ <h2>Open the GPT. Give typed thumbs feedback. Turn the lesson into a gate.</h2>
597
+ <p>ThumbGate should meet users where they already ask AI for help. The live GPT is the lowest-friction way to capture a useful thumbs-up/down lesson, check a risky action, and prove the enforcement loop before installing anything.</p>
569
598
  <div class="gpt-steps">
570
599
  <div class="gpt-step">
571
600
  <strong>1. Try the live GPT</strong>
@@ -573,7 +602,7 @@ __GA_BOOTSTRAP__
573
602
  </div>
574
603
  <div class="gpt-step">
575
604
  <strong>2. Save the signal</strong>
576
- <p>Reply with <code>thumbs up:</code> or <code>thumbs down:</code> plus one concrete sentence. One signal becomes one remembered rule.</p>
605
+ <p>Reply in chat with <code>thumbs up:</code> or <code>thumbs down:</code> plus one concrete sentence. Do not rely on ChatGPT's native rating buttons for ThumbGate memory.</p>
577
606
  </div>
578
607
  <div class="gpt-step">
579
608
  <strong>3. Enforce locally</strong>
@@ -584,7 +613,7 @@ __GA_BOOTSTRAP__
584
613
  <a href="/go/gpt?utm_source=website&utm_medium=gpt_section&utm_campaign=chatgpt_gpt&cta_id=gpt_path_open_gpt&cta_placement=gpt_section" class="btn-gpt-page" target="_blank" rel="noopener" onclick="posthog.capture('gpt_path_cta_click',{cta:'open_gpt'})">Open ThumbGate GPT</a>
585
614
  <a href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/adapters/chatgpt/INSTALL.md" class="btn-free" target="_blank" rel="noopener" style="display:inline-flex;align-items:center;padding:12px 20px;border-radius:8px;">ChatGPT Actions setup</a>
586
615
  </div>
587
- <p class="gpt-note"><strong>Plain English rule:</strong> ChatGPT is the discovery and memory surface for advice, checkpointing, and typed feedback capture. The hard Reliability Gateway still runs in the local agent or CI lane.</p>
616
+ <p class="gpt-note"><strong>Plain English rule:</strong> ChatGPT is the discovery and memory surface for advice, checkpointing, and typed feedback capture. One typed signal becomes one remembered rule. The hard Reliability Gateway still runs in the local agent or CI lane.</p>
588
617
  </div>
589
618
  </div>
590
619
  </section>
@@ -722,7 +751,7 @@ __GA_BOOTSTRAP__
722
751
  <!-- HOW IT WORKS -->
723
752
  <section class="how-it-works" id="how-it-works">
724
753
  <div class="container">
725
- <div class="section-label">New in v1.4.6</div>
754
+ <div class="section-label">New in v1.5.0</div>
726
755
  <h2 class="section-title">Three steps to stop repeated AI failures</h2>
727
756
  <div class="steps">
728
757
  <div class="step">
@@ -872,7 +901,7 @@ __GA_BOOTSTRAP__
872
901
  <div class="tier" style="color:var(--cyan);">Free</div>
873
902
  <div class="price">$0</div>
874
903
  <div class="price-sub">Forever free ยท CLI-first local enforcement for one developer</div>
875
- <p style="font-size:13px;color:#aaa;margin-bottom:16px;">For solo developers who want to stop the same agent mistake from showing up twice and prove local value before a team rollout conversation exists.</p>
904
+ <p style="font-size:13px;color:#aaa;margin-bottom:16px;">For solo developers who want to stop the same agent mistake from showing up twice and prove one blocked repeat before a team rollout conversation exists.</p>
876
905
  <ul>
877
906
  <li>3 feedback captures/day ยท 5 lesson searches/day ยท unlimited recall</li>
878
907
  <li>5 auto-promoted gates plus the core safety policy</li>
@@ -920,7 +949,7 @@ __GA_BOOTSTRAP__
920
949
  </ul>
921
950
  <div class="trial-badge" style="background:var(--cyan);color:#000;display:inline-block;padding:4px 12px;border-radius:12px;font-size:12px;font-weight:700;margin-bottom:12px;">7-DAY FREE TRIAL</div>
922
951
  <a href="/go/pro?utm_source=website&utm_medium=pricing_card&utm_campaign=pro_upgrade&cta_id=pricing_pro_upgrade&cta_placement=pricing&plan_id=pro&landing_path=%2F" class="btn-pro" onclick="posthog.capture('pricing_cta_click',{cta:'pro_upgrade',plan:'pro'})" style="display:block;width:100%;text-align:center;padding:12px;font-size:15px;">Upgrade to Pro โ€” $19/mo</a>
923
- <p style="font-size:11px;color:#666;margin-top:8px;">Start with the free CLI. Upgrade when you hit the 3 captures/day limit and need the dashboard, DPO export, and export-ready evidence.</p>
952
+ <p style="font-size:11px;color:#666;margin-top:8px;">Start with the free CLI. Upgrade after one real blocked repeat when you hit the 3 captures/day limit or need dashboard proof, DPO export, and export-ready evidence.</p>
924
953
  </div>
925
954
  <div class="price-card team">
926
955
  <div class="tier">Team</div>
@@ -1068,7 +1097,7 @@ __GA_BOOTSTRAP__
1068
1097
  <a href="https://www.linkedin.com/in/igorganapolsky" target="_blank" rel="noopener">LinkedIn</a>
1069
1098
  <a href="/blog">Blog</a>
1070
1099
  </div>
1071
- <span class="footer-copy">ยฉ 2026 Max Smith KDP LLC ยท MIT License ยท v1.4.6</span>
1100
+ <span class="footer-copy">ยฉ 2026 Max Smith KDP LLC ยท MIT License ยท v1.5.0</span>
1072
1101
  </div>
1073
1102
  </footer>
1074
1103
 
@@ -817,8 +817,8 @@ function renderUpgradeWall(containerId) {
817
817
  '<div style="text-align:center;background:rgba(10,10,15,0.92);border:1px solid #333;border-radius:12px;padding:28px 36px;">' +
818
818
  '<div style="font-size:20px;font-weight:700;color:#fff;margin-bottom:8px;">Unlock your full lessons</div>' +
819
819
  '<div style="color:#aaa;margin-bottom:16px;">Pro shows your real prevention rules, timeline, and insights.</div>' +
820
- '<a href="https://buy.stripe.com/5kQ4gzbmI9Lo6tPayn3sI06" target="_blank" rel="noopener" ' +
821
- 'style="display:inline-block;background:#b85c2d;color:#fff;padding:10px 24px;border-radius:8px;text-decoration:none;font-weight:700;">Upgrade to Pro โ€” $19/mo</a>' +
820
+ '<a href="https://buy.stripe.com/7sYcN5bmIf5IcSd8qf3sI0a" target="_blank" rel="noopener" ' +
821
+ 'style="display:inline-block;background:#b85c2d;color:#fff;padding:10px 24px;border-radius:8px;text-decoration:none;font-weight:700;">Start 7-day free trial</a>' +
822
822
  '<div style="color:#666;font-size:12px;margin-top:10px;">npx thumbgate pro --activate --key=YOUR_KEY</div>' +
823
823
  '</div></div>';
824
824
  el.appendChild(wall);
@@ -2292,8 +2292,14 @@ async function handleWebhook(rawBody, signature) {
2292
2292
  if (LOCAL_MODE()) return { handled: false, reason: 'local_mode' };
2293
2293
  let event;
2294
2294
  try {
2295
- const stripe = getStripeClient();
2296
- event = stripe.webhooks.constructEvent(rawBody, signature, CONFIG.STRIPE_WEBHOOK_SECRET);
2295
+ if (CONFIG.STRIPE_WEBHOOK_SECRET) {
2296
+ const stripe = getStripeClient();
2297
+ event = stripe.webhooks.constructEvent(rawBody, signature, CONFIG.STRIPE_WEBHOOK_SECRET);
2298
+ } else {
2299
+ // No webhook secret configured โ€” signature was already checked by verifyWebhookSignature
2300
+ // (which is also lenient when no secret). Parse the raw body directly.
2301
+ event = JSON.parse(rawBody.toString('utf-8'));
2302
+ }
2297
2303
  } catch (err) {
2298
2304
  return { handled: false, reason: 'invalid_signature', error: err.message };
2299
2305
  }
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- const PRO_MONTHLY_PAYMENT_LINK = 'https://buy.stripe.com/5kQ4gzbmI9Lo6tPayn3sI06';
3
+ const PRO_MONTHLY_PAYMENT_LINK = 'https://buy.stripe.com/7sYcN5bmIf5IcSd8qf3sI0a';
4
4
  const PRO_ANNUAL_PAYMENT_LINK = 'https://buy.stripe.com/3cI8wPfCYaPs2dzdKz3sI07';
5
5
 
6
6
  const PRO_MONTHLY_PRICE_ID = 'price_1THQY7GGBpd520QYHoS7RG0J';