
स्वचालित आपूर्ति श्रृंखला सुरक्षा मॉनिटर जो PyPI और npm रजिस्ट्रियों को पोल करता है, नए रिलीज़ को पिछले संस्करणों से तुलना करता है, और LLM विश्लेषण का उपयोग करके दुर्भावनापूर्ण कोड परिवर्तनों का पता लगाता है, जिसमें Slack अलर्टिंग शामिल है।
शीर्ष PyPI और npm पैकेजों की स्वचालित निगरानी आपूर्ति श्रृंखला से समझौता के लिए। दोनों रजिस्ट्रियों को नए रिलीज़ के लिए पोल करता है, प्रत्येक रिलीज़ की उसके पूर्ववर्ती से तुलना करता है, और डिफ को सौम्य या दुर्भावनापूर्ण के रूप में वर्गीकृत करने के लिए LLM (Cursor Agent CLI के माध्यम से) का उपयोग करता है। दुर्भावनापूर्ण निष्कर्ष स्लैक अलर्ट को ट्रिगर करते हैं।
दोनों इकोसिस्टम डिफ़ॉल्ट रूप से मॉनिटर किए जाते हैं। एक को अक्षम करने के लिए --no-pypi या --no-npm का उपयोग करें।
प्रत्येक इकोसिस्टम अपना स्वयं का पोलिंग थ्रेड चलाता है लेकिन विश्लेषण और अलर्टिंग पाइपलाइन साझा करता है।
┌─── PyPI ──────────────────────┐ ┌─── npm ───────────────────────┐
│ │ │ │
│ changelog_since_serial() │ │ CouchDB _changes feed │
│ │ │ │ │ │
│ ▼ │ │ ▼ │
│ ┌────────────┐ │ │ ┌────────────┐ │
│ │ All PyPI │─┐ │ │ │ All npm │─┐ │
│ │ events │ │ │ │ │ changes │ │ │
│ └────────────┘ ▼ │ │ └────────────┘ ▼ │
│ hugovk ──► Watchlist │ │ download-counts ─► Watchlist │
│ │ │ │ │ │
│ "new release" events only │ │ new versions since last epoch │
└───────────────┬───────────────┘ └───────────────┬───────────────┘
│ │
▼ ▼
┌───────────────────┐ ┌───────────────────┐
│ Download old + new│ │ Download old + new│
│ (sdist + wheel) │ │ (tarball) │
└───────────────────┘ └───────────────────┘
│ │
└─────────────────┬─────────────────┘
▼
┌───────────────┐
│ Unified diff │
│ report (.md) │
└───────┬───────┘
▼
┌───────────────┐ ◄── LLM analysis
│ Cursor Agent │ (read-only)
│ CLI (ask mode)│
└───────┬───────┘
│
verdict?
│
malicious │
▼
┌───────────────┐
│ Slack alert │
└───────────────┘
LLM विश्लेषण को निम्नलिखित देखने के लिए प्रेरित किया जाता है:
pip install -r requirements.txt के साथ रनटाइम निर्भरताएँ स्थापित करें (stdlib अधिकांश टूल को कवर करता है; Slack अपलोड के लिए requests का उपयोग किया जाता है)agent बाइनरी, IDE नहींWindows (PowerShell):
irm 'https://cursor.com/install?win32=true' | iex
macOS / Linux:
curl https://cursor.com/install -fsS | bash
इससे सत्यापित करें:
agent --version
आपको Cursor के साथ प्रमाणित होना चाहिए (agent login या CURSOR_API_KEY सेट करें)।
अपना स्लैक बॉट टोकन etc/slack.json में रखें:
{
"url": "https://hooks.slack.com/services/...",
"bot_token": "xoxb-...",
"channel": "C01XXXXXXXX"
}
बॉट को लक्ष्य चैनल पर chat:write स्कोप की आवश्यकता है। channel फ़ील्ड स्लैक चैनल आईडी है जहाँ अलर्ट पोस्ट किए जाते हैं।
# One-shot: analyze releases from the last ~10 minutes
python monitor.py --once
# Continuous: monitor top 1000 packages (both ecosystems), poll every 5 min
python monitor.py --top 1000 --interval 300
# Production: monitor top 15000, alert to Slack
python monitor.py --top 15000 --interval 300 --slack
# npm only, top 5000
python monitor.py --no-pypi --npm-top 5000
# PyPI only
python monitor.py --no-npm
| फ़ाइल | उद्देश्य |
|---|---|
monitor.py | मुख्य आयोजक — PyPI + npm को पोल करें, डिफ़ करें, विश्लेषण करें, अलर्ट करें (समानांतर थ्रेड्स) |
pypi_monitor.py | स्टैंडअलोन PyPI चेंजलॉग पोलर (अन्वेषण के लिए उपयोगी) |
package_diff.py | किसी भी PyPI या npm पैकेज के दो संस्करण डाउनलोड और डिफ़ करें |
analyze_diff.py | Cursor Agent CLI को एक डिफ़ भेजें, निर्णय पार्स करें |
top_pypi_packages.py | शीर्ष N PyPI पैकेजों को डाउनलोड गणना द्वारा प्राप्त करें और सूचीबद्ध करें |
slack.py | स्लैक API क्लाइंट (SendMessage, PostFile) |
etc/slack.json | स्लैक बॉट क्रेडेंशियल |
last_serial.yaml | स्थिर पोलिंग स्थिति (PyPI सीरियल + npm सीक्वेंस/इपॉक) |
logs/ | दैनिक लॉग फ़ाइलें (monitor_YYYYMMDD.log) |
python monitor.py [OPTIONS]
Options:
--top N प्रति इकोसिस्टम देखने के लिए शीर्ष पैकेजों की संख्या (डिफ़ॉल्ट: 15000)
--interval SECS पोल अंतराल सेकंड में (डिफ़ॉल्ट: 300)
--once हाल की घटनाओं पर एक बार पास करें, फिर बाहर निकलें
--slack दुर्भावनापूर्ण निष्कर्षों के लिए स्लैक अलर्ट सक्षम करें
--model MODEL LLM मॉडल ओवरराइड करें (डिफ़ॉल्ट: composer-2-fast)
--debug DEBUG लॉगिंग सक्षम करें (एजेंट रॉ आउटपुट शामिल है)
PyPI options:
--no-pypi PyPI मॉनिटरिंग अक्षम करें
--serial N PyPI चेंजलॉग सीरियल जिससे शुरू करना है
npm options:
--no-npm npm मॉनिटरिंग अक्षम करें
--npm-top N देखने के लिए शीर्ष N npm पैकेज (डिफ़ॉल्ट: --top के समान)
--npm-seq N npm प्रतिकृति अनुक्रम जिससे शुरू करना है
PyPI और npm प्रत्येक अपने स्वयं के पोलिंग थ्रेड में चलते हैं। पोलिंग स्थिति (PyPI सीरियल, npm अनुक्रम + इपॉक) last_serial.yaml में स्थिर की जाती है ताकि मॉनिटर पुनरारंभ के बाद वहीं से जारी रहे जहाँ छोड़ा था।
PyPI पाइपलाइन:
--interval सेकंड पर, changelog_since_serial() कॉल करता है - एक एकल API कॉल जो अंतिम जांच के बाद से सभी घटनाओं को लौटाता है"new release" घटनाओं को फ़िल्टर करता है