thumbgate 1.30.0 โ 1.34.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/README.md +54 -16
- package/adapters/claude/.mcp.json +2 -2
- package/adapters/forge/forge.yaml +3 -3
- package/adapters/mcp/server-stdio.js +105 -10
- package/adapters/opencode/opencode.json +1 -1
- package/bench/observability-eval-suite.json +2 -2
- package/bin/cli.js +168 -31
- package/config/evals/generation-quality-golden.json +95 -0
- package/config/evals/rag-answer-quality-golden.json +91 -0
- package/config/evals/retrieval-hybrid-ablation.json +66 -0
- package/config/evals/retrieval-ranking-golden.json +522 -0
- package/config/gates/claim-verifiers.example.json +42 -0
- package/config/gates/claim-verifiers.json +25 -0
- package/config/gates/default.json +217 -50
- package/config/mcp-allowlists.json +233 -206
- package/config/model-tiers.json +7 -2
- package/glama.json +6 -0
- package/hooks/hooks.json +1 -1
- package/package.json +69 -12
- package/public/assets/diagrams/before-after.svg +17 -16
- package/public/assets/diagrams/hero-thumbs.svg +68 -0
- package/public/assets/diagrams/loop.svg +19 -13
- package/public/assets/diagrams/self-improving-thumbs-loop.svg +105 -0
- package/public/compare.html +1 -0
- package/public/dashboard.html +126 -28
- package/public/evaluations.html +1 -1
- package/public/index.html +142 -13
- package/public/numbers.html +3 -2
- package/public/pricing.html +143 -30
- package/scripts/a-plus-evidence-scorecard.js +303 -0
- package/scripts/agent-readiness.js +110 -0
- package/scripts/async-eval-observability.js +36 -11
- package/scripts/audit-trail.js +37 -1
- package/scripts/auto-promote-gates.js +149 -34
- package/scripts/auto-wire-hooks.js +20 -8
- package/scripts/cli-schema.js +14 -0
- package/scripts/colbert-style-maxsim.js +236 -0
- package/scripts/cross-encoder-reranker.js +356 -126
- package/scripts/dashboard-chat.js +350 -17
- package/scripts/document-intake.js +283 -7
- package/scripts/eval-quality-suite.js +204 -0
- package/scripts/feedback-loop.js +115 -7
- package/scripts/feedback-paths.js +32 -13
- package/scripts/feedback-quality.js +53 -0
- package/scripts/feedback-schema.js +3 -0
- package/scripts/file-ledger-lock.js +130 -0
- package/scripts/filesystem-search.js +17 -7
- package/scripts/financial-control-plane.js +1514 -0
- package/scripts/gates-engine.js +202 -7
- package/scripts/gemini-embedding-policy.js +1 -0
- package/scripts/harness-tool-names.js +70 -0
- package/scripts/hook-runtime.js +15 -3
- package/scripts/hook-stop-anti-claim.js +63 -3
- package/scripts/human-escalation.js +353 -41
- package/scripts/lesson-db.js +16 -5
- package/scripts/lesson-embedding-index.js +67 -20
- package/scripts/lesson-embedding-maintenance.js +177 -0
- package/scripts/lesson-reranker.js +55 -9
- package/scripts/lesson-retrieval.js +305 -29
- package/scripts/lesson-search.js +22 -8
- package/scripts/llm-client.js +304 -15
- package/scripts/model-tier-router.js +593 -0
- package/scripts/pragmatic-hybrid-search.js +379 -0
- package/scripts/provider-action-normalizer.js +11 -4
- package/scripts/rag-document-pipeline.js +461 -0
- package/scripts/rag-structured-output.js +441 -0
- package/scripts/ragas-style-metrics.js +351 -0
- package/scripts/request-envelope.js +178 -0
- package/scripts/rerank-pipeline.js +370 -0
- package/scripts/rerank-quality-eval.js +155 -0
- package/scripts/retrieval-hybrid-ablation.js +120 -0
- package/scripts/retrieval-quality-tier.js +118 -0
- package/scripts/secret-scanner.js +395 -4
- package/scripts/self-distill-agent.js +7 -1
- package/scripts/self-healing-check.js +25 -0
- package/scripts/skill-packs.js +183 -0
- package/scripts/slow-loop.js +72 -0
- package/scripts/statusline-links.js +1 -1
- package/scripts/statusline.sh +8 -1
- package/scripts/telemetry-analytics.js +13 -1
- package/scripts/thumbgate-search.js +98 -6
- package/scripts/tier-budget-guard.js +186 -0
- package/scripts/tool-registry.js +141 -5
- package/scripts/universal-claim-evaluator.js +767 -0
- package/scripts/vector-store.js +154 -17
- package/scripts/verify-marketing-pages-deployed.js +85 -3
- package/scripts/workflow-sentinel.js +77 -11
- package/server.json +44 -0
- package/smithery.yaml +17 -0
- package/src/api/server.js +196 -13
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "thumbgate",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.34.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": {
|
|
@@ -28,6 +28,7 @@
|
|
|
28
28
|
"scripts/agent-memory-lifecycle.js",
|
|
29
29
|
"scripts/agent-readiness-plan.js",
|
|
30
30
|
"scripts/agent-readiness.js",
|
|
31
|
+
"scripts/a-plus-evidence-scorecard.js",
|
|
31
32
|
"scripts/agent-operations-planner.js",
|
|
32
33
|
"scripts/agent-reasoning-traces.js",
|
|
33
34
|
"scripts/agent-reward-model.js",
|
|
@@ -53,6 +54,7 @@
|
|
|
53
54
|
"scripts/bot-detection.js",
|
|
54
55
|
"scripts/build-metadata.js",
|
|
55
56
|
"scripts/classifier-routing.js",
|
|
57
|
+
"scripts/colbert-style-maxsim.js",
|
|
56
58
|
"scripts/cross-encoder-reranker.js",
|
|
57
59
|
"scripts/chatgpt-ads-readiness-pack.js",
|
|
58
60
|
"scripts/claude-feedback-sync.js",
|
|
@@ -83,6 +85,11 @@
|
|
|
83
85
|
"scripts/deepseek-v4-runtime-guardrails.js",
|
|
84
86
|
"scripts/docker-sandbox-planner.js",
|
|
85
87
|
"scripts/document-intake.js",
|
|
88
|
+
"scripts/rag-document-pipeline.js",
|
|
89
|
+
"scripts/ragas-style-metrics.js",
|
|
90
|
+
"scripts/skill-packs.js",
|
|
91
|
+
"scripts/lesson-embedding-maintenance.js",
|
|
92
|
+
"scripts/retrieval-hybrid-ablation.js",
|
|
86
93
|
"scripts/document-workflow-governance.js",
|
|
87
94
|
"scripts/durability/step.js",
|
|
88
95
|
"scripts/evolution-state.js",
|
|
@@ -91,6 +98,7 @@
|
|
|
91
98
|
"scripts/explore.js",
|
|
92
99
|
"scripts/export-databricks-bundle.js",
|
|
93
100
|
"scripts/entitlement.js",
|
|
101
|
+
"scripts/eval-quality-suite.js",
|
|
94
102
|
"config/entitlement-public-keys.json",
|
|
95
103
|
"scripts/external-customer-audit.js",
|
|
96
104
|
"scripts/stripe-revenue-catalog.js",
|
|
@@ -109,11 +117,14 @@
|
|
|
109
117
|
"scripts/feedback-session.js",
|
|
110
118
|
"scripts/feedback-to-rules.js",
|
|
111
119
|
"scripts/feedback_quality_eval.py",
|
|
120
|
+
"scripts/file-ledger-lock.js",
|
|
121
|
+
"scripts/financial-control-plane.js",
|
|
112
122
|
"scripts/filesystem-search.js",
|
|
113
123
|
"scripts/fs-utils.js",
|
|
114
124
|
"scripts/grafana-revenue-evidence.js",
|
|
115
125
|
"scripts/gate-stats.js",
|
|
116
126
|
"scripts/gate-templates.js",
|
|
127
|
+
"scripts/harness-tool-names.js",
|
|
117
128
|
"scripts/gates-engine.js",
|
|
118
129
|
"scripts/gemini-embedding-policy.js",
|
|
119
130
|
"scripts/growth-campaigns.js",
|
|
@@ -159,6 +170,7 @@
|
|
|
159
170
|
"scripts/meta-agent-loop.js",
|
|
160
171
|
"scripts/model-access-eligibility.js",
|
|
161
172
|
"scripts/model-migration-readiness.js",
|
|
173
|
+
"scripts/model-tier-router.js",
|
|
162
174
|
"scripts/multimodal-retrieval-plan.js",
|
|
163
175
|
"scripts/native-messaging-audit.js",
|
|
164
176
|
"scripts/natural-language-harness.js",
|
|
@@ -197,6 +209,11 @@
|
|
|
197
209
|
"scripts/rate-limiter.js",
|
|
198
210
|
"scripts/reasoning-efficiency-guardrails.js",
|
|
199
211
|
"scripts/repeat-metric.js",
|
|
212
|
+
"scripts/rerank-pipeline.js",
|
|
213
|
+
"scripts/rerank-quality-eval.js",
|
|
214
|
+
"scripts/request-envelope.js",
|
|
215
|
+
"scripts/retrieval-quality-tier.js",
|
|
216
|
+
"scripts/tier-budget-guard.js",
|
|
200
217
|
"scripts/revenue-action-eligibility.js",
|
|
201
218
|
"scripts/revenue-evidence-remediation.js",
|
|
202
219
|
"scripts/reward-hacking-guardrails.js",
|
|
@@ -224,6 +241,7 @@
|
|
|
224
241
|
"scripts/single-use-credential-gate.js",
|
|
225
242
|
"scripts/skill-generator.js",
|
|
226
243
|
"scripts/skill-rag-router.js",
|
|
244
|
+
"scripts/slow-loop.js",
|
|
227
245
|
"scripts/slo-alert-engine.js",
|
|
228
246
|
"scripts/spec-gate.js",
|
|
229
247
|
"scripts/stripe-credentials.js",
|
|
@@ -252,6 +270,7 @@
|
|
|
252
270
|
"scripts/task-outcomes.js",
|
|
253
271
|
"scripts/tool-kpi-tracker.js",
|
|
254
272
|
"scripts/upstream-contribution-engine.js",
|
|
273
|
+
"scripts/universal-claim-evaluator.js",
|
|
255
274
|
"scripts/user-profile.js",
|
|
256
275
|
"scripts/validate-workflow-contract.js",
|
|
257
276
|
"scripts/vector-store.js",
|
|
@@ -336,7 +355,12 @@
|
|
|
336
355
|
"src/",
|
|
337
356
|
"scripts/generate-eval-scorecard.js",
|
|
338
357
|
"scripts/refresh-proof-pack.js",
|
|
339
|
-
"scripts/generate-case-study-outreach.js"
|
|
358
|
+
"scripts/generate-case-study-outreach.js",
|
|
359
|
+
"scripts/rag-structured-output.js",
|
|
360
|
+
"scripts/pragmatic-hybrid-search.js",
|
|
361
|
+
"server.json",
|
|
362
|
+
"glama.json",
|
|
363
|
+
"smithery.yaml"
|
|
340
364
|
],
|
|
341
365
|
"scripts": {
|
|
342
366
|
"canary:snapshot": "node scripts/gate-decision-canary.js --snapshot",
|
|
@@ -439,7 +463,7 @@
|
|
|
439
463
|
"social:prospect:bluesky": "node scripts/social-bluesky-prospecting.js",
|
|
440
464
|
"social:prospect:bluesky:dry": "node scripts/social-bluesky-prospecting.js --dry-run",
|
|
441
465
|
"social:reply-publish:bluesky:dry": "node scripts/social-reply-monitor-bluesky.js --publish-approved --dry-run",
|
|
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",
|
|
466
|
+
"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:universal-claim-evaluator && 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:glama-mcp && npm run test:prove-glama-mcp && 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:rag-pipeline && npm run test:autonomous-reliability && 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 && npm run test:evaluations-page && npm run test:agent-install-paths && npm run test:mcp-gate-check && npm run test:adapter-pins && npm run test:secret-egress && npm run test:harness-tool-names && npm run test:feedback-reward && npm run test:capability-wiring",
|
|
443
467
|
"test:python": "python3 -m pytest tests/*.py",
|
|
444
468
|
"test:check-update": "node --test tests/check-update.test.js",
|
|
445
469
|
"test:hook-stop-verify-deploy": "node --test tests/hook-stop-verify-deploy.test.js",
|
|
@@ -489,10 +513,12 @@
|
|
|
489
513
|
"eval:feedback": "node scripts/prompt-eval.js --from-feedback",
|
|
490
514
|
"eval:feedback-quality": "python3 scripts/feedback_quality_eval.py",
|
|
491
515
|
"eval:classifier": "python3 scripts/eval_gate_classifier.py",
|
|
492
|
-
"eval:rag": "node scripts/eval-rag.js",
|
|
493
|
-
"
|
|
516
|
+
"eval:rag": "node -r dotenv/config scripts/eval-rag.js",
|
|
517
|
+
"eval:quality": "node scripts/eval-quality-suite.js",
|
|
518
|
+
"test:eval-quality": "node --test tests/ragas-style-metrics.test.js tests/retrieval-ranking-eval.test.js tests/ir-metrics.test.js",
|
|
519
|
+
"test:eval-rag": "node --test tests/eval-rag.test.js tests/retrieval-hybrid-ablation.test.js",
|
|
494
520
|
"eval:async-observability": "node scripts/async-eval-observability.js",
|
|
495
|
-
"test:async-eval-observability": "node --test tests/async-eval-observability.test.js",
|
|
521
|
+
"test:async-eval-observability": "node --test tests/async-eval-observability.test.js tests/rag-answer-metrics.test.js",
|
|
496
522
|
"test:decision-trace": "node --test tests/decision-trace.test.js",
|
|
497
523
|
"test:feedback-fallback": "node --test tests/feedback-fallback.test.js",
|
|
498
524
|
"test:metaclaw": "node --test tests/metaclaw-features.test.js",
|
|
@@ -576,7 +602,7 @@
|
|
|
576
602
|
"test:quality": "node --test tests/validate-feedback.test.js tests/feedback-quality-eval-python.test.js tests/eval-gate-classifier.test.js",
|
|
577
603
|
"test:intelligence": "node --test tests/intelligence.test.js",
|
|
578
604
|
"test:training-export": "node --test tests/training-export.test.js tests/databricks-export.test.js",
|
|
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",
|
|
605
|
+
"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 tests/prove-production-authenticated.test.js tests/verify-npm-githead.test.js",
|
|
580
606
|
"test:operational-integrity": "node --test tests/operational-integrity.test.js tests/sync-branch-protection.test.js",
|
|
581
607
|
"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",
|
|
582
608
|
"test:revenue-evidence-remediation": "node --test tests/revenue-evidence-remediation.test.js",
|
|
@@ -588,10 +614,10 @@
|
|
|
588
614
|
"test:evolution": "node --test tests/workspace-evolver.test.js",
|
|
589
615
|
"test:watcher": "node --test tests/jsonl-watcher.test.js",
|
|
590
616
|
"test:autoresearch": "node --test tests/autoresearch.test.js",
|
|
591
|
-
"test:ops": "node --test tests/qa-scenario-planner.test.js tests/adk-consolidator.test.js tests/anthropic-partner-strategy.test.js tests/auto-promote-gates.test.js tests/auto-wire-hooks.test.js tests/claude-skill.test.js tests/codegraph-context.test.js tests/commercial-signals.test.js tests/decision-journal.test.js tests/delegation-runtime.test.js tests/disagreement-mining.test.js tests/failure-diagnostics.test.js tests/gate-stats.test.js tests/gates-engine-upgrade-cta.test.js tests/git-hook-installer.test.js tests/github-billing.test.js tests/intervention-policy.test.js tests/markdown-escape.test.js tests/mcp-tools-gates.test.js tests/native-messaging-audit.test.js tests/project-bayes-e2e.test.js tests/project-bayes.test.js tests/rate-limiter.test.js tests/schedule-manager.test.js tests/session-handoff.test.js tests/skill-generator.test.js tests/smart-learning.test.js tests/spike-and-sink.test.js tests/stripe-revenue.test.js tests/stripe-webhook-route.test.js tests/stripe-webhook-rotation.test.js tests/train-from-feedback.test.js tests/workflow-hardening-sprint.test.js tests/workflow-sentinel.test.js tests/test-suite-parity.test.js tests/a2ui-engine.test.js tests/webhook-delivery.test.js tests/auto-context-packs.test.js tests/daily-block-cap.test.js tests/auto-promote-regression-gate.test.js",
|
|
617
|
+
"test:ops": "node --test tests/qa-scenario-planner.test.js tests/adk-consolidator.test.js tests/anthropic-partner-strategy.test.js tests/auto-promote-gates.test.js tests/auto-wire-hooks.test.js tests/claude-skill.test.js tests/codegraph-context.test.js tests/commercial-signals.test.js tests/decision-journal.test.js tests/delegation-runtime.test.js tests/disagreement-mining.test.js tests/failure-diagnostics.test.js tests/financial-control-plane.test.js tests/gate-stats.test.js tests/gates-engine-upgrade-cta.test.js tests/git-hook-installer.test.js tests/github-billing.test.js tests/intervention-policy.test.js tests/markdown-escape.test.js tests/mcp-tools-gates.test.js tests/native-messaging-audit.test.js tests/project-bayes-e2e.test.js tests/project-bayes.test.js tests/rate-limiter.test.js tests/schedule-manager.test.js tests/session-handoff.test.js tests/skill-generator.test.js tests/smart-learning.test.js tests/spike-and-sink.test.js tests/stripe-revenue.test.js tests/stripe-webhook-route.test.js tests/stripe-webhook-rotation.test.js tests/train-from-feedback.test.js tests/workflow-hardening-sprint.test.js tests/workflow-sentinel.test.js tests/test-suite-parity.test.js tests/a2ui-engine.test.js tests/webhook-delivery.test.js tests/auto-context-packs.test.js tests/daily-block-cap.test.js tests/auto-promote-regression-gate.test.js",
|
|
592
618
|
"test:session-analyzer": "node --test tests/session-analyzer.test.js",
|
|
593
619
|
"test:tessl": "node --test tests/tessl-export.test.js",
|
|
594
|
-
"test:gates": "node --test --test-concurrency=1 tests/gate-templates.test.js tests/gates-engine.test.js tests/claim-verification.test.js tests/secret-scanner.test.js tests/secret-fixture-safety.test.js tests/prompt-guard.test.js tests/audit-trail.test.js tests/profile-router.test.js tests/workflow-sentinel.test.js tests/docker-sandbox-planner.test.js tests/mcp-tools-suggest-fix.test.js tests/deny-network-egress-pattern.test.js tests/git-pathspec-scope.test.js tests/git-global-option-bypass.test.js tests/gate-evasion-matrix.test.js",
|
|
620
|
+
"test:gates": "node --test --test-concurrency=1 tests/gate-templates.test.js tests/gates-engine.test.js tests/claim-verification.test.js tests/universal-claim-evaluator.test.js tests/secret-scanner.test.js tests/secret-fixture-safety.test.js tests/prompt-guard.test.js tests/audit-trail.test.js tests/profile-router.test.js tests/workflow-sentinel.test.js tests/docker-sandbox-planner.test.js tests/mcp-tools-suggest-fix.test.js tests/deny-network-egress-pattern.test.js tests/git-pathspec-scope.test.js tests/git-global-option-bypass.test.js tests/gate-evasion-matrix.test.js",
|
|
595
621
|
"test:budget": "node --test tests/budget-guard.test.js tests/budget-enforcer.test.js tests/tokenomics-cost-guard.test.js tests/hook-no-budget-lockout.test.js",
|
|
596
622
|
"test:workers": "npm --prefix workers ci && npm --prefix workers test",
|
|
597
623
|
"test:evoskill": "node --test tests/evoskill.test.js",
|
|
@@ -669,8 +695,11 @@
|
|
|
669
695
|
"test:data-governance": "node --test tests/data-governance.test.js",
|
|
670
696
|
"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",
|
|
671
697
|
"test:lesson-retrieval": "node --test tests/lesson-retrieval.test.js",
|
|
672
|
-
"test:lesson-semantic-retrieval": "node --test tests/lesson-semantic-retrieval.test.js",
|
|
698
|
+
"test:lesson-semantic-retrieval": "node --test tests/lesson-semantic-retrieval.test.js tests/lesson-embedding-maintenance.test.js",
|
|
673
699
|
"test:cross-encoder": "node --test tests/cross-encoder-reranker.test.js",
|
|
700
|
+
"test:colbert-maxsim": "node --test tests/colbert-style-maxsim.test.js",
|
|
701
|
+
"test:rerank-pipeline": "node --test tests/rerank-pipeline.test.js",
|
|
702
|
+
"eval:rerank": "node scripts/rerank-quality-eval.js",
|
|
674
703
|
"test:reflector-agent": "node --test tests/reflector-agent.test.js",
|
|
675
704
|
"test:public-core-boundary": "node --test tests/public-core-boundary.test.js",
|
|
676
705
|
"test:feedback-session": "node --test tests/feedback-session.test.js",
|
|
@@ -820,9 +849,10 @@
|
|
|
820
849
|
"test:dashboard-page-clickability": "playwright test tests/e2e/dashboard-page-clickability.spec.js",
|
|
821
850
|
"test:agent-manager-page-clickability": "playwright test tests/e2e/agent-manager-page-clickability.spec.js",
|
|
822
851
|
"test:pricing-page-clickability": "playwright test tests/e2e/pricing-page-clickability.spec.js",
|
|
823
|
-
"test:proof:truth": "node --test tests/knowledge-entropy.test.js tests/mcp-wiring-doctor.test.js tests/sequence-guard.test.js tests/slopsquat-guard.test.js tests/slopsquat-stress.test.js tests/truth-and-proof.test.js tests/wire-proof-gate.test.js tests/adaptive-reliability.test.js tests/coderabbit-patterns.test.js",
|
|
852
|
+
"test:proof:truth": "node --test tests/knowledge-entropy.test.js tests/mcp-wiring-doctor.test.js tests/sequence-guard.test.js tests/slopsquat-guard.test.js tests/slopsquat-stress.test.js tests/truth-and-proof.test.js tests/wire-proof-gate.test.js tests/adaptive-reliability.test.js tests/coderabbit-patterns.test.js && npm run test:capability-wiring && npm run test:colbert-maxsim && npm run test:rerank-pipeline && npm run test:eval-quality && npm run test:llm-gateway && npm run test:request-envelope && npm run test:a-plus-evidence",
|
|
824
853
|
"build:grok-plugin": "node scripts/build-grok-plugin.js",
|
|
825
854
|
"feedback:ingest": "node scripts/ingest-manual-feedback.js",
|
|
855
|
+
"feedback:slow-loop": "node -e \"console.log(JSON.stringify(require('./scripts/slow-loop').runSlowLoop(), null, 2))\"",
|
|
826
856
|
"verify-proof": "node scripts/require-proof.js",
|
|
827
857
|
"test:mcp-oauth-reviewer": "node --test tests/mcp-oauth-reviewer.test.js",
|
|
828
858
|
"test:dashboard-chat": "node --test tests/dashboard-chat.test.js",
|
|
@@ -869,7 +899,33 @@
|
|
|
869
899
|
"proof-pack:refresh:check": "node scripts/refresh-proof-pack.js --check",
|
|
870
900
|
"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
901
|
"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"
|
|
902
|
+
"test:proof-pack-cadence": "node --test tests/refresh-proof-pack.test.js tests/case-study-outreach.test.js",
|
|
903
|
+
"test:evaluations-page": "node --test tests/evaluations-page.test.js",
|
|
904
|
+
"prove:rag": "node -r dotenv/config scripts/prove-rag-pipeline.js",
|
|
905
|
+
"test:rag-pipeline": "node --require dotenv/config --test tests/rag-document-pipeline.test.js tests/rag-structured-output.test.js tests/rag-stage-contracts.test.js tests/prove-rag-pipeline.test.js tests/ir-metrics.test.js tests/retrieval-ranking-eval.test.js tests/pragmatic-hybrid-search.test.js",
|
|
906
|
+
"eval:ranking": "node scripts/retrieval-ranking-eval.js",
|
|
907
|
+
"test:ir-metrics": "node --test tests/ir-metrics.test.js tests/retrieval-ranking-eval.test.js",
|
|
908
|
+
"test:pragmatic-hybrid": "node --test tests/pragmatic-hybrid-search.test.js",
|
|
909
|
+
"explore:reliability": "node scripts/autonomous-reliability-explorer.js --seed=1 --iterations=12",
|
|
910
|
+
"test:autonomous-reliability": "node --test tests/autonomous-reliability-explorer.test.js tests/prove-reliability.test.js",
|
|
911
|
+
"prove:reliability": "node scripts/prove-reliability.js",
|
|
912
|
+
"explore:reliability:ci": "node scripts/prove-reliability.js --seed=42 --iterations=10",
|
|
913
|
+
"test:glama-mcp": "node --test tests/glama-mcp-start-contract.test.js",
|
|
914
|
+
"prove:glama-mcp": "node scripts/prove-glama-mcp-start.js",
|
|
915
|
+
"test:prove-glama-mcp": "node --test tests/prove-glama-mcp-start.test.js",
|
|
916
|
+
"test:agent-install-paths": "node --test tests/agent-install-paths.test.js",
|
|
917
|
+
"test:mcp-gate-check": "node --test tests/mcp-gate-check-tool.test.js",
|
|
918
|
+
"test:adapter-pins": "node --test tests/adapter-version-pins.test.js",
|
|
919
|
+
"test:secret-egress": "node --test tests/secret-egress-gate.test.js",
|
|
920
|
+
"test:harness-tool-names": "node --test tests/harness-tool-names.test.js",
|
|
921
|
+
"test:feedback-reward": "node --test tests/feedback-reward-score.test.js",
|
|
922
|
+
"test:capability-wiring": "node --test tests/capability-wiring-ratchet.test.js",
|
|
923
|
+
"test:llm-gateway": "node --test tests/llm-gateway-provider.test.js",
|
|
924
|
+
"test:request-envelope": "node --test tests/request-envelope.test.js",
|
|
925
|
+
"test:a-plus-evidence": "node --test tests/a-plus-evidence-scorecard.test.js",
|
|
926
|
+
"score:a-plus": "node scripts/a-plus-evidence-scorecard.js",
|
|
927
|
+
"test:universal-claim-evaluator": "node --test tests/universal-claim-evaluator.test.js",
|
|
928
|
+
"verify:claims": "node scripts/universal-claim-evaluator.js"
|
|
873
929
|
},
|
|
874
930
|
"keywords": [
|
|
875
931
|
"mcp",
|
|
@@ -930,6 +986,7 @@
|
|
|
930
986
|
"apache-arrow": "^18.1.0",
|
|
931
987
|
"better-sqlite3": "^12.9.0",
|
|
932
988
|
"dotenv": "^17.4.2",
|
|
989
|
+
"js-yaml": "4.3.0",
|
|
933
990
|
"playwright-core": "^1.59.1",
|
|
934
991
|
"protobufjs": "^8.7.1",
|
|
935
992
|
"stripe": "^22.2.0"
|
|
@@ -1,21 +1,22 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 960
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 960 300" role="img" aria-labelledby="t d">
|
|
2
2
|
<title id="t">Before and after ThumbGate</title>
|
|
3
|
-
<desc id="d">Without ThumbGate the same mistake repeats. With ThumbGate
|
|
4
|
-
<rect width="960" height="
|
|
5
|
-
<g font-family="system
|
|
3
|
+
<desc id="d">Without ThumbGate the same mistake repeats. With ThumbGate one thumbs-down becomes a local pre-action gate that can refresh or expire.</desc>
|
|
4
|
+
<rect width="960" height="300" rx="24" fill="#0a0a0b"/>
|
|
5
|
+
<g font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif">
|
|
6
6
|
<!-- WITHOUT -->
|
|
7
|
-
<rect x="
|
|
8
|
-
<text x="
|
|
9
|
-
<text x="
|
|
10
|
-
<text x="
|
|
11
|
-
<text x="
|
|
12
|
-
<text x="
|
|
7
|
+
<rect x="36" y="36" width="420" height="228" rx="22" fill="#1a1012" stroke="#f87171" stroke-width="2.5"/>
|
|
8
|
+
<text x="246" y="78" text-anchor="middle" fill="#f87171" font-size="16" font-weight="900" letter-spacing="1.5">WITHOUT THUMBGATE</text>
|
|
9
|
+
<text x="246" y="130" text-anchor="middle" fill="#f5f5f7" font-size="28" font-weight="800">๐ฅ force-push ยท bad shell</text>
|
|
10
|
+
<text x="246" y="172" text-anchor="middle" fill="#e5e7eb" font-size="18">You clean it upโฆ</text>
|
|
11
|
+
<text x="246" y="204" text-anchor="middle" fill="#e5e7eb" font-size="18">โฆand the agent does it again.</text>
|
|
12
|
+
<text x="246" y="240" text-anchor="middle" fill="#9ca3af" font-size="14">time ร trust ร risk ร token burn</text>
|
|
13
|
+
|
|
13
14
|
<!-- WITH -->
|
|
14
|
-
<rect x="
|
|
15
|
-
<text x="
|
|
16
|
-
<text x="
|
|
17
|
-
<text x="
|
|
18
|
-
<text x="
|
|
19
|
-
<text x="
|
|
15
|
+
<rect x="504" y="36" width="420" height="228" rx="22" fill="#0c1a14" stroke="#4ade80" stroke-width="2.5"/>
|
|
16
|
+
<text x="714" y="78" text-anchor="middle" fill="#4ade80" font-size="16" font-weight="900" letter-spacing="1.5">WITH THUMBGATE</text>
|
|
17
|
+
<text x="714" y="130" text-anchor="middle" fill="#f5f5f7" font-size="32" font-weight="900">๐ once</text>
|
|
18
|
+
<text x="714" y="172" text-anchor="middle" fill="#e5e7eb" font-size="18">Rule saved locally</text>
|
|
19
|
+
<text x="714" y="204" text-anchor="middle" fill="#e5e7eb" font-size="18">Next attempt is gated</text>
|
|
20
|
+
<text x="714" y="240" text-anchor="middle" fill="#9ca3af" font-size="14">one correction โ local gate (auto-promoted gates expire)</text>
|
|
20
21
|
</g>
|
|
21
22
|
</svg>
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 360" role="img" aria-labelledby="title desc">
|
|
2
|
+
<title id="title">ThumbGate: thumbs up and thumbs down become pre-action gates</title>
|
|
3
|
+
<desc id="desc">Two large thumbs icons feeding a gate that decides ALLOW, WARN, or DENY before an AI agent tool call runs.</desc>
|
|
4
|
+
<defs>
|
|
5
|
+
<linearGradient id="bg" x1="0" y1="0" x2="1" y2="1">
|
|
6
|
+
<stop offset="0%" stop-color="#0a1018"/>
|
|
7
|
+
<stop offset="100%" stop-color="#111a28"/>
|
|
8
|
+
</linearGradient>
|
|
9
|
+
<linearGradient id="gate" x1="0" y1="0" x2="1" y2="1">
|
|
10
|
+
<stop offset="0%" stop-color="#22d3ee"/>
|
|
11
|
+
<stop offset="100%" stop-color="#4ade80"/>
|
|
12
|
+
</linearGradient>
|
|
13
|
+
<filter id="glow">
|
|
14
|
+
<feDropShadow dx="0" dy="0" stdDeviation="12" flood-color="#22d3ee" flood-opacity="0.35"/>
|
|
15
|
+
</filter>
|
|
16
|
+
<filter id="soft">
|
|
17
|
+
<feDropShadow dx="0" dy="10" stdDeviation="14" flood-color="#000" flood-opacity="0.4"/>
|
|
18
|
+
</filter>
|
|
19
|
+
</defs>
|
|
20
|
+
<rect width="640" height="360" rx="24" fill="url(#bg)"/>
|
|
21
|
+
|
|
22
|
+
<!-- Brand line -->
|
|
23
|
+
<text x="32" y="42" fill="#22d3ee" font-family="ui-monospace,SFMono-Regular,Menlo,monospace" font-size="12" font-weight="800" letter-spacing="2">THUMBGATE</text>
|
|
24
|
+
<text x="32" y="68" fill="#f5f7fb" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="22" font-weight="800">Named for the signal. Built for the gate.</text>
|
|
25
|
+
|
|
26
|
+
<!-- Big thumbs up -->
|
|
27
|
+
<g filter="url(#soft)" transform="translate(48, 100)">
|
|
28
|
+
<rect width="150" height="190" rx="24" fill="#0d1f18" stroke="#4ade80" stroke-width="2.5"/>
|
|
29
|
+
<circle cx="75" cy="78" r="54" fill="#4ade80" opacity="0.12"/>
|
|
30
|
+
<g transform="translate(35, 35) scale(2.1)" fill="none" stroke="#4ade80" stroke-width="2.6" stroke-linecap="round" stroke-linejoin="round">
|
|
31
|
+
<path d="M7 22V13a2 2 0 0 1 2-2h2.5l3.2-7.2A2.5 2.5 0 0 1 17 2.5 3.5 3.5 0 0 1 20.5 6v5H28a3 3 0 0 1 3 3.4l-1.6 9A3 3 0 0 1 26.5 26H9a2 2 0 0 1-2-2z"/>
|
|
32
|
+
<path d="M7 13H4a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h3"/>
|
|
33
|
+
</g>
|
|
34
|
+
<text x="75" y="158" text-anchor="middle" fill="#4ade80" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="28" font-weight="900">๐</text>
|
|
35
|
+
<text x="75" y="182" text-anchor="middle" fill="#9db8ad" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="13" font-weight="700">good pattern</text>
|
|
36
|
+
</g>
|
|
37
|
+
|
|
38
|
+
<!-- Big thumbs down -->
|
|
39
|
+
<g filter="url(#soft)" transform="translate(220, 100)">
|
|
40
|
+
<rect width="150" height="190" rx="24" fill="#1f1014" stroke="#ff6480" stroke-width="2.5"/>
|
|
41
|
+
<circle cx="75" cy="78" r="54" fill="#ff6480" opacity="0.12"/>
|
|
42
|
+
<g transform="translate(35, 40) scale(2.1)" fill="none" stroke="#ff6480" stroke-width="2.6" stroke-linecap="round" stroke-linejoin="round">
|
|
43
|
+
<path d="M7 2v9a2 2 0 0 0 2 2h2.5l3.2 7.2A2.5 2.5 0 0 0 17 21.5 3.5 3.5 0 0 0 20.5 18v-5H28a3 3 0 0 0 3-3.4l-1.6-9A3 3 0 0 0 26.5-2H9a2 2 0 0 0-2 2z" transform="translate(0 6)"/>
|
|
44
|
+
<path d="M7 11H4a2 2 0 0 1-2-2V0a2 2 0 0 1 2-2h3" transform="translate(0 6)"/>
|
|
45
|
+
</g>
|
|
46
|
+
<text x="75" y="158" text-anchor="middle" fill="#ff8a9a" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="28" font-weight="900">๐</text>
|
|
47
|
+
<text x="75" y="182" text-anchor="middle" fill="#b899a0" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="13" font-weight="700">never again</text>
|
|
48
|
+
</g>
|
|
49
|
+
|
|
50
|
+
<!-- Arrow into gate -->
|
|
51
|
+
<path d="M385 195 H420" stroke="#22d3ee" stroke-width="4" stroke-linecap="round"/>
|
|
52
|
+
<path d="M410 185 L425 195 L410 205" fill="none" stroke="#22d3ee" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
|
|
53
|
+
|
|
54
|
+
<!-- Gate panel -->
|
|
55
|
+
<g filter="url(#glow)" transform="translate(440, 90)">
|
|
56
|
+
<rect width="168" height="210" rx="24" fill="#0c1622" stroke="url(#gate)" stroke-width="3"/>
|
|
57
|
+
<text x="84" y="42" text-anchor="middle" fill="#22d3ee" font-family="ui-monospace,SFMono-Regular,Menlo,monospace" font-size="12" font-weight="800" letter-spacing="1.5">PRE-ACTION GATE</text>
|
|
58
|
+
<!-- mini shield / gate -->
|
|
59
|
+
<path d="M84 68 C64 76 56 88 56 108 C56 128 72 142 84 148 C96 142 112 128 112 108 C112 88 104 76 84 68 Z" fill="none" stroke="#8cf5d1" stroke-width="4"/>
|
|
60
|
+
<text x="84" y="118" text-anchor="middle" fill="#e7fbff" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="18" font-weight="900">TG</text>
|
|
61
|
+
<rect x="22" y="168" width="46" height="24" rx="12" fill="rgba(86,227,159,0.12)" stroke="#56e39f"/>
|
|
62
|
+
<text x="45" y="184" text-anchor="middle" fill="#56e39f" font-family="ui-monospace,SFMono-Regular,Menlo,monospace" font-size="10" font-weight="800">ALLOW</text>
|
|
63
|
+
<rect x="74" y="168" width="42" height="24" rx="12" fill="rgba(255,209,102,0.12)" stroke="#ffd166"/>
|
|
64
|
+
<text x="95" y="184" text-anchor="middle" fill="#ffd166" font-family="ui-monospace,SFMono-Regular,Menlo,monospace" font-size="10" font-weight="800">WARN</text>
|
|
65
|
+
<rect x="122" y="168" width="42" height="24" rx="12" fill="rgba(255,100,124,0.12)" stroke="#ff647c"/>
|
|
66
|
+
<text x="143" y="184" text-anchor="middle" fill="#ff647c" font-family="ui-monospace,SFMono-Regular,Menlo,monospace" font-size="10" font-weight="800">DENY</text>
|
|
67
|
+
</g>
|
|
68
|
+
</svg>
|
|
@@ -1,34 +1,40 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 960
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 960 300" role="img" aria-labelledby="t d">
|
|
2
2
|
<title id="t">ThumbGate feedback loop</title>
|
|
3
|
-
<desc id="d">Agent proposes a tool call, ThumbGate decides allow warn or deny, feedback becomes a rule.</desc>
|
|
4
|
-
<rect width="960" height="
|
|
3
|
+
<desc id="d">Agent proposes a tool call, ThumbGate decides allow warn or deny, thumbs feedback becomes a rule that closes the loop.</desc>
|
|
4
|
+
<rect width="960" height="300" rx="24" fill="#0a0a0b"/>
|
|
5
5
|
<defs>
|
|
6
6
|
<marker id="arr" markerWidth="10" markerHeight="10" refX="8" refY="4" orient="auto"><path d="M0,0 L8,4 L0,8 Z" fill="#22d3ee"/></marker>
|
|
7
|
+
<marker id="arrG" markerWidth="10" markerHeight="10" refX="8" refY="4" orient="auto"><path d="M0,0 L8,4 L0,8 Z" fill="#4ade80"/></marker>
|
|
7
8
|
<linearGradient id="g" x1="0" y1="0" x2="1" y2="1"><stop offset="0" stop-color="#22d3ee"/><stop offset="1" stop-color="#4ade80"/></linearGradient>
|
|
8
9
|
</defs>
|
|
10
|
+
|
|
9
11
|
<!-- Step 1 -->
|
|
10
|
-
<rect x="40" y="70" width="180" height="
|
|
12
|
+
<rect x="40" y="70" width="180" height="120" rx="18" fill="#161618" stroke="#333"/>
|
|
11
13
|
<circle cx="70" cy="100" r="16" fill="#222" stroke="#22d3ee" stroke-width="2"/>
|
|
12
14
|
<text x="70" y="105" text-anchor="middle" fill="#22d3ee" font-family="system-ui,sans-serif" font-size="14" font-weight="800">1</text>
|
|
13
|
-
<text x="130" y="
|
|
15
|
+
<text x="130" y="118" text-anchor="middle" fill="#f5f5f7" font-family="system-ui,sans-serif" font-size="18" font-weight="800">Agent</text>
|
|
14
16
|
<text x="130" y="146" text-anchor="middle" fill="#9ca3af" font-family="system-ui,sans-serif" font-size="13">proposes a tool</text>
|
|
15
|
-
<line x1="230" y1="
|
|
17
|
+
<line x1="230" y1="130" x2="290" y2="130" stroke="#22d3ee" stroke-width="3" marker-end="url(#arr)"/>
|
|
18
|
+
|
|
16
19
|
<!-- Step 2 -->
|
|
17
|
-
<rect x="300" y="50" width="240" height="
|
|
20
|
+
<rect x="300" y="50" width="240" height="160" rx="18" fill="#07151a" stroke="url(#g)" stroke-width="2.5"/>
|
|
18
21
|
<circle cx="340" cy="90" r="16" fill="#0d2530" stroke="#22d3ee" stroke-width="2"/>
|
|
19
22
|
<text x="340" y="95" text-anchor="middle" fill="#22d3ee" font-family="system-ui,sans-serif" font-size="14" font-weight="800">2</text>
|
|
20
23
|
<text x="420" y="95" text-anchor="middle" fill="#22d3ee" font-family="system-ui,sans-serif" font-size="20" font-weight="900">ThumbGate</text>
|
|
21
24
|
<text x="420" y="130" text-anchor="middle" fill="#f5f5f7" font-family="system-ui,sans-serif" font-size="16" font-weight="700">ALLOW ยท WARN ยท DENY</text>
|
|
22
25
|
<text x="420" y="158" text-anchor="middle" fill="#9ca3af" font-family="system-ui,sans-serif" font-size="13">before the tool runs</text>
|
|
23
|
-
<
|
|
26
|
+
<text x="420" y="184" text-anchor="middle" fill="#4ade80" font-family="system-ui,sans-serif" font-size="18" font-weight="800">๐ ๐</text>
|
|
27
|
+
<line x1="550" y1="130" x2="610" y2="130" stroke="#22d3ee" stroke-width="3" marker-end="url(#arr)"/>
|
|
28
|
+
|
|
24
29
|
<!-- Step 3 -->
|
|
25
|
-
<rect x="620" y="70" width="180" height="
|
|
30
|
+
<rect x="620" y="70" width="180" height="120" rx="18" fill="#161618" stroke="#333"/>
|
|
26
31
|
<circle cx="650" cy="100" r="16" fill="#222" stroke="#4ade80" stroke-width="2"/>
|
|
27
32
|
<text x="650" y="105" text-anchor="middle" fill="#4ade80" font-family="system-ui,sans-serif" font-size="14" font-weight="800">3</text>
|
|
28
|
-
<text x="710" y="
|
|
33
|
+
<text x="710" y="118" text-anchor="middle" fill="#f5f5f7" font-family="system-ui,sans-serif" font-size="18" font-weight="800">Action</text>
|
|
29
34
|
<text x="710" y="146" text-anchor="middle" fill="#9ca3af" font-family="system-ui,sans-serif" font-size="13">shell ยท git ยท db</text>
|
|
35
|
+
|
|
30
36
|
<!-- Feedback loop -->
|
|
31
|
-
<path d="M710
|
|
32
|
-
<rect x="
|
|
33
|
-
<text x="420" y="
|
|
37
|
+
<path d="M710 200 C710 250 130 250 130 200" fill="none" stroke="#4ade80" stroke-width="3" stroke-dasharray="6 4" marker-end="url(#arrG)"/>
|
|
38
|
+
<rect x="260" y="232" width="320" height="40" rx="20" fill="#0d1b14" stroke="#4ade80"/>
|
|
39
|
+
<text x="420" y="258" text-anchor="middle" fill="#4ade80" font-family="system-ui,sans-serif" font-size="15" font-weight="800">๐ ๐ feedback โ lesson โ rule โ gate</text>
|
|
34
40
|
</svg>
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1100 420" role="img" aria-labelledby="title desc">
|
|
2
|
+
<title id="title">How ThumbGate self-improves from thumbs up and thumbs down</title>
|
|
3
|
+
<desc id="desc">Closed loop: you give thumbs up or thumbs down, ThumbGate stores a local lesson, promotes a prevention rule, and gates the next tool call before it runs.</desc>
|
|
4
|
+
<defs>
|
|
5
|
+
<linearGradient id="bg" x1="0" y1="0" x2="1" y2="1">
|
|
6
|
+
<stop offset="0%" stop-color="#081018"/>
|
|
7
|
+
<stop offset="100%" stop-color="#0d121c"/>
|
|
8
|
+
</linearGradient>
|
|
9
|
+
<linearGradient id="ring" x1="0" y1="0" x2="1" y2="1">
|
|
10
|
+
<stop offset="0%" stop-color="#22d3ee"/>
|
|
11
|
+
<stop offset="100%" stop-color="#4ade80"/>
|
|
12
|
+
</linearGradient>
|
|
13
|
+
<linearGradient id="upGlow" x1="0" y1="0" x2="0" y2="1">
|
|
14
|
+
<stop offset="0%" stop-color="#56e39f"/>
|
|
15
|
+
<stop offset="100%" stop-color="#1f9d62"/>
|
|
16
|
+
</linearGradient>
|
|
17
|
+
<linearGradient id="downGlow" x1="0" y1="0" x2="0" y2="1">
|
|
18
|
+
<stop offset="0%" stop-color="#ff8a9a"/>
|
|
19
|
+
<stop offset="100%" stop-color="#e11d48"/>
|
|
20
|
+
</linearGradient>
|
|
21
|
+
<filter id="soft" x="-20%" y="-20%" width="140%" height="140%">
|
|
22
|
+
<feDropShadow dx="0" dy="12" stdDeviation="16" flood-color="#000" flood-opacity="0.45"/>
|
|
23
|
+
</filter>
|
|
24
|
+
<marker id="arr" markerWidth="10" markerHeight="10" refX="8" refY="4" orient="auto">
|
|
25
|
+
<path d="M0,0 L8,4 L0,8 Z" fill="#22d3ee"/>
|
|
26
|
+
</marker>
|
|
27
|
+
<marker id="arrG" markerWidth="10" markerHeight="10" refX="8" refY="4" orient="auto">
|
|
28
|
+
<path d="M0,0 L8,4 L0,8 Z" fill="#4ade80"/>
|
|
29
|
+
</marker>
|
|
30
|
+
</defs>
|
|
31
|
+
|
|
32
|
+
<rect width="1100" height="420" rx="28" fill="url(#bg)"/>
|
|
33
|
+
|
|
34
|
+
<!-- Header -->
|
|
35
|
+
<text x="48" y="48" fill="#e8eef7" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="28" font-weight="800">Yes โ self-improving. Not the model. The gate.</text>
|
|
36
|
+
<text x="48" y="78" fill="#9ca8ba" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="15">Your ๐ / ๐ teach local rules. Next matching tool call is checked before it runs.</text>
|
|
37
|
+
|
|
38
|
+
<!-- Giant thumbs pair -->
|
|
39
|
+
<g filter="url(#soft)" transform="translate(48, 110)">
|
|
40
|
+
<!-- Thumbs up card -->
|
|
41
|
+
<rect x="0" y="0" width="150" height="180" rx="22" fill="#0d1f18" stroke="#4ade80" stroke-width="2"/>
|
|
42
|
+
<circle cx="75" cy="72" r="42" fill="url(#upGlow)" opacity="0.18"/>
|
|
43
|
+
<!-- thumbs-up hand icon -->
|
|
44
|
+
<g transform="translate(42, 38) scale(1.45)" fill="none" stroke="#4ade80" stroke-width="3.2" stroke-linecap="round" stroke-linejoin="round">
|
|
45
|
+
<path d="M7 22V13a2 2 0 0 1 2-2h2.5l3.2-7.2A2.5 2.5 0 0 1 17 2.5 3.5 3.5 0 0 1 20.5 6v5H28a3 3 0 0 1 3 3.4l-1.6 9A3 3 0 0 1 26.5 26H9a2 2 0 0 1-2-2z"/>
|
|
46
|
+
<path d="M7 13H4a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h3"/>
|
|
47
|
+
</g>
|
|
48
|
+
<text x="75" y="148" text-anchor="middle" fill="#4ade80" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="18" font-weight="800">๐ Keep</text>
|
|
49
|
+
<text x="75" y="170" text-anchor="middle" fill="#8fa09a" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="12">reinforce good pattern</text>
|
|
50
|
+
|
|
51
|
+
<!-- Thumbs down card -->
|
|
52
|
+
<rect x="170" y="0" width="150" height="180" rx="22" fill="#1f1014" stroke="#ff6480" stroke-width="2"/>
|
|
53
|
+
<circle cx="245" cy="72" r="42" fill="url(#downGlow)" opacity="0.18"/>
|
|
54
|
+
<!-- thumbs-down hand icon -->
|
|
55
|
+
<g transform="translate(212, 38) scale(1.45)" fill="none" stroke="#ff6480" stroke-width="3.2" stroke-linecap="round" stroke-linejoin="round">
|
|
56
|
+
<path d="M7 2v9a2 2 0 0 0 2 2h2.5l3.2 7.2A2.5 2.5 0 0 0 17 21.5 3.5 3.5 0 0 0 20.5 18v-5H28a3 3 0 0 0 3-3.4l-1.6-9A3 3 0 0 0 26.5-2H9a2 2 0 0 0-2 2z" transform="translate(0 8)"/>
|
|
57
|
+
<path d="M7 11H4a2 2 0 0 1-2-2V0a2 2 0 0 1 2-2h3" transform="translate(0 8)"/>
|
|
58
|
+
</g>
|
|
59
|
+
<text x="245" y="148" text-anchor="middle" fill="#ff8a9a" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="18" font-weight="800">๐ Fix</text>
|
|
60
|
+
<text x="245" y="170" text-anchor="middle" fill="#b08a93" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="12">never repeat this</text>
|
|
61
|
+
</g>
|
|
62
|
+
|
|
63
|
+
<!-- Arrow to lesson -->
|
|
64
|
+
<path d="M340 200 H390" stroke="#22d3ee" stroke-width="3" marker-end="url(#arr)"/>
|
|
65
|
+
|
|
66
|
+
<!-- Step 2: Local lesson -->
|
|
67
|
+
<g filter="url(#soft)">
|
|
68
|
+
<rect x="400" y="130" width="180" height="140" rx="20" fill="#111722" stroke="#273246" stroke-width="2"/>
|
|
69
|
+
<text x="490" y="168" text-anchor="middle" fill="#22d3ee" font-family="ui-monospace,SFMono-Regular,Menlo,monospace" font-size="12" font-weight="800" letter-spacing="1.2">LOCAL LESSON</text>
|
|
70
|
+
<text x="490" y="202" text-anchor="middle" fill="#f5f7fb" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="18" font-weight="800">SQLite memory</text>
|
|
71
|
+
<text x="490" y="228" text-anchor="middle" fill="#9ca8ba" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="13">survives sessions</text>
|
|
72
|
+
<text x="490" y="248" text-anchor="middle" fill="#9ca8ba" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="13">not model weights</text>
|
|
73
|
+
</g>
|
|
74
|
+
|
|
75
|
+
<path d="M590 200 H640" stroke="#22d3ee" stroke-width="3" marker-end="url(#arr)"/>
|
|
76
|
+
|
|
77
|
+
<!-- Step 3: Rule / gate -->
|
|
78
|
+
<g filter="url(#soft)">
|
|
79
|
+
<rect x="650" y="130" width="180" height="140" rx="20" fill="#0c1820" stroke="url(#ring)" stroke-width="2.5"/>
|
|
80
|
+
<text x="740" y="168" text-anchor="middle" fill="#22d3ee" font-family="ui-monospace,SFMono-Regular,Menlo,monospace" font-size="12" font-weight="800" letter-spacing="1.2">PREVENTION RULE</text>
|
|
81
|
+
<text x="740" y="202" text-anchor="middle" fill="#f5f7fb" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="18" font-weight="800">Auto-promoted</text>
|
|
82
|
+
<text x="740" y="228" text-anchor="middle" fill="#9ca8ba" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="13">from repeats</text>
|
|
83
|
+
<text x="740" y="248" text-anchor="middle" fill="#9ca8ba" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="13">stale rules expire</text>
|
|
84
|
+
</g>
|
|
85
|
+
|
|
86
|
+
<path d="M840 200 H890" stroke="#22d3ee" stroke-width="3" marker-end="url(#arr)"/>
|
|
87
|
+
|
|
88
|
+
<!-- Step 4: Gate next action -->
|
|
89
|
+
<g filter="url(#soft)">
|
|
90
|
+
<rect x="900" y="118" width="168" height="164" rx="20" fill="#111722" stroke="#273246" stroke-width="2"/>
|
|
91
|
+
<text x="984" y="152" text-anchor="middle" fill="#22d3ee" font-family="ui-monospace,SFMono-Regular,Menlo,monospace" font-size="12" font-weight="800" letter-spacing="1.2">NEXT TOOL CALL</text>
|
|
92
|
+
<rect x="922" y="168" width="52" height="26" rx="13" fill="rgba(86,227,159,0.12)" stroke="#56e39f"/>
|
|
93
|
+
<text x="948" y="186" text-anchor="middle" fill="#56e39f" font-family="ui-monospace,SFMono-Regular,Menlo,monospace" font-size="11" font-weight="800">ALLOW</text>
|
|
94
|
+
<rect x="982" y="168" width="48" height="26" rx="13" fill="rgba(255,209,102,0.12)" stroke="#ffd166"/>
|
|
95
|
+
<text x="1006" y="186" text-anchor="middle" fill="#ffd166" font-family="ui-monospace,SFMono-Regular,Menlo,monospace" font-size="11" font-weight="800">WARN</text>
|
|
96
|
+
<rect x="948" y="206" width="52" height="26" rx="13" fill="rgba(255,100,124,0.12)" stroke="#ff647c"/>
|
|
97
|
+
<text x="974" y="224" text-anchor="middle" fill="#ff647c" font-family="ui-monospace,SFMono-Regular,Menlo,monospace" font-size="11" font-weight="800">DENY</text>
|
|
98
|
+
<text x="984" y="258" text-anchor="middle" fill="#f5f7fb" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="15" font-weight="700">before it runs</text>
|
|
99
|
+
</g>
|
|
100
|
+
|
|
101
|
+
<!-- Closing the loop dashed arrow back -->
|
|
102
|
+
<path d="M984 300 C984 360 120 360 120 300" fill="none" stroke="#4ade80" stroke-width="3" stroke-dasharray="8 6" marker-end="url(#arrG)"/>
|
|
103
|
+
<rect x="360" y="332" width="380" height="40" rx="20" fill="#0d1b14" stroke="#4ade80"/>
|
|
104
|
+
<text x="550" y="358" text-anchor="middle" fill="#4ade80" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="15" font-weight="800">Loop closes ยท under your control ยท no model retrain</text>
|
|
105
|
+
</svg>
|
package/public/compare.html
CHANGED
|
@@ -296,6 +296,7 @@
|
|
|
296
296
|
<li><a href="/compare/arcade">ThumbGate vs Arcade</a> โ coding-agent guardrails vs enterprise API auth delegation</li>
|
|
297
297
|
<li><a href="/compare/databricks-unity-ai-gateway">ThumbGate vs Databricks Unity AI Gateway</a> โ enterprise gateway vs local pre-action gates</li>
|
|
298
298
|
<li><a href="/compare/hermes-everos-memory">ThumbGate vs Hermes and EverOS</a> โ local-first behavior gates vs passive agent memory stores</li>
|
|
299
|
+
<li><a href="/compare/far-ai">ThumbGate vs FAR.AI</a> โ runtime agent enforcement vs frontier safety research and evaluation</li>
|
|
299
300
|
</ul>
|
|
300
301
|
|
|
301
302
|
<h2>How It Works</h2>
|