thumbgate 1.1.0 β†’ 1.2.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.
Files changed (35) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/.well-known/mcp/server-card.json +1 -1
  4. package/README.md +16 -5
  5. package/adapters/README.md +1 -1
  6. package/adapters/claude/.mcp.json +2 -2
  7. package/adapters/codex/config.toml +2 -2
  8. package/adapters/mcp/server-stdio.js +10 -7
  9. package/adapters/opencode/opencode.json +1 -1
  10. package/config/github-about.json +1 -1
  11. package/package.json +20 -11
  12. package/plugins/claude-codex-bridge/.claude-plugin/plugin.json +1 -1
  13. package/plugins/claude-codex-bridge/.mcp.json +1 -1
  14. package/plugins/codex-profile/.codex-plugin/plugin.json +1 -1
  15. package/plugins/codex-profile/.mcp.json +1 -1
  16. package/plugins/codex-profile/INSTALL.md +1 -1
  17. package/plugins/codex-profile/README.md +1 -1
  18. package/plugins/cursor-marketplace/.cursor-plugin/plugin.json +1 -1
  19. package/plugins/opencode-profile/INSTALL.md +1 -1
  20. package/public/compare.html +302 -0
  21. package/public/index.html +36 -10
  22. package/scripts/__pycache__/train_from_feedback.cpython-312.pyc +0 -0
  23. package/scripts/ai-search-visibility.js +142 -0
  24. package/scripts/changeset-check.js +372 -0
  25. package/scripts/check-congruence.js +7 -4
  26. package/scripts/computer-use-firewall.js +45 -15
  27. package/scripts/docker-sandbox-planner.js +208 -0
  28. package/scripts/github-about.js +56 -0
  29. package/scripts/operational-integrity.js +7 -1
  30. package/scripts/published-cli.js +10 -1
  31. package/scripts/statusline-links.js +238 -0
  32. package/scripts/statusline.sh +39 -4
  33. package/scripts/sync-github-about.js +7 -4
  34. package/scripts/workflow-sentinel.js +83 -35
  35. package/src/api/server.js +12 -1
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "thumbgate",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "plugins": [
5
5
  {
6
6
  "name": "thumbgate",
@@ -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.1.0",
4
+ "version": "1.2.0",
5
5
  "author": {
6
6
  "name": "Igor Ganapolsky"
7
7
  },
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "thumbgate",
3
- "version": "1.1.0",
3
+ "version": "1.2.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,6 +1,6 @@
1
1
  # ThumbGate
2
2
 
3
- Make your AI coding agent self-improving. One thumbs-down creates a gate that permanently blocks the mistake.
3
+ Make your AI coding agent self-improving. ThumbGate turns thumbs-up and thumbs-down into a control plane for autonomous development: pre-action gates, workflow governance, and isolated execution guidance for high-risk runs.
4
4
 
5
5
  [![CI](https://github.com/IgorGanapolsky/ThumbGate/actions/workflows/ci.yml/badge.svg)](https://github.com/IgorGanapolsky/ThumbGate/actions/workflows/ci.yml)
6
6
  [![npm](https://img.shields.io/npm/v/thumbgate)](https://www.npmjs.com/package/thumbgate)
@@ -27,6 +27,15 @@ Free for individual developers. Pro adds team dashboards, DPO export, and unlimi
27
27
  npx thumbgate init
28
28
  ```
29
29
 
30
+ ## Enterprise Story
31
+
32
+ ThumbGate is the control plane for AI coding agents:
33
+
34
+ - Feedback becomes enforcement, so repeated failures stop at the gate instead of reappearing in review.
35
+ - Workflow Sentinel scores blast radius before execution, so risky PR, release, and publish flows are visible early.
36
+ - High-risk local actions can be routed into Docker Sandboxes, while hosted team automations use a signed isolated sandbox lane.
37
+ - Team rollout stays tied to [Verification Evidence](docs/VERIFICATION_EVIDENCE.md) instead of trust-me operator claims.
38
+
30
39
  ## Before / After
31
40
 
32
41
  ```
@@ -134,7 +143,7 @@ Free and self-hosted users can invoke `search_lessons` directly through MCP, and
134
143
  β”‚ Unlimited β”‚ Unlimited feedback β”‚ Shared hosted lesson DB β”‚
135
144
  β”‚ feedback β”‚ captures + search β”‚ Org dashboard β”‚
136
145
  β”‚ captures β”‚ DPO export β”‚ Gate template library β”‚
137
- β”‚ 5 daily β”‚ Personal dashboard β”‚ Workflow hardening sprint β”‚
146
+ β”‚ 5 daily β”‚ Personal dashboard β”‚ Isolated execution guidance β”‚
138
147
  β”‚ lesson β”‚ β”‚ β”‚
139
148
  β”‚ searches β”‚ β”‚ β”‚
140
149
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
@@ -142,7 +151,7 @@ Free and self-hosted users can invoke `search_lessons` directly through MCP, and
142
151
 
143
152
  Free includes unlimited feedback captures, 5 daily lesson searches, unlimited recall, and gating. History-aware distillation turns vague feedback into concrete lessons. Feedback sessions (`open_feedback_session` β†’ `append_feedback_context` β†’ `finalize_feedback_session`) link follow-up context to one record.
144
153
 
145
- It does not update model weights. It's context engineering β€” enforcement that gets smarter every session.
154
+ It does not update model weights. It's context engineering plus execution control: enforcement that gets smarter every session, with Docker Sandboxes guidance for the riskiest local actions and a hosted isolated lane for team workflows.
146
155
 
147
156
  **[Get Pro](https://thumbgate-production.up.railway.app/checkout/pro?utm_source=github&utm_medium=readme&utm_campaign=thumbgate)** | **[Start Team Rollout](https://thumbgate-production.up.railway.app/?utm_source=github&utm_medium=readme&utm_campaign=team_rollout#workflow-sprint-intake)** | **[Live Dashboard](https://thumbgate-production.up.railway.app/dashboard?utm_source=github&utm_medium=readme&utm_campaign=thumbgate)**
148
157
 
@@ -157,18 +166,20 @@ It does not update model weights. It's context engineering β€” enforcement that
157
166
  β”‚ JSONL logs β”‚ Thompson Samplingβ”‚ Gates config β”‚
158
167
  β”‚ ContextFS β”‚ β”‚ Hook wiring β”‚
159
168
  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
160
- β”‚ INTERFACES β”‚ BILLING β”‚ HOSTING β”‚
169
+ β”‚ INTERFACES β”‚ BILLING β”‚ EXECUTION β”‚
161
170
  β”‚ β”‚ β”‚ β”‚
162
171
  β”‚ MCP stdio β”‚ Stripe β”‚ Railway β”‚
163
172
  β”‚ HTTP API β”‚ β”‚ Cloudflare β”‚
164
173
  β”‚ CLI β”‚ β”‚ Workers β”‚
165
- β”‚ Node.js >=18 β”‚ β”‚ β”‚
174
+ β”‚ Node.js >=18 β”‚ β”‚ Docker β”‚
175
+ β”‚ β”‚ β”‚ Sandboxes β”‚
166
176
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
167
177
  ```
168
178
 
169
179
  ## Docs
170
180
 
171
181
  - [Commercial Truth](docs/COMMERCIAL_TRUTH.md) β€” pricing, claims, what we don't say
182
+ - [Changeset Strategy](docs/CHANGESET_STRATEGY.md) β€” how release notes, version bumps, and customer-facing change records are enforced
172
183
  - [SemVer Policy](docs/SEMVER_POLICY.md) β€” stable vs prerelease channel rules
173
184
  - [Verification Evidence](docs/VERIFICATION_EVIDENCE.md) β€” proof artifacts
174
185
  - [WORKFLOW.md](WORKFLOW.md) β€” agent-run contract (scope, hard stops, proof commands)
@@ -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.1.0 thumbgate serve`.
6
+ - `claude/.mcp.json`: example Claude Code MCP config using `npx --yes --package thumbgate@1.2.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.1.0", "thumbgate", "serve"]
5
+ "args": ["--yes", "--package", "thumbgate@1.2.0", "thumbgate", "serve"]
6
6
  }
7
7
  },
8
8
  "hooks": {
9
9
  "preToolUse": {
10
10
  "command": "npx",
11
- "args": ["--yes", "--package", "thumbgate@1.1.0", "thumbgate", "gate-check"]
11
+ "args": ["--yes", "--package", "thumbgate@1.2.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.1.0", "thumbgate", "serve"]
4
+ args = ["--yes", "--package", "thumbgate@1.2.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.1.0", "thumbgate", "gate-check"]
9
+ args = ["--yes", "--package", "thumbgate@1.2.0", "thumbgate", "gate-check"]
@@ -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.1.0' };
122
+ const SERVER_INFO = { name: 'thumbgate-mcp', version: '1.2.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
- const firewallResult = (await evaluateGatesAsync(name, args)) || evaluateSecretGuard({ tool_name: name, tool_input: args });
368
- if (firewallResult && firewallResult.decision === 'deny') {
369
- const err = new Error(`Action blocked by Semantic Firewall: ${firewallResult.message}`);
370
- err.errorCategory = 'permission';
371
- err.isRetryable = false;
372
- throw err;
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));
@@ -7,7 +7,7 @@
7
7
  "npx",
8
8
  "--yes",
9
9
  "--package",
10
- "thumbgate@1.1.0",
10
+ "thumbgate@1.2.0",
11
11
  "thumbgate",
12
12
  "serve"
13
13
  ],
@@ -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 β†’ prevention rule β†’ mistake permanently blocked. πŸ‘ Thumbs up β†’ pattern reinforced. History-aware lessons from your corrections. Team adds shared lessons and org visibility.",
5
+ "description": "Pre-action gates and workflow governance for AI coding agents. πŸ‘Ž Thumbs down β†’ prevention rule β†’ mistake permanently blocked. πŸ‘ Thumbs up β†’ pattern reinforced. History-aware lessons from your corrections. Risky local runs can route into Docker Sandboxes. Team adds shared lessons and org visibility, plus isolated execution guidance.",
6
6
  "topics": [
7
7
  "thumbgate",
8
8
  "pre-action-gates",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "thumbgate",
3
- "version": "1.1.0",
3
+ "version": "1.2.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/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/job-api.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/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",
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/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",
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/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",
@@ -236,7 +240,8 @@
236
240
  "test:social-reply-monitor": "node --test tests/social-reply-monitor.test.js",
237
241
  "test:sync-launch-assets": "node --test tests/sync-launch-assets.test.js",
238
242
  "test:reddit-publisher": "node --test tests/reddit-publisher.test.js",
239
- "test:engagement-audit": "node --test tests/engagement-audit.test.js"
243
+ "test:engagement-audit": "node --test tests/engagement-audit.test.js",
244
+ "test:ai-search-visibility": "node --test tests/ai-search-visibility.test.js"
240
245
  },
241
246
  "keywords": [
242
247
  "mcp",
@@ -298,5 +303,9 @@
298
303
  "path-to-regexp": "0.1.13"
299
304
  }
300
305
  },
301
- "mcpName": "io.github.IgorGanapolsky/thumbgate"
306
+ "mcpName": "io.github.IgorGanapolsky/thumbgate",
307
+ "devDependencies": {
308
+ "@changesets/changelog-github": "^0.5.1",
309
+ "@changesets/cli": "^2.30.0"
310
+ }
302
311
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codex-bridge",
3
- "version": "1.1.0",
3
+ "version": "1.2.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",
@@ -5,7 +5,7 @@
5
5
  "args": [
6
6
  "--yes",
7
7
  "--package",
8
- "thumbgate@1.1.0",
8
+ "thumbgate@1.2.0",
9
9
  "thumbgate",
10
10
  "serve"
11
11
  ]
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codex-profile",
3
- "version": "1.1.0",
3
+ "version": "1.2.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",
@@ -5,7 +5,7 @@
5
5
  "args": [
6
6
  "--yes",
7
7
  "--package",
8
- "thumbgate@1.1.0",
8
+ "thumbgate@1.2.0",
9
9
  "thumbgate",
10
10
  "serve"
11
11
  ]
@@ -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.1.0", "thumbgate", "serve"]
34
+ args = ["--yes", "--package", "thumbgate@1.2.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.
@@ -29,7 +29,7 @@ That profile launches:
29
29
  ```toml
30
30
  [mcp_servers.thumbgate]
31
31
  command = "npx"
32
- args = ["--yes", "--package", "thumbgate@1.1.0", "thumbgate", "serve"]
32
+ args = ["--yes", "--package", "thumbgate@1.2.0", "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": "1.1.0",
5
+ "version": "1.2.0",
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@1.1.0", "thumbgate", "serve"],
28
+ "command": ["npx", "--yes", "--package", "thumbgate@1.2.0", "thumbgate", "serve"],
29
29
  "enabled": true
30
30
  }
31
31
  }