thumbgate 1.29.1 → 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/commands/dashboard.md +11 -1
- package/.claude/commands/thumbgate-dashboard.md +23 -8
- package/.claude-plugin/plugin.json +1 -1
- package/.well-known/mcp/server-card.json +1 -1
- package/README.md +61 -1
- package/adapters/claude/.mcp.json +2 -2
- package/adapters/forge/forge.yaml +3 -3
- package/adapters/mcp/server-stdio.js +164 -7
- package/adapters/opencode/opencode.json +1 -1
- package/bin/cli.js +7 -5
- package/commands/dashboard.md +11 -1
- package/commands/thumbgate-dashboard.md +23 -8
- package/config/agent-outcome-monitor-thresholds.json +63 -0
- package/config/evals/agent-outcomes-baseline.json +17 -0
- package/config/evals/agent-outcomes-golden.json +412 -0
- package/config/evals/prompt-eval-baseline.json +23 -0
- package/config/mcp-allowlists.json +26 -2
- package/config/post-deploy-marketing-pages.json +26 -1
- package/config/schemas/task-outcome-receipt.schema.json +296 -0
- package/openapi/openapi.yaml +235 -0
- package/package.json +55 -11
- 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 +6 -3
- package/public/numbers.html +2 -2
- package/public/whitepaper.html +189 -0
- package/scripts/activation-quickstart.js +1 -0
- package/scripts/agent-outcome-eval.js +130 -0
- package/scripts/agent-outcome-monitor.js +331 -0
- package/scripts/agent-reasoning-traces.js +8 -9
- package/scripts/async-job-runner.js +107 -13
- 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/durability/step.js +121 -12
- package/scripts/feedback-aggregate.js +5 -2
- package/scripts/feedback-loop.js +244 -182
- package/scripts/gates-engine.js +512 -22
- 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/human-escalation.js +265 -0
- package/scripts/hybrid-feedback-context.js +93 -50
- package/scripts/jsonl-watcher.js +1 -0
- package/scripts/judge-reward-function.js +30 -18
- 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/prompt-eval.js +81 -4
- package/scripts/published-cli.js +11 -1
- package/scripts/refresh-proof-pack.js +261 -0
- package/scripts/risk-scorer.js +144 -15
- package/scripts/schedule-manager.js +249 -0
- package/scripts/statusline-local-stats.js +1 -1
- package/scripts/task-outcomes.js +425 -0
- package/scripts/thumbgate-bench.js +13 -0
- package/scripts/tool-contract-validator.js +287 -59
- package/scripts/tool-kpi-tracker.js +124 -0
- package/scripts/tool-registry.js +192 -1
- package/src/api/server.js +355 -89
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": {
|
|
@@ -22,6 +22,8 @@
|
|
|
22
22
|
"scripts/activation-quickstart.js",
|
|
23
23
|
"scripts/activation-tracker.js",
|
|
24
24
|
"scripts/agent-audit-trace.js",
|
|
25
|
+
"scripts/agent-outcome-eval.js",
|
|
26
|
+
"scripts/agent-outcome-monitor.js",
|
|
25
27
|
"scripts/agent-design-governance.js",
|
|
26
28
|
"scripts/agent-memory-lifecycle.js",
|
|
27
29
|
"scripts/agent-readiness-plan.js",
|
|
@@ -121,6 +123,7 @@
|
|
|
121
123
|
"scripts/hook-stop-anti-claim.js",
|
|
122
124
|
"scripts/hook-thumbgate-cache-updater.js",
|
|
123
125
|
"scripts/hosted-config.js",
|
|
126
|
+
"scripts/human-escalation.js",
|
|
124
127
|
"scripts/hybrid-feedback-context.js",
|
|
125
128
|
"scripts/imperative-detector.js",
|
|
126
129
|
"scripts/hybrid-supervisor-agent.js",
|
|
@@ -197,11 +200,13 @@
|
|
|
197
200
|
"scripts/revenue-action-eligibility.js",
|
|
198
201
|
"scripts/revenue-evidence-remediation.js",
|
|
199
202
|
"scripts/reward-hacking-guardrails.js",
|
|
203
|
+
"scripts/model-eval.js",
|
|
200
204
|
"scripts/risk-scorer.js",
|
|
201
205
|
"scripts/rlaif-self-audit.js",
|
|
202
206
|
"scripts/rubric-engine.js",
|
|
203
207
|
"scripts/rule-validator.js",
|
|
204
208
|
"scripts/sales-pipeline.js",
|
|
209
|
+
"scripts/schedule-manager.js",
|
|
205
210
|
"scripts/secret-scanner.js",
|
|
206
211
|
"scripts/secret-fixture-tokens.js",
|
|
207
212
|
"scripts/secret-redaction.js",
|
|
@@ -244,6 +249,8 @@
|
|
|
244
249
|
"scripts/token-tco.js",
|
|
245
250
|
"scripts/tool-contract-validator.js",
|
|
246
251
|
"scripts/tool-registry.js",
|
|
252
|
+
"scripts/task-outcomes.js",
|
|
253
|
+
"scripts/tool-kpi-tracker.js",
|
|
247
254
|
"scripts/upstream-contribution-engine.js",
|
|
248
255
|
"scripts/user-profile.js",
|
|
249
256
|
"scripts/validate-workflow-contract.js",
|
|
@@ -308,6 +315,13 @@
|
|
|
308
315
|
"public/learn.html",
|
|
309
316
|
"public/lessons.html",
|
|
310
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",
|
|
311
325
|
"public/partner-intake.html",
|
|
312
326
|
"public/pricing.html",
|
|
313
327
|
"public/pro.html",
|
|
@@ -319,9 +333,15 @@
|
|
|
319
333
|
"public/brand/",
|
|
320
334
|
"public/js/",
|
|
321
335
|
"skills/thumbgate/SKILL.md",
|
|
322
|
-
"src/"
|
|
336
|
+
"src/",
|
|
337
|
+
"scripts/generate-eval-scorecard.js",
|
|
338
|
+
"scripts/refresh-proof-pack.js",
|
|
339
|
+
"scripts/generate-case-study-outreach.js"
|
|
323
340
|
],
|
|
324
341
|
"scripts": {
|
|
342
|
+
"canary:snapshot": "node scripts/gate-decision-canary.js --snapshot",
|
|
343
|
+
"canary:check": "node scripts/gate-decision-canary.js --check",
|
|
344
|
+
"test:canary": "node --test tests/gate-decision-canary.test.js",
|
|
325
345
|
"postinstall": "node bin/postinstall.js || true",
|
|
326
346
|
"start": "node src/api/server.js",
|
|
327
347
|
"numbers:generate": "node scripts/generate-numbers-page.js",
|
|
@@ -393,6 +413,8 @@
|
|
|
393
413
|
"judge:reward:prompt": "node scripts/judge-reward-function.js prompt",
|
|
394
414
|
"llm:behavior": "node scripts/llm-behavior-monitor.js report",
|
|
395
415
|
"llm:behavior:json": "node scripts/llm-behavior-monitor.js json",
|
|
416
|
+
"eval:agent-outcomes": "node scripts/agent-outcome-eval.js",
|
|
417
|
+
"monitor:agent-outcomes": "node scripts/agent-outcome-monitor.js",
|
|
396
418
|
"prompt:plan": "node scripts/prompting-operating-system.js plan",
|
|
397
419
|
"prompt:plan:json": "node scripts/prompting-operating-system.js json",
|
|
398
420
|
"credentials:plan": "node scripts/single-use-credential-gate.js plan",
|
|
@@ -417,7 +439,7 @@
|
|
|
417
439
|
"social:prospect:bluesky": "node scripts/social-bluesky-prospecting.js",
|
|
418
440
|
"social:prospect:bluesky:dry": "node scripts/social-bluesky-prospecting.js --dry-run",
|
|
419
441
|
"social:reply-publish:bluesky:dry": "node scripts/social-reply-monitor-bluesky.js --publish-approved --dry-run",
|
|
420
|
-
"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: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: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",
|
|
421
443
|
"test:python": "python3 -m pytest tests/*.py",
|
|
422
444
|
"test:check-update": "node --test tests/check-update.test.js",
|
|
423
445
|
"test:hook-stop-verify-deploy": "node --test tests/hook-stop-verify-deploy.test.js",
|
|
@@ -462,7 +484,8 @@
|
|
|
462
484
|
"test:spec-gate": "node --test tests/spec-gate.test.js",
|
|
463
485
|
"test:dashboard-insights": "node --test tests/dashboard-insights.test.js",
|
|
464
486
|
"test:telemetry-tracked-link-slug": "node --test tests/telemetry-tracked-link-slug.test.js",
|
|
465
|
-
"test:prompt-eval": "node --test tests/prompt-eval.test.js",
|
|
487
|
+
"test:prompt-eval": "node --test tests/prompt-eval.test.js tests/verified-agent-outcomes.test.js tests/task-outcome-api.test.js",
|
|
488
|
+
"test:verified-agent-outcomes": "node --test tests/verified-agent-outcomes.test.js tests/task-outcome-api.test.js",
|
|
466
489
|
"eval:feedback": "node scripts/prompt-eval.js --from-feedback",
|
|
467
490
|
"eval:feedback-quality": "python3 scripts/feedback_quality_eval.py",
|
|
468
491
|
"eval:classifier": "python3 scripts/eval_gate_classifier.py",
|
|
@@ -513,6 +536,7 @@
|
|
|
513
536
|
"test:cloudflare-sandbox": "node --test tests/cloudflare-dynamic-sandbox.test.js tests/cloudflare-sandbox-api.test.js",
|
|
514
537
|
"test:mcp-config": "node --test tests/mcp-config.test.js tests/mcp-capability-exposure.test.js",
|
|
515
538
|
"test:mcp-tool-annotations": "node --test tests/mcp-tool-annotations.test.js",
|
|
539
|
+
"test:mcp-policy": "node --test tests/mcp-policy.test.js",
|
|
516
540
|
"test:mcp-oauth": "node --test tests/mcp-oauth.test.js",
|
|
517
541
|
"test:mcp-oauth-flow": "node --test tests/mcp-oauth-flow.test.js",
|
|
518
542
|
"test:plan-gate": "node --test tests/plan-gate.test.js",
|
|
@@ -548,13 +572,13 @@
|
|
|
548
572
|
"test:proof": "node --test tests/prove-adapters.test.js tests/prove-attribution.test.js tests/prove-cloudflare-sandbox.test.js tests/prove-data-quality.test.js tests/prove-intelligence.test.js tests/prove-lancedb.test.js tests/prove-loop-closure.test.js tests/prove-training-export.test.js tests/prove-local-intelligence.test.js tests/prove-workflow-contract.test.js tests/prove-autoresearch.test.js tests/prove-claim-verification.test.js tests/prove-data-pipeline.test.js tests/prove-evolution.test.js tests/prove-harnesses.test.js tests/prove-packaged-runtime.test.js tests/prove-runtime.test.js tests/prove-seo-gsd.test.js tests/prove-settings.test.js tests/prove-xmemory.test.js && node --test tests/prove-automation.test.js",
|
|
549
573
|
"test:e2e": "node --test tests/e2e-pipeline.test.js tests/e2e-product-flows.test.js tests/e2e-coverage-contract.test.js tests/interaction-model-e2e.test.js",
|
|
550
574
|
"test:rlaif": "node --test tests/rlaif-self-audit.test.js tests/dpo-optimizer.test.js tests/meta-policy.test.js tests/agent-reward-model.test.js",
|
|
551
|
-
"test:attribution": "node --test tests/feedback-attribution.test.js tests/hybrid-feedback-context.test.js",
|
|
575
|
+
"test:attribution": "node --test tests/feedback-attribution.test.js tests/hybrid-feedback-context.test.js tests/memory-guard-matching.test.js",
|
|
552
576
|
"test:quality": "node --test tests/validate-feedback.test.js tests/feedback-quality-eval-python.test.js tests/eval-gate-classifier.test.js",
|
|
553
577
|
"test:intelligence": "node --test tests/intelligence.test.js",
|
|
554
578
|
"test:training-export": "node --test tests/training-export.test.js tests/databricks-export.test.js",
|
|
555
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",
|
|
556
580
|
"test:operational-integrity": "node --test tests/operational-integrity.test.js tests/sync-branch-protection.test.js",
|
|
557
|
-
"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",
|
|
558
582
|
"test:revenue-evidence-remediation": "node --test tests/revenue-evidence-remediation.test.js",
|
|
559
583
|
"test:grafana-revenue-evidence": "node --test tests/grafana-revenue-evidence.test.js",
|
|
560
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",
|
|
@@ -567,7 +591,7 @@
|
|
|
567
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",
|
|
568
592
|
"test:session-analyzer": "node --test tests/session-analyzer.test.js",
|
|
569
593
|
"test:tessl": "node --test tests/tessl-export.test.js",
|
|
570
|
-
"test:gates": "node --test 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",
|
|
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",
|
|
571
595
|
"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",
|
|
572
596
|
"test:workers": "npm --prefix workers ci && npm --prefix workers test",
|
|
573
597
|
"test:evoskill": "node --test tests/evoskill.test.js",
|
|
@@ -643,7 +667,7 @@
|
|
|
643
667
|
"test:control-tower": "node --test tests/control-tower.test.js",
|
|
644
668
|
"test:pii-scanner": "node --test tests/pii-scanner.test.js",
|
|
645
669
|
"test:data-governance": "node --test tests/data-governance.test.js",
|
|
646
|
-
"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",
|
|
647
671
|
"test:lesson-retrieval": "node --test tests/lesson-retrieval.test.js",
|
|
648
672
|
"test:lesson-semantic-retrieval": "node --test tests/lesson-semantic-retrieval.test.js",
|
|
649
673
|
"test:cross-encoder": "node --test tests/cross-encoder-reranker.test.js",
|
|
@@ -684,6 +708,7 @@
|
|
|
684
708
|
"social:publish:latest-release-article": "node scripts/social-analytics/publish-latest-release-article.js",
|
|
685
709
|
"social:publish:latest-release-fallbacks": "node scripts/social-analytics/publish-latest-release-fallbacks.js",
|
|
686
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",
|
|
687
712
|
"social:schedule:campaign": "node scripts/social-analytics/schedule-thumbgate-campaign.js",
|
|
688
713
|
"social:install:growth": "node scripts/social-analytics/install-growth-automation.js",
|
|
689
714
|
"social:reconcile:campaign": "node scripts/social-analytics/reconcile-thumbgate-campaign.js",
|
|
@@ -745,6 +770,7 @@
|
|
|
745
770
|
"gate-eval:ci": "node scripts/gate-eval.js run",
|
|
746
771
|
"test:ai-engineering-stack-guardrails": "node --test tests/ai-engineering-stack-guardrails.test.js",
|
|
747
772
|
"test:ai-component-inventory": "node --test tests/ai-component-inventory.test.js",
|
|
773
|
+
"test:verification-evidence": "node --test tests/verification-evidence.test.js",
|
|
748
774
|
"test:interaction-model": "node --test tests/interaction-model.test.js tests/interaction-model-e2e.test.js",
|
|
749
775
|
"aws-blocks:guardrails": "node scripts/aws-blocks-guardrails.js",
|
|
750
776
|
"test:aws-blocks-guardrails": "node --test tests/aws-blocks-guardrails.test.js",
|
|
@@ -825,7 +851,25 @@
|
|
|
825
851
|
"observability:setup": "node scripts/observability-setup.js",
|
|
826
852
|
"observability:doctor": "node scripts/revenue-observability-doctor.js",
|
|
827
853
|
"test:jsonl-window": "node --test tests/jsonl-window.test.js",
|
|
828
|
-
"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"
|
|
829
873
|
},
|
|
830
874
|
"keywords": [
|
|
831
875
|
"mcp",
|
|
@@ -895,7 +939,7 @@
|
|
|
895
939
|
"@google/genai": {
|
|
896
940
|
"protobufjs": "7.6.5"
|
|
897
941
|
},
|
|
898
|
-
"brace-expansion": "5.0.
|
|
942
|
+
"brace-expansion": "5.0.8",
|
|
899
943
|
"onnxruntime-web": {
|
|
900
944
|
"protobufjs": "7.6.5"
|
|
901
945
|
},
|
|
@@ -909,7 +953,7 @@
|
|
|
909
953
|
"@changesets/changelog-github": "^0.7.0",
|
|
910
954
|
"@changesets/cli": "^2.31.0",
|
|
911
955
|
"@playwright/test": "^1.60.0",
|
|
912
|
-
"c8": "^
|
|
956
|
+
"c8": "^12.0.0",
|
|
913
957
|
"undici": "^8.5.0"
|
|
914
958
|
},
|
|
915
959
|
"hotfix": "gate-check-bypass-2026-06-03"
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<meta name="generator" content="ThumbGate">
|
|
7
|
+
<meta name="author" content="Igor Ganapolsky">
|
|
8
|
+
<title>ThumbGate Architecture Diagrams — Pre-Action Gate Loop</title>
|
|
9
|
+
<meta name="description" content="Architecture diagrams for ThumbGate: system map, feedback pipeline, agent integration, and pre-action gate loop. The same visuals used in the open-source README, published on thumbgate.ai.">
|
|
10
|
+
<meta property="og:title" content="ThumbGate Architecture Diagrams">
|
|
11
|
+
<meta property="og:description" content="System architecture, feedback pipeline, agent integration, and pre-action gate loop — the visual proof pack for buyers and reviewers.">
|
|
12
|
+
<meta property="og:type" content="article">
|
|
13
|
+
<meta property="og:url" content="https://thumbgate.ai/architecture">
|
|
14
|
+
<link rel="canonical" href="https://thumbgate.ai/architecture">
|
|
15
|
+
<link rel="icon" type="image/png" href="/thumbgate-icon.png">
|
|
16
|
+
<script defer data-domain="thumbgate.ai" src="https://plausible.io/js/script.js"></script>
|
|
17
|
+
<script type="application/ld+json">
|
|
18
|
+
{
|
|
19
|
+
"@context": "https://schema.org",
|
|
20
|
+
"@type": "TechArticle",
|
|
21
|
+
"headline": "ThumbGate Architecture Diagrams",
|
|
22
|
+
"description": "System architecture, feedback pipeline, agent integration, and pre-action gate loop diagrams for the ThumbGate Reliability Gateway.",
|
|
23
|
+
"url": "https://thumbgate.ai/architecture",
|
|
24
|
+
"dateModified": "2026-07-29",
|
|
25
|
+
"author": { "@type": "Person", "name": "Igor Ganapolsky", "url": "https://github.com/IgorGanapolsky" }
|
|
26
|
+
}
|
|
27
|
+
</script>
|
|
28
|
+
<style>
|
|
29
|
+
:root {
|
|
30
|
+
--bg:#0b0f14; --panel:#111823; --border:#1e2a3a; --text:#e6edf3;
|
|
31
|
+
--muted:#8b98a5; --cyan:#39c5cf;
|
|
32
|
+
}
|
|
33
|
+
* { margin:0; padding:0; box-sizing:border-box; }
|
|
34
|
+
body { background:var(--bg); color:var(--text); font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif; line-height:1.65; }
|
|
35
|
+
nav { padding:1rem 2rem; border-bottom:1px solid var(--border); display:flex; gap:1.25rem; flex-wrap:wrap; align-items:center; }
|
|
36
|
+
nav a { color:var(--muted); text-decoration:none; font-size:0.9rem; }
|
|
37
|
+
nav a:hover { color:var(--cyan); }
|
|
38
|
+
nav .brand { color:var(--text); font-weight:700; }
|
|
39
|
+
.container { max-width:980px; margin:0 auto; padding:2.5rem 1.5rem 4rem; }
|
|
40
|
+
h1 { font-size:2rem; margin-bottom:0.4rem; }
|
|
41
|
+
h2 { font-size:1.3rem; margin:2.4rem 0 0.75rem; color:var(--cyan); }
|
|
42
|
+
.subtitle { color:var(--muted); font-size:1.05rem; margin-bottom:1.5rem; }
|
|
43
|
+
figure { background:var(--panel); border:1px solid var(--border); border-radius:12px; padding:1rem; margin:1rem 0 1.75rem; }
|
|
44
|
+
figure img { width:100%; height:auto; display:block; border-radius:8px; background:#050816; }
|
|
45
|
+
figcaption { color:var(--muted); font-size:0.9rem; margin-top:0.75rem; }
|
|
46
|
+
.grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(220px,1fr)); gap:1rem; margin:1.25rem 0; }
|
|
47
|
+
.card { background:var(--panel); border:1px solid var(--border); border-radius:10px; padding:1rem 1.1rem; }
|
|
48
|
+
.card h3 { font-size:1rem; margin-bottom:0.35rem; }
|
|
49
|
+
.card p { color:var(--muted); font-size:0.92rem; }
|
|
50
|
+
a.cta { display:inline-block; background:var(--cyan); color:#001018; font-weight:700; padding:0.7rem 1rem; border-radius:8px; text-decoration:none; margin:0.5rem 0.75rem 0.5rem 0; }
|
|
51
|
+
a.secondary { color:var(--cyan); }
|
|
52
|
+
.footer-note { color:var(--muted); font-size:0.85rem; margin-top:2.5rem; text-align:center; }
|
|
53
|
+
.footer-note a { color:var(--cyan); text-decoration:none; }
|
|
54
|
+
</style>
|
|
55
|
+
</head>
|
|
56
|
+
<body>
|
|
57
|
+
<nav>
|
|
58
|
+
<a class="brand" href="/">ThumbGate</a>
|
|
59
|
+
<a href="/whitepaper">White paper</a>
|
|
60
|
+
<a href="/architecture">Architecture</a>
|
|
61
|
+
<a href="/eval-scorecard">Scorecard</a>
|
|
62
|
+
<a href="/evaluations">Evaluations</a>
|
|
63
|
+
<a href="/case-studies">Case studies</a>
|
|
64
|
+
<a href="/numbers">Numbers</a>
|
|
65
|
+
<a href="/pricing">Pricing</a>
|
|
66
|
+
</nav>
|
|
67
|
+
<main class="container">
|
|
68
|
+
<h1>Architecture diagrams</h1>
|
|
69
|
+
<p class="subtitle">The same system diagrams that ship in the open-source README, published here so buyers and reviewers do not need GitHub to see how PreToolUse enforcement, feedback, and promotion fit together.</p>
|
|
70
|
+
|
|
71
|
+
<div class="grid">
|
|
72
|
+
<div class="card">
|
|
73
|
+
<h3>Local-first enforcement</h3>
|
|
74
|
+
<p>No LLM on the block/allow path. Deterministic rules first; local semantic recall only when needed.</p>
|
|
75
|
+
</div>
|
|
76
|
+
<div class="card">
|
|
77
|
+
<h3>Feedback → rules</h3>
|
|
78
|
+
<p>Thumbs-down becomes a reviewable lesson, then a prevention rule that fires before the next tool call.</p>
|
|
79
|
+
</div>
|
|
80
|
+
<div class="card">
|
|
81
|
+
<h3>Multi-agent surface</h3>
|
|
82
|
+
<p>One gate layer across Claude Code, Cursor, Codex, Gemini, Amp, Cline, OpenCode, and MCP.</p>
|
|
83
|
+
</div>
|
|
84
|
+
</div>
|
|
85
|
+
|
|
86
|
+
<h2>System architecture</h2>
|
|
87
|
+
<figure>
|
|
88
|
+
<img src="/assets/diagrams/thumbgate-architecture.png" alt="ThumbGate architecture: agent layer, hooks, MCP tools, gate engine, governance, security, feedback memory, and orchestration" width="1200" height="800" loading="eager">
|
|
89
|
+
<figcaption>Agents → hooks → MCP tools → gate engine (match / verdict / reasoning / stats), with governance, secret scanning, feedback promotion, and orchestration around the decision path.</figcaption>
|
|
90
|
+
</figure>
|
|
91
|
+
|
|
92
|
+
<h2>Feedback pipeline (session 1 → session 2)</h2>
|
|
93
|
+
<figure>
|
|
94
|
+
<img src="/assets/diagrams/feedback-pipeline.png" alt="Sequence diagram: agent mistake, thumbs-down capture, rule promotion, next session blocked" width="1200" height="700" loading="lazy">
|
|
95
|
+
<figcaption>Session 1 captures a thumbs-down; the lesson is promoted; session 2 blocks the repeat before execution.</figcaption>
|
|
96
|
+
</figure>
|
|
97
|
+
|
|
98
|
+
<h2>Pre-action gate loop</h2>
|
|
99
|
+
<figure>
|
|
100
|
+
<img src="/assets/diagrams/pre-action-gate-loop.svg" alt="Pre-action gate loop: capture, remember, rank, gate" width="900" height="400" loading="lazy">
|
|
101
|
+
<figcaption>Capture feedback → remember locally → rank and promote → gate the next tool call.</figcaption>
|
|
102
|
+
</figure>
|
|
103
|
+
|
|
104
|
+
<h2>Agent integration</h2>
|
|
105
|
+
<figure>
|
|
106
|
+
<img src="/assets/diagrams/agent-integration.png" alt="ThumbGate agent integration map across coding agents and MCP" width="1200" height="700" loading="lazy">
|
|
107
|
+
<figcaption>How ThumbGate attaches to coding agents and MCP tool surfaces without putting a remote model on the enforcement path.</figcaption>
|
|
108
|
+
</figure>
|
|
109
|
+
|
|
110
|
+
<h2>Plugin topology</h2>
|
|
111
|
+
<figure>
|
|
112
|
+
<img src="/assets/diagrams/plugin-topology.png" alt="ThumbGate plugin topology across IDE and CLI surfaces" width="1200" height="700" loading="lazy">
|
|
113
|
+
<figcaption>Where plugins and marketplace packages sit relative to the local gate runtime.</figcaption>
|
|
114
|
+
</figure>
|
|
115
|
+
|
|
116
|
+
<h2>Related proof surfaces</h2>
|
|
117
|
+
<p>
|
|
118
|
+
<a class="cta" href="/whitepaper">How we know it works</a>
|
|
119
|
+
<a class="cta" href="/eval-scorecard">Eval scorecard</a>
|
|
120
|
+
<a class="secondary" href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/docs/diagrams/thumbgate_architecture.mmd">Mermaid sources on GitHub →</a>
|
|
121
|
+
</p>
|
|
122
|
+
|
|
123
|
+
<p class="footer-note">
|
|
124
|
+
Source diagrams live in <code>docs/diagrams/</code> and are mirrored here for production serving.
|
|
125
|
+
Also see <a href="/evaluations">ML evaluations</a> and
|
|
126
|
+
<a href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/docs/VERIFICATION_EVIDENCE.md">verification evidence</a>.
|
|
127
|
+
</p>
|
|
128
|
+
</main>
|
|
129
|
+
</body>
|
|
130
|
+
</html>
|
|
Binary file
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 960 280" role="img" aria-labelledby="t d">
|
|
2
|
+
<title id="t">Before and after ThumbGate</title>
|
|
3
|
+
<desc id="d">Without ThumbGate the same mistake repeats. With ThumbGate the second attempt is caught.</desc>
|
|
4
|
+
<rect width="960" height="280" fill="#0a0a0b"/>
|
|
5
|
+
<g font-family="system-ui,sans-serif">
|
|
6
|
+
<!-- WITHOUT -->
|
|
7
|
+
<rect x="40" y="36" width="400" height="208" rx="20" fill="#1a1012" stroke="#f87171" stroke-width="2"/>
|
|
8
|
+
<text x="240" y="72" text-anchor="middle" fill="#f87171" font-size="18" font-weight="900">WITHOUT</text>
|
|
9
|
+
<text x="240" y="118" text-anchor="middle" fill="#f5f5f7" font-size="20" font-weight="700">🔥 force-push / bad shell</text>
|
|
10
|
+
<text x="240" y="152" text-anchor="middle" fill="#e5e7eb" font-size="16">You clean it up…</text>
|
|
11
|
+
<text x="240" y="182" text-anchor="middle" fill="#e5e7eb" font-size="16">…and it happens again.</text>
|
|
12
|
+
<text x="240" y="218" text-anchor="middle" fill="#9ca3af" font-size="14">time × trust × risk</text>
|
|
13
|
+
<!-- WITH -->
|
|
14
|
+
<rect x="520" y="36" width="400" height="208" rx="20" fill="#0c1a14" stroke="#4ade80" stroke-width="2"/>
|
|
15
|
+
<text x="720" y="72" text-anchor="middle" fill="#4ade80" font-size="18" font-weight="900">WITH THUMBGATE</text>
|
|
16
|
+
<text x="720" y="118" text-anchor="middle" fill="#f5f5f7" font-size="20" font-weight="700">👎 once</text>
|
|
17
|
+
<text x="720" y="152" text-anchor="middle" fill="#e5e7eb" font-size="16">Rule saved locally</text>
|
|
18
|
+
<text x="720" y="182" text-anchor="middle" fill="#e5e7eb" font-size="16">Next attempt is checked</text>
|
|
19
|
+
<text x="720" y="218" text-anchor="middle" fill="#9ca3af" font-size="14">one correction → permanent gate</text>
|
|
20
|
+
</g>
|
|
21
|
+
</svg>
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 960 300" role="img" aria-labelledby="t d">
|
|
2
|
+
<title id="t">Which ThumbGate path to pick</title>
|
|
3
|
+
<desc id="d">Free try, Pro solo, $499 diagnostic, sprint after intake.</desc>
|
|
4
|
+
<rect width="960" height="300" fill="#0a0a0b"/>
|
|
5
|
+
<g font-family="system-ui,sans-serif">
|
|
6
|
+
<text x="480" y="36" text-anchor="middle" fill="#f5f5f7" font-size="17" font-weight="800">Pick the path that matches the pain</text>
|
|
7
|
+
<!-- Free -->
|
|
8
|
+
<rect x="28" y="58" width="210" height="210" rx="16" fill="#161618" stroke="#333"/>
|
|
9
|
+
<text x="133" y="95" text-anchor="middle" fill="#9ca3af" font-size="12" font-weight="700">SOLO TRY</text>
|
|
10
|
+
<text x="133" y="130" text-anchor="middle" fill="#f5f5f7" font-size="22" font-weight="900">Free</text>
|
|
11
|
+
<text x="133" y="160" text-anchor="middle" fill="#9ca3af" font-size="13">npx thumbgate init</text>
|
|
12
|
+
<text x="133" y="190" text-anchor="middle" fill="#e5e7eb" font-size="13">Catch one repeat</text>
|
|
13
|
+
<text x="133" y="230" text-anchor="middle" fill="#4ade80" font-size="12" font-weight="700">prove it works</text>
|
|
14
|
+
<!-- Pro -->
|
|
15
|
+
<rect x="258" y="58" width="210" height="210" rx="16" fill="#07151a" stroke="#22d3ee" stroke-width="2"/>
|
|
16
|
+
<text x="363" y="95" text-anchor="middle" fill="#22d3ee" font-size="12" font-weight="700">SELF-SERVE</text>
|
|
17
|
+
<text x="363" y="130" text-anchor="middle" fill="#f5f5f7" font-size="22" font-weight="900">Pro $19/mo</text>
|
|
18
|
+
<text x="363" y="160" text-anchor="middle" fill="#9ca3af" font-size="13">Unlimited solo</text>
|
|
19
|
+
<text x="363" y="190" text-anchor="middle" fill="#e5e7eb" font-size="13">Dashboard · exports</text>
|
|
20
|
+
<text x="363" y="230" text-anchor="middle" fill="#22d3ee" font-size="12" font-weight="700">checkout today</text>
|
|
21
|
+
<!-- Diagnostic $499 - HIGHLIGHT -->
|
|
22
|
+
<rect x="488" y="58" width="220" height="210" rx="16" fill="#0d1b14" stroke="#4ade80" stroke-width="2.5"/>
|
|
23
|
+
<text x="598" y="95" text-anchor="middle" fill="#4ade80" font-size="12" font-weight="700">ONE WORKFLOW · PAY TODAY</text>
|
|
24
|
+
<text x="598" y="130" text-anchor="middle" fill="#f5f5f7" font-size="22" font-weight="900">$499</text>
|
|
25
|
+
<text x="598" y="160" text-anchor="middle" fill="#9ca3af" font-size="13">Diagnostic</text>
|
|
26
|
+
<text x="598" y="190" text-anchor="middle" fill="#e5e7eb" font-size="13">Map block / warn / review</text>
|
|
27
|
+
<text x="598" y="230" text-anchor="middle" fill="#4ade80" font-size="12" font-weight="700">not Enterprise</text>
|
|
28
|
+
<!-- Sprint -->
|
|
29
|
+
<rect x="728" y="58" width="204" height="210" rx="16" fill="#161618" stroke="#333"/>
|
|
30
|
+
<text x="830" y="95" text-anchor="middle" fill="#9ca3af" font-size="12" font-weight="700">IMPLEMENT</text>
|
|
31
|
+
<text x="830" y="130" text-anchor="middle" fill="#f5f5f7" font-size="22" font-weight="900">$1,500</text>
|
|
32
|
+
<text x="830" y="160" text-anchor="middle" fill="#9ca3af" font-size="13">Hardening Sprint</text>
|
|
33
|
+
<text x="830" y="190" text-anchor="middle" fill="#e5e7eb" font-size="13">Wire + prove gates</text>
|
|
34
|
+
<text x="830" y="230" text-anchor="middle" fill="#fbbf24" font-size="12" font-weight="700">after scope</text>
|
|
35
|
+
</g>
|
|
36
|
+
</svg>
|
|
Binary file
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 960 280" role="img" aria-labelledby="t d">
|
|
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="280" fill="#0a0a0b"/>
|
|
5
|
+
<defs>
|
|
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
|
+
<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
|
+
</defs>
|
|
9
|
+
<!-- Step 1 -->
|
|
10
|
+
<rect x="40" y="70" width="180" height="110" rx="18" fill="#161618" stroke="#333"/>
|
|
11
|
+
<circle cx="70" cy="100" r="16" fill="#222" stroke="#22d3ee" stroke-width="2"/>
|
|
12
|
+
<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="120" text-anchor="middle" fill="#f5f5f7" font-family="system-ui,sans-serif" font-size="18" font-weight="800">Agent</text>
|
|
14
|
+
<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="125" x2="290" y2="125" stroke="#22d3ee" stroke-width="3" marker-end="url(#arr)"/>
|
|
16
|
+
<!-- Step 2 -->
|
|
17
|
+
<rect x="300" y="50" width="240" height="150" rx="18" fill="#07151a" stroke="url(#g)" stroke-width="2.5"/>
|
|
18
|
+
<circle cx="340" cy="90" r="16" fill="#0d2530" stroke="#22d3ee" stroke-width="2"/>
|
|
19
|
+
<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
|
+
<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
|
+
<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
|
+
<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
|
+
<line x1="550" y1="125" x2="610" y2="125" stroke="#22d3ee" stroke-width="3" marker-end="url(#arr)"/>
|
|
24
|
+
<!-- Step 3 -->
|
|
25
|
+
<rect x="620" y="70" width="180" height="110" rx="18" fill="#161618" stroke="#333"/>
|
|
26
|
+
<circle cx="650" cy="100" r="16" fill="#222" stroke="#4ade80" stroke-width="2"/>
|
|
27
|
+
<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="120" text-anchor="middle" fill="#f5f5f7" font-family="system-ui,sans-serif" font-size="18" font-weight="800">Action</text>
|
|
29
|
+
<text x="710" y="146" text-anchor="middle" fill="#9ca3af" font-family="system-ui,sans-serif" font-size="13">shell · git · db</text>
|
|
30
|
+
<!-- Feedback loop -->
|
|
31
|
+
<path d="M710 185 C710 240 130 240 130 185" fill="none" stroke="#4ade80" stroke-width="3" stroke-dasharray="6 4" marker-end="url(#arr)"/>
|
|
32
|
+
<rect x="280" y="218" width="280" height="36" rx="18" fill="#0d1b14" stroke="#4ade80"/>
|
|
33
|
+
<text x="420" y="241" text-anchor="middle" fill="#4ade80" font-family="system-ui,sans-serif" font-size="14" font-weight="700">👍 👎 feedback → lesson → rule</text>
|
|
34
|
+
</svg>
|
|
Binary file
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="520" viewBox="0 0 1200 520" role="img" aria-labelledby="title desc">
|
|
2
|
+
<title id="title">ThumbGate pre-action gate loop</title>
|
|
3
|
+
<desc id="desc">Diagram showing an AI agent proposing a tool call, ThumbGate checking it before execution, then either blocking repeated failures or allowing safe actions with an audit receipt.</desc>
|
|
4
|
+
<defs>
|
|
5
|
+
<linearGradient id="bg" x1="0" x2="1" y1="0" y2="1">
|
|
6
|
+
<stop offset="0%" stop-color="#081014"/>
|
|
7
|
+
<stop offset="100%" stop-color="#111113"/>
|
|
8
|
+
</linearGradient>
|
|
9
|
+
<linearGradient id="cyan" x1="0" x2="1" y1="0" y2="0">
|
|
10
|
+
<stop offset="0%" stop-color="#22d3ee"/>
|
|
11
|
+
<stop offset="100%" stop-color="#4ade80"/>
|
|
12
|
+
</linearGradient>
|
|
13
|
+
<filter id="shadow" x="-10%" y="-10%" width="120%" height="120%">
|
|
14
|
+
<feDropShadow dx="0" dy="16" stdDeviation="18" flood-color="#000000" flood-opacity="0.35"/>
|
|
15
|
+
</filter>
|
|
16
|
+
<marker id="arrow" markerWidth="12" markerHeight="12" refX="10" refY="6" orient="auto">
|
|
17
|
+
<path d="M2,2 L10,6 L2,10 Z" fill="#22d3ee"/>
|
|
18
|
+
</marker>
|
|
19
|
+
</defs>
|
|
20
|
+
<rect width="1200" height="520" rx="28" fill="url(#bg)"/>
|
|
21
|
+
<text x="60" y="72" fill="#e8e8ec" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="34" font-weight="800">ThumbGate checks agent intent before execution</text>
|
|
22
|
+
<text x="60" y="106" fill="#8b8b96" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="17">Feedback becomes rules. Rules become PreToolUse gates. Gates produce receipts before files, APIs, or production systems change.</text>
|
|
23
|
+
|
|
24
|
+
<g filter="url(#shadow)">
|
|
25
|
+
<rect x="60" y="170" width="235" height="145" rx="18" fill="#161618" stroke="#222225"/>
|
|
26
|
+
<text x="86" y="205" fill="#22d3ee" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="13" font-weight="800" letter-spacing="1.4">AGENT INTENT</text>
|
|
27
|
+
<text x="86" y="244" fill="#e8e8ec" font-family="SFMono-Regular,Consolas,monospace" font-size="18">git push --force</text>
|
|
28
|
+
<text x="86" y="272" fill="#e8e8ec" font-family="SFMono-Regular,Consolas,monospace" font-size="18">origin main</text>
|
|
29
|
+
<text x="86" y="296" fill="#8b8b96" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="13">Still only proposed. Nothing has run.</text>
|
|
30
|
+
|
|
31
|
+
<rect x="390" y="160" width="270" height="165" rx="18" fill="#10181a" stroke="#22d3ee" stroke-opacity="0.52"/>
|
|
32
|
+
<text x="416" y="196" fill="#22d3ee" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="13" font-weight="800" letter-spacing="1.4">PRETOOLUSE GATE</text>
|
|
33
|
+
<text x="416" y="232" fill="#e8e8ec" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="18" font-weight="700">Known repeated failure?</text>
|
|
34
|
+
<text x="416" y="262" fill="#8b8b96" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="14">Checks active rules, protected paths, approvals,</text>
|
|
35
|
+
<text x="416" y="284" fill="#8b8b96" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="14">secrets, evidence, and workflow scope.</text>
|
|
36
|
+
|
|
37
|
+
<rect x="755" y="120" width="245" height="135" rx="18" fill="#201113" stroke="#f87171" stroke-opacity="0.55"/>
|
|
38
|
+
<text x="781" y="154" fill="#f87171" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="13" font-weight="800" letter-spacing="1.4">BLOCK</text>
|
|
39
|
+
<text x="781" y="191" fill="#e8e8ec" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="18" font-weight="700">Stop before damage</text>
|
|
40
|
+
<text x="781" y="220" fill="#8b8b96" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="14">Return the rule and safer next step.</text>
|
|
41
|
+
|
|
42
|
+
<rect x="755" y="305" width="245" height="135" rx="18" fill="#102017" stroke="#4ade80" stroke-opacity="0.55"/>
|
|
43
|
+
<text x="781" y="339" fill="#4ade80" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="13" font-weight="800" letter-spacing="1.4">ALLOW</text>
|
|
44
|
+
<text x="781" y="376" fill="#e8e8ec" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="18" font-weight="700">Run and log receipt</text>
|
|
45
|
+
<text x="781" y="405" fill="#8b8b96" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="14">Safe actions keep moving with proof.</text>
|
|
46
|
+
</g>
|
|
47
|
+
|
|
48
|
+
<path d="M310 242 H370" stroke="#22d3ee" stroke-width="3" marker-end="url(#arrow)"/>
|
|
49
|
+
<path d="M670 230 C710 190 725 175 745 170" stroke="#f87171" stroke-width="3" fill="none" marker-end="url(#arrow)"/>
|
|
50
|
+
<path d="M670 270 C710 335 725 365 745 375" stroke="#4ade80" stroke-width="3" fill="none" marker-end="url(#arrow)"/>
|
|
51
|
+
|
|
52
|
+
<g>
|
|
53
|
+
<rect x="60" y="380" width="600" height="70" rx="16" fill="#0a0a0b" stroke="#222225"/>
|
|
54
|
+
<text x="86" y="412" fill="#8b8b96" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="13" font-weight="800" letter-spacing="1.4">FEEDBACK LOOP</text>
|
|
55
|
+
<text x="86" y="438" fill="#e8e8ec" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="16">Thumbs-down becomes a lesson, then a prevention rule shared across agents.</text>
|
|
56
|
+
</g>
|
|
57
|
+
<path d="M820 120 C760 70 240 72 196 165" stroke="url(#cyan)" stroke-width="3" fill="none" stroke-dasharray="8 8" marker-end="url(#arrow)"/>
|
|
58
|
+
<text x="900" y="486" fill="#22d3ee" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="16" font-weight="800">npx thumbgate init</text>
|
|
59
|
+
</svg>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 960 240" role="img" aria-labelledby="t d">
|
|
2
|
+
<title id="t">Where ThumbGate sits in the stack</title>
|
|
3
|
+
<desc id="d">Model to agent runtime to ThumbGate pre-action gate to tools.</desc>
|
|
4
|
+
<rect width="960" height="240" fill="#0a0a0b"/>
|
|
5
|
+
<g font-family="system-ui,sans-serif">
|
|
6
|
+
<rect x="60" y="36" width="840" height="40" rx="10" fill="#161618" stroke="#333"/>
|
|
7
|
+
<text x="480" y="62" text-anchor="middle" fill="#9ca3af" font-size="15" font-weight="600">Model (Claude · GPT · Gemini · local)</text>
|
|
8
|
+
<text x="480" y="100" text-anchor="middle" fill="#22d3ee" font-size="22">↓</text>
|
|
9
|
+
<rect x="60" y="112" width="840" height="40" rx="10" fill="#161618" stroke="#333"/>
|
|
10
|
+
<text x="480" y="138" text-anchor="middle" fill="#e5e7eb" font-size="15" font-weight="600">Agent runtime (Claude Code · Cursor · Codex · …)</text>
|
|
11
|
+
<text x="480" y="176" text-anchor="middle" fill="#22d3ee" font-size="22">↓</text>
|
|
12
|
+
<rect x="60" y="188" width="400" height="40" rx="10" fill="#07151a" stroke="#22d3ee" stroke-width="2"/>
|
|
13
|
+
<text x="260" y="214" text-anchor="middle" fill="#22d3ee" font-size="15" font-weight="800">ThumbGate pre-action gate</text>
|
|
14
|
+
<text x="490" y="214" text-anchor="middle" fill="#4ade80" font-size="20">→</text>
|
|
15
|
+
<rect x="520" y="188" width="380" height="40" rx="10" fill="#161618" stroke="#333"/>
|
|
16
|
+
<text x="710" y="214" text-anchor="middle" fill="#e5e7eb" font-size="15" font-weight="600">shell · git · db · MCP tools</text>
|
|
17
|
+
</g>
|
|
18
|
+
</svg>
|
|
Binary file
|