thumbgate 0.9.12 → 0.9.13
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 +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/.well-known/mcp/server-card.json +1 -1
- package/adapters/README.md +1 -1
- package/adapters/claude/.mcp.json +2 -2
- package/adapters/codex/config.toml +2 -2
- package/adapters/mcp/server-stdio.js +1 -1
- package/adapters/opencode/opencode.json +1 -1
- package/package.json +2 -2
- package/plugins/claude-codex-bridge/.claude-plugin/plugin.json +1 -1
- package/plugins/claude-codex-bridge/.mcp.json +1 -1
- package/plugins/codex-profile/.codex-plugin/plugin.json +1 -1
- package/plugins/codex-profile/.mcp.json +1 -1
- package/plugins/codex-profile/INSTALL.md +1 -1
- package/plugins/codex-profile/README.md +1 -1
- package/plugins/cursor-marketplace/.cursor-plugin/plugin.json +1 -1
- package/plugins/opencode-profile/INSTALL.md +1 -1
- package/public/index.html +1 -1
- package/scripts/__pycache__/train_from_feedback.cpython-312.pyc +0 -0
- package/src/api/server.js +11 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "thumbgate",
|
|
3
3
|
"description": "Pre-action gates that block AI coding agents from repeating known mistakes. Captures feedback, auto-promotes failures into prevention rules, and enforces them via PreToolUse hooks.",
|
|
4
|
-
"version": "0.9.
|
|
4
|
+
"version": "0.9.13",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Igor Ganapolsky"
|
|
7
7
|
},
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "thumbgate",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.13",
|
|
4
4
|
"description": "ThumbGate — 👍👎 feedback that teaches your AI agent. Thumbs down a mistake, it never happens again.",
|
|
5
5
|
"homepage": "https://github.com/IgorGanapolsky/thumbgate",
|
|
6
6
|
"transport": "stdio",
|
package/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@0.9.
|
|
6
|
+
- `claude/.mcp.json`: example Claude Code MCP config using `npx --yes --package thumbgate@0.9.13 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@0.9.
|
|
5
|
+
"args": ["--yes", "--package", "thumbgate@0.9.13", "thumbgate", "serve"]
|
|
6
6
|
}
|
|
7
7
|
},
|
|
8
8
|
"hooks": {
|
|
9
9
|
"preToolUse": {
|
|
10
10
|
"command": "npx",
|
|
11
|
-
"args": ["--yes", "--package", "thumbgate@0.9.
|
|
11
|
+
"args": ["--yes", "--package", "thumbgate@0.9.13", "thumbgate", "gate-check"]
|
|
12
12
|
}
|
|
13
13
|
}
|
|
14
14
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# Codex MCP profile (copy into ~/.codex/config.toml or merge section)
|
|
2
2
|
[mcp_servers.thumbgate]
|
|
3
3
|
command = "npx"
|
|
4
|
-
args = ["--yes", "--package", "thumbgate@0.9.
|
|
4
|
+
args = ["--yes", "--package", "thumbgate@0.9.13", "thumbgate", "serve"]
|
|
5
5
|
|
|
6
6
|
# Hard PreToolUse hook for Codex
|
|
7
7
|
[hooks.pre_tool_use]
|
|
8
8
|
command = "npx"
|
|
9
|
-
args = ["--yes", "--package", "thumbgate@0.9.
|
|
9
|
+
args = ["--yes", "--package", "thumbgate@0.9.13", "thumbgate", "gate-check"]
|
|
@@ -111,7 +111,7 @@ const {
|
|
|
111
111
|
finalizeSession: finalizeFeedbackSession,
|
|
112
112
|
} = require('../../scripts/feedback-session');
|
|
113
113
|
|
|
114
|
-
const SERVER_INFO = { name: 'thumbgate-mcp', version: '0.9.
|
|
114
|
+
const SERVER_INFO = { name: 'thumbgate-mcp', version: '0.9.13' };
|
|
115
115
|
const COMMERCE_CATEGORIES = [
|
|
116
116
|
'product_recommendation',
|
|
117
117
|
'brand_compliance',
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "thumbgate",
|
|
3
|
-
"version": "0.9.
|
|
4
|
-
"description": "ThumbGate
|
|
3
|
+
"version": "0.9.13",
|
|
4
|
+
"description": "ThumbGate — Make your AI coding agent self-improving. Every mistake becomes a prevention rule that physically blocks the agent from repeating it. Feedback-driven enforcement via PreToolUse hooks, Thompson Sampling for adaptive gates, SQLite+FTS5 lesson DB, and LanceDB vector search. Your agent gets smarter with every session.",
|
|
5
5
|
"homepage": "https://thumbgate-production.up.railway.app",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "codex-bridge",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.13",
|
|
4
4
|
"description": "Run Codex review, adversarial review, and second-pass handoffs from Claude Code while keeping ThumbGate reliability memory in the loop.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Igor Ganapolsky",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "codex-profile",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.13",
|
|
4
4
|
"description": "ThumbGate for Codex: pre-action gates, skill packs, hallucination detection, PII scanning, progressive disclosure (82% token savings), and MCP-backed reliability memory.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Igor Ganapolsky",
|
|
@@ -31,7 +31,7 @@ The following block is appended to `~/.codex/config.toml`:
|
|
|
31
31
|
```toml
|
|
32
32
|
[mcp_servers.thumbgate]
|
|
33
33
|
command = "npx"
|
|
34
|
-
args = ["--yes", "--package", "thumbgate@0.9.
|
|
34
|
+
args = ["--yes", "--package", "thumbgate@0.9.13", "thumbgate", "serve"]
|
|
35
35
|
```
|
|
36
36
|
|
|
37
37
|
The repo-local Codex app plugin ships the same runtime path through `plugins/codex-profile/.mcp.json`, so the manual config and plugin metadata stay aligned.
|
|
@@ -29,7 +29,7 @@ That profile launches:
|
|
|
29
29
|
```toml
|
|
30
30
|
[mcp_servers.thumbgate]
|
|
31
31
|
command = "npx"
|
|
32
|
-
args = ["--yes", "--package", "thumbgate@0.9.
|
|
32
|
+
args = ["--yes", "--package", "thumbgate@0.9.13", "thumbgate", "serve"]
|
|
33
33
|
```
|
|
34
34
|
|
|
35
35
|
## Why this exists
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "thumbgate",
|
|
3
3
|
"displayName": "ThumbGate",
|
|
4
4
|
"description": "👍👎 Thumbs down a mistake — your AI agent won't repeat it. Thumbs up good work — it remembers the pattern.",
|
|
5
|
-
"version": "0.9.
|
|
5
|
+
"version": "0.9.13",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Igor Ganapolsky"
|
|
8
8
|
},
|
|
@@ -25,7 +25,7 @@ The portable profile adds this MCP server entry:
|
|
|
25
25
|
"mcp": {
|
|
26
26
|
"thumbgate": {
|
|
27
27
|
"type": "local",
|
|
28
|
-
"command": ["npx", "--yes", "--package", "thumbgate@0.9.
|
|
28
|
+
"command": ["npx", "--yes", "--package", "thumbgate@0.9.13", "thumbgate", "serve"],
|
|
29
29
|
"enabled": true
|
|
30
30
|
}
|
|
31
31
|
}
|
package/public/index.html
CHANGED
|
@@ -554,7 +554,7 @@ __GA_BOOTSTRAP__
|
|
|
554
554
|
<!-- HOW IT WORKS -->
|
|
555
555
|
<section class="how-it-works" id="how-it-works">
|
|
556
556
|
<div class="container">
|
|
557
|
-
<div class="section-label">New in v0.9.
|
|
557
|
+
<div class="section-label">New in v0.9.13</div>
|
|
558
558
|
<h2 class="section-title">Three steps to stop repeated AI failures</h2>
|
|
559
559
|
<div class="steps">
|
|
560
560
|
<div class="step">
|
|
Binary file
|
package/src/api/server.js
CHANGED
|
@@ -3811,11 +3811,21 @@ async function addContext(){
|
|
|
3811
3811
|
return;
|
|
3812
3812
|
}
|
|
3813
3813
|
const body = await parseJsonBody(req);
|
|
3814
|
+
// Auto-include conversation window when caller doesn't provide one
|
|
3815
|
+
let chatHistory = Array.isArray(body.chatHistory) ? body.chatHistory : body.messages;
|
|
3816
|
+
if (!chatHistory || chatHistory.length === 0) {
|
|
3817
|
+
try {
|
|
3818
|
+
chatHistory = readRecentConversationWindow({
|
|
3819
|
+
feedbackDir: getSafeDataDir(),
|
|
3820
|
+
limit: 10,
|
|
3821
|
+
});
|
|
3822
|
+
} catch (_) { /* best-effort — conversation window is optional */ }
|
|
3823
|
+
}
|
|
3814
3824
|
const result = captureFeedback({
|
|
3815
3825
|
signal: body.signal,
|
|
3816
3826
|
context: body.context || '',
|
|
3817
3827
|
relatedFeedbackId: body.relatedFeedbackId,
|
|
3818
|
-
chatHistory
|
|
3828
|
+
chatHistory,
|
|
3819
3829
|
whatWentWrong: body.whatWentWrong,
|
|
3820
3830
|
whatToChange: body.whatToChange,
|
|
3821
3831
|
whatWorked: body.whatWorked,
|