dsh-locator 0.7.5 → 0.7.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/CHANGELOG.md +17 -0
- package/README-es.md +328 -106
- package/README-hi.md +328 -104
- package/README-pt.md +329 -103
- package/README.en.md +247 -123
- package/README.md +223 -84
- package/lib/content.d.ts +14 -0
- package/lib/content.d.ts.map +1 -1
- package/lib/content.js +62 -1
- package/lib/content.js.map +1 -1
- package/package.json +1 -1
- package/src/content.ts +57 -1
package/README-hi.md
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
# 🔎 dsh-locator
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
**नाम याद है तो नाम से खोजें, बात याद है तो सामग्री से खोजें; फिर फ़ाइल खोलें या उसी बातचीत पर वापस जाएँ।**
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
[DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) के लिए पूरे डिस्क की फ़ाइल खोज, **अपने ही इंडेक्स** के साथ: Everything इंस्टॉल करने की ज़रूरत नहीं, `es.exe` पर निर्भरता नहीं, Windows / macOS / Linux पर एक ही टूल और एक ही पैनल।
|
|
8
8
|
|
|
9
9
|
[](https://www.npmjs.com/package/dsh-locator)
|
|
10
10
|
[](https://www.npmjs.com/package/dsh-locator)
|
|
@@ -12,7 +12,8 @@
|
|
|
12
12
|
[](https://github.com/PerryLink/dsh-locator/releases)
|
|
13
13
|
[](LICENSE)
|
|
14
14
|
[](https://github.com/topics/dsh-plugin)
|
|
15
|
-
[](https://github.com/awesome-dsh-plugin/awesome-dsh-plugin)
|
|
16
|
+
[](#संस्करण-और-संगतता)
|
|
16
17
|
[](https://gitee.com/perrylink/dsh-locator)
|
|
17
18
|
[](https://gitcode.com/PerryLink/dsh-locator)
|
|
18
19
|
|
|
@@ -24,15 +25,62 @@ dsh plugin --profile web add dsh-locator
|
|
|
24
25
|
|
|
25
26
|
</div>
|
|
26
27
|
|
|
27
|
-
> **आधिकारिक रिपॉज़िटरी:** [GitHub `PerryLink/dsh-locator`](https://github.com/PerryLink/dsh-locator)
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
> **आधिकारिक रिपॉज़िटरी:** [GitHub `PerryLink/dsh-locator`](https://github.com/PerryLink/dsh-locator); Gitee और GitCode स्वतः सिंक होने वाले मिरर हैं, GitHub ही स्रोत है। यह [DSH प्लगइन परिवार](https://github.com/PerryLink) (Apache-2.0) का हिस्सा है और [awesome-dsh-plugin](https://github.com/awesome-dsh-plugin/awesome-dsh-plugin) में सूचीबद्ध है। एक ⭐ अगले व्यक्ति को इसे खोजने में मदद करता है; इसके पीछे कुछ भी बंद नहीं है।
|
|
29
|
+
|
|
30
|
+
## सामग्री
|
|
31
|
+
|
|
32
|
+
- [एक नज़र में](#एक-नज़र-में)
|
|
33
|
+
- [Everything / Spotlight / grep से कैसे अलग है](#everything--spotlight--grep-से-कैसे-अलग-है)
|
|
34
|
+
- [इंस्टॉल](#इंस्टॉल)
|
|
35
|
+
- [पहला रन](#पहला-रन)
|
|
36
|
+
- [दो खोजें](#दो-खोजें)
|
|
37
|
+
- [वेब पैनल](#वेब-पैनल)
|
|
38
|
+
- [टूल्स](#टूल्स)
|
|
39
|
+
- [क्वेरी भाषा](#क्वेरी-भाषा)
|
|
40
|
+
- [कॉन्फ़िगरेशन](#कॉन्फ़िगरेशन)
|
|
41
|
+
- [प्रदर्शन और संसाधन](#प्रदर्शन-और-संसाधन)
|
|
42
|
+
- [प्लेटफ़ॉर्म समर्थन](#प्लेटफ़ॉर्म-समर्थन)
|
|
43
|
+
- [समस्या निवारण](#समस्या-निवारण)
|
|
44
|
+
- [सोर्स से बिल्ड](#सोर्स-से-बिल्ड)
|
|
45
|
+
- [डिज़ाइन](#डिज़ाइन)
|
|
46
|
+
- [सीमाएँ](#सीमाएँ)
|
|
47
|
+
- [मेमोरी](#मेमोरी)
|
|
48
|
+
- [सुरक्षा और गोपनीयता](#सुरक्षा-और-गोपनीयता)
|
|
49
|
+
- [संस्करण और संगतता](#संस्करण-और-संगतता)
|
|
50
|
+
- [रोडमैप](#रोडमैप)
|
|
51
|
+
- [लाइसेंस](#लाइसेंस)
|
|
52
|
+
|
|
53
|
+
## एक नज़र में
|
|
54
|
+
|
|
55
|
+
फ़ाइल खोजने की दो स्थितियाँ होती हैं:
|
|
56
|
+
|
|
57
|
+
- **नाम याद है, जगह नहीं।** `glob`/`grep` हर कॉल पर फिर से चलते हैं — डायरेक्टरी पता हो तो ठीक, आधा नाम याद हो तो मुश्किल।
|
|
58
|
+
- **कोई वाक्य, निर्णय या कोड याद है, फ़ाइल या बातचीत नहीं।** नाम का इंडेक्स यहाँ काम नहीं आता, और DSH के सेशन लॉग भी उतने ही ज़रूरी डेटा हैं।
|
|
59
|
+
|
|
60
|
+
`dsh-locator` दोनों को एक ही प्लगइन में रखता है:
|
|
61
|
+
|
|
62
|
+
| क्षमता | कैसे इस्तेमाल करें |
|
|
63
|
+
|---|---|
|
|
64
|
+
| नाम / पाथ से खोज | `locator_search`, या पैनल का डिफ़ॉल्ट मोड |
|
|
65
|
+
| फ़ाइल के अंदरूनी टेक्स्ट से खोज | `locator_find`, या पैनल में **सामग्री खोजें** |
|
|
66
|
+
| DSH सेशन की सामग्री से खोज | वही टूल; परिणाम में `sessionId` / `messageId` आते हैं और पैनल उस बातचीत पर लौट सकता है |
|
|
67
|
+
| खोलना / दिखाना | टूल पाथ लौटाते हैं; पैनल डबल-क्लिक से दिखाता है, `Ctrl+O` खोलता है, `Ctrl+Enter` कंपोज़र में `@"पाथ"` डालता है |
|
|
68
|
+
| बाहरी उपयोग | `locator_export` केवल-पढ़ने वाला SQLite मिरर लिखता है |
|
|
69
|
+
|
|
70
|
+
इंडेक्स पूरी तरह स्थानीय है: कोई नेटवर्क कॉल नहीं, कोई टेलीमेट्री नहीं, कोई अपलोड नहीं; प्लगइन इंडेक्स की गई फ़ाइलों को कभी बदलता, हटाता या स्थानांतरित नहीं करता।
|
|
30
71
|
|
|
31
|
-
|
|
72
|
+
## Everything / Spotlight / grep से कैसे अलग है
|
|
32
73
|
|
|
33
|
-
|
|
74
|
+
| | dsh-locator | Everything | Spotlight | `glob` / `grep` |
|
|
75
|
+
|---|---|---|---|---|
|
|
76
|
+
| प्लेटफ़ॉर्म | Windows / macOS / Linux / WSL | Windows | macOS | क्रॉस-प्लेटफ़ॉर्म |
|
|
77
|
+
| इंडेक्स | लगातार बना, अपना | लगातार बना (NTFS USN) | सिस्टम इंडेक्स (मेटाडेटा/सामग्री) | हर कॉल पर फिर से चलता है |
|
|
78
|
+
| सामग्री खोज | टेक्स्ट फ़ाइलें + DSH सेशन संदेश | डिफ़ॉल्ट रूप से केवल नाम | हाँ, सिस्टम के अनुसार बदलता है | हाँ, लेकिन इंडेक्स नहीं |
|
|
79
|
+
| सेशन पर जाना | परिणाम में `sessionId` / `messageId` | नहीं | नहीं | नहीं |
|
|
80
|
+
| एजेंट टूल | छह टूल, एक क्वेरी भाषा | अलग CLI/सेवा चाहिए | अलग स्क्रिप्ट चाहिए | मूल टूल, स्थायी इंडेक्स नहीं |
|
|
81
|
+
| Windows पर गति | Everything के करीब (USN वैकल्पिक) | सबसे तेज़ और हल्का | लागू नहीं | इंडेक्स से धीमा |
|
|
34
82
|
|
|
35
|
-
|
|
83
|
+
संक्षेप में: Everything का **विचार** (लगातार इंडेक्स + संरचित क्वेरी) स्वतंत्र रूप से क्रॉस-प्लेटफ़ॉर्म लागू किया गया है, और ऊपर DSH सेशन जोड़े गए हैं। यह Everything का रैपर नहीं है।
|
|
36
84
|
|
|
37
85
|
## इंस्टॉल
|
|
38
86
|
|
|
@@ -40,152 +88,328 @@ dsh plugin --profile web add dsh-locator
|
|
|
40
88
|
# npm (अनुशंसित)
|
|
41
89
|
dsh plugin --profile web add dsh-locator
|
|
42
90
|
|
|
43
|
-
#
|
|
91
|
+
# संस्करण तय करें
|
|
92
|
+
dsh plugin --profile web add dsh-locator@0.7.7
|
|
93
|
+
|
|
94
|
+
# GitHub मुख्य ब्रांच
|
|
44
95
|
dsh plugin --profile web add github:PerryLink/dsh-locator
|
|
45
96
|
|
|
46
97
|
# सोर्स से
|
|
47
98
|
pnpm install
|
|
48
99
|
pnpm build
|
|
49
|
-
pnpm build:engine
|
|
50
|
-
dsh plugin --profile web add
|
|
100
|
+
pnpm build:engine # मौजूदा प्लेटफ़ॉर्म का Go इंजन
|
|
101
|
+
dsh plugin --profile web add /पूरा/पाथ/dsh-locator
|
|
51
102
|
|
|
52
|
-
# tarball
|
|
103
|
+
# tarball से (npm pack का आउटपुट; असली संस्करण डालें)
|
|
53
104
|
npm pack
|
|
54
|
-
dsh plugin --profile web add
|
|
105
|
+
dsh plugin --profile web add /पूरा/पाथ/dsh-locator-0.7.7.tgz
|
|
55
106
|
```
|
|
56
107
|
|
|
57
|
-
|
|
108
|
+
- पैकेज में छह प्लेटफ़ॉर्म के पहले से बने इंजन हैं: `linux-x64`, `linux-arm64`, `win32-x64`, `win32-arm64`, `darwin-x64`, `darwin-arm64`; स्थानीय Go की ज़रूरत नहीं।
|
|
109
|
+
- अगर npm मिरर पीछे हो, कमांड में `--registry=https://registry.npmjs.org` जोड़ें।
|
|
110
|
+
- चल रहे Web प्रोफ़ाइल में इंस्टॉल के बाद **पेज रीलोड करें** (`F5`): होस्ट टूल तुरंत माउंट हो सकते हैं, पर ब्राउज़र पैनल पेज लोड के समय boot graph से आता है। headless/TUI प्रोफ़ाइल में केवल टूल मिलते हैं।
|
|
111
|
+
- अपग्रेड: `dsh plugin --profile web add dsh-locator@latest` फिर `F5`। कंटेंट स्कीमा बदलने पर डेटाबेस एक बार फिर बनता है।
|
|
112
|
+
- अनइंस्टॉल: `dsh plugin --profile web remove dsh-locator`; कॉन्फ़िग रखकर बंद करना हो तो `enabled: false`।
|
|
58
113
|
|
|
59
|
-
|
|
114
|
+
## पहला रन
|
|
60
115
|
|
|
61
|
-
|
|
116
|
+
पहली बार माउंट होने पर इंजन कॉन्फ़िगर की गई जड़ों (डिफ़ॉल्ट: आपका होम डायरेक्टरी) को इंडेक्स करता है और स्नैपशॉट तथा कंटेंट डेटाबेस प्लेटफ़ॉर्म के कैश डायरेक्टरी में लिखता है:
|
|
62
117
|
|
|
63
|
-
|
|
118
|
+
| प्लेटफ़ॉर्म | डिफ़ॉल्ट स्टेट डायरेक्टरी |
|
|
119
|
+
|---|---|
|
|
120
|
+
| Windows | `%LOCALAPPDATA%\dsh-locator` |
|
|
121
|
+
| macOS | `~/Library/Application Support/dsh-locator` |
|
|
122
|
+
| Linux | `$XDG_CACHE_HOME/dsh-locator` या `~/.cache/dsh-locator` |
|
|
64
123
|
|
|
65
|
-
|
|
124
|
+
बड़े होम डायरेक्टरी की पहली स्कैन डिस्क पढ़ती है; आगे के स्टार्ट स्नैपशॉट लोड करते हैं। स्कैन के **दौरान** भी खोज चलती रहती है: जो इंडेक्स हो चुका है वह `indexing: true` के साथ लौटता है और पैनल के फुटर में इंडेक्स बनने की स्थिति दिखती है।
|
|
66
125
|
|
|
67
|
-
|
|
68
|
-
* कॉलम हेडर पर क्लिक करके नाम, आकार, तारीख़ या पथ से क्रम; दोबारा क्लिक पर उलटा।
|
|
69
|
-
* `केवल फ़ाइलें` / `केवल फ़ोल्डर` टाइप फ़िल्टर करते हैं; **सामग्री खोजें** चेकबॉक्स टिक करने पर खोज नाम की जगह फ़ाइलों के अंदर के टेक्स्ट और DSH सेशन संदेशों में चलती है, और हर हिट के साथ एक-लाइन का स्निपेट दिखता है। निचली पट्टी में हिट, सीमा और समय।
|
|
70
|
-
* `↑`/`↓` चयन, `Enter` कॉपी, `Ctrl+O` खोलें, `Ctrl+Enter` कंपोज़र में `@"पथ"` डालें। किसी फ़ाइल पर डबल-क्लिक उसे फ़ाइल मैनेजर में दिखाता है; सेशन वाले परिणाम पर डबल-क्लिक उस बातचीत को खोलता है और मैच हुए संदेश पर कुछ देर के लिए आउटलाइन दिखाता है। `Esc` बंद।
|
|
71
|
-
* इंटरफ़ेस `navigator.language` का पालन करता है (zh/en/es/pt/hi)।
|
|
126
|
+
डिफ़ॉल्ट रूप से `node_modules`, `.git`, `.hg`, `.svn`, `.cache`, `__pycache__`, `.venv`, `venv`, `.next` नाम से छोड़े जाते हैं; `excludes` से बदल सकते हैं।
|
|
72
127
|
|
|
73
|
-
|
|
128
|
+
आज़माएँ:
|
|
74
129
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
| `locator_rebuild` | पृष्ठभूमि में पुनर्निर्माण; खोज पुराने इंडेक्स से चलती रहती है। |
|
|
81
|
-
| `locator_reindex` | सामग्री इंडेक्स ताज़ा करें या दोबारा बनाएँ: डिफ़ॉल्ट में इंक्रीमेंटल, `full: true` से पूरा डेटाबेस हटाकर नया बनता है। |
|
|
82
|
-
| `locator_export` | केवल-पढ़ने योग्य SQLite प्रति (`entries(path, name, dir, size, mtime_ms, ext)`)। |
|
|
130
|
+
```text
|
|
131
|
+
पिछले हफ़्ते बदली गई PDF ढूँढो
|
|
132
|
+
"contentRefreshMs" पर कहाँ चर्चा हुई थी?
|
|
133
|
+
यह डिज़ाइन किस बातचीत में तय हुआ था?
|
|
134
|
+
```
|
|
83
135
|
|
|
84
|
-
|
|
136
|
+
## दो खोजें
|
|
85
137
|
|
|
86
|
-
|
|
138
|
+
### नाम से: `locator_search`
|
|
87
139
|
|
|
88
|
-
|
|
140
|
+
Everything-शैली क्वेरी जो पाथ, आकार, बदलाव की तिथि, एक्सटेंशन और प्रकार लौटाती है। “नाम में report है”, “इस हफ़्ते बदली PDF”, “50MB से बड़े वीडियो” जैसी ज़रूरतों के लिए।
|
|
89
141
|
|
|
90
|
-
|
|
142
|
+
क्रम, पेजिंग और `limit`/`offset` होस्ट इंजन करता है; 1.51 M एंट्री पर सामान्य क्वेरी दसियों मिलीसेकंड में लौटती है।
|
|
91
143
|
|
|
92
|
-
|
|
144
|
+
### सामग्री से: `locator_find`
|
|
93
145
|
|
|
94
|
-
|
|
146
|
+
टेक्स्ट फ़ाइलों और DSH सेशन संदेशों के **अंदरूनी टेक्स्ट** में खोजता है और टुकड़े तथा स्रोत लौटाता है:
|
|
95
147
|
|
|
96
|
-
|
|
148
|
+
- फ़ाइल परिणाम में पाथ होता है, उसे खोला या दिखाया जा सकता है;
|
|
149
|
+
- सेशन परिणाम में `sessionId` और `messageId` होते हैं, इसलिए पैनल बातचीत खोलकर उस संदेश पर जा सकता है;
|
|
150
|
+
- चीनी और अंग्रेज़ी सबस्ट्रिंग दोनों चलती हैं (trigram टोकनाइज़र, शब्द विभाजन की ज़रूरत नहीं)।
|
|
97
151
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
152
|
+
कंटेंट इंडेक्स का व्यवहार:
|
|
153
|
+
|
|
154
|
+
- **डिफ़ॉल्ट रूप से आलसी।** प्लगइन शुरू होने पर कुछ नहीं बनता; पहली सामग्री खोज (`locator_find` या पैनल का कंटेंट मोड) बैकग्राउंड में बिल्ड शुरू करती है, और `contentLazy: false` शुरू से बिल्ड कराता है। पहली क्वेरी `building: true` बताती है, खाली परिणाम नहीं देती।
|
|
155
|
+
- **रीस्टार्ट पर पुनः उपयोग।** डेटाबेस मौजूद हो तो केवल इंक्रीमेंटल रिफ़्रेश होता है; पूरा बिल्ड (पहले सेशन लॉग, फिर फ़ाइल कंटेंट) केवल तब चलता है जब डेटाबेस न हो, स्कीमा पुराना हो, पिछला बिल्ड अधूरा रह गया हो या डेटाबेस खुल न पाए।
|
|
156
|
+
- **इंक्रीमेंटल रिफ़्रेश** हर `contentRefreshMs` (डिफ़ॉल्ट 5 मिनट) पर, केवल बदली mtime वाली फ़ाइलें/सेशन दोबारा पढ़ता है; `0` इसे बंद करता है।
|
|
157
|
+
- **आर्काइव और सक्रिय सेशन।** आर्काइव किए गए सेशन डिफ़ॉल्ट रूप से छोड़े जाते हैं (`contentIncludeArchived: true` से शामिल); जो लॉग अभी लिखा जा रहा है वह `contentActiveSessionDelayMs` (डिफ़ॉल्ट 2 मिनट) शांत होने के बाद इंडेक्स होता है, ताकि हर रिफ़्रेश पर पूरा लॉग दोबारा डिकंप्रेस न हो। हटाए गए सेशन फ़ाइल गायब होने पर इंडेक्स से निकल जाते हैं।
|
|
158
|
+
- **बजट और ट्रंकेट।** डिफ़ॉल्ट: प्रति टेक्स्ट फ़ाइल 1MB, अधिकतम 200,000 फ़ाइलें, कुल 1GB कंटेंट, हाल के 100 सेशन। बजट पूरा होने पर स्कैन क्रम में बाद की फ़ाइलें छूट जाती हैं; `locator_find` में `content budget reached` दिखता है और HTTP स्टेट में `truncated: true` होता है। `contentMaxTotalBytes` बढ़ाएँ या `contentExcludes` सीमित करें।
|
|
159
|
+
- **डिपेंडेंसी ट्री नहीं पढ़े जाते।** `node_modules`, `.cargo`, `.bun`, `.pnpm`, `site-packages`, `toolchain`, … डिफ़ॉल्ट `contentExcludes` से छूटते हैं, वरना लाइब्रेरी कोड आपके दस्तावेज़ों से पहले बजट खा जाएगा; नाम इंडेक्स उन्हें कवर करता रहता है।
|
|
160
|
+
|
|
161
|
+
बिल्ड DSH होस्ट प्रोसेस में चलता है, पर फ़ाइल पढ़ना और zstd डिकंप्रेसन असिंक्रोनस हैं और दोनों लूप हर ~8ms पर इवेंट लूप को छोड़ते हैं: 28.6MB कॉर्पस पर सबसे लंबा इवेंट-लूप ब्लॉक 968ms से घटकर लगभग 20ms हो गया, इसलिए सेशन लोड/स्विच धीमे नहीं होते। कंटेंट **क्वेरी** worker थ्रेड में केवल-पढ़ने वाले कनेक्शन से चलती है — सामान्य शब्द लगभग 100ms, दुर्लभ शब्द कुछ मिलीसेकंड, होस्ट ब्लॉक नहीं होता।
|
|
162
|
+
|
|
163
|
+
## वेब पैनल
|
|
164
|
+
|
|
165
|
+

|
|
166
|
+
|
|
167
|
+
Web GUI में कहीं भी `Ctrl+Shift+F` दबाएँ, या साइडबार के नीचे वाले आवर्धक लेंस पर क्लिक करें।
|
|
110
168
|
|
|
111
|
-
|
|
169
|
+
- खाली क्वेरी हाल में बदली एंट्री दिखाती है; टाइप करने पर 110ms डिबाउंस के बाद वही Everything-शैली सिंटैक्स चलता है।
|
|
170
|
+
- नाम, आकार, बदलाव की तिथि या पाथ से क्रमबद्ध करने के लिए कॉलम हेडर पर क्लिक करें।
|
|
171
|
+
- **केवल फ़ाइलें** / **केवल डायरेक्टरी** से प्रकार फ़िल्टर करें।
|
|
172
|
+
- **सामग्री खोजें** चुनकर नाम से बॉडी/सेशन खोज पर जाएँ; बिल्ड के दौरान फुटर स्थिति दिखाता है और पैनल खुद दोबारा क्वेरी करता है।
|
|
173
|
+
- `↑`/`↓` चुनते हैं, `Enter` पाथ कॉपी करता है, `Ctrl+O` खोलता है, `Ctrl+Enter` कंपोज़र में `@"पाथ"` डालता है, `Esc` बंद करता है।
|
|
174
|
+
- फ़ाइल पर डबल-क्लिक Explorer/Finder/`xdg-open` में दिखाता है; सेशन पर डबल-क्लिक उस बातचीत को मिले संदेश पर खोलता है।
|
|
175
|
+
- पैनल का टेक्स्ट `navigator.language` का पालन करता है (zh/en/es/pt/hi)।
|
|
112
176
|
|
|
113
|
-
|
|
177
|
+
पैनल उसी ओरिजिन के रूट इस्तेमाल करता है — `/dsh-locator/search`, `/dsh-locator/content`, `/dsh-locator/content/rebuild`, `/dsh-locator/status`, `/dsh-locator/reveal`, `/dsh-locator/open` — इसलिए अलग सर्वर या पोर्ट नहीं चाहिए। बिना Web सर्वर वाले प्रोफ़ाइल में यह माउंट नहीं होता।
|
|
178
|
+
|
|
179
|
+
## टूल्स
|
|
180
|
+
|
|
181
|
+
| टूल | क्या करता है |
|
|
114
182
|
|---|---|
|
|
115
|
-
| `
|
|
116
|
-
| `
|
|
117
|
-
| `
|
|
118
|
-
| `
|
|
119
|
-
| `
|
|
120
|
-
| `
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
|
127
|
-
|
|
128
|
-
| `
|
|
129
|
-
| `
|
|
130
|
-
| `
|
|
131
|
-
| `
|
|
132
|
-
| `
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
|
183
|
+
| `locator_search` | नाम और पाथ खोज, `ext:`, `size:`, `dm:`, `path:` फ़िल्टर, क्रम और पेजिंग के साथ। |
|
|
184
|
+
| `locator_find` | फ़ाइल बॉडी और सेशन संदेश खोज; स्निपेट, `sessionId`/`messageId` और कंटेंट इंडेक्स की स्थिति लौटाता है। |
|
|
185
|
+
| `locator_status` | जड़ें, नाम-इंडेक्स गिनती, watcher स्थिति, स्टेट डायरेक्टरी और इंजन पाथ। (कंटेंट प्रगति `locator_find` और पैनल बताते हैं।) |
|
|
186
|
+
| `locator_rebuild` | नाम इंडेक्स को बैकग्राउंड स्कैन से बदलता है; नया तैयार होने तक पुराना इंडेक्स खोजता रहता है। |
|
|
187
|
+
| `locator_reindex` | कंटेंट इंडेक्स रिफ़्रेश/रीबिल्ड: डिफ़ॉल्ट इंक्रीमेंटल, `full: true` पूरा फिर बनाता है। |
|
|
188
|
+
| `locator_export` | नाम इंडेक्स का केवल-पढ़ने वाला SQLite मिरर (`entries` टेबल) बाहरी SQL टूल के लिए लिखता है। |
|
|
189
|
+
|
|
190
|
+
## क्वेरी भाषा
|
|
191
|
+
|
|
192
|
+
अकेले शब्द नाम के AND सबस्ट्रिंग हैं। Everything-शैली फ़िल्टर उनके साथ जुड़ते हैं:
|
|
193
|
+
|
|
194
|
+
| उदाहरण | अर्थ |
|
|
195
|
+
|---|---|
|
|
196
|
+
| `report` | नाम में `report` है |
|
|
197
|
+
| `report ext:pdf` | …और एक्सटेंशन `pdf` है |
|
|
198
|
+
| `ext:ts,js` / `ext:!tmp` | एक्सटेंशन शामिल/बाहर |
|
|
199
|
+
| `*.sln` / `?ata` | `*` और `?` वाइल्डकार्ड |
|
|
200
|
+
| `"annual report"` | स्पेस वाला वाक्यांश |
|
|
201
|
+
| `!archive` | किसी शब्द को बाहर करें |
|
|
202
|
+
| `path:src` | पूरा पाथ `src` रखता है |
|
|
203
|
+
| `size:>10mb` / `size:1kb..2mb` | आकार तुलना |
|
|
204
|
+
| `dm:today` / `dm:thisweek` / `dm:2026-01-01` | बदलाव की तिथि |
|
|
205
|
+
| `folder:` / `file:` | केवल डायरेक्टरी / केवल फ़ाइलें |
|
|
206
|
+
| `case:1` / `wholeword:1` | केस-संवेदी / शब्द सीमा |
|
|
207
|
+
|
|
208
|
+
`locator_search` `sort` (`name`, `path`, `size`, `mtime`, `ext`), `desc`, `offset`, `limit`, `regex`, `caseSensitive` और `wholeWord` भी लेता है।
|
|
209
|
+
|
|
210
|
+
## कॉन्फ़िगरेशन
|
|
211
|
+
|
|
212
|
+
हर फ़ील्ड Schemastery कॉन्फ़िग फ़ील्ड है; प्रोफ़ाइल पैच में `dsh-locator` एंट्री बदलें, उदाहरण:
|
|
213
|
+
|
|
214
|
+
```yaml
|
|
215
|
+
- id: dsh-locator
|
|
216
|
+
name: dsh-locator
|
|
217
|
+
config:
|
|
218
|
+
roots: ['/home/me/Documents', '/home/me/notes']
|
|
219
|
+
contentMaxTotalBytes: 2000000000
|
|
220
|
+
contentExcludes: ['node_modules', '.git', '.cargo', 'site-packages']
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
| कुंजी | डिफ़ॉल्ट | अर्थ |
|
|
138
224
|
|---|---|---|
|
|
139
|
-
|
|
|
140
|
-
|
|
|
141
|
-
|
|
|
225
|
+
| `enabled` | `true` | मुख्य स्विच; `false` पर टूल माउंट नहीं होते और इंजन नहीं चलता। |
|
|
226
|
+
| `roots` | होम डायरेक्टरी | इंडेक्स करने की जड़ें; एक से ज़्यादा हो सकती हैं। |
|
|
227
|
+
| `excludes` | dev/cache नाम | नाम इंडेक्स में छोड़े जाने वाले नाम-ग्लोब। |
|
|
228
|
+
| `watch` | `true` | फ़ाइलसिस्टम नोटिफ़िकेशन लागू करें। |
|
|
229
|
+
| `refreshIntervalMs` | `1800000` | नेटिव watcher न होने पर रीबिल्ड अंतराल (kqueue या watcher विफलता); `0` बंद। |
|
|
230
|
+
| `scanWorkers` | `0` | स्कैन में डायरेक्टरी पढ़ने की समानांतरता; `0` = CPU संख्या। |
|
|
231
|
+
| `windowsUsn` | `false` | वॉक से पहले NTFS USN/MFT आज़माएँ (Windows, एडमिन; विफलता पर अपने आप वॉक)। |
|
|
232
|
+
| `memoryLimitMB` | `0` | इंजन का Go सॉफ़्ट हीप लिमिट (MiB); `0` = `GOMEMLIMIT`/`GOGC` पर छोड़ें। |
|
|
233
|
+
| `contentIndex` | `true` | बॉडी और सेशन-संदेश इंडेक्स बनाएँ; `false` पर केवल नाम खोज, कंटेंट लागत लगभग शून्य। |
|
|
234
|
+
| `contentLazy` | `true` | कंटेंट इंडेक्स पहली सामग्री खोज पर बनाएँ, शुरू में नहीं। |
|
|
235
|
+
| `contentMaxFileBytes` | `1000000` | एक टेक्स्ट फ़ाइल से पढ़े जाने वाले बाइट। |
|
|
236
|
+
| `contentMaxTotalBytes` | `1000000000` | कंटेंट डेटाबेस में रखे कुल बॉडी बाइट; `0` = कोई सीमा नहीं। |
|
|
237
|
+
| `contentMaxFiles` | `200000` | प्रति बिल्ड इंडेक्स होने वाली टेक्स्ट फ़ाइलें; `0` = कोई सीमा नहीं। |
|
|
238
|
+
| `contentMaxSessions` | `100` | हाल के कितने सेशन लॉग इंडेक्स हों; `0` = सभी। |
|
|
239
|
+
| `contentRefreshMs` | `300000` | कंटेंट इंक्रीमेंटल रिफ़्रेश अंतराल; `0` बंद। |
|
|
240
|
+
| `contentIncludeArchived` | `false` | आर्काइव सेशन भी इंडेक्स करें। |
|
|
241
|
+
| `contentActiveSessionDelayMs` | `120000` | सेशन लॉग इस अवधि तक शांत रहने पर इंडेक्स हो। |
|
|
242
|
+
| `contentSessionDirs` | `[]` | अतिरिक्त सेशन डायरेक्टरी; खाली = `$DSH_HOME/sessions`। |
|
|
243
|
+
| `contentExcludes` | डिपेंडेंसी/toolchain नाम | कंटेंट इंडेक्स में छोड़े जाने वाले पाथ हिस्से/सबस्ट्रिंग; नाम इंडेक्स उन्हें कवर करता है। |
|
|
244
|
+
| `stateDir` | `''` | स्नैपशॉट और कंटेंट डेटाबेस की डायरेक्टरी; खाली = प्लेटफ़ॉर्म कैश। हर DSH प्रोसेस के लिए अलग रखें। |
|
|
245
|
+
|
|
246
|
+
कस्टम इंजन, पेज सीमा और समय-सीमा के लिए `binaryPath`, `maxResults`, `startupTimeoutMs`, `requestTimeoutMs` भी हैं; डिफ़ॉल्ट ज़्यादातर मामलों के लिए ठीक हैं।
|
|
247
|
+
|
|
248
|
+
## प्रदर्शन और संसाधन
|
|
249
|
+
|
|
250
|
+
माप एक WSL2 विकास मशीन (Linux, गर्म पेज कैश) और असली होम डायरेक्टरी पर; आपकी मशीन डिस्क, फ़ाइल संख्या, कैश और GC के अनुसार अलग होगी।
|
|
251
|
+
|
|
252
|
+
**नाम इंडेक्स**
|
|
253
|
+
|
|
254
|
+
| माप | परिणाम |
|
|
255
|
+
|---|---|
|
|
256
|
+
| ठंडा स्कैन | ~1.51 M एंट्री, 11–12 सेकंड |
|
|
257
|
+
| स्नैपशॉट आकार | 1.51 M एंट्री के लिए ~171 MB |
|
|
258
|
+
| गर्म क्वेरी (`locator_search`) | सामान्य क्वेरी 6–25ms; `path:` स्कैन ~70ms |
|
|
259
|
+
| रीबिल्ड के दौरान खोज | नया तैयार होने तक पुराना इंडेक्स खोजता रहता है |
|
|
260
|
+
| स्कैन की चरम मेमोरी | सैकड़ों MB; इंजन अलग चाइल्ड प्रोसेस है और `memoryLimitMB` / `GOMEMLIMIT` मानता है |
|
|
261
|
+
|
|
262
|
+
**कंटेंट इंडेक्स** (असली होम डायरेक्टरी, 1GB बजट)
|
|
142
263
|
|
|
143
|
-
|
|
264
|
+
| माप | परिणाम (0.7.x, असली होम) |
|
|
265
|
+
|---|---|
|
|
266
|
+
| कवरेज | ~95.8 हज़ार टेक्स्ट फ़ाइलें / 95 सेशन / 1,050 संदेश |
|
|
267
|
+
| पूरा रीबिल्ड | ~3.5 मिनट बैकग्राउंड में; उस दौरान होस्ट p95 14ms / अधिकतम 115ms |
|
|
268
|
+
| बिना बदलाव इंक्रीमेंटल | ~12 सेकंड (मुख्यतः इंजन के 1.51 M एंट्री dump में) |
|
|
269
|
+
| खाली बैठे होस्ट की देरी | p50 2ms / p95 3ms / अधिकतम 6ms |
|
|
270
|
+
| डेटाबेस आकार | ~3.1 GB (बजट का लगभग 3 गुना) |
|
|
271
|
+
| कंटेंट क्वेरी | सामान्य शब्द ~100ms, दुर्लभ शब्द कुछ ms (worker थ्रेड, होस्ट ब्लॉक नहीं) |
|
|
144
272
|
|
|
145
|
-
|
|
273
|
+
**कम संसाधन में**
|
|
146
274
|
|
|
147
|
-
|
|
275
|
+
- केवल नाम खोज: `contentIndex: false` से कंटेंट काम शून्य।
|
|
276
|
+
- कंटेंट रखते हुए कम डिस्क: `contentMaxTotalBytes` (जैसे 256000000) या `contentMaxFileBytes` घटाएँ, या `contentRefreshMs` बढ़ाएँ।
|
|
277
|
+
- ज़्यादा फ़ाइलें: `contentMaxTotalBytes` / `contentMaxFiles` बढ़ाएँ और देखें कि `contentExcludes` असली दस्तावेज़ डायरेक्टरी नहीं छोड़ रहा।
|
|
278
|
+
- कंटेंट डेटाबेस कैश है: `stateDir` हटाने पर वह फिर बनता है, स्रोत फ़ाइलों को कुछ नहीं होता।
|
|
148
279
|
|
|
149
|
-
|
|
150
|
-
- `C:\Windows` (164,216 प्रविष्टियाँ) USN से CI runner पर 7.8 s में इंडेक्स; क्वेरी 9.6 ms।
|
|
151
|
-
- 1.24 M पंक्तियों का `locator_export`: 477 MB, 6.4 s।
|
|
280
|
+
## प्लेटफ़ॉर्म समर्थन
|
|
152
281
|
|
|
153
|
-
|
|
282
|
+
| प्लेटफ़ॉर्म | स्कैन + स्नैपशॉट | लाइव अपडेट | नोट |
|
|
283
|
+
|---|---|---|---|
|
|
284
|
+
| Linux | हाँ | inotify, रिकर्सिव | वॉच डिस्क्रिप्टर प्रति डायरेक्टरी; बहुत बड़े पेड़ `fs.inotify.max_user_watches` तक पहुँच सकते हैं। |
|
|
285
|
+
| Windows | हाँ | `ReadDirectoryChangesW`, रिकर्सिव | एडमिन अधिकार या Everything ज़रूरी नहीं। ऊँचे अधिकारों में वैकल्पिक USN/MFT। WSL द्वारा `/mnt/<drive>` में किए बदलावों की सूचना न मिले तो उन जड़ों को रीबिल्ड करें। |
|
|
286
|
+
| macOS | हाँ | भेजे गए cgo बाइनरी में FSEvents, रिकर्सिव और बिना सीमा | `CGO_ENABLED=0` बिल्ड में kqueue fallback (अधिकतम 4,096 डायरेक्टरी); कंटेंट बदलाव समय-समय पर रीबिल्ड पर निर्भर। |
|
|
287
|
+
|
|
288
|
+
### Windows और USN जर्नल
|
|
154
289
|
|
|
155
|
-
|
|
290
|
+
इंजन में USN डिकोडर, वैकल्पिक फ़ास्ट पाथ और जाँच टूल है। यह पाथ **डिफ़ॉल्ट रूप से बंद** है (`windowsUsn: false`) क्योंकि वॉल्यूम ioctl के लिए एडमिन अधिकार चाहिए; इसे GitHub Actions के Windows रनर (एडमिन, असली NTFS वॉल्यूम) पर पूरा जाँचा गया है:
|
|
156
291
|
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
292
|
+
- 1,345,546 MFT रिकॉर्ड पढ़े गए, 1,345,539 पाथ हल हुए
|
|
293
|
+
- `C:\Windows` के नीचे 164,209 एंट्री (122,915 फ़ाइलें, 41,294 डायरेक्टरी)
|
|
294
|
+
- `scan --usn --root C:\Windows` ने 164,216 एंट्री 7.8 सेकंड में इंडेक्स कीं; एक क्वेरी 9.6ms में लौटी
|
|
295
|
+
- चेंज जर्नल पढ़ा गया (एक रन में 8,233 रिकॉर्ड) और `D:` पर निष्क्रिय जर्नल चेतावनी के साथ वॉक पर लौटा
|
|
296
|
+
|
|
297
|
+
खुद जाँचें:
|
|
298
|
+
|
|
299
|
+
```powershell
|
|
300
|
+
# एडमिन PowerShell (या: Start-Process -Verb RunAs <path> ...)
|
|
301
|
+
& ".\bin\win32-x64\indexd.exe" usn-probe --volume C: --root "C:\Windows" --limit 5 --journal 5
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
यह जर्नल id/USN, MFT गणना (प्रति सेकंड रिकॉर्ड, रूट के नीचे फ़ाइलें/डायरेक्टरी, नमूना पाथ) और हाल के चेंज-जर्नल रिकॉर्ड दिखाता है। बिना एडमिन यह `Access is denied` से विफल होता है; पार्सर और पाथ रीकंस्ट्रक्शन हर प्लेटफ़ॉर्म पर यूनिट टेस्ट से कवर हैं।
|
|
305
|
+
|
|
306
|
+
`windowsUsn: true` (या `indexd scan --usn`) पर इंजन डायरेक्टरी वॉक की जगह MFT गिनता है और FRN पैरेंट मैप से पाथ बनाता है। सफल USN स्कैन `usn-state.json` (जर्नल id, अगला USN, जड़ें) लिखता है और हर रिकॉर्ड में FRN रखता है; अगले `serve --usn` पर इंजन उसी कर्सर से जर्नल दोहराकर जवाब देता है, इसलिए बंद रहने के दौरान बनी फ़ाइलें बिना पूरे स्कैन के दिख जाती हैं। जर्नल लपेटा गया, हटा दिया गया या बेमेल हो तो पोर्टेबल watcher पर लौटता है। यह वॉल्यूम हैंडल रखता है और हर दो सेकंड में चेंज जर्नल देखता है, `usn.ApplyChanges` से बनना/हटना/नाम बदलना लागू करता है (वही FRN मैप, जगह पर अपडेट)। USN रिकॉर्ड में **आकार और बदलाव की तिथि नहीं होती**: नाम/पाथ सही रहते हैं, `locator_status` ऐसे इंडेक्स को `USN` बताता है, और daemon लौटे पेज पर stat करता है ताकि पंक्तियों में असली आकार/तिथि दिखे; पूरे इंडेक्स पर `size:`/`dm:` फ़िल्टर मेटाडेटा पास तक अनुमानित रहते हैं। कोई भी विफलता (एडमिन नहीं, अनसपोर्टेड वॉल्यूम, बहुत ज़्यादा रिकॉर्ड) पोर्टेबल वॉक पर चेतावनी के साथ लौटती है; खोज कभी बंद नहीं होती।
|
|
307
|
+
|
|
308
|
+
Everything NTFS की Master File Table को USN जर्नल से पढ़ता है, इसलिए उसका पहला इंडेक्स लगभग तुरंत बनता है। `dsh-locator` डिफ़ॉल्ट रूप से पोर्टेबल डायरेक्टरी वॉक रखता है (सेवा नहीं, UAC नहीं, कोई भी फ़ाइलसिस्टम) और जहाँ प्रोसेस के पास `GENERIC_READ` (एडमिन) है वहाँ USN/MFT को वैकल्पिक फ़ास्ट पाथ की तरह इस्तेमाल करता है, रीस्टार्ट के बीच जर्नल रीप्ले के साथ। पोर्टेबल रास्ता fallback बना रहता है।
|
|
309
|
+
|
|
310
|
+
## समस्या निवारण
|
|
311
|
+
|
|
312
|
+
**इंस्टॉल के बाद पैनल नहीं दिखता।**
|
|
313
|
+
पेज रीलोड करें (`F5`); देखें कि आपने `web` प्रोफ़ाइल में इंस्टॉल किया है और पैनल boot graph से लोड होता है। headless/TUI प्रोफ़ाइल में पैनल नहीं होता।
|
|
314
|
+
|
|
315
|
+
**अभी बनी फ़ाइल नहीं मिलती।**
|
|
316
|
+
नोटिफ़िकेशन अभी न आई हो (WSL का `/mnt/c` लेखन, नेटवर्क शेयर, कुछ कंटेनर overlay में सामान्य)। थोड़ा रुकें या उस जड़ के लिए `locator_rebuild` चलाएँ। USN मोड रीस्टार्ट पर जर्नल दोहराता है।
|
|
317
|
+
|
|
318
|
+
**सामग्री खोज में कुछ नहीं मिलता।**
|
|
319
|
+
`locator_find` के परिणाम में `building` देखें: पहली खोज आलसी बिल्ड शुरू करती है और पूरा होने तक परिणाम अधूरे हो सकते हैं (पैनल खुद दोबारा क्वेरी करता है)। यह भी देखें कि एक्सटेंशन टेक्स्ट प्रकार का है, फ़ाइल `contentMaxFileBytes` से छोटी है, `contentExcludes` से बाहर नहीं है, और सेशन आर्काइव नहीं है (आर्काइव डिफ़ॉल्ट रूप से छूटते हैं)।
|
|
320
|
+
|
|
321
|
+
**कंटेंट डेटाबेस बहुत बड़ा / डिस्क तेज़ी से बढ़ती है।**
|
|
322
|
+
[प्रदर्शन और संसाधन](#प्रदर्शन-और-संसाधन) देखें: बजट घटाएँ या `contentIndex: false` करें। `stateDir` हटाने पर रीबिल्ड होता है।
|
|
323
|
+
|
|
324
|
+
**`inotify` चेतावनी आती है।**
|
|
325
|
+
बहुत ज़्यादा डायरेक्टरी कर्नेल सीमा तक पहुँचती हैं; इंडेक्स चलता रहता है और बदलाव समय-समय पर रीबिल्ड पर निर्भर रहते हैं। `fs.inotify.max_user_watches` बढ़ाएँ या `roots` घटाएँ।
|
|
326
|
+
|
|
327
|
+
**अपग्रेड के बाद व्यवहार बदला।**
|
|
328
|
+
`dsh plugin --profile web add dsh-locator@latest` चलाएँ, फिर `F5`। कंटेंट स्कीमा बदलने पर डेटाबेस एक बार फिर बनता है। [CHANGELOG](CHANGELOG.md) देखें।
|
|
162
329
|
|
|
163
330
|
## सोर्स से बिल्ड
|
|
164
331
|
|
|
165
|
-
Node `^22.19 || >=24.9`, pnpm और Go 1.22
|
|
332
|
+
ज़रूरतें: Node `^22.19 || >=24.9`, pnpm और इंजन के लिए Go 1.22+।
|
|
166
333
|
|
|
167
334
|
```sh
|
|
168
335
|
pnpm install
|
|
169
336
|
pnpm build
|
|
170
|
-
pnpm build:engine:all
|
|
171
|
-
pnpm check
|
|
337
|
+
pnpm build:engine:all # या मौजूदा प्लेटफ़ॉर्म के लिए build:engine
|
|
338
|
+
pnpm check # typecheck + टेस्ट + पैकेजिंग/इंस्टॉल जाँच
|
|
172
339
|
```
|
|
173
340
|
|
|
174
|
-
|
|
341
|
+
इंजन `engine/` में अलग Go मॉड्यूल है; टेस्ट `cd engine && go test ./...` से चलते हैं। macOS का FSEvents बैकएंड cgo चाहता है और macOS CI पर बनता है। Node टेस्ट CI में Linux, Windows और macOS पर चलते हैं।
|
|
342
|
+
|
|
343
|
+
## डिज़ाइन
|
|
344
|
+
|
|
345
|
+

|
|
346
|
+
|
|
347
|
+
```
|
|
348
|
+
DeepSeek Harness
|
|
349
|
+
└─ dsh-locator (TypeScript प्लगइन)
|
|
350
|
+
├─ locator_search / locator_find / locator_status / locator_rebuild /
|
|
351
|
+
│ locator_reindex / locator_export
|
|
352
|
+
├─ client.js: Ctrl+Shift+F ओवरले (shell.overlay स्लॉट)
|
|
353
|
+
├─ POST /dsh-locator/{search,content,status,reveal,open} (समान ओरिजिन)
|
|
354
|
+
├─ कंटेंट स्टोर: होस्ट प्रोसेस में SQLite FTS5 (trigram),
|
|
355
|
+
│ क्वेरी worker थ्रेड में
|
|
356
|
+
└─ चाइल्ड प्रोसेस: indexd serve (Go, stdio पर NDJSON)
|
|
357
|
+
├─ scanner: रिकर्सिव वॉक, excludes, प्रगति
|
|
358
|
+
├─ index: नाम arena + फ़िक्स्ड रिकॉर्ड + ओपन-एड्रेसिंग पाथ टेबल
|
|
359
|
+
├─ query: parser, matcher, top-K चयन, क्रम, पेजिंग
|
|
360
|
+
├─ watcher: inotify (Linux) / ReadDirectoryChangesW (Windows)
|
|
361
|
+
└─ snapshot: एक फ़ाइल, mmap-friendly, परमाणु rename
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
- **समानांतर स्कैनर।** डायरेक्टरी रीडर सीमित क्यू खाली करते हैं और प्रति डायरेक्टरी एक बैच लिखते हैं (`AddBatch`), इसलिए बच्चों से पहले पैरेंट रिकॉर्ड मौजूद रहता है। क्यू ब्लॉक नहीं करता: भर जाने पर वह सबट्री जगह पर ही स्कैन होती है।
|
|
365
|
+
- **मेमोरी लेआउट।** रिकॉर्ड में बाइट arena में नाम का offset/length और पैरेंट id रहता है; पूरा पाथ केवल परिणाम पेज और `path:` फ़िल्टर के लिए बनता है। इससे प्रति फ़ाइल स्ट्रिंग हेडर नहीं चाहिए।
|
|
366
|
+
- **पाथ टेबल।** `id+1` स्लॉट वाली ओपन-एड्रेसिंग टेबल lookup/update को ~12 बाइट प्रति एंट्री पर रखती है, `map[string]int32` के ~50 बाइट के बजाय।
|
|
367
|
+
- **क्वेरी इंजन।** शब्द और फ़िल्टर एक बार कंपाइल होते हैं, समानांतर खंडों में मिलते हैं, फिर सीमित max-heap से घटाए जाते हैं: लाखों मैच सॉर्ट किए बिना शीर्ष `offset+limit` पंक्तियाँ चुनी जाती हैं।
|
|
368
|
+
- **कंटेंट इंडेक्स।** होस्ट में SQLite FTS5 और trigram टोकनाइज़र (UTF-8 सबस्ट्रिंग, CJK); फ़ाइल सूची इंजन के स्कैन से आती है, सेशन लॉग Node के zstd से डिकंप्रेस होते हैं।
|
|
369
|
+
- **कंटेंट संगति।** प्रति-प्रोसेस बिल्ड लॉक `stateDir` साझा करने वाले लेखकों को क्रम में रखता है, पूर्णता फ़्लैग अधूरे बिल्ड के बाद रीबिल्ड कराता है, और पुराना हैंडल device+inode से पहचाना जाता है ताकि दूसरे प्रोसेस का रीबिल्ड होस्ट को हटाए गए डेटाबेस पर न छोड़े।
|
|
370
|
+
- **स्थायित्व।** स्नैपशॉट अस्थायी फ़ाइल में लिखकर rename होता है; generation काउंटर daemon को केवल बदलाव पर सेव कराता है। हटाने की संख्या सीमा पार करने पर tombstones कॉम्पैक्ट होते हैं।
|
|
371
|
+
- **प्रोटोकॉल।** stdio पर प्रति पंक्ति एक JSON अनुरोध/उत्तर, साथ में `scan`, `stats`, `warning`, `error`, `rebuilt` इवेंट। कोई पोर्ट नहीं, कोई auth सतह नहीं, कोई नेटवर्क लिसनर नहीं।
|
|
372
|
+
- **केवल-पढ़ना।** इंजन फ़ाइलें केवल मेटाडेटा के लिए खोलता है; इंडेक्स किए पाथ में कभी नहीं लिखता।
|
|
175
373
|
|
|
176
374
|
## सीमाएँ
|
|
177
375
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
376
|
+
- कंटेंट खोज केवल टेक्स्ट फ़ाइलें (एक्सटेंशन से) और DSH सेशन लॉग पढ़ती है; PDF, Office और चित्रों से टेक्स्ट नहीं निकाला जाता।
|
|
377
|
+
- कंटेंट बजट स्कैन क्रम में खर्च होता है, फ़ाइल महत्व से नहीं; सीमा पूरी होने पर बाद की फ़ाइलें खोजी नहीं जा सकतीं (`truncated` true)।
|
|
378
|
+
- इंडेक्स कॉन्फ़िगर की गई जड़ों तक है; यह फ़ाइलसिस्टम ड्राइवर नहीं है।
|
|
379
|
+
- Linux inotify प्रति डायरेक्टरी एक डिस्क्रिप्टर लेता है; लाखों डायरेक्टरी होने पर कर्नेल सीमा पार हो सकती है। प्लगइन चेतावनी देता है और स्नैपशॉट काम करता रहता है; रीबिल्ड भरपाई करते हैं।
|
|
380
|
+
- WSL से `/mnt/c` में लिखी फ़ाइलों की Windows सूचना न मिले (watcher 9p लेखक का स्ट्रीम नहीं देख सकता)। उन जड़ों को रीबिल्ड करें।
|
|
381
|
+
- नेटवर्क शेयर तभी स्कैन होते हैं जब सामान्य डायरेक्टरी की तरह पहुँच में हों; SMB-विशिष्ट चेंज फ़ीड नहीं है।
|
|
382
|
+
- सेशन सामग्री स्थानीय लॉग से आती है; डिस्क पर न लिखे नए संदेश खोजे नहीं जा सकते।
|
|
383
|
+
- एक ही `stateDir` साझा करने वाले दो DSH प्रोसेस से बचें: बिल्ड लॉक लेखकों को क्रम में रखता है, पर एक खुला डेटाबेस हैंडल साझा नहीं कर सकता।
|
|
384
|
+
- macOS भेजे गए बाइनरी में FSEvents (रिकर्सिव) इस्तेमाल करता है; `CGO_ENABLED=0` बिल्ड kqueue पर जाता है, 4,096 डायरेक्टरी सीमा के साथ, और कंटेंट बदलाव समय-समय पर रीबिल्ड पर निर्भर रहते हैं।
|
|
385
|
+
- Windows USN/MFT वैकल्पिक है और केवल तब इस्तेमाल होता है जब प्रोसेस वॉल्यूम पढ़ सके और जर्नल सक्रिय हो; वरना पोर्टेबल वॉक चलता है।
|
|
386
|
+
|
|
387
|
+
## मेमोरी
|
|
388
|
+
|
|
389
|
+
इंजन एक Go प्रोसेस है और मानक `GOMEMLIMIT` और `GOGC` (या कॉन्फ़िग में `memoryLimitMB`) मानता है। 1.2–1.5 M एंट्री का इंडेक्स डिफ़ॉल्ट GC के साथ कई सौ MB RSS तक जाता है; होस्ट पर RAM कम हो तो `GOMEMLIMIT=600MiB` (सॉफ़्ट सीमा, रनटाइम CPU देकर मेमोरी बचाता है) या `GOGC=50` रखें। इनसे स्नैपशॉट फ़ॉर्मेट नहीं बदलता। ऊपर के आँकड़ों वाले लाइव सेटअप में DSH होस्ट प्रोसेस (कंटेंट डेटाबेस पेज कैश सहित) इंडेक्स बने रहने पर लगभग 700 MB RSS पर था, और खाली बैठे होस्ट की देरी p50 2ms रही।
|
|
183
390
|
|
|
184
391
|
## सुरक्षा और गोपनीयता
|
|
185
392
|
|
|
186
|
-
|
|
393
|
+
- इंडेक्स पूरी तरह स्थानीय है: कोई नेटवर्क कॉल नहीं, कोई टेलीमेट्री नहीं, कोई अपलोड नहीं। प्लगइन इंडेक्स की गई फ़ाइलों को कभी बदलता, हटाता या स्थानांतरित नहीं करता।
|
|
394
|
+
- कंटेंट डेटाबेस और बिल्ड लॉक `0600` पर बनते हैं, स्टेट डायरेक्टरी `0700` पर: स्थानीय दूसरे उपयोगकर्ता इंडेक्स किए दस्तावेज़ या सेशन टेक्स्ट नहीं पढ़ सकते।
|
|
395
|
+
- स्नैपशॉट और कंटेंट डेटाबेस में नाम, पाथ और बॉडी होते हैं; स्टेट डायरेक्टरी को निजी डेटा मानें। उसे हटाने पर कैश साफ़ हो जाता है।
|
|
396
|
+
- एक साथ चल रहे DSH प्रोसेस को अलग-अलग `stateDir` दें।
|
|
397
|
+
|
|
398
|
+
## संस्करण और संगतता
|
|
399
|
+
|
|
400
|
+
- Node `^22.19.0 || >=24.9.0`; DSH `>=0.2.1-rc.2 <0.3.0` (`package.json` का `engines` देखें)।
|
|
401
|
+
- रिलीज़ GitHub Actions provenance के साथ प्रकाशित होते हैं, इसलिए npm पैकेज का स्रोत सत्यापित किया जा सकता है; Gitee / GitCode मिरर वर्कफ़्लो से सिंक होते हैं।
|
|
402
|
+
- चेंजलॉग: [CHANGELOG.md](CHANGELOG.md); सवाल और रिपोर्ट: [Issues](https://github.com/PerryLink/dsh-locator/issues)।
|
|
403
|
+
|
|
404
|
+
## रोडमैप
|
|
405
|
+
|
|
406
|
+
यह प्रतिबद्धता नहीं, बस मौजूदा दिशा है:
|
|
187
407
|
|
|
188
|
-
|
|
408
|
+
1. असली Windows इंस्टॉल पर Electron डेस्कटॉप रनटाइम की जाँच।
|
|
409
|
+
2. पैनल में प्रीव्यू और परिणाम समूहन।
|
|
410
|
+
3. Windows on ARM / Linux ARM रनटाइम कवरेज।
|
|
411
|
+
4. बहुत बड़े इंडेक्स के लिए लोअरकेस नाम arena और trigram प्रीफ़िल्टर।
|
|
412
|
+
5. इंक्रीमेंटल स्नैपशॉट कॉम्पैक्शन और प्रति-रूट जर्नल।
|
|
189
413
|
|
|
190
414
|
## लाइसेंस
|
|
191
415
|
|