thumbgate 1.27.18 → 1.27.19

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.
Files changed (96) hide show
  1. package/.claude-plugin/marketplace.json +6 -6
  2. package/.claude-plugin/plugin.json +4 -3
  3. package/.well-known/agentic-verify.txt +1 -0
  4. package/.well-known/llms.txt +33 -12
  5. package/.well-known/mcp/server-card.json +8 -8
  6. package/README.md +249 -30
  7. package/adapters/chatgpt/openapi.yaml +12 -0
  8. package/adapters/claude/.mcp.json +2 -2
  9. package/adapters/codex/config.toml +2 -2
  10. package/adapters/gemini/function-declarations.json +1 -0
  11. package/adapters/mcp/server-stdio.js +263 -11
  12. package/adapters/opencode/opencode.json +1 -1
  13. package/bench/thumbgate-bench.json +2 -2
  14. package/bin/cli.js +1429 -121
  15. package/bin/postinstall.js +1 -8
  16. package/config/gate-classifier-routing.json +98 -0
  17. package/config/gate-templates.json +216 -0
  18. package/config/gates/claim-verification.json +12 -0
  19. package/config/gates/default.json +31 -2
  20. package/config/github-about.json +2 -2
  21. package/config/mcp-allowlists.json +23 -13
  22. package/config/merge-quality-checks.json +0 -1
  23. package/config/model-candidates.json +121 -6
  24. package/config/post-deploy-marketing-pages.json +80 -0
  25. package/config/tessl-tiles.json +1 -3
  26. package/openapi/openapi.yaml +12 -0
  27. package/package.json +1 -1
  28. package/public/blog.html +4 -4
  29. package/public/codex-plugin.html +72 -20
  30. package/public/compare.html +31 -8
  31. package/public/dashboard.html +930 -166
  32. package/public/federal.html +2 -2
  33. package/public/guide.html +33 -13
  34. package/public/index.html +469 -111
  35. package/public/learn.html +183 -18
  36. package/public/lessons.html +168 -10
  37. package/public/numbers.html +7 -7
  38. package/public/pro.html +34 -11
  39. package/scripts/agent-memory-lifecycle.js +211 -0
  40. package/scripts/agent-readiness.js +20 -3
  41. package/scripts/agent-reward-model.js +53 -1
  42. package/scripts/auto-promote-gates.js +82 -10
  43. package/scripts/auto-wire-hooks.js +14 -0
  44. package/scripts/billing.js +93 -1
  45. package/scripts/bot-detection.js +61 -3
  46. package/scripts/build-metadata.js +50 -10
  47. package/scripts/cli-feedback.js +4 -2
  48. package/scripts/cli-schema.js +97 -0
  49. package/scripts/cli-telemetry.js +6 -1
  50. package/scripts/commercial-offer.js +82 -2
  51. package/scripts/context-manager.js +74 -6
  52. package/scripts/dashboard.js +68 -2
  53. package/scripts/export-databricks-bundle.js +5 -1
  54. package/scripts/export-dpo-pairs.js +7 -2
  55. package/scripts/feedback-loop.js +123 -1
  56. package/scripts/feedback-quality.js +87 -0
  57. package/scripts/filesystem-search.js +35 -10
  58. package/scripts/gate-stats.js +89 -0
  59. package/scripts/gates-engine.js +1176 -85
  60. package/scripts/gemini-embedding-policy.js +2 -1
  61. package/scripts/hook-runtime.js +20 -14
  62. package/scripts/hook-thumbgate-cache-updater.js +18 -2
  63. package/scripts/hybrid-feedback-context.js +142 -7
  64. package/scripts/lesson-inference.js +8 -3
  65. package/scripts/lesson-search.js +17 -1
  66. package/scripts/license.js +10 -10
  67. package/scripts/llm-client.js +169 -4
  68. package/scripts/local-model-profile.js +15 -8
  69. package/scripts/mcp-config.js +7 -1
  70. package/scripts/memory-scope-readiness.js +159 -0
  71. package/scripts/meta-agent-loop.js +36 -0
  72. package/scripts/operational-integrity.js +39 -5
  73. package/scripts/oss-pr-opportunity-scout.js +35 -5
  74. package/scripts/plausible-server-events.js +9 -6
  75. package/scripts/pro-local-dashboard.js +4 -4
  76. package/scripts/proxy-pointer-rag-guardrails.js +42 -1
  77. package/scripts/published-cli.js +0 -8
  78. package/scripts/rate-limiter.js +64 -13
  79. package/scripts/secret-scanner.js +44 -5
  80. package/scripts/security-scanner.js +260 -10
  81. package/scripts/self-distill-agent.js +3 -1
  82. package/scripts/seo-gsd.js +916 -7
  83. package/scripts/statusline-cache-path.js +17 -2
  84. package/scripts/statusline-local-stats.js +9 -1
  85. package/scripts/statusline-meta.js +28 -2
  86. package/scripts/statusline.sh +20 -4
  87. package/scripts/telemetry-analytics.js +357 -0
  88. package/scripts/thompson-sampling.js +31 -10
  89. package/scripts/thumbgate-bench.js +16 -1
  90. package/scripts/thumbgate-search.js +85 -19
  91. package/scripts/tool-registry.js +169 -1
  92. package/scripts/vector-store.js +45 -0
  93. package/scripts/workflow-sentinel.js +286 -53
  94. package/scripts/workspace-evolver.js +62 -2
  95. package/src/api/server.js +2683 -319
  96. package/scripts/bot-detector.js +0 -50
@@ -1,50 +0,0 @@
1
- 'use strict';
2
-
3
- const BOT_PATTERNS = [
4
- /bot/i, /crawl/i, /spider/i, /slurp/i, /mediapartners/i,
5
- /Googlebot/i, /Bingbot/i, /DuckDuckBot/i, /Baiduspider/i,
6
- /YandexBot/i, /facebookexternalhit/i, /Twitterbot/i,
7
- /LinkedInBot/i, /WhatsApp/i, /Discordbot/i, /TelegramBot/i,
8
- /Applebot/i, /PetalBot/i, /SemrushBot/i, /AhrefsBot/i,
9
- /MJ12bot/i, /DotBot/i, /Bytespider/i,
10
- /GPTBot/i, /ChatGPT/i, /Claude-SearchBot/i, /Anthropic/i, /Perplexity/i,
11
- /Google-Extended/i, /CCBot/i, /cohere-ai/i,
12
- /HeadlessChrome/i, /PhantomJS/i, /Puppeteer/i, /Playwright/i,
13
- /python-requests/i, /node-fetch/i, /wget/i,
14
- /Scrapy/i, /HttpClient/i, /Go-http-client/i,
15
- /UptimeRobot/i, /Pingdom/i, /StatusCake/i,
16
- ];
17
-
18
- const OWNER_EMAILS = ['iganapolsky@gmail.com', 'ig5973700@gmail.com'];
19
-
20
- function classifyVisitor(req) {
21
- const ua = (req.headers && req.headers['user-agent']) || '';
22
- const email = req.email || (req.query && req.query.email) || '';
23
-
24
- for (const pattern of BOT_PATTERNS) {
25
- if (pattern.test(ua)) {
26
- return { type: 'bot', reason: `UA matches: ${pattern}`, userAgent: ua };
27
- }
28
- }
29
- if (!ua || ua.length < 10) {
30
- return { type: 'bot', reason: 'Empty or short user-agent', userAgent: ua };
31
- }
32
- for (const ownerEmail of OWNER_EMAILS) {
33
- if (email && email.toLowerCase().includes(ownerEmail.toLowerCase())) {
34
- return { type: 'owner', reason: `Email matches: ${ownerEmail}`, userAgent: ua };
35
- }
36
- }
37
- return { type: 'real_user', reason: 'No bot pattern matched', userAgent: ua };
38
- }
39
-
40
- function shouldExcludeFromAnalytics(req) {
41
- const classification = req.visitorClass || classifyVisitor(req);
42
- return classification.type === 'bot';
43
- }
44
-
45
- function botFilterMiddleware(req, res, next) {
46
- req.visitorClass = classifyVisitor(req);
47
- next();
48
- }
49
-
50
- module.exports = { classifyVisitor, botFilterMiddleware, shouldExcludeFromAnalytics, BOT_PATTERNS, OWNER_EMAILS };