thumbgate 1.0.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 (38) 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 +19 -7
  9. package/adapters/opencode/opencode.json +1 -1
  10. package/config/github-about.json +1 -1
  11. package/config/mcp-allowlists.json +1 -0
  12. package/package.json +22 -11
  13. package/plugins/claude-codex-bridge/.claude-plugin/plugin.json +1 -1
  14. package/plugins/claude-codex-bridge/.mcp.json +1 -1
  15. package/plugins/codex-profile/.codex-plugin/plugin.json +1 -1
  16. package/plugins/codex-profile/.mcp.json +1 -1
  17. package/plugins/codex-profile/INSTALL.md +1 -1
  18. package/plugins/codex-profile/README.md +1 -1
  19. package/plugins/cursor-marketplace/.cursor-plugin/plugin.json +1 -1
  20. package/plugins/opencode-profile/INSTALL.md +1 -1
  21. package/public/compare.html +302 -0
  22. package/public/index.html +41 -11
  23. package/scripts/__pycache__/train_from_feedback.cpython-312.pyc +0 -0
  24. package/scripts/ai-search-visibility.js +142 -0
  25. package/scripts/changeset-check.js +372 -0
  26. package/scripts/check-congruence.js +7 -4
  27. package/scripts/computer-use-firewall.js +45 -15
  28. package/scripts/docker-sandbox-planner.js +208 -0
  29. package/scripts/export-hf-dataset.js +293 -0
  30. package/scripts/github-about.js +56 -0
  31. package/scripts/operational-integrity.js +7 -1
  32. package/scripts/published-cli.js +10 -1
  33. package/scripts/statusline-links.js +238 -0
  34. package/scripts/statusline.sh +39 -4
  35. package/scripts/sync-github-about.js +7 -4
  36. package/scripts/tool-registry.js +11 -0
  37. package/scripts/workflow-sentinel.js +83 -35
  38. package/src/api/server.js +12 -1
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "thumbgate",
3
- "version": "1.0.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.0.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.0.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.0.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.0.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.0.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.0.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.0.0", "thumbgate", "gate-check"]
9
+ args = ["--yes", "--package", "thumbgate@1.2.0", "thumbgate", "gate-check"]
@@ -97,6 +97,7 @@ const {
97
97
  assembleUnifiedContext,
98
98
  formatUnifiedContext,
99
99
  } = require('../../scripts/context-manager');
100
+ const { exportHfDataset } = require('../../scripts/export-hf-dataset');
100
101
 
101
102
  const PRO_CHECKOUT_URL = 'https://thumbgate-production.up.railway.app/checkout/pro';
102
103
 
@@ -118,7 +119,7 @@ const {
118
119
  finalizeSession: finalizeFeedbackSession,
119
120
  } = require('../../scripts/feedback-session');
120
121
 
121
- const SERVER_INFO = { name: 'thumbgate-mcp', version: '1.0.0' };
122
+ const SERVER_INFO = { name: 'thumbgate-mcp', version: '1.2.0' };
122
123
  const COMMERCE_CATEGORIES = [
123
124
  'product_recommendation',
124
125
  'brand_compliance',
@@ -363,12 +364,14 @@ function buildEstimateUncertaintyResponse(args = {}) {
363
364
 
364
365
  async function callTool(name, args = {}) {
365
366
  assertToolAllowed(name, getActiveMcpProfile());
366
- const firewallResult = (await evaluateGatesAsync(name, args)) || evaluateSecretGuard({ tool_name: name, tool_input: args });
367
- if (firewallResult && firewallResult.decision === 'deny') {
368
- const err = new Error(`Action blocked by Semantic Firewall: ${firewallResult.message}`);
369
- err.errorCategory = 'permission';
370
- err.isRetryable = false;
371
- 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
+ }
372
375
  }
373
376
  const startMs = Date.now();
374
377
  const result = await callToolInner(name, args);
@@ -493,6 +496,14 @@ async function callToolInner(name, args) {
493
496
  case 'export_dpo_pairs':
494
497
  enforceLimit('export_dpo');
495
498
  return buildExportDpoResponse(args);
499
+ case 'export_hf_dataset': {
500
+ enforceLimit('export_dpo');
501
+ const outputDir = args.outputDir ? resolveSafePath(args.outputDir) : undefined;
502
+ return toTextResult(exportHfDataset({
503
+ outputDir,
504
+ includeProvenance: args.includeProvenance !== false,
505
+ }));
506
+ }
496
507
  case 'export_databricks_bundle': {
497
508
  enforceLimit('export_databricks');
498
509
  const outputPath = args.outputPath ? resolveSafePath(args.outputPath) : undefined;
@@ -619,6 +630,7 @@ async function callToolInner(name, args) {
619
630
  affectedFiles: Array.isArray(args.changedFiles) ? args.changedFiles : undefined,
620
631
  requirePrForReleaseSensitive: args.requirePrForReleaseSensitive === true,
621
632
  requireVersionNotBehindBase: args.requireVersionNotBehindBase === true,
633
+ governanceState: getScopeState(),
622
634
  }));
623
635
  case 'register_claim_gate':
624
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.0.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",
@@ -22,6 +22,7 @@
22
22
  "bootstrap_internal_agent",
23
23
  "prevention_rules",
24
24
  "export_dpo_pairs",
25
+ "export_hf_dataset",
25
26
  "export_databricks_bundle",
26
27
  "construct_context_pack",
27
28
  "evaluate_context_pack",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "thumbgate",
3
- "version": "1.0.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: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",
@@ -105,6 +109,8 @@
105
109
  "test:seo-gsd": "node --test tests/seo-gsd.test.js",
106
110
  "test:verify-run": "node --test tests/verify-run.test.js",
107
111
  "test:export-dpo-pairs": "node --test tests/export-dpo-pairs.test.js",
112
+ "test:export-hf-dataset": "node --test tests/export-hf-dataset.test.js",
113
+ "export:hf": "node scripts/export-hf-dataset.js",
108
114
  "seo:gsd": "node scripts/seo-gsd.js plan",
109
115
  "seo:gsd:write": "node scripts/seo-gsd.js plan --write",
110
116
  "test:congruence": "node scripts/check-congruence.js",
@@ -115,7 +121,7 @@
115
121
  "test:loop": "node scripts/feedback-loop.js --test",
116
122
  "test:dpo": "node scripts/export-dpo-pairs.js --test",
117
123
  "test:kto": "node --test tests/export-kto.test.js",
118
- "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",
119
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",
120
126
  "test:e2e": "node --test tests/e2e-pipeline.test.js tests/e2e-product-flows.test.js tests/e2e-coverage-contract.test.js",
121
127
  "test:rlaif": "node --test tests/rlaif-self-audit.test.js tests/dpo-optimizer.test.js tests/meta-policy.test.js",
@@ -123,17 +129,17 @@
123
129
  "test:quality": "node --test tests/validate-feedback.test.js",
124
130
  "test:intelligence": "node --test tests/intelligence.test.js",
125
131
  "test:training-export": "node --test tests/training-export.test.js tests/databricks-export.test.js",
126
- "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",
127
133
  "test:operational-integrity": "node --test tests/operational-integrity.test.js",
128
- "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",
129
135
  "test:billing": "node --test tests/billing.test.js",
130
- "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",
131
137
  "test:evolution": "node --test tests/workspace-evolver.test.js",
132
138
  "test:watcher": "node --test tests/jsonl-watcher.test.js",
133
139
  "test:autoresearch": "node --test tests/autoresearch.test.js",
134
- "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",
135
141
  "test:tessl": "node --test tests/tessl-export.test.js",
136
- "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",
137
143
  "test:workers": "npm --prefix workers ci && npm --prefix workers test",
138
144
  "test:evoskill": "node --test tests/evoskill.test.js",
139
145
  "test:gates-hardening": "node --test tests/gates-hardening.test.js",
@@ -234,7 +240,8 @@
234
240
  "test:social-reply-monitor": "node --test tests/social-reply-monitor.test.js",
235
241
  "test:sync-launch-assets": "node --test tests/sync-launch-assets.test.js",
236
242
  "test:reddit-publisher": "node --test tests/reddit-publisher.test.js",
237
- "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"
238
245
  },
239
246
  "keywords": [
240
247
  "mcp",
@@ -296,5 +303,9 @@
296
303
  "path-to-regexp": "0.1.13"
297
304
  }
298
305
  },
299
- "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
+ }
300
311
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codex-bridge",
3
- "version": "1.0.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.0.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.0.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.0.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.0.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.0.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.0.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.0.0", "thumbgate", "serve"],
28
+ "command": ["npx", "--yes", "--package", "thumbgate@1.2.0", "thumbgate", "serve"],
29
29
  "enabled": true
30
30
  }
31
31
  }