hippo-memory 1.12.8 → 1.12.10

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 (57) hide show
  1. package/dist/api.d.ts.map +1 -1
  2. package/dist/api.js +11 -1
  3. package/dist/api.js.map +1 -1
  4. package/dist/audit-prune.d.ts +64 -0
  5. package/dist/audit-prune.d.ts.map +1 -0
  6. package/dist/audit-prune.js +100 -0
  7. package/dist/audit-prune.js.map +1 -0
  8. package/dist/audit.d.ts +1 -1
  9. package/dist/audit.d.ts.map +1 -1
  10. package/dist/audit.js.map +1 -1
  11. package/dist/cli.d.ts.map +1 -1
  12. package/dist/cli.js +67 -6
  13. package/dist/cli.js.map +1 -1
  14. package/dist/dashboard.d.ts.map +1 -1
  15. package/dist/dashboard.js +3 -1
  16. package/dist/dashboard.js.map +1 -1
  17. package/dist/mcp/server.d.ts.map +1 -1
  18. package/dist/mcp/server.js +4 -1
  19. package/dist/mcp/server.js.map +1 -1
  20. package/dist/server.d.ts.map +1 -1
  21. package/dist/server.js +12 -1
  22. package/dist/server.js.map +1 -1
  23. package/dist/shared.d.ts +8 -1
  24. package/dist/shared.d.ts.map +1 -1
  25. package/dist/shared.js +14 -5
  26. package/dist/shared.js.map +1 -1
  27. package/dist/sleep-redact.d.ts +51 -0
  28. package/dist/sleep-redact.d.ts.map +1 -0
  29. package/dist/sleep-redact.js +68 -0
  30. package/dist/sleep-redact.js.map +1 -0
  31. package/dist/src/api.js +11 -1
  32. package/dist/src/api.js.map +1 -1
  33. package/dist/src/audit-prune.js +100 -0
  34. package/dist/src/audit-prune.js.map +1 -0
  35. package/dist/src/audit.js.map +1 -1
  36. package/dist/src/cli.js +67 -6
  37. package/dist/src/cli.js.map +1 -1
  38. package/dist/src/dashboard.js +3 -1
  39. package/dist/src/dashboard.js.map +1 -1
  40. package/dist/src/mcp/server.js +4 -1
  41. package/dist/src/mcp/server.js.map +1 -1
  42. package/dist/src/server.js +12 -1
  43. package/dist/src/server.js.map +1 -1
  44. package/dist/src/shared.js +14 -5
  45. package/dist/src/shared.js.map +1 -1
  46. package/dist/src/sleep-redact.js +68 -0
  47. package/dist/src/sleep-redact.js.map +1 -0
  48. package/dist/src/version.js +1 -1
  49. package/dist/src/version.js.map +1 -1
  50. package/dist/version.d.ts +1 -1
  51. package/dist/version.d.ts.map +1 -1
  52. package/dist/version.js +1 -1
  53. package/dist/version.js.map +1 -1
  54. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  55. package/extensions/openclaw-plugin/package.json +1 -1
  56. package/openclaw.plugin.json +1 -1
  57. package/package.json +1 -1
package/dist/cli.js CHANGED
@@ -68,6 +68,7 @@ import { getReranker } from './rerankers/index.js';
68
68
  import { computeSalience } from './salience.js';
69
69
  import { computeAmbientState, renderAmbientSummary } from './ambient.js';
70
70
  import { validateOwner, isStrictOwnerEnv } from './owner-validation.js';
71
+ import { pruneAuditLog, parseOlderThanFlag } from './audit-prune.js';
71
72
  import { listDlq, replayDlqEntry } from './connectors/slack/dlq.js';
72
73
  import { backfillChannel } from './connectors/slack/backfill.js';
73
74
  import { slackHistoryFetcher } from './connectors/slack/web-client.js';
@@ -4196,6 +4197,7 @@ const VALID_AUDIT_OPS = new Set([
4196
4197
  'auth_create', // v1.12.4: emitted by api.authCreate
4197
4198
  'outcome', // v1.11.5: pre-existing drift — emitted today but rejected by old Set
4198
4199
  'consolidate', // v1.11.5: emitted by api.sleep / hippo sleep
4200
+ 'audit_prune', // v1.12.9: emitted by pruneAuditLog
4199
4201
  ]);
4200
4202
  function formatAuditRow(ev) {
4201
4203
  const target = ev.targetId ?? '-';
@@ -4249,13 +4251,65 @@ function cmdAuditList(hippoRoot, flags) {
4249
4251
  console.log(formatAuditRow(ev));
4250
4252
  }
4251
4253
  }
4254
+ function printAuditPruneUsage() {
4255
+ console.log('hippo audit prune --older-than <Nd> [--dry-run] [--tenant <t>]');
4256
+ console.log(' --older-than <Nd> Delete audit_log rows with ts older than N days (e.g. 90d).');
4257
+ console.log(' --dry-run Count matching rows without deleting (operator safety).');
4258
+ console.log(' --tenant <t> Tenant scope. Defaults to HIPPO_TENANT or "default".');
4259
+ console.log(' --json Output the result as JSON {cutoff, count, dryRun}.');
4260
+ }
4261
+ function cmdAuditPrune(hippoRoot, flags) {
4262
+ if (flags['help']) {
4263
+ printAuditPruneUsage();
4264
+ return;
4265
+ }
4266
+ const olderThanRaw = typeof flags['older-than'] === 'string' ? flags['older-than'] : '';
4267
+ if (!olderThanRaw) {
4268
+ console.error('Usage: hippo audit prune --older-than <Nd> [--dry-run] [--tenant <t>]');
4269
+ process.exit(1);
4270
+ }
4271
+ let olderThanDays;
4272
+ try {
4273
+ olderThanDays = parseOlderThanFlag(olderThanRaw);
4274
+ }
4275
+ catch (e) {
4276
+ console.error(e.message);
4277
+ process.exit(1);
4278
+ }
4279
+ const tenantId = typeof flags['tenant'] === 'string'
4280
+ ? flags['tenant'].trim() || resolveTenantId({})
4281
+ : resolveTenantId({});
4282
+ const dryRun = flags['dry-run'] === true;
4283
+ const asJson = Boolean(flags['json']);
4284
+ const db = openHippoDb(hippoRoot);
4285
+ let result;
4286
+ try {
4287
+ result = pruneAuditLog(db, { olderThanDays, tenantId, dryRun, actor: 'cli' });
4288
+ }
4289
+ finally {
4290
+ closeHippoDb(db);
4291
+ }
4292
+ if (asJson) {
4293
+ console.log(JSON.stringify(result));
4294
+ return;
4295
+ }
4296
+ const verb = dryRun ? 'would delete' : 'deleted';
4297
+ console.log(`audit prune: ${verb} ${result.count} row${result.count === 1 ? '' : 's'} for tenant "${tenantId}" with ts < ${result.cutoff}`);
4298
+ if (dryRun) {
4299
+ console.log('(dry-run; re-run without --dry-run to actually delete)');
4300
+ }
4301
+ }
4252
4302
  function cmdAuditLog(hippoRoot, args, flags) {
4253
4303
  const sub = args[0];
4254
4304
  if (sub === 'list') {
4255
4305
  cmdAuditList(hippoRoot, flags);
4256
4306
  return;
4257
4307
  }
4258
- console.error(`Unknown audit subcommand: ${sub}. Expected: list.`);
4308
+ if (sub === 'prune') {
4309
+ cmdAuditPrune(hippoRoot, flags);
4310
+ return;
4311
+ }
4312
+ console.error(`Unknown audit subcommand: ${sub}. Expected: list | prune.`);
4259
4313
  process.exit(1);
4260
4314
  }
4261
4315
  // ---------------------------------------------------------------------------
@@ -5209,9 +5263,10 @@ async function main() {
5209
5263
  await cmdGithub(hippoRoot, args, flags);
5210
5264
  break;
5211
5265
  case 'audit': {
5212
- // `audit list` -> A5 audit-log viewer. Other forms (no sub, --fix) keep
5213
- // the existing memory-quality auditor for backwards compatibility.
5214
- if (args[0] === 'list') {
5266
+ // `audit list` and `audit prune` -> A5 audit-log subcommands.
5267
+ // Other forms (no sub, --fix) keep the existing memory-quality auditor
5268
+ // for backwards compatibility.
5269
+ if (args[0] === 'list' || args[0] === 'prune') {
5215
5270
  cmdAuditLog(hippoRoot, args, flags);
5216
5271
  break;
5217
5272
  }
@@ -5464,12 +5519,18 @@ async function main() {
5464
5519
  break;
5465
5520
  }
5466
5521
  case 'peers': {
5467
- const peers = listPeers();
5522
+ // D4 v1.12.10: tenant-scoped by default. --all-tenants restores the
5523
+ // pre-D4 host-wide view for the rare operator who genuinely wants
5524
+ // cross-tenant peer discovery.
5525
+ const allTenants = flags['all-tenants'] === true;
5526
+ const tenantScope = allTenants ? undefined : resolveTenantId({});
5527
+ const peers = listPeers(undefined, tenantScope);
5468
5528
  if (peers.length === 0) {
5469
5529
  console.log('No peers found. Share memories with: hippo share <id>');
5470
5530
  }
5471
5531
  else {
5472
- console.log(`${peers.length} project${peers.length === 1 ? '' : 's'} contributing to global store:\n`);
5532
+ const scopeLabel = allTenants ? 'global store (all tenants)' : `global store (tenant "${tenantScope}")`;
5533
+ console.log(`${peers.length} project${peers.length === 1 ? '' : 's'} contributing to ${scopeLabel}:\n`);
5473
5534
  for (const p of peers) {
5474
5535
  console.log(` ${p.project.padEnd(25)} ${String(p.count).padStart(4)} memories (latest: ${p.latest.slice(0, 10)})`);
5475
5536
  }