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/embeddings.js
DELETED
|
@@ -1,543 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Optional embedding-based semantic search for Hippo.
|
|
3
|
-
* Uses @huggingface/transformers (local, zero API keys, ~22MB model).
|
|
4
|
-
* Falls back silently if the library is not installed.
|
|
5
|
-
*/
|
|
6
|
-
import * as fs from 'fs';
|
|
7
|
-
import * as path from 'path';
|
|
8
|
-
import { createRequire } from 'module';
|
|
9
|
-
import { loadAllEntries } from './store.js';
|
|
10
|
-
import { openHippoDb, closeHippoDb, getMeta, setMeta } from './db.js';
|
|
11
|
-
import { initializeParticle, savePhysicsState, loadPhysicsState, resetAllPhysicsState } from './physics-state.js';
|
|
12
|
-
import { loadConfig } from './config.js';
|
|
13
|
-
import { resolveEmbeddingProvider } from './embedding-provider.js';
|
|
14
|
-
// Use createRequire for synchronous module resolution check in ESM
|
|
15
|
-
const _require = createRequire(import.meta.url);
|
|
16
|
-
// Cached availability check
|
|
17
|
-
let _embeddingAvailable = null;
|
|
18
|
-
// Lazy-loaded pipeline (expensive to initialize)
|
|
19
|
-
const _pipelineInstances = new Map();
|
|
20
|
-
const _pipelineLoading = new Map();
|
|
21
|
-
export const DEFAULT_EMBEDDING_MODEL = 'Xenova/all-MiniLM-L6-v2';
|
|
22
|
-
export const EMBEDDING_MODEL_META_KEY = 'embedding_model';
|
|
23
|
-
/**
|
|
24
|
-
* Bump whenever `embeddingInputText`'s composition changes in a way that
|
|
25
|
-
* changes the resulting vectors for existing entries. Folded into the stored
|
|
26
|
-
* index identity (see `embeddingIndexIdentity`) so a text-format change is
|
|
27
|
-
* treated exactly like an embedding-model change: the next embed-touching
|
|
28
|
-
* operation detects the mismatch and reindexes automatically. Format 2 =
|
|
29
|
-
* `path:*` tags excluded (see `embeddingInputText`); format 1 (implicit, no
|
|
30
|
-
* suffix) = `${content} ${tags.join(' ')}` including path tags.
|
|
31
|
-
*/
|
|
32
|
-
export const EMBED_TEXT_FORMAT = 2;
|
|
33
|
-
/**
|
|
34
|
-
* The stored-index identity for a given embedding provider id: folds
|
|
35
|
-
* `EMBED_TEXT_FORMAT` into the provider id so index-identity comparisons
|
|
36
|
-
* automatically invalidate on either a model change OR a text-format change.
|
|
37
|
-
* This is the ONE choke point both `embeddingModelRequiresReindex` (compare
|
|
38
|
-
* side) and `saveStoredEmbeddingModel` (save side) go through — they MUST
|
|
39
|
-
* version identically, or every call reindexes in a loop (or none ever do).
|
|
40
|
-
*/
|
|
41
|
-
export function embeddingIndexIdentity(providerId) {
|
|
42
|
-
return `${providerId}#t${EMBED_TEXT_FORMAT}`;
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Build the text embedded for a memory entry: content plus its tags, joined
|
|
46
|
-
* by a space and trimmed — the same shape as the legacy
|
|
47
|
-
* `` `${e.content} ${e.tags.join(' ')}`.trim() `` composition, minus `path:*`
|
|
48
|
-
* tags.
|
|
49
|
-
*
|
|
50
|
-
* `path:*` tags are excluded because they are auto-derived from
|
|
51
|
-
* `process.cwd()` (see `extractPathTags` in cli.ts) and carry every path
|
|
52
|
-
* component of the store's location, INCLUDING the store directory name
|
|
53
|
-
* itself. That means identical content embeds to a DIFFERENT vector
|
|
54
|
-
* depending on WHERE the store happens to live — e.g. a fresh benchmark run
|
|
55
|
-
* under `tempfile.mkdtemp()` gets a new directory name (hence new path
|
|
56
|
-
* tokens, hence a new vector) every single run, even with byte-identical
|
|
57
|
-
* content ingested in byte-identical order. This was diagnosed as the
|
|
58
|
-
* DOMINANT root cause of cross-fresh-ingest recall-rank variance measured on
|
|
59
|
-
* LoCoMo (mean evidence-recall@5 stdev 0.0175 across 4 fresh re-ingests of
|
|
60
|
-
* identical data; see `benchmarks/LOCOMO_INVESTIGATION.md`, "Determinism
|
|
61
|
-
* characterization"). It is a real product defect beyond benchmarks too:
|
|
62
|
-
* retrieval semantics should not depend on a project directory's name.
|
|
63
|
-
*
|
|
64
|
-
* Only `path:*` is excluded. Other tags (`conv:`, `session:`, `speaker:`,
|
|
65
|
-
* `dia:`, `error`, `scope:`, etc.) remain embedded — they carry semantic
|
|
66
|
-
* meaning. Path relevance at recall time is already handled explicitly by
|
|
67
|
-
* the v39 scope-isolation layer (`origin_project`, `pathOverlapScore`), so
|
|
68
|
-
* embedding-level path tokens are redundant with a dedicated mechanism
|
|
69
|
-
* rather than a feature.
|
|
70
|
-
*/
|
|
71
|
-
export function embeddingInputText(entry) {
|
|
72
|
-
const tags = entry.tags.filter((t) => !t.startsWith('path:'));
|
|
73
|
-
return `${entry.content} ${tags.join(' ')}`.trim();
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* Per-model pooling dispatch for Transformers.js's feature-extraction
|
|
77
|
-
* pipeline. BGE family models were trained with CLS pooling (per BAAI's
|
|
78
|
-
* official inference code in `FlagEmbedding`); MiniLM and most sentence-
|
|
79
|
-
* transformers models use mean pooling. Unknown model ids default to mean
|
|
80
|
-
* — that is the safe choice because most third-party models adopt the
|
|
81
|
-
* sentence-transformers convention, and the alternative ('cls') silently
|
|
82
|
-
* degrades vector quality for mean-pooling models.
|
|
83
|
-
*/
|
|
84
|
-
export function poolingFor(model) {
|
|
85
|
-
return /\bbge\b/i.test(model) ? 'cls' : 'mean';
|
|
86
|
-
}
|
|
87
|
-
export function prefixFor(model, role) {
|
|
88
|
-
if (!role)
|
|
89
|
-
return '';
|
|
90
|
-
if (/\be5\b/i.test(model)) {
|
|
91
|
-
return role === 'query' ? 'query: ' : 'passage: ';
|
|
92
|
-
}
|
|
93
|
-
return '';
|
|
94
|
-
}
|
|
95
|
-
// Use Function constructor to bypass TypeScript static module resolution
|
|
96
|
-
// for optional peer dependencies that may not be installed.
|
|
97
|
-
// SAFETY: `import(s)` always resolves to a module namespace object (or rejects);
|
|
98
|
-
// Promise<object> names that honestly without claiming a specific module shape.
|
|
99
|
-
const _dynImport = new Function('s', 'return import(s)');
|
|
100
|
-
/**
|
|
101
|
-
* Check (synchronously) if @xenova/transformers or @huggingface/transformers is installed.
|
|
102
|
-
*/
|
|
103
|
-
export function isEmbeddingAvailable() {
|
|
104
|
-
if (_embeddingAvailable !== null)
|
|
105
|
-
return _embeddingAvailable;
|
|
106
|
-
try {
|
|
107
|
-
_require.resolve('@xenova/transformers');
|
|
108
|
-
_embeddingAvailable = true;
|
|
109
|
-
return true;
|
|
110
|
-
}
|
|
111
|
-
catch {
|
|
112
|
-
// fall through
|
|
113
|
-
}
|
|
114
|
-
try {
|
|
115
|
-
_require.resolve('@huggingface/transformers');
|
|
116
|
-
_embeddingAvailable = true;
|
|
117
|
-
return true;
|
|
118
|
-
}
|
|
119
|
-
catch {
|
|
120
|
-
// fall through
|
|
121
|
-
}
|
|
122
|
-
_embeddingAvailable = false;
|
|
123
|
-
return false;
|
|
124
|
-
}
|
|
125
|
-
/**
|
|
126
|
-
* Pick exactly one Transformers.js implementation before importing either.
|
|
127
|
-
*
|
|
128
|
-
* Importing both packages in one process loads incompatible native
|
|
129
|
-
* onnxruntime-node versions (Xenova v2 uses ORT 1.14; Hugging Face v4 uses a
|
|
130
|
-
* current ORT). Their finalizers can double-free an InferenceSession on exit.
|
|
131
|
-
* Prefer the maintained package shipped by Hippo, with Xenova retained only as
|
|
132
|
-
* a compatibility fallback for users who installed it themselves.
|
|
133
|
-
*/
|
|
134
|
-
function resolveTransformersPackage() {
|
|
135
|
-
try {
|
|
136
|
-
_require.resolve('@huggingface/transformers');
|
|
137
|
-
return '@huggingface/transformers';
|
|
138
|
-
}
|
|
139
|
-
catch {
|
|
140
|
-
// fall through
|
|
141
|
-
}
|
|
142
|
-
try {
|
|
143
|
-
_require.resolve('@xenova/transformers');
|
|
144
|
-
return '@xenova/transformers';
|
|
145
|
-
}
|
|
146
|
-
catch {
|
|
147
|
-
return null;
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
151
|
-
async function loadPipeline(model) {
|
|
152
|
-
if (_pipelineInstances.has(model))
|
|
153
|
-
return _pipelineInstances.get(model);
|
|
154
|
-
if (_pipelineLoading.has(model))
|
|
155
|
-
return _pipelineLoading.get(model);
|
|
156
|
-
const loading = (async () => {
|
|
157
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
158
|
-
const pkg = resolveTransformersPackage();
|
|
159
|
-
if (!pkg)
|
|
160
|
-
return null;
|
|
161
|
-
let pipelineFn = null;
|
|
162
|
-
try {
|
|
163
|
-
// SAFETY: the resolved module's shape is untyped by design (optional peer
|
|
164
|
-
// dependency); pipelineFn/mod.env are read defensively below and any
|
|
165
|
-
// failure to find a usable pipeline falls through to `return null`.
|
|
166
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
167
|
-
const mod = await _dynImport(pkg);
|
|
168
|
-
if (process.env.HIPPO_MODEL_CACHE) {
|
|
169
|
-
if (mod.env) {
|
|
170
|
-
mod.env.cacheDir = process.env.HIPPO_MODEL_CACHE;
|
|
171
|
-
mod.env.localModelPath = process.env.HIPPO_MODEL_CACHE;
|
|
172
|
-
mod.env.allowRemoteModels = false;
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
pipelineFn = mod.pipeline ?? mod.default?.pipeline;
|
|
176
|
-
}
|
|
177
|
-
catch {
|
|
178
|
-
return null;
|
|
179
|
-
}
|
|
180
|
-
if (!pipelineFn)
|
|
181
|
-
return null;
|
|
182
|
-
// The Qdrant-vendored bundle (used in egress-restricted sandboxes) ships
|
|
183
|
-
// only `onnx/model.onnx` (FP32). The HF default ships `model_quantized.onnx`
|
|
184
|
-
// too. When pointing at a local cache, pick the variant that's on disk.
|
|
185
|
-
const cacheRoot = process.env.HIPPO_MODEL_CACHE?.trim();
|
|
186
|
-
const quantized = !cacheRoot
|
|
187
|
-
|| fs.existsSync(path.join(cacheRoot, model, 'onnx', 'model_quantized.onnx'));
|
|
188
|
-
try {
|
|
189
|
-
const instance = await pipelineFn('feature-extraction', model, { quantized });
|
|
190
|
-
_pipelineInstances.set(model, instance);
|
|
191
|
-
return instance;
|
|
192
|
-
}
|
|
193
|
-
catch {
|
|
194
|
-
return null;
|
|
195
|
-
}
|
|
196
|
-
finally {
|
|
197
|
-
_pipelineLoading.delete(model);
|
|
198
|
-
}
|
|
199
|
-
})();
|
|
200
|
-
_pipelineLoading.set(model, loading);
|
|
201
|
-
return loading;
|
|
202
|
-
}
|
|
203
|
-
export function resolveEmbeddingModel(hippoRoot, explicitModel) {
|
|
204
|
-
const direct = explicitModel?.trim();
|
|
205
|
-
if (direct)
|
|
206
|
-
return direct;
|
|
207
|
-
try {
|
|
208
|
-
const configured = loadConfig(hippoRoot).embeddings.model?.trim();
|
|
209
|
-
if (configured)
|
|
210
|
-
return configured;
|
|
211
|
-
}
|
|
212
|
-
catch {
|
|
213
|
-
// Fall back to the default model when config cannot be read.
|
|
214
|
-
}
|
|
215
|
-
return DEFAULT_EMBEDDING_MODEL;
|
|
216
|
-
}
|
|
217
|
-
function loadStoredEmbeddingModel(hippoRoot) {
|
|
218
|
-
try {
|
|
219
|
-
const db = openHippoDb(hippoRoot);
|
|
220
|
-
try {
|
|
221
|
-
const model = getMeta(db, EMBEDDING_MODEL_META_KEY, '').trim();
|
|
222
|
-
return model || null;
|
|
223
|
-
}
|
|
224
|
-
finally {
|
|
225
|
-
closeHippoDb(db);
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
catch {
|
|
229
|
-
return null;
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
/**
|
|
233
|
-
* Persist the stored-index identity for `model` (see `embeddingIndexIdentity`).
|
|
234
|
-
* Versioning happens INSIDE this function, not at call sites, so every caller
|
|
235
|
-
* — current and future — gets the identity format for free. Must stay
|
|
236
|
-
* consistent with the compare side in `embeddingModelRequiresReindex`.
|
|
237
|
-
*/
|
|
238
|
-
export function saveStoredEmbeddingModel(hippoRoot, model) {
|
|
239
|
-
const db = openHippoDb(hippoRoot);
|
|
240
|
-
try {
|
|
241
|
-
setMeta(db, EMBEDDING_MODEL_META_KEY, embeddingIndexIdentity(model));
|
|
242
|
-
}
|
|
243
|
-
finally {
|
|
244
|
-
closeHippoDb(db);
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
export function resolveIndexedEmbeddingModel(hippoRoot, index = loadEmbeddingIndex(hippoRoot)) {
|
|
248
|
-
const stored = loadStoredEmbeddingModel(hippoRoot);
|
|
249
|
-
if (stored)
|
|
250
|
-
return stored;
|
|
251
|
-
return Object.keys(index).length > 0 ? DEFAULT_EMBEDDING_MODEL : null;
|
|
252
|
-
}
|
|
253
|
-
export function embeddingModelRequiresReindex(hippoRoot, model, index = loadEmbeddingIndex(hippoRoot)) {
|
|
254
|
-
const stored = resolveIndexedEmbeddingModel(hippoRoot, index);
|
|
255
|
-
return stored !== null && stored !== embeddingIndexIdentity(model);
|
|
256
|
-
}
|
|
257
|
-
async function rebuildEmbeddingIndex(entries, provider) {
|
|
258
|
-
const rebuilt = {};
|
|
259
|
-
if (entries.length === 0)
|
|
260
|
-
return rebuilt;
|
|
261
|
-
const texts = entries.map((e) => embeddingInputText(e));
|
|
262
|
-
// provider.embed batches internally; on a hard transport/auth failure it
|
|
263
|
-
// throws, so the caller aborts WITHOUT saving a partial index (atomic
|
|
264
|
-
// reindex: the old index + stored identity are preserved).
|
|
265
|
-
const vectors = await provider.embed(texts, 'passage');
|
|
266
|
-
for (let i = 0; i < entries.length; i++) {
|
|
267
|
-
const vec = vectors[i];
|
|
268
|
-
if (vec && vec.length > 0) {
|
|
269
|
-
rebuilt[entries[i].id] = vec;
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
return rebuilt;
|
|
273
|
-
}
|
|
274
|
-
function resetPhysicsFromIndex(hippoRoot, entries, index) {
|
|
275
|
-
try {
|
|
276
|
-
const db = openHippoDb(hippoRoot);
|
|
277
|
-
try {
|
|
278
|
-
resetAllPhysicsState(db, entries, index);
|
|
279
|
-
}
|
|
280
|
-
finally {
|
|
281
|
-
closeHippoDb(db);
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
catch {
|
|
285
|
-
// Physics reset is best-effort; retrieval will still fall back gracefully.
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
/**
|
|
289
|
-
* Get an embedding vector for a piece of text.
|
|
290
|
-
* Returns an empty array if transformers is not available or fails.
|
|
291
|
-
*
|
|
292
|
-
* Pass `role: 'query'` / `'passage'` to engage asymmetric prefixing for
|
|
293
|
-
* model families that require it (currently intfloat/e5-*). Omitting `role`
|
|
294
|
-
* keeps the legacy symmetric behavior (no prefix), so BGE / MiniLM callers
|
|
295
|
-
* don't need to change.
|
|
296
|
-
*/
|
|
297
|
-
export async function getEmbedding(text, model = DEFAULT_EMBEDDING_MODEL, role) {
|
|
298
|
-
if (!isEmbeddingAvailable())
|
|
299
|
-
return [];
|
|
300
|
-
try {
|
|
301
|
-
const pipe = await loadPipeline(model);
|
|
302
|
-
if (!pipe)
|
|
303
|
-
return [];
|
|
304
|
-
const prefix = prefixFor(model, role);
|
|
305
|
-
const input = prefix ? `${prefix}${text}` : text;
|
|
306
|
-
// SAFETY: pipe() is a Transformers.js feature-extraction pipeline call;
|
|
307
|
-
// its untyped output is read defensively below (only `.data`, cast on
|
|
308
|
-
// the return line to the documented Float32Array tensor shape).
|
|
309
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
310
|
-
const output = await pipe(input, { pooling: poolingFor(model), normalize: true });
|
|
311
|
-
// SAFETY: output.data is a Float32Array per the feature-extraction
|
|
312
|
-
// pipeline's documented tensor output shape.
|
|
313
|
-
return Array.from(output.data);
|
|
314
|
-
}
|
|
315
|
-
catch {
|
|
316
|
-
return [];
|
|
317
|
-
}
|
|
318
|
-
}
|
|
319
|
-
/**
|
|
320
|
-
* Cosine similarity between two vectors. Handles unnormalized vectors.
|
|
321
|
-
* Returns 0 for empty or mismatched vectors.
|
|
322
|
-
*/
|
|
323
|
-
export function cosineSimilarity(a, b) {
|
|
324
|
-
if (a.length === 0 || b.length === 0 || a.length !== b.length)
|
|
325
|
-
return 0;
|
|
326
|
-
let dot = 0;
|
|
327
|
-
let normA = 0;
|
|
328
|
-
let normB = 0;
|
|
329
|
-
for (let i = 0; i < a.length; i++) {
|
|
330
|
-
dot += a[i] * b[i];
|
|
331
|
-
normA += a[i] * a[i];
|
|
332
|
-
normB += b[i] * b[i];
|
|
333
|
-
}
|
|
334
|
-
const denom = Math.sqrt(normA) * Math.sqrt(normB);
|
|
335
|
-
if (denom < 1e-10)
|
|
336
|
-
return 0;
|
|
337
|
-
// Clamp to [-1, 1] to handle floating point drift
|
|
338
|
-
return Math.min(1, Math.max(-1, dot / denom));
|
|
339
|
-
}
|
|
340
|
-
const EMBEDDINGS_FILE = 'embeddings.json';
|
|
341
|
-
/**
|
|
342
|
-
* Load the cached embedding index from disk.
|
|
343
|
-
* Returns an empty object if the file doesn't exist or is corrupt.
|
|
344
|
-
*/
|
|
345
|
-
export function loadEmbeddingIndex(hippoRoot) {
|
|
346
|
-
const fp = path.join(hippoRoot, EMBEDDINGS_FILE);
|
|
347
|
-
if (!fs.existsSync(fp))
|
|
348
|
-
return {};
|
|
349
|
-
try {
|
|
350
|
-
// SAFETY: embeddings.json is written exclusively by saveEmbeddingIndex with
|
|
351
|
-
// this exact shape; a corrupt or foreign file is caught by the try/catch
|
|
352
|
-
// below and treated as an empty index.
|
|
353
|
-
return JSON.parse(fs.readFileSync(fp, 'utf8'));
|
|
354
|
-
}
|
|
355
|
-
catch {
|
|
356
|
-
return {};
|
|
357
|
-
}
|
|
358
|
-
}
|
|
359
|
-
/**
|
|
360
|
-
* Save the embedding index to disk.
|
|
361
|
-
*/
|
|
362
|
-
export function saveEmbeddingIndex(hippoRoot, index) {
|
|
363
|
-
const fp = path.join(hippoRoot, EMBEDDINGS_FILE);
|
|
364
|
-
const tmp = fp + '.tmp';
|
|
365
|
-
fs.writeFileSync(tmp, JSON.stringify(index), 'utf8');
|
|
366
|
-
try {
|
|
367
|
-
fs.renameSync(tmp, fp);
|
|
368
|
-
}
|
|
369
|
-
catch (err) {
|
|
370
|
-
try {
|
|
371
|
-
fs.unlinkSync(tmp);
|
|
372
|
-
}
|
|
373
|
-
catch { /* best-effort cleanup */ }
|
|
374
|
-
throw err;
|
|
375
|
-
}
|
|
376
|
-
}
|
|
377
|
-
// Mutex to serialize embedding writes and prevent read-modify-write races
|
|
378
|
-
let _embedWriteLock = Promise.resolve();
|
|
379
|
-
async function withEmbedLock(fn) {
|
|
380
|
-
let resolve;
|
|
381
|
-
const next = new Promise(r => { resolve = r; });
|
|
382
|
-
const prev = _embedWriteLock;
|
|
383
|
-
_embedWriteLock = next;
|
|
384
|
-
await prev;
|
|
385
|
-
try {
|
|
386
|
-
return await fn();
|
|
387
|
-
}
|
|
388
|
-
finally {
|
|
389
|
-
resolve();
|
|
390
|
-
}
|
|
391
|
-
}
|
|
392
|
-
/**
|
|
393
|
-
* Embed a single memory entry and cache the result in the embedding index.
|
|
394
|
-
*/
|
|
395
|
-
export async function embedMemory(hippoRoot, entry, model) {
|
|
396
|
-
const provider = resolveEmbeddingProvider(hippoRoot, { model });
|
|
397
|
-
if (!provider.isAvailable())
|
|
398
|
-
return;
|
|
399
|
-
return withEmbedLock(async () => {
|
|
400
|
-
// embedMemory is best-effort: an embedding failure (API down / bad key / 5xx)
|
|
401
|
-
// must not reject the caller's write — `getEmbedding` historically swallowed
|
|
402
|
-
// failures and returned []. The explicit `hippo embed` / `embedAll` path is
|
|
403
|
-
// where failures surface. On any failure we leave the existing index as-is.
|
|
404
|
-
try {
|
|
405
|
-
const identity = provider.id;
|
|
406
|
-
const existingIndex = loadEmbeddingIndex(hippoRoot);
|
|
407
|
-
if (embeddingModelRequiresReindex(hippoRoot, identity, existingIndex)) {
|
|
408
|
-
// L9: host-wide rebuild. The embedding index is keyed by entry.id
|
|
409
|
-
// (which is tenant-scoped) but the index itself is one per hippoRoot.
|
|
410
|
-
// Cross-tenant content equivalence is visible at the vector level.
|
|
411
|
-
// Per-tenant indices would be a larger architecture change.
|
|
412
|
-
const entries = loadAllEntries(hippoRoot);
|
|
413
|
-
const rebuiltIndex = await rebuildEmbeddingIndex(entries, provider);
|
|
414
|
-
saveEmbeddingIndex(hippoRoot, rebuiltIndex);
|
|
415
|
-
saveStoredEmbeddingModel(hippoRoot, identity);
|
|
416
|
-
resetPhysicsFromIndex(hippoRoot, entries, rebuiltIndex);
|
|
417
|
-
return;
|
|
418
|
-
}
|
|
419
|
-
const text = embeddingInputText(entry);
|
|
420
|
-
const [vector] = await provider.embed([text], 'passage');
|
|
421
|
-
if (!vector || vector.length === 0)
|
|
422
|
-
return;
|
|
423
|
-
const index = existingIndex;
|
|
424
|
-
index[entry.id] = vector;
|
|
425
|
-
saveEmbeddingIndex(hippoRoot, index);
|
|
426
|
-
saveStoredEmbeddingModel(hippoRoot, identity);
|
|
427
|
-
// Initialize physics state for this memory
|
|
428
|
-
try {
|
|
429
|
-
const db = openHippoDb(hippoRoot);
|
|
430
|
-
try {
|
|
431
|
-
const existing = loadPhysicsState(db, [entry.id]);
|
|
432
|
-
if (!existing.has(entry.id)) {
|
|
433
|
-
const particle = initializeParticle(entry, vector);
|
|
434
|
-
savePhysicsState(db, [particle]);
|
|
435
|
-
}
|
|
436
|
-
}
|
|
437
|
-
finally {
|
|
438
|
-
closeHippoDb(db);
|
|
439
|
-
}
|
|
440
|
-
}
|
|
441
|
-
catch {
|
|
442
|
-
// Physics init is best-effort — don't break embedding
|
|
443
|
-
}
|
|
444
|
-
}
|
|
445
|
-
catch {
|
|
446
|
-
// Provider failure (API down / bad key). Best-effort: leave the index as-is.
|
|
447
|
-
}
|
|
448
|
-
});
|
|
449
|
-
}
|
|
450
|
-
/**
|
|
451
|
-
* Embed all entries in hippoRoot that don't already have cached vectors.
|
|
452
|
-
* Prunes orphaned embeddings for memories that no longer exist.
|
|
453
|
-
* Returns the count of newly embedded entries.
|
|
454
|
-
*/
|
|
455
|
-
export async function embedAll(hippoRoot, model) {
|
|
456
|
-
const provider = resolveEmbeddingProvider(hippoRoot, { model });
|
|
457
|
-
if (!provider.isAvailable()) {
|
|
458
|
-
// A configured (non-disabled) API provider with a missing key is a
|
|
459
|
-
// misconfiguration, not a no-op: surface it so programmatic callers of the
|
|
460
|
-
// exported embedAll() learn nothing was written. Local-not-installed and an
|
|
461
|
-
// explicit enabled=false stay silent no-ops (best-effort / intentional).
|
|
462
|
-
const cfg = loadConfig(hippoRoot).embeddings;
|
|
463
|
-
if (provider.kind !== 'local' &&
|
|
464
|
-
cfg.enabled !== false &&
|
|
465
|
-
provider.keyEnv &&
|
|
466
|
-
!process.env[provider.keyEnv]?.trim()) {
|
|
467
|
-
throw new Error(`Embedding provider '${provider.kind}' is configured but ${provider.keyEnv} is not set.`);
|
|
468
|
-
}
|
|
469
|
-
return 0;
|
|
470
|
-
}
|
|
471
|
-
return withEmbedLock(async () => {
|
|
472
|
-
const identity = provider.id;
|
|
473
|
-
// L9: host-wide by design. embedAll backfills vectors for all tenants'
|
|
474
|
-
// entries into the per-host embedding index. Per-tenant filtering would
|
|
475
|
-
// produce partial indices and break recall.
|
|
476
|
-
const entries = loadAllEntries(hippoRoot);
|
|
477
|
-
const index = loadEmbeddingIndex(hippoRoot);
|
|
478
|
-
if (embeddingModelRequiresReindex(hippoRoot, identity, index)) {
|
|
479
|
-
const rebuiltIndex = await rebuildEmbeddingIndex(entries, provider);
|
|
480
|
-
saveEmbeddingIndex(hippoRoot, rebuiltIndex);
|
|
481
|
-
saveStoredEmbeddingModel(hippoRoot, identity);
|
|
482
|
-
resetPhysicsFromIndex(hippoRoot, entries, rebuiltIndex);
|
|
483
|
-
return Object.keys(rebuiltIndex).length;
|
|
484
|
-
}
|
|
485
|
-
let dirty = false;
|
|
486
|
-
// Prune orphaned embeddings for deleted memories
|
|
487
|
-
const activeIds = new Set(entries.map((e) => e.id));
|
|
488
|
-
for (const id of Object.keys(index)) {
|
|
489
|
-
if (!activeIds.has(id)) {
|
|
490
|
-
delete index[id];
|
|
491
|
-
dirty = true;
|
|
492
|
-
}
|
|
493
|
-
}
|
|
494
|
-
// Embed entries without a cached vector in save-checkpointed chunks.
|
|
495
|
-
// provider.embed batches internally (one HTTP request per batchSize for API
|
|
496
|
-
// providers; sequential for local). A `[]` row means that single item could
|
|
497
|
-
// not be embedded and is left for a later run (resumable). On a hard provider
|
|
498
|
-
// failure mid-backfill we persist the chunks already embedded this run rather
|
|
499
|
-
// than discarding paid progress, then stop and resume on the next run.
|
|
500
|
-
const pending = entries.filter((e) => !index[e.id]);
|
|
501
|
-
let count = 0;
|
|
502
|
-
// Initialized to `undefined` (not a known-evidence literal like `null`) so
|
|
503
|
-
// it stays a plain `unknown` binding for the arbitrary caught value below;
|
|
504
|
-
// falsy either way, so `if (backfillError)` behaves identically.
|
|
505
|
-
let backfillError = undefined;
|
|
506
|
-
const SAVE_CHUNK = 64;
|
|
507
|
-
for (let i = 0; i < pending.length; i += SAVE_CHUNK) {
|
|
508
|
-
const chunk = pending.slice(i, i + SAVE_CHUNK);
|
|
509
|
-
let vectors;
|
|
510
|
-
try {
|
|
511
|
-
vectors = await provider.embed(chunk.map((e) => embeddingInputText(e)), 'passage');
|
|
512
|
-
}
|
|
513
|
-
catch (err) {
|
|
514
|
-
// Preserve the chunks already saved this run, then surface the failure
|
|
515
|
-
// below so the explicit `hippo embed` path never reports a false success.
|
|
516
|
-
backfillError = err;
|
|
517
|
-
break;
|
|
518
|
-
}
|
|
519
|
-
let chunkDirty = false;
|
|
520
|
-
for (let j = 0; j < chunk.length; j++) {
|
|
521
|
-
const vec = vectors[j];
|
|
522
|
-
if (vec && vec.length > 0) {
|
|
523
|
-
index[chunk[j].id] = vec;
|
|
524
|
-
count++;
|
|
525
|
-
dirty = true;
|
|
526
|
-
chunkDirty = true;
|
|
527
|
-
}
|
|
528
|
-
}
|
|
529
|
-
if (chunkDirty)
|
|
530
|
-
saveEmbeddingIndex(hippoRoot, index);
|
|
531
|
-
}
|
|
532
|
-
if (dirty) {
|
|
533
|
-
saveEmbeddingIndex(hippoRoot, index);
|
|
534
|
-
}
|
|
535
|
-
saveStoredEmbeddingModel(hippoRoot, identity);
|
|
536
|
-
// Partial progress is now persisted; surface a hard backfill failure so the
|
|
537
|
-
// explicit embed path reports it (best-effort callers go via embedMemory).
|
|
538
|
-
if (backfillError)
|
|
539
|
-
throw backfillError;
|
|
540
|
-
return count;
|
|
541
|
-
});
|
|
542
|
-
}
|
|
543
|
-
//# sourceMappingURL=embeddings.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"embeddings.js","sourceRoot":"","sources":["../../src/embeddings.ts"],"names":[],"mappings":"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"}
|