thumbgate 1.29.2 → 1.30.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.
- package/.claude-plugin/plugin.json +1 -1
- package/.well-known/mcp/server-card.json +1 -1
- package/adapters/claude/.mcp.json +2 -2
- package/adapters/forge/forge.yaml +3 -3
- package/adapters/mcp/server-stdio.js +78 -7
- package/adapters/opencode/opencode.json +1 -1
- package/bin/cli.js +7 -5
- package/config/mcp-allowlists.json +26 -2
- package/config/post-deploy-marketing-pages.json +26 -1
- package/package.json +38 -7
- package/public/architecture.html +130 -0
- package/public/assets/diagrams/agent-integration.png +0 -0
- package/public/assets/diagrams/before-after.svg +21 -0
- package/public/assets/diagrams/decision.svg +36 -0
- package/public/assets/diagrams/feedback-pipeline.png +0 -0
- package/public/assets/diagrams/loop.svg +34 -0
- package/public/assets/diagrams/plugin-topology.png +0 -0
- package/public/assets/diagrams/pre-action-gate-loop.svg +59 -0
- package/public/assets/diagrams/stack.svg +18 -0
- package/public/assets/diagrams/thumbgate-architecture.png +0 -0
- package/public/case-studies.html +151 -0
- package/public/eval-scorecard.html +195 -0
- package/public/eval-scorecard.json +18 -0
- package/public/evaluations.html +168 -0
- package/public/index.html +4 -3
- package/public/numbers.html +2 -2
- package/public/whitepaper.html +189 -0
- package/scripts/activation-quickstart.js +1 -0
- package/scripts/agent-outcome-monitor.js +71 -1
- package/scripts/billing.js +3 -1
- package/scripts/claude-feedback-sync.js +3 -2
- package/scripts/cli-feedback.js +13 -7
- package/scripts/cross-encoder-reranker.js +3 -0
- package/scripts/feedback-aggregate.js +5 -2
- package/scripts/feedback-loop.js +244 -182
- package/scripts/gates-engine.js +81 -4
- package/scripts/generate-case-study-outreach.js +253 -0
- package/scripts/generate-eval-scorecard.js +276 -0
- package/scripts/growth-campaigns.js +183 -0
- package/scripts/jsonl-watcher.js +1 -0
- package/scripts/lesson-inference.js +23 -4
- package/scripts/lesson-retrieval.js +71 -4
- package/scripts/lesson-search.js +26 -3
- package/scripts/mcp-config.js +26 -5
- package/scripts/mcp-oauth.js +37 -2
- package/scripts/model-eval.js +308 -0
- package/scripts/parallel-workflow-orchestrator.js +86 -22
- package/scripts/published-cli.js +11 -1
- package/scripts/refresh-proof-pack.js +261 -0
- package/scripts/risk-scorer.js +144 -15
- package/scripts/statusline-local-stats.js +1 -1
- package/scripts/thumbgate-bench.js +13 -0
- package/scripts/tool-kpi-tracker.js +124 -0
- package/scripts/tool-registry.js +49 -1
- package/src/api/server.js +230 -86
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "thumbgate",
|
|
3
3
|
"description": "One 👎 becomes a hard rule the agent cannot bypass. Captures thumbs-down feedback, distills it into PreToolUse Pre-Action Checks, enforced across every future Claude Code session.",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.30.0",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Igor Ganapolsky",
|
|
7
7
|
"email": "ig5973700@gmail.com",
|
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
"mcpServers": {
|
|
3
3
|
"thumbgate": {
|
|
4
4
|
"command": "npx",
|
|
5
|
-
"args": ["--yes", "--package", "thumbgate@1.
|
|
5
|
+
"args": ["--yes", "--package", "thumbgate@1.30.0", "thumbgate", "serve"]
|
|
6
6
|
}
|
|
7
7
|
},
|
|
8
8
|
"hooks": {
|
|
9
9
|
"preToolUse": {
|
|
10
10
|
"command": "npx",
|
|
11
|
-
"args": ["--yes", "--package", "thumbgate@1.
|
|
11
|
+
"args": ["--yes", "--package", "thumbgate@1.30.0", "thumbgate", "gate-check"]
|
|
12
12
|
}
|
|
13
13
|
}
|
|
14
14
|
}
|
|
@@ -9,12 +9,12 @@ version: "1"
|
|
|
9
9
|
skills:
|
|
10
10
|
thumbgate-gate-check:
|
|
11
11
|
description: "ThumbGate PreToolUse gate — blocks known-bad tool calls"
|
|
12
|
-
command: "npx --yes --package thumbgate@1.
|
|
12
|
+
command: "npx --yes --package thumbgate@1.30.0 thumbgate gate-check"
|
|
13
13
|
trigger: pre_tool_use
|
|
14
14
|
|
|
15
15
|
thumbgate-feedback:
|
|
16
16
|
description: "ThumbGate feedback capture — logs user prompt context"
|
|
17
|
-
command: "npx --yes --package thumbgate@1.
|
|
17
|
+
command: "npx --yes --package thumbgate@1.30.0 thumbgate hook-auto-capture"
|
|
18
18
|
trigger: user_prompt
|
|
19
19
|
|
|
20
20
|
mcp:
|
|
@@ -23,6 +23,6 @@ mcp:
|
|
|
23
23
|
args:
|
|
24
24
|
- "--yes"
|
|
25
25
|
- "--package"
|
|
26
|
-
- "thumbgate@1.
|
|
26
|
+
- "thumbgate@1.30.0"
|
|
27
27
|
- "thumbgate"
|
|
28
28
|
- "serve"
|
|
@@ -96,6 +96,7 @@ const {
|
|
|
96
96
|
requestEscalation,
|
|
97
97
|
} = require('../../scripts/human-escalation');
|
|
98
98
|
const { recordReasoningTrace } = require('../../scripts/agent-reasoning-traces');
|
|
99
|
+
const { recordToolCall } = require('../../scripts/tool-kpi-tracker');
|
|
99
100
|
const {
|
|
100
101
|
evaluateOperationalIntegrity,
|
|
101
102
|
} = require('../../scripts/operational-integrity');
|
|
@@ -316,7 +317,7 @@ const {
|
|
|
316
317
|
finalizeSession: finalizeFeedbackSession,
|
|
317
318
|
} = require('../../scripts/feedback-session');
|
|
318
319
|
|
|
319
|
-
const SERVER_INFO = { name: 'thumbgate-mcp', version: '1.
|
|
320
|
+
const SERVER_INFO = { name: 'thumbgate-mcp', version: '1.30.0' };
|
|
320
321
|
const COMMERCE_CATEGORIES = [
|
|
321
322
|
'product_recommendation',
|
|
322
323
|
'brand_compliance',
|
|
@@ -379,6 +380,9 @@ function toTextResult(payload) {
|
|
|
379
380
|
const text = typeof payload === 'string' ? payload : JSON.stringify(payload, null, 2);
|
|
380
381
|
return {
|
|
381
382
|
content: [{ type: 'text', text }],
|
|
383
|
+
...(payload !== null && typeof payload === 'object'
|
|
384
|
+
? { structuredContent: payload }
|
|
385
|
+
: {}),
|
|
382
386
|
};
|
|
383
387
|
}
|
|
384
388
|
|
|
@@ -416,7 +420,7 @@ function toCaptureFeedbackTextResult(result) {
|
|
|
416
420
|
if (reminder) {
|
|
417
421
|
blocks.push({ type: 'text', text: reminder });
|
|
418
422
|
}
|
|
419
|
-
return { content: blocks };
|
|
423
|
+
return { content: blocks, structuredContent: result };
|
|
420
424
|
}
|
|
421
425
|
|
|
422
426
|
function formatContextPack(pack) {
|
|
@@ -758,10 +762,27 @@ function buildEstimateUncertaintyResponse(args = {}) {
|
|
|
758
762
|
}
|
|
759
763
|
|
|
760
764
|
async function callTool(name, args = {}) {
|
|
765
|
+
const attemptStartMs = Date.now();
|
|
761
766
|
const activeProfile = getActiveMcpProfile();
|
|
762
|
-
|
|
767
|
+
try {
|
|
768
|
+
assertToolAllowed(name, activeProfile);
|
|
769
|
+
} catch (error) {
|
|
770
|
+
recordMcpToolTrace(name, args, {
|
|
771
|
+
success: false,
|
|
772
|
+
category: 'profile_denied',
|
|
773
|
+
evidence: [error.message],
|
|
774
|
+
latencyMs: Date.now() - attemptStartMs,
|
|
775
|
+
});
|
|
776
|
+
throw error;
|
|
777
|
+
}
|
|
763
778
|
const capability = getToolCapability(name);
|
|
764
779
|
if (!capability.available) {
|
|
780
|
+
recordMcpToolTrace(name, args, {
|
|
781
|
+
success: false,
|
|
782
|
+
category: 'capability',
|
|
783
|
+
evidence: capability.missingModules,
|
|
784
|
+
latencyMs: Date.now() - attemptStartMs,
|
|
785
|
+
});
|
|
765
786
|
if (capability.availability === 'private_core') {
|
|
766
787
|
return unavailablePrivateMcpFeature(name);
|
|
767
788
|
}
|
|
@@ -788,6 +809,7 @@ async function callTool(name, args = {}) {
|
|
|
788
809
|
success: false,
|
|
789
810
|
category: 'contract',
|
|
790
811
|
evidence: validation.errors,
|
|
812
|
+
latencyMs: Date.now() - attemptStartMs,
|
|
791
813
|
});
|
|
792
814
|
throw err;
|
|
793
815
|
}
|
|
@@ -803,6 +825,7 @@ async function callTool(name, args = {}) {
|
|
|
803
825
|
success: false,
|
|
804
826
|
category: 'permission',
|
|
805
827
|
evidence: [firewallResult.message],
|
|
828
|
+
latencyMs: Date.now() - attemptStartMs,
|
|
806
829
|
});
|
|
807
830
|
throw err;
|
|
808
831
|
}
|
|
@@ -816,11 +839,24 @@ async function callTool(name, args = {}) {
|
|
|
816
839
|
success: false,
|
|
817
840
|
category: err.errorCategory || 'execution',
|
|
818
841
|
evidence: [err.code || err.message || 'tool execution failed'],
|
|
819
|
-
latencyMs: Date.now() -
|
|
842
|
+
latencyMs: Date.now() - attemptStartMs,
|
|
820
843
|
});
|
|
821
844
|
throw err;
|
|
822
845
|
}
|
|
823
846
|
const latencyMs = Date.now() - startMs;
|
|
847
|
+
const outputValidation = validateMcpToolOutput(toolDef, result);
|
|
848
|
+
if (!outputValidation.valid) {
|
|
849
|
+
const err = new Error(`Structured output contract violation on '${name}': ${outputValidation.errors.join('; ')}`);
|
|
850
|
+
err.errorCategory = 'output_contract';
|
|
851
|
+
err.isRetryable = false;
|
|
852
|
+
recordMcpToolTrace(name, args, {
|
|
853
|
+
success: false,
|
|
854
|
+
category: 'output_contract',
|
|
855
|
+
evidence: outputValidation.errors,
|
|
856
|
+
latencyMs,
|
|
857
|
+
});
|
|
858
|
+
throw err;
|
|
859
|
+
}
|
|
824
860
|
recordMcpToolTrace(name, args, {
|
|
825
861
|
success: true,
|
|
826
862
|
category: 'success',
|
|
@@ -840,7 +876,31 @@ async function callTool(name, args = {}) {
|
|
|
840
876
|
return result;
|
|
841
877
|
}
|
|
842
878
|
|
|
879
|
+
function validateMcpToolOutput(toolDef, result) {
|
|
880
|
+
if (!toolDef || !toolDef.outputSchema) return { valid: true, errors: [] };
|
|
881
|
+
const { validateStructuredOutput } = require('../../scripts/tool-contract-validator');
|
|
882
|
+
if (!result || result.structuredContent === undefined) {
|
|
883
|
+
return { valid: false, errors: ['Tool response is missing structuredContent'] };
|
|
884
|
+
}
|
|
885
|
+
return validateStructuredOutput(result.structuredContent, toolDef.outputSchema);
|
|
886
|
+
}
|
|
887
|
+
|
|
843
888
|
function recordMcpToolTrace(name, args, outcome = {}) {
|
|
889
|
+
try {
|
|
890
|
+
recordToolCall({
|
|
891
|
+
toolName: name,
|
|
892
|
+
serverName: 'mcp',
|
|
893
|
+
latencyMs: Number(outcome.latencyMs || 0),
|
|
894
|
+
success: outcome.success === true,
|
|
895
|
+
agentId: args.agentId || args.processId || args.taskId || 'unknown',
|
|
896
|
+
metadata: {
|
|
897
|
+
category: outcome.category || 'unknown',
|
|
898
|
+
traceId: args.traceId || args.taskId || null,
|
|
899
|
+
},
|
|
900
|
+
});
|
|
901
|
+
} catch {
|
|
902
|
+
// KPI telemetry must not change the tool's functional outcome.
|
|
903
|
+
}
|
|
844
904
|
try {
|
|
845
905
|
const traceId = args.traceId || args.taskId || `mcp-${Date.now()}-${name}`;
|
|
846
906
|
recordReasoningTrace({
|
|
@@ -888,10 +948,13 @@ async function callToolInner(name, args) {
|
|
|
888
948
|
// action receipt (this action -> this outcome) before promotion. Returns
|
|
889
949
|
// args unchanged when there is no matching receipt (non-breaking).
|
|
890
950
|
const pairedFeedback = pairFeedbackWithReceipt(args);
|
|
891
|
-
return toCaptureFeedbackTextResult(captureFeedback(
|
|
951
|
+
return toCaptureFeedbackTextResult(captureFeedback({
|
|
952
|
+
...pairedFeedback,
|
|
953
|
+
reviewOrigin: 'automated',
|
|
954
|
+
}));
|
|
892
955
|
}
|
|
893
956
|
case 'feedback_summary':
|
|
894
|
-
return toTextResult(feedbackSummary(Number(args.recent || 20)));
|
|
957
|
+
return toTextResult(feedbackSummary(Number(args.recent || 20), { humanOnly: true }));
|
|
895
958
|
case 'search_lessons': {
|
|
896
959
|
const module = loadPrivateMcpModule('lessonSearch');
|
|
897
960
|
if (!module) return unavailablePrivateMcpFeature('search_lessons');
|
|
@@ -899,6 +962,9 @@ async function callToolInner(name, args) {
|
|
|
899
962
|
limit: Number(args.limit || 10),
|
|
900
963
|
category: args.category,
|
|
901
964
|
tags: Array.isArray(args.tags) ? args.tags : [],
|
|
965
|
+
scope: args.scope,
|
|
966
|
+
requireScope: args.requireScope === true,
|
|
967
|
+
includeShared: args.includeShared !== false,
|
|
902
968
|
}));
|
|
903
969
|
}
|
|
904
970
|
case 'suggest_fix':
|
|
@@ -918,6 +984,9 @@ async function callToolInner(name, args) {
|
|
|
918
984
|
{
|
|
919
985
|
candidateCount: 20,
|
|
920
986
|
maxResults: Number(args.maxResults || 5),
|
|
987
|
+
scope: args.scope,
|
|
988
|
+
requireScope: args.requireScope === true,
|
|
989
|
+
includeShared: args.includeShared !== false,
|
|
921
990
|
},
|
|
922
991
|
));
|
|
923
992
|
}
|
|
@@ -970,7 +1039,7 @@ async function callToolInner(name, args) {
|
|
|
970
1039
|
return toTextResult(document);
|
|
971
1040
|
}
|
|
972
1041
|
case 'feedback_stats':
|
|
973
|
-
return toTextResult(analyzeFeedback());
|
|
1042
|
+
return toTextResult(analyzeFeedback(undefined, { humanOnly: true }));
|
|
974
1043
|
case 'diagnose_failure':
|
|
975
1044
|
return buildDiagnoseFailureResponse(args);
|
|
976
1045
|
case 'reflect_on_feedback':
|
|
@@ -1148,6 +1217,7 @@ async function callToolInner(name, args) {
|
|
|
1148
1217
|
workflowContract: args.workflowContract,
|
|
1149
1218
|
repoPath: args.repoPath,
|
|
1150
1219
|
localOnly: args.localOnly === true,
|
|
1220
|
+
ttlMs: args.ttlMs,
|
|
1151
1221
|
clear: args.clear === true,
|
|
1152
1222
|
}),
|
|
1153
1223
|
});
|
|
@@ -1744,5 +1814,6 @@ module.exports = {
|
|
|
1744
1814
|
listAvailableTools,
|
|
1745
1815
|
unavailablePrivateMcpFeature,
|
|
1746
1816
|
callToolInner,
|
|
1817
|
+
validateMcpToolOutput,
|
|
1747
1818
|
},
|
|
1748
1819
|
};
|
package/bin/cli.js
CHANGED
|
@@ -1185,7 +1185,7 @@ function capture() {
|
|
|
1185
1185
|
}
|
|
1186
1186
|
|
|
1187
1187
|
if (args.summary) {
|
|
1188
|
-
console.log(feedbackSummary(Number(args.recent || 20)));
|
|
1188
|
+
console.log(feedbackSummary(Number(args.recent || 20), { humanOnly: true }));
|
|
1189
1189
|
return;
|
|
1190
1190
|
}
|
|
1191
1191
|
|
|
@@ -1271,6 +1271,7 @@ function capture() {
|
|
|
1271
1271
|
whatWorked: args['what-worked'],
|
|
1272
1272
|
tags: args.tags,
|
|
1273
1273
|
gateAction: gateAction || undefined,
|
|
1274
|
+
reviewOrigin: 'human',
|
|
1274
1275
|
});
|
|
1275
1276
|
|
|
1276
1277
|
if (result.accepted) {
|
|
@@ -1386,6 +1387,7 @@ function feedbackSelfTest() {
|
|
|
1386
1387
|
? (args['what-worked'] || 'Feedback capture persisted and was verified by a self-test')
|
|
1387
1388
|
: undefined,
|
|
1388
1389
|
tags: args.tags || 'self-test,dogfood,feedback-capture',
|
|
1390
|
+
reviewOrigin: 'automated',
|
|
1389
1391
|
});
|
|
1390
1392
|
|
|
1391
1393
|
const paths = getFeedbackPaths();
|
|
@@ -1444,7 +1446,7 @@ function stats() {
|
|
|
1444
1446
|
trackEvent('cli_stats', { command: 'stats' });
|
|
1445
1447
|
const args = parseArgs(process.argv.slice(3));
|
|
1446
1448
|
const { analyzeFeedback } = require(path.join(PKG_ROOT, 'scripts', 'feedback-loop'));
|
|
1447
|
-
const data = analyzeFeedback();
|
|
1449
|
+
const data = analyzeFeedback(undefined, { humanOnly: true });
|
|
1448
1450
|
|
|
1449
1451
|
// Gate enforcement stats — runtime intercepts + configured gates
|
|
1450
1452
|
let gateData = { blocked: 0, warned: 0, passed: 0, byGate: {} };
|
|
@@ -1761,7 +1763,7 @@ function summary() {
|
|
|
1761
1763
|
const args = parseArgs(process.argv.slice(3));
|
|
1762
1764
|
const { feedbackSummary, analyzeFeedback } = require(path.join(PKG_ROOT, 'scripts', 'feedback-loop'));
|
|
1763
1765
|
if (args.json) {
|
|
1764
|
-
const data = analyzeFeedback();
|
|
1766
|
+
const data = analyzeFeedback(undefined, { humanOnly: true });
|
|
1765
1767
|
console.log(JSON.stringify({
|
|
1766
1768
|
total: data.total,
|
|
1767
1769
|
positives: data.totalPositive,
|
|
@@ -1771,7 +1773,7 @@ function summary() {
|
|
|
1771
1773
|
}, null, 2));
|
|
1772
1774
|
return;
|
|
1773
1775
|
}
|
|
1774
|
-
console.log(feedbackSummary(Number(args.recent || 20)));
|
|
1776
|
+
console.log(feedbackSummary(Number(args.recent || 20), { humanOnly: true }));
|
|
1775
1777
|
}
|
|
1776
1778
|
|
|
1777
1779
|
function lessons() {
|
|
@@ -2861,7 +2863,7 @@ function sessionStart() {
|
|
|
2861
2863
|
} catch (_) { /* best-effort fallback sync */ }
|
|
2862
2864
|
const { analyzeFeedback } = require(path.join(PKG_ROOT, 'scripts', 'feedback-loop'));
|
|
2863
2865
|
const { refreshStatuslineCache } = require(path.join(PKG_ROOT, 'scripts', 'hook-thumbgate-cache-updater'));
|
|
2864
|
-
refreshStatuslineCache(analyzeFeedback());
|
|
2866
|
+
refreshStatuslineCache(analyzeFeedback(undefined, { humanOnly: true }));
|
|
2865
2867
|
|
|
2866
2868
|
// Build a top-level <system-reminder> block that Claude Code's SessionStart
|
|
2867
2869
|
// hook surfaces to the agent as first-class context — not buried stderr.
|
|
@@ -46,6 +46,11 @@
|
|
|
46
46
|
"detect_noop",
|
|
47
47
|
"record_action_receipt",
|
|
48
48
|
"get_action_receipts",
|
|
49
|
+
"record_task_outcome",
|
|
50
|
+
"get_task_outcomes",
|
|
51
|
+
"get_agent_outcome_metrics",
|
|
52
|
+
"request_human_escalation",
|
|
53
|
+
"list_human_escalations",
|
|
49
54
|
"verify_claim",
|
|
50
55
|
"check_operational_integrity",
|
|
51
56
|
"workflow_sentinel",
|
|
@@ -73,6 +78,7 @@
|
|
|
73
78
|
"run_self_distill",
|
|
74
79
|
"self_distill_status",
|
|
75
80
|
"context_stuff_lessons",
|
|
81
|
+
"parallel_workflow",
|
|
76
82
|
"perplexity_search",
|
|
77
83
|
"perplexity_ask",
|
|
78
84
|
"perplexity_research",
|
|
@@ -105,6 +111,11 @@
|
|
|
105
111
|
"get_branch_governance",
|
|
106
112
|
"approve_protected_action",
|
|
107
113
|
"track_action",
|
|
114
|
+
"record_task_outcome",
|
|
115
|
+
"get_task_outcomes",
|
|
116
|
+
"get_agent_outcome_metrics",
|
|
117
|
+
"request_human_escalation",
|
|
118
|
+
"list_human_escalations",
|
|
108
119
|
"verify_claim",
|
|
109
120
|
"check_operational_integrity",
|
|
110
121
|
"workflow_sentinel",
|
|
@@ -115,6 +126,7 @@
|
|
|
115
126
|
"require_evidence_for_claim",
|
|
116
127
|
"session_report",
|
|
117
128
|
"generate_operator_artifact",
|
|
129
|
+
"parallel_workflow",
|
|
118
130
|
"suggest_fix"
|
|
119
131
|
],
|
|
120
132
|
"commerce": [
|
|
@@ -129,6 +141,11 @@
|
|
|
129
141
|
"get_branch_governance",
|
|
130
142
|
"approve_protected_action",
|
|
131
143
|
"track_action",
|
|
144
|
+
"record_task_outcome",
|
|
145
|
+
"get_task_outcomes",
|
|
146
|
+
"get_agent_outcome_metrics",
|
|
147
|
+
"request_human_escalation",
|
|
148
|
+
"list_human_escalations",
|
|
132
149
|
"verify_claim",
|
|
133
150
|
"check_operational_integrity",
|
|
134
151
|
"workflow_sentinel",
|
|
@@ -156,11 +173,12 @@
|
|
|
156
173
|
"list_harnesses",
|
|
157
174
|
"list_intents",
|
|
158
175
|
"plan_intent",
|
|
159
|
-
"start_handoff",
|
|
160
|
-
"complete_handoff",
|
|
161
176
|
"context_provenance",
|
|
162
177
|
"get_scope_state",
|
|
163
178
|
"get_branch_governance",
|
|
179
|
+
"get_task_outcomes",
|
|
180
|
+
"get_agent_outcome_metrics",
|
|
181
|
+
"list_human_escalations",
|
|
164
182
|
"verify_claim",
|
|
165
183
|
"check_operational_integrity",
|
|
166
184
|
"workflow_sentinel",
|
|
@@ -202,6 +220,9 @@
|
|
|
202
220
|
"context_provenance",
|
|
203
221
|
"get_scope_state",
|
|
204
222
|
"get_branch_governance",
|
|
223
|
+
"get_task_outcomes",
|
|
224
|
+
"get_agent_outcome_metrics",
|
|
225
|
+
"list_human_escalations",
|
|
205
226
|
"verify_claim",
|
|
206
227
|
"check_operational_integrity",
|
|
207
228
|
"workflow_sentinel",
|
|
@@ -237,6 +258,9 @@
|
|
|
237
258
|
"list_harnesses",
|
|
238
259
|
"get_scope_state",
|
|
239
260
|
"get_branch_governance",
|
|
261
|
+
"get_task_outcomes",
|
|
262
|
+
"get_agent_outcome_metrics",
|
|
263
|
+
"list_human_escalations",
|
|
240
264
|
"verify_claim",
|
|
241
265
|
"check_operational_integrity",
|
|
242
266
|
"workflow_sentinel",
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
{
|
|
6
6
|
"route": "/",
|
|
7
7
|
"sentinel": "Stop AI agent mistakes before they cost you",
|
|
8
|
-
"description": "Home page hero (lifeblood
|
|
8
|
+
"description": "Home page hero (lifeblood \u2014 never regress)"
|
|
9
9
|
},
|
|
10
10
|
{
|
|
11
11
|
"route": "/pro",
|
|
@@ -75,6 +75,31 @@
|
|
|
75
75
|
"route": "/leash-beta",
|
|
76
76
|
"sentinel": "Stop Runaway AI Agents From Freezing Your Machine",
|
|
77
77
|
"description": "Hermes Mobile founding beta / Leash Pro pricing landing"
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"route": "/whitepaper",
|
|
81
|
+
"sentinel": "How we know ThumbGate works",
|
|
82
|
+
"description": "Evaluation white paper"
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"route": "/architecture",
|
|
86
|
+
"sentinel": "Architecture diagrams",
|
|
87
|
+
"description": "Public diagram gallery"
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"route": "/eval-scorecard",
|
|
91
|
+
"sentinel": "Eval scorecard",
|
|
92
|
+
"description": "ThumbGate Bench scorecard"
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"route": "/evaluations",
|
|
96
|
+
"sentinel": "How We Evaluate",
|
|
97
|
+
"description": "ML evaluation methodology page"
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"route": "/case-studies",
|
|
101
|
+
"sentinel": "Case studies",
|
|
102
|
+
"description": "Dogfood case studies proof page"
|
|
78
103
|
}
|
|
79
104
|
]
|
|
80
105
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "thumbgate",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.30.0",
|
|
4
4
|
"description": "ThumbGate Pre-Action Checks self-improve from ranked lessons and repeated failures, hard-block detected secret leaks, and block matches in strict mode.",
|
|
5
5
|
"homepage": "https://thumbgate.ai",
|
|
6
6
|
"repository": {
|
|
@@ -200,6 +200,7 @@
|
|
|
200
200
|
"scripts/revenue-action-eligibility.js",
|
|
201
201
|
"scripts/revenue-evidence-remediation.js",
|
|
202
202
|
"scripts/reward-hacking-guardrails.js",
|
|
203
|
+
"scripts/model-eval.js",
|
|
203
204
|
"scripts/risk-scorer.js",
|
|
204
205
|
"scripts/rlaif-self-audit.js",
|
|
205
206
|
"scripts/rubric-engine.js",
|
|
@@ -249,6 +250,7 @@
|
|
|
249
250
|
"scripts/tool-contract-validator.js",
|
|
250
251
|
"scripts/tool-registry.js",
|
|
251
252
|
"scripts/task-outcomes.js",
|
|
253
|
+
"scripts/tool-kpi-tracker.js",
|
|
252
254
|
"scripts/upstream-contribution-engine.js",
|
|
253
255
|
"scripts/user-profile.js",
|
|
254
256
|
"scripts/validate-workflow-contract.js",
|
|
@@ -313,6 +315,13 @@
|
|
|
313
315
|
"public/learn.html",
|
|
314
316
|
"public/lessons.html",
|
|
315
317
|
"public/numbers.html",
|
|
318
|
+
"public/assets/diagrams/",
|
|
319
|
+
"public/whitepaper.html",
|
|
320
|
+
"public/evaluations.html",
|
|
321
|
+
"public/eval-scorecard.html",
|
|
322
|
+
"public/eval-scorecard.json",
|
|
323
|
+
"public/case-studies.html",
|
|
324
|
+
"public/architecture.html",
|
|
316
325
|
"public/partner-intake.html",
|
|
317
326
|
"public/pricing.html",
|
|
318
327
|
"public/pro.html",
|
|
@@ -324,7 +333,10 @@
|
|
|
324
333
|
"public/brand/",
|
|
325
334
|
"public/js/",
|
|
326
335
|
"skills/thumbgate/SKILL.md",
|
|
327
|
-
"src/"
|
|
336
|
+
"src/",
|
|
337
|
+
"scripts/generate-eval-scorecard.js",
|
|
338
|
+
"scripts/refresh-proof-pack.js",
|
|
339
|
+
"scripts/generate-case-study-outreach.js"
|
|
328
340
|
],
|
|
329
341
|
"scripts": {
|
|
330
342
|
"canary:snapshot": "node scripts/gate-decision-canary.js --snapshot",
|
|
@@ -427,7 +439,7 @@
|
|
|
427
439
|
"social:prospect:bluesky": "node scripts/social-bluesky-prospecting.js",
|
|
428
440
|
"social:prospect:bluesky:dry": "node scripts/social-bluesky-prospecting.js --dry-run",
|
|
429
441
|
"social:reply-publish:bluesky:dry": "node scripts/social-reply-monitor-bluesky.js --publish-approved --dry-run",
|
|
430
|
-
"test": "npm run test:python && 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:grafana-revenue-evidence && npm run test:billing && npm run test:billing-setup && 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:canary && 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:platform-limits && npm run test:post-video && npm run test:post-everywhere-instagram && npm run test:post-everywhere-channels && 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:release-window && npm run test:check-congruence && npm run test:tool-registry && npm run test:repeat-metric && npm run test:noop-detect && npm run test:action-receipts && npm run test:feedback-to-rules && npm run test:memory-firewall && npm run test:memory-scope-readiness && npm run test:belief-update && npm run test:hosted-config && npm run test:operational-summary && npm run test:operational-dashboard && npm run test:operator-artifacts && npm run test:operator-key-auth && npm run test:cloudflare-sandbox && npm run test:mcp-config && npm run test:mcp-tool-annotations && npm run test:mcp-oauth && npm run test:mcp-oauth-flow && npm run test:plan-gate && npm run test:ai-component-inventory && npm run test:verification-evidence && 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:entitlement && npm run test:export-dpo-pairs && npm run test:export-hf-dataset && npm run test:license && npm run test:imperative-detector && npm run test:audit-pr-bot-contamination && npm run test:stripe-bootstrap-saas-catalog && 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:statusline-cache-aggregate && npm run test:public-repo-hygiene && npm run test:no-internal-orchestration-leaks && 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:lesson-semantic-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:predictive-credible-range && 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:lesson-canonical && 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:xss-checkout-escape && 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-archived-product-guard && npm run test:postgres-guard && npm run test:checkout-bot-guard && npm run test:checkout-pro-confirmation-gate && npm run test:pricing-page-telemetry && 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:telemetry-tracked-link-slug && npm run test:prompt-eval && 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:numbers-page && npm run test:workflow-gate-checkpoint && npm run test:lesson-export-import && npm run test:landing-page-claims && npm run test:competitive-positioning-marketing && npm run test:medium-weekly && 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:agent-reasoning-traces && npm run test:judge-reward && npm run test:llm-behavior-monitor && npm run test:prompting-os && npm run test:single-use-credential-gate && npm run test:structured-prompt-driven && npm run test:require-evidence-gate && npm run test:rule-validator && npm run test:bluesky-atproto && npm run test:social-reply-monitor-bluesky && npm run test:bluesky-delete-replies && npm run test:architect-kit-memory-bridge && npm run test:sonar-review-hotspots && npm run test:actionable-remediations && npm run test:gemini-embedding-policy && npm run test:agent-design-governance && npm run test:public-core-boundary && npm run test:hook-stop-verify-deploy && npm run test:hook-stop-anti-claim && npm run test:stop-hook-json-contract && npm run test:plausible-server-events && npm run test:activation-tracker && npm run test:activation-onboarding && npm run test:unified-revenue-rollup && npm run test:conversion-rate-stats && npm run test:external-customer-audit && npm run test:telemetry-export && npm run test:stripe-checkout-diagnostic && npm run test:stripe-business-identity-probe && npm run test:revenue-observability-doctor && npm run test:jsonl-window && npm run test:observability-env && npm run test:public-bundle-ratchet && npm run test:pack-runtime-integrity && npm run test:hook-self-protection && npm run test:self-protect-enforcement && npm run test:never-bypass-branch-protection && npm run test:stripe-payment-link-update && npm run test:ci-cd-hygiene-audit && npm run test:verify-marketing-pages-deployed && npm run test:install-email-capture && npm run test:install-shim && npm run test:hook-runtime-subcommands && npm run test:implementation-notes && npm run test:daily-block-cap && npm run test:free-to-paid-conversion-units && npm run test:metrics-real-endpoint && npm run test:cli-trial-and-help && npm run test:cost-cli && npm run test:silent-failure-cluster && npm run test:proof:truth && node --test tests/adaptive-reliability.test.js && npm run test:mcp-oauth-reviewer && npm run test:dfcx-gate && npm run test:dfcx-gate-server && npm run test:vertex-scorer && npm run test:dashboard-chat && npm run test:gitar-integration && npm run test:secret-redaction && npm run test:discoverable-skills && npm run test:discoverable-skill-skills && npm run test:sync-telemetry && npm run test:leak-scanner && npm run test:team-sync && npm run test:eval-rag && npm run test:async-eval-observability && npm run test:letta-adapter && npm run test:policy-engine-adapter && npm run test:tool-contract-validator && npm run test:check-update && npm run test:hermes-gate && npm run test:memory-provider-enforcement-bridge && npm run test:publisher-credential-guards && npm run test:reddit-browser-notification-watch && npm run test:payment-rails && npm run test:service-checkout-price-integrity && npm run test:cursor-marketplace-doctor && npm run test:plugin-hooks-manifest && npm run test:okara-money-promo-automation",
|
|
442
|
+
"test": "npm run test:python && 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:proof-pack-cadence && npm run test:grafana-revenue-evidence && npm run test:billing && npm run test:billing-setup && 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:canary && 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:platform-limits && npm run test:post-video && npm run test:post-everywhere-instagram && npm run test:post-everywhere-channels && 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:release-window && npm run test:check-congruence && npm run test:tool-registry && npm run test:repeat-metric && npm run test:noop-detect && npm run test:action-receipts && npm run test:feedback-to-rules && npm run test:memory-firewall && npm run test:memory-scope-readiness && npm run test:belief-update && npm run test:hosted-config && npm run test:operational-summary && npm run test:operational-dashboard && npm run test:operator-artifacts && npm run test:operator-key-auth && npm run test:cloudflare-sandbox && npm run test:mcp-config && npm run test:mcp-tool-annotations && npm run test:mcp-oauth && npm run test:mcp-oauth-flow && npm run test:plan-gate && npm run test:ai-component-inventory && npm run test:verification-evidence && 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:entitlement && npm run test:export-dpo-pairs && npm run test:export-hf-dataset && npm run test:license && npm run test:imperative-detector && npm run test:audit-pr-bot-contamination && npm run test:stripe-bootstrap-saas-catalog && 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:statusline-cache-aggregate && npm run test:public-repo-hygiene && npm run test:no-internal-orchestration-leaks && 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:lesson-semantic-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:predictive-credible-range && 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:lesson-canonical && 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:xss-checkout-escape && 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-archived-product-guard && npm run test:postgres-guard && npm run test:checkout-bot-guard && npm run test:checkout-pro-confirmation-gate && npm run test:pricing-page-telemetry && 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:telemetry-tracked-link-slug && npm run test:prompt-eval && 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:numbers-page && npm run test:workflow-gate-checkpoint && npm run test:lesson-export-import && npm run test:landing-page-claims && npm run test:competitive-positioning-marketing && npm run test:medium-weekly && 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:agent-reasoning-traces && npm run test:judge-reward && npm run test:llm-behavior-monitor && npm run test:prompting-os && npm run test:single-use-credential-gate && npm run test:structured-prompt-driven && npm run test:require-evidence-gate && npm run test:rule-validator && npm run test:bluesky-atproto && npm run test:social-reply-monitor-bluesky && npm run test:bluesky-delete-replies && npm run test:architect-kit-memory-bridge && npm run test:sonar-review-hotspots && npm run test:actionable-remediations && npm run test:gemini-embedding-policy && npm run test:agent-design-governance && npm run test:public-core-boundary && npm run test:hook-stop-verify-deploy && npm run test:hook-stop-anti-claim && npm run test:stop-hook-json-contract && npm run test:plausible-server-events && npm run test:activation-tracker && npm run test:activation-onboarding && npm run test:unified-revenue-rollup && npm run test:conversion-rate-stats && npm run test:external-customer-audit && npm run test:telemetry-export && npm run test:stripe-checkout-diagnostic && npm run test:stripe-business-identity-probe && npm run test:revenue-observability-doctor && npm run test:jsonl-window && npm run test:observability-env && npm run test:public-bundle-ratchet && npm run test:pack-runtime-integrity && npm run test:hook-self-protection && npm run test:self-protect-enforcement && npm run test:never-bypass-branch-protection && npm run test:stripe-payment-link-update && npm run test:ci-cd-hygiene-audit && npm run test:verify-marketing-pages-deployed && npm run test:install-email-capture && npm run test:install-shim && npm run test:hook-runtime-subcommands && npm run test:implementation-notes && npm run test:daily-block-cap && npm run test:free-to-paid-conversion-units && npm run test:metrics-real-endpoint && npm run test:cli-trial-and-help && npm run test:cost-cli && npm run test:silent-failure-cluster && npm run test:proof:truth && node --test tests/adaptive-reliability.test.js && npm run test:mcp-oauth-reviewer && npm run test:dfcx-gate && npm run test:dfcx-gate-server && npm run test:vertex-scorer && npm run test:dashboard-chat && npm run test:gitar-integration && npm run test:secret-redaction && npm run test:discoverable-skills && npm run test:discoverable-skill-skills && npm run test:sync-telemetry && npm run test:leak-scanner && npm run test:team-sync && npm run test:eval-rag && npm run test:async-eval-observability && npm run test:letta-adapter && npm run test:policy-engine-adapter && npm run test:tool-contract-validator && npm run test:check-update && npm run test:hermes-gate && npm run test:memory-provider-enforcement-bridge && npm run test:publisher-credential-guards && npm run test:reddit-browser-notification-watch && npm run test:payment-rails && npm run test:service-checkout-price-integrity && npm run test:cursor-marketplace-doctor && npm run test:plugin-hooks-manifest && npm run test:okara-money-promo-automation && npm run test:retrieval-window && npm run test:risk-quality && npm run test:eval-mining && npm run test:state-backup && npm run test:eval-golden && npm run test:task-scope-lease",
|
|
431
443
|
"test:python": "python3 -m pytest tests/*.py",
|
|
432
444
|
"test:check-update": "node --test tests/check-update.test.js",
|
|
433
445
|
"test:hook-stop-verify-deploy": "node --test tests/hook-stop-verify-deploy.test.js",
|
|
@@ -566,7 +578,7 @@
|
|
|
566
578
|
"test:training-export": "node --test tests/training-export.test.js tests/databricks-export.test.js",
|
|
567
579
|
"test:deployment": "node --test tests/deployment.test.js tests/deploy-policy.test.js tests/publish-decision.test.js tests/changeset-check.test.js tests/release-notes.test.js tests/sonarcloud-workflow.test.js tests/package-boundary.test.js tests/public-package-boundary.test.js tests/packed-feedback-retrieval-e2e.test.js tests/packed-provider-payment-reconciler-e2e.test.js tests/packed-revenue-remediation-e2e.test.js",
|
|
568
580
|
"test:operational-integrity": "node --test tests/operational-integrity.test.js tests/sync-branch-protection.test.js",
|
|
569
|
-
"test:workflow": "node --test tests/parallel-workflow.test.js tests/workflow-contract.test.js tests/positioning-contract.test.js tests/docs-claim-hygiene.test.js tests/thumbgate-scope.test.js tests/workflow-runs.test.js tests/workflow-sprint-intake.test.js tests/workflow-intake-queue.test.js tests/revenue-pack-utils.test.js tests/apollo-acquisition.test.js tests/sales-pipeline.test.js tests/provider-payment-reconciler.test.js tests/reddit-dm-outreach-evidence.test.js tests/gtm-sales-evidence-commands.test.js tests/revenue-action-eligibility.test.js tests/revenue-evidence-remediation.test.js tests/gtm-revenue-action-eligibility.test.js tests/revenue-offer-ladder.test.js tests/revenue-offer-system.test.js tests/buyer-paths.test.js tests/github-outreach.test.js tests/enterprise-story.test.js tests/guide-conversion-path.test.js tests/buyer-intent-revenue-assist.test.js",
|
|
581
|
+
"test:workflow": "node --test tests/parallel-workflow.test.js tests/parallel-workflow-public.test.js tests/workflow-contract.test.js tests/positioning-contract.test.js tests/docs-claim-hygiene.test.js tests/thumbgate-scope.test.js tests/workflow-runs.test.js tests/workflow-sprint-intake.test.js tests/workflow-intake-queue.test.js tests/revenue-pack-utils.test.js tests/apollo-acquisition.test.js tests/sales-pipeline.test.js tests/provider-payment-reconciler.test.js tests/reddit-dm-outreach-evidence.test.js tests/gtm-sales-evidence-commands.test.js tests/revenue-action-eligibility.test.js tests/revenue-evidence-remediation.test.js tests/gtm-revenue-action-eligibility.test.js tests/revenue-offer-ladder.test.js tests/revenue-offer-system.test.js tests/buyer-paths.test.js tests/github-outreach.test.js tests/enterprise-story.test.js tests/guide-conversion-path.test.js tests/buyer-intent-revenue-assist.test.js && node --test tests/eval-proof-pack-pages.test.js && npm run test:proof-pack-cadence",
|
|
570
582
|
"test:revenue-evidence-remediation": "node --test tests/revenue-evidence-remediation.test.js",
|
|
571
583
|
"test:grafana-revenue-evidence": "node --test tests/grafana-revenue-evidence.test.js",
|
|
572
584
|
"test:sales-pipeline": "node --test tests/sales-pipeline.test.js tests/provider-payment-reconciler.test.js tests/reddit-dm-outreach-evidence.test.js tests/gtm-sales-evidence-commands.test.js",
|
|
@@ -655,7 +667,7 @@
|
|
|
655
667
|
"test:control-tower": "node --test tests/control-tower.test.js",
|
|
656
668
|
"test:pii-scanner": "node --test tests/pii-scanner.test.js",
|
|
657
669
|
"test:data-governance": "node --test tests/data-governance.test.js",
|
|
658
|
-
"test:lesson-inference": "node --test tests/conversation-context.test.js tests/lesson-inference.test.js tests/lesson-prompt-shape.test.js",
|
|
670
|
+
"test:lesson-inference": "node --test tests/conversation-context.test.js tests/lesson-inference.test.js tests/lesson-prompt-shape.test.js tests/lesson-stats-review-origin.test.js",
|
|
659
671
|
"test:lesson-retrieval": "node --test tests/lesson-retrieval.test.js",
|
|
660
672
|
"test:lesson-semantic-retrieval": "node --test tests/lesson-semantic-retrieval.test.js",
|
|
661
673
|
"test:cross-encoder": "node --test tests/cross-encoder-reranker.test.js",
|
|
@@ -696,6 +708,7 @@
|
|
|
696
708
|
"social:publish:latest-release-article": "node scripts/social-analytics/publish-latest-release-article.js",
|
|
697
709
|
"social:publish:latest-release-fallbacks": "node scripts/social-analytics/publish-latest-release-fallbacks.js",
|
|
698
710
|
"social:verify:latest-release": "node scripts/social-analytics/verify-latest-release-posts.js",
|
|
711
|
+
"social:verify:marketing-agent": "node scripts/social-analytics/verify-marketing-agent-campaign.js",
|
|
699
712
|
"social:schedule:campaign": "node scripts/social-analytics/schedule-thumbgate-campaign.js",
|
|
700
713
|
"social:install:growth": "node scripts/social-analytics/install-growth-automation.js",
|
|
701
714
|
"social:reconcile:campaign": "node scripts/social-analytics/reconcile-thumbgate-campaign.js",
|
|
@@ -838,7 +851,25 @@
|
|
|
838
851
|
"observability:setup": "node scripts/observability-setup.js",
|
|
839
852
|
"observability:doctor": "node scripts/revenue-observability-doctor.js",
|
|
840
853
|
"test:jsonl-window": "node --test tests/jsonl-window.test.js",
|
|
841
|
-
"test:observability-env": "node --test tests/observability-env.test.js"
|
|
854
|
+
"test:observability-env": "node --test tests/observability-env.test.js",
|
|
855
|
+
"test:retrieval-window": "node --test tests/lesson-retrieval-recency-window.test.js",
|
|
856
|
+
"eval:risk": "node scripts/eval-risk-model.js",
|
|
857
|
+
"test:risk-quality": "node --test tests/risk-model-quality.test.js tests/model-eval.test.js",
|
|
858
|
+
"state:backup": "node scripts/state-backup.js",
|
|
859
|
+
"state:backup:verify": "node scripts/state-backup.js --verify",
|
|
860
|
+
"state:restore": "node scripts/state-backup.js --restore",
|
|
861
|
+
"test:state-backup": "node --test tests/state-backup.test.js",
|
|
862
|
+
"eval:mine": "node scripts/mine-eval-set.js",
|
|
863
|
+
"eval:baseline": "node scripts/eval-baseline.js",
|
|
864
|
+
"test:eval-golden": "node --test tests/gate-golden-set.test.js",
|
|
865
|
+
"test:eval-mining": "node --test tests/mine-eval-set.test.js tests/eval-baseline.test.js",
|
|
866
|
+
"test:task-scope-lease": "node --test tests/task-scope-lease.test.js",
|
|
867
|
+
"eval-scorecard:generate": "node scripts/generate-eval-scorecard.js",
|
|
868
|
+
"proof-pack:refresh": "node scripts/refresh-proof-pack.js --write",
|
|
869
|
+
"proof-pack:refresh:check": "node scripts/refresh-proof-pack.js --check",
|
|
870
|
+
"proof-pack:schedule": "node scripts/schedule-manager.js install --label proof-pack-scorecard --spec 'daily 06:15' --command 'npm run proof-pack:refresh' --workingDirectory .",
|
|
871
|
+
"outreach:case-study": "node scripts/generate-case-study-outreach.js",
|
|
872
|
+
"test:proof-pack-cadence": "node --test tests/refresh-proof-pack.test.js tests/case-study-outreach.test.js"
|
|
842
873
|
},
|
|
843
874
|
"keywords": [
|
|
844
875
|
"mcp",
|
|
@@ -922,7 +953,7 @@
|
|
|
922
953
|
"@changesets/changelog-github": "^0.7.0",
|
|
923
954
|
"@changesets/cli": "^2.31.0",
|
|
924
955
|
"@playwright/test": "^1.60.0",
|
|
925
|
-
"c8": "^
|
|
956
|
+
"c8": "^12.0.0",
|
|
926
957
|
"undici": "^8.5.0"
|
|
927
958
|
},
|
|
928
959
|
"hotfix": "gate-check-bypass-2026-06-03"
|