dsh-locator 0.11.8 → 0.12.1

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.
Files changed (56) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/README-es.md +14 -3
  3. package/README-hi.md +14 -3
  4. package/README-pt.md +14 -3
  5. package/README.en.md +14 -3
  6. package/README.md +14 -3
  7. package/bin/darwin-arm64/indexd +0 -0
  8. package/bin/darwin-x64/indexd +0 -0
  9. package/bin/linux-arm64/indexd +0 -0
  10. package/bin/linux-x64/indexd +0 -0
  11. package/bin/win32-arm64/indexd.exe +0 -0
  12. package/bin/win32-x64/indexd.exe +0 -0
  13. package/client.js +625 -2
  14. package/lib/combined.d.ts +16 -1
  15. package/lib/combined.d.ts.map +1 -1
  16. package/lib/combined.js +47 -6
  17. package/lib/combined.js.map +1 -1
  18. package/lib/config.d.ts +11 -1
  19. package/lib/config.d.ts.map +1 -1
  20. package/lib/config.js +1 -0
  21. package/lib/config.js.map +1 -1
  22. package/lib/content-search.d.ts +4 -0
  23. package/lib/content-search.d.ts.map +1 -1
  24. package/lib/content-search.js +8 -1
  25. package/lib/content-search.js.map +1 -1
  26. package/lib/content.d.ts +12 -1
  27. package/lib/content.d.ts.map +1 -1
  28. package/lib/content.js +68 -15
  29. package/lib/content.js.map +1 -1
  30. package/lib/find.d.ts +3 -0
  31. package/lib/find.d.ts.map +1 -1
  32. package/lib/find.js +1 -0
  33. package/lib/find.js.map +1 -1
  34. package/lib/http.d.ts.map +1 -1
  35. package/lib/http.js +14 -3
  36. package/lib/http.js.map +1 -1
  37. package/lib/index.d.ts.map +1 -1
  38. package/lib/index.js +1 -0
  39. package/lib/index.js.map +1 -1
  40. package/lib/reveal.d.ts +25 -0
  41. package/lib/reveal.d.ts.map +1 -1
  42. package/lib/reveal.js +59 -0
  43. package/lib/reveal.js.map +1 -1
  44. package/lib/tools.d.ts.map +1 -1
  45. package/lib/tools.js +1 -1
  46. package/lib/tools.js.map +1 -1
  47. package/package.json +1 -1
  48. package/src/combined.ts +52 -6
  49. package/src/config.ts +12 -1
  50. package/src/content-search.ts +13 -1
  51. package/src/content.ts +66 -12
  52. package/src/find.ts +1 -0
  53. package/src/http.ts +15 -2
  54. package/src/index.ts +1 -0
  55. package/src/reveal.ts +59 -0
  56. package/src/tools.ts +2 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.12.1 — 2026-11-14
4
+
5
+ * Panel: **root filter** for multi-root installs (files, dirs and content hits narrow to the selected root; the route re-authorizes the requested prefix against the configured roots), **CSV/JSON export** of the currently loaded/filtered rows, **recent-query suggestions** in the `Ctrl+F` find bar, and an **archived-sessions** checkbox that includes archived logs for one query.
6
+ * Client languages: **ja/fr/de/ru** added (nine languages total, all following the host `<html lang>`; every pack carries the same 125 keys and only falls back per missing string).
7
+ * Archived sessions are now always indexed (so the panel can reveal them per query, or with `contentIncludeArchived: true`) but stay out of ordinary results; toggling archived search needs no rebuild.
8
+ * Optional **tool-result index**: `contentIndexToolResults: true` indexes `tool/result` text as its own session documents (title = tool name, message id = call id). Off by default; toggling it rebuilds session documents only.
9
+ * **Line-level open**: `/open` accepts `line`; VS Code-family editors (`code`, `cursor`, `codium`, `windsurf`, `code-insiders`) and Sublime are launched with a goto argument, `DSH_LOCATOR_EDITOR` overrides the detection, and other setups fall back to a plain open (the response reports whether the jump was honored).
10
+ * CI: non-blocking **macOS Node smoke** job (`continue-on-error`), so a missing/cancelled hosted runner cannot block a release; the required gate stays Linux/Windows plus the real macOS engine build.
11
+ * `146 tests`; six engine binaries rebuilt at 0.12.1.
12
+
3
13
  ## 0.11.8 — 2026-11-14
4
14
 
5
15
  * Fix `locator_find` workspace scope when the caller cwd is outside every indexed root: it silently returned only the current session's messages even though there is no workspace file subset to restrict to. File bodies are now searched across the indexed roots while session hits stay limited to the caller session.
package/README-es.md CHANGED
@@ -155,7 +155,7 @@ Comportamiento del índice de contenido:
155
155
  - **Perezoso por defecto.** Al iniciar el plugin no se construye nada; la primera búsqueda de contenido (`locator_find` o el modo contenido del panel) arranca la construcción en segundo plano, y `contentLazy: false` recupera la construcción al arranque. La primera consulta informa `building: true` en lugar de devolver un resultado vacío sin explicación.
156
156
  - **Reinicio con reutilización.** Si existe la base, se actualiza de forma incremental; la construcción completa (primero logs de sesión y luego cuerpos de archivo) solo ocurre si falta la base, el esquema es antiguo, la construcción anterior quedó a medias o la base no se puede abrir.
157
157
  - **Actualización incremental** cada `contentRefreshMs` (5 minutos por defecto), releyendo solo archivos y sesiones cuya mtime cambió; `0` la desactiva.
158
- - **Sesiones archivadas y activas.** Las archivadas se omiten salvo `contentIncludeArchived: true`; un log que se sigue escribiendo se indexa tras `contentActiveSessionDelayMs` (2 minutos) de calma, para no descomprimirlo en cada actualización. Las sesiones borradas salen del índice cuando desaparecen sus archivos.
158
+ - **Sesiones archivadas y activas.** Las archivadas **siempre se indexan** pero quedan ocultas de los resultados normales; marca «Sesiones archivadas» en el panel o usa `contentIncludeArchived: true` para buscarlas (sin reconstruir). Un log que se sigue escribiendo se indexa tras `contentActiveSessionDelayMs` (2 minutos) de calma. Las sesiones borradas salen del índice cuando desaparecen sus archivos.
159
159
  - **Presupuesto y truncado.** Valores por defecto: 1 MB por archivo de texto, 200.000 archivos, 1 GB de cuerpos y las 100 sesiones más recientes. Al alcanzar el presupuesto se omiten los archivos que llegan después en el orden de escaneo; `locator_find` informa `content budget reached` y el estado HTTP lleva `truncated: true`. Sube `contentMaxTotalBytes` o reduce `contentExcludes`.
160
160
  - **Los árboles de dependencias no se leen.** `node_modules`, `.cargo`, `.bun`, `.pnpm`, `site-packages`, `toolchain`, … se omiten por defecto con `contentExcludes`; de lo contrario el código de librerías agotaría el presupuesto antes que tus documentos. El índice de nombres sí los cubre.
161
161
 
@@ -171,7 +171,7 @@ Pulsa `Ctrl+Shift+F` en la GUI web, o haz clic en la lupa del pie de la barra la
171
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
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
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).
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/ja/fr/de/ru).
175
175
 
176
176
  ## Buscar en la conversación (Ctrl+F)
177
177
 
@@ -245,7 +245,8 @@ Cada campo es un campo de configuración de Schemastery; sobrescribe la entrada
245
245
  | `contentMaxFiles` | `200000` | Archivos de texto indexados por construcción; `0` = sin límite. |
246
246
  | `contentMaxSessions` | `100` | Logs de sesión más recientes indexados; `0` = todos. |
247
247
  | `contentRefreshMs` | `300000` | Cadencia de actualización incremental del contenido; `0` la desactiva. |
248
- | `contentIncludeArchived` | `false` | Indexar también las sesiones archivadas. |
248
+ | `contentIncludeArchived` | `false` | Incluir sesiones archivadas en las búsquedas normales (se indexan igualmente; el panel puede incluirlas por consulta). |
249
+ | `contentIndexToolResults` | `false` | Indexar el texto de `tool/result` como documentos de sesión propios (cambiarlo solo reconstruye sesiones). |
249
250
  | `contentActiveSessionDelayMs` | `120000` | Indexar un log de sesión solo tras este tiempo de calma. |
250
251
  | `contentSessionDirs` | `[]` | Directorios de sesión adicionales; vacío = `$DSH_HOME/sessions`. |
251
252
  | `contentExcludes` | nombres de dependencias/toolchains | Segmentos o subcadenas de ruta que omite el índice de contenido; el de nombres sí los cubre. |
@@ -401,6 +402,16 @@ DeepSeek Harness
401
402
 
402
403
  El motor es un único proceso Go y respeta las variables estándar `GOMEMLIMIT` y `GOGC` (o `memoryLimitMB` en la configuración). Un índice de 1,2–1,5 M de entradas alcanza varios cientos de MB de RSS con el GC por defecto; usa `GOMEMLIMIT=600MiB` (límite blando, el runtime cambia CPU por memoria) o `GOGC=50` cuando el host vaya justo de RAM. Ninguno cambia el formato de la instantánea. En la instalación en vivo usada para las cifras anteriores, el proceso anfitrión de DSH (incluida la caché de páginas de la base de contenido) rondaba los 700 MB de RSS con el índice construido, y la latencia del host en reposo se mantenía en p50 2 ms.
403
404
 
405
+ ## Notas de actualización 0.12.1
406
+
407
+ - Panel: **filtro por raíz** cuando hay varias raíces (archivos, carpetas y contenido se limitan a la raíz elegida; la ruta revalida que el prefijo esté bajo una raíz configurada); **exportación CSV/JSON** de los resultados cargados/filtrados; la barra `Ctrl+F` recuerda **búsquedas recientes** con sugerencias nativas del navegador.
408
+ - Textos de cliente en **ja/fr/de/ru** (nueve idiomas en total, siguiendo el `<html lang>` del host).
409
+ - CI añade un **job macOS Node smoke no bloqueante**: no tener runner ya no bloquea la puerta de release (como en 0.10.x).
410
+
411
+ - Las sesiones archivadas ahora se indexan siempre pero quedan ocultas; marca «Sesiones archivadas» en el panel o usa `contentIncludeArchived: true` (sin reconstruir).
412
+ - Nuevo `contentIndexToolResults`: indexa el texto de `tool/result` como documentos de sesión propios (título = herramienta, id = call id); desactivado por defecto, cambiarlo solo reconstruye sesiones.
413
+ - **Apertura a nivel de línea** para aciertos de archivo: `/open` acepta `line`; los editores de la familia VS Code y Sublime reciben un argumento goto, `DSH_LOCATOR_EDITOR` lo sobrescribe y otros entornos abren el archivo sin línea (el campo `line` de la respuesta indica si funcionó).
414
+
404
415
  ## Correcciones 0.11.8
405
416
 
406
417
  - Corrige `locator_find` en ámbito workspace cuando el cwd no está dentro de ningún root indexado: devolvía solo los mensajes de la sesión actual aunque no existe un subconjunto de archivos del workspace. Ahora los archivos se buscan en todos los roots indexados y las sesiones siguen limitadas a la sesión actual.
package/README-hi.md CHANGED
@@ -155,7 +155,7 @@ Everything-शैली क्वेरी जो पाथ, आकार, ब
155
155
  - **डिफ़ॉल्ट रूप से आलसी।** प्लगइन शुरू होने पर कुछ नहीं बनता; पहली सामग्री खोज (`locator_find` या पैनल का कंटेंट मोड) बैकग्राउंड में बिल्ड शुरू करती है, और `contentLazy: false` शुरू से बिल्ड कराता है। पहली क्वेरी `building: true` बताती है, खाली परिणाम नहीं देती।
156
156
  - **रीस्टार्ट पर पुनः उपयोग।** डेटाबेस मौजूद हो तो केवल इंक्रीमेंटल रिफ़्रेश होता है; पूरा बिल्ड (पहले सेशन लॉग, फिर फ़ाइल कंटेंट) केवल तब चलता है जब डेटाबेस न हो, स्कीमा पुराना हो, पिछला बिल्ड अधूरा रह गया हो या डेटाबेस खुल न पाए।
157
157
  - **इंक्रीमेंटल रिफ़्रेश** हर `contentRefreshMs` (डिफ़ॉल्ट 5 मिनट) पर, केवल बदली mtime वाली फ़ाइलें/सेशन दोबारा पढ़ता है; `0` इसे बंद करता है।
158
- - **आर्काइव और सक्रिय सेशन।** आर्काइव किए गए सेशन डिफ़ॉल्ट रूप से छोड़े जाते हैं (`contentIncludeArchived: true` से शामिल); जो लॉग अभी लिखा जा रहा है वह `contentActiveSessionDelayMs` (डिफ़ॉल्ट 2 मिनट) शांत होने के बाद इंडेक्स होता है, ताकि हर रिफ़्रेश पर पूरा लॉग दोबारा डिकंप्रेस न हो। हटाए गए सेशन फ़ाइल गायब होने पर इंडेक्स से निकल जाते हैं।
158
+ - **आर्काइव और सक्रिय सेशन।** आर्काइव किए सेशन **हमेशा इंडेक्स** होते हैं पर सामान्य परिणामों में छिपे रहते हैं; पैनल में «Archived sessions» चुनें या `contentIncludeArchived: true` रखें (rebuild की ज़रूरत नहीं)। लिखा जा रहा लॉग `contentActiveSessionDelayMs` (डिफ़ॉल्ट 2 मिनट) शांत होने के बाद इंडेक्स होता है। हटाए गए सेशन फ़ाइल गायब होने पर इंडेक्स से निकल जाते हैं।
159
159
  - **बजट और ट्रंकेट।** डिफ़ॉल्ट: प्रति टेक्स्ट फ़ाइल 1MB, अधिकतम 200,000 फ़ाइलें, कुल 1GB कंटेंट, हाल के 100 सेशन। बजट पूरा होने पर स्कैन क्रम में बाद की फ़ाइलें छूट जाती हैं; `locator_find` में `content budget reached` दिखता है और HTTP स्टेट में `truncated: true` होता है। `contentMaxTotalBytes` बढ़ाएँ या `contentExcludes` सीमित करें।
160
160
  - **डिपेंडेंसी ट्री नहीं पढ़े जाते।** `node_modules`, `.cargo`, `.bun`, `.pnpm`, `site-packages`, `toolchain`, … डिफ़ॉल्ट `contentExcludes` से छूटते हैं, वरना लाइब्रेरी कोड आपके दस्तावेज़ों से पहले बजट खा जाएगा; नाम इंडेक्स उन्हें कवर करता रहता है।
161
161
 
@@ -171,7 +171,7 @@ Web GUI में कहीं भी `Ctrl+Shift+F` दबाएँ, या स
171
171
  - **खोज विकल्प**: टूलबार में मोड (सामान्य / विस्तृत / रेगेक्स), `Aa` केस, पूरा शब्द और यह बातचीत स्कोप मिलते हैं। मोड और केस/पूरा शब्द फ़ाइल तथा फ़ोल्डर के नामों पर लागू होते हैं; सामग्री सामान्य/विस्तृत/केस/पूरा शब्द सभी संभालती है, पर **रेगेक्स मोड में सामग्री समूह रुक जाता है** और सूचना दिखाता है (फ़ाइल/फ़ोल्डर पर रेगेक्स चलता रहता है) ताकि हर कीस्ट्रोक पूरे कॉर्पस को स्कैन न करे।
172
172
  - **यह बातचीत स्कोप**: टिक लगाने पर सिर्फ़ उसी सेशन के इंडेक्स हो चुके संदेश खोजे जाते हैं (सक्रिय सेशन को लगभग दो मिनट में इंडेक्स किया जाता है); फ़ाइल/फ़ोल्डर के टिक बंद (disabled) हो जाते हैं पर लगे रहते हैं। लाइव खोज और एक-एक मैच पर जाने के लिए नीचे बताया `Ctrl+F` फ़ाइंड बार इस्तेमाल करें।
173
173
  - सामग्री खोज के लिए कम से कम दो अक्षर चाहिए; खाली या एक-अक्षर की खोज इंडेक्स नहीं बनाती। बनते समय सामग्री-समूह प्रगति दिखाता है और नाम-परिणाम तुरंत आते हैं; क्षेत्र और खोज विकल्प याद रहते हैं।
174
- - कीबोर्ड: `↑`/`↓`, `Home`/`End`, `PageUp`/`PageDown` चलते हैं, `F3`/`Shift+F3` परिणाम-पंक्तियों में चक्र लगाते हैं, `Enter` सक्रिय करता है और `Esc` बंद करता है; डायलॉग फ़ोकस रोककर बंद होने पर लौटाता है। टेक्स्ट `navigator.language` का पालन करता है (zh/en/es/pt/hi)।
174
+ - कीबोर्ड: `↑`/`↓`, `Home`/`End`, `PageUp`/`PageDown` चलते हैं, `F3`/`Shift+F3` परिणाम-पंक्तियों में चक्र लगाते हैं, `Enter` सक्रिय करता है और `Esc` बंद करता है; डायलॉग फ़ोकस रोककर बंद होने पर लौटाता है। टेक्स्ट `navigator.language` का पालन करता है (zh/en/es/pt/hi/ja/fr/de/ru)।
175
175
 
176
176
  ## बातचीत में खोज (Ctrl+F)
177
177
 
@@ -246,7 +246,8 @@ Web GUI में कहीं भी `Ctrl+Shift+F` दबाएँ, या स
246
246
  | `contentMaxFiles` | `200000` | प्रति बिल्ड इंडेक्स होने वाली टेक्स्ट फ़ाइलें; `0` = कोई सीमा नहीं। |
247
247
  | `contentMaxSessions` | `100` | हाल के कितने सेशन लॉग इंडेक्स हों; `0` = सभी। |
248
248
  | `contentRefreshMs` | `300000` | कंटेंट इंक्रीमेंटल रिफ़्रेश अंतराल; `0` बंद। |
249
- | `contentIncludeArchived` | `false` | आर्काइव सेशन भी इंडेक्स करें। |
249
+ | `contentIncludeArchived` | `false` | सामान्य खोजों में आर्काइव सेशन शामिल करें (वे हर हाल में इंडेक्स होते हैं; पैनल प्रति क्वेरी शामिल कर सकता है)। |
250
+ | `contentIndexToolResults` | `false` | `tool/result` टेक्स्ट को अलग session दस्तावेज़ों के रूप में इंडेक्स करें (बदलने पर केवल session rebuild)। |
250
251
  | `contentActiveSessionDelayMs` | `120000` | सेशन लॉग इस अवधि तक शांत रहने पर इंडेक्स हो। |
251
252
  | `contentSessionDirs` | `[]` | अतिरिक्त सेशन डायरेक्टरी; खाली = `$DSH_HOME/sessions`। |
252
253
  | `contentExcludes` | डिपेंडेंसी/toolchain नाम | कंटेंट इंडेक्स में छोड़े जाने वाले पाथ हिस्से/सबस्ट्रिंग; नाम इंडेक्स उन्हें कवर करता है। |
@@ -402,6 +403,16 @@ DeepSeek Harness
402
403
 
403
404
  इंजन एक Go प्रोसेस है और मानक `GOMEMLIMIT` और `GOGC` (या कॉन्फ़िग में `memoryLimitMB`) मानता है। 1.2–1.5 M एंट्री का इंडेक्स डिफ़ॉल्ट GC के साथ कई सौ MB RSS तक जाता है; होस्ट पर RAM कम हो तो `GOMEMLIMIT=600MiB` (सॉफ़्ट सीमा, रनटाइम CPU देकर मेमोरी बचाता है) या `GOGC=50` रखें। इनसे स्नैपशॉट फ़ॉर्मेट नहीं बदलता। ऊपर के आँकड़ों वाले लाइव सेटअप में DSH होस्ट प्रोसेस (कंटेंट डेटाबेस पेज कैश सहित) इंडेक्स बने रहने पर लगभग 700 MB RSS पर था, और खाली बैठे होस्ट की देरी p50 2ms रही।
404
405
 
406
+ ## 0.12.1 अपग्रेड नोट्स
407
+
408
+ - पैनल: कई roots होने पर **रूट फ़िल्टर** (फ़ाइलें, फ़ोल्डर और सामग्री चुने गए रूट तक सीमित; रूट वही जाँचता है कि prefix किसी कॉन्फ़िगर किए रूट के अंदर हो); लोड/फ़िल्टर किए गए परिणामों का **CSV/JSON निर्यात**; `Ctrl+F` खोज-पट्टी **हाल की क्वेरी** याद रखती है (ब्राउज़र के सुझाव)।
409
+ - क्लाइंट में **ja/fr/de/ru** जोड़े गए (कुल नौ भाषाएँ, host `<html lang>` का पालन)।
410
+ - CI में **गैर-अवरोधक macOS Node smoke** जोड़ा गया: macOS runner न मिलने पर रिलीज़ गेट नहीं रुकता (0.10.x में रुकता था)।
411
+
412
+ - आर्काइव सेशन अब हमेशा इंडेक्स होते हैं पर सामान्य परिणामों से छिपे रहते हैं; पैनल में «Archived sessions» चुनें या `contentIncludeArchived: true` (rebuild नहीं चाहिए)।
413
+ - नया `contentIndexToolResults`: `tool/result` टेक्स्ट को अलग session दस्तावेज़ों के रूप में इंडेक्स करता है (शीर्षक = टूल नाम, message id = call id); डिफ़ॉल्ट बंद, बदलने पर केवल session rebuild।
414
+ - फ़ाइल हिट के लिए **लाइन-स्तरीय खोलना**: `/open` अब `line` लेता है; VS Code परिवार (`code`/`cursor`/`codium`/`windsurf`/`code-insiders`) और Sublime को goto आर्ग्युमेंट मिलता है, `DSH_LOCATOR_EDITOR` ओवरराइड करता है, अन्य सेटअप बिना लाइन खोलते हैं (response का `line` बताता है कि जंप हुआ या नहीं)।
415
+
405
416
  ## 0.11.8 सुधार
406
417
 
407
418
  - `locator_find` के workspace स्कोप में, जब cwd किसी भी इंडेक्स्ड root के अंदर नहीं है, अब फ़ाइल सामग्री सभी इंडेक्स्ड roots में खोजी जाती है; सत्र हिट अभी भी वर्तमान सत्र तक सीमित रहते हैं (पहले केवल वर्तमान सत्र के संदेश मिलते थे)।
package/README-pt.md CHANGED
@@ -155,7 +155,7 @@ Como o índice de conteúdo se comporta:
155
155
  - **Preguiçoso por padrão.** Nada é construído na inicialização; a primeira busca de conteúdo (`locator_find` ou o modo conteúdo do painel) inicia a construção em segundo plano, e `contentLazy: false` volta à construção no arranque. A primeira consulta informa `building: true` em vez de devolver vazio sem explicação.
156
156
  - **Reinício reaproveitando.** Se o banco existe, ele é atualizado de forma incremental; a construção completa (primeiro logs de sessão, depois corpos de arquivo) só acontece se o banco não existe, tem esquema antigo, ficou incompleto por uma construção interrompida ou não abre.
157
157
  - **Atualização incremental** a cada `contentRefreshMs` (5 minutos por padrão), relendo só arquivos e sessões cujo mtime mudou; `0` desativa.
158
- - **Sessões arquivadas e ativas.** Arquivadas são ignoradas a menos que `contentIncludeArchived: true`; um log que ainda está sendo escrito só é indexado após `contentActiveSessionDelayMs` (2 minutos) de quietude, para não descomprimi-lo a cada atualização. Sessões apagadas saem do índice quando os arquivos desaparecem.
158
+ - **Sessões arquivadas e ativas.** As arquivadas **sempre são indexadas**, mas ficam ocultas dos resultados normais; marque «Sessões arquivadas» no painel ou use `contentIncludeArchived: true` para buscá-las (sem reconstruir). Um log ainda em escrita é indexado após `contentActiveSessionDelayMs` (2 minutos) de quietude. Sessões apagadas saem do índice quando os arquivos desaparecem.
159
159
  - **Orçamento e truncamento.** Padrões: 1 MB por arquivo de texto, 200.000 arquivos, 1 GB de corpos e as 100 sessões mais recentes. Ao atingir o orçamento, arquivos que chegam depois na ordem de varredura são ignorados; o `locator_find` informa `content budget reached` e o estado HTTP traz `truncated: true`. Aumente `contentMaxTotalBytes` ou reduza `contentExcludes`.
160
160
  - **Árvores de dependências não são lidas.** `node_modules`, `.cargo`, `.bun`, `.pnpm`, `site-packages`, `toolchain`, … são ignorados por padrão via `contentExcludes`; caso contrário, código de bibliotecas esgotaria o orçamento antes dos seus documentos. O índice de nomes continua cobrindo esses caminhos.
161
161
 
@@ -171,7 +171,7 @@ Pressione `Ctrl+Shift+F` na GUI web, ou clique na lupa no pé da barra lateral.
171
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
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
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).
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/ja/fr/de/ru).
175
175
 
176
176
  ## Busca na conversa (Ctrl+F)
177
177
 
@@ -246,7 +246,8 @@ Cada campo é um campo de configuração do Schemastery; sobrescreva a entrada `
246
246
  | `contentMaxFiles` | `200000` | Arquivos de texto indexados por construção; `0` = sem limite. |
247
247
  | `contentMaxSessions` | `100` | Logs de sessão mais recentes indexados; `0` = todos. |
248
248
  | `contentRefreshMs` | `300000` | Cadência de atualização incremental do conteúdo; `0` desativa. |
249
- | `contentIncludeArchived` | `false` | Indexar também sessões arquivadas. |
249
+ | `contentIncludeArchived` | `false` | Incluir sessões arquivadas nas buscas normais (são indexadas de qualquer forma; o painel pode incluí-las por consulta). |
250
+ | `contentIndexToolResults` | `false` | Indexar o texto de `tool/result` como documentos de sessão próprios (alternar só reconstrói sessões). |
250
251
  | `contentActiveSessionDelayMs` | `120000` | Indexar um log de sessão só após esse tempo de quietude. |
251
252
  | `contentSessionDirs` | `[]` | Diretórios de sessão extras; vazio = `$DSH_HOME/sessions`. |
252
253
  | `contentExcludes` | nomes de dependências/toolchains | Segmentos ou substrings de caminho ignorados pelo índice de conteúdo; o de nomes continua cobrindo. |
@@ -402,6 +403,16 @@ DeepSeek Harness
402
403
 
403
404
  O motor é um único processo Go e respeita as variáveis padrão `GOMEMLIMIT` e `GOGC` (ou `memoryLimitMB` na configuração). Um índice de 1,2–1,5 M de entradas chega a várias centenas de MB de RSS com o GC padrão; use `GOMEMLIMIT=600MiB` (limite suave, o runtime troca CPU por memória) ou `GOGC=50` quando o host estiver apertado de RAM. Nenhum altera o formato do snapshot. Na instalação ao vivo usada para os números acima, o processo anfitrião do DSH (incluindo o cache de páginas do banco de conteúdo) ficava por volta de 700 MB de RSS com o índice construído, e a latência do host ocioso permanecia em p50 2 ms.
404
405
 
406
+ ## Notas de atualização 0.12.1
407
+
408
+ - Painel: **filtro por raiz** quando há várias raízes (arquivos, pastas e conteúdo ficam limitados à raiz escolhida; a rota revalida que o prefixo está sob uma raiz configurada); **exportação CSV/JSON** dos resultados carregados/filtrados; a barra `Ctrl+F` lembra **buscas recentes** com sugestões nativas do navegador.
409
+ - Textos do cliente em **ja/fr/de/ru** (nove idiomas no total, seguindo o `<html lang>` do host).
410
+ - CI ganha um **job macOS Node smoke não bloqueante**: não obter runner não bloqueia mais o gate de release (como em 0.10.x).
411
+
412
+ - Sessões arquivadas agora são sempre indexadas, mas ficam ocultas; marque «Sessões arquivadas» no painel ou use `contentIncludeArchived: true` (sem reconstruir).
413
+ - Novo `contentIndexToolResults`: indexa o texto de `tool/result` como documentos de sessão próprios (título = ferramenta, id = call id); desativado por padrão, alternar só reconstrói sessões.
414
+ - **Abertura por linha** para acertos de arquivo: `/open` aceita `line`; editores da família VS Code e Sublime recebem um argumento goto, `DSH_LOCATOR_EDITOR` sobrescreve a detecção e outros ambientes abrem sem linha (o campo `line` da resposta informa se funcionou).
415
+
405
416
  ## Correções 0.11.8
406
417
 
407
418
  - Corrige `locator_find` no escopo workspace quando o cwd não está dentro de nenhum root indexado: retornava apenas as mensagens da sessão atual, embora não exista um subconjunto de arquivos do workspace. Agora os arquivos são buscados em todos os roots indexados e as sessões continuam limitadas à sessão atual.
package/README.en.md CHANGED
@@ -155,7 +155,7 @@ How the content index behaves:
155
155
  - **Lazy by default.** Nothing is built at plugin start; the first content search (`locator_find` or the panel's Content scope) starts the build in the background, and `contentLazy: false` restores the eager build. The first query reports `building: true` instead of an empty result with no hint.
156
156
  - **Restart reuses the database.** An existing database is refreshed incrementally; a full build (session logs first, then file bodies) runs only when the database is missing, has a stale schema, was left unfinished by an interrupted build, or cannot be opened.
157
157
  - **Incremental refresh** every `contentRefreshMs` (5 minutes by default) re-reads only files and sessions whose mtime changed; `0` disables it.
158
- - **Archived and active sessions.** Archived sessions are skipped unless `contentIncludeArchived: true`; a session log that is still being written is indexed after it has been quiet for `contentActiveSessionDelayMs` (2 minutes), so the current log is not decompressed on every refresh. Deleted sessions leave the index when their files disappear.
158
+ - **Archived and active sessions.** Archived sessions are **always indexed** but hidden from ordinary results; tick “Archived sessions” in the panel or set `contentIncludeArchived: true` to search them (no rebuild needed). A session log that is still being written is indexed after it has been quiet for `contentActiveSessionDelayMs` (2 minutes), so the current log is not decompressed on every refresh. Deleted sessions leave the index when their files disappear.
159
159
  - **Budget and truncation.** Defaults: 1 MB per text file, 200,000 files, 1 GB of body bytes, the 100 most recent sessions. Once the byte budget is reached, files later in scan order are skipped; `locator_find` reports `content budget reached` and the HTTP state carries `truncated: true`. Raise `contentMaxTotalBytes` or narrow `contentExcludes`.
160
160
  - **Dependency trees are not read.** `node_modules`, `.cargo`, `.bun`, `.pnpm`, `site-packages`, `toolchain`, … are skipped by `contentExcludes` by default — otherwise library code would exhaust the budget before your own documents; the name index still covers them.
161
161
 
@@ -171,7 +171,7 @@ Press `Ctrl+Shift+F` anywhere in the Web GUI, or click the magnifier at the side
171
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
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
173
  - Content queries need at least three characters; empty, one- and two-character queries never start the content build (use Ctrl+F for short searches). 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).
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/ja/fr/de/ru).
175
175
 
176
176
  ## Find in the conversation (Ctrl+F)
177
177
 
@@ -246,7 +246,8 @@ Every field is a Schemastery config field; override the `dsh-locator` entry in t
246
246
  | `contentMaxFiles` | `200000` | Text files indexed per build; `0` means unlimited. |
247
247
  | `contentMaxSessions` | `100` | Most recent session logs indexed; `0` means all. |
248
248
  | `contentRefreshMs` | `300000` | Incremental content refresh cadence; `0` disables it. |
249
- | `contentIncludeArchived` | `false` | Index archived sessions as well. |
249
+ | `contentIncludeArchived` | `false` | Include archived sessions in ordinary searches (archived logs are indexed either way; the panel can include them per query). |
250
+ | `contentIndexToolResults` | `false` | Index `tool/result` text as its own session documents (toggling rebuilds session documents only). |
250
251
  | `contentActiveSessionDelayMs` | `120000` | Only index a session log after it has been quiet this long. |
251
252
  | `contentSessionDirs` | `[]` | Extra session directories; empty means `$DSH_HOME/sessions`. |
252
253
  | `contentExcludes` | dependency/toolchain names | Path segments or substrings the content index skips; the name index still covers them. |
@@ -402,6 +403,16 @@ DeepSeek Harness
402
403
 
403
404
  The engine is a single Go process and honours the standard `GOMEMLIMIT` and `GOGC` environment variables (or `memoryLimitMB` in the config). A 1.2–1.5 M-entry index peaks around several hundred MB of RSS with the default GC; set `GOMEMLIMIT=600MiB` (soft limit, the runtime trades CPU for memory) or `GOGC=50` when the host is tight on RAM. Neither changes the snapshot format. In the live setup used for the numbers above, the DSH host process (including the content database page cache) sat around 700 MB RSS with the content index built, and idle host latency stayed at p50 2 ms.
404
405
 
406
+ ## 0.12.1 upgrade notes
407
+
408
+ - Panel: a **root filter** when several roots are configured (files, dirs and content hits narrow to the selected root; the route re-checks that the prefix lives under a configured root); **CSV/JSON export** of the currently loaded/filtered results; the `Ctrl+F` find bar remembers **recent queries** through native input suggestions.
409
+ - Client strings now cover **ja/fr/de/ru** (nine languages total, all following the host `<html lang>`).
410
+ - CI adds a **non-blocking macOS Node smoke job**: a missing macOS runner no longer blocks the release gate (as it did in 0.10.x).
411
+
412
+ - Archived sessions are now always indexed but hidden from ordinary results; tick “Archived sessions” in the panel or set `contentIncludeArchived: true` to search them (no rebuild needed).
413
+ - New optional `contentIndexToolResults`: index `tool/result` text as its own session documents (title = tool name, message id = call id); off by default, toggling rebuilds session documents only.
414
+ - **Line-level open** for file hits: `/open` accepts `line`; VS Code-family editors (`code`/`cursor`/`codium`/`windsurf`/`code-insiders`) and Sublime are launched with a goto argument, `DSH_LOCATOR_EDITOR` overrides detection, and other setups fall back to a plain open (the response's `line` says whether the jump was honored).
415
+
405
416
  ## 0.11.8 fixes
406
417
 
407
418
  - Fix `locator_find` workspace scope when the caller cwd is outside every indexed root: it returned only the current session's messages although there is no workspace file subset. File bodies are now searched across the indexed roots while session hits stay limited to the caller session.
package/README.md CHANGED
@@ -154,7 +154,7 @@ Everything 风格的查询语法,返回路径、大小、修改时间、扩展
154
154
  - **惰性启动**:插件启动时什么都不建;第一次搜内容(`locator_find` 或面板的“内容”范围)才开始后台构建,`contentLazy: false` 可恢复启动即建。第一次查询会立刻返回 `building: true`,不会让你干等或误以为没结果。
155
155
  - **重启复用**:有内容库时只做一次增量刷新,不重读全部正文;只有库不存在、结构版本不兼容、上次构建没完成或损坏时才全量重建(先会话、后文件正文)。
156
156
  - **增量刷新**:默认每 5 分钟检查一次,只重读 mtime 变化的文件/会话;`contentRefreshMs` 可调,0 关闭。
157
- - **归档与活动会话**:已归档会话默认不索引(`contentIncludeArchived: true` 才索引);正在写入的会话等它安静 `contentActiveSessionDelayMs`(默认 2 分钟)后再索引,不会每轮刷新重解压整份日志;已删除的会话随文件消失自动退出索引。
157
+ - **归档与活动会话**:已归档会话**始终索引**,但普通搜索结果里默认隐藏;面板勾选“包含归档会话”或 `contentIncludeArchived: true` 即可搜索它们(切换无需重建)。正在写入的会话等它安静 `contentActiveSessionDelayMs`(默认 2 分钟)后再索引,不会每轮刷新重解压整份日志;已删除的会话随文件消失自动退出索引。
158
158
  - **预算与截断**:默认单文件最多 1MB、文件数最多 20 万、内容总量最多 1GB、最近 100 个会话。撞到总额上限时按扫描顺序保留先到的文件,`locator_find` 的输出会提示 `content budget reached`,HTTP 状态里是 `truncated: true`;调大 `contentMaxTotalBytes` 或收窄 `contentExcludes` 即可。
159
159
  - **依赖目录不读正文**:`node_modules`、`.cargo`、`.bun`、`.pnpm`、`site-packages`、`toolchain` 等默认被 `contentExcludes` 跳过,否则预算会先被库代码吃满;文件名索引不受影响。
160
160
 
@@ -170,7 +170,7 @@ Everything 风格的查询语法,返回路径、大小、修改时间、扩展
170
170
  - **查找选项**:工具栏提供模式(普通 / 扩展 / 正则)、`Aa` 大小写、全词、当前会话范围。模式和大小写/全词对文件、目录名生效;内容支持普通/扩展/大小写/全词,**正则模式下内容组自动暂停**(文件/目录仍可正则),避免全库正则扫描。
171
171
  - **当前会话范围**:勾选后只查该会话已落定的索引消息(活跃会话约有 2 分钟索引延迟),文件/目录勾选会禁用但保留;实时逐处查找请用下文的 `Ctrl+F` 会话内查找条。
172
172
  - 内容查询至少需要 3 个字符;空查询和 1–2 个字符的查询不会启动内容索引构建。构建期间内容组显示进度,文件名/目录结果立即返回;勾选和查找选项会记住。
173
- - 键盘:`↑`/`↓`、`Home`/`End`、`PageUp`/`PageDown` 移动,`F3`/`Shift+F3` 在结果行间循环,`Enter` 激活,`Esc` 关闭;对话框有焦点陷阱并在关闭时还原。面板文案跟随 `navigator.language`(中/英/西/葡/印地语)。
173
+ - 键盘:`↑`/`↓`、`Home`/`End`、`PageUp`/`PageDown` 移动,`F3`/`Shift+F3` 在结果行间循环,`Enter` 激活,`Esc` 关闭;对话框有焦点陷阱并在关闭时还原。面板文案跟随 `navigator.language`(中/英/西/葡/印地/日/法/德/俄)。
174
174
 
175
175
  ## 在会话中查找(Ctrl+F)
176
176
 
@@ -241,7 +241,8 @@ case:1 wholeword:1 区分大小写 / 全词匹配
241
241
  | `contentMaxFiles` | 200000 | 最多索引多少个文件;0 表示不限制。 |
242
242
  | `contentMaxSessions` | 100 | 最多索引最近多少个会话;0 表示全部。 |
243
243
  | `contentRefreshMs` | 300000 | 内容增量刷新周期;0 关闭自动刷新。 |
244
- | `contentIncludeArchived` | `false` | 是否索引已归档的会话。 |
244
+ | `contentIncludeArchived` | `false` | 是否在普通搜索中包含已归档会话(归档会话始终索引,面板可逐次勾选)。 |
245
+ | `contentIndexToolResults` | `false` | 是否把 `tool/result` 文本作为独立会话文档入索引(切换只重建会话)。 |
245
246
  | `contentActiveSessionDelayMs` | 120000 | 会话日志安静多久后才索引。 |
246
247
  | `contentSessionDirs` | `$DSH_HOME/sessions` | 额外的会话目录。 |
247
248
  | `contentExcludes` | 依赖/工具链目录 | 内容索引跳过的路径片段/子串;名称索引不受影响。 |
@@ -364,6 +365,16 @@ Go 引擎在 `engine/` 下,测试用 `cd engine && go test ./...`。macOS 的
364
365
  - 当前会话范围只覆盖已落定索引的会话消息(活跃会话约 2 分钟延迟);实时查找用 `Ctrl+F`。会话内查找条只覆盖已加载窗口,更早历史需手动加载。
365
366
  - 会话内高亮依赖 CSS Custom Highlight API;不支持它的旧浏览器会退化为整行描边。
366
367
 
368
+ ## 0.12.1 更新
369
+
370
+ - 面板:多 root 时新增**根目录筛选**(文件/目录/内容命中都按所选 root 过滤,服务端会校验该前缀确实在已配置 root 之下);新增 **CSV/JSON 导出**当前已加载/过滤结果;`Ctrl+F` 查找条记住**最近查询**(浏览器原生输入建议)。
371
+ - 客户端新增 **ja/fr/de/ru** 文案(共 9 种语言,全部跟随宿主 `<html lang>`)。
372
+ - CI 增加**非阻塞 macOS Node smoke**:拿不到 macOS runner 也不影响发布门禁(0.10.x 曾被它阻塞)。
373
+
374
+ - 已归档会话现在始终索引但默认不参与搜索结果;面板勾选“包含归档会话”或 `contentIncludeArchived: true` 可按需搜索(切换无需重建)。
375
+ - 新增可选 `contentIndexToolResults`:把 `tool/result` 文本作为独立会话文档入索引(标题为工具名、消息 id 为 call id);默认关闭,切换只重建会话。
376
+ - 文件命中支持**行级打开**:`/open` 接受 `line`;检测 VS Code 系(`code`/`cursor`/`codium`/`windsurf`/`code-insiders`)与 Sublime 并传入跳行参数,`DSH_LOCATOR_EDITOR` 可覆盖;其它环境退回普通打开,响应里的 `line` 表示是否成功跳行。
377
+
367
378
  ## 0.11.8 修复
368
379
 
369
380
  - 修复 cwd 不在任何已索引 root 内时 `locator_find` workspace 范围只返回当前会话消息的问题:此时没有 workspace 文件子集可限制,文件正文改为在所有已索引 root 中搜索,会话命中仍只限当前会话。
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file