@agentmemory/agentmemory 0.9.14 → 0.9.15

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.
@@ -1,6 +1,6 @@
1
- import { a as jaccardSimilarity, i as generateId, n as STREAM, r as fingerprintId, t as KV } from "./cli.mjs";
2
- import { a as isManagedImagePath, getImageRefCount, i as getMaxBytes, n as IMAGES_DIR, r as deleteImage, t as withKeyedLock } from "./image-refs-HVu22rfu.mjs";
3
- import { _ as loadSnapshotConfig, a as detectLlmProviderKind, d as isContextInjectionEnabled, f as isGraphExtractionEnabled, g as loadFallbackConfig, h as loadEmbeddingConfig, i as detectEmbeddingProvider, l as isAutoCompressEnabled, m as loadConfig, n as getVisibleTools, o as getConsolidationDecayDays, p as loadClaudeBridgeConfig, r as VERSION, s as getEnvVar, t as getAllTools, u as isConsolidationEnabled, v as loadTeamConfig } from "./tools-registry-BDimtXJb.mjs";
1
+ import { a as STREAM, c as jaccardSimilarity, i as KV, n as bootLog, o as fingerprintId, r as logger, s as generateId, t as VERSION } from "./cli.mjs";
2
+ import { a as isManagedImagePath, getImageRefCount, i as getMaxBytes, n as IMAGES_DIR, r as deleteImage, t as withKeyedLock } from "./image-refs-R3tin9MR.mjs";
3
+ import { _ as loadTeamConfig, a as getConsolidationDecayDays, c as isAutoCompressEnabled, d as isGraphExtractionEnabled, f as loadClaudeBridgeConfig, g as loadSnapshotConfig, h as loadFallbackConfig, i as detectLlmProviderKind, l as isConsolidationEnabled, m as loadEmbeddingConfig, n as getVisibleTools, o as getEnvVar, p as loadConfig, r as detectEmbeddingProvider, t as getAllTools, u as isContextInjectionEnabled } from "./tools-registry-BF0pgZmI.mjs";
4
4
  import { createRequire } from "node:module";
5
5
  import { execFile } from "node:child_process";
6
6
  import { constants, existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
@@ -1143,33 +1143,6 @@ var GraphRetrieval = class {
1143
1143
  }
1144
1144
  };
1145
1145
 
1146
- //#endregion
1147
- //#region src/logger.ts
1148
- function fmt(level, msg, fields) {
1149
- if (!fields || Object.keys(fields).length === 0) return `[agentmemory] ${level} ${msg}`;
1150
- try {
1151
- return `[agentmemory] ${level} ${msg} ${JSON.stringify(fields)}`;
1152
- } catch {
1153
- return `[agentmemory] ${level} ${msg}`;
1154
- }
1155
- }
1156
- function emit(level, msg, fields) {
1157
- try {
1158
- process.stderr.write(fmt(level, msg, fields) + "\n");
1159
- } catch {}
1160
- }
1161
- const logger = {
1162
- info(msg, fields) {
1163
- emit("info", msg, fields);
1164
- },
1165
- warn(msg, fields) {
1166
- emit("warn", msg, fields);
1167
- },
1168
- error(msg, fields) {
1169
- emit("error", msg, fields);
1170
- }
1171
- };
1172
-
1173
1146
  //#endregion
1174
1147
  //#region src/functions/query-expansion.ts
1175
1148
  const QUERY_EXPANSION_SYSTEM = `You are a query expansion engine for a memory retrieval system. Given a user query, generate diverse reformulations to maximize recall.
@@ -2674,10 +2647,10 @@ function registerObserveFunction(sdk, kv, dedupMap, maxObservationsPerSession) {
2674
2647
  };
2675
2648
  }
2676
2649
  if (pendingImageData && (pendingImageData.startsWith("data:image/") || pendingImageData.startsWith("iVBORw0KGgo") || pendingImageData.startsWith("/9j/"))) {
2677
- const { saveImageToDisk } = await import("./image-store-BfN1vDbj.mjs");
2650
+ const { saveImageToDisk } = await import("./image-store-DyrKZKqZ.mjs");
2678
2651
  const { filePath, bytesWritten } = await saveImageToDisk(pendingImageData);
2679
2652
  raw.imageData = filePath;
2680
- const { incrementImageRef } = await import("./image-refs-HVu22rfu.mjs");
2653
+ const { incrementImageRef } = await import("./image-refs-R3tin9MR.mjs");
2681
2654
  await incrementImageRef(kv, filePath);
2682
2655
  sdk.triggerVoid("mem::disk-size-delta", { deltaBytes: bytesWritten });
2683
2656
  if (process.env["AGENTMEMORY_IMAGE_EMBEDDINGS"] === "true") sdk.triggerVoid("mem::vision-embed", {
@@ -2690,7 +2663,7 @@ function registerObserveFunction(sdk, kv, dedupMap, maxObservationsPerSession) {
2690
2663
  await kv.set(KV.observations(payload.sessionId), obsId, raw);
2691
2664
  } catch (error) {
2692
2665
  if (raw.imageData) {
2693
- const { deleteImage } = await import("./image-store-BfN1vDbj.mjs");
2666
+ const { deleteImage } = await import("./image-store-DyrKZKqZ.mjs");
2694
2667
  const { deletedBytes } = await deleteImage(raw.imageData);
2695
2668
  if (deletedBytes > 0) sdk.triggerVoid("mem::disk-size-delta", { deltaBytes: -deletedBytes });
2696
2669
  }
@@ -4776,7 +4749,7 @@ function registerRememberFunction(sdk, kv) {
4776
4749
  const deletedMemoryIds = [];
4777
4750
  const deletedObservationIds = [];
4778
4751
  let deletedSession = false;
4779
- const { decrementImageRef } = await import("./image-refs-HVu22rfu.mjs");
4752
+ const { decrementImageRef } = await import("./image-refs-R3tin9MR.mjs");
4780
4753
  if (data.memoryId) {
4781
4754
  const mem = await kv.get(KV.memories, data.memoryId);
4782
4755
  await kv.delete(KV.memories, data.memoryId);
@@ -4835,7 +4808,7 @@ const DEFAULTS$1 = {
4835
4808
  function registerEvictFunction(sdk, kv) {
4836
4809
  sdk.registerFunction("mem::evict", async (data) => {
4837
4810
  const dryRun = data?.dryRun ?? false;
4838
- const { decrementImageRef } = await import("./image-refs-HVu22rfu.mjs");
4811
+ const { decrementImageRef } = await import("./image-refs-R3tin9MR.mjs");
4839
4812
  const configOverride = await kv.get(KV.config, "eviction").catch(() => null);
4840
4813
  const cfg = {
4841
4814
  ...DEFAULTS$1,
@@ -5438,7 +5411,7 @@ function registerAutoForgetFunction(sdk, kv) {
5438
5411
  sdk.registerFunction("mem::auto-forget", async (data) => {
5439
5412
  const dryRun = data?.dryRun ?? false;
5440
5413
  const now = Date.now();
5441
- const { decrementImageRef } = await import("./image-refs-HVu22rfu.mjs");
5414
+ const { decrementImageRef } = await import("./image-refs-R3tin9MR.mjs");
5442
5415
  const result = {
5443
5416
  ttlExpired: [],
5444
5417
  contradictions: [],
@@ -5681,7 +5654,8 @@ function registerExportImportFunction(sdk, kv) {
5681
5654
  "0.9.11",
5682
5655
  "0.9.12",
5683
5656
  "0.9.13",
5684
- "0.9.14"
5657
+ "0.9.14",
5658
+ "0.9.15"
5685
5659
  ]).has(importData.version)) return {
5686
5660
  success: false,
5687
5661
  error: `Unsupported export version: ${importData.version}`
@@ -12038,7 +12012,7 @@ function registerRetentionFunctions(sdk, kv) {
12038
12012
  const threshold = typeof data?.threshold === "number" && Number.isFinite(data.threshold) ? data.threshold : DEFAULT_DECAY.tierThresholds.cold;
12039
12013
  const maxEvictRaw = typeof data?.maxEvict === "number" && Number.isInteger(data.maxEvict) ? data.maxEvict : 50;
12040
12014
  const maxEvict = Math.min(1e3, Math.max(0, maxEvictRaw));
12041
- const { decrementImageRef } = await import("./image-refs-HVu22rfu.mjs");
12015
+ const { decrementImageRef } = await import("./image-refs-R3tin9MR.mjs");
12042
12016
  const candidates = (await kv.list(KV.retentionScores)).filter((s) => s.score < threshold).sort((a, b) => a.score - b.score).slice(0, maxEvict);
12043
12017
  if (data?.dryRun) return {
12044
12018
  success: true,
@@ -17915,8 +17889,10 @@ function readBody(req) {
17915
17889
  req.on("error", reject);
17916
17890
  });
17917
17891
  }
17892
+ const MAX_VIEWER_PORT_RETRIES = 10;
17918
17893
  function startViewerServer(port, _kv, _sdk, secret, restPort) {
17919
17894
  const resolvedRestPort = restPort ?? port - 2;
17895
+ const requestedPort = port;
17920
17896
  const server = createServer(async (req, res) => {
17921
17897
  const raw = req.url || "/";
17922
17898
  const qIdx = raw.indexOf("?");
@@ -17953,13 +17929,26 @@ function startViewerServer(port, _kv, _sdk, secret, restPort) {
17953
17929
  json(res, 502, { error: "upstream error" }, req);
17954
17930
  }
17955
17931
  });
17932
+ let attempt = 0;
17933
+ let currentPort = requestedPort;
17934
+ const tryListen = () => {
17935
+ server.listen(currentPort, "127.0.0.1");
17936
+ };
17937
+ server.on("listening", () => {
17938
+ if (currentPort === requestedPort) console.log(`[agentmemory] Viewer: http://localhost:${currentPort}`);
17939
+ else console.log(`[agentmemory] Viewer started on http://localhost:${currentPort} (fallback from ${requestedPort})`);
17940
+ });
17956
17941
  server.on("error", (err) => {
17957
- if (err.code === "EADDRINUSE") console.warn(`[agentmemory] Viewer port ${port} already in use, skipping viewer.`);
17942
+ if (err.code === "EADDRINUSE" && attempt < MAX_VIEWER_PORT_RETRIES) {
17943
+ attempt++;
17944
+ currentPort = requestedPort + attempt;
17945
+ setImmediate(tryListen);
17946
+ return;
17947
+ }
17948
+ if (err.code === "EADDRINUSE") console.warn(`[agentmemory] Viewer ports ${requestedPort}-${requestedPort + MAX_VIEWER_PORT_RETRIES} all in use, skipping viewer.`);
17958
17949
  else console.error(`[agentmemory] Viewer error:`, err.message);
17959
17950
  });
17960
- server.listen(port, "127.0.0.1", () => {
17961
- console.log(`[agentmemory] Viewer: http://localhost:${port}`);
17962
- });
17951
+ tryListen();
17963
17952
  return server;
17964
17953
  }
17965
17954
  async function proxyToRestApi(restPort, pathname, qs, method, req, res, secret) {
@@ -18153,14 +18142,14 @@ async function main() {
18153
18142
  const provider = fallbackConfig.providers.length > 0 ? createFallbackProvider(config.provider, fallbackConfig) : createProvider(config.provider);
18154
18143
  const embeddingProvider = createEmbeddingProvider();
18155
18144
  const imageEmbeddingProvider = createImageEmbeddingProvider();
18156
- console.log(`[agentmemory] Starting worker v${VERSION}...`);
18157
- console.log(`[agentmemory] Engine: ${config.engineUrl}`);
18158
- console.log(`[agentmemory] Provider: ${config.provider.provider} (${config.provider.model})`);
18159
- if (embeddingProvider) console.log(`[agentmemory] Embedding provider: ${embeddingProvider.name} (${embeddingProvider.dimensions} dims)`);
18160
- else console.log(`[agentmemory] Embedding provider: none (BM25-only mode)`);
18161
- if (imageEmbeddingProvider) console.log(`[agentmemory] Image embedding provider: ${imageEmbeddingProvider.name} (${imageEmbeddingProvider.dimensions} dims) — vision-search active`);
18162
- console.log(`[agentmemory] REST API: http://localhost:${config.restPort}/agentmemory/*`);
18163
- console.log(`[agentmemory] Streams: ws://localhost:${config.streamsPort}`);
18145
+ bootLog(`Starting worker v${VERSION}...`);
18146
+ bootLog(`Engine: ${config.engineUrl}`);
18147
+ bootLog(`Provider: ${config.provider.provider} (${config.provider.model})`);
18148
+ if (embeddingProvider) bootLog(`Embedding provider: ${embeddingProvider.name} (${embeddingProvider.dimensions} dims)`);
18149
+ else bootLog(`Embedding provider: none (BM25-only mode)`);
18150
+ if (imageEmbeddingProvider) bootLog(`Image embedding provider: ${imageEmbeddingProvider.name} (${imageEmbeddingProvider.dimensions} dims) — vision-search active`);
18151
+ bootLog(`REST API: http://localhost:${config.restPort}/agentmemory/*`);
18152
+ bootLog(`Streams: ws://localhost:${config.streamsPort}`);
18164
18153
  const sdk = registerWorker(config.engineUrl, {
18165
18154
  workerName: "agentmemory",
18166
18155
  invocationTimeoutMs: 18e4,
@@ -18203,22 +18192,22 @@ async function main() {
18203
18192
  const claudeBridgeConfig = loadClaudeBridgeConfig();
18204
18193
  if (claudeBridgeConfig.enabled) {
18205
18194
  registerClaudeBridgeFunction(sdk, kv, claudeBridgeConfig);
18206
- console.log(`[agentmemory] Claude bridge: syncing to ${claudeBridgeConfig.memoryFilePath}`);
18195
+ bootLog(`Claude bridge: syncing to ${claudeBridgeConfig.memoryFilePath}`);
18207
18196
  }
18208
18197
  if (isGraphExtractionEnabled()) {
18209
18198
  registerGraphFunction(sdk, kv, provider);
18210
- console.log(`[agentmemory] Knowledge graph: extraction enabled`);
18199
+ bootLog(`Knowledge graph: extraction enabled`);
18211
18200
  }
18212
18201
  registerConsolidationPipelineFunction(sdk, kv, provider);
18213
- console.log(`[agentmemory] Consolidation pipeline: registered (CONSOLIDATION_ENABLED=${isConsolidationEnabled() ? "true" : "false"})`);
18214
- if (isAutoCompressEnabled()) console.log(`[agentmemory] WARNING: AGENTMEMORY_AUTO_COMPRESS=true — every PostToolUse observation will be sent to your LLM provider for compression. This spends API tokens proportional to your session tool-use frequency (see #138). Set AGENTMEMORY_AUTO_COMPRESS=false to disable.`);
18215
- else console.log(`[agentmemory] Auto-compress: OFF (default, #138) — observations indexed via zero-LLM synthetic compression. Set AGENTMEMORY_AUTO_COMPRESS=true to opt-in to LLM-powered summaries (uses your API key).`);
18216
- if (isContextInjectionEnabled()) console.log(`[agentmemory] WARNING: AGENTMEMORY_INJECT_CONTEXT=true — the PreToolUse and SessionStart hooks will inject up to ~4000 chars of memory context into every tool turn. On Claude Pro this burns session tokens proportional to your tool-call frequency (see #143). Set AGENTMEMORY_INJECT_CONTEXT=false to disable.`);
18217
- else console.log(`[agentmemory] Context injection: OFF (default, #143) — hooks capture observations but do not inject context into Claude Code's conversation. Set AGENTMEMORY_INJECT_CONTEXT=true to opt-in (warning: expect your Claude Pro allocation to drain faster).`);
18202
+ bootLog(`Consolidation pipeline: registered (CONSOLIDATION_ENABLED=${isConsolidationEnabled() ? "true" : "false"})`);
18203
+ if (isAutoCompressEnabled()) bootLog(`WARNING: AGENTMEMORY_AUTO_COMPRESS=true — every PostToolUse observation will be sent to your LLM provider for compression. This spends API tokens proportional to your session tool-use frequency (see #138). Set AGENTMEMORY_AUTO_COMPRESS=false to disable.`);
18204
+ else bootLog(`Auto-compress: OFF (default, #138) — observations indexed via zero-LLM synthetic compression. Set AGENTMEMORY_AUTO_COMPRESS=true to opt-in to LLM-powered summaries (uses your API key).`);
18205
+ if (isContextInjectionEnabled()) bootLog(`WARNING: AGENTMEMORY_INJECT_CONTEXT=true — the PreToolUse and SessionStart hooks will inject up to ~4000 chars of memory context into every tool turn. On Claude Pro this burns session tokens proportional to your tool-call frequency (see #143). Set AGENTMEMORY_INJECT_CONTEXT=false to disable.`);
18206
+ else bootLog(`Context injection: OFF (default, #143) — hooks capture observations but do not inject context into Claude Code's conversation. Set AGENTMEMORY_INJECT_CONTEXT=true to opt-in (warning: expect your Claude Pro allocation to drain faster).`);
18218
18207
  const teamConfig = loadTeamConfig();
18219
18208
  if (teamConfig) {
18220
18209
  registerTeamFunction(sdk, kv, teamConfig);
18221
- console.log(`[agentmemory] Team memory: ${teamConfig.teamId} (${teamConfig.mode})`);
18210
+ bootLog(`Team memory: ${teamConfig.teamId} (${teamConfig.mode})`);
18222
18211
  }
18223
18212
  registerGovernanceFunction(sdk, kv);
18224
18213
  registerActionsFunction(sdk, kv);
@@ -18248,13 +18237,13 @@ async function main() {
18248
18237
  registerRetentionFunctions(sdk, kv);
18249
18238
  registerCompressFileFunction(sdk, kv, provider);
18250
18239
  registerReplayFunctions(sdk, kv);
18251
- console.log(`[agentmemory] v0.6 advanced retrieval: sliding-window, query-expansion, temporal-graph, retention-scoring`);
18252
- console.log(`[agentmemory] Orchestration layer: actions, frontier, leases, routines, signals, checkpoints, flow-compress, mesh, branch-aware, sentinels, sketches, crystallize, diagnostics, facets`);
18253
- if (isSlotsEnabled()) console.log(`[agentmemory] Slots: enabled (pinned editable memory). Reflect on Stop hook: ${isReflectEnabled() ? "on" : "off"}`);
18240
+ bootLog(`v0.6 advanced retrieval: sliding-window, query-expansion, temporal-graph, retention-scoring`);
18241
+ bootLog(`Orchestration layer: actions, frontier, leases, routines, signals, checkpoints, flow-compress, mesh, branch-aware, sentinels, sketches, crystallize, diagnostics, facets`);
18242
+ if (isSlotsEnabled()) bootLog(`Slots: enabled (pinned editable memory). Reflect on Stop hook: ${isReflectEnabled() ? "on" : "off"}`);
18254
18243
  const snapshotConfig = loadSnapshotConfig();
18255
18244
  if (snapshotConfig.enabled) {
18256
18245
  registerSnapshotFunction(sdk, kv, snapshotConfig.dir);
18257
- console.log(`[agentmemory] Git snapshots: ${snapshotConfig.dir} (every ${snapshotConfig.interval}s)`);
18246
+ bootLog(`Git snapshots: ${snapshotConfig.dir} (every ${snapshotConfig.interval}s)`);
18258
18247
  }
18259
18248
  const bm25Index = getSearchIndex();
18260
18249
  const graphWeight = parseFloat(getEnvVar("AGENTMEMORY_GRAPH_WEIGHT") || "0.3");
@@ -18271,7 +18260,7 @@ async function main() {
18271
18260
  });
18272
18261
  if (loaded?.bm25 && loaded.bm25.size > 0) {
18273
18262
  bm25Index.restoreFrom(loaded.bm25);
18274
- console.log(`[agentmemory] Loaded persisted BM25 index (${bm25Index.size} docs)`);
18263
+ bootLog(`Loaded persisted BM25 index (${bm25Index.size} docs)`);
18275
18264
  }
18276
18265
  if (loaded?.vector && vectorIndex && loaded.vector.size > 0) {
18277
18266
  const activeDim = embeddingProvider?.dimensions ?? 0;
@@ -18286,7 +18275,7 @@ async function main() {
18286
18275
  else throw new Error(`[agentmemory] Refusing to start: persisted vector index has ${mismatches.length} of ${loaded.vector.size} vectors with the wrong dimension. Active provider (${embeddingProvider?.name}) declares ${activeDim}; dimensions seen on disk: ${distinct}. First mismatched obsIds: ${sample}. Loading would silently corrupt search (cross-dimension cosine returns 0). Choose one:\n - Re-embed the existing index against the new provider, then start.\n - Set AGENTMEMORY_DROP_STALE_INDEX=true to discard the persisted vectors and rebuild from live observations.\n - Switch the embedding provider back to the one that wrote the index.`);
18287
18276
  } else {
18288
18277
  vectorIndex.restoreFrom(loaded.vector);
18289
- console.log(`[agentmemory] Loaded persisted vector index (${vectorIndex.size} vectors)`);
18278
+ bootLog(`Loaded persisted vector index (${vectorIndex.size} vectors)`);
18290
18279
  }
18291
18280
  }
18292
18281
  if (bm25Index.size === 0) {
@@ -18295,7 +18284,7 @@ async function main() {
18295
18284
  return 0;
18296
18285
  });
18297
18286
  if (indexCount > 0) {
18298
- console.log(`[agentmemory] Search index rebuilt: ${indexCount} entries`);
18287
+ bootLog(`Search index rebuilt: ${indexCount} entries`);
18299
18288
  indexPersistence.scheduleSave();
18300
18289
  }
18301
18290
  } else try {
@@ -18320,14 +18309,14 @@ async function main() {
18320
18309
  backfilled++;
18321
18310
  }
18322
18311
  if (backfilled > 0) {
18323
- console.log(`[agentmemory] Backfilled ${backfilled} memories into BM25 (legacy gap before #257)`);
18312
+ bootLog(`Backfilled ${backfilled} memories into BM25 (legacy gap before #257)`);
18324
18313
  indexPersistence.scheduleSave();
18325
18314
  }
18326
18315
  } catch (err) {
18327
18316
  console.warn(`[agentmemory] Failed to backfill memories into BM25:`, err);
18328
18317
  }
18329
- console.log(`[agentmemory] Ready. ${embeddingProvider ? "Triple-stream (BM25+Vector+Graph)" : "BM25+Graph"} search active.`);
18330
- console.log(`[agentmemory] Endpoints: 107 REST + ${getAllTools().length} MCP tools + 6 MCP resources + 3 MCP prompts`);
18318
+ bootLog(`Ready. ${embeddingProvider ? "Triple-stream (BM25+Vector+Graph)" : "BM25+Graph"} search active.`);
18319
+ bootLog(`Endpoints: 107 REST + ${getAllTools().length} MCP tools + 6 MCP resources + 3 MCP prompts`);
18331
18320
  const viewerServer = startViewerServer(config.restPort + 2, kv, sdk, secret, config.restPort);
18332
18321
  const autoForgetIntervalMs = parseInt(process.env.AUTO_FORGET_INTERVAL_MS || "3600000", 10);
18333
18322
  const consolidationIntervalMs = parseInt(process.env.CONSOLIDATION_INTERVAL_MS || "7200000", 10);
@@ -18340,7 +18329,7 @@ async function main() {
18340
18329
  });
18341
18330
  } catch {}
18342
18331
  }, autoForgetIntervalMs).unref();
18343
- console.log(`[agentmemory] Auto-forget: enabled (every ${autoForgetIntervalMs / 6e4}m)`);
18332
+ bootLog(`Auto-forget: enabled (every ${autoForgetIntervalMs / 6e4}m)`);
18344
18333
  }
18345
18334
  if (process.env.LESSON_DECAY_ENABLED !== "false") {
18346
18335
  setInterval(async () => {
@@ -18351,7 +18340,7 @@ async function main() {
18351
18340
  });
18352
18341
  } catch {}
18353
18342
  }, 864e5).unref();
18354
- console.log(`[agentmemory] Lesson decay sweep: enabled (every 24h)`);
18343
+ bootLog(`Lesson decay sweep: enabled (every 24h)`);
18355
18344
  }
18356
18345
  if (process.env.INSIGHT_DECAY_ENABLED !== "false") setInterval(async () => {
18357
18346
  try {
@@ -18370,7 +18359,7 @@ async function main() {
18370
18359
  });
18371
18360
  } catch {}
18372
18361
  }, consolidationIntervalMs).unref();
18373
- console.log(`[agentmemory] Auto-consolidation: enabled (every ${consolidationIntervalMs / 6e4}m)`);
18362
+ bootLog(`Auto-consolidation: enabled (every ${consolidationIntervalMs / 6e4}m)`);
18374
18363
  }
18375
18364
  const shutdown = async () => {
18376
18365
  console.log(`\n[agentmemory] Shutting down...`);
@@ -18394,4 +18383,4 @@ main().catch((err) => {
18394
18383
 
18395
18384
  //#endregion
18396
18385
  export { };
18397
- //# sourceMappingURL=src-BBI-ah3h.mjs.map
18386
+ //# sourceMappingURL=src-BGcqJR1a.mjs.map