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
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
/** Core data model for Hippo memory entries, based on the strength formula from PLAN.md. */
|
|
2
|
+
export declare const DEFAULT_SCHEMA_FIT = 0.5;
|
|
3
|
+
export declare const FALLBACK_HALF_LIFE_DAYS = 7;
|
|
4
|
+
export declare enum Layer {
|
|
5
|
+
Buffer = "buffer",
|
|
6
|
+
Episodic = "episodic",
|
|
7
|
+
Semantic = "semantic",
|
|
8
|
+
Trace = "trace"
|
|
9
|
+
}
|
|
10
|
+
export type EmotionalValence = 'neutral' | 'positive' | 'negative' | 'critical';
|
|
11
|
+
export type ConfidenceLevel = 'verified' | 'observed' | 'inferred' | 'stale';
|
|
12
|
+
export type TraceOutcome = 'success' | 'failure' | 'partial' | null;
|
|
13
|
+
export type MemoryKind = 'raw' | 'distilled' | 'superseded' | 'archived';
|
|
14
|
+
export interface MemoryEntry {
|
|
15
|
+
id: string;
|
|
16
|
+
created: string;
|
|
17
|
+
last_retrieved: string;
|
|
18
|
+
retrieval_count: number;
|
|
19
|
+
strength: number;
|
|
20
|
+
half_life_days: number;
|
|
21
|
+
layer: Layer;
|
|
22
|
+
tags: string[];
|
|
23
|
+
emotional_valence: EmotionalValence;
|
|
24
|
+
schema_fit: number;
|
|
25
|
+
source: string;
|
|
26
|
+
outcome_score: number | null;
|
|
27
|
+
outcome_positive: number;
|
|
28
|
+
outcome_negative: number;
|
|
29
|
+
conflicts_with: string[];
|
|
30
|
+
pinned: boolean;
|
|
31
|
+
confidence: ConfidenceLevel;
|
|
32
|
+
content: string;
|
|
33
|
+
parents: string[];
|
|
34
|
+
starred: boolean;
|
|
35
|
+
trace_outcome: TraceOutcome;
|
|
36
|
+
source_session_id: string | null;
|
|
37
|
+
valid_from: string;
|
|
38
|
+
superseded_by: string | null;
|
|
39
|
+
extracted_from: string | null;
|
|
40
|
+
dag_level: number;
|
|
41
|
+
dag_parent_id: string | null;
|
|
42
|
+
descendant_count?: number;
|
|
43
|
+
earliest_at?: string | null;
|
|
44
|
+
latest_at?: string | null;
|
|
45
|
+
/** 1 when a child was invalidated, superseded, forgotten or archived since the last rebuild; sleep clears it. Always 0 below level 2. */
|
|
46
|
+
summary_dirty?: 0 | 1;
|
|
47
|
+
/** ISO 8601 time of the last successful rebuild, or null if never rebuilt. */
|
|
48
|
+
last_rebuilt_at?: string | null;
|
|
49
|
+
/** Count of successful rebuilds: 0 at the first buildDag write, bumped by each rebuild. */
|
|
50
|
+
rebuild_count?: number;
|
|
51
|
+
/** Reserved: ISO 8601 time the level-3 entity profile was built; only set on dag_level=3 rows. */
|
|
52
|
+
dag_level_3_built_at?: string | null;
|
|
53
|
+
kind: MemoryKind;
|
|
54
|
+
scope: string | null;
|
|
55
|
+
owner: string | null;
|
|
56
|
+
artifact_ref: string | null;
|
|
57
|
+
tenantId: string;
|
|
58
|
+
/** Owning project, lowercased; '' = user-global (injectable everywhere), null = none known (legacy or unnamed write), denied by ambient context.
|
|
59
|
+
* Stamped at write time by stampOriginProject (src/store/entry-row.ts); undefined only before the first write. */
|
|
60
|
+
origin_project?: string | null;
|
|
61
|
+
/** Raw FTS5 bm25() from the search path (negative, lower = better); set only for a non-empty query the FTS join answered.
|
|
62
|
+
* Not comparable to the JS scorer in src/search/bm25.ts, so read it as rank metadata only. */
|
|
63
|
+
bm25_score?: number;
|
|
64
|
+
}
|
|
65
|
+
/** Tag on a memory whose named file/symbol/script changed after it was stored. */
|
|
66
|
+
export declare const CHURN_STALE_TAG = "churn-stale";
|
|
67
|
+
export declare const EMOTIONAL_MULTIPLIERS: {
|
|
68
|
+
neutral: number;
|
|
69
|
+
positive: number;
|
|
70
|
+
negative: number;
|
|
71
|
+
critical: number;
|
|
72
|
+
};
|
|
73
|
+
/** Test-only: a test that sets HIPPO_LOSS_AVERSION_RATIO calls this in beforeEach and afterEach (tests/emotional-multipliers.test.ts). */
|
|
74
|
+
export declare function _resetLossAversionRatioCacheForTests(): void;
|
|
75
|
+
/** Scales only the `negative` multiplier; `critical` stays unscaled so the knob moves just the losses-vs-gains claim. */
|
|
76
|
+
export declare function applyLossAversionRatio(valence: EmotionalValence, baseMultiplier: number): number;
|
|
77
|
+
/** 1 + REWARD_SLOPE * (pos - neg) / (pos + neg + 1), in (0.5, 1.5), 1.0 with no outcomes; it scales the effective half-life. */
|
|
78
|
+
export declare function calculateRewardFactor(entry: Pick<MemoryEntry, 'outcome_positive' | 'outcome_negative'>): number;
|
|
79
|
+
/** Bad marks alone never push a memory under sleep's 0.05 retire line; supersede is the hard correction. */
|
|
80
|
+
export declare const MAX_WRONG_HALVINGS = 3;
|
|
81
|
+
export declare const DECAY_BASE = 0.5;
|
|
82
|
+
export declare const REWARD_SLOPE = 0.5;
|
|
83
|
+
export declare const RETRIEVAL_BOOST_SLOPE = 0.1;
|
|
84
|
+
/** Bad outcome marks past good ones, floored at zero; each halves strength and stops recall strengthening, so a correction outranks pinning. */
|
|
85
|
+
export declare function netWrong(entry: Pick<MemoryEntry, 'outcome_positive' | 'outcome_negative'>): number;
|
|
86
|
+
/** What calculateStrength reads, so a caller can score a row without loading its text. */
|
|
87
|
+
export type StrengthInputs = Pick<MemoryEntry, 'pinned' | 'created' | 'last_retrieved' | 'half_life_days' | 'retrieval_count' | 'emotional_valence' | 'outcome_positive' | 'outcome_negative'>;
|
|
88
|
+
/** Decay basis: clock = wall time, session = per sleep cycle (intermittent agents), adaptive = half-life scaled by session frequency. */
|
|
89
|
+
export interface DecayOptions {
|
|
90
|
+
decayBasis?: 'clock' | 'session' | 'adaptive';
|
|
91
|
+
/** Average interval between sleep cycles, in days. Used by 'adaptive' and 'session' modes. */
|
|
92
|
+
avgSessionIntervalDays?: number;
|
|
93
|
+
/** Total sleep cycles completed. Used by consolidation tracking. */
|
|
94
|
+
sleepCount?: number;
|
|
95
|
+
}
|
|
96
|
+
/** Strength at `now` = decay * retrieval boost * emotional multiplier, clamped to [0, 1]; the basis modes are on DecayOptions.
|
|
97
|
+
* Pinned memories skip time decay, but being marked wrong still fades them (netWrong). */
|
|
98
|
+
export declare function calculateStrength(entry: StrengthInputs, now?: Date, options?: DecayOptions): number;
|
|
99
|
+
/** The base half-life scaled by the PLAN.md signals: an error tag, and high or low schema fit. */
|
|
100
|
+
export declare function deriveHalfLife(base: number, entry: Partial<MemoryEntry>): number;
|
|
101
|
+
/** Counts the outcome; calculateStrength turns the counts into a reward factor on the half-life, so there is no fixed delta here. */
|
|
102
|
+
export declare function applyOutcome(entry: MemoryEntry, good: boolean): MemoryEntry;
|
|
103
|
+
/** applyOutcome as a served outcome applies it: a good outcome reconfirms the entry, so its churn-stale tag goes. */
|
|
104
|
+
export declare function entryAfterOutcome(entry: MemoryEntry, good: boolean): MemoryEntry;
|
|
105
|
+
/** A new id: `prefix_` plus the first ID_SUFFIX_CHARS hex characters of a random UUID. */
|
|
106
|
+
export declare function generateId(prefix?: string): string;
|
|
107
|
+
/** What the confidence facets read, so a caller can derive them from a row it loaded only in part. */
|
|
108
|
+
export type ConfidenceInputs = Pick<MemoryEntry, 'pinned' | 'confidence' | 'last_retrieved'>;
|
|
109
|
+
export interface ConfidenceFacets {
|
|
110
|
+
tier: ConfidenceLevel;
|
|
111
|
+
agedOut: boolean;
|
|
112
|
+
}
|
|
113
|
+
export declare function confidenceFacets(entry: MemoryEntry, now?: Date): ConfidenceFacets;
|
|
114
|
+
export declare function facetsOf(entry: ConfidenceInputs, now: Date): ConfidenceFacets;
|
|
115
|
+
export declare function confidenceLabel(entry: MemoryEntry, now?: Date): {
|
|
116
|
+
text: string;
|
|
117
|
+
warn: boolean;
|
|
118
|
+
};
|
|
119
|
+
/** The stored confidence, or 'stale' once the entry is aged out (not retrieved for AGED_OUT_AFTER_DAYS; pinned and verified exempt). */
|
|
120
|
+
export declare function resolveConfidence(entry: MemoryEntry, now?: Date): ConfidenceLevel;
|
|
121
|
+
/** Base half-life in days before deriveHalfLife's multipliers: 365 because 7 lost the current fact far more often and 730 did no better.
|
|
122
|
+
* `hippo sleep` moves memories still on an older base (src/consolidate/half-life-migration.ts). */
|
|
123
|
+
export declare const DEFAULT_HALF_LIFE_DAYS = 365;
|
|
124
|
+
export declare const COMPACTION_MEMORY_TAG = "compaction-memory";
|
|
125
|
+
export declare const COMPACTION_SOURCE_PREFIX = "compaction:";
|
|
126
|
+
/** An imported agent memory is kept for good: the agent's note file is its record. It needs both its tool's tag and a source with that tool's prefix,
|
|
127
|
+
* since merge copies source tags onto rows whose source is 'consolidation'. */
|
|
128
|
+
export interface KeepPair {
|
|
129
|
+
readonly tag: string;
|
|
130
|
+
readonly sourcePrefix: string;
|
|
131
|
+
}
|
|
132
|
+
export declare const KEEP_PAIRS: readonly KeepPair[];
|
|
133
|
+
export declare function isKeptForGood(entry: Pick<MemoryEntry, 'tags' | 'source' | 'superseded_by'>): boolean;
|
|
134
|
+
export declare function canAutoDelete(entry: Pick<MemoryEntry, 'pinned' | 'kind' | 'tags' | 'source' | 'superseded_by'>): boolean;
|
|
135
|
+
export interface CreateMemoryOptions {
|
|
136
|
+
layer?: Layer;
|
|
137
|
+
tags?: string[];
|
|
138
|
+
emotional_valence?: EmotionalValence;
|
|
139
|
+
pinned?: boolean;
|
|
140
|
+
schema_fit?: number;
|
|
141
|
+
source?: string;
|
|
142
|
+
confidence?: ConfidenceLevel;
|
|
143
|
+
/** The store's `loadConfig(hippoRoot).defaultHalfLifeDays`; required so no writer silently gets the compiled default. */
|
|
144
|
+
baseHalfLifeDays: number;
|
|
145
|
+
trace_outcome?: TraceOutcome;
|
|
146
|
+
source_session_id?: string | null;
|
|
147
|
+
valid_from?: string;
|
|
148
|
+
extracted_from?: string;
|
|
149
|
+
dag_level?: number;
|
|
150
|
+
dag_parent_id?: string;
|
|
151
|
+
kind?: MemoryKind;
|
|
152
|
+
scope?: string | null;
|
|
153
|
+
owner?: string | null;
|
|
154
|
+
artifact_ref?: string | null;
|
|
155
|
+
tenantId?: string;
|
|
156
|
+
}
|
|
157
|
+
/** Create a new memory entry with defaults. Untyped JavaScript callers that omit the options get the compiled default half-life. */
|
|
158
|
+
export declare function createMemory(content: string, options: CreateMemoryOptions): MemoryEntry;
|
|
159
|
+
/** The row that replaces `old`: a supersede never changes where a memory belongs, so source, scope, session and a stamped origin carry over. */
|
|
160
|
+
export declare function createSuccessor(old: MemoryEntry, content: string, opts: {
|
|
161
|
+
tenantId: string;
|
|
162
|
+
baseHalfLifeDays: number;
|
|
163
|
+
layer?: Layer;
|
|
164
|
+
tags?: string[];
|
|
165
|
+
pinned?: boolean;
|
|
166
|
+
}): MemoryEntry;
|
|
167
|
+
/** How well new content fits existing knowledge, 0..1: above 0.7 consolidates faster, below 0.3 is novel and decays faster if unused.
|
|
168
|
+
* Tags shared with existing memories count by rarity (a rare shared tag fits more), plus content-token overlap. */
|
|
169
|
+
export declare function computeSchemaFit(content: string, tags: string[], existingEntries: MemoryEntry[]): number;
|
|
170
|
+
/** What schema fit reads from a set of memories, so a store can answer without loading its rows. */
|
|
171
|
+
export interface SchemaFitSource {
|
|
172
|
+
readonly rows: number;
|
|
173
|
+
/** How many times each tag appears across the set. */
|
|
174
|
+
readonly tagCounts: ReadonlyMap<string, number>;
|
|
175
|
+
/** Each memory's text; the walk stops once more matches cannot move the score. */
|
|
176
|
+
readonly contents: Iterable<string>;
|
|
177
|
+
}
|
|
178
|
+
/** computeSchemaFit against `source`, for a caller that holds counts and texts but no rows. */
|
|
179
|
+
export declare function schemaFitFrom(content: string, tags: readonly string[], source: SchemaFitSource): number;
|
|
180
|
+
/** Returns copies with the retrieval count, clock and half-life updated; the caller persists them.
|
|
181
|
+
* Under HIPPO_ABLATE_RECALL_BOOST (eval-only) the entries come back unchanged, not empty, since callers derive last_retrieval_ids from them. */
|
|
182
|
+
export declare function markRetrieved(entries: MemoryEntry[], now?: Date): MemoryEntry[];
|
|
183
|
+
//# sourceMappingURL=memory.d.ts.map
|
|
@@ -0,0 +1,380 @@
|
|
|
1
|
+
/** Core data model for Hippo memory entries, based on the strength formula from PLAN.md. */
|
|
2
|
+
import { DEFAULT_TENANT_ID, envLossAversionRatio } from '../util/env.js';
|
|
3
|
+
import { BadRequestError } from './api-errors.js';
|
|
4
|
+
import { randomUUID } from 'crypto';
|
|
5
|
+
import { isDecayAblated, isOutcomeSlowAblated, isRecallBoostAblated, evalNow, } from './ablation.js';
|
|
6
|
+
import { AGENT_MEMORY_TOOLS, toolSourcePrefix } from './agent-memory-tools.js';
|
|
7
|
+
import { isJsonString } from '../util/json.js';
|
|
8
|
+
import { DAY_MS } from '../util/time.js';
|
|
9
|
+
import { ID_SUFFIX_CHARS } from '../util/token-text.js';
|
|
10
|
+
export const DEFAULT_SCHEMA_FIT = 0.5;
|
|
11
|
+
export const FALLBACK_HALF_LIFE_DAYS = 7;
|
|
12
|
+
export var Layer;
|
|
13
|
+
(function (Layer) {
|
|
14
|
+
Layer["Buffer"] = "buffer";
|
|
15
|
+
Layer["Episodic"] = "episodic";
|
|
16
|
+
Layer["Semantic"] = "semantic";
|
|
17
|
+
Layer["Trace"] = "trace";
|
|
18
|
+
})(Layer || (Layer = {}));
|
|
19
|
+
/** Tag on a memory whose named file/symbol/script changed after it was stored. */
|
|
20
|
+
export const CHURN_STALE_TAG = 'churn-stale';
|
|
21
|
+
// Losses weigh ~2x gains (Lovallo-Kahneman), so negative is 2.0; HIPPO_LOSS_AVERSION_RATIO scales it per process.
|
|
22
|
+
export const EMOTIONAL_MULTIPLIERS = {
|
|
23
|
+
neutral: 1.0,
|
|
24
|
+
positive: 1.0,
|
|
25
|
+
negative: 2.0, // error-tagged
|
|
26
|
+
critical: 2.0,
|
|
27
|
+
};
|
|
28
|
+
// A lower ratio can drop an error-tagged memory under sleep's DECAY_THRESHOLD (src/consolidate/decay.ts),
|
|
29
|
+
// so values below it fall back to 1.0.
|
|
30
|
+
const LOSS_AVERSION_RATIO_MIN = 0.5;
|
|
31
|
+
// Read once: calculateStrength runs per entry inside hot loops (src/api, src/consolidate, src/search).
|
|
32
|
+
let _lossAversionRatioCache;
|
|
33
|
+
function getLossAversionRatio() {
|
|
34
|
+
if (_lossAversionRatioCache !== undefined)
|
|
35
|
+
return _lossAversionRatioCache;
|
|
36
|
+
const raw = envLossAversionRatio();
|
|
37
|
+
if (raw === undefined || raw === '') {
|
|
38
|
+
_lossAversionRatioCache = 1.0;
|
|
39
|
+
return 1.0;
|
|
40
|
+
}
|
|
41
|
+
const parsed = Number(raw);
|
|
42
|
+
if (!Number.isFinite(parsed) || parsed < LOSS_AVERSION_RATIO_MIN) {
|
|
43
|
+
_lossAversionRatioCache = 1.0;
|
|
44
|
+
return 1.0;
|
|
45
|
+
}
|
|
46
|
+
_lossAversionRatioCache = parsed;
|
|
47
|
+
return parsed;
|
|
48
|
+
}
|
|
49
|
+
/** Test-only: a test that sets HIPPO_LOSS_AVERSION_RATIO calls this in beforeEach and afterEach (tests/emotional-multipliers.test.ts). */
|
|
50
|
+
export function _resetLossAversionRatioCacheForTests() {
|
|
51
|
+
_lossAversionRatioCache = undefined;
|
|
52
|
+
}
|
|
53
|
+
/** Scales only the `negative` multiplier; `critical` stays unscaled so the knob moves just the losses-vs-gains claim. */
|
|
54
|
+
export function applyLossAversionRatio(valence, baseMultiplier) {
|
|
55
|
+
if (valence !== 'negative')
|
|
56
|
+
return baseMultiplier;
|
|
57
|
+
return baseMultiplier * getLossAversionRatio();
|
|
58
|
+
}
|
|
59
|
+
/** 1 + REWARD_SLOPE * (pos - neg) / (pos + neg + 1), in (0.5, 1.5), 1.0 with no outcomes; it scales the effective half-life. */
|
|
60
|
+
export function calculateRewardFactor(entry) {
|
|
61
|
+
// EVAL-ONLY ablation (see ablation.ts): the slow outcome channel.
|
|
62
|
+
if (isOutcomeSlowAblated())
|
|
63
|
+
return 1.0;
|
|
64
|
+
const pos = entry.outcome_positive ?? 0;
|
|
65
|
+
const neg = entry.outcome_negative ?? 0;
|
|
66
|
+
if (pos === 0 && neg === 0)
|
|
67
|
+
return 1.0;
|
|
68
|
+
const ratio = (pos - neg) / (pos + neg + 1);
|
|
69
|
+
return 1 + REWARD_SLOPE * ratio;
|
|
70
|
+
}
|
|
71
|
+
/** Bad marks alone never push a memory under sleep's 0.05 retire line; supersede is the hard correction. */
|
|
72
|
+
export const MAX_WRONG_HALVINGS = 3;
|
|
73
|
+
// Shared by calculateStrength and strengthSql (src/store/rule-sql.ts) so the two cannot drift.
|
|
74
|
+
export const DECAY_BASE = 0.5;
|
|
75
|
+
export const REWARD_SLOPE = 0.5;
|
|
76
|
+
export const RETRIEVAL_BOOST_SLOPE = 0.1;
|
|
77
|
+
/** Bad outcome marks past good ones, floored at zero; each halves strength and stops recall strengthening, so a correction outranks pinning. */
|
|
78
|
+
export function netWrong(entry) {
|
|
79
|
+
if (isOutcomeSlowAblated() || isDecayAblated())
|
|
80
|
+
return 0;
|
|
81
|
+
return Math.max(0, (entry.outcome_negative ?? 0) - (entry.outcome_positive ?? 0));
|
|
82
|
+
}
|
|
83
|
+
/** Strength at `now` = decay * retrieval boost * emotional multiplier, clamped to [0, 1]; the basis modes are on DecayOptions.
|
|
84
|
+
* Pinned memories skip time decay, but being marked wrong still fades them (netWrong). */
|
|
85
|
+
export function calculateStrength(entry,
|
|
86
|
+
// evalNow() is the real clock unless HIPPO_FAKE_NOW is set (eval-only); an explicit `now` wins.
|
|
87
|
+
now = evalNow(), options = {}) {
|
|
88
|
+
// Being marked wrong outranks every shield: pinning, error tags, heavy recall.
|
|
89
|
+
const wrongPenalty = Math.pow(DECAY_BASE, Math.min(netWrong(entry), MAX_WRONG_HALVINGS));
|
|
90
|
+
if (entry.pinned)
|
|
91
|
+
return wrongPenalty;
|
|
92
|
+
// EVAL-ONLY ablation (see ablation.ts): anchor decay at creation so clock resets from earlier unflagged runs cannot leak in.
|
|
93
|
+
const lastRetrieved = new Date(isRecallBoostAblated() ? entry.created : entry.last_retrieved);
|
|
94
|
+
const daysSince = (now.getTime() - lastRetrieved.getTime()) / DAY_MS;
|
|
95
|
+
const rewardFactor = calculateRewardFactor(entry);
|
|
96
|
+
const effectiveHalfLife = entry.half_life_days * rewardFactor;
|
|
97
|
+
// Guard: zero half-life causes 0/0 = NaN in the exponent
|
|
98
|
+
if (effectiveHalfLife <= 0)
|
|
99
|
+
return 0.0;
|
|
100
|
+
const decayExponent = decayExponentFor(options, daysSince, effectiveHalfLife);
|
|
101
|
+
// EVAL-ONLY ablation (see ablation.ts): decay := 1, so the [0,1] clamp below caps the boost at baseline.
|
|
102
|
+
const decay = isDecayAblated() ? 1.0 : Math.pow(DECAY_BASE, decayExponent);
|
|
103
|
+
const retrievalBoost = retrievalBoostFor(entry);
|
|
104
|
+
const baseMultiplier = EMOTIONAL_MULTIPLIERS[entry.emotional_valence] ?? 1.0;
|
|
105
|
+
const emotionalMultiplier = applyLossAversionRatio(entry.emotional_valence, baseMultiplier);
|
|
106
|
+
const raw = decay * retrievalBoost * emotionalMultiplier;
|
|
107
|
+
const clamped = Math.min(1.0, Math.max(0.0, raw));
|
|
108
|
+
return Number.isFinite(clamped) ? clamped * wrongPenalty : 0.0;
|
|
109
|
+
}
|
|
110
|
+
function decayExponentFor(options, daysSince, halfLifeDays) {
|
|
111
|
+
let effectiveHalfLife = halfLifeDays;
|
|
112
|
+
const basis = options.decayBasis ?? 'clock';
|
|
113
|
+
if (basis === 'session') {
|
|
114
|
+
// Each sleep cycle counts as one "day"; sessions since last retrieval are estimated from wall time and the average interval.
|
|
115
|
+
const avgInterval = options.avgSessionIntervalDays ?? 1;
|
|
116
|
+
const sessionsSince = avgInterval > 0 ? Math.max(0, daysSince / avgInterval) : daysSince;
|
|
117
|
+
return sessionsSince / effectiveHalfLife;
|
|
118
|
+
}
|
|
119
|
+
if (basis === 'adaptive') {
|
|
120
|
+
// Scale half-life by session frequency: infrequent agents get longer half-lives
|
|
121
|
+
const avgInterval = options.avgSessionIntervalDays ?? 0;
|
|
122
|
+
if (avgInterval > 1) {
|
|
123
|
+
effectiveHalfLife *= avgInterval;
|
|
124
|
+
}
|
|
125
|
+
return daysSince / effectiveHalfLife;
|
|
126
|
+
}
|
|
127
|
+
return daysSince / effectiveHalfLife;
|
|
128
|
+
}
|
|
129
|
+
// EVAL-ONLY ablation (see ablation.ts) neutralizes the read side too, so counts written before the flag cannot leak in.
|
|
130
|
+
function retrievalBoostFor(entry) {
|
|
131
|
+
return isRecallBoostAblated() || netWrong(entry) > 0
|
|
132
|
+
? 1.0
|
|
133
|
+
: 1 + RETRIEVAL_BOOST_SLOPE * Math.log2(entry.retrieval_count + 1);
|
|
134
|
+
}
|
|
135
|
+
const HIGH_SCHEMA_FIT = 0.7;
|
|
136
|
+
const HIGH_FIT_HALF_LIFE_FACTOR = 1.5;
|
|
137
|
+
const LOW_SCHEMA_FIT = 0.3;
|
|
138
|
+
const LOW_FIT_HALF_LIFE_FACTOR = 0.5;
|
|
139
|
+
// Schema fit blends tag coverage and content similarity; a content match needs this share of shared tokens.
|
|
140
|
+
const TAG_FIT_WEIGHT = 0.6;
|
|
141
|
+
const CONTENT_FIT_WEIGHT = 0.4;
|
|
142
|
+
const CONTENT_TOKEN_SHARE_MIN = 0.2;
|
|
143
|
+
const CONTENT_ENOUGH_FRACTION = 0.1;
|
|
144
|
+
// An error is worth remembering longer than a neutral note (PLAN.md half-life table).
|
|
145
|
+
const ERROR_TAG_HALF_LIFE_FACTOR = 2;
|
|
146
|
+
// Each retrieval lengthens the half-life by this many days (PLAN.md).
|
|
147
|
+
const RETRIEVAL_HALF_LIFE_GAIN_DAYS = 2;
|
|
148
|
+
/** The base half-life scaled by the PLAN.md signals: an error tag, and high or low schema fit. */
|
|
149
|
+
export function deriveHalfLife(base, entry) {
|
|
150
|
+
let hl = base;
|
|
151
|
+
if (entry.tags?.includes('error')) {
|
|
152
|
+
hl *= ERROR_TAG_HALF_LIFE_FACTOR;
|
|
153
|
+
}
|
|
154
|
+
if (entry.schema_fit !== undefined && entry.schema_fit > HIGH_SCHEMA_FIT) {
|
|
155
|
+
hl *= HIGH_FIT_HALF_LIFE_FACTOR;
|
|
156
|
+
}
|
|
157
|
+
if (entry.schema_fit !== undefined && entry.schema_fit < LOW_SCHEMA_FIT) {
|
|
158
|
+
hl *= LOW_FIT_HALF_LIFE_FACTOR;
|
|
159
|
+
}
|
|
160
|
+
return hl;
|
|
161
|
+
}
|
|
162
|
+
/** Counts the outcome; calculateStrength turns the counts into a reward factor on the half-life, so there is no fixed delta here. */
|
|
163
|
+
export function applyOutcome(entry, good) {
|
|
164
|
+
const updated = {
|
|
165
|
+
...entry,
|
|
166
|
+
outcome_score: good ? 1 : -1,
|
|
167
|
+
outcome_positive: (entry.outcome_positive ?? 0) + (good ? 1 : 0),
|
|
168
|
+
outcome_negative: (entry.outcome_negative ?? 0) + (good ? 0 : 1),
|
|
169
|
+
};
|
|
170
|
+
updated.strength = calculateStrength(updated);
|
|
171
|
+
return updated;
|
|
172
|
+
}
|
|
173
|
+
/** applyOutcome as a served outcome applies it: a good outcome reconfirms the entry, so its churn-stale tag goes. */
|
|
174
|
+
export function entryAfterOutcome(entry, good) {
|
|
175
|
+
const updated = applyOutcome(entry, good);
|
|
176
|
+
if (!good || !updated.tags.includes(CHURN_STALE_TAG))
|
|
177
|
+
return updated;
|
|
178
|
+
return { ...updated, tags: updated.tags.filter((t) => t !== CHURN_STALE_TAG) };
|
|
179
|
+
}
|
|
180
|
+
/** A new id: `prefix_` plus the first ID_SUFFIX_CHARS hex characters of a random UUID. */
|
|
181
|
+
export function generateId(prefix = 'mem') {
|
|
182
|
+
return `${prefix}_${randomUUID().replace(/-/g, '').slice(0, ID_SUFFIX_CHARS)}`;
|
|
183
|
+
}
|
|
184
|
+
// Days without a retrieval before trust lapses; pinned and verified rows are exempt by policy.
|
|
185
|
+
const AGED_OUT_AFTER_DAYS = 30;
|
|
186
|
+
function isAgedOut(entry, now) {
|
|
187
|
+
if (entry.pinned || entry.confidence === 'verified')
|
|
188
|
+
return false;
|
|
189
|
+
const lastRetrieved = new Date(entry.last_retrieved);
|
|
190
|
+
return (now.getTime() - lastRetrieved.getTime()) / DAY_MS > AGED_OUT_AFTER_DAYS;
|
|
191
|
+
}
|
|
192
|
+
export function confidenceFacets(entry, now = evalNow()) {
|
|
193
|
+
return facetsOf(entry, now);
|
|
194
|
+
}
|
|
195
|
+
export function facetsOf(entry, now) {
|
|
196
|
+
return { tier: entry.confidence, agedOut: isAgedOut(entry, now) };
|
|
197
|
+
}
|
|
198
|
+
// An aged-out row warns on its own, since its stored tier alone would hide it.
|
|
199
|
+
export function confidenceLabel(entry, now = evalNow()) {
|
|
200
|
+
const { tier, agedOut } = confidenceFacets(entry, now);
|
|
201
|
+
return {
|
|
202
|
+
text: agedOut ? `${tier}, aged` : tier,
|
|
203
|
+
warn: agedOut || tier === 'stale' || tier === 'inferred',
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
/** The stored confidence, or 'stale' once the entry is aged out (not retrieved for AGED_OUT_AFTER_DAYS; pinned and verified exempt). */
|
|
207
|
+
export function resolveConfidence(entry, now = evalNow()) {
|
|
208
|
+
return isAgedOut(entry, now) ? 'stale' : entry.confidence;
|
|
209
|
+
}
|
|
210
|
+
/** Base half-life in days before deriveHalfLife's multipliers: 365 because 7 lost the current fact far more often and 730 did no better.
|
|
211
|
+
* `hippo sleep` moves memories still on an older base (src/consolidate/half-life-migration.ts). */
|
|
212
|
+
export const DEFAULT_HALF_LIFE_DAYS = 365;
|
|
213
|
+
export const COMPACTION_MEMORY_TAG = 'compaction-memory';
|
|
214
|
+
export const COMPACTION_SOURCE_PREFIX = 'compaction:';
|
|
215
|
+
export const KEEP_PAIRS = AGENT_MEMORY_TOOLS.map((t) => ({ tag: t.tag, sourcePrefix: toolSourcePrefix(t.id) }));
|
|
216
|
+
export function isKeptForGood(entry) {
|
|
217
|
+
return !entry.superseded_by && KEEP_PAIRS.some((p) => entry.tags.includes(p.tag) && entry.source.startsWith(p.sourcePrefix));
|
|
218
|
+
}
|
|
219
|
+
export function canAutoDelete(entry) {
|
|
220
|
+
return !entry.pinned && entry.kind !== 'raw' && !isKeptForGood(entry);
|
|
221
|
+
}
|
|
222
|
+
export function createMemory(content, options = {}) {
|
|
223
|
+
assertValidMemoryInput(content, options);
|
|
224
|
+
const now = evalNow().toISOString(); // honors HIPPO_FAKE_NOW (eval-only)
|
|
225
|
+
const layer = options.layer ?? Layer.Episodic;
|
|
226
|
+
const tags = options.tags ?? [];
|
|
227
|
+
const emotional_valence = options.emotional_valence ?? inferValence(tags);
|
|
228
|
+
const schema_fit = options.schema_fit ?? DEFAULT_SCHEMA_FIT;
|
|
229
|
+
const half_life_days = deriveHalfLife(options.baseHalfLifeDays ?? DEFAULT_HALF_LIFE_DAYS, { tags, schema_fit });
|
|
230
|
+
const entry = {
|
|
231
|
+
id: generateId(layer === Layer.Semantic ? 'sem' : 'mem'),
|
|
232
|
+
created: now,
|
|
233
|
+
last_retrieved: now,
|
|
234
|
+
retrieval_count: 0,
|
|
235
|
+
strength: 1.0,
|
|
236
|
+
half_life_days,
|
|
237
|
+
layer,
|
|
238
|
+
tags,
|
|
239
|
+
emotional_valence,
|
|
240
|
+
schema_fit,
|
|
241
|
+
source: options.source ?? 'cli',
|
|
242
|
+
outcome_score: null,
|
|
243
|
+
outcome_positive: 0,
|
|
244
|
+
outcome_negative: 0,
|
|
245
|
+
conflicts_with: [],
|
|
246
|
+
pinned: options.pinned ?? false,
|
|
247
|
+
confidence: options.confidence ?? 'verified',
|
|
248
|
+
content,
|
|
249
|
+
parents: [],
|
|
250
|
+
starred: false,
|
|
251
|
+
trace_outcome: options.trace_outcome ?? null,
|
|
252
|
+
source_session_id: options.source_session_id ?? null,
|
|
253
|
+
valid_from: options.valid_from ?? now,
|
|
254
|
+
superseded_by: null,
|
|
255
|
+
extracted_from: options.extracted_from ?? null,
|
|
256
|
+
dag_level: options.dag_level ?? 0,
|
|
257
|
+
dag_parent_id: options.dag_parent_id ?? null,
|
|
258
|
+
kind: options.kind ?? 'distilled',
|
|
259
|
+
scope: options.scope ?? null,
|
|
260
|
+
owner: options.owner ?? null,
|
|
261
|
+
artifact_ref: options.artifact_ref ?? null,
|
|
262
|
+
tenantId: options.tenantId ?? DEFAULT_TENANT_ID,
|
|
263
|
+
};
|
|
264
|
+
entry.strength = calculateStrength(entry);
|
|
265
|
+
return entry;
|
|
266
|
+
}
|
|
267
|
+
function assertValidMemoryInput(content, options) {
|
|
268
|
+
const trimmed = content.trim();
|
|
269
|
+
if (trimmed.length < 3) {
|
|
270
|
+
throw new BadRequestError(`Memory content too short (${trimmed.length} chars, minimum 3): "${trimmed}"`);
|
|
271
|
+
}
|
|
272
|
+
const validOutcomes = ['success', 'failure', 'partial', null];
|
|
273
|
+
if (options.trace_outcome !== undefined && !validOutcomes.includes(options.trace_outcome)) {
|
|
274
|
+
throw new BadRequestError(`Invalid trace_outcome: ${options.trace_outcome}. Must be 'success', 'failure', 'partial', or null.`);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
/** The row that replaces `old`: a supersede never changes where a memory belongs, so source, scope, session and a stamped origin carry over. */
|
|
278
|
+
export function createSuccessor(old, content, opts) {
|
|
279
|
+
const next = createMemory(content, {
|
|
280
|
+
layer: opts.layer ?? old.layer,
|
|
281
|
+
tags: opts.tags ?? [...old.tags],
|
|
282
|
+
pinned: opts.pinned ?? old.pinned,
|
|
283
|
+
source: old.source,
|
|
284
|
+
confidence: 'verified',
|
|
285
|
+
tenantId: opts.tenantId,
|
|
286
|
+
scope: old.scope,
|
|
287
|
+
source_session_id: old.source_session_id,
|
|
288
|
+
baseHalfLifeDays: opts.baseHalfLifeDays,
|
|
289
|
+
});
|
|
290
|
+
// A legacy null origin has nothing to carry, so the store stamps it from its own location.
|
|
291
|
+
if (isJsonString(old.origin_project)) {
|
|
292
|
+
next.origin_project = old.origin_project;
|
|
293
|
+
}
|
|
294
|
+
return next;
|
|
295
|
+
}
|
|
296
|
+
/** How well new content fits existing knowledge, 0..1: above 0.7 consolidates faster, below 0.3 is novel and decays faster if unused.
|
|
297
|
+
* Tags shared with existing memories count by rarity (a rare shared tag fits more), plus content-token overlap. */
|
|
298
|
+
export function computeSchemaFit(content, tags, existingEntries) {
|
|
299
|
+
const tagCounts = new Map();
|
|
300
|
+
for (const entry of existingEntries) {
|
|
301
|
+
for (const tag of entry.tags) {
|
|
302
|
+
tagCounts.set(tag, (tagCounts.get(tag) ?? 0) + 1);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
return schemaFitFrom(content, tags, { rows: existingEntries.length, tagCounts, contents: existingEntries.map((e) => e.content) });
|
|
306
|
+
}
|
|
307
|
+
function significantTokens(text) {
|
|
308
|
+
return new Set(text.toLowerCase().replace(/[^\w\s]/g, ' ').split(/\s+/).filter((t) => t.length > 3));
|
|
309
|
+
}
|
|
310
|
+
/** computeSchemaFit against `source`, for a caller that holds counts and texts but no rows. */
|
|
311
|
+
export function schemaFitFrom(content, tags, source) {
|
|
312
|
+
const N = source.rows;
|
|
313
|
+
if (N === 0)
|
|
314
|
+
return DEFAULT_SCHEMA_FIT;
|
|
315
|
+
const tagFreq = source.tagCounts;
|
|
316
|
+
if (tags.length === 0 && tagFreq.size === 0)
|
|
317
|
+
return DEFAULT_SCHEMA_FIT;
|
|
318
|
+
// Tag overlap, weighted so a shared rare tag counts for more than a shared common one.
|
|
319
|
+
let weightedOverlap = 0;
|
|
320
|
+
let totalWeight = 0;
|
|
321
|
+
const maxIdf = Math.log(N + 1) + 1;
|
|
322
|
+
for (const tag of tags) {
|
|
323
|
+
const freq = tagFreq.get(tag) ?? 0;
|
|
324
|
+
if (freq > 0)
|
|
325
|
+
weightedOverlap += Math.log(N / freq) + 1;
|
|
326
|
+
totalWeight += maxIdf;
|
|
327
|
+
}
|
|
328
|
+
// Scaled so that matching half the tags at average weight gives about 0.5.
|
|
329
|
+
const tagScore = totalWeight > 0 ? Math.min(1, (weightedOverlap / totalWeight) * 2) : 0;
|
|
330
|
+
const newTokens = significantTokens(content);
|
|
331
|
+
if (newTokens.size === 0)
|
|
332
|
+
return Math.min(1, Math.max(0, tagScore));
|
|
333
|
+
// The content score is capped at 1, which this many matching memories reach.
|
|
334
|
+
const enough = Math.max(5, N * CONTENT_ENOUGH_FRACTION);
|
|
335
|
+
let contentMatches = 0;
|
|
336
|
+
for (const text of source.contents) {
|
|
337
|
+
const entryTokens = significantTokens(text);
|
|
338
|
+
let shared = 0;
|
|
339
|
+
for (const token of newTokens) {
|
|
340
|
+
if (entryTokens.has(token))
|
|
341
|
+
shared++;
|
|
342
|
+
}
|
|
343
|
+
if (shared / newTokens.size > CONTENT_TOKEN_SHARE_MIN && ++contentMatches >= enough)
|
|
344
|
+
break;
|
|
345
|
+
}
|
|
346
|
+
const contentScore = Math.min(1, contentMatches / enough);
|
|
347
|
+
const fit = TAG_FIT_WEIGHT * tagScore + CONTENT_FIT_WEIGHT * contentScore;
|
|
348
|
+
return Math.min(1, Math.max(0, fit));
|
|
349
|
+
}
|
|
350
|
+
function inferValence(tags) {
|
|
351
|
+
if (tags.includes('critical'))
|
|
352
|
+
return 'critical';
|
|
353
|
+
if (tags.includes('error'))
|
|
354
|
+
return 'negative';
|
|
355
|
+
if (tags.includes('success') || tags.includes('win'))
|
|
356
|
+
return 'positive';
|
|
357
|
+
return 'neutral';
|
|
358
|
+
}
|
|
359
|
+
/** Returns copies with the retrieval count, clock and half-life updated; the caller persists them.
|
|
360
|
+
* Under HIPPO_ABLATE_RECALL_BOOST (eval-only) the entries come back unchanged, not empty, since callers derive last_retrieval_ids from them. */
|
|
361
|
+
export function markRetrieved(entries, now = evalNow()) {
|
|
362
|
+
if (isRecallBoostAblated())
|
|
363
|
+
return entries;
|
|
364
|
+
return entries.map((e) => {
|
|
365
|
+
if (e.superseded_by)
|
|
366
|
+
return e;
|
|
367
|
+
const wrong = netWrong(e) > 0;
|
|
368
|
+
// Confidence stays untouched: it is an epistemic tier, not a recency signal.
|
|
369
|
+
const updated = {
|
|
370
|
+
...e,
|
|
371
|
+
retrieval_count: e.retrieval_count + 1,
|
|
372
|
+
// A wrong memory keeps both, since last_retrieved is the decay anchor.
|
|
373
|
+
last_retrieved: wrong ? e.last_retrieved : now.toISOString(),
|
|
374
|
+
half_life_days: wrong ? e.half_life_days : e.half_life_days + RETRIEVAL_HALF_LIFE_GAIN_DAYS,
|
|
375
|
+
};
|
|
376
|
+
updated.strength = calculateStrength(updated, now);
|
|
377
|
+
return updated;
|
|
378
|
+
});
|
|
379
|
+
}
|
|
380
|
+
//# sourceMappingURL=memory.js.map
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import * as path from 'path';
|
|
2
|
+
import { fileURLToPath } from 'url';
|
|
3
|
+
/** The package folder: it holds package.json, bin/ and dist-ui/. The same two steps up from src/core and from dist/core. */
|
|
4
|
+
export const PACKAGE_ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..', '..');
|
|
5
|
+
//# sourceMappingURL=package-root.js.map
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Physics engine configuration for Hippo memory-as-physics.
|
|
3
|
-
* All constants are tunable; defaults calibrated for ~500 memory corpus.
|
|
4
|
-
*/
|
|
1
|
+
/** Physics engine configuration for Hippo memory-as-physics. All constants are tunable; defaults calibrated for ~500 memory corpus. */
|
|
5
2
|
export interface PhysicsConfig {
|
|
6
3
|
/** Use physics scoring when embeddings available. 'auto' = yes if embeddings exist. */
|
|
7
4
|
enabled: boolean | 'auto';
|
|
@@ -1,12 +1,7 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Physics engine configuration for Hippo memory-as-physics.
|
|
3
|
-
* All constants are tunable; defaults calibrated for ~500 memory corpus.
|
|
4
|
-
*/
|
|
1
|
+
/** Physics engine configuration for Hippo memory-as-physics. All constants are tunable; defaults calibrated for ~500 memory corpus. */
|
|
5
2
|
export const DEFAULT_PHYSICS_CONFIG = {
|
|
6
|
-
// Off by default: the paired ablation (benchmarks/physics-ablation/) found
|
|
7
|
-
//
|
|
8
|
-
// (MRR 0.68 vs 0.84, R@5 74% vs 84%). Opt in with physics.enabled 'auto'
|
|
9
|
-
// or true.
|
|
3
|
+
// Off by default: the paired ablation (benchmarks/physics-ablation/) found physics worse than classic hybrid on every metric, CI excluding zero
|
|
4
|
+
// (MRR 0.68 vs 0.84, R@5 74% vs 84%). Opt in with physics.enabled 'auto' or true.
|
|
10
5
|
enabled: false,
|
|
11
6
|
G_query: 2.0,
|
|
12
7
|
G_memory: 0.01,
|