thumbgate 1.27.4 → 1.27.7
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 +15 -0
- package/.claude/commands/thumbgate-blocked.md +27 -0
- package/.claude/commands/thumbgate-dashboard.md +15 -0
- package/.claude/commands/thumbgate-doctor.md +30 -0
- package/.claude/commands/thumbgate-guard.md +36 -0
- package/.claude/commands/thumbgate-protect.md +30 -0
- package/.claude/commands/thumbgate-rules.md +30 -0
- package/.claude-plugin/plugin.json +2 -1
- package/.well-known/llms.txt +6 -2
- package/.well-known/mcp/server-card.json +1 -1
- package/README.md +49 -5
- package/adapters/claude/.mcp.json +2 -2
- package/adapters/letta/README.md +41 -0
- package/adapters/letta/thumbgate-letta-adapter.js +133 -0
- package/adapters/mcp/server-stdio.js +16 -1
- package/adapters/opencode/opencode.json +1 -1
- package/adapters/policy-engine/ethicore-guardian-client.js +68 -0
- package/adapters/policy-engine/thumbgate-policy-engine-adapter.js +260 -0
- package/bench/observability-eval-suite.json +26 -0
- package/bin/cli.js +230 -6
- package/bin/postinstall.js +1 -1
- package/commands/dashboard.md +15 -0
- package/commands/thumbgate-dashboard.md +15 -0
- package/config/gate-templates.json +84 -0
- package/config/gates/claim-verification.json +12 -0
- package/config/gates/default.json +20 -0
- package/config/github-about.json +1 -1
- package/config/model-candidates.json +50 -0
- package/config/post-deploy-marketing-pages.json +5 -0
- package/package.json +67 -25
- package/public/agent-manager.html +41 -1
- package/public/agents-cost-savings.html +1 -1
- package/public/ai-malpractice-prevention.html +2 -1
- package/public/assets/brand/github-social-preview.png +0 -0
- package/public/assets/brand/thumbgate-icon-512.png +0 -0
- package/public/assets/brand/thumbgate-icon-pro-512.png +0 -0
- package/public/assets/brand/thumbgate-icon-team-512.png +0 -0
- package/public/assets/brand/thumbgate-logo-1200x360.png +0 -0
- package/public/assets/brand/thumbgate-mark-inline.svg +15 -0
- package/public/assets/brand/thumbgate-mark-pro.svg +23 -0
- package/public/assets/brand/thumbgate-mark-team.svg +26 -0
- package/public/assets/brand/thumbgate-mark.svg +15 -0
- package/public/assets/brand/thumbgate-wordmark.svg +20 -0
- package/public/assets/claude-thumbgate-statusbar.svg +8 -0
- package/public/assets/codex-thumbgate-statusbar-test.svg +9 -0
- package/public/assets/legal-intake-control-flow.svg +66 -0
- package/public/blog.html +1 -1
- package/public/brand/thumbgate-mark.svg +15 -0
- package/public/brand/thumbgate-og.svg +16 -0
- package/public/codex-enterprise.html +1 -1
- package/public/codex-plugin.html +1 -1
- package/public/compare.html +23 -3
- package/public/dashboard.html +316 -30
- package/public/federal.html +1 -1
- package/public/guide.html +5 -4
- package/public/index.html +167 -49
- package/public/js/buyer-intent.js +672 -0
- package/public/learn.html +88 -7
- package/public/lessons.html +2 -1
- package/public/numbers.html +3 -3
- package/public/pricing.html +63 -15
- package/public/pro.html +7 -7
- package/scripts/activation-quickstart.js +187 -0
- package/scripts/agent-memory-lifecycle.js +211 -0
- package/scripts/async-eval-observability.js +236 -0
- package/scripts/auto-promote-gates.js +75 -4
- package/scripts/billing.js +12 -1
- package/scripts/build-metadata.js +24 -3
- package/scripts/cli-schema.js +42 -10
- package/scripts/dashboard-chat.js +53 -7
- package/scripts/dashboard.js +12 -17
- package/scripts/export-databricks-bundle.js +5 -1
- package/scripts/export-dpo-pairs.js +7 -2
- package/scripts/feedback-aggregate.js +281 -0
- package/scripts/feedback-loop.js +121 -0
- package/scripts/filesystem-search.js +35 -10
- package/scripts/gates-engine.js +234 -7
- package/scripts/gemini-embedding-policy.js +2 -1
- package/scripts/hook-stop-anti-claim.js +227 -0
- package/scripts/hook-thumbgate-cache-updater.js +18 -2
- package/scripts/hybrid-feedback-context.js +1 -0
- package/scripts/lesson-inference.js +8 -3
- package/scripts/lesson-search.js +17 -1
- package/scripts/operational-integrity.js +39 -5
- package/scripts/plausible-domain-config.js +15 -2
- package/scripts/plausible-server-events.js +4 -4
- package/scripts/rate-limiter.js +12 -6
- package/scripts/secret-redaction.js +166 -0
- package/scripts/security-scanner.js +100 -0
- package/scripts/self-distill-agent.js +3 -1
- package/scripts/self-harness-optimizer.js +141 -0
- package/scripts/seo-gsd.js +635 -0
- package/scripts/statusline-cache-path.js +17 -2
- package/scripts/statusline-cache-read.js +57 -0
- package/scripts/statusline-local-stats.js +9 -1
- package/scripts/statusline-meta.js +5 -2
- package/scripts/statusline.sh +13 -1
- package/scripts/sync-telemetry-from-prod.js +374 -0
- package/scripts/telemetry-analytics.js +9 -0
- package/scripts/thumbgate-search.js +85 -19
- package/scripts/tool-contract-validator.js +76 -0
- package/scripts/vector-store.js +44 -0
- package/scripts/workspace-evolver.js +62 -2
- package/src/api/server.js +862 -146
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "thumbgate",
|
|
3
|
-
"version": "1.27.
|
|
3
|
+
"version": "1.27.7",
|
|
4
4
|
"description": "ThumbGate self-improving agent governance: thumbs-up/down turns every mistake into a prevention rule and blocks repeat patterns. 36 pre-action checks, budget enforcement, and self-protection for Claude Code, Cursor, Codex, Gemini CLI, and Amp.",
|
|
5
5
|
"homepage": "https://thumbgate.ai",
|
|
6
6
|
"repository": {
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
"files": [
|
|
19
19
|
"scripts/access-anomaly-detector.js",
|
|
20
20
|
"scripts/action-receipts.js",
|
|
21
|
+
"scripts/activation-quickstart.js",
|
|
21
22
|
"scripts/activation-tracker.js",
|
|
22
23
|
"scripts/agent-audit-trace.js",
|
|
23
24
|
"scripts/agent-design-governance.js",
|
|
@@ -33,6 +34,7 @@
|
|
|
33
34
|
"scripts/ai-engineering-stack-guardrails.js",
|
|
34
35
|
"scripts/ai-search-distribution.js",
|
|
35
36
|
"scripts/analytics-window.js",
|
|
37
|
+
"scripts/async-eval-observability.js",
|
|
36
38
|
"scripts/async-job-runner.js",
|
|
37
39
|
"scripts/audit-trail.js",
|
|
38
40
|
"scripts/audit.js",
|
|
@@ -84,6 +86,7 @@
|
|
|
84
86
|
"scripts/export-dpo-pairs.js",
|
|
85
87
|
"scripts/export-hf-dataset.js",
|
|
86
88
|
"scripts/failure-diagnostics.js",
|
|
89
|
+
"scripts/feedback-aggregate.js",
|
|
87
90
|
"scripts/feedback-attribution.js",
|
|
88
91
|
"scripts/feedback-loop.js",
|
|
89
92
|
"scripts/feedback-paths.js",
|
|
@@ -103,6 +106,7 @@
|
|
|
103
106
|
"scripts/harness-selector.js",
|
|
104
107
|
"scripts/hf-papers.js",
|
|
105
108
|
"scripts/hook-runtime.js",
|
|
109
|
+
"scripts/hook-stop-anti-claim.js",
|
|
106
110
|
"scripts/hook-thumbgate-cache-updater.js",
|
|
107
111
|
"scripts/hosted-config.js",
|
|
108
112
|
"scripts/hybrid-feedback-context.js",
|
|
@@ -175,9 +179,11 @@
|
|
|
175
179
|
"scripts/rule-validator.js",
|
|
176
180
|
"scripts/secret-scanner.js",
|
|
177
181
|
"scripts/secret-fixture-tokens.js",
|
|
182
|
+
"scripts/secret-redaction.js",
|
|
178
183
|
"scripts/security-scanner.js",
|
|
179
184
|
"scripts/self-distill-agent.js",
|
|
180
185
|
"scripts/self-heal.js",
|
|
186
|
+
"scripts/self-harness-optimizer.js",
|
|
181
187
|
"scripts/self-healing-check.js",
|
|
182
188
|
"scripts/semantic-dedup.js",
|
|
183
189
|
"scripts/semantic-layer.js",
|
|
@@ -189,6 +195,7 @@
|
|
|
189
195
|
"scripts/skill-rag-router.js",
|
|
190
196
|
"scripts/slo-alert-engine.js",
|
|
191
197
|
"scripts/spec-gate.js",
|
|
198
|
+
"scripts/statusline-cache-read.js",
|
|
192
199
|
"scripts/statusline-cache-path.js",
|
|
193
200
|
"scripts/statusline-context.js",
|
|
194
201
|
"scripts/statusline-lesson.js",
|
|
@@ -198,6 +205,7 @@
|
|
|
198
205
|
"scripts/statusline-tower.js",
|
|
199
206
|
"scripts/statusline.sh",
|
|
200
207
|
"scripts/structured-prompt-driven.js",
|
|
208
|
+
"scripts/sync-telemetry-from-prod.js",
|
|
201
209
|
"scripts/synthetic-data-provenance.js",
|
|
202
210
|
"scripts/task-context-result.js",
|
|
203
211
|
"scripts/telemetry-analytics.js",
|
|
@@ -207,6 +215,7 @@
|
|
|
207
215
|
"scripts/trajectory-scorer.js",
|
|
208
216
|
"scripts/token-savings.js",
|
|
209
217
|
"scripts/token-tco.js",
|
|
218
|
+
"scripts/tool-contract-validator.js",
|
|
210
219
|
"scripts/tool-registry.js",
|
|
211
220
|
"scripts/upstream-contribution-engine.js",
|
|
212
221
|
"scripts/user-profile.js",
|
|
@@ -222,6 +231,8 @@
|
|
|
222
231
|
"scripts/workspace-evolver.js",
|
|
223
232
|
"scripts/xmemory-lite.js",
|
|
224
233
|
".claude-plugin/plugin.json",
|
|
234
|
+
".claude/commands/",
|
|
235
|
+
"commands/",
|
|
225
236
|
".well-known/",
|
|
226
237
|
"LICENSE",
|
|
227
238
|
"README.md",
|
|
@@ -230,11 +241,17 @@
|
|
|
230
241
|
"adapters/codex/config.toml",
|
|
231
242
|
"adapters/forge/forge.yaml",
|
|
232
243
|
"adapters/gemini/function-declarations.json",
|
|
244
|
+
"adapters/letta/README.md",
|
|
245
|
+
"adapters/letta/thumbgate-letta-adapter.js",
|
|
233
246
|
"adapters/gcp/dfcx-webhook-gate.js",
|
|
247
|
+
"adapters/policy-engine/README.md",
|
|
248
|
+
"adapters/policy-engine/ethicore-guardian-client.js",
|
|
249
|
+
"adapters/policy-engine/thumbgate-policy-engine-adapter.js",
|
|
234
250
|
"adapters/mcp/server-stdio.js",
|
|
235
251
|
"adapters/opencode/opencode.json",
|
|
236
252
|
"bench/programbench-smoke.json",
|
|
237
253
|
"bench/prompt-eval-suite.json",
|
|
254
|
+
"bench/observability-eval-suite.json",
|
|
238
255
|
"bench/thumbgate-bench.json",
|
|
239
256
|
"bin/cli.js",
|
|
240
257
|
"bin/dashboard-cli.js",
|
|
@@ -259,6 +276,12 @@
|
|
|
259
276
|
"public/numbers.html",
|
|
260
277
|
"public/pricing.html",
|
|
261
278
|
"public/pro.html",
|
|
279
|
+
"public/assets/brand/",
|
|
280
|
+
"public/assets/claude-thumbgate-statusbar.svg",
|
|
281
|
+
"public/assets/codex-thumbgate-statusbar-test.svg",
|
|
282
|
+
"public/assets/legal-intake-control-flow.svg",
|
|
283
|
+
"public/brand/",
|
|
284
|
+
"public/js/",
|
|
262
285
|
"skills/thumbgate/SKILL.md",
|
|
263
286
|
"src/"
|
|
264
287
|
],
|
|
@@ -298,13 +321,6 @@
|
|
|
298
321
|
"medium:weekly:draft": "node scripts/medium-weekly.js --write",
|
|
299
322
|
"medium:weekly:schedule": "node scripts/medium-weekly.js --schedule",
|
|
300
323
|
"sales:pipeline": "node scripts/sales-pipeline.js",
|
|
301
|
-
"social:prepare": "node scripts/social-pipeline.js prepare",
|
|
302
|
-
"social:post": "node scripts/social-pipeline.js post",
|
|
303
|
-
"social:queue": "node scripts/social-pipeline.js queue",
|
|
304
|
-
"social:publish": "node scripts/social-pipeline.js publish",
|
|
305
|
-
"social:publish:queue": "node scripts/social-pipeline.js publish-queue",
|
|
306
|
-
"social:scheduler:install": "node scripts/social-pipeline.js install-scheduler",
|
|
307
|
-
"social:status": "node scripts/social-pipeline.js status",
|
|
308
324
|
"social:poll": "node scripts/social-analytics/poll-all.js",
|
|
309
325
|
"social:poll:github": "node scripts/social-analytics/pollers/github.js",
|
|
310
326
|
"social:poll:instagram": "node scripts/social-analytics/pollers/instagram.js",
|
|
@@ -358,12 +374,15 @@
|
|
|
358
374
|
"social:prospect:bluesky": "node scripts/social-bluesky-prospecting.js",
|
|
359
375
|
"social:prospect:bluesky:dry": "node scripts/social-bluesky-prospecting.js --dry-run",
|
|
360
376
|
"social:reply-publish:bluesky:dry": "node scripts/social-reply-monitor-bluesky.js --publish-approved --dry-run",
|
|
377
|
+
"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:billing && npm run test:cli && npm run test:watcher && npm run test:autoresearch && npm run test:ops && npm run test:session-analyzer && npm run test:tessl && npm run test:gates && npm run test:evoskill && npm run test:gates-hardening && npm run test:workers && npm run test:social-analytics && npm run test:memalign && npm run test:xmemory-lite && npm run test:filesystem-search && npm run test:zernio && npm run test:platform-limits && npm run test:post-video && npm run test:post-everywhere-instagram && npm run test:post-everywhere-channels && npm run test:post-everywhere-zernio-default && npm run test:zernio-canonical-pollers && npm run test:zernio-status && npm run test:obsidian-export && npm run test:lesson-db && npm run test:lesson-rotation && npm run test:memory-dedup && npm run test:feedback-quality && npm run test:sync-version && npm run test:check-congruence && npm run test:tool-registry && npm run test: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:export-dpo-pairs && npm run test:export-hf-dataset && npm run test:license && npm run test:bot-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:social-dedupe-cleanup && npm run test:sync-launch-assets && npm run test:ai-search-visibility && npm run test:perplexity && npm run test:security-scanner && npm run test:llm-client && npm run test:managed-lesson-agent && npm run test:self-distill && npm run test:meta-agent && npm run test:harness-selector && npm run test:thumbgate-bench && npm run test:seo-guides && npm run test:enforcement-loop && npm run test:cli-agent-experience && npm run test:bot-detection && npm run test:checkout-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: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:public-bundle-ratchet && 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:tool-contract-validator && npm run test:check-update",
|
|
361
378
|
"test:python": "python3 -m pytest tests/*.py",
|
|
362
|
-
"test
|
|
379
|
+
"test:check-update": "node --test tests/check-update.test.js",
|
|
380
|
+
"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:billing && npm run test:cli && npm run test:watcher && npm run test:autoresearch && npm run test:ops && npm run test:session-analyzer && npm run test:tessl && npm run test:gates && npm run test:evoskill && npm run test:gates-hardening && npm run test:workers && npm run test:social-analytics && npm run test:memalign && npm run test:xmemory-lite && npm run test:filesystem-search && npm run test:zernio && npm run test:platform-limits && npm run test:post-video && npm run test:post-everywhere-instagram && npm run test:post-everywhere-channels && npm run test:post-everywhere-zernio-default && npm run test:zernio-canonical-pollers && npm run test:zernio-status && npm run test:obsidian-export && npm run test:lesson-db && npm run test:lesson-rotation && npm run test:memory-dedup && npm run test:feedback-quality && npm run test:sync-version && npm run test:check-congruence && npm run test:tool-registry && npm run test: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:export-dpo-pairs && npm run test:export-hf-dataset && npm run test:license && npm run test:bot-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:social-dedupe-cleanup && npm run test:sync-launch-assets && npm run test:ai-search-visibility && npm run test:perplexity && npm run test:security-scanner && npm run test:llm-client && npm run test:managed-lesson-agent && npm run test:self-distill && npm run test:meta-agent && npm run test:harness-selector && npm run test:thumbgate-bench && npm run test:seo-guides && npm run test:enforcement-loop && npm run test:cli-agent-experience && npm run test:bot-detection && npm run test:checkout-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: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:public-bundle-ratchet && 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:tool-contract-validator && npm run test:check-update && npm run test:hermes-gate",
|
|
363
381
|
"test:hook-stop-verify-deploy": "node --test tests/hook-stop-verify-deploy.test.js",
|
|
364
382
|
"test:hook-stop-anti-claim": "node --test tests/hook-stop-anti-claim.test.js",
|
|
365
383
|
"test:plausible-server-events": "node --test tests/plausible-server-events.test.js tests/plausible-poller.test.js tests/plausible-domain-config.test.js",
|
|
366
384
|
"test:activation-tracker": "node --test tests/activation-tracker.test.js",
|
|
385
|
+
"test:activation-onboarding": "node --test tests/activation-onboarding.test.js",
|
|
367
386
|
"test:unified-revenue-rollup": "node --test tests/unified-revenue-rollup.test.js",
|
|
368
387
|
"test:conversion-rate-stats": "node --test tests/conversion-rate-stats.test.js",
|
|
369
388
|
"test:external-customer-audit": "node --test tests/external-customer-audit.test.js",
|
|
@@ -396,6 +415,10 @@
|
|
|
396
415
|
"eval:feedback": "node scripts/prompt-eval.js --from-feedback",
|
|
397
416
|
"eval:feedback-quality": "python3 scripts/feedback_quality_eval.py",
|
|
398
417
|
"eval:classifier": "python3 scripts/eval_gate_classifier.py",
|
|
418
|
+
"eval:rag": "node scripts/eval-rag.js",
|
|
419
|
+
"test:eval-rag": "node --test tests/eval-rag.test.js",
|
|
420
|
+
"eval:async-observability": "node scripts/async-eval-observability.js",
|
|
421
|
+
"test:async-eval-observability": "node --test tests/async-eval-observability.test.js",
|
|
399
422
|
"test:decision-trace": "node --test tests/decision-trace.test.js",
|
|
400
423
|
"test:feedback-fallback": "node --test tests/feedback-fallback.test.js",
|
|
401
424
|
"test:metaclaw": "node --test tests/metaclaw-features.test.js",
|
|
@@ -404,12 +427,18 @@
|
|
|
404
427
|
"test:multi-hop-recall": "node --test tests/multi-hop-recall.test.js",
|
|
405
428
|
"test:synthetic-dpo": "node --test tests/synthetic-dpo.test.js",
|
|
406
429
|
"test:thumbgate-skill": "node --test tests/thumbgate-skill.test.js",
|
|
407
|
-
"test:
|
|
430
|
+
"test:discoverable-skills": "node --test tests/discoverable-skills.test.js",
|
|
431
|
+
"test:discoverable-skill-skills": "node --test tests/discoverable-skill-skills.test.js",
|
|
432
|
+
"test:statusline": "node --test tests/claude-feedback-sync.test.js tests/statusline.test.js tests/statusline-aggregation.test.js tests/statusline-context.test.js tests/statusline-links.test.js tests/statusline-e2e.test.js",
|
|
433
|
+
"test:statusline-cache-aggregate": "node --test tests/statusline-cache-aggregate.test.js",
|
|
434
|
+
"test:no-internal-orchestration-leaks": "node --test tests/no-internal-orchestration-leaks.test.js",
|
|
408
435
|
"test:memory-dedup": "node --test tests/memory-dedup.test.js",
|
|
409
436
|
"test:lesson-db": "node --test tests/lesson-db.test.js",
|
|
410
437
|
"test:lesson-rotation": "node --test tests/lesson-rotation.test.js",
|
|
411
438
|
"test:feedback-quality": "node --test tests/feedback-quality.test.js",
|
|
412
439
|
"test:sync-version": "node --test tests/sync-version.test.js",
|
|
440
|
+
"test:team-sync": "node --test tests/team-sync.test.js",
|
|
441
|
+
"test:sync-telemetry": "node --test tests/sync-telemetry-from-prod.test.js",
|
|
413
442
|
"test:check-congruence": "node --test tests/check-congruence.test.js",
|
|
414
443
|
"test:tool-registry": "node --test tests/tool-registry.test.js",
|
|
415
444
|
"test:dfcx-gate": "node --test tests/dfcx-webhook-gate.test.js",
|
|
@@ -426,7 +455,7 @@
|
|
|
426
455
|
"test:hosted-config": "node --test tests/hosted-config.test.js",
|
|
427
456
|
"test:operational-summary": "node --test tests/operational-summary.test.js",
|
|
428
457
|
"test:operational-dashboard": "node --test tests/operational-dashboard.test.js",
|
|
429
|
-
"test:operator-artifacts": "node --test tests/operator-artifacts.test.js tests/revenue-pack-utils.test.js
|
|
458
|
+
"test:operator-artifacts": "node --test tests/operator-artifacts.test.js tests/revenue-pack-utils.test.js",
|
|
430
459
|
"test:operator-key-auth": "node --test tests/api-operator-key-auth.test.js",
|
|
431
460
|
"test:cloudflare-sandbox": "node --test tests/cloudflare-dynamic-sandbox.test.js tests/cloudflare-sandbox-api.test.js",
|
|
432
461
|
"test:mcp-config": "node --test tests/mcp-config.test.js",
|
|
@@ -447,8 +476,10 @@
|
|
|
447
476
|
"test:hf-papers": "node --test tests/hf-papers.test.js",
|
|
448
477
|
"test:marketing-experiment": "node --test tests/marketing-experiment.test.js",
|
|
449
478
|
"test:seo-gsd": "node --test tests/seo-gsd.test.js",
|
|
479
|
+
"test:hermes-gate": "node --test tests/hermes-gate.test.js",
|
|
450
480
|
"test:verify-run": "node --test tests/verify-run.test.js",
|
|
451
481
|
"test:export-dpo-pairs": "node --test tests/export-dpo-pairs.test.js",
|
|
482
|
+
"test:secret-redaction": "node --test tests/secret-redaction.test.js",
|
|
452
483
|
"test:export-hf-dataset": "node --test tests/export-hf-dataset.test.js",
|
|
453
484
|
"export:hf": "node scripts/export-hf-dataset.js",
|
|
454
485
|
"seo:gsd": "node scripts/seo-gsd.js plan",
|
|
@@ -461,7 +492,6 @@
|
|
|
461
492
|
"test:loop": "node scripts/feedback-loop.js --test",
|
|
462
493
|
"test:dpo": "node scripts/export-dpo-pairs.js --test",
|
|
463
494
|
"test:kto": "node --test tests/export-kto.test.js",
|
|
464
|
-
"test:api": "node --test --test-concurrency=1 tests/api-server.test.js tests/api-events-sse.test.js tests/api-auth-config.test.js tests/mcp-server.test.js tests/adapters.test.js tests/openapi-parity.test.js tests/budget-guard.test.js tests/context-manager.test.js tests/contextfs.test.js tests/job-api.test.js tests/pack-templates.test.js tests/dashboard.test.js tests/dashboard-render-spec.test.js tests/dashboard-html.test.js tests/agent-readiness.test.js tests/mcp-policy.test.js tests/subagent-profiles.test.js tests/intent-router.test.js tests/internal-agent-bootstrap.test.js tests/lesson-search.test.js tests/thumbgate-search.test.js tests/document-intake.test.js tests/rubric-engine.test.js tests/self-healing-check.test.js tests/self-heal.test.js tests/feedback-schema.test.js tests/thompson-sampling.test.js tests/feedback-sequences.test.js tests/diversity-tracking.test.js tests/vector-store.test.js tests/gemini-embedding-policy.test.js tests/feedback-attribution.test.js tests/hybrid-feedback-context.test.js tests/loop-closure.test.js tests/code-reasoning.test.js tests/feedback-loop.test.js tests/feedback-inbox-read.test.js tests/feedback-to-memory.test.js tests/test-coverage.test.js tests/version-metadata.test.js tests/claude-mcpb.test.js tests/claude-codex-bridge.test.js tests/cursor-plugin.test.js tests/codex-plugin.test.js tests/ide-marketplace-extensions.test.js tests/telemetry-analytics.test.js tests/public-landing.test.js tests/lessons-page.test.js tests/pro-landing.test.js tests/local-model-profile.test.js tests/risk-scorer.test.js tests/context-compaction.test.js tests/reminder-engine.test.js tests/post-to-x.test.js tests/verification-loop.test.js tests/async-job-runner.test.js tests/commerce-quality.test.js tests/recall-limit.test.js tests/problem-detail.test.js tests/natural-language-harness.test.js tests/settings-hierarchy.test.js tests/classifier-routing.test.js",
|
|
465
495
|
"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",
|
|
466
496
|
"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",
|
|
467
497
|
"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",
|
|
@@ -469,16 +499,16 @@
|
|
|
469
499
|
"test:quality": "node --test tests/validate-feedback.test.js tests/feedback-quality-eval-python.test.js tests/eval-gate-classifier.test.js",
|
|
470
500
|
"test:intelligence": "node --test tests/intelligence.test.js",
|
|
471
501
|
"test:training-export": "node --test tests/training-export.test.js tests/databricks-export.test.js",
|
|
472
|
-
"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
|
|
502
|
+
"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",
|
|
473
503
|
"test:operational-integrity": "node --test tests/operational-integrity.test.js tests/sync-branch-protection.test.js",
|
|
474
|
-
"test:workflow": "node --test tests/parallel-workflow.test.js tests/workflow-contract.test.js tests/
|
|
504
|
+
"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/revenue-pack-utils.test.js tests/sales-pipeline.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",
|
|
475
505
|
"test:sales-pipeline": "node --test tests/sales-pipeline.test.js",
|
|
476
506
|
"test:billing": "node --test tests/billing.test.js tests/stripe-sync-product-images.test.js",
|
|
477
507
|
"test:cli": "node --test tests/analytics-report.test.js tests/agent-design-governance.test.js tests/codex-self-heal.test.js tests/creator-campaigns.test.js tests/cli.test.js tests/codex-bridge-script.test.js tests/dependabot-changeset.test.js tests/dispatch-brief.test.js tests/feedback-normalize.test.js tests/install-mcp.test.js tests/install-scope-docs.test.js tests/pr-manager.test.js tests/pro-local-dashboard.test.js tests/published-cli.test.js tests/revenue-status.test.js tests/stripe-live-status.test.js tests/creator-dev-and-prune.test.js",
|
|
478
508
|
"test:evolution": "node --test tests/workspace-evolver.test.js",
|
|
479
509
|
"test:watcher": "node --test tests/jsonl-watcher.test.js",
|
|
480
510
|
"test:autoresearch": "node --test tests/autoresearch.test.js",
|
|
481
|
-
"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",
|
|
511
|
+
"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",
|
|
482
512
|
"test:session-analyzer": "node --test tests/session-analyzer.test.js",
|
|
483
513
|
"test:tessl": "node --test tests/tessl-export.test.js",
|
|
484
514
|
"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",
|
|
@@ -558,6 +588,7 @@
|
|
|
558
588
|
"test:funnel-invariants": "node --test tests/funnel-invariants.test.js",
|
|
559
589
|
"test:cli-telemetry": "node --test tests/cli-telemetry.test.js",
|
|
560
590
|
"test:pro-parity": "node --test tests/pro-parity.test.js",
|
|
591
|
+
"test:pricing-page-telemetry": "node --test tests/pricing-page-telemetry.test.js",
|
|
561
592
|
"test:skill-exporter": "node --test tests/skill-exporter.test.js",
|
|
562
593
|
"test:model-tier-router": "node --test tests/model-tier-router.test.js",
|
|
563
594
|
"test:computer-use-firewall": "node --test tests/computer-use-firewall.test.js",
|
|
@@ -610,7 +641,6 @@
|
|
|
610
641
|
"social:dedupe:cleanup": "node scripts/social-analytics/cleanup-zernio-duplicates.js",
|
|
611
642
|
"test:install-growth-automation": "node --test tests/install-growth-automation.test.js",
|
|
612
643
|
"test:publish-thumbgate-launch": "node --test tests/publish-thumbgate-launch.test.js",
|
|
613
|
-
"test:community-course-platform-launch-kit": "node --test tests/community-course-platform-launch-kit.test.js",
|
|
614
644
|
"test:reconcile-thumbgate-campaign": "node --test tests/reconcile-thumbgate-campaign.test.js",
|
|
615
645
|
"test:schedule-thumbgate-campaign": "node --test tests/schedule-thumbgate-campaign.test.js",
|
|
616
646
|
"test:social-reply-monitor": "node --test tests/social-reply-monitor.test.js tests/reddit-monitor-launchd.test.js",
|
|
@@ -661,7 +691,6 @@
|
|
|
661
691
|
"test:explore": "node --test tests/explore.test.js",
|
|
662
692
|
"test:cli-schema": "node --test tests/cli-schema.test.js",
|
|
663
693
|
"test:cli-agent-experience": "node --test tests/cli-agent-experience.test.js",
|
|
664
|
-
"test:demo-voiceover": "node --test tests/demo-voiceover.test.js",
|
|
665
694
|
"test:gate-coherence": "node --test tests/gate-coherence.test.js",
|
|
666
695
|
"test:gate-eval": "node --test tests/gate-eval.test.js",
|
|
667
696
|
"gate-eval:ci": "node scripts/gate-eval.js run",
|
|
@@ -704,6 +733,7 @@
|
|
|
704
733
|
"test:install-shim": "node --test tests/install-shim.test.js",
|
|
705
734
|
"test:hook-runtime-subcommands": "node --test tests/hook-runtime-subcommands.test.js",
|
|
706
735
|
"test:implementation-notes": "node --test tests/implementation-notes.test.js",
|
|
736
|
+
"test:public-repo-hygiene": "node --test tests/public-repo-hygiene.test.js",
|
|
707
737
|
"test:daily-block-cap": "node --test tests/daily-block-cap.test.js",
|
|
708
738
|
"test:free-to-paid-conversion-units": "node --test tests/free-to-paid-conversion-units.test.js",
|
|
709
739
|
"test:metrics-real-endpoint": "node --test tests/metrics-real-endpoint.test.js",
|
|
@@ -715,12 +745,17 @@
|
|
|
715
745
|
"test:pricing-page-clickability": "playwright test tests/e2e/pricing-page-clickability.spec.js",
|
|
716
746
|
"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",
|
|
717
747
|
"build:grok-plugin": "node scripts/build-grok-plugin.js",
|
|
718
|
-
"promote:launch": "node scripts/x-autonomous-marketing.js",
|
|
719
748
|
"feedback:ingest": "node scripts/ingest-manual-feedback.js",
|
|
720
749
|
"verify-proof": "node scripts/require-proof.js",
|
|
721
750
|
"test:mcp-oauth-reviewer": "node --test tests/mcp-oauth-reviewer.test.js",
|
|
722
751
|
"test:dashboard-chat": "node --test tests/dashboard-chat.test.js",
|
|
723
|
-
"test:gitar-integration": "node --test tests/gitar-integration.test.js"
|
|
752
|
+
"test:gitar-integration": "node --test tests/gitar-integration.test.js",
|
|
753
|
+
"test:api": "node --test --test-concurrency=1 tests/api-server.test.js tests/api-events-sse.test.js tests/api-auth-config.test.js tests/mcp-server.test.js tests/adapters.test.js tests/openapi-parity.test.js tests/budget-guard.test.js tests/context-manager.test.js tests/contextfs.test.js tests/job-api.test.js tests/pack-templates.test.js tests/dashboard.test.js tests/dashboard-render-spec.test.js tests/dashboard-html.test.js tests/agent-readiness.test.js tests/mcp-policy.test.js tests/subagent-profiles.test.js tests/intent-router.test.js tests/internal-agent-bootstrap.test.js tests/lesson-search.test.js tests/thumbgate-search.test.js tests/document-intake.test.js tests/rubric-engine.test.js tests/self-healing-check.test.js tests/self-heal.test.js tests/feedback-schema.test.js tests/thompson-sampling.test.js tests/feedback-sequences.test.js tests/diversity-tracking.test.js tests/vector-store.test.js tests/gemini-embedding-policy.test.js tests/feedback-attribution.test.js tests/hybrid-feedback-context.test.js tests/loop-closure.test.js tests/code-reasoning.test.js tests/feedback-loop.test.js tests/feedback-inbox-read.test.js tests/feedback-to-memory.test.js tests/test-coverage.test.js tests/version-metadata.test.js tests/claude-mcpb.test.js tests/claude-codex-bridge.test.js tests/cursor-plugin.test.js tests/codex-plugin.test.js tests/ide-marketplace-extensions.test.js tests/telemetry-analytics.test.js tests/public-landing.test.js tests/lessons-page.test.js tests/pro-landing.test.js tests/local-model-profile.test.js tests/risk-scorer.test.js tests/context-compaction.test.js tests/reminder-engine.test.js tests/verification-loop.test.js tests/async-job-runner.test.js tests/commerce-quality.test.js tests/recall-limit.test.js tests/problem-detail.test.js tests/natural-language-harness.test.js tests/settings-hierarchy.test.js tests/classifier-routing.test.js",
|
|
754
|
+
"test:leak-scanner": "node --test tests/leak-scanner.test.js",
|
|
755
|
+
"test:tool-contract-validator": "node --test tests/tool-contract-validator.test.js",
|
|
756
|
+
"test:letta-adapter": "node --test tests/letta-adapter.test.js",
|
|
757
|
+
"eval:observability": "node scripts/async-eval-observability.js",
|
|
758
|
+
"test:async-eval-observability": "node --test tests/async-eval-observability.test.js"
|
|
724
759
|
},
|
|
725
760
|
"keywords": [
|
|
726
761
|
"mcp",
|
|
@@ -775,21 +810,28 @@
|
|
|
775
810
|
"node": ">=18.18.0"
|
|
776
811
|
},
|
|
777
812
|
"dependencies": {
|
|
778
|
-
"@anthropic-ai/sdk": "0.
|
|
779
|
-
"@google/genai": "
|
|
813
|
+
"@anthropic-ai/sdk": "0.102.0",
|
|
814
|
+
"@google/genai": "2.7.0",
|
|
780
815
|
"@huggingface/transformers": "^4.2.0",
|
|
781
|
-
"@lancedb/lancedb": "^0.
|
|
816
|
+
"@lancedb/lancedb": "^0.30.0",
|
|
782
817
|
"apache-arrow": "^18.1.0",
|
|
783
818
|
"better-sqlite3": "^12.9.0",
|
|
784
819
|
"dotenv": "^17.4.2",
|
|
785
820
|
"playwright-core": "^1.59.1",
|
|
786
|
-
"protobufjs": "^8.
|
|
787
|
-
"stripe": "^22.0
|
|
821
|
+
"protobufjs": "^8.5.0",
|
|
822
|
+
"stripe": "^22.2.0"
|
|
788
823
|
},
|
|
789
824
|
"overrides": {
|
|
825
|
+
"@google/genai": {
|
|
826
|
+
"protobufjs": "7.6.4"
|
|
827
|
+
},
|
|
828
|
+
"onnxruntime-web": {
|
|
829
|
+
"protobufjs": "7.6.4"
|
|
830
|
+
},
|
|
790
831
|
"express@4.22.1": {
|
|
791
832
|
"path-to-regexp": "0.1.13"
|
|
792
|
-
}
|
|
833
|
+
},
|
|
834
|
+
"js-yaml": "4.2.0"
|
|
793
835
|
},
|
|
794
836
|
"mcpName": "io.github.IgorGanapolsky/thumbgate",
|
|
795
837
|
"devDependencies": {
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<meta charset="UTF-8">
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
6
|
<title>ThumbGate for the Agent Manager — Pre-Action Checks for Claude Code, Cursor, Codex</title>
|
|
7
|
-
<script defer data-domain="thumbgate
|
|
7
|
+
<script defer data-domain="thumbgate.ai" src="https://plausible.io/js/script.js"></script>
|
|
8
8
|
<meta name="description" content="Anthropic named the role that owns enterprise Claude Code: the Agent Manager. ThumbGate is the pre-action enforcement layer underneath CLAUDE.md, the plugin marketplace, permissions policy, and which skills ship.">
|
|
9
9
|
<meta property="og:title" content="ThumbGate for the Agent Manager">
|
|
10
10
|
<meta property="og:description" content="The role Anthropic named — Agent Manager — owns CLAUDE.md, the plugin marketplace, permissions, and which skills ship. ThumbGate is the runtime underneath all of that.">
|
|
@@ -28,6 +28,46 @@
|
|
|
28
28
|
]
|
|
29
29
|
}
|
|
30
30
|
</script>
|
|
31
|
+
<script type="application/ld+json">
|
|
32
|
+
{
|
|
33
|
+
"@context": "https://schema.org",
|
|
34
|
+
"@type": "FAQPage",
|
|
35
|
+
"mainEntity": [
|
|
36
|
+
{
|
|
37
|
+
"@type": "Question",
|
|
38
|
+
"name": "What is the Agent Manager role?",
|
|
39
|
+
"acceptedAnswer": {
|
|
40
|
+
"@type": "Answer",
|
|
41
|
+
"text": "Anthropic named it: the Agent Manager is a hybrid PM/engineer single DRI who owns the Claude Code configuration every developer in the org actually feels — the CLAUDE.md hierarchy, the plugin marketplace, the permissions policy, and which skills ship — and is responsible for keeping them current. Without that role, enterprise Claude Code rollouts stall in phase two; with it, the model improving is no longer the bottleneck."
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"@type": "Question",
|
|
46
|
+
"name": "How does ThumbGate help the Agent Manager?",
|
|
47
|
+
"acceptedAnswer": {
|
|
48
|
+
"@type": "Answer",
|
|
49
|
+
"text": "ThumbGate is the pre-action enforcement layer underneath what the role owns. It runs PreToolUse hooks at the tool-call boundary, auto-distills prevention rules from real thumbs-down feedback and writes them into CLAUDE.md, provides an org-wide rule library and hosted dashboard, and keeps an adapter matrix current as Claude Code, Cursor, and Codex change — so the role does not have to be the operator themselves. Each block carries the rule that fired and the evidence that triggered it, so the agent can choose a safer plan."
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"@type": "Question",
|
|
54
|
+
"name": "Is ThumbGate free for the Agent Manager to start?",
|
|
55
|
+
"acceptedAnswer": {
|
|
56
|
+
"@type": "Answer",
|
|
57
|
+
"text": "Yes. npx thumbgate init in one repo is free and MIT licensed, and the gates work locally without a hosted account. The paid tier adds the hosted dashboard, the org-wide rule library, DPO/HuggingFace export, and 24x7 ops on the adapter matrix — the operational work the role would otherwise have to do itself."
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"@type": "Question",
|
|
62
|
+
"name": "Which AI coding agents does ThumbGate cover for an enterprise rollout?",
|
|
63
|
+
"acceptedAnswer": {
|
|
64
|
+
"@type": "Answer",
|
|
65
|
+
"text": "Claude Code, Cursor, Codex, Gemini, Amp, Cline, and OpenCode. One install wires every supported agent, and each adapter is version-pinned and CI-checked against the upstream runtime, so a breaking change to a hook or plugin API does not stall the rollout for a quarter."
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
]
|
|
69
|
+
}
|
|
70
|
+
</script>
|
|
31
71
|
<style>
|
|
32
72
|
*, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }
|
|
33
73
|
:root { --bg:#0a0a0b; --card:#161618; --border:#222225; --text:#e8e8ec; --muted:#8b8b94; --cyan:#22d3ee; }
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<meta charset="UTF-8">
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
6
|
<title>FinOps for AI Agents — ThumbGate prevents the spend FinOps tools just report on</title>
|
|
7
|
-
<script defer data-domain="thumbgate
|
|
7
|
+
<script defer data-domain="thumbgate.ai" src="https://plausible.io/js/script.js"></script>
|
|
8
8
|
<meta name="description" content="Most FinOps platforms report on AI agent spend after it happens. ThumbGate is the runtime layer that prevents the wasted tool calls in the first place — and prints the dollar amount you saved.">
|
|
9
9
|
<meta property="og:title" content="FinOps for AI Agents — Prevention, Not Reporting">
|
|
10
10
|
<meta property="og:description" content="Cost dashboards tell you what your agents wasted last week. ThumbGate's PreToolUse gates stop the wasted tool calls before they fire — and `thumbgate cost` shows you the dollar amount.">
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<meta charset="UTF-8">
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
6
|
<title>Pre-Execution Controls for Legal AI Agents - ThumbGate</title>
|
|
7
|
-
<script defer data-domain="thumbgate
|
|
7
|
+
<script defer data-domain="thumbgate.ai" src="https://plausible.io/js/script.js"></script>
|
|
8
8
|
<meta name="description" content="Pre-execution controls for law-firm AI agents: block unauthorized advice, conflict-check failures, privilege leaks, and unapproved model calls before an agent acts.">
|
|
9
9
|
<meta property="og:title" content="Pre-Execution Controls for Legal AI Agents">
|
|
10
10
|
<meta property="og:description" content="ThumbGate preloads firm-approved ground truth, checks legal AI actions before execution, and records audit evidence for law-firm innovation, risk, and pricing teams.">
|
|
@@ -813,5 +813,6 @@
|
|
|
813
813
|
<p>ThumbGate is a software control layer, not legal advice. This page is intended for pilot scoping with law-firm innovation, technology, risk, and pricing teams. Final policy choices should be reviewed by the firm's attorneys and security team.</p>
|
|
814
814
|
</footer>
|
|
815
815
|
</div>
|
|
816
|
+
<script src="/js/buyer-intent.js"></script>
|
|
816
817
|
</body>
|
|
817
818
|
</html>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" role="img" aria-labelledby="tg-inline-title tg-inline-desc">
|
|
2
|
+
<title id="tg-inline-title">ThumbGate</title>
|
|
3
|
+
<desc id="tg-inline-desc">ThumbGate TG gate monogram, transparent background for inline use in site headers.</desc>
|
|
4
|
+
<defs>
|
|
5
|
+
<linearGradient id="tg-inline-frame" x1="8" y1="8" x2="56" y2="56" gradientUnits="userSpaceOnUse">
|
|
6
|
+
<stop offset="0" stop-color="#8cf5d1"/>
|
|
7
|
+
<stop offset="1" stop-color="#22d3ee"/>
|
|
8
|
+
</linearGradient>
|
|
9
|
+
</defs>
|
|
10
|
+
<rect x="4" y="4" width="56" height="56" rx="14" fill="#061015"/>
|
|
11
|
+
<rect x="9" y="9" width="46" height="46" rx="12" fill="#0b1820" stroke="url(#tg-inline-frame)" stroke-width="3.5"/>
|
|
12
|
+
<path d="M19 44V25c0-5.5 4.5-10 10-10h6c5.5 0 10 4.5 10 10v19" fill="none" stroke="#8cf5d1" stroke-width="4.5" stroke-linecap="round" stroke-linejoin="round"/>
|
|
13
|
+
<text x="32" y="39" text-anchor="middle" fill="#e7fbff" font-family="Inter, -apple-system, BlinkMacSystemFont, Segoe UI, Arial, sans-serif" font-size="19" font-weight="900">TG</text>
|
|
14
|
+
<rect x="18" y="44" width="28" height="4" rx="2" fill="#22d3ee"/>
|
|
15
|
+
</svg>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" role="img" aria-labelledby="title desc">
|
|
2
|
+
<title id="title">ThumbGate Pro mark</title>
|
|
3
|
+
<desc id="desc">ThumbGate TG gate monogram with a gold Pro ribbon badge.</desc>
|
|
4
|
+
<defs>
|
|
5
|
+
<linearGradient id="tg-frame-pro" x1="96" y1="96" x2="416" y2="416" gradientUnits="userSpaceOnUse">
|
|
6
|
+
<stop offset="0" stop-color="#8cf5d1"/>
|
|
7
|
+
<stop offset="1" stop-color="#22d3ee"/>
|
|
8
|
+
</linearGradient>
|
|
9
|
+
<linearGradient id="pro-ribbon" x1="312" y1="48" x2="472" y2="144" gradientUnits="userSpaceOnUse">
|
|
10
|
+
<stop offset="0" stop-color="#fbbf24"/>
|
|
11
|
+
<stop offset="1" stop-color="#f59e0b"/>
|
|
12
|
+
</linearGradient>
|
|
13
|
+
</defs>
|
|
14
|
+
<rect width="512" height="512" rx="112" fill="#061015"/>
|
|
15
|
+
<rect x="78" y="78" width="356" height="356" rx="84" fill="#0b1820" stroke="url(#tg-frame-pro)" stroke-width="18"/>
|
|
16
|
+
<path d="M146 354V192c0-36 29-65 65-65h90c36 0 65 29 65 65v162" fill="none" stroke="#8cf5d1" stroke-width="28" stroke-linecap="round" stroke-linejoin="round"/>
|
|
17
|
+
<text x="256" y="310" text-anchor="middle" fill="#e7fbff" font-family="Inter, -apple-system, BlinkMacSystemFont, Segoe UI, Arial, sans-serif" font-size="132" font-weight="900" letter-spacing="-8">TG</text>
|
|
18
|
+
<rect x="140" y="344" width="232" height="28" rx="14" fill="#22d3ee"/>
|
|
19
|
+
<g transform="translate(296 40)">
|
|
20
|
+
<path d="M0 0 H176 V84 L156 66 L136 84 L116 66 L96 84 L76 66 L56 84 L36 66 L16 84 L0 66 Z" fill="url(#pro-ribbon)"/>
|
|
21
|
+
<text x="88" y="54" text-anchor="middle" fill="#1a1305" font-family="Inter, -apple-system, BlinkMacSystemFont, Segoe UI, Arial, sans-serif" font-size="44" font-weight="900" letter-spacing="4">PRO</text>
|
|
22
|
+
</g>
|
|
23
|
+
</svg>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" role="img" aria-labelledby="title desc">
|
|
2
|
+
<title id="title">ThumbGate Team mark</title>
|
|
3
|
+
<desc id="desc">ThumbGate TG gate monogram with a violet Team badge and three stacked member glyphs.</desc>
|
|
4
|
+
<defs>
|
|
5
|
+
<linearGradient id="tg-frame-team" x1="96" y1="96" x2="416" y2="416" gradientUnits="userSpaceOnUse">
|
|
6
|
+
<stop offset="0" stop-color="#8cf5d1"/>
|
|
7
|
+
<stop offset="1" stop-color="#22d3ee"/>
|
|
8
|
+
</linearGradient>
|
|
9
|
+
<linearGradient id="team-badge" x1="296" y1="40" x2="472" y2="136" gradientUnits="userSpaceOnUse">
|
|
10
|
+
<stop offset="0" stop-color="#a78bfa"/>
|
|
11
|
+
<stop offset="1" stop-color="#7c3aed"/>
|
|
12
|
+
</linearGradient>
|
|
13
|
+
</defs>
|
|
14
|
+
<rect width="512" height="512" rx="112" fill="#061015"/>
|
|
15
|
+
<rect x="78" y="78" width="356" height="356" rx="84" fill="#0b1820" stroke="url(#tg-frame-team)" stroke-width="18"/>
|
|
16
|
+
<path d="M146 354V192c0-36 29-65 65-65h90c36 0 65 29 65 65v162" fill="none" stroke="#8cf5d1" stroke-width="28" stroke-linecap="round" stroke-linejoin="round"/>
|
|
17
|
+
<text x="256" y="310" text-anchor="middle" fill="#e7fbff" font-family="Inter, -apple-system, BlinkMacSystemFont, Segoe UI, Arial, sans-serif" font-size="132" font-weight="900" letter-spacing="-8">TG</text>
|
|
18
|
+
<rect x="140" y="344" width="232" height="28" rx="14" fill="#22d3ee"/>
|
|
19
|
+
<g transform="translate(296 40)">
|
|
20
|
+
<rect x="0" y="0" width="176" height="84" rx="42" fill="url(#team-badge)"/>
|
|
21
|
+
<circle cx="34" cy="42" r="12" fill="#ede9fe"/>
|
|
22
|
+
<circle cx="58" cy="42" r="12" fill="#ede9fe"/>
|
|
23
|
+
<circle cx="82" cy="42" r="12" fill="#ede9fe"/>
|
|
24
|
+
<text x="130" y="54" text-anchor="middle" fill="#1e1033" font-family="Inter, -apple-system, BlinkMacSystemFont, Segoe UI, Arial, sans-serif" font-size="28" font-weight="900" letter-spacing="2">TEAM</text>
|
|
25
|
+
</g>
|
|
26
|
+
</svg>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" role="img" aria-labelledby="title desc">
|
|
2
|
+
<title id="title">ThumbGate mark</title>
|
|
3
|
+
<desc id="desc">A crisp TG gate monogram for ThumbGate.</desc>
|
|
4
|
+
<defs>
|
|
5
|
+
<linearGradient id="tg-frame" x1="96" y1="96" x2="416" y2="416" gradientUnits="userSpaceOnUse">
|
|
6
|
+
<stop offset="0" stop-color="#8cf5d1"/>
|
|
7
|
+
<stop offset="1" stop-color="#22d3ee"/>
|
|
8
|
+
</linearGradient>
|
|
9
|
+
</defs>
|
|
10
|
+
<rect width="512" height="512" rx="112" fill="#061015"/>
|
|
11
|
+
<rect x="78" y="78" width="356" height="356" rx="84" fill="#0b1820" stroke="url(#tg-frame)" stroke-width="18"/>
|
|
12
|
+
<path d="M146 354V192c0-36 29-65 65-65h90c36 0 65 29 65 65v162" fill="none" stroke="#8cf5d1" stroke-width="28" stroke-linecap="round" stroke-linejoin="round"/>
|
|
13
|
+
<text x="256" y="310" text-anchor="middle" fill="#e7fbff" font-family="Inter, -apple-system, BlinkMacSystemFont, Segoe UI, Arial, sans-serif" font-size="132" font-weight="900" letter-spacing="-8">TG</text>
|
|
14
|
+
<rect x="140" y="344" width="232" height="28" rx="14" fill="#22d3ee"/>
|
|
15
|
+
</svg>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 360" role="img" aria-labelledby="title desc">
|
|
2
|
+
<title id="title">ThumbGate wordmark</title>
|
|
3
|
+
<desc id="desc">ThumbGate wordmark with the TG gate monogram.</desc>
|
|
4
|
+
<defs>
|
|
5
|
+
<linearGradient id="tg-frame" x1="47" y1="47" x2="205" y2="205" gradientUnits="userSpaceOnUse">
|
|
6
|
+
<stop offset="0" stop-color="#8cf5d1"/>
|
|
7
|
+
<stop offset="1" stop-color="#22d3ee"/>
|
|
8
|
+
</linearGradient>
|
|
9
|
+
</defs>
|
|
10
|
+
<rect width="1200" height="360" rx="56" fill="#ffffff"/>
|
|
11
|
+
<g transform="translate(54 54)">
|
|
12
|
+
<rect width="252" height="252" rx="56" fill="#061015"/>
|
|
13
|
+
<rect x="39" y="39" width="174" height="174" rx="41" fill="#0b1820" stroke="url(#tg-frame)" stroke-width="9"/>
|
|
14
|
+
<path d="M72 174V95c0-18 14-32 32-32h44c18 0 32 14 32 32v79" fill="none" stroke="#8cf5d1" stroke-width="14" stroke-linecap="round" stroke-linejoin="round"/>
|
|
15
|
+
<text x="126" y="152" text-anchor="middle" fill="#e7fbff" font-family="Inter, -apple-system, BlinkMacSystemFont, Segoe UI, Arial, sans-serif" font-size="66" font-weight="900" letter-spacing="-4">TG</text>
|
|
16
|
+
<rect x="69" y="169" width="114" height="14" rx="7" fill="#22d3ee"/>
|
|
17
|
+
</g>
|
|
18
|
+
<text x="356" y="176" fill="#061015" font-family="Inter, -apple-system, BlinkMacSystemFont, Segoe UI, Arial, sans-serif" font-size="86" font-weight="800" letter-spacing="0">ThumbGate</text>
|
|
19
|
+
<text x="360" y="230" fill="#475569" font-family="Inter, -apple-system, BlinkMacSystemFont, Segoe UI, Arial, sans-serif" font-size="32" font-weight="600" letter-spacing="0">Pre-Action Checks for AI coding agents</text>
|
|
20
|
+
</svg>
|