grepmax 0.12.13 → 0.13.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.
@@ -198,6 +198,7 @@ function computeStaleFiles(cachedPaths, seenPaths) {
198
198
  function initialSync(options) {
199
199
  return __awaiter(this, void 0, void 0, function* () {
200
200
  var _a, e_1, _b, _c;
201
+ var _d;
201
202
  const { projectRoot, dryRun = false, reset = false, onProgress, signal, } = options;
202
203
  const paths = (0, project_root_1.ensureProjectPaths)(projectRoot);
203
204
  const resolvedRoot = path.resolve(projectRoot);
@@ -209,22 +210,29 @@ function initialSync(options) {
209
210
  process.env.GMAX_PROJECT_ROOT = paths.root;
210
211
  const syncTimer = (0, logger_1.timer)("index", "Total");
211
212
  (0, logger_1.log)("index", `Root: ${resolvedRoot}`);
212
- let lock = null;
213
- const vectorDb = new vector_db_1.VectorDB(paths.lancedbDir);
213
+ // Daemon mode: caller provides shared resources, skip lock
214
+ const injected = !!(options.vectorDb && options.metaCache);
215
+ const ownedVectorDb = injected ? null : new vector_db_1.VectorDB(paths.lancedbDir);
216
+ const vectorDb = (_d = options.vectorDb) !== null && _d !== void 0 ? _d : ownedVectorDb;
214
217
  const treatAsEmptyCache = reset && dryRun;
215
- let metaCache = null;
218
+ let lock = null;
219
+ let metaCache = injected ? options.metaCache : null;
216
220
  try {
217
- if (!dryRun) {
218
- lock = yield (0, lock_1.acquireWriterLockWithRetry)(paths.dataDir);
219
- // Open MetaCache only after lock is acquired
220
- metaCache = new meta_cache_1.MetaCache(paths.lmdbPath);
221
- }
222
- else {
223
- metaCache = createNoopMetaCache();
221
+ if (!injected) {
222
+ if (!dryRun) {
223
+ lock = yield (0, lock_1.acquireWriterLockWithRetry)(paths.dataDir);
224
+ // Open MetaCache only after lock is acquired
225
+ metaCache = new meta_cache_1.MetaCache(paths.lmdbPath);
226
+ }
227
+ else {
228
+ metaCache = createNoopMetaCache();
229
+ }
224
230
  }
231
+ // At this point metaCache is always initialized (injected, created, or noop)
232
+ const mc = metaCache;
225
233
  if (!dryRun) {
226
234
  // Scope checks to this project's paths only
227
- const projectKeys = yield metaCache.getKeysWithPrefix(rootPrefix);
235
+ const projectKeys = yield mc.getKeysWithPrefix(rootPrefix);
228
236
  (0, logger_1.log)("index", `Cached files: ${projectKeys.size}`);
229
237
  // Coherence check: if LMDB has entries but LanceDB has no vectors for
230
238
  // this project, the vector store was wiped (e.g. compaction failure,
@@ -232,7 +240,7 @@ function initialSync(options) {
232
240
  if (projectKeys.size > 0 && !(yield vectorDb.hasRowsForPath(rootPrefix))) {
233
241
  (0, logger_1.log)("index", `Stale cache detected: ${projectKeys.size} cached files but no vectors — clearing cache`);
234
242
  for (const key of projectKeys) {
235
- metaCache.delete(key);
243
+ mc.delete(key);
236
244
  }
237
245
  projectKeys.clear();
238
246
  }
@@ -248,7 +256,7 @@ function initialSync(options) {
248
256
  // Only delete this project's data from the centralized store
249
257
  yield vectorDb.deletePathsWithPrefix(rootPrefix);
250
258
  for (const key of projectKeys) {
251
- metaCache.delete(key);
259
+ mc.delete(key);
252
260
  }
253
261
  }
254
262
  }
@@ -258,7 +266,7 @@ function initialSync(options) {
258
266
  // Get only this project's cached paths (scoped by prefix)
259
267
  const cachedPaths = dryRun || treatAsEmptyCache
260
268
  ? new Set()
261
- : yield metaCache.getKeysWithPrefix(rootPrefix);
269
+ : yield mc.getKeysWithPrefix(rootPrefix);
262
270
  const seenPaths = new Set();
263
271
  const visitedRealPaths = new Set();
264
272
  const batch = [];
@@ -293,8 +301,7 @@ function initialSync(options) {
293
301
  const deletes = Array.from(pendingDeletes);
294
302
  pendingMeta.clear();
295
303
  pendingDeletes.clear();
296
- const currentFlush = flushBatch(vectorDb, metaCache, // Non-null assertion: metaCache is assigned after lock
297
- toWrite, metaEntries, deletes, dryRun);
304
+ const currentFlush = flushBatch(vectorDb, mc, toWrite, metaEntries, deletes, dryRun);
298
305
  flushPromise = currentFlush;
299
306
  try {
300
307
  yield currentFlush;
@@ -345,11 +352,11 @@ function initialSync(options) {
345
352
  }
346
353
  });
347
354
  try {
348
- for (var _d = true, _e = __asyncValues((0, walker_1.walk)(paths.root, {
355
+ for (var _e = true, _f = __asyncValues((0, walker_1.walk)(paths.root, {
349
356
  additionalPatterns: ["**/.git/**", "**/.gmax/**", "**/.osgrep/**"],
350
- })), _f; _f = yield _e.next(), _a = _f.done, !_a; _d = true) {
351
- _c = _f.value;
352
- _d = false;
357
+ })), _g; _g = yield _f.next(), _a = _g.done, !_a; _e = true) {
358
+ _c = _g.value;
359
+ _e = false;
353
360
  const relPath = _c;
354
361
  if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
355
362
  shouldSkipCleanup = true;
@@ -389,7 +396,7 @@ function initialSync(options) {
389
396
  // Use absolute path as the key for MetaCache
390
397
  const cached = treatAsEmptyCache
391
398
  ? undefined
392
- : metaCache.get(absPath);
399
+ : mc.get(absPath);
393
400
  if (cached &&
394
401
  cached.mtimeMs === stats.mtimeMs &&
395
402
  cached.size === stats.size) {
@@ -420,7 +427,7 @@ function initialSync(options) {
420
427
  }
421
428
  if (cached && cached.hash === result.hash) {
422
429
  if (!dryRun) {
423
- metaCache.put(absPath, metaEntry);
430
+ mc.put(absPath, metaEntry);
424
431
  }
425
432
  processed += 1;
426
433
  seenPaths.add(absPath);
@@ -455,7 +462,7 @@ function initialSync(options) {
455
462
  pendingDeletes.add(absPath);
456
463
  pendingMeta.delete(absPath);
457
464
  if (!dryRun) {
458
- metaCache.delete(absPath);
465
+ mc.delete(absPath);
459
466
  }
460
467
  processed += 1;
461
468
  markProgress(relPath);
@@ -474,7 +481,7 @@ function initialSync(options) {
474
481
  catch (e_1_1) { e_1 = { error: e_1_1 }; }
475
482
  finally {
476
483
  try {
477
- if (!_d && !_a && (_b = _e.return)) yield _b.call(_e);
484
+ if (!_e && !_a && (_b = _f.return)) yield _b.call(_f);
478
485
  }
479
486
  finally { if (e_1) throw e_1.error; }
480
487
  }
@@ -497,7 +504,7 @@ function initialSync(options) {
497
504
  (0, logger_1.log)("index", `Stale cleanup: ${stale.length} paths`);
498
505
  yield vectorDb.deletePaths(stale);
499
506
  stale.forEach((p) => {
500
- metaCache.delete(p);
507
+ mc.delete(p);
501
508
  });
502
509
  }
503
510
  // Only rebuild FTS index if data actually changed
@@ -525,8 +532,11 @@ function initialSync(options) {
525
532
  if (lock) {
526
533
  yield lock.release();
527
534
  }
528
- yield (metaCache === null || metaCache === void 0 ? void 0 : metaCache.close());
529
- yield vectorDb.close();
535
+ // Only close resources we own (not injected by daemon)
536
+ if (!injected) {
537
+ yield (metaCache === null || metaCache === void 0 ? void 0 : metaCache.close());
538
+ yield (ownedVectorDb === null || ownedVectorDb === void 0 ? void 0 : ownedVectorDb.close());
539
+ }
530
540
  }
531
541
  });
532
542
  }
@@ -81,6 +81,17 @@ class VectorDB {
81
81
  }), MAINTENANCE_INTERVAL_MS);
82
82
  this.maintenanceTimer.unref();
83
83
  }
84
+ /** Pause the maintenance timer (e.g. during a full index that calls runMaintenance itself). */
85
+ pauseMaintenanceLoop() {
86
+ if (this.maintenanceTimer) {
87
+ clearInterval(this.maintenanceTimer);
88
+ this.maintenanceTimer = null;
89
+ }
90
+ }
91
+ /** Resume the maintenance timer after a pause. */
92
+ resumeMaintenanceLoop() {
93
+ this.startMaintenanceLoop();
94
+ }
84
95
  getDb() {
85
96
  return __awaiter(this, void 0, void 0, function* () {
86
97
  if (this.closed) {
@@ -44,6 +44,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
44
44
  Object.defineProperty(exports, "__esModule", { value: true });
45
45
  exports.sendDaemonCommand = sendDaemonCommand;
46
46
  exports.isDaemonRunning = isDaemonRunning;
47
+ exports.sendStreamingCommand = sendStreamingCommand;
47
48
  const net = __importStar(require("node:net"));
48
49
  const config_1 = require("../../config");
49
50
  const DEFAULT_TIMEOUT_MS = 5000;
@@ -106,3 +107,70 @@ function isDaemonRunning() {
106
107
  return resp.ok === true;
107
108
  });
108
109
  }
110
+ const DEFAULT_STREAMING_TIMEOUT_MS = 10 * 60 * 1000; // 10 minutes
111
+ /**
112
+ * Send a streaming command to the daemon. The daemon streams
113
+ * {type:"progress",...} lines followed by a final {type:"done",...}.
114
+ * The timeout resets on each progress message.
115
+ */
116
+ function sendStreamingCommand(cmd, onProgress, opts) {
117
+ var _a;
118
+ const timeout = (_a = opts === null || opts === void 0 ? void 0 : opts.timeoutMs) !== null && _a !== void 0 ? _a : DEFAULT_STREAMING_TIMEOUT_MS;
119
+ return new Promise((resolve, reject) => {
120
+ let settled = false;
121
+ let timer;
122
+ const finish = (result) => {
123
+ if (settled)
124
+ return;
125
+ settled = true;
126
+ clearTimeout(timer);
127
+ socket.destroy();
128
+ if (result instanceof Error)
129
+ reject(result);
130
+ else
131
+ resolve(result);
132
+ };
133
+ const resetTimer = () => {
134
+ clearTimeout(timer);
135
+ timer = setTimeout(() => {
136
+ finish(new Error("streaming command timed out"));
137
+ }, timeout);
138
+ };
139
+ const socket = net.createConnection({ path: config_1.PATHS.daemonSocket });
140
+ resetTimer();
141
+ socket.on("connect", () => {
142
+ socket.write(`${JSON.stringify(cmd)}\n`);
143
+ });
144
+ let buf = "";
145
+ socket.on("data", (chunk) => {
146
+ buf += chunk.toString();
147
+ let nl;
148
+ while ((nl = buf.indexOf("\n")) !== -1) {
149
+ const line = buf.slice(0, nl);
150
+ buf = buf.slice(nl + 1);
151
+ try {
152
+ const msg = JSON.parse(line);
153
+ if (msg.type === "done") {
154
+ finish(msg);
155
+ }
156
+ else if (msg.type === "progress") {
157
+ resetTimer();
158
+ onProgress(msg);
159
+ }
160
+ }
161
+ catch (_a) {
162
+ // ignore partial/malformed lines
163
+ }
164
+ }
165
+ });
166
+ socket.on("error", (err) => {
167
+ var _a;
168
+ finish(new Error((_a = err.code) !== null && _a !== void 0 ? _a : err.message));
169
+ });
170
+ socket.on("close", () => {
171
+ if (!settled) {
172
+ finish(new Error("connection closed before done"));
173
+ }
174
+ });
175
+ });
176
+ }
@@ -611,6 +611,7 @@ dependencies = [
611
611
  { name = "fastapi" },
612
612
  { name = "mlx-embeddings" },
613
613
  { name = "mlx-lm" },
614
+ { name = "setproctitle" },
614
615
  { name = "uvicorn" },
615
616
  ]
616
617
 
@@ -619,6 +620,7 @@ requires-dist = [
619
620
  { name = "fastapi", specifier = ">=0.115.0" },
620
621
  { name = "mlx-embeddings", git = "https://github.com/Blaizzy/mlx-embeddings.git" },
621
622
  { name = "mlx-lm", specifier = ">=0.22.0" },
623
+ { name = "setproctitle", specifier = ">=1.3.0" },
622
624
  { name = "uvicorn", specifier = ">=0.34.0" },
623
625
  ]
624
626
 
@@ -1377,6 +1379,54 @@ wheels = [
1377
1379
  { url = "https://files.pythonhosted.org/packages/f3/16/54f611fcfc2d1c46cbe3ec4169780b2cfa7cf63708ef2b71611136db7513/sentencepiece-0.2.1-cp314-cp314t-win_arm64.whl", hash = "sha256:105e36e75cbac1292642045458e8da677b2342dcd33df503e640f0b457cb6751", size = 1136264, upload-time = "2025-08-12T07:00:49.485Z" },
1378
1380
  ]
1379
1381
 
1382
+ [[package]]
1383
+ name = "setproctitle"
1384
+ version = "1.3.7"
1385
+ source = { registry = "https://pypi.org/simple" }
1386
+ sdist = { url = "https://files.pythonhosted.org/packages/8d/48/49393a96a2eef1ab418b17475fb92b8fcfad83d099e678751b05472e69de/setproctitle-1.3.7.tar.gz", hash = "sha256:bc2bc917691c1537d5b9bca1468437176809c7e11e5694ca79a9ca12345dcb9e", size = 27002, upload-time = "2025-09-05T12:51:25.278Z" }
1387
+ wheels = [
1388
+ { url = "https://files.pythonhosted.org/packages/5d/2f/fcedcade3b307a391b6e17c774c6261a7166aed641aee00ed2aad96c63ce/setproctitle-1.3.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:c3736b2a423146b5e62230502e47e08e68282ff3b69bcfe08a322bee73407922", size = 18047, upload-time = "2025-09-05T12:49:50.271Z" },
1389
+ { url = "https://files.pythonhosted.org/packages/23/ae/afc141ca9631350d0a80b8f287aac79a76f26b6af28fd8bf92dae70dc2c5/setproctitle-1.3.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3384e682b158d569e85a51cfbde2afd1ab57ecf93ea6651fe198d0ba451196ee", size = 13073, upload-time = "2025-09-05T12:49:51.46Z" },
1390
+ { url = "https://files.pythonhosted.org/packages/87/ed/0a4f00315bc02510395b95eec3d4aa77c07192ee79f0baae77ea7b9603d8/setproctitle-1.3.7-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:0564a936ea687cd24dffcea35903e2a20962aa6ac20e61dd3a207652401492dd", size = 33284, upload-time = "2025-09-05T12:49:52.741Z" },
1391
+ { url = "https://files.pythonhosted.org/packages/fc/e4/adf3c4c0a2173cb7920dc9df710bcc67e9bcdbf377e243b7a962dc31a51a/setproctitle-1.3.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a5d1cb3f81531f0eb40e13246b679a1bdb58762b170303463cb06ecc296f26d0", size = 34104, upload-time = "2025-09-05T12:49:54.416Z" },
1392
+ { url = "https://files.pythonhosted.org/packages/52/4f/6daf66394152756664257180439d37047aa9a1cfaa5e4f5ed35e93d1dc06/setproctitle-1.3.7-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a7d159e7345f343b44330cbba9194169b8590cb13dae940da47aa36a72aa9929", size = 35982, upload-time = "2025-09-05T12:49:56.295Z" },
1393
+ { url = "https://files.pythonhosted.org/packages/1b/62/f2c0595403cf915db031f346b0e3b2c0096050e90e0be658a64f44f4278a/setproctitle-1.3.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0b5074649797fd07c72ca1f6bff0406f4a42e1194faac03ecaab765ce605866f", size = 33150, upload-time = "2025-09-05T12:49:58.025Z" },
1394
+ { url = "https://files.pythonhosted.org/packages/a0/29/10dd41cde849fb2f9b626c846b7ea30c99c81a18a5037a45cc4ba33c19a7/setproctitle-1.3.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:61e96febced3f61b766115381d97a21a6265a0f29188a791f6df7ed777aef698", size = 34463, upload-time = "2025-09-05T12:49:59.424Z" },
1395
+ { url = "https://files.pythonhosted.org/packages/71/3c/cedd8eccfaf15fb73a2c20525b68c9477518917c9437737fa0fda91e378f/setproctitle-1.3.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:047138279f9463f06b858e579cc79580fbf7a04554d24e6bddf8fe5dddbe3d4c", size = 32848, upload-time = "2025-09-05T12:50:01.107Z" },
1396
+ { url = "https://files.pythonhosted.org/packages/d1/3e/0a0e27d1c9926fecccfd1f91796c244416c70bf6bca448d988638faea81d/setproctitle-1.3.7-cp313-cp313-win32.whl", hash = "sha256:7f47accafac7fe6535ba8ba9efd59df9d84a6214565108d0ebb1199119c9cbbd", size = 12544, upload-time = "2025-09-05T12:50:15.81Z" },
1397
+ { url = "https://files.pythonhosted.org/packages/36/1b/6bf4cb7acbbd5c846ede1c3f4d6b4ee52744d402e43546826da065ff2ab7/setproctitle-1.3.7-cp313-cp313-win_amd64.whl", hash = "sha256:fe5ca35aeec6dc50cabab9bf2d12fbc9067eede7ff4fe92b8f5b99d92e21263f", size = 13235, upload-time = "2025-09-05T12:50:16.89Z" },
1398
+ { url = "https://files.pythonhosted.org/packages/e6/a4/d588d3497d4714750e3eaf269e9e8985449203d82b16b933c39bd3fc52a1/setproctitle-1.3.7-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:10e92915c4b3086b1586933a36faf4f92f903c5554f3c34102d18c7d3f5378e9", size = 18058, upload-time = "2025-09-05T12:50:02.501Z" },
1399
+ { url = "https://files.pythonhosted.org/packages/05/77/7637f7682322a7244e07c373881c7e982567e2cb1dd2f31bd31481e45500/setproctitle-1.3.7-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:de879e9c2eab637f34b1a14c4da1e030c12658cdc69ee1b3e5be81b380163ce5", size = 13072, upload-time = "2025-09-05T12:50:03.601Z" },
1400
+ { url = "https://files.pythonhosted.org/packages/52/09/f366eca0973cfbac1470068d1313fa3fe3de4a594683385204ec7f1c4101/setproctitle-1.3.7-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:c18246d88e227a5b16248687514f95642505000442165f4b7db354d39d0e4c29", size = 34490, upload-time = "2025-09-05T12:50:04.948Z" },
1401
+ { url = "https://files.pythonhosted.org/packages/71/36/611fc2ed149fdea17c3677e1d0df30d8186eef9562acc248682b91312706/setproctitle-1.3.7-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7081f193dab22df2c36f9fc6d113f3793f83c27891af8fe30c64d89d9a37e152", size = 35267, upload-time = "2025-09-05T12:50:06.015Z" },
1402
+ { url = "https://files.pythonhosted.org/packages/88/a4/64e77d0671446bd5a5554387b69e1efd915274686844bea733714c828813/setproctitle-1.3.7-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9cc9b901ce129350637426a89cfd650066a4adc6899e47822e2478a74023ff7c", size = 37376, upload-time = "2025-09-05T12:50:07.484Z" },
1403
+ { url = "https://files.pythonhosted.org/packages/89/bc/ad9c664fe524fb4a4b2d3663661a5c63453ce851736171e454fa2cdec35c/setproctitle-1.3.7-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:80e177eff2d1ec172188d0d7fd9694f8e43d3aab76a6f5f929bee7bf7894e98b", size = 33963, upload-time = "2025-09-05T12:50:09.056Z" },
1404
+ { url = "https://files.pythonhosted.org/packages/ab/01/a36de7caf2d90c4c28678da1466b47495cbbad43badb4e982d8db8167ed4/setproctitle-1.3.7-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:23e520776c445478a67ee71b2a3c1ffdafbe1f9f677239e03d7e2cc635954e18", size = 35550, upload-time = "2025-09-05T12:50:10.791Z" },
1405
+ { url = "https://files.pythonhosted.org/packages/dd/68/17e8aea0ed5ebc17fbf03ed2562bfab277c280e3625850c38d92a7b5fcd9/setproctitle-1.3.7-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5fa1953126a3b9bd47049d58c51b9dac72e78ed120459bd3aceb1bacee72357c", size = 33727, upload-time = "2025-09-05T12:50:12.032Z" },
1406
+ { url = "https://files.pythonhosted.org/packages/b2/33/90a3bf43fe3a2242b4618aa799c672270250b5780667898f30663fd94993/setproctitle-1.3.7-cp313-cp313t-win32.whl", hash = "sha256:4a5e212bf438a4dbeece763f4962ad472c6008ff6702e230b4f16a037e2f6f29", size = 12549, upload-time = "2025-09-05T12:50:13.074Z" },
1407
+ { url = "https://files.pythonhosted.org/packages/0b/0e/50d1f07f3032e1f23d814ad6462bc0a138f369967c72494286b8a5228e40/setproctitle-1.3.7-cp313-cp313t-win_amd64.whl", hash = "sha256:cf2727b733e90b4f874bac53e3092aa0413fe1ea6d4f153f01207e6ce65034d9", size = 13243, upload-time = "2025-09-05T12:50:14.146Z" },
1408
+ { url = "https://files.pythonhosted.org/packages/89/c7/43ac3a98414f91d1b86a276bc2f799ad0b4b010e08497a95750d5bc42803/setproctitle-1.3.7-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:80c36c6a87ff72eabf621d0c79b66f3bdd0ecc79e873c1e9f0651ee8bf215c63", size = 18052, upload-time = "2025-09-05T12:50:17.928Z" },
1409
+ { url = "https://files.pythonhosted.org/packages/cd/2c/dc258600a25e1a1f04948073826bebc55e18dbd99dc65a576277a82146fa/setproctitle-1.3.7-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:b53602371a52b91c80aaf578b5ada29d311d12b8a69c0c17fbc35b76a1fd4f2e", size = 13071, upload-time = "2025-09-05T12:50:19.061Z" },
1410
+ { url = "https://files.pythonhosted.org/packages/ab/26/8e3bb082992f19823d831f3d62a89409deb6092e72fc6940962983ffc94f/setproctitle-1.3.7-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:fcb966a6c57cf07cc9448321a08f3be6b11b7635be502669bc1d8745115d7e7f", size = 33180, upload-time = "2025-09-05T12:50:20.395Z" },
1411
+ { url = "https://files.pythonhosted.org/packages/f1/af/ae692a20276d1159dd0cf77b0bcf92cbb954b965655eb4a69672099bb214/setproctitle-1.3.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:46178672599b940368d769474fe13ecef1b587d58bb438ea72b9987f74c56ea5", size = 34043, upload-time = "2025-09-05T12:50:22.454Z" },
1412
+ { url = "https://files.pythonhosted.org/packages/34/b2/6a092076324dd4dac1a6d38482bedebbff5cf34ef29f58585ec76e47bc9d/setproctitle-1.3.7-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7f9e9e3ff135cbcc3edd2f4cf29b139f4aca040d931573102742db70ff428c17", size = 35892, upload-time = "2025-09-05T12:50:23.937Z" },
1413
+ { url = "https://files.pythonhosted.org/packages/1c/1a/8836b9f28cee32859ac36c3df85aa03e1ff4598d23ea17ca2e96b5845a8f/setproctitle-1.3.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:14c7eba8d90c93b0e79c01f0bd92a37b61983c27d6d7d5a3b5defd599113d60e", size = 32898, upload-time = "2025-09-05T12:50:25.617Z" },
1414
+ { url = "https://files.pythonhosted.org/packages/ef/22/8fabdc24baf42defb599714799d8445fe3ae987ec425a26ec8e80ea38f8e/setproctitle-1.3.7-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:9e64e98077fb30b6cf98073d6c439cd91deb8ebbf8fc62d9dbf52bd38b0c6ac0", size = 34308, upload-time = "2025-09-05T12:50:26.827Z" },
1415
+ { url = "https://files.pythonhosted.org/packages/15/1b/b9bee9de6c8cdcb3b3a6cb0b3e773afdb86bbbc1665a3bfa424a4294fda2/setproctitle-1.3.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b91387cc0f02a00ac95dcd93f066242d3cca10ff9e6153de7ee07069c6f0f7c8", size = 32536, upload-time = "2025-09-05T12:50:28.5Z" },
1416
+ { url = "https://files.pythonhosted.org/packages/37/0c/75e5f2685a5e3eda0b39a8b158d6d8895d6daf3ba86dec9e3ba021510272/setproctitle-1.3.7-cp314-cp314-win32.whl", hash = "sha256:52b054a61c99d1b72fba58b7f5486e04b20fefc6961cd76722b424c187f362ed", size = 12731, upload-time = "2025-09-05T12:50:43.955Z" },
1417
+ { url = "https://files.pythonhosted.org/packages/d2/ae/acddbce90d1361e1786e1fb421bc25baeb0c22ef244ee5d0176511769ec8/setproctitle-1.3.7-cp314-cp314-win_amd64.whl", hash = "sha256:5818e4080ac04da1851b3ec71e8a0f64e3748bf9849045180566d8b736702416", size = 13464, upload-time = "2025-09-05T12:50:45.057Z" },
1418
+ { url = "https://files.pythonhosted.org/packages/01/6d/20886c8ff2e6d85e3cabadab6aab9bb90acaf1a5cfcb04d633f8d61b2626/setproctitle-1.3.7-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:6fc87caf9e323ac426910306c3e5d3205cd9f8dcac06d233fcafe9337f0928a3", size = 18062, upload-time = "2025-09-05T12:50:29.78Z" },
1419
+ { url = "https://files.pythonhosted.org/packages/9a/60/26dfc5f198715f1343b95c2f7a1c16ae9ffa45bd89ffd45a60ed258d24ea/setproctitle-1.3.7-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6134c63853d87a4897ba7d5cc0e16abfa687f6c66fc09f262bb70d67718f2309", size = 13075, upload-time = "2025-09-05T12:50:31.604Z" },
1420
+ { url = "https://files.pythonhosted.org/packages/21/9c/980b01f50d51345dd513047e3ba9e96468134b9181319093e61db1c47188/setproctitle-1.3.7-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:1403d2abfd32790b6369916e2313dffbe87d6b11dca5bbd898981bcde48e7a2b", size = 34744, upload-time = "2025-09-05T12:50:32.777Z" },
1421
+ { url = "https://files.pythonhosted.org/packages/86/b4/82cd0c86e6d1c4538e1a7eb908c7517721513b801dff4ba3f98ef816a240/setproctitle-1.3.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e7c5bfe4228ea22373e3025965d1a4116097e555ee3436044f5c954a5e63ac45", size = 35589, upload-time = "2025-09-05T12:50:34.13Z" },
1422
+ { url = "https://files.pythonhosted.org/packages/8a/4f/9f6b2a7417fd45673037554021c888b31247f7594ff4bd2239918c5cd6d0/setproctitle-1.3.7-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:585edf25e54e21a94ccb0fe81ad32b9196b69ebc4fc25f81da81fb8a50cca9e4", size = 37698, upload-time = "2025-09-05T12:50:35.524Z" },
1423
+ { url = "https://files.pythonhosted.org/packages/20/92/927b7d4744aac214d149c892cb5fa6dc6f49cfa040cb2b0a844acd63dcaf/setproctitle-1.3.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:96c38cdeef9036eb2724c2210e8d0b93224e709af68c435d46a4733a3675fee1", size = 34201, upload-time = "2025-09-05T12:50:36.697Z" },
1424
+ { url = "https://files.pythonhosted.org/packages/0a/0c/fd4901db5ba4b9d9013e62f61d9c18d52290497f956745cd3e91b0d80f90/setproctitle-1.3.7-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:45e3ef48350abb49cf937d0a8ba15e42cee1e5ae13ca41a77c66d1abc27a5070", size = 35801, upload-time = "2025-09-05T12:50:38.314Z" },
1425
+ { url = "https://files.pythonhosted.org/packages/e7/e3/54b496ac724e60e61cc3447f02690105901ca6d90da0377dffe49ff99fc7/setproctitle-1.3.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:1fae595d032b30dab4d659bece20debd202229fce12b55abab978b7f30783d73", size = 33958, upload-time = "2025-09-05T12:50:39.841Z" },
1426
+ { url = "https://files.pythonhosted.org/packages/ea/a8/c84bb045ebf8c6fdc7f7532319e86f8380d14bbd3084e6348df56bdfe6fd/setproctitle-1.3.7-cp314-cp314t-win32.whl", hash = "sha256:02432f26f5d1329ab22279ff863c83589894977063f59e6c4b4845804a08f8c2", size = 12745, upload-time = "2025-09-05T12:50:41.377Z" },
1427
+ { url = "https://files.pythonhosted.org/packages/08/b6/3a5a4f9952972791a9114ac01dfc123f0df79903577a3e0a7a404a695586/setproctitle-1.3.7-cp314-cp314t-win_amd64.whl", hash = "sha256:cbc388e3d86da1f766d8fc2e12682e446064c01cea9f88a88647cfe7c011de6a", size = 13469, upload-time = "2025-09-05T12:50:42.67Z" },
1428
+ ]
1429
+
1380
1430
  [[package]]
1381
1431
  name = "shellingham"
1382
1432
  version = "1.5.4"
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "grepmax",
3
- "version": "0.12.13",
4
- "author": "Robert Owens <robowens@me.com>",
3
+ "version": "0.13.0",
4
+ "author": "Robert Owens <78518764+reowens@users.noreply.github.com>",
5
5
  "homepage": "https://github.com/reowens/grepmax",
6
6
  "bugs": {
7
7
  "url": "https://github.com/reowens/grepmax/issues"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "grepmax",
3
- "version": "0.12.13",
3
+ "version": "0.13.0",
4
4
  "description": "Semantic code search for Claude Code. Automatically indexes your project and provides intelligent search capabilities.",
5
5
  "author": {
6
6
  "name": "Robert Owens",