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,14 +1,7 @@
|
|
|
1
|
-
/**
|
|
2
|
-
|
|
3
|
-
*
|
|
4
|
-
* Steps:
|
|
5
|
-
* 1. Decay pass - remove entries below strength threshold
|
|
6
|
-
* 2. Merge pass - find episodic entries with high text overlap, create semantic summaries
|
|
7
|
-
* 3. Stats tracking
|
|
8
|
-
*/
|
|
9
|
-
import { evalNow } from '../core/ablation.js';
|
|
1
|
+
/** Consolidation engine ("Sleep"): decay pass (drop entries below the strength threshold), merge pass (semantic summaries of overlapping episodics), stats. */
|
|
2
|
+
import { evalNow, strengthAblation } from '../core/ablation.js';
|
|
10
3
|
import { canAutoDelete } from '../core/memory.js';
|
|
11
|
-
import {
|
|
4
|
+
import { loadAllEntriesWithBase } from '../store/entry-reads.js';
|
|
12
5
|
import { commitInChunks, memoriesBackingObjects } from '../store/delete-and-batch.js';
|
|
13
6
|
import { appendConsolidationRun, loadSessionDecayContext, incrementSleepCount } from '../store/index-and-stats.js';
|
|
14
7
|
import { replaceDetectedConflicts } from '../store/conflicts.js';
|
|
@@ -18,7 +11,7 @@ import { loadConfig } from '../core/config.js';
|
|
|
18
11
|
import { recordAuditEventsRowByRow, reportAuditWriteFailure } from '../store/audit.js';
|
|
19
12
|
import { lazyTombstoneChecks } from '../store/tombstone-checks.js';
|
|
20
13
|
import { migrateDefaultHalfLife, LEGACY_TYPED_HALF_LIFE } from './half-life-migration.js';
|
|
21
|
-
import { errorMessage, log } from '../util/log.js';
|
|
14
|
+
import { errorFields, errorMessage, log } from '../util/log.js';
|
|
22
15
|
import { WRITE_BUDGET } from '../util/write-budget.js';
|
|
23
16
|
import { decayPass } from './decay.js';
|
|
24
17
|
import { familyUnits, groupFlush } from './flush-units.js';
|
|
@@ -40,14 +33,13 @@ export async function consolidate(hippoRoot, options = {}) {
|
|
|
40
33
|
syncFtsIndex(hippoRoot, dryRun, result);
|
|
41
34
|
// Host-wide by design: per-tenant filtering would mean N runs per host and no cross-tenant dedup.
|
|
42
35
|
// The api.sleep audit row tags this with the admin synthetic actor.
|
|
43
|
-
const all =
|
|
36
|
+
const { entries: all, base: snapshot } = loadAllEntriesWithBase(hippoRoot);
|
|
44
37
|
if (dryRun)
|
|
45
38
|
for (const e of all)
|
|
46
39
|
e.half_life_days = halfLife.halfLives.get(e.id) ?? e.half_life_days;
|
|
47
40
|
const backingObjects = memoriesBackingObjects(hippoRoot);
|
|
48
41
|
// Retirable: auto-deletable (never pinned, raw or kept for good) and not backing a first-class object.
|
|
49
42
|
const retirable = (entry) => canAutoDelete(entry) && !backingObjects.has(entry.id);
|
|
50
|
-
const snapshot = new Map(structuredClone(all).map((e) => [e.id, e]));
|
|
51
43
|
const config = loadConfig(hippoRoot);
|
|
52
44
|
const decayOpts = sessionDecayOptions(hippoRoot, config);
|
|
53
45
|
const run = {
|
|
@@ -76,6 +68,7 @@ function sessionDecayOptions(hippoRoot, config) {
|
|
|
76
68
|
decayBasis: config.decayBasis,
|
|
77
69
|
avgSessionIntervalDays: sessionCtx.avgSessionIntervalDays,
|
|
78
70
|
sleepCount: sessionCtx.sleepCount,
|
|
71
|
+
ablation: strengthAblation(),
|
|
79
72
|
};
|
|
80
73
|
}
|
|
81
74
|
/** Every pass between decay and the flush; the tombstone-check handle closes whichever of them throws. */
|
|
@@ -104,7 +97,8 @@ function migrateHalfLives(hippoRoot, dryRun, result) {
|
|
|
104
97
|
result.details.push(` ⏳ ${dryRun ? 'would move' : 'moved'} ${halfLife.rescaled} memories from the ${halfLife.from}-day to the ${halfLife.to}-day half-life`);
|
|
105
98
|
}
|
|
106
99
|
if (halfLife.typed > 0) {
|
|
107
|
-
result.details.push(` ⏳ ${dryRun ? 'would move' : 'moved'} ${halfLife.typed} memories of decisions, incidents and other objects
|
|
100
|
+
result.details.push(` ⏳ ${dryRun ? 'would move' : 'moved'} ${halfLife.typed} memories of decisions, incidents and other objects ` +
|
|
101
|
+
`from the ${LEGACY_TYPED_HALF_LIFE}-day to the ${halfLife.to}-day half-life`);
|
|
108
102
|
}
|
|
109
103
|
return halfLife;
|
|
110
104
|
}
|
|
@@ -125,10 +119,8 @@ async function flushPending(run, snapshot, budget) {
|
|
|
125
119
|
result.removed = result.removedIds.length;
|
|
126
120
|
result.dormant = pendingDormant.filter((m) => left.has(m.entry.id)).length;
|
|
127
121
|
}
|
|
128
|
-
// Dormant retention: a dormant memory nobody restored within
|
|
129
|
-
// dormant.
|
|
130
|
-
// even when dormant.enabled is off, so turning it off still ages out what
|
|
131
|
-
// earlier sleeps kept.
|
|
122
|
+
// Dormant retention: a dormant memory nobody restored within dormant.retentionDays is deleted for good (0 keeps forever);
|
|
123
|
+
// runs even when dormant.enabled is off, so turning it off still ages out what earlier sleeps kept.
|
|
132
124
|
async function expireDormant(run, budget) {
|
|
133
125
|
const { config, result, dryRun } = run;
|
|
134
126
|
if (!(config.dormant.retentionDays > 0))
|
|
@@ -136,12 +128,11 @@ async function expireDormant(run, budget) {
|
|
|
136
128
|
const cutoff = new Date(run.now.getTime() - config.dormant.retentionDays * DAY_MS).toISOString();
|
|
137
129
|
result.dormantExpired = await expireDormantBefore(run.hippoRoot, cutoff, { dryRun, budget, busyWaitMs: SLEEP_DB_WAIT_MS });
|
|
138
130
|
if (result.dormantExpired > 0) {
|
|
139
|
-
result.details.push(` ⌛ ${dryRun ? 'would expire' : 'expired'} ${result.dormantExpired} dormant memor${result.dormantExpired === 1 ? 'y' : 'ies'}
|
|
131
|
+
result.details.push(` ⌛ ${dryRun ? 'would expire' : 'expired'} ${result.dormantExpired} dormant memor${result.dormantExpired === 1 ? 'y' : 'ies'} ` +
|
|
132
|
+
`older than ${config.dormant.retentionDays} days`);
|
|
140
133
|
}
|
|
141
134
|
}
|
|
142
|
-
// -------------------------------------------------------------------------
|
|
143
135
|
// 4. Log run
|
|
144
|
-
// -------------------------------------------------------------------------
|
|
145
136
|
function logRun(run, decay) {
|
|
146
137
|
const { hippoRoot, now, result } = run;
|
|
147
138
|
const detectedConflicts = detectConflicts(run.survivors, now, run.decayOpts, decay.rescuedIds);
|
|
@@ -187,7 +178,7 @@ function auditRescues(run, { rescuedEntries, rankById }) {
|
|
|
187
178
|
}
|
|
188
179
|
catch (err) {
|
|
189
180
|
// An audit store that will not open must never crash the mutation it records.
|
|
190
|
-
log.
|
|
181
|
+
log.warn(`mv_rescue audit unavailable: ${errorMessage(err)}`, { errorClass: errorFields(err).errorClass });
|
|
191
182
|
result.details.push(` ⚠️ memory-value: mv_rescue audit unavailable this cycle ` +
|
|
192
183
|
`(${rescuedEntries.length} rescue${rescuedEntries.length === 1 ? '' : 's'} not audited)`);
|
|
193
184
|
}
|
|
@@ -1,10 +1,5 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* A trace is a `MemoryEntry` with `layer === 'trace'` that captures an ordered
|
|
5
|
-
* sequence of agent actions and their final outcome. v1 stores steps as
|
|
6
|
-
* markdown in `content`; `renderTraceContent` is the canonical formatter.
|
|
7
|
-
*/
|
|
1
|
+
/** Trace-layer helpers. A trace is a `MemoryEntry` with `layer === 'trace'`: ordered agent actions and their outcome, stored as markdown in `content`
|
|
2
|
+
* (`renderTraceContent` formats it). */
|
|
8
3
|
export interface TraceStep {
|
|
9
4
|
action: string;
|
|
10
5
|
observation: string;
|
|
@@ -15,17 +10,7 @@ export interface TraceRecord {
|
|
|
15
10
|
steps: TraceStep[];
|
|
16
11
|
outcome: 'success' | 'failure' | 'partial';
|
|
17
12
|
}
|
|
18
|
-
/**
|
|
19
|
-
* Render a trace record as agent-readable markdown.
|
|
20
|
-
*
|
|
21
|
-
* Format:
|
|
22
|
-
* Task: <task>
|
|
23
|
-
* Outcome: <outcome>
|
|
24
|
-
* Steps:
|
|
25
|
-
* 1. <action>
|
|
26
|
-
* → <observation> (omitted if observation is empty)
|
|
27
|
-
* 2. ...
|
|
28
|
-
*/
|
|
13
|
+
/** Render a trace record as agent-readable markdown: `Task:`, `Outcome:`, then numbered `Steps:` with each observation on an arrow line (omitted if empty). */
|
|
29
14
|
export declare function renderTraceContent(rec: TraceRecord): string;
|
|
30
15
|
/**
|
|
31
16
|
* Parse a JSON string into an array of TraceStep. Throws on invalid shape.
|
|
@@ -1,23 +1,8 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* A trace is a `MemoryEntry` with `layer === 'trace'` that captures an ordered
|
|
5
|
-
* sequence of agent actions and their final outcome. v1 stores steps as
|
|
6
|
-
* markdown in `content`; `renderTraceContent` is the canonical formatter.
|
|
7
|
-
*/
|
|
1
|
+
/** Trace-layer helpers. A trace is a `MemoryEntry` with `layer === 'trace'`: ordered agent actions and their outcome, stored as markdown in `content`
|
|
2
|
+
* (`renderTraceContent` formats it). */
|
|
8
3
|
import { isJsonString, isJsonObject } from '../util/json.js';
|
|
9
4
|
import { errorMessage } from '../util/log.js';
|
|
10
|
-
/**
|
|
11
|
-
* Render a trace record as agent-readable markdown.
|
|
12
|
-
*
|
|
13
|
-
* Format:
|
|
14
|
-
* Task: <task>
|
|
15
|
-
* Outcome: <outcome>
|
|
16
|
-
* Steps:
|
|
17
|
-
* 1. <action>
|
|
18
|
-
* → <observation> (omitted if observation is empty)
|
|
19
|
-
* 2. ...
|
|
20
|
-
*/
|
|
5
|
+
/** Render a trace record as agent-readable markdown: `Task:`, `Outcome:`, then numbered `Steps:` with each observation on an arrow line (omitted if empty). */
|
|
21
6
|
export function renderTraceContent(rec) {
|
|
22
7
|
const lines = [];
|
|
23
8
|
lines.push(`Task: ${rec.task}`);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { isRecallBoostAblated } from '../core/ablation.js';
|
|
1
|
+
import { isRecallBoostAblated, strengthAblation } from '../core/ablation.js';
|
|
2
2
|
import { Layer, createMemory, markRetrieved } from '../core/memory.js';
|
|
3
3
|
import { findPromotableSessions, traceExistsForSession, listSessionEvents } from '../store/sessions.js';
|
|
4
4
|
import { rejectionDigest } from '../store/rejection.js';
|
|
@@ -6,19 +6,13 @@ import { sampleForReplay } from './replay.js';
|
|
|
6
6
|
import { renderTraceContent } from './trace.js';
|
|
7
7
|
import { resolveTenantId } from '../store/tenant.js';
|
|
8
8
|
import { reportAuditWriteFailure } from '../store/audit.js';
|
|
9
|
-
import { commonDerivationScope } from '../
|
|
9
|
+
import { commonDerivationScope } from '../core/recall-scope.js';
|
|
10
10
|
import { log } from '../util/log.js';
|
|
11
11
|
import { REPLAY_COUNT_DEFAULT } from './run.js';
|
|
12
12
|
import { isJsonString } from '../util/json.js';
|
|
13
13
|
import { DAY_MS } from '../util/time.js';
|
|
14
|
-
//
|
|
15
|
-
//
|
|
16
|
-
// -------------------------------------------------------------------------
|
|
17
|
-
//
|
|
18
|
-
// For each session within the configured window that has a `session_complete`
|
|
19
|
-
// event and no existing trace (idempotency via the source_session_id column),
|
|
20
|
-
// render the action sequence as markdown and persist a Layer.Trace memory.
|
|
21
|
-
// Traces inherit decay, search, replay, and physics from the base MemoryEntry.
|
|
14
|
+
// 1.4. Auto-promote complete sessions to traces: each session in the window with a `session_complete` event and no trace (idempotent via source_session_id)
|
|
15
|
+
// is rendered as markdown and persisted as a Layer.Trace memory, which inherits decay, search, replay and physics.
|
|
22
16
|
export function promoteSessionTraces(run) {
|
|
23
17
|
const { result } = run;
|
|
24
18
|
if (run.dryRun || run.config.autoTraceCapture === false)
|
|
@@ -129,30 +123,20 @@ function traceRejected(run, trace, sessionId) {
|
|
|
129
123
|
}
|
|
130
124
|
return true;
|
|
131
125
|
}
|
|
132
|
-
//
|
|
133
|
-
//
|
|
134
|
-
// -------------------------------------------------------------------------
|
|
135
|
-
//
|
|
136
|
-
// Biologically-inspired counterpart to hippocampal replay during slow-wave
|
|
137
|
-
// sleep: sample N memories weighted by outcome + valence + under-rehearsal
|
|
138
|
-
// + idle time, then apply the same retrieval-strengthening `markRetrieved`
|
|
139
|
-
// applies to real queries. Distinct from decay (removal), physics (motion),
|
|
140
|
-
// and merge (compression) — this is the "rehearse the important stuff so
|
|
141
|
-
// it doesn't fade" pass.
|
|
126
|
+
// 1.5. Replay pass: rehearse high-value survivors by sampling N memories weighted by outcome, valence, under-rehearsal and idle time,
|
|
127
|
+
// then applying the `markRetrieved` strengthening, so important memories don't fade.
|
|
142
128
|
export function replayPass(run) {
|
|
143
129
|
const { survivors, now } = run;
|
|
144
130
|
const replayCount = run.config.replay?.count ?? REPLAY_COUNT_DEFAULT;
|
|
145
|
-
// EVAL-ONLY ablation (see ablation.ts): replay rehearsal
|
|
146
|
-
//
|
|
147
|
-
// silences the whole pass - markRetrieved would return unmutated entries
|
|
148
|
-
// and persisting them anyway would still refresh updated_at / mirrors.
|
|
131
|
+
// EVAL-ONLY ablation (see ablation.ts): replay rehearsal is recall strengthening, so the strengthen-off arm silences the whole pass;
|
|
132
|
+
// persisting unmutated entries anyway would still refresh updated_at and mirrors.
|
|
149
133
|
if (!(replayCount > 0 && survivors.length > 0 && !isRecallBoostAblated()))
|
|
150
134
|
return;
|
|
151
135
|
const seed = Math.floor(now.getTime() / 1000) & 0xffffffff;
|
|
152
136
|
const picked = sampleForReplay(survivors, replayCount, now, seed);
|
|
153
137
|
if (picked.length === 0)
|
|
154
138
|
return;
|
|
155
|
-
const rehearsed = markRetrieved(picked, now);
|
|
139
|
+
const rehearsed = markRetrieved(picked, now, { ablation: strengthAblation() });
|
|
156
140
|
const rehearsedById = new Map(rehearsed.map((e) => [e.id, e]));
|
|
157
141
|
// Update survivors in place so downstream passes see rehearsed state.
|
|
158
142
|
for (let i = 0; i < survivors.length; i++) {
|
package/dist/core/ablation.d.ts
CHANGED
|
@@ -1,89 +1,16 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
*
|
|
15
|
-
* Flags (set to '1' or 'true'):
|
|
16
|
-
* HIPPO_ABLATE_DECAY time-decay term := 1 in calculateStrength.
|
|
17
|
-
* HIPPO_ABLATE_RECALL_BOOST full recall-strengthening ablation:
|
|
18
|
-
* - markRetrieved returns entries UNMUTATED (no
|
|
19
|
-
* clock reset / count / half-life increment);
|
|
20
|
-
* ids stay available so `hippo outcome`
|
|
21
|
-
* attribution keeps working in this arm;
|
|
22
|
-
* - persisting callers (CLI recall, api context,
|
|
23
|
-
* MCP recall/context, consolidation replay)
|
|
24
|
-
* skip their writeEntry loops (identical-row
|
|
25
|
-
* writes still refresh updated_at / mirrors /
|
|
26
|
-
* DAG dirty flags);
|
|
27
|
-
* - the retrieval-count READ boost := 1;
|
|
28
|
-
* - decay anchors at `created` instead of
|
|
29
|
-
* `last_retrieved` (prior-run clock resets
|
|
30
|
-
* cannot leak in);
|
|
31
|
-
* - physics: computeMass ignores the count, and
|
|
32
|
-
* physicsSearch recomputes loaded masses LIVE
|
|
33
|
-
* under ablated strength rules (persisted
|
|
34
|
-
* masses embed recall history in their frozen
|
|
35
|
-
* strength component);
|
|
36
|
-
* - replay rehearsal is silenced entirely (it IS
|
|
37
|
-
* strengthening; use config replay.count=0 to
|
|
38
|
-
* separate replay in unflagged arms).
|
|
39
|
-
* CAVEAT: half_life increments persisted by
|
|
40
|
-
* prior unflagged runs are NOT reconstructed
|
|
41
|
-
* (consolidation legitimately writes half_life
|
|
42
|
-
* too) - ablation arms run on FRESH stores, as
|
|
43
|
-
* the experiment protocol mandates.
|
|
44
|
-
* HIPPO_ABLATE_OUTCOME both outcome channels := neutral
|
|
45
|
-
* (= _SLOW + _FAST together). The slow side also
|
|
46
|
-
* silences replay's outcome reward bias
|
|
47
|
-
* (replayPriority). NOT gated: the opt-in
|
|
48
|
-
* `recall --value-aware` rerank (an explicit CLI
|
|
49
|
-
* flag that also reads outcome counts) - ablated
|
|
50
|
-
* arms must not pass it.
|
|
51
|
-
* HIPPO_ABLATE_OUTCOME_SLOW rewardFactor := 1 (no half-life modulation).
|
|
52
|
-
* HIPPO_ABLATE_OUTCOME_FAST hybridSearch outcomeBoost := 1.
|
|
53
|
-
* HIPPO_ABLATE_RECENCY search recency factor := 1 (the creation-age
|
|
54
|
-
* multiplier 0.8 + 0.2*exp(-age/30d)); decay,
|
|
55
|
-
* strengthening and outcomes stay live.
|
|
56
|
-
* HIPPO_EVAL_RECENCY_DAYS a positive number replaces the 30-day scale of
|
|
57
|
-
* that recency factor (tuning grids only). Unset,
|
|
58
|
-
* zero, negative or junk values keep 30.
|
|
59
|
-
* HIPPO_FAKE_NOW timestamp injected as the default `now` for
|
|
60
|
-
* strength computation and retrieval stamping
|
|
61
|
-
* (simulated-time protocols). MUST be the exact
|
|
62
|
-
* Date.toISOString() form
|
|
63
|
-
* (YYYY-MM-DDTHH:mm:ss.sssZ); validated by
|
|
64
|
-
* round-trip, so junk, locale dates, non-UTC
|
|
65
|
-
* offsets, and rolled-over dates (2026-02-31)
|
|
66
|
-
* all fall back to the real clock.
|
|
67
|
-
*
|
|
68
|
-
* Formula notes (load-bearing for the experiments) - ablating decay has TWO
|
|
69
|
-
* intrinsic co-effects, because the unified formula routes other mechanisms
|
|
70
|
-
* THROUGH the decay term. Both are real properties of the architecture, not
|
|
71
|
-
* implementation accidents; experiment analysis must attribute accordingly
|
|
72
|
-
* (the decay-off arm is "decay + its dependents off", see prereg amendment A1):
|
|
73
|
-
* 1. Read-side strengthening flattens: raw = retrievalBoost * emotionalMult
|
|
74
|
-
* >= 1, and the [0,1] clamp caps it at 1.0 - the recall boost can only
|
|
75
|
-
* offset decay, never exceed baseline. (Write-side still runs.)
|
|
76
|
-
* 2. Outcome-slow goes inert: rewardFactor only acts by scaling the
|
|
77
|
-
* effective half-life INSIDE the decay exponent; with decay := 1 there
|
|
78
|
-
* is no exponent for it to modulate. Outcome-slow is decay-rate
|
|
79
|
-
* modulation BY DESIGN, so "no decay" necessarily means "no slow
|
|
80
|
-
* channel" (the fast channel in hybridSearch is unaffected).
|
|
81
|
-
*
|
|
82
|
-
* Env caching follows the house pattern (see getLossAversionRatio in
|
|
83
|
-
* memory.ts): read once per process, with a test-only reset helper. Tests
|
|
84
|
-
* that mutate these env vars MUST call _resetAblationCacheForTests() in BOTH
|
|
85
|
-
* beforeEach AND afterEach.
|
|
86
|
-
*/
|
|
1
|
+
/** EVAL-ONLY ablation switches (HIPPO_ABLATE_*, HIPPO_EVAL_RECENCY_DAYS, HIPPO_FAKE_NOW): each cuts ONE mechanism (outcome also replayPriority bias).
|
|
2
|
+
* Not a production surface. Env is read once per process; tests that mutate these vars MUST call _resetAblationCacheForTests() in beforeEach AND afterEach. See
|
|
3
|
+
* docs/ARCHITECTURE.md#srccoreablationts. */
|
|
4
|
+
/** The three switches strength scoring honours, resolved by the entry layer and handed to core in DecayOptions. */
|
|
5
|
+
export interface StrengthAblation {
|
|
6
|
+
readonly decay: boolean;
|
|
7
|
+
readonly recallBoost: boolean;
|
|
8
|
+
readonly outcomeSlow: boolean;
|
|
9
|
+
}
|
|
10
|
+
/** Production scoring: nothing ablated. Core falls back to this, so it never reads the environment. */
|
|
11
|
+
export declare const NO_STRENGTH_ABLATION: StrengthAblation;
|
|
12
|
+
/** The frozen strength switches for this process; entry-layer callers pass them as `DecayOptions.ablation`. */
|
|
13
|
+
export declare function strengthAblation(): StrengthAblation;
|
|
87
14
|
export declare function isDecayAblated(): boolean;
|
|
88
15
|
export declare function isRecallBoostAblated(): boolean;
|
|
89
16
|
export declare function isOutcomeSlowAblated(): boolean;
|
|
@@ -91,11 +18,7 @@ export declare function isOutcomeFastAblated(): boolean;
|
|
|
91
18
|
export declare function isRecencyAblated(): boolean;
|
|
92
19
|
/** HIPPO_EVAL_RECENCY_DAYS when it is a positive number, else null (callers keep their default). */
|
|
93
20
|
export declare function evalRecencyScaleDays(): number | null;
|
|
94
|
-
/**
|
|
95
|
-
* The default `now` for lifecycle computations: HIPPO_FAKE_NOW when set and
|
|
96
|
-
* parseable, else the real clock. Callers that already take an explicit `now`
|
|
97
|
-
* parameter are unaffected (explicit always wins).
|
|
98
|
-
*/
|
|
21
|
+
/** The default `now` for lifecycle computations: HIPPO_FAKE_NOW when set and parseable, else the real clock; an explicit `now` parameter always wins. */
|
|
99
22
|
export declare function evalNow(): Date;
|
|
100
23
|
/** Test-only. See module JSDoc: call in BOTH beforeEach AND afterEach. */
|
|
101
24
|
export declare function _resetAblationCacheForTests(): void;
|
package/dist/core/ablation.js
CHANGED
|
@@ -1,91 +1,11 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* These env flags exist for controlled experiments on hippo's memory-lifecycle
|
|
5
|
-
* mechanisms (the "lifecycle, ablated" paper protocol): each switch neutralizes
|
|
6
|
-
* exactly ONE mechanism so its causal contribution can be measured in isolation.
|
|
7
|
-
*
|
|
8
|
-
* They are NOT a production configuration surface:
|
|
9
|
-
* - no config-file equivalents, deliberately (config implies support);
|
|
10
|
-
* - undocumented in user-facing help;
|
|
11
|
-
* - semantics may change with the experiment design.
|
|
12
|
-
* Production behavior with all flags unset is byte-identical to before this
|
|
13
|
-
* module existed.
|
|
14
|
-
*
|
|
15
|
-
* Flags (set to '1' or 'true'):
|
|
16
|
-
* HIPPO_ABLATE_DECAY time-decay term := 1 in calculateStrength.
|
|
17
|
-
* HIPPO_ABLATE_RECALL_BOOST full recall-strengthening ablation:
|
|
18
|
-
* - markRetrieved returns entries UNMUTATED (no
|
|
19
|
-
* clock reset / count / half-life increment);
|
|
20
|
-
* ids stay available so `hippo outcome`
|
|
21
|
-
* attribution keeps working in this arm;
|
|
22
|
-
* - persisting callers (CLI recall, api context,
|
|
23
|
-
* MCP recall/context, consolidation replay)
|
|
24
|
-
* skip their writeEntry loops (identical-row
|
|
25
|
-
* writes still refresh updated_at / mirrors /
|
|
26
|
-
* DAG dirty flags);
|
|
27
|
-
* - the retrieval-count READ boost := 1;
|
|
28
|
-
* - decay anchors at `created` instead of
|
|
29
|
-
* `last_retrieved` (prior-run clock resets
|
|
30
|
-
* cannot leak in);
|
|
31
|
-
* - physics: computeMass ignores the count, and
|
|
32
|
-
* physicsSearch recomputes loaded masses LIVE
|
|
33
|
-
* under ablated strength rules (persisted
|
|
34
|
-
* masses embed recall history in their frozen
|
|
35
|
-
* strength component);
|
|
36
|
-
* - replay rehearsal is silenced entirely (it IS
|
|
37
|
-
* strengthening; use config replay.count=0 to
|
|
38
|
-
* separate replay in unflagged arms).
|
|
39
|
-
* CAVEAT: half_life increments persisted by
|
|
40
|
-
* prior unflagged runs are NOT reconstructed
|
|
41
|
-
* (consolidation legitimately writes half_life
|
|
42
|
-
* too) - ablation arms run on FRESH stores, as
|
|
43
|
-
* the experiment protocol mandates.
|
|
44
|
-
* HIPPO_ABLATE_OUTCOME both outcome channels := neutral
|
|
45
|
-
* (= _SLOW + _FAST together). The slow side also
|
|
46
|
-
* silences replay's outcome reward bias
|
|
47
|
-
* (replayPriority). NOT gated: the opt-in
|
|
48
|
-
* `recall --value-aware` rerank (an explicit CLI
|
|
49
|
-
* flag that also reads outcome counts) - ablated
|
|
50
|
-
* arms must not pass it.
|
|
51
|
-
* HIPPO_ABLATE_OUTCOME_SLOW rewardFactor := 1 (no half-life modulation).
|
|
52
|
-
* HIPPO_ABLATE_OUTCOME_FAST hybridSearch outcomeBoost := 1.
|
|
53
|
-
* HIPPO_ABLATE_RECENCY search recency factor := 1 (the creation-age
|
|
54
|
-
* multiplier 0.8 + 0.2*exp(-age/30d)); decay,
|
|
55
|
-
* strengthening and outcomes stay live.
|
|
56
|
-
* HIPPO_EVAL_RECENCY_DAYS a positive number replaces the 30-day scale of
|
|
57
|
-
* that recency factor (tuning grids only). Unset,
|
|
58
|
-
* zero, negative or junk values keep 30.
|
|
59
|
-
* HIPPO_FAKE_NOW timestamp injected as the default `now` for
|
|
60
|
-
* strength computation and retrieval stamping
|
|
61
|
-
* (simulated-time protocols). MUST be the exact
|
|
62
|
-
* Date.toISOString() form
|
|
63
|
-
* (YYYY-MM-DDTHH:mm:ss.sssZ); validated by
|
|
64
|
-
* round-trip, so junk, locale dates, non-UTC
|
|
65
|
-
* offsets, and rolled-over dates (2026-02-31)
|
|
66
|
-
* all fall back to the real clock.
|
|
67
|
-
*
|
|
68
|
-
* Formula notes (load-bearing for the experiments) - ablating decay has TWO
|
|
69
|
-
* intrinsic co-effects, because the unified formula routes other mechanisms
|
|
70
|
-
* THROUGH the decay term. Both are real properties of the architecture, not
|
|
71
|
-
* implementation accidents; experiment analysis must attribute accordingly
|
|
72
|
-
* (the decay-off arm is "decay + its dependents off", see prereg amendment A1):
|
|
73
|
-
* 1. Read-side strengthening flattens: raw = retrievalBoost * emotionalMult
|
|
74
|
-
* >= 1, and the [0,1] clamp caps it at 1.0 - the recall boost can only
|
|
75
|
-
* offset decay, never exceed baseline. (Write-side still runs.)
|
|
76
|
-
* 2. Outcome-slow goes inert: rewardFactor only acts by scaling the
|
|
77
|
-
* effective half-life INSIDE the decay exponent; with decay := 1 there
|
|
78
|
-
* is no exponent for it to modulate. Outcome-slow is decay-rate
|
|
79
|
-
* modulation BY DESIGN, so "no decay" necessarily means "no slow
|
|
80
|
-
* channel" (the fast channel in hybridSearch is unaffected).
|
|
81
|
-
*
|
|
82
|
-
* Env caching follows the house pattern (see getLossAversionRatio in
|
|
83
|
-
* memory.ts): read once per process, with a test-only reset helper. Tests
|
|
84
|
-
* that mutate these env vars MUST call _resetAblationCacheForTests() in BOTH
|
|
85
|
-
* beforeEach AND afterEach.
|
|
86
|
-
*/
|
|
1
|
+
/** EVAL-ONLY ablation switches (HIPPO_ABLATE_*, HIPPO_EVAL_RECENCY_DAYS, HIPPO_FAKE_NOW): each cuts ONE mechanism (outcome also replayPriority bias).
|
|
2
|
+
* Not a production surface. Env is read once per process; tests that mutate these vars MUST call _resetAblationCacheForTests() in beforeEach AND afterEach. See
|
|
3
|
+
* docs/ARCHITECTURE.md#srccoreablationts. */
|
|
87
4
|
import { envAblateDecay, envAblateOutcome, envAblateOutcomeFast, envAblateOutcomeSlow, envAblateRecallBoost, envAblateRecency, envEvalRecencyDays, envFakeNowMs, } from '../util/env.js';
|
|
5
|
+
/** Production scoring: nothing ablated. Core falls back to this, so it never reads the environment. */
|
|
6
|
+
export const NO_STRENGTH_ABLATION = Object.freeze({ decay: false, recallBoost: false, outcomeSlow: false });
|
|
88
7
|
let _cache;
|
|
8
|
+
let _strengthCache;
|
|
89
9
|
function readFlags() {
|
|
90
10
|
if (_cache !== undefined)
|
|
91
11
|
return _cache;
|
|
@@ -101,6 +21,14 @@ function readFlags() {
|
|
|
101
21
|
};
|
|
102
22
|
return _cache;
|
|
103
23
|
}
|
|
24
|
+
/** The frozen strength switches for this process; entry-layer callers pass them as `DecayOptions.ablation`. */
|
|
25
|
+
export function strengthAblation() {
|
|
26
|
+
if (_strengthCache === undefined) {
|
|
27
|
+
const f = readFlags();
|
|
28
|
+
_strengthCache = Object.freeze({ decay: f.decay, recallBoost: f.recallBoost, outcomeSlow: f.outcomeSlow });
|
|
29
|
+
}
|
|
30
|
+
return _strengthCache;
|
|
31
|
+
}
|
|
104
32
|
export function isDecayAblated() {
|
|
105
33
|
return readFlags().decay;
|
|
106
34
|
}
|
|
@@ -120,11 +48,7 @@ export function isRecencyAblated() {
|
|
|
120
48
|
export function evalRecencyScaleDays() {
|
|
121
49
|
return readFlags().recencyDays;
|
|
122
50
|
}
|
|
123
|
-
/**
|
|
124
|
-
* The default `now` for lifecycle computations: HIPPO_FAKE_NOW when set and
|
|
125
|
-
* parseable, else the real clock. Callers that already take an explicit `now`
|
|
126
|
-
* parameter are unaffected (explicit always wins).
|
|
127
|
-
*/
|
|
51
|
+
/** The default `now` for lifecycle computations: HIPPO_FAKE_NOW when set and parseable, else the real clock; an explicit `now` parameter always wins. */
|
|
128
52
|
export function evalNow() {
|
|
129
53
|
const ms = readFlags().fakeNowMs;
|
|
130
54
|
return ms === null ? new Date() : new Date(ms);
|
|
@@ -132,5 +56,6 @@ export function evalNow() {
|
|
|
132
56
|
/** Test-only. See module JSDoc: call in BOTH beforeEach AND afterEach. */
|
|
133
57
|
export function _resetAblationCacheForTests() {
|
|
134
58
|
_cache = undefined;
|
|
59
|
+
_strengthCache = undefined;
|
|
135
60
|
}
|
|
136
61
|
//# sourceMappingURL=ablation.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** Detect the current operational scope from env (HIPPO_SCOPE > GSTACK_SKILL > OPENCLAW_SKILL); returns the name without prefix, or null.
|
|
2
|
+
* Pure env reads, no I/O, so it is safe on hot paths such as the UserPromptSubmit hook. */
|
|
3
|
+
export declare function detectScope(): string | null;
|
|
4
|
+
/** Compute scope match between a memory's scope tags and the active scope.
|
|
5
|
+
* Returns: 1 if matching scope, -1 if mismatching scope, 0 if neutral (no scope on either side). */
|
|
6
|
+
export declare function scopeMatch(memoryTags: string[], activeScope: string | null): -1 | 0 | 1;
|
|
7
|
+
//# sourceMappingURL=active-scope.d.ts.map
|
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
import { envGstackSkill, envOpenclawSkill, envScope } from '../util/env.js';
|
|
2
|
-
/**
|
|
3
|
-
*
|
|
4
|
-
* Returns a scope name string (no prefix), or null if no scope detected.
|
|
5
|
-
* Priority: HIPPO_SCOPE > GSTACK_SKILL > OPENCLAW_SKILL.
|
|
6
|
-
*
|
|
7
|
-
* Pure env var reads: no I/O, safe to call from hot paths (e.g. UserPromptSubmit hook).
|
|
8
|
-
*/
|
|
2
|
+
/** Detect the current operational scope from env (HIPPO_SCOPE > GSTACK_SKILL > OPENCLAW_SKILL); returns the name without prefix, or null.
|
|
3
|
+
* Pure env reads, no I/O, so it is safe on hot paths such as the UserPromptSubmit hook. */
|
|
9
4
|
export function detectScope() {
|
|
10
5
|
const explicit = envScope();
|
|
11
6
|
if (explicit && explicit.trim())
|
|
@@ -18,10 +13,8 @@ export function detectScope() {
|
|
|
18
13
|
return openclawSkill.trim();
|
|
19
14
|
return null;
|
|
20
15
|
}
|
|
21
|
-
/**
|
|
22
|
-
*
|
|
23
|
-
* Returns: 1 if matching scope, -1 if mismatching scope, 0 if neutral (no scope on either side).
|
|
24
|
-
*/
|
|
16
|
+
/** Compute scope match between a memory's scope tags and the active scope.
|
|
17
|
+
* Returns: 1 if matching scope, -1 if mismatching scope, 0 if neutral (no scope on either side). */
|
|
25
18
|
export function scopeMatch(memoryTags, activeScope) {
|
|
26
19
|
const scopeTags = memoryTags.filter(t => t.startsWith('scope:'));
|
|
27
20
|
if (scopeTags.length === 0)
|
|
@@ -33,4 +26,4 @@ export function scopeMatch(memoryTags, activeScope) {
|
|
|
33
26
|
return 1; // match
|
|
34
27
|
return -1; // mismatch
|
|
35
28
|
}
|
|
36
|
-
//# sourceMappingURL=scope.js.map
|
|
29
|
+
//# sourceMappingURL=active-scope.js.map
|
package/dist/core/ambient.d.ts
CHANGED
|
@@ -1,11 +1,4 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Ambient state vector — a compact representation of the agent's memory
|
|
3
|
-
* landscape, computed in O(N) from the current corpus.
|
|
4
|
-
*
|
|
5
|
-
* Inspired by the biological ambient neural state: a continuous background
|
|
6
|
-
* representation that tells the agent "where it is" in knowledge-space
|
|
7
|
-
* without retrieving specific memories.
|
|
8
|
-
*/
|
|
1
|
+
/** Ambient state vector: a compact O(N) summary of the corpus telling the agent "where it is" in knowledge-space without retrieving specific memories. */
|
|
9
2
|
import type { MemoryEntry } from './memory.js';
|
|
10
3
|
export interface AmbientState {
|
|
11
4
|
tagEntropy: number;
|
|
@@ -20,6 +13,10 @@ export interface AmbientState {
|
|
|
20
13
|
dagDepth: number;
|
|
21
14
|
totalMemories: number;
|
|
22
15
|
}
|
|
16
|
+
/** A memory is fresh when created within this window. */
|
|
17
|
+
export declare const AMBIENT_FRESH_WINDOW_MS: number;
|
|
18
|
+
/** A memory counts as high schema fit strictly above this. */
|
|
19
|
+
export declare const HIGH_SCHEMA_FIT_ABOVE = 0.7;
|
|
23
20
|
/** Row counts and sums an AmbientState is derived from; two stores' tallies add with addAmbientTallies. */
|
|
24
21
|
export interface AmbientTallies {
|
|
25
22
|
total: number;
|