hippo-memory 1.70.0 → 1.72.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 +2 -2
- package/dist/agent-memories/apply.d.ts +0 -11
- package/dist/agent-memories/apply.js +6 -21
- package/dist/agent-memories/claude-code.d.ts +4 -2
- package/dist/agent-memories/claude-code.js +15 -6
- package/dist/agent-memories/codex.js +1 -1
- package/dist/agent-memories/copilot.d.ts +1 -3
- package/dist/agent-memories/copilot.js +1 -17
- 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/project-folds.d.ts +10 -0
- package/dist/agent-memories/project-folds.js +34 -0
- package/dist/agent-memories/report.js +2 -1
- package/dist/agent-memories/sync.d.ts +4 -2
- package/dist/agent-memories/sync.js +18 -11
- package/dist/api/assemble.d.ts +7 -44
- package/dist/api/assemble.js +3 -23
- package/dist/api/audit.d.ts +33 -1
- package/dist/api/audit.js +48 -1
- package/dist/api/auth.d.ts +20 -26
- package/dist/api/auth.js +43 -29
- package/dist/api/auto-sleep.d.ts +5 -2
- package/dist/api/auto-sleep.js +9 -5
- package/dist/api/availability.d.ts +2 -15
- package/dist/api/availability.js +4 -18
- package/dist/api/cards.d.ts +42 -0
- package/dist/api/cards.js +52 -0
- package/dist/api/conflicts.d.ts +28 -0
- package/dist/api/conflicts.js +61 -0
- package/dist/api/context-render.js +4 -3
- package/dist/api/context-select.js +12 -15
- package/dist/api/context-types.d.ts +10 -35
- package/dist/api/context.d.ts +5 -22
- package/dist/api/context.js +38 -46
- package/dist/api/continuity.d.ts +47 -0
- package/dist/api/continuity.js +66 -0
- package/dist/{cli → api}/correction-latency.d.ts +2 -14
- package/dist/{cli → api}/correction-latency.js +2 -14
- package/dist/api/dormant.d.ts +5 -21
- package/dist/api/dormant.js +11 -28
- package/dist/api/drill-down.d.ts +7 -46
- package/dist/api/drill-down.js +6 -27
- package/dist/api/embeddings.d.ts +17 -0
- package/dist/api/embeddings.js +28 -0
- package/dist/api/error-reply.d.ts +8 -0
- package/dist/api/error-reply.js +21 -0
- package/dist/api/forget.d.ts +11 -26
- package/dist/api/forget.js +23 -35
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +5 -9
- package/dist/api/graph.d.ts +8 -0
- package/dist/api/graph.js +7 -0
- package/dist/api/index.d.ts +6 -2
- package/dist/api/index.js +6 -2
- package/dist/api/instruction-detect.js +21 -6
- package/dist/api/learn.d.ts +4 -0
- package/dist/api/learn.js +53 -27
- package/dist/api/ledger-db.d.ts +2 -5
- package/dist/api/ledger-db.js +5 -35
- package/dist/api/memories.d.ts +23 -0
- package/dist/api/memories.js +46 -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/outcome.js +1 -1
- package/dist/api/pilot-arm.d.ts +1 -11
- package/dist/api/pilot-arm.js +5 -45
- package/dist/api/predictions.d.ts +11 -0
- package/dist/api/predictions.js +24 -0
- package/dist/api/projects.d.ts +21 -0
- package/dist/api/projects.js +24 -0
- package/dist/api/promote.d.ts +13 -17
- package/dist/api/promote.js +12 -20
- package/dist/api/prompt-hook.d.ts +19 -6
- package/dist/api/prompt-hook.js +54 -13
- package/dist/api/provenance-coverage.d.ts +14 -0
- package/dist/{cli → api}/provenance-coverage.js +2 -6
- package/dist/api/recall-cli.d.ts +58 -0
- package/dist/api/recall-cli.js +103 -0
- package/dist/api/recall-core.js +17 -9
- 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 +21 -15
- package/dist/api/recall-request.js +1 -1
- package/dist/api/recall-types.d.ts +64 -304
- package/dist/api/recall.d.ts +3 -34
- package/dist/api/recall.js +63 -89
- 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 +20 -2
- package/dist/api/remember.js +16 -3
- package/dist/api/session-end.d.ts +22 -0
- package/dist/api/session-end.js +101 -0
- package/dist/api/sleep-run.d.ts +2 -4
- package/dist/api/sleep-run.js +28 -28
- package/dist/api/sleep.d.ts +9 -28
- package/dist/api/status.d.ts +24 -0
- package/dist/api/status.js +40 -0
- package/dist/api/store-init.d.ts +4 -0
- package/dist/api/store-init.js +9 -0
- package/dist/api/tokens.d.ts +3 -10
- package/dist/api/tokens.js +4 -11
- package/dist/api/types.d.ts +8 -29
- package/dist/api/types.js +10 -23
- package/dist/capture/caller-session.d.ts +0 -3
- package/dist/capture/caller-session.js +1 -12
- package/dist/capture/capture-error.d.ts +2 -2
- package/dist/capture/capture-error.js +23 -18
- package/dist/capture/codex-patch.js +3 -1
- package/dist/capture/command.d.ts +4 -12
- package/dist/capture/command.js +39 -114
- package/dist/capture/compact.d.ts +4 -15
- package/dist/capture/compact.js +26 -30
- package/dist/capture/compaction-items-caller.js +11 -20
- package/dist/capture/compaction-record.d.ts +7 -93
- package/dist/capture/compaction-record.js +34 -399
- package/dist/capture/compaction-spool.d.ts +5 -3
- package/dist/capture/compaction-spool.js +21 -7
- package/dist/capture/copilot-transcript.d.ts +2 -1
- package/dist/capture/copilot-transcript.js +2 -1
- package/dist/capture/extract.d.ts +5 -2
- package/dist/capture/extract.js +4 -3
- package/dist/capture/failure-caller.d.ts +1 -1
- package/dist/capture/failure-caller.js +21 -16
- package/dist/capture/failure-reading.d.ts +2 -1
- package/dist/capture/failure-reading.js +7 -9
- package/dist/capture/pre-compact-caller.js +5 -4
- package/dist/capture/session-digest.d.ts +1 -1
- package/dist/capture/session-digest.js +17 -10
- package/dist/capture/session-end-caller.js +2 -1
- package/dist/capture/session-worker.js +3 -4
- package/dist/capture/transcript.d.ts +4 -11
- package/dist/capture/transcript.js +10 -21
- package/dist/capture/working-state.d.ts +4 -2
- package/dist/capture/working-state.js +4 -2
- package/dist/cli/api-context.d.ts +3 -0
- package/dist/cli/api-context.js +6 -0
- package/dist/cli/audit-prune.d.ts +1 -59
- package/dist/cli/audit-prune.js +2 -61
- package/dist/cli/audit.d.ts +1 -1
- package/dist/cli/audit.js +42 -43
- package/dist/cli/auth.d.ts +2 -2
- package/dist/cli/auth.js +61 -44
- package/dist/cli/briefs.d.ts +1 -4
- package/dist/cli/briefs.js +42 -301
- package/dist/cli/card.d.ts +2 -2
- package/dist/cli/card.js +63 -56
- package/dist/cli/client.d.ts +12 -27
- package/dist/cli/client.js +41 -44
- package/dist/cli/compact-resume-payload.js +4 -3
- package/dist/cli/context.d.ts +2 -3
- package/dist/cli/context.js +22 -18
- package/dist/cli/continuity.d.ts +6 -6
- package/dist/cli/continuity.js +81 -86
- package/dist/cli/curate.d.ts +13 -17
- package/dist/cli/curate.js +88 -116
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +55 -34
- package/dist/cli/decisions.d.ts +2 -4
- package/dist/cli/decisions.js +18 -309
- package/dist/cli/eval.d.ts +1 -1
- package/dist/cli/eval.js +27 -26
- package/dist/cli/exit.d.ts +6 -0
- package/dist/cli/exit.js +11 -0
- package/dist/cli/explain.d.ts +2 -3
- package/dist/cli/explain.js +25 -27
- package/dist/cli/flag-values.d.ts +6 -1
- package/dist/cli/flag-values.js +42 -15
- package/dist/cli/flags.d.ts +0 -288
- package/dist/cli/flags.js +3 -138
- 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/graph.d.ts +3 -0
- package/dist/cli/graph.js +83 -0
- package/dist/cli/hook-runtime.d.ts +12 -32
- package/dist/cli/hook-runtime.js +21 -64
- package/dist/cli/incidents.d.ts +3 -0
- package/dist/cli/incidents.js +112 -0
- package/dist/cli/init.d.ts +2 -2
- package/dist/cli/init.js +33 -30
- package/dist/cli/install-steps.d.ts +2 -1
- package/dist/cli/install-steps.js +13 -14
- package/dist/cli/last-sleep.d.ts +2 -1
- package/dist/cli/last-sleep.js +4 -1
- package/dist/cli/lenient-id.d.ts +2 -0
- package/dist/cli/lenient-id.js +13 -0
- package/dist/cli/maintenance.d.ts +5 -5
- package/dist/cli/maintenance.js +37 -43
- package/dist/cli/notes.d.ts +2 -0
- package/dist/cli/notes.js +41 -0
- package/dist/cli/object-verbs.js +4 -3
- package/dist/cli/open-browser.d.ts +14 -0
- package/dist/cli/open-browser.js +26 -0
- package/dist/cli/owner-validation.d.ts +5 -28
- package/dist/cli/owner-validation.js +5 -28
- package/dist/cli/playbooks.d.ts +3 -4
- package/dist/cli/playbooks.js +131 -300
- package/dist/cli/predictions.d.ts +3 -0
- package/dist/cli/predictions.js +175 -0
- package/dist/cli/print.d.ts +2 -5
- package/dist/cli/print.js +3 -5
- package/dist/cli/projects.d.ts +2 -2
- package/dist/cli/projects.js +31 -25
- package/dist/cli/quality-repair-once.d.ts +1 -1
- package/dist/cli/quality-repair-once.js +7 -6
- package/dist/cli/recall.d.ts +2 -4
- package/dist/cli/recall.js +67 -137
- package/dist/cli/refine-llm.d.ts +5 -31
- package/dist/cli/refine-llm.js +23 -50
- package/dist/cli/remember.d.ts +3 -3
- package/dist/cli/remember.js +134 -192
- package/dist/cli/scheduler.d.ts +2 -17
- package/dist/cli/scheduler.js +14 -19
- package/dist/cli/serve.js +23 -14
- package/dist/cli/session-hooks.d.ts +11 -19
- package/dist/cli/session-hooks.js +143 -214
- package/dist/cli/setup.d.ts +4 -4
- package/dist/cli/setup.js +35 -30
- package/dist/cli/shared.d.ts +7 -25
- package/dist/cli/shared.js +17 -60
- package/dist/cli/slack.d.ts +2 -2
- package/dist/cli/slack.js +19 -23
- package/dist/cli/sleep-render.js +6 -3
- package/dist/cli/sleep.d.ts +3 -2
- package/dist/cli/sleep.js +17 -49
- package/dist/cli/status.d.ts +11 -14
- package/dist/cli/status.js +74 -120
- 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 +87 -108
- package/dist/cli/usage.d.ts +0 -79
- package/dist/cli/usage.js +1 -689
- package/dist/cli/verb-row.d.ts +32 -0
- package/dist/cli/verb-row.js +6 -0
- package/dist/cli/verbs/health.d.ts +27 -0
- package/dist/cli/verbs/health.js +232 -0
- package/dist/cli/verbs/memory.d.ts +16 -0
- package/dist/cli/verbs/memory.js +244 -0
- package/dist/cli/verbs/objects.d.ts +20 -0
- package/dist/cli/verbs/objects.js +254 -0
- package/dist/cli/verbs/sessions.d.ts +31 -0
- package/dist/cli/verbs/sessions.js +312 -0
- package/dist/cli/verbs.d.ts +81 -0
- package/dist/cli/verbs.js +7 -0
- package/dist/cli/versioned-verbs.d.ts +51 -0
- package/dist/cli/versioned-verbs.js +79 -0
- package/dist/cli.d.ts +1 -654
- package/dist/cli.js +44 -510
- package/dist/connectors/dlq.d.ts +39 -3
- package/dist/connectors/dlq.js +37 -3
- package/dist/connectors/github/backfill.d.ts +5 -25
- package/dist/connectors/github/backfill.js +26 -52
- 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 +34 -93
- package/dist/connectors/github/ingest.d.ts +4 -12
- package/dist/connectors/github/ingest.js +5 -36
- 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 +3 -16
- package/dist/connectors/github/webhook.js +38 -23
- package/dist/connectors/ingest.d.ts +10 -0
- package/dist/connectors/ingest.js +28 -0
- 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 +51 -90
- package/dist/connectors/slack/ingest.d.ts +4 -9
- package/dist/connectors/slack/ingest.js +4 -30
- 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 +3 -19
- package/dist/connectors/slack/webhook.js +6 -26
- package/dist/connectors/slack/workspaces.d.ts +4 -24
- package/dist/connectors/slack/workspaces.js +4 -24
- package/dist/consolidate/conflicts.js +7 -15
- 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 +29 -84
- package/dist/consolidate/decay.js +7 -19
- package/dist/consolidate/dedupe.d.ts +13 -52
- package/dist/consolidate/dedupe.js +18 -74
- 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 +49 -40
- 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 +18 -105
- package/dist/consolidate/merge.js +12 -33
- package/dist/consolidate/physics-pass.d.ts +6 -1
- package/dist/consolidate/physics-pass.js +27 -9
- package/dist/consolidate/replay.d.ts +6 -38
- package/dist/consolidate/replay.js +25 -56
- package/dist/consolidate/run.js +1 -1
- package/dist/consolidate/sleep.d.ts +1 -8
- package/dist/consolidate/sleep.js +13 -22
- package/dist/consolidate/trace.d.ts +3 -18
- package/dist/consolidate/trace.js +3 -18
- package/dist/consolidate/traces.js +9 -25
- package/dist/core/ablation.d.ts +14 -91
- package/dist/core/ablation.js +16 -91
- package/dist/core/active-scope.d.ts +7 -0
- package/dist/{sharing/scope.js → core/active-scope.js} +5 -12
- package/dist/core/ambient.d.ts +5 -8
- package/dist/core/ambient.js +40 -26
- package/dist/core/api-errors.d.ts +16 -0
- package/dist/core/api-errors.js +20 -0
- 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 +11 -1
- package/dist/core/compaction-timing.d.ts +7 -0
- package/dist/core/compaction-timing.js +9 -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 +20 -16
- package/dist/core/cosine.d.ts +3 -0
- package/dist/core/cosine.js +19 -0
- package/dist/core/handoff.d.ts +1 -7
- package/dist/core/handoff.js +1 -7
- package/dist/core/markdown.d.ts +6 -0
- package/dist/{store → core}/markdown.js +23 -22
- package/dist/core/memory-audit.d.ts +17 -0
- package/dist/core/memory-audit.js +54 -0
- package/dist/core/memory-quality.js +1 -1
- package/dist/core/memory.d.ts +51 -168
- package/dist/core/memory.js +76 -239
- package/dist/{consolidate → core}/merged-row.d.ts +1 -1
- package/dist/{consolidate → core}/merged-row.js +3 -2
- 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 +65 -138
- package/dist/core/prediction.d.ts +3 -0
- package/dist/core/prediction.js +6 -0
- package/dist/core/project-identity.d.ts +20 -58
- package/dist/core/project-identity.js +27 -39
- 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/recall-scope.d.ts +69 -0
- package/dist/core/recall-scope.js +138 -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 +3 -8
- package/dist/db/busy.js +37 -33
- package/dist/db/connect.js +7 -8
- package/dist/db/index.d.ts +3 -3
- package/dist/db/index.js +3 -3
- package/dist/db/migrate.js +3 -3
- package/dist/db/migrations/index.d.ts +1 -1
- package/dist/db/migrations/index.js +3 -1
- 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/migrations/v55.d.ts +3 -0
- package/dist/db/migrations/v55.js +17 -0
- package/dist/db/open.d.ts +2 -2
- package/dist/db/open.js +21 -9
- package/dist/db/physics-state.d.ts +6 -22
- package/dist/db/physics-state.js +28 -39
- package/dist/db/raw-archive-mirror-cleanup.d.ts +2 -17
- package/dist/db/raw-archive-mirror-cleanup.js +2 -17
- package/dist/db/tables.d.ts +2 -0
- package/dist/db/tables.js +6 -2
- package/dist/db/vector-store.d.ts +2 -0
- package/dist/db/vector-store.js +25 -5
- package/dist/db/wal-checkpointer.js +2 -1
- package/dist/doctor.js +85 -27
- package/dist/embeddings/local.d.ts +62 -0
- package/dist/embeddings/local.js +146 -0
- package/dist/embeddings/provider.d.ts +43 -0
- package/dist/{store/embeddings → embeddings}/provider.js +58 -83
- package/dist/embeddings/transformers.d.ts +26 -0
- package/dist/embeddings/transformers.js +89 -0
- package/dist/entry/session-text.d.ts +1 -1
- package/dist/entry/session-text.js +3 -2
- 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 +91 -45
- package/dist/eval/eval.d.ts +6 -24
- package/dist/eval/eval.js +8 -35
- package/dist/eval/judgment.d.ts +0 -3
- package/dist/eval/judgment.js +30 -15
- package/dist/extensions/openclaw-plugin/index.js +1 -1
- package/dist/graph/extract.d.ts +5 -27
- package/dist/graph/extract.js +10 -36
- package/dist/graph/recall.d.ts +7 -20
- package/dist/graph/recall.js +15 -77
- 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 +24 -44
- package/dist/graph/write.d.ts +1 -1
- package/dist/graph/write.js +9 -9
- package/dist/hooks/codex-session.js +3 -2
- package/dist/hooks/codex-wrapper.js +4 -3
- 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 +22 -59
- package/dist/hooks/opencode.d.ts +0 -38
- package/dist/hooks/opencode.js +17 -81
- package/dist/hooks/shared.d.ts +6 -21
- package/dist/hooks/shared.js +31 -33
- package/dist/importers/core.d.ts +12 -37
- package/dist/importers/core.js +10 -28
- 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 +12 -39
- package/dist/importers/vault.d.ts +2 -8
- package/dist/importers/vault.js +31 -85
- package/dist/index.d.ts +8 -3
- package/dist/index.js +8 -3
- package/dist/learn/autolearn.d.ts +23 -42
- package/dist/learn/autolearn.js +45 -52
- package/dist/learn/churn-git.js +13 -4
- package/dist/learn/extract.d.ts +3 -2
- package/dist/learn/extract.js +8 -8
- package/dist/learn/forward-claim-detector.d.ts +6 -30
- package/dist/learn/forward-claim-detector.js +18 -68
- package/dist/learn/invalidation.d.ts +6 -18
- package/dist/learn/invalidation.js +18 -31
- package/dist/mcp/admin-tools.d.ts +2 -2
- package/dist/mcp/admin-tools.js +30 -53
- package/dist/mcp/format.js +3 -2
- package/dist/mcp/framing.d.ts +1 -0
- package/dist/mcp/framing.js +1 -1
- package/dist/mcp/memory-tools.js +7 -10
- package/dist/mcp/protocol.d.ts +15 -29
- package/dist/mcp/protocol.js +26 -16
- package/dist/mcp/recall-tools.js +14 -11
- package/dist/mcp/request.d.ts +3 -11
- package/dist/mcp/request.js +12 -27
- 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 +68 -16
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +47 -22
- package/dist/objects/customer-notes.d.ts +9 -44
- package/dist/objects/customer-notes.js +7 -48
- package/dist/objects/decisions.d.ts +14 -52
- package/dist/objects/decisions.js +15 -53
- package/dist/objects/descriptor.d.ts +1 -1
- package/dist/objects/incidents.d.ts +9 -40
- package/dist/objects/incidents.js +7 -41
- package/dist/objects/lifecycle.d.ts +1 -1
- package/dist/objects/lifecycle.js +2 -1
- package/dist/objects/policies.d.ts +13 -91
- package/dist/objects/policies.js +13 -99
- package/dist/objects/processes.d.ts +9 -54
- package/dist/objects/processes.js +7 -61
- package/dist/objects/project-briefs.d.ts +13 -57
- package/dist/objects/project-briefs.js +16 -78
- package/dist/objects/skills.d.ts +9 -44
- package/dist/objects/skills.js +8 -54
- package/dist/postinstall.js +7 -20
- package/dist/predictions/planning-fallacy.d.ts +11 -34
- package/dist/rerankers/clef.js +6 -37
- package/dist/rerankers/cross-encoder.d.ts +31 -2
- package/dist/rerankers/cross-encoder.js +65 -101
- package/dist/rerankers/index.js +5 -4
- package/dist/rerankers/jev.js +11 -10
- package/dist/rerankers/llm.d.ts +2 -11
- package/dist/rerankers/llm.js +14 -14
- package/dist/rerankers/outage-warning.d.ts +5 -2
- package/dist/rerankers/outage-warning.js +7 -4
- 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/bm25-search.js +1 -1
- package/dist/search/boosts.d.ts +0 -2
- package/dist/search/boosts.js +3 -3
- package/dist/search/embed-memories.d.ts +9 -0
- package/dist/search/embed-memories.js +377 -0
- package/dist/search/goal-boost.d.ts +23 -0
- package/dist/search/goal-boost.js +93 -0
- package/dist/search/hybrid.d.ts +11 -2
- package/dist/search/hybrid.js +9 -4
- 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.d.ts +6 -3
- package/dist/search/physics-search.js +29 -19
- package/dist/search/rerank.js +1 -1
- package/dist/search/rrf.d.ts +7 -35
- package/dist/search/rrf.js +5 -30
- package/dist/search/vector.d.ts +13 -4
- package/dist/search/vector.js +40 -13
- package/dist/server/auth.d.ts +11 -28
- package/dist/server/auth.js +49 -32
- package/dist/server/boot.d.ts +2 -21
- package/dist/server/boot.js +69 -161
- package/dist/server/client-ip.d.ts +3 -21
- package/dist/server/client-ip.js +8 -30
- package/dist/server/deadline.d.ts +0 -2
- package/dist/server/deadline.js +1 -7
- package/dist/server/defaults.d.ts +4 -0
- package/dist/server/defaults.js +5 -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 +24 -53
- 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 +16 -19
- package/dist/server/route-checks.d.ts +7 -0
- package/dist/server/route-checks.js +42 -0
- package/dist/server/route-table.d.ts +9 -8
- package/dist/server/route-table.js +127 -139
- package/dist/server/routes/admin.d.ts +8 -8
- package/dist/server/routes/admin.js +35 -49
- package/dist/server/routes/customer-notes.d.ts +6 -6
- package/dist/server/routes/customer-notes.js +8 -14
- package/dist/server/routes/decisions.d.ts +6 -6
- package/dist/server/routes/decisions.js +12 -21
- package/dist/server/routes/incidents.d.ts +6 -6
- package/dist/server/routes/incidents.js +14 -25
- package/dist/server/routes/memories.d.ts +9 -9
- package/dist/server/routes/memories.js +20 -63
- package/dist/server/routes/object-routes.d.ts +6 -11
- package/dist/server/routes/object-routes.js +11 -22
- package/dist/server/routes/policies.d.ts +7 -7
- package/dist/server/routes/policies.js +12 -22
- package/dist/server/routes/predictions.d.ts +6 -6
- package/dist/server/routes/predictions.js +22 -38
- package/dist/server/routes/processes.d.ts +6 -6
- package/dist/server/routes/processes.js +17 -28
- package/dist/server/routes/project-briefs.d.ts +7 -7
- package/dist/server/routes/project-briefs.js +11 -20
- package/dist/server/routes/recall.d.ts +5 -5
- package/dist/server/routes/recall.js +16 -45
- package/dist/server/routes/skills.d.ts +7 -7
- package/dist/server/routes/skills.js +10 -22
- package/dist/server/server-detect.d.ts +15 -53
- package/dist/server/server-detect.js +55 -96
- package/dist/server/sleep-child.js +26 -7
- package/dist/server/sleep-offload.d.ts +11 -5
- package/dist/server/sleep-offload.js +21 -12
- package/dist/server/types.d.ts +32 -18
- package/dist/server/validation.d.ts +3 -2
- package/dist/server/validation.js +15 -33
- package/dist/server.d.ts +7 -6
- package/dist/server.js +8 -6
- 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 +73 -0
- package/dist/sharing/project-merge.d.ts +11 -19
- package/dist/sharing/project-merge.js +63 -125
- package/dist/sharing/search-both.d.ts +60 -0
- package/dist/sharing/search-both.js +138 -0
- package/dist/sharing/share.d.ts +40 -0
- package/dist/sharing/share.js +229 -0
- package/dist/store/ambient.js +9 -15
- package/dist/store/audit-event.d.ts +5 -13
- package/dist/store/audit-event.js +4 -12
- package/dist/store/audit.d.ts +2 -21
- package/dist/store/audit.js +8 -67
- package/dist/store/auth.d.ts +10 -8
- package/dist/store/auth.js +17 -12
- package/dist/store/candidates.d.ts +23 -5
- package/dist/store/candidates.js +119 -71
- package/dist/store/capture-write.d.ts +17 -0
- package/dist/store/capture-write.js +35 -0
- 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/compaction-caller.d.ts +18 -0
- package/dist/store/compaction-caller.js +29 -0
- package/dist/store/compactions-record.d.ts +115 -0
- package/dist/store/compactions-record.js +417 -0
- package/dist/store/compactions.js +6 -4
- package/dist/store/conflicts.d.ts +4 -21
- package/dist/store/conflicts.js +76 -152
- package/dist/store/connectors/dlq.d.ts +10 -0
- package/dist/store/connectors/dlq.js +32 -0
- package/dist/store/connectors/github.d.ts +14 -16
- package/dist/store/connectors/github.js +34 -57
- package/dist/store/connectors/slack.d.ts +2 -11
- package/dist/store/connectors/slack.js +18 -47
- package/dist/store/dashboard-reads.js +11 -14
- package/dist/store/delete-and-batch.d.ts +17 -31
- package/dist/store/delete-and-batch.js +84 -67
- package/dist/store/delivery-recorder.d.ts +15 -4
- package/dist/store/delivery-recorder.js +34 -17
- package/dist/store/descendant-page.js +6 -3
- package/dist/store/diagnostics.js +6 -13
- package/dist/store/dormant.d.ts +8 -30
- package/dist/store/dormant.js +18 -57
- package/dist/store/embeddings/index.d.ts +11 -90
- package/dist/store/embeddings/index.js +18 -523
- package/dist/store/entry-reads.d.ts +34 -61
- package/dist/store/entry-reads.js +111 -136
- package/dist/store/entry-row.d.ts +6 -35
- package/dist/store/entry-row.js +9 -37
- package/dist/store/entry-writes.d.ts +12 -18
- package/dist/store/entry-writes.js +46 -44
- package/dist/store/failure-log-at.d.ts +8 -0
- package/dist/store/failure-log-at.js +16 -0
- package/dist/store/failure-log.d.ts +2 -2
- package/dist/store/failure-log.js +5 -3
- package/dist/{trust → store}/gated-write.d.ts +3 -1
- package/dist/{trust → store}/gated-write.js +7 -5
- package/dist/store/goals.d.ts +3 -40
- package/dist/store/goals.js +41 -178
- 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 +24 -60
- 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 +10 -35
- package/dist/store/graph-writes.js +59 -106
- package/dist/store/half-life.d.ts +2 -1
- package/dist/store/half-life.js +14 -16
- package/dist/store/handoffs.d.ts +6 -12
- package/dist/store/handoffs.js +22 -40
- package/dist/store/index-and-stats.d.ts +6 -19
- package/dist/store/index-and-stats.js +36 -84
- package/dist/store/key-writes.js +1 -1
- package/dist/store/ledger-turn.d.ts +9 -0
- package/dist/store/ledger-turn.js +38 -0
- package/dist/store/mirrors.d.ts +2 -6
- package/dist/store/mirrors.js +24 -29
- package/dist/store/open.d.ts +0 -4
- package/dist/store/open.js +42 -62
- package/dist/store/pilot-arm.d.ts +12 -0
- package/dist/store/pilot-arm.js +42 -0
- 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 +91 -82
- package/dist/store/port.js +8 -0
- package/dist/store/predictions.d.ts +12 -53
- package/dist/store/predictions.js +41 -125
- package/dist/store/project-tags.d.ts +62 -0
- package/dist/store/project-tags.js +67 -0
- package/dist/{cli → store}/quality-repair.js +15 -31
- package/dist/store/quarantine.js +2 -1
- package/dist/store/raw-archive.d.ts +4 -16
- package/dist/store/raw-archive.js +14 -29
- package/dist/store/recall-trace.d.ts +12 -77
- package/dist/store/recall-trace.js +37 -97
- package/dist/store/rejected-values.js +9 -20
- package/dist/store/rejection-probe.d.ts +4 -0
- package/dist/store/rejection-probe.js +19 -0
- package/dist/store/rejection.d.ts +10 -73
- package/dist/store/rejection.js +12 -84
- 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 +14 -0
- package/dist/store/rule-sql.js +56 -0
- package/dist/store/search-rows.d.ts +7 -38
- package/dist/store/search-rows.js +23 -54
- package/dist/store/sessions.d.ts +10 -47
- package/dist/store/sessions.js +21 -75
- package/dist/store/set-aside.d.ts +14 -0
- package/dist/store/set-aside.js +23 -0
- package/dist/store/sqlite/busy.d.ts +3 -0
- package/dist/store/sqlite/busy.js +8 -0
- package/dist/store/sqlite/connector-events-group.js +5 -8
- package/dist/store/sqlite/connector-writes-group.js +3 -3
- package/dist/store/sqlite/entry-writes-group.js +4 -4
- package/dist/store/sqlite/error-codec.js +8 -5
- package/dist/store/sqlite/executor.d.ts +2 -1
- package/dist/store/sqlite/executor.js +12 -5
- package/dist/store/sqlite/graph-reads-group.js +1 -1
- package/dist/store/sqlite/held-connection.d.ts +9 -0
- package/dist/store/sqlite/held-connection.js +41 -0
- package/dist/store/sqlite/local.d.ts +3 -3
- package/dist/store/sqlite/local.js +1 -0
- package/dist/store/sqlite/object-rows.d.ts +1 -1
- package/dist/store/sqlite/object-rows.js +6 -3
- package/dist/store/sqlite/objects-group.d.ts +1 -1
- package/dist/store/sqlite/objects-group.js +5 -3
- package/dist/store/sqlite/quarantine-group.js +2 -2
- package/dist/store/sqlite/store.d.ts +1 -4
- package/dist/store/sqlite/store.js +16 -15
- 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 +11 -63
- package/dist/store/summaries.js +37 -148
- 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 -50
- package/dist/store/token-ledger.js +19 -85
- package/dist/store/usage-reports.js +5 -13
- package/dist/store/vector-index.d.ts +46 -0
- package/dist/store/vector-index.js +171 -0
- package/dist/store/working-memory.d.ts +6 -25
- package/dist/store/working-memory.js +18 -52
- package/dist/support-bundle.js +9 -8
- package/dist/trust/reject-flow.js +3 -5
- package/dist/util/agent-homes.d.ts +15 -0
- package/dist/util/agent-homes.js +34 -0
- package/dist/util/anthropic-messages.d.ts +3 -0
- package/dist/util/anthropic-messages.js +35 -6
- 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/chunked.d.ts +3 -0
- package/dist/util/chunked.js +10 -0
- package/dist/util/crash-handlers.d.ts +8 -1
- package/dist/util/crash-handlers.js +52 -10
- package/dist/util/ellipsize.d.ts +3 -0
- package/dist/util/ellipsize.js +5 -0
- package/dist/util/env.d.ts +14 -6
- package/dist/util/env.js +15 -7
- package/dist/util/format.d.ts +3 -0
- package/dist/util/format.js +6 -0
- package/dist/util/home-path.d.ts +2 -1
- package/dist/util/home-path.js +4 -2
- package/dist/util/hook-payload.d.ts +8 -0
- package/dist/util/hook-payload.js +37 -0
- package/dist/util/http-retry.d.ts +9 -1
- package/dist/util/http-retry.js +67 -8
- package/dist/util/http-util.d.ts +0 -8
- package/dist/util/http-util.js +10 -21
- package/dist/util/limits.d.ts +7 -0
- package/dist/util/limits.js +14 -0
- package/dist/util/log.d.ts +7 -2
- package/dist/util/log.js +34 -9
- package/dist/util/request-scope.d.ts +5 -2
- package/dist/util/request-scope.js +13 -7
- package/dist/util/secret-detect.d.ts +5 -30
- package/dist/util/secret-detect.js +19 -40
- package/dist/util/sqlite-blocked.d.ts +2 -0
- package/dist/util/sqlite-blocked.js +5 -0
- package/dist/util/stored-json.d.ts +1 -1
- package/dist/util/stored-json.js +1 -1
- package/dist/util/stream-tee.d.ts +3 -0
- package/dist/util/stream-tee.js +35 -0
- package/dist/util/time.d.ts +4 -0
- package/dist/util/time.js +4 -0
- 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/dist/{store → util}/yaml.d.ts +1 -5
- package/dist/{store → util}/yaml.js +2 -6
- 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 +2 -2
- package/dist/cli/provenance-coverage.d.ts +0 -18
- package/dist/connectors/github/cli-impl.d.ts +0 -25
- package/dist/sharing/scope.d.ts +0 -14
- package/dist/sharing/shared.d.ts +0 -187
- package/dist/sharing/shared.js +0 -563
- package/dist/store/embeddings/local.d.ts +0 -15
- package/dist/store/embeddings/local.js +0 -192
- package/dist/store/embeddings/provider.d.ts +0 -77
- package/dist/store/markdown.d.ts +0 -10
- package/dist/store/recall-scope.d.ts +0 -138
- package/dist/store/recall-scope.js +0 -216
- package/dist/store/vector-writes.d.ts +0 -13
- package/dist/store/vector-writes.js +0 -89
- /package/dist/{store → core}/object-types.d.ts +0 -0
- /package/dist/{store → core}/object-types.js +0 -0
- /package/dist/{cli → store}/quality-repair.d.ts +0 -0
- /package/dist/{capture → util}/compaction-items.d.ts +0 -0
- /package/dist/{capture → util}/compaction-items.js +0 -0
|
@@ -1,66 +1,22 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
* from spacing, keeps the stronger copy (by strength + retrieval count),
|
|
4
|
-
* removes the rest.
|
|
5
|
-
*
|
|
6
|
-
* Extracted from cli.ts in Episode A (v1.11.3) so `api.sleep` can dedupe
|
|
7
|
-
* during the consolidation pipeline without violating the cli -> api
|
|
8
|
-
* dependency direction. `cmdDedup` in cli.ts continues to import and use
|
|
9
|
-
* this function unchanged.
|
|
10
|
-
*
|
|
11
|
-
* Survivor selection is a total order as of v1.26.3
|
|
12
|
-
* (docs/plans/2026-07-16-dedupe-survivor-determinism.md): strength bucket
|
|
13
|
-
* desc -> retrieval_count desc -> compareEntryIdentity (content asc ->
|
|
14
|
-
* layer rank -> tags -> source -> id asc; the metadata keys arrived in
|
|
15
|
-
* v1.38.1, docs/plans/2026-09-04-dedupe-survivor-metadata.md). Previously
|
|
16
|
-
* the strength/retrieval-count comparator could tie exactly with no terminal
|
|
17
|
-
* key, so the survivor fell to load order (arrival-order-dependent); see
|
|
18
|
-
* `strengthBucket` below for the bucket encoding. As of the tenant-partition
|
|
19
|
-
* fix (docs/plans/2026-08-15-dedupe-tenant-partition.md) the order is scoped
|
|
20
|
-
* WITHIN each tenant group; cross-tenant pairs are never compared. Raw and
|
|
21
|
-
* superseded rows are not candidates at all (v1.38.1).
|
|
22
|
-
*/
|
|
1
|
+
/** Store-level dedup: same text apart from spacing, keeping the stronger copy; split out so `api.sleep` can dedupe without cli -> api imports.
|
|
2
|
+
* Survivor order is total and tenant-scoped: strength bucket, retrieval_count, then compareEntryIdentity; raw and superseded rows are not candidates. */
|
|
23
3
|
import { textOverlap } from '../util/tokenize.js';
|
|
24
4
|
import { loadCurrentDistilledEntries } from '../store/entry-reads.js';
|
|
25
5
|
import { deleteEntriesOneByOne, memoriesBackingObjects } from '../store/delete-and-batch.js';
|
|
26
6
|
import { compareEntryIdentity } from '../core/compare.js';
|
|
27
7
|
import { canAutoDelete } from '../core/memory.js';
|
|
28
|
-
import { derivationPartitionKey } from '../
|
|
8
|
+
import { derivationPartitionKey } from '../core/recall-scope.js';
|
|
29
9
|
import { duplicateKey } from '../util/same-text.js';
|
|
30
|
-
/** Quantization step for strength-tie comparisons.
|
|
31
|
-
* epsilon (see `strengthBucket` below) applied via rounding instead of a
|
|
32
|
-
* raw abs-diff threshold, so the tiebreak is transitive. */
|
|
10
|
+
/** Quantization step for strength-tie comparisons: the 0.01 epsilon applied by rounding instead of an abs-diff threshold, so the tiebreak is transitive. */
|
|
33
11
|
const STRENGTH_TIE_EPSILON = 0.01;
|
|
34
|
-
/**
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
* Encodes the historical 0.01 epsilon transitively: two strengths compare
|
|
38
|
-
* equal here iff they round to the same multiple of `STRENGTH_TIE_EPSILON`,
|
|
39
|
-
* which (unlike a raw `Math.abs(a - b) > epsilon` check) is a genuine
|
|
40
|
-
* equivalence relation — no more "A ties B, B ties C, but A beats C"
|
|
41
|
-
* (see the file-level history note above).
|
|
42
|
-
*
|
|
43
|
-
* Non-finite input (`NaN`, `+/-Infinity`) maps to bucket `0` rather than
|
|
44
|
-
* propagating: a NaN bucket would make the sort comparator return NaN,
|
|
45
|
-
* silently reintroducing the non-total-order class this fix exists to kill.
|
|
46
|
-
* (`null`/`undefined` already default to strength `0` via `?? 0`, same as
|
|
47
|
-
* before this change.)
|
|
48
|
-
*
|
|
49
|
-
* Bucket-edge nuance: two strengths straddling a bucket edge (e.g. 0.0049 vs
|
|
50
|
-
* 0.0051) now compare as different, where the old raw-epsilon check called
|
|
51
|
-
* them tied. The flip always favors the not-weaker entry, and the OLD
|
|
52
|
-
* behavior at such pairs was itself order/engine-dependent (the defect this
|
|
53
|
-
* fix exists to kill) — so there is no stable prior behavior being broken.
|
|
54
|
-
*/
|
|
12
|
+
/** Quantize strength to an integer bucket so ties are a true equivalence relation (equal iff same multiple of `STRENGTH_TIE_EPSILON`).
|
|
13
|
+
* Non-finite input maps to 0: a NaN bucket would make the comparator return NaN and break the total order. */
|
|
55
14
|
export function strengthBucket(strength) {
|
|
56
15
|
const s = strength ?? 0;
|
|
57
16
|
return Number.isFinite(s) ? Math.round(s / STRENGTH_TIE_EPSILON) : 0;
|
|
58
17
|
}
|
|
59
|
-
// finiteCount
|
|
60
|
-
//
|
|
61
|
-
// NaN and break the total order the same way a NaN bucket would.
|
|
62
|
-
// Unreachable via the schema (non-nullable INTEGER column), so this is
|
|
63
|
-
// symmetry, not a live bug.
|
|
18
|
+
// finiteCount hardens the retrieval leg like strengthBucket: a NaN would break the total order.
|
|
19
|
+
// Unreachable via the schema (non-nullable INTEGER column); kept for symmetry.
|
|
64
20
|
const finiteCount = (n) => Number.isFinite(n ?? 0) ? (n ?? 0) : 0;
|
|
65
21
|
/** The v1.26.3 survivor total order: strength bucket desc, then retrieval_count desc, then compareEntryIdentity. */
|
|
66
22
|
function survivorOrder(a, b) {
|
|
@@ -72,12 +28,8 @@ function survivorOrder(a, b) {
|
|
|
72
28
|
return retrievalDiff;
|
|
73
29
|
return compareEntryIdentity(a, b);
|
|
74
30
|
}
|
|
75
|
-
// Tenant partition
|
|
76
|
-
//
|
|
77
|
-
// duplicate pair can never form across tenants. Map preserves insertion
|
|
78
|
-
// order, so a single-tenant store (every row 'default') gets exactly one
|
|
79
|
-
// group and the sort plus pair loop below run byte-identical to the
|
|
80
|
-
// pre-fix global pass.
|
|
31
|
+
// Tenant partition: group by tenantId before sorting so a duplicate pair never forms across tenants; Map keeps insertion order,
|
|
32
|
+
// so a single-tenant store gets one group and the same result as a global pass.
|
|
81
33
|
function entriesByPartition(entries) {
|
|
82
34
|
const entriesByTenant = new Map();
|
|
83
35
|
for (const entry of entries) {
|
|
@@ -121,28 +73,20 @@ function partitionPairs(tenantEntries, removed, backing) {
|
|
|
121
73
|
}
|
|
122
74
|
return [...groups.values()].flatMap((group) => group.pairs);
|
|
123
75
|
}
|
|
124
|
-
/**
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
*
|
|
128
|
-
* tenantId, so byte-identical content in two tenants is never a duplicate
|
|
129
|
-
* pair (the tenant boundary is an isolation boundary; cross-tenant removal
|
|
130
|
-
* was the v1.32.0 known-issue data-loss bug).
|
|
131
|
-
* Keeps the one with higher strength (or more retrievals if tied). `threshold` is accepted for old callers and ignored.
|
|
132
|
-
*/
|
|
76
|
+
/** The rows loadCurrentDistilledEntries selects, picked from a whole-store read. */
|
|
77
|
+
const isCurrentDistilled = (e) => (e.kind ?? 'distilled') === 'distilled' && !e.superseded_by;
|
|
78
|
+
/** Remove the weaker copy of same-text (apart from spacing) memories within one tenant; cross-tenant pairs are never duplicates (isolation boundary).
|
|
79
|
+
* Higher strength wins, then more retrievals; `threshold` is accepted for old callers and ignored. */
|
|
133
80
|
export function deduplicateStore(hippoRoot, options = {}) {
|
|
134
81
|
const dryRun = options.dryRun ?? false;
|
|
135
82
|
// Only current distilled rows compete: raw rows are append-only (the delete
|
|
136
|
-
// trigger would abort sleep mid-loop) and superseded rows are history
|
|
137
|
-
const entries = loadCurrentDistilledEntries(hippoRoot);
|
|
83
|
+
// trigger would abort sleep mid-loop) and superseded rows are history.
|
|
84
|
+
const entries = options.loaded?.entries.filter(isCurrentDistilled) ?? loadCurrentDistilledEntries(hippoRoot);
|
|
138
85
|
const entriesByTenant = entriesByPartition(entries);
|
|
139
|
-
// Shared across tenant groups:
|
|
140
|
-
// unique (crypto.randomUUID at creation), so an id in `removed` can never
|
|
141
|
-
// collide with another tenant's row, and deleteEntry below deletes by
|
|
142
|
-
// primary-key id alone.
|
|
86
|
+
// Shared across tenant groups: ids are globally unique UUIDs, so `removed` cannot collide across tenants and deleteEntry deletes by primary key alone.
|
|
143
87
|
const removed = new Set();
|
|
144
88
|
const pairs = [];
|
|
145
|
-
const backing = memoriesBackingObjects(hippoRoot);
|
|
89
|
+
const backing = options.loaded?.backing ?? memoriesBackingObjects(hippoRoot);
|
|
146
90
|
for (const tenantEntries of entriesByTenant.values()) {
|
|
147
91
|
// The survivor total order (see the file-level docstring), scoped per
|
|
148
92
|
// tenant group: the total order holds within a tenant only, matching the partition above.
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import type { MemoryEntry } from '../core/memory.js';
|
|
2
2
|
import type { DormantMove } from '../store/dormant.js';
|
|
3
|
-
import type { FlushComponent } from '../store/delete-and-batch.js';
|
|
3
|
+
import type { FlushComponent, LoadedRows } from '../store/delete-and-batch.js';
|
|
4
4
|
/** Components that share no id, ordered by each one's first op across writes, then deletes, then dormant moves. */
|
|
5
5
|
export declare function groupFlush(writes: readonly MemoryEntry[], deletes: readonly string[], dormant: readonly DormantMove[], units: readonly (readonly string[])[]): FlushComponent[];
|
|
6
|
-
/** [child, parent]
|
|
7
|
-
|
|
8
|
-
export declare function familyUnits(writes: readonly MemoryEntry[], deletes: readonly string[], dormant: readonly DormantMove[], snapshot: ReadonlyMap<string, MemoryEntry>): string[][];
|
|
6
|
+
/** [child, parent] per queued op on a child whose DAG parent the run removes: the parent-dirty mark otherwise lands after the parent is gone. */
|
|
7
|
+
export declare function familyUnits(writes: readonly MemoryEntry[], deletes: readonly string[], dormant: readonly DormantMove[], snapshot: LoadedRows): string[][];
|
|
9
8
|
//# sourceMappingURL=flush-units.d.ts.map
|
|
@@ -42,9 +42,9 @@ function unionFind(units) {
|
|
|
42
42
|
}
|
|
43
43
|
return find;
|
|
44
44
|
}
|
|
45
|
-
/** [child, parent]
|
|
46
|
-
|
|
47
|
-
//
|
|
45
|
+
/** [child, parent] per queued op on a child whose DAG parent the run removes: the parent-dirty mark otherwise lands after the parent is gone. */
|
|
46
|
+
// SHORTCUT: a removed parent and all its changed children commit as one component, so
|
|
47
|
+
// one hold can pass holdMs by a family's size; split by child if a family grows large.
|
|
48
48
|
export function familyUnits(writes, deletes, dormant, snapshot) {
|
|
49
49
|
const removing = new Set([...deletes, ...dormant.map((m) => m.entry.id)]);
|
|
50
50
|
const units = [];
|
|
@@ -1,24 +1,5 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* Each memory stores its own `half_life_days`, set at write from the
|
|
5
|
-
* default base and a few write-time multipliers (`deriveHalfLife`). Changing
|
|
6
|
-
* the default therefore reaches only new memories; without this migration a
|
|
7
|
-
* store would mix old-base and new-base memories, a state the decay
|
|
8
|
-
* evaluation never tested. The rule, declared before any run:
|
|
9
|
-
*
|
|
10
|
-
* - only a memory still on the old base is rescaled: its half-life is
|
|
11
|
-
* `deriveHalfLife(from, entry)` plus its recall bonus. A memory hippo shortened since
|
|
12
|
-
* (invalidated, superseded, a merge source, marked bad) or one with its own
|
|
13
|
-
* fixed half-life (decisions, incidents, customer notes) keeps its value;
|
|
14
|
-
* - every rescale is written to the audit log with the ids, so it can be
|
|
15
|
-
* undone, and the store records the base it is on (`meta`), so the
|
|
16
|
-
* migration runs once.
|
|
17
|
-
*
|
|
18
|
-
* `hippo sleep` runs it before its decay pass, from the base the store is on
|
|
19
|
-
* (7 days when never recorded) to the configured `defaultHalfLifeDays`. Once per store it also
|
|
20
|
-
* moves memories of live decisions, incidents and other objects off the flat 90 days they used to get.
|
|
21
|
-
*/
|
|
1
|
+
/** Moves a store's memories to a new default half-life: only memories still on the old base are rescaled (`deriveHalfLife(from, entry)` plus recall bonus).
|
|
2
|
+
* Memories hippo shortened since, or with their own fixed half-life, keep theirs; rescales are audit-logged and `meta` records the base, so it runs once. */
|
|
22
3
|
import { type MemoryEntry } from '../core/memory.js';
|
|
23
4
|
import { HALF_LIFE_BASE_META_KEY, LEGACY_TYPED_HALF_LIFE } from '../store/open.js';
|
|
24
5
|
export { HALF_LIFE_BASE_META_KEY, LEGACY_TYPED_HALF_LIFE };
|
|
@@ -45,11 +26,7 @@ export declare function planHalfLifeMigration(entries: readonly MemoryEntry[], f
|
|
|
45
26
|
export declare function planTypedHalfLifeMigration(entries: readonly MemoryEntry[], to: number): MemoryEntry[];
|
|
46
27
|
/** The base this store's memories are on. */
|
|
47
28
|
export declare function storeHalfLifeBase(hippoRoot: string): number;
|
|
48
|
-
/**
|
|
49
|
-
* Move the store's memories from the base they are on, and those of objects from
|
|
50
|
-
* the old flat 90 days, to `to`, once. Under `dryRun` nothing is written, the recorded
|
|
51
|
-
* base included.
|
|
52
|
-
*/
|
|
29
|
+
/** Move the store's memories, and those of objects on the old flat 90 days, from their recorded base to `to`, once; `dryRun` writes nothing. */
|
|
53
30
|
export declare function migrateDefaultHalfLife(hippoRoot: string, to: number, opts?: {
|
|
54
31
|
dryRun?: boolean;
|
|
55
32
|
actor?: string;
|
|
@@ -1,24 +1,5 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* Each memory stores its own `half_life_days`, set at write from the
|
|
5
|
-
* default base and a few write-time multipliers (`deriveHalfLife`). Changing
|
|
6
|
-
* the default therefore reaches only new memories; without this migration a
|
|
7
|
-
* store would mix old-base and new-base memories, a state the decay
|
|
8
|
-
* evaluation never tested. The rule, declared before any run:
|
|
9
|
-
*
|
|
10
|
-
* - only a memory still on the old base is rescaled: its half-life is
|
|
11
|
-
* `deriveHalfLife(from, entry)` plus its recall bonus. A memory hippo shortened since
|
|
12
|
-
* (invalidated, superseded, a merge source, marked bad) or one with its own
|
|
13
|
-
* fixed half-life (decisions, incidents, customer notes) keeps its value;
|
|
14
|
-
* - every rescale is written to the audit log with the ids, so it can be
|
|
15
|
-
* undone, and the store records the base it is on (`meta`), so the
|
|
16
|
-
* migration runs once.
|
|
17
|
-
*
|
|
18
|
-
* `hippo sleep` runs it before its decay pass, from the base the store is on
|
|
19
|
-
* (7 days when never recorded) to the configured `defaultHalfLifeDays`. Once per store it also
|
|
20
|
-
* moves memories of live decisions, incidents and other objects off the flat 90 days they used to get.
|
|
21
|
-
*/
|
|
1
|
+
/** Moves a store's memories to a new default half-life: only memories still on the old base are rescaled (`deriveHalfLife(from, entry)` plus recall bonus).
|
|
2
|
+
* Memories hippo shortened since, or with their own fixed half-life, keep theirs; rescales are audit-logged and `meta` records the base, so it runs once. */
|
|
22
3
|
import { deriveHalfLife } from '../core/memory.js';
|
|
23
4
|
import { HALF_LIFE_BASE_META_KEY, LEGACY_TYPED_HALF_LIFE } from '../store/open.js';
|
|
24
5
|
import { moveHalfLives, recordedHalfLifeBase } from '../store/half-life.js';
|
|
@@ -53,11 +34,7 @@ export function planTypedHalfLifeMigration(entries, to) {
|
|
|
53
34
|
export function storeHalfLifeBase(hippoRoot) {
|
|
54
35
|
return recordedHalfLifeBase(hippoRoot);
|
|
55
36
|
}
|
|
56
|
-
/**
|
|
57
|
-
* Move the store's memories from the base they are on, and those of objects from
|
|
58
|
-
* the old flat 90 days, to `to`, once. Under `dryRun` nothing is written, the recorded
|
|
59
|
-
* base included.
|
|
60
|
-
*/
|
|
37
|
+
/** Move the store's memories, and those of objects on the old flat 90 days, from their recorded base to `to`, once; `dryRun` writes nothing. */
|
|
61
38
|
export function migrateDefaultHalfLife(hippoRoot, to, opts = {}) {
|
|
62
39
|
const dryRun = opts.dryRun ?? false;
|
|
63
40
|
const { from, outcome } = moveHalfLives(hippoRoot, to, { dryRun, actor: opts.actor ?? 'system' }, (rows) => {
|
|
@@ -65,7 +42,12 @@ export function migrateDefaultHalfLife(hippoRoot, to, opts = {}) {
|
|
|
65
42
|
const plan = [...basePlan, ...typedPlan];
|
|
66
43
|
return {
|
|
67
44
|
moves: [{ from: rows.from, to, entries: basePlan }, { from: LEGACY_TYPED_HALF_LIFE, to, entries: typedPlan }],
|
|
68
|
-
outcome: {
|
|
45
|
+
outcome: {
|
|
46
|
+
rescaled: basePlan.length,
|
|
47
|
+
typed: typedPlan.length,
|
|
48
|
+
kept: rows.all.length - plan.length,
|
|
49
|
+
halfLives: new Map(plan.map((e) => [e.id, e.half_life_days]))
|
|
50
|
+
},
|
|
69
51
|
};
|
|
70
52
|
});
|
|
71
53
|
const moved = outcome ?? { rescaled: 0, typed: 0, kept: 0, halfLives: new Map() };
|
|
@@ -94,7 +76,8 @@ function objectMemoryIds(objectRows) {
|
|
|
94
76
|
}
|
|
95
77
|
return { all, retired };
|
|
96
78
|
}
|
|
97
|
-
/** Memories that lost a conflict, which resolveConflict halved untagged. A resolved conflict with no audit
|
|
79
|
+
/** Memories that lost a conflict, which resolveConflict halved untagged. A resolved conflict with no audit
|
|
80
|
+
* row (resolved before resolves were audited, or found stale) names no winner, so both sides count. */
|
|
98
81
|
function conflictLosers(audited, resolved) {
|
|
99
82
|
const losers = new Set(audited.map((a) => a.loserId));
|
|
100
83
|
const named = new Set(audited.map((a) => a.conflictId));
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { envAnthropicApiKey, envDagRebuildCap } from '../util/env.js';
|
|
2
2
|
import { Layer } from '../core/memory.js';
|
|
3
|
-
import { log } from '../util/log.js';
|
|
3
|
+
import { errorFields, errorMessage, log } from '../util/log.js';
|
|
4
4
|
import { keptAsWritten } from './run.js';
|
|
5
5
|
import { isReusable } from '../core/memory-quality.js';
|
|
6
|
+
import { isPermanentFailure } from '../util/anthropic-messages.js';
|
|
7
|
+
// Bounds the LLM calls one sleep spends on extraction.
|
|
8
|
+
const EXTRACTION_BATCH_LIMIT = 20;
|
|
6
9
|
/** The key, model options and once-per-line error reporter every LLM phase shares. */
|
|
7
10
|
function sleepLlm(run, fetcher) {
|
|
8
11
|
const { config, result } = run;
|
|
@@ -21,30 +24,17 @@ function sleepLlm(run, fetcher) {
|
|
|
21
24
|
return { apiKey, llmError, llmOpts };
|
|
22
25
|
}
|
|
23
26
|
export async function llmPasses(run, fetcher) {
|
|
24
|
-
// -------------------------------------------------------------------------
|
|
25
27
|
// 1.6. Batch extraction — extract facts from episodic memories missing them
|
|
26
|
-
// -------------------------------------------------------------------------
|
|
27
28
|
const extractedFromIds = new Set(run.survivors.filter((e) => e.extracted_from).map((e) => e.extracted_from));
|
|
28
29
|
const extractionCandidates = run.survivors.filter((e) => e.layer === Layer.Episodic && !e.superseded_by && !extractedFromIds.has(e.id) && !keptAsWritten(e)
|
|
29
30
|
&& e.trace_outcome === null && e.source !== 'auto-promote' && isReusable(e));
|
|
30
31
|
run.result.extractionCandidates = extractionCandidates.length;
|
|
31
32
|
const llm = sleepLlm(run, fetcher);
|
|
32
33
|
if (llm.apiKey && extractionCandidates.length > 0 && !run.dryRun) {
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
try {
|
|
38
|
-
const facts = await extractFacts(candidate.content, { ...llm.llmOpts, onError: llm.llmError('extraction') });
|
|
39
|
-
if (facts.length > 0) {
|
|
40
|
-
extractedCount += storeExtractedFacts(run.hippoRoot, candidate, facts).length;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
catch (err) {
|
|
44
|
-
llm.llmError('extraction')(String(err));
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
run.result.extracted = extractedCount;
|
|
34
|
+
const stopped = await extractionPass(run, llm, extractionCandidates.slice(0, EXTRACTION_BATCH_LIMIT));
|
|
35
|
+
// The DAG passes call the same API with the same key and model, so they would fail the same way.
|
|
36
|
+
if (stopped)
|
|
37
|
+
return;
|
|
48
38
|
}
|
|
49
39
|
await dagBuildPass(run, llm);
|
|
50
40
|
if (llm.apiKey && !run.dryRun) {
|
|
@@ -52,9 +42,38 @@ export async function llmPasses(run, fetcher) {
|
|
|
52
42
|
await entityProfilePass(run, llm);
|
|
53
43
|
}
|
|
54
44
|
}
|
|
55
|
-
|
|
45
|
+
/** Extracts facts from each candidate; true when it stopped on a failure every later call would repeat (bad key, no credit, unknown model). */
|
|
46
|
+
async function extractionPass(run, llm, batch) {
|
|
47
|
+
const { extractFacts, storeExtractedFacts } = await import('../learn/extract.js');
|
|
48
|
+
const report = llm.llmError('extraction');
|
|
49
|
+
let extractedCount = 0;
|
|
50
|
+
let stopped = false;
|
|
51
|
+
const onError = (msg, failure) => {
|
|
52
|
+
report(msg);
|
|
53
|
+
if (failure && isPermanentFailure(failure))
|
|
54
|
+
stopped = true;
|
|
55
|
+
};
|
|
56
|
+
for (const [index, candidate] of batch.entries()) {
|
|
57
|
+
try {
|
|
58
|
+
const facts = await extractFacts(candidate.content, { ...llm.llmOpts, onError });
|
|
59
|
+
if (facts.length > 0) {
|
|
60
|
+
extractedCount += storeExtractedFacts(run.hippoRoot, candidate, facts).length;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
catch (err) {
|
|
64
|
+
report(errorMessage(err));
|
|
65
|
+
log.warn('consolidate extraction threw', errorFields(err));
|
|
66
|
+
}
|
|
67
|
+
if (stopped) {
|
|
68
|
+
const skipped = batch.length - index - 1;
|
|
69
|
+
report(`stopped after a failure that will not clear on retry; ${skipped} of ${batch.length} candidates skipped, and the DAG passes with them`);
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
run.result.extracted = extractedCount;
|
|
74
|
+
return stopped;
|
|
75
|
+
}
|
|
56
76
|
// 1.7. DAG summarization — cluster extracted facts and generate summaries
|
|
57
|
-
// -------------------------------------------------------------------------
|
|
58
77
|
async function dagBuildPass(run, { apiKey, llmError, llmOpts }) {
|
|
59
78
|
const extractedFacts = run.survivors.filter((e) => e.tags.includes('extracted') && e.dag_level === 1 && !e.superseded_by && isReusable(e));
|
|
60
79
|
if (!(apiKey && extractedFacts.length >= 3 && !run.dryRun))
|
|
@@ -69,17 +88,12 @@ async function dagBuildPass(run, { apiKey, llmError, llmOpts }) {
|
|
|
69
88
|
}
|
|
70
89
|
}
|
|
71
90
|
catch (err) {
|
|
72
|
-
llmError('dag')(
|
|
91
|
+
llmError('dag')(errorMessage(err));
|
|
92
|
+
log.warn('consolidate dag threw', errorFields(err));
|
|
73
93
|
}
|
|
74
94
|
}
|
|
75
|
-
//
|
|
76
|
-
//
|
|
77
|
-
// -------------------------------------------------------------------------
|
|
78
|
-
// Consumer of the summary_dirty flag. Walks dirty L2 summaries, regenerates
|
|
79
|
-
// each via generateDagSummary, atomically refreshes content + 6 metadata
|
|
80
|
-
// columns + clears summary_dirty (with FTS sync). Same apiKey/dryRun gate
|
|
81
|
-
// as buildDag above. Cap HIPPO_DAG_REBUILD_CAP (default 20, hard ceiling
|
|
82
|
-
// 1000) prevents runaway LLM cost.
|
|
95
|
+
// 1.8. DAG summary rebuild: drain the summary_dirty queue set by child-write hooks; same apiKey/dryRun gate as buildDag.
|
|
96
|
+
// Cap HIPPO_DAG_REBUILD_CAP (default 20, hard ceiling 1000) prevents runaway LLM cost.
|
|
83
97
|
async function dagRebuildPass(run, { llmError, llmOpts }) {
|
|
84
98
|
const { result } = run;
|
|
85
99
|
try {
|
|
@@ -109,18 +123,12 @@ async function dagRebuildPass(run, { llmError, llmOpts }) {
|
|
|
109
123
|
}
|
|
110
124
|
}
|
|
111
125
|
catch (err) {
|
|
112
|
-
llmError('dag rebuild')(
|
|
126
|
+
llmError('dag rebuild')(errorMessage(err));
|
|
127
|
+
log.warn('consolidate dag rebuild threw', errorFields(err));
|
|
113
128
|
}
|
|
114
129
|
}
|
|
115
|
-
//
|
|
116
|
-
// 1.
|
|
117
|
-
// -------------------------------------------------------------------------
|
|
118
|
-
// Aggregate per-entity L2 summaries (e.g. all the speaker:Alice
|
|
119
|
-
// topic summaries) into a single L3 entity profile. Runs even when phase
|
|
120
|
-
// 1.7 buildDag was skipped (re-clusters existing L2s every sleep).
|
|
121
|
-
//
|
|
122
|
-
// Uses loadAllL2Summaries (not `survivors`) because phase 1.7 wrote new
|
|
123
|
-
// L2s directly via writeEntry without pushing back into survivors.
|
|
130
|
+
// 1.9. DAG entity profiles: cluster L2 summaries into per-entity L3 profiles; runs even when 1.7 was skipped (re-clusters existing L2s every sleep).
|
|
131
|
+
// Uses loadAllL2Summaries, not `survivors`: phase 1.7 wrote new L2s via writeEntry without pushing them into survivors.
|
|
124
132
|
async function entityProfilePass(run, { llmError, llmOpts }) {
|
|
125
133
|
try {
|
|
126
134
|
const { buildEntityProfiles } = await import('./dag.js');
|
|
@@ -135,7 +143,8 @@ async function entityProfilePass(run, { llmError, llmOpts }) {
|
|
|
135
143
|
}
|
|
136
144
|
}
|
|
137
145
|
catch (err) {
|
|
138
|
-
llmError('dag profiles')(
|
|
146
|
+
llmError('dag profiles')(errorMessage(err));
|
|
147
|
+
log.warn('consolidate dag profiles threw', errorFields(err));
|
|
139
148
|
}
|
|
140
149
|
}
|
|
141
150
|
//# sourceMappingURL=llm-passes.js.map
|
|
@@ -1,16 +1,5 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* GENERATED FROM the frozen artifact
|
|
5
|
-
* (benchmarks/memory-value/weights-learned.json +
|
|
6
|
-
* benchmarks/memory-value/weights-learned.meta.json). NEVER EDIT BY HAND —
|
|
7
|
-
* tests/memory-value-wiring.test.ts's weights-sync test asserts this constant
|
|
8
|
-
* equals the committed JSON artifact (value equality + digest match), so
|
|
9
|
-
* drift between the artifact and this file fails CI.
|
|
10
|
-
*
|
|
11
|
-
* CAVEAT: usage-feature signs reflect an anti-oracle simulation, NOT real usage
|
|
12
|
-
* value. Never read this as production ranking advice.
|
|
13
|
-
*/
|
|
1
|
+
/** Frozen learned memory-value weight vector, GENERATED from benchmarks/memory-value/weights-learned.json; never edit by hand (a sync test fails CI on drift).
|
|
2
|
+
* CAVEAT: usage-feature signs come from an anti-oracle simulation, not real usage value; never read this as production ranking advice. */
|
|
14
3
|
/** The 8 live feature dims the fitter optimized over (FIT_DIMS). */
|
|
15
4
|
export declare const MEMORY_VALUE_WEIGHTS: Readonly<Record<string, number>>;
|
|
16
5
|
/** sha256 of benchmarks/memory-value/weights-learned.json at freeze time
|
|
@@ -1,16 +1,5 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* GENERATED FROM the frozen artifact
|
|
5
|
-
* (benchmarks/memory-value/weights-learned.json +
|
|
6
|
-
* benchmarks/memory-value/weights-learned.meta.json). NEVER EDIT BY HAND —
|
|
7
|
-
* tests/memory-value-wiring.test.ts's weights-sync test asserts this constant
|
|
8
|
-
* equals the committed JSON artifact (value equality + digest match), so
|
|
9
|
-
* drift between the artifact and this file fails CI.
|
|
10
|
-
*
|
|
11
|
-
* CAVEAT: usage-feature signs reflect an anti-oracle simulation, NOT real usage
|
|
12
|
-
* value. Never read this as production ranking advice.
|
|
13
|
-
*/
|
|
1
|
+
/** Frozen learned memory-value weight vector, GENERATED from benchmarks/memory-value/weights-learned.json; never edit by hand (a sync test fails CI on drift).
|
|
2
|
+
* CAVEAT: usage-feature signs come from an anti-oracle simulation, not real usage value; never read this as production ranking advice. */
|
|
14
3
|
/** The 8 live feature dims the fitter optimized over (FIT_DIMS). */
|
|
15
4
|
export const MEMORY_VALUE_WEIGHTS = Object.freeze({
|
|
16
5
|
age_days: -0.3245577821391783,
|
|
@@ -1,23 +1,5 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
* rescue-only veto.
|
|
4
|
-
*
|
|
5
|
-
* computeMvFeatures mirrors benchmarks/memory-value/extract.mjs's
|
|
6
|
-
* computeFeatures for the 8 live dims the fitter optimized over
|
|
7
|
-
* (FIT_DIMS) — the only dims MEMORY_VALUE_WEIGHTS carries a weight for.
|
|
8
|
-
* Any future edit to either side must keep them byte-equivalent; the parity
|
|
9
|
-
* test in tests/memory-value-wiring.test.ts enforces this.
|
|
10
|
-
*
|
|
11
|
-
* scoreEntries mirrors benchmarks/memory-value/evaluate.mjs's per-store
|
|
12
|
-
* min-max normalization + weighted scorer (no additional orientation
|
|
13
|
-
* multiply — the frozen weights already encode sign/orientation).
|
|
14
|
-
*
|
|
15
|
-
* rescueSet implements rescue-only semantics: a condemned entry is
|
|
16
|
-
* rescued iff its learned score ranks in the top 30% (RESCUE_BUDGET, the
|
|
17
|
-
* measured keep-budget operating point) of its own tenant's non-pinned
|
|
18
|
-
* candidate set. Deletes(flag-on) subset Deletes(flag-off) by construction — this
|
|
19
|
-
* function can only ever shrink the condemned set, never grow it.
|
|
20
|
-
*/
|
|
1
|
+
/** Learned memory-value scorer, a rescue-only veto in the sleep decay pass (it can only shrink the condemned set); mirrors benchmarks/memory-value/*.mjs.
|
|
2
|
+
* rescueSet rescues a condemned entry iff it ranks in the top 30% (RESCUE_BUDGET) of its tenant's non-pinned set; memory-value-wiring.test.ts guards parity. */
|
|
21
3
|
import { type MemoryEntry } from '../core/memory.js';
|
|
22
4
|
/** The 8 live feature dims (FIT_DIMS) — canonical order for iteration. */
|
|
23
5
|
export declare const MV_FEATURE_NAMES: ReadonlyArray<keyof MvFeatureVector>;
|
|
@@ -31,44 +13,14 @@ export interface MvFeatureVector {
|
|
|
31
13
|
outcome_ratio: number;
|
|
32
14
|
content_length: number;
|
|
33
15
|
}
|
|
34
|
-
/**
|
|
35
|
-
*
|
|
36
|
-
* frozen weights carry (mirrors extract.mjs's computeFeatures).
|
|
37
|
-
*
|
|
38
|
-
* CRITICAL: `strength` is CLOCK-BASIS `calculateStrength(entry, now)` with
|
|
39
|
-
* NO DecayOptions — that is how the frozen weights' training features were
|
|
40
|
-
* computed (extract.mjs never passes decayOpts). Passing the production
|
|
41
|
-
* decay basis (config.decayBasis via consolidate.ts's decayOpts) into this
|
|
42
|
-
* feature would silently break parity with the frozen weight vector. This
|
|
43
|
-
* is an intentional divergence from the condemnation TRIGGER in
|
|
44
|
-
* consolidate.ts, which keeps using decayOpts as today — only the rescue
|
|
45
|
-
* FEATURE is clock-basis.
|
|
46
|
-
*/
|
|
16
|
+
/** Blind v1 feature dict for one entry, restricted to the 8 dims the frozen weights carry. `strength` is CLOCK-BASIS `calculateStrength(entry, now)` with no
|
|
17
|
+
* DecayOptions, as in the weights' training; passing the production decay basis would silently break parity with the frozen weights. */
|
|
47
18
|
export declare function computeMvFeatures(entry: MemoryEntry, now: Date): MvFeatureVector;
|
|
48
19
|
export declare function validateWeights(weights?: Readonly<Record<string, number>>, digest?: string): void;
|
|
49
|
-
/**
|
|
50
|
-
*
|
|
51
|
-
* (constant feature -> 0, matching evaluate.mjs), then score = dot(weights,
|
|
52
|
-
* normalized). The normalization context is exactly the entries passed in —
|
|
53
|
-
* callers control the bounded scope (per-tenant, non-pinned).
|
|
54
|
-
*
|
|
55
|
-
* `weights` defaults to the real frozen singleton; parameterized (like
|
|
56
|
-
* validateWeights) so callers/tests can score against an explicit vector
|
|
57
|
-
* without touching the module singleton.
|
|
58
|
-
*
|
|
59
|
-
* Non-finite features: Date.parse on a malformed `created`
|
|
60
|
-
* string yields NaN, and NaN would silently corrupt every OTHER entry's
|
|
61
|
-
* min-max in the same group. An entry with ANY non-finite computed feature
|
|
62
|
-
* is excluded from the normalization context entirely (its raw values never
|
|
63
|
-
* touch min/max) and always scores -Infinity — the lowest possible score, so
|
|
64
|
-
* it sorts to the bottom of its tenant deterministically and (via rescueSet's
|
|
65
|
-
* explicit finite-score guard below) can never be rescued. Conservative
|
|
66
|
-
* direction: deletes(flag-on) subset deletes(flag-off) still holds.
|
|
67
|
-
*/
|
|
20
|
+
/** Min-max normalize the 8 features over the given entries (constant -> 0), then score = dot(weights, normalized); callers set the scope.
|
|
21
|
+
* An entry with any non-finite feature (NaN from a malformed `created`) is excluded from normalization and scores -Infinity, so it can never be rescued. */
|
|
68
22
|
export declare function scoreEntries(entries: MemoryEntry[], now: Date, weights?: Readonly<Record<string, number>>): Map<string, number>;
|
|
69
|
-
/** Per-entry rank context within its tenant's non-pinned candidate set
|
|
70
|
-
* the score-rank basis both rescueSet's rescue decision and consolidate.ts's
|
|
71
|
-
* audit-row metadata read from. */
|
|
23
|
+
/** Per-entry rank context within its tenant's non-pinned candidate set: the basis both rescueSet and the consolidate audit-row metadata read. */
|
|
72
24
|
export interface MvRankInfo {
|
|
73
25
|
tenantId: string;
|
|
74
26
|
score: number;
|
|
@@ -79,40 +31,15 @@ export interface MvRankInfo {
|
|
|
79
31
|
/** ceil(RESCUE_BUDGET * totalNonPinned) — the rescue cutoff; rank <= keepN rescues. */
|
|
80
32
|
keepN: number;
|
|
81
33
|
}
|
|
82
|
-
/**
|
|
83
|
-
*
|
|
84
|
-
* group independently, and returns per-entry rank context for every
|
|
85
|
-
* non-pinned entry (not just condemned ones) — the shared basis for both
|
|
86
|
-
* rescueSet's rescue decision and consolidate.ts's audit-row rank context,
|
|
87
|
-
* so the two never compute the ranking differently.
|
|
88
|
-
*
|
|
89
|
-
* `weights`/`digest` default to the real frozen singleton — parameterized
|
|
90
|
-
* (like validateWeights/scoreEntries) purely for direct unit-testability of
|
|
91
|
-
* the fail-loud path, never overridden by production callers.
|
|
92
|
-
*/
|
|
34
|
+
/** Group non-pinned entries by tenantId, score and rank each group independently, and return rank context for every non-pinned entry;
|
|
35
|
+
* rescueSet and the consolidate audit rows share it so they never compute the ranking differently. */
|
|
93
36
|
export declare function rankNonPinnedByTenant(entries: MemoryEntry[], now: Date, weights?: Readonly<Record<string, number>>, digest?: string): Map<string, MvRankInfo>;
|
|
94
37
|
export interface RescueSetOptions {
|
|
95
38
|
readonly weights?: Readonly<Record<string, number>>;
|
|
96
39
|
readonly digest?: string;
|
|
97
40
|
readonly precomputedRanks?: Map<string, MvRankInfo>;
|
|
98
41
|
}
|
|
99
|
-
/**
|
|
100
|
-
*
|
|
101
|
-
* 30% of its tenant's non-pinned candidate set by learned score. Returns the
|
|
102
|
-
* subset of condemnedIds that are rescued — the caller filters commits
|
|
103
|
-
* (rescued -> survivors) and threads the same set into detectConflicts.
|
|
104
|
-
*
|
|
105
|
-
* `weights`/`digest` default to the real frozen singleton; production
|
|
106
|
-
* callers (consolidate.ts) never pass overrides — the params exist purely so
|
|
107
|
-
* "flag on + a broken constant throws" is directly testable end-to-end
|
|
108
|
-
* through this function without mutating the frozen module singleton.
|
|
109
|
-
*
|
|
110
|
-
* `precomputedRanks`: when the caller has already
|
|
111
|
-
* computed the per-tenant ranking (e.g. consolidate.ts needs it separately
|
|
112
|
-
* for detail/audit rank context), pass it here to skip the internal
|
|
113
|
-
* rankNonPinnedByTenant call — the whole-store ranking pass then runs
|
|
114
|
-
* exactly once per sleep instead of twice. Omitted (the default), rescueSet
|
|
115
|
-
* computes it internally as before — existing callers/tests are unaffected.
|
|
116
|
-
*/
|
|
42
|
+
/** Rescue decision: the subset of condemnedIds ranking in the top 30% of their tenant's non-pinned set by learned score.
|
|
43
|
+
* Pass `precomputedRanks` to skip the internal ranking so the whole-store pass runs once per sleep; `weights`/`digest` overrides exist for tests only. */
|
|
117
44
|
export declare function rescueSet(entries: MemoryEntry[], condemnedIds: Set<string>, now: Date, options?: RescueSetOptions): Set<string>;
|
|
118
45
|
//# sourceMappingURL=memory-value.d.ts.map
|