hippo-memory 1.43.3 → 1.45.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/README.md +14 -12
- package/bin/hippo.js +3 -1
- package/dist/api.d.ts +21 -21
- package/dist/api.js +69 -42
- package/dist/audit-prune.js +4 -1
- package/dist/audit.d.ts +1 -1
- package/dist/audit.js +9 -0
- package/dist/autolearn.d.ts +1 -1
- package/dist/autolearn.js +2 -1
- package/dist/capture.d.ts +11 -10
- package/dist/capture.js +22 -30
- package/dist/cli.d.ts +4 -0
- package/dist/cli.js +309 -171
- package/dist/client.d.ts +4 -21
- package/dist/client.js +3 -112
- package/dist/config.js +2 -1
- package/dist/consolidate.d.ts +3 -0
- package/dist/consolidate.js +44 -42
- package/dist/dag.d.ts +1 -0
- package/dist/dag.js +10 -5
- package/dist/dashboard.js +7 -3
- package/dist/db.js +16 -24
- package/dist/dedupe.d.ts +1 -0
- package/dist/dedupe.js +4 -7
- package/dist/embedding-provider.d.ts +1 -1
- package/dist/embedding-provider.js +3 -2
- package/dist/embeddings.js +81 -8
- package/dist/extract.d.ts +2 -0
- package/dist/extract.js +9 -4
- package/dist/goals.js +12 -3
- package/dist/mcp/server.js +21 -36
- package/dist/memory.d.ts +3 -0
- package/dist/memory.js +7 -1
- package/dist/physics-state.js +4 -1
- package/dist/raw-archive.js +5 -2
- package/dist/recall-trace.js +4 -1
- package/dist/refine-llm.js +3 -2
- package/dist/rerankers/jev.js +3 -2
- package/dist/rerankers/llm.js +3 -2
- package/dist/search.js +3 -3
- package/dist/server.d.ts +5 -0
- package/dist/server.js +39 -29
- package/dist/shared.js +1 -1
- package/dist/stdin.d.ts +12 -0
- package/dist/stdin.js +41 -0
- package/dist/store.d.ts +18 -11
- package/dist/store.js +152 -65
- package/dist/version.d.ts +4 -6
- package/dist/version.js +4 -7
- package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
- package/extensions/openclaw-plugin/package.json +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +8 -5
- package/dist/ablation.d.ts.map +0 -1
- package/dist/ablation.js.map +0 -1
- package/dist/ambient.d.ts.map +0 -1
- package/dist/ambient.js.map +0 -1
- package/dist/api.d.ts.map +0 -1
- package/dist/api.js.map +0 -1
- package/dist/audit-prune.d.ts.map +0 -1
- package/dist/audit-prune.js.map +0 -1
- package/dist/audit.d.ts.map +0 -1
- package/dist/audit.js.map +0 -1
- package/dist/auth.d.ts.map +0 -1
- package/dist/auth.js.map +0 -1
- package/dist/autolearn.d.ts.map +0 -1
- package/dist/autolearn.js.map +0 -1
- package/dist/availability.d.ts.map +0 -1
- package/dist/availability.js.map +0 -1
- package/dist/benchmarks/e1.3/incident-recall-eval.js +0 -78
- package/dist/benchmarks/e1.3/incident-recall-eval.js.map +0 -1
- package/dist/benchmarks/e1.3/slack-1000-event-smoke.js +0 -103
- package/dist/benchmarks/e1.3/slack-1000-event-smoke.js.map +0 -1
- package/dist/capture.d.ts.map +0 -1
- package/dist/capture.js.map +0 -1
- package/dist/card-detail.d.ts.map +0 -1
- package/dist/card-detail.js.map +0 -1
- package/dist/card.d.ts.map +0 -1
- package/dist/card.js.map +0 -1
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/client.d.ts.map +0 -1
- package/dist/client.js.map +0 -1
- package/dist/compare.d.ts.map +0 -1
- package/dist/compare.js.map +0 -1
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js.map +0 -1
- package/dist/connectors/github/backfill.d.ts.map +0 -1
- package/dist/connectors/github/backfill.js.map +0 -1
- package/dist/connectors/github/cli-impl.d.ts.map +0 -1
- package/dist/connectors/github/cli-impl.js.map +0 -1
- package/dist/connectors/github/deletion.d.ts.map +0 -1
- package/dist/connectors/github/deletion.js.map +0 -1
- package/dist/connectors/github/dlq.d.ts.map +0 -1
- package/dist/connectors/github/dlq.js.map +0 -1
- package/dist/connectors/github/idempotency.d.ts.map +0 -1
- package/dist/connectors/github/idempotency.js.map +0 -1
- package/dist/connectors/github/ingest.d.ts.map +0 -1
- package/dist/connectors/github/ingest.js.map +0 -1
- package/dist/connectors/github/octokit-client.d.ts.map +0 -1
- package/dist/connectors/github/octokit-client.js.map +0 -1
- package/dist/connectors/github/ratelimit.d.ts.map +0 -1
- package/dist/connectors/github/ratelimit.js.map +0 -1
- package/dist/connectors/github/scope.d.ts.map +0 -1
- package/dist/connectors/github/scope.js.map +0 -1
- package/dist/connectors/github/signature.d.ts.map +0 -1
- package/dist/connectors/github/signature.js.map +0 -1
- package/dist/connectors/github/tenant-routing.d.ts.map +0 -1
- package/dist/connectors/github/tenant-routing.js.map +0 -1
- package/dist/connectors/github/transform.d.ts.map +0 -1
- package/dist/connectors/github/transform.js.map +0 -1
- package/dist/connectors/github/types.d.ts.map +0 -1
- package/dist/connectors/github/types.js.map +0 -1
- package/dist/connectors/slack/backfill.d.ts.map +0 -1
- package/dist/connectors/slack/backfill.js.map +0 -1
- package/dist/connectors/slack/deletion.d.ts.map +0 -1
- package/dist/connectors/slack/deletion.js.map +0 -1
- package/dist/connectors/slack/dlq.d.ts.map +0 -1
- package/dist/connectors/slack/dlq.js.map +0 -1
- package/dist/connectors/slack/idempotency.d.ts.map +0 -1
- package/dist/connectors/slack/idempotency.js.map +0 -1
- package/dist/connectors/slack/ingest.d.ts.map +0 -1
- package/dist/connectors/slack/ingest.js.map +0 -1
- package/dist/connectors/slack/ratelimit.d.ts.map +0 -1
- package/dist/connectors/slack/ratelimit.js.map +0 -1
- package/dist/connectors/slack/scope.d.ts.map +0 -1
- package/dist/connectors/slack/scope.js.map +0 -1
- package/dist/connectors/slack/signature.d.ts.map +0 -1
- package/dist/connectors/slack/signature.js.map +0 -1
- package/dist/connectors/slack/tenant-routing.d.ts.map +0 -1
- package/dist/connectors/slack/tenant-routing.js.map +0 -1
- package/dist/connectors/slack/transform.d.ts.map +0 -1
- package/dist/connectors/slack/transform.js.map +0 -1
- package/dist/connectors/slack/types.d.ts.map +0 -1
- package/dist/connectors/slack/types.js.map +0 -1
- package/dist/connectors/slack/web-client.d.ts.map +0 -1
- package/dist/connectors/slack/web-client.js.map +0 -1
- package/dist/connectors/slack/workspaces.d.ts.map +0 -1
- package/dist/connectors/slack/workspaces.js.map +0 -1
- package/dist/consolidate.d.ts.map +0 -1
- package/dist/consolidate.js.map +0 -1
- package/dist/correction-latency.d.ts.map +0 -1
- package/dist/correction-latency.js.map +0 -1
- package/dist/customer-notes.d.ts.map +0 -1
- package/dist/customer-notes.js.map +0 -1
- package/dist/dag.d.ts.map +0 -1
- package/dist/dag.js.map +0 -1
- package/dist/dashboard.d.ts.map +0 -1
- package/dist/dashboard.js.map +0 -1
- package/dist/db.d.ts.map +0 -1
- package/dist/db.js.map +0 -1
- package/dist/decisions.d.ts.map +0 -1
- package/dist/decisions.js.map +0 -1
- package/dist/dedupe.d.ts.map +0 -1
- package/dist/dedupe.js.map +0 -1
- package/dist/embedding-provider.d.ts.map +0 -1
- package/dist/embedding-provider.js.map +0 -1
- package/dist/embeddings.d.ts.map +0 -1
- package/dist/embeddings.js.map +0 -1
- package/dist/eval-suite.d.ts.map +0 -1
- package/dist/eval-suite.js.map +0 -1
- package/dist/eval.d.ts.map +0 -1
- package/dist/eval.js.map +0 -1
- package/dist/extensions/openclaw-plugin/index.js.map +0 -1
- package/dist/extract.d.ts.map +0 -1
- package/dist/extract.js.map +0 -1
- package/dist/forward-claim-detector.d.ts.map +0 -1
- package/dist/forward-claim-detector.js.map +0 -1
- package/dist/goals.d.ts.map +0 -1
- package/dist/goals.js.map +0 -1
- package/dist/graph-extract.d.ts.map +0 -1
- package/dist/graph-extract.js.map +0 -1
- package/dist/graph-recall.d.ts.map +0 -1
- package/dist/graph-recall.js.map +0 -1
- package/dist/graph-stream.d.ts.map +0 -1
- package/dist/graph-stream.js.map +0 -1
- package/dist/graph-view.d.ts.map +0 -1
- package/dist/graph-view.js.map +0 -1
- package/dist/graph.d.ts.map +0 -1
- package/dist/graph.js.map +0 -1
- package/dist/handoff.d.ts.map +0 -1
- package/dist/handoff.js.map +0 -1
- package/dist/hooks.d.ts.map +0 -1
- package/dist/hooks.js.map +0 -1
- package/dist/importers.d.ts.map +0 -1
- package/dist/importers.js.map +0 -1
- package/dist/incidents.d.ts.map +0 -1
- package/dist/incidents.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/invalidation.d.ts.map +0 -1
- package/dist/invalidation.js.map +0 -1
- package/dist/mcp/framing.d.ts.map +0 -1
- package/dist/mcp/framing.js.map +0 -1
- package/dist/mcp/server.d.ts.map +0 -1
- package/dist/mcp/server.js.map +0 -1
- package/dist/memory-value-weights.d.ts.map +0 -1
- package/dist/memory-value-weights.js.map +0 -1
- package/dist/memory-value.d.ts.map +0 -1
- package/dist/memory-value.js.map +0 -1
- package/dist/memory.d.ts.map +0 -1
- package/dist/memory.js.map +0 -1
- package/dist/multihop.d.ts.map +0 -1
- package/dist/multihop.js.map +0 -1
- package/dist/owner-validation.d.ts.map +0 -1
- package/dist/owner-validation.js.map +0 -1
- package/dist/path-context.d.ts.map +0 -1
- package/dist/path-context.js.map +0 -1
- package/dist/physics-config.d.ts.map +0 -1
- package/dist/physics-config.js.map +0 -1
- package/dist/physics-state.d.ts.map +0 -1
- package/dist/physics-state.js.map +0 -1
- package/dist/physics.d.ts.map +0 -1
- package/dist/physics.js.map +0 -1
- package/dist/policies.d.ts.map +0 -1
- package/dist/policies.js.map +0 -1
- package/dist/postinstall.d.ts.map +0 -1
- package/dist/postinstall.js.map +0 -1
- package/dist/predictions.d.ts.map +0 -1
- package/dist/predictions.js.map +0 -1
- package/dist/processes.d.ts.map +0 -1
- package/dist/processes.js.map +0 -1
- package/dist/project-briefs.d.ts.map +0 -1
- package/dist/project-briefs.js.map +0 -1
- package/dist/project-identity.d.ts.map +0 -1
- package/dist/project-identity.js.map +0 -1
- package/dist/provenance-coverage.d.ts.map +0 -1
- package/dist/provenance-coverage.js.map +0 -1
- package/dist/rate-limit.d.ts.map +0 -1
- package/dist/rate-limit.js.map +0 -1
- package/dist/raw-archive-mirror-cleanup.d.ts.map +0 -1
- package/dist/raw-archive-mirror-cleanup.js.map +0 -1
- package/dist/raw-archive.d.ts.map +0 -1
- package/dist/raw-archive.js.map +0 -1
- package/dist/recall-history.d.ts.map +0 -1
- package/dist/recall-history.js.map +0 -1
- package/dist/recall-scope.d.ts.map +0 -1
- package/dist/recall-scope.js.map +0 -1
- package/dist/recall-trace.d.ts.map +0 -1
- package/dist/recall-trace.js.map +0 -1
- package/dist/refine-llm.d.ts.map +0 -1
- package/dist/refine-llm.js.map +0 -1
- package/dist/reject-flow.d.ts.map +0 -1
- package/dist/reject-flow.js.map +0 -1
- package/dist/rejection.d.ts.map +0 -1
- package/dist/rejection.js.map +0 -1
- package/dist/replay.d.ts.map +0 -1
- package/dist/replay.js.map +0 -1
- package/dist/rerankers/cross-encoder.d.ts.map +0 -1
- package/dist/rerankers/cross-encoder.js.map +0 -1
- package/dist/rerankers/index.d.ts.map +0 -1
- package/dist/rerankers/index.js.map +0 -1
- package/dist/rerankers/jev.d.ts.map +0 -1
- package/dist/rerankers/jev.js.map +0 -1
- package/dist/rerankers/llm.d.ts.map +0 -1
- package/dist/rerankers/llm.js.map +0 -1
- package/dist/rerankers/types.d.ts.map +0 -1
- package/dist/rerankers/types.js.map +0 -1
- package/dist/rrf.d.ts.map +0 -1
- package/dist/rrf.js.map +0 -1
- package/dist/salience.d.ts.map +0 -1
- package/dist/salience.js.map +0 -1
- package/dist/scheduler.d.ts.map +0 -1
- package/dist/scheduler.js.map +0 -1
- package/dist/scope.d.ts.map +0 -1
- package/dist/scope.js.map +0 -1
- package/dist/search.d.ts.map +0 -1
- package/dist/search.js.map +0 -1
- package/dist/secret-detect.d.ts.map +0 -1
- package/dist/secret-detect.js.map +0 -1
- package/dist/server-detect.d.ts.map +0 -1
- package/dist/server-detect.js.map +0 -1
- package/dist/server.d.ts.map +0 -1
- package/dist/server.js.map +0 -1
- package/dist/shared.d.ts.map +0 -1
- package/dist/shared.js.map +0 -1
- package/dist/skills.d.ts.map +0 -1
- package/dist/skills.js.map +0 -1
- package/dist/sleep-redact.d.ts +0 -58
- package/dist/sleep-redact.d.ts.map +0 -1
- package/dist/sleep-redact.js +0 -80
- package/dist/sleep-redact.js.map +0 -1
- package/dist/src/ablation.js +0 -138
- package/dist/src/ablation.js.map +0 -1
- package/dist/src/ambient.js +0 -148
- package/dist/src/ambient.js.map +0 -1
- package/dist/src/api.js +0 -2109
- package/dist/src/api.js.map +0 -1
- package/dist/src/audit-prune.js +0 -106
- package/dist/src/audit-prune.js.map +0 -1
- package/dist/src/audit.js +0 -213
- package/dist/src/audit.js.map +0 -1
- package/dist/src/auth.js +0 -97
- package/dist/src/auth.js.map +0 -1
- package/dist/src/autolearn.js +0 -174
- package/dist/src/autolearn.js.map +0 -1
- package/dist/src/availability.js +0 -94
- package/dist/src/availability.js.map +0 -1
- package/dist/src/capture.js +0 -1354
- package/dist/src/capture.js.map +0 -1
- package/dist/src/card-detail.js +0 -15
- package/dist/src/card-detail.js.map +0 -1
- package/dist/src/card.js +0 -19
- package/dist/src/card.js.map +0 -1
- package/dist/src/cli.js +0 -9328
- package/dist/src/cli.js.map +0 -1
- package/dist/src/client.js +0 -237
- package/dist/src/client.js.map +0 -1
- package/dist/src/compare.js +0 -122
- package/dist/src/compare.js.map +0 -1
- package/dist/src/config.js +0 -135
- package/dist/src/config.js.map +0 -1
- package/dist/src/connectors/github/backfill.js +0 -281
- package/dist/src/connectors/github/backfill.js.map +0 -1
- package/dist/src/connectors/github/cli-impl.js +0 -234
- package/dist/src/connectors/github/cli-impl.js.map +0 -1
- package/dist/src/connectors/github/deletion.js +0 -85
- package/dist/src/connectors/github/deletion.js.map +0 -1
- package/dist/src/connectors/github/dlq.js +0 -190
- package/dist/src/connectors/github/dlq.js.map +0 -1
- package/dist/src/connectors/github/idempotency.js +0 -27
- package/dist/src/connectors/github/idempotency.js.map +0 -1
- package/dist/src/connectors/github/ingest.js +0 -156
- package/dist/src/connectors/github/ingest.js.map +0 -1
- package/dist/src/connectors/github/octokit-client.js +0 -70
- package/dist/src/connectors/github/octokit-client.js.map +0 -1
- package/dist/src/connectors/github/ratelimit.js +0 -31
- package/dist/src/connectors/github/ratelimit.js.map +0 -1
- package/dist/src/connectors/github/scope.js +0 -13
- package/dist/src/connectors/github/scope.js.map +0 -1
- package/dist/src/connectors/github/signature.js +0 -81
- package/dist/src/connectors/github/signature.js.map +0 -1
- package/dist/src/connectors/github/tenant-routing.js +0 -69
- package/dist/src/connectors/github/tenant-routing.js.map +0 -1
- package/dist/src/connectors/github/transform.js +0 -103
- package/dist/src/connectors/github/transform.js.map +0 -1
- package/dist/src/connectors/github/types.js +0 -100
- package/dist/src/connectors/github/types.js.map +0 -1
- package/dist/src/connectors/slack/backfill.js +0 -78
- package/dist/src/connectors/slack/backfill.js.map +0 -1
- package/dist/src/connectors/slack/deletion.js +0 -59
- package/dist/src/connectors/slack/deletion.js.map +0 -1
- package/dist/src/connectors/slack/dlq.js +0 -224
- package/dist/src/connectors/slack/dlq.js.map +0 -1
- package/dist/src/connectors/slack/idempotency.js +0 -31
- package/dist/src/connectors/slack/idempotency.js.map +0 -1
- package/dist/src/connectors/slack/ingest.js +0 -109
- package/dist/src/connectors/slack/ingest.js.map +0 -1
- package/dist/src/connectors/slack/ratelimit.js +0 -18
- package/dist/src/connectors/slack/ratelimit.js.map +0 -1
- package/dist/src/connectors/slack/scope.js +0 -13
- package/dist/src/connectors/slack/scope.js.map +0 -1
- package/dist/src/connectors/slack/signature.js +0 -27
- package/dist/src/connectors/slack/signature.js.map +0 -1
- package/dist/src/connectors/slack/tenant-routing.js +0 -41
- package/dist/src/connectors/slack/tenant-routing.js.map +0 -1
- package/dist/src/connectors/slack/transform.js +0 -47
- package/dist/src/connectors/slack/transform.js.map +0 -1
- package/dist/src/connectors/slack/types.js +0 -35
- package/dist/src/connectors/slack/types.js.map +0 -1
- package/dist/src/connectors/slack/web-client.js +0 -43
- package/dist/src/connectors/slack/web-client.js.map +0 -1
- package/dist/src/connectors/slack/workspaces.js +0 -62
- package/dist/src/connectors/slack/workspaces.js.map +0 -1
- package/dist/src/consolidate.js +0 -978
- package/dist/src/consolidate.js.map +0 -1
- package/dist/src/correction-latency.js +0 -74
- package/dist/src/correction-latency.js.map +0 -1
- package/dist/src/customer-notes.js +0 -325
- package/dist/src/customer-notes.js.map +0 -1
- package/dist/src/dag.js +0 -352
- package/dist/src/dag.js.map +0 -1
- package/dist/src/dashboard.js +0 -258
- package/dist/src/dashboard.js.map +0 -1
- package/dist/src/db.js +0 -2728
- package/dist/src/db.js.map +0 -1
- package/dist/src/decisions.js +0 -304
- package/dist/src/decisions.js.map +0 -1
- package/dist/src/dedupe.js +0 -141
- package/dist/src/dedupe.js.map +0 -1
- package/dist/src/embedding-provider.js +0 -314
- package/dist/src/embedding-provider.js.map +0 -1
- package/dist/src/embeddings.js +0 -543
- package/dist/src/embeddings.js.map +0 -1
- package/dist/src/eval-suite.js +0 -294
- package/dist/src/eval-suite.js.map +0 -1
- package/dist/src/eval.js +0 -187
- package/dist/src/eval.js.map +0 -1
- package/dist/src/extract.js +0 -117
- package/dist/src/extract.js.map +0 -1
- package/dist/src/forward-claim-detector.js +0 -117
- package/dist/src/forward-claim-detector.js.map +0 -1
- package/dist/src/goals.js +0 -390
- package/dist/src/goals.js.map +0 -1
- package/dist/src/graph-extract.js +0 -314
- package/dist/src/graph-extract.js.map +0 -1
- package/dist/src/graph-recall.js +0 -277
- package/dist/src/graph-recall.js.map +0 -1
- package/dist/src/graph-stream.js +0 -176
- package/dist/src/graph-stream.js.map +0 -1
- package/dist/src/graph-view.js +0 -310
- package/dist/src/graph-view.js.map +0 -1
- package/dist/src/graph.js +0 -762
- package/dist/src/graph.js.map +0 -1
- package/dist/src/handoff.js +0 -65
- package/dist/src/handoff.js.map +0 -1
- package/dist/src/hooks.js +0 -926
- package/dist/src/hooks.js.map +0 -1
- package/dist/src/importers.js +0 -881
- package/dist/src/importers.js.map +0 -1
- package/dist/src/incidents.js +0 -336
- package/dist/src/incidents.js.map +0 -1
- package/dist/src/index.js +0 -32
- package/dist/src/index.js.map +0 -1
- package/dist/src/invalidation.js +0 -129
- package/dist/src/invalidation.js.map +0 -1
- package/dist/src/mcp/framing.js +0 -45
- package/dist/src/mcp/framing.js.map +0 -1
- package/dist/src/mcp/server.js +0 -1298
- package/dist/src/mcp/server.js.map +0 -1
- package/dist/src/memory-value-weights.js +0 -31
- package/dist/src/memory-value-weights.js.map +0 -1
- package/dist/src/memory-value.js +0 -261
- package/dist/src/memory-value.js.map +0 -1
- package/dist/src/memory.js +0 -425
- package/dist/src/memory.js.map +0 -1
- package/dist/src/multihop.js +0 -35
- package/dist/src/multihop.js.map +0 -1
- package/dist/src/owner-validation.js +0 -56
- package/dist/src/owner-validation.js.map +0 -1
- package/dist/src/path-context.js +0 -48
- package/dist/src/path-context.js.map +0 -1
- package/dist/src/physics-config.js +0 -26
- package/dist/src/physics-config.js.map +0 -1
- package/dist/src/physics-state.js +0 -169
- package/dist/src/physics-state.js.map +0 -1
- package/dist/src/physics.js +0 -378
- package/dist/src/physics.js.map +0 -1
- package/dist/src/policies.js +0 -414
- package/dist/src/policies.js.map +0 -1
- package/dist/src/postinstall.js +0 -101
- package/dist/src/postinstall.js.map +0 -1
- package/dist/src/predictions.js +0 -629
- package/dist/src/predictions.js.map +0 -1
- package/dist/src/processes.js +0 -349
- package/dist/src/processes.js.map +0 -1
- package/dist/src/project-briefs.js +0 -492
- package/dist/src/project-briefs.js.map +0 -1
- package/dist/src/project-identity.js +0 -200
- package/dist/src/project-identity.js.map +0 -1
- package/dist/src/provenance-coverage.js +0 -23
- package/dist/src/provenance-coverage.js.map +0 -1
- package/dist/src/rate-limit.js +0 -60
- package/dist/src/rate-limit.js.map +0 -1
- package/dist/src/raw-archive-mirror-cleanup.js +0 -55
- package/dist/src/raw-archive-mirror-cleanup.js.map +0 -1
- package/dist/src/raw-archive.js +0 -88
- package/dist/src/raw-archive.js.map +0 -1
- package/dist/src/recall-history.js +0 -235
- package/dist/src/recall-history.js.map +0 -1
- package/dist/src/recall-scope.js +0 -89
- package/dist/src/recall-scope.js.map +0 -1
- package/dist/src/recall-trace.js +0 -183
- package/dist/src/recall-trace.js.map +0 -1
- package/dist/src/refine-llm.js +0 -156
- package/dist/src/refine-llm.js.map +0 -1
- package/dist/src/reject-flow.js +0 -209
- package/dist/src/reject-flow.js.map +0 -1
- package/dist/src/rejection.js +0 -160
- package/dist/src/rejection.js.map +0 -1
- package/dist/src/replay.js +0 -122
- package/dist/src/replay.js.map +0 -1
- package/dist/src/rerankers/cross-encoder.js +0 -137
- package/dist/src/rerankers/cross-encoder.js.map +0 -1
- package/dist/src/rerankers/index.js +0 -20
- package/dist/src/rerankers/index.js.map +0 -1
- package/dist/src/rerankers/jev.js +0 -119
- package/dist/src/rerankers/jev.js.map +0 -1
- package/dist/src/rerankers/llm.js +0 -80
- package/dist/src/rerankers/llm.js.map +0 -1
- package/dist/src/rerankers/types.js +0 -2
- package/dist/src/rerankers/types.js.map +0 -1
- package/dist/src/rrf.js +0 -61
- package/dist/src/rrf.js.map +0 -1
- package/dist/src/salience.js +0 -74
- package/dist/src/salience.js.map +0 -1
- package/dist/src/scheduler.js +0 -77
- package/dist/src/scheduler.js.map +0 -1
- package/dist/src/scope.js +0 -35
- package/dist/src/scope.js.map +0 -1
- package/dist/src/search.js +0 -1003
- package/dist/src/search.js.map +0 -1
- package/dist/src/secret-detect.js +0 -95
- package/dist/src/secret-detect.js.map +0 -1
- package/dist/src/server-detect.js +0 -231
- package/dist/src/server-detect.js.map +0 -1
- package/dist/src/server.js +0 -3255
- package/dist/src/server.js.map +0 -1
- package/dist/src/shared.js +0 -502
- package/dist/src/shared.js.map +0 -1
- package/dist/src/skills.js +0 -346
- package/dist/src/skills.js.map +0 -1
- package/dist/src/sleep-redact.js +0 -80
- package/dist/src/sleep-redact.js.map +0 -1
- package/dist/src/sso.js +0 -22
- package/dist/src/sso.js.map +0 -1
- package/dist/src/store.js +0 -3743
- package/dist/src/store.js.map +0 -1
- package/dist/src/tenant.js +0 -17
- package/dist/src/tenant.js.map +0 -1
- package/dist/src/trace.js +0 -72
- package/dist/src/trace.js.map +0 -1
- package/dist/src/version.js +0 -40
- package/dist/src/version.js.map +0 -1
- package/dist/src/working-memory.js +0 -157
- package/dist/src/working-memory.js.map +0 -1
- package/dist/src/yaml.js +0 -107
- package/dist/src/yaml.js.map +0 -1
- package/dist/sso.d.ts +0 -13
- package/dist/sso.d.ts.map +0 -1
- package/dist/sso.js +0 -22
- package/dist/sso.js.map +0 -1
- package/dist/store.d.ts.map +0 -1
- package/dist/store.js.map +0 -1
- package/dist/tenant.d.ts.map +0 -1
- package/dist/tenant.js.map +0 -1
- package/dist/trace.d.ts.map +0 -1
- package/dist/trace.js.map +0 -1
- package/dist/version.d.ts.map +0 -1
- package/dist/version.js.map +0 -1
- package/dist/working-memory.d.ts.map +0 -1
- package/dist/working-memory.js.map +0 -1
- package/dist/yaml.d.ts.map +0 -1
- package/dist/yaml.js.map +0 -1
package/dist/server.js
CHANGED
|
@@ -22,7 +22,7 @@ export function __resetSessionRecallHistoryHttp() {
|
|
|
22
22
|
import { PACKAGE_VERSION } from './version.js';
|
|
23
23
|
import { validateApiKey } from './auth.js';
|
|
24
24
|
import { createRateLimiter } from './rate-limit.js';
|
|
25
|
-
import { remember,
|
|
25
|
+
import { remember, retrieve, RecallContractError, ForbiddenError, drillDown, assemble, forget, promote, supersede, archiveRaw, authCreate, authList, authRevoke, auditList, outcome, outcomeForLastRecall, getContext, sleep, adminActor, } from './api.js';
|
|
26
26
|
import { buildGraphModel } from './graph-view.js';
|
|
27
27
|
import { MAX_ENTITY_NAME_LEN } from './graph.js';
|
|
28
28
|
import { savePrediction, closePrediction, loadPredictionById, loadPredictionsByClass, loadOpenPredictions, computePredictionBaserate, VALID_CLOSURE_STATES, } from './predictions.js';
|
|
@@ -289,10 +289,13 @@ async function parseJsonBody(req) {
|
|
|
289
289
|
* - /unknown/i → 404 (auth_revoke on unknown key_id)
|
|
290
290
|
* - /already superseded/i → 409 (chain conflict)
|
|
291
291
|
* - /not raw/i → 400 (archive_raw on non-raw row)
|
|
292
|
-
*
|
|
292
|
+
* ForbiddenError maps to 403; everything else to 400 (bad input).
|
|
293
293
|
*/
|
|
294
294
|
function mapApiError(err) {
|
|
295
295
|
const message = err instanceof Error ? err.message : String(err);
|
|
296
|
+
if (err instanceof ForbiddenError) {
|
|
297
|
+
return { status: 403, message };
|
|
298
|
+
}
|
|
296
299
|
const lower = message.toLowerCase();
|
|
297
300
|
if (/not found/.test(lower) || /^unknown /.test(lower)) {
|
|
298
301
|
return { status: 404, message };
|
|
@@ -354,6 +357,25 @@ export function isLoopback(remoteAddress) {
|
|
|
354
357
|
return true;
|
|
355
358
|
return false;
|
|
356
359
|
}
|
|
360
|
+
// Any other Host on a loopback socket is DNS rebinding: a hostile page resolved to 127.0.0.1.
|
|
361
|
+
export const LOOPBACK_HOST_HEADER = /^(localhost|127\.0\.0\.1|\[::1\])(:\d+)?$/i;
|
|
362
|
+
/** A browser request sent by another site. Non-browser clients send neither header and pass. */
|
|
363
|
+
export function isCrossSite(req) {
|
|
364
|
+
const site = req.headers['sec-fetch-site'];
|
|
365
|
+
if (site !== undefined && site !== 'same-origin' && site !== 'none')
|
|
366
|
+
return true;
|
|
367
|
+
const origin = req.headers.origin;
|
|
368
|
+
return origin !== undefined && origin !== `http://${req.headers.host}`;
|
|
369
|
+
}
|
|
370
|
+
// A browser on this machine is loopback too, so the no-key fallback also needs a local Host and a same-site caller.
|
|
371
|
+
function assertLocalCaller(req) {
|
|
372
|
+
if (!isLoopback(req.socket.remoteAddress))
|
|
373
|
+
throw new HttpError(401, 'auth required');
|
|
374
|
+
const host = req.headers.host;
|
|
375
|
+
if ((host !== undefined && !LOOPBACK_HOST_HEADER.test(host)) || isCrossSite(req)) {
|
|
376
|
+
throw new HttpError(403, 'cross-site or non-local request refused; send an API key');
|
|
377
|
+
}
|
|
378
|
+
}
|
|
357
379
|
function readAuthHeader(req) {
|
|
358
380
|
const raw = req.headers['authorization'];
|
|
359
381
|
if (raw === undefined)
|
|
@@ -455,9 +477,7 @@ function buildContextWithAuth(req, hippoRoot) {
|
|
|
455
477
|
if (process.env.HIPPO_REQUIRE_AUTH === '1') {
|
|
456
478
|
throw new HttpError(401, 'auth required');
|
|
457
479
|
}
|
|
458
|
-
|
|
459
|
-
throw new HttpError(401, 'auth required');
|
|
460
|
-
}
|
|
480
|
+
assertLocalCaller(req);
|
|
461
481
|
// v1.12.0: loopback fallback is process-local, treat as admin.
|
|
462
482
|
return {
|
|
463
483
|
hippoRoot,
|
|
@@ -492,9 +512,7 @@ function requireAuth(req, hippoRoot) {
|
|
|
492
512
|
if (process.env.HIPPO_REQUIRE_AUTH === '1') {
|
|
493
513
|
throw new HttpError(401, 'auth required');
|
|
494
514
|
}
|
|
495
|
-
|
|
496
|
-
throw new HttpError(401, 'auth required');
|
|
497
|
-
}
|
|
515
|
+
assertLocalCaller(req);
|
|
498
516
|
}
|
|
499
517
|
function getString(obj, key) {
|
|
500
518
|
const v = obj[key];
|
|
@@ -632,10 +650,7 @@ async function handleRequest(req, res, opts, startedAt, limiter) {
|
|
|
632
650
|
throw new HttpError(400, 'q is required');
|
|
633
651
|
}
|
|
634
652
|
const limitRaw = query.get('limit');
|
|
635
|
-
const limit = limitRaw === null ? undefined :
|
|
636
|
-
if (limit !== undefined && (!Number.isFinite(limit) || limit <= 0)) {
|
|
637
|
-
throw new HttpError(400, 'limit must be a positive number');
|
|
638
|
-
}
|
|
653
|
+
const limit = limitRaw === null ? undefined : parseListLimit(limitRaw);
|
|
639
654
|
const mode = query.get('mode');
|
|
640
655
|
if (mode !== null && mode !== 'bm25' && mode !== 'hybrid' && mode !== 'physics') {
|
|
641
656
|
throw new HttpError(400, "mode must be 'bm25', 'hybrid', or 'physics'");
|
|
@@ -671,11 +686,12 @@ async function handleRequest(req, res, opts, startedAt, limiter) {
|
|
|
671
686
|
const summarizeOverflow = summarizeOverflowRaw === null
|
|
672
687
|
? undefined
|
|
673
688
|
: (summarizeOverflowRaw === '1' || summarizeOverflowRaw === 'true');
|
|
674
|
-
//
|
|
675
|
-
// recall() which throws RecallContractError with code='invalid_scorer_window'.
|
|
676
|
-
// No transport-side validation; recall() owns the contract.
|
|
689
|
+
// recall() owns the shape rule (NaN, 0 and negatives throw invalid_scorer_window); the transport caps remote cost.
|
|
677
690
|
const scorerWindowRaw = query.get('scorer_window');
|
|
678
691
|
const scorerWindow = scorerWindowRaw === null ? undefined : Number(scorerWindowRaw);
|
|
692
|
+
if (scorerWindow !== undefined && scorerWindow > 1000) {
|
|
693
|
+
throw new HttpError(400, 'scorer_window must be <= 1000');
|
|
694
|
+
}
|
|
679
695
|
// v1.7.4: session_id for the dlPFC goal-stack boost. 256-char cap mirrors
|
|
680
696
|
// fresh_tail_session_id (above). Trim then drop if empty so api.recall
|
|
681
697
|
// sees undefined when the param is omitted or whitespace-only.
|
|
@@ -757,7 +773,7 @@ async function handleRequest(req, res, opts, startedAt, limiter) {
|
|
|
757
773
|
recallExtra.recallHistory = httpRecallHistory;
|
|
758
774
|
if (explain)
|
|
759
775
|
recallExtra.explain = explain;
|
|
760
|
-
const result =
|
|
776
|
+
const result = await retrieve(ctx, {
|
|
761
777
|
query: q,
|
|
762
778
|
limit,
|
|
763
779
|
mode: mode ?? undefined,
|
|
@@ -1038,7 +1054,8 @@ async function handleRequest(req, res, opts, startedAt, limiter) {
|
|
|
1038
1054
|
// Tenant scope (Episode A follow-up tracked in TODOS.md): api.sleep operates
|
|
1039
1055
|
// on the WHOLE hippoRoot (cross-tenant by design, matching CLI cmdSleep).
|
|
1040
1056
|
// The loopback-only guard is the trust boundary today. Future non-loopback
|
|
1041
|
-
// serving
|
|
1057
|
+
// serving must also zero the cross-tenant counters for other tenants
|
|
1058
|
+
// (D1 in docs/decisions/2026-05-24-blocked-items.md).
|
|
1042
1059
|
if (method === 'POST' && path === '/v1/sleep') {
|
|
1043
1060
|
// Defensive per-request loopback guard. Uses the canonical isLoopback()
|
|
1044
1061
|
// helper above so any future extension (additional mapped/IPv6 forms,
|
|
@@ -1084,11 +1101,7 @@ async function handleRequest(req, res, opts, startedAt, limiter) {
|
|
|
1084
1101
|
}
|
|
1085
1102
|
// v1.12.3: optional body.role mirrors the --role CLI flag. Validated
|
|
1086
1103
|
// strictly — anything other than 'admin'|'member' is a 400 (no silent
|
|
1087
|
-
// fallback to admin).
|
|
1088
|
-
// key for the same tenant; member Bearer minting an admin key is NOT
|
|
1089
|
-
// blocked here today (auth_create is currently unaudited per the A5 v2
|
|
1090
|
-
// note in authCreate doc). The HTTP layer trusts the buildContextWithAuth
|
|
1091
|
-
// role check at admin-gated routes; mint surface remains permissive.
|
|
1104
|
+
// fallback to admin). authCreate refuses a member caller with a 403.
|
|
1092
1105
|
const roleRaw = body['role'];
|
|
1093
1106
|
let role;
|
|
1094
1107
|
if (roleRaw !== undefined) {
|
|
@@ -1128,10 +1141,9 @@ async function handleRequest(req, res, opts, startedAt, limiter) {
|
|
|
1128
1141
|
sendJson(res, 200, result);
|
|
1129
1142
|
return;
|
|
1130
1143
|
}
|
|
1131
|
-
// DELETE /v1/auth/keys/:keyId — revoke.
|
|
1132
|
-
//
|
|
1133
|
-
//
|
|
1134
|
-
// surface revokedAt to the caller.
|
|
1144
|
+
// DELETE /v1/auth/keys/:keyId — revoke. Missing or cross-tenant keys are 404
|
|
1145
|
+
// (no info leak); a member key targeting any key but its own is 403.
|
|
1146
|
+
// 200 with the body rather than 204 so the caller sees revokedAt.
|
|
1135
1147
|
const keyMatch = matchPath('/v1/auth/keys/:keyId', path);
|
|
1136
1148
|
if (method === 'DELETE' && keyMatch) {
|
|
1137
1149
|
validateIdSegment(keyMatch.keyId, 'key id');
|
|
@@ -3228,9 +3240,7 @@ export async function serve(opts) {
|
|
|
3228
3240
|
server.close(() => resolve());
|
|
3229
3241
|
});
|
|
3230
3242
|
};
|
|
3231
|
-
|
|
3232
|
-
// stray SIGTERM/SIGINT listener that survives until the runner exits.
|
|
3233
|
-
if (!process.env.VITEST) {
|
|
3243
|
+
if (opts.handleSignals) {
|
|
3234
3244
|
let shuttingDown = false;
|
|
3235
3245
|
const gracefulShutdown = async (signal) => {
|
|
3236
3246
|
if (shuttingDown)
|
package/dist/shared.js
CHANGED
|
@@ -153,7 +153,7 @@ export async function searchBothHybrid(query, localRoot, globalRoot, options = {
|
|
|
153
153
|
if (!fs.existsSync(root))
|
|
154
154
|
return [];
|
|
155
155
|
return recallScope
|
|
156
|
-
? loadRecallSearchEntries(root, query, searchWindow, tenantId, recallScope.requested, recallScope.additive ? 'additive' : 'exact')
|
|
156
|
+
? loadRecallSearchEntries(root, query, searchWindow, tenantId, recallScope.requested, recallScope.additive ? 'additive' : 'exact', Boolean(includeSuperseded) || Boolean(asOf))
|
|
157
157
|
: loadSearchEntries(root, query, searchWindow, tenantId);
|
|
158
158
|
};
|
|
159
159
|
let localEntries = loadEntries(localRoot);
|
package/dist/stdin.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** `timedOut` means the window closed with stdin still open, so absent
|
|
2
|
+
* `text` is "unknown", not "none", and present `text` may be truncated.
|
|
3
|
+
* Treating absence as a manual run is only safe when it is false. */
|
|
4
|
+
export interface BoundedStdin {
|
|
5
|
+
text?: string;
|
|
6
|
+
timedOut: boolean;
|
|
7
|
+
}
|
|
8
|
+
/** Never blocks: a TTY resolves at once, otherwise waits up to `waitMs` of
|
|
9
|
+
* idle (default 1000ms, or `HIPPO_STDIN_WAIT_MS`), refreshed on each chunk
|
|
10
|
+
* so a slow but real write is not cut off, and capped at `waitMs * 10`. */
|
|
11
|
+
export declare function readStdinBounded(waitMs?: number): Promise<BoundedStdin>;
|
|
12
|
+
//# sourceMappingURL=stdin.d.ts.map
|
package/dist/stdin.js
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
function defaultWaitMs() {
|
|
2
|
+
const parsed = Number.parseInt(process.env.HIPPO_STDIN_WAIT_MS ?? '', 10);
|
|
3
|
+
return parsed > 0 ? parsed : 1000;
|
|
4
|
+
}
|
|
5
|
+
/** Never blocks: a TTY resolves at once, otherwise waits up to `waitMs` of
|
|
6
|
+
* idle (default 1000ms, or `HIPPO_STDIN_WAIT_MS`), refreshed on each chunk
|
|
7
|
+
* so a slow but real write is not cut off, and capped at `waitMs * 10`. */
|
|
8
|
+
export function readStdinBounded(waitMs = defaultWaitMs()) {
|
|
9
|
+
let stdin;
|
|
10
|
+
try {
|
|
11
|
+
stdin = process.stdin;
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return Promise.resolve({ timedOut: false });
|
|
15
|
+
}
|
|
16
|
+
if (stdin.isTTY)
|
|
17
|
+
return Promise.resolve({ timedOut: false });
|
|
18
|
+
return new Promise((resolve) => {
|
|
19
|
+
const chunks = [];
|
|
20
|
+
const finish = (timedOut) => {
|
|
21
|
+
clearTimeout(timer);
|
|
22
|
+
clearTimeout(hardCap);
|
|
23
|
+
stdin.off('data', onData);
|
|
24
|
+
stdin.off('end', done);
|
|
25
|
+
stdin.off('error', done);
|
|
26
|
+
stdin.pause();
|
|
27
|
+
stdin.unref?.();
|
|
28
|
+
resolve({ text: chunks.length ? Buffer.concat(chunks).toString('utf8') : undefined, timedOut });
|
|
29
|
+
};
|
|
30
|
+
const done = () => finish(false);
|
|
31
|
+
const onData = (c) => { chunks.push(c); timer.refresh(); };
|
|
32
|
+
const timer = setTimeout(() => finish(true), waitMs);
|
|
33
|
+
// The idle timer refreshes per chunk, so a host that dribbles bytes
|
|
34
|
+
// forever without ending would never resolve without this ceiling.
|
|
35
|
+
const hardCap = setTimeout(() => finish(true), waitMs * 10);
|
|
36
|
+
stdin.on('data', onData);
|
|
37
|
+
stdin.once('end', done);
|
|
38
|
+
stdin.once('error', done);
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=stdin.js.map
|
package/dist/store.d.ts
CHANGED
|
@@ -203,9 +203,7 @@ export declare function buildIndexFromDb(db: ReturnType<typeof openHippoDb>): Hi
|
|
|
203
203
|
* `buildIndexFromDb`'s query.
|
|
204
204
|
*/
|
|
205
205
|
export declare function writeIndexMirror(hippoRoot: string, index: HippoIndex): void;
|
|
206
|
-
/**
|
|
207
|
-
* Load the current derived index from SQLite and refresh the mirror file.
|
|
208
|
-
*/
|
|
206
|
+
/** Load the derived index from SQLite. Read-only: writers refresh index.json, so readers never race on it. */
|
|
209
207
|
export declare function loadIndex(hippoRoot: string): HippoIndex;
|
|
210
208
|
/**
|
|
211
209
|
* Persist mutable index metadata. Entry rows themselves are derived from SQLite.
|
|
@@ -298,6 +296,9 @@ export declare function readEntry(hippoRoot: string, id: string, tenantId?: stri
|
|
|
298
296
|
* to fetch parent summaries for a set of overflowed leaves.
|
|
299
297
|
*/
|
|
300
298
|
export declare function loadEntriesByIds(hippoRoot: string, ids: readonly string[], tenantId?: string): MemoryEntry[];
|
|
299
|
+
/** Strengthen what a read returned: update only the four retrieval columns on the live row, never a stale copy.
|
|
300
|
+
* Best effort: a failure logs and never fails the read. Returns the ids found in this store. */
|
|
301
|
+
export declare function strengthenRetrieved(hippoRoot: string, ids: readonly string[], tenantId?: string): Set<string>;
|
|
301
302
|
/**
|
|
302
303
|
* All `kind='raw'` rows for a given session, tenant-scoped, returned
|
|
303
304
|
* oldest-first. Used by `api.assemble` to walk a session's chronological
|
|
@@ -375,12 +376,14 @@ export declare function loadChildrenOf(hippoRoot: string, parentId: string, tena
|
|
|
375
376
|
* removed) and `resolveConflict` (`conflict_resolve` row per resolution).
|
|
376
377
|
* Default keeps `deleteEntry` byte-identical to its pre-split behavior.
|
|
377
378
|
*
|
|
378
|
-
* Returns `{tenantId, dagParentId}` for the removed row, or `null` if no row
|
|
379
|
-
*
|
|
379
|
+
* Returns `{tenantId, dagParentId}` for the removed row, or `null` if no row with `id`
|
|
380
|
+
* existed or `automatic` refused it (pinned or raw at DELETE time, so a late pin wins).
|
|
380
381
|
*/
|
|
381
382
|
export declare function deleteEntryCore(db: ReturnType<typeof openHippoDb>, id: string, opts?: {
|
|
382
383
|
actor?: string;
|
|
383
384
|
suppressForgetAudit?: boolean;
|
|
385
|
+
reason?: string;
|
|
386
|
+
automatic?: boolean;
|
|
384
387
|
}): {
|
|
385
388
|
tenantId: string;
|
|
386
389
|
dagParentId: string | null;
|
|
@@ -398,12 +401,14 @@ export declare function deleteEntryCore(db: ReturnType<typeof openHippoDb>, id:
|
|
|
398
401
|
*/
|
|
399
402
|
export declare function deleteEntry(hippoRoot: string, id: string, opts?: {
|
|
400
403
|
actor?: string;
|
|
404
|
+
reason?: string;
|
|
405
|
+
automatic?: boolean;
|
|
401
406
|
}): boolean;
|
|
402
|
-
/**
|
|
403
|
-
*
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
+
/** Consolidation's flush, one transaction. With `snapshot` (rows as the caller loaded them), a write keeps only
|
|
408
|
+
* the fields the caller changed, takes the rest from the live row, and never resurrects a row that is gone. */
|
|
409
|
+
export declare function batchWriteAndDelete(hippoRoot: string, toWrite: MemoryEntry[], toDeleteIds: string[], opts?: {
|
|
410
|
+
snapshot?: ReadonlyMap<string, MemoryEntry>;
|
|
411
|
+
}): string[];
|
|
407
412
|
/**
|
|
408
413
|
* Load all entries from SQLite.
|
|
409
414
|
*
|
|
@@ -445,7 +450,7 @@ export declare function loadSearchEntries(hippoRoot: string, query: string, limi
|
|
|
445
450
|
* mode (its `tenantId` option is optional); `loadSearchRows` already treats
|
|
446
451
|
* undefined as "no tenant filter" for legacy callers.
|
|
447
452
|
*/
|
|
448
|
-
export declare function loadRecallSearchEntries(hippoRoot: string, query: string, limit?: number, tenantId?: string, requestedScope?: string, explicitScopeMode?: 'exact' | 'additive'): MemoryEntry[];
|
|
453
|
+
export declare function loadRecallSearchEntries(hippoRoot: string, query: string, limit?: number, tenantId?: string, requestedScope?: string, explicitScopeMode?: 'exact' | 'additive', includeSuperseded?: boolean): MemoryEntry[];
|
|
449
454
|
/**
|
|
450
455
|
* Rebuild mirrors from SQLite, importing any legacy markdown files not already present.
|
|
451
456
|
*/
|
|
@@ -462,6 +467,8 @@ export declare function appendConsolidationRun(hippoRoot: string, run: {
|
|
|
462
467
|
merged: number;
|
|
463
468
|
removed: number;
|
|
464
469
|
}): void;
|
|
470
|
+
/** Rows a tenant created since the last sleep (runs are host-wide), looking back at most 24 hours. */
|
|
471
|
+
export declare function countCreatedSinceLastSleep(hippoRoot: string, tenantId: string, now?: Date): number;
|
|
465
472
|
/**
|
|
466
473
|
* Session decay context: provides the data needed for session-based and adaptive decay.
|
|
467
474
|
*/
|