thumbgate 1.1.0 → 1.3.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/README.md +4 -4
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/.well-known/mcp/server-card.json +1 -1
- package/README.md +48 -16
- 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 +11 -8
- package/adapters/opencode/opencode.json +1 -1
- package/bin/cli.js +20 -11
- package/config/github-about.json +1 -1
- package/config/model-tiers.json +11 -0
- package/package.json +22 -11
- 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/cursor-marketplace/README.md +2 -2
- package/plugins/cursor-marketplace/commands/capture-feedback.md +2 -2
- package/plugins/cursor-marketplace/rules/feedback-capture.mdc +3 -3
- package/plugins/cursor-marketplace/skills/capture-feedback/SKILL.md +3 -2
- package/plugins/opencode-profile/INSTALL.md +1 -1
- package/public/compare.html +302 -0
- package/public/guide.html +4 -4
- package/public/index.html +77 -38
- package/public/learn/ai-agent-persistent-memory.html +1 -0
- package/public/lessons.html +325 -17
- package/scripts/__pycache__/train_from_feedback.cpython-312.pyc +0 -0
- package/scripts/ai-search-visibility.js +142 -0
- package/scripts/audit-trail.js +6 -0
- package/scripts/capture-railway-diagnostics.sh +97 -0
- package/scripts/changeset-check.js +372 -0
- package/scripts/check-congruence.js +8 -5
- package/scripts/claude-feedback-sync.js +320 -0
- package/scripts/cli-telemetry.js +4 -1
- package/scripts/computer-use-firewall.js +45 -15
- package/scripts/contextfs.js +32 -23
- package/scripts/dashboard.js +84 -0
- package/scripts/docker-sandbox-planner.js +208 -0
- package/scripts/feedback-loop.js +16 -0
- package/scripts/github-about.js +56 -0
- package/scripts/intervention-policy.js +696 -0
- package/scripts/local-model-profile.js +18 -2
- package/scripts/model-tier-router.js +10 -1
- package/scripts/operational-integrity.js +361 -32
- package/scripts/prove-adapters.js +1 -0
- package/scripts/prove-automation.js +2 -2
- package/scripts/prove-packaged-runtime.js +260 -0
- package/scripts/prove-runtime.js +13 -0
- package/scripts/published-cli.js +10 -1
- package/scripts/rate-limiter.js +3 -3
- package/scripts/statusline-links.js +238 -0
- package/scripts/statusline-local-stats.js +2 -0
- package/scripts/statusline.sh +200 -10
- package/scripts/sync-github-about.js +7 -4
- package/scripts/tool-registry.js +2 -2
- package/scripts/workflow-sentinel.js +197 -39
- package/skills/thumbgate/SKILL.md +1 -1
- package/src/api/server.js +12 -1
package/.claude-plugin/README.md
CHANGED
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
`thumbgate` gives Claude Desktop a local-first **Reliability Gateway** and **Pre-Action Gates** for workflow hardening.
|
|
4
4
|
|
|
5
|
-
The extension path is useful when a team wants Claude Desktop to keep one workflow sharper over time without adding another orchestration layer. The MCP server captures explicit feedback, recalls past failures, distills lessons from
|
|
5
|
+
The extension path is useful when a team wants Claude Desktop to keep one workflow sharper over time without adding another orchestration layer. The MCP server captures explicit feedback, recalls past failures, distills lessons from up to 8 prior recorded entries when the current Claude hook only gets a vague thumbs-down, promotes reusable prevention rules, and produces proof-backed rollout artifacts.
|
|
6
6
|
|
|
7
7
|
## Features
|
|
8
8
|
|
|
9
9
|
- Workflow hardening for Claude-first engineering and ops workflows
|
|
10
10
|
- Pre-Action Gates that block repeated mistakes before tool use
|
|
11
|
-
- History-aware lesson distillation from
|
|
11
|
+
- History-aware lesson distillation from up to 8 prior recorded entries and failed tool calls in the current Claude auto-capture path
|
|
12
12
|
- Reliability memory and recall across long sessions
|
|
13
13
|
- Bounded context packs, provenance, and diagnostics
|
|
14
14
|
- DPO export and analytics bundle generation after runtime reliability lands
|
|
@@ -105,9 +105,9 @@ Optional hosted path:
|
|
|
105
105
|
|
|
106
106
|
**User prompt:** "👎 That was wrong."
|
|
107
107
|
**Expected behavior:**
|
|
108
|
-
- Claude Desktop can pass
|
|
108
|
+
- Claude Desktop can pass up to 8 prior recorded entries and the failed tool call into `capture_feedback`
|
|
109
109
|
- ThumbGate distills a proposed `whatWentWrong` and `whatToChange` from recent history
|
|
110
|
-
- A linked follow-up
|
|
110
|
+
- A linked 60-second follow-up session can refine the same feedback record with `relatedFeedbackId`
|
|
111
111
|
|
|
112
112
|
## Privacy Policy
|
|
113
113
|
|
|
@@ -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": "1.
|
|
4
|
+
"version": "1.3.0",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Igor Ganapolsky"
|
|
7
7
|
},
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "thumbgate",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
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/README.md
CHANGED
|
@@ -1,23 +1,27 @@
|
|
|
1
1
|
# ThumbGate
|
|
2
2
|
|
|
3
|
-
Make your AI coding agent self-improving.
|
|
3
|
+
Make your AI coding agent self-improving. ThumbGate turns thumbs-up and thumbs-down into a learned control plane for autonomous development: pre-action gates, a trained intervention policy, workflow governance, and isolated execution guidance for high-risk runs.
|
|
4
4
|
|
|
5
5
|
[](https://github.com/IgorGanapolsky/ThumbGate/actions/workflows/ci.yml)
|
|
6
6
|
[](https://www.npmjs.com/package/thumbgate)
|
|
7
7
|
[](LICENSE)
|
|
8
|
-
[](https://thumbgate-production.up.railway.app/?utm_source=github&utm_medium=readme&utm_campaign=badge_cta#workflow-sprint-intake)
|
|
9
9
|
|
|
10
|
-
**[
|
|
10
|
+
**[Workflow Hardening Sprint](https://thumbgate-production.up.railway.app/?utm_source=github&utm_medium=readme&utm_campaign=top_cta#workflow-sprint-intake)** · **[Pro Page](https://thumbgate-production.up.railway.app/pro?utm_source=github&utm_medium=readme&utm_campaign=pro_page)** · **[Live Dashboard](https://thumbgate-production.up.railway.app/dashboard?utm_source=github&utm_medium=readme&utm_campaign=top_cta)** · **[Setup Guide](https://thumbgate-production.up.railway.app/guide?utm_source=github&utm_medium=readme&utm_campaign=top_cta)**
|
|
11
11
|
|
|
12
12
|
**Popular buyer questions:** **[How to stop repeated AI agent mistakes](https://thumbgate-production.up.railway.app/guides/stop-repeated-ai-agent-mistakes?utm_source=github&utm_medium=readme&utm_campaign=buyer_questions)** · **[Cursor guardrails](https://thumbgate-production.up.railway.app/guides/cursor-agent-guardrails?utm_source=github&utm_medium=readme&utm_campaign=buyer_questions)** · **[Codex CLI guardrails](https://thumbgate-production.up.railway.app/guides/codex-cli-guardrails?utm_source=github&utm_medium=readme&utm_campaign=buyer_questions)** · **[Gemini CLI memory + enforcement](https://thumbgate-production.up.railway.app/guides/gemini-cli-feedback-memory?utm_source=github&utm_medium=readme&utm_campaign=buyer_questions)**
|
|
13
13
|
|
|
14
14
|
### Get Started
|
|
15
15
|
|
|
16
|
-
**
|
|
16
|
+
**Best first paid motion for teams:** the **Workflow Hardening Sprint**.
|
|
17
17
|
|
|
18
|
-
[](https://thumbgate-production.up.railway.app/?utm_source=github&utm_medium=readme&utm_campaign=get_started#workflow-sprint-intake)
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
One workflow. One owner. One proof review. That is the fastest path to a paid team engagement because it qualifies a real blocker before anyone tries to sell a full rollout.
|
|
21
|
+
|
|
22
|
+
**Self-serve for individual operators:** [ThumbGate Pro](https://thumbgate-production.up.railway.app/pro?utm_source=github&utm_medium=readme&utm_campaign=pro_page) is the paid lane for the personal local dashboard, DPO export, and review-ready evidence.
|
|
23
|
+
|
|
24
|
+
Free stays for individual developers. Pro is **$19/mo or $149/yr** for solo operators. Team pricing anchors at **$12/seat/mo with a 3-seat minimum**, but the public Team path remains intake-first through the sprint. [See pricing →](https://thumbgate-production.up.railway.app/?utm_source=github&utm_medium=readme&utm_campaign=pricing_link#pricing)
|
|
21
25
|
|
|
22
26
|
**Paid path for individual operators:** [ThumbGate Pro](https://thumbgate-production.up.railway.app/pro?utm_source=github&utm_medium=readme&utm_campaign=pro_page) is the buyer-ready page for the personal local dashboard, DPO export, and review-ready evidence. It makes the paid upgrade legible before checkout while the self-hosted path below stays optimized for open source evaluation.
|
|
23
27
|
|
|
@@ -27,6 +31,26 @@ Free for individual developers. Pro adds team dashboards, DPO export, and unlimi
|
|
|
27
31
|
npx thumbgate init
|
|
28
32
|
```
|
|
29
33
|
|
|
34
|
+
## Enterprise Story
|
|
35
|
+
|
|
36
|
+
ThumbGate is the control plane for AI coding agents:
|
|
37
|
+
|
|
38
|
+
- Feedback becomes enforcement, so repeated failures stop at the gate instead of reappearing in review.
|
|
39
|
+
- Workflow Sentinel scores blast radius before execution, so risky PR, release, and publish flows are visible early.
|
|
40
|
+
- High-risk local actions can be routed into Docker Sandboxes, while hosted team automations use a signed isolated sandbox lane.
|
|
41
|
+
- Team rollout stays tied to [Verification Evidence](docs/VERIFICATION_EVIDENCE.md) instead of trust-me operator claims.
|
|
42
|
+
|
|
43
|
+
## Release Confidence
|
|
44
|
+
|
|
45
|
+
Enterprise buyers do not just need a safer runtime. They need legible publishes.
|
|
46
|
+
|
|
47
|
+
- Release-relevant PRs must carry a `.changeset/*.md` entry, so every shipped package version has a customer-readable explanation before publish.
|
|
48
|
+
- [SemVer Policy](docs/SEMVER_POLICY.md) and version-sync checks keep `package.json`, `CHANGELOG.md`, plugin manifests, and installer metadata aligned.
|
|
49
|
+
- CI enforces changeset coverage, version sync, tests, coverage, proof lanes, and operational integrity before merge.
|
|
50
|
+
- Final close-out requires verifying the exact `main` merge commit, with proof anchored in [Verification Evidence](docs/VERIFICATION_EVIDENCE.md).
|
|
51
|
+
|
|
52
|
+
See [Release Confidence](docs/RELEASE_CONFIDENCE.md) for the full trust chain.
|
|
53
|
+
|
|
30
54
|
## Before / After
|
|
31
55
|
|
|
32
56
|
```
|
|
@@ -92,7 +116,9 @@ Or wire MCP directly: `claude mcp add thumbgate -- npx -y thumbgate serve`
|
|
|
92
116
|
|
|
93
117
|
Works with **Claude Code, Cursor, Codex, Gemini, Amp, OpenCode**, and any MCP-compatible agent.
|
|
94
118
|
|
|
95
|
-
> **
|
|
119
|
+
> **Need shared enforcement, auditability, and rollout proof for a team workflow?** [Start with the Workflow Hardening Sprint →](https://thumbgate-production.up.railway.app/?utm_source=github&utm_medium=readme&utm_campaign=quickstart_cta#workflow-sprint-intake)
|
|
120
|
+
>
|
|
121
|
+
> **Need a personal dashboard and DPO export for yourself?** [See ThumbGate Pro →](https://thumbgate-production.up.railway.app/pro?utm_source=github&utm_medium=readme&utm_campaign=quickstart_cta_pro)
|
|
96
122
|
|
|
97
123
|
## Built-in Gates
|
|
98
124
|
|
|
@@ -121,7 +147,7 @@ Works with **Claude Code, Cursor, Codex, Gemini, Amp, OpenCode**, and any MCP-co
|
|
|
121
147
|
└─► lesson inferred from full conversation
|
|
122
148
|
```
|
|
123
149
|
|
|
124
|
-
History-aware distillation turns vague signals into concrete lessons
|
|
150
|
+
History-aware distillation turns vague negative signals into concrete lessons. In the current Claude auto-capture path, ThumbGate can reuse up to 8 prior recorded conversation entries plus the failed tool call, then keep a linked 60-second follow-up session open for later clarification.
|
|
125
151
|
|
|
126
152
|
Free and self-hosted users can invoke `search_lessons` directly through MCP, and via the CLI with `npx thumbgate lessons`.
|
|
127
153
|
|
|
@@ -134,17 +160,19 @@ Free and self-hosted users can invoke `search_lessons` directly through MCP, and
|
|
|
134
160
|
│ Unlimited │ Unlimited feedback │ Shared hosted lesson DB │
|
|
135
161
|
│ feedback │ captures + search │ Org dashboard │
|
|
136
162
|
│ captures │ DPO export │ Gate template library │
|
|
137
|
-
│
|
|
138
|
-
│ lesson
|
|
139
|
-
│ searches
|
|
163
|
+
│ 3 captures │ Personal dashboard │ Isolated execution guidance │
|
|
164
|
+
│ 5 lesson │ │ │
|
|
165
|
+
│ searches/day │ │ │
|
|
140
166
|
└──────────────┴────────────────────┴──────────────────────────────┘
|
|
141
167
|
```
|
|
142
168
|
|
|
143
|
-
Free includes
|
|
169
|
+
Free includes 3 daily feedback captures, 5 daily lesson searches, unlimited recall, and gating. History-aware distillation turns vague feedback into concrete lessons, and feedback sessions (`open_feedback_session` → `append_feedback_context` → `finalize_feedback_session`) keep later clarification linked to one record. The current Claude auto-capture path uses up to 8 prior recorded entries for vague thumbs-down signals; the follow-up session stays open for 60 seconds and resets when more context is appended.
|
|
170
|
+
|
|
171
|
+
It does not update model weights in frontier LLMs. ThumbGate improves runtime behavior by training a local sidecar intervention policy from feedback, gate audits, and diagnostics, then using that policy to strengthen recall, verification, and enforcement decisions on future runs.
|
|
144
172
|
|
|
145
|
-
|
|
173
|
+
The fastest commercial path is not a generic self-serve subscription pitch. It is the Workflow Hardening Sprint: qualify one repeated failure in one valuable workflow, prove the control plane on that surface, then expand into Team seats when shared enforcement matters.
|
|
146
174
|
|
|
147
|
-
**[
|
|
175
|
+
**[Start Workflow Hardening Sprint](https://thumbgate-production.up.railway.app/?utm_source=github&utm_medium=readme&utm_campaign=team_rollout#workflow-sprint-intake)** | **[Get Pro](https://thumbgate-production.up.railway.app/checkout/pro?utm_source=github&utm_medium=readme&utm_campaign=thumbgate)** | **[Live Dashboard](https://thumbgate-production.up.railway.app/dashboard?utm_source=github&utm_medium=readme&utm_campaign=thumbgate)**
|
|
148
176
|
|
|
149
177
|
## Tech Stack
|
|
150
178
|
|
|
@@ -157,18 +185,22 @@ It does not update model weights. It's context engineering — enforcement that
|
|
|
157
185
|
│ JSONL logs │ Thompson Sampling│ Gates config │
|
|
158
186
|
│ ContextFS │ │ Hook wiring │
|
|
159
187
|
├───────────────────┼───────────────────┼──────────────────┤
|
|
160
|
-
│ INTERFACES │ BILLING │
|
|
188
|
+
│ INTERFACES │ BILLING │ EXECUTION │
|
|
161
189
|
│ │ │ │
|
|
162
190
|
│ MCP stdio │ Stripe │ Railway │
|
|
163
191
|
│ HTTP API │ │ Cloudflare │
|
|
164
192
|
│ CLI │ │ Workers │
|
|
165
|
-
│ Node.js >=18 │ │
|
|
193
|
+
│ Node.js >=18 │ │ Docker │
|
|
194
|
+
│ │ │ Sandboxes │
|
|
166
195
|
└───────────────────┴───────────────────┴──────────────────┘
|
|
167
196
|
```
|
|
168
197
|
|
|
169
198
|
## Docs
|
|
170
199
|
|
|
171
200
|
- [Commercial Truth](docs/COMMERCIAL_TRUTH.md) — pricing, claims, what we don't say
|
|
201
|
+
- [Changeset Strategy](docs/CHANGESET_STRATEGY.md) — how release notes, version bumps, and customer-facing change records are enforced
|
|
202
|
+
- [First Dollar Playbook](docs/FIRST_DOLLAR_PLAYBOOK.md) — the operator loop for turning one painful workflow into the next booked pilot
|
|
203
|
+
- [Release Confidence](docs/RELEASE_CONFIDENCE.md) — how Changesets, SemVer, sync checks, proof lanes, and exact-merge verification make publishes inspectable
|
|
172
204
|
- [SemVer Policy](docs/SEMVER_POLICY.md) — stable vs prerelease channel rules
|
|
173
205
|
- [Verification Evidence](docs/VERIFICATION_EVIDENCE.md) — proof artifacts
|
|
174
206
|
- [WORKFLOW.md](WORKFLOW.md) — agent-run contract (scope, hard stops, proof commands)
|
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.3.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.3.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.3.0", "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@1.
|
|
4
|
+
args = ["--yes", "--package", "thumbgate@1.3.0", "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@1.
|
|
9
|
+
args = ["--yes", "--package", "thumbgate@1.3.0", "thumbgate", "gate-check"]
|
|
@@ -105,7 +105,7 @@ function enforceLimit(action) {
|
|
|
105
105
|
const limit = checkLimit(action);
|
|
106
106
|
if (!limit.allowed) {
|
|
107
107
|
const err = new Error(
|
|
108
|
-
`Free tier
|
|
108
|
+
`Free tier limit reached. Upgrade to Pro for unlimited: https://thumbgate-production.up.railway.app/pro\n${UPGRADE_MESSAGE}\nUpgrade now: ${PRO_CHECKOUT_URL}`
|
|
109
109
|
);
|
|
110
110
|
err.errorCategory = 'rate_limit';
|
|
111
111
|
err.isRetryable = false;
|
|
@@ -119,7 +119,7 @@ const {
|
|
|
119
119
|
finalizeSession: finalizeFeedbackSession,
|
|
120
120
|
} = require('../../scripts/feedback-session');
|
|
121
121
|
|
|
122
|
-
const SERVER_INFO = { name: 'thumbgate-mcp', version: '1.
|
|
122
|
+
const SERVER_INFO = { name: 'thumbgate-mcp', version: '1.3.0' };
|
|
123
123
|
const COMMERCE_CATEGORIES = [
|
|
124
124
|
'product_recommendation',
|
|
125
125
|
'brand_compliance',
|
|
@@ -364,12 +364,14 @@ function buildEstimateUncertaintyResponse(args = {}) {
|
|
|
364
364
|
|
|
365
365
|
async function callTool(name, args = {}) {
|
|
366
366
|
assertToolAllowed(name, getActiveMcpProfile());
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
367
|
+
if (name !== 'workflow_sentinel') {
|
|
368
|
+
const firewallResult = (await evaluateGatesAsync(name, args)) || evaluateSecretGuard({ tool_name: name, tool_input: args });
|
|
369
|
+
if (firewallResult && firewallResult.decision === 'deny') {
|
|
370
|
+
const err = new Error(`Action blocked by Semantic Firewall: ${firewallResult.message}`);
|
|
371
|
+
err.errorCategory = 'permission';
|
|
372
|
+
err.isRetryable = false;
|
|
373
|
+
throw err;
|
|
374
|
+
}
|
|
373
375
|
}
|
|
374
376
|
const startMs = Date.now();
|
|
375
377
|
const result = await callToolInner(name, args);
|
|
@@ -628,6 +630,7 @@ async function callToolInner(name, args) {
|
|
|
628
630
|
affectedFiles: Array.isArray(args.changedFiles) ? args.changedFiles : undefined,
|
|
629
631
|
requirePrForReleaseSensitive: args.requirePrForReleaseSensitive === true,
|
|
630
632
|
requireVersionNotBehindBase: args.requireVersionNotBehindBase === true,
|
|
633
|
+
governanceState: getScopeState(),
|
|
631
634
|
}));
|
|
632
635
|
case 'register_claim_gate':
|
|
633
636
|
return toTextResult(registerClaimGate(args.claimPattern, args.requiredActions, args.message));
|
package/bin/cli.js
CHANGED
|
@@ -115,6 +115,7 @@ function telemetryPing(installId) {
|
|
|
115
115
|
const req = mod.request(url, { method: 'POST', headers: { 'Content-Type': 'application/json', 'Content-Length': Buffer.byteLength(payload) }, timeout: 3000 }, () => {});
|
|
116
116
|
req.on('error', () => {});
|
|
117
117
|
req.on('timeout', () => { req.destroy(); });
|
|
118
|
+
req.on('socket', (s) => s.unref()); // fire-and-forget: never block process exit
|
|
118
119
|
req.end(payload);
|
|
119
120
|
} catch (_) { /* telemetry is best-effort */ }
|
|
120
121
|
}
|
|
@@ -134,8 +135,8 @@ function proNudge(context) {
|
|
|
134
135
|
function limitNudge(action) {
|
|
135
136
|
if (process.env.THUMBGATE_NO_NUDGE === '1') return;
|
|
136
137
|
process.stderr.write(
|
|
137
|
-
`\n ⚠️ Free tier
|
|
138
|
-
` Upgrade to Pro for unlimited usage — ${PRO_PRICE_LABEL}:\n` +
|
|
138
|
+
`\n ⚠️ Free tier limit reached. Upgrade to Pro for unlimited: https://thumbgate-production.up.railway.app/pro\n` +
|
|
139
|
+
` ${action} daily limit reached. Upgrade to Pro for unlimited usage — ${PRO_PRICE_LABEL}:\n` +
|
|
139
140
|
` ${PRO_CHECKOUT_URL}\n\n`
|
|
140
141
|
);
|
|
141
142
|
}
|
|
@@ -580,13 +581,12 @@ function init() {
|
|
|
580
581
|
console.log('Run: npx thumbgate help');
|
|
581
582
|
trackEvent('cli_init', { command: 'init' });
|
|
582
583
|
proNudge();
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
);
|
|
584
|
+
console.log('');
|
|
585
|
+
console.log(' ┌─────────────────────────────────────────────────────┐');
|
|
586
|
+
console.log(' │ Unlock unlimited captures, searches & dashboard: │');
|
|
587
|
+
console.log(' │ https://thumbgate-production.up.railway.app/pro │');
|
|
588
|
+
console.log(' │ Pro starts at $19/mo — 7-day free trial included │');
|
|
589
|
+
console.log(' └─────────────────────────────────────────────────────┘');
|
|
590
590
|
|
|
591
591
|
try {
|
|
592
592
|
const { appendFunnelEvent } = require(path.join(PKG_ROOT, 'scripts', 'billing'));
|
|
@@ -663,7 +663,7 @@ function capture() {
|
|
|
663
663
|
const pct = Math.round((capLimit.used / capLimit.limit) * 100);
|
|
664
664
|
console.log(` Usage : ${capLimit.used}/${capLimit.limit} captures today (${pct}%)`);
|
|
665
665
|
if (capLimit.remaining <= 1) {
|
|
666
|
-
console.log(` ⚠️
|
|
666
|
+
console.log(` ⚠️ Free tier limit reached. Upgrade to Pro for unlimited: https://thumbgate-production.up.railway.app/pro`);
|
|
667
667
|
}
|
|
668
668
|
}
|
|
669
669
|
console.log('');
|
|
@@ -892,7 +892,7 @@ function pro() {
|
|
|
892
892
|
|
|
893
893
|
if (args.info) {
|
|
894
894
|
printProInfo();
|
|
895
|
-
|
|
895
|
+
process.exit(0);
|
|
896
896
|
}
|
|
897
897
|
|
|
898
898
|
const resolvedKey = resolveProKey();
|
|
@@ -901,6 +901,7 @@ function pro() {
|
|
|
901
901
|
}
|
|
902
902
|
|
|
903
903
|
printProInfo();
|
|
904
|
+
process.exit(0);
|
|
904
905
|
}
|
|
905
906
|
|
|
906
907
|
function summary() {
|
|
@@ -1232,6 +1233,10 @@ function cacheUpdate() {
|
|
|
1232
1233
|
|
|
1233
1234
|
function statuslineRender() {
|
|
1234
1235
|
syncActiveProjectContext();
|
|
1236
|
+
try {
|
|
1237
|
+
const { syncClaudeHistoryFeedback } = require(path.join(PKG_ROOT, 'scripts', 'claude-feedback-sync'));
|
|
1238
|
+
syncClaudeHistoryFeedback();
|
|
1239
|
+
} catch (_) { /* best-effort fallback sync */ }
|
|
1235
1240
|
const payload = readStdinText();
|
|
1236
1241
|
const output = execFileSync('bash', [path.join(PKG_ROOT, 'scripts', 'statusline.sh')], {
|
|
1237
1242
|
encoding: 'utf8',
|
|
@@ -1283,6 +1288,10 @@ function hookAutoCapture() {
|
|
|
1283
1288
|
|
|
1284
1289
|
function sessionStart() {
|
|
1285
1290
|
syncActiveProjectContext();
|
|
1291
|
+
try {
|
|
1292
|
+
const { syncClaudeHistoryFeedback } = require(path.join(PKG_ROOT, 'scripts', 'claude-feedback-sync'));
|
|
1293
|
+
syncClaudeHistoryFeedback();
|
|
1294
|
+
} catch (_) { /* best-effort fallback sync */ }
|
|
1286
1295
|
const { analyzeFeedback } = require(path.join(PKG_ROOT, 'scripts', 'feedback-loop'));
|
|
1287
1296
|
const { refreshStatuslineCache } = require(path.join(PKG_ROOT, 'scripts', 'hook-thumbgate-cache-updater'));
|
|
1288
1297
|
refreshStatuslineCache(analyzeFeedback());
|
package/config/github-about.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"repo": "IgorGanapolsky/ThumbGate",
|
|
3
3
|
"repositoryUrl": "https://github.com/IgorGanapolsky/ThumbGate",
|
|
4
4
|
"homepageUrl": "https://thumbgate-production.up.railway.app",
|
|
5
|
-
"description": "Pre-action gates for AI coding agents. 👎 Thumbs down
|
|
5
|
+
"description": "Pre-action gates, a learned intervention policy, and workflow governance for self-improving AI coding agents. 👎 Thumbs down distills history-aware lessons from up to 8 prior entries and stays linked to a 60-second feedback session. 👍 Thumbs up reinforces safe patterns. Team adds shared lessons and org visibility.",
|
|
6
6
|
"topics": [
|
|
7
7
|
"thumbgate",
|
|
8
8
|
"pre-action-gates",
|
package/config/model-tiers.json
CHANGED
|
@@ -22,6 +22,17 @@
|
|
|
22
22
|
"tokenCap": 500000,
|
|
23
23
|
"requireReason": true
|
|
24
24
|
}
|
|
25
|
+
},
|
|
26
|
+
"localFrontier": {
|
|
27
|
+
"label": "GLM 5.1",
|
|
28
|
+
"taskTypes": [],
|
|
29
|
+
"maxContextTokens": 1000000,
|
|
30
|
+
"costMultiplier": 0.0,
|
|
31
|
+
"budgetDefaults": {
|
|
32
|
+
"tokenCap": 2000000,
|
|
33
|
+
"requireReason": false
|
|
34
|
+
},
|
|
35
|
+
"notes": "Self-hosted open-source tier. Activate via THUMBGATE_LOCAL_MODEL_FAMILY=glm-*. Zero marginal cost; no token budget enforcement needed."
|
|
25
36
|
}
|
|
26
37
|
},
|
|
27
38
|
"escalationRules": {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "thumbgate",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
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": {
|
|
@@ -32,6 +32,10 @@
|
|
|
32
32
|
"scripts": {
|
|
33
33
|
"postinstall": "node bin/postinstall.js || true",
|
|
34
34
|
"start": "node src/api/server.js",
|
|
35
|
+
"changeset": "changeset",
|
|
36
|
+
"changeset:version": "changeset version && node scripts/sync-version.js",
|
|
37
|
+
"changeset:status": "changeset status",
|
|
38
|
+
"changeset:check": "node scripts/changeset-check.js",
|
|
35
39
|
"build:claude-mcpb": "node scripts/build-claude-mcpb.js",
|
|
36
40
|
"verify:quick": "node scripts/verify-run.js quick",
|
|
37
41
|
"verify:full": "node scripts/verify-run.js full",
|
|
@@ -66,7 +70,7 @@
|
|
|
66
70
|
"social:post-everywhere:dry": "node scripts/post-everywhere.js --dry-run",
|
|
67
71
|
"social:reply-monitor": "node scripts/social-reply-monitor.js",
|
|
68
72
|
"social:reply-monitor:dry": "node scripts/social-reply-monitor.js --dry-run",
|
|
69
|
-
"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: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: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: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:lesson-retrieval && 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-quality-gate && npm run test:a2ui-engine && npm run test:gate-satisfy && npm run test:money-watcher && 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",
|
|
73
|
+
"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: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: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: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:lesson-retrieval && 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-quality-gate && npm run test:a2ui-engine && npm run test:gate-satisfy && npm run test:money-watcher && 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",
|
|
70
74
|
"test:feedback-fallback": "node --test tests/feedback-fallback.test.js",
|
|
71
75
|
"test:metaclaw": "node --test tests/metaclaw-features.test.js",
|
|
72
76
|
"test:server-lock": "node --test tests/server-stdio-lock.test.js",
|
|
@@ -74,7 +78,7 @@
|
|
|
74
78
|
"test:multi-hop-recall": "node --test tests/multi-hop-recall.test.js",
|
|
75
79
|
"test:synthetic-dpo": "node --test tests/synthetic-dpo.test.js",
|
|
76
80
|
"test:thumbgate-skill": "node --test tests/thumbgate-skill.test.js",
|
|
77
|
-
"test:statusline": "node --test tests/statusline.test.js",
|
|
81
|
+
"test:statusline": "node --test tests/claude-feedback-sync.test.js tests/statusline.test.js tests/statusline-links.test.js",
|
|
78
82
|
"test:memory-dedup": "node --test tests/memory-dedup.test.js",
|
|
79
83
|
"test:lesson-db": "node --test tests/lesson-db.test.js",
|
|
80
84
|
"test:lesson-rotation": "node --test tests/lesson-rotation.test.js",
|
|
@@ -117,7 +121,7 @@
|
|
|
117
121
|
"test:loop": "node scripts/feedback-loop.js --test",
|
|
118
122
|
"test:dpo": "node scripts/export-dpo-pairs.js --test",
|
|
119
123
|
"test:kto": "node --test tests/export-kto.test.js",
|
|
120
|
-
"test:api": "node --test --test-concurrency=1 tests/api-server.test.js tests/api-auth-config.test.js tests/mcp-server.test.js tests/adapters.test.js tests/openapi-parity.test.js tests/budget-guard.test.js tests/contextfs.test.js tests/pack-templates.test.js tests/dashboard.test.js tests/dashboard-render-spec.test.js tests/dashboard-html.test.js tests/agent-readiness.test.js tests/mcp-policy.test.js tests/subagent-profiles.test.js tests/intent-router.test.js tests/internal-agent-bootstrap.test.js tests/
|
|
124
|
+
"test:api": "node --test --test-concurrency=1 tests/api-server.test.js tests/api-auth-config.test.js tests/mcp-server.test.js tests/adapters.test.js tests/openapi-parity.test.js tests/budget-guard.test.js tests/context-manager.test.js tests/contextfs.test.js tests/job-api.test.js tests/pack-templates.test.js tests/dashboard.test.js tests/dashboard-render-spec.test.js tests/dashboard-html.test.js tests/agent-readiness.test.js tests/mcp-policy.test.js tests/subagent-profiles.test.js tests/intent-router.test.js tests/internal-agent-bootstrap.test.js tests/lesson-search.test.js tests/thumbgate-search.test.js tests/rubric-engine.test.js tests/self-healing-check.test.js tests/self-heal.test.js tests/feedback-schema.test.js tests/thompson-sampling.test.js tests/feedback-sequences.test.js tests/diversity-tracking.test.js tests/vector-store.test.js tests/feedback-attribution.test.js tests/hybrid-feedback-context.test.js tests/loop-closure.test.js tests/code-reasoning.test.js tests/feedback-loop.test.js tests/feedback-inbox-read.test.js tests/feedback-to-memory.test.js tests/test-coverage.test.js tests/version-metadata.test.js tests/claude-mcpb.test.js tests/claude-codex-bridge.test.js tests/cursor-plugin.test.js tests/codex-plugin.test.js tests/telemetry-analytics.test.js tests/public-landing.test.js tests/lessons-page.test.js tests/pro-landing.test.js tests/local-model-profile.test.js tests/risk-scorer.test.js tests/context-compaction.test.js tests/reminder-engine.test.js tests/post-to-x.test.js tests/verification-loop.test.js tests/async-job-runner.test.js tests/commerce-quality.test.js tests/recall-limit.test.js tests/problem-detail.test.js tests/natural-language-harness.test.js tests/settings-hierarchy.test.js",
|
|
121
125
|
"test:proof": "node --test tests/prove-adapters.test.js tests/prove-attribution.test.js tests/prove-cloudflare-sandbox.test.js tests/prove-data-quality.test.js tests/prove-intelligence.test.js tests/prove-lancedb.test.js tests/prove-loop-closure.test.js tests/prove-subway-upgrades.test.js tests/prove-training-export.test.js tests/prove-local-intelligence.test.js tests/prove-workflow-contract.test.js tests/prove-autoresearch.test.js tests/prove-claim-verification.test.js tests/prove-data-pipeline.test.js tests/prove-evolution.test.js tests/prove-harnesses.test.js tests/prove-runtime.test.js tests/prove-seo-gsd.test.js tests/prove-settings.test.js tests/prove-xmemory.test.js && node --test tests/prove-automation.test.js",
|
|
122
126
|
"test:e2e": "node --test tests/e2e-pipeline.test.js tests/e2e-product-flows.test.js tests/e2e-coverage-contract.test.js",
|
|
123
127
|
"test:rlaif": "node --test tests/rlaif-self-audit.test.js tests/dpo-optimizer.test.js tests/meta-policy.test.js",
|
|
@@ -125,17 +129,17 @@
|
|
|
125
129
|
"test:quality": "node --test tests/validate-feedback.test.js",
|
|
126
130
|
"test:intelligence": "node --test tests/intelligence.test.js",
|
|
127
131
|
"test:training-export": "node --test tests/training-export.test.js tests/databricks-export.test.js",
|
|
128
|
-
"test:deployment": "node --test tests/deployment.test.js tests/deploy-policy.test.js tests/publish-decision.test.js",
|
|
132
|
+
"test:deployment": "node --test tests/deployment.test.js tests/deploy-policy.test.js tests/publish-decision.test.js tests/changeset-check.test.js tests/sonarcloud-workflow.test.js",
|
|
129
133
|
"test:operational-integrity": "node --test tests/operational-integrity.test.js",
|
|
130
|
-
"test:workflow": "node --test tests/workflow-contract.test.js tests/social-marketing-assets.test.js tests/social-pipeline.test.js tests/positioning-contract.test.js tests/workflow-runs.test.js tests/workflow-sprint-intake.test.js tests/gtm-revenue-loop.test.js",
|
|
134
|
+
"test:workflow": "node --test tests/workflow-contract.test.js tests/social-marketing-assets.test.js tests/social-pipeline.test.js tests/positioning-contract.test.js tests/workflow-runs.test.js tests/workflow-sprint-intake.test.js tests/gtm-revenue-loop.test.js tests/enterprise-story.test.js",
|
|
131
135
|
"test:billing": "node --test tests/billing.test.js",
|
|
132
|
-
"test:cli": "node --test tests/analytics-report.test.js tests/creator-campaigns.test.js tests/cli.test.js tests/codex-bridge-script.test.js tests/dispatch-brief.test.js tests/feedback-normalize.test.js tests/install-mcp.test.js tests/pr-manager.test.js tests/pro-local-dashboard.test.js tests/revenue-status.test.js",
|
|
136
|
+
"test:cli": "node --test tests/analytics-report.test.js tests/creator-campaigns.test.js tests/cli.test.js tests/codex-bridge-script.test.js tests/dispatch-brief.test.js tests/feedback-normalize.test.js tests/install-mcp.test.js tests/pr-manager.test.js tests/pro-local-dashboard.test.js tests/published-cli.test.js tests/revenue-status.test.js",
|
|
133
137
|
"test:evolution": "node --test tests/workspace-evolver.test.js",
|
|
134
138
|
"test:watcher": "node --test tests/jsonl-watcher.test.js",
|
|
135
139
|
"test:autoresearch": "node --test tests/autoresearch.test.js",
|
|
136
|
-
"test:ops": "node --test 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/delegation-runtime.test.js tests/disagreement-mining.test.js tests/failure-diagnostics.test.js tests/gate-stats.test.js tests/github-billing.test.js tests/markdown-escape.test.js tests/mcp-tools-gates.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-webhook-route.test.js tests/train-from-feedback.test.js tests/workflow-hardening-sprint.test.js tests/test-suite-parity.test.js tests/a2ui-engine.test.js tests/webhook-delivery.test.js",
|
|
140
|
+
"test:ops": "node --test 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/delegation-runtime.test.js tests/disagreement-mining.test.js tests/failure-diagnostics.test.js tests/gate-stats.test.js tests/github-billing.test.js tests/intervention-policy.test.js tests/markdown-escape.test.js tests/mcp-tools-gates.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-webhook-route.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",
|
|
137
141
|
"test:tessl": "node --test tests/tessl-export.test.js",
|
|
138
|
-
"test:gates": "node --test tests/gate-templates.test.js tests/gates-engine.test.js tests/claim-verification.test.js tests/secret-scanner.test.js tests/prompt-guard.test.js tests/audit-trail.test.js tests/profile-router.test.js tests/workflow-sentinel.test.js",
|
|
142
|
+
"test:gates": "node --test tests/gate-templates.test.js tests/gates-engine.test.js tests/claim-verification.test.js tests/secret-scanner.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",
|
|
139
143
|
"test:workers": "npm --prefix workers ci && npm --prefix workers test",
|
|
140
144
|
"test:evoskill": "node --test tests/evoskill.test.js",
|
|
141
145
|
"test:gates-hardening": "node --test tests/gates-hardening.test.js",
|
|
@@ -172,6 +176,7 @@
|
|
|
172
176
|
"prove:harnesses": "node scripts/prove-harnesses.js",
|
|
173
177
|
"prove:local-intelligence": "node scripts/prove-local-intelligence.js",
|
|
174
178
|
"prove:runtime": "node scripts/prove-runtime.js",
|
|
179
|
+
"prove:packaged-runtime": "node scripts/prove-packaged-runtime.js",
|
|
175
180
|
"prove:settings": "node scripts/prove-settings.js",
|
|
176
181
|
"prove:seo-gsd": "node scripts/prove-seo-gsd.js",
|
|
177
182
|
"prove:tessl": "node scripts/prove-tessl.js",
|
|
@@ -236,7 +241,8 @@
|
|
|
236
241
|
"test:social-reply-monitor": "node --test tests/social-reply-monitor.test.js",
|
|
237
242
|
"test:sync-launch-assets": "node --test tests/sync-launch-assets.test.js",
|
|
238
243
|
"test:reddit-publisher": "node --test tests/reddit-publisher.test.js",
|
|
239
|
-
"test:engagement-audit": "node --test tests/engagement-audit.test.js"
|
|
244
|
+
"test:engagement-audit": "node --test tests/engagement-audit.test.js",
|
|
245
|
+
"test:ai-search-visibility": "node --test tests/ai-search-visibility.test.js"
|
|
240
246
|
},
|
|
241
247
|
"keywords": [
|
|
242
248
|
"mcp",
|
|
@@ -298,5 +304,10 @@
|
|
|
298
304
|
"path-to-regexp": "0.1.13"
|
|
299
305
|
}
|
|
300
306
|
},
|
|
301
|
-
"mcpName": "io.github.IgorGanapolsky/thumbgate"
|
|
307
|
+
"mcpName": "io.github.IgorGanapolsky/thumbgate",
|
|
308
|
+
"devDependencies": {
|
|
309
|
+
"@changesets/changelog-github": "^0.5.1",
|
|
310
|
+
"@changesets/cli": "^2.30.0",
|
|
311
|
+
"c8": "^11.0.0"
|
|
312
|
+
}
|
|
302
313
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "codex-bridge",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
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": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
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@1.
|
|
34
|
+
args = ["--yes", "--package", "thumbgate@1.3.0", "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.
|
|
@@ -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": "1.
|
|
5
|
+
"version": "1.3.0",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Igor Ganapolsky"
|
|
8
8
|
},
|