@askexenow/exe-os 0.8.95 → 0.8.97

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.
package/dist/bin/cli.js CHANGED
@@ -12769,8 +12769,9 @@ async function runSetupWizard(opts = {}) {
12769
12769
  } else if (!state.completedSteps.includes(6)) {
12770
12770
  log("=== Your First Hire ===");
12771
12771
  log("");
12772
- log("Until now, you talked to one agent at a time.");
12773
- log("Your COO changes that. You talk to them \u2014 they coordinate");
12772
+ log("Your new COO will hold all your vision, your roadmap, all your");
12773
+ log("projects and everything you think about in business, life and beyond.");
12774
+ log("They can call and hire new employees, executives, and coordinate");
12774
12775
  log("your entire team. Engineers, marketers, specialists, all working");
12775
12776
  log("in parallel while you focus on what matters.");
12776
12777
  log("");
@@ -1799,6 +1799,9 @@ var init_worker_gate = __esm({
1799
1799
  }
1800
1800
  });
1801
1801
 
1802
+ // src/bin/exe-doctor.ts
1803
+ import os4 from "os";
1804
+
1802
1805
  // src/lib/store.ts
1803
1806
  import { createHash } from "crypto";
1804
1807
  init_database();
@@ -2461,7 +2464,13 @@ function formatReport(report, flags) {
2461
2464
  }
2462
2465
  lines.push("");
2463
2466
  }
2464
- lines.push(`${indicator(report.nullVectors, 50)} Null vectors: ${fmtNum(report.nullVectors)} / ${fmtNum(s.total)} (${pct(report.nullVectors, s.total)})`);
2467
+ const totalMemGB = os4.totalmem() / (1024 * 1024 * 1024);
2468
+ const isLowMemSystem = totalMemGB <= 8;
2469
+ if (isLowMemSystem && report.nullVectors > 0) {
2470
+ lines.push(`\u{1F7E2} Null vectors: ${fmtNum(report.nullVectors)} / ${fmtNum(s.total)} (expected \u2014 8GB system, keyword search mode)`);
2471
+ } else {
2472
+ lines.push(`${indicator(report.nullVectors, 50)} Null vectors: ${fmtNum(report.nullVectors)} / ${fmtNum(s.total)} (${pct(report.nullVectors, s.total)})`);
2473
+ }
2465
2474
  const dupPct = s.total > 0 ? report.duplicateCount / s.total * 100 : 0;
2466
2475
  const dupIndicator = dupPct === 0 ? "\u{1F7E2}" : dupPct <= 5 ? "\u{1F7E0}" : "\u{1F534}";
2467
2476
  lines.push(`${dupIndicator} Duplicates: ${fmtNum(report.duplicateCount)} / ${fmtNum(s.total)} (${pct(report.duplicateCount, s.total)})`);
@@ -2523,7 +2532,7 @@ function formatReport(report, flags) {
2523
2532
  }
2524
2533
  }
2525
2534
  const recs = [];
2526
- if (report.nullVectors > 0) {
2535
+ if (report.nullVectors > 0 && !isLowMemSystem) {
2527
2536
  recs.push(`Run --fix to backfill ${fmtNum(report.nullVectors)} null vectors`);
2528
2537
  }
2529
2538
  if (report.duplicateCount > 0) {
@@ -973,7 +973,7 @@ function summarizeSymlinkResults(results) {
973
973
  import { existsSync as existsSync6, readFileSync as readFileSync5, unlinkSync as unlinkSync3, readdirSync as readdirSync2, openSync, closeSync } from "fs";
974
974
  import { spawn, execSync as execSync3 } from "child_process";
975
975
  import path6 from "path";
976
- import { homedir as homedir2 } from "os";
976
+ import os5 from "os";
977
977
 
978
978
  // src/lib/session-wrappers.ts
979
979
  import {
@@ -1103,6 +1103,7 @@ export PATH="${binDir}:$PATH"
1103
1103
  }
1104
1104
 
1105
1105
  // src/bin/install.ts
1106
+ var homedir2 = os5.homedir;
1106
1107
  var EXE_DIR = path6.join(homedir2(), ".exe-os");
1107
1108
  function restartDaemon() {
1108
1109
  const pidPath = path6.join(EXE_DIR, "exed.pid");
@@ -1171,6 +1172,14 @@ function restartDaemon() {
1171
1172
  }
1172
1173
  } catch {
1173
1174
  }
1175
+ const totalGB = os5.totalmem() / (1024 * 1024 * 1024);
1176
+ if (totalGB <= 8) {
1177
+ process.stderr.write(
1178
+ `exe-os: ${totalGB.toFixed(0)}GB system \u2014 skipping daemon spawn (keyword search mode)
1179
+ `
1180
+ );
1181
+ return;
1182
+ }
1174
1183
  try {
1175
1184
  const pkgRoot = resolvePackageRoot();
1176
1185
  const daemonPath = path6.join(pkgRoot, "dist", "lib", "exe-daemon.js");
@@ -1185,7 +1194,8 @@ function restartDaemon() {
1185
1194
  stderrFd = openSync(logPath, "a");
1186
1195
  } catch {
1187
1196
  }
1188
- const child = spawn(process.execPath, [daemonPath], {
1197
+ const heapCapMB = totalGB <= 16 ? 256 : 512;
1198
+ const child = spawn(process.execPath, [`--max-old-space-size=${heapCapMB}`, daemonPath], {
1189
1199
  detached: true,
1190
1200
  stdio: ["ignore", "ignore", stderrFd],
1191
1201
  env: {
package/dist/bin/setup.js CHANGED
@@ -6159,8 +6159,9 @@ async function runSetupWizard(opts = {}) {
6159
6159
  } else if (!state.completedSteps.includes(6)) {
6160
6160
  log("=== Your First Hire ===");
6161
6161
  log("");
6162
- log("Until now, you talked to one agent at a time.");
6163
- log("Your COO changes that. You talk to them \u2014 they coordinate");
6162
+ log("Your new COO will hold all your vision, your roadmap, all your");
6163
+ log("projects and everything you think about in business, life and beyond.");
6164
+ log("They can call and hire new employees, executives, and coordinate");
6164
6165
  log("your entire team. Engineers, marketers, specialists, all working");
6165
6166
  log("in parallel while you focus on what matters.");
6166
6167
  log("");
@@ -16127,8 +16127,8 @@ function registerExportGraph(server2) {
16127
16127
  const html = await exportGraphHTML(client);
16128
16128
  const fs = await import("fs");
16129
16129
  const path38 = await import("path");
16130
- const os12 = await import("os");
16131
- const outDir = path38.join(os12.homedir(), ".exe-os", "exports");
16130
+ const os13 = await import("os");
16131
+ const outDir = path38.join(os13.homedir(), ".exe-os", "exports");
16132
16132
  fs.mkdirSync(outDir, { recursive: true });
16133
16133
  const timestamp = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-").slice(0, 19);
16134
16134
  const filePath = path38.join(outDir, `graph-${timestamp}.html`);
@@ -16621,6 +16621,7 @@ import { z as z57 } from "zod";
16621
16621
  // src/bin/exe-doctor.ts
16622
16622
  init_store();
16623
16623
  init_database();
16624
+ import os12 from "os";
16624
16625
 
16625
16626
  // src/lib/is-main.ts
16626
16627
  import { realpathSync } from "fs";
@@ -17096,7 +17097,13 @@ function formatReport(report, flags) {
17096
17097
  }
17097
17098
  lines.push("");
17098
17099
  }
17099
- lines.push(`${indicator(report.nullVectors, 50)} Null vectors: ${fmtNum(report.nullVectors)} / ${fmtNum(s.total)} (${pct(report.nullVectors, s.total)})`);
17100
+ const totalMemGB = os12.totalmem() / (1024 * 1024 * 1024);
17101
+ const isLowMemSystem = totalMemGB <= 8;
17102
+ if (isLowMemSystem && report.nullVectors > 0) {
17103
+ lines.push(`\u{1F7E2} Null vectors: ${fmtNum(report.nullVectors)} / ${fmtNum(s.total)} (expected \u2014 8GB system, keyword search mode)`);
17104
+ } else {
17105
+ lines.push(`${indicator(report.nullVectors, 50)} Null vectors: ${fmtNum(report.nullVectors)} / ${fmtNum(s.total)} (${pct(report.nullVectors, s.total)})`);
17106
+ }
17100
17107
  const dupPct = s.total > 0 ? report.duplicateCount / s.total * 100 : 0;
17101
17108
  const dupIndicator = dupPct === 0 ? "\u{1F7E2}" : dupPct <= 5 ? "\u{1F7E0}" : "\u{1F534}";
17102
17109
  lines.push(`${dupIndicator} Duplicates: ${fmtNum(report.duplicateCount)} / ${fmtNum(s.total)} (${pct(report.duplicateCount, s.total)})`);
@@ -17158,7 +17165,7 @@ function formatReport(report, flags) {
17158
17165
  }
17159
17166
  }
17160
17167
  const recs = [];
17161
- if (report.nullVectors > 0) {
17168
+ if (report.nullVectors > 0 && !isLowMemSystem) {
17162
17169
  recs.push(`Run --fix to backfill ${fmtNum(report.nullVectors)} null vectors`);
17163
17170
  }
17164
17171
  if (report.duplicateCount > 0) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@askexenow/exe-os",
3
- "version": "0.8.95",
3
+ "version": "0.8.97",
4
4
  "description": "AI employee operating system — persistent memory, task management, and multi-agent coordination for Claude Code.",
5
5
  "license": "CC-BY-NC-4.0",
6
6
  "type": "module",