hippo-memory 1.44.0 → 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 +12 -10
- package/bin/hippo.js +3 -1
- package/dist/api.d.ts +21 -21
- package/dist/api.js +69 -42
- 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/cli.d.ts +3 -0
- package/dist/cli.js +151 -72
- 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 +12 -23
- package/dist/dedupe.d.ts +1 -0
- package/dist/dedupe.js +4 -7
- package/dist/embedding-provider.js +2 -1
- package/dist/embeddings.js +81 -8
- package/dist/extract.d.ts +2 -0
- package/dist/extract.js +9 -4
- package/dist/mcp/server.js +21 -36
- package/dist/memory.d.ts +3 -0
- package/dist/memory.js +7 -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/store.d.ts +18 -11
- package/dist/store.js +144 -63
- 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 +6 -3
- 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 -109
- 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 -1346
- 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 -9387
- 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 -2731
- 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 -399
- 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 -172
- 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 -91
- 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 -186
- 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/stdin.js +0 -41
- package/dist/src/stdin.js.map +0 -1
- package/dist/src/store.js +0 -3749
- 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/stdin.d.ts.map +0 -1
- package/dist/stdin.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/src/dag.js
DELETED
|
@@ -1,352 +0,0 @@
|
|
|
1
|
-
import { createMemory, Layer } from './memory.js';
|
|
2
|
-
import { writeEntry, loadAllDirtySummaries, loadChildrenOfSummary, applyRebuildResult, clearSummaryDirtyAfterBuild, } from './store.js';
|
|
3
|
-
import { RejectedValueError } from './rejection.js';
|
|
4
|
-
export function clusterFacts(facts) {
|
|
5
|
-
if (facts.length === 0)
|
|
6
|
-
return [];
|
|
7
|
-
const entityTags = facts.map((f) => f.tags.filter((t) => t.startsWith('speaker:') || t.startsWith('topic:')));
|
|
8
|
-
const assigned = new Set();
|
|
9
|
-
const clusters = [];
|
|
10
|
-
for (let i = 0; i < facts.length; i++) {
|
|
11
|
-
if (assigned.has(i))
|
|
12
|
-
continue;
|
|
13
|
-
const cluster = [i];
|
|
14
|
-
assigned.add(i);
|
|
15
|
-
for (let j = i + 1; j < facts.length; j++) {
|
|
16
|
-
if (assigned.has(j))
|
|
17
|
-
continue;
|
|
18
|
-
const shared = entityTags[i].filter((t) => entityTags[j].includes(t));
|
|
19
|
-
const union = new Set([...entityTags[i], ...entityTags[j]]);
|
|
20
|
-
const jaccard = union.size > 0 ? shared.length / union.size : 0;
|
|
21
|
-
if (jaccard >= 0.5) {
|
|
22
|
-
cluster.push(j);
|
|
23
|
-
assigned.add(j);
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
const members = cluster.map((idx) => facts[idx]);
|
|
27
|
-
const sharedTags = entityTags[cluster[0]].filter((t) => cluster.every((idx) => entityTags[idx].includes(t)));
|
|
28
|
-
const label = sharedTags
|
|
29
|
-
.map((t) => t.split(':')[1])
|
|
30
|
-
.join(': ') || members[0].content.slice(0, 40);
|
|
31
|
-
clusters.push({ label, members, entityTags: sharedTags });
|
|
32
|
-
}
|
|
33
|
-
return clusters;
|
|
34
|
-
}
|
|
35
|
-
const DAG_SUMMARY_PROMPT = `You are summarizing a cluster of facts about a specific topic/entity for a memory system.
|
|
36
|
-
|
|
37
|
-
Topic: {label}
|
|
38
|
-
Facts:
|
|
39
|
-
{facts}
|
|
40
|
-
|
|
41
|
-
Write a single concise paragraph (2-4 sentences) that captures all the key information from these facts. This summary will be used to quickly determine if this cluster is relevant to a future query, so include specific names, dates, numbers, and key details. Output ONLY the summary paragraph, no preamble.`;
|
|
42
|
-
export async function generateDagSummary(label, factContents, opts) {
|
|
43
|
-
const model = opts.model ?? 'claude-sonnet-4-6';
|
|
44
|
-
const fetchFn = opts.fetcher ?? fetch;
|
|
45
|
-
const factsBlock = factContents.map((f, i) => `${i + 1}. ${f}`).join('\n');
|
|
46
|
-
const prompt = DAG_SUMMARY_PROMPT
|
|
47
|
-
.replace('{label}', label)
|
|
48
|
-
.replace('{facts}', factsBlock);
|
|
49
|
-
let res;
|
|
50
|
-
try {
|
|
51
|
-
res = await fetchFn('https://api.anthropic.com/v1/messages', {
|
|
52
|
-
method: 'POST',
|
|
53
|
-
headers: {
|
|
54
|
-
'content-type': 'application/json',
|
|
55
|
-
'x-api-key': opts.apiKey,
|
|
56
|
-
'anthropic-version': '2023-06-01',
|
|
57
|
-
},
|
|
58
|
-
body: JSON.stringify({
|
|
59
|
-
model,
|
|
60
|
-
max_tokens: 400,
|
|
61
|
-
messages: [{ role: 'user', content: prompt }],
|
|
62
|
-
}),
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
catch {
|
|
66
|
-
return null;
|
|
67
|
-
}
|
|
68
|
-
if (!res.ok)
|
|
69
|
-
return null;
|
|
70
|
-
try {
|
|
71
|
-
const data = await res.json();
|
|
72
|
-
const text = data.content?.[0]?.text?.trim() ?? '';
|
|
73
|
-
return text.length >= 20 ? text : null;
|
|
74
|
-
}
|
|
75
|
-
catch {
|
|
76
|
-
return null;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
export async function buildDag(hippoRoot, facts, opts) {
|
|
80
|
-
const result = { candidateClusters: 0, summariesCreated: 0, factsLinked: 0, rejected: 0 };
|
|
81
|
-
const unparented = facts.filter((f) => f.dag_level === 1 && !f.dag_parent_id && f.tags.includes('extracted'));
|
|
82
|
-
// Hardening follow-up (mirrors consolidate.ts's mergeCandidatesByTenant,
|
|
83
|
-
// T1): partition unparented facts by tenantId BEFORE clustering so a
|
|
84
|
-
// cluster can never mix facts from different tenants into one
|
|
85
|
-
// LLM-synthesized summary. Map preserves insertion order, so
|
|
86
|
-
// single-tenant stores (every row 'default') get exactly one partition
|
|
87
|
-
// and iterate in the same order as before this fix — byte-identical
|
|
88
|
-
// behavior there.
|
|
89
|
-
const unparentedByTenant = new Map();
|
|
90
|
-
for (const fact of unparented) {
|
|
91
|
-
const bucket = unparentedByTenant.get(fact.tenantId);
|
|
92
|
-
if (bucket)
|
|
93
|
-
bucket.push(fact);
|
|
94
|
-
else
|
|
95
|
-
unparentedByTenant.set(fact.tenantId, [fact]);
|
|
96
|
-
}
|
|
97
|
-
for (const [factTenant, tenantFacts] of unparentedByTenant) {
|
|
98
|
-
const clusters = clusterFacts(tenantFacts);
|
|
99
|
-
const eligibleClusters = clusters.filter((c) => c.members.length >= 3);
|
|
100
|
-
result.candidateClusters += eligibleClusters.length;
|
|
101
|
-
for (const cluster of eligibleClusters) {
|
|
102
|
-
const summary = await generateDagSummary(cluster.label, cluster.members.map((m) => m.content), opts);
|
|
103
|
-
if (!summary)
|
|
104
|
-
continue;
|
|
105
|
-
const memberCreatedAts = cluster.members.map((m) => m.created).sort();
|
|
106
|
-
// Every member of `cluster` shares factTenant by construction (the
|
|
107
|
-
// tenant partition above), so the summary lands in the same tenant
|
|
108
|
-
// as the facts it summarizes instead of always 'default'
|
|
109
|
-
// (memory.ts:535 defaults tenantId when the option is omitted).
|
|
110
|
-
const summaryEntry = createMemory(summary, {
|
|
111
|
-
layer: Layer.Semantic,
|
|
112
|
-
tags: [...cluster.entityTags, 'dag-summary'],
|
|
113
|
-
confidence: 'inferred',
|
|
114
|
-
dag_level: 2,
|
|
115
|
-
tenantId: factTenant,
|
|
116
|
-
});
|
|
117
|
-
// Schema v25: cache descendant_count + earliest/latest_at on the summary
|
|
118
|
-
// row so DAG-aware recall (docs/plans/2026-05-05-dag-recall.md Task 2)
|
|
119
|
-
// can reason about scope without walking the children.
|
|
120
|
-
summaryEntry.descendant_count = cluster.members.length;
|
|
121
|
-
summaryEntry.earliest_at = memberCreatedAts[0];
|
|
122
|
-
summaryEntry.latest_at = memberCreatedAts[memberCreatedAts.length - 1];
|
|
123
|
-
// AT1 (plan §3 containment): a refused LLM-synthesized summary skips
|
|
124
|
-
// ONLY this cluster — the sleep cycle continues to the next one. The
|
|
125
|
-
// member re-parenting writes below never run for a skipped cluster
|
|
126
|
-
// (there is no summary id to parent them under).
|
|
127
|
-
//
|
|
128
|
-
// The tombstone check itself is tenant-scoped for free: writeEntry ->
|
|
129
|
-
// writeEntryDbOnly -> upsertEntryRow calls
|
|
130
|
-
// checkRejectionGuard(db, entry.tenantId ?? 'default', ...)
|
|
131
|
-
// (store.ts:1172), reading tenantId off the entry being written. Now
|
|
132
|
-
// that summaryEntry carries factTenant instead of the implicit
|
|
133
|
-
// 'default', the guard consults that tenant's tombstones — no
|
|
134
|
-
// separate check needed here (unlike consolidate.ts's merge pass,
|
|
135
|
-
// which pre-checks via findRejectedValue because it writes through
|
|
136
|
-
// batchWriteAndDelete's bypassRejectionGuard path instead of
|
|
137
|
-
// writeEntry).
|
|
138
|
-
try {
|
|
139
|
-
writeEntry(hippoRoot, summaryEntry);
|
|
140
|
-
}
|
|
141
|
-
catch (err) {
|
|
142
|
-
if (err instanceof RejectedValueError) {
|
|
143
|
-
result.rejected++;
|
|
144
|
-
console.error(`[buildDag] cluster "${cluster.label}" skipped: summary matches a rejected value`);
|
|
145
|
-
continue;
|
|
146
|
-
}
|
|
147
|
-
throw err;
|
|
148
|
-
}
|
|
149
|
-
result.summariesCreated++;
|
|
150
|
-
for (const member of cluster.members) {
|
|
151
|
-
const updated = { ...member, dag_parent_id: summaryEntry.id };
|
|
152
|
-
writeEntry(hippoRoot, updated);
|
|
153
|
-
result.factsLinked++;
|
|
154
|
-
}
|
|
155
|
-
// v0.30 / E3 — cancel the cascade of dirty-marks fired by member
|
|
156
|
-
// writeEntry calls (E2 hook on writeEntryDbOnly at store.ts:1214).
|
|
157
|
-
// The summary we just built IS fresh, no rebuild needed. Without this,
|
|
158
|
-
// E3 in the SAME sleep cycle would re-rebuild every new summary
|
|
159
|
-
// (2x LLM cost). plan-eng-r1 HIGH must-fix.
|
|
160
|
-
clearSummaryDirtyAfterBuild(hippoRoot, summaryEntry.id, summaryEntry.tenantId, 'buildDag');
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
return result;
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* v0.30 / E3 — sleep-cycle phase that drains the dirty L2 summary queue.
|
|
167
|
-
* Thin orchestrator; the heavy lifting lives in store.ts (load + apply)
|
|
168
|
-
* and dag.ts:generateDagSummary (LLM call).
|
|
169
|
-
*
|
|
170
|
-
* Per-summary try/catch isolation (plan-eng-r1 MED must-fix) — one
|
|
171
|
-
* throwing rebuild does NOT abort the rest of the queue.
|
|
172
|
-
*
|
|
173
|
-
* Race-loser handling: applyRebuildResult's UPDATE WHERE includes
|
|
174
|
-
* AND summary_dirty=1, so concurrent sleep's second writer returns
|
|
175
|
-
* changed=false. Silent skip (neither rebuilt++ nor refused++ nor failed++).
|
|
176
|
-
*
|
|
177
|
-
* T4: applyRebuildResult returns { changed, refused } — a tombstone hit
|
|
178
|
-
* (rebuild content matches a previously-rejected value) increments
|
|
179
|
-
* `refused`, not `rebuilt`. Dirty still clears either way; only the stat
|
|
180
|
-
* split changed (docs/plans/2026-08-15-hardening-at1-followups.md T4).
|
|
181
|
-
*/
|
|
182
|
-
export async function rebuildDirtySummaries(hippoRoot, opts) {
|
|
183
|
-
const cap = opts.cap ?? 20;
|
|
184
|
-
const dirty = loadAllDirtySummaries(hippoRoot);
|
|
185
|
-
const capped = dirty.length > cap;
|
|
186
|
-
const queue = dirty.slice(0, cap);
|
|
187
|
-
const result = {
|
|
188
|
-
attempted: queue.length,
|
|
189
|
-
rebuilt: 0,
|
|
190
|
-
refused: 0,
|
|
191
|
-
zeroChildSkipped: 0,
|
|
192
|
-
failed: 0,
|
|
193
|
-
capped,
|
|
194
|
-
};
|
|
195
|
-
for (const [index, summary] of queue.entries()) {
|
|
196
|
-
// Yield the macrotask queue every 25 summaries. The cap can reach 1000,
|
|
197
|
-
// and each iteration is synchronous SQLite (the LLM await resolves as a
|
|
198
|
-
// microtask when the response is cached/mocked), so a large batch would
|
|
199
|
-
// otherwise starve timers and IPC for the whole rebuild: server
|
|
200
|
-
// keep-alive pings in production, Vitest's birpc heartbeat in tests
|
|
201
|
-
// (hardcoded 60s upstream, vitest-dev/vitest#8164).
|
|
202
|
-
if (index > 0 && index % 25 === 0) {
|
|
203
|
-
await new Promise((resolve) => setImmediate(resolve));
|
|
204
|
-
}
|
|
205
|
-
try {
|
|
206
|
-
const children = loadChildrenOfSummary(hippoRoot, summary.id, summary.tenantId);
|
|
207
|
-
if (children.length === 0) {
|
|
208
|
-
// Zero-child case: clear dirty + zero counts, no LLM call, no rebuild_count bump.
|
|
209
|
-
const { changed } = applyRebuildResult(hippoRoot, summary, {
|
|
210
|
-
content: summary.content,
|
|
211
|
-
descendant_count: 0,
|
|
212
|
-
earliest_at: null,
|
|
213
|
-
latest_at: null,
|
|
214
|
-
bumpRebuildCount: false,
|
|
215
|
-
zeroChildren: true,
|
|
216
|
-
actor: 'sleep',
|
|
217
|
-
});
|
|
218
|
-
if (changed)
|
|
219
|
-
result.zeroChildSkipped++;
|
|
220
|
-
// changed=false → race lost / row vanished; silently skip. `refused`
|
|
221
|
-
// is always false here — applyRebuildResult only checks the
|
|
222
|
-
// tombstone when bumpRebuildCount is true (store.ts:3398).
|
|
223
|
-
continue;
|
|
224
|
-
}
|
|
225
|
-
// Derive label from summary's existing entity tags (mirrors clusterFacts)
|
|
226
|
-
const entityTags = summary.tags.filter((t) => t.startsWith('speaker:') || t.startsWith('topic:'));
|
|
227
|
-
const label = entityTags.length > 0
|
|
228
|
-
? entityTags.map((t) => t.split(':')[1]).join(': ')
|
|
229
|
-
: summary.content.slice(0, 40);
|
|
230
|
-
const newContent = await generateDagSummary(label, children.map((c) => c.content), opts);
|
|
231
|
-
if (!newContent) {
|
|
232
|
-
// LLM null / fetch error → leave dirty for next cycle
|
|
233
|
-
result.failed++;
|
|
234
|
-
continue;
|
|
235
|
-
}
|
|
236
|
-
const childCreatedAts = children.map((c) => c.created).sort();
|
|
237
|
-
const { changed, refused } = applyRebuildResult(hippoRoot, summary, {
|
|
238
|
-
content: newContent,
|
|
239
|
-
descendant_count: children.length,
|
|
240
|
-
earliest_at: childCreatedAts[0],
|
|
241
|
-
latest_at: childCreatedAts[childCreatedAts.length - 1],
|
|
242
|
-
bumpRebuildCount: true,
|
|
243
|
-
zeroChildren: false,
|
|
244
|
-
actor: 'sleep',
|
|
245
|
-
});
|
|
246
|
-
if (refused) {
|
|
247
|
-
result.refused++;
|
|
248
|
-
}
|
|
249
|
-
else if (changed) {
|
|
250
|
-
result.rebuilt++;
|
|
251
|
-
}
|
|
252
|
-
// changed=false (refused also false) → race lost; not failure, not
|
|
253
|
-
// success, silently skip
|
|
254
|
-
}
|
|
255
|
-
catch (err) {
|
|
256
|
-
// Per-summary failure isolation — one throw doesn't abort the queue.
|
|
257
|
-
// independent-review MED #2 fold: log enough to triage in production
|
|
258
|
-
// (audit() wraps its own writes try/catch per store.ts:2566, so a
|
|
259
|
-
// throw here is exotic: SQLite I/O error, prepare failure, etc).
|
|
260
|
-
result.failed++;
|
|
261
|
-
// eslint-disable-next-line no-console
|
|
262
|
-
console.error(`[rebuildDirtySummaries] summary ${summary.id} (tenant ${summary.tenantId}) failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
return result;
|
|
266
|
-
}
|
|
267
|
-
/**
|
|
268
|
-
* v0.30 / E5 — build L3 entity profiles by clustering L2 summaries with
|
|
269
|
-
* shared entity tags. Threshold 2+ L2s per entity. Mirrors buildDag L1->L2
|
|
270
|
-
* pattern, one level up.
|
|
271
|
-
*
|
|
272
|
-
* Born-dirty cancellation (E3 lesson): after linking L2 children to the new
|
|
273
|
-
* L3 (each link write fires E2 hook on L3 via widened markSummaryDirtyInTx),
|
|
274
|
-
* call clearSummaryDirtyAfterBuild with source='buildEntityProfiles-clean'
|
|
275
|
-
* so E3 sleep-cycle rebuild doesn't re-rebuild the freshly-built L3 this
|
|
276
|
-
* same cycle.
|
|
277
|
-
*/
|
|
278
|
-
export async function buildEntityProfiles(hippoRoot, l2Summaries, opts) {
|
|
279
|
-
const result = {
|
|
280
|
-
candidateClusters: 0,
|
|
281
|
-
profilesCreated: 0,
|
|
282
|
-
l2sLinked: 0,
|
|
283
|
-
failed: 0,
|
|
284
|
-
rejected: 0,
|
|
285
|
-
};
|
|
286
|
-
// Only L2 with no L3 parent yet (avoid re-clustering already-profiled L2s).
|
|
287
|
-
const unparented = l2Summaries.filter((s) => s.dag_level === 2 && !s.dag_parent_id);
|
|
288
|
-
// independent-review HIGH #1 fold: cluster ONLY within-tenant.
|
|
289
|
-
// clusterFacts has no tenant awareness; without this partition step a
|
|
290
|
-
// multi-tenant host could form a cluster spanning tenants and produce
|
|
291
|
-
// a single L3 with tenantId='default' that doesn't belong to either
|
|
292
|
-
// child tenant. Fix: bucket by tenantId, run clusterFacts per-tenant,
|
|
293
|
-
// pass tenantId to createMemory.
|
|
294
|
-
const byTenant = new Map();
|
|
295
|
-
for (const l2 of unparented) {
|
|
296
|
-
const tid = l2.tenantId ?? 'default';
|
|
297
|
-
const list = byTenant.get(tid) ?? [];
|
|
298
|
-
list.push(l2);
|
|
299
|
-
byTenant.set(tid, list);
|
|
300
|
-
}
|
|
301
|
-
for (const [tenantId, tenantL2s] of byTenant) {
|
|
302
|
-
const clusters = clusterFacts(tenantL2s);
|
|
303
|
-
const eligible = clusters.filter((c) => c.members.length >= 2);
|
|
304
|
-
result.candidateClusters += eligible.length;
|
|
305
|
-
for (const cluster of eligible) {
|
|
306
|
-
const summary = await generateDagSummary(cluster.label, cluster.members.map((m) => m.content), opts);
|
|
307
|
-
if (!summary) {
|
|
308
|
-
result.failed++;
|
|
309
|
-
continue;
|
|
310
|
-
}
|
|
311
|
-
const memberCreatedAts = cluster.members.map((m) => m.created).sort();
|
|
312
|
-
const nowIso = new Date().toISOString();
|
|
313
|
-
const profileEntry = createMemory(summary, {
|
|
314
|
-
layer: Layer.Semantic,
|
|
315
|
-
tags: [...cluster.entityTags, 'dag-entity-profile'],
|
|
316
|
-
confidence: 'inferred',
|
|
317
|
-
dag_level: 3,
|
|
318
|
-
tenantId, // HIGH #1 fold: thread tenant explicitly
|
|
319
|
-
});
|
|
320
|
-
profileEntry.descendant_count = cluster.members.length;
|
|
321
|
-
profileEntry.earliest_at = memberCreatedAts[0];
|
|
322
|
-
profileEntry.latest_at = memberCreatedAts[memberCreatedAts.length - 1];
|
|
323
|
-
profileEntry.dag_level_3_built_at = nowIso;
|
|
324
|
-
// AT1 (plan §3 containment): per-cluster catch — skip this cluster,
|
|
325
|
-
// count, log once. The member re-linking writes below never run for a
|
|
326
|
-
// skipped cluster (mirrors buildDag above).
|
|
327
|
-
try {
|
|
328
|
-
writeEntry(hippoRoot, profileEntry);
|
|
329
|
-
}
|
|
330
|
-
catch (err) {
|
|
331
|
-
if (err instanceof RejectedValueError) {
|
|
332
|
-
result.rejected++;
|
|
333
|
-
console.error(`[buildEntityProfiles] cluster "${cluster.label}" skipped: profile matches a rejected value`);
|
|
334
|
-
continue;
|
|
335
|
-
}
|
|
336
|
-
throw err;
|
|
337
|
-
}
|
|
338
|
-
result.profilesCreated++;
|
|
339
|
-
for (const member of cluster.members) {
|
|
340
|
-
const updated = { ...member, dag_parent_id: profileEntry.id };
|
|
341
|
-
writeEntry(hippoRoot, updated);
|
|
342
|
-
result.l2sLinked++;
|
|
343
|
-
}
|
|
344
|
-
// E3 born-dirty cancellation, same dance as buildDag L161-168 but for
|
|
345
|
-
// L3. Pass source='buildEntityProfiles-clean' to distinguish in audit.
|
|
346
|
-
// Args: (root, id, tenantId, actor, source).
|
|
347
|
-
clearSummaryDirtyAfterBuild(hippoRoot, profileEntry.id, tenantId, 'buildEntityProfiles', 'buildEntityProfiles-clean');
|
|
348
|
-
}
|
|
349
|
-
}
|
|
350
|
-
return result;
|
|
351
|
-
}
|
|
352
|
-
//# sourceMappingURL=dag.js.map
|
package/dist/src/dag.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dag.js","sourceRoot":"","sources":["../../src/dag.ts"],"names":[],"mappings":"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"}
|
package/dist/src/dashboard.js
DELETED
|
@@ -1,258 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Hippo Dashboard — local web UI for memory health visualization.
|
|
3
|
-
* Serves a single-page app with memory stats, decay curves, and conflict status.
|
|
4
|
-
*
|
|
5
|
-
* Usage: hippo dashboard [--port 3333]
|
|
6
|
-
*/
|
|
7
|
-
import * as http from 'http';
|
|
8
|
-
import * as path from 'path';
|
|
9
|
-
import * as fs from 'fs';
|
|
10
|
-
import { loadAllEntries, listCards, listMemoryConflicts, readEntry, writeEntry } from './store.js';
|
|
11
|
-
import { calculateStrength, confidenceFacets } from './memory.js';
|
|
12
|
-
import { loadConfig } from './config.js';
|
|
13
|
-
import { listPeers } from './shared.js';
|
|
14
|
-
import { loadEmbeddingIndex } from './embeddings.js';
|
|
15
|
-
import { resolveTenantId } from './tenant.js';
|
|
16
|
-
import { loadCardDetail } from './card-detail.js';
|
|
17
|
-
function buildDashboardData(hippoRoot) {
|
|
18
|
-
// A5: scope dashboard to active tenant. Without this, the UI surfaces every
|
|
19
|
-
// tenant's memories on a multi-tenant deployment.
|
|
20
|
-
const tenantId = resolveTenantId({});
|
|
21
|
-
const entries = loadAllEntries(hippoRoot, tenantId);
|
|
22
|
-
const now = new Date();
|
|
23
|
-
const config = loadConfig(hippoRoot);
|
|
24
|
-
// v0.28 — fetch ALL conflict statuses (open + resolved) so the UI can
|
|
25
|
-
// render resolved conflicts as faded historical context, not just open
|
|
26
|
-
// conflicts. The open_conflicts stat below still counts only 'open' rows
|
|
27
|
-
// to preserve the existing badge meaning.
|
|
28
|
-
const conflicts = listMemoryConflicts(hippoRoot, '*');
|
|
29
|
-
// D4 v1.12.10: tenant-scope peer discovery in the dashboard (matches the
|
|
30
|
-
// tenantId already used for loadAllEntries on line 72).
|
|
31
|
-
const peers = listPeers(undefined, tenantId);
|
|
32
|
-
const embeddingIndex = loadEmbeddingIndex(hippoRoot);
|
|
33
|
-
const embeddedCount = Object.keys(embeddingIndex).length;
|
|
34
|
-
let totalStrength = 0;
|
|
35
|
-
let totalHalfLife = 0;
|
|
36
|
-
let atRisk = 0;
|
|
37
|
-
let agedOut = 0;
|
|
38
|
-
const byLayer = {};
|
|
39
|
-
const byConfidence = {};
|
|
40
|
-
const memories = entries.map((e) => {
|
|
41
|
-
const strength = calculateStrength(e, now);
|
|
42
|
-
const facets = confidenceFacets(e, now);
|
|
43
|
-
const confidence = facets.tier;
|
|
44
|
-
const ageDays = (now.getTime() - new Date(e.created).getTime()) / (1000 * 60 * 60 * 24);
|
|
45
|
-
totalStrength += strength;
|
|
46
|
-
totalHalfLife += e.half_life_days;
|
|
47
|
-
if (strength < 0.1 && !e.pinned)
|
|
48
|
-
atRisk++;
|
|
49
|
-
byLayer[e.layer] = (byLayer[e.layer] ?? 0) + 1;
|
|
50
|
-
byConfidence[confidence] = (byConfidence[confidence] ?? 0) + 1;
|
|
51
|
-
if (facets.agedOut)
|
|
52
|
-
agedOut++;
|
|
53
|
-
// Project strength at +7d and +30d
|
|
54
|
-
const future7 = { ...e, last_retrieved: e.last_retrieved };
|
|
55
|
-
const future30 = { ...e, last_retrieved: e.last_retrieved };
|
|
56
|
-
const in7d = new Date(now.getTime() + 7 * 24 * 60 * 60 * 1000);
|
|
57
|
-
const in30d = new Date(now.getTime() + 30 * 24 * 60 * 60 * 1000);
|
|
58
|
-
return {
|
|
59
|
-
id: e.id,
|
|
60
|
-
content: e.content,
|
|
61
|
-
tags: e.tags,
|
|
62
|
-
layer: e.layer,
|
|
63
|
-
strength,
|
|
64
|
-
half_life_days: e.half_life_days,
|
|
65
|
-
retrieval_count: e.retrieval_count,
|
|
66
|
-
schema_fit: e.schema_fit,
|
|
67
|
-
emotional_valence: e.emotional_valence,
|
|
68
|
-
confidence,
|
|
69
|
-
aged_out: facets.agedOut,
|
|
70
|
-
pinned: e.pinned,
|
|
71
|
-
created: e.created,
|
|
72
|
-
last_retrieved: e.last_retrieved,
|
|
73
|
-
age_days: Math.round(ageDays * 10) / 10,
|
|
74
|
-
projected_strength_7d: calculateStrength(future7, in7d),
|
|
75
|
-
projected_strength_30d: calculateStrength(future30, in30d),
|
|
76
|
-
parents: e.parents ?? [],
|
|
77
|
-
starred: Boolean(e.starred),
|
|
78
|
-
conflicts_with: e.conflicts_with ?? [],
|
|
79
|
-
};
|
|
80
|
-
});
|
|
81
|
-
return {
|
|
82
|
-
memories,
|
|
83
|
-
conflicts: conflicts.map((c) => ({
|
|
84
|
-
id: c.id,
|
|
85
|
-
memory_a_id: c.memory_a_id,
|
|
86
|
-
memory_b_id: c.memory_b_id,
|
|
87
|
-
reason: c.reason,
|
|
88
|
-
score: c.score,
|
|
89
|
-
status: c.status,
|
|
90
|
-
})),
|
|
91
|
-
stats: {
|
|
92
|
-
total: entries.length,
|
|
93
|
-
pinned: entries.filter((e) => e.pinned).length,
|
|
94
|
-
errors: entries.filter((e) => e.tags.includes('error')).length,
|
|
95
|
-
at_risk: atRisk,
|
|
96
|
-
avg_strength: entries.length > 0 ? totalStrength / entries.length : 0,
|
|
97
|
-
avg_half_life: entries.length > 0 ? totalHalfLife / entries.length : 0,
|
|
98
|
-
by_layer: byLayer,
|
|
99
|
-
by_confidence: byConfidence,
|
|
100
|
-
aged_out: agedOut,
|
|
101
|
-
embedding_coverage: entries.length > 0 ? embeddedCount / entries.length : 0,
|
|
102
|
-
// v0.28 — open_conflicts must count only 'open' rows now that
|
|
103
|
-
// `conflicts` includes all statuses. Preserves the existing badge
|
|
104
|
-
// meaning (plan-eng-critic R1 must-fix #2).
|
|
105
|
-
open_conflicts: conflicts.filter((c) => c.status === 'open').length,
|
|
106
|
-
},
|
|
107
|
-
peers,
|
|
108
|
-
config: {
|
|
109
|
-
defaultHalfLifeDays: config.defaultHalfLifeDays,
|
|
110
|
-
defaultBudget: config.defaultBudget,
|
|
111
|
-
embeddingsEnabled: config.embeddings.enabled,
|
|
112
|
-
},
|
|
113
|
-
};
|
|
114
|
-
}
|
|
115
|
-
const MIME_TYPES = {
|
|
116
|
-
'.html': 'text/html; charset=utf-8',
|
|
117
|
-
'.js': 'application/javascript; charset=utf-8',
|
|
118
|
-
'.css': 'text/css; charset=utf-8',
|
|
119
|
-
'.json': 'application/json; charset=utf-8',
|
|
120
|
-
'.png': 'image/png',
|
|
121
|
-
'.svg': 'image/svg+xml',
|
|
122
|
-
'.ico': 'image/x-icon',
|
|
123
|
-
'.woff2': 'font/woff2',
|
|
124
|
-
};
|
|
125
|
-
// Binds 127.0.0.1 only; refusing other Hosts closes the DNS-rebinding route.
|
|
126
|
-
const LOOPBACK_HOST = /^(localhost|127\.0\.0\.1)(:\d+)?$/i;
|
|
127
|
-
function isStaticFileExtension(ext) {
|
|
128
|
-
return Object.hasOwn(MIME_TYPES, ext);
|
|
129
|
-
}
|
|
130
|
-
function jsonResponse(res, data, status = 200) {
|
|
131
|
-
const body = JSON.stringify(data);
|
|
132
|
-
res.writeHead(status, {
|
|
133
|
-
'Content-Type': 'application/json; charset=utf-8',
|
|
134
|
-
});
|
|
135
|
-
res.end(body);
|
|
136
|
-
}
|
|
137
|
-
function serveStaticFile(res, filePath) {
|
|
138
|
-
const ext = path.extname(filePath).toLowerCase();
|
|
139
|
-
if (!isStaticFileExtension(ext))
|
|
140
|
-
return false;
|
|
141
|
-
const mime = MIME_TYPES[ext];
|
|
142
|
-
try {
|
|
143
|
-
const content = fs.readFileSync(filePath);
|
|
144
|
-
res.writeHead(200, {
|
|
145
|
-
'Content-Type': mime,
|
|
146
|
-
});
|
|
147
|
-
res.end(content);
|
|
148
|
-
return true;
|
|
149
|
-
}
|
|
150
|
-
catch {
|
|
151
|
-
return false;
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
export function serveDashboard(hippoRoot, port = 3333) {
|
|
155
|
-
const distUiDir = path.resolve(import.meta.dirname, '..', 'dist-ui');
|
|
156
|
-
const hasDistUi = fs.existsSync(path.join(distUiDir, 'index.html'));
|
|
157
|
-
const handleRequest = (req, res) => {
|
|
158
|
-
const host = req.headers.host;
|
|
159
|
-
if (host !== undefined && !LOOPBACK_HOST.test(host)) {
|
|
160
|
-
res.writeHead(403, { 'Content-Type': 'text/plain' });
|
|
161
|
-
res.end('Forbidden');
|
|
162
|
-
return;
|
|
163
|
-
}
|
|
164
|
-
const url = new URL(req.url ?? '/', `http://${req.headers.host ?? 'localhost'}`);
|
|
165
|
-
const pathname = url.pathname;
|
|
166
|
-
// --- API routes ---
|
|
167
|
-
if (pathname.startsWith('/api/')) {
|
|
168
|
-
// POST /api/star/:id - toggle starred on a memory
|
|
169
|
-
const starMatch = pathname.match(/^\/api\/star\/([A-Za-z0-9_\-]+)$/);
|
|
170
|
-
if (starMatch && req.method === 'POST') {
|
|
171
|
-
const id = starMatch[1];
|
|
172
|
-
const entry = readEntry(hippoRoot, id, resolveTenantId({}));
|
|
173
|
-
if (!entry)
|
|
174
|
-
return jsonResponse(res, { error: 'Not found' }, 404);
|
|
175
|
-
entry.starred = !entry.starred;
|
|
176
|
-
writeEntry(hippoRoot, entry);
|
|
177
|
-
return jsonResponse(res, { id, starred: entry.starred });
|
|
178
|
-
}
|
|
179
|
-
if (pathname === '/api/cards' && req.method === 'GET') {
|
|
180
|
-
return jsonResponse(res, { cards: listCards(hippoRoot, resolveTenantId({})) });
|
|
181
|
-
}
|
|
182
|
-
const cardMatch = pathname.match(/^\/api\/cards\/([A-Za-z0-9_-]+)$/);
|
|
183
|
-
if (cardMatch && req.method === 'GET') {
|
|
184
|
-
const detail = loadCardDetail(hippoRoot, resolveTenantId({}), cardMatch[1]);
|
|
185
|
-
return detail ? jsonResponse(res, detail) : jsonResponse(res, { error: 'Not found' }, 404);
|
|
186
|
-
}
|
|
187
|
-
const data = buildDashboardData(hippoRoot);
|
|
188
|
-
if (pathname === '/api/memories')
|
|
189
|
-
return jsonResponse(res, data.memories);
|
|
190
|
-
if (pathname === '/api/stats')
|
|
191
|
-
return jsonResponse(res, data.stats);
|
|
192
|
-
if (pathname === '/api/conflicts')
|
|
193
|
-
return jsonResponse(res, data.conflicts);
|
|
194
|
-
if (pathname === '/api/peers')
|
|
195
|
-
return jsonResponse(res, data.peers);
|
|
196
|
-
if (pathname === '/api/config')
|
|
197
|
-
return jsonResponse(res, data.config);
|
|
198
|
-
if (pathname === '/api/embeddings') {
|
|
199
|
-
const index = loadEmbeddingIndex(hippoRoot);
|
|
200
|
-
return jsonResponse(res, index);
|
|
201
|
-
}
|
|
202
|
-
return jsonResponse(res, { error: 'Not found' }, 404);
|
|
203
|
-
}
|
|
204
|
-
// --- Static file serving from dist-ui/ ---
|
|
205
|
-
if (hasDistUi) {
|
|
206
|
-
// Normalize and prevent path traversal
|
|
207
|
-
const safePath = path.normalize(pathname).replace(/^(\.\.[/\\])+/, '');
|
|
208
|
-
const filePath = path.join(distUiDir, safePath);
|
|
209
|
-
// Block traversal outside dist-ui
|
|
210
|
-
if (!filePath.startsWith(distUiDir)) {
|
|
211
|
-
res.writeHead(403, { 'Content-Type': 'text/plain' });
|
|
212
|
-
res.end('Forbidden');
|
|
213
|
-
return;
|
|
214
|
-
}
|
|
215
|
-
// Try exact file
|
|
216
|
-
if (fs.existsSync(filePath) && fs.statSync(filePath).isFile()) {
|
|
217
|
-
if (serveStaticFile(res, filePath))
|
|
218
|
-
return;
|
|
219
|
-
}
|
|
220
|
-
// SPA fallback: serve index.html for non-file routes
|
|
221
|
-
const indexPath = path.join(distUiDir, 'index.html');
|
|
222
|
-
if (serveStaticFile(res, indexPath))
|
|
223
|
-
return;
|
|
224
|
-
}
|
|
225
|
-
// --- SPA not built: prompt to build (the dashboardHTML SSR fallback
|
|
226
|
-
// was removed in the hybrid-v4 revamp E1 since dist-ui/ is now the
|
|
227
|
-
// sole UI surface). ---
|
|
228
|
-
res.writeHead(404, { 'Content-Type': 'text/html; charset=utf-8' });
|
|
229
|
-
res.end(`<!doctype html>
|
|
230
|
-
<html lang="en"><head><title>Hippo Dashboard</title><meta charset="utf-8"></head>
|
|
231
|
-
<body style="font-family:Georgia,'Palatino Linotype',serif;max-width:640px;margin:60px auto;padding:24px;line-height:1.6;background:#f4efe6;color:#3a3228">
|
|
232
|
-
<h1 style="color:#c45c3c">Hippo Dashboard</h1>
|
|
233
|
-
<p>The React UI bundle is not built yet. Run:</p>
|
|
234
|
-
<pre style="background:#faf7f2;padding:16px;border:1px solid #c4b9a8;border-radius:3px;font-family:Consolas,monospace">cd ui && npm install && npm run build</pre>
|
|
235
|
-
<p>Then refresh this page. The dashboard server will serve <code>dist-ui/index.html</code> automatically once present.</p>
|
|
236
|
-
</body></html>`);
|
|
237
|
-
};
|
|
238
|
-
const server = http.createServer((req, res) => {
|
|
239
|
-
try {
|
|
240
|
-
handleRequest(req, res);
|
|
241
|
-
}
|
|
242
|
-
catch (err) {
|
|
243
|
-
console.error('Dashboard request failed:', err);
|
|
244
|
-
if (res.headersSent)
|
|
245
|
-
res.end();
|
|
246
|
-
else
|
|
247
|
-
jsonResponse(res, { error: 'Internal error' }, 500);
|
|
248
|
-
}
|
|
249
|
-
});
|
|
250
|
-
server.listen(port, '127.0.0.1', () => {
|
|
251
|
-
console.log(`Hippo Dashboard running at http://localhost:${port}`);
|
|
252
|
-
if (hasDistUi)
|
|
253
|
-
console.log(`Serving React UI from ${distUiDir}`);
|
|
254
|
-
console.log('Press Ctrl+C to stop.');
|
|
255
|
-
});
|
|
256
|
-
return server;
|
|
257
|
-
}
|
|
258
|
-
//# sourceMappingURL=dashboard.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/dashboard.ts"],"names":[],"mappings":"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"}
|