thumbgate 1.26.3 → 1.26.5
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/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +2 -2
- package/.well-known/mcp/server-card.json +1 -1
- package/adapters/claude/.mcp.json +2 -2
- package/adapters/mcp/server-stdio.js +1 -1
- package/adapters/opencode/opencode.json +1 -1
- package/package.json +1 -1
- package/public/index.html +2 -2
- package/public/numbers.html +2 -2
- package/scripts/gates-engine.js +32 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "thumbgate-marketplace",
|
|
3
|
-
"version": "1.26.
|
|
3
|
+
"version": "1.26.5",
|
|
4
4
|
"owner": {
|
|
5
5
|
"name": "Igor Ganapolsky",
|
|
6
6
|
"email": "ig5973700@gmail.com"
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"source": "npm",
|
|
15
15
|
"package": "thumbgate"
|
|
16
16
|
},
|
|
17
|
-
"version": "1.26.
|
|
17
|
+
"version": "1.26.5",
|
|
18
18
|
"author": {
|
|
19
19
|
"name": "Igor Ganapolsky",
|
|
20
20
|
"email": "ig5973700@gmail.com",
|
|
@@ -1,14 +1,14 @@
|
|
|
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.26.
|
|
4
|
+
"version": "1.26.5",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Igor Ganapolsky",
|
|
7
7
|
"email": "ig5973700@gmail.com",
|
|
8
8
|
"url": "https://thumbgate.ai"
|
|
9
9
|
},
|
|
10
10
|
"homepage": "https://thumbgate.ai",
|
|
11
|
-
"repository": "https://github.com/IgorGanapolsky/ThumbGate",
|
|
11
|
+
"repository": "git+https://github.com/IgorGanapolsky/ThumbGate",
|
|
12
12
|
"license": "MIT",
|
|
13
13
|
"category": "developer-tools",
|
|
14
14
|
"keywords": [
|
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
"mcpServers": {
|
|
3
3
|
"thumbgate": {
|
|
4
4
|
"command": "npx",
|
|
5
|
-
"args": ["--yes", "--package", "thumbgate@1.26.
|
|
5
|
+
"args": ["--yes", "--package", "thumbgate@1.26.5", "thumbgate", "serve"]
|
|
6
6
|
}
|
|
7
7
|
},
|
|
8
8
|
"hooks": {
|
|
9
9
|
"preToolUse": {
|
|
10
10
|
"command": "npx",
|
|
11
|
-
"args": ["--yes", "--package", "thumbgate@1.26.
|
|
11
|
+
"args": ["--yes", "--package", "thumbgate@1.26.5", "thumbgate", "gate-check"]
|
|
12
12
|
}
|
|
13
13
|
}
|
|
14
14
|
}
|
|
@@ -231,7 +231,7 @@ const {
|
|
|
231
231
|
finalizeSession: finalizeFeedbackSession,
|
|
232
232
|
} = require('../../scripts/feedback-session');
|
|
233
233
|
|
|
234
|
-
const SERVER_INFO = { name: 'thumbgate-mcp', version: '1.26.
|
|
234
|
+
const SERVER_INFO = { name: 'thumbgate-mcp', version: '1.26.5' };
|
|
235
235
|
const COMMERCE_CATEGORIES = [
|
|
236
236
|
'product_recommendation',
|
|
237
237
|
'brand_compliance',
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "thumbgate",
|
|
3
|
-
"version": "1.26.
|
|
3
|
+
"version": "1.26.5",
|
|
4
4
|
"description": "ThumbGate self-improving agent governance: thumbs-up/down turns every mistake into a prevention rule and blocks repeat patterns. 36 pre-action checks, budget enforcement, and self-protection for Claude Code, Cursor, Codex, Gemini CLI, and Amp.",
|
|
5
5
|
"homepage": "https://thumbgate.ai",
|
|
6
6
|
"repository": {
|
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.26.
|
|
23
|
+
<meta name="thumbgate-version" content="1.26.5">
|
|
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">
|
|
@@ -1594,7 +1594,7 @@ __GA_BOOTSTRAP__
|
|
|
1594
1594
|
<a href="https://www.linkedin.com/in/igorganapolsky" target="_blank" rel="noopener">LinkedIn</a>
|
|
1595
1595
|
<a href="/blog">Blog</a>
|
|
1596
1596
|
</div>
|
|
1597
|
-
<span class="footer-copy">© 2026 ThumbGate · MIT License · npm v1.26.
|
|
1597
|
+
<span class="footer-copy">© 2026 ThumbGate · MIT License · npm v1.26.5</span>
|
|
1598
1598
|
</div>
|
|
1599
1599
|
</footer>
|
|
1600
1600
|
|
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.26.
|
|
28
|
+
"softwareVersion": "1.26.5",
|
|
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.26.
|
|
205
|
+
<div class="freshness">Updated: 2026-05-07 · Version 1.26.5</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/scripts/gates-engine.js
CHANGED
|
@@ -1061,6 +1061,13 @@ function isBreakGlassSettingsBypass(gate, affectedFiles) {
|
|
|
1061
1061
|
return Array.isArray(affectedFiles) && affectedFiles.length > 0 && affectedFiles.every(isAgentHookSettingsFile);
|
|
1062
1062
|
}
|
|
1063
1063
|
|
|
1064
|
+
function isBreakGlassSettingsRecoveryAction(toolName, toolInput = {}) {
|
|
1065
|
+
if (!EDIT_LIKE_TOOLS.has(toolName)) return false;
|
|
1066
|
+
if (!isConditionSatisfied(BREAK_GLASS_CONDITION)) return false;
|
|
1067
|
+
const affectedFiles = extractAffectedFiles(toolName, toolInput).files;
|
|
1068
|
+
return affectedFiles.length > 0 && affectedFiles.every(isAgentHookSettingsFile);
|
|
1069
|
+
}
|
|
1070
|
+
|
|
1064
1071
|
function formatFileList(files, limit = 5) {
|
|
1065
1072
|
const items = Array.isArray(files) ? files.filter(Boolean) : [];
|
|
1066
1073
|
if (items.length === 0) return 'none';
|
|
@@ -1601,6 +1608,18 @@ async function evaluateGatesAsync(toolName, toolInput, configPath) {
|
|
|
1601
1608
|
if (localOnlyRemoteSideEffectGate) {
|
|
1602
1609
|
return recordStructuralGateBlock(toolName, toolInput, localOnlyRemoteSideEffectGate);
|
|
1603
1610
|
}
|
|
1611
|
+
if (isBreakGlassSettingsRecoveryAction(toolName, toolInput)) {
|
|
1612
|
+
recordAuditEvent({
|
|
1613
|
+
toolName,
|
|
1614
|
+
toolInput,
|
|
1615
|
+
decision: 'allow',
|
|
1616
|
+
gateId: BREAK_GLASS_CONDITION,
|
|
1617
|
+
message: 'Break-glass recovery allowed hook settings edit',
|
|
1618
|
+
severity: 'high',
|
|
1619
|
+
source: 'gates-engine',
|
|
1620
|
+
});
|
|
1621
|
+
return null;
|
|
1622
|
+
}
|
|
1604
1623
|
|
|
1605
1624
|
const pendingThreadResolutionGate = evaluatePendingPrThreadResolutionGate(toolName, toolInput);
|
|
1606
1625
|
if (pendingThreadResolutionGate) {
|
|
@@ -1815,6 +1834,18 @@ function evaluateGates(toolName, toolInput, configPath) {
|
|
|
1815
1834
|
if (localOnlyRemoteSideEffectGate) {
|
|
1816
1835
|
return recordStructuralGateBlock(toolName, toolInput, localOnlyRemoteSideEffectGate);
|
|
1817
1836
|
}
|
|
1837
|
+
if (isBreakGlassSettingsRecoveryAction(toolName, toolInput)) {
|
|
1838
|
+
recordAuditEvent({
|
|
1839
|
+
toolName,
|
|
1840
|
+
toolInput,
|
|
1841
|
+
decision: 'allow',
|
|
1842
|
+
gateId: BREAK_GLASS_CONDITION,
|
|
1843
|
+
message: 'Break-glass recovery allowed hook settings edit',
|
|
1844
|
+
severity: 'high',
|
|
1845
|
+
source: 'gates-engine',
|
|
1846
|
+
});
|
|
1847
|
+
return null;
|
|
1848
|
+
}
|
|
1818
1849
|
|
|
1819
1850
|
const pendingThreadResolutionGate = evaluatePendingPrThreadResolutionGate(toolName, toolInput);
|
|
1820
1851
|
if (pendingThreadResolutionGate) {
|
|
@@ -2850,6 +2881,7 @@ module.exports = {
|
|
|
2850
2881
|
isRemoteSideEffectCommand,
|
|
2851
2882
|
evaluateLocalOnlyRemoteSideEffectGate,
|
|
2852
2883
|
isAgentHookSettingsFile,
|
|
2884
|
+
isBreakGlassSettingsRecoveryAction,
|
|
2853
2885
|
PR_THREAD_RESOLUTION_ACTION,
|
|
2854
2886
|
buildBlockActionProCta,
|
|
2855
2887
|
applyDailyBlockCap,
|