vectra 0.14.0 → 0.15.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.
Files changed (106) hide show
  1. package/README.md +93 -92
  2. package/lib/FolderWatcher.d.ts +21 -1
  3. package/lib/FolderWatcher.d.ts.map +1 -1
  4. package/lib/FolderWatcher.js +135 -8
  5. package/lib/FolderWatcher.js.map +1 -1
  6. package/lib/FolderWatcher.spec.js +235 -1
  7. package/lib/FolderWatcher.spec.js.map +1 -1
  8. package/lib/LocalDocumentIndex.d.ts +9 -3
  9. package/lib/LocalDocumentIndex.d.ts.map +1 -1
  10. package/lib/LocalDocumentIndex.js +26 -8
  11. package/lib/LocalDocumentIndex.js.map +1 -1
  12. package/lib/LocalDocumentIndex.spec.js +120 -2
  13. package/lib/LocalDocumentIndex.spec.js.map +1 -1
  14. package/lib/LocalIndex.d.ts +10 -0
  15. package/lib/LocalIndex.d.ts.map +1 -1
  16. package/lib/LocalIndex.js +97 -26
  17. package/lib/LocalIndex.js.map +1 -1
  18. package/lib/LocalIndex.spec.js +85 -0
  19. package/lib/LocalIndex.spec.js.map +1 -1
  20. package/lib/TransformersEmbeddings.d.ts.map +1 -1
  21. package/lib/TransformersEmbeddings.js +5 -42
  22. package/lib/TransformersEmbeddings.js.map +1 -1
  23. package/lib/TransformersEmbeddings.spec.js +8 -4
  24. package/lib/TransformersEmbeddings.spec.js.map +1 -1
  25. package/lib/codecs/IndexCodec.d.ts +10 -0
  26. package/lib/codecs/IndexCodec.d.ts.map +1 -1
  27. package/lib/codecs/JsonCodec.spec.js +21 -0
  28. package/lib/codecs/JsonCodec.spec.js.map +1 -1
  29. package/lib/codecs/ProtobufCodec.d.ts.map +1 -1
  30. package/lib/codecs/ProtobufCodec.js +8 -1
  31. package/lib/codecs/ProtobufCodec.js.map +1 -1
  32. package/lib/codecs/ProtobufCodec.spec.js +21 -0
  33. package/lib/codecs/ProtobufCodec.spec.js.map +1 -1
  34. package/lib/codecs/schemas/index.proto +1 -0
  35. package/lib/internals/contentHash.d.ts +14 -0
  36. package/lib/internals/contentHash.d.ts.map +1 -0
  37. package/lib/internals/contentHash.js +39 -0
  38. package/lib/internals/contentHash.js.map +1 -0
  39. package/lib/internals/contentHash.spec.d.ts +2 -0
  40. package/lib/internals/contentHash.spec.d.ts.map +1 -0
  41. package/lib/internals/contentHash.spec.js +53 -0
  42. package/lib/internals/contentHash.spec.js.map +1 -0
  43. package/lib/internals/transformersLoader.d.ts +25 -0
  44. package/lib/internals/transformersLoader.d.ts.map +1 -0
  45. package/lib/internals/transformersLoader.js +86 -0
  46. package/lib/internals/transformersLoader.js.map +1 -0
  47. package/lib/server/IndexManager.spec.d.ts +2 -0
  48. package/lib/server/IndexManager.spec.d.ts.map +1 -0
  49. package/lib/server/IndexManager.spec.js +303 -0
  50. package/lib/server/IndexManager.spec.js.map +1 -0
  51. package/lib/server/VectraServer.spec.js +98 -0
  52. package/lib/server/VectraServer.spec.js.map +1 -1
  53. package/lib/server/handlers/documentHandlers.spec.d.ts +2 -0
  54. package/lib/server/handlers/documentHandlers.spec.d.ts.map +1 -0
  55. package/lib/server/handlers/documentHandlers.spec.js +227 -0
  56. package/lib/server/handlers/documentHandlers.spec.js.map +1 -0
  57. package/lib/server/handlers/helpers.spec.d.ts +2 -0
  58. package/lib/server/handlers/helpers.spec.d.ts.map +1 -0
  59. package/lib/server/handlers/helpers.spec.js +241 -0
  60. package/lib/server/handlers/helpers.spec.js.map +1 -0
  61. package/lib/server/handlers/itemHandlers.spec.d.ts +2 -0
  62. package/lib/server/handlers/itemHandlers.spec.d.ts.map +1 -0
  63. package/lib/server/handlers/itemHandlers.spec.js +366 -0
  64. package/lib/server/handlers/itemHandlers.spec.js.map +1 -0
  65. package/lib/server/handlers/lifecycleHandlers.spec.d.ts +2 -0
  66. package/lib/server/handlers/lifecycleHandlers.spec.d.ts.map +1 -0
  67. package/lib/server/handlers/lifecycleHandlers.spec.js +97 -0
  68. package/lib/server/handlers/lifecycleHandlers.spec.js.map +1 -0
  69. package/lib/server/handlers/queryHandlers.spec.d.ts +2 -0
  70. package/lib/server/handlers/queryHandlers.spec.d.ts.map +1 -0
  71. package/lib/server/handlers/queryHandlers.spec.js +296 -0
  72. package/lib/server/handlers/queryHandlers.spec.js.map +1 -0
  73. package/lib/server/handlers/statsHandlers.spec.d.ts +2 -0
  74. package/lib/server/handlers/statsHandlers.spec.d.ts.map +1 -0
  75. package/lib/server/handlers/statsHandlers.spec.js +138 -0
  76. package/lib/server/handlers/statsHandlers.spec.js.map +1 -0
  77. package/lib/utils/pathUtils.spec.d.ts +2 -0
  78. package/lib/utils/pathUtils.spec.d.ts.map +1 -0
  79. package/lib/utils/pathUtils.spec.js +152 -0
  80. package/lib/utils/pathUtils.spec.js.map +1 -0
  81. package/package.json +17 -17
  82. package/src/FolderWatcher.spec.ts +255 -1
  83. package/src/FolderWatcher.ts +121 -7
  84. package/src/LocalDocumentIndex.spec.ts +134 -2
  85. package/src/LocalDocumentIndex.ts +26 -8
  86. package/src/LocalIndex.spec.ts +900 -807
  87. package/src/LocalIndex.ts +91 -25
  88. package/src/TransformersEmbeddings.spec.ts +8 -4
  89. package/src/TransformersEmbeddings.ts +5 -18
  90. package/src/codecs/IndexCodec.ts +8 -0
  91. package/src/codecs/JsonCodec.spec.ts +23 -0
  92. package/src/codecs/ProtobufCodec.spec.ts +23 -0
  93. package/src/codecs/ProtobufCodec.ts +9 -2
  94. package/src/codecs/schemas/index.proto +1 -0
  95. package/src/internals/contentHash.spec.ts +59 -0
  96. package/src/internals/contentHash.ts +42 -0
  97. package/src/internals/transformersLoader.ts +55 -0
  98. package/src/server/IndexManager.spec.ts +278 -0
  99. package/src/server/VectraServer.spec.ts +96 -0
  100. package/src/server/handlers/documentHandlers.spec.ts +202 -0
  101. package/src/server/handlers/helpers.spec.ts +234 -0
  102. package/src/server/handlers/itemHandlers.spec.ts +358 -0
  103. package/src/server/handlers/lifecycleHandlers.spec.ts +60 -0
  104. package/src/server/handlers/queryHandlers.spec.ts +280 -0
  105. package/src/server/handlers/statsHandlers.spec.ts +104 -0
  106. package/src/utils/pathUtils.spec.ts +148 -0
package/README.md CHANGED
@@ -1,92 +1,93 @@
1
- # Vectra: a local vector database
2
-
3
- [![npm version](https://img.shields.io/npm/v/vectra.svg)](https://www.npmjs.com/package/vectra)
4
- [![Build](https://github.com/Stevenic/vectra/actions/workflows/ci.yml/badge.svg)](https://github.com/Stevenic/vectra/actions/workflows/ci.yml)
5
- [![Coverage Status](https://coveralls.io/repos/github/Stevenic/vectra/badge.svg?branch=main)](https://coveralls.io/github/Stevenic/vectra?branch=main)
6
- [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
7
- [![Agent Ready](https://img.shields.io/badge/Agent-Ready-blue.svg)](#agent-ready)
8
-
9
- Vectra is a local, file-backed, in-memory vector database with an optional gRPC server for cross-language access. Each index is a folder on disk — queries use MongoDB-style metadata filtering and cosine similarity ranking, with sub-millisecond latency for small indexes.
10
-
11
- ## What's New in Vectra 0.14
12
-
13
- - **Browser & Electron support** — `vectra/browser` entry point with `IndexedDBStorage` and `TransformersEmbeddings`
14
- - **Local embeddings** — `LocalEmbeddings` and `TransformersEmbeddings` run HuggingFace models with no API key
15
- - **Protocol Buffers** — opt-in binary format, 40-50% smaller files
16
- - **gRPC server** — `vectra serve` exposes 19 RPCs for cross-language access
17
- - **FolderWatcher** — auto-sync directories into a document index
18
- - **Language bindings** — `vectra generate` scaffolds clients for 6 languages
19
-
20
- See the [Changelog](https://stevenic.github.io/vectra/changelog) for breaking changes and migration details.
21
-
22
- ## Install
23
-
24
- ```sh
25
- npm install vectra
26
- ```
27
-
28
- ## Quick Example
29
-
30
- ```ts
31
- import { LocalDocumentIndex, OpenAIEmbeddings } from 'vectra';
32
-
33
- const docs = new LocalDocumentIndex({
34
- folderPath: './my-index',
35
- embeddings: new OpenAIEmbeddings({
36
- apiKey: process.env.OPENAI_API_KEY!,
37
- model: 'text-embedding-3-small',
38
- maxTokens: 8000,
39
- }),
40
- });
41
-
42
- if (!(await docs.isIndexCreated())) {
43
- await docs.createIndex({ version: 1 });
44
- }
45
-
46
- await docs.upsertDocument('doc://readme', 'Vectra is a local vector database...', 'md');
47
-
48
- const results = await docs.queryDocuments('What is Vectra?', { maxDocuments: 5 });
49
- if (results.length > 0) {
50
- const sections = await results[0].renderSections(2000, 1, true);
51
- console.log(sections[0].text);
52
- }
53
- ```
54
-
55
- ## Documentation
56
-
57
- Full docs at **[stevenic.github.io/vectra](https://stevenic.github.io/vectra/)**:
58
-
59
- | Guide | Description |
60
- |-------|-------------|
61
- | [Getting Started](https://stevenic.github.io/vectra/getting-started) | Install, requirements, quick start with both index types |
62
- | [Core Concepts](https://stevenic.github.io/vectra/core-concepts) | Index types, metadata filtering, on-disk layout |
63
- | [Embeddings Guide](https://stevenic.github.io/vectra/embeddings) | Choose and configure an embeddings provider |
64
- | [Document Indexing](https://stevenic.github.io/vectra/documents) | Chunking, retrieval, hybrid search, FolderWatcher |
65
- | [CLI Reference](https://stevenic.github.io/vectra/cli) | All CLI commands, flags, and provider config |
66
- | [API Reference](https://stevenic.github.io/vectra/api-reference) | TypeScript API overview |
67
- | [Best Practices](https://stevenic.github.io/vectra/best-practices) | Performance tuning, troubleshooting |
68
- | [Storage](https://stevenic.github.io/vectra/storage) | Pluggable backends, browser/IndexedDB, serialization formats |
69
- | [gRPC Server](https://stevenic.github.io/vectra/grpc) | Cross-language access and language bindings |
70
- | [Changelog](https://stevenic.github.io/vectra/changelog) | Breaking changes and migration guides |
71
- | [Tutorials](https://stevenic.github.io/vectra/tutorials/) | RAG pipeline, browser app, gRPC, custom storage, folder sync |
72
- | [Samples](./samples/) | Runnable examples: quickstart, RAG, browser, SQLite storage, gRPC, folder watcher |
73
-
74
- ## Agent Ready
75
-
76
- Vectra ships an [`llms.txt`](https://github.com/Stevenic/vectra/blob/main/llms.txt) file that gives coding agents everything they need to integrate Vectra into your project. Point your agent at it and let it do the work:
77
-
78
- ```
79
- Read the llms.txt file at https://raw.githubusercontent.com/Stevenic/vectra/main/llms.txt
80
- and then add Vectra support to this project. Use LocalDocumentIndex for document
81
- storage and retrieval.
82
- ```
83
-
84
- The `llms.txt` file covers all exports, index types, CLI commands, gRPC bindings, and on-disk format — enough for any coding agent to scaffold a working integration without browsing docs.
85
-
86
- ## License
87
-
88
- MIT License. See [LICENSE](LICENSE).
89
-
90
- ## Contributing
91
-
92
- See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines. Please review our [Code of Conduct](CODE_OF_CONDUCT.md).
1
+ # Vectra: a local vector database
2
+
3
+ [![npm version](https://img.shields.io/npm/v/vectra.svg)](https://www.npmjs.com/package/vectra)
4
+ [![Build](https://github.com/Stevenic/vectra/actions/workflows/ci.yml/badge.svg)](https://github.com/Stevenic/vectra/actions/workflows/ci.yml)
5
+ [![Coverage Status](https://coveralls.io/repos/github/Stevenic/vectra/badge.svg?branch=main)](https://coveralls.io/github/Stevenic/vectra?branch=main)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
7
+ [![Agent Ready](https://img.shields.io/badge/Agent-Ready-blue.svg)](#agent-ready)
8
+
9
+ Vectra is a local, file-backed, in-memory vector database with an optional gRPC server for cross-language access. Each index is a folder on disk — queries use MongoDB-style metadata filtering and cosine similarity ranking, with sub-millisecond latency for small indexes.
10
+
11
+ ## What's New in Vectra 0.14+
12
+
13
+ - **Browser & Electron support** — `vectra/browser` entry point with `IndexedDBStorage` and `TransformersEmbeddings`
14
+ - **Local embeddings** — `LocalEmbeddings` and `TransformersEmbeddings` run HuggingFace models with no API key
15
+ - **Protocol Buffers** — opt-in binary format, 40-50% smaller files
16
+ - **gRPC server** — `vectra serve` exposes 19 RPCs for cross-language access
17
+ - **FolderWatcher** — auto-sync directories into a document index
18
+ - **Language bindings** — `vectra generate` scaffolds clients for 6 languages
19
+ - **0.15: Performance improvements** — skip-if-unchanged document upserts, shallow-clone transactional snapshots, heap-based top-K query ranking, parallel metadata loads, and O(N) batch chunk deletion
20
+
21
+ See the [Changelog](https://stevenic.github.io/vectra/changelog) for breaking changes and migration details.
22
+
23
+ ## Install
24
+
25
+ ```sh
26
+ npm install vectra
27
+ ```
28
+
29
+ ## Quick Example
30
+
31
+ ```ts
32
+ import { LocalDocumentIndex, OpenAIEmbeddings } from 'vectra';
33
+
34
+ const docs = new LocalDocumentIndex({
35
+ folderPath: './my-index',
36
+ embeddings: new OpenAIEmbeddings({
37
+ apiKey: process.env.OPENAI_API_KEY!,
38
+ model: 'text-embedding-3-small',
39
+ maxTokens: 8000,
40
+ }),
41
+ });
42
+
43
+ if (!(await docs.isIndexCreated())) {
44
+ await docs.createIndex({ version: 1 });
45
+ }
46
+
47
+ await docs.upsertDocument('doc://readme', 'Vectra is a local vector database...', 'md');
48
+
49
+ const results = await docs.queryDocuments('What is Vectra?', { maxDocuments: 5 });
50
+ if (results.length > 0) {
51
+ const sections = await results[0].renderSections(2000, 1, true);
52
+ console.log(sections[0].text);
53
+ }
54
+ ```
55
+
56
+ ## Documentation
57
+
58
+ Full docs at **[stevenic.github.io/vectra](https://stevenic.github.io/vectra/)**:
59
+
60
+ | Guide | Description |
61
+ |-------|-------------|
62
+ | [Getting Started](https://stevenic.github.io/vectra/getting-started) | Install, requirements, quick start with both index types |
63
+ | [Core Concepts](https://stevenic.github.io/vectra/core-concepts) | Index types, metadata filtering, on-disk layout |
64
+ | [Embeddings Guide](https://stevenic.github.io/vectra/embeddings) | Choose and configure an embeddings provider |
65
+ | [Document Indexing](https://stevenic.github.io/vectra/documents) | Chunking, retrieval, hybrid search, FolderWatcher |
66
+ | [CLI Reference](https://stevenic.github.io/vectra/cli) | All CLI commands, flags, and provider config |
67
+ | [API Reference](https://stevenic.github.io/vectra/api-reference) | TypeScript API overview |
68
+ | [Best Practices](https://stevenic.github.io/vectra/best-practices) | Performance tuning, troubleshooting |
69
+ | [Storage](https://stevenic.github.io/vectra/storage) | Pluggable backends, browser/IndexedDB, serialization formats |
70
+ | [gRPC Server](https://stevenic.github.io/vectra/grpc) | Cross-language access and language bindings |
71
+ | [Changelog](https://stevenic.github.io/vectra/changelog) | Breaking changes and migration guides |
72
+ | [Tutorials](https://stevenic.github.io/vectra/tutorials/) | RAG pipeline, browser app, gRPC, custom storage, folder sync |
73
+ | [Samples](./samples/) | Runnable examples: quickstart, RAG, browser, SQLite storage, gRPC, folder watcher |
74
+
75
+ ## Agent Ready
76
+
77
+ Vectra ships an [`llms.txt`](https://github.com/Stevenic/vectra/blob/main/llms.txt) file that gives coding agents everything they need to integrate Vectra into your project. Point your agent at it and let it do the work:
78
+
79
+ ```
80
+ Read the llms.txt file at https://raw.githubusercontent.com/Stevenic/vectra/main/llms.txt
81
+ and then add Vectra support to this project. Use LocalDocumentIndex for document
82
+ storage and retrieval.
83
+ ```
84
+
85
+ The `llms.txt` file covers all exports, index types, CLI commands, gRPC bindings, and on-disk format — enough for any coding agent to scaffold a working integration without browsing docs.
86
+
87
+ ## License
88
+
89
+ MIT License. See [LICENSE](LICENSE).
90
+
91
+ ## Contributing
92
+
93
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines. Please review our [Code of Conduct](CODE_OF_CONDUCT.md).
@@ -52,6 +52,7 @@ export declare class FolderWatcher extends EventEmitter {
52
52
  private readonly _tracked;
53
53
  private readonly _pending;
54
54
  private readonly _watchers;
55
+ private readonly _dirWatchers;
55
56
  private _running;
56
57
  /**
57
58
  * Creates a new FolderWatcher instance.
@@ -84,7 +85,26 @@ export declare class FolderWatcher extends EventEmitter {
84
85
  private _collectFiles;
85
86
  private _syncFile;
86
87
  private _deleteFile;
87
- private _watchDirectory;
88
+ /**
89
+ * Walks a directory tree and installs a non-recursive `fs.watch` on every
90
+ * directory it contains. Non-recursive watching avoids a known libuv bug on
91
+ * Windows (`Assertion failed: !_wcsnicmp` in `fs-event.c`) that fires when
92
+ * `fs.watch(..., { recursive: true })` receives events whose paths libuv's
93
+ * Windows backend can't normalize back to the watch root.
94
+ */
95
+ private _watchDirectoryTree;
96
+ private _addDirectoryWatch;
97
+ /**
98
+ * Dispatch a single change event from one of the per-directory watchers.
99
+ * - File path: feed to the existing debounced file-sync pipeline.
100
+ * - New subdirectory: install watchers for it and sync its contents.
101
+ * - Path that used to be a watched subdirectory and no longer exists:
102
+ * tear down its watchers (and any descendants) and mark affected
103
+ * tracked files for deletion.
104
+ */
105
+ private _handleEvent;
106
+ private _processEvent;
107
+ private _stopWatchingDir;
88
108
  private _watchFile;
89
109
  private _debouncedSync;
90
110
  }
@@ -1 +1 @@
1
- {"version":3,"file":"FolderWatcher.d.ts","sourceRoot":"","sources":["../src/FolderWatcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAChC;;OAEG;IACH,KAAK,EAAE,kBAAkB,CAAC;IAE1B;;OAEG;IACH,KAAK,EAAE,MAAM,EAAE,CAAC;IAEhB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAEtB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,mBAAmB;IAChC,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC,CAAC;IAC7D,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IACnC,KAAK,EAAE,EAAE,CAAC;CACb;AAOD;;;;;;GAMG;AACH,qBAAa,aAAc,SAAQ,YAAY;IAC3C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAW;IAClC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAc;IAC3C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuC;IAChE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA0C;IACnE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsB;IAChD,OAAO,CAAC,QAAQ,CAAkB;IAElC;;;OAGG;gBACgB,MAAM,EAAE,mBAAmB;IAU9C;;OAEG;IACH,IAAW,SAAS,IAAI,OAAO,CAE9B;IAED;;OAEG;IACH,IAAW,gBAAgB,IAAI,MAAM,CAEpC;IAED;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAyBnC;;OAEG;IACU,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBlC;;;OAGG;IACU,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;YA+BtB,YAAY;IAI1B,OAAO,CAAC,cAAc;YAMR,aAAa;YAoBb,SAAS;YAiBT,WAAW;IAkBzB,OAAO,CAAC,eAAe;IAkBvB,OAAO,CAAC,UAAU;IAelB,OAAO,CAAC,cAAc;CA0BzB"}
1
+ {"version":3,"file":"FolderWatcher.d.ts","sourceRoot":"","sources":["../src/FolderWatcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAChC;;OAEG;IACH,KAAK,EAAE,kBAAkB,CAAC;IAE1B;;OAEG;IACH,KAAK,EAAE,MAAM,EAAE,CAAC;IAEhB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAEtB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,mBAAmB;IAChC,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC,CAAC;IAC7D,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IACnC,KAAK,EAAE,EAAE,CAAC;CACb;AAOD;;;;;;GAMG;AACH,qBAAa,aAAc,SAAQ,YAAY;IAC3C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAW;IAClC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAc;IAC3C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuC;IAChE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA0C;IACnE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsB;IAChD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAwC;IACrE,OAAO,CAAC,QAAQ,CAAkB;IAElC;;;OAGG;gBACgB,MAAM,EAAE,mBAAmB;IAU9C;;OAEG;IACH,IAAW,SAAS,IAAI,OAAO,CAE9B;IAED;;OAEG;IACH,IAAW,gBAAgB,IAAI,MAAM,CAEpC;IAED;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAyCnC;;OAEG;IACU,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBlC;;;OAGG;IACU,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;YA+BtB,YAAY;IAI1B,OAAO,CAAC,cAAc;YAMR,aAAa;YAoBb,SAAS;YAiBT,WAAW;IAkBzB;;;;;;OAMG;YACW,mBAAmB;IAiBjC,OAAO,CAAC,kBAAkB;IAoB1B;;;;;;;OAOG;IACH,OAAO,CAAC,YAAY;YAQN,aAAa;IAmC3B,OAAO,CAAC,gBAAgB;IAmBxB,OAAO,CAAC,UAAU;IAelB,OAAO,CAAC,cAAc;CA0BzB"}
@@ -67,6 +67,7 @@ class FolderWatcher extends events_1.EventEmitter {
67
67
  this._tracked = new Map();
68
68
  this._pending = new Map();
69
69
  this._watchers = [];
70
+ this._dirWatchers = new Map();
70
71
  this._running = false;
71
72
  this._index = config.index;
72
73
  this._paths = config.paths.map(p => path.resolve(p));
@@ -96,6 +97,22 @@ class FolderWatcher extends events_1.EventEmitter {
96
97
  throw new Error('FolderWatcher is already running');
97
98
  }
98
99
  this._running = true;
100
+ // Canonicalize watched paths. Windows `fs.watch` will crash inside
101
+ // libuv with a `!_wcsnicmp` assertion in `fs-event.c` when given a
102
+ // path containing an 8.3 short name (e.g., `STEVEN~1`) because
103
+ // ReadDirectoryChangesW reports event filenames with their long-name
104
+ // expansion and libuv's prefix check fails. `os.tmpdir()` is a common
105
+ // source of short names in the wild. Resolving up front keeps the
106
+ // tracked URIs, the initial sync, and the per-directory watchers all
107
+ // consistent on the long-name form.
108
+ for (let i = 0; i < this._paths.length; i++) {
109
+ try {
110
+ this._paths[i] = yield node_fs_1.default.promises.realpath(this._paths[i]);
111
+ }
112
+ catch (_a) {
113
+ // Path doesn't exist yet — leave as-is; the watch loop will skip it.
114
+ }
115
+ }
99
116
  // Initial sync
100
117
  yield this._initialSync();
101
118
  this.emit('ready');
@@ -104,13 +121,13 @@ class FolderWatcher extends events_1.EventEmitter {
104
121
  try {
105
122
  const stat = yield node_fs_1.default.promises.stat(watchPath);
106
123
  if (stat.isDirectory()) {
107
- this._watchDirectory(watchPath);
124
+ yield this._watchDirectoryTree(watchPath);
108
125
  }
109
126
  else if (stat.isFile()) {
110
127
  this._watchFile(watchPath);
111
128
  }
112
129
  }
113
- catch (_a) {
130
+ catch (_b) {
114
131
  // Path doesn't exist — skip
115
132
  }
116
133
  }
@@ -124,9 +141,13 @@ class FolderWatcher extends events_1.EventEmitter {
124
141
  this._running = false;
125
142
  // Close all watchers
126
143
  for (const watcher of this._watchers) {
127
- watcher.close();
144
+ try {
145
+ watcher.close();
146
+ }
147
+ catch ( /* ignore */_a) { /* ignore */ }
128
148
  }
129
149
  this._watchers.length = 0;
150
+ this._dirWatchers.clear();
130
151
  // Clear pending debounced operations
131
152
  for (const timeout of this._pending.values()) {
132
153
  clearTimeout(timeout);
@@ -239,25 +260,131 @@ class FolderWatcher extends events_1.EventEmitter {
239
260
  }
240
261
  });
241
262
  }
242
- _watchDirectory(dirPath) {
263
+ /**
264
+ * Walks a directory tree and installs a non-recursive `fs.watch` on every
265
+ * directory it contains. Non-recursive watching avoids a known libuv bug on
266
+ * Windows (`Assertion failed: !_wcsnicmp` in `fs-event.c`) that fires when
267
+ * `fs.watch(..., { recursive: true })` receives events whose paths libuv's
268
+ * Windows backend can't normalize back to the watch root.
269
+ */
270
+ _watchDirectoryTree(rootDir) {
271
+ return __awaiter(this, void 0, void 0, function* () {
272
+ if (!this._running)
273
+ return;
274
+ this._addDirectoryWatch(rootDir);
275
+ let entries;
276
+ try {
277
+ entries = yield node_fs_1.default.promises.readdir(rootDir, { withFileTypes: true });
278
+ }
279
+ catch (_a) {
280
+ // Dir may have been removed mid-walk; nothing to recurse into.
281
+ return;
282
+ }
283
+ for (const entry of entries) {
284
+ if (entry.isDirectory()) {
285
+ yield this._watchDirectoryTree(path.join(rootDir, entry.name));
286
+ }
287
+ }
288
+ });
289
+ }
290
+ _addDirectoryWatch(dirPath) {
291
+ if (this._dirWatchers.has(dirPath))
292
+ return;
243
293
  try {
244
- const watcher = node_fs_1.default.watch(dirPath, { recursive: true }, (eventType, filename) => {
294
+ const watcher = node_fs_1.default.watch(dirPath, (_eventType, filename) => {
245
295
  if (!this._running || !filename)
246
296
  return;
247
297
  const fullPath = path.join(dirPath, filename);
248
- if (this._shouldInclude(fullPath)) {
249
- this._debouncedSync(fullPath);
250
- }
298
+ this._handleEvent(fullPath);
251
299
  });
252
300
  watcher.on('error', (err) => {
253
301
  this.emit('error', err, dirPath);
302
+ // Clean up so we don't leak a dead handle in our maps.
303
+ this._stopWatchingDir(dirPath);
254
304
  });
305
+ this._dirWatchers.set(dirPath, watcher);
255
306
  this._watchers.push(watcher);
256
307
  }
257
308
  catch (err) {
258
309
  this.emit('error', err instanceof Error ? err : new Error(String(err)), dirPath);
259
310
  }
260
311
  }
312
+ /**
313
+ * Dispatch a single change event from one of the per-directory watchers.
314
+ * - File path: feed to the existing debounced file-sync pipeline.
315
+ * - New subdirectory: install watchers for it and sync its contents.
316
+ * - Path that used to be a watched subdirectory and no longer exists:
317
+ * tear down its watchers (and any descendants) and mark affected
318
+ * tracked files for deletion.
319
+ */
320
+ _handleEvent(fullPath) {
321
+ // fs.watch callbacks must return quickly; do the work async without
322
+ // awaiting and route exceptions to the error event.
323
+ void this._processEvent(fullPath).catch((err) => {
324
+ this.emit('error', err instanceof Error ? err : new Error(String(err)), fullPath);
325
+ });
326
+ }
327
+ _processEvent(fullPath) {
328
+ return __awaiter(this, void 0, void 0, function* () {
329
+ if (!this._running)
330
+ return;
331
+ let stat;
332
+ try {
333
+ stat = yield node_fs_1.default.promises.stat(fullPath);
334
+ }
335
+ catch (_a) {
336
+ // Path no longer exists. If it was a watched subdir, tear down.
337
+ if (this._dirWatchers.has(fullPath)) {
338
+ this._stopWatchingDir(fullPath);
339
+ }
340
+ // If a tracked file disappeared, debouncedSync will pick it up
341
+ // (its timer stats, fails, and calls _deleteFile).
342
+ if (this._tracked.has(fullPath)) {
343
+ this._debouncedSync(fullPath);
344
+ }
345
+ return;
346
+ }
347
+ if (stat.isDirectory()) {
348
+ if (!this._dirWatchers.has(fullPath)) {
349
+ // New subdirectory: watch it (and any descendants) and sync
350
+ // files that already exist inside it.
351
+ yield this._watchDirectoryTree(fullPath);
352
+ const files = new Map();
353
+ yield this._collectFiles(fullPath, files);
354
+ for (const [filePath, mtimeMs] of files) {
355
+ if (!this._running)
356
+ return;
357
+ yield this._syncFile(filePath, mtimeMs);
358
+ }
359
+ }
360
+ }
361
+ else if (stat.isFile() && this._shouldInclude(fullPath)) {
362
+ this._debouncedSync(fullPath);
363
+ }
364
+ });
365
+ }
366
+ _stopWatchingDir(dirPath) {
367
+ const prefix = dirPath + path.sep;
368
+ const doomed = [];
369
+ for (const watched of this._dirWatchers.keys()) {
370
+ if (watched === dirPath || watched.startsWith(prefix)) {
371
+ doomed.push(watched);
372
+ }
373
+ }
374
+ for (const watched of doomed) {
375
+ const watcher = this._dirWatchers.get(watched);
376
+ if (watcher) {
377
+ try {
378
+ watcher.close();
379
+ }
380
+ catch ( /* ignore */_a) { /* ignore */ }
381
+ this._dirWatchers.delete(watched);
382
+ const idx = this._watchers.indexOf(watcher);
383
+ if (idx >= 0)
384
+ this._watchers.splice(idx, 1);
385
+ }
386
+ }
387
+ }
261
388
  _watchFile(filePath) {
262
389
  try {
263
390
  const watcher = node_fs_1.default.watch(filePath, (eventType) => {
@@ -1 +1 @@
1
- {"version":3,"file":"FolderWatcher.js","sourceRoot":"","sources":["../src/FolderWatcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FolderWatcher.js","sourceRoot":"","sources":["../src/FolderWatcher.ts"],"names":[],"mappings":"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"}