Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
grubcrawler — दुनिया का सबसे तेज़ एजेंटिक क्रॉलर। पुनः प्राप्त। पुनः आविष्कृत। युद्ध के लिए तैयार। | Kitploit
उपकरण/GitHubGitHub/deepbluedynamics/grubcrawler
OSINT (खुला स्रोत खुफिया)टोहीगतिशील विश्लेषण (सैंडबॉक्सिंग)वेब प्रॉक्सी और अवरोधनजानकारी एकत्र करनावेब सुरक्षापेनिट्रेशन टेस्टिंगउपयोगिताएँ और फ्रेमवर्कमशीन लर्निंगरेड टीमिंगक्रॉलरएंटी-बॉट
34720 दिन पहलेKitploit द्वारा समीक्षित

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें
GitHubdeepbluedynamics/grubcrawler

grubcrawler

दुनिया का सबसे तेज़ एजेंटिक क्रॉलर। पुनः प्राप्त। पुनः आविष्कृत। युद्ध के लिए तैयार।

रिपॉजिटरी देखेंवेबसाइट
Grub Crawler

License Python FastAPI Playwright MCP Ghost Protocol Live Stream Camoufox Proxy


एजेंटिक वेब क्रॉलर जिसमें एंटी-डिटेक्शन, विज़न फ़ॉलबैक, और पीयर-टू-पीयर मेश है।


एंडपॉइंट्स · मेश · एंटी-डिटेक्शन · Ghost Protocol · लाइव स्ट्रीम · MCP टूल्स · त्वरित आरंभ · बेंचमार्क · आर्किटेक्चर


एक फुल-स्टैक वेब क्रॉलिंग इंजन जिसमें JavaScript रेंडरिंग, Camoufox एंटी-डिटेक्ट ब्राउज़र, प्रति-अनुरोध प्रॉक्सी रूटिंग, और स्वायत्त एजेंट लूप्स शामिल हैं। नेटिव Rust एक्सट्रैक्शन इंजन के साथ पृष्ठों को साफ मार्कडाउन में बदलता है। जब Cloudflare, CAPTCHAs या JavaScript वॉल के कारण मानक क्रॉलिंग अवरुद्ध होती है, तो Ghost Protocol एक स्क्रीनशॉट लेता है और विज़न AI (Claude, GPT-4o, या Ollama) के माध्यम से सामग्री निकालता है। एक ही सत्र में OpenAI, Anthropic और Ollama में मल्टी-प्रोवाइडर LLM ऑर्केस्ट्रेशन को सपोर्ट करता है। नोड्स गॉसिप-आधारित पीयर-टू-पीयर मेश पर समन्वय करते हैं।


क्यों Grub

हमने हर प्रमुख क्रॉलर से सुविधाएँ एकीकृत कीं — फिर वह जोड़ा जो किसी के पास नहीं है।

स्व-होस्टेड क्रॉलर

क्लाउड/प्रबंधित क्रॉलर

केवल Grub में Ghost Protocol है — स्वचालित विज़न-आधारित फ़ॉलबैक जो अवरुद्ध पृष्ठों का स्क्रीनशॉट लेता है और जब मानक क्रॉलिंग विफल होती है तो LLM के माध्यम से सामग्री निकालता है। रोकथाम (Camoufox + प्रॉक्सी + स्टील्थ) 95% ब्लॉक को संभालती है। Ghost Protocol बाकी को संभालता है।

एपीआई एंडपॉइंट्स

कोर क्रॉलिंग

एजेंट (मोड B)

जॉब प्रबंधन

रिमोट कैश

सत्र प्रबंधन

लाइव स्ट्रीम

मेश

सिस्टम

MCP टूल्स (grub-crawl.py)

MCP ब्रिज सभी क्षमताओं को किसी भी MCP-संगत होस्ट पर उजागर करता है:

आंतरिक मॉड्यूल

एजेंट कोर (app/agent/)

प्रदाता एडेप्टर (app/agent/providers/)

पॉलिसी गेट्स (app/policy/)

फ़ाइल

अवलोकनीयता (app/observability/)

API परत

एंटी-डिटेक्शन (app/)

फ़ाइलउद्देश्यस्थिति
stealth.pyplaywright-stealth पैचेस, ट्रैकर डोमेन ब्लॉकिंगपूर्ण
proxy.pyenv फ़ॉलबैक के साथ प्रति-अनुरोध प्रॉक्सी समाधानपूर्ण

मेश (app/mesh/)

बुनियादी ढाँचा

एजेंट स्टेट मशीन```

INIT -> PLAN -> EXECUTE_TOOL -> OBSERVE -> PLAN -> ... -> RESPOND -> STOP | | +-- policy_denied ---------------------->+ +-- max_steps / max_wall_time / max_failures -> STOP +-- no_op_loop (3x empty) ------------> STOP +-- blocked (ghost trigger) -----------> GHOST -> OBSERVE

root@kitploit:~
प्रत्येक पुनरावृत्ति पर लागू रोक शर्तें:

- `max_steps` (default: 12)
- `max_wall_time` (default: 90s)
- `max_failures` (default: 3)
- `no_op_loop` (3 लगातार खाली प्रतिक्रियाएँ)
- `policy_denied` (अवरुद्ध उपकरण/डोमेन)
- `completed` (एजेंट टेक्स्ट के साथ प्रतिक्रिया करता है)

## एंटी-डिटेक्शन

तीन एंटी-डिटेक्शन परतें जो एक साथ स्टैक होती हैं। रोकथाम ब्लॉकों को होने से पहले रोकती है। घोस्ट प्रोटोकॉल उन्हें बाद में संभालता है।

### Camoufox Engine

प्लगेबल एंटी-डिटेक्ट ब्राउज़र जिसमें C++-स्तर की फिंगरप्रिंट स्पूफिंग है। कोई मैन्युअल यूज़र-एजेंट ट्रिक्स नहीं — Camoufox ब्राउज़र स्तर पर प्रति संदर्भ यथार्थवादी फिंगरप्रिंट उत्पन्न करता है, जिसमें canvas, WebGL, फ़ॉन्ट्स और navigator प्रॉपर्टीज़ शामिल हैं।```bash
# Switch engine (default: chromium)
BROWSER_ENGINE=camoufox

प्रति-अनुरोध प्रॉक्सी

क्रॉल ट्रैफ़िक को रेज़िडेंशियल, डेटासेंटर, या कस्टम प्रॉक्सी पूल के माध्यम से रूट करें। एनवी-आधारित डिफ़ॉल्ट के साथ प्रति-अनुरोध ओवरराइड। पूर्ण Playwright-संगत प्रॉक्सी कॉन्फ़िगरेशन।```bash

Env-based default

PROXY_SERVER=http://proxy.example.com:10001 PROXY_USERNAME=your_username PROXY_PASSWORD=your_password

Or per-request

curl -X POST http://localhost:6792/api/crawl
-H "Content-Type: application/json"
-d '{ "url": "https://example.com", "options": { "proxy": { "server": "http://proxy.example.com:10001", "username": "your_username", "password": "your_password" } } }'

root@kitploit:~
### गुप्त मोड

ऑप्ट-इन `playwright-stealth` पैच क्रोमियम के लिए (कैमोफॉक्स के लिए छोड़ दिया गया क्योंकि यह उसमें निर्मित है)। 20+ ट्रैकिंग/एनालिटिक्स डोमेन (Google Analytics, DataDome, PerimeterX, आदि) को अवरुद्ध करता है ताकि फिंगरप्रिंट सतह को कम किया जा सके।```bash
STEALTH_ENABLED=true
BLOCK_TRACKING_DOMAINS=true

भूत प्रोटोकॉल

जब क्रॉल परिणाम किसी एंटी-बॉट ब्लॉक (Cloudflare चैलेंज, CAPTCHA, खाली SPA शेल) का संकेत देता है, तो एजेंट क्लोक मोड पर स्विच कर सकता है:

  1. Playwright के माध्यम से पूर्ण-पृष्ठ स्क्रीनशॉट लें
  2. छवि को दृष्टि-सक्षम LLM (Claude Sonnet या GPT-4o) को भेजें
  3. प्रस्तुत पिक्सल से सामग्री निकालें
  4. ट्रेस में render_mode: "ghost" के साथ निकाला गया टेक्स्ट लौटाएं

यह पूरी तरह से DOM-आधारित एंटी-बॉट डिटेक्शन को बायपास करता है।

AGENT_GHOST_ENABLED=true की आवश्यकता है। जब AGENT_GHOST_AUTO_TRIGGER=true होता है, तो पाए गए ब्लॉक पर स्वचालित रूप से ट्रिगर होता है।

मेश

एजेंट एक-दूसरे से बात कर रहे हैं। प्रत्येक Grub इंस्टेंस एक कार्यकर्ता और एक समन्वयक दोनों है। स्थानीय नोड क्लाउड पर ऑफलोड करता है, क्लाउड स्थानीय को प्रतिनिधि कार्य सौंपता है। टूल कॉल पारदर्शी रूप से वायर के पार जाती हैं।``` Node A (local) Node B (cloud) ┌─────────────┐ ┌─────────────┐ │ AgentEngine │ │ AgentEngine │ │ ↓ │ │ ↓ │ │ MeshDispatcher ──── HTTP ────→ MeshDispatcher │ │ ↓ │ │ ↓ │ │ Dispatcher │ │ Dispatcher │ │ ↓ │ │ ↓ │ │ ToolRegistry │ │ ToolRegistry │ └─────────────┘ └─────────────┘ ↕ heartbeat (15s) ↕ └────────────────────────────────┘

root@kitploit:~
**यह कैसे काम करता है:**
- **Discovery** — नोड्स seed peer list के माध्यम से जुड़ते हैं, फिर gossip (1-hop) दूसरों के बारे में जानने के लिए
- **Heartbeat** — हर 15 सेकंड में, नोड्स load metrics का आदान-प्रदान करते हैं। 3 मिस = अस्वस्थ। 2 मिनट = हटा दिया गया
- **Routing** — MeshDispatcher सभी नोड्स को load, locality, और affinity के आधार पर स्कोर करता है, फिर tool calls को सबसे अच्छे नोड पर रूट करता है
- **1-hop max** — नोड A → B ही, कभी A → B → C नहीं। Routing loops को रोकता है
- **Local fallback** — यदि remote execution विफल होता है, तो local Dispatcher पर वापस आ जाता है
- **HMAC auth** — सभी mesh traffic एक shared secret (SHA-256, 60s TTL) के साथ signed होता है

### स्थानीय रूप से 2-Node Mesh चलाएं```bash
# Docker Compose (recommended)
./deploy.sh mesh           # Linux/Mac
./deploy.ps1 -Target mesh  # Windows

# Verify
curl http://localhost:6792/mesh/peers  # Node A sees Node B
curl http://localhost:6793/mesh/peers  # Node B sees Node A

स्थानीय को Cloud Run से कनेक्ट करें```bash

Deploy to Cloud Run with mesh

./deploy.sh cloudrun latest --mesh-peer http://your-local-ip:6792 --mesh-secret mysecret

Start local node

MESH_ENABLED=true MESH_SECRET=mysecret MESH_PEERS=https://your-cloud-run-url
MESH_ADVERTISE_URL=http://your-local-ip:6792
uvicorn app.main:app --port 6792

root@kitploit:~
### मैन्युअल सेटअप```bash
# Node A
MESH_ENABLED=true MESH_NODE_NAME=local MESH_SECRET=test123 \
  MESH_ADVERTISE_URL=http://localhost:6792 \
  uvicorn app.main:app --port 6792

# Node B
MESH_ENABLED=true MESH_NODE_NAME=cloud MESH_SECRET=test123 \
  MESH_PEERS=http://localhost:6792 \
  MESH_ADVERTISE_URL=http://localhost:8081 \
  uvicorn app.main:app --port 8081

जब मेश अक्षम होता है (MESH_ENABLED=false, डिफ़ॉल्ट), तो ग्रब सामान्य एकल-नोड क्रॉलर के रूप में शून्य मेश ओवरहेड के साथ काम करता है।

Live Stream

क्रॉलर को रीयल-टाइम में काम करते हुए देखें। गर्म Chromium इंस्टेंस का एक स्थायी पूल WebSocket या MJPEG पर व्यूपोर्ट फ्रेम स्ट्रीम करता है।

WebSocket — कनेक्ट करें और इंटरैक्टिव कमांड भेजें:```javascript const ws = new WebSocket("ws://localhost:6792/stream/my-session?url=https://example.com"); ws.onmessage = (e) => { const msg = JSON.parse(e.data); if (msg.type === "frame") document.getElementById("viewport").src = "data:image/jpeg;base64," + msg.data; }; // Navigate, click, scroll, type — all over the same socket ws.send(JSON.stringify({ action: "navigate", url: "https://example.com/pricing" })); ws.send(JSON.stringify({ action: "click", selector: "#signup-btn" })); ws.send(JSON.stringify({ action: "scroll", direction: "down" }));

root@kitploit:~
**MJPEG** — इसे `` टैग में डालें, तुरंत वीडियो:```html
<img src="http://localhost:6792/stream/my-session/mjpeg?url=https://example.com" />

BROWSER_STREAM_ENABLED=true आवश्यक है। प्रत्येक Chromium इंस्टेंस लगभग 150-300MB RAM का उपयोग करता है।

त्वरित आरंभ

स्थानीय विकास```bash

git clone cd grub-crawl cp .env.example .env pip install -r requirements.txt uvicorn app.main:app --reload --host 0.0.0.0 --port 6792

root@kitploit:~
### एजेंट मोड B सक्षम करें```bash
# Add to .env
AGENT_ENABLED=true
OPENAI_API_KEY=sk-...
# or
ANTHROPIC_API_KEY=sk-ant-...
AGENT_PROVIDER=anthropic

एजेंट कार्य सबमिट करें```bash

curl -X POST http://localhost:6792/api/agent/run
-H "Content-Type: application/json"
-d '{ "task": "Find the pricing page on example.com and extract plan details", "max_steps": 10, "allowed_domains": ["example.com"] }'

root@kitploit:~
### Docker```bash
# Single node
./deploy.sh local            # or ./deploy.ps1 -Target local

# 2-node mesh
./deploy.sh mesh             # or ./deploy.ps1 -Target mesh

# Cloud Run
./deploy.sh cloudrun v1.0.0  # or ./deploy.ps1 -Target cloudrun -Tag v1.0.0

# Cloud Run + mesh (connect to local node)
./deploy.sh cloudrun v1.0.0 --mesh-peer http://your-ip:6792 --mesh-secret mykey

पता लगाने से बचाव (Camoufox + प्रॉक्सी)```bash

Add to .env

BROWSER_ENGINE=camoufox STEALTH_ENABLED=true BLOCK_TRACKING_DOMAINS=true

Optional: proxy

PROXY_SERVER=http://proxy.example.com:10001 PROXY_USERNAME=your_username PROXY_PASSWORD=your_password

root@kitploit:~
### Ghost Protocol (एंटी-बॉट बाईपास)```bash
# Add to .env
AGENT_GHOST_ENABLED=true

curl -X POST http://localhost:6792/api/agent/ghost \
  -H "Content-Type: application/json" \
  -d '{"url": "https://blocked-site.com"}'

लाइव ब्राउज़र स्ट्रीम```bash

Add to .env

BROWSER_STREAM_ENABLED=true BROWSER_POOL_SIZE=2

MJPEG (open in browser)

open "http://localhost:6792/stream/demo/mjpeg?url=https://example.com"

root@kitploit:~
## कॉन्फ़िगरेशन

### सर्वर
- `HOST` (डिफ़ॉल्ट: 0.0.0.0)
- `PORT` (डिफ़ॉल्ट: 6792)
- `DEBUG` (डिफ़ॉल्ट: false)

### भंडारण
- `STORAGE_PATH` (डिफ़ॉल्ट: ./storage)
- `RUNNING_IN_CLOUD` (डिफ़ॉल्ट: false)
- `GCS_BUCKET_NAME`
- `GOOGLE_CLOUD_PROJECT`

### प्रमाणीकरण
- `DISABLE_AUTH` (डिफ़ॉल्ट: false)
- `GNOSIS_AUTH_URL` (डिफ़ॉल्ट: http://gnosis-auth:5000)

### ब्राउज़र इंजन
- `BROWSER_ENGINE` — chromium | camoufox (डिफ़ॉल्ट: chromium)

### क्रॉलिंग
- `MAX_CONCURRENT_CRAWLS` (डिफ़ॉल्ट: 5)
- `CRAWL_TIMEOUT` (डिफ़ॉल्ट: 30)
- `ENABLE_JAVASCRIPT` (डिफ़ॉल्ट: true)
- `ENABLE_SCREENSHOTS` (डिफ़ॉल्ट: false)

### प्रॉक्सी
- `PROXY_SERVER` — प्रॉक्सी URL (जैसे http://proxy:10001)
- `PROXY_USERNAME`
- `PROXY_PASSWORD`
- `PROXY_BYPASS` — अल्पविराम से अलग बायपास सूची

### स्टील्थ
- `STEALTH_ENABLED` (डिफ़ॉल्ट: false) — playwright-stealth पैच
- `BLOCK_TRACKING_DOMAINS` (डिफ़ॉल्ट: false) — एनालिटिक्स/ट्रैकिंग अनुरोधों को ब्लॉक करें

### एजेंट (मोड B)
- `AGENT_ENABLED` (डिफ़ॉल्ट: false)
- `AGENT_MAX_STEPS` (डिफ़ॉल्ट: 12)
- `AGENT_MAX_WALL_TIME_MS` (डिफ़ॉल्ट: 90000)
- `AGENT_MAX_FAILURES` (डिफ़ॉल्ट: 3)
- `AGENT_ALLOWED_TOOLS` — अल्पविराम से अलग अनुमति सूची
- `AGENT_ALLOWED_DOMAINS` — अल्पविराम से अलग अनुमति सूची
- `AGENT_BLOCK_PRIVATE_RANGES` (डिफ़ॉल्ट: true)
- `AGENT_REDACT_SECRETS` (डिफ़ॉल्ट: true)

### LLM प्रदाता
- `AGENT_PROVIDER` — openai | anthropic | ollama (डिफ़ॉल्ट: openai)
- `OPENAI_API_KEY`
- `OPENAI_MODEL` (डिफ़ॉल्ट: gpt-4.1-mini)
- `ANTHROPIC_API_KEY`
- `ANTHROPIC_MODEL` (डिफ़ॉल्ट: claude-3-5-sonnet-latest)
- `OLLAMA_BASE_URL` (डिफ़ॉल्ट: http://localhost:11434)
- `OLLAMA_MODEL` (डिफ़ॉल्ट: llama3.1:8b-instruct)

### घोस्ट प्रोटोकॉल
- `AGENT_GHOST_ENABLED` (डिफ़ॉल्ट: false)
- `AGENT_GHOST_AUTO_TRIGGER` (डिफ़ॉल्ट: true)
- `AGENT_GHOST_VISION_PROVIDER` — AGENT_PROVIDER से विरासत में मिलता है
- `AGENT_GHOST_MAX_IMAGE_WIDTH` (डिफ़ॉल्ट: 1280)

### मेश
- `MESH_ENABLED` (डिफ़ॉल्ट: false) — मास्टर स्विच
- `MESH_PEERS` — अल्पविराम से अलग सीड पीयर URL
- `MESH_NODE_NAME` — मानव-पठनीय नाम (डिफ़ॉल्ट: होस्टनाम)
- `MESH_SECRET` — इंटर-नोड प्रमाणीकरण के लिए साझा HMAC रहस्य
- `MESH_ADVERTISE_URL` — URL जिसका उपयोग पीयर इस नोड तक पहुंचने के लिए करते हैं
- `MESH_PREFER_LOCAL` (डिफ़ॉल्ट: true) — स्थानीय निष्पादन की ओर झुकाव
- `MESH_HEARTBEAT_INTERVAL_S` (डिफ़ॉल्ट: 15)
- `MESH_PEER_TIMEOUT_S` (डिफ़ॉल्ट: 45) — इसके बाद अस्वस्थ के रूप में चिह्नित करें
- `MESH_PEER_REMOVE_S` (डिफ़ॉल्ट: 120) — इसके बाद पीयर तालिका से हटाएं
- `MESH_REMOTE_TIMEOUT_MS` (डिफ़ॉल्ट: 35000) — रिमोट टूल कॉल के लिए टाइमआउट

### लाइव स्ट्रीम
- `BROWSER_POOL_SIZE` (डिफ़ॉल्ट: 1)
- `BROWSER_STREAM_ENABLED` (डिफ़ॉल्ट: false)
- `BROWSER_STREAM_QUALITY` (डिफ़ॉल्ट: 25) — JPEG गुणवत्ता 1-100
- `BROWSER_STREAM_MAX_WIDTH` (डिफ़ॉल्ट: 854)
- `BROWSER_STREAM_MAX_LEASE_SECONDS` (डिफ़ॉल्ट: 300)

## प्रतिक्रिया अनुबंध

`POST /api/markdown` लौटाता है:

`success`, `url`, `final_url`, `status_code`, `markdown`, `markdown_plain`, `content`, `render_mode`, `wait_strategy`, `timings_ms`, `blocked`, `block_reason`, `captcha_detected`, `http_error_family`, `body_char_count`, `body_word_count`, `visible_char_count`, `visible_word_count`, `visible_similarity`, `quarantined`, `quarantine_reason`, `policy_flags`, `content_quality`, `extractor_version`, `normalized_url`, `content_hash`

### सामग्री गुणवत्ता

- `blocked` — एंटी-बॉट/कैप्चा/चैलेंज
- `empty` — बहुत कम संकेत
- `minimal` — पतले/त्रुटि पृष्ठ
- `sufficient` — सारांशीकरण के लिए उपयोग योग्य

तब तक सारांश न बनाएं जब तक `content_quality == "sufficient"` न हो।

### प्रॉम्प्ट इंजेक्शन रक्षा

- `quarantined=true` का अर्थ है कि एक्सट्रैक्टर ने निकाली गई सामग्री में इंस्ट्रक्शन-जैसा टेक्स्ट पाया जो पृष्ठ के दृश्यमान रेंडर किए गए टेक्स्ट में मौजूद नहीं था (`.sr-only`/दृष्टिगत रूप से छिपे दुरुपयोग में सामान्य)।
- जब quarantine किया जाता है, तो `content_quality` को `minimal` में डाउनग्रेड किया जाता है, `policy_flags` में `hidden_text_suspected` और `quarantined` शामिल होता है, और `content`/`markdown` आउटपुट खाली कर दिए जाते हैं (fail-closed)।

### त्रुटि प्रारूप```json
{"error": "http_error|validation_error|internal_error", "status": 400, "details": {}}

बेंचमार्क

कॉम्बैट एरीना — Crawl4AI, Firecrawl (सेल्फ-होस्टेड), और Scrapy के खिलाफ आमने-सामने के बेंचमार्क। सभी परीक्षण एक ही मशीन, समान यूआरएल, समान स्थितियों पर चलाए गए। Grub पहले बेसलाइन के रूप में चलता है, शेष एडेप्टर यादृच्छिक क्रम में प्रत्येक के बीच 10 सेकंड के अंतराल के साथ चलाए जाते हैं ताकि दर-सीमित पूर्वाग्रह को रोका जा सके।

एकल-यूआरएल गति (ms, कम बेहतर है)

Grub 4/5 एकल-यूआरएल गति दौड़ जीतता है। मार्कडाउन रूपांतरण मूल Rust इंजन (grub_md) के माध्यम से 0-21ms पर चलता है।

Grub चरण विश्लेषण (सर्वर-साइड ms)

नेविगेशन प्रमुख है; Rust इंजन के कारण अधिकांश पृष्ठों पर मार्कडाउन रूपांतरण एक मिलीसेकंड से कम है।

बैच थ्रूपुट (ms, कम बेहतर है)

Grub 2/3 बैच आकार जीतता है। प्रति-यूआरएल लागत: 163-312ms (Grub) बनाम 255-477ms (अन्य)।

कैसे चलाएं```bash

Start Grub

docker compose up -d

Start Firecrawl (optional)

docker compose -f combat/firecrawl-compose.yaml up -d

Install combat deps

pip install crawl4ai scrapy markdownify tabulate

Run the arena

pytest combat/ -m combat -v

Generate report

python -m combat.report

root@kitploit:~
## विकास की स्थिति

### चरण 1: कोर इंफ्रास्ट्रक्चर ✅
### चरण 2: क्रॉलिंग ✅
### चरण 3: एजेंट मॉड्यूल ✅
- [x] एजेंट कोर — स्टेट मशीन, टाइप्स, एरर (W1)
- [x] एकीकृत टूल कॉन्ट्रैक्ट — टाइमआउट/रीट्री के साथ डिस्पैचर (W2)
- [x] पॉलिसी गेट्स — डोमेन अनुमति-सूची, प्राइवेट-रेंज अस्वीकार, रिडक्शन (W3)
- [x] ऑब्ज़र्वबिलिटी — EventBus, TraceCollector, RunSummary पर्सिस्टेंस (W4)
- [x] API वायरिंग — `/api/agent/run`, `/api/agent/status`, JobType.AGENT_RUN (W5)
- [x] प्रोवाइडर एडेप्टर — OpenAI, Anthropic, Ollama फ़ॉलबैक के साथ (W6)
- [x] कॉन्फ़िग फ़्लैग्स — एजेंट, प्रोवाइडर, घोस्ट, स्ट्रीम सेटिंग्स (W7)

### चरण 4: घोस्ट प्रोटोकॉल ✅
- [x] क्लोक-मोड ट्रिगर डिटेक्शन (W8)
- [x] स्क्रीनशॉट कैप्चर पाइपलाइन (W8)
- [x] Claude/GPT-4o के माध्यम से विज़न एक्सट्रैक्शन (W8)
- [x] इंजन में फ़ॉलबैक चेन (W8)
- [x] बाहरी कॉलर्स के लिए घोस्ट टूल (W8)
- [x] घोस्ट MCP टूल + REST एंडपॉइंट (W8)

### चरण 5: लाइव ब्राउज़र स्ट्रीम ✅
- [x] लीज़/रिटर्न के साथ पर्सिस्टेंट ब्राउज़र पूल (W9)
- [x] CDP स्क्रीनकास्ट रिले (W9)
- [x] इंटरैक्टिव कमांड्स के साथ WebSocket एंडपॉइंट (W9)
- [x] MJPEG फ़ॉलबैक स्ट्रीम (W9)
- [x] स्ट्रीम स्थिति + पूल स्थिति एंडपॉइंट (W9)

### चरण 5.5: एंटी-डिटेक्शन ✅
- [x] कैमोफ़ॉक्स एंटी-डिटेक्ट ब्राउज़र इंजन (W10)
- [x] एनवी फ़ॉलबैक के साथ प्रति-अनुरोध प्रॉक्सी (W10)
- [x] क्रोमियम के लिए स्टील्थ पैच (W10)
- [x] ट्रैकर/विश्लेषण डोमेन ब्लॉकिंग (W10)
- [x] एनथ्रोपिक विज़न फ़ॉर्मेट डिटेक्शन फिक्स (W10)

### चरण 6: मेश कोऑर्डिनेटर ✅
- [x] गॉसिप के साथ पीयर डिस्कवरी (1-हॉप) (W11)
- [x] HMAC-SHA256 इंटर-नोड ऑथ (W11)
- [x] लोड मेट्रिक्स + सीड रीट्री के साथ हार्टबीट लूप (W11)
- [x] MeshDispatcher — पारदर्शी क्रॉस-नोड टूल रूटिंग (W12)
- [x] लोड-आधारित स्कोरिंग लोकैलिटी/एफ़िनिटी बोनस के साथ (W12)
- [x] डिप्लॉय स्क्रिप्ट्स — लोकल, मेश, क्लाउड रन (W12)
- [x] Docker Compose 2-नोड मेश टोपोलॉजी (W12)
- [x] एम्बेडेड लैंडिंग पेज (grub-site) (W12)

### चरण 7: प्रदर्शन + सख्तीकरण
- [x] रस्ट मार्कडाउन इंजन (`grub_md`) — PyO3 नेटिव एक्सटेंशन, सब-ms रूपांतरण
- [x] कॉम्बैट एरेना — Crawl4AI, Firecrawl, Scrapy के विरुद्ध स्वचालित बेंचमार्क
- [x] यूनिट टेस्ट सूट — सभी मॉड्यूल में 176 परीक्षण
- [ ] एरर हैंडलिंग में सुधार
- [ ] निगरानी और अलर्टिंग

पूर्ण आर्किटेक्चर योजना के लिए [MASTER_PLAN.md](https://github.com/deepbluedynamics/grubcrawler/blob/HEAD/MASTER_PLAN.md) देखें।

## लाइसेंस

ग्रब क्रॉलर प्रोजेक्ट लाइसेंस
टूल डाउनलोड करें
विशेषताCrawl4AIFirecrawlScrapyGrub
JS रेंडरिंग✅ Playwright✅ Playwright❌ केवल HTTP✅ Playwright
एंटी-डिटेक्ट ब्राउज़रस्टील्थ प्लगइन❌❌✅ Camoufox
Ghost Protocol❌❌❌✅ स्वचालित फ़ॉलबैक
प्रति-अनुरोध प्रॉक्सी✅ एस्केलेशन❌मिडलवेयर✅ प्रति-अनुरोध
स्टील्थ पैचेस✅❌❌✅ वैकल्पिक
एजेंट लूप✅ एजेंटिक✅ /agent❌ स्पाइडर✅ सीमित SM
लाइव ब्राउज़र स्ट्रीम✅ WebSocket✅ Live View❌✅ WS + MJPEG
मार्कडाउन आउटपुट✅ Fit Markdown✅ कोर❌✅ Rust इंजन
MCP टूल्स✅ समुदाय✅ आधिकारिक⚠️ समुदाय✅ 15 उपकरण
मल्टी-प्रोवाइडर LLM✅ सभी LLMs⚠️ Gemini❌✅ OpenAI/Anthropic/Ollama
मेश P2P❌❌❌✅ गॉसिप प्रोटोकॉल
पॉलिसी प्रवर्तन❌❌❌✅ डोमेन गेट्स + रिडक्शन
प्रॉम्प्ट इंजेक्शन रक्षा❌❌❌✅ क्वारंटीन + दृश्य-पाठ अंतर
लाइसेंसApache 2.0AGPL-3.0BSDस्वामित्व
मूल्य निर्धारणमुफ्तमुफ्त–$333/माहमुफ्तस्व-होस्टेड
विशेषताBrowserbaseScrapflyFirecrawl CloudGrub
JS रेंडरिंग✅ अनुकूलित Chromium✅ स्वामित्व✅ Playwright✅ Playwright
एंटी-डिटेक्ट ब्राउज़र✅ अनुकूलित Chromium✅ स्वामित्व✅ क्लाउड स्टील्थ✅ Camoufox
Ghost Protocol❌❌❌✅ स्वचालित फ़ॉलबैक
प्रति-अनुरोध प्रॉक्सी✅ प्रबंधित✅ 130M+ आईपी✅ क्लाउड-प्रबंधित✅ प्रति-अनुरोध
स्टील्थ पैचेस✅ बिल्ट-इन✅ बिल्ट-इन✅ बिल्ट-इन✅ वैकल्पिक
एजेंट लूप✅ Stagehand⚠️ एकीकरण के माध्यम से✅ /agent✅ सीमित SM
लाइव ब्राउज़र स्ट्रीम✅ iFrame + CDP✅ CDP✅ Live View✅ WS + MJPEG
मार्कडाउन आउटपुट✅ MCP के माध्यम से✅ बिल्ट-इन✅ कोर✅ Rust इंजन
MCP टूल्स✅ आधिकारिक✅ आधिकारिक✅ आधिकारिक✅ 15 उपकरण
मेश P2P❌❌❌✅ गॉसिप प्रोटोकॉल
पॉलिसी प्रवर्तन❌❌❌✅ डोमेन गेट्स + रिडक्शन
प्रॉम्प्ट इंजेक्शन रक्षा❌❌❌✅ क्वारंटीन + दृश्य-पाठ अंतर
स्व-होस्टेबल❌ केवल क्लाउड❌ केवल क्लाउड⚠️ सीमित OSS✅ पूर्ण + Cloud Run
मूल्य निर्धारणमुफ्त–$99/माहउपयोग-आधारितमुफ्त–$333/माहस्व-होस्टेड
विधिपथविवरणस्थिति
POST/api/crawlएकल URL क्रॉल (HTML + मार्कडाउन)सक्रिय
POST/api/markdownएकल या एकाधिक URL मार्कडाउन निष्कर्षणसक्रिय
POST/api/batchजॉब ट्रैकिंग के साथ बैच क्रॉलसक्रिय
POST/api/rawकच्चा HTML निष्कर्षण (कोई मार्कडाउन नहीं)सक्रिय
GET/viewब्राउज़र-रेंडर्ड HTML व्यूअरसक्रिय
GET/downloadक्रॉलर के माध्यम से फ़ाइल डाउनलोड (PDFs, आदि)सक्रिय
विधिपथविवरणस्थिति
POST/api/agent/runस्वायत्त एजेंट लूप को कार्य सबमिट करेंसक्रिय
GET/api/agent/status/{run_id}एजेंट रन स्थिति / लोड ट्रेस जांचेंसक्रिय
POST/api/agent/ghostGhost Protocol: स्क्रीनशॉट + विज़न एक्सट्रैक्टसक्रिय
विधिपथविवरणस्थिति
POST/api/jobs/createसामान्य जॉब सबमिशनसक्रिय
POST/api/jobs/crawlएकल URL क्रॉल जॉब सबमिट करेंसक्रिय
POST/api/jobs/batch-crawlबैच क्रॉल जॉब सबमिट करेंसक्रिय
POST/api/jobs/markdownकेवल-मार्कडाउन जॉब सबमिट करेंसक्रिय
POST/api/jobs/process-jobCloud Tasks वर्कर एंडपॉइंटसक्रिय
POST/api/wraithAI-संचालित क्रॉल वर्कफ़्लोस्थान धारक
विधिपथविवरणस्थिति
POST/api/cache/searchकैश्ड सामग्री में फज़ी खोजसक्रिय
GET/api/cache/listकैश्ड दस्तावेज़ मेटाडेटा सूचीबद्ध करेंसक्रिय
GET/api/cache/doc/{doc_id}एक कैश्ड दस्तावेज़ प्राप्त करेंसक्रिय
POST/api/cache/upsertकैश प्रविष्टियाँ अपसर्ट करेंसक्रिय
POST/api/cache/pruneTTL/डोमेन द्वारा कैश प्रविष्टियाँ हटाएँसक्रिय
विधिपथविवरणस्थिति
GET/api/sessions/{session_id}/filesसत्र फ़ाइलें सूचीबद्ध करेंसक्रिय
GET/api/sessions/{session_id}/fileविशिष्ट फ़ाइल प्राप्त करेंसक्रिय
GET/api/sessions/{session_id}/statusसत्र प्रगति स्थितिसक्रिय
GET/api/sessions/{session_id}/resultsसभी क्रॉल परिणामसक्रिय
GET/api/sessions/{session_id}/screenshotsस्क्रीनशॉट सूचीबद्ध करेंसक्रिय
विधिपथविवरणस्थिति
WS/stream/{session_id}WebSocket व्यूपोर्ट स्ट्रीमसक्रिय
GET/stream/{session_id}/mjpegMJPEG फ़ॉलबैक स्ट्रीमसक्रिय
GET/stream/{session_id}/statusस्ट्रीम सत्र स्थितिसक्रिय
GET/stream/pool/statusब्राउज़र पूल स्थितिसक्रिय
विधिपथविवरणस्थिति
POST/mesh/joinपीयर जॉइन + गॉसिप डिस्कवरीसक्रिय
POST/mesh/heartbeatलोड मेट्रिक्स के साथ पीयर हार्टबीटसक्रिय
POST/mesh/executeक्रॉस-नोड टूल निष्पादन (अधिकतम 1-हॉप)सक्रिय
POST/mesh/leaveपीयर प्रस्थान सूचनासक्रिय
GET/mesh/peersज्ञात पीयर + स्वास्थ्य स्थिति सूचीबद्ध करेंसक्रिय
GET/mesh/statusइस नोड की मेश स्थिति + लोडसक्रिय
विधिपथविवरणस्थिति
GET/healthस्वास्थ्य जांच + टूल गणना + मेश जानकारीसक्रिय
GET/toolsपंजीकृत AHP टूल सूचीबद्ध करेंसक्रिय
GET/siteएम्बेडेड लैंडिंग पेजसक्रिय
GET/{tool_name}AHP टूल निष्पादित करें (कैच-ऑल)सक्रिय
उपकरणविवरणस्थिति
crawl_urlJS इंजेक्शन के साथ एकल URL मार्कडाउन निष्कर्षणसक्रिय
crawl_batchसंकलन के साथ 50 URLs तक बैच प्रसंस्करणसक्रिय
raw_htmlरूपांतरण के बिना कच्चा HTML प्राप्त करेंसक्रिय
download_fileक्रॉलर के माध्यम से फ़ाइलें डाउनलोड करें (PDFs, आदि)सक्रिय
crawl_validateसामग्री गुणवत्ता मूल्यांकनसक्रिय
crawl_searchस्थानीय क्रॉल कैश में फज़ी खोजसक्रिय
crawl_cache_listस्थानीय कैश्ड फ़ाइलें सूचीबद्ध करेंसक्रिय
crawl_remote_searchरिमोट क्रॉलर कैश खोजेंसक्रिय
crawl_remote_cache_listरिमोट कैश प्रविष्टियाँ सूचीबद्ध करेंसक्रिय
crawl_remote_cache_docरिमोट कैश्ड दस्तावेज़ प्राप्त करेंसक्रिय
agent_runस्वायत्त एजेंट (मोड B) को कार्य सबमिट करेंसक्रिय
agent_statusएजेंट रन स्थिति जांचेंसक्रिय
ghost_extractGhost Protocol: स्क्रीनशॉट + विज़न AI निष्कर्षणसक्रिय
mesh_peersमेश पीयर और उनकी स्वास्थ्य/लोड स्थिति सूचीबद्ध करेंसक्रिय
mesh_statusइस नोड की मेश स्थिति और लोड मेट्रिक्स प्राप्त करेंसक्रिय
set_auth_token.wraithenv में प्रमाणीकरण टोकन सहेजेंसक्रिय
crawl_statusकॉन्फ़िगरेशन और कनेक्शन की रिपोर्ट करेंसक्रिय
फ़ाइलउद्देश्यस्थिति
types.pyRunState एनम, StopReason, ToolCall, ToolResult, AssistantAction, RunConfig, RunContext, StepTrace, RunResultपूर्ण
errors.pyटाइप की गई त्रुटियाँ: validation_error, policy_denied, tool_timeout, tool_unavailable, execution_error, provider_error, stop_conditionपूर्ण
dispatcher.pyटूल सत्यापन, टाइमआउट प्रवर्तन (30s), पुनर्प्रयास (1x), टाइप की गई त्रुटि सामान्यीकरणपूर्ण
engine.pyसीमित लूप: plan -> execute -> observe -> stop. EventBus एकीकरण। (RunResult, RunSummary) लौटाता हैपूर्ण
ghost.pyGhost Protocol: ब्लॉक का पता लगाना, स्क्रीनशॉट कैप्चर, विज़न निष्कर्षण, ऑटो-ट्रिगरपूर्ण
फ़ाइलउद्देश्यस्थिति
base.pyLLMAdapter ABC, FallbackAdapter (विफलता पर रोटेट), फैक्ट्री फ़ंक्शनपूर्ण
openai_adapter.pyOpenAI tool_calls मैपिंग, GPT-4o विज़नपूर्ण
anthropic_adapter.pyAnthropic tool_use/tool_result ब्लॉक, Claude Sonnet विज़नपूर्ण
ollama_adapter.pyOllama HTTP /api/chat, llava विज़नपूर्ण
उद्देश्य
स्थिति
domain.pyडोमेन अनुमति सूची, RFC-1918/लूपबैक/लिंक-लोकल अस्वीकारपूर्ण
gate.pyPolicyVerdict के साथ प्री-टूल और प्री-फ़ेच पॉलिसी जाँचपूर्ण
redaction.pyगुप्त पैटर्न रिडक्शन (API कुंजी, JWTs, निजी कुंजियाँ)पूर्ण
फ़ाइलउद्देश्यस्थिति
events.pyEventBus + 7 टाइप की गई घटनाएँ: run_start, step_start, tool_dispatch, tool_result, policy_denied, step_end, run_endपूर्ण
trace.pyTraceCollector, RunSummary JSON क्रमांकन, persist_trace() / load_trace() भंडारण के माध्यम सेपूर्ण
फ़ाइलउद्देश्यस्थिति
agent_routes.pyPOST /api/agent/run, GET /api/agent/status/{run_id}। अक्षम होने पर 503पूर्ण
routes.pyकोर क्रॉल/मार्कडाउन/बैच/कैश REST एंडपॉइंटपूर्ण
job_routes.pyजॉब CRUD, सत्र स्थिति, Cloud Tasks वर्करपूर्ण
jobs.pyJobType एनम (AGENT_RUN सहित), JobManager, JobProcessorपूर्ण
models.pyसभी Pydantic मॉडल जिसमें AgentRunRequest/Response शामिल हैंपूर्ण
फ़ाइलउद्देश्यस्थिति
models.pyवायर प्रोटोकॉल मॉडल: NodeInfo, NodeLoad, MeshToolRequest/Response, PeerStateपूर्ण
auth.py60s TTL के साथ HMAC-SHA256 टोकन हस्ताक्षर/सत्यापनपूर्ण
client.pyजॉइन, हार्टबीट, लीव, execute_tool के लिए httpx अतुल्यकालिक क्लाइंटपूर्ण
coordinator.pyजीवनचक्र, पीयर तालिका, सीड रीट्राई के साथ हार्टबीट लूपपूर्ण
routes.py/mesh/* एंडपॉइंट — जॉइन, हार्टबीट, execute, लीव, पीयर, स्थितिपूर्ण
router.pyलोड स्कोरिंग + लक्ष्य चयन (शुद्ध तर्क, कोई I/O नहीं)पूर्ण
dispatcher.pyपारदर्शी रूटिंग के लिए स्थानीय Dispatcher को लपेटने वाला MeshDispatcherपूर्ण
फ़ाइलउद्देश्यस्थिति
config.pyसभी env vars जिसमें एजेंट + प्रदाता + ghost + प्रॉक्सी + स्टील्थ कॉन्फ़िगरेशन शामिल हैंपूर्ण
storage.pyउपयोगकर्ता-विभाजित भंडारण (स्थानीय फ़ाइल सिस्टम / GCS)पूर्ण
crawler.pyप्रॉक्सी समर्थन के साथ Playwright क्रॉलिंग इंजनपूर्ण
markdown.pyHTML से मार्कडाउन रूपांतरणपूर्ण
browser.pyब्राउज़र ऑटोमेशन — Chromium + Camoufox इंजनपूर्ण
browser_pool.pyलीज/रिटर्न पैटर्न के साथ स्थायी ब्राउज़र पूलपूर्ण
stream.pyCDP स्क्रीनकास्ट → WebSocket/MJPEG रिले + इंटरैक्टिव कमांडपूर्ण
URLGrubCrawl4AIFirecrawlScrapyविजेता
example.com39112831513831Grub
news.ycombinator.com423220414012038Grub
en.wikipedia.org507486626372368Grub
httpbin.org2831170176769Firecrawl
quotes.toscrape.com27512446471145Grub
URLnavcontentvisible_textmarkdowntotal
example.com35811140391
news.ycombinator.com38419132423
en.wikipedia.org369483821507
httpbin.org22927160283
quotes.toscrape.com23010271275
BatchGrubCrawl4AIFirecrawlScrapyविजेता
10 URLs1940467032168680Grub
25 URLs408510479669225303Grub
50 URLs15604238701272936232Firecrawl