hippo-memory 1.70.0 → 1.71.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 +1 -1
- package/dist/agent-memories/claude-code.d.ts +4 -2
- package/dist/agent-memories/claude-code.js +14 -5
- package/dist/agent-memories/files.js +23 -12
- package/dist/agent-memories/markdown.d.ts +1 -3
- package/dist/agent-memories/markdown.js +1 -3
- package/dist/agent-memories/report.js +2 -1
- package/dist/agent-memories/sync.d.ts +4 -2
- package/dist/agent-memories/sync.js +10 -5
- package/dist/api/assemble.d.ts +7 -44
- package/dist/api/assemble.js +2 -22
- package/dist/api/audit.d.ts +5 -1
- package/dist/api/audit.js +9 -1
- package/dist/api/auth.d.ts +13 -22
- package/dist/api/auth.js +34 -24
- package/dist/api/auto-sleep.js +2 -2
- package/dist/api/availability.d.ts +2 -15
- package/dist/api/availability.js +2 -15
- package/dist/api/context-select.js +3 -4
- package/dist/api/context-types.d.ts +10 -35
- package/dist/api/context.d.ts +5 -22
- package/dist/api/context.js +21 -38
- package/dist/api/dormant.d.ts +5 -21
- package/dist/api/dormant.js +7 -26
- package/dist/api/drill-down.d.ts +7 -46
- package/dist/api/drill-down.js +5 -26
- package/dist/api/forget.d.ts +5 -24
- package/dist/api/forget.js +5 -28
- package/dist/api/graph.d.ts +8 -0
- package/dist/api/graph.js +7 -0
- package/dist/api/index.d.ts +2 -0
- package/dist/api/index.js +2 -0
- package/dist/api/instruction-detect.js +16 -5
- package/dist/api/ledger-db.d.ts +2 -1
- package/dist/api/ledger-db.js +5 -3
- package/dist/api/memories.d.ts +5 -0
- package/dist/api/memories.js +7 -0
- package/dist/api/objects.d.ts +9 -0
- package/dist/api/objects.js +11 -0
- package/dist/api/on-store.js +5 -3
- package/dist/api/predictions.d.ts +9 -0
- package/dist/api/predictions.js +18 -0
- package/dist/api/promote.d.ts +13 -17
- package/dist/api/promote.js +11 -19
- package/dist/api/prompt-hook.d.ts +4 -4
- package/dist/api/prompt-hook.js +10 -9
- package/dist/api/recall-cli.d.ts +55 -0
- package/dist/api/recall-cli.js +94 -0
- package/dist/api/recall-core.js +14 -6
- package/dist/api/recall-finish.d.ts +53 -0
- package/dist/api/recall-finish.js +30 -0
- package/dist/api/recall-history.d.ts +17 -84
- package/dist/api/recall-history.js +15 -88
- package/dist/api/recall-pipeline.d.ts +2 -3
- package/dist/api/recall-pipeline.js +16 -9
- package/dist/api/recall-types.d.ts +64 -304
- package/dist/api/recall.d.ts +5 -33
- package/dist/api/recall.js +59 -60
- package/dist/api/refine.d.ts +7 -0
- package/dist/api/refine.js +10 -0
- package/dist/api/remember-local.d.ts +57 -0
- package/dist/api/remember-local.js +90 -0
- package/dist/api/remember.d.ts +18 -1
- package/dist/api/remember.js +13 -1
- package/dist/api/sleep-run.d.ts +1 -3
- package/dist/api/sleep-run.js +17 -21
- package/dist/api/sleep.d.ts +9 -28
- package/dist/api/tokens.d.ts +3 -10
- package/dist/api/tokens.js +3 -10
- package/dist/api/types.d.ts +6 -29
- package/dist/api/types.js +4 -22
- package/dist/capture/command.d.ts +4 -12
- package/dist/capture/command.js +6 -22
- package/dist/capture/compact.d.ts +4 -15
- package/dist/capture/compact.js +16 -25
- package/dist/capture/compaction-record.js +101 -69
- package/dist/capture/compaction-spool.d.ts +1 -1
- package/dist/capture/compaction-spool.js +1 -1
- package/dist/capture/session-digest.d.ts +1 -1
- package/dist/capture/session-digest.js +13 -7
- package/dist/capture/transcript.d.ts +2 -10
- package/dist/capture/transcript.js +4 -18
- package/dist/cli/api-context.d.ts +3 -0
- package/dist/cli/api-context.js +6 -0
- package/dist/cli/audit-prune.d.ts +6 -39
- package/dist/cli/audit-prune.js +6 -39
- package/dist/cli/audit.d.ts +1 -1
- package/dist/cli/audit.js +33 -34
- package/dist/cli/auth.d.ts +2 -2
- package/dist/cli/auth.js +57 -39
- package/dist/cli/briefs.d.ts +4 -4
- package/dist/cli/briefs.js +18 -22
- package/dist/cli/card.d.ts +2 -2
- package/dist/cli/card.js +31 -32
- package/dist/cli/client.d.ts +7 -27
- package/dist/cli/client.js +24 -43
- package/dist/cli/compact-resume-payload.js +3 -2
- package/dist/cli/context.d.ts +1 -2
- package/dist/cli/context.js +12 -8
- package/dist/cli/continuity.d.ts +6 -6
- package/dist/cli/continuity.js +62 -64
- package/dist/cli/correction-latency.d.ts +2 -14
- package/dist/cli/correction-latency.js +2 -14
- package/dist/cli/curate.d.ts +13 -17
- package/dist/cli/curate.js +68 -92
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +33 -27
- package/dist/cli/decisions.d.ts +4 -4
- package/dist/cli/decisions.js +33 -47
- package/dist/cli/eval.js +15 -13
- package/dist/cli/exit.d.ts +6 -0
- package/dist/cli/exit.js +11 -0
- package/dist/cli/explain.d.ts +1 -2
- package/dist/cli/explain.js +6 -4
- package/dist/cli/flag-values.d.ts +6 -1
- package/dist/cli/flag-values.js +27 -10
- package/dist/cli/flags.d.ts +1 -0
- package/dist/cli/flags.js +1 -1
- package/dist/cli/github.d.ts +14 -0
- package/dist/{connectors/github/cli-impl.js → cli/github.js} +43 -71
- package/dist/cli/goals.d.ts +2 -2
- package/dist/cli/goals.js +46 -50
- package/dist/cli/hook-runtime.d.ts +9 -27
- package/dist/cli/hook-runtime.js +15 -31
- package/dist/cli/init.d.ts +2 -2
- package/dist/cli/init.js +6 -12
- package/dist/cli/install-steps.js +3 -12
- package/dist/cli/last-sleep.d.ts +2 -1
- package/dist/cli/last-sleep.js +3 -0
- package/dist/cli/maintenance.d.ts +4 -4
- package/dist/cli/maintenance.js +14 -19
- package/dist/cli/object-verbs.js +4 -3
- package/dist/cli/owner-validation.d.ts +5 -28
- package/dist/cli/owner-validation.js +5 -28
- package/dist/cli/playbooks.d.ts +4 -4
- package/dist/cli/playbooks.js +23 -28
- package/dist/cli/print.d.ts +2 -5
- package/dist/cli/print.js +1 -4
- package/dist/cli/projects.d.ts +2 -2
- package/dist/cli/projects.js +1 -3
- package/dist/cli/provenance-coverage.d.ts +2 -6
- package/dist/cli/provenance-coverage.js +2 -6
- package/dist/cli/quality-repair-once.js +2 -2
- package/dist/cli/recall.d.ts +2 -4
- package/dist/cli/recall.js +55 -131
- package/dist/cli/refine-llm.d.ts +5 -31
- package/dist/cli/refine-llm.js +9 -36
- package/dist/cli/remember.d.ts +3 -3
- package/dist/cli/remember.js +122 -180
- package/dist/cli/scheduler.d.ts +2 -17
- package/dist/cli/scheduler.js +12 -18
- package/dist/cli/serve.js +21 -12
- package/dist/cli/session-hooks.d.ts +10 -18
- package/dist/cli/session-hooks.js +112 -113
- package/dist/cli/setup.d.ts +4 -4
- package/dist/cli/setup.js +19 -21
- package/dist/cli/shared.d.ts +9 -23
- package/dist/cli/shared.js +9 -32
- package/dist/cli/slack.d.ts +2 -2
- package/dist/cli/slack.js +19 -23
- package/dist/cli/sleep.d.ts +3 -2
- package/dist/cli/sleep.js +15 -16
- package/dist/cli/status.d.ts +9 -12
- package/dist/cli/status.js +55 -98
- package/dist/cli/stdin.d.ts +4 -6
- package/dist/cli/stdin.js +2 -3
- package/dist/cli/transfer.d.ts +9 -9
- package/dist/cli/transfer.js +66 -89
- package/dist/cli/usage.js +11 -5
- package/dist/cli.d.ts +66 -448
- package/dist/cli.js +87 -263
- package/dist/connectors/github/backfill.d.ts +5 -25
- package/dist/connectors/github/backfill.js +14 -49
- package/dist/connectors/github/deletion.d.ts +4 -18
- package/dist/connectors/github/deletion.js +2 -15
- package/dist/connectors/github/dlq.d.ts +8 -33
- package/dist/connectors/github/dlq.js +12 -29
- package/dist/connectors/github/ingest.d.ts +2 -6
- package/dist/connectors/github/ingest.js +4 -10
- package/dist/connectors/github/octokit-client.d.ts +4 -16
- package/dist/connectors/github/octokit-client.js +27 -24
- package/dist/connectors/github/ratelimit.d.ts +3 -14
- package/dist/connectors/github/ratelimit.js +3 -14
- package/dist/connectors/github/scope.d.ts +3 -5
- package/dist/connectors/github/scope.js +3 -5
- package/dist/connectors/github/signature.d.ts +4 -26
- package/dist/connectors/github/signature.js +4 -26
- package/dist/connectors/github/tenant-routing.d.ts +2 -24
- package/dist/connectors/github/tenant-routing.js +4 -26
- package/dist/connectors/github/transform.js +2 -16
- package/dist/connectors/github/types.d.ts +3 -15
- package/dist/connectors/github/types.js +2 -9
- package/dist/connectors/github/webhook.d.ts +2 -16
- package/dist/connectors/github/webhook.js +6 -22
- package/dist/connectors/slack/backfill.d.ts +4 -17
- package/dist/connectors/slack/backfill.js +4 -13
- package/dist/connectors/slack/dlq.d.ts +2 -19
- package/dist/connectors/slack/dlq.js +2 -19
- package/dist/connectors/slack/ingest.d.ts +2 -3
- package/dist/connectors/slack/ingest.js +2 -3
- package/dist/connectors/slack/scope.d.ts +2 -8
- package/dist/connectors/slack/scope.js +2 -8
- package/dist/connectors/slack/signature.d.ts +1 -6
- package/dist/connectors/slack/tenant-routing.d.ts +2 -19
- package/dist/connectors/slack/tenant-routing.js +2 -21
- package/dist/connectors/slack/transform.d.ts +2 -18
- package/dist/connectors/slack/transform.js +2 -18
- package/dist/connectors/slack/types.d.ts +3 -9
- package/dist/connectors/slack/types.js +2 -4
- package/dist/connectors/slack/web-client.js +33 -27
- package/dist/connectors/slack/webhook.d.ts +2 -19
- package/dist/connectors/slack/webhook.js +5 -26
- package/dist/connectors/slack/workspaces.d.ts +4 -24
- package/dist/connectors/slack/workspaces.js +4 -24
- package/dist/consolidate/conflicts.js +6 -14
- package/dist/consolidate/dag-summary.d.ts +8 -0
- package/dist/consolidate/dag-summary.js +41 -0
- package/dist/consolidate/dag.d.ts +5 -28
- package/dist/consolidate/dag.js +14 -75
- package/dist/consolidate/decay.js +7 -19
- package/dist/consolidate/dedupe.d.ts +6 -52
- package/dist/consolidate/dedupe.js +13 -71
- package/dist/consolidate/flush-units.d.ts +3 -4
- package/dist/consolidate/flush-units.js +3 -3
- package/dist/consolidate/half-life-migration.d.ts +3 -26
- package/dist/consolidate/half-life-migration.js +11 -28
- package/dist/consolidate/llm-passes.js +4 -21
- package/dist/consolidate/memory-value-weights.d.ts +2 -13
- package/dist/consolidate/memory-value-weights.js +2 -13
- package/dist/consolidate/memory-value.d.ts +11 -84
- package/dist/consolidate/memory-value.js +16 -104
- package/dist/consolidate/merge.js +10 -31
- package/dist/consolidate/merged-row.js +2 -1
- package/dist/consolidate/physics-pass.js +1 -3
- package/dist/consolidate/replay.d.ts +6 -38
- package/dist/consolidate/replay.js +14 -52
- package/dist/consolidate/run.js +1 -1
- package/dist/consolidate/sleep.d.ts +1 -8
- package/dist/consolidate/sleep.js +5 -17
- package/dist/consolidate/trace.d.ts +3 -18
- package/dist/consolidate/trace.js +3 -18
- package/dist/consolidate/traces.js +6 -22
- package/dist/core/ablation.d.ts +4 -91
- package/dist/core/ablation.js +4 -91
- package/dist/core/ambient.d.ts +1 -8
- package/dist/core/ambient.js +1 -8
- package/dist/core/capture-contract.d.ts +4 -2
- package/dist/core/capture-contract.js +4 -2
- package/dist/core/card.d.ts +4 -1
- package/dist/core/card.js +8 -0
- package/dist/core/compare.d.ts +11 -67
- package/dist/core/compare.js +9 -63
- package/dist/core/config.d.ts +10 -24
- package/dist/core/config.js +13 -14
- package/dist/core/handoff.d.ts +1 -7
- package/dist/core/handoff.js +1 -7
- package/dist/core/memory-quality.js +1 -1
- package/dist/core/memory.d.ts +41 -164
- package/dist/core/memory.js +51 -221
- package/dist/core/package-root.d.ts +3 -0
- package/dist/core/package-root.js +5 -0
- package/dist/core/physics-config.d.ts +1 -4
- package/dist/core/physics-config.js +3 -8
- package/dist/core/physics.d.ts +15 -61
- package/dist/core/physics.js +59 -122
- package/dist/core/project-identity.d.ts +17 -58
- package/dist/core/project-identity.js +17 -38
- package/dist/core/project-remote.js +13 -2
- package/dist/core/raw-append-only.d.ts +5 -0
- package/dist/core/raw-append-only.js +7 -0
- package/dist/core/salience.d.ts +1 -7
- package/dist/core/salience.js +1 -7
- package/dist/dashboard/dashboard-actions.js +2 -2
- package/dist/dashboard/dashboard-snapshot.d.ts +2 -1
- package/dist/dashboard/dashboard-snapshot.js +11 -2
- package/dist/dashboard/dashboard-types.d.ts +2 -1
- package/dist/dashboard/dashboard.d.ts +1 -0
- package/dist/dashboard/dashboard.js +50 -4
- package/dist/db/busy.d.ts +1 -1
- package/dist/db/busy.js +17 -8
- package/dist/db/connect.d.ts +1 -0
- package/dist/db/connect.js +3 -3
- package/dist/db/migrate.js +3 -3
- package/dist/db/migrations/types.d.ts +2 -5
- package/dist/db/migrations/v14.js +2 -3
- package/dist/db/migrations/v15.js +2 -8
- package/dist/db/migrations/v16.js +2 -3
- package/dist/db/migrations/v17.js +2 -3
- package/dist/db/migrations/v19.js +2 -5
- package/dist/db/migrations/v20.js +2 -7
- package/dist/db/migrations/v22.js +4 -17
- package/dist/db/migrations/v23.js +3 -14
- package/dist/db/migrations/v24.js +2 -4
- package/dist/db/migrations/v25.js +3 -8
- package/dist/db/migrations/v26.js +2 -13
- package/dist/db/migrations/v27.js +3 -11
- package/dist/db/migrations/v28.js +2 -14
- package/dist/db/migrations/v29.js +4 -18
- package/dist/db/migrations/v30.js +4 -16
- package/dist/db/migrations/v31.js +2 -15
- package/dist/db/migrations/v32.js +4 -22
- package/dist/db/migrations/v33.js +2 -15
- package/dist/db/migrations/v34.js +2 -11
- package/dist/db/migrations/v35.js +2 -11
- package/dist/db/migrations/v36.js +2 -11
- package/dist/db/migrations/v37.js +8 -33
- package/dist/db/migrations/v38.js +5 -38
- package/dist/db/migrations/v39.js +9 -20
- package/dist/db/migrations/v40.js +2 -9
- package/dist/db/migrations/v41.js +2 -24
- package/dist/db/migrations/v43.js +1 -1
- package/dist/db/migrations/v44.js +2 -8
- package/dist/db/migrations/v45.js +2 -7
- package/dist/db/migrations/v47.js +2 -3
- package/dist/db/migrations/v51.js +1 -1
- package/dist/db/open.d.ts +2 -0
- package/dist/db/open.js +17 -1
- package/dist/db/physics-state.d.ts +6 -22
- package/dist/db/physics-state.js +25 -36
- package/dist/db/raw-archive-mirror-cleanup.d.ts +2 -17
- package/dist/db/raw-archive-mirror-cleanup.js +2 -17
- package/dist/db/vector-store.d.ts +2 -0
- package/dist/db/vector-store.js +8 -1
- package/dist/doctor.js +74 -19
- package/dist/entry/session-text.js +2 -1
- package/dist/eval/eval-stats.d.ts +15 -53
- package/dist/eval/eval-stats.js +12 -42
- package/dist/eval/eval-suite.d.ts +2 -13
- package/dist/eval/eval-suite.js +74 -34
- package/dist/eval/eval.d.ts +6 -24
- package/dist/eval/eval.js +7 -34
- package/dist/eval/judgment.d.ts +0 -3
- package/dist/eval/judgment.js +19 -11
- package/dist/extensions/openclaw-plugin/index.js +1 -1
- package/dist/graph/extract.d.ts +5 -27
- package/dist/graph/extract.js +7 -33
- package/dist/graph/recall.d.ts +7 -20
- package/dist/graph/recall.js +14 -76
- package/dist/graph/stream.d.ts +7 -39
- package/dist/graph/stream.js +11 -34
- package/dist/graph/view.d.ts +9 -35
- package/dist/graph/view.js +11 -39
- package/dist/hooks/codex-wrapper.js +2 -2
- package/dist/hooks/copilot.js +2 -1
- package/dist/hooks/hook-blocks.d.ts +6 -2
- package/dist/hooks/hook-blocks.js +37 -124
- package/dist/hooks/json-hooks.d.ts +4 -36
- package/dist/hooks/json-hooks.js +18 -57
- package/dist/hooks/opencode.d.ts +0 -38
- package/dist/hooks/opencode.js +9 -76
- package/dist/hooks/shared.d.ts +8 -17
- package/dist/hooks/shared.js +29 -20
- package/dist/importers/core.d.ts +12 -37
- package/dist/importers/core.js +9 -27
- package/dist/importers/markdown-parse.d.ts +8 -22
- package/dist/importers/markdown-parse.js +8 -25
- package/dist/importers/markdown.js +3 -12
- package/dist/importers/sources.js +7 -35
- package/dist/importers/vault.d.ts +2 -8
- package/dist/importers/vault.js +25 -81
- package/dist/index.d.ts +6 -2
- package/dist/index.js +6 -2
- package/dist/learn/autolearn.d.ts +14 -41
- package/dist/learn/autolearn.js +14 -41
- package/dist/learn/extract.js +2 -4
- package/dist/learn/forward-claim-detector.d.ts +6 -30
- package/dist/learn/forward-claim-detector.js +14 -66
- package/dist/learn/invalidation.d.ts +6 -18
- package/dist/learn/invalidation.js +9 -26
- package/dist/mcp/admin-tools.js +3 -5
- package/dist/mcp/memory-tools.js +4 -9
- package/dist/mcp/protocol.d.ts +8 -26
- package/dist/mcp/protocol.js +3 -6
- package/dist/mcp/recall-tools.js +3 -3
- package/dist/mcp/request.d.ts +3 -11
- package/dist/mcp/request.js +10 -26
- package/dist/mcp/server.d.ts +3 -9
- package/dist/mcp/server.js +5 -16
- package/dist/mcp/session-state.d.ts +1 -1
- package/dist/mcp/session-state.js +5 -11
- package/dist/mcp/stdio.d.ts +2 -6
- package/dist/mcp/stdio.js +48 -12
- package/dist/mcp/tools.js +5 -3
- package/dist/objects/customer-notes.d.ts +7 -42
- package/dist/objects/customer-notes.js +7 -48
- package/dist/objects/decisions.d.ts +12 -50
- package/dist/objects/decisions.js +15 -53
- package/dist/objects/incidents.d.ts +7 -38
- package/dist/objects/incidents.js +7 -41
- package/dist/objects/policies.d.ts +11 -89
- package/dist/objects/policies.js +11 -98
- package/dist/objects/processes.d.ts +7 -52
- package/dist/objects/processes.js +7 -61
- package/dist/objects/project-briefs.d.ts +11 -55
- package/dist/objects/project-briefs.js +14 -75
- package/dist/objects/skills.d.ts +7 -42
- package/dist/objects/skills.js +8 -54
- package/dist/postinstall.js +6 -19
- package/dist/predictions/planning-fallacy.d.ts +11 -34
- package/dist/rerankers/clef.js +3 -31
- package/dist/rerankers/cross-encoder.js +4 -6
- package/dist/rerankers/jev.js +9 -6
- package/dist/rerankers/llm.d.ts +2 -11
- package/dist/rerankers/llm.js +14 -14
- package/dist/rerankers/outage-warning.d.ts +2 -1
- package/dist/rerankers/outage-warning.js +2 -1
- package/dist/rerankers/remote.d.ts +1 -0
- package/dist/rerankers/remote.js +2 -0
- package/dist/rerankers/types.d.ts +2 -14
- package/dist/search/boosts.d.ts +0 -2
- package/dist/search/boosts.js +2 -2
- package/dist/search/goal-boost.d.ts +23 -0
- package/dist/search/goal-boost.js +90 -0
- package/dist/search/hybrid.d.ts +2 -0
- package/dist/search/multihop.js +2 -3
- package/dist/search/path-context.d.ts +5 -18
- package/dist/search/path-context.js +5 -18
- package/dist/search/physics-search.js +11 -8
- package/dist/search/rrf.d.ts +7 -35
- package/dist/search/rrf.js +5 -30
- package/dist/search/vector.d.ts +7 -0
- package/dist/search/vector.js +35 -5
- package/dist/server/auth.d.ts +9 -28
- package/dist/server/auth.js +32 -25
- package/dist/server/boot.d.ts +2 -21
- package/dist/server/boot.js +63 -96
- package/dist/server/client-ip.d.ts +3 -19
- package/dist/server/client-ip.js +5 -28
- package/dist/server/defaults.d.ts +3 -0
- package/dist/server/defaults.js +4 -0
- package/dist/server/key-check-bounds.d.ts +2 -1
- package/dist/server/lifecycle.d.ts +5 -4
- package/dist/server/lifecycle.js +19 -4
- package/dist/server/mcp-http.js +10 -44
- package/dist/server/rate-limit.d.ts +5 -18
- package/dist/server/rate-limit.js +4 -13
- package/dist/server/request.d.ts +4 -8
- package/dist/server/request.js +9 -17
- package/dist/server/route-table.js +42 -49
- package/dist/server/routes/admin.js +22 -28
- package/dist/server/routes/customer-notes.js +7 -12
- package/dist/server/routes/decisions.js +10 -17
- package/dist/server/routes/incidents.js +12 -20
- package/dist/server/routes/memories.js +12 -32
- package/dist/server/routes/object-routes.d.ts +0 -5
- package/dist/server/routes/object-routes.js +7 -15
- package/dist/server/routes/policies.js +10 -18
- package/dist/server/routes/predictions.js +13 -25
- package/dist/server/routes/processes.js +16 -26
- package/dist/server/routes/project-briefs.js +9 -16
- package/dist/server/routes/recall.js +10 -35
- package/dist/server/routes/skills.js +8 -18
- package/dist/server/server-detect.d.ts +9 -53
- package/dist/server/server-detect.js +24 -90
- package/dist/server/sleep-offload.js +4 -1
- package/dist/server/types.d.ts +12 -10
- package/dist/server/validation.d.ts +3 -1
- package/dist/server/validation.js +10 -23
- package/dist/server.d.ts +2 -2
- package/dist/server.js +3 -2
- package/dist/sharing/global-store.d.ts +19 -0
- package/dist/sharing/global-store.js +75 -0
- package/dist/sharing/global-sync.d.ts +6 -0
- package/dist/sharing/global-sync.js +80 -0
- package/dist/sharing/project-merge.d.ts +4 -5
- package/dist/sharing/project-merge.js +9 -7
- package/dist/sharing/scope.d.ts +4 -11
- package/dist/sharing/scope.js +4 -11
- package/dist/sharing/search-both.d.ts +60 -0
- package/dist/sharing/search-both.js +138 -0
- package/dist/sharing/share.d.ts +38 -0
- package/dist/sharing/share.js +226 -0
- package/dist/store/ambient.js +4 -9
- package/dist/store/audit-event.d.ts +4 -12
- package/dist/store/audit-event.js +4 -12
- package/dist/store/audit.d.ts +2 -5
- package/dist/store/audit.js +4 -12
- package/dist/store/auth.d.ts +6 -6
- package/dist/store/auth.js +10 -9
- package/dist/store/candidates.d.ts +20 -3
- package/dist/store/candidates.js +77 -48
- package/dist/store/card-detail.d.ts +2 -1
- package/dist/store/card-detail.js +2 -1
- package/dist/store/cards.d.ts +14 -9
- package/dist/store/cards.js +72 -126
- package/dist/store/conflicts.d.ts +4 -21
- package/dist/store/conflicts.js +71 -150
- package/dist/store/connectors/github.d.ts +10 -10
- package/dist/store/connectors/github.js +10 -10
- package/dist/store/dashboard-reads.js +4 -8
- package/dist/store/delete-and-batch.d.ts +11 -31
- package/dist/store/delete-and-batch.js +48 -64
- package/dist/store/delivery-recorder.d.ts +8 -4
- package/dist/store/delivery-recorder.js +25 -15
- package/dist/store/diagnostics.js +6 -13
- package/dist/store/dormant.d.ts +7 -29
- package/dist/store/dormant.js +15 -56
- package/dist/store/embeddings/index.d.ts +11 -80
- package/dist/store/embeddings/index.js +71 -207
- package/dist/store/embeddings/local.js +15 -32
- package/dist/store/embeddings/provider.d.ts +16 -53
- package/dist/store/embeddings/provider.js +41 -69
- package/dist/store/entry-reads.d.ts +21 -57
- package/dist/store/entry-reads.js +65 -126
- package/dist/store/entry-row.d.ts +6 -35
- package/dist/store/entry-row.js +9 -37
- package/dist/store/entry-writes.d.ts +10 -16
- package/dist/store/entry-writes.js +17 -35
- package/dist/store/goals.d.ts +3 -40
- package/dist/store/goals.js +21 -160
- package/dist/store/graph-queue.d.ts +6 -22
- package/dist/store/graph-queue.js +14 -45
- package/dist/store/graph-reads.d.ts +11 -35
- package/dist/store/graph-reads.js +20 -58
- package/dist/store/graph-rows.d.ts +3 -6
- package/dist/store/graph-rows.js +6 -9
- package/dist/store/graph-view-rows.d.ts +2 -1
- package/dist/store/graph-view-rows.js +2 -1
- package/dist/store/graph-writes.d.ts +6 -31
- package/dist/store/graph-writes.js +13 -37
- package/dist/store/half-life.d.ts +2 -1
- package/dist/store/half-life.js +14 -16
- package/dist/store/handoffs.d.ts +5 -11
- package/dist/store/handoffs.js +16 -34
- package/dist/store/index-and-stats.d.ts +6 -19
- package/dist/store/index-and-stats.js +34 -82
- package/dist/store/markdown.d.ts +2 -6
- package/dist/store/markdown.js +21 -20
- package/dist/store/mirrors.d.ts +2 -6
- package/dist/store/mirrors.js +14 -23
- package/dist/store/open.js +6 -13
- package/dist/store/planning-fallacy-evidence.d.ts +2 -30
- package/dist/store/planning-fallacy-evidence.js +8 -37
- package/dist/store/port.d.ts +82 -79
- package/dist/store/predictions.d.ts +11 -51
- package/dist/store/predictions.js +38 -119
- package/dist/{cli → store}/quality-repair.js +15 -31
- package/dist/store/raw-archive.d.ts +4 -16
- package/dist/store/raw-archive.js +14 -29
- package/dist/store/recall-scope.d.ts +19 -79
- package/dist/store/recall-scope.js +21 -82
- package/dist/store/recall-trace.d.ts +10 -77
- package/dist/store/recall-trace.js +19 -95
- package/dist/store/rejected-values.js +7 -19
- package/dist/store/rejection.d.ts +12 -58
- package/dist/store/rejection.js +13 -65
- package/dist/store/report-reads.d.ts +6 -0
- package/dist/store/report-reads.js +29 -0
- package/dist/store/rows.d.ts +9 -19
- package/dist/store/rows.js +36 -34
- package/dist/store/rule-sql.d.ts +5 -0
- package/dist/store/rule-sql.js +37 -0
- package/dist/store/search-rows.d.ts +7 -38
- package/dist/store/search-rows.js +14 -50
- package/dist/store/sessions.d.ts +10 -47
- package/dist/store/sessions.js +17 -73
- package/dist/store/sqlite/connector-events-group.js +2 -2
- package/dist/store/sqlite/entry-writes-group.js +2 -2
- package/dist/store/sqlite/error-codec.js +4 -2
- package/dist/store/sqlite/executor.d.ts +2 -1
- package/dist/store/sqlite/executor.js +2 -1
- package/dist/store/sqlite/local.d.ts +3 -3
- package/dist/store/sqlite/local.js +1 -0
- package/dist/store/sqlite/object-rows.js +6 -3
- package/dist/store/sqlite/objects-group.js +4 -2
- package/dist/store/sqlite/quarantine-group.js +2 -2
- package/dist/store/sqlite/store.d.ts +1 -4
- package/dist/store/sqlite/store.js +2 -3
- package/dist/store/sqlite/vector-reads-group.js +2 -2
- package/dist/store/sqlite/worker-jobs.js +1 -1
- package/dist/store/sqlite/worker-ops.d.ts +13 -2
- package/dist/store/sqlite/worker-ops.js +13 -2
- package/dist/store/sqlite/worker-store.js +5 -2
- package/dist/store/summaries.d.ts +10 -62
- package/dist/store/summaries.js +34 -146
- package/dist/store/summary-dirty.js +1 -1
- package/dist/store/tenant-lookup.d.ts +6 -1
- package/dist/store/tenant-lookup.js +7 -0
- package/dist/store/tenant.d.ts +2 -16
- package/dist/store/tenant.js +4 -19
- package/dist/store/token-ledger.d.ts +13 -43
- package/dist/store/token-ledger.js +19 -50
- package/dist/store/usage-reports.js +5 -13
- package/dist/store/vector-index.d.ts +46 -0
- package/dist/store/vector-index.js +170 -0
- package/dist/store/working-memory.d.ts +6 -25
- package/dist/store/working-memory.js +18 -52
- package/dist/store/yaml.d.ts +1 -5
- package/dist/store/yaml.js +2 -6
- package/dist/support-bundle.js +7 -5
- package/dist/trust/reject-flow.js +1 -3
- package/dist/util/anthropic-messages.js +14 -2
- package/dist/util/atomic-write.d.ts +2 -1
- package/dist/util/atomic-write.js +35 -4
- package/dist/util/capped-json.d.ts +6 -0
- package/dist/util/capped-json.js +46 -0
- package/dist/util/crash-handlers.d.ts +8 -1
- package/dist/util/crash-handlers.js +52 -10
- package/dist/util/env.d.ts +13 -6
- package/dist/util/env.js +14 -7
- package/dist/util/home-path.d.ts +2 -1
- package/dist/util/home-path.js +4 -2
- package/dist/util/http-retry.d.ts +3 -1
- package/dist/util/http-retry.js +26 -5
- package/dist/util/log.d.ts +3 -2
- package/dist/util/log.js +25 -9
- package/dist/util/request-scope.d.ts +2 -1
- package/dist/util/request-scope.js +2 -1
- package/dist/util/secret-detect.d.ts +5 -30
- package/dist/util/secret-detect.js +13 -39
- package/dist/util/stored-json.d.ts +1 -1
- package/dist/util/stored-json.js +1 -1
- package/dist/util/token-text.d.ts +1 -4
- package/dist/util/token-text.js +1 -4
- package/dist/util/transcript-tail.d.ts +2 -0
- package/dist/util/transcript-tail.js +24 -23
- package/dist/util/version.d.ts +5 -20
- package/dist/util/version.js +5 -20
- package/extensions/openclaw-plugin/index.ts +1 -1
- 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 +1 -1
- package/dist/connectors/github/cli-impl.d.ts +0 -25
- package/dist/sharing/shared.d.ts +0 -187
- package/dist/sharing/shared.js +0 -563
- package/dist/store/vector-writes.d.ts +0 -13
- package/dist/store/vector-writes.js +0 -89
- /package/dist/{cli → store}/quality-repair.d.ts +0 -0
package/dist/eval/eval-suite.js
CHANGED
|
@@ -1,24 +1,10 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* Creates a synthetic memory corpus with known ground truth, runs searches
|
|
5
|
-
* per feature category, and reports per-feature metrics with regression
|
|
6
|
-
* detection against a saved baseline.
|
|
7
|
-
*
|
|
8
|
-
* Design goals:
|
|
9
|
-
* - Zero API calls (no LLM judge, no embeddings)
|
|
10
|
-
* - Deterministic (fixed timestamps, content, IDs)
|
|
11
|
-
* - Fast (<60s for full suite)
|
|
12
|
-
* - Per-feature breakdown so you see exactly what a change helped/hurt
|
|
13
|
-
*/
|
|
1
|
+
/** Self-contained feature eval suite: a synthetic corpus with known ground truth, per-feature metrics and regression detection against a saved baseline.
|
|
2
|
+
* Zero API calls (no LLM judge, no embeddings), deterministic (fixed timestamps, content, IDs) and fast. */
|
|
14
3
|
import { createMemory, Layer } from '../core/memory.js';
|
|
15
4
|
import { search } from '../search/bm25-search.js';
|
|
16
5
|
import { multihopSearch } from '../search/multihop.js';
|
|
17
6
|
import { mrr, recallAtK, ndcgAtK } from './eval.js';
|
|
18
7
|
import { DAY_MS } from '../util/time.js';
|
|
19
|
-
// ---------------------------------------------------------------------------
|
|
20
|
-
// Synthetic corpus — deterministic, no API calls
|
|
21
|
-
// ---------------------------------------------------------------------------
|
|
22
8
|
const BASE_DATE = new Date('2026-01-15T10:00:00Z');
|
|
23
9
|
function dateOffset(days) {
|
|
24
10
|
const d = new Date(BASE_DATE.getTime() + days * DAY_MS);
|
|
@@ -40,8 +26,28 @@ function mem(id, content, opts = {}) {
|
|
|
40
26
|
}
|
|
41
27
|
/** Direct recall: basic keyword matching. */
|
|
42
28
|
function addDirectRecall(entries, cases) {
|
|
43
|
-
entries.push(mem('dr-1', 'The PostgreSQL database migration failed because the users table had a NOT NULL constraint on the email column', {
|
|
44
|
-
|
|
29
|
+
entries.push(mem('dr-1', 'The PostgreSQL database migration failed because the users table had a NOT NULL constraint on the email column', {
|
|
30
|
+
created: dateOffset(1), tags: ['topic:database']
|
|
31
|
+
}), mem('dr-2', 'React component rendering performance improved by 40% after memoizing the expensive computation in useMemo', {
|
|
32
|
+
created: dateOffset(2), tags: ['topic:frontend']
|
|
33
|
+
}), mem('dr-3', 'The API rate limiter should use a sliding window algorithm instead of fixed window to prevent burst traffic', {
|
|
34
|
+
created: dateOffset(3), tags: ['topic:api']
|
|
35
|
+
}), mem('dr-4', 'Docker container memory limits need to be set to 512MB for the worker service to prevent OOM kills', {
|
|
36
|
+
created: dateOffset(4), tags: ['topic:devops']
|
|
37
|
+
}), mem('dr-5', 'The JWT token expiration was set to 24 hours but should be reduced to 1 hour for security compliance', {
|
|
38
|
+
created: dateOffset(5), tags: ['topic:security']
|
|
39
|
+
}), mem('dr-6', 'Webpack bundle size grew to 2.3MB because lodash was imported as a whole instead of cherry-picking', {
|
|
40
|
+
created: dateOffset(6), tags: ['topic:frontend']
|
|
41
|
+
}), mem('dr-7', 'The Redis cache TTL for user sessions should match the JWT expiration to prevent stale sessions', {
|
|
42
|
+
created: dateOffset(7), tags: ['topic:caching']
|
|
43
|
+
}), mem('dr-8', 'GraphQL resolver for nested comments has N+1 query problem solved by DataLoader batching', { created: dateOffset(8), tags: ['topic:api'] }));
|
|
44
|
+
cases.push({
|
|
45
|
+
id: 'dr-q1', category: 'direct-recall', query: 'PostgreSQL migration NOT NULL constraint', expectedIds: ['dr-1'],
|
|
46
|
+
description: 'exact keyword match on DB migration'
|
|
47
|
+
}, {
|
|
48
|
+
id: 'dr-q2', category: 'direct-recall', query: 'React useMemo performance memoizing', expectedIds: ['dr-2'],
|
|
49
|
+
description: 'React performance optimization'
|
|
50
|
+
}, { id: 'dr-q3', category: 'direct-recall', query: 'sliding window rate limiter API', expectedIds: ['dr-3'], description: 'API rate limiting approach' }, { id: 'dr-q4', category: 'direct-recall', query: 'Docker OOM memory limits worker', expectedIds: ['dr-4'], description: 'Docker memory config' }, { id: 'dr-q5', category: 'direct-recall', query: 'JWT token expiration security', expectedIds: ['dr-5'], description: 'JWT security setting' }, { id: 'dr-q6', category: 'direct-recall', query: 'webpack bundle size lodash', expectedIds: ['dr-6'], description: 'bundle size issue' }, { id: 'dr-q7', category: 'direct-recall', query: 'Redis cache TTL session expiration', expectedIds: ['dr-7'], description: 'cache TTL config' }, { id: 'dr-q8', category: 'direct-recall', query: 'GraphQL N+1 DataLoader batching', expectedIds: ['dr-8'], description: 'GraphQL N+1 fix' });
|
|
45
51
|
}
|
|
46
52
|
/** Extraction preference: extracted facts should rank above raw source. */
|
|
47
53
|
function addExtractionPreference(entries, cases) {
|
|
@@ -61,7 +67,16 @@ function addExtractionPreference(entries, cases) {
|
|
|
61
67
|
created: dateOffset(12), layer: Layer.Semantic, tags: ['speaker:Carol', 'topic:auth', 'extracted'],
|
|
62
68
|
extracted_from: 'ep-src-3',
|
|
63
69
|
}));
|
|
64
|
-
cases.push({
|
|
70
|
+
cases.push({
|
|
71
|
+
id: 'ep-q1', category: 'extraction-preference', query: 'Kubernetes upgrade staging environment', expectedIds: ['ep-ext-1'],
|
|
72
|
+
description: 'extracted fact about K8s upgrade should rank above raw utterance'
|
|
73
|
+
}, {
|
|
74
|
+
id: 'ep-q2', category: 'extraction-preference', query: 'Datadog Grafana alerting migration', expectedIds: ['ep-ext-2'],
|
|
75
|
+
description: 'extracted fact about monitoring switch'
|
|
76
|
+
}, {
|
|
77
|
+
id: 'ep-q3', category: 'extraction-preference', query: 'OAuth2 PKCE login page redesign', expectedIds: ['ep-ext-3'],
|
|
78
|
+
description: 'extracted fact about auth work'
|
|
79
|
+
});
|
|
65
80
|
}
|
|
66
81
|
/** Dag drill-down: summary nodes should surface children. */
|
|
67
82
|
function addDagDrilldown(entries, cases) {
|
|
@@ -82,12 +97,30 @@ function addDagDrilldown(entries, cases) {
|
|
|
82
97
|
for (const child of [entries.find(e => e.id === 'dag-child-1'), entries.find(e => e.id === 'dag-child-2'), entries.find(e => e.id === 'dag-child-3')]) {
|
|
83
98
|
child.dag_parent_id = 'dag-summary-1';
|
|
84
99
|
}
|
|
85
|
-
cases.push({
|
|
100
|
+
cases.push({
|
|
101
|
+
id: 'dag-q1', category: 'dag-drilldown', query: 'API performance problems latency',
|
|
102
|
+
expectedIds: ['dag-child-1', 'dag-child-2', 'dag-child-3', 'dag-summary-1'], description: 'summary should drill down to all children'
|
|
103
|
+
}, {
|
|
104
|
+
id: 'dag-q2', category: 'dag-drilldown', query: 'endpoint response time degradation',
|
|
105
|
+
expectedIds: ['dag-child-1', 'dag-child-2', 'dag-summary-1'], description: 'query matching summary should surface relevant children'
|
|
106
|
+
});
|
|
86
107
|
}
|
|
87
108
|
/** Temporal: recency/oldest cues should affect ranking. */
|
|
88
109
|
function addTemporal(entries, cases) {
|
|
89
110
|
entries.push(mem('tmp-1', 'The team decided to use TypeScript for the new service', { created: dateOffset(-30), tags: ['topic:architecture'] }), mem('tmp-2', 'The team evaluated Rust as an alternative language for the service', { created: dateOffset(-20), tags: ['topic:architecture'] }), mem('tmp-3', 'The team added Go as a candidate language for the service rewrite', { created: dateOffset(-10), tags: ['topic:architecture'] }), mem('tmp-4', 'The team finalized the language choice as Go for the service rewrite', { created: dateOffset(-1), tags: ['topic:architecture'] }));
|
|
90
|
-
cases.push({
|
|
111
|
+
cases.push({
|
|
112
|
+
id: 'tmp-q1', category: 'temporal', query: 'what did the team recently decide about the service language', expectedIds: ['tmp-4'],
|
|
113
|
+
description: 'recent cue should boost newest entry'
|
|
114
|
+
}, {
|
|
115
|
+
id: 'tmp-q2', category: 'temporal', query: 'what was the first language choice for the service', expectedIds: ['tmp-1'],
|
|
116
|
+
description: 'oldest cue should boost earliest entry'
|
|
117
|
+
}, {
|
|
118
|
+
id: 'tmp-q3', category: 'temporal', query: 'latest update on the service rewrite language', expectedIds: ['tmp-4'],
|
|
119
|
+
description: 'latest should boost most recent'
|
|
120
|
+
}, {
|
|
121
|
+
id: 'tmp-q4', category: 'temporal', query: 'original architecture decision for the service', expectedIds: ['tmp-1'],
|
|
122
|
+
description: 'original should boost earliest'
|
|
123
|
+
});
|
|
91
124
|
}
|
|
92
125
|
/** Noise resistance: relevant memories found despite noise. */
|
|
93
126
|
function addNoiseResistance(entries, cases) {
|
|
@@ -117,7 +150,18 @@ function addNoiseResistance(entries, cases) {
|
|
|
117
150
|
}), mem('nr-2', 'The S3 bucket policy was misconfigured allowing public read access to customer data uploads', {
|
|
118
151
|
created: dateOffset(21), tags: ['topic:security', 'topic:s3'],
|
|
119
152
|
}));
|
|
120
|
-
cases.push({
|
|
153
|
+
cases.push({
|
|
154
|
+
id: 'nr-q1', category: 'noise-resistance', query: 'database connection pool exhausted max connections', expectedIds: ['nr-1'],
|
|
155
|
+
description: 'find DB issue despite 30 noise entries'
|
|
156
|
+
}, {
|
|
157
|
+
id: 'nr-q2', category: 'noise-resistance', query: 'S3 bucket public access security misconfiguration', expectedIds: ['nr-2'],
|
|
158
|
+
description: 'find S3 issue despite noise'
|
|
159
|
+
}, {
|
|
160
|
+
id: 'nr-q3', category: 'noise-resistance', query: 'PostgreSQL migration constraint', expectedIds: ['dr-1'],
|
|
161
|
+
description: 'find earlier DB entry despite noise'
|
|
162
|
+
}, {
|
|
163
|
+
id: 'nr-q4', category: 'noise-resistance', query: 'JWT token security expiration', expectedIds: ['dr-5'], description: 'find security entry despite noise'
|
|
164
|
+
});
|
|
121
165
|
}
|
|
122
166
|
/** Multi-hop: entity chaining across sessions. */
|
|
123
167
|
function addMultiHop(entries, cases) {
|
|
@@ -130,7 +174,13 @@ function addMultiHop(entries, cases) {
|
|
|
130
174
|
}), mem('mh-4', 'speaker:Carol reported that the billing dashboard shows incorrect revenue numbers because it reads from the payments_raw table instead of payments_reconciled.', {
|
|
131
175
|
created: dateOffset(28), tags: ['speaker:Carol', 'topic:billing'],
|
|
132
176
|
}));
|
|
133
|
-
cases.push({
|
|
177
|
+
cases.push({
|
|
178
|
+
id: 'mh-q1', category: 'multi-hop', query: 'Who fixed the Stripe webhook bug and what was the root cause?',
|
|
179
|
+
expectedIds: ['mh-1', 'mh-2', 'mh-3'], description: 'chain Alice -> Stripe -> Bob -> fix'
|
|
180
|
+
}, {
|
|
181
|
+
id: 'mh-q2', category: 'multi-hop', query: 'What are all the payment-related issues the team discussed?',
|
|
182
|
+
expectedIds: ['mh-1', 'mh-2', 'mh-3', 'mh-4'], description: 'find all payment topics across speakers'
|
|
183
|
+
});
|
|
134
184
|
}
|
|
135
185
|
export function buildSyntheticCorpus() {
|
|
136
186
|
const entries = [];
|
|
@@ -197,9 +247,6 @@ export async function runFeatureEval(version) {
|
|
|
197
247
|
durationMs: Date.now() - start,
|
|
198
248
|
};
|
|
199
249
|
}
|
|
200
|
-
// ---------------------------------------------------------------------------
|
|
201
|
-
// Regression detection
|
|
202
|
-
// ---------------------------------------------------------------------------
|
|
203
250
|
const REGRESSION_THRESHOLD = 0.05;
|
|
204
251
|
export function detectRegressions(baseline, current) {
|
|
205
252
|
const regressions = [];
|
|
@@ -227,11 +274,7 @@ export function detectRegressions(baseline, current) {
|
|
|
227
274
|
};
|
|
228
275
|
}
|
|
229
276
|
export function resultToBaseline(result) {
|
|
230
|
-
// SAFETY: every FeatureCategory key
|
|
231
|
-
// below (one iteration per entry in result.features), before this object
|
|
232
|
-
// is read anywhere; result.features is built from every category in
|
|
233
|
-
// buildSyntheticCorpus's cases (runFeatureEval derives `categories` the
|
|
234
|
-
// same way), so no FeatureCategory key is left unset.
|
|
277
|
+
// SAFETY: the loop below sets every FeatureCategory key from result.features, which holds every category in buildSyntheticCorpus's cases.
|
|
235
278
|
const features = {};
|
|
236
279
|
for (const f of result.features) {
|
|
237
280
|
features[f.category] = { mrr: f.mrr, recallAt5: f.recallAt5, ndcgAt5: f.ndcgAt5 };
|
|
@@ -243,9 +286,6 @@ export function resultToBaseline(result) {
|
|
|
243
286
|
overall: result.overall,
|
|
244
287
|
};
|
|
245
288
|
}
|
|
246
|
-
// ---------------------------------------------------------------------------
|
|
247
|
-
// Formatters
|
|
248
|
-
// ---------------------------------------------------------------------------
|
|
249
289
|
function pct(n) {
|
|
250
290
|
return (n * 100).toFixed(1) + '%';
|
|
251
291
|
}
|
package/dist/eval/eval.d.ts
CHANGED
|
@@ -1,13 +1,5 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* Given a corpus of (query, expected_memory_ids) cases, run recall against
|
|
5
|
-
* the store and report ranking-quality metrics: MRR, Recall@K, NDCG@K.
|
|
6
|
-
*
|
|
7
|
-
* The goal is to make recall quality measurable so MMR lambda, embedding
|
|
8
|
-
* weights, and future scoring tweaks can be tuned against evidence instead
|
|
9
|
-
* of intuition.
|
|
10
|
-
*/
|
|
1
|
+
/** Recall eval harness: runs recall over (query, expected_memory_ids) cases and reports MRR, Recall@K and NDCG@K.
|
|
2
|
+
* It exists so MMR lambda, embedding weights and scoring tweaks are tuned against evidence instead of intuition. */
|
|
11
3
|
import type { MemoryEntry } from '../core/memory.js';
|
|
12
4
|
export interface EvalCase {
|
|
13
5
|
/** Free-form ID for humans to reference the case. */
|
|
@@ -58,10 +50,8 @@ export interface RunEvalOptions {
|
|
|
58
50
|
export declare function mrr(returned: string[], expected: string[]): number;
|
|
59
51
|
/** Recall@K — fraction of expected items found in the top-K. */
|
|
60
52
|
export declare function recallAtK(returned: string[], expected: string[], k: number): number;
|
|
61
|
-
/**
|
|
62
|
-
*
|
|
63
|
-
* gain_i = 1 if returned[i] ∈ expected else 0. discount = log2(i + 2).
|
|
64
|
-
*/
|
|
53
|
+
/** Normalized Discounted Cumulative Gain at K with binary relevance.
|
|
54
|
+
* gain_i = 1 if returned[i] ∈ expected else 0. discount = log2(i + 2). */
|
|
65
55
|
export declare function ndcgAtK(returned: string[], expected: string[], k: number): number;
|
|
66
56
|
export declare function runEval(cases: EvalCase[], entries: MemoryEntry[], options?: RunEvalOptions): Promise<EvalSummary>;
|
|
67
57
|
export interface EvalDelta {
|
|
@@ -88,16 +78,8 @@ export interface EvalComparison {
|
|
|
88
78
|
onlyInBaseline: string[];
|
|
89
79
|
onlyInCurrent: string[];
|
|
90
80
|
}
|
|
91
|
-
/**
|
|
92
|
-
* Compute pairwise deltas between a baseline and a current eval summary.
|
|
93
|
-
* Cases are matched by EvalCase.id; any mismatch is surfaced in the onlyIn
|
|
94
|
-
* arrays so the caller knows the corpora diverged.
|
|
95
|
-
*/
|
|
81
|
+
/** Compute pairwise deltas between a baseline and a current eval summary, matching cases by EvalCase.id; mismatches land in the onlyIn arrays. */
|
|
96
82
|
export declare function compareSummaries(baseline: EvalSummary, current: EvalSummary): EvalComparison;
|
|
97
|
-
/**
|
|
98
|
-
* For each memory, take its first 8 content words as a trivial query and
|
|
99
|
-
* expect that memory back. Useful as a smoke test: if recall can't find a
|
|
100
|
-
* memory by its own opening words, something is broken.
|
|
101
|
-
*/
|
|
83
|
+
/** For each memory, use its first 8 content words as a trivial query and expect that memory back: a smoke test for recall. */
|
|
102
84
|
export declare function bootstrapCorpus(entries: MemoryEntry[], maxCases?: number): EvalCase[];
|
|
103
85
|
//# sourceMappingURL=eval.d.ts.map
|
package/dist/eval/eval.js
CHANGED
|
@@ -1,22 +1,11 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* Given a corpus of (query, expected_memory_ids) cases, run recall against
|
|
5
|
-
* the store and report ranking-quality metrics: MRR, Recall@K, NDCG@K.
|
|
6
|
-
*
|
|
7
|
-
* The goal is to make recall quality measurable so MMR lambda, embedding
|
|
8
|
-
* weights, and future scoring tweaks can be tuned against evidence instead
|
|
9
|
-
* of intuition.
|
|
10
|
-
*/
|
|
1
|
+
/** Recall eval harness: runs recall over (query, expected_memory_ids) cases and reports MRR, Recall@K and NDCG@K.
|
|
2
|
+
* It exists so MMR lambda, embedding weights and scoring tweaks are tuned against evidence instead of intuition. */
|
|
11
3
|
import { hybridSearch } from '../search/hybrid.js';
|
|
12
|
-
import { searchBothHybrid } from '../sharing/
|
|
4
|
+
import { searchBothHybrid } from '../sharing/search-both.js';
|
|
13
5
|
import { isInitialized } from '../store/open.js';
|
|
14
6
|
// Generous so metrics are not truncated.
|
|
15
7
|
const DEFAULT_EVAL_BUDGET = 100_000;
|
|
16
8
|
const QUERY_WORDS = 8;
|
|
17
|
-
// ---------------------------------------------------------------------------
|
|
18
|
-
// Metrics — pure functions. K is inclusive of position K.
|
|
19
|
-
// ---------------------------------------------------------------------------
|
|
20
9
|
/** Mean Reciprocal Rank for a single ranking given expected ids. */
|
|
21
10
|
export function mrr(returned, expected) {
|
|
22
11
|
if (expected.length === 0)
|
|
@@ -41,10 +30,8 @@ export function recallAtK(returned, expected, k) {
|
|
|
41
30
|
}
|
|
42
31
|
return hits / expected.length;
|
|
43
32
|
}
|
|
44
|
-
/**
|
|
45
|
-
*
|
|
46
|
-
* gain_i = 1 if returned[i] ∈ expected else 0. discount = log2(i + 2).
|
|
47
|
-
*/
|
|
33
|
+
/** Normalized Discounted Cumulative Gain at K with binary relevance.
|
|
34
|
+
* gain_i = 1 if returned[i] ∈ expected else 0. discount = log2(i + 2). */
|
|
48
35
|
export function ndcgAtK(returned, expected, k) {
|
|
49
36
|
if (expected.length === 0)
|
|
50
37
|
return 0;
|
|
@@ -63,9 +50,6 @@ export function ndcgAtK(returned, expected, k) {
|
|
|
63
50
|
}
|
|
64
51
|
return idcg === 0 ? 0 : dcg / idcg;
|
|
65
52
|
}
|
|
66
|
-
// ---------------------------------------------------------------------------
|
|
67
|
-
// Runner
|
|
68
|
-
// ---------------------------------------------------------------------------
|
|
69
53
|
export async function runEval(cases, entries, options = {}) {
|
|
70
54
|
const start = Date.now();
|
|
71
55
|
const results = [];
|
|
@@ -117,11 +101,7 @@ function rankForCase(query, entries, options, useBothStores) {
|
|
|
117
101
|
mmrLambda: options.mmrLambda,
|
|
118
102
|
});
|
|
119
103
|
}
|
|
120
|
-
/**
|
|
121
|
-
* Compute pairwise deltas between a baseline and a current eval summary.
|
|
122
|
-
* Cases are matched by EvalCase.id; any mismatch is surfaced in the onlyIn
|
|
123
|
-
* arrays so the caller knows the corpora diverged.
|
|
124
|
-
*/
|
|
104
|
+
/** Compute pairwise deltas between a baseline and a current eval summary, matching cases by EvalCase.id; mismatches land in the onlyIn arrays. */
|
|
125
105
|
export function compareSummaries(baseline, current) {
|
|
126
106
|
const aggregate = {
|
|
127
107
|
mrr: current.meanMrr - baseline.meanMrr,
|
|
@@ -165,14 +145,7 @@ export function compareSummaries(baseline, current) {
|
|
|
165
145
|
onlyInCurrent: [...curById.keys()].filter((id) => !baseById.has(id)),
|
|
166
146
|
};
|
|
167
147
|
}
|
|
168
|
-
|
|
169
|
-
// Bootstrap — generate a synthetic corpus from current memories
|
|
170
|
-
// ---------------------------------------------------------------------------
|
|
171
|
-
/**
|
|
172
|
-
* For each memory, take its first 8 content words as a trivial query and
|
|
173
|
-
* expect that memory back. Useful as a smoke test: if recall can't find a
|
|
174
|
-
* memory by its own opening words, something is broken.
|
|
175
|
-
*/
|
|
148
|
+
/** For each memory, use its first 8 content words as a trivial query and expect that memory back: a smoke test for recall. */
|
|
176
149
|
export function bootstrapCorpus(entries, maxCases = 50) {
|
|
177
150
|
const cases = [];
|
|
178
151
|
for (const e of entries) {
|
package/dist/eval/judgment.d.ts
CHANGED
|
@@ -20,9 +20,6 @@ export interface JudgeOptions {
|
|
|
20
20
|
/** Bounded parallelism for `judgeAll`. */
|
|
21
21
|
concurrency?: number;
|
|
22
22
|
}
|
|
23
|
-
/** `null` on any failure, so a Jev outage degrades capture to today's
|
|
24
|
-
* behaviour instead of blocking the write. */
|
|
25
|
-
export declare function judge(content: string, opts: JudgeOptions): Promise<Judgment | null>;
|
|
26
23
|
/** Judge many candidates under a bounded concurrency pool, order preserved. */
|
|
27
24
|
export declare function judgeAll(contents: readonly string[], opts: JudgeOptions): Promise<(Judgment | null)[]>;
|
|
28
25
|
//# sourceMappingURL=judgment.d.ts.map
|
package/dist/eval/judgment.js
CHANGED
|
@@ -3,9 +3,19 @@
|
|
|
3
3
|
* every captured memory currently lands on a flat schema_fit of 0.5. */
|
|
4
4
|
import { fetchWithRetry } from '../util/http-retry.js';
|
|
5
5
|
import { errorMessage, log } from '../util/log.js';
|
|
6
|
+
import { readCappedJson } from '../util/capped-json.js';
|
|
7
|
+
import { isJsonNumber, isJsonObject, isJsonString } from '../util/json.js';
|
|
6
8
|
const ENDPOINT = 'https://api.typesafe.ai/v1/systemone';
|
|
7
9
|
const DEFAULT_MODEL = 'jev-1.13.0';
|
|
8
10
|
const MAX_CONCURRENCY = 8;
|
|
11
|
+
// An honest reply is three short answers, a few hundred bytes; 1 MiB leaves room for a verbose envelope.
|
|
12
|
+
const JUDGE_MAX_REPLY_BYTES = 1024 * 1024;
|
|
13
|
+
/** One named answer of a Jev reply `{ answers: { <name>: Answer } }`; an empty object when the reply has none of that shape. */
|
|
14
|
+
function answerNamed(reply, name) {
|
|
15
|
+
const answers = isJsonObject(reply) ? reply.answers : undefined;
|
|
16
|
+
const answer = isJsonObject(answers) ? answers[name] : undefined;
|
|
17
|
+
return isJsonObject(answer) ? answer : {};
|
|
18
|
+
}
|
|
9
19
|
const QUESTIONS = {
|
|
10
20
|
durable: {
|
|
11
21
|
type: 'noul',
|
|
@@ -36,7 +46,7 @@ const QUESTIONS = {
|
|
|
36
46
|
const KINDS = ['error', 'decision', 'convention', 'preference', 'trivia'];
|
|
37
47
|
const VALENCES = ['critical', 'negative', 'positive', 'neutral'];
|
|
38
48
|
function oneOf(value, allowed) {
|
|
39
|
-
return allowed.find((option) => option === value) ?? null;
|
|
49
|
+
return isJsonString(value) ? allowed.find((option) => option === value) ?? null : null;
|
|
40
50
|
}
|
|
41
51
|
/** `verified` is unreachable: that tier means a human or a test confirmed it. */
|
|
42
52
|
function toConfidenceTier(kindConfidence) {
|
|
@@ -70,7 +80,7 @@ async function post(content, opts) {
|
|
|
70
80
|
}
|
|
71
81
|
/** `null` on any failure, so a Jev outage degrades capture to today's
|
|
72
82
|
* behaviour instead of blocking the write. */
|
|
73
|
-
|
|
83
|
+
async function judge(content, opts) {
|
|
74
84
|
const trimmed = content.trim();
|
|
75
85
|
if (trimmed.length < 3)
|
|
76
86
|
return null;
|
|
@@ -79,21 +89,19 @@ export async function judge(content, opts) {
|
|
|
79
89
|
return null;
|
|
80
90
|
let data;
|
|
81
91
|
try {
|
|
82
|
-
|
|
83
|
-
// keyed by the question names posted above; every field read below is
|
|
84
|
-
// optional-chained and range-checked before use, so a lie here returns null.
|
|
85
|
-
data = await res.json();
|
|
92
|
+
data = await readCappedJson(res, JUDGE_MAX_REPLY_BYTES);
|
|
86
93
|
}
|
|
87
94
|
catch (err) {
|
|
88
95
|
log.debug(`judge: unreadable response: ${errorMessage(err)}`);
|
|
89
96
|
return null;
|
|
90
97
|
}
|
|
91
|
-
const durable = data.
|
|
92
|
-
const
|
|
93
|
-
const
|
|
94
|
-
|
|
98
|
+
const durable = answerNamed(data, 'durable').noul;
|
|
99
|
+
const kindAnswer = answerNamed(data, 'kind');
|
|
100
|
+
const kind = oneOf(kindAnswer.choice, KINDS);
|
|
101
|
+
const valence = oneOf(answerNamed(data, 'valence').choice, VALENCES);
|
|
102
|
+
if (!isJsonNumber(durable) || durable < 0 || durable > 1 || !kind || !valence)
|
|
95
103
|
return null;
|
|
96
|
-
const kindConfidence =
|
|
104
|
+
const kindConfidence = isJsonNumber(kindAnswer.confidence) ? kindAnswer.confidence : 0;
|
|
97
105
|
return { durable, kind, valence, confidence: toConfidenceTier(kindConfidence), kindConfidence };
|
|
98
106
|
}
|
|
99
107
|
/** Judge many candidates under a bounded concurrency pool, order preserved. */
|
|
@@ -280,7 +280,7 @@ export default function register(api) {
|
|
|
280
280
|
// --- Tool: hippo_outcome ---
|
|
281
281
|
api.registerTool((ctx) => ({
|
|
282
282
|
name: 'hippo_outcome',
|
|
283
|
-
description:
|
|
283
|
+
description: "Report whether recalled memories were useful. Good outcomes slow a memory's decay and bad ones speed it up, in proportion to its record. Call after completing work.",
|
|
284
284
|
parameters: {
|
|
285
285
|
type: 'object',
|
|
286
286
|
properties: {
|
package/dist/graph/extract.d.ts
CHANGED
|
@@ -1,34 +1,12 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* Populates the graph from the already-structured consolidated first-class object tables -
|
|
5
|
-
* NO NLP, no precision gate for entities + supersedes. The graph is a pure derived
|
|
6
|
-
* function of the current object state, so `extractGraph` is an idempotent REBUILD: derive
|
|
7
|
-
* entities + `supersedes` relations from decisions /
|
|
8
|
-
* policies / customer_notes / project_briefs (the four object types whose kind maps to the
|
|
9
|
-
* `entity_type` enum), then write only their difference from the stored rows. All writes go
|
|
10
|
-
* through the src/store/graph-writes.ts consolidated-source guard; this module issues no raw SQL.
|
|
11
|
-
*
|
|
12
|
-
* Pass 3 adds the
|
|
13
|
-
* first CROSS-OBJECT relations: a deterministic NAME-MATCH heuristic that emits a
|
|
14
|
-
* `references` edge when one consolidated object's text contains another entity's name.
|
|
15
|
-
* It is conservative (word-boundary, length-bounded, ambiguity-guarded, per-source
|
|
16
|
-
* capped); its precision is measured + reported, not assumed.
|
|
17
|
-
*
|
|
18
|
-
* Deferred (follow-ups): NLP prose-extraction (semantic depends-on / blocked-by / owns);
|
|
19
|
-
* skill/incident/process entities (not in the entity_type enum - needs a migration); the
|
|
20
|
-
* `hippo sleep` enqueue-hook.
|
|
21
|
-
*/
|
|
1
|
+
/** Deterministic entity extraction: the graph is a pure function of the consolidated object tables (decisions, policies, customer_notes, project_briefs).
|
|
2
|
+
* Writes go through the src/store/graph-writes.ts consolidated-source guard. Pass 3 adds `references` edges by a conservative name-match heuristic. */
|
|
22
3
|
import { type EntityType } from '../store/graph-rows.js';
|
|
23
4
|
import { type DesiredGraph } from './delta.js';
|
|
24
5
|
import { type WriteBudget } from '../util/write-budget.js';
|
|
25
|
-
/** Per-type load cap (the loaders default to 100)
|
|
26
|
-
* set exceeds this is truncated; `ExtractResult.truncated` records it so the
|
|
27
|
-
* incompleteness is observable rather than silent. */
|
|
6
|
+
/** Per-type load cap (the loaders default to 100); a type over it is truncated and `ExtractResult.truncated` records that. */
|
|
28
7
|
export declare const MAX_EXTRACT_PER_TYPE = 10000;
|
|
29
|
-
/** A target entity name must be in [MIN, MAX] chars to be matched: MIN skips short
|
|
30
|
-
*
|
|
31
|
-
* source). */
|
|
8
|
+
/** A target entity name must be in [MIN, MAX] chars to be matched: MIN skips short, generic words; MAX skips prose
|
|
9
|
+
* (a decision's prose name is never a target, only a source). */
|
|
32
10
|
export declare const MIN_REF_NAME_LEN = 4;
|
|
33
11
|
export declare const MAX_REF_NAME_LEN = 80;
|
|
34
12
|
/** Per-source cap so one object cannot explode the graph with references edges. */
|
package/dist/graph/extract.js
CHANGED
|
@@ -1,24 +1,5 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* Populates the graph from the already-structured consolidated first-class object tables -
|
|
5
|
-
* NO NLP, no precision gate for entities + supersedes. The graph is a pure derived
|
|
6
|
-
* function of the current object state, so `extractGraph` is an idempotent REBUILD: derive
|
|
7
|
-
* entities + `supersedes` relations from decisions /
|
|
8
|
-
* policies / customer_notes / project_briefs (the four object types whose kind maps to the
|
|
9
|
-
* `entity_type` enum), then write only their difference from the stored rows. All writes go
|
|
10
|
-
* through the src/store/graph-writes.ts consolidated-source guard; this module issues no raw SQL.
|
|
11
|
-
*
|
|
12
|
-
* Pass 3 adds the
|
|
13
|
-
* first CROSS-OBJECT relations: a deterministic NAME-MATCH heuristic that emits a
|
|
14
|
-
* `references` edge when one consolidated object's text contains another entity's name.
|
|
15
|
-
* It is conservative (word-boundary, length-bounded, ambiguity-guarded, per-source
|
|
16
|
-
* capped); its precision is measured + reported, not assumed.
|
|
17
|
-
*
|
|
18
|
-
* Deferred (follow-ups): NLP prose-extraction (semantic depends-on / blocked-by / owns);
|
|
19
|
-
* skill/incident/process entities (not in the entity_type enum - needs a migration); the
|
|
20
|
-
* `hippo sleep` enqueue-hook.
|
|
21
|
-
*/
|
|
1
|
+
/** Deterministic entity extraction: the graph is a pure function of the consolidated object tables (decisions, policies, customer_notes, project_briefs).
|
|
2
|
+
* Writes go through the src/store/graph-writes.ts consolidated-source guard. Pass 3 adds `references` edges by a conservative name-match heuristic. */
|
|
22
3
|
import { applyGraphOps } from './write.js';
|
|
23
4
|
import { runGraphRebuildTransaction } from '../store/graph-writes.js';
|
|
24
5
|
import { MAX_ENTITY_NAME_LEN } from '../store/graph-rows.js';
|
|
@@ -31,14 +12,10 @@ import { loadCustomerNotes } from '../objects/customer-notes.js';
|
|
|
31
12
|
import { loadProjectBriefs } from '../objects/project-briefs.js';
|
|
32
13
|
import { assertTenantId } from '../store/tenant.js';
|
|
33
14
|
import { escapeRegex } from '../util/escape.js';
|
|
34
|
-
/** Per-type load cap (the loaders default to 100)
|
|
35
|
-
* set exceeds this is truncated; `ExtractResult.truncated` records it so the
|
|
36
|
-
* incompleteness is observable rather than silent. */
|
|
15
|
+
/** Per-type load cap (the loaders default to 100); a type over it is truncated and `ExtractResult.truncated` records that. */
|
|
37
16
|
export const MAX_EXTRACT_PER_TYPE = 10000;
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
* generic words; MAX skips prose (a decision's prose name is never a target, only a
|
|
41
|
-
* source). */
|
|
17
|
+
/** A target entity name must be in [MIN, MAX] chars to be matched: MIN skips short, generic words; MAX skips prose
|
|
18
|
+
* (a decision's prose name is never a target, only a source). */
|
|
42
19
|
export const MIN_REF_NAME_LEN = 4;
|
|
43
20
|
export const MAX_REF_NAME_LEN = 80;
|
|
44
21
|
/** Per-source cap so one object cannot explode the graph with references edges. */
|
|
@@ -72,11 +49,8 @@ function sourceObjectOf(entityType, e2Id) {
|
|
|
72
49
|
function pairKey(a, b) {
|
|
73
50
|
return a < b ? `${a}:${b}` : `${b}:${a}`;
|
|
74
51
|
}
|
|
75
|
-
/**
|
|
76
|
-
*
|
|
77
|
-
* Loads ACTIVE + SUPERSEDED rows (excluding `closed` = retired) in one call per status, so
|
|
78
|
-
* MAX_EXTRACT_PER_TYPE is a per-status budget; `hitCap` is set when either load is full.
|
|
79
|
-
*/
|
|
52
|
+
/** Close over one loader's row type so the table below holds uniform functions. Loads ACTIVE and SUPERSEDED rows (not `closed`),
|
|
53
|
+
* one call per status, so MAX_EXTRACT_PER_TYPE is a per-status budget; `hitCap` is set when either load is full. */
|
|
80
54
|
function source(entityType, load, nameOf, textOf) {
|
|
81
55
|
return (hippoRoot, tenantId) => {
|
|
82
56
|
const rows = [];
|
package/dist/graph/recall.d.ts
CHANGED
|
@@ -17,9 +17,8 @@ export interface GraphExpandOpts {
|
|
|
17
17
|
tenantId: string;
|
|
18
18
|
/** Mirror the recall handler's hard filters when re-loading graph-reached rows. */
|
|
19
19
|
includeSuperseded?: boolean;
|
|
20
|
-
/** ISO date; bi-temporal as-of filter applied to graph-reached rows
|
|
21
|
-
*
|
|
22
|
-
* was not yet valid at asOf). */
|
|
20
|
+
/** ISO date; bi-temporal as-of filter applied to graph-reached rows, matching cmdRecall:
|
|
21
|
+
* visible if valid_from <= asOf and, when superseded, its successor was not yet valid at asOf. */
|
|
23
22
|
asOf?: string;
|
|
24
23
|
/** Token budget for the augmented set (defaults to DEFAULT_RECALL_BUDGET, matching recall). */
|
|
25
24
|
budget?: number;
|
|
@@ -28,28 +27,16 @@ export interface GraphExpandOpts {
|
|
|
28
27
|
/** The recall --min-results floor: this many top base rows are kept regardless of
|
|
29
28
|
* budget, so graph expansion never violates the floor. Defaults to 1. */
|
|
30
29
|
minResults?: number;
|
|
31
|
-
/** Recall-side
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
* bare/SDK callers. { requested, additive: true } = CLI --scope unlock semantics
|
|
35
|
-
* (passesCliRecallScopeFilter); additive false/absent with requested set = api
|
|
36
|
-
* exact-narrowing semantics (passesScopeFilterForRecall). Base results are the
|
|
37
|
-
* caller's responsibility (they passed through the caller's own scope filter). */
|
|
30
|
+
/** Recall-side scope rule applied to graph-REACHED memories only (base results already passed the caller), mirroring HybridSearchOptions.recallScope.
|
|
31
|
+
* Omitted = default-deny (private and quarantine excluded, NULL passes), the fail-closed default for SDK callers.
|
|
32
|
+
* { requested, additive: true } is CLI --scope unlock (passesCliRecallScopeFilter); otherwise exact narrowing (passesScopeFilterForRecall). */
|
|
38
33
|
recallScope?: {
|
|
39
34
|
requested?: string;
|
|
40
35
|
additive?: boolean;
|
|
41
36
|
ownScope?: string;
|
|
42
37
|
};
|
|
43
38
|
}
|
|
44
|
-
/**
|
|
45
|
-
*
|
|
46
|
-
* the seed results' entities (across the local AND global stores). Each graph hit is
|
|
47
|
-
* inserted directly after the base result it descends from, scored just below that seed;
|
|
48
|
-
* the base list's own order is preserved. Token-budget-bounded; deduped against the base
|
|
49
|
-
* set and across stores.
|
|
50
|
-
*
|
|
51
|
-
* No-op (returns `baseResults` unchanged) when `hops <= 0`, there are no base results, the
|
|
52
|
-
* graph is empty, no seed maps to an entity, or nothing new survives the filters/budget.
|
|
53
|
-
*/
|
|
39
|
+
/** Augment `baseResults` with memories reached by walking `hops` graph edges from the seeds across local AND global stores, each placed after its seed.
|
|
40
|
+
* Returns `baseResults` unchanged when `hops <= 0`, there are no base results, or nothing new survives the filters and the token budget. */
|
|
54
41
|
export declare function graphExpandRecall(baseResults: SearchResult[], opts: GraphExpandOpts): SearchResult[];
|
|
55
42
|
//# sourceMappingURL=recall.d.ts.map
|