thumbgate 1.8.0 โ†’ 1.10.1

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "thumbgate-marketplace",
3
- "version": "1.8.0",
3
+ "version": "1.10.1",
4
4
  "owner": {
5
5
  "name": "Igor Ganapolsky",
6
6
  "email": "ig5973700@gmail.com"
@@ -13,7 +13,7 @@
13
13
  "source": "npm",
14
14
  "package": "thumbgate"
15
15
  },
16
- "version": "1.8.0",
16
+ "version": "1.10.1",
17
17
  "author": {
18
18
  "name": "Igor Ganapolsky"
19
19
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "thumbgate",
3
3
  "description": "Type ๐Ÿ‘ or ๐Ÿ‘Ž on any agent action. ThumbGate captures it, distills a lesson, and blocks the pattern from repeating. One thumbs-down = the agent physically cannot make that mistake again. 33 pre-action gates, budget enforcement, self-protection, and NIST/SOC2 compliance tags.",
4
- "version": "1.8.0",
4
+ "version": "1.10.1",
5
5
  "author": {
6
6
  "name": "Igor Ganapolsky"
7
7
  },
@@ -46,6 +46,10 @@ npx thumbgate init --agent claude-code
46
46
 
47
47
  ## Links
48
48
 
49
+ - Agent discovery: https://thumbgate-production.up.railway.app/.well-known/mcp.json
50
+ - Progressive tool index: https://thumbgate-production.up.railway.app/.well-known/mcp/tools.json
51
+ - Agent skills: https://thumbgate-production.up.railway.app/.well-known/mcp/skills.json
52
+ - MCP applications: https://thumbgate-production.up.railway.app/.well-known/mcp/applications.json
49
53
  - Documentation: https://thumbgate-production.up.railway.app/guide
50
54
  - Dashboard: https://thumbgate-production.up.railway.app/dashboard
51
55
  - GitHub: https://github.com/IgorGanapolsky/ThumbGate
@@ -1,231 +1,14 @@
1
1
  {
2
2
  "name": "thumbgate",
3
- "version": "1.8.0",
3
+ "version": "1.10.1",
4
4
  "description": "ThumbGate โ€” ๐Ÿ‘๐Ÿ‘Ž feedback that teaches your AI agent. Thumbs down a mistake, it never happens again.",
5
- "homepage": "https://github.com/IgorGanapolsky/thumbgate",
5
+ "homepage": "https://thumbgate-production.up.railway.app",
6
6
  "transport": "stdio",
7
- "configSchema": {
8
- "type": "object",
9
- "properties": {
10
- "mcpProfile": {
11
- "type": "string",
12
- "description": "MCP profile to use (default, readonly, locked)",
13
- "default": "default"
14
- }
15
- },
16
- "required": []
17
- },
18
- "tools": [
19
- {
20
- "name": "capture_feedback",
21
- "description": "Capture thumbs up/down feedback and promote actionable memory",
22
- "inputSchema": {
23
- "type": "object",
24
- "required": [
25
- "signal",
26
- "context"
27
- ],
28
- "properties": {
29
- "signal": {
30
- "type": "string",
31
- "enum": [
32
- "up",
33
- "down"
34
- ]
35
- },
36
- "context": {
37
- "type": "string"
38
- },
39
- "whatWentWrong": {
40
- "type": "string"
41
- },
42
- "whatToChange": {
43
- "type": "string"
44
- },
45
- "whatWorked": {
46
- "type": "string"
47
- },
48
- "tags": {
49
- "type": "array",
50
- "items": {
51
- "type": "string"
52
- }
53
- },
54
- "skill": {
55
- "type": "string"
56
- }
57
- }
58
- }
59
- },
60
- {
61
- "name": "feedback_summary",
62
- "description": "Get summary of recent feedback",
63
- "inputSchema": {
64
- "type": "object",
65
- "properties": {
66
- "recent": {
67
- "type": "number"
68
- }
69
- }
70
- }
71
- },
72
- {
73
- "name": "feedback_stats",
74
- "description": "Get feedback stats and recommendations",
75
- "inputSchema": {
76
- "type": "object",
77
- "properties": {}
78
- }
79
- },
80
- {
81
- "name": "list_intents",
82
- "description": "List available intent plans and whether each requires human approval in the active profile",
83
- "inputSchema": {
84
- "type": "object",
85
- "properties": {
86
- "mcpProfile": {
87
- "type": "string"
88
- },
89
- "bundleId": {
90
- "type": "string"
91
- }
92
- }
93
- }
94
- },
95
- {
96
- "name": "plan_intent",
97
- "description": "Generate an intent execution plan with policy checkpoints",
98
- "inputSchema": {
99
- "type": "object",
100
- "required": [
101
- "intentId"
102
- ],
103
- "properties": {
104
- "intentId": {
105
- "type": "string"
106
- },
107
- "context": {
108
- "type": "string"
109
- },
110
- "mcpProfile": {
111
- "type": "string"
112
- },
113
- "bundleId": {
114
- "type": "string"
115
- },
116
- "approved": {
117
- "type": "boolean"
118
- }
119
- }
120
- }
121
- },
122
- {
123
- "name": "prevention_rules",
124
- "description": "Generate prevention rules from repeated mistake patterns",
125
- "inputSchema": {
126
- "type": "object",
127
- "properties": {
128
- "minOccurrences": {
129
- "type": "number"
130
- },
131
- "outputPath": {
132
- "type": "string"
133
- }
134
- }
135
- }
136
- },
137
- {
138
- "name": "export_dpo_pairs",
139
- "description": "Export DPO preference pairs from local memory log",
140
- "inputSchema": {
141
- "type": "object",
142
- "properties": {
143
- "memoryLogPath": {
144
- "type": "string"
145
- }
146
- }
147
- }
148
- },
149
- {
150
- "name": "construct_context_pack",
151
- "description": "Construct a bounded context pack from contextfs",
152
- "inputSchema": {
153
- "type": "object",
154
- "properties": {
155
- "query": {
156
- "type": "string"
157
- },
158
- "maxItems": {
159
- "type": "number"
160
- },
161
- "maxChars": {
162
- "type": "number"
163
- },
164
- "namespaces": {
165
- "type": "array",
166
- "items": {
167
- "type": "string"
168
- }
169
- }
170
- }
171
- }
172
- },
173
- {
174
- "name": "evaluate_context_pack",
175
- "description": "Record evaluation outcome for a context pack",
176
- "inputSchema": {
177
- "type": "object",
178
- "required": [
179
- "packId",
180
- "outcome"
181
- ],
182
- "properties": {
183
- "packId": {
184
- "type": "string"
185
- },
186
- "outcome": {
187
- "type": "string"
188
- },
189
- "signal": {
190
- "type": "string"
191
- },
192
- "notes": {
193
- "type": "string"
194
- }
195
- }
196
- }
197
- },
198
- {
199
- "name": "context_provenance",
200
- "description": "Get recent context/provenance events",
201
- "inputSchema": {
202
- "type": "object",
203
- "properties": {
204
- "limit": {
205
- "type": "number"
206
- }
207
- }
208
- }
209
- },
210
- {
211
- "name": "recall",
212
- "description": "Recall relevant past feedback, memories, and prevention rules for the current task",
213
- "inputSchema": {
214
- "type": "object",
215
- "required": [
216
- "query"
217
- ],
218
- "properties": {
219
- "query": {
220
- "type": "string",
221
- "description": "Describe the current task or context to find relevant past feedback"
222
- },
223
- "limit": {
224
- "type": "number",
225
- "description": "Max memories to return (default 5)"
226
- }
227
- }
228
- }
229
- }
230
- ]
7
+ "discovery": {
8
+ "manifestUrl": "https://thumbgate-production.up.railway.app/.well-known/mcp.json",
9
+ "toolIndexUrl": "https://thumbgate-production.up.railway.app/.well-known/mcp/tools.json",
10
+ "toolSchemaUrlTemplate": "https://thumbgate-production.up.railway.app/.well-known/mcp/tools/{name}.json",
11
+ "skillsUrl": "https://thumbgate-production.up.railway.app/.well-known/mcp/skills.json",
12
+ "applicationsUrl": "https://thumbgate-production.up.railway.app/.well-known/mcp/applications.json"
13
+ }
231
14
  }
@@ -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.8.0 thumbgate serve`.
6
+ - `claude/.mcp.json`: example Claude Code MCP config using `npx --yes --package thumbgate@1.10.1 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.8.0", "thumbgate", "serve"]
5
+ "args": ["--yes", "--package", "thumbgate@1.10.1", "thumbgate", "serve"]
6
6
  }
7
7
  },
8
8
  "hooks": {
9
9
  "preToolUse": {
10
10
  "command": "npx",
11
- "args": ["--yes", "--package", "thumbgate@1.8.0", "thumbgate", "gate-check"]
11
+ "args": ["--yes", "--package", "thumbgate@1.10.1", "thumbgate", "gate-check"]
12
12
  }
13
13
  }
14
14
  }
@@ -106,6 +106,9 @@ const {
106
106
  const {
107
107
  searchThumbgate,
108
108
  } = require('../../scripts/thumbgate-search');
109
+ const {
110
+ buildMultimodalRetrievalPlan,
111
+ } = require('../../scripts/multimodal-retrieval-plan');
109
112
  const {
110
113
  importDocument,
111
114
  listImportedDocuments,
@@ -117,6 +120,7 @@ const {
117
120
  listHarnesses,
118
121
  runHarness,
119
122
  } = require('../../scripts/natural-language-harness');
123
+ const { runLoop: runAutoresearchLoop } = require('../../scripts/autoresearch-runner');
120
124
  const { TOOLS } = require('../../scripts/tool-registry');
121
125
  const { reflect: reflectOnFeedback } = require('../../scripts/reflector-agent');
122
126
  const { submitProductIssue } = require('../../scripts/product-feedback');
@@ -148,7 +152,7 @@ const {
148
152
  finalizeSession: finalizeFeedbackSession,
149
153
  } = require('../../scripts/feedback-session');
150
154
 
151
- const SERVER_INFO = { name: 'thumbgate-mcp', version: '1.8.0' };
155
+ const SERVER_INFO = { name: 'thumbgate-mcp', version: '1.10.1' };
152
156
  const COMMERCE_CATEGORIES = [
153
157
  'product_recommendation',
154
158
  'brand_compliance',
@@ -196,6 +200,17 @@ function resolveImportDocumentPath(targetPath) {
196
200
  return resolved;
197
201
  }
198
202
 
203
+ function resolveWorkspaceCwd(targetPath) {
204
+ if (!targetPath) return undefined;
205
+ const workspaceRoot = path.resolve(process.cwd());
206
+ const resolved = path.resolve(workspaceRoot, String(targetPath));
207
+ const relative = path.relative(workspaceRoot, resolved);
208
+ if (relative.startsWith('..') || path.isAbsolute(relative)) {
209
+ throw new Error(`cwd must stay within ${workspaceRoot}`);
210
+ }
211
+ return resolved;
212
+ }
213
+
199
214
  function toTextResult(payload) {
200
215
  const text = typeof payload === 'string' ? payload : JSON.stringify(payload, null, 2);
201
216
  return {
@@ -851,6 +866,36 @@ async function callToolInner(name, args) {
851
866
  return toTextResult({ harnesses: listHarnesses({ tag: args.tag }) });
852
867
  case 'run_harness':
853
868
  return toTextResult(runHarness(args.harness, args.inputs || {}, { jobId: args.jobId }));
869
+ case 'plan_multimodal_retrieval':
870
+ return toTextResult(buildMultimodalRetrievalPlan(args));
871
+ case 'run_autoresearch': {
872
+ const iterations = Math.max(1, Math.min(5, Number(args.iterations || 1)));
873
+ const timeoutMs = Math.max(1000, Math.min(600000, Number(args.timeoutMs || 120000)));
874
+ const holdoutCommands = Array.isArray(args.holdoutCommands)
875
+ ? args.holdoutCommands.filter((command) => typeof command === 'string' && command.trim())
876
+ : [];
877
+ const result = await runAutoresearchLoop({
878
+ iterations,
879
+ targetName: args.targetName || undefined,
880
+ nextValue: Number.isFinite(args.nextValue) ? args.nextValue : undefined,
881
+ testCommand: args.testCommand || 'npm test',
882
+ holdoutCommands,
883
+ timeoutMs,
884
+ cwd: resolveWorkspaceCwd(args.cwd),
885
+ researchQuery: args.researchQuery || null,
886
+ paperLimit: Math.max(1, Math.min(10, Number(args.paperLimit || 5))),
887
+ });
888
+ return toTextResult({
889
+ ...result,
890
+ controls: {
891
+ iterations,
892
+ timeoutMs,
893
+ holdoutCommands,
894
+ maxIterationsPerCall: 5,
895
+ maxTimeoutMs: 600000,
896
+ },
897
+ });
898
+ }
854
899
  case 'open_feedback_session':
855
900
  return toTextResult(openFeedbackSession(args.feedbackEventId, args.signal, args.initialContext));
856
901
  case 'append_feedback_context':
@@ -7,7 +7,7 @@
7
7
  "npx",
8
8
  "--yes",
9
9
  "--package",
10
- "thumbgate@1.8.0",
10
+ "thumbgate@1.10.1",
11
11
  "thumbgate",
12
12
  "serve"
13
13
  ],
@@ -0,0 +1,22 @@
1
+ {
2
+ "$schema": "./enforcement.schema.json",
3
+ "description": "Loss matrix and enforcement knobs for the Bayes-optimal pre-tool-use gate. See scripts/bayes-optimal-gate.js for the decision math. Tags listed here mirror the canonical tags emitted by risk-scorer.buildPatternSummary. To disable tag-specific costs and fall back to a symmetric 1:1 decision, reduce any override to 1.0.",
4
+ "lossMatrix": {
5
+ "falseAllow": {
6
+ "default": 1.0,
7
+ "deploy-prod": 100.0,
8
+ "destructive": 50.0,
9
+ "secrets": 1000.0,
10
+ "force-push-main": 200.0,
11
+ "data-loss": 500.0,
12
+ "credentials": 800.0,
13
+ "rm-rf": 300.0,
14
+ "git-reset-hard": 100.0
15
+ },
16
+ "falseBlock": {
17
+ "default": 1.0
18
+ }
19
+ },
20
+ "bayesOptimalEnabled": true,
21
+ "bayesPosteriorFloor": 0.05
22
+ }
@@ -12,6 +12,7 @@
12
12
  "search_lessons",
13
13
  "retrieve_lessons",
14
14
  "search_thumbgate",
15
+ "plan_multimodal_retrieval",
15
16
  "reflect_on_feedback",
16
17
  "feedback_stats",
17
18
  "diagnose_failure",
@@ -45,6 +46,7 @@
45
46
  "settings_status",
46
47
  "list_harnesses",
47
48
  "run_harness",
49
+ "run_autoresearch",
48
50
  "estimate_uncertainty",
49
51
  "get_business_metrics",
50
52
  "describe_semantic_entity",
@@ -70,6 +72,7 @@
70
72
  "search_lessons",
71
73
  "retrieve_lessons",
72
74
  "search_thumbgate",
75
+ "plan_multimodal_retrieval",
73
76
  "reflect_on_feedback",
74
77
  "prevention_rules",
75
78
  "set_task_scope",
@@ -114,6 +117,7 @@
114
117
  "search_lessons",
115
118
  "retrieve_lessons",
116
119
  "search_thumbgate",
120
+ "plan_multimodal_retrieval",
117
121
  "feedback_stats",
118
122
  "diagnose_failure",
119
123
  "list_harnesses",
@@ -146,6 +150,7 @@
146
150
  "search_lessons",
147
151
  "retrieve_lessons",
148
152
  "search_thumbgate",
153
+ "plan_multimodal_retrieval",
149
154
  "feedback_stats",
150
155
  "diagnose_failure",
151
156
  "list_harnesses",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "thumbgate",
3
- "version": "1.8.0",
3
+ "version": "1.10.1",
4
4
  "description": "Self-improving agent governance: type thumbs-up or thumbs-down on any AI agent action. ThumbGate turns every mistake into a prevention rule and blocks the pattern from repeating. One thumbs-down, never again. 33 pre-action gates, budget enforcement, and self-protection for Claude Code, Cursor, Codex, Gemini CLI, and Amp.",
5
5
  "homepage": "https://thumbgate-production.up.railway.app",
6
6
  "repository": {
@@ -49,10 +49,12 @@
49
49
  "scripts/analytics-report.js",
50
50
  "scripts/analytics-window.js",
51
51
  "scripts/autonomous-workflow.js",
52
+ "scripts/autoresearch-runner.js",
52
53
  "scripts/async-job-runner.js",
53
54
  "scripts/audit-trail.js",
54
55
  "scripts/auto-promote-gates.js",
55
56
  "scripts/auto-wire-hooks.js",
57
+ "scripts/bayes-optimal-gate.js",
56
58
  "scripts/belief-update.js",
57
59
  "scripts/billing-setup.js",
58
60
  "scripts/billing.js",
@@ -135,6 +137,7 @@
135
137
  "scripts/mcp-policy.js",
136
138
  "scripts/memory-firewall.js",
137
139
  "scripts/meta-agent-loop.js",
140
+ "scripts/multimodal-retrieval-plan.js",
138
141
  "scripts/natural-language-harness.js",
139
142
  "scripts/obsidian-export.js",
140
143
  "scripts/operational-dashboard.js",
@@ -252,7 +255,7 @@
252
255
  "trace:eval": "node scripts/decision-trace.js eval",
253
256
  "social:reply-monitor": "node scripts/social-reply-monitor.js",
254
257
  "social:reply-monitor:dry": "node scripts/social-reply-monitor.js --dry-run",
255
- "test": "npm run test:schema && npm run test:loop && npm run test:dpo && npm run test:kto && npm run test:api && npm run test:proof && npm run test:e2e && npm run test:rlaif && npm run test:attribution && npm run test:quality && npm run test:intelligence && npm run test:training-export && npm run test:deployment && npm run test:operational-integrity && npm run test:workflow && npm run test:billing && npm run test:cli && npm run test:watcher && npm run test:autoresearch && npm run test:ops && npm run test:session-analyzer && npm run test:tessl && npm run test:gates && npm run test:evoskill && npm run test:gates-hardening && npm run test:workers && npm run test:social-analytics && npm run test:memalign && npm run test:xmemory-lite && npm run test:filesystem-search && npm run test:zernio && npm run test:platform-limits && npm run test:post-video && npm run test:post-everywhere-instagram && npm run test:obsidian-export && npm run test:lesson-db && npm run test:lesson-rotation && npm run test:memory-dedup && npm run test:feedback-quality && npm run test:sync-version && npm run test:check-congruence && npm run test:tool-registry && npm run test:feedback-to-rules && npm run test:memory-firewall && npm run test:belief-update && npm run test:hosted-config && npm run test:operational-summary && npm run test:operator-key-auth && npm run test:cloudflare-sandbox && npm run test:mcp-config && npm run test:plan-gate && npm run test:pulse && npm run test:semantic-layer && npm run test:data-pipeline && npm run test:optimize-context && npm run test:principle-extractor && npm run test:analytics-window && npm run test:funnel-analytics && npm run test:experiment-tracker && npm run test:build-metadata && npm run test:context-engine && npm run test:hf-papers && npm run test:marketing-experiment && npm run test:seo-gsd && npm run test:verify-run && npm run test:export-dpo-pairs && npm run test:export-hf-dataset && npm run test:license && npm run test:bot-detector && npm run test:postinstall && npm run test:funnel-invariants && npm run test:cli-telemetry && npm run test:pro-parity && npm run test:model-tier-router && npm run test:computer-use-firewall && npm run test:skill-exporter && npm run test:statusline && npm run test:evolution && npm run test:org-dashboard && npm run test:multi-hop-recall && npm run test:synthetic-dpo && npm run test:thumbgate-skill && npm run test:learn-hub && npm run test:feedback-fallback && npm run test:metaclaw && npm run test:server-lock && npm run test:control-tower && npm run test:pii-scanner && npm run test:data-governance && npm run test:lesson-inference && npm run test:semantic-dedup && npm run test:fs-utils && npm run test:cli-schema && npm run test:explore && npm run test:lesson-reranker && npm run test:lesson-retrieval && npm run test:cross-encoder && npm run test:reflector-agent && npm run test:feedback-session && npm run test:feedback-history-distiller && npm run test:hallucination-detector && npm run test:history-distiller && npm run test:predictive-insights && npm run test:prove-predictive-insights && npm run test:statusbar-cli && npm run test:generate-instagram-card && npm run test:instagram-thumbgate-post && npm run test:publish-instagram-thumbgate && npm run test:lesson-synthesis && npm run test:background-governance && npm run test:memory-migration && npm run test:prompt-dlp && npm run test:ephemeral-store && npm run test:agent-security && npm run test:skill-progressive && npm run test:per-step-scoring && npm run test:weekly-auto-post && npm run test:social-post-hourly && npm run test:social-quality-gate && npm run test:a2ui-engine && npm run test:gate-satisfy && npm run test:money-watcher && npm run test:budget && npm run test:quick-start && npm run test:utm && npm run test:product-feedback && npm run test:feedback-root-consolidator && npm run test:engagement-audit && npm run test:install-growth-automation && npm run test:publish-thumbgate-launch && npm run test:reconcile-thumbgate-campaign && npm run test:reddit-publisher && npm run test:schedule-thumbgate-campaign && npm run test:social-reply-monitor && npm run test:sync-launch-assets && npm run test:ai-search-visibility && npm run test:perplexity && npm run test:security-scanner && npm run test:llm-client && npm run test:managed-lesson-agent && npm run test:self-distill && npm run test:meta-agent && npm run test:harness-selector && npm run test:thumbgate-bench && npm run test:seo-guides && npm run test:enforcement-loop && npm run test:cli-agent-experience && npm run test:bot-detection && npm run test:checkout-bot-guard && npm run test:session-health && npm run test:session-episodes && npm run test:spec-gate && npm run test:decision-trace && npm run test:dashboard-insights && npm run test:prompt-eval && npm run test:demo-voiceover && npm run test:gate-coherence && npm run test:gate-eval && npm run test:high-roi && npm run test:public-static-assets && npm run test:token-savings && npm run test:workflow-gate-checkpoint && npm run test:lesson-export-import && npm run test:landing-page-claims && npm run test:dashboard-deeplink-e2e && npm run test:public-package-parity && npm run test:token-savings-dashboard && npm run test:cursor-wiring && npm run test:pretooluse-injection && npm run test:recent-corrective-context && npm run test:durability-step && npm run test:mailer && npm run test:brand-assets && npm run test:enforcement-teeth && npm run test:swarm-coordinator && npm run test:session-report && npm run test:require-evidence-gate",
258
+ "test": "npm run test:schema && npm run test:loop && npm run test:dpo && npm run test:kto && npm run test:api && npm run test:proof && npm run test:e2e && npm run test:rlaif && npm run test:attribution && npm run test:quality && npm run test:intelligence && npm run test:training-export && npm run test:deployment && npm run test:operational-integrity && npm run test:workflow && npm run test:billing && npm run test:cli && npm run test:watcher && npm run test:autoresearch && npm run test:ops && npm run test:session-analyzer && npm run test:tessl && npm run test:gates && npm run test:evoskill && npm run test:gates-hardening && npm run test:workers && npm run test:social-analytics && npm run test:memalign && npm run test:xmemory-lite && npm run test:filesystem-search && npm run test:zernio && npm run test:platform-limits && npm run test:post-video && npm run test:post-everywhere-instagram && npm run test:obsidian-export && npm run test:lesson-db && npm run test:lesson-rotation && npm run test:memory-dedup && npm run test:feedback-quality && npm run test:sync-version && npm run test:check-congruence && npm run test:tool-registry && npm run test:feedback-to-rules && npm run test:memory-firewall && npm run test:belief-update && npm run test:hosted-config && npm run test:operational-summary && npm run test:operator-key-auth && npm run test:cloudflare-sandbox && npm run test:mcp-config && npm run test:plan-gate && npm run test:pulse && npm run test:semantic-layer && npm run test:data-pipeline && npm run test:optimize-context && npm run test:principle-extractor && npm run test:analytics-window && npm run test:funnel-analytics && npm run test:experiment-tracker && npm run test:build-metadata && npm run test:context-engine && npm run test:hf-papers && npm run test:marketing-experiment && npm run test:seo-gsd && npm run test:verify-run && npm run test:export-dpo-pairs && npm run test:export-hf-dataset && npm run test:license && npm run test:bot-detector && npm run test:postinstall && npm run test:funnel-invariants && npm run test:cli-telemetry && npm run test:pro-parity && npm run test:model-tier-router && npm run test:computer-use-firewall && npm run test:skill-exporter && npm run test:statusline && npm run test:evolution && npm run test:org-dashboard && npm run test:multi-hop-recall && npm run test:synthetic-dpo && npm run test:thumbgate-skill && npm run test:learn-hub && npm run test:feedback-fallback && npm run test:metaclaw && npm run test:server-lock && npm run test:control-tower && npm run test:pii-scanner && npm run test:data-governance && npm run test:lesson-inference && npm run test:semantic-dedup && npm run test:fs-utils && npm run test:cli-schema && npm run test:explore && npm run test:lesson-reranker && npm run test:lesson-retrieval && npm run test:cross-encoder && npm run test:reflector-agent && npm run test:feedback-session && npm run test:feedback-history-distiller && npm run test:hallucination-detector && npm run test:history-distiller && npm run test:predictive-insights && npm run test:prove-predictive-insights && npm run test:statusbar-cli && npm run test:generate-instagram-card && npm run test:instagram-thumbgate-post && npm run test:publish-instagram-thumbgate && npm run test:lesson-synthesis && npm run test:background-governance && npm run test:memory-migration && npm run test:prompt-dlp && npm run test:ephemeral-store && npm run test:agent-security && npm run test:skill-progressive && npm run test:per-step-scoring && npm run test:weekly-auto-post && npm run test:social-post-hourly && npm run test:social-quality-gate && npm run test:a2ui-engine && npm run test:gate-satisfy && npm run test:money-watcher && npm run test:budget && npm run test:quick-start && npm run test:utm && npm run test:product-feedback && npm run test:feedback-root-consolidator && npm run test:engagement-audit && npm run test:install-growth-automation && npm run test:publish-thumbgate-launch && npm run test:reconcile-thumbgate-campaign && npm run test:reddit-publisher && npm run test:schedule-thumbgate-campaign && npm run test:social-reply-monitor && npm run test:sync-launch-assets && npm run test:ai-search-visibility && npm run test:perplexity && npm run test:security-scanner && npm run test:llm-client && npm run test:managed-lesson-agent && npm run test:self-distill && npm run test:meta-agent && npm run test:harness-selector && npm run test:thumbgate-bench && npm run test:seo-guides && npm run test:enforcement-loop && npm run test:cli-agent-experience && npm run test:bot-detection && npm run test:checkout-bot-guard && npm run test:session-health && npm run test:session-episodes && npm run test:spec-gate && npm run test:decision-trace && npm run test:dashboard-insights && npm run test:prompt-eval && npm run test:demo-voiceover && npm run test:gate-coherence && npm run test:gate-eval && npm run test:high-roi && npm run test:public-static-assets && npm run test:token-savings && npm run test:workflow-gate-checkpoint && npm run test:lesson-export-import && npm run test:landing-page-claims && npm run test:dashboard-deeplink-e2e && npm run test:public-package-parity && npm run test:token-savings-dashboard && npm run test:cursor-wiring && npm run test:pretooluse-injection && npm run test:recent-corrective-context && npm run test:durability-step && npm run test:mailer && npm run test:brand-assets && npm run test:enforcement-teeth && npm run test:bayes-optimal-gate && npm run test:swarm-coordinator && npm run test:session-report && npm run test:require-evidence-gate",
256
259
  "test:swarm-coordinator": "node --test tests/swarm-coordinator.test.js",
257
260
  "test:session-report": "node --test tests/session-report.test.js",
258
261
  "test:require-evidence-gate": "node --test tests/require-evidence-gate.test.js",
@@ -502,9 +505,10 @@
502
505
  "test:cursor-wiring": "node --test tests/cursor-wiring.test.js",
503
506
  "test:pretooluse-injection": "node --test tests/pretooluse-lesson-injection.test.js",
504
507
  "test:recent-corrective-context": "node --test tests/recent-corrective-actions-context.test.js",
505
- "test:mailer": "node --test tests/mailer.test.js tests/billing-webhook-email.test.js",
508
+ "test:mailer": "node --test tests/mailer.test.js tests/mailer-dns.test.js tests/billing-webhook-email.test.js",
506
509
  "test:brand-assets": "node --test tests/brand-assets.test.js",
507
- "test:enforcement-teeth": "node --test tests/enforcement-teeth.test.js"
510
+ "test:enforcement-teeth": "node --test tests/enforcement-teeth.test.js",
511
+ "test:bayes-optimal-gate": "node --test tests/bayes-optimal-gate.test.js"
508
512
  },
509
513
  "keywords": [
510
514
  "mcp",
package/public/index.html CHANGED
@@ -974,7 +974,7 @@ __GA_BOOTSTRAP__
974
974
  <!-- HOW IT WORKS -->
975
975
  <section class="how-it-works" id="how-it-works">
976
976
  <div class="container">
977
- <div class="section-label">New in v1.8.0</div>
977
+ <div class="section-label">New in v1.10.1</div>
978
978
  <h2 class="section-title">Three steps to stop repeated AI failures</h2>
979
979
  <div class="steps">
980
980
  <div class="step">
@@ -1330,7 +1330,7 @@ __GA_BOOTSTRAP__
1330
1330
  <a href="https://www.linkedin.com/in/igorganapolsky" target="_blank" rel="noopener">LinkedIn</a>
1331
1331
  <a href="/blog">Blog</a>
1332
1332
  </div>
1333
- <span class="footer-copy">ยฉ 2026 Max Smith KDP LLC ยท MIT License ยท v1.8.0</span>
1333
+ <span class="footer-copy">ยฉ 2026 Max Smith KDP LLC ยท MIT License ยท v1.10.1</span>
1334
1334
  </div>
1335
1335
  </footer>
1336
1336
 
@@ -24,6 +24,7 @@ const WRITE_CAPABLE_TOOLS = new Set([
24
24
  'approve_protected_action',
25
25
  'track_action',
26
26
  'register_claim_gate',
27
+ 'run_autoresearch',
27
28
  ]);
28
29
 
29
30
  const BOOTSTRAP_FILES = [