hippo-memory 1.44.0 → 1.46.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 +68 -24
- package/bin/hippo.js +3 -1
- package/dist/ablation.d.ts +10 -1
- package/dist/ablation.js +17 -1
- package/dist/api.d.ts +81 -22
- package/dist/api.js +258 -49
- package/dist/audit.d.ts +2 -2
- package/dist/audit.js +9 -0
- package/dist/autolearn.d.ts +1 -1
- package/dist/autolearn.js +2 -1
- package/dist/capture-error.d.ts +20 -0
- package/dist/capture-error.js +82 -0
- package/dist/capture.d.ts +25 -8
- package/dist/capture.js +100 -5
- package/dist/cli.d.ts +9 -1
- package/dist/cli.js +531 -119
- package/dist/client.d.ts +4 -21
- package/dist/client.js +3 -112
- package/dist/config.d.ts +20 -0
- package/dist/config.js +37 -1
- package/dist/consolidate.d.ts +9 -0
- package/dist/consolidate.js +133 -46
- package/dist/dag.d.ts +1 -0
- package/dist/dag.js +10 -5
- package/dist/dashboard.js +7 -3
- package/dist/db.js +69 -24
- package/dist/dedupe.d.ts +1 -0
- package/dist/dedupe.js +4 -7
- package/dist/doctor.d.ts +34 -0
- package/dist/doctor.js +174 -0
- package/dist/dormant.d.ts +91 -0
- package/dist/dormant.js +121 -0
- package/dist/embedding-provider.js +2 -1
- package/dist/embeddings.js +81 -8
- package/dist/eval-stats.d.ts +123 -0
- package/dist/eval-stats.js +187 -0
- package/dist/extract.d.ts +2 -0
- package/dist/extract.js +9 -4
- package/dist/half-life-migration.d.ts +55 -0
- package/dist/half-life-migration.js +111 -0
- package/dist/hooks.d.ts +4 -0
- package/dist/hooks.js +47 -0
- package/dist/mcp/server.d.ts +6 -0
- package/dist/mcp/server.js +90 -48
- package/dist/memory.d.ts +18 -1
- package/dist/memory.js +33 -5
- package/dist/physics-config.js +5 -1
- package/dist/recall-scope.d.ts +24 -0
- package/dist/recall-scope.js +41 -0
- package/dist/refine-llm.js +3 -2
- package/dist/reject-flow.d.ts +3 -3
- package/dist/reject-flow.js +10 -3
- package/dist/rerankers/jev.js +3 -2
- package/dist/rerankers/llm.js +3 -2
- package/dist/search.d.ts +4 -4
- package/dist/search.js +26 -21
- package/dist/server.d.ts +5 -0
- package/dist/server.js +49 -29
- package/dist/shared.js +1 -1
- package/dist/store.d.ts +29 -11
- package/dist/store.js +197 -70
- package/dist/token-ledger.d.ts +119 -0
- package/dist/token-ledger.js +181 -0
- 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 +7 -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/memory.js
DELETED
|
@@ -1,425 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Core data model for Hippo memory entries.
|
|
3
|
-
* Based on the strength formula from PLAN.md.
|
|
4
|
-
*/
|
|
5
|
-
import { randomUUID } from 'crypto';
|
|
6
|
-
import { isDecayAblated, isOutcomeSlowAblated, isRecallBoostAblated, evalNow, } from './ablation.js';
|
|
7
|
-
export var Layer;
|
|
8
|
-
(function (Layer) {
|
|
9
|
-
Layer["Buffer"] = "buffer";
|
|
10
|
-
Layer["Episodic"] = "episodic";
|
|
11
|
-
Layer["Semantic"] = "semantic";
|
|
12
|
-
Layer["Trace"] = "trace";
|
|
13
|
-
})(Layer || (Layer = {}));
|
|
14
|
-
export const DECISION_HALF_LIFE_DAYS = 90;
|
|
15
|
-
export const INCIDENT_HALF_LIFE_DAYS = 90;
|
|
16
|
-
export const PROCESS_HALF_LIFE_DAYS = 90;
|
|
17
|
-
export const POLICY_HALF_LIFE_DAYS = 90;
|
|
18
|
-
export const SKILL_HALF_LIFE_DAYS = 90;
|
|
19
|
-
export const PROJECT_BRIEF_HALF_LIFE_DAYS = 90;
|
|
20
|
-
export const CUSTOMER_NOTE_HALF_LIFE_DAYS = 90;
|
|
21
|
-
// Emotional multipliers from PLAN.md.
|
|
22
|
-
//
|
|
23
|
-
// v1.13.5 / J5 loss-aversion calibration (Lovallo-Kahneman TFAS empirics:
|
|
24
|
-
// losses ~2x larger than equivalent gains). Defaults rebalanced:
|
|
25
|
-
// - positive (success-tagged): 1.3 -> 1.0
|
|
26
|
-
// - negative (error-tagged): 1.5 -> 2.0
|
|
27
|
-
// - critical stays at 2.0 (literal roadmap reading; J5 silent on critical;
|
|
28
|
-
// ranking signal in consolidate.ts/salience.ts/ambient.ts unchanged)
|
|
29
|
-
// - neutral stays at 1.0
|
|
30
|
-
//
|
|
31
|
-
// `negative` is further scaled per-process by HIPPO_LOSS_AVERSION_RATIO
|
|
32
|
-
// (env var, default 1.0; see getLossAversionRatio + applyLossAversionRatio).
|
|
33
|
-
const EMOTIONAL_MULTIPLIERS = {
|
|
34
|
-
neutral: 1.0,
|
|
35
|
-
positive: 1.0,
|
|
36
|
-
negative: 2.0, // error-tagged
|
|
37
|
-
critical: 2.0,
|
|
38
|
-
};
|
|
39
|
-
/**
|
|
40
|
-
* v1.13.5 / J5 — module-level lazy-cached read of HIPPO_LOSS_AVERSION_RATIO.
|
|
41
|
-
*
|
|
42
|
-
* `calculateStrength` is called per-entry inside hot recall loops
|
|
43
|
-
* (api.ts/consolidate.ts/search.ts), so a per-call `process.env` lookup
|
|
44
|
-
* would multiply N entries by M recalls of lookup cost. Lazy module-cache
|
|
45
|
-
* reads the env ONCE on first call and memoizes for the process lifetime.
|
|
46
|
-
* Test isolation via `_resetLossAversionRatioCacheForTests()` below.
|
|
47
|
-
*/
|
|
48
|
-
/**
|
|
49
|
-
* v1.13.5 minimum acceptable ratio. Below this, the negative multiplier
|
|
50
|
-
* (2.0 * ratio) becomes small enough that calculateStrength * decay can fall
|
|
51
|
-
* below `DECAY_THRESHOLD = 0.05` in `src/consolidate.ts:146`, which would
|
|
52
|
-
* permanently delete non-pinned error-tagged memories on the next sleep
|
|
53
|
-
* cycle. 0.5 is chosen as the floor because (a) it recovers the v1.13.4
|
|
54
|
-
* effective multiplier (2.0 * 0.5 = 1.0 + the negative premium, i.e. 1.5x
|
|
55
|
-
* the v1.13.4 default), and (b) below this the user is asking for LESS
|
|
56
|
-
* loss aversion than has ever shipped — that's outside the supported
|
|
57
|
-
* tuning range. See codex-review-critic round 1 P1.
|
|
58
|
-
*/
|
|
59
|
-
const LOSS_AVERSION_RATIO_MIN = 0.5;
|
|
60
|
-
/**
|
|
61
|
-
* Validation policy (v1.13.5 + independent-review round-1 HIGH + codex
|
|
62
|
-
* round-1 P1 folds):
|
|
63
|
-
* - Valid: finite numbers >= 0.5.
|
|
64
|
-
* - Invalid (silent fallback to 1.0): empty string, non-numeric,
|
|
65
|
-
* numbers below 0.5 (including 0 and negatives), NaN, +/-Infinity.
|
|
66
|
-
* Silent because opt-in env vars should not crash production recall
|
|
67
|
-
* on a typo.
|
|
68
|
-
*
|
|
69
|
-
* Why the 0.5 floor and not 0:
|
|
70
|
-
* - codex-review-critic round 1 P1: rejecting only `0` (the original
|
|
71
|
-
* HIGH fold) leaves the same silent data-loss surface for any ratio
|
|
72
|
-
* below ~0.025 (and worse for aged memories, where even ratio=0.25
|
|
73
|
-
* can produce strength < DECAY_THRESHOLD = 0.05 in consolidate.ts).
|
|
74
|
-
* Floor at the v1.13.4-equivalent (0.5) so the env var's tuning
|
|
75
|
-
* range never crosses into the deletion regime.
|
|
76
|
-
* - Users wanting LESS loss aversion than v1.13.4's 1.5 multiplier
|
|
77
|
-
* should reconsider the design intent of J5 (the calibration was
|
|
78
|
-
* toward MORE loss aversion, not less). If a future use case
|
|
79
|
-
* genuinely needs ratio < 0.5, the right path is a separate
|
|
80
|
-
* `HIPPO_NEGATIVE_MULTIPLIER` env override (deferred to J5-v2).
|
|
81
|
-
*/
|
|
82
|
-
let _lossAversionRatioCache;
|
|
83
|
-
function getLossAversionRatio() {
|
|
84
|
-
if (_lossAversionRatioCache !== undefined)
|
|
85
|
-
return _lossAversionRatioCache;
|
|
86
|
-
const raw = process.env.HIPPO_LOSS_AVERSION_RATIO;
|
|
87
|
-
if (raw === undefined || raw === '') {
|
|
88
|
-
_lossAversionRatioCache = 1.0;
|
|
89
|
-
return 1.0;
|
|
90
|
-
}
|
|
91
|
-
const parsed = Number(raw);
|
|
92
|
-
// Finite + >= 0.5 floor. Anything below 0.5 silently falls back to 1.0
|
|
93
|
-
// to avoid the consolidation-deletion vector (see JSDoc above).
|
|
94
|
-
if (!Number.isFinite(parsed) || parsed < LOSS_AVERSION_RATIO_MIN) {
|
|
95
|
-
_lossAversionRatioCache = 1.0;
|
|
96
|
-
return 1.0;
|
|
97
|
-
}
|
|
98
|
-
_lossAversionRatioCache = parsed;
|
|
99
|
-
return parsed;
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* Test-only helper. Tests that mutate `process.env.HIPPO_LOSS_AVERSION_RATIO`
|
|
103
|
-
* MUST call this in BOTH `beforeEach` AND `afterEach`:
|
|
104
|
-
* - beforeEach: clear any stale cache from a previous test before setting
|
|
105
|
-
* the env var for this test.
|
|
106
|
-
* - afterEach: clear the cache so the next test (which may not set the env
|
|
107
|
-
* var) reads the clean default instead of this test's value.
|
|
108
|
-
* See `tests/emotional-multipliers-j5.test.ts` for the canonical pattern.
|
|
109
|
-
*/
|
|
110
|
-
export function _resetLossAversionRatioCacheForTests() {
|
|
111
|
-
_lossAversionRatioCache = undefined;
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* Apply the loss-aversion ratio scalar to the `negative` multiplier ONLY.
|
|
115
|
-
* Other valences (positive, critical, neutral) pass through unchanged.
|
|
116
|
-
* `critical` is deliberately NOT scaled: J5 roadmap is silent on critical;
|
|
117
|
-
* its multiplier is left alone so the calibration only touches the
|
|
118
|
-
* specific empirical claim (TFAS 2x losses-vs-gains).
|
|
119
|
-
*/
|
|
120
|
-
function applyLossAversionRatio(valence, baseMultiplier) {
|
|
121
|
-
if (valence !== 'negative')
|
|
122
|
-
return baseMultiplier;
|
|
123
|
-
return baseMultiplier * getLossAversionRatio();
|
|
124
|
-
}
|
|
125
|
-
/**
|
|
126
|
-
* Compute the reward factor from cumulative outcome counts.
|
|
127
|
-
*
|
|
128
|
-
* reward_ratio = (positive - negative) / (positive + negative + 1)
|
|
129
|
-
* reward_factor = 1 + 0.5 * reward_ratio
|
|
130
|
-
*
|
|
131
|
-
* Range: (0.5, 1.5). Neutral (no outcomes) returns 1.0.
|
|
132
|
-
* Modulates effective half-life: memories with consistent positive outcomes
|
|
133
|
-
* decay slower; consistent negative outcomes decay faster.
|
|
134
|
-
*/
|
|
135
|
-
export function calculateRewardFactor(entry) {
|
|
136
|
-
// EVAL-ONLY ablation (see ablation.ts): the slow outcome channel.
|
|
137
|
-
if (isOutcomeSlowAblated())
|
|
138
|
-
return 1.0;
|
|
139
|
-
const pos = entry.outcome_positive ?? 0;
|
|
140
|
-
const neg = entry.outcome_negative ?? 0;
|
|
141
|
-
if (pos === 0 && neg === 0)
|
|
142
|
-
return 1.0;
|
|
143
|
-
const ratio = (pos - neg) / (pos + neg + 1);
|
|
144
|
-
return 1 + 0.5 * ratio;
|
|
145
|
-
}
|
|
146
|
-
/**
|
|
147
|
-
* Calculate current strength at a given time.
|
|
148
|
-
* strength(t) = base_strength * decay * retrieval_boost * emotional_multiplier
|
|
149
|
-
*
|
|
150
|
-
* Decay basis modes:
|
|
151
|
-
* - clock: classic wall-clock decay (daysSince / halfLife)
|
|
152
|
-
* - session: decay by sleep cycles instead of days (sessionsSince / halfLife)
|
|
153
|
-
* - adaptive: wall-clock decay with half-life scaled by session frequency
|
|
154
|
-
*
|
|
155
|
-
* Pinned memories always return 1.0 (no decay).
|
|
156
|
-
*/
|
|
157
|
-
export function calculateStrength(entry,
|
|
158
|
-
// evalNow(): the real clock unless HIPPO_FAKE_NOW is set (eval-only,
|
|
159
|
-
// simulated-time protocols; see ablation.ts). Explicit `now` always wins.
|
|
160
|
-
now = evalNow(), options = {}) {
|
|
161
|
-
if (entry.pinned)
|
|
162
|
-
return 1.0;
|
|
163
|
-
// EVAL-ONLY ablation (see ablation.ts): with recall-strengthening ablated,
|
|
164
|
-
// anchor decay at CREATION, not last_retrieved. A never-strengthened memory
|
|
165
|
-
// decays from when it was made; using last_retrieved would let clock resets
|
|
166
|
-
// persisted by PRIOR unflagged runs leak strengthening into an ablated
|
|
167
|
-
// arm's rankings (codex P2). Identity on fresh stores (created ==
|
|
168
|
-
// last_retrieved at write). Prior-run half_life increments are NOT
|
|
169
|
-
// reconstructed - see the ablation.ts caveat (fresh stores per arm).
|
|
170
|
-
const lastRetrieved = new Date(isRecallBoostAblated() ? entry.created : entry.last_retrieved);
|
|
171
|
-
const daysSince = (now.getTime() - lastRetrieved.getTime()) / (1000 * 60 * 60 * 24);
|
|
172
|
-
// Reward-proportional half-life modulation
|
|
173
|
-
const rewardFactor = calculateRewardFactor(entry);
|
|
174
|
-
let effectiveHalfLife = entry.half_life_days * rewardFactor;
|
|
175
|
-
// Guard: zero half-life causes 0/0 = NaN in the exponent
|
|
176
|
-
if (effectiveHalfLife <= 0)
|
|
177
|
-
return 0.0;
|
|
178
|
-
const basis = options.decayBasis ?? 'clock';
|
|
179
|
-
let decayExponent;
|
|
180
|
-
if (basis === 'session') {
|
|
181
|
-
// Decay by session count: each sleep cycle = 1 "day" in the decay formula.
|
|
182
|
-
// Estimate sessions since last retrieval from wall-clock time and avg interval.
|
|
183
|
-
const avgInterval = options.avgSessionIntervalDays ?? 1;
|
|
184
|
-
const sessionsSince = avgInterval > 0 ? Math.max(0, daysSince / avgInterval) : daysSince;
|
|
185
|
-
decayExponent = sessionsSince / effectiveHalfLife;
|
|
186
|
-
}
|
|
187
|
-
else if (basis === 'adaptive') {
|
|
188
|
-
// Scale half-life by session frequency: infrequent agents get longer half-lives
|
|
189
|
-
const avgInterval = options.avgSessionIntervalDays ?? 0;
|
|
190
|
-
if (avgInterval > 1) {
|
|
191
|
-
effectiveHalfLife *= avgInterval;
|
|
192
|
-
}
|
|
193
|
-
decayExponent = daysSince / effectiveHalfLife;
|
|
194
|
-
}
|
|
195
|
-
else {
|
|
196
|
-
// clock: classic wall-clock decay
|
|
197
|
-
decayExponent = daysSince / effectiveHalfLife;
|
|
198
|
-
}
|
|
199
|
-
// EVAL-ONLY ablation (see ablation.ts): decay term := 1. NOTE the [0,1]
|
|
200
|
-
// clamp below then caps retrievalBoost at baseline - see ablation.ts
|
|
201
|
-
// formula note.
|
|
202
|
-
const decay = isDecayAblated() ? 1.0 : Math.pow(0.5, decayExponent);
|
|
203
|
-
// Retrieval boost: 1 + 0.1 * log2(retrieval_count + 1)
|
|
204
|
-
// EVAL-ONLY ablation (see ablation.ts): the recall-boost flag neutralizes
|
|
205
|
-
// the READ side too, so a store with PRIOR retrieval history (counts > 0
|
|
206
|
-
// written before the flag was set) does not leak strengthening into an
|
|
207
|
-
// ablated arm's rankings (codex P2).
|
|
208
|
-
const retrievalBoost = isRecallBoostAblated()
|
|
209
|
-
? 1.0
|
|
210
|
-
: 1 + 0.1 * Math.log2(entry.retrieval_count + 1);
|
|
211
|
-
// Emotional multiplier
|
|
212
|
-
// v1.13.5 / J5: apply HIPPO_LOSS_AVERSION_RATIO to the negative multiplier
|
|
213
|
-
// ONLY (positive/critical/neutral pass through unchanged). Lazy module-cache
|
|
214
|
-
// means this is a single Map lookup + one numeric multiply, not a per-call
|
|
215
|
-
// process.env read.
|
|
216
|
-
const baseMultiplier = EMOTIONAL_MULTIPLIERS[entry.emotional_valence] ?? 1.0;
|
|
217
|
-
const emotionalMultiplier = applyLossAversionRatio(entry.emotional_valence, baseMultiplier);
|
|
218
|
-
const raw = decay * retrievalBoost * emotionalMultiplier;
|
|
219
|
-
// Clamp to [0, 1] with NaN guard
|
|
220
|
-
const clamped = Math.min(1.0, Math.max(0.0, raw));
|
|
221
|
-
return Number.isFinite(clamped) ? clamped : 0.0;
|
|
222
|
-
}
|
|
223
|
-
/**
|
|
224
|
-
* Derive half-life based on signals, as per PLAN.md table.
|
|
225
|
-
*/
|
|
226
|
-
export function deriveHalfLife(base, entry) {
|
|
227
|
-
let hl = base;
|
|
228
|
-
// Error-tagged: 2x half-life
|
|
229
|
-
if (entry.tags?.includes('error')) {
|
|
230
|
-
hl *= 2;
|
|
231
|
-
}
|
|
232
|
-
// High schema fit: consolidates faster (1.5x)
|
|
233
|
-
if (entry.schema_fit !== undefined && entry.schema_fit > 0.7) {
|
|
234
|
-
hl *= 1.5;
|
|
235
|
-
}
|
|
236
|
-
// Low schema fit: decay faster (0.5x)
|
|
237
|
-
if (entry.schema_fit !== undefined && entry.schema_fit < 0.3) {
|
|
238
|
-
hl *= 0.5;
|
|
239
|
-
}
|
|
240
|
-
return hl;
|
|
241
|
-
}
|
|
242
|
-
/**
|
|
243
|
-
* Apply outcome feedback to a memory entry.
|
|
244
|
-
*
|
|
245
|
-
* Increments outcome_positive or outcome_negative counters.
|
|
246
|
-
* The reward factor in calculateStrength() uses these counts to
|
|
247
|
-
* continuously modulate the effective half-life:
|
|
248
|
-
* reward_ratio = (pos - neg) / (pos + neg + 1)
|
|
249
|
-
* reward_factor = 1 + 0.5 * reward_ratio // range (0.5, 1.5)
|
|
250
|
-
* effective_hl = half_life_days * reward_factor
|
|
251
|
-
*
|
|
252
|
-
* No fixed half-life delta. Decay rate adjusts proportionally to
|
|
253
|
-
* cumulative reward signal, inspired by R-STDP in spiking networks.
|
|
254
|
-
*/
|
|
255
|
-
export function applyOutcome(entry, good) {
|
|
256
|
-
const updated = {
|
|
257
|
-
...entry,
|
|
258
|
-
outcome_score: good ? 1 : -1,
|
|
259
|
-
outcome_positive: (entry.outcome_positive ?? 0) + (good ? 1 : 0),
|
|
260
|
-
outcome_negative: (entry.outcome_negative ?? 0) + (good ? 0 : 1),
|
|
261
|
-
};
|
|
262
|
-
updated.strength = calculateStrength(updated);
|
|
263
|
-
return updated;
|
|
264
|
-
}
|
|
265
|
-
/**
|
|
266
|
-
* Generate a random memory ID using crypto.randomUUID().
|
|
267
|
-
*/
|
|
268
|
-
export function generateId(prefix = 'mem') {
|
|
269
|
-
return `${prefix}_${randomUUID().replace(/-/g, '').slice(0, 12)}`;
|
|
270
|
-
}
|
|
271
|
-
// Pinned and verified are exempt from ageing by policy, so this reads "aged out
|
|
272
|
-
// for trust purposes", not "old". The 30-day threshold lives here and nowhere else.
|
|
273
|
-
function isAgedOut(entry, now) {
|
|
274
|
-
if (entry.pinned || entry.confidence === 'verified')
|
|
275
|
-
return false;
|
|
276
|
-
const lastRetrieved = new Date(entry.last_retrieved);
|
|
277
|
-
return (now.getTime() - lastRetrieved.getTime()) / (1000 * 60 * 60 * 24) > 30;
|
|
278
|
-
}
|
|
279
|
-
export function confidenceFacets(entry, now = evalNow()) {
|
|
280
|
-
return { tier: entry.confidence, agedOut: isAgedOut(entry, now) };
|
|
281
|
-
}
|
|
282
|
-
// `warn` covers exactly the rows the old collapsed-value rule did: an aged-out row
|
|
283
|
-
// used to read 'stale', so warning on it separately keeps the same set.
|
|
284
|
-
export function confidenceLabel(entry, now = evalNow()) {
|
|
285
|
-
const { tier, agedOut } = confidenceFacets(entry, now);
|
|
286
|
-
return {
|
|
287
|
-
text: agedOut ? `${tier}, aged` : tier,
|
|
288
|
-
warn: agedOut || tier === 'stale' || tier === 'inferred',
|
|
289
|
-
};
|
|
290
|
-
}
|
|
291
|
-
/**
|
|
292
|
-
* Resolve the effective confidence for a memory entry.
|
|
293
|
-
* If the entry has not been retrieved in 30+ days and is not 'verified',
|
|
294
|
-
* returns 'stale'. Otherwise returns the stored confidence value.
|
|
295
|
-
*/
|
|
296
|
-
export function resolveConfidence(entry, now = evalNow()) {
|
|
297
|
-
return isAgedOut(entry, now) ? 'stale' : entry.confidence;
|
|
298
|
-
}
|
|
299
|
-
/**
|
|
300
|
-
* Create a new memory entry with defaults.
|
|
301
|
-
*/
|
|
302
|
-
export function createMemory(content, options = {}) {
|
|
303
|
-
const trimmed = content.trim();
|
|
304
|
-
if (trimmed.length < 3) {
|
|
305
|
-
throw new Error(`Memory content too short (${trimmed.length} chars, minimum 3): "${trimmed}"`);
|
|
306
|
-
}
|
|
307
|
-
const validOutcomes = ['success', 'failure', 'partial', null];
|
|
308
|
-
if (options.trace_outcome !== undefined && !validOutcomes.includes(options.trace_outcome)) {
|
|
309
|
-
throw new Error(`Invalid trace_outcome: ${options.trace_outcome}. Must be 'success', 'failure', 'partial', or null.`);
|
|
310
|
-
}
|
|
311
|
-
const now = evalNow().toISOString(); // honors HIPPO_FAKE_NOW (eval-only)
|
|
312
|
-
const layer = options.layer ?? Layer.Episodic;
|
|
313
|
-
const tags = options.tags ?? [];
|
|
314
|
-
const emotional_valence = options.emotional_valence ?? inferValence(tags);
|
|
315
|
-
const schema_fit = options.schema_fit ?? 0.5;
|
|
316
|
-
const partial = { tags, schema_fit };
|
|
317
|
-
const half_life_days = deriveHalfLife(options.baseHalfLifeDays ?? 7, partial);
|
|
318
|
-
const entry = {
|
|
319
|
-
id: generateId(layer === Layer.Semantic ? 'sem' : 'mem'),
|
|
320
|
-
created: now,
|
|
321
|
-
last_retrieved: now,
|
|
322
|
-
retrieval_count: 0,
|
|
323
|
-
strength: 1.0,
|
|
324
|
-
half_life_days,
|
|
325
|
-
layer,
|
|
326
|
-
tags,
|
|
327
|
-
emotional_valence,
|
|
328
|
-
schema_fit,
|
|
329
|
-
source: options.source ?? 'cli',
|
|
330
|
-
outcome_score: null,
|
|
331
|
-
outcome_positive: 0,
|
|
332
|
-
outcome_negative: 0,
|
|
333
|
-
conflicts_with: [],
|
|
334
|
-
pinned: options.pinned ?? false,
|
|
335
|
-
confidence: options.confidence ?? 'verified',
|
|
336
|
-
content,
|
|
337
|
-
parents: [],
|
|
338
|
-
starred: false,
|
|
339
|
-
trace_outcome: options.trace_outcome ?? null,
|
|
340
|
-
source_session_id: options.source_session_id ?? null,
|
|
341
|
-
valid_from: options.valid_from ?? now,
|
|
342
|
-
superseded_by: null,
|
|
343
|
-
extracted_from: options.extracted_from ?? null,
|
|
344
|
-
dag_level: options.dag_level ?? 0,
|
|
345
|
-
dag_parent_id: options.dag_parent_id ?? null,
|
|
346
|
-
kind: options.kind ?? 'distilled',
|
|
347
|
-
scope: options.scope ?? null,
|
|
348
|
-
owner: options.owner ?? null,
|
|
349
|
-
artifact_ref: options.artifact_ref ?? null,
|
|
350
|
-
tenantId: options.tenantId ?? 'default',
|
|
351
|
-
};
|
|
352
|
-
// Recalculate strength with the emotional multiplier applied
|
|
353
|
-
entry.strength = calculateStrength(entry);
|
|
354
|
-
return entry;
|
|
355
|
-
}
|
|
356
|
-
/**
|
|
357
|
-
* Compute how well new content fits existing knowledge patterns.
|
|
358
|
-
* Returns 0..1 where:
|
|
359
|
-
* >0.7 = high fit (consistent with existing knowledge, consolidates faster)
|
|
360
|
-
* 0.3-0.7 = moderate fit
|
|
361
|
-
* <0.3 = novel (doesn't match existing patterns, decays faster if unused)
|
|
362
|
-
*
|
|
363
|
-
* Uses tag overlap (always available) weighted by how common each tag is.
|
|
364
|
-
* Rare shared tags signal stronger schema fit than common ones.
|
|
365
|
-
*/
|
|
366
|
-
export function computeSchemaFit(content, tags, existingEntries) {
|
|
367
|
-
if (existingEntries.length === 0)
|
|
368
|
-
return 0.5; // no schema yet, neutral
|
|
369
|
-
// Build tag frequency map across all existing entries
|
|
370
|
-
const tagFreq = new Map();
|
|
371
|
-
for (const entry of existingEntries) {
|
|
372
|
-
for (const tag of entry.tags) {
|
|
373
|
-
tagFreq.set(tag, (tagFreq.get(tag) ?? 0) + 1);
|
|
374
|
-
}
|
|
375
|
-
}
|
|
376
|
-
if (tags.length === 0 && tagFreq.size === 0)
|
|
377
|
-
return 0.5;
|
|
378
|
-
// Tag overlap: IDF-weighted Jaccard
|
|
379
|
-
// Shared rare tags matter more than shared common tags
|
|
380
|
-
let weightedOverlap = 0;
|
|
381
|
-
let totalWeight = 0;
|
|
382
|
-
const N = existingEntries.length;
|
|
383
|
-
for (const tag of tags) {
|
|
384
|
-
const freq = tagFreq.get(tag) ?? 0;
|
|
385
|
-
// IDF-weighted: rare shared tags score higher
|
|
386
|
-
const maxIdf = Math.log(N + 1) + 1;
|
|
387
|
-
if (freq > 0) {
|
|
388
|
-
const idf = Math.log(N / freq) + 1;
|
|
389
|
-
weightedOverlap += idf;
|
|
390
|
-
}
|
|
391
|
-
totalWeight += maxIdf;
|
|
392
|
-
}
|
|
393
|
-
// Scale so that matching half the tags at average IDF gives ~0.5
|
|
394
|
-
const tagScore = totalWeight > 0 ? Math.min(1, (weightedOverlap / totalWeight) * 2) : 0;
|
|
395
|
-
// Content overlap: check how many existing entries share significant tokens
|
|
396
|
-
const newTokens = new Set(content.toLowerCase().replace(/[^\w\s]/g, ' ').split(/\s+/).filter((t) => t.length > 3));
|
|
397
|
-
if (newTokens.size === 0)
|
|
398
|
-
return Math.min(1, Math.max(0, tagScore));
|
|
399
|
-
let contentMatches = 0;
|
|
400
|
-
for (const entry of existingEntries) {
|
|
401
|
-
const entryTokens = new Set(entry.content.toLowerCase().replace(/[^\w\s]/g, ' ').split(/\s+/).filter((t) => t.length > 3));
|
|
402
|
-
let shared = 0;
|
|
403
|
-
for (const token of newTokens) {
|
|
404
|
-
if (entryTokens.has(token))
|
|
405
|
-
shared++;
|
|
406
|
-
}
|
|
407
|
-
const overlap = shared / Math.max(newTokens.size, 1);
|
|
408
|
-
if (overlap > 0.2)
|
|
409
|
-
contentMatches++;
|
|
410
|
-
}
|
|
411
|
-
const contentScore = Math.min(1, contentMatches / Math.max(5, N * 0.1));
|
|
412
|
-
// Blend: 60% tag overlap, 40% content overlap
|
|
413
|
-
const fit = 0.6 * tagScore + 0.4 * contentScore;
|
|
414
|
-
return Math.min(1, Math.max(0, fit));
|
|
415
|
-
}
|
|
416
|
-
function inferValence(tags) {
|
|
417
|
-
if (tags.includes('critical'))
|
|
418
|
-
return 'critical';
|
|
419
|
-
if (tags.includes('error'))
|
|
420
|
-
return 'negative';
|
|
421
|
-
if (tags.includes('success') || tags.includes('win'))
|
|
422
|
-
return 'positive';
|
|
423
|
-
return 'neutral';
|
|
424
|
-
}
|
|
425
|
-
//# sourceMappingURL=memory.js.map
|
package/dist/src/memory.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/memory.ts"],"names":[],"mappings":"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"}
|
package/dist/src/multihop.js
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { search } from './search.js';
|
|
2
|
-
export function multihopSearch(query, entries, options = {}) {
|
|
3
|
-
const pass1 = search(query, entries, { ...options, budget: (options.budget ?? 4000) * 2 });
|
|
4
|
-
const topK = pass1.slice(0, 10);
|
|
5
|
-
if (topK.length === 0)
|
|
6
|
-
return [];
|
|
7
|
-
const entityTags = new Set();
|
|
8
|
-
for (const r of topK) {
|
|
9
|
-
for (const tag of r.entry.tags) {
|
|
10
|
-
if (tag.startsWith('speaker:') || tag.startsWith('topic:')) {
|
|
11
|
-
entityTags.add(tag);
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
const queryLower = query.toLowerCase();
|
|
16
|
-
const newEntities = [...entityTags]
|
|
17
|
-
.map((t) => t.split(':')[1])
|
|
18
|
-
.filter((e) => !queryLower.includes(e.toLowerCase()));
|
|
19
|
-
if (newEntities.length === 0)
|
|
20
|
-
return pass1;
|
|
21
|
-
const followUpQuery = newEntities.join(' ') + ' ' + query;
|
|
22
|
-
const pass2 = search(followUpQuery, entries, options);
|
|
23
|
-
const merged = new Map();
|
|
24
|
-
for (const r of [...pass1, ...pass2]) {
|
|
25
|
-
const existing = merged.get(r.entry.id);
|
|
26
|
-
if (!existing || r.score > existing.score) {
|
|
27
|
-
merged.set(r.entry.id, r);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
// T2 note: PLAIN stable score sort on purpose -- pass1/pass2 inputs are
|
|
31
|
-
// deterministically ordered (search() carries the content tail), stability
|
|
32
|
-
// inherits that, and ties keep pass-1 results ahead of pass-2 follow-ups.
|
|
33
|
-
return [...merged.values()].sort((a, b) => b.score - a.score);
|
|
34
|
-
}
|
|
35
|
-
//# sourceMappingURL=multihop.js.map
|
package/dist/src/multihop.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"multihop.js","sourceRoot":"","sources":["../../src/multihop.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAqB,MAAM,aAAa,CAAC;AAExD,MAAM,UAAU,cAAc,CAC5B,KAAa,EACb,OAAsB,EACtB,UAAgI,EAAE;IAElI,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC3F,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEhC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEjC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAC/B,IAAI,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC3D,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IACvC,MAAM,WAAW,GAAG,CAAC,GAAG,UAAU,CAAC;SAChC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SAC3B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAExD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAE3C,MAAM,aAAa,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC;IAC1D,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAEtD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAwB,CAAC;IAC/C,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACxC,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;YAC1C,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,wEAAwE;IACxE,2EAA2E;IAC3E,0EAA0E;IAC1E,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC"}
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* --owner format validation (B2 v1.12.6).
|
|
3
|
-
*
|
|
4
|
-
* Documented MEMORY_ENVELOPE.md contract: owner = `user:<id>` | `agent:<id>`
|
|
5
|
-
* with id ∈ `[A-Za-z0-9_-]+`. Pre-v1.12.6 any string was accepted, leaving
|
|
6
|
-
* the documented contract unenforced.
|
|
7
|
-
*
|
|
8
|
-
* Default: WARN-ONLY (log + accept) to preserve back-compat with existing
|
|
9
|
-
* scripted callers passing legacy owner strings. Set `HIPPO_STRICT_OWNER=1`
|
|
10
|
-
* to reject + exit. Strict mode will become the default once A5 v2 lands
|
|
11
|
-
* (see `TODOS.md` A3 follow-ups for the migration path).
|
|
12
|
-
*/
|
|
13
|
-
export const OWNER_RE = /^(user|agent):[A-Za-z0-9_-]+$/;
|
|
14
|
-
export const OWNER_CONTRACT_HINT = 'Must match ^(user|agent):[A-Za-z0-9_-]+$ (e.g. user:alice, agent:capture-bot).';
|
|
15
|
-
/**
|
|
16
|
-
* Pure validator. Returns `{ ok, value, message }`. Does NOT print or
|
|
17
|
-
* `process.exit`. The CLI wrapper below handles side effects so this is
|
|
18
|
-
* unit-testable.
|
|
19
|
-
*
|
|
20
|
-
* Behaviour:
|
|
21
|
-
* - owner undefined → ok=true, value=undefined, no message.
|
|
22
|
-
* - owner matches OWNER_RE → ok=true, value=owner.
|
|
23
|
-
* - owner doesn't match + strict=false → ok=true, value=owner (accept),
|
|
24
|
-
* message contains the warning text.
|
|
25
|
-
* - owner doesn't match + strict=true → ok=false, value=owner (echoed),
|
|
26
|
-
* message contains the error text.
|
|
27
|
-
*/
|
|
28
|
-
export function validateOwner(owner, opts = {}) {
|
|
29
|
-
if (owner === undefined || owner === null || owner === '') {
|
|
30
|
-
return { ok: true, value: undefined, message: '' };
|
|
31
|
-
}
|
|
32
|
-
if (OWNER_RE.test(owner)) {
|
|
33
|
-
return { ok: true, value: owner, message: '' };
|
|
34
|
-
}
|
|
35
|
-
if (opts.strict) {
|
|
36
|
-
return {
|
|
37
|
-
ok: false,
|
|
38
|
-
value: owner,
|
|
39
|
-
message: `Invalid --owner "${owner}". ${OWNER_CONTRACT_HINT}`,
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
return {
|
|
43
|
-
ok: true,
|
|
44
|
-
value: owner,
|
|
45
|
-
message: `[warn] --owner "${owner}" does not match the contract. ${OWNER_CONTRACT_HINT} ` +
|
|
46
|
-
`Accepting for back-compat; set HIPPO_STRICT_OWNER=1 to reject.`,
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Returns true when strict-owner enforcement is enabled via env var.
|
|
51
|
-
* Centralised here so any future bump to default-strict is one edit.
|
|
52
|
-
*/
|
|
53
|
-
export function isStrictOwnerEnv(env = process.env) {
|
|
54
|
-
return env.HIPPO_STRICT_OWNER === '1';
|
|
55
|
-
}
|
|
56
|
-
//# sourceMappingURL=owner-validation.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"owner-validation.js","sourceRoot":"","sources":["../../src/owner-validation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,CAAC,MAAM,QAAQ,GAAG,+BAA+B,CAAC;AACxD,MAAM,CAAC,MAAM,mBAAmB,GAC9B,gFAAgF,CAAC;AAUnF;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,aAAa,CAC3B,KAAgC,EAChC,OAA6B,EAAE;IAE/B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;QAC1D,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACrD,CAAC;IACD,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACjD,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE,oBAAoB,KAAK,MAAM,mBAAmB,EAAE;SAC9D,CAAC;IACJ,CAAC;IACD,OAAO;QACL,EAAE,EAAE,IAAI;QACR,KAAK,EAAE,KAAK;QACZ,OAAO,EACL,mBAAmB,KAAK,kCAAkC,mBAAmB,GAAG;YAChF,gEAAgE;KACnE,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAyB,OAAO,CAAC,GAAG;IACnE,OAAO,GAAG,CAAC,kBAAkB,KAAK,GAAG,CAAC;AACxC,CAAC"}
|
package/dist/src/path-context.js
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Extract meaningful path segments from a directory path.
|
|
3
|
-
* Returns tags like ['path:src', 'path:api', 'path:my-project'].
|
|
4
|
-
* Filters out noise (node_modules, .git, Users, home dirs, drive letters).
|
|
5
|
-
*/
|
|
6
|
-
export function extractPathTags(dirPath) {
|
|
7
|
-
const normalized = dirPath.replace(/\\/g, '/');
|
|
8
|
-
const segments = normalized.split('/').filter(Boolean);
|
|
9
|
-
const noise = new Set([
|
|
10
|
-
'users', 'home', 'documents', 'desktop', 'downloads',
|
|
11
|
-
'node_modules', '.git', '.hippo', 'dist', 'build',
|
|
12
|
-
'c:', 'd:', 'tmp', 'temp', 'var', 'usr', 'opt', 'etc',
|
|
13
|
-
'appdata', 'local', 'roaming', 'program files', 'program files (x86)',
|
|
14
|
-
]);
|
|
15
|
-
return segments
|
|
16
|
-
.filter(s => s.length >= 2 && !noise.has(s.toLowerCase()))
|
|
17
|
-
.slice(-4) // keep last 4 meaningful segments (most specific)
|
|
18
|
-
.map(s => `path:${s.toLowerCase()}`);
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Compute path overlap score between two sets of path tags.
|
|
22
|
-
* Returns 0..1 where 1 = perfect match.
|
|
23
|
-
* Normalizes by the MORE SPECIFIC side (the larger of the two tag sets),
|
|
24
|
-
* so a memory carrying only a bare/generic path tag can no longer score a
|
|
25
|
-
* full 1.0 against a deeply-nested cwd just because its own tiny tag set
|
|
26
|
-
* is fully contained in the query's — genericity is no longer rewarded.
|
|
27
|
-
*/
|
|
28
|
-
export function pathOverlapScore(memoryPathTags, currentPathTags) {
|
|
29
|
-
if (memoryPathTags.length === 0 || currentPathTags.length === 0)
|
|
30
|
-
return 0;
|
|
31
|
-
const memSet = new Set(memoryPathTags);
|
|
32
|
-
const matches = currentPathTags.filter(t => memSet.has(t)).length;
|
|
33
|
-
// Normalize by the more specific side (the larger tag set) — kills the
|
|
34
|
-
// genericity reward a memory-count-only normalization gave bare path tags.
|
|
35
|
-
return matches / Math.max(memoryPathTags.length, currentPathTags.length);
|
|
36
|
-
}
|
|
37
|
-
/** Weight applied to path overlap score when computing the recall boost multiplier. */
|
|
38
|
-
export const PATH_BOOST_WEIGHT = 0.3;
|
|
39
|
-
/**
|
|
40
|
-
* Multiplier applied to a composite recall score for path locality.
|
|
41
|
-
* Filters the memory's tags to path:* itself so call sites cannot drift.
|
|
42
|
-
* Returns 1.0..1.3.
|
|
43
|
-
*/
|
|
44
|
-
export function pathBoostMultiplier(memoryTags, currentPathTags) {
|
|
45
|
-
const memPathTags = memoryTags.filter(t => t.startsWith('path:'));
|
|
46
|
-
return 1.0 + pathOverlapScore(memPathTags, currentPathTags) * PATH_BOOST_WEIGHT;
|
|
47
|
-
}
|
|
48
|
-
//# sourceMappingURL=path-context.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"path-context.js","sourceRoot":"","sources":["../../src/path-context.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEvD,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC;QACpB,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW;QACpD,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO;QACjD,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;QACrD,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,qBAAqB;KACtE,CAAC,CAAC;IAEH,OAAO,QAAQ;SACZ,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;SACzD,KAAK,CAAC,CAAC,CAAC,CAAC,CAAE,kDAAkD;SAC7D,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AACzC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,cAAwB,EAAE,eAAyB;IAClF,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAE1E,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAElE,uEAAuE;IACvE,2EAA2E;IAC3E,OAAO,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;AAC3E,CAAC;AAED,uFAAuF;AACvF,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAErC;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,UAAoB,EAAE,eAAyB;IACjF,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;IAClE,OAAO,GAAG,GAAG,gBAAgB,CAAC,WAAW,EAAE,eAAe,CAAC,GAAG,iBAAiB,CAAC;AAClF,CAAC"}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Physics engine configuration for Hippo memory-as-physics.
|
|
3
|
-
* All constants are tunable; defaults calibrated for ~500 memory corpus.
|
|
4
|
-
*/
|
|
5
|
-
export const DEFAULT_PHYSICS_CONFIG = {
|
|
6
|
-
enabled: 'auto',
|
|
7
|
-
G_query: 2.0,
|
|
8
|
-
G_memory: 0.01,
|
|
9
|
-
K_repulsion: 0.5,
|
|
10
|
-
drag: 0.3,
|
|
11
|
-
interference_gain: 0.3,
|
|
12
|
-
momentum_weight: 0.1,
|
|
13
|
-
max_velocity: 0.1,
|
|
14
|
-
dt: 0.1,
|
|
15
|
-
substeps: 5,
|
|
16
|
-
feedback_alpha: 0.01,
|
|
17
|
-
temperature_decay: 1.0,
|
|
18
|
-
cluster_threshold: 0.7,
|
|
19
|
-
cluster_top_k: 20,
|
|
20
|
-
};
|
|
21
|
-
export function mergePhysicsConfig(partial) {
|
|
22
|
-
if (!partial)
|
|
23
|
-
return { ...DEFAULT_PHYSICS_CONFIG };
|
|
24
|
-
return { ...DEFAULT_PHYSICS_CONFIG, ...partial };
|
|
25
|
-
}
|
|
26
|
-
//# sourceMappingURL=physics-config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"physics-config.js","sourceRoot":"","sources":["../../src/physics-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAiCH,MAAM,CAAC,MAAM,sBAAsB,GAA4B;IAC7D,OAAO,EAAE,MAAM;IACf,OAAO,EAAE,GAAG;IACZ,QAAQ,EAAE,IAAI;IACd,WAAW,EAAE,GAAG;IAChB,IAAI,EAAE,GAAG;IACT,iBAAiB,EAAE,GAAG;IACtB,eAAe,EAAE,GAAG;IACpB,YAAY,EAAE,GAAG;IACjB,EAAE,EAAE,GAAG;IACP,QAAQ,EAAE,CAAC;IACX,cAAc,EAAE,IAAI;IACpB,iBAAiB,EAAE,GAAG;IACtB,iBAAiB,EAAE,GAAG;IACtB,aAAa,EAAE,EAAE;CAClB,CAAC;AAEF,MAAM,UAAU,kBAAkB,CAAC,OAAgC;IACjE,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,GAAG,sBAAsB,EAAE,CAAC;IACnD,OAAO,EAAE,GAAG,sBAAsB,EAAE,GAAG,OAAO,EAAE,CAAC;AACnD,CAAC"}
|