@askexenow/exe-os 0.9.119 → 0.9.121

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.
@@ -978,7 +978,7 @@ async function dedupCluster(client, cluster, embedFn) {
978
978
  const vectors = [];
979
979
  for (const mem of cluster.memories) {
980
980
  try {
981
- const v = await embedFn(mem.raw_text.slice(0, 500));
981
+ const v = await embedFn(mem.raw_text);
982
982
  vectors.push({ id: mem.id, vector: v });
983
983
  } catch {
984
984
  }
@@ -7873,7 +7873,7 @@ var init_tool_capability_index = __esm({
7873
7873
  let vector = null;
7874
7874
  if (embedFn) {
7875
7875
  try {
7876
- vector = await embedFn(capabilityDoc.slice(0, 500));
7876
+ vector = await embedFn(capabilityDoc);
7877
7877
  } catch {
7878
7878
  }
7879
7879
  }
@@ -10498,15 +10498,18 @@ var init_tasks_notify = __esm({
10498
10498
  import crypto6 from "crypto";
10499
10499
  async function storeBehavior(opts) {
10500
10500
  try {
10501
- const { loadEmployeesSync: loadEmployeesSync2 } = await Promise.resolve().then(() => (init_employees(), employees_exports));
10501
+ const { loadEmployeesSync: loadEmployeesSync2, baseAgentName: baseAgentName2 } = await Promise.resolve().then(() => (init_employees(), employees_exports));
10502
10502
  const roster = loadEmployeesSync2();
10503
- if (roster.length > 0 && !roster.some((e) => e.name === opts.agentId)) {
10504
- if (process.env.NODE_ENV !== "test") {
10505
- console.warn(`[behaviors] Agent "${opts.agentId}" not found in roster \u2014 storing anyway.`);
10503
+ if (roster.length > 0) {
10504
+ const base = baseAgentName2(opts.agentId, roster);
10505
+ if (!roster.some((e) => e.name === opts.agentId || e.name === base)) {
10506
+ process.stderr.write(
10507
+ `[behaviors] WARNING: Agent "${opts.agentId}" not found in roster. Storing behavior anyway \u2014 may be orphaned.
10508
+ `
10509
+ );
10506
10510
  }
10507
10511
  }
10508
- } catch (e) {
10509
- if (e instanceof Error && e.message.includes("not found in roster")) throw e;
10512
+ } catch {
10510
10513
  }
10511
10514
  const client = getClient();
10512
10515
  const id = crypto6.randomUUID();
@@ -13924,7 +13927,7 @@ async function dedupCluster(client, cluster, embedFn) {
13924
13927
  const vectors = [];
13925
13928
  for (const mem of cluster.memories) {
13926
13929
  try {
13927
- const v = await embedFn(mem.raw_text.slice(0, 500));
13930
+ const v = await embedFn(mem.raw_text);
13928
13931
  vectors.push({ id: mem.id, vector: v });
13929
13932
  } catch {
13930
13933
  }
@@ -18282,6 +18285,9 @@ function enqueue(queue, entry) {
18282
18285
  }
18283
18286
  queue.push(entry);
18284
18287
  }
18288
+ var OOM_MARKER_PATH = path34.join(os18.homedir(), ".exe-os", "embedding-oom-marker");
18289
+ var MIN_FREE_MEM_BYTES = 2 * 1024 ** 3;
18290
+ var MAX_SMALL_TOTAL_BYTES = 8 * 1024 ** 3;
18285
18291
  async function loadModel() {
18286
18292
  const modelPath = path34.join(MODELS_DIR, MODEL_FILE);
18287
18293
  if (!existsSync30(modelPath)) {
@@ -18289,6 +18295,29 @@ async function loadModel() {
18289
18295
  `);
18290
18296
  return;
18291
18297
  }
18298
+ if (existsSync30(OOM_MARKER_PATH)) {
18299
+ process.stderr.write(
18300
+ `[exed] Skipping embeddings \u2014 previous OOM detected. Delete ${OOM_MARKER_PATH} to retry.
18301
+ `
18302
+ );
18303
+ return;
18304
+ }
18305
+ const totalMem = os18.totalmem();
18306
+ const freeMem = os18.freemem();
18307
+ if (totalMem <= MAX_SMALL_TOTAL_BYTES) {
18308
+ process.stderr.write(
18309
+ `[exed] Skipping embeddings \u2014 total RAM ${(totalMem / 1024 ** 3).toFixed(1)} GB <= 8 GB threshold.
18310
+ `
18311
+ );
18312
+ return;
18313
+ }
18314
+ if (freeMem < MIN_FREE_MEM_BYTES) {
18315
+ process.stderr.write(
18316
+ `[exed] Skipping embeddings \u2014 free RAM ${(freeMem / 1024 ** 3).toFixed(1)} GB < 2 GB minimum.
18317
+ `
18318
+ );
18319
+ return;
18320
+ }
18292
18321
  process.stderr.write("[exed] Loading model...\n");
18293
18322
  try {
18294
18323
  const { getLlama } = await import("node-llama-cpp");
@@ -19823,6 +19852,14 @@ function startRssWatchdog() {
19823
19852
  `[exed] RSS CRITICAL: ${(rss / 1024 / 1024).toFixed(0)} MB exceeds ${(RSS_RESTART_BYTES / 1024 ** 3).toFixed(1)} GB limit \u2014 restarting.
19824
19853
  `
19825
19854
  );
19855
+ try {
19856
+ mkdirSync16(path34.dirname(OOM_MARKER_PATH), { recursive: true });
19857
+ writeFileSync17(OOM_MARKER_PATH, `RSS=${(rss / 1024 / 1024).toFixed(0)}MB at ${(/* @__PURE__ */ new Date()).toISOString()}
19858
+ `);
19859
+ process.stderr.write(`[exed] Wrote OOM marker at ${OOM_MARKER_PATH}
19860
+ `);
19861
+ } catch {
19862
+ }
19826
19863
  void shutdown();
19827
19864
  return;
19828
19865
  }
@@ -1790,15 +1790,18 @@ function getClient() {
1790
1790
  import crypto2 from "crypto";
1791
1791
  async function storeBehavior(opts) {
1792
1792
  try {
1793
- const { loadEmployeesSync: loadEmployeesSync2 } = await Promise.resolve().then(() => (init_employees(), employees_exports));
1793
+ const { loadEmployeesSync: loadEmployeesSync2, baseAgentName: baseAgentName2 } = await Promise.resolve().then(() => (init_employees(), employees_exports));
1794
1794
  const roster = loadEmployeesSync2();
1795
- if (roster.length > 0 && !roster.some((e) => e.name === opts.agentId)) {
1796
- if (process.env.NODE_ENV !== "test") {
1797
- console.warn(`[behaviors] Agent "${opts.agentId}" not found in roster \u2014 storing anyway.`);
1795
+ if (roster.length > 0) {
1796
+ const base = baseAgentName2(opts.agentId, roster);
1797
+ if (!roster.some((e) => e.name === opts.agentId || e.name === base)) {
1798
+ process.stderr.write(
1799
+ `[behaviors] WARNING: Agent "${opts.agentId}" not found in roster. Storing behavior anyway \u2014 may be orphaned.
1800
+ `
1801
+ );
1798
1802
  }
1799
1803
  }
1800
- } catch (e) {
1801
- if (e instanceof Error && e.message.includes("not found in roster")) throw e;
1804
+ } catch {
1802
1805
  }
1803
1806
  const client = getClient();
1804
1807
  const id = crypto2.randomUUID();
package/dist/lib/tasks.js CHANGED
@@ -5241,15 +5241,18 @@ var init_embedder = __esm({
5241
5241
  import crypto5 from "crypto";
5242
5242
  async function storeBehavior(opts) {
5243
5243
  try {
5244
- const { loadEmployeesSync: loadEmployeesSync2 } = await Promise.resolve().then(() => (init_employees(), employees_exports));
5244
+ const { loadEmployeesSync: loadEmployeesSync2, baseAgentName: baseAgentName2 } = await Promise.resolve().then(() => (init_employees(), employees_exports));
5245
5245
  const roster = loadEmployeesSync2();
5246
- if (roster.length > 0 && !roster.some((e) => e.name === opts.agentId)) {
5247
- if (process.env.NODE_ENV !== "test") {
5248
- console.warn(`[behaviors] Agent "${opts.agentId}" not found in roster \u2014 storing anyway.`);
5246
+ if (roster.length > 0) {
5247
+ const base = baseAgentName2(opts.agentId, roster);
5248
+ if (!roster.some((e) => e.name === opts.agentId || e.name === base)) {
5249
+ process.stderr.write(
5250
+ `[behaviors] WARNING: Agent "${opts.agentId}" not found in roster. Storing behavior anyway \u2014 may be orphaned.
5251
+ `
5252
+ );
5249
5253
  }
5250
5254
  }
5251
- } catch (e) {
5252
- if (e instanceof Error && e.message.includes("not found in roster")) throw e;
5255
+ } catch {
5253
5256
  }
5254
5257
  const client = getClient();
5255
5258
  const id = crypto5.randomUUID();
@@ -4017,15 +4017,18 @@ var init_embedder = __esm({
4017
4017
  import crypto5 from "crypto";
4018
4018
  async function storeBehavior(opts) {
4019
4019
  try {
4020
- const { loadEmployeesSync: loadEmployeesSync2 } = await Promise.resolve().then(() => (init_employees(), employees_exports));
4020
+ const { loadEmployeesSync: loadEmployeesSync2, baseAgentName: baseAgentName2 } = await Promise.resolve().then(() => (init_employees(), employees_exports));
4021
4021
  const roster = loadEmployeesSync2();
4022
- if (roster.length > 0 && !roster.some((e) => e.name === opts.agentId)) {
4023
- if (process.env.NODE_ENV !== "test") {
4024
- console.warn(`[behaviors] Agent "${opts.agentId}" not found in roster \u2014 storing anyway.`);
4022
+ if (roster.length > 0) {
4023
+ const base = baseAgentName2(opts.agentId, roster);
4024
+ if (!roster.some((e) => e.name === opts.agentId || e.name === base)) {
4025
+ process.stderr.write(
4026
+ `[behaviors] WARNING: Agent "${opts.agentId}" not found in roster. Storing behavior anyway \u2014 may be orphaned.
4027
+ `
4028
+ );
4025
4029
  }
4026
4030
  }
4027
- } catch (e) {
4028
- if (e instanceof Error && e.message.includes("not found in roster")) throw e;
4031
+ } catch {
4029
4032
  }
4030
4033
  const client = getClient();
4031
4034
  const id = crypto5.randomUUID();