vexor 0.20.0__tar.gz → 0.21.0__tar.gz

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 (36) hide show
  1. {vexor-0.20.0 → vexor-0.21.0}/PKG-INFO +15 -13
  2. {vexor-0.20.0 → vexor-0.21.0}/README.md +14 -12
  3. {vexor-0.20.0 → vexor-0.21.0}/plugins/vexor/.claude-plugin/plugin.json +1 -1
  4. {vexor-0.20.0 → vexor-0.21.0}/vexor/__init__.py +1 -1
  5. {vexor-0.20.0 → vexor-0.21.0}/vexor/api.py +26 -0
  6. {vexor-0.20.0 → vexor-0.21.0}/vexor/cache.py +470 -274
  7. {vexor-0.20.0 → vexor-0.21.0}/vexor/cli.py +53 -0
  8. {vexor-0.20.0 → vexor-0.21.0}/vexor/config.py +54 -1
  9. {vexor-0.20.0 → vexor-0.21.0}/vexor/providers/gemini.py +79 -13
  10. {vexor-0.20.0 → vexor-0.21.0}/vexor/providers/openai.py +79 -13
  11. {vexor-0.20.0 → vexor-0.21.0}/vexor/services/config_service.py +14 -0
  12. {vexor-0.20.0 → vexor-0.21.0}/vexor/services/index_service.py +132 -5
  13. {vexor-0.20.0 → vexor-0.21.0}/vexor/services/search_service.py +94 -27
  14. {vexor-0.20.0 → vexor-0.21.0}/vexor/text.py +10 -0
  15. {vexor-0.20.0 → vexor-0.21.0}/.gitignore +0 -0
  16. {vexor-0.20.0 → vexor-0.21.0}/LICENSE +0 -0
  17. {vexor-0.20.0 → vexor-0.21.0}/gui/README.md +0 -0
  18. {vexor-0.20.0 → vexor-0.21.0}/plugins/vexor/README.md +0 -0
  19. {vexor-0.20.0 → vexor-0.21.0}/plugins/vexor/skills/vexor-cli/SKILL.md +0 -0
  20. {vexor-0.20.0 → vexor-0.21.0}/plugins/vexor/skills/vexor-cli/references/install-vexor.md +0 -0
  21. {vexor-0.20.0 → vexor-0.21.0}/pyproject.toml +0 -0
  22. {vexor-0.20.0 → vexor-0.21.0}/vexor/__main__.py +0 -0
  23. {vexor-0.20.0 → vexor-0.21.0}/vexor/modes.py +0 -0
  24. {vexor-0.20.0 → vexor-0.21.0}/vexor/output.py +0 -0
  25. {vexor-0.20.0 → vexor-0.21.0}/vexor/providers/__init__.py +0 -0
  26. {vexor-0.20.0 → vexor-0.21.0}/vexor/providers/local.py +0 -0
  27. {vexor-0.20.0 → vexor-0.21.0}/vexor/search.py +0 -0
  28. {vexor-0.20.0 → vexor-0.21.0}/vexor/services/__init__.py +0 -0
  29. {vexor-0.20.0 → vexor-0.21.0}/vexor/services/cache_service.py +0 -0
  30. {vexor-0.20.0 → vexor-0.21.0}/vexor/services/content_extract_service.py +0 -0
  31. {vexor-0.20.0 → vexor-0.21.0}/vexor/services/init_service.py +0 -0
  32. {vexor-0.20.0 → vexor-0.21.0}/vexor/services/js_parser.py +0 -0
  33. {vexor-0.20.0 → vexor-0.21.0}/vexor/services/keyword_service.py +0 -0
  34. {vexor-0.20.0 → vexor-0.21.0}/vexor/services/skill_service.py +0 -0
  35. {vexor-0.20.0 → vexor-0.21.0}/vexor/services/system_service.py +0 -0
  36. {vexor-0.20.0 → vexor-0.21.0}/vexor/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: vexor
3
- Version: 0.20.0
3
+ Version: 0.21.0
4
4
  Summary: A vector-powered CLI for semantic search over files.
5
5
  Project-URL: Repository, https://github.com/scarletkc/vexor
6
6
  Author: scarletkc
@@ -150,13 +150,26 @@ for hit in response.results:
150
150
  By default it reads `~/.vexor/config.json`. For runtime config overrides, cache
151
151
  controls, and per-call options, see [`docs/api/python.md`](https://github.com/scarletkc/vexor/tree/main/docs/api/python.md).
152
152
 
153
+ ## AI Agent Skill
154
+
155
+ This repo includes a skill for AI agents to use Vexor effectively:
156
+
157
+ ```bash
158
+ vexor install --skills claude # Claude Code
159
+ vexor install --skills codex # Codex
160
+ ```
161
+
162
+ Skill source: [`plugins/vexor/skills/vexor-cli`](https://github.com/scarletkc/vexor/raw/refs/heads/main/plugins/vexor/skills/vexor-cli/SKILL.md)
163
+
153
164
  ## Configuration
154
165
 
155
166
  ```bash
156
167
  vexor config --set-provider openai # default; also supports gemini/custom/local
157
168
  vexor config --set-model text-embedding-3-small
158
169
  vexor config --set-batch-size 0 # 0 = single request
159
- vexor config --set-embed-concurrency 2 # parallel embedding requests
170
+ vexor config --set-embed-concurrency 4 # parallel embedding requests
171
+ vexor config --set-extract-concurrency 4 # parallel file extraction workers
172
+ vexor config --set-extract-backend auto # auto|thread|process (default: auto)
160
173
  vexor config --set-auto-index true # auto-index before search (default)
161
174
  vexor config --rerank bm25 # optional BM25 rerank for top-k results
162
175
  vexor config --rerank flashrank # FlashRank rerank (requires optional extra)
@@ -298,17 +311,6 @@ Re-running `vexor index` only re-embeds changed files; >50% changes trigger full
298
311
 
299
312
  Porcelain output fields: `rank`, `similarity`, `path`, `chunk_index`, `start_line`, `end_line`, `preview` (line fields are `-` when unavailable).
300
313
 
301
- ## AI Agent Skill
302
-
303
- This repo includes a skill for AI agents to use Vexor effectively:
304
-
305
- ```bash
306
- vexor install --skills claude # Claude Code
307
- vexor install --skills codex # Codex
308
- ```
309
-
310
- Skill source: [`plugins/vexor/skills/vexor-cli`](https://github.com/scarletkc/vexor/raw/refs/heads/main/plugins/vexor/skills/vexor-cli/SKILL.md)
311
-
312
314
  ## Documentation
313
315
 
314
316
  See [docs](https://github.com/scarletkc/vexor/tree/main/docs) for more details.
@@ -95,13 +95,26 @@ for hit in response.results:
95
95
  By default it reads `~/.vexor/config.json`. For runtime config overrides, cache
96
96
  controls, and per-call options, see [`docs/api/python.md`](https://github.com/scarletkc/vexor/tree/main/docs/api/python.md).
97
97
 
98
+ ## AI Agent Skill
99
+
100
+ This repo includes a skill for AI agents to use Vexor effectively:
101
+
102
+ ```bash
103
+ vexor install --skills claude # Claude Code
104
+ vexor install --skills codex # Codex
105
+ ```
106
+
107
+ Skill source: [`plugins/vexor/skills/vexor-cli`](https://github.com/scarletkc/vexor/raw/refs/heads/main/plugins/vexor/skills/vexor-cli/SKILL.md)
108
+
98
109
  ## Configuration
99
110
 
100
111
  ```bash
101
112
  vexor config --set-provider openai # default; also supports gemini/custom/local
102
113
  vexor config --set-model text-embedding-3-small
103
114
  vexor config --set-batch-size 0 # 0 = single request
104
- vexor config --set-embed-concurrency 2 # parallel embedding requests
115
+ vexor config --set-embed-concurrency 4 # parallel embedding requests
116
+ vexor config --set-extract-concurrency 4 # parallel file extraction workers
117
+ vexor config --set-extract-backend auto # auto|thread|process (default: auto)
105
118
  vexor config --set-auto-index true # auto-index before search (default)
106
119
  vexor config --rerank bm25 # optional BM25 rerank for top-k results
107
120
  vexor config --rerank flashrank # FlashRank rerank (requires optional extra)
@@ -243,17 +256,6 @@ Re-running `vexor index` only re-embeds changed files; >50% changes trigger full
243
256
 
244
257
  Porcelain output fields: `rank`, `similarity`, `path`, `chunk_index`, `start_line`, `end_line`, `preview` (line fields are `-` when unavailable).
245
258
 
246
- ## AI Agent Skill
247
-
248
- This repo includes a skill for AI agents to use Vexor effectively:
249
-
250
- ```bash
251
- vexor install --skills claude # Claude Code
252
- vexor install --skills codex # Codex
253
- ```
254
-
255
- Skill source: [`plugins/vexor/skills/vexor-cli`](https://github.com/scarletkc/vexor/raw/refs/heads/main/plugins/vexor/skills/vexor-cli/SKILL.md)
256
-
257
259
  ## Documentation
258
260
 
259
261
  See [docs](https://github.com/scarletkc/vexor/tree/main/docs) for more details.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vexor",
3
- "version": "0.20.0",
3
+ "version": "0.21.0",
4
4
  "description": "A vector-powered CLI for semantic search over files (Vexor skill bundle).",
5
5
  "author": {
6
6
  "name": "scarletkc"
@@ -15,7 +15,7 @@ __all__ = [
15
15
  "set_data_dir",
16
16
  ]
17
17
 
18
- __version__ = "0.20.0"
18
+ __version__ = "0.21.0"
19
19
 
20
20
 
21
21
  def get_version() -> str:
@@ -42,6 +42,8 @@ class RuntimeSettings:
42
42
  model_name: str
43
43
  batch_size: int
44
44
  embed_concurrency: int
45
+ extract_concurrency: int
46
+ extract_backend: str
45
47
  base_url: str | None
46
48
  api_key: str | None
47
49
  local_cuda: bool
@@ -90,6 +92,8 @@ def search(
90
92
  model: str | None = None,
91
93
  batch_size: int | None = None,
92
94
  embed_concurrency: int | None = None,
95
+ extract_concurrency: int | None = None,
96
+ extract_backend: str | None = None,
93
97
  base_url: str | None = None,
94
98
  api_key: str | None = None,
95
99
  local_cuda: bool | None = None,
@@ -121,6 +125,8 @@ def search(
121
125
  model=model,
122
126
  batch_size=batch_size,
123
127
  embed_concurrency=embed_concurrency,
128
+ extract_concurrency=extract_concurrency,
129
+ extract_backend=extract_backend,
124
130
  base_url=base_url,
125
131
  api_key=api_key,
126
132
  local_cuda=local_cuda,
@@ -141,6 +147,8 @@ def search(
141
147
  model_name=settings.model_name,
142
148
  batch_size=settings.batch_size,
143
149
  embed_concurrency=settings.embed_concurrency,
150
+ extract_concurrency=settings.extract_concurrency,
151
+ extract_backend=settings.extract_backend,
144
152
  provider=settings.provider,
145
153
  base_url=settings.base_url,
146
154
  api_key=settings.api_key,
@@ -170,6 +178,8 @@ def index(
170
178
  model: str | None = None,
171
179
  batch_size: int | None = None,
172
180
  embed_concurrency: int | None = None,
181
+ extract_concurrency: int | None = None,
182
+ extract_backend: str | None = None,
173
183
  base_url: str | None = None,
174
184
  api_key: str | None = None,
175
185
  local_cuda: bool | None = None,
@@ -190,6 +200,8 @@ def index(
190
200
  model=model,
191
201
  batch_size=batch_size,
192
202
  embed_concurrency=embed_concurrency,
203
+ extract_concurrency=extract_concurrency,
204
+ extract_backend=extract_backend,
193
205
  base_url=base_url,
194
206
  api_key=api_key,
195
207
  local_cuda=local_cuda,
@@ -208,6 +220,8 @@ def index(
208
220
  model_name=settings.model_name,
209
221
  batch_size=settings.batch_size,
210
222
  embed_concurrency=settings.embed_concurrency,
223
+ extract_concurrency=settings.extract_concurrency,
224
+ extract_backend=settings.extract_backend,
211
225
  provider=settings.provider,
212
226
  base_url=settings.base_url,
213
227
  api_key=settings.api_key,
@@ -282,6 +296,8 @@ def _resolve_settings(
282
296
  model: str | None,
283
297
  batch_size: int | None,
284
298
  embed_concurrency: int | None,
299
+ extract_concurrency: int | None,
300
+ extract_backend: str | None,
285
301
  base_url: str | None,
286
302
  api_key: str | None,
287
303
  local_cuda: bool | None,
@@ -313,11 +329,21 @@ def _resolve_settings(
313
329
  embed_value = (
314
330
  embed_concurrency if embed_concurrency is not None else config.embed_concurrency
315
331
  )
332
+ extract_value = (
333
+ extract_concurrency
334
+ if extract_concurrency is not None
335
+ else config.extract_concurrency
336
+ )
337
+ extract_backend_value = (
338
+ extract_backend if extract_backend is not None else config.extract_backend
339
+ )
316
340
  return RuntimeSettings(
317
341
  provider=provider_value,
318
342
  model_name=model_name,
319
343
  batch_size=batch_value,
320
344
  embed_concurrency=embed_value,
345
+ extract_concurrency=extract_value,
346
+ extract_backend=extract_backend_value,
321
347
  base_url=base_url if base_url is not None else config.base_url,
322
348
  api_key=api_key if api_key is not None else config.api_key,
323
349
  local_cuda=bool(local_cuda if local_cuda is not None else config.local_cuda),