thumbgate 1.7.0 โ†’ 1.9.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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "thumbgate-marketplace",
3
- "version": "1.7.0",
3
+ "version": "1.9.0",
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.7.0",
16
+ "version": "1.9.0",
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.7.0",
4
+ "version": "1.9.0",
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.7.0",
3
+ "version": "1.9.0",
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.7.0 thumbgate serve`.
6
+ - `claude/.mcp.json`: example Claude Code MCP config using `npx --yes --package thumbgate@1.9.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.7.0", "thumbgate", "serve"]
5
+ "args": ["--yes", "--package", "thumbgate@1.9.0", "thumbgate", "serve"]
6
6
  }
7
7
  },
8
8
  "hooks": {
9
9
  "preToolUse": {
10
10
  "command": "npx",
11
- "args": ["--yes", "--package", "thumbgate@1.7.0", "thumbgate", "gate-check"]
11
+ "args": ["--yes", "--package", "thumbgate@1.9.0", "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');
@@ -125,6 +129,8 @@ const {
125
129
  formatUnifiedContext,
126
130
  } = require('../../scripts/context-manager');
127
131
  const { exportHfDataset } = require('../../scripts/export-hf-dataset');
132
+ const { distributeContextToAgents } = require('../../scripts/swarm-coordinator');
133
+ const { buildSessionReport } = require('../../scripts/session-report');
128
134
 
129
135
  const PRO_CHECKOUT_URL = 'https://thumbgate-production.up.railway.app/checkout/pro';
130
136
 
@@ -146,7 +152,7 @@ const {
146
152
  finalizeSession: finalizeFeedbackSession,
147
153
  } = require('../../scripts/feedback-session');
148
154
 
149
- const SERVER_INFO = { name: 'thumbgate-mcp', version: '1.7.0' };
155
+ const SERVER_INFO = { name: 'thumbgate-mcp', version: '1.9.0' };
150
156
  const COMMERCE_CATEGORIES = [
151
157
  'product_recommendation',
152
158
  'brand_compliance',
@@ -194,6 +200,17 @@ function resolveImportDocumentPath(targetPath) {
194
200
  return resolved;
195
201
  }
196
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
+
197
214
  function toTextResult(payload) {
198
215
  const text = typeof payload === 'string' ? payload : JSON.stringify(payload, null, 2);
199
216
  return {
@@ -736,6 +753,53 @@ async function callToolInner(name, args) {
736
753
  }
737
754
  case 'verify_claim':
738
755
  return toTextResult(verifyClaimEvidence(args.claim));
756
+ case 'require_evidence_for_claim': {
757
+ if (!args.claim || typeof args.claim !== 'string') {
758
+ throw new Error('claim is required and must be a string');
759
+ }
760
+ const verification = verifyClaimEvidence(args.claim);
761
+ const mode = args.mode === 'advisory' ? 'advisory' : 'blocking';
762
+ const hasMatchingChecks = Array.isArray(verification.checks) && verification.checks.length > 0;
763
+ const evidenceMissing = hasMatchingChecks && !verification.verified;
764
+ const blocking = mode === 'blocking' && evidenceMissing;
765
+ const missingActions = hasMatchingChecks
766
+ ? Array.from(new Set(verification.checks.flatMap((check) => check.missing || [])))
767
+ : [];
768
+ try {
769
+ const { recordAuditEvent } = require('../../scripts/audit-trail');
770
+ recordAuditEvent({
771
+ toolName: 'require_evidence_for_claim',
772
+ toolInput: { claim: args.claim, mode, sessionId: args.sessionId || null },
773
+ decision: blocking ? 'deny' : 'allow',
774
+ gateId: 'completion_claim',
775
+ message: blocking
776
+ ? `Completion claim blocked โ€” missing evidence: ${missingActions.join(', ') || 'unknown'}`
777
+ : `Completion claim verified (${verification.verified ? 'evidence present' : 'no matching gate'})`,
778
+ source: 'completion-gate',
779
+ });
780
+ } catch { /* audit write must never break tool response */ }
781
+ return toTextResult({
782
+ claim: args.claim,
783
+ mode,
784
+ blocking,
785
+ verified: verification.verified,
786
+ matchedChecks: hasMatchingChecks,
787
+ missingActions,
788
+ checks: verification.checks,
789
+ sessionId: args.sessionId || null,
790
+ });
791
+ }
792
+ case 'distribute_context_to_agents':
793
+ return toTextResult(distributeContextToAgents({
794
+ query: args.query || '',
795
+ agents: args.agents,
796
+ maxItems: args.maxItems,
797
+ maxChars: args.maxChars,
798
+ namespaces: Array.isArray(args.namespaces) ? args.namespaces : [],
799
+ ttlMs: args.ttlMs,
800
+ }));
801
+ case 'session_report':
802
+ return toTextResult(buildSessionReport({ windowHours: args.windowHours }));
739
803
  case 'check_operational_integrity':
740
804
  return toTextResult(evaluateOperationalIntegrity({
741
805
  repoPath: args.repoPath,
@@ -802,6 +866,36 @@ async function callToolInner(name, args) {
802
866
  return toTextResult({ harnesses: listHarnesses({ tag: args.tag }) });
803
867
  case 'run_harness':
804
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
+ }
805
899
  case 'open_feedback_session':
806
900
  return toTextResult(openFeedbackSession(args.feedbackEventId, args.signal, args.initialContext));
807
901
  case 'append_feedback_context':
@@ -7,7 +7,7 @@
7
7
  "npx",
8
8
  "--yes",
9
9
  "--package",
10
- "thumbgate@1.7.0",
10
+ "thumbgate@1.9.0",
11
11
  "thumbgate",
12
12
  "serve"
13
13
  ],
@@ -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",
@@ -52,6 +54,9 @@
52
54
  "get_reliability_rules",
53
55
  "describe_reliability_entity",
54
56
  "report_product_issue",
57
+ "require_evidence_for_claim",
58
+ "distribute_context_to_agents",
59
+ "session_report",
55
60
  "perplexity_search",
56
61
  "perplexity_ask",
57
62
  "perplexity_research",
@@ -67,6 +72,7 @@
67
72
  "search_lessons",
68
73
  "retrieve_lessons",
69
74
  "search_thumbgate",
75
+ "plan_multimodal_retrieval",
70
76
  "reflect_on_feedback",
71
77
  "prevention_rules",
72
78
  "set_task_scope",
@@ -81,7 +87,9 @@
81
87
  "feedback_stats",
82
88
  "feedback_summary",
83
89
  "estimate_uncertainty",
84
- "report_product_issue"
90
+ "report_product_issue",
91
+ "require_evidence_for_claim",
92
+ "session_report"
85
93
  ],
86
94
  "commerce": [
87
95
  "capture_feedback",
@@ -109,6 +117,7 @@
109
117
  "search_lessons",
110
118
  "retrieve_lessons",
111
119
  "search_thumbgate",
120
+ "plan_multimodal_retrieval",
112
121
  "feedback_stats",
113
122
  "diagnose_failure",
114
123
  "list_harnesses",
@@ -129,6 +138,8 @@
129
138
  "describe_semantic_entity",
130
139
  "get_reliability_rules",
131
140
  "describe_reliability_entity",
141
+ "require_evidence_for_claim",
142
+ "session_report",
132
143
  "perplexity_search",
133
144
  "perplexity_ask"
134
145
  ],
@@ -139,6 +150,7 @@
139
150
  "search_lessons",
140
151
  "retrieve_lessons",
141
152
  "search_thumbgate",
153
+ "plan_multimodal_retrieval",
142
154
  "feedback_stats",
143
155
  "diagnose_failure",
144
156
  "list_harnesses",
@@ -158,6 +170,8 @@
158
170
  "describe_semantic_entity",
159
171
  "get_reliability_rules",
160
172
  "describe_reliability_entity",
173
+ "require_evidence_for_claim",
174
+ "session_report",
161
175
  "perplexity_search",
162
176
  "perplexity_ask"
163
177
  ],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "thumbgate",
3
- "version": "1.7.0",
3
+ "version": "1.9.0",
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": {
@@ -19,7 +19,6 @@
19
19
  ".claude-plugin/marketplace.json",
20
20
  ".claude-plugin/plugin.json",
21
21
  ".well-known/",
22
- "CHANGELOG.md",
23
22
  "LICENSE",
24
23
  "README.md",
25
24
  "adapters/amp/skills/thumbgate-feedback/SKILL.md",
@@ -49,6 +48,8 @@
49
48
  "scripts/agentic-data-pipeline.js",
50
49
  "scripts/analytics-report.js",
51
50
  "scripts/analytics-window.js",
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",
@@ -135,6 +136,7 @@
135
136
  "scripts/mcp-policy.js",
136
137
  "scripts/memory-firewall.js",
137
138
  "scripts/meta-agent-loop.js",
139
+ "scripts/multimodal-retrieval-plan.js",
138
140
  "scripts/natural-language-harness.js",
139
141
  "scripts/obsidian-export.js",
140
142
  "scripts/operational-dashboard.js",
@@ -173,6 +175,7 @@
173
175
  "scripts/slo-alert-engine.js",
174
176
  "scripts/spec-gate.js",
175
177
  "scripts/statusline-cache-path.js",
178
+ "scripts/statusline-context.js",
176
179
  "scripts/statusline-lesson.js",
177
180
  "scripts/statusline-links.js",
178
181
  "scripts/statusline-local-stats.js",
@@ -251,7 +254,10 @@
251
254
  "trace:eval": "node scripts/decision-trace.js eval",
252
255
  "social:reply-monitor": "node scripts/social-reply-monitor.js",
253
256
  "social:reply-monitor:dry": "node scripts/social-reply-monitor.js --dry-run",
254
- "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",
257
+ "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:swarm-coordinator": "node --test tests/swarm-coordinator.test.js",
259
+ "test:session-report": "node --test tests/session-report.test.js",
260
+ "test:require-evidence-gate": "node --test tests/require-evidence-gate.test.js",
255
261
  "test:session-health": "node --test tests/session-health-sensor.test.js",
256
262
  "test:session-episodes": "node --test tests/session-episode-store.test.js",
257
263
  "test:spec-gate": "node --test tests/spec-gate.test.js",
@@ -265,7 +271,7 @@
265
271
  "test:multi-hop-recall": "node --test tests/multi-hop-recall.test.js",
266
272
  "test:synthetic-dpo": "node --test tests/synthetic-dpo.test.js",
267
273
  "test:thumbgate-skill": "node --test tests/thumbgate-skill.test.js",
268
- "test:statusline": "node --test tests/claude-feedback-sync.test.js tests/statusline.test.js tests/statusline-links.test.js",
274
+ "test:statusline": "node --test tests/claude-feedback-sync.test.js tests/statusline.test.js tests/statusline-context.test.js tests/statusline-links.test.js",
269
275
  "test:memory-dedup": "node --test tests/memory-dedup.test.js",
270
276
  "test:lesson-db": "node --test tests/lesson-db.test.js",
271
277
  "test:lesson-rotation": "node --test tests/lesson-rotation.test.js",
@@ -483,10 +489,11 @@
483
489
  "test:demo-voiceover": "node --test tests/demo-voiceover.test.js",
484
490
  "test:gate-coherence": "node --test tests/gate-coherence.test.js",
485
491
  "test:gate-eval": "node --test tests/gate-eval.test.js",
486
- "test:high-roi": "node --test tests/high-roi.test.js",
492
+ "test:high-roi": "node --test tests/high-roi.test.js tests/autonomous-workflow.test.js",
487
493
  "test:public-static-assets": "node --test tests/public-static-assets.test.js",
488
494
  "test:token-savings": "node --test tests/token-savings.test.js",
489
- "test:workflow-gate-checkpoint": "node --test tests/workflow-gate-checkpoint.test.js",
495
+ "test:workflow-gate-checkpoint": "node --test tests/workflow-gate-checkpoint.test.js tests/autonomous-workflow.test.js",
496
+ "workflow:autonomous": "node scripts/autonomous-workflow.js",
490
497
  "test:lesson-export-import": "node --test tests/lesson-export-import.test.js",
491
498
  "test:landing-page-claims": "node --test tests/landing-page-claims.test.js",
492
499
  "test:dashboard-deeplink-e2e": "node --test tests/dashboard-deeplink-e2e.test.js",
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.7.0</div>
977
+ <div class="section-label">New in v1.9.0</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.7.0</span>
1333
+ <span class="footer-copy">ยฉ 2026 Max Smith KDP LLC ยท MIT License ยท v1.9.0</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 = [