@askexenow/exe-os 0.8.91 → 0.8.93

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 (44) hide show
  1. package/dist/bin/backfill-conversations.js +12 -3
  2. package/dist/bin/backfill-responses.js +12 -3
  3. package/dist/bin/backfill-vectors.js +12 -3
  4. package/dist/bin/cli.js +12 -3
  5. package/dist/bin/exe-assign.js +12 -3
  6. package/dist/bin/exe-boot.js +12 -3
  7. package/dist/bin/exe-gateway.js +12 -3
  8. package/dist/bin/exe-link.js +12 -3
  9. package/dist/bin/exe-rename.js +12 -3
  10. package/dist/bin/exe-search.js +12 -3
  11. package/dist/bin/exe-session-cleanup.js +12 -3
  12. package/dist/bin/git-sweep.js +12 -3
  13. package/dist/bin/scan-tasks.js +12 -3
  14. package/dist/bin/setup.js +12 -3
  15. package/dist/gateway/index.js +12 -3
  16. package/dist/hooks/commit-complete.js +12 -3
  17. package/dist/hooks/error-recall.js +12 -3
  18. package/dist/hooks/ingest-worker.js +12 -3
  19. package/dist/hooks/instructions-loaded.js +12 -3
  20. package/dist/hooks/notification.js +12 -3
  21. package/dist/hooks/post-compact.js +12 -3
  22. package/dist/hooks/pre-compact.js +12 -3
  23. package/dist/hooks/pre-tool-use.js +12 -3
  24. package/dist/hooks/prompt-ingest-worker.js +12 -3
  25. package/dist/hooks/prompt-submit.js +12 -3
  26. package/dist/hooks/response-ingest-worker.js +12 -3
  27. package/dist/hooks/session-end.js +12 -3
  28. package/dist/hooks/session-start.js +12 -3
  29. package/dist/hooks/stop.js +12 -3
  30. package/dist/hooks/subagent-stop.js +12 -3
  31. package/dist/hooks/summary-worker.js +12 -3
  32. package/dist/index.js +12 -3
  33. package/dist/lib/cloud-sync.js +12 -3
  34. package/dist/lib/database.js +12 -3
  35. package/dist/lib/db-daemon-client.js +12 -3
  36. package/dist/lib/device-registry.js +12 -3
  37. package/dist/lib/embedder.js +12 -3
  38. package/dist/lib/exe-daemon-client.js +12 -3
  39. package/dist/lib/exe-daemon.js +12 -3
  40. package/dist/lib/hybrid-search.js +12 -3
  41. package/dist/mcp/server.js +12 -3
  42. package/dist/runtime/index.js +12 -3
  43. package/dist/tui/App.js +12 -3
  44. package/package.json +1 -1
@@ -725,9 +725,16 @@ function findPackageRoot() {
725
725
  function spawnDaemon() {
726
726
  const freeGB = os5.freemem() / (1024 * 1024 * 1024);
727
727
  const totalGB = os5.totalmem() / (1024 * 1024 * 1024);
728
- if (freeGB < 1.5 && totalGB <= 8) {
728
+ if (totalGB <= 8) {
729
729
  process.stderr.write(
730
- `[exed-client] SKIP: low memory (${freeGB.toFixed(1)}GB free / ${totalGB.toFixed(0)}GB total). Embedding daemon not started \u2014 using keyword search only. Close other apps and retry.
730
+ `[exed-client] SKIP: ${totalGB.toFixed(0)}GB system \u2014 embedding daemon disabled. Using keyword search only. Minimum 16GB recommended for vector search.
731
+ `
732
+ );
733
+ return;
734
+ }
735
+ if (totalGB <= 16 && freeGB < 4) {
736
+ process.stderr.write(
737
+ `[exed-client] SKIP: low memory (${freeGB.toFixed(1)}GB free / ${totalGB.toFixed(0)}GB total). Embedding daemon not started \u2014 using keyword search only.
731
738
  `
732
739
  );
733
740
  return;
@@ -752,7 +759,9 @@ function spawnDaemon() {
752
759
  stderrFd = openSync(logPath, "a");
753
760
  } catch {
754
761
  }
755
- const child = spawn(process.execPath, [resolvedPath], {
762
+ const heapCapMB = totalGB <= 8 ? 256 : 512;
763
+ const nodeArgs = [`--max-old-space-size=${heapCapMB}`, resolvedPath];
764
+ const child = spawn(process.execPath, nodeArgs, {
756
765
  detached: true,
757
766
  stdio: ["ignore", "ignore", stderrFd],
758
767
  env: {
@@ -764,9 +764,16 @@ function findPackageRoot() {
764
764
  function spawnDaemon() {
765
765
  const freeGB = os5.freemem() / (1024 * 1024 * 1024);
766
766
  const totalGB = os5.totalmem() / (1024 * 1024 * 1024);
767
- if (freeGB < 1.5 && totalGB <= 8) {
767
+ if (totalGB <= 8) {
768
768
  process.stderr.write(
769
- `[exed-client] SKIP: low memory (${freeGB.toFixed(1)}GB free / ${totalGB.toFixed(0)}GB total). Embedding daemon not started \u2014 using keyword search only. Close other apps and retry.
769
+ `[exed-client] SKIP: ${totalGB.toFixed(0)}GB system \u2014 embedding daemon disabled. Using keyword search only. Minimum 16GB recommended for vector search.
770
+ `
771
+ );
772
+ return;
773
+ }
774
+ if (totalGB <= 16 && freeGB < 4) {
775
+ process.stderr.write(
776
+ `[exed-client] SKIP: low memory (${freeGB.toFixed(1)}GB free / ${totalGB.toFixed(0)}GB total). Embedding daemon not started \u2014 using keyword search only.
770
777
  `
771
778
  );
772
779
  return;
@@ -791,7 +798,9 @@ function spawnDaemon() {
791
798
  stderrFd = openSync(logPath, "a");
792
799
  } catch {
793
800
  }
794
- const child = spawn(process.execPath, [resolvedPath], {
801
+ const heapCapMB = totalGB <= 8 ? 256 : 512;
802
+ const nodeArgs = [`--max-old-space-size=${heapCapMB}`, resolvedPath];
803
+ const child = spawn(process.execPath, nodeArgs, {
795
804
  detached: true,
796
805
  stdio: ["ignore", "ignore", stderrFd],
797
806
  env: {
@@ -1825,9 +1825,16 @@ function findPackageRoot() {
1825
1825
  function spawnDaemon() {
1826
1826
  const freeGB = os4.freemem() / (1024 * 1024 * 1024);
1827
1827
  const totalGB = os4.totalmem() / (1024 * 1024 * 1024);
1828
- if (freeGB < 1.5 && totalGB <= 8) {
1828
+ if (totalGB <= 8) {
1829
1829
  process.stderr.write(
1830
- `[exed-client] SKIP: low memory (${freeGB.toFixed(1)}GB free / ${totalGB.toFixed(0)}GB total). Embedding daemon not started \u2014 using keyword search only. Close other apps and retry.
1830
+ `[exed-client] SKIP: ${totalGB.toFixed(0)}GB system \u2014 embedding daemon disabled. Using keyword search only. Minimum 16GB recommended for vector search.
1831
+ `
1832
+ );
1833
+ return;
1834
+ }
1835
+ if (totalGB <= 16 && freeGB < 4) {
1836
+ process.stderr.write(
1837
+ `[exed-client] SKIP: low memory (${freeGB.toFixed(1)}GB free / ${totalGB.toFixed(0)}GB total). Embedding daemon not started \u2014 using keyword search only.
1831
1838
  `
1832
1839
  );
1833
1840
  return;
@@ -1852,7 +1859,9 @@ function spawnDaemon() {
1852
1859
  stderrFd = openSync(logPath, "a");
1853
1860
  } catch {
1854
1861
  }
1855
- const child = spawn(process.execPath, [resolvedPath], {
1862
+ const heapCapMB = totalGB <= 8 ? 256 : 512;
1863
+ const nodeArgs = [`--max-old-space-size=${heapCapMB}`, resolvedPath];
1864
+ const child = spawn(process.execPath, nodeArgs, {
1856
1865
  detached: true,
1857
1866
  stdio: ["ignore", "ignore", stderrFd],
1858
1867
  env: {
@@ -2764,9 +2764,16 @@ function findPackageRoot() {
2764
2764
  function spawnDaemon() {
2765
2765
  const freeGB = os4.freemem() / (1024 * 1024 * 1024);
2766
2766
  const totalGB = os4.totalmem() / (1024 * 1024 * 1024);
2767
- if (freeGB < 1.5 && totalGB <= 8) {
2767
+ if (totalGB <= 8) {
2768
2768
  process.stderr.write(
2769
- `[exed-client] SKIP: low memory (${freeGB.toFixed(1)}GB free / ${totalGB.toFixed(0)}GB total). Embedding daemon not started \u2014 using keyword search only. Close other apps and retry.
2769
+ `[exed-client] SKIP: ${totalGB.toFixed(0)}GB system \u2014 embedding daemon disabled. Using keyword search only. Minimum 16GB recommended for vector search.
2770
+ `
2771
+ );
2772
+ return;
2773
+ }
2774
+ if (totalGB <= 16 && freeGB < 4) {
2775
+ process.stderr.write(
2776
+ `[exed-client] SKIP: low memory (${freeGB.toFixed(1)}GB free / ${totalGB.toFixed(0)}GB total). Embedding daemon not started \u2014 using keyword search only.
2770
2777
  `
2771
2778
  );
2772
2779
  return;
@@ -2791,7 +2798,9 @@ function spawnDaemon() {
2791
2798
  stderrFd = openSync(logPath, "a");
2792
2799
  } catch {
2793
2800
  }
2794
- const child = spawn(process.execPath, [resolvedPath], {
2801
+ const heapCapMB = totalGB <= 8 ? 256 : 512;
2802
+ const nodeArgs = [`--max-old-space-size=${heapCapMB}`, resolvedPath];
2803
+ const child = spawn(process.execPath, nodeArgs, {
2795
2804
  detached: true,
2796
2805
  stdio: ["ignore", "ignore", stderrFd],
2797
2806
  env: {
@@ -1836,9 +1836,16 @@ function findPackageRoot() {
1836
1836
  function spawnDaemon() {
1837
1837
  const freeGB = os4.freemem() / (1024 * 1024 * 1024);
1838
1838
  const totalGB = os4.totalmem() / (1024 * 1024 * 1024);
1839
- if (freeGB < 1.5 && totalGB <= 8) {
1839
+ if (totalGB <= 8) {
1840
1840
  process.stderr.write(
1841
- `[exed-client] SKIP: low memory (${freeGB.toFixed(1)}GB free / ${totalGB.toFixed(0)}GB total). Embedding daemon not started \u2014 using keyword search only. Close other apps and retry.
1841
+ `[exed-client] SKIP: ${totalGB.toFixed(0)}GB system \u2014 embedding daemon disabled. Using keyword search only. Minimum 16GB recommended for vector search.
1842
+ `
1843
+ );
1844
+ return;
1845
+ }
1846
+ if (totalGB <= 16 && freeGB < 4) {
1847
+ process.stderr.write(
1848
+ `[exed-client] SKIP: low memory (${freeGB.toFixed(1)}GB free / ${totalGB.toFixed(0)}GB total). Embedding daemon not started \u2014 using keyword search only.
1842
1849
  `
1843
1850
  );
1844
1851
  return;
@@ -1863,7 +1870,9 @@ function spawnDaemon() {
1863
1870
  stderrFd = openSync(logPath, "a");
1864
1871
  } catch {
1865
1872
  }
1866
- const child = spawn(process.execPath, [resolvedPath], {
1873
+ const heapCapMB = totalGB <= 8 ? 256 : 512;
1874
+ const nodeArgs = [`--max-old-space-size=${heapCapMB}`, resolvedPath];
1875
+ const child = spawn(process.execPath, nodeArgs, {
1867
1876
  detached: true,
1868
1877
  stdio: ["ignore", "ignore", stderrFd],
1869
1878
  env: {
@@ -728,9 +728,16 @@ function findPackageRoot() {
728
728
  function spawnDaemon() {
729
729
  const freeGB = os5.freemem() / (1024 * 1024 * 1024);
730
730
  const totalGB = os5.totalmem() / (1024 * 1024 * 1024);
731
- if (freeGB < 1.5 && totalGB <= 8) {
731
+ if (totalGB <= 8) {
732
732
  process.stderr.write(
733
- `[exed-client] SKIP: low memory (${freeGB.toFixed(1)}GB free / ${totalGB.toFixed(0)}GB total). Embedding daemon not started \u2014 using keyword search only. Close other apps and retry.
733
+ `[exed-client] SKIP: ${totalGB.toFixed(0)}GB system \u2014 embedding daemon disabled. Using keyword search only. Minimum 16GB recommended for vector search.
734
+ `
735
+ );
736
+ return;
737
+ }
738
+ if (totalGB <= 16 && freeGB < 4) {
739
+ process.stderr.write(
740
+ `[exed-client] SKIP: low memory (${freeGB.toFixed(1)}GB free / ${totalGB.toFixed(0)}GB total). Embedding daemon not started \u2014 using keyword search only.
734
741
  `
735
742
  );
736
743
  return;
@@ -755,7 +762,9 @@ function spawnDaemon() {
755
762
  stderrFd = openSync(logPath, "a");
756
763
  } catch {
757
764
  }
758
- const child = spawn(process.execPath, [resolvedPath], {
765
+ const heapCapMB = totalGB <= 8 ? 256 : 512;
766
+ const nodeArgs = [`--max-old-space-size=${heapCapMB}`, resolvedPath];
767
+ const child = spawn(process.execPath, nodeArgs, {
759
768
  detached: true,
760
769
  stdio: ["ignore", "ignore", stderrFd],
761
770
  env: {
@@ -2747,9 +2747,16 @@ function findPackageRoot() {
2747
2747
  function spawnDaemon() {
2748
2748
  const freeGB = os4.freemem() / (1024 * 1024 * 1024);
2749
2749
  const totalGB = os4.totalmem() / (1024 * 1024 * 1024);
2750
- if (freeGB < 1.5 && totalGB <= 8) {
2750
+ if (totalGB <= 8) {
2751
2751
  process.stderr.write(
2752
- `[exed-client] SKIP: low memory (${freeGB.toFixed(1)}GB free / ${totalGB.toFixed(0)}GB total). Embedding daemon not started \u2014 using keyword search only. Close other apps and retry.
2752
+ `[exed-client] SKIP: ${totalGB.toFixed(0)}GB system \u2014 embedding daemon disabled. Using keyword search only. Minimum 16GB recommended for vector search.
2753
+ `
2754
+ );
2755
+ return;
2756
+ }
2757
+ if (totalGB <= 16 && freeGB < 4) {
2758
+ process.stderr.write(
2759
+ `[exed-client] SKIP: low memory (${freeGB.toFixed(1)}GB free / ${totalGB.toFixed(0)}GB total). Embedding daemon not started \u2014 using keyword search only.
2753
2760
  `
2754
2761
  );
2755
2762
  return;
@@ -2774,7 +2781,9 @@ function spawnDaemon() {
2774
2781
  stderrFd = openSync(logPath, "a");
2775
2782
  } catch {
2776
2783
  }
2777
- const child = spawn(process.execPath, [resolvedPath], {
2784
+ const heapCapMB = totalGB <= 8 ? 256 : 512;
2785
+ const nodeArgs = [`--max-old-space-size=${heapCapMB}`, resolvedPath];
2786
+ const child = spawn(process.execPath, nodeArgs, {
2778
2787
  detached: true,
2779
2788
  stdio: ["ignore", "ignore", stderrFd],
2780
2789
  env: {
@@ -623,9 +623,16 @@ function findPackageRoot() {
623
623
  function spawnDaemon() {
624
624
  const freeGB = os5.freemem() / (1024 * 1024 * 1024);
625
625
  const totalGB = os5.totalmem() / (1024 * 1024 * 1024);
626
- if (freeGB < 1.5 && totalGB <= 8) {
626
+ if (totalGB <= 8) {
627
627
  process.stderr.write(
628
- `[exed-client] SKIP: low memory (${freeGB.toFixed(1)}GB free / ${totalGB.toFixed(0)}GB total). Embedding daemon not started \u2014 using keyword search only. Close other apps and retry.
628
+ `[exed-client] SKIP: ${totalGB.toFixed(0)}GB system \u2014 embedding daemon disabled. Using keyword search only. Minimum 16GB recommended for vector search.
629
+ `
630
+ );
631
+ return;
632
+ }
633
+ if (totalGB <= 16 && freeGB < 4) {
634
+ process.stderr.write(
635
+ `[exed-client] SKIP: low memory (${freeGB.toFixed(1)}GB free / ${totalGB.toFixed(0)}GB total). Embedding daemon not started \u2014 using keyword search only.
629
636
  `
630
637
  );
631
638
  return;
@@ -650,7 +657,9 @@ function spawnDaemon() {
650
657
  stderrFd = openSync(logPath, "a");
651
658
  } catch {
652
659
  }
653
- const child = spawn(process.execPath, [resolvedPath], {
660
+ const heapCapMB = totalGB <= 8 ? 256 : 512;
661
+ const nodeArgs = [`--max-old-space-size=${heapCapMB}`, resolvedPath];
662
+ const child = spawn(process.execPath, nodeArgs, {
654
663
  detached: true,
655
664
  stdio: ["ignore", "ignore", stderrFd],
656
665
  env: {
@@ -604,9 +604,16 @@ function findPackageRoot() {
604
604
  function spawnDaemon() {
605
605
  const freeGB = os5.freemem() / (1024 * 1024 * 1024);
606
606
  const totalGB = os5.totalmem() / (1024 * 1024 * 1024);
607
- if (freeGB < 1.5 && totalGB <= 8) {
607
+ if (totalGB <= 8) {
608
608
  process.stderr.write(
609
- `[exed-client] SKIP: low memory (${freeGB.toFixed(1)}GB free / ${totalGB.toFixed(0)}GB total). Embedding daemon not started \u2014 using keyword search only. Close other apps and retry.
609
+ `[exed-client] SKIP: ${totalGB.toFixed(0)}GB system \u2014 embedding daemon disabled. Using keyword search only. Minimum 16GB recommended for vector search.
610
+ `
611
+ );
612
+ return;
613
+ }
614
+ if (totalGB <= 16 && freeGB < 4) {
615
+ process.stderr.write(
616
+ `[exed-client] SKIP: low memory (${freeGB.toFixed(1)}GB free / ${totalGB.toFixed(0)}GB total). Embedding daemon not started \u2014 using keyword search only.
610
617
  `
611
618
  );
612
619
  return;
@@ -631,7 +638,9 @@ function spawnDaemon() {
631
638
  stderrFd = openSync(logPath, "a");
632
639
  } catch {
633
640
  }
634
- const child = spawn(process.execPath, [resolvedPath], {
641
+ const heapCapMB = totalGB <= 8 ? 256 : 512;
642
+ const nodeArgs = [`--max-old-space-size=${heapCapMB}`, resolvedPath];
643
+ const child = spawn(process.execPath, nodeArgs, {
635
644
  detached: true,
636
645
  stdio: ["ignore", "ignore", stderrFd],
637
646
  env: {
@@ -496,9 +496,16 @@ function findPackageRoot() {
496
496
  function spawnDaemon() {
497
497
  const freeGB = os3.freemem() / (1024 * 1024 * 1024);
498
498
  const totalGB = os3.totalmem() / (1024 * 1024 * 1024);
499
- if (freeGB < 1.5 && totalGB <= 8) {
499
+ if (totalGB <= 8) {
500
500
  process.stderr.write(
501
- `[exed-client] SKIP: low memory (${freeGB.toFixed(1)}GB free / ${totalGB.toFixed(0)}GB total). Embedding daemon not started \u2014 using keyword search only. Close other apps and retry.
501
+ `[exed-client] SKIP: ${totalGB.toFixed(0)}GB system \u2014 embedding daemon disabled. Using keyword search only. Minimum 16GB recommended for vector search.
502
+ `
503
+ );
504
+ return;
505
+ }
506
+ if (totalGB <= 16 && freeGB < 4) {
507
+ process.stderr.write(
508
+ `[exed-client] SKIP: low memory (${freeGB.toFixed(1)}GB free / ${totalGB.toFixed(0)}GB total). Embedding daemon not started \u2014 using keyword search only.
502
509
  `
503
510
  );
504
511
  return;
@@ -523,7 +530,9 @@ function spawnDaemon() {
523
530
  stderrFd = openSync(logPath, "a");
524
531
  } catch {
525
532
  }
526
- const child = spawn(process.execPath, [resolvedPath], {
533
+ const heapCapMB = totalGB <= 8 ? 256 : 512;
534
+ const nodeArgs = [`--max-old-space-size=${heapCapMB}`, resolvedPath];
535
+ const child = spawn(process.execPath, nodeArgs, {
527
536
  detached: true,
528
537
  stdio: ["ignore", "ignore", stderrFd],
529
538
  env: {
package/dist/index.js CHANGED
@@ -980,9 +980,16 @@ function findPackageRoot() {
980
980
  function spawnDaemon() {
981
981
  const freeGB = os6.freemem() / (1024 * 1024 * 1024);
982
982
  const totalGB = os6.totalmem() / (1024 * 1024 * 1024);
983
- if (freeGB < 1.5 && totalGB <= 8) {
983
+ if (totalGB <= 8) {
984
984
  process.stderr.write(
985
- `[exed-client] SKIP: low memory (${freeGB.toFixed(1)}GB free / ${totalGB.toFixed(0)}GB total). Embedding daemon not started \u2014 using keyword search only. Close other apps and retry.
985
+ `[exed-client] SKIP: ${totalGB.toFixed(0)}GB system \u2014 embedding daemon disabled. Using keyword search only. Minimum 16GB recommended for vector search.
986
+ `
987
+ );
988
+ return;
989
+ }
990
+ if (totalGB <= 16 && freeGB < 4) {
991
+ process.stderr.write(
992
+ `[exed-client] SKIP: low memory (${freeGB.toFixed(1)}GB free / ${totalGB.toFixed(0)}GB total). Embedding daemon not started \u2014 using keyword search only.
986
993
  `
987
994
  );
988
995
  return;
@@ -1007,7 +1014,9 @@ function spawnDaemon() {
1007
1014
  stderrFd = openSync(logPath, "a");
1008
1015
  } catch {
1009
1016
  }
1010
- const child = spawn(process.execPath, [resolvedPath], {
1017
+ const heapCapMB = totalGB <= 8 ? 256 : 512;
1018
+ const nodeArgs = [`--max-old-space-size=${heapCapMB}`, resolvedPath];
1019
+ const child = spawn(process.execPath, nodeArgs, {
1011
1020
  detached: true,
1012
1021
  stdio: ["ignore", "ignore", stderrFd],
1013
1022
  env: {
@@ -314,9 +314,16 @@ function findPackageRoot() {
314
314
  function spawnDaemon() {
315
315
  const freeGB = os3.freemem() / (1024 * 1024 * 1024);
316
316
  const totalGB = os3.totalmem() / (1024 * 1024 * 1024);
317
- if (freeGB < 1.5 && totalGB <= 8) {
317
+ if (totalGB <= 8) {
318
318
  process.stderr.write(
319
- `[exed-client] SKIP: low memory (${freeGB.toFixed(1)}GB free / ${totalGB.toFixed(0)}GB total). Embedding daemon not started \u2014 using keyword search only. Close other apps and retry.
319
+ `[exed-client] SKIP: ${totalGB.toFixed(0)}GB system \u2014 embedding daemon disabled. Using keyword search only. Minimum 16GB recommended for vector search.
320
+ `
321
+ );
322
+ return;
323
+ }
324
+ if (totalGB <= 16 && freeGB < 4) {
325
+ process.stderr.write(
326
+ `[exed-client] SKIP: low memory (${freeGB.toFixed(1)}GB free / ${totalGB.toFixed(0)}GB total). Embedding daemon not started \u2014 using keyword search only.
320
327
  `
321
328
  );
322
329
  return;
@@ -341,7 +348,9 @@ function spawnDaemon() {
341
348
  stderrFd = openSync(logPath, "a");
342
349
  } catch {
343
350
  }
344
- const child = spawn(process.execPath, [resolvedPath], {
351
+ const heapCapMB = totalGB <= 8 ? 256 : 512;
352
+ const nodeArgs = [`--max-old-space-size=${heapCapMB}`, resolvedPath];
353
+ const child = spawn(process.execPath, nodeArgs, {
345
354
  detached: true,
346
355
  stdio: ["ignore", "ignore", stderrFd],
347
356
  env: {
@@ -167,9 +167,16 @@ function findPackageRoot() {
167
167
  function spawnDaemon() {
168
168
  const freeGB = os3.freemem() / (1024 * 1024 * 1024);
169
169
  const totalGB = os3.totalmem() / (1024 * 1024 * 1024);
170
- if (freeGB < 1.5 && totalGB <= 8) {
170
+ if (totalGB <= 8) {
171
171
  process.stderr.write(
172
- `[exed-client] SKIP: low memory (${freeGB.toFixed(1)}GB free / ${totalGB.toFixed(0)}GB total). Embedding daemon not started \u2014 using keyword search only. Close other apps and retry.
172
+ `[exed-client] SKIP: ${totalGB.toFixed(0)}GB system \u2014 embedding daemon disabled. Using keyword search only. Minimum 16GB recommended for vector search.
173
+ `
174
+ );
175
+ return;
176
+ }
177
+ if (totalGB <= 16 && freeGB < 4) {
178
+ process.stderr.write(
179
+ `[exed-client] SKIP: low memory (${freeGB.toFixed(1)}GB free / ${totalGB.toFixed(0)}GB total). Embedding daemon not started \u2014 using keyword search only.
173
180
  `
174
181
  );
175
182
  return;
@@ -194,7 +201,9 @@ function spawnDaemon() {
194
201
  stderrFd = openSync(logPath, "a");
195
202
  } catch {
196
203
  }
197
- const child = spawn(process.execPath, [resolvedPath], {
204
+ const heapCapMB = totalGB <= 8 ? 256 : 512;
205
+ const nodeArgs = [`--max-old-space-size=${heapCapMB}`, resolvedPath];
206
+ const child = spawn(process.execPath, nodeArgs, {
198
207
  detached: true,
199
208
  stdio: ["ignore", "ignore", stderrFd],
200
209
  env: {
@@ -164,9 +164,16 @@ function findPackageRoot() {
164
164
  function spawnDaemon() {
165
165
  const freeGB = os2.freemem() / (1024 * 1024 * 1024);
166
166
  const totalGB = os2.totalmem() / (1024 * 1024 * 1024);
167
- if (freeGB < 1.5 && totalGB <= 8) {
167
+ if (totalGB <= 8) {
168
168
  process.stderr.write(
169
- `[exed-client] SKIP: low memory (${freeGB.toFixed(1)}GB free / ${totalGB.toFixed(0)}GB total). Embedding daemon not started \u2014 using keyword search only. Close other apps and retry.
169
+ `[exed-client] SKIP: ${totalGB.toFixed(0)}GB system \u2014 embedding daemon disabled. Using keyword search only. Minimum 16GB recommended for vector search.
170
+ `
171
+ );
172
+ return;
173
+ }
174
+ if (totalGB <= 16 && freeGB < 4) {
175
+ process.stderr.write(
176
+ `[exed-client] SKIP: low memory (${freeGB.toFixed(1)}GB free / ${totalGB.toFixed(0)}GB total). Embedding daemon not started \u2014 using keyword search only.
170
177
  `
171
178
  );
172
179
  return;
@@ -191,7 +198,9 @@ function spawnDaemon() {
191
198
  stderrFd = openSync(logPath, "a");
192
199
  } catch {
193
200
  }
194
- const child = spawn(process.execPath, [resolvedPath], {
201
+ const heapCapMB = totalGB <= 8 ? 256 : 512;
202
+ const nodeArgs = [`--max-old-space-size=${heapCapMB}`, resolvedPath];
203
+ const child = spawn(process.execPath, nodeArgs, {
195
204
  detached: true,
196
205
  stdio: ["ignore", "ignore", stderrFd],
197
206
  env: {
@@ -259,9 +259,16 @@ function findPackageRoot() {
259
259
  function spawnDaemon() {
260
260
  const freeGB = os3.freemem() / (1024 * 1024 * 1024);
261
261
  const totalGB = os3.totalmem() / (1024 * 1024 * 1024);
262
- if (freeGB < 1.5 && totalGB <= 8) {
262
+ if (totalGB <= 8) {
263
263
  process.stderr.write(
264
- `[exed-client] SKIP: low memory (${freeGB.toFixed(1)}GB free / ${totalGB.toFixed(0)}GB total). Embedding daemon not started \u2014 using keyword search only. Close other apps and retry.
264
+ `[exed-client] SKIP: ${totalGB.toFixed(0)}GB system \u2014 embedding daemon disabled. Using keyword search only. Minimum 16GB recommended for vector search.
265
+ `
266
+ );
267
+ return;
268
+ }
269
+ if (totalGB <= 16 && freeGB < 4) {
270
+ process.stderr.write(
271
+ `[exed-client] SKIP: low memory (${freeGB.toFixed(1)}GB free / ${totalGB.toFixed(0)}GB total). Embedding daemon not started \u2014 using keyword search only.
265
272
  `
266
273
  );
267
274
  return;
@@ -286,7 +293,9 @@ function spawnDaemon() {
286
293
  stderrFd = openSync(logPath, "a");
287
294
  } catch {
288
295
  }
289
- const child = spawn(process.execPath, [resolvedPath], {
296
+ const heapCapMB = totalGB <= 8 ? 256 : 512;
297
+ const nodeArgs = [`--max-old-space-size=${heapCapMB}`, resolvedPath];
298
+ const child = spawn(process.execPath, nodeArgs, {
290
299
  detached: true,
291
300
  stdio: ["ignore", "ignore", stderrFd],
292
301
  env: {
@@ -333,9 +333,16 @@ function findPackageRoot() {
333
333
  function spawnDaemon() {
334
334
  const freeGB = os2.freemem() / (1024 * 1024 * 1024);
335
335
  const totalGB = os2.totalmem() / (1024 * 1024 * 1024);
336
- if (freeGB < 1.5 && totalGB <= 8) {
336
+ if (totalGB <= 8) {
337
337
  process.stderr.write(
338
- `[exed-client] SKIP: low memory (${freeGB.toFixed(1)}GB free / ${totalGB.toFixed(0)}GB total). Embedding daemon not started \u2014 using keyword search only. Close other apps and retry.
338
+ `[exed-client] SKIP: ${totalGB.toFixed(0)}GB system \u2014 embedding daemon disabled. Using keyword search only. Minimum 16GB recommended for vector search.
339
+ `
340
+ );
341
+ return;
342
+ }
343
+ if (totalGB <= 16 && freeGB < 4) {
344
+ process.stderr.write(
345
+ `[exed-client] SKIP: low memory (${freeGB.toFixed(1)}GB free / ${totalGB.toFixed(0)}GB total). Embedding daemon not started \u2014 using keyword search only.
339
346
  `
340
347
  );
341
348
  return;
@@ -360,7 +367,9 @@ function spawnDaemon() {
360
367
  stderrFd = openSync(logPath, "a");
361
368
  } catch {
362
369
  }
363
- const child = spawn(process.execPath, [resolvedPath], {
370
+ const heapCapMB = totalGB <= 8 ? 256 : 512;
371
+ const nodeArgs = [`--max-old-space-size=${heapCapMB}`, resolvedPath];
372
+ const child = spawn(process.execPath, nodeArgs, {
364
373
  detached: true,
365
374
  stdio: ["ignore", "ignore", stderrFd],
366
375
  env: {
@@ -166,9 +166,16 @@ function findPackageRoot() {
166
166
  function spawnDaemon() {
167
167
  const freeGB = os2.freemem() / (1024 * 1024 * 1024);
168
168
  const totalGB = os2.totalmem() / (1024 * 1024 * 1024);
169
- if (freeGB < 1.5 && totalGB <= 8) {
169
+ if (totalGB <= 8) {
170
170
  process.stderr.write(
171
- `[exed-client] SKIP: low memory (${freeGB.toFixed(1)}GB free / ${totalGB.toFixed(0)}GB total). Embedding daemon not started \u2014 using keyword search only. Close other apps and retry.
171
+ `[exed-client] SKIP: ${totalGB.toFixed(0)}GB system \u2014 embedding daemon disabled. Using keyword search only. Minimum 16GB recommended for vector search.
172
+ `
173
+ );
174
+ return;
175
+ }
176
+ if (totalGB <= 16 && freeGB < 4) {
177
+ process.stderr.write(
178
+ `[exed-client] SKIP: low memory (${freeGB.toFixed(1)}GB free / ${totalGB.toFixed(0)}GB total). Embedding daemon not started \u2014 using keyword search only.
172
179
  `
173
180
  );
174
181
  return;
@@ -193,7 +200,9 @@ function spawnDaemon() {
193
200
  stderrFd = openSync(logPath, "a");
194
201
  } catch {
195
202
  }
196
- const child = spawn(process.execPath, [resolvedPath], {
203
+ const heapCapMB = totalGB <= 8 ? 256 : 512;
204
+ const nodeArgs = [`--max-old-space-size=${heapCapMB}`, resolvedPath];
205
+ const child = spawn(process.execPath, nodeArgs, {
197
206
  detached: true,
198
207
  stdio: ["ignore", "ignore", stderrFd],
199
208
  env: {
@@ -1141,9 +1141,16 @@ function findPackageRoot() {
1141
1141
  function spawnDaemon() {
1142
1142
  const freeGB = os5.freemem() / (1024 * 1024 * 1024);
1143
1143
  const totalGB = os5.totalmem() / (1024 * 1024 * 1024);
1144
- if (freeGB < 1.5 && totalGB <= 8) {
1144
+ if (totalGB <= 8) {
1145
1145
  process.stderr.write(
1146
- `[exed-client] SKIP: low memory (${freeGB.toFixed(1)}GB free / ${totalGB.toFixed(0)}GB total). Embedding daemon not started \u2014 using keyword search only. Close other apps and retry.
1146
+ `[exed-client] SKIP: ${totalGB.toFixed(0)}GB system \u2014 embedding daemon disabled. Using keyword search only. Minimum 16GB recommended for vector search.
1147
+ `
1148
+ );
1149
+ return;
1150
+ }
1151
+ if (totalGB <= 16 && freeGB < 4) {
1152
+ process.stderr.write(
1153
+ `[exed-client] SKIP: low memory (${freeGB.toFixed(1)}GB free / ${totalGB.toFixed(0)}GB total). Embedding daemon not started \u2014 using keyword search only.
1147
1154
  `
1148
1155
  );
1149
1156
  return;
@@ -1168,7 +1175,9 @@ function spawnDaemon() {
1168
1175
  stderrFd = openSync(logPath, "a");
1169
1176
  } catch {
1170
1177
  }
1171
- const child = spawn(process.execPath, [resolvedPath], {
1178
+ const heapCapMB = totalGB <= 8 ? 256 : 512;
1179
+ const nodeArgs = [`--max-old-space-size=${heapCapMB}`, resolvedPath];
1180
+ const child = spawn(process.execPath, nodeArgs, {
1172
1181
  detached: true,
1173
1182
  stdio: ["ignore", "ignore", stderrFd],
1174
1183
  env: {
@@ -2726,9 +2726,16 @@ function findPackageRoot() {
2726
2726
  function spawnDaemon() {
2727
2727
  const freeGB = os4.freemem() / (1024 * 1024 * 1024);
2728
2728
  const totalGB = os4.totalmem() / (1024 * 1024 * 1024);
2729
- if (freeGB < 1.5 && totalGB <= 8) {
2729
+ if (totalGB <= 8) {
2730
2730
  process.stderr.write(
2731
- `[exed-client] SKIP: low memory (${freeGB.toFixed(1)}GB free / ${totalGB.toFixed(0)}GB total). Embedding daemon not started \u2014 using keyword search only. Close other apps and retry.
2731
+ `[exed-client] SKIP: ${totalGB.toFixed(0)}GB system \u2014 embedding daemon disabled. Using keyword search only. Minimum 16GB recommended for vector search.
2732
+ `
2733
+ );
2734
+ return;
2735
+ }
2736
+ if (totalGB <= 16 && freeGB < 4) {
2737
+ process.stderr.write(
2738
+ `[exed-client] SKIP: low memory (${freeGB.toFixed(1)}GB free / ${totalGB.toFixed(0)}GB total). Embedding daemon not started \u2014 using keyword search only.
2732
2739
  `
2733
2740
  );
2734
2741
  return;
@@ -2753,7 +2760,9 @@ function spawnDaemon() {
2753
2760
  stderrFd = openSync(logPath, "a");
2754
2761
  } catch {
2755
2762
  }
2756
- const child = spawn(process.execPath, [resolvedPath], {
2763
+ const heapCapMB = totalGB <= 8 ? 256 : 512;
2764
+ const nodeArgs = [`--max-old-space-size=${heapCapMB}`, resolvedPath];
2765
+ const child = spawn(process.execPath, nodeArgs, {
2757
2766
  detached: true,
2758
2767
  stdio: ["ignore", "ignore", stderrFd],
2759
2768
  env: {
@@ -352,9 +352,16 @@ function findPackageRoot() {
352
352
  function spawnDaemon() {
353
353
  const freeGB = os2.freemem() / (1024 * 1024 * 1024);
354
354
  const totalGB = os2.totalmem() / (1024 * 1024 * 1024);
355
- if (freeGB < 1.5 && totalGB <= 8) {
355
+ if (totalGB <= 8) {
356
356
  process.stderr.write(
357
- `[exed-client] SKIP: low memory (${freeGB.toFixed(1)}GB free / ${totalGB.toFixed(0)}GB total). Embedding daemon not started \u2014 using keyword search only. Close other apps and retry.
357
+ `[exed-client] SKIP: ${totalGB.toFixed(0)}GB system \u2014 embedding daemon disabled. Using keyword search only. Minimum 16GB recommended for vector search.
358
+ `
359
+ );
360
+ return;
361
+ }
362
+ if (totalGB <= 16 && freeGB < 4) {
363
+ process.stderr.write(
364
+ `[exed-client] SKIP: low memory (${freeGB.toFixed(1)}GB free / ${totalGB.toFixed(0)}GB total). Embedding daemon not started \u2014 using keyword search only.
358
365
  `
359
366
  );
360
367
  return;
@@ -379,7 +386,9 @@ function spawnDaemon() {
379
386
  stderrFd = openSync(logPath, "a");
380
387
  } catch {
381
388
  }
382
- const child = spawn(process.execPath, [resolvedPath], {
389
+ const heapCapMB = totalGB <= 8 ? 256 : 512;
390
+ const nodeArgs = [`--max-old-space-size=${heapCapMB}`, resolvedPath];
391
+ const child = spawn(process.execPath, nodeArgs, {
383
392
  detached: true,
384
393
  stdio: ["ignore", "ignore", stderrFd],
385
394
  env: {
@@ -767,9 +767,16 @@ function findPackageRoot() {
767
767
  function spawnDaemon() {
768
768
  const freeGB = os6.freemem() / (1024 * 1024 * 1024);
769
769
  const totalGB = os6.totalmem() / (1024 * 1024 * 1024);
770
- if (freeGB < 1.5 && totalGB <= 8) {
770
+ if (totalGB <= 8) {
771
771
  process.stderr.write(
772
- `[exed-client] SKIP: low memory (${freeGB.toFixed(1)}GB free / ${totalGB.toFixed(0)}GB total). Embedding daemon not started \u2014 using keyword search only. Close other apps and retry.
772
+ `[exed-client] SKIP: ${totalGB.toFixed(0)}GB system \u2014 embedding daemon disabled. Using keyword search only. Minimum 16GB recommended for vector search.
773
+ `
774
+ );
775
+ return;
776
+ }
777
+ if (totalGB <= 16 && freeGB < 4) {
778
+ process.stderr.write(
779
+ `[exed-client] SKIP: low memory (${freeGB.toFixed(1)}GB free / ${totalGB.toFixed(0)}GB total). Embedding daemon not started \u2014 using keyword search only.
773
780
  `
774
781
  );
775
782
  return;
@@ -794,7 +801,9 @@ function spawnDaemon() {
794
801
  stderrFd = openSync(logPath, "a");
795
802
  } catch {
796
803
  }
797
- const child = spawn(process.execPath, [resolvedPath], {
804
+ const heapCapMB = totalGB <= 8 ? 256 : 512;
805
+ const nodeArgs = [`--max-old-space-size=${heapCapMB}`, resolvedPath];
806
+ const child = spawn(process.execPath, nodeArgs, {
798
807
  detached: true,
799
808
  stdio: ["ignore", "ignore", stderrFd],
800
809
  env: {