thumbgate 1.34.1 โ 1.34.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/plugin.json +1 -1
- package/.well-known/mcp/server-card.json +1 -1
- package/adapters/claude/.mcp.json +2 -2
- package/adapters/forge/forge.yaml +3 -3
- package/adapters/mcp/server-stdio.js +1 -1
- package/adapters/opencode/opencode.json +1 -1
- package/package.json +3 -3
- package/public/index.html +2 -2
- package/public/numbers.html +2 -2
- package/scripts/financial-control-plane.js +23 -0
- package/scripts/gates-engine.js +7 -0
- package/server.json +2 -2
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "thumbgate",
|
|
3
3
|
"description": "One ๐ becomes a hard rule the agent cannot bypass. Captures thumbs-down feedback, distills it into PreToolUse Pre-Action Checks, enforced across every future Claude Code session.",
|
|
4
|
-
"version": "1.34.
|
|
4
|
+
"version": "1.34.2",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Igor Ganapolsky",
|
|
7
7
|
"email": "ig5973700@gmail.com",
|
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
"mcpServers": {
|
|
3
3
|
"thumbgate": {
|
|
4
4
|
"command": "npx",
|
|
5
|
-
"args": ["--yes", "--package", "thumbgate@1.34.
|
|
5
|
+
"args": ["--yes", "--package", "thumbgate@1.34.2", "thumbgate", "serve"]
|
|
6
6
|
}
|
|
7
7
|
},
|
|
8
8
|
"hooks": {
|
|
9
9
|
"preToolUse": {
|
|
10
10
|
"command": "npx",
|
|
11
|
-
"args": ["--yes", "--package", "thumbgate@1.34.
|
|
11
|
+
"args": ["--yes", "--package", "thumbgate@1.34.2", "thumbgate", "gate-check"]
|
|
12
12
|
}
|
|
13
13
|
}
|
|
14
14
|
}
|
|
@@ -9,12 +9,12 @@ version: "1"
|
|
|
9
9
|
skills:
|
|
10
10
|
thumbgate-gate-check:
|
|
11
11
|
description: "ThumbGate PreToolUse gate โ blocks known-bad tool calls"
|
|
12
|
-
command: "npx --yes --package thumbgate@1.34.
|
|
12
|
+
command: "npx --yes --package thumbgate@1.34.2 thumbgate gate-check"
|
|
13
13
|
trigger: pre_tool_use
|
|
14
14
|
|
|
15
15
|
thumbgate-feedback:
|
|
16
16
|
description: "ThumbGate feedback capture โ logs user prompt context"
|
|
17
|
-
command: "npx --yes --package thumbgate@1.34.
|
|
17
|
+
command: "npx --yes --package thumbgate@1.34.2 thumbgate hook-auto-capture"
|
|
18
18
|
trigger: user_prompt
|
|
19
19
|
|
|
20
20
|
mcp:
|
|
@@ -23,6 +23,6 @@ mcp:
|
|
|
23
23
|
args:
|
|
24
24
|
- "--yes"
|
|
25
25
|
- "--package"
|
|
26
|
-
- "thumbgate@1.34.
|
|
26
|
+
- "thumbgate@1.34.2"
|
|
27
27
|
- "thumbgate"
|
|
28
28
|
- "serve"
|
|
@@ -328,7 +328,7 @@ const {
|
|
|
328
328
|
finalizeSession: finalizeFeedbackSession,
|
|
329
329
|
} = require('../../scripts/feedback-session');
|
|
330
330
|
|
|
331
|
-
const SERVER_INFO = { name: 'thumbgate-mcp', version: '1.34.
|
|
331
|
+
const SERVER_INFO = { name: 'thumbgate-mcp', version: '1.34.2' };
|
|
332
332
|
const COMMERCE_CATEGORIES = [
|
|
333
333
|
'product_recommendation',
|
|
334
334
|
'brand_compliance',
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "thumbgate",
|
|
3
|
-
"version": "1.34.
|
|
3
|
+
"version": "1.34.2",
|
|
4
4
|
"description": "ThumbGate Pre-Action Checks self-improve from ranked lessons and repeated failures, hard-block detected secret leaks, and block matches in strict mode.",
|
|
5
5
|
"homepage": "https://thumbgate.ai",
|
|
6
6
|
"repository": {
|
|
@@ -614,7 +614,7 @@
|
|
|
614
614
|
"test:evolution": "node --test tests/workspace-evolver.test.js",
|
|
615
615
|
"test:watcher": "node --test tests/jsonl-watcher.test.js",
|
|
616
616
|
"test:autoresearch": "node --test tests/autoresearch.test.js",
|
|
617
|
-
"test:ops": "node --test tests/qa-scenario-planner.test.js tests/adk-consolidator.test.js tests/anthropic-partner-strategy.test.js tests/auto-promote-gates.test.js tests/auto-wire-hooks.test.js tests/claude-skill.test.js tests/codegraph-context.test.js tests/commercial-signals.test.js tests/decision-journal.test.js tests/delegation-runtime.test.js tests/disagreement-mining.test.js tests/failure-diagnostics.test.js tests/financial-control-plane.test.js tests/gate-stats.test.js tests/gates-engine-upgrade-cta.test.js tests/git-hook-installer.test.js tests/github-billing.test.js tests/intervention-policy.test.js tests/markdown-escape.test.js tests/mcp-tools-gates.test.js tests/native-messaging-audit.test.js tests/project-bayes-e2e.test.js tests/project-bayes.test.js tests/rate-limiter.test.js tests/schedule-manager.test.js tests/session-handoff.test.js tests/skill-generator.test.js tests/smart-learning.test.js tests/spike-and-sink.test.js tests/stripe-revenue.test.js tests/stripe-webhook-route.test.js tests/stripe-webhook-rotation.test.js tests/train-from-feedback.test.js tests/workflow-hardening-sprint.test.js tests/workflow-sentinel.test.js tests/test-suite-parity.test.js tests/a2ui-engine.test.js tests/webhook-delivery.test.js tests/auto-context-packs.test.js tests/daily-block-cap.test.js tests/auto-promote-regression-gate.test.js",
|
|
617
|
+
"test:ops": "node --test tests/qa-scenario-planner.test.js tests/adk-consolidator.test.js tests/anthropic-partner-strategy.test.js tests/auto-promote-gates.test.js tests/auto-wire-hooks.test.js tests/claude-skill.test.js tests/codegraph-context.test.js tests/commercial-signals.test.js tests/decision-journal.test.js tests/delegation-runtime.test.js tests/disagreement-mining.test.js tests/failure-diagnostics.test.js tests/financial-control-plane.test.js tests/financial-spend-attack-matrix.test.js tests/gate-stats.test.js tests/gates-engine-upgrade-cta.test.js tests/git-hook-installer.test.js tests/github-billing.test.js tests/intervention-policy.test.js tests/markdown-escape.test.js tests/mcp-tools-gates.test.js tests/native-messaging-audit.test.js tests/project-bayes-e2e.test.js tests/project-bayes.test.js tests/rate-limiter.test.js tests/schedule-manager.test.js tests/session-handoff.test.js tests/skill-generator.test.js tests/smart-learning.test.js tests/spike-and-sink.test.js tests/stripe-revenue.test.js tests/stripe-webhook-route.test.js tests/stripe-webhook-rotation.test.js tests/train-from-feedback.test.js tests/workflow-hardening-sprint.test.js tests/workflow-sentinel.test.js tests/test-suite-parity.test.js tests/a2ui-engine.test.js tests/webhook-delivery.test.js tests/auto-context-packs.test.js tests/daily-block-cap.test.js tests/auto-promote-regression-gate.test.js",
|
|
618
618
|
"test:session-analyzer": "node --test tests/session-analyzer.test.js",
|
|
619
619
|
"test:tessl": "node --test tests/tessl-export.test.js",
|
|
620
620
|
"test:gates": "node --test --test-concurrency=1 tests/gate-templates.test.js tests/gates-engine.test.js tests/claim-verification.test.js tests/universal-claim-evaluator.test.js tests/secret-scanner.test.js tests/secret-fixture-safety.test.js tests/prompt-guard.test.js tests/audit-trail.test.js tests/profile-router.test.js tests/workflow-sentinel.test.js tests/docker-sandbox-planner.test.js tests/mcp-tools-suggest-fix.test.js tests/deny-network-egress-pattern.test.js tests/git-pathspec-scope.test.js tests/git-global-option-bypass.test.js tests/gate-evasion-matrix.test.js",
|
|
@@ -996,7 +996,7 @@
|
|
|
996
996
|
"@google/genai": {
|
|
997
997
|
"protobufjs": "7.6.5"
|
|
998
998
|
},
|
|
999
|
-
"brace-expansion": "5.0.
|
|
999
|
+
"brace-expansion": "5.0.9",
|
|
1000
1000
|
"onnxruntime-web": {
|
|
1001
1001
|
"protobufjs": "7.6.5"
|
|
1002
1002
|
},
|
package/public/index.html
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
6
|
<meta name="generator" content="ThumbGate">
|
|
7
7
|
<meta name="author" content="Igor Ganapolsky">
|
|
8
|
-
<meta name="thumbgate-version" content="1.34.
|
|
8
|
+
<meta name="thumbgate-version" content="1.34.2">
|
|
9
9
|
__GOOGLE_SITE_VERIFICATION_META__
|
|
10
10
|
<link rel="icon" type="image/png" href="/thumbgate-icon.png">
|
|
11
11
|
<link rel="canonical" href="__APP_ORIGIN__/">
|
|
@@ -942,7 +942,7 @@ next decision recorded before execution</pre>
|
|
|
942
942
|
|
|
943
943
|
<footer>
|
|
944
944
|
<div class="shell footer-inner">
|
|
945
|
-
<span>ThumbGate ยท MIT License ยท npm v1.34.
|
|
945
|
+
<span>ThumbGate ยท MIT License ยท npm v1.34.2</span>
|
|
946
946
|
<div class="footer-links">
|
|
947
947
|
<a href="https://github.com/IgorGanapolsky/ThumbGate" target="_blank" rel="noopener">GitHub</a>
|
|
948
948
|
<a href="/guide">Technical setup</a>
|
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.34.
|
|
28
|
+
"softwareVersion": "1.34.2",
|
|
29
29
|
"url": "https://thumbgate-production.up.railway.app/numbers",
|
|
30
30
|
"dateModified": "2026-08-03",
|
|
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-08-03 ยท Version 1.34.
|
|
205
|
+
<div class="freshness">Updated: 2026-08-03 ยท Version 1.34.2</div>
|
|
206
206
|
<div class="truth-note"><strong>Read this first:</strong> configured checks are inventory. Recorded blocks and warnings are usage evidence. This snapshot currently reports 0 recorded hard-block event(s) and 0 recorded warning event(s).</div>
|
|
207
207
|
|
|
208
208
|
<h2>Gate enforcement</h2>
|
|
@@ -78,6 +78,17 @@ const ECONOMIC_ACTION_PATTERNS = [
|
|
|
78
78
|
/\b(?:finalize|pay|refund|send|update)\s+(?:a\s+)?(?:payout|refund|subscription|top-?up|transfer)\b/i,
|
|
79
79
|
];
|
|
80
80
|
|
|
81
|
+
// Host/path URL surfaces that open paid checkout or plan-upgrade flows.
|
|
82
|
+
// These are NOT covered by prose patterns alone (e.g. `open https://app.apollo.io/#/settings/plans/upgrade`
|
|
83
|
+
// or WebFetch { url: 'https://checkout.stripe.com/...' }) โ Apollo $588 incident class.
|
|
84
|
+
const ECONOMIC_URL_PATTERNS = [
|
|
85
|
+
/(?:https?:\/\/)?(?:www\.)?checkout\.stripe\.com\b/i,
|
|
86
|
+
/(?:https?:\/\/)?(?:www\.)?buy\.stripe\.com\b/i,
|
|
87
|
+
/(?:https?:\/\/)?(?:www\.)?billing\.stripe\.com\b/i,
|
|
88
|
+
/(?:https?:\/\/)?(?:www\.)?app\.apollo\.io\b[^\s"'`]*?(?:plans|upgrade|billing|checkout|subscription)/i,
|
|
89
|
+
/(?:https?:\/\/)?(?:www\.)?apollo\.io\b[^\s"'`]*?(?:plans|upgrade|billing|checkout|subscription)/i,
|
|
90
|
+
];
|
|
91
|
+
|
|
81
92
|
const SCREEN_TOOL_PATTERN = /(?:browser|computer|playwright|puppeteer|selenium|click|tap|press)/i;
|
|
82
93
|
const SCREEN_MUTATION_PATTERN = /(?:click|double[_ -]?click|tap|press|select|submit|confirm|activate)/i;
|
|
83
94
|
const SCREEN_OBSERVATION_PATTERN = /(?:screenshot|snapshot)/i;
|
|
@@ -343,13 +354,24 @@ function detectEconomicAction(toolName, toolInput = {}) {
|
|
|
343
354
|
const screenMutationProse = isDeclaredScreenMutation(normalizedToolName, toolInput)
|
|
344
355
|
? [toolInput.goal, toolInput.description, toolInput.prompt, metadata.context]
|
|
345
356
|
: [];
|
|
357
|
+
// WebFetch / browser navigate often put the spend surface only in url/uri/href.
|
|
358
|
+
const navigationTargets = [
|
|
359
|
+
toolInput.url,
|
|
360
|
+
toolInput.uri,
|
|
361
|
+
toolInput.href,
|
|
362
|
+
toolInput.link,
|
|
363
|
+
toolInput.navigate,
|
|
364
|
+
toolInput.target,
|
|
365
|
+
].map((value) => String(value || '')).join(' ');
|
|
346
366
|
const combined = [
|
|
347
367
|
normalizedToolName.replace(/[_-]+/g, ' '),
|
|
348
368
|
command,
|
|
349
369
|
toolInput.action,
|
|
350
370
|
toolInput.operation,
|
|
371
|
+
navigationTargets,
|
|
351
372
|
...screenMutationProse,
|
|
352
373
|
].map((value) => String(value || '')).join(' ');
|
|
374
|
+
if (ECONOMIC_URL_PATTERNS.some((pattern) => pattern.test(combined))) return true;
|
|
353
375
|
return ECONOMIC_ACTION_PATTERNS.some((pattern) => pattern.test(combined));
|
|
354
376
|
}
|
|
355
377
|
|
|
@@ -1581,6 +1603,7 @@ function financialError(message) {
|
|
|
1581
1603
|
|
|
1582
1604
|
module.exports = {
|
|
1583
1605
|
ECONOMIC_ACTION_PATTERNS,
|
|
1606
|
+
ECONOMIC_URL_PATTERNS,
|
|
1584
1607
|
createPurchaseRequisition,
|
|
1585
1608
|
buildActionAuthorization,
|
|
1586
1609
|
detectEconomicAction,
|
package/scripts/gates-engine.js
CHANGED
|
@@ -164,6 +164,10 @@ const UNCONDITIONAL_HARD_FLOOR_GATE_IDS = new Set([
|
|
|
164
164
|
'secret-exfiltration',
|
|
165
165
|
'security-vuln-scan',
|
|
166
166
|
'slopsquat-guard',
|
|
167
|
+
// Money path: even if a refactor later routes financial denials through
|
|
168
|
+
// applyEnforcementPosture, never demote spend blocks to warn-by-default.
|
|
169
|
+
// Apollo $588 incident class (2026-08).
|
|
170
|
+
'financial-control',
|
|
167
171
|
TASK_SCOPE_LEASE_EXPIRED_GATE_ID,
|
|
168
172
|
...SELF_PROTECT_HARD_FLOOR_GATE_IDS,
|
|
169
173
|
]);
|
|
@@ -175,12 +179,15 @@ const UNCONDITIONAL_HARD_FLOOR_GATE_IDS = new Set([
|
|
|
175
179
|
// `git reset --hard`, or `git clean -f` silently allowed through. These four
|
|
176
180
|
// map directly to CLAUDE.md's own hard-block list and must never be subject
|
|
177
181
|
// to the daily cap discount, regardless of tier or strict-mode setting.
|
|
182
|
+
// financial-control is included for the same reason: a daily-cap discount on
|
|
183
|
+
// checkout/subscription spends would re-open the never-spend interlock.
|
|
178
184
|
const CATASTROPHIC_DECLARATIVE_GATE_IDS = new Set([
|
|
179
185
|
TASK_SCOPE_LEASE_EXPIRED_GATE_ID,
|
|
180
186
|
'force-push',
|
|
181
187
|
'git-reset-hard',
|
|
182
188
|
'git-clean-force',
|
|
183
189
|
'rm-rf-home-or-root',
|
|
190
|
+
'financial-control',
|
|
184
191
|
]);
|
|
185
192
|
const SELF_PROTECT_CONFIG_TARGET_PATTERN = /(?:^|\/)(?:config\/gates\/|config\/(?:budget|enforcement|mcp-allowlists)\.json$|\.thumbgate\/config\.json$|thumbgate\.json$)/i;
|
|
186
193
|
const SELF_PROTECT_HOOK_TARGET_PATTERN = /(?:^|\/)(?:\.claude\/settings(?:\.local)?\.json|\.codex\/config\.toml|scripts\/hook-[^/]+\.(?:js|sh))$/i;
|
package/server.json
CHANGED
|
@@ -8,13 +8,13 @@
|
|
|
8
8
|
"source": "github",
|
|
9
9
|
"url": "https://github.com/IgorGanapolsky/ThumbGate"
|
|
10
10
|
},
|
|
11
|
-
"version": "1.34.
|
|
11
|
+
"version": "1.34.2",
|
|
12
12
|
"packages": [
|
|
13
13
|
{
|
|
14
14
|
"registryType": "npm",
|
|
15
15
|
"registryBaseUrl": "https://registry.npmjs.org",
|
|
16
16
|
"identifier": "thumbgate",
|
|
17
|
-
"version": "1.34.
|
|
17
|
+
"version": "1.34.2",
|
|
18
18
|
"runtimeHint": "npx",
|
|
19
19
|
"runtimeArguments": [
|
|
20
20
|
{
|