thumbgate 1.6.0 โ†’ 1.8.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.6.0",
3
+ "version": "1.8.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.6.0",
16
+ "version": "1.8.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.6.0",
4
+ "version": "1.8.0",
5
5
  "author": {
6
6
  "name": "Igor Ganapolsky"
7
7
  },
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "thumbgate",
3
- "version": "1.6.0",
3
+ "version": "1.8.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",
@@ -3,7 +3,7 @@
3
3
  - `chatgpt/openapi.yaml`: import into GPT Actions.
4
4
  - `gemini/function-declarations.json`: Gemini function-calling definitions.
5
5
  - `mcp/server-stdio.js`: underlying local MCP stdio server implementation.
6
- - `claude/.mcp.json`: example Claude Code MCP config using `npx --yes --package thumbgate@1.6.0 thumbgate serve`.
6
+ - `claude/.mcp.json`: example Claude Code MCP config using `npx --yes --package thumbgate@1.8.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.6.0", "thumbgate", "serve"]
5
+ "args": ["--yes", "--package", "thumbgate@1.8.0", "thumbgate", "serve"]
6
6
  }
7
7
  },
8
8
  "hooks": {
9
9
  "preToolUse": {
10
10
  "command": "npx",
11
- "args": ["--yes", "--package", "thumbgate@1.6.0", "thumbgate", "gate-check"]
11
+ "args": ["--yes", "--package", "thumbgate@1.8.0", "thumbgate", "gate-check"]
12
12
  }
13
13
  }
14
14
  }
@@ -125,6 +125,8 @@ const {
125
125
  formatUnifiedContext,
126
126
  } = require('../../scripts/context-manager');
127
127
  const { exportHfDataset } = require('../../scripts/export-hf-dataset');
128
+ const { distributeContextToAgents } = require('../../scripts/swarm-coordinator');
129
+ const { buildSessionReport } = require('../../scripts/session-report');
128
130
 
129
131
  const PRO_CHECKOUT_URL = 'https://thumbgate-production.up.railway.app/checkout/pro';
130
132
 
@@ -146,7 +148,7 @@ const {
146
148
  finalizeSession: finalizeFeedbackSession,
147
149
  } = require('../../scripts/feedback-session');
148
150
 
149
- const SERVER_INFO = { name: 'thumbgate-mcp', version: '1.6.0' };
151
+ const SERVER_INFO = { name: 'thumbgate-mcp', version: '1.8.0' };
150
152
  const COMMERCE_CATEGORIES = [
151
153
  'product_recommendation',
152
154
  'brand_compliance',
@@ -201,6 +203,43 @@ function toTextResult(payload) {
201
203
  };
202
204
  }
203
205
 
206
+ // Format corrective actions as a top-level <system-reminder> block so the
207
+ // calling agent treats them as first-class guidance, not buried JSON.
208
+ // Shape of `actions` varies: lesson-db.inferCorrectiveActions returns
209
+ // {whatToChange, tags, timestamp}; lesson-search.buildSystemActions returns
210
+ // {type, source, text}. Normalize to a single bulleted list.
211
+ function formatCorrectiveActionsReminder(actions) {
212
+ if (!Array.isArray(actions) || actions.length === 0) return '';
213
+ const lines = ['<system-reminder>', 'ThumbGate surfaced prior lessons matching this failure.', 'REVIEW BEFORE YOUR NEXT ACTION:'];
214
+ actions.slice(0, 5).forEach((action, idx) => {
215
+ const text = (action && (action.whatToChange || action.text || action.message)) || '';
216
+ if (!text) return;
217
+ const tags = Array.isArray(action.tags) && action.tags.length > 0 ? ` [${action.tags.join(', ')}]` : '';
218
+ lines.push(`${idx + 1}. ${String(text).trim()}${tags}`);
219
+ });
220
+ lines.push('</system-reminder>', '');
221
+ return lines.join('\n');
222
+ }
223
+
224
+ // Wrap capture_feedback payloads so correctiveActions surface as a
225
+ // top-level <system-reminder> text block appended alongside the JSON body.
226
+ //
227
+ // Ordering: JSON body is content[0] (preserves backward compatibility with
228
+ // callers that parse content[0].text as JSON); the reminder is content[1]
229
+ // so it still appears as a top-level block the agent must process โ€” not
230
+ // buried inside the JSON structure.
231
+ function toCaptureFeedbackTextResult(result) {
232
+ const body = JSON.stringify(result, null, 2);
233
+ const blocks = [{ type: 'text', text: body }];
234
+ const reminder = result && Array.isArray(result.correctiveActions)
235
+ ? formatCorrectiveActionsReminder(result.correctiveActions)
236
+ : '';
237
+ if (reminder) {
238
+ blocks.push({ type: 'text', text: reminder });
239
+ }
240
+ return { content: blocks };
241
+ }
242
+
204
243
  function formatContextPack(pack) {
205
244
  const lines = [
206
245
  '## Context Pack',
@@ -447,7 +486,7 @@ async function callToolInner(name, args) {
447
486
  switch (name) {
448
487
  case 'capture_feedback':
449
488
 
450
- return toTextResult(captureFeedback(args));
489
+ return toCaptureFeedbackTextResult(captureFeedback(args));
451
490
  case 'feedback_summary':
452
491
  return toTextResult(feedbackSummary(Number(args.recent || 20)));
453
492
  case 'search_lessons':
@@ -699,6 +738,53 @@ async function callToolInner(name, args) {
699
738
  }
700
739
  case 'verify_claim':
701
740
  return toTextResult(verifyClaimEvidence(args.claim));
741
+ case 'require_evidence_for_claim': {
742
+ if (!args.claim || typeof args.claim !== 'string') {
743
+ throw new Error('claim is required and must be a string');
744
+ }
745
+ const verification = verifyClaimEvidence(args.claim);
746
+ const mode = args.mode === 'advisory' ? 'advisory' : 'blocking';
747
+ const hasMatchingChecks = Array.isArray(verification.checks) && verification.checks.length > 0;
748
+ const evidenceMissing = hasMatchingChecks && !verification.verified;
749
+ const blocking = mode === 'blocking' && evidenceMissing;
750
+ const missingActions = hasMatchingChecks
751
+ ? Array.from(new Set(verification.checks.flatMap((check) => check.missing || [])))
752
+ : [];
753
+ try {
754
+ const { recordAuditEvent } = require('../../scripts/audit-trail');
755
+ recordAuditEvent({
756
+ toolName: 'require_evidence_for_claim',
757
+ toolInput: { claim: args.claim, mode, sessionId: args.sessionId || null },
758
+ decision: blocking ? 'deny' : 'allow',
759
+ gateId: 'completion_claim',
760
+ message: blocking
761
+ ? `Completion claim blocked โ€” missing evidence: ${missingActions.join(', ') || 'unknown'}`
762
+ : `Completion claim verified (${verification.verified ? 'evidence present' : 'no matching gate'})`,
763
+ source: 'completion-gate',
764
+ });
765
+ } catch { /* audit write must never break tool response */ }
766
+ return toTextResult({
767
+ claim: args.claim,
768
+ mode,
769
+ blocking,
770
+ verified: verification.verified,
771
+ matchedChecks: hasMatchingChecks,
772
+ missingActions,
773
+ checks: verification.checks,
774
+ sessionId: args.sessionId || null,
775
+ });
776
+ }
777
+ case 'distribute_context_to_agents':
778
+ return toTextResult(distributeContextToAgents({
779
+ query: args.query || '',
780
+ agents: args.agents,
781
+ maxItems: args.maxItems,
782
+ maxChars: args.maxChars,
783
+ namespaces: Array.isArray(args.namespaces) ? args.namespaces : [],
784
+ ttlMs: args.ttlMs,
785
+ }));
786
+ case 'session_report':
787
+ return toTextResult(buildSessionReport({ windowHours: args.windowHours }));
702
788
  case 'check_operational_integrity':
703
789
  return toTextResult(evaluateOperationalIntegrity({
704
790
  repoPath: args.repoPath,
@@ -1008,4 +1094,6 @@ module.exports = {
1008
1094
  callTool,
1009
1095
  startStdioServer,
1010
1096
  acquireLock,
1097
+ toCaptureFeedbackTextResult,
1098
+ formatCorrectiveActionsReminder,
1011
1099
  };
@@ -7,7 +7,7 @@
7
7
  "npx",
8
8
  "--yes",
9
9
  "--package",
10
- "thumbgate@1.6.0",
10
+ "thumbgate@1.8.0",
11
11
  "thumbgate",
12
12
  "serve"
13
13
  ],
package/bin/cli.js CHANGED
@@ -1591,19 +1591,53 @@ function sessionStart() {
1591
1591
  const { refreshStatuslineCache } = require(path.join(PKG_ROOT, 'scripts', 'hook-thumbgate-cache-updater'));
1592
1592
  refreshStatuslineCache(analyzeFeedback());
1593
1593
 
1594
- // Surface gate-program.md active rules so the agent starts aware of what is blocked.
1594
+ // Build a top-level <system-reminder> block that Claude Code's SessionStart
1595
+ // hook surfaces to the agent as first-class context โ€” not buried stderr.
1596
+ // Contract: emit JSON `{hookSpecificOutput:{hookEventName:"SessionStart",
1597
+ // additionalContext:"..."}}` to stdout. Supported by Claude Code v0.4+.
1598
+ const reminderLines = [];
1599
+
1600
+ // Active hard-block rules from gate-program.md
1595
1601
  try {
1596
1602
  const { readGateProgram, extractBlockPatterns } = require(path.join(PKG_ROOT, 'scripts', 'meta-agent-loop'));
1597
1603
  const gateProgram = readGateProgram();
1598
1604
  if (gateProgram) {
1599
1605
  const blockPatterns = extractBlockPatterns(gateProgram);
1600
1606
  if (blockPatterns.length > 0) {
1601
- process.stderr.write('\n[ThumbGate] Active hard-block rules from gate-program.md:\n');
1602
- blockPatterns.forEach((p, i) => process.stderr.write(` ${i + 1}. ${p}\n`));
1603
- process.stderr.write('\n');
1607
+ reminderLines.push('Active ThumbGate hard-block rules:');
1608
+ blockPatterns.forEach((p, i) => reminderLines.push(` ${i + 1}. ${p}`));
1604
1609
  }
1605
1610
  }
1606
- } catch (_) { /* gate-program awareness is best-effort */ }
1611
+ } catch (_) { /* non-critical */ }
1612
+
1613
+ // Top high-risk tags โ€” force agent to see them at session start, not opt-in
1614
+ try {
1615
+ const { getRiskSummary } = require(path.join(PKG_ROOT, 'scripts', 'risk-scorer'));
1616
+ const summary = getRiskSummary();
1617
+ if (summary && Array.isArray(summary.highRiskTags) && summary.highRiskTags.length > 0) {
1618
+ if (reminderLines.length > 0) reminderLines.push('');
1619
+ reminderLines.push('Top high-risk tags from prior failures:');
1620
+ summary.highRiskTags.slice(0, 5).forEach((bucket, i) => {
1621
+ const key = bucket && (bucket.key || bucket.tag);
1622
+ const score = bucket && (bucket.risk || bucket.score || bucket.riskScore);
1623
+ if (key) reminderLines.push(` ${i + 1}. ${key} (risk=${score || '?'})`);
1624
+ });
1625
+ }
1626
+ } catch (_) { /* non-critical */ }
1627
+
1628
+ if (reminderLines.length > 0) {
1629
+ const additionalContext = ['<system-reminder>', ...reminderLines, '</system-reminder>'].join('\n');
1630
+ try {
1631
+ process.stdout.write(JSON.stringify({
1632
+ hookSpecificOutput: {
1633
+ hookEventName: 'SessionStart',
1634
+ additionalContext,
1635
+ },
1636
+ }));
1637
+ } catch (_) { /* stdout write failure is non-critical */ }
1638
+ // Legacy stderr fallback for older Claude Code versions
1639
+ process.stderr.write('\n[ThumbGate] ' + reminderLines.join('\n[ThumbGate] ') + '\n');
1640
+ }
1607
1641
  }
1608
1642
 
1609
1643
  function installMcp() {
@@ -52,6 +52,9 @@
52
52
  "get_reliability_rules",
53
53
  "describe_reliability_entity",
54
54
  "report_product_issue",
55
+ "require_evidence_for_claim",
56
+ "distribute_context_to_agents",
57
+ "session_report",
55
58
  "perplexity_search",
56
59
  "perplexity_ask",
57
60
  "perplexity_research",
@@ -81,7 +84,9 @@
81
84
  "feedback_stats",
82
85
  "feedback_summary",
83
86
  "estimate_uncertainty",
84
- "report_product_issue"
87
+ "report_product_issue",
88
+ "require_evidence_for_claim",
89
+ "session_report"
85
90
  ],
86
91
  "commerce": [
87
92
  "capture_feedback",
@@ -129,6 +134,8 @@
129
134
  "describe_semantic_entity",
130
135
  "get_reliability_rules",
131
136
  "describe_reliability_entity",
137
+ "require_evidence_for_claim",
138
+ "session_report",
132
139
  "perplexity_search",
133
140
  "perplexity_ask"
134
141
  ],
@@ -158,6 +165,8 @@
158
165
  "describe_semantic_entity",
159
166
  "get_reliability_rules",
160
167
  "describe_reliability_entity",
168
+ "require_evidence_for_claim",
169
+ "session_report",
161
170
  "perplexity_search",
162
171
  "perplexity_ask"
163
172
  ],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "thumbgate",
3
- "version": "1.6.0",
3
+ "version": "1.8.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,7 @@
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
52
  "scripts/async-job-runner.js",
53
53
  "scripts/audit-trail.js",
54
54
  "scripts/auto-promote-gates.js",
@@ -173,6 +173,7 @@
173
173
  "scripts/slo-alert-engine.js",
174
174
  "scripts/spec-gate.js",
175
175
  "scripts/statusline-cache-path.js",
176
+ "scripts/statusline-context.js",
176
177
  "scripts/statusline-lesson.js",
177
178
  "scripts/statusline-links.js",
178
179
  "scripts/statusline-local-stats.js",
@@ -251,7 +252,10 @@
251
252
  "trace:eval": "node scripts/decision-trace.js eval",
252
253
  "social:reply-monitor": "node scripts/social-reply-monitor.js",
253
254
  "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",
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",
256
+ "test:swarm-coordinator": "node --test tests/swarm-coordinator.test.js",
257
+ "test:session-report": "node --test tests/session-report.test.js",
258
+ "test:require-evidence-gate": "node --test tests/require-evidence-gate.test.js",
255
259
  "test:session-health": "node --test tests/session-health-sensor.test.js",
256
260
  "test:session-episodes": "node --test tests/session-episode-store.test.js",
257
261
  "test:spec-gate": "node --test tests/spec-gate.test.js",
@@ -265,7 +269,7 @@
265
269
  "test:multi-hop-recall": "node --test tests/multi-hop-recall.test.js",
266
270
  "test:synthetic-dpo": "node --test tests/synthetic-dpo.test.js",
267
271
  "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",
272
+ "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
273
  "test:memory-dedup": "node --test tests/memory-dedup.test.js",
270
274
  "test:lesson-db": "node --test tests/lesson-db.test.js",
271
275
  "test:lesson-rotation": "node --test tests/lesson-rotation.test.js",
@@ -483,10 +487,11 @@
483
487
  "test:demo-voiceover": "node --test tests/demo-voiceover.test.js",
484
488
  "test:gate-coherence": "node --test tests/gate-coherence.test.js",
485
489
  "test:gate-eval": "node --test tests/gate-eval.test.js",
486
- "test:high-roi": "node --test tests/high-roi.test.js",
490
+ "test:high-roi": "node --test tests/high-roi.test.js tests/autonomous-workflow.test.js",
487
491
  "test:public-static-assets": "node --test tests/public-static-assets.test.js",
488
492
  "test:token-savings": "node --test tests/token-savings.test.js",
489
- "test:workflow-gate-checkpoint": "node --test tests/workflow-gate-checkpoint.test.js",
493
+ "test:workflow-gate-checkpoint": "node --test tests/workflow-gate-checkpoint.test.js tests/autonomous-workflow.test.js",
494
+ "workflow:autonomous": "node scripts/autonomous-workflow.js",
490
495
  "test:lesson-export-import": "node --test tests/lesson-export-import.test.js",
491
496
  "test:landing-page-claims": "node --test tests/landing-page-claims.test.js",
492
497
  "test:dashboard-deeplink-e2e": "node --test tests/dashboard-deeplink-e2e.test.js",
@@ -498,7 +503,8 @@
498
503
  "test:pretooluse-injection": "node --test tests/pretooluse-lesson-injection.test.js",
499
504
  "test:recent-corrective-context": "node --test tests/recent-corrective-actions-context.test.js",
500
505
  "test:mailer": "node --test tests/mailer.test.js tests/billing-webhook-email.test.js",
501
- "test:brand-assets": "node --test tests/brand-assets.test.js"
506
+ "test:brand-assets": "node --test tests/brand-assets.test.js",
507
+ "test:enforcement-teeth": "node --test tests/enforcement-teeth.test.js"
502
508
  },
503
509
  "keywords": [
504
510
  "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.6.0</div>
977
+ <div class="section-label">New in v1.8.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.6.0</span>
1333
+ <span class="footer-copy">ยฉ 2026 Max Smith KDP LLC ยท MIT License ยท v1.8.0</span>
1334
1334
  </div>
1335
1335
  </footer>
1336
1336