thumbgate 1.27.20 → 1.28.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.
- package/.claude-plugin/plugin.json +1 -1
- package/.well-known/mcp/server-card.json +1 -1
- package/README.md +63 -42
- package/adapters/claude/.mcp.json +2 -2
- package/adapters/mcp/server-stdio.js +1 -1
- package/adapters/opencode/opencode.json +1 -1
- package/bin/cli.js +25 -8
- package/bin/postinstall.js +1 -1
- package/config/entitlement-public-keys.json +6 -0
- package/config/gates/default.json +1 -1
- package/config/github-about.json +2 -2
- package/config/merge-quality-checks.json +3 -0
- package/package.json +12 -4
- package/public/about.html +1 -4
- package/public/agent-manager.html +6 -6
- package/public/agents-cost-savings.html +3 -3
- package/public/ai-malpractice-prevention.html +1 -1
- package/public/blog.html +12 -9
- package/public/chatgpt-app.html +3 -3
- package/public/codex-enterprise.html +3 -3
- package/public/codex-plugin.html +5 -5
- package/public/compare.html +10 -10
- package/public/dashboard.html +1 -1
- package/public/federal.html +2 -2
- package/public/guide.html +14 -14
- package/public/index.html +81 -70
- package/public/install.html +14 -14
- package/public/learn.html +4 -17
- package/public/numbers.html +2 -2
- package/public/pricing.html +12 -19
- package/public/pro.html +2 -2
- package/scripts/agent-reward-model.js +13 -0
- package/scripts/bayes-optimal-gate.js +6 -1
- package/scripts/cli-feedback.js +17 -1
- package/scripts/commercial-offer.js +3 -3
- package/scripts/entitlement.js +250 -0
- package/scripts/export-databricks-bundle.js +5 -0
- package/scripts/export-dpo-pairs.js +6 -0
- package/scripts/export-hf-dataset.js +5 -0
- package/scripts/gates-engine.js +15 -3
- package/scripts/imperative-detector.js +85 -0
- package/scripts/intervention-policy.js +13 -0
- package/scripts/pr-manager.js +9 -22
- package/scripts/pro-local-dashboard.js +198 -0
- package/scripts/risk-scorer.js +6 -0
- package/scripts/seo-gsd.js +2 -2
- package/scripts/thompson-sampling.js +11 -2
- package/src/api/server.js +81 -10
package/public/install.html
CHANGED
|
@@ -24,7 +24,7 @@ __GA_BOOTSTRAP__
|
|
|
24
24
|
"name": "ThumbGate",
|
|
25
25
|
"applicationCategory": "DeveloperApplication",
|
|
26
26
|
"operatingSystem": "macOS, Windows, Linux",
|
|
27
|
-
"softwareVersion": "1.27.
|
|
27
|
+
"softwareVersion": "1.27.20",
|
|
28
28
|
"description": "Local-first pre-action gates and feedback capture for AI coding agents.",
|
|
29
29
|
"url": "__APP_ORIGIN__/install",
|
|
30
30
|
"downloadUrl": "https://www.npmjs.com/package/thumbgate",
|
|
@@ -38,7 +38,7 @@ __GA_BOOTSTRAP__
|
|
|
38
38
|
"https://www.npmjs.com/package/thumbgate",
|
|
39
39
|
"https://open-vsx.org/extension/igorganapolsky/thumbgate",
|
|
40
40
|
"https://marketplace.visualstudio.com/items?itemName=igorganapolsky.thumbgate",
|
|
41
|
-
"https://github.com/IgorGanapolsky/ThumbGate/releases/tag/v1.27.
|
|
41
|
+
"https://github.com/IgorGanapolsky/ThumbGate/releases/tag/v1.27.20"
|
|
42
42
|
]
|
|
43
43
|
}
|
|
44
44
|
</script>
|
|
@@ -131,7 +131,7 @@ __GA_BOOTSTRAP__
|
|
|
131
131
|
</nav>
|
|
132
132
|
<header>
|
|
133
133
|
<div class="container">
|
|
134
|
-
<span class="eyebrow">Install paths verified for v1.27.
|
|
134
|
+
<span class="eyebrow">Install paths verified for v1.27.20</span>
|
|
135
135
|
<h1>Install the agent guardrail before the next repeated mistake costs real money.</h1>
|
|
136
136
|
<p class="lede">ThumbGate is live on the surfaces developers already use: npm, VS Code Marketplace, Open VSX, GitHub Release assets, and MCP Registry. If the risky workflow is already customer-visible, start with the Workflow Hardening Diagnostic instead of another generic install.</p>
|
|
137
137
|
<div class="actions">
|
|
@@ -139,10 +139,10 @@ __GA_BOOTSTRAP__
|
|
|
139
139
|
<a class="btn-secondary" href="/diagnostic?utm_source=install_page&utm_medium=owned_page&utm_campaign=marketplace_distribution">Harden one workflow</a>
|
|
140
140
|
</div>
|
|
141
141
|
<div class="proof-strip" aria-label="Verified live distribution surfaces">
|
|
142
|
-
<div class="proof"><strong>npm</strong><span>thumbgate@1.27.
|
|
142
|
+
<div class="proof"><strong>npm</strong><span>thumbgate@1.27.20</span></div>
|
|
143
143
|
<div class="proof"><strong>VS Code</strong><span>Marketplace version live</span></div>
|
|
144
144
|
<div class="proof"><strong>Open VSX</strong><span>Antigravity-compatible path</span></div>
|
|
145
|
-
<div class="proof"><strong>MCP Registry</strong><span>1.27.
|
|
145
|
+
<div class="proof"><strong>MCP Registry</strong><span>1.27.20 is latest</span></div>
|
|
146
146
|
<div class="proof"><strong>GitHub Release</strong><span>VSIX, MCPB, Codex zip</span></div>
|
|
147
147
|
</div>
|
|
148
148
|
</div>
|
|
@@ -152,11 +152,11 @@ __GA_BOOTSTRAP__
|
|
|
152
152
|
<h2>Choose the install path that matches your agent.</h2>
|
|
153
153
|
<p class="section-lede">Use the local CLI path for immediate enforcement. Use marketplace installs where your editor supports them. Use the diagnostic path when you need a human-reviewed gate map for one risky workflow.</p>
|
|
154
154
|
<div class="grid">
|
|
155
|
-
<article class="card"><h3>CLI and MCP-compatible agents</h3><p>Fastest path for Claude Code, Cursor, Codex, Gemini CLI, Amp, Cline, OpenCode, and local MCP-compatible agents.</p><pre><code>npx -y thumbgate@1.27.
|
|
156
|
-
npx -y thumbgate@1.27.
|
|
155
|
+
<article class="card"><h3>CLI and MCP-compatible agents</h3><p>Fastest path for Claude Code, Cursor, Codex, Gemini CLI, Amp, Cline, OpenCode, and local MCP-compatible agents.</p><pre><code>npx -y thumbgate@1.27.20 doctor
|
|
156
|
+
npx -y thumbgate@1.27.20 doctor --fix</code></pre></article>
|
|
157
157
|
<article class="card"><h3>Claude Desktop</h3><p>Use the npm-backed MCP server today. The Claude Desktop `.mcpb` directory submission packet is prepared separately.</p><pre><code>claude mcp add thumbgate -- npx --yes --package thumbgate thumbgate serve</code></pre></article>
|
|
158
|
-
<article class="card"><h3>Cursor</h3><p>The public Cursor Marketplace listing is not live yet. Use the CLI wiring while the dashboard submission is resolved.</p><pre><code>npx -y thumbgate@1.27.
|
|
159
|
-
<article class="card"><h3>Codex</h3><p>Use the local adapter now. Public Codex self-serve plugin publishing is not open yet, so the GitHub Release asset is the distribution proof.</p><pre><code>npx -y thumbgate@1.27.
|
|
158
|
+
<article class="card"><h3>Cursor</h3><p>The public Cursor Marketplace listing is not live yet. Use the CLI wiring while the dashboard submission is resolved.</p><pre><code>npx -y thumbgate@1.27.20 init --agent cursor</code></pre></article>
|
|
159
|
+
<article class="card"><h3>Codex</h3><p>Use the local adapter now. Public Codex self-serve plugin publishing is not open yet, so the GitHub Release asset is the distribution proof.</p><pre><code>npx -y thumbgate@1.27.20 init --agent codex</code></pre></article>
|
|
160
160
|
</div>
|
|
161
161
|
</div>
|
|
162
162
|
</section>
|
|
@@ -165,11 +165,11 @@ npx -y thumbgate@1.27.17 doctor --fix</code></pre></article>
|
|
|
165
165
|
<h2>Verified public surfaces.</h2>
|
|
166
166
|
<p class="section-lede">These are the surfaces safe to claim in public copy right now. Pending surfaces are listed so buyers do not get sent to dead marketplace pages.</p>
|
|
167
167
|
<div class="status-list">
|
|
168
|
-
<div class="status"><span class="badge live">LIVE</span><div><strong><a href="https://www.npmjs.com/package/thumbgate">npm package</a></strong><span>`thumbgate@1.27.
|
|
169
|
-
<div class="status"><span class="badge live">LIVE</span><div><strong><a href="https://marketplace.visualstudio.com/items?itemName=igorganapolsky.thumbgate">VS Code Marketplace</a></strong><span>Marketplace version-list API includes `1.27.
|
|
170
|
-
<div class="status"><span class="badge live">LIVE</span><div><strong><a href="https://open-vsx.org/extension/igorganapolsky/thumbgate">Open VSX</a></strong><span>Public registry latest version is `1.27.
|
|
171
|
-
<div class="status"><span class="badge live">LIVE</span><div><strong><a href="https://registry.modelcontextprotocol.io/v0/servers?search=thumbgate">MCP Registry</a></strong><span>Public search returns `io.github.IgorGanapolsky/thumbgate` version `1.27.
|
|
172
|
-
<div class="status"><span class="badge live">LIVE</span><div><strong><a href="https://github.com/IgorGanapolsky/ThumbGate/releases/tag/v1.27.
|
|
168
|
+
<div class="status"><span class="badge live">LIVE</span><div><strong><a href="https://www.npmjs.com/package/thumbgate">npm package</a></strong><span>`thumbgate@1.27.20` is the canonical runtime install.</span></div></div>
|
|
169
|
+
<div class="status"><span class="badge live">LIVE</span><div><strong><a href="https://marketplace.visualstudio.com/items?itemName=igorganapolsky.thumbgate">VS Code Marketplace</a></strong><span>Marketplace version-list API includes `1.27.20`.</span></div></div>
|
|
170
|
+
<div class="status"><span class="badge live">LIVE</span><div><strong><a href="https://open-vsx.org/extension/igorganapolsky/thumbgate">Open VSX</a></strong><span>Public registry latest version is `1.27.20`; use this path for VS Code-compatible IDEs that consume Open VSX.</span></div></div>
|
|
171
|
+
<div class="status"><span class="badge live">LIVE</span><div><strong><a href="https://registry.modelcontextprotocol.io/v0/servers?search=thumbgate">MCP Registry</a></strong><span>Public search returns `io.github.IgorGanapolsky/thumbgate` version `1.27.20` as latest.</span></div></div>
|
|
172
|
+
<div class="status"><span class="badge live">LIVE</span><div><strong><a href="https://github.com/IgorGanapolsky/ThumbGate/releases/tag/v1.27.20">GitHub Release</a></strong><span>Includes VSIX, Claude Desktop `.mcpb`, Claude review zip, and Codex plugin zip assets.</span></div></div>
|
|
173
173
|
<div class="status"><span class="badge pending">PENDING</span><div><strong>Claude Desktop directory</strong><span>Official MCPB form is reachable; submission needs account/email/file-upload approval.</span></div></div>
|
|
174
174
|
<div class="status"><span class="badge blocked">BLOCKED</span><div><strong>Cursor public Marketplace</strong><span>Public listing returns "Marketplace Plugin Not Found"; dashboard requires sign-in to inspect or resubmit.</span></div></div>
|
|
175
175
|
<div class="status"><span class="badge pending">PENDING</span><div><strong>Codex public directory</strong><span>OpenAI docs say public plugin publishing and self-serve management are coming soon.</span></div></div>
|
package/public/learn.html
CHANGED
|
@@ -112,12 +112,6 @@
|
|
|
112
112
|
"url": "https://thumbgate.ai/learn/from-prototype-to-production",
|
|
113
113
|
"name": "From git init to v1.17.0 in 70 days: an honest ThumbGate build log"
|
|
114
114
|
},
|
|
115
|
-
{
|
|
116
|
-
"@type": "ListItem",
|
|
117
|
-
"position": 13,
|
|
118
|
-
"url": "https://thumbgate.ai/learn/pretix-stripe-connect-marketplaces",
|
|
119
|
-
"name": "Building a Pretix + Stripe Connect Plugin for Live-Music Venues"
|
|
120
|
-
},
|
|
121
115
|
{
|
|
122
116
|
"@type": "ListItem",
|
|
123
117
|
"position": 7,
|
|
@@ -128,7 +122,7 @@
|
|
|
128
122
|
"@type": "ListItem",
|
|
129
123
|
"position": 7,
|
|
130
124
|
"url": "https://thumbgate.ai/guides/cursor-agent-guardrails",
|
|
131
|
-
"name": "Cursor Guardrails That
|
|
125
|
+
"name": "Cursor Guardrails That Catch Repeated Mistakes"
|
|
132
126
|
},
|
|
133
127
|
{
|
|
134
128
|
"@type": "ListItem",
|
|
@@ -299,7 +293,7 @@
|
|
|
299
293
|
|
|
300
294
|
<div class="container">
|
|
301
295
|
<h1>Learn: AI Agent Safety</h1>
|
|
302
|
-
<p class="hero-sub">Practical guides for developers who use AI coding agents and want them to
|
|
296
|
+
<p class="hero-sub">Practical guides for developers who use AI coding agents and want them to catch repeating the same mistakes. Every article ends with something you can ship today.</p>
|
|
303
297
|
<p class="hero-sub" style="font-size:0.85rem;margin-top:-1rem;">Updated: <time datetime="2026-04-20">2026-04-20</time> · by <a href="https://github.com/IgorGanapolsky" style="color:inherit;">Igor Ganapolsky</a></p>
|
|
304
298
|
|
|
305
299
|
<div class="article-grid">
|
|
@@ -313,7 +307,7 @@
|
|
|
313
307
|
|
|
314
308
|
<a href="/learn/stop-ai-agent-force-push" class="article-card">
|
|
315
309
|
<h3>How to Stop AI Agents From Force-Pushing to Main</h3>
|
|
316
|
-
<p>Your agent just ran git push --force on main. Again. Here is how to
|
|
310
|
+
<p>Your agent just ran git push --force on main. Again. Here is how to flag and log it by default — and hard-block it under strict enforcement mode — with a pre-action check that takes two minutes to set up.</p>
|
|
317
311
|
<span class="article-tag">Claude Code</span>
|
|
318
312
|
<span class="article-tag">Git Safety</span>
|
|
319
313
|
<span class="article-tag">Pre-Action Checks</span>
|
|
@@ -429,13 +423,6 @@
|
|
|
429
423
|
<span class="article-tag">Shipping in Public</span>
|
|
430
424
|
</a>
|
|
431
425
|
|
|
432
|
-
<a href="/learn/pretix-stripe-connect-marketplaces" class="article-card">
|
|
433
|
-
<h3>Building a Pretix + Stripe Connect Plugin for Live-Music Venues</h3>
|
|
434
|
-
<p>How to design a multi-venue Stripe Connect ticketing plugin on Pretix, keeping venues as Merchant of Record without messy platform-fee tax reporting.</p>
|
|
435
|
-
<span class="article-tag">Stripe Connect</span>
|
|
436
|
-
<span class="article-tag">Pretix</span>
|
|
437
|
-
<span class="article-tag">Case Study</span>
|
|
438
|
-
</a>
|
|
439
426
|
</div>
|
|
440
427
|
|
|
441
428
|
<h2>Popular buyer questions</h2>
|
|
@@ -498,7 +485,7 @@
|
|
|
498
485
|
</a>
|
|
499
486
|
|
|
500
487
|
<a href="/guides/cursor-agent-guardrails" class="article-card">
|
|
501
|
-
<h3>Cursor Guardrails That
|
|
488
|
+
<h3>Cursor Guardrails That Catch Repeated Mistakes</h3>
|
|
502
489
|
<p>For Cursor users who need to keep speed while adding a runtime enforcement layer that does more than prompt politely.</p>
|
|
503
490
|
<span class="article-tag">Cursor</span>
|
|
504
491
|
<span class="article-tag">Guardrails</span>
|
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.28.0",
|
|
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.28.0</div>
|
|
206
206
|
<div class="truth-note"><strong>Read this first:</strong> configured checks are inventory. Recorded blocks and warnings are usage evidence. This snapshot currently reports 0 recorded hard-block event(s) and 0 recorded warning event(s).</div>
|
|
207
207
|
|
|
208
208
|
<h2>Gate enforcement</h2>
|
package/public/pricing.html
CHANGED
|
@@ -101,8 +101,8 @@ __GA_BOOTSTRAP__
|
|
|
101
101
|
"@context": "https://schema.org",
|
|
102
102
|
"@type": "FAQPage",
|
|
103
103
|
"mainEntity": [
|
|
104
|
-
{ "@type": "Question", "name": "What does Pro add over the free CLI?", "acceptedAnswer": { "@type": "Answer", "text": "Free gives you 2 captures/day and 3 active rules, running
|
|
105
|
-
{ "@type": "Question", "name": "Does ThumbGate send my code to the cloud?", "acceptedAnswer": { "@type": "Answer", "text": "No. The CLI is local-first — no
|
|
104
|
+
{ "@type": "Question", "name": "What does Pro add over the free CLI?", "acceptedAnswer": { "@type": "Answer", "text": "Free gives you 2 captures/day and 3 active rules, running on your machine. Pro removes solo caps and adds personal recall, dashboard proof, managed adapters, and DPO export. Enterprise adds shared hosted lessons and org visibility." } },
|
|
105
|
+
{ "@type": "Question", "name": "Does ThumbGate send my code to the cloud?", "acceptedAnswer": { "@type": "Answer", "text": "No. The CLI is local-first — no source code leaves your machine. Pro adds personal proof and exports; Enterprise adds shared hosted lessons and org dashboards." } },
|
|
106
106
|
{ "@type": "Question", "name": "When should I pick Enterprise over Pro?", "acceptedAnswer": { "@type": "Answer", "text": "When one engineer's correction should protect the whole team. Enterprise shares the lesson database across the org so a fix in one repo prevents the same mistake in every repo." } },
|
|
107
107
|
{ "@type": "Question", "name": "Can I cancel anytime?", "acceptedAnswer": { "@type": "Answer", "text": "Yes. Pro and Enterprise are month-to-month with a 7-day refund window on the first charge. Cancel from the billing portal and your subscription ends at the period close." } }
|
|
108
108
|
]
|
|
@@ -178,13 +178,6 @@ __GA_BOOTSTRAP__
|
|
|
178
178
|
box-shadow: 0 0 40px var(--cyan-dim), inset 0 1px 0 rgba(34, 211, 238, 0.15);
|
|
179
179
|
position: relative;
|
|
180
180
|
}
|
|
181
|
-
.price-card.highlight::before {
|
|
182
|
-
content: "Most popular";
|
|
183
|
-
position: absolute; top: -10px; left: 50%; transform: translateX(-50%);
|
|
184
|
-
background: var(--cyan); color: var(--bg);
|
|
185
|
-
padding: 3px 12px; border-radius: 6px;
|
|
186
|
-
font-size: 11px; font-weight: 700; letter-spacing: 0.5px; text-transform: uppercase;
|
|
187
|
-
}
|
|
188
181
|
|
|
189
182
|
.tier { font-size: 13px; text-transform: uppercase; letter-spacing: 0.08em; color: var(--text-muted); font-weight: 600; margin-bottom: 8px; }
|
|
190
183
|
.price-card.highlight .tier { color: var(--cyan); }
|
|
@@ -284,12 +277,12 @@ __GA_BOOTSTRAP__
|
|
|
284
277
|
<div class="price-card">
|
|
285
278
|
<div class="tier" style="color:var(--cyan);">Free</div>
|
|
286
279
|
<div class="price">$0</div>
|
|
287
|
-
<div class="price-sub">
|
|
280
|
+
<div class="price-sub">Catch repeated mistakes daily. Forever free for solo devs.</div>
|
|
288
281
|
<ul>
|
|
289
282
|
<li>2 feedback captures/day (10 total) — enough to see the value</li>
|
|
290
283
|
<li>Up to 3 active prevention rules</li>
|
|
291
|
-
<li>All MCP integrations (Claude Code, Cursor, Codex, Gemini, Amp)</li>
|
|
292
|
-
<li>PreToolUse hook
|
|
284
|
+
<li>All MCP integrations (Claude Code, Cursor, Codex, Gemini, Amp, Cline, OpenCode)</li>
|
|
285
|
+
<li>PreToolUse hook flags and logs risky calls — hard-blocks the catastrophic classes (secret exfil, rm -rf, supply-chain) by default; full hard enforcement in strict mode</li>
|
|
293
286
|
<li>Runs 100% local — no account, no signup, no data leaves your machine</li>
|
|
294
287
|
</ul>
|
|
295
288
|
<a class="btn-install" href="/go/install?utm_source=pricing&utm_medium=free_card&cta_id=pricing_install_free&cta_placement=free_card" data-pricing-cta data-cta-id="pricing_install_free" data-cta-placement="free_card" data-tier="free" data-plan-id="free" data-price="0" onclick="try{posthog.capture('pricing_cta_click',{cta:'install_free',tier:'free',placement:'pricing_page'})}catch(_){};try{plausible('pricing_cta_click',{props:{cta:'install_free',tier:'free'}})}catch(_){}">Install free</a>
|
|
@@ -299,12 +292,12 @@ __GA_BOOTSTRAP__
|
|
|
299
292
|
<div class="tier">Pro</div>
|
|
300
293
|
<div class="price">$19<span>/mo</span></div>
|
|
301
294
|
<div class="price-sub">
|
|
302
|
-
<strong>Don't buy a tool — buy
|
|
295
|
+
<strong>Don't buy a tool — buy proof + compatibility insurance.</strong> The free CLI runs your gates locally. Pro removes the solo caps and adds the personal dashboard, recall, exports, and active adapter maintenance to stay compatible with weekly breaking updates in Claude Code, Cursor, and Cline. Shared hosted lesson databases are Enterprise.
|
|
303
296
|
</div>
|
|
304
297
|
<ul>
|
|
305
|
-
<li><strong>
|
|
306
|
-
<li><strong>Managed adapter matrix</strong> — we track runtime changes in Claude Code, Cursor, Codex, Gemini, Amp so you don't</li>
|
|
307
|
-
<li><strong>
|
|
298
|
+
<li><strong>Personal lesson recall</strong> — search and reuse your own corrections across sessions</li>
|
|
299
|
+
<li><strong>Managed adapter matrix</strong> — we track runtime changes in Claude Code, Cursor, Codex, Gemini, Amp, Cline, OpenCode so you don't</li>
|
|
300
|
+
<li><strong>Personal dashboard</strong> — see every flagged and blocked action and every rule that fired</li>
|
|
308
301
|
<li><strong>Unlimited prevention rules</strong> — free caps at 3 auto-promoted rules</li>
|
|
309
302
|
<li><strong>DPO + HuggingFace export</strong> — training data from your real corrections</li>
|
|
310
303
|
<li><strong>Auto-connect</strong> — new agent surfaces appear automatically after setup</li>
|
|
@@ -346,7 +339,7 @@ __GA_BOOTSTRAP__
|
|
|
346
339
|
<div class="faq-list">
|
|
347
340
|
<div class="faq-item">
|
|
348
341
|
<div class="faq-q">What does Pro add over the free CLI?</div>
|
|
349
|
-
<div class="faq-a">Free gives you 2 captures/day and 3 active rules, running
|
|
342
|
+
<div class="faq-a">Free gives you 2 captures/day and 3 active rules, running on your machine. Pro removes solo caps and adds personal recall, dashboard proof, managed adapters, and DPO export. Enterprise adds shared hosted lessons and org visibility.</div>
|
|
350
343
|
</div>
|
|
351
344
|
<div class="faq-item">
|
|
352
345
|
<div class="faq-q">Why not just use an enterprise AI control plane?</div>
|
|
@@ -354,7 +347,7 @@ __GA_BOOTSTRAP__
|
|
|
354
347
|
</div>
|
|
355
348
|
<div class="faq-item">
|
|
356
349
|
<div class="faq-q">Does ThumbGate send my code to the cloud?</div>
|
|
357
|
-
<div class="faq-a">No. The CLI is local-first and no source code leaves your machine. Pro
|
|
350
|
+
<div class="faq-a">No. The CLI is local-first and no source code leaves your machine. Pro adds personal proof and exports; Enterprise adds shared hosted lessons and org dashboards.</div>
|
|
358
351
|
</div>
|
|
359
352
|
<div class="faq-item">
|
|
360
353
|
<div class="faq-q">When should I pick Enterprise over Pro?</div>
|
|
@@ -366,7 +359,7 @@ __GA_BOOTSTRAP__
|
|
|
366
359
|
</div>
|
|
367
360
|
<div class="faq-item">
|
|
368
361
|
<div class="faq-q">What happens if I stop paying?</div>
|
|
369
|
-
<div class="faq-a">You keep the free CLI
|
|
362
|
+
<div class="faq-a">You keep the free CLI, capped at 3 active rules and 2 captures/day. Existing rules and captures stay on your machine. You lose the personal dashboard, managed adapters, exports, and higher limits. Shared hosted lessons and org dashboards are Enterprise.</div>
|
|
370
363
|
</div>
|
|
371
364
|
</div>
|
|
372
365
|
</div>
|
package/public/pro.html
CHANGED
|
@@ -842,7 +842,7 @@ __GA_BOOTSTRAP__
|
|
|
842
842
|
<div class="container">
|
|
843
843
|
<div class="section-label">Why operators pay</div>
|
|
844
844
|
<h2 class="section-title">Pro is not "more memory." It is a tighter operating loop around one operator's real failures.</h2>
|
|
845
|
-
<p class="section-intro">The paid story is simple: free helps you install and
|
|
845
|
+
<p class="section-intro">The paid story is simple: free helps you install and catch repeated mistakes locally. Pro helps you debug those blocks faster, export the learning, and show proof when a workflow owner asks what changed.</p>
|
|
846
846
|
<div class="grid-3">
|
|
847
847
|
<div class="feature-card">
|
|
848
848
|
<h3>Debug the exact block in minutes</h3>
|
|
@@ -880,7 +880,7 @@ __GA_BOOTSTRAP__
|
|
|
880
880
|
<div class="split-card free">
|
|
881
881
|
<div class="split-kicker">Stay on Free</div>
|
|
882
882
|
<h3>The local install is still the right first step</h3>
|
|
883
|
-
<p>If you only need local recall, Pre-Action Checks, MCP setup, and a way to
|
|
883
|
+
<p>If you only need local recall, Pre-Action Checks, MCP setup, and a way to catch repeated mistakes on one machine, keep the free install and move fast.</p>
|
|
884
884
|
<ul>
|
|
885
885
|
<li>Local-first recall, lessons, and enforcement.</li>
|
|
886
886
|
<li>No cloud account required.</li>
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
|
|
12
12
|
const path = require('node:path');
|
|
13
13
|
const { loadEpisodes } = require('./session-episode-store');
|
|
14
|
+
const { requireLearnedModelsEntitlement } = require('./entitlement');
|
|
14
15
|
|
|
15
16
|
const HIGH_RISK_TAGS = new Set([
|
|
16
17
|
'billing',
|
|
@@ -163,6 +164,10 @@ function isRlTuple(value) {
|
|
|
163
164
|
}
|
|
164
165
|
|
|
165
166
|
function buildPreferencePairs(episodes = [], options = {}) {
|
|
167
|
+
requireLearnedModelsEntitlement({
|
|
168
|
+
...(options.entitlement || {}),
|
|
169
|
+
label: 'agent reward preference-pair generation',
|
|
170
|
+
});
|
|
166
171
|
const tuples = episodes
|
|
167
172
|
.map((episode) => episodeToRlTuple(episode, options))
|
|
168
173
|
.sort((a, b) => a.reward.total - b.reward.total);
|
|
@@ -181,6 +186,10 @@ function buildPreferencePairs(episodes = [], options = {}) {
|
|
|
181
186
|
}
|
|
182
187
|
|
|
183
188
|
function rankGateCandidatesByReward(episodes = [], options = {}) {
|
|
189
|
+
requireLearnedModelsEntitlement({
|
|
190
|
+
...(options.entitlement || {}),
|
|
191
|
+
label: 'agent reward gate ranking',
|
|
192
|
+
});
|
|
184
193
|
const minOccurrences = Math.max(1, Number(options.minOccurrences || 2));
|
|
185
194
|
const buckets = new Map();
|
|
186
195
|
|
|
@@ -305,6 +314,10 @@ function allocateTestTimeCompute(action = {}) {
|
|
|
305
314
|
}
|
|
306
315
|
|
|
307
316
|
function buildRewardReport(episodes = [], options = {}) {
|
|
317
|
+
requireLearnedModelsEntitlement({
|
|
318
|
+
...(options.entitlement || {}),
|
|
319
|
+
label: 'agent reward model report',
|
|
320
|
+
});
|
|
308
321
|
const tuples = episodes.map((episode) => episodeToRlTuple(episode, options));
|
|
309
322
|
const rewards = tuples.map((tuple) => tuple.reward.total);
|
|
310
323
|
const averageReward = rewards.length ? round(rewards.reduce((sum, value) => sum + value, 0) / rewards.length) : 0;
|
|
@@ -32,6 +32,7 @@
|
|
|
32
32
|
|
|
33
33
|
const fs = require('node:fs');
|
|
34
34
|
const path = require('node:path');
|
|
35
|
+
const { requireLearnedModelsEntitlement } = require('./entitlement');
|
|
35
36
|
|
|
36
37
|
// Baseline loss matrix. `default` applies when no tag-specific override
|
|
37
38
|
// matches. Higher = more expensive. The asymmetry below reflects the
|
|
@@ -181,7 +182,11 @@ function computeBayesPosterior({ tags, riskByTag, baseRate, modelProbability } =
|
|
|
181
182
|
*
|
|
182
183
|
* This reduces to the usual Bayes classifier when both costs are equal.
|
|
183
184
|
*/
|
|
184
|
-
function bayesOptimalDecision(posterior, tags, lossMatrix = DEFAULT_LOSS_MATRIX) {
|
|
185
|
+
function bayesOptimalDecision(posterior, tags, lossMatrix = DEFAULT_LOSS_MATRIX, options = {}) {
|
|
186
|
+
requireLearnedModelsEntitlement({
|
|
187
|
+
...(options.entitlement || {}),
|
|
188
|
+
label: 'Bayes-optimal gate decisioning',
|
|
189
|
+
});
|
|
185
190
|
const pHarmful = clip(Number(posterior?.pHarmful), 0, 1);
|
|
186
191
|
const pSafe = clip(Number(posterior?.pSafe ?? 1 - pHarmful), 0, 1);
|
|
187
192
|
const cFalseAllow = resolveCost(lossMatrix?.falseAllow || {}, tags);
|
package/scripts/cli-feedback.js
CHANGED
|
@@ -29,6 +29,7 @@ const G = '\x1b[32m';
|
|
|
29
29
|
const R = '\x1b[31m';
|
|
30
30
|
const C = '\x1b[36m';
|
|
31
31
|
const M = '\x1b[35m';
|
|
32
|
+
const Y = '\x1b[33m';
|
|
32
33
|
const D = '\x1b[90m';
|
|
33
34
|
const BD = '\x1b[1m';
|
|
34
35
|
const RST = '\x1b[0m';
|
|
@@ -73,7 +74,15 @@ function processInlineFeedback({ signal, context, chatHistory, whatWentWrong, wh
|
|
|
73
74
|
const recentLesson = getRecentLesson();
|
|
74
75
|
const stats = getLessonStats();
|
|
75
76
|
|
|
76
|
-
|
|
77
|
+
// 4. If the user wrote an explicit "never …" / "always …" directive, surface
|
|
78
|
+
// an OFFER (never auto-act): "never" on a thumbs-down → offer force-gate now.
|
|
79
|
+
let forceGateHint = null;
|
|
80
|
+
try {
|
|
81
|
+
const { suggestForceGate } = require('./imperative-detector');
|
|
82
|
+
forceGateHint = suggestForceGate({ signal, text: whatWentWrong || whatWorked || context });
|
|
83
|
+
} catch { /* detector optional; never block capture on it */ }
|
|
84
|
+
|
|
85
|
+
return { feedbackResult, distillResult, recentLesson, stats, forceGateHint };
|
|
77
86
|
}
|
|
78
87
|
|
|
79
88
|
/**
|
|
@@ -100,6 +109,13 @@ function formatCliOutput(result) {
|
|
|
100
109
|
lines.push(`${R}Feedback not accepted: ${(result.feedbackResult && result.feedbackResult.reason) || 'unknown'}${RST}`);
|
|
101
110
|
}
|
|
102
111
|
|
|
112
|
+
// Explicit-directive offer (e.g. "never …" → offer immediate force-gate).
|
|
113
|
+
if (result.forceGateHint && result.forceGateHint.message) {
|
|
114
|
+
const color = result.forceGateHint.kind === 'force-gate-offer' ? Y : D;
|
|
115
|
+
lines.push('');
|
|
116
|
+
lines.push(`${color}💡 ${result.forceGateHint.message}${RST}`);
|
|
117
|
+
}
|
|
118
|
+
|
|
103
119
|
// Distilled lesson (if thumbs down)
|
|
104
120
|
if (result.distillResult) {
|
|
105
121
|
lines.push('');
|
|
@@ -67,11 +67,11 @@ function buildCaptureReceipt({ signal, feedbackId, memoryId, actionType } = {})
|
|
|
67
67
|
memoryId ? ` Local memory : ${memoryId}` : ' Local memory : saved locally',
|
|
68
68
|
actionType ? ` Rule pressure : ${actionType}` : ' Rule pressure : available for promotion',
|
|
69
69
|
' Free today : this proof protects this local machine',
|
|
70
|
-
' Pro
|
|
70
|
+
' Pro recall : keep this lesson searchable, exportable, and visible',
|
|
71
71
|
' Next proof : npx thumbgate stats',
|
|
72
72
|
' Cost proof : npx thumbgate cost',
|
|
73
73
|
'',
|
|
74
|
-
` Solo Pro : ${PRO_PRICE_LABEL} for
|
|
74
|
+
` Solo Pro : ${PRO_PRICE_LABEL} for recall, dashboard, adapters, and exports`,
|
|
75
75
|
` Upgrade : ${trackedProUrl('cli_capture_receipt', actionType || normalizedSignal.toLowerCase())}`,
|
|
76
76
|
` Enterprise : ${ENTERPRISE_PRICE_LABEL}; start with one repeated workflow failure`,
|
|
77
77
|
' https://thumbgate.ai/#workflow-sprint-intake',
|
|
@@ -105,7 +105,7 @@ function buildStatsReceipt(stats = {}) {
|
|
|
105
105
|
lines.push(` Failure pressure : ${negatives} negative ${pluralize(negatives, 'signal')}`);
|
|
106
106
|
}
|
|
107
107
|
lines.push(' Show the buyer : npx thumbgate cost');
|
|
108
|
-
lines.push(' Pro
|
|
108
|
+
lines.push(' Pro recall value : keep lessons/rules searchable, exportable, and visible');
|
|
109
109
|
lines.push(` Solo Pro : ${trackedProUrl('cli_stats_receipt', 'proof_seen')}`);
|
|
110
110
|
lines.push(' Enterprise : https://thumbgate.ai/#workflow-sprint-intake');
|
|
111
111
|
lines.push('');
|