@sema-agent/server 1.250.0 → 1.252.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.
package/dist/main.js CHANGED
@@ -1256,16 +1256,24 @@ async function main() {
1256
1256
  ? async () => {
1257
1257
  const store = backgroundAgentStore;
1258
1258
  const scopes = await (store.listScopes?.() ?? Promise.resolve(["default"]));
1259
- let rows = 0, sessions = 0, skipped = 0;
1259
+ let rows = 0, sessions = 0, skipped = 0, failedScopes = 0;
1260
1260
  for (const scope of scopes) {
1261
- const r = await defaultTaskRegistry.reapDurableAgents(scope, { store, sessions: subRunner.sessions }, {
1262
- maxAgeMs: config.backgroundAgentRetentionMs,
1263
- staleRunningMaxAgeMs: config.backgroundAgentStaleRunningMs,
1264
- });
1265
- rows += r.rowsReaped;
1266
- sessions += r.sessionsReleased;
1267
- skipped += r.skippedNoSessions;
1261
+ try {
1262
+ const r = await defaultTaskRegistry.reapDurableAgents(scope, { store, sessions: subRunner.sessions }, {
1263
+ maxAgeMs: config.backgroundAgentRetentionMs,
1264
+ staleRunningMaxAgeMs: config.backgroundAgentStaleRunningMs,
1265
+ });
1266
+ rows += r.rowsReaped;
1267
+ sessions += r.sessionsReleased;
1268
+ skipped += r.skippedNoSessions;
1269
+ }
1270
+ catch (err) {
1271
+ failedScopes++;
1272
+ logger.warn("bg_agent_reap_scope_failed", { scope, err: err instanceof Error ? err.message : String(err) });
1273
+ }
1268
1274
  }
1275
+ if (failedScopes > 0)
1276
+ metrics.inc("bg_agent_reap_scope_failures_total", {}, failedScopes);
1269
1277
  if (rows > 0 || sessions > 0) {
1270
1278
  metrics.inc("bg_agents_reaped_total", {}, rows);
1271
1279
  logger.info("reaper_swept", { metric: "bg_agents_reaped_total", count: rows, sessionsReleased: sessions, skippedNoSessions: skipped });
@@ -1321,6 +1329,10 @@ async function main() {
1321
1329
  bgAgentReapInFlight = true;
1322
1330
  void reapBgAgents().catch(() => undefined).finally(() => (bgAgentReapInFlight = false));
1323
1331
  }
1332
+ void rosterStore
1333
+ ?.reapOlderThan?.(Date.now() - config.rosterRetentionMs)
1334
+ .then(reapCount("roster_rows_reaped_total", {}))
1335
+ .catch(() => undefined);
1324
1336
  if (config.scratchpadSweepTtlMs > 0) {
1325
1337
  void sweepStaleScratchpads(config.localDataRoot ?? localRoot, { olderThanMs: config.scratchpadSweepTtlMs })
1326
1338
  .then((removed) => {