thumbgate 1.7.0 โ 1.9.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/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/.well-known/llms.txt +4 -0
- package/.well-known/mcp/server-card.json +9 -226
- package/adapters/README.md +1 -1
- package/adapters/claude/.mcp.json +2 -2
- package/adapters/mcp/server-stdio.js +95 -1
- package/adapters/opencode/opencode.json +1 -1
- package/config/mcp-allowlists.json +15 -1
- package/package.json +13 -6
- package/public/index.html +2 -2
- package/scripts/agent-readiness.js +1 -0
- package/scripts/autonomous-workflow.js +377 -0
- package/scripts/autoresearch-runner.js +228 -0
- package/scripts/billing.js +4 -2
- package/scripts/mailer/resend-mailer.js +210 -40
- package/scripts/multimodal-retrieval-plan.js +110 -0
- package/scripts/statusline-context.js +207 -0
- package/scripts/statusline.sh +31 -14
- package/scripts/tool-registry.js +76 -0
- package/src/api/server.js +246 -0
- package/CHANGELOG.md +0 -702
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "thumbgate-marketplace",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.9.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.
|
|
16
|
+
"version": "1.9.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
|
+
"version": "1.9.0",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Igor Ganapolsky"
|
|
7
7
|
},
|
package/.well-known/llms.txt
CHANGED
|
@@ -46,6 +46,10 @@ npx thumbgate init --agent claude-code
|
|
|
46
46
|
|
|
47
47
|
## Links
|
|
48
48
|
|
|
49
|
+
- Agent discovery: https://thumbgate-production.up.railway.app/.well-known/mcp.json
|
|
50
|
+
- Progressive tool index: https://thumbgate-production.up.railway.app/.well-known/mcp/tools.json
|
|
51
|
+
- Agent skills: https://thumbgate-production.up.railway.app/.well-known/mcp/skills.json
|
|
52
|
+
- MCP applications: https://thumbgate-production.up.railway.app/.well-known/mcp/applications.json
|
|
49
53
|
- Documentation: https://thumbgate-production.up.railway.app/guide
|
|
50
54
|
- Dashboard: https://thumbgate-production.up.railway.app/dashboard
|
|
51
55
|
- GitHub: https://github.com/IgorGanapolsky/ThumbGate
|
|
@@ -1,231 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "thumbgate",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.9.0",
|
|
4
4
|
"description": "ThumbGate โ ๐๐ feedback that teaches your AI agent. Thumbs down a mistake, it never happens again.",
|
|
5
|
-
"homepage": "https://
|
|
5
|
+
"homepage": "https://thumbgate-production.up.railway.app",
|
|
6
6
|
"transport": "stdio",
|
|
7
|
-
"
|
|
8
|
-
"
|
|
9
|
-
"
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
}
|
|
15
|
-
},
|
|
16
|
-
"required": []
|
|
17
|
-
},
|
|
18
|
-
"tools": [
|
|
19
|
-
{
|
|
20
|
-
"name": "capture_feedback",
|
|
21
|
-
"description": "Capture thumbs up/down feedback and promote actionable memory",
|
|
22
|
-
"inputSchema": {
|
|
23
|
-
"type": "object",
|
|
24
|
-
"required": [
|
|
25
|
-
"signal",
|
|
26
|
-
"context"
|
|
27
|
-
],
|
|
28
|
-
"properties": {
|
|
29
|
-
"signal": {
|
|
30
|
-
"type": "string",
|
|
31
|
-
"enum": [
|
|
32
|
-
"up",
|
|
33
|
-
"down"
|
|
34
|
-
]
|
|
35
|
-
},
|
|
36
|
-
"context": {
|
|
37
|
-
"type": "string"
|
|
38
|
-
},
|
|
39
|
-
"whatWentWrong": {
|
|
40
|
-
"type": "string"
|
|
41
|
-
},
|
|
42
|
-
"whatToChange": {
|
|
43
|
-
"type": "string"
|
|
44
|
-
},
|
|
45
|
-
"whatWorked": {
|
|
46
|
-
"type": "string"
|
|
47
|
-
},
|
|
48
|
-
"tags": {
|
|
49
|
-
"type": "array",
|
|
50
|
-
"items": {
|
|
51
|
-
"type": "string"
|
|
52
|
-
}
|
|
53
|
-
},
|
|
54
|
-
"skill": {
|
|
55
|
-
"type": "string"
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
},
|
|
60
|
-
{
|
|
61
|
-
"name": "feedback_summary",
|
|
62
|
-
"description": "Get summary of recent feedback",
|
|
63
|
-
"inputSchema": {
|
|
64
|
-
"type": "object",
|
|
65
|
-
"properties": {
|
|
66
|
-
"recent": {
|
|
67
|
-
"type": "number"
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
},
|
|
72
|
-
{
|
|
73
|
-
"name": "feedback_stats",
|
|
74
|
-
"description": "Get feedback stats and recommendations",
|
|
75
|
-
"inputSchema": {
|
|
76
|
-
"type": "object",
|
|
77
|
-
"properties": {}
|
|
78
|
-
}
|
|
79
|
-
},
|
|
80
|
-
{
|
|
81
|
-
"name": "list_intents",
|
|
82
|
-
"description": "List available intent plans and whether each requires human approval in the active profile",
|
|
83
|
-
"inputSchema": {
|
|
84
|
-
"type": "object",
|
|
85
|
-
"properties": {
|
|
86
|
-
"mcpProfile": {
|
|
87
|
-
"type": "string"
|
|
88
|
-
},
|
|
89
|
-
"bundleId": {
|
|
90
|
-
"type": "string"
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
},
|
|
95
|
-
{
|
|
96
|
-
"name": "plan_intent",
|
|
97
|
-
"description": "Generate an intent execution plan with policy checkpoints",
|
|
98
|
-
"inputSchema": {
|
|
99
|
-
"type": "object",
|
|
100
|
-
"required": [
|
|
101
|
-
"intentId"
|
|
102
|
-
],
|
|
103
|
-
"properties": {
|
|
104
|
-
"intentId": {
|
|
105
|
-
"type": "string"
|
|
106
|
-
},
|
|
107
|
-
"context": {
|
|
108
|
-
"type": "string"
|
|
109
|
-
},
|
|
110
|
-
"mcpProfile": {
|
|
111
|
-
"type": "string"
|
|
112
|
-
},
|
|
113
|
-
"bundleId": {
|
|
114
|
-
"type": "string"
|
|
115
|
-
},
|
|
116
|
-
"approved": {
|
|
117
|
-
"type": "boolean"
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
},
|
|
122
|
-
{
|
|
123
|
-
"name": "prevention_rules",
|
|
124
|
-
"description": "Generate prevention rules from repeated mistake patterns",
|
|
125
|
-
"inputSchema": {
|
|
126
|
-
"type": "object",
|
|
127
|
-
"properties": {
|
|
128
|
-
"minOccurrences": {
|
|
129
|
-
"type": "number"
|
|
130
|
-
},
|
|
131
|
-
"outputPath": {
|
|
132
|
-
"type": "string"
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
},
|
|
137
|
-
{
|
|
138
|
-
"name": "export_dpo_pairs",
|
|
139
|
-
"description": "Export DPO preference pairs from local memory log",
|
|
140
|
-
"inputSchema": {
|
|
141
|
-
"type": "object",
|
|
142
|
-
"properties": {
|
|
143
|
-
"memoryLogPath": {
|
|
144
|
-
"type": "string"
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
},
|
|
149
|
-
{
|
|
150
|
-
"name": "construct_context_pack",
|
|
151
|
-
"description": "Construct a bounded context pack from contextfs",
|
|
152
|
-
"inputSchema": {
|
|
153
|
-
"type": "object",
|
|
154
|
-
"properties": {
|
|
155
|
-
"query": {
|
|
156
|
-
"type": "string"
|
|
157
|
-
},
|
|
158
|
-
"maxItems": {
|
|
159
|
-
"type": "number"
|
|
160
|
-
},
|
|
161
|
-
"maxChars": {
|
|
162
|
-
"type": "number"
|
|
163
|
-
},
|
|
164
|
-
"namespaces": {
|
|
165
|
-
"type": "array",
|
|
166
|
-
"items": {
|
|
167
|
-
"type": "string"
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
},
|
|
173
|
-
{
|
|
174
|
-
"name": "evaluate_context_pack",
|
|
175
|
-
"description": "Record evaluation outcome for a context pack",
|
|
176
|
-
"inputSchema": {
|
|
177
|
-
"type": "object",
|
|
178
|
-
"required": [
|
|
179
|
-
"packId",
|
|
180
|
-
"outcome"
|
|
181
|
-
],
|
|
182
|
-
"properties": {
|
|
183
|
-
"packId": {
|
|
184
|
-
"type": "string"
|
|
185
|
-
},
|
|
186
|
-
"outcome": {
|
|
187
|
-
"type": "string"
|
|
188
|
-
},
|
|
189
|
-
"signal": {
|
|
190
|
-
"type": "string"
|
|
191
|
-
},
|
|
192
|
-
"notes": {
|
|
193
|
-
"type": "string"
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
},
|
|
198
|
-
{
|
|
199
|
-
"name": "context_provenance",
|
|
200
|
-
"description": "Get recent context/provenance events",
|
|
201
|
-
"inputSchema": {
|
|
202
|
-
"type": "object",
|
|
203
|
-
"properties": {
|
|
204
|
-
"limit": {
|
|
205
|
-
"type": "number"
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
},
|
|
210
|
-
{
|
|
211
|
-
"name": "recall",
|
|
212
|
-
"description": "Recall relevant past feedback, memories, and prevention rules for the current task",
|
|
213
|
-
"inputSchema": {
|
|
214
|
-
"type": "object",
|
|
215
|
-
"required": [
|
|
216
|
-
"query"
|
|
217
|
-
],
|
|
218
|
-
"properties": {
|
|
219
|
-
"query": {
|
|
220
|
-
"type": "string",
|
|
221
|
-
"description": "Describe the current task or context to find relevant past feedback"
|
|
222
|
-
},
|
|
223
|
-
"limit": {
|
|
224
|
-
"type": "number",
|
|
225
|
-
"description": "Max memories to return (default 5)"
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
]
|
|
7
|
+
"discovery": {
|
|
8
|
+
"manifestUrl": "https://thumbgate-production.up.railway.app/.well-known/mcp.json",
|
|
9
|
+
"toolIndexUrl": "https://thumbgate-production.up.railway.app/.well-known/mcp/tools.json",
|
|
10
|
+
"toolSchemaUrlTemplate": "https://thumbgate-production.up.railway.app/.well-known/mcp/tools/{name}.json",
|
|
11
|
+
"skillsUrl": "https://thumbgate-production.up.railway.app/.well-known/mcp/skills.json",
|
|
12
|
+
"applicationsUrl": "https://thumbgate-production.up.railway.app/.well-known/mcp/applications.json"
|
|
13
|
+
}
|
|
231
14
|
}
|
package/adapters/README.md
CHANGED
|
@@ -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.
|
|
6
|
+
- `claude/.mcp.json`: example Claude Code MCP config using `npx --yes --package thumbgate@1.9.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.
|
|
5
|
+
"args": ["--yes", "--package", "thumbgate@1.9.0", "thumbgate", "serve"]
|
|
6
6
|
}
|
|
7
7
|
},
|
|
8
8
|
"hooks": {
|
|
9
9
|
"preToolUse": {
|
|
10
10
|
"command": "npx",
|
|
11
|
-
"args": ["--yes", "--package", "thumbgate@1.
|
|
11
|
+
"args": ["--yes", "--package", "thumbgate@1.9.0", "thumbgate", "gate-check"]
|
|
12
12
|
}
|
|
13
13
|
}
|
|
14
14
|
}
|
|
@@ -106,6 +106,9 @@ const {
|
|
|
106
106
|
const {
|
|
107
107
|
searchThumbgate,
|
|
108
108
|
} = require('../../scripts/thumbgate-search');
|
|
109
|
+
const {
|
|
110
|
+
buildMultimodalRetrievalPlan,
|
|
111
|
+
} = require('../../scripts/multimodal-retrieval-plan');
|
|
109
112
|
const {
|
|
110
113
|
importDocument,
|
|
111
114
|
listImportedDocuments,
|
|
@@ -117,6 +120,7 @@ const {
|
|
|
117
120
|
listHarnesses,
|
|
118
121
|
runHarness,
|
|
119
122
|
} = require('../../scripts/natural-language-harness');
|
|
123
|
+
const { runLoop: runAutoresearchLoop } = require('../../scripts/autoresearch-runner');
|
|
120
124
|
const { TOOLS } = require('../../scripts/tool-registry');
|
|
121
125
|
const { reflect: reflectOnFeedback } = require('../../scripts/reflector-agent');
|
|
122
126
|
const { submitProductIssue } = require('../../scripts/product-feedback');
|
|
@@ -125,6 +129,8 @@ const {
|
|
|
125
129
|
formatUnifiedContext,
|
|
126
130
|
} = require('../../scripts/context-manager');
|
|
127
131
|
const { exportHfDataset } = require('../../scripts/export-hf-dataset');
|
|
132
|
+
const { distributeContextToAgents } = require('../../scripts/swarm-coordinator');
|
|
133
|
+
const { buildSessionReport } = require('../../scripts/session-report');
|
|
128
134
|
|
|
129
135
|
const PRO_CHECKOUT_URL = 'https://thumbgate-production.up.railway.app/checkout/pro';
|
|
130
136
|
|
|
@@ -146,7 +152,7 @@ const {
|
|
|
146
152
|
finalizeSession: finalizeFeedbackSession,
|
|
147
153
|
} = require('../../scripts/feedback-session');
|
|
148
154
|
|
|
149
|
-
const SERVER_INFO = { name: 'thumbgate-mcp', version: '1.
|
|
155
|
+
const SERVER_INFO = { name: 'thumbgate-mcp', version: '1.9.0' };
|
|
150
156
|
const COMMERCE_CATEGORIES = [
|
|
151
157
|
'product_recommendation',
|
|
152
158
|
'brand_compliance',
|
|
@@ -194,6 +200,17 @@ function resolveImportDocumentPath(targetPath) {
|
|
|
194
200
|
return resolved;
|
|
195
201
|
}
|
|
196
202
|
|
|
203
|
+
function resolveWorkspaceCwd(targetPath) {
|
|
204
|
+
if (!targetPath) return undefined;
|
|
205
|
+
const workspaceRoot = path.resolve(process.cwd());
|
|
206
|
+
const resolved = path.resolve(workspaceRoot, String(targetPath));
|
|
207
|
+
const relative = path.relative(workspaceRoot, resolved);
|
|
208
|
+
if (relative.startsWith('..') || path.isAbsolute(relative)) {
|
|
209
|
+
throw new Error(`cwd must stay within ${workspaceRoot}`);
|
|
210
|
+
}
|
|
211
|
+
return resolved;
|
|
212
|
+
}
|
|
213
|
+
|
|
197
214
|
function toTextResult(payload) {
|
|
198
215
|
const text = typeof payload === 'string' ? payload : JSON.stringify(payload, null, 2);
|
|
199
216
|
return {
|
|
@@ -736,6 +753,53 @@ async function callToolInner(name, args) {
|
|
|
736
753
|
}
|
|
737
754
|
case 'verify_claim':
|
|
738
755
|
return toTextResult(verifyClaimEvidence(args.claim));
|
|
756
|
+
case 'require_evidence_for_claim': {
|
|
757
|
+
if (!args.claim || typeof args.claim !== 'string') {
|
|
758
|
+
throw new Error('claim is required and must be a string');
|
|
759
|
+
}
|
|
760
|
+
const verification = verifyClaimEvidence(args.claim);
|
|
761
|
+
const mode = args.mode === 'advisory' ? 'advisory' : 'blocking';
|
|
762
|
+
const hasMatchingChecks = Array.isArray(verification.checks) && verification.checks.length > 0;
|
|
763
|
+
const evidenceMissing = hasMatchingChecks && !verification.verified;
|
|
764
|
+
const blocking = mode === 'blocking' && evidenceMissing;
|
|
765
|
+
const missingActions = hasMatchingChecks
|
|
766
|
+
? Array.from(new Set(verification.checks.flatMap((check) => check.missing || [])))
|
|
767
|
+
: [];
|
|
768
|
+
try {
|
|
769
|
+
const { recordAuditEvent } = require('../../scripts/audit-trail');
|
|
770
|
+
recordAuditEvent({
|
|
771
|
+
toolName: 'require_evidence_for_claim',
|
|
772
|
+
toolInput: { claim: args.claim, mode, sessionId: args.sessionId || null },
|
|
773
|
+
decision: blocking ? 'deny' : 'allow',
|
|
774
|
+
gateId: 'completion_claim',
|
|
775
|
+
message: blocking
|
|
776
|
+
? `Completion claim blocked โ missing evidence: ${missingActions.join(', ') || 'unknown'}`
|
|
777
|
+
: `Completion claim verified (${verification.verified ? 'evidence present' : 'no matching gate'})`,
|
|
778
|
+
source: 'completion-gate',
|
|
779
|
+
});
|
|
780
|
+
} catch { /* audit write must never break tool response */ }
|
|
781
|
+
return toTextResult({
|
|
782
|
+
claim: args.claim,
|
|
783
|
+
mode,
|
|
784
|
+
blocking,
|
|
785
|
+
verified: verification.verified,
|
|
786
|
+
matchedChecks: hasMatchingChecks,
|
|
787
|
+
missingActions,
|
|
788
|
+
checks: verification.checks,
|
|
789
|
+
sessionId: args.sessionId || null,
|
|
790
|
+
});
|
|
791
|
+
}
|
|
792
|
+
case 'distribute_context_to_agents':
|
|
793
|
+
return toTextResult(distributeContextToAgents({
|
|
794
|
+
query: args.query || '',
|
|
795
|
+
agents: args.agents,
|
|
796
|
+
maxItems: args.maxItems,
|
|
797
|
+
maxChars: args.maxChars,
|
|
798
|
+
namespaces: Array.isArray(args.namespaces) ? args.namespaces : [],
|
|
799
|
+
ttlMs: args.ttlMs,
|
|
800
|
+
}));
|
|
801
|
+
case 'session_report':
|
|
802
|
+
return toTextResult(buildSessionReport({ windowHours: args.windowHours }));
|
|
739
803
|
case 'check_operational_integrity':
|
|
740
804
|
return toTextResult(evaluateOperationalIntegrity({
|
|
741
805
|
repoPath: args.repoPath,
|
|
@@ -802,6 +866,36 @@ async function callToolInner(name, args) {
|
|
|
802
866
|
return toTextResult({ harnesses: listHarnesses({ tag: args.tag }) });
|
|
803
867
|
case 'run_harness':
|
|
804
868
|
return toTextResult(runHarness(args.harness, args.inputs || {}, { jobId: args.jobId }));
|
|
869
|
+
case 'plan_multimodal_retrieval':
|
|
870
|
+
return toTextResult(buildMultimodalRetrievalPlan(args));
|
|
871
|
+
case 'run_autoresearch': {
|
|
872
|
+
const iterations = Math.max(1, Math.min(5, Number(args.iterations || 1)));
|
|
873
|
+
const timeoutMs = Math.max(1000, Math.min(600000, Number(args.timeoutMs || 120000)));
|
|
874
|
+
const holdoutCommands = Array.isArray(args.holdoutCommands)
|
|
875
|
+
? args.holdoutCommands.filter((command) => typeof command === 'string' && command.trim())
|
|
876
|
+
: [];
|
|
877
|
+
const result = await runAutoresearchLoop({
|
|
878
|
+
iterations,
|
|
879
|
+
targetName: args.targetName || undefined,
|
|
880
|
+
nextValue: Number.isFinite(args.nextValue) ? args.nextValue : undefined,
|
|
881
|
+
testCommand: args.testCommand || 'npm test',
|
|
882
|
+
holdoutCommands,
|
|
883
|
+
timeoutMs,
|
|
884
|
+
cwd: resolveWorkspaceCwd(args.cwd),
|
|
885
|
+
researchQuery: args.researchQuery || null,
|
|
886
|
+
paperLimit: Math.max(1, Math.min(10, Number(args.paperLimit || 5))),
|
|
887
|
+
});
|
|
888
|
+
return toTextResult({
|
|
889
|
+
...result,
|
|
890
|
+
controls: {
|
|
891
|
+
iterations,
|
|
892
|
+
timeoutMs,
|
|
893
|
+
holdoutCommands,
|
|
894
|
+
maxIterationsPerCall: 5,
|
|
895
|
+
maxTimeoutMs: 600000,
|
|
896
|
+
},
|
|
897
|
+
});
|
|
898
|
+
}
|
|
805
899
|
case 'open_feedback_session':
|
|
806
900
|
return toTextResult(openFeedbackSession(args.feedbackEventId, args.signal, args.initialContext));
|
|
807
901
|
case 'append_feedback_context':
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
"search_lessons",
|
|
13
13
|
"retrieve_lessons",
|
|
14
14
|
"search_thumbgate",
|
|
15
|
+
"plan_multimodal_retrieval",
|
|
15
16
|
"reflect_on_feedback",
|
|
16
17
|
"feedback_stats",
|
|
17
18
|
"diagnose_failure",
|
|
@@ -45,6 +46,7 @@
|
|
|
45
46
|
"settings_status",
|
|
46
47
|
"list_harnesses",
|
|
47
48
|
"run_harness",
|
|
49
|
+
"run_autoresearch",
|
|
48
50
|
"estimate_uncertainty",
|
|
49
51
|
"get_business_metrics",
|
|
50
52
|
"describe_semantic_entity",
|
|
@@ -52,6 +54,9 @@
|
|
|
52
54
|
"get_reliability_rules",
|
|
53
55
|
"describe_reliability_entity",
|
|
54
56
|
"report_product_issue",
|
|
57
|
+
"require_evidence_for_claim",
|
|
58
|
+
"distribute_context_to_agents",
|
|
59
|
+
"session_report",
|
|
55
60
|
"perplexity_search",
|
|
56
61
|
"perplexity_ask",
|
|
57
62
|
"perplexity_research",
|
|
@@ -67,6 +72,7 @@
|
|
|
67
72
|
"search_lessons",
|
|
68
73
|
"retrieve_lessons",
|
|
69
74
|
"search_thumbgate",
|
|
75
|
+
"plan_multimodal_retrieval",
|
|
70
76
|
"reflect_on_feedback",
|
|
71
77
|
"prevention_rules",
|
|
72
78
|
"set_task_scope",
|
|
@@ -81,7 +87,9 @@
|
|
|
81
87
|
"feedback_stats",
|
|
82
88
|
"feedback_summary",
|
|
83
89
|
"estimate_uncertainty",
|
|
84
|
-
"report_product_issue"
|
|
90
|
+
"report_product_issue",
|
|
91
|
+
"require_evidence_for_claim",
|
|
92
|
+
"session_report"
|
|
85
93
|
],
|
|
86
94
|
"commerce": [
|
|
87
95
|
"capture_feedback",
|
|
@@ -109,6 +117,7 @@
|
|
|
109
117
|
"search_lessons",
|
|
110
118
|
"retrieve_lessons",
|
|
111
119
|
"search_thumbgate",
|
|
120
|
+
"plan_multimodal_retrieval",
|
|
112
121
|
"feedback_stats",
|
|
113
122
|
"diagnose_failure",
|
|
114
123
|
"list_harnesses",
|
|
@@ -129,6 +138,8 @@
|
|
|
129
138
|
"describe_semantic_entity",
|
|
130
139
|
"get_reliability_rules",
|
|
131
140
|
"describe_reliability_entity",
|
|
141
|
+
"require_evidence_for_claim",
|
|
142
|
+
"session_report",
|
|
132
143
|
"perplexity_search",
|
|
133
144
|
"perplexity_ask"
|
|
134
145
|
],
|
|
@@ -139,6 +150,7 @@
|
|
|
139
150
|
"search_lessons",
|
|
140
151
|
"retrieve_lessons",
|
|
141
152
|
"search_thumbgate",
|
|
153
|
+
"plan_multimodal_retrieval",
|
|
142
154
|
"feedback_stats",
|
|
143
155
|
"diagnose_failure",
|
|
144
156
|
"list_harnesses",
|
|
@@ -158,6 +170,8 @@
|
|
|
158
170
|
"describe_semantic_entity",
|
|
159
171
|
"get_reliability_rules",
|
|
160
172
|
"describe_reliability_entity",
|
|
173
|
+
"require_evidence_for_claim",
|
|
174
|
+
"session_report",
|
|
161
175
|
"perplexity_search",
|
|
162
176
|
"perplexity_ask"
|
|
163
177
|
],
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "thumbgate",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.9.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": {
|
|
@@ -19,7 +19,6 @@
|
|
|
19
19
|
".claude-plugin/marketplace.json",
|
|
20
20
|
".claude-plugin/plugin.json",
|
|
21
21
|
".well-known/",
|
|
22
|
-
"CHANGELOG.md",
|
|
23
22
|
"LICENSE",
|
|
24
23
|
"README.md",
|
|
25
24
|
"adapters/amp/skills/thumbgate-feedback/SKILL.md",
|
|
@@ -49,6 +48,8 @@
|
|
|
49
48
|
"scripts/agentic-data-pipeline.js",
|
|
50
49
|
"scripts/analytics-report.js",
|
|
51
50
|
"scripts/analytics-window.js",
|
|
51
|
+
"scripts/autonomous-workflow.js",
|
|
52
|
+
"scripts/autoresearch-runner.js",
|
|
52
53
|
"scripts/async-job-runner.js",
|
|
53
54
|
"scripts/audit-trail.js",
|
|
54
55
|
"scripts/auto-promote-gates.js",
|
|
@@ -135,6 +136,7 @@
|
|
|
135
136
|
"scripts/mcp-policy.js",
|
|
136
137
|
"scripts/memory-firewall.js",
|
|
137
138
|
"scripts/meta-agent-loop.js",
|
|
139
|
+
"scripts/multimodal-retrieval-plan.js",
|
|
138
140
|
"scripts/natural-language-harness.js",
|
|
139
141
|
"scripts/obsidian-export.js",
|
|
140
142
|
"scripts/operational-dashboard.js",
|
|
@@ -173,6 +175,7 @@
|
|
|
173
175
|
"scripts/slo-alert-engine.js",
|
|
174
176
|
"scripts/spec-gate.js",
|
|
175
177
|
"scripts/statusline-cache-path.js",
|
|
178
|
+
"scripts/statusline-context.js",
|
|
176
179
|
"scripts/statusline-lesson.js",
|
|
177
180
|
"scripts/statusline-links.js",
|
|
178
181
|
"scripts/statusline-local-stats.js",
|
|
@@ -251,7 +254,10 @@
|
|
|
251
254
|
"trace:eval": "node scripts/decision-trace.js eval",
|
|
252
255
|
"social:reply-monitor": "node scripts/social-reply-monitor.js",
|
|
253
256
|
"social:reply-monitor:dry": "node scripts/social-reply-monitor.js --dry-run",
|
|
254
|
-
"test": "npm run test:schema && npm run test:loop && npm run test:dpo && npm run test:kto && npm run test:api && npm run test:proof && npm run test:e2e && npm run test:rlaif && npm run test:attribution && npm run test:quality && npm run test:intelligence && npm run test:training-export && npm run test:deployment && npm run test:operational-integrity && npm run test:workflow && npm run test:billing && npm run test:cli && npm run test:watcher && npm run test:autoresearch && npm run test:ops && npm run test:session-analyzer && npm run test:tessl && npm run test:gates && npm run test:evoskill && npm run test:gates-hardening && npm run test:workers && npm run test:social-analytics && npm run test:memalign && npm run test:xmemory-lite && npm run test:filesystem-search && npm run test:zernio && npm run test:platform-limits && npm run test:post-video && npm run test:post-everywhere-instagram && npm run test:obsidian-export && npm run test:lesson-db && npm run test:lesson-rotation && npm run test:memory-dedup && npm run test:feedback-quality && npm run test:sync-version && npm run test:check-congruence && npm run test:tool-registry && npm run test:feedback-to-rules && npm run test:memory-firewall && npm run test:belief-update && npm run test:hosted-config && npm run test:operational-summary && npm run test:operator-key-auth && npm run test:cloudflare-sandbox && npm run test:mcp-config && npm run test:plan-gate && npm run test:pulse && npm run test:semantic-layer && npm run test:data-pipeline && npm run test:optimize-context && npm run test:principle-extractor && npm run test:analytics-window && npm run test:funnel-analytics && npm run test:experiment-tracker && npm run test:build-metadata && npm run test:context-engine && npm run test:hf-papers && npm run test:marketing-experiment && npm run test:seo-gsd && npm run test:verify-run && npm run test:export-dpo-pairs && npm run test:export-hf-dataset && npm run test:license && npm run test:bot-detector && npm run test:postinstall && npm run test:funnel-invariants && npm run test:cli-telemetry && npm run test:pro-parity && npm run test:model-tier-router && npm run test:computer-use-firewall && npm run test:skill-exporter && npm run test:statusline && npm run test:evolution && npm run test:org-dashboard && npm run test:multi-hop-recall && npm run test:synthetic-dpo && npm run test:thumbgate-skill && npm run test:learn-hub && npm run test:feedback-fallback && npm run test:metaclaw && npm run test:server-lock && npm run test:control-tower && npm run test:pii-scanner && npm run test:data-governance && npm run test:lesson-inference && npm run test:semantic-dedup && npm run test:fs-utils && npm run test:cli-schema && npm run test:explore && npm run test:lesson-reranker && npm run test:lesson-retrieval && npm run test:cross-encoder && npm run test:reflector-agent && npm run test:feedback-session && npm run test:feedback-history-distiller && npm run test:hallucination-detector && npm run test:history-distiller && npm run test:predictive-insights && npm run test:prove-predictive-insights && npm run test:statusbar-cli && npm run test:generate-instagram-card && npm run test:instagram-thumbgate-post && npm run test:publish-instagram-thumbgate && npm run test:lesson-synthesis && npm run test:background-governance && npm run test:memory-migration && npm run test:prompt-dlp && npm run test:ephemeral-store && npm run test:agent-security && npm run test:skill-progressive && npm run test:per-step-scoring && npm run test:weekly-auto-post && npm run test:social-post-hourly && npm run test:social-quality-gate && npm run test:a2ui-engine && npm run test:gate-satisfy && npm run test:money-watcher && npm run test:budget && npm run test:quick-start && npm run test:utm && npm run test:product-feedback && npm run test:feedback-root-consolidator && npm run test:engagement-audit && npm run test:install-growth-automation && npm run test:publish-thumbgate-launch && npm run test:reconcile-thumbgate-campaign && npm run test:reddit-publisher && npm run test:schedule-thumbgate-campaign && npm run test:social-reply-monitor && npm run test:sync-launch-assets && npm run test:ai-search-visibility && npm run test:perplexity && npm run test:security-scanner && npm run test:llm-client && npm run test:managed-lesson-agent && npm run test:self-distill && npm run test:meta-agent && npm run test:harness-selector && npm run test:thumbgate-bench && npm run test:seo-guides && npm run test:enforcement-loop && npm run test:cli-agent-experience && npm run test:bot-detection && npm run test:checkout-bot-guard && npm run test:session-health && npm run test:session-episodes && npm run test:spec-gate && npm run test:decision-trace && npm run test:dashboard-insights && npm run test:prompt-eval && npm run test:demo-voiceover && npm run test:gate-coherence && npm run test:gate-eval && npm run test:high-roi && npm run test:public-static-assets && npm run test:token-savings && npm run test:workflow-gate-checkpoint && npm run test:lesson-export-import && npm run test:landing-page-claims && npm run test:dashboard-deeplink-e2e && npm run test:public-package-parity && npm run test:token-savings-dashboard && npm run test:cursor-wiring && npm run test:pretooluse-injection && npm run test:recent-corrective-context && npm run test:durability-step && npm run test:mailer && npm run test:brand-assets && npm run test:enforcement-teeth",
|
|
257
|
+
"test": "npm run test:schema && npm run test:loop && npm run test:dpo && npm run test:kto && npm run test:api && npm run test:proof && npm run test:e2e && npm run test:rlaif && npm run test:attribution && npm run test:quality && npm run test:intelligence && npm run test:training-export && npm run test:deployment && npm run test:operational-integrity && npm run test:workflow && npm run test:billing && npm run test:cli && npm run test:watcher && npm run test:autoresearch && npm run test:ops && npm run test:session-analyzer && npm run test:tessl && npm run test:gates && npm run test:evoskill && npm run test:gates-hardening && npm run test:workers && npm run test:social-analytics && npm run test:memalign && npm run test:xmemory-lite && npm run test:filesystem-search && npm run test:zernio && npm run test:platform-limits && npm run test:post-video && npm run test:post-everywhere-instagram && npm run test:obsidian-export && npm run test:lesson-db && npm run test:lesson-rotation && npm run test:memory-dedup && npm run test:feedback-quality && npm run test:sync-version && npm run test:check-congruence && npm run test:tool-registry && npm run test:feedback-to-rules && npm run test:memory-firewall && npm run test:belief-update && npm run test:hosted-config && npm run test:operational-summary && npm run test:operator-key-auth && npm run test:cloudflare-sandbox && npm run test:mcp-config && npm run test:plan-gate && npm run test:pulse && npm run test:semantic-layer && npm run test:data-pipeline && npm run test:optimize-context && npm run test:principle-extractor && npm run test:analytics-window && npm run test:funnel-analytics && npm run test:experiment-tracker && npm run test:build-metadata && npm run test:context-engine && npm run test:hf-papers && npm run test:marketing-experiment && npm run test:seo-gsd && npm run test:verify-run && npm run test:export-dpo-pairs && npm run test:export-hf-dataset && npm run test:license && npm run test:bot-detector && npm run test:postinstall && npm run test:funnel-invariants && npm run test:cli-telemetry && npm run test:pro-parity && npm run test:model-tier-router && npm run test:computer-use-firewall && npm run test:skill-exporter && npm run test:statusline && npm run test:evolution && npm run test:org-dashboard && npm run test:multi-hop-recall && npm run test:synthetic-dpo && npm run test:thumbgate-skill && npm run test:learn-hub && npm run test:feedback-fallback && npm run test:metaclaw && npm run test:server-lock && npm run test:control-tower && npm run test:pii-scanner && npm run test:data-governance && npm run test:lesson-inference && npm run test:semantic-dedup && npm run test:fs-utils && npm run test:cli-schema && npm run test:explore && npm run test:lesson-reranker && npm run test:lesson-retrieval && npm run test:cross-encoder && npm run test:reflector-agent && npm run test:feedback-session && npm run test:feedback-history-distiller && npm run test:hallucination-detector && npm run test:history-distiller && npm run test:predictive-insights && npm run test:prove-predictive-insights && npm run test:statusbar-cli && npm run test:generate-instagram-card && npm run test:instagram-thumbgate-post && npm run test:publish-instagram-thumbgate && npm run test:lesson-synthesis && npm run test:background-governance && npm run test:memory-migration && npm run test:prompt-dlp && npm run test:ephemeral-store && npm run test:agent-security && npm run test:skill-progressive && npm run test:per-step-scoring && npm run test:weekly-auto-post && npm run test:social-post-hourly && npm run test:social-quality-gate && npm run test:a2ui-engine && npm run test:gate-satisfy && npm run test:money-watcher && npm run test:budget && npm run test:quick-start && npm run test:utm && npm run test:product-feedback && npm run test:feedback-root-consolidator && npm run test:engagement-audit && npm run test:install-growth-automation && npm run test:publish-thumbgate-launch && npm run test:reconcile-thumbgate-campaign && npm run test:reddit-publisher && npm run test:schedule-thumbgate-campaign && npm run test:social-reply-monitor && npm run test:sync-launch-assets && npm run test:ai-search-visibility && npm run test:perplexity && npm run test:security-scanner && npm run test:llm-client && npm run test:managed-lesson-agent && npm run test:self-distill && npm run test:meta-agent && npm run test:harness-selector && npm run test:thumbgate-bench && npm run test:seo-guides && npm run test:enforcement-loop && npm run test:cli-agent-experience && npm run test:bot-detection && npm run test:checkout-bot-guard && npm run test:session-health && npm run test:session-episodes && npm run test:spec-gate && npm run test:decision-trace && npm run test:dashboard-insights && npm run test:prompt-eval && npm run test:demo-voiceover && npm run test:gate-coherence && npm run test:gate-eval && npm run test:high-roi && npm run test:public-static-assets && npm run test:token-savings && npm run test:workflow-gate-checkpoint && npm run test:lesson-export-import && npm run test:landing-page-claims && npm run test:dashboard-deeplink-e2e && npm run test:public-package-parity && npm run test:token-savings-dashboard && npm run test:cursor-wiring && npm run test:pretooluse-injection && npm run test:recent-corrective-context && npm run test:durability-step && npm run test:mailer && npm run test:brand-assets && npm run test:enforcement-teeth && npm run test:swarm-coordinator && npm run test:session-report && npm run test:require-evidence-gate",
|
|
258
|
+
"test:swarm-coordinator": "node --test tests/swarm-coordinator.test.js",
|
|
259
|
+
"test:session-report": "node --test tests/session-report.test.js",
|
|
260
|
+
"test:require-evidence-gate": "node --test tests/require-evidence-gate.test.js",
|
|
255
261
|
"test:session-health": "node --test tests/session-health-sensor.test.js",
|
|
256
262
|
"test:session-episodes": "node --test tests/session-episode-store.test.js",
|
|
257
263
|
"test:spec-gate": "node --test tests/spec-gate.test.js",
|
|
@@ -265,7 +271,7 @@
|
|
|
265
271
|
"test:multi-hop-recall": "node --test tests/multi-hop-recall.test.js",
|
|
266
272
|
"test:synthetic-dpo": "node --test tests/synthetic-dpo.test.js",
|
|
267
273
|
"test:thumbgate-skill": "node --test tests/thumbgate-skill.test.js",
|
|
268
|
-
"test:statusline": "node --test tests/claude-feedback-sync.test.js tests/statusline.test.js tests/statusline-links.test.js",
|
|
274
|
+
"test:statusline": "node --test tests/claude-feedback-sync.test.js tests/statusline.test.js tests/statusline-context.test.js tests/statusline-links.test.js",
|
|
269
275
|
"test:memory-dedup": "node --test tests/memory-dedup.test.js",
|
|
270
276
|
"test:lesson-db": "node --test tests/lesson-db.test.js",
|
|
271
277
|
"test:lesson-rotation": "node --test tests/lesson-rotation.test.js",
|
|
@@ -483,10 +489,11 @@
|
|
|
483
489
|
"test:demo-voiceover": "node --test tests/demo-voiceover.test.js",
|
|
484
490
|
"test:gate-coherence": "node --test tests/gate-coherence.test.js",
|
|
485
491
|
"test:gate-eval": "node --test tests/gate-eval.test.js",
|
|
486
|
-
"test:high-roi": "node --test tests/high-roi.test.js",
|
|
492
|
+
"test:high-roi": "node --test tests/high-roi.test.js tests/autonomous-workflow.test.js",
|
|
487
493
|
"test:public-static-assets": "node --test tests/public-static-assets.test.js",
|
|
488
494
|
"test:token-savings": "node --test tests/token-savings.test.js",
|
|
489
|
-
"test:workflow-gate-checkpoint": "node --test tests/workflow-gate-checkpoint.test.js",
|
|
495
|
+
"test:workflow-gate-checkpoint": "node --test tests/workflow-gate-checkpoint.test.js tests/autonomous-workflow.test.js",
|
|
496
|
+
"workflow:autonomous": "node scripts/autonomous-workflow.js",
|
|
490
497
|
"test:lesson-export-import": "node --test tests/lesson-export-import.test.js",
|
|
491
498
|
"test:landing-page-claims": "node --test tests/landing-page-claims.test.js",
|
|
492
499
|
"test:dashboard-deeplink-e2e": "node --test tests/dashboard-deeplink-e2e.test.js",
|
package/public/index.html
CHANGED
|
@@ -974,7 +974,7 @@ __GA_BOOTSTRAP__
|
|
|
974
974
|
<!-- HOW IT WORKS -->
|
|
975
975
|
<section class="how-it-works" id="how-it-works">
|
|
976
976
|
<div class="container">
|
|
977
|
-
<div class="section-label">New in v1.
|
|
977
|
+
<div class="section-label">New in v1.9.0</div>
|
|
978
978
|
<h2 class="section-title">Three steps to stop repeated AI failures</h2>
|
|
979
979
|
<div class="steps">
|
|
980
980
|
<div class="step">
|
|
@@ -1330,7 +1330,7 @@ __GA_BOOTSTRAP__
|
|
|
1330
1330
|
<a href="https://www.linkedin.com/in/igorganapolsky" target="_blank" rel="noopener">LinkedIn</a>
|
|
1331
1331
|
<a href="/blog">Blog</a>
|
|
1332
1332
|
</div>
|
|
1333
|
-
<span class="footer-copy">ยฉ 2026 Max Smith KDP LLC ยท MIT License ยท v1.
|
|
1333
|
+
<span class="footer-copy">ยฉ 2026 Max Smith KDP LLC ยท MIT License ยท v1.9.0</span>
|
|
1334
1334
|
</div>
|
|
1335
1335
|
</footer>
|
|
1336
1336
|
|