
स्थैतिक भेद्यता निष्कर्षों का ट्रैकर जिसमें 11 CVE डेटाबेस में समानांतर खोज, EPSS संवर्धन, CISA KEV बैज, समन्वित प्रकटीकरण वर्कफ़्लो और ऑफ़लाइन समर्थन शामिल है।
एक स्थैतिक, क्लाइंट-साइड भेद्यता निष्कर्ष ट्रैकर जो Astro + React के साथ निर्मित है — इसे नेटिव Linux डेस्कटॉप ऐप (Tauri v2) के रूप में भी पैक किया गया है। सुरक्षा निष्कर्ष लॉग करें, उन्हें समन्वित प्रकटीकरण के माध्यम से ट्रैक करें, 11 लाइव भेद्यता डेटाबेस में समानांतर खोजें और नवीनतम CVE ब्राउज़ करें — अपने ब्राउज़र में या डेस्कटॉप ऐप के रूप में, बिना किसी बैकएंड की आवश्यकता के।
localStorage में सहेजे जाते हैं (कोई सर्वर नहीं, कोई खाता नहीं)ट्रैकर (/tracker) पाँच टैब वाला एक सिंगल-पेज ऐप है:
आपके लॉग किए गए निष्कर्षों के लिए प्रबंधन दृश्य:
एक ही क्वेरी स्ट्रिंग के साथ सभी सक्षम डेटाबेस में समानांतर क्वेरी करें:
नवीनतम भेद्यताओं की बिना-इनपुट ब्राउज़िंग:
डेटाबेस कनेक्टिविटी के लिए नियंत्रण पैनल:
.env मानों को ओवरराइड करती हैं{query} प्लेसहोल्डर वाला URL, वैकल्पिक bearer key), उसका परीक्षण करें या हटाएँ; कनेक्टेड कस्टम डेटाबेस Search दृश्य में अतिरिक्त चिप्स के रूप में दिखाई देते हैंएक Finding मूल रिकॉर्ड है। फ़ील्ड:
| फ़ील्ड | विवरण |
|---|---|
id | अद्वितीय पहचानकर्ता |
projectName | वह प्रोजेक्ट जिससे निष्कर्ष संबंधित है (आवश्यक) |
repoUrl | रिपॉज़िटरी URL (आवश्यक, एक मान्य URL होना चाहिए) |
title | संक्षिप्त शीर्षक (आवश्यक) |
description | विस्तृत विवरण (आवश्यक, ≥ 10 अक्षर) |
severity | Critical / High / Medium / Low |
cvssScore | CVSS स्कोर 0–10 (वैकल्पिक) |
cweId | CWE पहचानकर्ता, जैसे CWE-79 |
cveId | CVE पहचानकर्ता, जैसे CVE-2021-44228 |
affectedVersions | प्रभावित संस्करण श्रेणियाँ |
status | New / Reported / Acknowledged / Fixed / Disclosed |
discoveryDate | आपने इसे कब खोजा |
reportedDate | आपने इसे विक्रेता को कब सूचित किया |
disclosureDeadline | समन्वित-प्रकटीकरण समय-सीमा (डैशबोर्ड अलर्ट को संचालित करती है) |
referenceLinks | संदर्भ URL की सूची |
notes | स्वतंत्र-रूप टिप्पणियाँ |
tags | टैग की सूची (फ़िल्टरिंग के लिए उपयोग) |
createdAt / updatedAt | टाइमस्टैम्प |
फ़ॉर्म में सत्यापन लागू किया जाता है: आवश्यक फ़ील्ड, URL प्रारूप, विवरण की लंबाई और CVSS सीमा।
11 डेटाबेस एकीकृत, साथ ही EPSS संवर्धन। सात बिना कुंजी के सीधे कनेक्ट होते हैं; चार को .env से एक क्रेडेंशियल की आवश्यकता होती है।
| # | स्रोत | पहुँच | खोज | ब्राउज़ | नोट्स |
|---|---|---|---|---|---|
| 1 | NVD (NIST) | सीधा | ✅ | ✅ | NVD API 2.0; Browse में 30-दिवसीय विंडो |
| 2 | CIRCL | सीधा | ✅ | ✅ | CVE खोज + "last" फ़ीड (OSV/CSAF आकृतियाँ) |
| 3 | GitHub Advisories | सीधा | ✅ | ✅ | GHSA API |
| 4 | OSV (Google) | सीधा | ✅ | — | ओपन-सोर्स इकोसिस्टम भेद्यताएँ |
| 5 | CISA KEV | सीधा | ✅ | ✅ | Known Exploited Vulnerabilities कैटलॉग |
| 6 | Red Hat | सीधा | ✅ | — | Red Hat CVE डेटाबेस |
| 7 | EUVD (ENISA) | सीधा | ✅ | — | यूरोपीय भेद्यता डेटाबेस |
| 8 | Vulners | .env कुंजी | ✅ | — | PUBLIC_VULNERS_API_KEY |
| 9 | MEND | .env टोकन | ✅ | — | PUBLIC_MEND_API_TOKEN (CVE ID लुकअप) |
| 10 | VulDB | .env कुंजी | ✅ | — | PUBLIC_VULDB_API_KEY (क्रेडिट-आधारित) |
| 11 | OpenCVE | .env टोकन | ✅ | — | PUBLIC_OPENCVE_API_TOKEN |
| — | EPSS (FIRST) | सीधा | — | — |
एकीकृत नहीं (कारणों सहित): Snyk (org-स्कोप्ड, कोई सार्वजनिक खोज API नहीं), JFrog Xray (स्व-होस्टेड, CVE रिकॉर्ड नहीं बल्कि आर्टिफ़ैक्ट लौटाता है), Trivy (CLI स्कैनर, कोई REST API नहीं), MSRC (मासिक CVRF दस्तावेज़, कीवर्ड-खोज योग्य नहीं), VulnCheck (केवल बल्क बैकअप एंडपॉइंट), Debian/Ubuntu (मल्टी-GB डंप, क्लाइंट-खोज योग्य नहीं), Exploit-DB/Sploitus (कोई सार्वजनिक API नहीं), CNVD/CNNVD (मैन्युअल XML डाउनलोड), Sonatype OSS Index (purl/घटक-आधारित, कीवर्ड नहीं)।
| परत | विकल्प |
|---|---|
| फ्रेमवर्क | Astro 6 (स्थैतिक आउटपुट) |
| UI | React 19 islands |
| स्टाइलिंग | Tailwind CSS 4 (टोकन-संचालित क्लास) |
| चार्ट | Recharts |
| आइकन | lucide-react |
| मोशन | framer-motion |
| डेस्कटॉप | Tauri v2 (Linux: deb / rpm / AppImage; Windows: देखें Windows 11 विकास; macOS: देखें macOS विकास) |
| मोबाइल | Tauri v2 के माध्यम से Android — देखें Android विकास |
| AI चैट | बिल्ट-इन चैटबॉक्स — OpenAI / Claude / Gemini / Ollama / OpenCode Zen (देखें AI चैटबॉक्स) |
| भाषा | TypeScript (सख्त) |
डिज़ाइन सिस्टम: "Dark Sunset Boulevard" थीम — गहरे बैंगनी-रंगत वाली गहरी सतहें (ink-950 #1A2226, ink-900 #223036, ink-800 #264653), गर्म रेत रंग का टेक्स्ट (ink-100 #F2EAE0, ink-400 #A49A8C) और जले-नारंगी एक्सेंट रंग (#E76F51)। सभी रंग src/styles/global.css में परिभाषित Tailwind 4 टोकन हैं — कंपोनेंट्स में कोई हार्डकोडेड hex नहीं।
आवश्यकता: Node.js >= 20।```bash
npm install
npm run dev
npm run check
npm run build
npm run preview
बिल्ड एक पूर्ण रूप से स्थिर साइट (`dist/`) तैयार करता है — जिसे किसी भी स्थिर होस्ट (GitLab Pages, Netlify, Cloudflare Pages, GitHub Pages, nginx…) पर तैनात किया जा सकता है। यही बिल्ड एक नेटिव डेस्कटॉप ऐप में भी लपेटा जाता है — देखें [Native Desktop App](#native-desktop-app)।
---
## नेटिव डेस्कटॉप ऐप
**एक कोडबेस, हर डिलीवरी प्रारूप।** यही स्रोत वेब साइट, डेस्कटॉप ऐप्स और एक Android ऐप बनाता है — कोई अलग web/app ब्रांच नहीं हैं। ऐप्स स्थिर बिल्ड हैं जो एक छोटे **Tauri v2** Rust शेल में लपेटे गए हैं, जो इसे सिस्टम वेबव्यू में प्रस्तुत करता है (Linux पर WebKitGTK, macOS पर WKWebView, Windows पर WebView2, Android WebView)। कोई सर्वर नहीं, कोई ब्राउज़र टैब नहीं; सेटिंग्स और निष्कर्ष ऐप की अपनी डेटा निर्देशिका में बने रहते हैं।
### Linux (डिफ़ॉल्ट)
शिप किए गए डेस्कटॉप बंडल Linux को लक्षित करते हैं (`.deb`, `.rpm`, AppImage)।
**सिस्टम निर्भरताएँ (Debian/Ubuntu):**```bash
sudo apt install libwebkit2gtk-4.1-dev build-essential curl wget file libxdo-dev libssl-dev libayatana-appindicator3-dev librsvg2-dev
डेवलप (hot-reload: Astro dev server + Tauri window):```bash npm run tauri:dev
**इंस्टॉल करने योग्य बंडल बनाएं** (`.deb`, `.rpm`, AppImage — आउटपुट `src-tauri/target/release/bundle/` में):```bash
npm run tauri:build
The Rust शेल जानबूझकर न्यूनतम है — v1 में शून्य IPC कमांड; सभी लॉजिक वेब लेयर में रहती है, इसलिए ब्राउज़र बिल्ड और डेस्कटॉप ऐप समान व्यवहार करते हैं।
macOS डेस्कटॉप समर्थन डिफ़ॉल्ट कॉन्फ़िग में सक्षम नहीं है — वितरित बंडल केवल Linux के लिए हैं। कोडबेस स्वयं पूरी तरह से क्रॉस-प्लेटफ़ॉर्म है (वेब लेयर किसी भी ब्राउज़र में चलती है, और Rust शेल में शून्य IPC कमांड हैं), इसलिए macOS को सक्षम करना एक छोटा कॉन्फ़िग बदलाव है और Mac पर एक बिल्ड भी। पूरी गाइड के लिए docs/macos-development.md देखें: पूर्वापेक्षाएँ, dmg टारगेट सक्षम करना, आइकन, साइनिंग और नोटराइज़ेशन, और एक GitLab CI उदाहरण।
Windows डेस्कटॉप समर्थन डिफ़ॉल्ट कॉन्फ़िग में सक्षम नहीं है — वितरित बंडल केवल Linux के लिए हैं। कोडबेस पूरी तरह से क्रॉस-प्लेटफ़ॉर्म है, और Windows बिल्ड MSVC टूलचेन (WebView2 पहले से इंस्टॉल है) के साथ Windows 11 मशीन पर चलते हैं। पूरी गाइड के लिए docs/windows-development.md देखें: पूर्वापेक्षाएँ, nsis / msi टारगेट सक्षम करना, आइकन, कोड साइनिंग और SmartScreen, और एक GitLab CI उदाहरण।
Android टारगेट रिपो में प्रारंभ नहीं किया गया है — एक कमांड इसे स्कैफोल्ड करता है (npm run tauri android init)। कोडबेस पूरी तरह से क्रॉस-प्लेटफ़ॉर्म है (वेब लेयर Android WebView में चलती है, और ट्रैकर UI पहले से ही फ़ोनों के लिए रिस्पॉन्सिव है)। पूरी गाइड के लिए docs/android-development.md देखें: पूर्वापेक्षाएँ (Android Studio, SDK, NDK, JDK 17), टारगेट इनिशियलाइज़ करना, APKs/AABs बनाना, और एक GitLab CI उदाहरण।
चार खोज स्रोतों को क्रेडेंशियल्स की आवश्यकता होती है। .env.example को .env में कॉपी करें, कुंजियाँ भरें, और रीबिल्ड करें:
| स्रोत | वेरिएबल | कहाँ से प्राप्त करें |
|---|---|---|
| Vulners | PUBLIC_VULNERS_API_KEY | Vulners खाता → API कुंजियाँ |
| MEND | PUBLIC_MEND_API_TOKEN | MEND SCA API 2.0 (JWT बियरर टोकन) |
| VulDB | PUBLIC_VULDB_API_KEY | VulDB खाता → API कुंजी (क्रेडिट-आधारित) |
| OpenCVE | PUBLIC_OPENCVE_API_TOKEN | OpenCVE संगठन → API टोकन |
सुरक्षा नोट: यह एक स्टैटिक साइट है —
PUBLIC_*वेरिएबल बिल्ड समय पर क्लाइंट बंडल में इनलाइन हो जाते हैं और पेज सोर्स में दिखाई देते हैं। कम-विशेषाधिकार वाली कुंजियाँ उपयोग करें, या वास्तविक गोपनीयता के लिए सर्वर-साइड प्रॉक्सी। बिना कुंजी वाले स्रोत केवल एक एरर चिप दिखाते हैं; बाकी खोज फिर भी काम करती है।
टिप: आप इन कुंजियों को ऐप के Settings टैब में भी दर्ज कर सकते हैं — रनटाइम कुंजियाँ बिल्ड-टाइम
.envमानों को ओवरराइड करती हैं, किसी रीबिल्ड की आवश्यकता नहीं है।
.env फ़ाइलें gitignore की गई हैं; केवल .env.example कमिट है।
डेटाबेस ऑन/ऑफ स्विच और API कुंजियाँ रनटाइम पर Settings टैब से प्रबंधित की जाती हैं — किसी फ़ाइल संपादन या रीबिल्ड की आवश्यकता नहीं है। डिफ़ॉल्ट src/tracker/lib/dbConfig.ts में होते हैं, और रनटाइम ओवरराइड ऐप में संग्रहीत होते हैं (localStorage, कुंजी settings:all)।
प्राथमिकता: रनटाइम सेटिंग्स (Settings टैब) > .env बिल्ड-टाइम मान > dbConfig.ts डिफ़ॉल्ट।
प्रत्येक कॉन्फ़िग प्रविष्टि में है:
enabled — डिफ़ॉल्ट स्थिति; Settings टैब इसे प्रति सत्र ओवरराइड कर सकता हैsearch / browse — स्रोत किन दृश्यों में भाग लेता हैneedsKey + keyVar — उन स्रोतों को चिह्नित करता है जो क्रेडेंशियल पढ़ते हैं (.env या Settings टैब से)UI पूरी तरह से प्रभावी कॉन्फ़िग से व्युत्पन्न होता है: getSearchSources() (Search चिप्स) और getBrowseSources() (Browse चिप्स) को सक्षम स्रोतों तक फ़िल्टर किया जाता है, और एडेप्टर को क्वेरी समय पर फ़िल्टर किया जाता है — Settings में किसी स्रोत को बंद करने से वह तुरंत UI और क्वेरी से हट जाता है।
कस्टम डेटाबेस समान रनटाइम सेटिंग्स (customDbs) में संग्रहीत होते हैं। प्रत्येक प्रविष्टि में एक नाम, एक URL (वैकल्पिक रूप से {query} प्लेसहोल्डर युक्त — अन्यथा क्वेरी ?q= के रूप में जोड़ी जाती है), और एक वैकल्पिक बियरर कुंजी होती है। वे केवल खोज के लिए हैं: वे Search दृश्य में अतिरिक्त चिप्स के रूप में दिखाई देते हैं और बिल्ट-इन स्रोतों के समानांतर क्वेरी किए जाते हैं। प्रतिक्रियाएँ CVE JSON 5.0 ({ "vulnerabilities": [{ "cve": ... }] }) या लचीले फ़ील्ड नामों वाले रिकॉर्ड्स की सरल सरणी के रूप में स्वीकार की जाती हैं।
सभी डेटाबेस ऐक्सेस src/tracker/lib/ में रहता है, जिम्मेदारी के अनुसार विभाजित (dbSearch.ts एक बैरल है जो पिछली सार्वजनिक API सतह को फिर से निर्यात करता है):
dbFetch.ts — फ़ेच-विथ-टाइमआउट हेल्पर + साझा स्थिरांकdbAdapters.ts — 11 बिल्ट-इन खोज एडेप्टर + रिकॉर्ड पार्सरdbBrowse.ts — 4 ब्राउज़ एडेप्टर + browseDatabases पाइपलाइनdbCustom.ts — उपयोगकर्ता-कॉन्फ़िगर कस्टम डेटाबेस एडेप्टरdbPipeline.ts — मर्ज / KEV / EPSS तंत्र + `searchDatabases````
query ──► Promise.all over enabled adapters ──► normalizeDbItem
──► mergeDbItems (dedup by CVE / ID / title, cross-merge)
──► attachKevBadges (CISA KEV catalog, cached)
──► enrichWithEpss (FIRST EPSS API, batched by CVE)
──► sorted results + per-source statuses + timing- **एडेप्टर** — प्रति स्रोत एक, प्रत्येक सामान्यीकृत `RawDbItem`s लौटाता है। कुंजी-आधारित एडेप्टर क्रेडेंशियल गायब होने पर स्पष्ट "no API key configured" त्रुटि फेंकते हैं।
- **विलय** — कई स्रोतों में मिला एक ही CVE एक कार्ड बन जाता है; फ़ील्ड (summary, severity, CVSS, CWEs, refs, sources) सभी योगदानकर्ताओं से विलय किए जाते हैं।
- **KEV बैज** — CISA कैटलॉग एक बार लाया जाता है और कैश किया जाता है; इसमें मौजूद आइटमों को "Known Exploited" बैज मिलता है।
- **EPSS** — `api.first.org` पर बैच किया गया लुकअप; प्रत्येक कार्ड EPSS स्कोर और पर्सेंटाइल दिखाता है।
- **विफलता अलगाव** — प्रत्येक एडेप्टर अपनी त्रुटियों को पकड़ता है और स्टेटस कॉलबैक के माध्यम से रिपोर्ट करता है; एक बंद स्रोत कभी भी दूसरों को अवरुद्ध नहीं करता।
**Browse** पाइपलाइन चार ब्राउज़ स्रोतों पर वही merge/KEV/EPSS तंत्र है, साथ में पेजिनेशन (`hasMore` जब किसी स्रोत ने पूरा पेज लौटाया)।
**ऑफ़लाइन मोड** लाइव पाइपलाइन को डाउनलोड किए गए स्नैपशॉट से बदल देता है: Search और Browse IndexedDB कैश (`src/tracker/lib/offline.ts`) पढ़ते हैं, EPSS एनरिचमेंट छोड़ देते हैं, और KEV बैज केवल तभी जोड़ते हैं जब CISA KEV फ़ीड भी डाउनलोड की गई हो। जिन स्रोतों के पास डाउनलोड किया गया स्नैपशॉट नहीं है, वे हैंग होने के बजाय "error / not downloaded" चिप रिपोर्ट करते हैं। **कस्टम डेटाबेस** उसी एडेप्टर इंटरफ़ेस के माध्यम से क्वेरी किए जाते हैं — URL का `{query}` प्लेसहोल्डर प्रतिस्थापित किया जाता है (या `?q=` जोड़ा जाता है), एक वैकल्पिक bearer key `Authorization` के रूप में भेजी जाती है, और प्रतिक्रियाओं को CVE JSON 5.0 या एक साधारण array से सामान्यीकृत किया जाता है।
---
## डेटा स्थायित्व
Findings `localStorage` में `findings:all` कुंजी के अंतर्गत संग्रहीत होते हैं — कोई सर्वर नहीं, कोई खाता नहीं, ऑफ़लाइन काम करता है।
- प्रति परिवर्तन लेखन डीबाउंस किए जाते हैं और स्वचालित रूप से सहेजे जाते हैं
- यदि ब्राउज़र का storage API उपलब्ध नहीं है (या कोई होस्ट artifact-storage API मौजूद है), तो ऐप सुचारु रूप से फ़ॉलबैक करता है
- भ्रष्ट पेलोड को क्रैश होने के बजाय खाली माना जाता है
- सहेजने में विफलता पर **Retry** बटन के साथ एक बैनर दिखाई देता है
> डेटा ब्राउज़र प्रोफ़ाइल में रहता है। साइट डेटा साफ़ करने से आपके Findings मिट जाते हैं — यदि आपको बैकअप चाहिए तो पहले CSV/Markdown में एक्सपोर्ट करें।
**ऑफ़लाइन स्नैपशॉट** IndexedDB (डेटाबेस `vulnbook-offline`, `items` + `meta` स्टोर करता है) में रहते हैं — Settings टैब से प्रति स्रोत डाउनलोड किए जाते हैं और ऑफ़लाइन मोड चालू होने पर Search/Browse द्वारा उपयोग किए जाते हैं। वे रीलोड करने पर बने रहते हैं और केवल तब हटाए जाते हैं जब आप उस स्रोत के लिए **Remove** पर क्लिक करते हैं या साइट डेटा साफ़ करते हैं।
---
## एक्सपोर्ट
Findings व्यू से, **वर्तमान में फ़िल्टर और सॉर्ट की गई** सूची एक्सपोर्ट करें:
- **CSV** — 15 कॉलम (title, project, repo URL, severity, CVSS, status, CWE, CVE, affected versions, discovery/reported/disclosure dates, references, notes, tags)। कॉमा, उद्धरण और नई पंक्तियों के लिए उचित quoting/escaping।
- **Markdown** — समान कॉलमों वाली एक GitHub-flavored तालिका।
फ़ाइलों के नाम `findings-YYYY-MM-DD.csv` / `.md` होते हैं और वे स्वचालित रूप से डाउनलोड होती हैं।
---
## AI ChatBox
ट्रैकर के अंदर बिल्ट-इन AI असिस्टेंट — एक **ओवरले साइडबार** जो कंटेंट के ऊपर स्लाइड होता है, बिना उसे रीफ्लो किए। पूर्ण गाइड के लिए **[docs/ai-chatbox.md](https://gitlab.com/t-beckett/vulnbook/-/blob/main/docs/ai-chatbox.md)** देखें (प्रोवाइडर सेटअप, सुरक्षा नोट्स, समस्या निवारण)।
- **पाँच प्रोवाइडर** — OpenAI, Claude (Anthropic), Google Gemini, **Ollama** (लोकल, ऑफ़लाइन) और **OpenCode Zen** (फ्री-टियर मॉडल शामिल)। ऐप में कॉन्फ़िगर किए जाते हैं (key + model), `localStorage` (`chat:config`) में सहेजे जाते हैं, केवल प्रोवाइडर के अपने एंडपॉइंट पर भेजे जाते हैं
- **प्रोजेक्ट-विशिष्ट** — हर बातचीत vulnbook (आर्किटेक्चर, डेटा मॉडल, डेटाबेस स्रोत, परंपराएँ) के बारे में बंडल किए गए **knowledge pack** पर आधारित होती है; कॉन्फ़िग पैनल में **Project context** के माध्यम से टॉगल करने योग्य
- **स्ट्रीमिंग उत्तर** — **Stop** बटन के साथ लाइव markdown आउटपुट; एक गैर-स्ट्रीमिंग फ़ॉलबैक स्वचालित रूप से सक्रिय हो जाता है
- **स्लैश कमांड** — कंपोज़र में `/` टाइप करें: `/mcp` और `/skill` AI Marketplace खोलते हैं, `/new` बातचीत शुरू करता है, `/clear` उसे खाली करता है, `/help` कमांड सूचीबद्ध करता है
- **AI Marketplace** — एक साइडबार टैब जो उपलब्ध **MCP** और **Skill** प्रविष्टियों को ग्रिड में सूचीबद्ध करता है; **Connect** किसी प्रविष्टि को टॉगल करता है (सहेजा गया), **Download** रोडमैप पर है (Coming soon)
- **चैट इतिहास** — बातचीत सहेजी जाती है (`chat:history`, सबसे पुराने-पहले ट्रिमिंग के साथ सीमित)
> **सुरक्षा:** कुंजियाँ लोकल रहती हैं और केवल प्रोवाइडर के पास जाती हैं; सहायक markdown एक सख्त सैनिटाइज़र के माध्यम से रेंडर किया जाता है (कोई raw HTML नहीं); v1 में कनेक्टेड MCP/skill प्रविष्टियाँ केवल स्थिति-आधारित हैं — कुछ भी डाउनलोड या निष्पादित नहीं किया जाता।
---
## परीक्षण
प्रोजेक्ट में कोई यूनिट टेस्ट फ्रेमवर्क नहीं है (स्थापित निर्णय) — सत्यापन एक तीन-चरणीय गेट है:```bash
# 1. Type-check
npm run check
# 2. Build
npm run build
# 3. E2E smoke test (Playwright, 16 checks)
npx http-server dist -p 8899 -a 127.0.0.1 &
NODE_PATH=<path-to-playwright-node_modules> node scripts/smoke.cjs
स्मोक टेस्ट (scripts/smoke.cjs) निम्न को कवर करता है: लैंडिंग पेज रेंडर + हाइड्रेशन, ट्रैकर आइलैंड हाइड्रेशन, फाइंडिंग CRUD, रिलोड पर localStorage पर्सिस्टेंस, सूची दृश्य + निर्यात नियंत्रण, विवरण मोडल (खोलना/Escape), विलोपन, डेटाबेस खोज से रिज़ल्ट कार्ड उत्पन्न होना, ब्राउज़ दृश्य से रिज़ल्ट कार्ड उत्पन्न होना, सेटिंग्स टैब (किसी स्रोत को बंद करने से उसका चिप हट जाता है, पुनः सक्षम करने पर वापस आ जाता है), ऑफ़लाइन मोड (टॉगल से खोज में ऑफ़लाइन बैनर दिखता है और लाइव मोड बहाल होता है), और कस्टम डेटाबेस फ़ॉर्म सत्यापन (अमान्य URL अस्वीकृत)।
PLAYWRIGHT_CHROMIUM_PATH या डिफ़ॉल्ट कैश पथ से प्राप्त की जाती हैनेटिव-ऐप परिवर्तनों के लिए, अतिरिक्त रूप से npm run tauri:build चलाएँ (देखें नेटिव डेस्कटॉप ऐप)।
├── src/ │ ├── components/ # Shared Astro components + animation primitives │ │ └── anim/ # Skeleton, Spinner, FadeInUp, CountUp │ ├── layouts/ # SiteLayout (fonts, meta, theme) │ ├── pages/ # index.astro (landing), tracker.astro, 404.astro │ ├── styles/ # global.css — Tailwind 4 design tokens │ └── tracker/ │ ├── components/ # Tracker UI │ │ ├── TrackerApp.tsx # Shell: tabs, modals, state │ │ ├── Dashboard.tsx # Stats + charts + deadlines │ │ ├── FindingsList.tsx / FilterBar.tsx │ │ ├── DbSearchView.tsx / BrowseView.tsx / SettingsView.tsx │ │ ├── FindingFormModal.tsx / FindingDetailModal.tsx │ │ ├── ConfirmDeleteDialog.tsx / EmptyState.tsx / ErrorBanner.tsx │ │ ├── SourceChip.tsx / SearchResultCard.tsx / StatCard.tsx / badges.tsx │ └── lib/ # Logic │ ├── types.ts # Finding, DbItem, KevEntry, View, … │ ├── constants.ts # Severity/status order + styles, button classes │ ├── dbConfig.ts # ← per-source defaults (on/off, key vars) │ ├── settings.ts # ← runtime settings store (Settings tab overrides) │ ├── offline.ts # IndexedDB offline snapshot store (download/remove/query) │ ├── dbSearch.ts # barrel: re-exports the db layer (see "How the Search Pipeline Works") │ ├── dbFetch.ts # fetch-with-timeout helper + shared constants │ ├── dbAdapters.ts # 11 built-in search adapters + record parsers │ ├── dbBrowse.ts # browse adapters + browseDatabases pipeline │ ├── dbCustom.ts # user-configured custom database adapter │ ├── dbPipeline.ts # merge/KEV/EPSS pipeline + searchDatabases │ ├── findings.ts # CRUD + validation │ ├── storage.ts # localStorage + artifact-API fallback │ ├── export.ts # CSV / Markdown export │ └── format.ts # date/URL/id helpers, cvssToSeverity ├── scripts/smoke.cjs # Playwright E2E smoke test (16 checks) ├── docs/ # Developer guides (macOS, Windows 11, Android development) ├── src-tauri/ # Tauri v2 native shell (Rust, minimal) ├── research/ # Vulnerability database & tooling research notes ├── .env.example # Documented API-key template └── astro.config.mjs
---
## अनुसंधान नोट्स
`research/` निर्देशिका में वह पृष्ठभूमि अनुसंधान शामिल है जिसने डेटाबेस एकीकरणों को संचालित किया:
- **`vulnerability-databases.md`** — ~60 डेटाबेस सूचीबद्ध (एक्सेस मॉडल, API उपलब्धता, सावधानियाँ), जिसमें अप्रैल 2026 के NVD संवर्धन परिवर्तन, EUVD/OpenCVE/VulDB API विवरण, और "क्यों नहीं" सूची शामिल है
- **`vulnerability-finding-tools.md`** — भेद्यता-खोज उपकरणों का व्यापक परिदृश्य (SAST/SCA/fuzzing/pentest) और एकल-व्यवसायी पाइपलाइन
---
## डिज़ाइन और योजना कार्यप्रवाह
यह परियोजना डिज़ाइन → योजना → निष्पादन कार्यप्रवाह का पालन करती है।
नई सुविधाएँ एक डिज़ाइन दस्तावेज़ से शुरू होती हैं, मान्य होती हैं, फिर सूक्ष्म-कार्यों में नियोजित और निष्पादित की जाती हैं। पूर्ण परंपराओं (ब्रांचिंग, सत्यापन गेट, कमिट शैली, पहुँच नियम) के लिए `CONTRIBUTING.md` देखें।
---
## लाइसेंस
[MIT](https://gitlab.com/t-beckett/vulnbook/-/blob/main/LICENSE) © 2026 T. Beckett
---
| केवल संवर्धन: CVE को 0–1 + पर्सेंटाइल पर स्कोर करता है |