hippo-memory 1.69.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 +5 -2
- package/dist/agent-memories/apply.d.ts +3 -3
- package/dist/agent-memories/apply.js +16 -31
- package/dist/agent-memories/claude-code.d.ts +5 -5
- package/dist/agent-memories/claude-code.js +25 -12
- package/dist/agent-memories/copilot.js +3 -2
- package/dist/agent-memories/files.js +26 -14
- package/dist/agent-memories/gemini.js +6 -5
- package/dist/agent-memories/keys.js +3 -2
- package/dist/agent-memories/legacy.d.ts +2 -2
- package/dist/agent-memories/legacy.js +2 -2
- package/dist/agent-memories/markdown.d.ts +1 -3
- package/dist/agent-memories/markdown.js +1 -3
- package/dist/agent-memories/report.d.ts +1 -1
- package/dist/agent-memories/report.js +3 -2
- package/dist/agent-memories/source.d.ts +1 -1
- package/dist/agent-memories/source.js +6 -5
- package/dist/agent-memories/sync.d.ts +5 -3
- package/dist/agent-memories/sync.js +34 -38
- package/dist/agent-memories/types.d.ts +1 -1
- package/dist/api/assemble.d.ts +9 -46
- package/dist/api/assemble.js +44 -54
- package/dist/api/audit.d.ts +8 -7
- package/dist/api/audit.js +15 -21
- package/dist/api/auth.d.ts +17 -39
- package/dist/api/auth.js +76 -216
- package/dist/api/auto-sleep.d.ts +13 -0
- package/dist/api/auto-sleep.js +32 -0
- package/dist/{availability.d.ts → api/availability.d.ts} +4 -17
- package/dist/{availability.js → api/availability.js} +14 -44
- package/dist/{context-auto.js → api/context-auto.js} +2 -1
- package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
- package/dist/{context-render.js → api/context-render.js} +7 -6
- package/dist/api/context-select.d.ts +5 -5
- package/dist/api/context-select.js +39 -48
- package/dist/api/context-types.d.ts +15 -40
- package/dist/api/context.d.ts +7 -26
- package/dist/api/context.js +67 -97
- package/dist/api/dormant.d.ts +7 -23
- package/dist/api/dormant.js +40 -128
- package/dist/api/drill-down.d.ts +9 -48
- package/dist/api/drill-down.js +41 -90
- package/dist/api/forget.d.ts +5 -33
- package/dist/api/forget.js +17 -73
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +2 -2
- package/dist/api/graph.d.ts +8 -0
- package/dist/api/graph.js +7 -0
- package/dist/api/index.d.ts +28 -0
- package/dist/api/index.js +31 -0
- package/dist/api/instruction-detect.js +85 -0
- package/dist/api/learn.js +63 -55
- package/dist/api/ledger-db.d.ts +21 -0
- package/dist/api/ledger-db.js +81 -0
- 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.d.ts +16 -0
- package/dist/api/on-store.js +38 -0
- package/dist/api/outcome.d.ts +5 -42
- package/dist/api/outcome.js +15 -80
- package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
- package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
- package/dist/api/predictions.d.ts +9 -0
- package/dist/api/predictions.js +18 -0
- package/dist/api/promote.d.ts +16 -31
- package/dist/api/promote.js +38 -123
- package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +11 -11
- package/dist/{prompt-hook.js → api/prompt-hook.js} +42 -60
- package/dist/api/quarantine.d.ts +5 -5
- package/dist/api/quarantine.js +30 -106
- package/dist/api/recall-cli.d.ts +55 -0
- package/dist/api/recall-cli.js +94 -0
- package/dist/api/recall-core.d.ts +4 -0
- package/dist/api/recall-core.js +120 -0
- package/dist/api/recall-finish.d.ts +53 -0
- package/dist/api/recall-finish.js +30 -0
- package/dist/api/recall-history.d.ts +64 -0
- package/dist/api/recall-history.js +159 -0
- package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +7 -8
- package/dist/{recall-pipeline.js → api/recall-pipeline.js} +60 -48
- package/dist/api/recall-record.d.ts +10 -13
- package/dist/api/recall-record.js +10 -30
- package/dist/api/recall-request.d.ts +2 -2
- package/dist/api/recall-request.js +3 -3
- package/dist/api/recall-types.d.ts +101 -316
- package/dist/api/recall.d.ts +5 -33
- package/dist/api/recall.js +92 -91
- 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 +27 -12
- package/dist/api/remember.js +42 -46
- package/dist/api/session-owners.d.ts +4 -0
- package/dist/api/session-owners.js +17 -0
- package/dist/api/sleep-run.d.ts +7 -9
- package/dist/api/sleep-run.js +78 -94
- package/dist/api/sleep.d.ts +10 -29
- package/dist/api/tokens.d.ts +5 -12
- package/dist/api/tokens.js +12 -31
- package/dist/api/types.d.ts +8 -31
- package/dist/api/types.js +5 -23
- package/dist/capture/caller-session.d.ts +2 -2
- package/dist/capture/caller-session.js +8 -8
- package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
- package/dist/{capture-error.js → capture/capture-error.js} +7 -7
- package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
- package/dist/capture/command.d.ts +5 -13
- package/dist/capture/command.js +57 -60
- package/dist/capture/compact-resume-caller.d.ts +1 -1
- package/dist/capture/compact-resume-caller.js +7 -7
- package/dist/capture/compact.d.ts +8 -16
- package/dist/capture/compact.js +56 -47
- package/dist/capture/compaction-items-caller.d.ts +1 -1
- package/dist/capture/compaction-items-caller.js +7 -5
- package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
- package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
- package/dist/{compaction-record.js → capture/compaction-record.js} +143 -157
- package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +1 -1
- package/dist/{compaction-spool.js → capture/compaction-spool.js} +18 -14
- package/dist/capture/copilot-transcript.js +1 -1
- package/dist/capture/extract.js +2 -2
- package/dist/capture/failure-caller.d.ts +2 -2
- package/dist/capture/failure-caller.js +6 -6
- package/dist/capture/failure-reading.d.ts +2 -5
- package/dist/capture/failure-reading.js +11 -12
- package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
- package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
- package/dist/capture/pre-compact-caller.d.ts +1 -1
- package/dist/capture/pre-compact-caller.js +2 -2
- package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +2 -6
- package/dist/{session-digest.js → capture/session-digest.js} +29 -29
- package/dist/capture/session-end-caller.d.ts +2 -2
- package/dist/capture/session-end-caller.js +1 -1
- package/dist/capture/session-texts.d.ts +1 -1
- package/dist/capture/session-texts.js +5 -5
- package/dist/capture/session-worker.js +6 -4
- package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
- package/dist/capture/transcript.d.ts +2 -10
- package/dist/capture/transcript.js +72 -92
- package/dist/capture/working-state.d.ts +0 -3
- package/dist/capture/working-state.js +7 -7
- package/dist/cli/api-context.d.ts +3 -0
- package/dist/cli/api-context.js +6 -0
- package/dist/cli/audit-prune.d.ts +28 -0
- package/dist/cli/audit-prune.js +40 -0
- package/dist/cli/audit.d.ts +2 -2
- package/dist/cli/audit.js +92 -88
- package/dist/cli/auth.d.ts +2 -1
- package/dist/cli/auth.js +69 -53
- package/dist/cli/briefs.d.ts +4 -3
- package/dist/cli/briefs.js +76 -202
- package/dist/cli/card.d.ts +2 -1
- package/dist/cli/card.js +55 -54
- package/dist/cli/client.d.ts +28 -0
- package/dist/{client.js → cli/client.js} +25 -44
- package/dist/cli/compact-resume-payload.d.ts +8 -0
- package/dist/cli/compact-resume-payload.js +40 -0
- package/dist/cli/context.d.ts +1 -13
- package/dist/cli/context.js +51 -77
- package/dist/cli/continuity.d.ts +6 -5
- package/dist/cli/continuity.js +153 -145
- package/dist/cli/correction-latency.d.ts +24 -0
- package/dist/{correction-latency.js → cli/correction-latency.js} +2 -14
- package/dist/cli/curate.d.ts +13 -17
- package/dist/cli/curate.js +226 -222
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +70 -52
- package/dist/cli/decisions.d.ts +4 -3
- package/dist/cli/decisions.js +129 -253
- package/dist/cli/eval.d.ts +1 -3
- package/dist/cli/eval.js +56 -42
- 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 +39 -21
- package/dist/cli/flag-values.d.ts +30 -0
- package/dist/cli/flag-values.js +120 -0
- package/dist/cli/flags.d.ts +304 -0
- package/dist/cli/flags.js +169 -0
- package/dist/cli/github.d.ts +14 -0
- package/dist/cli/github.js +184 -0
- package/dist/cli/goals.d.ts +2 -1
- package/dist/cli/goals.js +76 -75
- package/dist/cli/hook-runtime.d.ts +31 -0
- package/dist/cli/hook-runtime.js +139 -0
- package/dist/cli/init.d.ts +2 -1
- package/dist/cli/init.js +153 -126
- package/dist/cli/install-steps.d.ts +7 -0
- package/dist/cli/install-steps.js +101 -0
- package/dist/cli/last-sleep.d.ts +3 -1
- package/dist/cli/last-sleep.js +12 -7
- package/dist/cli/maintenance.d.ts +5 -4
- package/dist/cli/maintenance.js +41 -42
- package/dist/cli/object-verbs.d.ts +40 -0
- package/dist/cli/object-verbs.js +66 -0
- package/dist/cli/owner-validation.d.ts +18 -0
- package/dist/cli/owner-validation.js +33 -0
- package/dist/cli/playbooks.d.ts +4 -3
- package/dist/cli/playbooks.js +98 -306
- package/dist/cli/print.d.ts +15 -0
- package/dist/cli/print.js +82 -0
- package/dist/cli/projects.d.ts +2 -3
- package/dist/cli/projects.js +56 -51
- package/dist/cli/provenance-coverage.d.ts +14 -0
- package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +2 -6
- package/dist/cli/quality-repair-once.js +4 -4
- package/dist/cli/recall.d.ts +2 -6
- package/dist/cli/recall.js +128 -253
- package/dist/cli/refine-llm.d.ts +35 -0
- package/dist/cli/refine-llm.js +128 -0
- package/dist/cli/remember.d.ts +4 -6
- package/dist/cli/remember.js +193 -230
- package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +4 -17
- package/dist/{scheduler.js → cli/scheduler.js} +22 -22
- package/dist/cli/serve.d.ts +1 -1
- package/dist/cli/serve.js +46 -7
- package/dist/cli/session-hooks.d.ts +11 -19
- package/dist/cli/session-hooks.js +263 -258
- package/dist/cli/setup.d.ts +4 -3
- package/dist/cli/setup.js +55 -37
- package/dist/cli/shared.d.ts +14 -118
- package/dist/cli/shared.js +26 -400
- package/dist/cli/slack.d.ts +2 -1
- package/dist/cli/slack.js +46 -74
- package/dist/cli/sleep-render.d.ts +4 -0
- package/dist/cli/sleep-render.js +61 -0
- package/dist/cli/sleep.d.ts +3 -8
- package/dist/cli/sleep.js +34 -91
- package/dist/cli/status.d.ts +9 -12
- package/dist/cli/status.js +86 -131
- package/dist/{stdin.d.ts → cli/stdin.d.ts} +4 -6
- package/dist/{stdin.js → cli/stdin.js} +8 -9
- package/dist/cli/transfer.d.ts +9 -9
- package/dist/cli/transfer.js +125 -122
- package/dist/cli/usage.js +13 -5
- package/dist/cli.d.ts +69 -167
- package/dist/cli.js +187 -296
- package/dist/connectors/dlq.d.ts +44 -0
- package/dist/connectors/dlq.js +30 -0
- package/dist/connectors/github/backfill.d.ts +6 -26
- package/dist/connectors/github/backfill.js +42 -114
- package/dist/connectors/github/deletion.d.ts +6 -21
- package/dist/connectors/github/deletion.js +17 -64
- package/dist/connectors/github/dlq.d.ts +12 -91
- package/dist/connectors/github/dlq.js +23 -140
- package/dist/connectors/github/ingest.d.ts +4 -37
- package/dist/connectors/github/ingest.js +24 -93
- package/dist/connectors/github/octokit-client.d.ts +5 -17
- package/dist/connectors/github/octokit-client.js +29 -25
- 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 +4 -26
- package/dist/connectors/github/tenant-routing.js +13 -61
- package/dist/connectors/github/transform.d.ts +1 -1
- package/dist/connectors/github/transform.js +2 -16
- package/dist/connectors/github/types.d.ts +4 -16
- package/dist/connectors/github/types.js +17 -27
- package/dist/connectors/github/webhook.d.ts +5 -18
- package/dist/connectors/github/webhook.js +86 -105
- package/dist/connectors/slack/backfill.d.ts +5 -18
- package/dist/connectors/slack/backfill.js +9 -42
- package/dist/connectors/slack/deletion.d.ts +4 -7
- package/dist/connectors/slack/deletion.js +20 -49
- package/dist/connectors/slack/dlq.d.ts +9 -68
- package/dist/connectors/slack/dlq.js +26 -136
- package/dist/connectors/slack/ingest.d.ts +4 -18
- package/dist/connectors/slack/ingest.js +26 -91
- 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/signature.js +2 -1
- package/dist/connectors/slack/tenant-routing.d.ts +4 -18
- package/dist/connectors/slack/tenant-routing.js +11 -31
- package/dist/connectors/slack/transform.d.ts +3 -19
- package/dist/connectors/slack/transform.js +2 -18
- package/dist/connectors/slack/types.d.ts +4 -10
- package/dist/connectors/slack/types.js +5 -16
- package/dist/connectors/slack/web-client.js +34 -28
- package/dist/connectors/slack/webhook.d.ts +5 -21
- package/dist/connectors/slack/webhook.js +80 -108
- package/dist/connectors/slack/workspaces.d.ts +8 -41
- package/dist/connectors/slack/workspaces.js +8 -58
- package/dist/consolidate/conflicts.d.ts +1 -1
- package/dist/consolidate/conflicts.js +10 -18
- package/dist/consolidate/dag-summary.d.ts +8 -0
- package/dist/consolidate/dag-summary.js +41 -0
- package/dist/{dag.d.ts → consolidate/dag.d.ts} +6 -29
- package/dist/{dag.js → consolidate/dag.js} +49 -131
- package/dist/consolidate/decay.d.ts +2 -2
- package/dist/consolidate/decay.js +35 -41
- package/dist/consolidate/dedupe.d.ts +29 -0
- package/dist/consolidate/dedupe.js +103 -0
- package/dist/consolidate/flush-units.d.ts +5 -6
- package/dist/consolidate/flush-units.js +3 -3
- package/dist/consolidate/half-life-migration.d.ts +34 -0
- package/dist/consolidate/half-life-migration.js +89 -0
- package/dist/consolidate/llm-passes.js +12 -29
- package/dist/consolidate/memory-value-weights.d.ts +8 -0
- package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +2 -13
- package/dist/consolidate/memory-value.d.ts +45 -0
- package/dist/consolidate/memory-value.js +164 -0
- package/dist/consolidate/merge.js +65 -83
- package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
- package/dist/{merged-row.js → consolidate/merged-row.js} +4 -3
- package/dist/consolidate/physics-pass.js +46 -48
- package/dist/consolidate/replay.d.ts +9 -0
- package/dist/consolidate/replay.js +84 -0
- package/dist/consolidate/run.d.ts +7 -13
- package/dist/consolidate/run.js +6 -37
- package/dist/consolidate/sleep.d.ts +2 -9
- package/dist/consolidate/sleep.js +69 -151
- package/dist/consolidate/trace.d.ts +19 -0
- package/dist/{trace.js → consolidate/trace.js} +7 -24
- package/dist/consolidate/traces.js +40 -51
- package/dist/core/ablation.d.ts +15 -0
- package/dist/core/ablation.js +49 -0
- package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
- package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
- package/dist/{ambient.d.ts → core/ambient.d.ts} +1 -8
- package/dist/{ambient.js → core/ambient.js} +13 -18
- package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +16 -3
- package/dist/{capture-contract.js → core/capture-contract.js} +67 -1
- package/dist/{card.d.ts → core/card.d.ts} +4 -1
- package/dist/{card.js → core/card.js} +8 -0
- package/dist/core/compare.d.ts +32 -0
- package/dist/core/compare.js +70 -0
- package/dist/{config.d.ts → core/config.d.ts} +14 -28
- package/dist/{config.js → core/config.js} +101 -75
- package/dist/{handoff.d.ts → core/handoff.d.ts} +1 -7
- package/dist/core/handoff.js +81 -0
- package/dist/{memory-quality.js → core/memory-quality.js} +2 -2
- package/dist/core/memory.d.ts +183 -0
- package/dist/core/memory.js +380 -0
- package/dist/core/package-root.d.ts +3 -0
- package/dist/core/package-root.js +5 -0
- package/dist/{physics-config.d.ts → core/physics-config.d.ts} +1 -4
- package/dist/{physics-config.js → core/physics-config.js} +3 -8
- package/dist/{physics.d.ts → core/physics.d.ts} +16 -62
- package/dist/{physics.js → core/physics.js} +60 -122
- package/dist/{project-identity.d.ts → core/project-identity.d.ts} +17 -63
- package/dist/{project-identity.js → core/project-identity.js} +22 -55
- package/dist/{project-remote.js → core/project-remote.js} +17 -6
- package/dist/{prompt-recall.js → core/prompt-recall.js} +1 -1
- package/dist/core/raw-append-only.d.ts +5 -0
- package/dist/core/raw-append-only.js +7 -0
- package/dist/{salience.d.ts → core/salience.d.ts} +1 -7
- package/dist/{salience.js → core/salience.js} +36 -27
- package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
- package/dist/{search/types.js → core/search-types.js} +1 -1
- package/dist/core/session-digest-row.d.ts +5 -0
- package/dist/core/session-digest-row.js +6 -0
- package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
- package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +7 -7
- package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
- package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
- package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +11 -10
- package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +110 -104
- package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +2 -1
- package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +1 -0
- package/dist/{dashboard.js → dashboard/dashboard.js} +172 -55
- package/dist/db/backup.js +1 -1
- package/dist/db/busy.d.ts +19 -2
- package/dist/db/busy.js +88 -14
- package/dist/db/connect.d.ts +11 -2
- package/dist/db/connect.js +43 -10
- package/dist/db/index.d.ts +9 -0
- package/dist/db/index.js +8 -0
- package/dist/db/meta.d.ts +4 -0
- package/dist/db/meta.js +11 -1
- package/dist/db/migrate.d.ts +8 -1
- package/dist/db/migrate.js +28 -33
- package/dist/db/migrations/types.d.ts +2 -5
- package/dist/db/migrations/v08.js +1 -1
- package/dist/db/migrations/v14.js +39 -36
- package/dist/db/migrations/v15.js +2 -8
- package/dist/db/migrations/v16.js +31 -29
- package/dist/db/migrations/v17.js +2 -3
- package/dist/db/migrations/v18.js +6 -5
- package/dist/db/migrations/v19.js +2 -5
- package/dist/db/migrations/v20.js +5 -8
- package/dist/db/migrations/v22.js +28 -38
- package/dist/db/migrations/v23.js +3 -14
- package/dist/db/migrations/v24.js +25 -22
- 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 +23 -32
- package/dist/db/migrations/v30.js +4 -16
- package/dist/db/migrations/v31.js +23 -31
- 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 +10 -21
- package/dist/db/migrations/v40.js +8 -14
- package/dist/db/migrations/v41.js +2 -24
- package/dist/db/migrations/v43.js +7 -6
- package/dist/db/migrations/v44.js +2 -8
- package/dist/db/migrations/v45.js +2 -7
- package/dist/db/migrations/v46.js +1 -1
- package/dist/db/migrations/v47.js +2 -3
- package/dist/db/migrations/v48.js +1 -1
- package/dist/db/migrations/v49.js +1 -1
- package/dist/db/migrations/v50.js +8 -7
- package/dist/db/migrations/v51.js +1 -1
- package/dist/db/migrations/v52.js +1 -1
- package/dist/db/open.d.ts +11 -1
- package/dist/db/open.js +37 -4
- package/dist/db/physics-state.d.ts +23 -0
- package/dist/{physics-state.js → db/physics-state.js} +34 -52
- package/dist/db/raw-archive-mirror-cleanup.d.ts +5 -0
- package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +10 -20
- package/dist/db/request-stores.d.ts +15 -2
- package/dist/db/request-stores.js +37 -15
- package/dist/db/tables.d.ts +2 -0
- package/dist/db/tables.js +6 -0
- package/dist/{vector-store.d.ts → db/vector-store.d.ts} +6 -2
- package/dist/{vector-store.js → db/vector-store.js} +83 -51
- package/dist/db/wal-checkpointer.d.ts +11 -0
- package/dist/db/wal-checkpointer.js +92 -0
- package/dist/doctor.js +176 -152
- package/dist/entry/json-hooks.d.ts +1 -1
- package/dist/entry/json-hooks.js +1 -1
- package/dist/entry/project-identity.d.ts +1 -1
- package/dist/entry/project-identity.js +1 -1
- package/dist/entry/session-text.d.ts +3 -3
- package/dist/entry/session-text.js +5 -4
- package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +15 -53
- package/dist/{eval-stats.js → eval/eval-stats.js} +24 -51
- package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +3 -14
- package/dist/{eval-suite.js → eval/eval-suite.js} +99 -57
- package/dist/{eval.d.ts → eval/eval.d.ts} +7 -25
- package/dist/{eval.js → eval/eval.js} +35 -55
- package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -6
- package/dist/{judgment.js → eval/judgment.js} +23 -20
- package/dist/extensions/openclaw-plugin/index.js +2 -3
- package/dist/graph/delta.d.ts +3 -2
- package/dist/graph/delta.js +9 -23
- package/dist/{graph-extract.d.ts → graph/extract.d.ts} +10 -32
- package/dist/{graph-extract.js → graph/extract.js} +40 -81
- package/dist/{graph-recall.d.ts → graph/recall.d.ts} +9 -22
- package/dist/{graph-recall.js → graph/recall.js} +65 -108
- package/dist/graph/stream.d.ts +38 -0
- package/dist/{graph-stream.js → graph/stream.js} +20 -41
- package/dist/graph/view.d.ts +50 -0
- package/dist/graph/view.js +265 -0
- package/dist/graph/write.d.ts +4 -76
- package/dist/graph/write.js +13 -397
- package/dist/hooks/codex-session.js +1 -1
- package/dist/hooks/codex-wrapper.js +16 -17
- package/dist/hooks/copilot.d.ts +1 -8
- package/dist/hooks/copilot.js +16 -16
- package/dist/{cli → hooks}/hook-blocks.d.ts +6 -2
- package/dist/{cli → hooks}/hook-blocks.js +38 -125
- package/dist/hooks/json-hooks.d.ts +5 -37
- package/dist/hooks/json-hooks.js +49 -179
- package/dist/hooks/opencode.d.ts +0 -38
- package/dist/hooks/opencode.js +44 -103
- package/dist/hooks/shared.d.ts +8 -21
- package/dist/hooks/shared.js +30 -25
- package/dist/importers/core.d.ts +13 -42
- package/dist/importers/core.js +48 -64
- package/dist/importers/markdown-parse.d.ts +9 -32
- package/dist/importers/markdown-parse.js +10 -44
- package/dist/importers/markdown.js +5 -13
- package/dist/importers/sources.js +57 -81
- package/dist/importers/vault.d.ts +2 -8
- package/dist/importers/vault.js +95 -172
- package/dist/index.d.ts +26 -22
- package/dist/index.js +25 -21
- package/dist/learn/autolearn.d.ts +29 -0
- package/dist/{autolearn.js → learn/autolearn.js} +26 -51
- package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
- package/dist/{churn-git.js → learn/churn-git.js} +6 -4
- package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
- package/dist/learn/extract.js +123 -0
- package/dist/learn/forward-claim-detector.d.ts +12 -0
- package/dist/learn/forward-claim-detector.js +60 -0
- package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +10 -18
- package/dist/{invalidation.js → learn/invalidation.js} +92 -125
- package/dist/mcp/admin-tools.d.ts +1 -1
- package/dist/mcp/admin-tools.js +39 -64
- package/dist/mcp/format.d.ts +5 -5
- package/dist/mcp/format.js +7 -6
- package/dist/mcp/framing.d.ts +6 -0
- package/dist/mcp/framing.js +11 -3
- package/dist/mcp/memory-tools.js +10 -35
- package/dist/mcp/protocol.d.ts +14 -36
- package/dist/mcp/protocol.js +10 -19
- package/dist/mcp/recall-tools.d.ts +2 -2
- package/dist/mcp/recall-tools.js +70 -52
- package/dist/mcp/request.d.ts +3 -11
- package/dist/mcp/request.js +71 -85
- package/dist/mcp/server.d.ts +3 -9
- package/dist/mcp/server.js +6 -17
- package/dist/mcp/session-state.d.ts +2 -3
- package/dist/mcp/session-state.js +7 -13
- package/dist/mcp/shared-gate.js +1 -1
- package/dist/mcp/stdio.d.ts +2 -6
- package/dist/mcp/stdio.js +112 -38
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +7 -5
- package/dist/objects/customer-notes.d.ts +44 -0
- package/dist/objects/customer-notes.js +71 -0
- package/dist/objects/decisions.d.ts +41 -0
- package/dist/objects/decisions.js +63 -0
- package/dist/objects/descriptor.d.ts +52 -0
- package/dist/objects/descriptor.js +4 -0
- package/dist/objects/fields.d.ts +15 -0
- package/dist/objects/fields.js +21 -0
- package/dist/objects/incidents.d.ts +45 -0
- package/dist/objects/incidents.js +96 -0
- package/dist/objects/lifecycle.d.ts +27 -0
- package/dist/objects/lifecycle.js +96 -0
- package/dist/objects/policies.d.ts +60 -0
- package/dist/objects/policies.js +102 -0
- package/dist/objects/processes.d.ts +43 -0
- package/dist/objects/processes.js +92 -0
- package/dist/objects/project-briefs.d.ts +63 -0
- package/dist/objects/project-briefs.js +194 -0
- package/dist/objects/skills.d.ts +51 -0
- package/dist/objects/skills.js +110 -0
- package/dist/postinstall.js +10 -21
- package/dist/predictions/planning-fallacy.d.ts +14 -109
- package/dist/predictions/planning-fallacy.js +4 -129
- package/dist/rerankers/clef.d.ts +2 -6
- package/dist/rerankers/clef.js +28 -76
- package/dist/rerankers/cross-encoder.d.ts +0 -7
- package/dist/rerankers/cross-encoder.js +18 -28
- package/dist/rerankers/index.js +8 -7
- package/dist/rerankers/jev.d.ts +1 -4
- package/dist/rerankers/jev.js +36 -52
- package/dist/rerankers/llm.d.ts +2 -13
- package/dist/rerankers/llm.js +42 -59
- package/dist/rerankers/outage-warning.d.ts +8 -0
- package/dist/rerankers/outage-warning.js +32 -0
- package/dist/rerankers/remote.d.ts +4 -0
- package/dist/rerankers/remote.js +25 -0
- package/dist/rerankers/types.d.ts +3 -15
- package/dist/search/as-of.d.ts +1 -1
- package/dist/search/bm25-search.d.ts +2 -2
- package/dist/search/bm25-search.js +7 -7
- package/dist/search/bm25.d.ts +1 -1
- package/dist/search/bm25.js +1 -1
- package/dist/search/boosts.d.ts +5 -3
- package/dist/search/boosts.js +36 -15
- package/dist/search/breakdown.d.ts +2 -2
- package/dist/search/breakdown.js +2 -1
- package/dist/search/explain.d.ts +1 -1
- package/dist/search/explain.js +3 -2
- package/dist/search/finalize.d.ts +2 -2
- package/dist/search/finalize.js +4 -3
- package/dist/search/fusion.d.ts +1 -1
- package/dist/search/fusion.js +3 -3
- package/dist/search/goal-boost.d.ts +23 -0
- package/dist/search/goal-boost.js +90 -0
- package/dist/search/hybrid-score.d.ts +2 -2
- package/dist/search/hybrid-score.js +1 -1
- package/dist/search/hybrid.d.ts +6 -4
- package/dist/search/hybrid.js +11 -8
- package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
- package/dist/{multihop.js → search/multihop.js} +9 -8
- package/dist/search/path-context.d.ts +11 -0
- package/dist/{path-context.js → search/path-context.js} +8 -19
- package/dist/search/physics-search.d.ts +4 -4
- package/dist/search/physics-search.js +25 -22
- package/dist/search/rerank.d.ts +3 -3
- package/dist/search/rerank.js +4 -3
- package/dist/search/rrf.d.ts +15 -0
- package/dist/search/rrf.js +36 -0
- package/dist/search/temporal.d.ts +1 -1
- package/dist/search/temporal.js +5 -2
- package/dist/search/vector.d.ts +10 -3
- package/dist/search/vector.js +51 -15
- package/dist/server/auth.d.ts +10 -29
- package/dist/server/auth.js +57 -42
- package/dist/server/boot.d.ts +5 -0
- package/dist/server/boot.js +432 -0
- package/dist/server/client-ip.d.ts +8 -20
- package/dist/server/client-ip.js +23 -34
- package/dist/server/cursor.d.ts +1 -1
- package/dist/server/cursor.js +2 -3
- package/dist/server/deadline.d.ts +13 -0
- package/dist/server/deadline.js +45 -0
- package/dist/server/defaults.d.ts +3 -0
- package/dist/server/defaults.js +4 -0
- package/dist/server/key-check-bounds.d.ts +9 -0
- package/dist/server/key-check-bounds.js +46 -0
- package/dist/server/lifecycle.d.ts +5 -4
- package/dist/server/lifecycle.js +20 -5
- package/dist/server/mcp-http.d.ts +1 -4
- package/dist/server/mcp-http.js +44 -68
- package/dist/server/rate-limit.d.ts +21 -0
- package/dist/{rate-limit.js → server/rate-limit.js} +4 -13
- package/dist/server/ready.d.ts +7 -0
- package/dist/server/ready.js +38 -0
- package/dist/server/request.d.ts +14 -12
- package/dist/server/request.js +71 -28
- package/dist/server/route-table.d.ts +15 -0
- package/dist/server/route-table.js +202 -0
- package/dist/server/routes/admin.js +29 -30
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +35 -105
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +45 -115
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +44 -105
- package/dist/server/routes/memories.js +21 -43
- package/dist/server/routes/object-routes.d.ts +35 -0
- package/dist/server/routes/object-routes.js +72 -0
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +42 -134
- package/dist/server/routes/predictions.js +35 -63
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +44 -134
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +41 -120
- package/dist/server/routes/recall.js +21 -44
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +40 -138
- package/dist/server/server-detect.d.ts +28 -0
- package/dist/server/server-detect.js +156 -0
- package/dist/server/sleep-child.d.ts +2 -0
- package/dist/server/sleep-child.js +19 -0
- package/dist/server/sleep-offload.d.ts +20 -0
- package/dist/server/sleep-offload.js +73 -0
- package/dist/server/tls.d.ts +6 -0
- package/dist/server/tls.js +24 -0
- package/dist/server/types.d.ts +35 -14
- package/dist/server/validation.d.ts +6 -5
- package/dist/server/validation.js +16 -34
- package/dist/server.d.ts +39 -61
- package/dist/server.js +26 -569
- 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/{project-merge.d.ts → sharing/project-merge.d.ts} +5 -6
- package/dist/{project-merge.js → sharing/project-merge.js} +34 -51
- package/dist/sharing/scope.d.ts +7 -0
- package/dist/{scope.js → sharing/scope.js} +5 -12
- 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/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
- package/dist/{ambient-store.js → store/ambient.js} +11 -16
- package/dist/store/audit-event.d.ts +15 -17
- package/dist/store/audit-event.js +9 -16
- package/dist/{audit.d.ts → store/audit.d.ts} +29 -8
- package/dist/{audit.js → store/audit.js} +95 -18
- package/dist/{auth.d.ts → store/auth.d.ts} +19 -36
- package/dist/{auth.js → store/auth.js} +108 -99
- package/dist/store/candidates.d.ts +41 -13
- package/dist/store/candidates.js +141 -60
- package/dist/{card-detail.d.ts → store/card-detail.d.ts} +5 -4
- package/dist/{card-detail.js → store/card-detail.js} +3 -2
- package/dist/{store-cards.d.ts → store/cards.d.ts} +26 -16
- package/dist/{store-cards.js → store/cards.js} +133 -248
- package/dist/store/compactions.d.ts +78 -0
- package/dist/store/compactions.js +93 -0
- package/dist/store/conflicts.d.ts +26 -26
- package/dist/store/conflicts.js +194 -222
- package/dist/store/connectors/github.d.ts +84 -0
- package/dist/store/connectors/github.js +180 -0
- package/dist/store/connectors/slack.d.ts +69 -0
- package/dist/store/connectors/slack.js +177 -0
- package/dist/store/dashboard-reads.d.ts +27 -0
- package/dist/store/dashboard-reads.js +88 -0
- package/dist/store/delete-and-batch.d.ts +27 -51
- package/dist/store/delete-and-batch.js +100 -92
- package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +16 -5
- package/dist/{delivery-recorder.js → store/delivery-recorder.js} +60 -38
- package/dist/store/descendant-page.d.ts +12 -0
- package/dist/store/descendant-page.js +99 -0
- package/dist/store/diagnostics.d.ts +47 -0
- package/dist/store/diagnostics.js +44 -0
- package/dist/store/doctor-reads.d.ts +16 -0
- package/dist/store/doctor-reads.js +19 -0
- package/dist/store/dormant.d.ts +105 -0
- package/dist/store/dormant.js +241 -0
- package/dist/store/embeddings/index.d.ts +36 -0
- package/dist/{embeddings.js → store/embeddings/index.js} +104 -224
- package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
- package/dist/{local-embedding.js → store/embeddings/local.js} +69 -75
- package/dist/store/embeddings/provider.d.ts +40 -0
- package/dist/{embedding-provider.js → store/embeddings/provider.js} +78 -91
- package/dist/store/entry-reads.d.ts +66 -63
- package/dist/store/entry-reads.js +159 -121
- package/dist/store/entry-row.d.ts +14 -37
- package/dist/store/entry-row.js +37 -45
- package/dist/store/entry-writes.d.ts +40 -17
- package/dist/store/entry-writes.js +105 -41
- package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
- package/dist/{failure-log.js → store/failure-log.js} +9 -2
- package/dist/store/goals.d.ts +96 -0
- package/dist/store/goals.js +260 -0
- package/dist/store/graph-queue.d.ts +13 -0
- package/dist/store/graph-queue.js +70 -0
- package/dist/store/graph-reads.d.ts +41 -0
- package/dist/{graph/read.js → store/graph-reads.js} +72 -162
- package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +71 -14
- package/dist/{graph/rows.js → store/graph-rows.js} +20 -12
- package/dist/store/graph-view-rows.d.ts +13 -0
- package/dist/store/graph-view-rows.js +68 -0
- package/dist/store/graph-writes.d.ts +33 -0
- package/dist/store/graph-writes.js +232 -0
- package/dist/store/half-life.d.ts +35 -0
- package/dist/store/half-life.js +75 -0
- package/dist/store/handoffs.d.ts +6 -12
- package/dist/store/handoffs.js +54 -63
- package/dist/store/index-and-stats.d.ts +14 -20
- package/dist/store/index-and-stats.js +74 -119
- package/dist/store/index.d.ts +4 -0
- package/dist/store/index.js +3 -0
- package/dist/store/key-audit.d.ts +2 -2
- package/dist/store/key-audit.js +4 -4
- package/dist/store/key-writes.d.ts +12 -5
- package/dist/store/key-writes.js +30 -4
- package/dist/store/ledger-turn.d.ts +17 -0
- package/dist/store/ledger-turn.js +27 -0
- package/dist/store/markdown.d.ts +3 -7
- package/dist/store/markdown.js +25 -23
- package/dist/store/mirrors.d.ts +7 -13
- package/dist/store/mirrors.js +52 -47
- package/dist/store/object-types.d.ts +189 -0
- package/dist/store/object-types.js +4 -0
- package/dist/store/open.d.ts +6 -4
- package/dist/store/open.js +30 -36
- package/dist/store/planning-fallacy-evidence.d.ts +14 -0
- package/dist/store/planning-fallacy-evidence.js +52 -0
- package/dist/store/port.d.ts +649 -0
- package/dist/store/port.js +17 -0
- package/dist/{predictions/store.d.ts → store/predictions.d.ts} +25 -52
- package/dist/{predictions/store.js → store/predictions.js} +88 -184
- package/dist/{quality-repair.js → store/quality-repair.js} +27 -57
- package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
- package/dist/{quarantine.js → store/quarantine.js} +64 -22
- package/dist/store/raw-archive.d.ts +14 -0
- package/dist/{raw-archive.js → store/raw-archive.js} +20 -31
- package/dist/store/recall-scope.d.ts +78 -0
- package/dist/{recall-scope.js → store/recall-scope.js} +23 -84
- package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -81
- package/dist/{recall-trace.js → store/recall-trace.js} +41 -122
- package/dist/store/rejected-values.d.ts +55 -0
- package/dist/store/rejected-values.js +150 -0
- package/dist/store/rejection.d.ts +54 -0
- package/dist/{rejection.js → store/rejection.js} +16 -67
- package/dist/store/report-reads.d.ts +6 -0
- package/dist/store/report-reads.js +29 -0
- package/dist/store/rows.d.ts +11 -22
- package/dist/store/rows.js +52 -43
- package/dist/store/rule-sql.d.ts +5 -0
- package/dist/store/rule-sql.js +37 -0
- package/dist/store/search-rows.d.ts +22 -42
- package/dist/store/search-rows.js +55 -78
- package/dist/store/sessions.d.ts +23 -49
- package/dist/store/sessions.js +96 -118
- package/dist/store/sqlite/commit-watch.d.ts +4 -0
- package/dist/store/sqlite/commit-watch.js +29 -0
- package/dist/store/sqlite/connector-events-group.d.ts +5 -0
- package/dist/store/sqlite/connector-events-group.js +50 -0
- package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
- package/dist/store/sqlite/connector-writes-group.js +65 -0
- package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
- package/dist/store/sqlite/dag-reads-group.js +45 -0
- package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
- package/dist/store/{entry-writes-group.js → sqlite/entry-writes-group.js} +73 -60
- package/dist/store/sqlite/error-codec.d.ts +17 -0
- package/dist/store/sqlite/error-codec.js +61 -0
- package/dist/store/sqlite/executor-counts.d.ts +10 -0
- package/dist/store/sqlite/executor-counts.js +11 -0
- package/dist/store/sqlite/executor.d.ts +29 -0
- package/dist/store/sqlite/executor.js +287 -0
- package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
- package/dist/store/sqlite/graph-reads-group.js +18 -0
- package/dist/store/sqlite/local.d.ts +21 -0
- package/dist/store/sqlite/local.js +39 -0
- package/dist/store/sqlite/object-rows.d.ts +102 -0
- package/dist/store/sqlite/object-rows.js +221 -0
- package/dist/store/sqlite/objects-group.d.ts +20 -0
- package/dist/store/sqlite/objects-group.js +316 -0
- package/dist/store/sqlite/predictions-group.d.ts +5 -0
- package/dist/store/sqlite/predictions-group.js +28 -0
- package/dist/store/sqlite/quarantine-group.d.ts +5 -0
- package/dist/store/sqlite/quarantine-group.js +38 -0
- package/dist/store/sqlite/store.d.ts +23 -0
- package/dist/store/sqlite/store.js +294 -0
- package/dist/store/sqlite/vector-pack.d.ts +18 -0
- package/dist/store/sqlite/vector-pack.js +46 -0
- package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
- package/dist/store/sqlite/vector-reads-group.js +23 -0
- package/dist/store/sqlite/worker-entry.d.ts +2 -0
- package/dist/store/sqlite/worker-entry.js +8 -0
- package/dist/store/sqlite/worker-jobs.d.ts +5 -0
- package/dist/store/sqlite/worker-jobs.js +116 -0
- package/dist/store/sqlite/worker-ops.d.ts +135 -0
- package/dist/store/sqlite/worker-ops.js +93 -0
- package/dist/store/sqlite/worker-store.d.ts +8 -0
- package/dist/store/sqlite/worker-store.js +79 -0
- package/dist/store/summaries.d.ts +11 -72
- package/dist/store/summaries.js +47 -186
- package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
- package/dist/{summary-dirty.js → 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 +11 -0
- package/dist/store/tenant.js +28 -0
- package/dist/store/token-ledger-rows.d.ts +61 -0
- package/dist/store/token-ledger-rows.js +68 -0
- package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +14 -51
- package/dist/{token-ledger.js → store/token-ledger.js} +51 -129
- package/dist/store/tombstone-checks.d.ts +12 -0
- package/dist/store/tombstone-checks.js +31 -0
- package/dist/store/usage-reports.d.ts +7 -0
- package/dist/store/usage-reports.js +18 -0
- package/dist/store/vector-index.d.ts +46 -0
- package/dist/store/vector-index.js +170 -0
- package/dist/{working-memory.d.ts → store/working-memory.d.ts} +11 -26
- package/dist/store/working-memory.js +118 -0
- package/dist/{yaml.d.ts → store/yaml.d.ts} +1 -5
- package/dist/{yaml.js → store/yaml.js} +2 -6
- package/dist/support-bundle.d.ts +1 -1
- package/dist/support-bundle.js +19 -37
- package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
- package/dist/{gated-write.js → trust/gated-write.js} +6 -6
- package/dist/trust/quarantine.d.ts +4 -0
- package/dist/trust/quarantine.js +8 -0
- package/dist/trust/reject-flow.d.ts +23 -0
- package/dist/trust/reject-flow.js +65 -0
- package/dist/util/anthropic-messages.d.ts +31 -0
- package/dist/util/anthropic-messages.js +58 -0
- package/dist/util/atomic-write.d.ts +4 -0
- package/dist/util/atomic-write.js +138 -0
- package/dist/util/capped-json.d.ts +6 -0
- package/dist/util/capped-json.js +46 -0
- package/dist/util/crash-handlers.d.ts +12 -0
- package/dist/util/crash-handlers.js +72 -0
- package/dist/{env.d.ts → util/env.d.ts} +27 -7
- package/dist/{env.js → util/env.js} +33 -8
- package/dist/{home-path.d.ts → util/home-path.d.ts} +2 -1
- package/dist/util/home-path.js +69 -0
- package/dist/{http-retry.d.ts → util/http-retry.d.ts} +8 -2
- package/dist/util/http-retry.js +103 -0
- package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
- package/dist/{http-util.js → util/http-util.js} +31 -11
- package/dist/util/json.d.ts +17 -0
- package/dist/util/json.js +25 -0
- package/dist/{log.d.ts → util/log.d.ts} +7 -3
- package/dist/{log.js → util/log.js} +36 -11
- package/dist/util/real-path.d.ts +3 -0
- package/dist/util/real-path.js +15 -0
- package/dist/util/request-scope.d.ts +28 -0
- package/dist/util/request-scope.js +48 -0
- package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
- package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +5 -30
- package/dist/{secret-detect.js → util/secret-detect.js} +17 -42
- package/dist/util/stored-json.d.ts +9 -0
- package/dist/util/stored-json.js +8 -0
- package/dist/util/time.d.ts +2 -0
- package/dist/util/time.js +3 -0
- package/dist/util/token-text.d.ts +15 -0
- package/dist/util/token-text.js +20 -0
- package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +2 -0
- package/dist/util/transcript-tail.js +49 -0
- package/dist/util/version.d.ts +11 -0
- package/dist/util/version.js +26 -0
- package/extensions/openclaw-plugin/index.ts +2 -6
- 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 +2 -2
- package/dist/ablation.d.ts +0 -102
- package/dist/ablation.js +0 -136
- package/dist/api.d.ts +0 -26
- package/dist/api.js +0 -29
- package/dist/audit-prune.d.ts +0 -62
- package/dist/audit-prune.js +0 -107
- package/dist/autolearn.d.ts +0 -56
- package/dist/client.d.ts +0 -48
- package/dist/compare.d.ts +0 -86
- package/dist/compare.js +0 -117
- package/dist/connectors/github/cli-impl.d.ts +0 -25
- package/dist/connectors/github/cli-impl.js +0 -227
- package/dist/connectors/github/idempotency.d.ts +0 -19
- package/dist/connectors/github/idempotency.js +0 -27
- package/dist/connectors/slack/idempotency.d.ts +0 -17
- package/dist/connectors/slack/idempotency.js +0 -31
- package/dist/correction-latency.d.ts +0 -36
- package/dist/customer-notes.d.ts +0 -96
- package/dist/customer-notes.js +0 -336
- package/dist/db.d.ts +0 -9
- package/dist/db.js +0 -8
- package/dist/decisions.d.ts +0 -94
- package/dist/decisions.js +0 -326
- package/dist/dedupe.d.ts +0 -75
- package/dist/dedupe.js +0 -169
- package/dist/dormant.d.ts +0 -93
- package/dist/dormant.js +0 -137
- package/dist/embedding-provider.d.ts +0 -77
- package/dist/embeddings.d.ts +0 -101
- package/dist/extract.js +0 -133
- package/dist/forward-claim-detector.d.ts +0 -36
- package/dist/forward-claim-detector.js +0 -112
- package/dist/goals.d.ts +0 -173
- package/dist/goals.js +0 -448
- package/dist/graph/read.d.ts +0 -73
- package/dist/graph/rows.d.ts +0 -45
- package/dist/graph/types.js +0 -11
- package/dist/graph-stream.d.ts +0 -70
- package/dist/graph-view.d.ts +0 -73
- package/dist/graph-view.js +0 -333
- package/dist/half-life-migration.d.ts +0 -63
- package/dist/half-life-migration.js +0 -182
- package/dist/handoff.js +0 -68
- package/dist/home-path.js +0 -24
- package/dist/http-retry.js +0 -51
- package/dist/incidents.d.ts +0 -103
- package/dist/incidents.js +0 -349
- package/dist/instruction-detect.js +0 -27
- package/dist/json.d.ts +0 -7
- package/dist/json.js +0 -11
- package/dist/ledger-db.d.ts +0 -10
- package/dist/ledger-db.js +0 -42
- package/dist/memory-value-weights.d.ts +0 -19
- package/dist/memory-value.d.ts +0 -113
- package/dist/memory-value.js +0 -250
- package/dist/memory.d.ts +0 -294
- package/dist/memory.js +0 -522
- package/dist/owner-validation.d.ts +0 -42
- package/dist/owner-validation.js +0 -56
- package/dist/path-context.d.ts +0 -24
- package/dist/physics-state.d.ts +0 -39
- package/dist/policies.d.ts +0 -151
- package/dist/policies.js +0 -434
- package/dist/processes.d.ts +0 -108
- package/dist/processes.js +0 -371
- package/dist/project-briefs.d.ts +0 -128
- package/dist/project-briefs.js +0 -523
- package/dist/provenance-coverage.d.ts +0 -18
- package/dist/rate-limit.d.ts +0 -34
- package/dist/raw-archive-mirror-cleanup.d.ts +0 -20
- package/dist/raw-archive.d.ts +0 -24
- package/dist/recall-history.d.ts +0 -131
- package/dist/recall-history.js +0 -227
- package/dist/recall-scope.d.ts +0 -138
- package/dist/refine-llm.d.ts +0 -61
- package/dist/refine-llm.js +0 -167
- package/dist/reject-flow.d.ts +0 -69
- package/dist/reject-flow.js +0 -260
- package/dist/rejection.d.ts +0 -100
- package/dist/replay.d.ts +0 -41
- package/dist/replay.js +0 -122
- package/dist/rrf.d.ts +0 -43
- package/dist/rrf.js +0 -61
- package/dist/scope.d.ts +0 -14
- package/dist/server-detect.d.ts +0 -72
- package/dist/server-detect.js +0 -222
- package/dist/session-owners.d.ts +0 -7
- package/dist/session-owners.js +0 -54
- package/dist/shared.d.ts +0 -186
- package/dist/shared.js +0 -540
- package/dist/skills.d.ts +0 -101
- package/dist/skills.js +0 -367
- package/dist/store/entry-writes-group.d.ts +0 -9
- package/dist/store/vector-writes.d.ts +0 -6
- package/dist/store/vector-writes.js +0 -59
- package/dist/store-port.d.ts +0 -262
- package/dist/store-port.js +0 -178
- package/dist/tenant.d.ts +0 -25
- package/dist/tenant.js +0 -43
- package/dist/trace.d.ts +0 -34
- package/dist/transcript-tail.js +0 -48
- package/dist/version.d.ts +0 -26
- package/dist/version.js +0 -41
- package/dist/working-memory.js +0 -154
- /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
- /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
- /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
- /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
- /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
- /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
- /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
- /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
- /package/dist/{api-errors.js → core/api-errors.js} +0 -0
- /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
- /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
- /package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +0 -0
- /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
- /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
- /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
- /package/dist/{quality-repair.d.ts → store/quality-repair.d.ts} +0 -0
- /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
- /package/dist/{escape.js → util/escape.js} +0 -0
- /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
- /package/dist/{keyset.js → util/keyset.js} +0 -0
- /package/dist/{same-text.js → util/same-text.js} +0 -0
- /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
- /package/dist/{db → util}/sqlite-blocked.js +0 -0
- /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
- /package/dist/{tokenize.js → util/tokenize.js} +0 -0
- /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
- /package/dist/{write-budget.js → util/write-budget.js} +0 -0
|
@@ -1,46 +1,12 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
* `supersedes` edges (so a 1-hop walk surfaces a supersession-linked predecessor/
|
|
11
|
-
* successor a lexical search may miss); the moment extraction emits cross-object edges
|
|
12
|
-
* (owns/depends-on/blocked-by/references) the SAME traversal lights up cross-entity
|
|
13
|
-
* multi-hop with zero rework here.
|
|
14
|
-
*
|
|
15
|
-
* Design points:
|
|
16
|
-
* 1. Graph-reached memories are loaded DIRECTLY by id (tenant-scoped PK fetch), NOT
|
|
17
|
-
* intersected with the recall handler's candidate set — that set is lexically
|
|
18
|
-
* prefiltered (loadSearchRows filters by query tokens), so intersecting would exclude
|
|
19
|
-
* exactly the lexically-orthogonal neighbours graph recall exists to surface. We
|
|
20
|
-
* re-apply the recall HARD filters to the directly-loaded rows: the FULL bi-temporal
|
|
21
|
-
* as-of rule (valid_from <= asOf AND, for a superseded row, successor.valid_from >
|
|
22
|
-
* asOf — same as cmdRecall) and the default superseded-drop. SCOPE is intentionally
|
|
23
|
-
* NOT re-applied: the CLI caller (cmdRecall) does not hard-filter scope either (it
|
|
24
|
-
* only soft-boosts it). Rows are tenant-scoped + archived-excluded (loadEntriesByIds).
|
|
25
|
-
* 2. A graph hit inherits its origin seed's relevance (minus a per-hop discount) and is
|
|
26
|
-
* placed adjacent to that seed; budget selection is by score so a high-value hit wins
|
|
27
|
-
* a token slot over a noise distractor. Dead-last appending made the feature do
|
|
28
|
-
* nothing at realistic budgets.
|
|
29
|
-
* 3. BOTH the local and global stores are expanded — a global seed's entities/relations
|
|
30
|
-
* live under the global root, so graph recall must traverse each seed in the store its
|
|
31
|
-
* graph lives in.
|
|
32
|
-
* 4. By-id loads are chunked at 500 (loadEntriesByIds caps at 500/call), so a high-fanout
|
|
33
|
-
* traversal (--hops 3 --max-neighbors 200 -> up to 600 ids) loses none.
|
|
34
|
-
*
|
|
35
|
-
* No graph writes (only SELECTs via graph.ts read helpers + store reads), so the
|
|
36
|
-
* check-graph-writes lint permits this module living outside graph.ts.
|
|
37
|
-
*/
|
|
38
|
-
import { loadEntriesByIds } from './store/entry-reads.js';
|
|
39
|
-
import { DEFAULT_RECALL_BUDGET } from './search/types.js';
|
|
40
|
-
import { estimateTokens } from './token-ledger.js';
|
|
41
|
-
import { compareEntryIdentity } from './compare.js';
|
|
42
|
-
import { loadEntitiesByMemoryId, loadEntitiesByIds, loadNeighborRelations } from './graph/read.js';
|
|
43
|
-
import { passesCliRecallScopeFilter, passesScopeFilterForRecall } from './recall-scope.js';
|
|
1
|
+
/** Multi-hop graph recall: a READ-ONLY walk of the relations graph from the lexical seeds, surfacing reached entities' memories the lexical search missed.
|
|
2
|
+
* Reached rows load by id (not intersected with the lexically prefiltered candidates), then the recall hard filters are re-applied.
|
|
3
|
+
* Hits inherit their seed's score minus a per-hop discount; both stores are expanded; no writes, so check-graph-writes permits it outside graph.ts. */
|
|
4
|
+
import { loadEntriesByIds } from '../store/entry-reads.js';
|
|
5
|
+
import { DEFAULT_RECALL_BUDGET } from '../core/search-types.js';
|
|
6
|
+
import { estimateTokens } from '../util/token-text.js';
|
|
7
|
+
import { compareEntryIdentity, compareScoresDesc } from '../core/compare.js';
|
|
8
|
+
import { loadEntitiesByMemoryId, loadEntitiesByIds, loadNeighborRelations } from '../store/graph-reads.js';
|
|
9
|
+
import { passesCliRecallScopeFilter, passesScopeFilterForRecall } from '../store/recall-scope.js';
|
|
44
10
|
/** Hard cap on `--hops` (a higher value just walks more of a finite graph; this bounds
|
|
45
11
|
* worst-case work and keeps the flag honest). */
|
|
46
12
|
export const MAX_HOPS = 3;
|
|
@@ -63,14 +29,10 @@ function loadByIdsChunked(root, tenantId, ids) {
|
|
|
63
29
|
}
|
|
64
30
|
/** BFS, both directions, up to `hops`: each reached entity's via, and the base memory it descends from. */
|
|
65
31
|
function walkRelations(root, tenantId, seedEntities, hops, maxNeighbors) {
|
|
66
|
-
// `visited`
|
|
67
|
-
// `originMemByEntityId` propagates the base-result memory id each reached node descends
|
|
68
|
-
// from (for adjacency placement + score inheritance).
|
|
32
|
+
// `visited` makes expansion cycle-safe; `originMemByEntityId` carries each node's base-result memory id for adjacency placement and score inheritance.
|
|
69
33
|
const visitedEntityIds = new Set(seedEntities.map((e) => e.id));
|
|
70
34
|
const reached = new Map();
|
|
71
|
-
// A seed/reached entity whose mirror was forgotten
|
|
72
|
-
// tolerates null so traversal still propagates origin, and the null is dropped before
|
|
73
|
-
// any memory load below (a mirror-less node has no memory to surface).
|
|
35
|
+
// A seed/reached entity whose mirror was forgotten or pruned has a null memoryId; traversal still propagates origin and the null is dropped before any load.
|
|
74
36
|
const originMemByEntityId = new Map();
|
|
75
37
|
for (const se of seedEntities)
|
|
76
38
|
originMemByEntityId.set(se.id, se.memoryId);
|
|
@@ -117,11 +79,8 @@ function walkRelations(root, tenantId, seedEntities, hops, maxNeighbors) {
|
|
|
117
79
|
/** The recall hard filters (as-of, superseded, scope) re-applied to a directly loaded graph-reached row. */
|
|
118
80
|
function passesRecallFilters(mem, via, successorValidFrom, opts) {
|
|
119
81
|
const { includeSuperseded, asOfDate, recallScope } = opts;
|
|
120
|
-
//
|
|
121
|
-
//
|
|
122
|
-
// `superseded_by` is NOT set by `hippo decide`, only the decisions table is). By
|
|
123
|
-
// default recall shows current truth, so drop it unless --include-superseded; the
|
|
124
|
-
// `from` endpoint (the newer successor) is always kept.
|
|
82
|
+
// The `to` endpoint of a `supersedes` edge IS the superseded version; the graph is authoritative because `hippo decide` does not set `superseded_by`.
|
|
83
|
+
// Drop it unless --include-superseded; the newer `from` endpoint is always kept.
|
|
125
84
|
const isSupersededEndpoint = via.relType === 'supersedes' && via.direction === 'to';
|
|
126
85
|
if (asOfDate) {
|
|
127
86
|
if (new Date(mem.valid_from) > asOfDate)
|
|
@@ -142,7 +101,8 @@ function passesRecallFilters(mem, via, successorValidFrom, opts) {
|
|
|
142
101
|
}
|
|
143
102
|
/** Traverse one store's graph from its seeds into `hitsByOrigin`. Pure reads; mutates `seenMemoryIds`
|
|
144
103
|
* and `seenContent` so a memory, or a share/promote copy of it, surfaces at most once across stores. */
|
|
145
|
-
function produceHitsForRoot(root, baseResults,
|
|
104
|
+
function produceHitsForRoot(root, baseResults, accumulators, opts) {
|
|
105
|
+
const { baseScoreByMemId, seenMemoryIds, seenContent, hitsByOrigin } = accumulators;
|
|
146
106
|
const { hops, maxNeighbors, tenantId, asOfDate } = opts;
|
|
147
107
|
// Seeds = graph entities (in THIS store) whose source memory is a base result.
|
|
148
108
|
const seedEntities = loadEntitiesByMemoryId(root, tenantId, baseResults.map((r) => r.entry.id));
|
|
@@ -151,22 +111,9 @@ function produceHitsForRoot(root, baseResults, baseScoreByMemId, seenMemoryIds,
|
|
|
151
111
|
const { reached, originMemByEntityId } = walkRelations(root, tenantId, seedEntities, hops, maxNeighbors);
|
|
152
112
|
if (reached.size === 0)
|
|
153
113
|
return;
|
|
154
|
-
// Reached entities -> source memory ids -> load DIRECTLY by id (chunked), not lexical.
|
|
155
|
-
// A mirror-less reached entity (memoryId === null) has no memory to load: drop its null
|
|
156
|
-
// id BEFORE it reaches loadByIdsChunked / the Set<string> (it cannot be recall-surfaced;
|
|
157
|
-
// it stays in entities/relations for graph extract / visualization).
|
|
158
114
|
const reachedEntities = loadEntitiesByIds(root, tenantId, [...reached.keys()]);
|
|
159
|
-
const
|
|
160
|
-
|
|
161
|
-
.filter((id) => id !== null && !seenMemoryIds.has(id)))];
|
|
162
|
-
const loadedById = new Map(loadByIdsChunked(root, tenantId, needLoad).map((m) => [m.id, m]));
|
|
163
|
-
// For the bi-temporal as-of rule on a superseded reached row we need its successor's
|
|
164
|
-
// valid_from. Batch-load the successors referenced by the loaded rows.
|
|
165
|
-
let successorValidFrom = new Map();
|
|
166
|
-
if (asOfDate) {
|
|
167
|
-
const succIds = [...new Set([...loadedById.values()].map((m) => m.superseded_by).filter((id) => !!id))];
|
|
168
|
-
successorValidFrom = new Map(loadByIdsChunked(root, tenantId, succIds).map((m) => [m.id, m.valid_from]));
|
|
169
|
-
}
|
|
115
|
+
const loadedById = loadReachedMemories(root, tenantId, reachedEntities, seenMemoryIds);
|
|
116
|
+
const successorValidFrom = loadSuccessorValidFrom(root, tenantId, loadedById, asOfDate);
|
|
170
117
|
for (const ent of reachedEntities) {
|
|
171
118
|
if (ent.memoryId === null)
|
|
172
119
|
continue; // mirror-less node: not recall-surfaced
|
|
@@ -184,37 +131,46 @@ function produceHitsForRoot(root, baseResults, baseScoreByMemId, seenMemoryIds,
|
|
|
184
131
|
const originScore = baseScoreByMemId.get(origin) ?? baseResults[baseResults.length - 1].score;
|
|
185
132
|
seenMemoryIds.add(mem.id);
|
|
186
133
|
seenContent.add(mem.content);
|
|
187
|
-
const hit =
|
|
188
|
-
entry: mem,
|
|
189
|
-
score: originScore * (1 - HOP_DISCOUNT * via.hops),
|
|
190
|
-
bm25: 0, cosine: 0,
|
|
191
|
-
tokens: estimateTokens(mem.content),
|
|
192
|
-
graphVia: via,
|
|
193
|
-
};
|
|
134
|
+
const hit = buildGraphHit(mem, via, originScore);
|
|
194
135
|
if (!hitsByOrigin.has(origin))
|
|
195
136
|
hitsByOrigin.set(origin, []);
|
|
196
137
|
hitsByOrigin.get(origin).push(hit);
|
|
197
138
|
}
|
|
198
139
|
}
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
*
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
140
|
+
function buildGraphHit(mem, via, originScore) {
|
|
141
|
+
return {
|
|
142
|
+
entry: mem,
|
|
143
|
+
score: originScore * (1 - HOP_DISCOUNT * via.hops),
|
|
144
|
+
bm25: 0, cosine: 0,
|
|
145
|
+
tokens: estimateTokens(mem.content),
|
|
146
|
+
graphVia: via,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
// Reached entities -> source memory ids -> load by id (chunked). A mirror-less entity (memoryId === null) has no memory to surface,
|
|
150
|
+
// so drop its null id before it reaches loadByIdsChunked.
|
|
151
|
+
function loadReachedMemories(root, tenantId, reachedEntities, seenMemoryIds) {
|
|
152
|
+
const needLoad = [...new Set(reachedEntities
|
|
153
|
+
.map((e) => e.memoryId)
|
|
154
|
+
.filter((id) => id !== null && !seenMemoryIds.has(id)))];
|
|
155
|
+
return new Map(loadByIdsChunked(root, tenantId, needLoad).map((m) => [m.id, m]));
|
|
156
|
+
}
|
|
157
|
+
// For the bi-temporal as-of rule on a superseded reached row we need its successor's
|
|
158
|
+
// valid_from. Batch-load the successors referenced by the loaded rows.
|
|
159
|
+
function loadSuccessorValidFrom(root, tenantId, loadedById, asOfDate) {
|
|
160
|
+
if (!asOfDate)
|
|
161
|
+
return new Map();
|
|
162
|
+
const succIds = [...new Set([...loadedById.values()].map((m) => m.superseded_by).filter((id) => !!id))];
|
|
163
|
+
return new Map(loadByIdsChunked(root, tenantId, succIds).map((m) => [m.id, m.valid_from]));
|
|
164
|
+
}
|
|
165
|
+
/** Augment `baseResults` with memories reached by walking `hops` graph edges from the seeds across local AND global stores, each placed after its seed.
|
|
166
|
+
* Returns `baseResults` unchanged when `hops <= 0`, there are no base results, or nothing new survives the filters and the token budget. */
|
|
209
167
|
export function graphExpandRecall(baseResults, opts) {
|
|
210
168
|
const { hops, hippoRoot, globalRoot, tenantId } = opts;
|
|
211
169
|
if (hops <= 0 || baseResults.length === 0)
|
|
212
170
|
return baseResults;
|
|
213
171
|
const maxNeighbors = opts.maxNeighbors ?? DEFAULT_MAX_NEIGHBORS;
|
|
214
|
-
const budget = opts.budget ?? DEFAULT_RECALL_BUDGET;
|
|
215
172
|
const includeSuperseded = opts.includeSuperseded ?? false;
|
|
216
173
|
const asOfDate = opts.asOf ? new Date(opts.asOf) : null;
|
|
217
|
-
const minResults = opts.minResults ?? 1;
|
|
218
174
|
const recallScope = opts.recallScope ?? {};
|
|
219
175
|
const baseScoreByMemId = new Map(baseResults.map((r) => [r.entry.id, r.score]));
|
|
220
176
|
const seenMemoryIds = new Set(baseResults.map((r) => r.entry.id));
|
|
@@ -223,49 +179,50 @@ export function graphExpandRecall(baseResults, opts) {
|
|
|
223
179
|
// Expand against each distinct store the seeds may live in (local + global).
|
|
224
180
|
const roots = globalRoot && globalRoot !== hippoRoot ? [hippoRoot, globalRoot] : [hippoRoot];
|
|
225
181
|
for (const root of roots) {
|
|
226
|
-
produceHitsForRoot(root, baseResults, baseScoreByMemId, seenMemoryIds, seenContent, hitsByOrigin, {
|
|
182
|
+
produceHitsForRoot(root, baseResults, { baseScoreByMemId, seenMemoryIds, seenContent, hitsByOrigin }, {
|
|
227
183
|
hops, maxNeighbors, tenantId, includeSuperseded, asOfDate, recallScope,
|
|
228
184
|
});
|
|
229
185
|
}
|
|
230
186
|
if (hitsByOrigin.size === 0)
|
|
231
187
|
return baseResults;
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
188
|
+
sortHitsWithinOrigin(hitsByOrigin);
|
|
189
|
+
const allHits = [...hitsByOrigin.values()].flat();
|
|
190
|
+
const keep = selectWithinBudget(baseResults, allHits, opts);
|
|
191
|
+
return mergeKeptHits(baseResults, hitsByOrigin, keep);
|
|
192
|
+
}
|
|
193
|
+
function sortHitsWithinOrigin(hitsByOrigin) {
|
|
194
|
+
// Closer hops first within each origin group, then by inherited score; compareEntryIdentity only breaks same-hop, same-score ties.
|
|
235
195
|
for (const hits of hitsByOrigin.values()) {
|
|
236
196
|
hits.sort((a, b) => {
|
|
237
197
|
const byHops = a.graphVia.hops - b.graphVia.hops;
|
|
238
198
|
if (byHops !== 0)
|
|
239
199
|
return byHops;
|
|
240
|
-
const byScore =
|
|
200
|
+
const byScore = compareScoresDesc(a.score, b.score);
|
|
241
201
|
return byScore !== 0 ? byScore : compareEntryIdentity(a.entry, b.entry);
|
|
242
202
|
});
|
|
243
203
|
}
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
//
|
|
249
|
-
//
|
|
250
|
-
// emitted ONLY under a kept seed, never orphaned). At least one result is always kept.
|
|
251
|
-
// (NOTE: at a tight budget a new graph hit can displace a weakly-scored base result;
|
|
252
|
-
// aggregate recall stays >= baseline, the displaced item is the lowest-value one.)
|
|
253
|
-
// Protect the top --min-results base rows from eviction (graph expansion must not
|
|
254
|
-
// violate the recall min-results floor). They are kept regardless of budget;
|
|
255
|
-
// baseResults is score-ordered, so slice(0, N) is the top N.
|
|
204
|
+
}
|
|
205
|
+
function selectWithinBudget(baseResults, allHits, opts) {
|
|
206
|
+
const budget = opts.budget ?? DEFAULT_RECALL_BUDGET;
|
|
207
|
+
const minResults = opts.minResults ?? 1;
|
|
208
|
+
// Budget selection is by score, not position, so a high-value graph hit can beat a low-score lexical distractor; the greedy pack uses `continue`,
|
|
209
|
+
// so the DISPLAY loop emits a hit only under a kept seed. The top --min-results base rows are never evicted; at least one result is kept.
|
|
256
210
|
const protectedCount = Math.min(Math.max(minResults, 1), baseResults.length);
|
|
257
211
|
const keep = new Set(baseResults.slice(0, protectedCount));
|
|
258
212
|
const price = opts.cost ?? ((r) => r.tokens);
|
|
259
213
|
let usedTokens = [...keep].reduce((s, r) => s + price(r), 0);
|
|
260
214
|
// PLAIN stable score sort on purpose: both input lists are already deterministically
|
|
261
215
|
// ordered, and a base-vs-graph-hit tie keeps the BASE result first (the concat order).
|
|
262
|
-
for (const r of [...baseResults.slice(protectedCount), ...allHits].sort((a, b) =>
|
|
216
|
+
for (const r of [...baseResults.slice(protectedCount), ...allHits].sort((a, b) => compareScoresDesc(a.score, b.score))) {
|
|
263
217
|
const tokens = price(r);
|
|
264
218
|
if (usedTokens + tokens > budget)
|
|
265
219
|
continue;
|
|
266
220
|
usedTokens += tokens;
|
|
267
221
|
keep.add(r);
|
|
268
222
|
}
|
|
223
|
+
return keep;
|
|
224
|
+
}
|
|
225
|
+
function mergeKeptHits(baseResults, hitsByOrigin, keep) {
|
|
269
226
|
// DISPLAY order: base order preserved (it may be MMR-diversified); each kept new hit
|
|
270
227
|
// placed directly after the seed it descends from. Hits emit ONLY under a kept seed.
|
|
271
228
|
const merged = [];
|
|
@@ -283,4 +240,4 @@ export function graphExpandRecall(baseResults, opts) {
|
|
|
283
240
|
}
|
|
284
241
|
return emittedHit ? merged : baseResults; // nothing new survived budget -> original base
|
|
285
242
|
}
|
|
286
|
-
//# sourceMappingURL=
|
|
243
|
+
//# sourceMappingURL=recall.js.map
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/** Graph-retrieval ranked-list stream for RRF fusion: READ-ONLY, ranks `entries[]` indices by graph proximity to the strong lexical seeds.
|
|
2
|
+
* Unlike graph recall it only re-ranks in-pool, graph-reached, non-seed entries; scoring seeds would double-count BM25/dense.
|
|
3
|
+
* The score scale only sets the order inside this stream (RRF re-ranks by 1/(k + graphRank)), so do not tune it for a fused-score effect. */
|
|
4
|
+
import type { MemoryEntry } from '../core/memory.js';
|
|
5
|
+
/** Default hops expanded from each seed (MVP; hard cap MAX_HOPS=3 reused from graph recall). */
|
|
6
|
+
export declare const DEFAULT_GRAPH_HOPS = 2;
|
|
7
|
+
/** Default per-hop multiplicative decay applied to the seed strength. */
|
|
8
|
+
export declare const DEFAULT_GRAPH_DECAY = 0.5;
|
|
9
|
+
/** Default number of top lexical seeds expanded from. */
|
|
10
|
+
export declare const DEFAULT_GRAPH_SEED_COUNT = 10;
|
|
11
|
+
/** Recommended RRF weight for the graph stream — a CLI-only convenience default. The
|
|
12
|
+
* library `graphStream.weight` option stays REQUIRED (opt-in is explicit). */
|
|
13
|
+
export declare const DEFAULT_GRAPH_STREAM_WEIGHT = 0.5;
|
|
14
|
+
/** A lexical seed to expand the graph from: a candidate index + its lexical strength. */
|
|
15
|
+
export interface GraphSeed {
|
|
16
|
+
/** Index into the caller's `entries[]`. */
|
|
17
|
+
index: number;
|
|
18
|
+
/** Lexical strength (1/lexRank); higher = stronger seed. Propagated x decay^hops. */
|
|
19
|
+
strength: number;
|
|
20
|
+
}
|
|
21
|
+
export interface GraphStreamOpts {
|
|
22
|
+
hippoRoot: string;
|
|
23
|
+
tenantId: string;
|
|
24
|
+
/** The global store root, when distinct + initialized (where global seeds' graph lives). */
|
|
25
|
+
globalRoot?: string;
|
|
26
|
+
/** Hops to expand from each seed. Clamped to [1, MAX_HOPS]. Default DEFAULT_GRAPH_HOPS. */
|
|
27
|
+
hops?: number;
|
|
28
|
+
/** Per-hop multiplicative decay on the seed strength. Default DEFAULT_GRAPH_DECAY. */
|
|
29
|
+
decay?: number;
|
|
30
|
+
/** Per-hop fanout cap. Default DEFAULT_MAX_NEIGHBORS. */
|
|
31
|
+
maxNeighbors?: number;
|
|
32
|
+
}
|
|
33
|
+
/** Pick the top `seedCount` candidates by best lexical rank (lowest position across BM25 and dense), strength = 1/(bestRank + 1). Pure. */
|
|
34
|
+
export declare function selectGraphSeeds(bm25Ranked: ReadonlyArray<number>, cosineRanked: ReadonlyArray<number>, seedCount: number): GraphSeed[];
|
|
35
|
+
/** Produce the graph-retrieval ranked list: `entries[]` indices by graph proximity (desc) to the lexical `seeds`; absent indices fall to rrfFuse absentRank.
|
|
36
|
+
* Returns `[]` when there are no seeds/entries, the graph is empty, or nothing reached is in-pool, so the caller skips the 3rd fusion list. */
|
|
37
|
+
export declare function graphRankStream(entries: ReadonlyArray<MemoryEntry>, seeds: ReadonlyArray<GraphSeed>, opts: GraphStreamOpts): number[];
|
|
38
|
+
//# sourceMappingURL=stream.d.ts.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { loadEntitiesByMemoryId, loadEntitiesByIds, loadNeighborRelations } from '
|
|
2
|
-
import { MAX_HOPS, DEFAULT_MAX_NEIGHBORS } from './
|
|
3
|
-
/** Default hops expanded from each seed (MVP; hard cap MAX_HOPS=3 reused from graph
|
|
1
|
+
import { loadEntitiesByMemoryId, loadEntitiesByIds, loadNeighborRelations } from '../store/graph-reads.js';
|
|
2
|
+
import { MAX_HOPS, DEFAULT_MAX_NEIGHBORS } from './recall.js';
|
|
3
|
+
/** Default hops expanded from each seed (MVP; hard cap MAX_HOPS=3 reused from graph recall). */
|
|
4
4
|
export const DEFAULT_GRAPH_HOPS = 2;
|
|
5
5
|
/** Default per-hop multiplicative decay applied to the seed strength. */
|
|
6
6
|
export const DEFAULT_GRAPH_DECAY = 0.5;
|
|
@@ -9,11 +9,7 @@ export const DEFAULT_GRAPH_SEED_COUNT = 10;
|
|
|
9
9
|
/** Recommended RRF weight for the graph stream — a CLI-only convenience default. The
|
|
10
10
|
* library `graphStream.weight` option stays REQUIRED (opt-in is explicit). */
|
|
11
11
|
export const DEFAULT_GRAPH_STREAM_WEIGHT = 0.5;
|
|
12
|
-
/**
|
|
13
|
-
* Pick the top `seedCount` candidates by best lexical rank (lowest position across the
|
|
14
|
-
* BM25 and dense ranked lists), with strength = 1/(bestRank + 1). Pure; exported for
|
|
15
|
-
* direct unit testing. A candidate present in either ranked list is eligible.
|
|
16
|
-
*/
|
|
12
|
+
/** Pick the top `seedCount` candidates by best lexical rank (lowest position across BM25 and dense), strength = 1/(bestRank + 1). Pure. */
|
|
17
13
|
export function selectGraphSeeds(bm25Ranked, cosineRanked, seedCount) {
|
|
18
14
|
if (seedCount <= 0)
|
|
19
15
|
return [];
|
|
@@ -33,11 +29,8 @@ export function selectGraphSeeds(bm25Ranked, cosineRanked, seedCount) {
|
|
|
33
29
|
.slice(0, seedCount)
|
|
34
30
|
.map(([index, best]) => ({ index, strength: 1 / (best + 1) }));
|
|
35
31
|
}
|
|
36
|
-
// Pass 1:
|
|
37
|
-
//
|
|
38
|
-
// visited mid-loop would lock it to whichever relation SQLite returned first, so a later
|
|
39
|
-
// edge from a STRONGER lexical seed would be dropped and the neighbour mis-scored. A node
|
|
40
|
-
// already in `visited` was committed at an earlier (shorter) depth and keeps that score.
|
|
32
|
+
// Pass 1: take the STRONGEST reaching-seed strength per new neighbour across ALL relations at this depth before committing any to `visited`;
|
|
33
|
+
// marking mid-loop would lock a node to whichever relation SQLite returned first and drop a stronger seed's later edge.
|
|
41
34
|
function bestStrengthAtDepth(rels, frontierSet, visited, frontierStrength, originStrength) {
|
|
42
35
|
const bestStrengthThisDepth = new Map();
|
|
43
36
|
for (const rel of rels) {
|
|
@@ -63,7 +56,8 @@ function bestStrengthAtDepth(rels, frontierSet, visited, frontierStrength, origi
|
|
|
63
56
|
return bestStrengthThisDepth;
|
|
64
57
|
}
|
|
65
58
|
/** BFS from the seed entities: entityId -> best originSeedStrength x decay^depth over every reached entity. */
|
|
66
|
-
function reachedEntityScores(root, tenantId, seedIds, originStrength,
|
|
59
|
+
function reachedEntityScores(root, tenantId, seedIds, originStrength, options) {
|
|
60
|
+
const { hops, decay, maxNeighbors } = options;
|
|
67
61
|
const visited = new Set(seedIds); // seeds never re-reached
|
|
68
62
|
const reachedScore = new Map(); // entityId -> best score
|
|
69
63
|
let frontier = seedIds;
|
|
@@ -97,14 +91,10 @@ function reachedEntityScores(root, tenantId, seedIds, originStrength, hops, deca
|
|
|
97
91
|
}
|
|
98
92
|
return reachedScore;
|
|
99
93
|
}
|
|
100
|
-
/**
|
|
101
|
-
*
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
* carried UNCHANGED along each BFS path; the per-hop decay is applied as decay^depth so
|
|
105
|
-
* a neighbour's score = originSeedStrength x decay^(graph distance).
|
|
106
|
-
*/
|
|
107
|
-
function accumulateForRoot(root, seeds, entries, memIdToIndex, graphScore, hops, decay, maxNeighbors, tenantId) {
|
|
94
|
+
/** Accumulate per-entryIndex graph-proximity scores from ONE store's graph into `graphScore`; only seeds whose entities live in THIS store are expanded.
|
|
95
|
+
* A neighbour's score = originSeedStrength x decay^(graph distance); the seed strength is carried unchanged along each BFS path. */
|
|
96
|
+
function accumulateForRoot(root, seeds, entries, options) {
|
|
97
|
+
const { memIdToIndex, graphScore, hops, decay, maxNeighbors, tenantId } = options;
|
|
108
98
|
if (seeds.length === 0)
|
|
109
99
|
return;
|
|
110
100
|
// The strongest seed strength per source memory id (a memId could appear once, but
|
|
@@ -117,9 +107,7 @@ function accumulateForRoot(root, seeds, entries, memIdToIndex, graphScore, hops,
|
|
|
117
107
|
const seedEntities = loadEntitiesByMemoryId(root, tenantId, [...strengthByMemId.keys()]);
|
|
118
108
|
if (seedEntities.length === 0)
|
|
119
109
|
return;
|
|
120
|
-
// entityId -> origin seed strength
|
|
121
|
-
// loaded by memory id, so its memoryId is non-null here; the guard keeps the widened
|
|
122
|
-
// (string | null) type honest (a null-memory entity is not a lexical seed).
|
|
110
|
+
// entityId -> origin seed strength. Seeds load by memory id so memoryId is non-null here; the guard keeps the widened (string | null) type honest.
|
|
123
111
|
const originStrength = new Map();
|
|
124
112
|
for (const e of seedEntities) {
|
|
125
113
|
if (e.memoryId === null)
|
|
@@ -127,7 +115,7 @@ function accumulateForRoot(root, seeds, entries, memIdToIndex, graphScore, hops,
|
|
|
127
115
|
const st = strengthByMemId.get(e.memoryId) ?? 0;
|
|
128
116
|
originStrength.set(e.id, Math.max(originStrength.get(e.id) ?? 0, st));
|
|
129
117
|
}
|
|
130
|
-
const reachedScore = reachedEntityScores(root, tenantId, seedEntities.map((e) => e.id), originStrength, hops, decay, maxNeighbors);
|
|
118
|
+
const reachedScore = reachedEntityScores(root, tenantId, seedEntities.map((e) => e.id), originStrength, { hops, decay, maxNeighbors });
|
|
131
119
|
if (reachedScore.size === 0)
|
|
132
120
|
return;
|
|
133
121
|
// Reached entity ids -> source memory ids -> in-pool entry indices.
|
|
@@ -144,14 +132,8 @@ function accumulateForRoot(root, seeds, entries, memIdToIndex, graphScore, hops,
|
|
|
144
132
|
graphScore.set(idx, Math.max(graphScore.get(idx) ?? 0, score));
|
|
145
133
|
}
|
|
146
134
|
}
|
|
147
|
-
/**
|
|
148
|
-
*
|
|
149
|
-
* proximity (desc) to the lexical `seeds`. Only graph-reached, in-pool, non-seed
|
|
150
|
-
* indices appear; the rest are absent (-> rrfFuse absentRank). Pure reads.
|
|
151
|
-
*
|
|
152
|
-
* Returns `[]` when there are no seeds/entries, the graph is empty, no seed maps to an
|
|
153
|
-
* entity, or nothing reached is in-pool — the caller then skips the 3rd fusion list.
|
|
154
|
-
*/
|
|
135
|
+
/** Produce the graph-retrieval ranked list: `entries[]` indices by graph proximity (desc) to the lexical `seeds`; absent indices fall to rrfFuse absentRank.
|
|
136
|
+
* Returns `[]` when there are no seeds/entries, the graph is empty, or nothing reached is in-pool, so the caller skips the 3rd fusion list. */
|
|
155
137
|
export function graphRankStream(entries, seeds, opts) {
|
|
156
138
|
if (seeds.length === 0 || entries.length === 0)
|
|
157
139
|
return [];
|
|
@@ -166,13 +148,10 @@ export function graphRankStream(entries, seeds, opts) {
|
|
|
166
148
|
? [opts.hippoRoot, opts.globalRoot]
|
|
167
149
|
: [opts.hippoRoot];
|
|
168
150
|
for (const root of roots) {
|
|
169
|
-
accumulateForRoot(root, seeds, entries, memIdToIndex, graphScore, hops, decay, maxNeighbors, opts.tenantId);
|
|
151
|
+
accumulateForRoot(root, seeds, entries, { memIdToIndex, graphScore, hops, decay, maxNeighbors, tenantId: opts.tenantId });
|
|
170
152
|
}
|
|
171
|
-
// Seed-exclusion guard: graphScore is keyed by entryIndex
|
|
172
|
-
//
|
|
173
|
-
// is a seed in one store could be reached as a neighbour in the other store and pick up
|
|
174
|
-
// a score via max(). Drop every seed index so the "seeds are never scored by the graph
|
|
175
|
-
// stream" invariant holds across roots, not just within a single store's traversal.
|
|
153
|
+
// Seed-exclusion guard: graphScore is keyed by entryIndex across roots but each root's visited-set is per-root, so a seed in one store
|
|
154
|
+
// could score as a neighbour in the other; drop every seed index so "seeds are never graph-scored" holds across roots.
|
|
176
155
|
for (const s of seeds)
|
|
177
156
|
graphScore.delete(s.index);
|
|
178
157
|
if (graphScore.size === 0)
|
|
@@ -182,4 +161,4 @@ export function graphRankStream(entries, seeds, opts) {
|
|
|
182
161
|
return d !== 0 ? d : a - b; // score desc, then index asc (deterministic)
|
|
183
162
|
});
|
|
184
163
|
}
|
|
185
|
-
//# sourceMappingURL=
|
|
164
|
+
//# sourceMappingURL=stream.js.map
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/** Graph observability and visualization, READ-ONLY over the entity/relation graph (no writes, so `scripts/check-graph-writes.mjs` stays green).
|
|
2
|
+
* Shared by `hippo graph show|view` and the HTTP `GET /v1/graph` route, which all build the same `GraphModel`. */
|
|
3
|
+
import type { GraphRows } from '../store/port.js';
|
|
4
|
+
import type { EntityType, RelationType } from '../store/graph-rows.js';
|
|
5
|
+
export interface GraphNode {
|
|
6
|
+
id: number;
|
|
7
|
+
type: EntityType;
|
|
8
|
+
name: string;
|
|
9
|
+
}
|
|
10
|
+
export interface GraphEdge {
|
|
11
|
+
from: number;
|
|
12
|
+
to: number;
|
|
13
|
+
relType: RelationType;
|
|
14
|
+
}
|
|
15
|
+
export interface GraphModel {
|
|
16
|
+
nodes: GraphNode[];
|
|
17
|
+
edges: GraphEdge[];
|
|
18
|
+
/** Conservative "maybe incomplete" flag: true when a loader returned exactly
|
|
19
|
+
* its limit (the graph MAY be truncated). Can over-report, never under-report. */
|
|
20
|
+
truncated: boolean;
|
|
21
|
+
}
|
|
22
|
+
/** Default bound for the CLI viewer / show so an unbounded set is never laid out. */
|
|
23
|
+
export declare const DEFAULT_VIEW_LIMIT = 500;
|
|
24
|
+
/** Build the view-model (reads only); with `opts.entity`, a focus subgraph of the entities named so plus their 1-hop neighbours.
|
|
25
|
+
* Dangling edges (an endpoint outside the node set) are always dropped. */
|
|
26
|
+
export declare function buildGraphModel(hippoRoot: string, tenantId: string, opts?: {
|
|
27
|
+
entity?: string;
|
|
28
|
+
limit?: number;
|
|
29
|
+
canRead?: (scope: string | null) => boolean;
|
|
30
|
+
}): GraphModel;
|
|
31
|
+
/** The reply model of the rows a store read: an edge with an endpoint outside the node set is dropped. */
|
|
32
|
+
export declare function graphModelOf({ entities, relations, truncated }: GraphRows): GraphModel;
|
|
33
|
+
/** Deterministic Fruchterman-Reingold-style force layout: seeded circular init, fixed iterations, no `Math.random`, so one model gives the same positions.
|
|
34
|
+
* Non-finite coordinates are clamped to the viewport centre and all positions to the bounds. */
|
|
35
|
+
export declare function layoutGraph(model: GraphModel, opts?: {
|
|
36
|
+
width?: number;
|
|
37
|
+
height?: number;
|
|
38
|
+
iterations?: number;
|
|
39
|
+
}): Map<number, {
|
|
40
|
+
x: number;
|
|
41
|
+
y: number;
|
|
42
|
+
}>;
|
|
43
|
+
/** HTML-escape for SVG text / title / markup content (XSS guard). */
|
|
44
|
+
export declare function escapeHtml(s: string): string;
|
|
45
|
+
/** Render the model as a self-contained, offline interactive HTML node-link diagram with server-side deterministic positions.
|
|
46
|
+
* The model is inlined as `<script type="application/json">` with `<`, `>`, `&` unicode-escaped so a `</script>` in an entity name cannot break out. */
|
|
47
|
+
export declare function renderGraphHtml(model: GraphModel): string;
|
|
48
|
+
/** Render the model as a JSON Canvas (jsoncanvas.org) document: `text` nodes at the same deterministic layout positions, `edges[]` linking them by id. */
|
|
49
|
+
export declare function renderGraphCanvas(model: GraphModel): string;
|
|
50
|
+
//# sourceMappingURL=view.d.ts.map
|