dsh-locator 0.8.1 → 0.9.0
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 +25 -0
- package/README-es.md +21 -5
- package/README-hi.md +22 -5
- package/README-pt.md +22 -5
- package/README.en.md +22 -5
- package/README.md +22 -5
- package/client.js +968 -54
- package/lib/combined.d.ts +20 -3
- package/lib/combined.d.ts.map +1 -1
- package/lib/combined.js +79 -13
- package/lib/combined.js.map +1 -1
- package/lib/content-search-worker.d.ts +3 -3
- package/lib/content-search-worker.js +11 -6
- package/lib/content-search-worker.js.map +1 -1
- package/lib/content-search.d.ts +81 -7
- package/lib/content-search.d.ts.map +1 -1
- package/lib/content-search.js +454 -36
- package/lib/content-search.js.map +1 -1
- package/lib/content.d.ts +20 -0
- package/lib/content.d.ts.map +1 -1
- package/lib/content.js +71 -21
- package/lib/content.js.map +1 -1
- package/lib/find.d.ts.map +1 -1
- package/lib/find.js +2 -1
- package/lib/find.js.map +1 -1
- package/lib/http.d.ts.map +1 -1
- package/lib/http.js +9 -2
- package/lib/http.js.map +1 -1
- package/package.json +1 -1
- package/src/combined.ts +97 -15
- package/src/content-search-worker.ts +15 -8
- package/src/content-search.ts +559 -36
- package/src/content.ts +81 -18
- package/src/find.ts +3 -2
- package/src/http.ts +11 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,30 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.9.0 — 2026-11-12
|
|
4
|
+
|
|
5
|
+
Advanced find and a two-surface search model, informed by Notepad++/Notepad--/VS Code and a live-DB benchmark.
|
|
6
|
+
|
|
7
|
+
* **Counts**: `/combined` returns `count: { value, kind: exact|bounded }` per group; the panel shows exact counts where cheap and `≥ N` for bounded counts, plus the selected position and footer summary. Name groups keep exact totals.
|
|
8
|
+
* **Match options**: mode (Normal / Extended / Regex), match case and whole word. Names use the existing engine flags; content gains Normal/Extended/case/whole-word with GLOB/LIKE/JS-boundary paths. Regex pauses the content group (names still work) so a keystroke never scans the corpus.
|
|
9
|
+
* **Current conversation scope**: the panel can restrict content to one session; the content index keeps a session-id → log-path map and queries `rowid IN (docs_meta.path = ?)` (0.1–0.9 ms). Unknown sessions return an empty group plus a warning.
|
|
10
|
+
* **In-conversation find bar (`Ctrl+F`)**: non-modal bar anchored to the conversation; counts `i/N`, next/previous, wrap (on by default), reverse direction, match case, whole word, Normal/Extended/Regex, selection scoping (`Ctrl+F` with a selection starts in that selection), loaded-window notice with “load earlier messages and retry”, current match underlined, Esc clears the highlight and restores focus.
|
|
11
|
+
* **Performance**: the content page path no longer evaluates `snippet()`/`bm25` with `ORDER BY score` for every matching row. It fetches rank rowids, then bodies by rowid (no MATCH on that statement), and builds snippets/line numbers in JS: normal `the` on the live 1 GB corpus went from about **2.7 s to 65 ms**; case/whole/extended/session paths are bounded.
|
|
12
|
+
* **Robustness**: the find bar uses an owner-aware CSS-Highlight manager (jump vs find), cancels pending scans with a sequence token, debounces DOM mutations, caps matches/text, runs regex in a worker with a 500 ms timeout, ignores IME composition, drops a dead selection back to the session, closes on conversation switch/panel open/dispose, and cleans all timers/observers/style tags.
|
|
13
|
+
* **Tests**: 52 (26 content, 13 combined, plus find/plugin/runtime/lag/export/reveal); verify checks the find-bar and owner-highlight markers.
|
|
14
|
+
* No content schema change and no rebuild: 0.9.0 runs on the 0.8.1 schema v3 database. Whole-corpus content regex remains intentionally out of P0 (ReDoS/cost); use the conversation find bar.
|
|
15
|
+
|
|
16
|
+
## 0.8.2 — 2026-11-12
|
|
17
|
+
|
|
18
|
+
Robustness pass over the 0.8.1 review fixes.
|
|
19
|
+
|
|
20
|
+
* A cancelled jump now also drops its scroll lock: the correction timers and scroll/pointer listeners used to survive an `Esc`, a new jump or a session switch while the highlight was cleared.
|
|
21
|
+
* A detached Range self-heals: when the host re-renders the target row, the session watcher re-resolves the row and re-applies the highlight instead of silently clearing it.
|
|
22
|
+
* `conversationScope` prefers a visible conversation pane, so a hidden main pane or a sidebar copy cannot capture the highlight.
|
|
23
|
+
* The content group no longer calls `contentStatus()` outside the guard; a throwing status cannot fail the whole combined response (covered by a new test) and only the content group reports the error.
|
|
24
|
+
* Panel callbacks (reveal/open/activate/insert) no longer act on stale rows while a newer query is loading.
|
|
25
|
+
* The panel and its transient notice share one slot injection, so both are disposed together.
|
|
26
|
+
* Tests: 38.
|
|
27
|
+
|
|
3
28
|
## 0.8.1 — 2026-11-12
|
|
4
29
|
|
|
5
30
|
Pre-delivery review fixes for 0.8.0, plus an exact DOM anchor for assistant messages.
|
package/README-es.md
CHANGED
|
@@ -35,6 +35,7 @@ dsh plugin --profile web add dsh-locator
|
|
|
35
35
|
- [Primera ejecución](#primera-ejecución)
|
|
36
36
|
- [Dos búsquedas](#dos-búsquedas)
|
|
37
37
|
- [Panel web](#panel-web)
|
|
38
|
+
- [Buscar en la conversación (Ctrl+F)](#buscar-en-la-conversación-ctrlf)
|
|
38
39
|
- [Herramientas](#herramientas)
|
|
39
40
|
- [Lenguaje de consulta](#lenguaje-de-consulta)
|
|
40
41
|
- [Configuración](#configuración)
|
|
@@ -162,20 +163,33 @@ La construcción ocurre dentro del proceso anfitrión de DSH, pero las lecturas
|
|
|
162
163
|
|
|
163
164
|
## Panel web
|
|
164
165
|
|
|
165
|
-
Pulsa `Ctrl+Shift+F` en la GUI web, o haz clic en la lupa del pie de la barra lateral. El panel usa rutas del mismo origen (`search`, `content`, `content/rebuild`, `combined`, `status`, `reveal`, `open`), sin otro servidor ni otro puerto.
|
|
166
|
+
Pulsa `Ctrl+Shift+F` en la GUI web, o haz clic en la lupa del pie de la barra lateral. El panel usa rutas del mismo origen (`search`, `content`, `content/rebuild`, `combined`, `status`, `reveal`, `open`), sin otro servidor ni otro puerto. La ruta `/combined` acepta `matchMode`, `caseSensitive`, `wholeWord`, `sessionId` y `count`; el grupo de contenido devuelve `count`/`warnings`, y sus aciertos de archivo incluyen `line`.
|
|
166
167
|
|
|
167
168
|
- **Los tres ámbitos están activos por defecto**: contenido (cuerpos + sesiones), archivos y carpetas; desmarca cualquiera para acotar. Los resultados se agrupan **contenido → archivos → carpetas** con el recuento por grupo; el contenido se ordena por relevancia y los grupos de nombres siguen el menú de orden.
|
|
168
169
|
- **Doble clic o `Enter` activa un resultado**: una sesión abre la conversación y pinta las palabras encontradas con un resaltado ámbar translúcido que sigue el desplazamiento, se centra al llegar y se limpia con `Esc`; archivos y carpetas se muestran en el gestor de archivos. `Ctrl+Shift+C` copia la ruta, `Ctrl+O` abre, `Ctrl+Enter` inserta `@file` y `Alt+1–3` alterna los ámbitos.
|
|
169
|
-
-
|
|
170
|
-
-
|
|
170
|
+
- **Recuentos**: cada encabezado de grupo muestra su número de aciertos; es exacto cuando el cálculo es barato y aparece como `≥ N` cuando hay un tope. La cabecera indica la posición seleccionada (`3/37`) y el pie resume los tres grupos. La consulta paginada del contenido ahora obtiene primero los rowid ordenados por `rank`, luego el cuerpo por rowid y genera el fragmento y la línea en JS: las palabras comunes bajaron de unos 2,7 s a menos de 300 ms.
|
|
171
|
+
- **Opciones de búsqueda**: la barra de herramientas ofrece el modo (Normal / Extendido / Regex), `Aa` para distinguir mayúsculas y minúsculas, palabra completa y el ámbito de la conversación actual. El modo y las opciones de mayúsculas/palabra completa se aplican a nombres de archivos y carpetas; el contenido admite Normal/Extendido, mayúsculas y palabra completa, pero **en modo regex el grupo de contenido se pausa** y muestra un aviso (los nombres sí admiten regex), de modo que ninguna pulsación del panel recorre toda la biblioteca.
|
|
172
|
+
- **Ámbito de la conversación actual**: solo busca los mensajes ya indexados de esa sesión (una sesión activa tarda unos 2 minutos en quedar indexada), y los ámbitos de archivos y carpetas se desactivan, pero conservan la marca de verificación. Para recorrer coincidencias en vivo usa la barra de `Ctrl+F` que se describe más abajo.
|
|
173
|
+
- Las consultas de contenido requieren al menos dos caracteres; las consultas vacías o de un carácter no inician la construcción. Mientras construye, el grupo de contenido muestra el progreso y los nombres responden al momento; los ámbitos y las opciones de búsqueda se recuerdan.
|
|
174
|
+
- Teclado: `↑`/`↓`, `Home`/`End`, `PageUp`/`PageDown` mueven, `F3`/`Shift+F3` recorren las filas de resultados en ciclo, `Enter` activa y `Esc` cierra; el diálogo atrapa el foco y lo restaura al cerrar. El texto sigue `navigator.language` (zh/en/es/pt/hi).
|
|
171
175
|
|
|
176
|
+
## Buscar en la conversación (Ctrl+F)
|
|
177
|
+
|
|
178
|
+
En una conversación, pulsa `Ctrl+F` (o el botón `⌕` de la cabecera de la sesión) para abrir una barra de búsqueda no modal en la esquina superior derecha. La barra solo busca en los mensajes **cargados** de la conversación actual, sin depender del índice de contenido ni de su retraso de unos dos minutos:
|
|
179
|
+
|
|
180
|
+
- **Recuento y navegación**: muestra `3/17`; `Enter`/`F3` van a la siguiente coincidencia y `Shift+Enter`/`Shift+F3` a la anterior. El recorrido circular (continuar al inicio) está activo por defecto: al llegar a un extremo, la búsqueda sigue por el otro y lo indica. Todas las coincidencias llevan un resaltado translúcido; la actual es más intensa y va subrayada.
|
|
181
|
+
- **Opciones**: `Aa` distingue mayúsculas y minúsculas, palabra completa (límites ASCII `[A-Za-z0-9_]`; los caracteres CJK cuentan como no palabra), continuar al inicio (`↻`) y búsqueda en sentido inverso (`⇅`, que cambia el sentido de `Enter`); los botones de anterior y siguiente están siempre visibles.
|
|
182
|
+
- **Modos**: Normal (literal), Extendido (`\n` `\r` `\t` `\0` `\xHH` `\\`; las secuencias desconocidas se buscan tal cual) y Regex (JS RegExp en un hilo worker con un límite de 500 ms; un patrón no válido muestra el error en línea). Las coincidencias de longitud cero se omiten en vez de bloquear la interfaz.
|
|
183
|
+
- **Selección**: selecciona texto en la conversación y pulsa `Ctrl+F`; la barra empieza limitada a esa selección y muestra un chip. Las selecciones que cruzan mensajes también funcionan; si la selección caduca, la barra vuelve a toda la conversación.
|
|
184
|
+
- **Ventana cargada**: solo se buscan los mensajes cargados; en conversaciones largas usa «Cargar mensajes anteriores y reintentar» en vez de paginar automáticamente.
|
|
185
|
+
- `Esc` cierra la barra y limpia los resaltados; cambiar de conversación, abrir el panel o desmontar el plugin también limpian. El panel global se encarga de descubrir archivos y sesiones; la barra recorre coincidencias dentro de la conversación actual, y sus resaltados nunca se superponen.
|
|
172
186
|
|
|
173
187
|
## Herramientas
|
|
174
188
|
|
|
175
189
|
| Herramienta | Qué hace |
|
|
176
190
|
|---|---|
|
|
177
191
|
| `locator_search` | Consulta nombres y rutas con filtros `ext:`, `size:`, `dm:`, `path:`, ordenación y paginación. |
|
|
178
|
-
| `locator_find` | Busca en cuerpos de archivo y mensajes de sesión; devuelve fragmentos, `sessionId`/`messageId
|
|
192
|
+
| `locator_find` | Busca en cuerpos de archivo y mensajes de sesión; devuelve fragmentos, `sessionId`/`messageId`, el estado del índice de contenido y el campo opcional `line` en los aciertos de archivo. |
|
|
179
193
|
| `locator_status` | Raíces, recuentos del índice de nombres, estado del watcher, directorio de estado y ruta del motor. (El progreso del contenido lo informan `locator_find` y el panel). |
|
|
180
194
|
| `locator_rebuild` | Sustituye el índice de nombres por un escaneo en segundo plano; las búsquedas usan el índice antiguo hasta que el nuevo esté listo. |
|
|
181
195
|
| `locator_reindex` | Actualiza o reconstruye el índice de contenido: incremental por defecto, `full: true` lo borra y reconstruye. |
|
|
@@ -378,7 +392,9 @@ DeepSeek Harness
|
|
|
378
392
|
- macOS usa FSEvents (recursivo) en los binarios publicados; una compilación con `CGO_ENABLED=0` cae a kqueue, limitado a 4.096 directorios, con cambios de contenido dependientes de la reconstrucción periódica.
|
|
379
393
|
- USN/MFT de Windows es opcional y solo se usa si el proceso puede leer el volumen y el diario está activo; si no, se usa el recorrido portátil.
|
|
380
394
|
|
|
381
|
-
- Los aciertos en el cuerpo de un archivo se muestran por ahora en el gestor de archivos (la vista por línea dentro de DSH es el siguiente paso); los mensajes del asistente
|
|
395
|
+
- Los aciertos en el cuerpo de un archivo se muestran por ahora en el gestor de archivos (la vista por línea dentro de DSH es el siguiente paso; los resultados ya incluyen el campo de número de línea `line`); los mensajes del asistente se anclan por su clave de nodo `turn:step`, con la frase solo como reserva. Actualizar de 0.8.0 a 0.8.1 reconstruye una vez la base de contenido por el nuevo campo de clave de nodo.
|
|
396
|
+
- **La regex de contenido en toda la biblioteca queda fuera del P0**: el modo regex pausa el grupo de contenido (los nombres de archivos y carpetas sí admiten regex) para evitar recorrer una biblioteca de 1 GB y riesgos de ReDoS; la barra de búsqueda dentro de la conversación sí admite regex.
|
|
397
|
+
- El ámbito de la conversación actual solo cubre los mensajes de sesión ya asentados en el índice (una sesión activa tarda unos 2 minutos en indexarse); para buscar en vivo usa `Ctrl+F`. La barra de búsqueda solo cubre la ventana cargada; el historial anterior se carga a mano.
|
|
382
398
|
- El resaltado dentro de la conversación usa la API CSS Custom Highlight; los navegadores antiguos sin ella caen a un contorno de fila.
|
|
383
399
|
|
|
384
400
|
## Memoria
|
package/README-hi.md
CHANGED
|
@@ -35,6 +35,7 @@ dsh plugin --profile web add dsh-locator
|
|
|
35
35
|
- [पहला रन](#पहला-रन)
|
|
36
36
|
- [दो खोजें](#दो-खोजें)
|
|
37
37
|
- [वेब पैनल](#वेब-पैनल)
|
|
38
|
+
- [बातचीत में खोज (Ctrl+F)](#बातचीत-में-खोज-ctrlf)
|
|
38
39
|
- [टूल्स](#टूल्स)
|
|
39
40
|
- [क्वेरी भाषा](#क्वेरी-भाषा)
|
|
40
41
|
- [कॉन्फ़िगरेशन](#कॉन्फ़िगरेशन)
|
|
@@ -162,12 +163,26 @@ Everything-शैली क्वेरी जो पाथ, आकार, ब
|
|
|
162
163
|
|
|
163
164
|
## वेब पैनल
|
|
164
165
|
|
|
165
|
-
Web GUI में कहीं भी `Ctrl+Shift+F` दबाएँ, या साइडबार के नीचे वाले आवर्धक लेंस पर क्लिक करें। पैनल उसी ओरिजिन के रूट (`search`, `content`, `content/rebuild`, `combined`, `status`, `reveal`, `open`) इस्तेमाल करता है — अलग सर्वर या पोर्ट नहीं चाहिए।
|
|
166
|
+
Web GUI में कहीं भी `Ctrl+Shift+F` दबाएँ, या साइडबार के नीचे वाले आवर्धक लेंस पर क्लिक करें। पैनल उसी ओरिजिन के रूट (`search`, `content`, `content/rebuild`, `combined`, `status`, `reveal`, `open`) इस्तेमाल करता है — अलग सर्वर या पोर्ट नहीं चाहिए। `/combined` `matchMode`, `caseSensitive`, `wholeWord`, `sessionId` और `count` भी स्वीकार करता है; सामग्री समूह `count`/`warnings` लौटाता है और फ़ाइल हिट के साथ `line` (पंक्ति संख्या) भी मिलती है।
|
|
166
167
|
|
|
167
168
|
- **तीनों क्षेत्र डिफ़ॉल्ट रूप से चालू हैं**: सामग्री (बॉडी + सत्र), फ़ाइलें और फ़ोल्डर; किसी को हटाकर दायरा घटाएँ। परिणाम **सामग्री → फ़ाइलें → फ़ोल्डर** में समूहित होते हैं और हर समूह पर गिनती दिखती है; सामग्री प्रासंगिकता से क्रमबद्ध होती है और नाम-समूह क्रम मेन्यू का पालन करते हैं।
|
|
168
169
|
- **डबल-क्लिक या `Enter` पर परिणाम सक्रिय होता है**: सत्र परिणाम बातचीत खोलकर मिले शब्दों पर पारभासी अंबर हाइलाइट लगाता है जो स्क्रॉल के साथ चलता है, पहुँचने पर केंद्रित होता है और `Esc` से हटता है; फ़ाइल/फ़ोल्डर फ़ाइल मैनेजर में दिखते हैं। `Ctrl+Shift+C` पथ कॉपी करता है, `Ctrl+O` खोलता है, `Ctrl+Enter` `@file` डालता है और `Alt+1–3` क्षेत्र बदलता है।
|
|
169
|
-
-
|
|
170
|
-
-
|
|
170
|
+
- **गिनती**: समूह-हेडर पर मैचों की संख्या दिखती है — जहाँ सस्ता हो वहाँ सटीक अंक, और सीमा लगने पर `≥ N`। पैनल के हेडर में चुनी हुई पंक्ति की स्थिति (`चयनित 3/37`) और फुटर में तीनों समूहों का सार दिखता है। सामग्री का पेज-पाथ अब पहले rank rowid निकालता है, फिर rowid से बॉडी पढ़ता है और स्निपेट/पंक्ति JS में बनाता है — इसलिए सामान्य शब्द ~2.7 सेकंड से घटकर 300 ms से भी कम में लौटते हैं।
|
|
171
|
+
- **खोज विकल्प**: टूलबार में मोड (सामान्य / विस्तृत / रेगेक्स), `Aa` केस, पूरा शब्द और यह बातचीत स्कोप मिलते हैं। मोड और केस/पूरा शब्द फ़ाइल तथा फ़ोल्डर के नामों पर लागू होते हैं; सामग्री सामान्य/विस्तृत/केस/पूरा शब्द सभी संभालती है, पर **रेगेक्स मोड में सामग्री समूह रुक जाता है** और सूचना दिखाता है (फ़ाइल/फ़ोल्डर पर रेगेक्स चलता रहता है) ताकि हर कीस्ट्रोक पूरे कॉर्पस को स्कैन न करे।
|
|
172
|
+
- **यह बातचीत स्कोप**: टिक लगाने पर सिर्फ़ उसी सेशन के इंडेक्स हो चुके संदेश खोजे जाते हैं (सक्रिय सेशन को लगभग दो मिनट में इंडेक्स किया जाता है); फ़ाइल/फ़ोल्डर के टिक बंद (disabled) हो जाते हैं पर लगे रहते हैं। लाइव खोज और एक-एक मैच पर जाने के लिए नीचे बताया `Ctrl+F` फ़ाइंड बार इस्तेमाल करें।
|
|
173
|
+
- सामग्री खोज के लिए कम से कम दो अक्षर चाहिए; खाली या एक-अक्षर की खोज इंडेक्स नहीं बनाती। बनते समय सामग्री-समूह प्रगति दिखाता है और नाम-परिणाम तुरंत आते हैं; क्षेत्र और खोज विकल्प याद रहते हैं।
|
|
174
|
+
- कीबोर्ड: `↑`/`↓`, `Home`/`End`, `PageUp`/`PageDown` चलते हैं, `F3`/`Shift+F3` परिणाम-पंक्तियों में चक्र लगाते हैं, `Enter` सक्रिय करता है और `Esc` बंद करता है; डायलॉग फ़ोकस रोककर बंद होने पर लौटाता है। टेक्स्ट `navigator.language` का पालन करता है (zh/en/es/pt/hi)।
|
|
175
|
+
|
|
176
|
+
## बातचीत में खोज (Ctrl+F)
|
|
177
|
+
|
|
178
|
+
किसी बातचीत में `Ctrl+F` दबाएँ (या सेशन हेडर में `⌕` पर क्लिक करें): बातचीत के ऊपरी दाएँ कोने में एक नॉन-मोडल फ़ाइंड बार खुलता है जो सिर्फ़ इस बातचीत के **लोड हो चुके** संदेशों में खोजता है — न कंटेंट इंडेक्स चाहिए, न दो मिनट का इंतज़ार।
|
|
179
|
+
|
|
180
|
+
- **गिनती और नेविगेशन**: `3/17` दिखता है; `Enter`/`F3` अगले मैच पर ले जाते हैं और `Shift+Enter`/`Shift+F3` पिछले पर; चक्रीय खोज (wrap) डिफ़ॉल्ट रूप से चालू है — किनारे पर पहुँचने पर दूसरे किनारे से जारी रहती है। सभी मैच हल्के हाइलाइट में रहते हैं, मौजूदा मैच गहरा और रेखांकित होता है।
|
|
181
|
+
- **विकल्प**: `Aa` केस मिलाएँ, पूरा शब्द (ASCII सीमा `[A-Za-z0-9_]`; CJK को गैर-शब्द माना जाता है), चक्र और उल्टी दिशा (जो `Enter` की मुख्य दिशा पलट देती है); पिछला/अगला बटन हमेशा मौजूद रहते हैं।
|
|
182
|
+
- **मोड**: सामान्य (शाब्दिक), विस्तृत (`\n` `\r` `\t` `\0` `\xHH` `\\`; अनजान एस्केप शाब्दिक रहते हैं), रेगेक्स (JS RegExp, Worker में 500 ms टाइमआउट के साथ; गलत पैटर्न पर इनलाइन त्रुटि)। ज़ीरो-चौड़ाई वाले मैच छोड़ दिए जाते हैं, UI ब्लॉक नहीं होता।
|
|
183
|
+
- **चयन में खोज**: बातचीत में टेक्स्ट चुनकर `Ctrl+F` दबाएँ; बार शुरू में सिर्फ़ उसी चयन में खोजता है और चयन चिप दिखाता है। संदेशों के पार जाने वाला चयन भी चलता है; चयन अमान्य हो जाए तो बार पूरी बातचीत पर लौट आता है।
|
|
184
|
+
- **लोडेड विंडो**: सिर्फ़ लोड हो चुके संदेश खोजे जाते हैं; लंबी बातचीत में “पुराने संदेश लोड कर पुन: प्रयास” दबाएँ — अपने आप लगातार पेजिंग नहीं होती।
|
|
185
|
+
- `Esc` बार बंद करता है और हाइलाइट साफ़ करता है; बातचीत बदलने, पैनल खोलने या प्लगइन अनलोड होने पर भी सफ़ाई हो जाती है। ग्लोबल पैनल फ़ाइलों और सेशनों के पार खोजने का काम करता है, फ़ाइंड बार उसी बातचीत में एक-एक मैच पर जाने का; दोनों के हाइलाइट कभी एक-दूसरे पर नहीं चढ़ते।
|
|
171
186
|
|
|
172
187
|
|
|
173
188
|
## टूल्स
|
|
@@ -175,7 +190,7 @@ Web GUI में कहीं भी `Ctrl+Shift+F` दबाएँ, या स
|
|
|
175
190
|
| टूल | क्या करता है |
|
|
176
191
|
|---|---|
|
|
177
192
|
| `locator_search` | नाम और पाथ खोज, `ext:`, `size:`, `dm:`, `path:` फ़िल्टर, क्रम और पेजिंग के साथ। |
|
|
178
|
-
| `locator_find` | फ़ाइल बॉडी और सेशन संदेश खोज; स्निपेट, `sessionId`/`messageId` और कंटेंट इंडेक्स की स्थिति लौटाता है। |
|
|
193
|
+
| `locator_find` | फ़ाइल बॉडी और सेशन संदेश खोज; स्निपेट, `sessionId`/`messageId` (फ़ाइल हिट में `line` भी) और कंटेंट इंडेक्स की स्थिति लौटाता है। |
|
|
179
194
|
| `locator_status` | जड़ें, नाम-इंडेक्स गिनती, watcher स्थिति, स्टेट डायरेक्टरी और इंजन पाथ। (कंटेंट प्रगति `locator_find` और पैनल बताते हैं।) |
|
|
180
195
|
| `locator_rebuild` | नाम इंडेक्स को बैकग्राउंड स्कैन से बदलता है; नया तैयार होने तक पुराना इंडेक्स खोजता रहता है। |
|
|
181
196
|
| `locator_reindex` | कंटेंट इंडेक्स रिफ़्रेश/रीबिल्ड: डिफ़ॉल्ट इंक्रीमेंटल, `full: true` पूरा फिर बनाता है। |
|
|
@@ -378,7 +393,9 @@ DeepSeek Harness
|
|
|
378
393
|
- macOS भेजे गए बाइनरी में FSEvents (रिकर्सिव) इस्तेमाल करता है; `CGO_ENABLED=0` बिल्ड kqueue पर जाता है, 4,096 डायरेक्टरी सीमा के साथ, और कंटेंट बदलाव समय-समय पर रीबिल्ड पर निर्भर रहते हैं।
|
|
379
394
|
- Windows USN/MFT वैकल्पिक है और केवल तब इस्तेमाल होता है जब प्रोसेस वॉल्यूम पढ़ सके और जर्नल सक्रिय हो; वरना पोर्टेबल वॉक चलता है।
|
|
380
395
|
|
|
381
|
-
- फ़ाइल-बॉडी परिणाम अभी फ़ाइल मैनेजर में दिखते हैं (DSH के अंदर पंक्ति-स्तरीय पूर्वावलोकन अगला कदम है); असिस्टेंट संदेश
|
|
396
|
+
- फ़ाइल-बॉडी परिणाम अभी फ़ाइल मैनेजर में दिखते हैं (DSH के अंदर पंक्ति-स्तरीय पूर्वावलोकन अगला कदम है; फ़ाइल हिट के साथ `line` पंक्ति संख्या भी आती है); असिस्टेंट संदेश `turn:step` नोड कुंजी से ठीक-ठीक जुड़ते हैं, वरना फ़्रेज़ fallback। 0.8.1 पर अपग्रेड करने से नए फ़ील्ड के लिए कंटेंट डेटाबेस एक बार फिर बनता है।
|
|
397
|
+
- **पूरे कॉर्पस पर सामग्री रेगेक्स P0 में नहीं है**: रेगेक्स मोड सामग्री समूह को रोक देता है (फ़ाइल/फ़ोल्डर के नामों पर रेगेक्स चलता रहता है), ताकि 1 GB जैसे कॉर्पस पर स्कैन और ReDoS से बचा जाए; बातचीत के अंदर वाला फ़ाइंड बार रेगेक्स संभालता है।
|
|
398
|
+
- यह बातचीत स्कोप सिर्फ़ इंडेक्स हो चुके, स्थिर सेशन संदेशों तक है (सक्रिय सेशन में लगभग दो मिनट की देरी); लाइव खोज के लिए `Ctrl+F` इस्तेमाल करें। फ़ाइंड बार सिर्फ़ लोडेड विंडो कवर करता है; पुराना इतिहास हाथ से लोड करना होगा।
|
|
382
399
|
- बातचीत के अंदर हाइलाइट CSS Custom Highlight API पर निर्भर है; पुराने ब्राउज़र में पंक्ति की रूपरेखा (outline) दिखती है।
|
|
383
400
|
|
|
384
401
|
## मेमोरी
|
package/README-pt.md
CHANGED
|
@@ -35,6 +35,7 @@ dsh plugin --profile web add dsh-locator
|
|
|
35
35
|
- [Primeira execução](#primeira-execução)
|
|
36
36
|
- [Duas buscas](#duas-buscas)
|
|
37
37
|
- [Painel web](#painel-web)
|
|
38
|
+
- [Busca na conversa (Ctrl+F)](#busca-na-conversa-ctrlf)
|
|
38
39
|
- [Ferramentas](#ferramentas)
|
|
39
40
|
- [Linguagem de consulta](#linguagem-de-consulta)
|
|
40
41
|
- [Configuração](#configuração)
|
|
@@ -162,12 +163,26 @@ A construção roda dentro do processo anfitrião do DSH, mas leituras de arquiv
|
|
|
162
163
|
|
|
163
164
|
## Painel web
|
|
164
165
|
|
|
165
|
-
Pressione `Ctrl+Shift+F` na GUI web, ou clique na lupa no pé da barra lateral. O painel usa rotas de mesma origem (`search`, `content`, `content/rebuild`, `combined`, `status`, `reveal`, `open`), sem outro servidor nem outra porta.
|
|
166
|
+
Pressione `Ctrl+Shift+F` na GUI web, ou clique na lupa no pé da barra lateral. O painel usa rotas de mesma origem (`search`, `content`, `content/rebuild`, `combined`, `status`, `reveal`, `open`), sem outro servidor nem outra porta. O `/combined` aceita `matchMode`, `caseSensitive`, `wholeWord`, `sessionId` e `count`; o grupo de conteúdo devolve `count`/`warnings`, e os resultados de arquivo trazem `line`.
|
|
166
167
|
|
|
167
168
|
- **Os três escopos vêm ativados por padrão**: conteúdo (corpos + sessões), arquivos e pastas; desmarque qualquer um para restringir. Os resultados são agrupados **conteúdo → arquivos → pastas** com a contagem por grupo; o conteúdo é ordenado por relevância e os grupos de nomes seguem o menu de ordem.
|
|
168
169
|
- **Duplo clique ou `Enter` ativa um resultado**: uma sessão abre a conversa e pinta as palavras encontradas com destaque âmbar translúcido que acompanha a rolagem, é centralizado ao chegar e é limpo com `Esc`; arquivos e pastas são mostrados no gerenciador de arquivos. `Ctrl+Shift+C` copia o caminho, `Ctrl+O` abre, `Ctrl+Enter` insere `@file` e `Alt+1–3` alterna os escopos.
|
|
169
|
-
-
|
|
170
|
-
-
|
|
170
|
+
- **Contagem**: os cabeçalhos de grupo mostram quantos resultados há — exato quando dá para contar, `≥ N` quando o total é limitado por um teto; o cabeçalho do painel mostra a posição selecionada (`3/37`) e o rodapé resume os três grupos. A página de conteúdo agora é montada em três passos — rowids do rank, corpo por rowid e trecho/linha em JS —, então palavras comuns caíram de ~2,7 s para menos de 300 ms.
|
|
171
|
+
- **Opções de busca**: a barra de ferramentas oferece modo (Normal / Estendido / Regex), `Aa` para diferenciar maiúsculas, palavra inteira e o escopo da conversa atual. Modo, maiúsculas e palavra inteira valem para nomes de arquivos e pastas; o conteúdo aceita Normal/Estendido/maiúsculas/palavra inteira, e **no modo Regex o escopo de conteúdo pausa** (nomes ainda aceitam regex), para que nenhuma tecla digitada no painel varra o corpus inteiro.
|
|
172
|
+
- **Escopo da conversa atual**: consulta apenas as mensagens já indexadas dessa sessão (uma sessão ativa leva cerca de 2 minutos para entrar no índice); os escopos de arquivos e pastas ficam desabilitados, mas mantêm a marcação. Para navegar ocorrência por ocorrência ao vivo, use a busca na conversa com `Ctrl+F`, logo abaixo.
|
|
173
|
+
- Consultas de conteúdo exigem pelo menos dois caracteres; consultas vazias ou de um caractere não iniciam a construção. Durante a construção o grupo de conteúdo mostra o progresso e os nomes respondem na hora; os escopos e as opções de busca são lembrados.
|
|
174
|
+
- Teclado: `↑`/`↓`, `Home`/`End`, `PageUp`/`PageDown` movem, `F3`/`Shift+F3` percorrem os resultados em ciclo, `Enter` ativa e `Esc` fecha; o diálogo prende o foco e o restaura ao fechar. O texto segue `navigator.language` (zh/en/es/pt/hi).
|
|
175
|
+
|
|
176
|
+
## Busca na conversa (Ctrl+F)
|
|
177
|
+
|
|
178
|
+
Pressione `Ctrl+F` numa conversa (ou clique em `⌕` no cabeçalho da sessão) para abrir uma barra de busca não modal no canto superior direito da conversa, que pesquisa apenas as mensagens **carregadas** da conversa atual — sem índice de conteúdo e sem a espera de dois minutos:
|
|
179
|
+
|
|
180
|
+
- **Contagem e navegação**: mostra `3/17`; `Enter`/`F3` vão para a próxima ocorrência, `Shift+Enter`/`Shift+F3` para a anterior, e a busca dá a volta por padrão (ao chegar a uma ponta, retoma do outro lado e avisa). Todas as ocorrências ficam com destaque translúcido; a ocorrência atual fica mais escura e sublinhada.
|
|
181
|
+
- **Opções**: `Aa` diferencia maiúsculas, palavra inteira (limites `[A-Za-z0-9_]`; CJK conta como não palavra), continuar do início e buscar para trás (inverte a direção do `Enter`); os botões de anterior e próxima estão sempre disponíveis.
|
|
182
|
+
- **Modos**: Normal (literal), Estendido (`\n` `\r` `\t` `\0` `\xHH` `\\`; escapes desconhecidos ficam literais) e Regex (JS RegExp em uma worker thread, com timeout de 500 ms; padrão inválido mostra o erro na própria barra). Correspondências de largura zero são ignoradas em vez de travar a interface.
|
|
183
|
+
- **Busca na seleção**: selecione texto na conversa e pressione `Ctrl+F`; a barra começa restrita à seleção e mostra um chip com o tamanho da seleção. Seleções que cruzam mensagens também funcionam; se a seleção expirar, a barra volta para a conversa inteira.
|
|
184
|
+
- **Janela carregada**: só as mensagens já carregadas entram na busca; em conversas longas, use “Carregar mensagens anteriores e tentar novamente” em vez de paginação automática.
|
|
185
|
+
- `Esc` fecha a barra e limpa os destaques; trocar de conversa, abrir o painel ou descarregar o plugin também limpam. O painel global cuida da descoberta entre arquivos e sessões; a barra cuida da navegação ocorrência por ocorrência na conversa atual, e os destaques das duas nunca se sobrepõem.
|
|
171
186
|
|
|
172
187
|
|
|
173
188
|
## Ferramentas
|
|
@@ -175,7 +190,7 @@ Pressione `Ctrl+Shift+F` na GUI web, ou clique na lupa no pé da barra lateral.
|
|
|
175
190
|
| Ferramenta | O que faz |
|
|
176
191
|
|---|---|
|
|
177
192
|
| `locator_search` | Consulta nomes e caminhos com filtros `ext:`, `size:`, `dm:`, `path:`, ordenação e paginação. |
|
|
178
|
-
| `locator_find` | Busca em corpos de arquivo e mensagens de sessão; devolve trechos, `sessionId`/`messageId` e o estado do índice de conteúdo. |
|
|
193
|
+
| `locator_find` | Busca em corpos de arquivo e mensagens de sessão; devolve trechos, `sessionId`/`messageId` e o estado do índice de conteúdo. Resultados de arquivo podem trazer `line`. |
|
|
179
194
|
| `locator_status` | Raízes, contagens do índice de nomes, estado do watcher, diretório de estado e caminho do motor. (O progresso do conteúdo é informado pelo `locator_find` e pelo painel.) |
|
|
180
195
|
| `locator_rebuild` | Substitui o índice de nomes por uma varredura em segundo plano; as buscas usam o índice antigo até o novo ficar pronto. |
|
|
181
196
|
| `locator_reindex` | Atualiza ou reconstrói o índice de conteúdo: incremental por padrão, `full: true` apaga e reconstrói. |
|
|
@@ -378,7 +393,9 @@ DeepSeek Harness
|
|
|
378
393
|
- O macOS usa FSEvents (recursivo) nos binários publicados; uma compilação com `CGO_ENABLED=0` cai para kqueue, limitado a 4.096 diretórios, com mudanças de conteúdo dependendo da reconstrução periódica.
|
|
379
394
|
- USN/MFT do Windows é opcional e só é usado se o processo puder ler o volume e o diário estiver ativo; caso contrário, usa-se a varredura portátil.
|
|
380
395
|
|
|
381
|
-
- Resultados no corpo de arquivos abrem o gerenciador de arquivos por enquanto (a visualização por linha dentro do DSH é o próximo passo); mensagens do assistente
|
|
396
|
+
- Resultados no corpo de arquivos abrem o gerenciador de arquivos por enquanto (a visualização por linha dentro do DSH é o próximo passo; os resultados já trazem um número de `line`); mensagens do assistente ficam ancoradas pela chave de nó `turn:step`, com frase apenas como reserva. Atualizar de 0.8.0 para 0.8.1 reconstrói uma vez o banco de conteúdo pelo novo campo.
|
|
397
|
+
- **Regex de conteúdo em todo o corpus fica fora do P0**: o modo Regex pausa o grupo de conteúdo (nomes de arquivo e pasta continuam aceitando regex) para evitar varrer um corpus de 1 GB e ReDoS; a busca na conversa aceita regex.
|
|
398
|
+
- O escopo de conversa atual do painel cobre apenas mensagens de sessão já indexadas (uma sessão ativa entra no índice após cerca de 2 minutos de quietude); para busca ao vivo use `Ctrl+F`. A busca na conversa cobre apenas a janela carregada; carregue mensagens anteriores explicitamente.
|
|
382
399
|
- O destaque dentro da conversa usa a API CSS Custom Highlight; navegadores antigos sem ela caem para um contorno na linha.
|
|
383
400
|
|
|
384
401
|
## Memória
|
package/README.en.md
CHANGED
|
@@ -35,6 +35,7 @@ dsh plugin --profile web add dsh-locator
|
|
|
35
35
|
- [First run](#first-run)
|
|
36
36
|
- [Two searches](#two-searches)
|
|
37
37
|
- [Web panel](#web-panel)
|
|
38
|
+
- [Find in the conversation (Ctrl+F)](#find-in-the-conversation-ctrlf)
|
|
38
39
|
- [Tools](#tools)
|
|
39
40
|
- [Query language](#query-language)
|
|
40
41
|
- [Configuration](#configuration)
|
|
@@ -162,12 +163,26 @@ The build runs inside the DSH host process, but file reads and zstd decoding are
|
|
|
162
163
|
|
|
163
164
|
## Web panel
|
|
164
165
|
|
|
165
|
-
Press `Ctrl+Shift+F` anywhere in the Web GUI, or click the magnifier at the sidebar foot. The panel uses same-origin routes (`search`, `content`, `content/rebuild`, `combined`, `status`, `reveal`, `open`), so it needs no second server and no extra port.
|
|
166
|
+
Press `Ctrl+Shift+F` anywhere in the Web GUI, or click the magnifier at the sidebar foot. The panel uses same-origin routes (`search`, `content`, `content/rebuild`, `combined`, `status`, `reveal`, `open`), so it needs no second server and no extra port. `/combined` accepts `matchMode`, `caseSensitive`, `wholeWord`, `sessionId` and `count`; the content group returns `count`/`warnings` and file hits carry `line`.
|
|
166
167
|
|
|
167
168
|
- **All three scopes are on by default**: content (bodies + sessions), files and folders; uncheck any scope to narrow the search. Results are grouped **content → files → folders** with a count per group; content is ranked by relevance and name groups follow the sort menu.
|
|
168
169
|
- **Double-click or `Enter` activates a hit**: a session hit opens the conversation and paints the matched words with a translucent amber highlight that follows scrolling, is centered on arrival and clears with `Esc`; file/folder hits are revealed in the file manager. `Ctrl+Shift+C` copies the path, `Ctrl+O` opens, `Ctrl+Enter` inserts `@file`, and `Alt+1–3` toggles the scopes.
|
|
169
|
-
-
|
|
170
|
-
-
|
|
170
|
+
- **Counts**: group headers show the match count; exact when cheap, `≥ N` when capped. The header shows the selected position (`3/37`) and the footer summarises all groups. The content page path now runs rank-rowids → body-by-rowid → JS snippet/line, so common words dropped from about 2.7 s to under 300 ms.
|
|
171
|
+
- **Find options**: the toolbar offers mode (Normal / Extended / Regex), `Aa` match case, whole word and a current-conversation scope. Mode/case/whole-word apply to file and folder names; content supports Normal/Extended/case/whole-word, while **regex pauses the content group** (names still allow regex) so a panel keystroke never scans the whole corpus.
|
|
172
|
+
- **Current conversation scope**: only indexed messages of that session are searched (an active session is indexed after roughly two minutes), and file/folder scopes are disabled but keep their ticks. For live per-match navigation use the `Ctrl+F` find bar below.
|
|
173
|
+
- Content queries need at least two characters; empty and one-character queries never start the content build. While it builds the content group shows progress and name results return immediately; scopes and find options are remembered.
|
|
174
|
+
- Keyboard: `↑`/`↓`, `Home`/`End`, `PageUp`/`PageDown` move, `F3`/`Shift+F3` cycle result rows, `Enter` activates, `Esc` closes; the dialog traps focus and restores it on close. Panel text follows `navigator.language` (zh/en/es/pt/hi).
|
|
175
|
+
|
|
176
|
+
## Find in the conversation (Ctrl+F)
|
|
177
|
+
|
|
178
|
+
Press `Ctrl+F` in a conversation (or click `⌕` in the session header) to open a non-modal find bar that searches only the **loaded** messages of the current conversation — no content index, no two-minute delay:
|
|
179
|
+
|
|
180
|
+
- **Count and navigation**: shows `3/17`; `Enter`/`F3` next, `Shift+Enter`/`Shift+F3` previous, wrap around on by default (reaching an edge continues from the other side). All matches are painted with a translucent highlight; the current match is darker and underlined.
|
|
181
|
+
- **Options**: `Aa` match case, whole word (ASCII `[A-Za-z0-9_]` boundaries; CJK is treated as non-word), wrap and reverse (flips the `Enter` direction); explicit previous/next buttons are always available.
|
|
182
|
+
- **Modes**: Normal (literal), Extended (`\n` `\r` `\t` `\0` `\xHH` `\\`, unknown escapes stay literal), Regex (JS RegExp in a worker with a 500 ms timeout; invalid patterns show an inline error). Zero-width matches are skipped instead of freezing the UI.
|
|
183
|
+
- **Selection scope**: select text in the conversation and press `Ctrl+F`; the bar starts scoped to that selection and shows a selection chip. Cross-message selections are supported; if the selection expires the bar falls back to the whole conversation.
|
|
184
|
+
- **Loaded window**: only loaded messages are searched; on long conversations use “Load earlier messages and retry” rather than automatic paging.
|
|
185
|
+
- `Esc` closes the bar and clears highlights; switching conversations, opening the panel or disposing the plugin also cleans up. The global panel handles cross-file/cross-session discovery while the find bar handles per-match navigation in the current conversation; their highlights never stack.
|
|
171
186
|
|
|
172
187
|
|
|
173
188
|
## Tools
|
|
@@ -175,7 +190,7 @@ Press `Ctrl+Shift+F` anywhere in the Web GUI, or click the magnifier at the side
|
|
|
175
190
|
| Tool | What it does |
|
|
176
191
|
|---|---|
|
|
177
192
|
| `locator_search` | Query names and paths, with `ext:`, `size:`, `dm:`, `path:` filters plus sorting and pagination. |
|
|
178
|
-
| `locator_find` | Search file bodies and session messages; hits carry snippets
|
|
193
|
+
| `locator_find` | Search file bodies and session messages; hits carry snippets, an optional `line` number, `sessionId`/`messageId`, and the content-index state. |
|
|
179
194
|
| `locator_status` | Roots, name-index counts, watcher state, state directory and engine path. (Content progress is reported by `locator_find` and the panel, not here.) |
|
|
180
195
|
| `locator_rebuild` | Replace the name index with a fresh background scan; searches keep using the old index until the new one is ready. |
|
|
181
196
|
| `locator_reindex` | Refresh or rebuild the content index: incremental by default, `full: true` drops and rebuilds it. |
|
|
@@ -378,7 +393,9 @@ DeepSeek Harness
|
|
|
378
393
|
- macOS uses FSEvents (recursive) in the shipped binaries; a `CGO_ENABLED=0` build falls back to kqueue, capped at 4,096 directories, with content changes relying on the periodic rebuild.
|
|
379
394
|
- Windows USN/MFT is optional and only used when the process can read the volume and the journal is active; otherwise the portable walk is used.
|
|
380
395
|
|
|
381
|
-
- File-body hits currently reveal the file in the file manager (line-level preview inside DSH is next); assistant messages
|
|
396
|
+
- File-body hits currently reveal the file in the file manager (line-level preview inside DSH is next; hits now carry a `line` number); assistant messages anchor exactly through their `turn:step` node key with a phrase fallback. Upgrading from 0.8.0 to 0.8.1 rebuilds the content database once for the node-key field.
|
|
397
|
+
- **Whole-corpus content regex is not in P0**: regex pauses the content group (names still allow regex) to avoid scanning a 1 GB corpus and ReDoS; the in-conversation find bar supports regex.
|
|
398
|
+
- The current-conversation panel scope covers indexed, settled session messages only (roughly a two-minute delay for an active session); use `Ctrl+F` for live search. The find bar covers the loaded window only; load earlier messages explicitly.
|
|
382
399
|
- In-conversation highlighting uses the CSS Custom Highlight API; older browsers without it fall back to a row outline.
|
|
383
400
|
|
|
384
401
|
## Memory
|
package/README.md
CHANGED
|
@@ -35,6 +35,7 @@ dsh plugin --profile web add dsh-locator
|
|
|
35
35
|
- [第一次运行](#第一次运行)
|
|
36
36
|
- [两种搜索](#两种搜索)
|
|
37
37
|
- [Web 面板](#web-面板)
|
|
38
|
+
- [在会话中查找(Ctrl+F)](#在会话中查找ctrlf)
|
|
38
39
|
- [工具一览](#工具一览)
|
|
39
40
|
- [查询语法](#查询语法)
|
|
40
41
|
- [配置](#配置)
|
|
@@ -161,12 +162,26 @@ Everything 风格的查询语法,返回路径、大小、修改时间、扩展
|
|
|
161
162
|
|
|
162
163
|
## Web 面板
|
|
163
164
|
|
|
164
|
-
在 Web GUI 里按 `Ctrl+Shift+F`,或者点侧栏底部的放大镜。面板通过同源路由工作(`search`、`content`、`content/rebuild`、`combined`、`status`、`reveal`、`open
|
|
165
|
+
在 Web GUI 里按 `Ctrl+Shift+F`,或者点侧栏底部的放大镜。面板通过同源路由工作(`search`、`content`、`content/rebuild`、`combined`、`status`、`reveal`、`open`),不另起服务、不占额外端口。`/combined` 新增 `matchMode`、`caseSensitive`、`wholeWord`、`sessionId`、`count` 参数,内容组返回 `count`/`warnings`,文件命中带 `line`。
|
|
165
166
|
|
|
166
167
|
- **默认同时搜索三个范围**:内容(正文 + 会话)、文件、目录,三个勾选默认全部打开;取消任一勾选即可缩小范围。结果按“内容 → 文件 → 目录”分组,组头显示数量;内容按相关度排序,文件/目录按排序菜单。
|
|
167
168
|
- **双击或 `Enter` 激活**:会话命中打开对应会话,并把命中的词用半透明琥珀色高亮(随滚动跟随、自动居中、`Esc` 清除);文件/目录在文件管理器中定位。`Ctrl+Shift+C` 复制路径,`Ctrl+O` 打开,`Ctrl+Enter` 插入 `@file`,`Alt+1–3` 切换范围。
|
|
168
|
-
-
|
|
169
|
-
-
|
|
169
|
+
- **计数**:组头显示命中数;可精确时显示数字,受上限保护时显示 `≥ N`;头部显示当前选中位置 `3/37`,底栏汇总三组。内容页面路径已改为“先取 rank rowid、再按 rowid 取正文、JS 生成片段/行号”,常见词从约 2.7 秒降到 300 毫秒以内。
|
|
170
|
+
- **查找选项**:工具栏提供模式(普通 / 扩展 / 正则)、`Aa` 大小写、全词、当前会话范围。模式和大小写/全词对文件、目录名生效;内容支持普通/扩展/大小写/全词,**正则模式下内容组自动暂停**(文件/目录仍可正则),避免全库正则扫描。
|
|
171
|
+
- **当前会话范围**:勾选后只查该会话已落定的索引消息(活跃会话约有 2 分钟索引延迟),文件/目录勾选会禁用但保留;实时逐处查找请用下文的 `Ctrl+F` 会话内查找条。
|
|
172
|
+
- 内容查询至少需要 2 个字符;空查询和 1 个字符的查询不会启动内容索引构建。构建期间内容组显示进度,文件名/目录结果立即返回;勾选和查找选项会记住。
|
|
173
|
+
- 键盘:`↑`/`↓`、`Home`/`End`、`PageUp`/`PageDown` 移动,`F3`/`Shift+F3` 在结果行间循环,`Enter` 激活,`Esc` 关闭;对话框有焦点陷阱并在关闭时还原。面板文案跟随 `navigator.language`(中/英/西/葡/印地语)。
|
|
174
|
+
|
|
175
|
+
## 在会话中查找(Ctrl+F)
|
|
176
|
+
|
|
177
|
+
在对话里按 `Ctrl+F`(或点会话头部的 `⌕`)打开非模态查找条,只搜索当前会话**已加载**的消息,不依赖内容索引、没有 2 分钟延迟:
|
|
178
|
+
|
|
179
|
+
- **计数与导航**:显示 `3/17`;`Enter`/`F3` 下一个,`Shift+Enter`/`Shift+F3` 上一个,循环查找默认开启,到端点会回到另一端并提示。所有命中半透明高亮,当前命中加深并加下划线。
|
|
180
|
+
- **选项**:`Aa` 区分大小写、全词匹配(ASCII `[A-Za-z0-9_]` 边界,中文按非词字符处理)、循环、反向(改变 `Enter` 主方向);方向按钮始终显式可用。
|
|
181
|
+
- **模式**:普通(字面量)、扩展(支持 `\n` `\r` `\t` `\0` `\xHH` `\\`,未知转义按字面)、正则(JS RegExp,在 Worker 中执行并带 500ms 超时;非法正则内联报错)。正则零宽匹配会跳过,不卡死。
|
|
182
|
+
- **选区查找**:先在会话里选中文本,再按 `Ctrl+F`,查找条默认只在该选区范围内查找,并显示选区 chip;跨消息选区也支持;选区失效会自动回退到整个会话。
|
|
183
|
+
- **已加载窗口**:查找条只覆盖当前已加载的消息;长会话可点“加载更早消息后重试”,不会自动连续翻页。
|
|
184
|
+
- `Esc` 关闭查找条并清除高亮;会话切换、面板打开、插件卸载都会清理。全局面板负责跨文件/跨会话发现,查找条负责当前会话内逐处定位,两者不叠加高亮。
|
|
170
185
|
|
|
171
186
|
|
|
172
187
|
## 工具一览
|
|
@@ -174,7 +189,7 @@ Everything 风格的查询语法,返回路径、大小、修改时间、扩展
|
|
|
174
189
|
| 工具 | 作用 |
|
|
175
190
|
|---|---|
|
|
176
191
|
| `locator_search` | 按文件名/路径搜索,支持 `ext:`、`size:`、`dm:`、`path:` 等过滤与排序分页。 |
|
|
177
|
-
| `locator_find` |
|
|
192
|
+
| `locator_find` | 按文件正文和会话内容搜索,返回片段、可选 `line` 行号与 `sessionId`/`messageId`,并带内容索引状态。 |
|
|
178
193
|
| `locator_status` | 查看根目录、名称索引条目数、监听状态、状态目录和引擎版本(内容索引进度由 `locator_find` / 面板报告)。 |
|
|
179
194
|
| `locator_rebuild` | 后台重建名称索引;新索引就绪前搜索继续使用旧的。 |
|
|
180
195
|
| `locator_reindex` | 重建/刷新内容索引:默认增量,`full: true` 全量。 |
|
|
@@ -344,7 +359,9 @@ Go 引擎在 `engine/` 下,测试用 `cd engine && go test ./...`。macOS 的
|
|
|
344
359
|
- 两个 DSH 进程共享同一个 `stateDir` 时,构建锁只能串行化写入;建议各用各的缓存目录。
|
|
345
360
|
- macOS 的发布版二进制用 FSEvents;`CGO_ENABLED=0` 构建只有 kqueue,目录上限 4096,且内容变更依赖定时重建。
|
|
346
361
|
|
|
347
|
-
- 文件正文命中目前只在文件管理器里定位(在 DSH
|
|
362
|
+
- 文件正文命中目前只在文件管理器里定位(在 DSH 内按行预览是下一步;查询结果已带 `line` 行号);assistant 消息通过 `turn:step` 节点键精确定位,找不到时才退回短语匹配。
|
|
363
|
+
- **全库内容正则 P0 不做**:正则模式会暂停内容组(文件/目录名仍可正则),避免 1GB 级全库扫描和 ReDoS;会话内查找条支持正则。
|
|
364
|
+
- 当前会话范围只覆盖已落定索引的会话消息(活跃会话约 2 分钟延迟);实时查找用 `Ctrl+F`。会话内查找条只覆盖已加载窗口,更早历史需手动加载。
|
|
348
365
|
- 会话内高亮依赖 CSS Custom Highlight API;不支持它的旧浏览器会退化为整行描边。
|
|
349
366
|
|
|
350
367
|
## 安全与隐私
|