hippo-memory 1.72.0 → 2.1.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 +6 -4
- package/dist/agent-memories/apply.d.ts +7 -5
- package/dist/agent-memories/apply.js +66 -39
- package/dist/agent-memories/claude-code.d.ts +8 -2
- package/dist/agent-memories/claude-code.js +26 -7
- package/dist/agent-memories/copilot.js +2 -1
- package/dist/agent-memories/files.js +2 -1
- package/dist/agent-memories/legacy.d.ts +6 -3
- package/dist/agent-memories/legacy.js +35 -14
- package/dist/agent-memories/markdown.d.ts +3 -1
- package/dist/agent-memories/markdown.js +3 -1
- package/dist/agent-memories/openclaw.js +5 -2
- package/dist/agent-memories/plan.js +11 -1
- package/dist/agent-memories/project-folds.js +2 -1
- package/dist/agent-memories/report.d.ts +4 -1
- package/dist/agent-memories/report.js +43 -9
- package/dist/agent-memories/source.d.ts +8 -2
- package/dist/agent-memories/source.js +11 -3
- package/dist/agent-memories/sync.d.ts +7 -2
- package/dist/agent-memories/sync.js +141 -101
- package/dist/api/assemble.d.ts +6 -4
- package/dist/api/assemble.js +11 -5
- package/dist/api/{audit.d.ts → auth/audit.d.ts} +18 -16
- package/dist/api/auth/audit.js +58 -0
- package/dist/api/{auth.d.ts → auth/auth.d.ts} +19 -16
- package/dist/api/{auth.js → auth/auth.js} +66 -54
- package/dist/api/{quarantine.d.ts → auth/quarantine.d.ts} +8 -7
- package/dist/api/{quarantine.js → auth/quarantine.js} +8 -7
- package/dist/api/auth/session-owners.d.ts +10 -0
- package/dist/api/auth/session-owners.js +35 -0
- package/dist/api/availability.d.ts +3 -1
- package/dist/api/availability.js +3 -1
- package/dist/api/busy.d.ts +2 -0
- package/dist/api/busy.js +2 -0
- package/dist/api/cli-surface.d.ts +6 -0
- package/dist/api/cli-surface.js +6 -0
- package/dist/api/config-of.d.ts +5 -0
- package/dist/api/config-of.js +6 -0
- package/dist/api/context-auto.d.ts +4 -1
- package/dist/api/context-auto.js +14 -4
- package/dist/api/context-render.js +14 -7
- package/dist/api/context-select.d.ts +4 -1
- package/dist/api/context-select.js +31 -34
- package/dist/api/context-types.d.ts +38 -12
- package/dist/api/context.d.ts +8 -5
- package/dist/api/context.js +120 -63
- package/dist/api/continuity.d.ts +24 -21
- package/dist/api/continuity.js +18 -20
- package/dist/api/correction-latency.d.ts +3 -1
- package/dist/api/correction-latency.js +3 -1
- package/dist/api/error-reply.d.ts +4 -1
- package/dist/api/error-reply.js +12 -3
- package/dist/api/index.d.ts +39 -23
- package/dist/api/index.js +21 -23
- package/dist/api/instruction-detect.d.ts +4 -1
- package/dist/api/instruction-detect.js +75 -20
- package/dist/api/ledger-db.d.ts +15 -11
- package/dist/api/ledger-db.js +21 -23
- package/dist/api/memories/conflicts.d.ts +33 -0
- package/dist/api/memories/conflicts.js +67 -0
- package/dist/api/{forget.d.ts → memories/forget.d.ts} +11 -9
- package/dist/api/{forget.js → memories/forget.js} +23 -17
- package/dist/api/memories/memories.d.ts +27 -0
- package/dist/api/memories/memories.js +52 -0
- package/dist/api/memories/outcome.d.ts +22 -0
- package/dist/api/memories/outcome.js +28 -0
- package/dist/api/memories/promote.d.ts +40 -0
- package/dist/api/memories/promote.js +76 -0
- package/dist/api/memories/refine.d.ts +10 -0
- package/dist/api/memories/refine.js +12 -0
- package/dist/api/{remember-local.d.ts → memories/remember-local.d.ts} +17 -9
- package/dist/api/{remember-local.js → memories/remember-local.js} +46 -24
- package/dist/api/{remember.d.ts → memories/remember.d.ts} +22 -13
- package/dist/api/{remember.js → memories/remember.js} +50 -32
- package/dist/api/objects/cards.d.ts +39 -0
- package/dist/api/{cards.js → objects/cards.js} +12 -14
- package/dist/api/{drill-down.d.ts → objects/drill-down.d.ts} +12 -10
- package/dist/api/{drill-down.js → objects/drill-down.js} +7 -7
- package/dist/api/objects/goals.d.ts +18 -0
- package/dist/api/{goals.js → objects/goals.js} +12 -12
- package/dist/api/objects/graph.d.ts +11 -0
- package/dist/api/objects/graph.js +16 -0
- package/dist/api/objects/objects.d.ts +9 -0
- package/dist/api/{objects.js → objects/objects.js} +2 -3
- package/dist/api/objects/predictions.d.ts +11 -0
- package/dist/api/{predictions.js → objects/predictions.js} +7 -5
- package/dist/api/{projects.d.ts → objects/projects.d.ts} +8 -5
- package/dist/api/{projects.js → objects/projects.js} +8 -4
- package/dist/api/pilot-arm.d.ts +8 -4
- package/dist/api/pilot-arm.js +5 -4
- package/dist/api/prompt-hook.d.ts +35 -20
- package/dist/api/prompt-hook.js +66 -44
- package/dist/api/provenance-coverage.d.ts +3 -1
- package/dist/api/provenance-coverage.js +3 -1
- package/dist/api/recall/finish.d.ts +185 -0
- package/dist/api/recall/finish.js +301 -0
- package/dist/api/{recall-pipeline.d.ts → recall/pipeline.d.ts} +12 -8
- package/dist/api/{recall-pipeline.js → recall/pipeline.js} +185 -101
- package/dist/api/recall/recall.d.ts +6 -0
- package/dist/api/{recall.js → recall/recall.js} +116 -72
- package/dist/api/recall/render.d.ts +39 -0
- package/dist/api/recall/render.js +60 -0
- package/dist/api/{recall-request.d.ts → recall/request.d.ts} +7 -5
- package/dist/api/recall/request.js +261 -0
- package/dist/api/{recall-cli.d.ts → recall/rows.d.ts} +18 -12
- package/dist/api/{recall-cli.js → recall/rows.js} +28 -27
- package/dist/api/{recall-types.d.ts → recall/types.d.ts} +95 -68
- package/dist/api/{recall-types.js → recall/types.js} +1 -1
- package/dist/api/session-end.d.ts +36 -8
- package/dist/api/session-end.js +71 -25
- package/dist/api/{auto-sleep.d.ts → sleep/auto-sleep.d.ts} +9 -5
- package/dist/api/{auto-sleep.js → sleep/auto-sleep.js} +7 -12
- package/dist/api/sleep/dormant.d.ts +25 -0
- package/dist/api/sleep/dormant.js +64 -0
- package/dist/api/{learn.d.ts → sleep/learn.d.ts} +5 -4
- package/dist/api/sleep/learn.js +138 -0
- package/dist/api/sleep/sleep-run.d.ts +38 -0
- package/dist/api/{sleep-run.js → sleep/sleep-run.js} +54 -45
- package/dist/api/{sleep.d.ts → sleep/sleep.d.ts} +17 -11
- package/dist/api/sleep/sleep.js +9 -0
- package/dist/api/status.d.ts +3 -1
- package/dist/api/status.js +3 -1
- package/dist/api/store-init.d.ts +4 -1
- package/dist/api/store-init.js +4 -1
- package/dist/api/tokens.d.ts +10 -9
- package/dist/api/tokens.js +9 -10
- package/dist/api/types.d.ts +27 -12
- package/dist/api/types.js +13 -4
- package/dist/capture/caller-session.d.ts +8 -2
- package/dist/capture/caller-session.js +16 -6
- package/dist/capture/capture-error.d.ts +3 -1
- package/dist/capture/capture-error.js +3 -1
- package/dist/capture/codex-patch.js +7 -2
- package/dist/capture/command.d.ts +4 -2
- package/dist/capture/command.js +34 -15
- package/dist/capture/compact-resume-caller.js +15 -8
- package/dist/capture/compact.d.ts +8 -5
- package/dist/capture/compact.js +34 -23
- package/dist/capture/compaction-items-caller.js +9 -3
- package/dist/capture/compaction-record.d.ts +4 -3
- package/dist/capture/compaction-record.js +20 -12
- package/dist/capture/compaction-spool.d.ts +18 -9
- package/dist/capture/compaction-spool.js +105 -63
- package/dist/capture/copilot-transcript.d.ts +11 -3
- package/dist/capture/copilot-transcript.js +16 -6
- package/dist/capture/extract.js +20 -8
- package/dist/capture/failure-caller.js +23 -12
- package/dist/capture/failure-reading.d.ts +10 -3
- package/dist/capture/failure-reading.js +24 -7
- package/dist/capture/pre-compact-caller.js +11 -4
- package/dist/capture/session-digest.d.ts +15 -4
- package/dist/capture/session-digest.js +39 -13
- package/dist/capture/session-end-caller.d.ts +4 -1
- package/dist/capture/session-end-caller.js +20 -8
- package/dist/capture/session-texts.d.ts +6 -2
- package/dist/capture/session-texts.js +22 -7
- package/dist/capture/session-worker.d.ts +4 -2
- package/dist/capture/session-worker.js +58 -17
- package/dist/capture/transcript.d.ts +13 -4
- package/dist/capture/transcript.js +32 -10
- package/dist/capture/working-state.d.ts +13 -4
- package/dist/capture/working-state.js +50 -56
- package/dist/cli/api-context.d.ts +14 -2
- package/dist/cli/api-context.js +45 -2
- package/dist/cli/audit.js +33 -33
- package/dist/cli/auth.js +23 -31
- package/dist/cli/briefs.d.ts +1 -1
- package/dist/cli/briefs.js +20 -15
- package/dist/cli/card.d.ts +1 -1
- package/dist/cli/card.js +56 -73
- package/dist/cli/client.d.ts +12 -5
- package/dist/cli/client.js +53 -23
- package/dist/cli/compact-resume-payload.d.ts +4 -1
- package/dist/cli/compact-resume-payload.js +12 -5
- package/dist/cli/context.js +43 -18
- package/dist/cli/continuity.d.ts +5 -5
- package/dist/cli/continuity.js +90 -107
- package/dist/cli/curate.d.ts +5 -4
- package/dist/cli/curate.js +55 -77
- package/dist/cli/dag.d.ts +1 -1
- package/dist/cli/dag.js +14 -17
- package/dist/cli/decisions.js +30 -30
- package/dist/cli/eval.js +16 -21
- package/dist/cli/exit.d.ts +4 -1
- package/dist/cli/exit.js +10 -2
- package/dist/cli/explain.js +12 -11
- package/dist/cli/flag-values.d.ts +1 -1
- package/dist/cli/flag-values.js +9 -18
- package/dist/cli/github.d.ts +6 -0
- package/dist/cli/github.js +25 -13
- package/dist/cli/goals.d.ts +1 -1
- package/dist/cli/goals.js +39 -56
- package/dist/cli/graph.d.ts +1 -1
- package/dist/cli/graph.js +15 -11
- package/dist/cli/hook-runtime.d.ts +34 -10
- package/dist/cli/hook-runtime.js +41 -16
- package/dist/cli/incidents.d.ts +1 -1
- package/dist/cli/incidents.js +25 -25
- package/dist/cli/init.d.ts +1 -1
- package/dist/cli/init.js +35 -20
- package/dist/cli/install-steps.d.ts +12 -3
- package/dist/cli/install-steps.js +42 -18
- package/dist/cli/last-sleep.d.ts +4 -1
- package/dist/cli/last-sleep.js +9 -4
- package/dist/cli/maintenance.d.ts +1 -1
- package/dist/cli/maintenance.js +11 -12
- package/dist/cli/notes.d.ts +1 -1
- package/dist/cli/notes.js +8 -5
- package/dist/cli/object-verbs.d.ts +5 -5
- package/dist/cli/object-verbs.js +13 -16
- package/dist/cli/open-browser.js +11 -2
- package/dist/cli/playbooks.d.ts +3 -3
- package/dist/cli/playbooks.js +40 -32
- package/dist/cli/predictions.js +17 -22
- package/dist/cli/print.js +4 -2
- package/dist/cli/projects.js +21 -11
- package/dist/cli/quality-repair-once.d.ts +1 -1
- package/dist/cli/quality-repair-once.js +7 -6
- package/dist/cli/recall.js +129 -93
- package/dist/cli/refine-llm.d.ts +15 -4
- package/dist/cli/refine-llm.js +17 -7
- package/dist/cli/remember.js +51 -55
- package/dist/cli/scheduler.d.ts +4 -1
- package/dist/cli/scheduler.js +9 -5
- package/dist/cli/serve.js +28 -18
- package/dist/cli/session-hooks.d.ts +2 -6
- package/dist/cli/session-hooks.js +140 -112
- package/dist/cli/setup.d.ts +1 -1
- package/dist/cli/setup.js +56 -34
- package/dist/cli/shared.d.ts +4 -2
- package/dist/cli/shared.js +26 -11
- package/dist/cli/slack.js +15 -24
- package/dist/cli/sleep-render.d.ts +3 -1
- package/dist/cli/sleep-render.js +8 -5
- package/dist/cli/sleep.js +16 -8
- package/dist/cli/status.d.ts +4 -4
- package/dist/cli/status.js +32 -27
- package/dist/cli/stdin.d.ts +10 -3
- package/dist/cli/stdin.js +10 -3
- package/dist/cli/transfer.d.ts +4 -4
- package/dist/cli/transfer.js +97 -82
- package/dist/cli/usage.d.ts +1 -1
- package/dist/cli/usage.js +1 -1
- package/dist/cli/verb-row.d.ts +2 -0
- package/dist/cli/verbs/health.js +2 -0
- package/dist/cli/verbs/memory.js +47 -53
- package/dist/cli/verbs/objects.js +16 -7
- package/dist/cli/verbs/sessions.js +4 -2
- package/dist/cli/versioned-verbs.d.ts +8 -7
- package/dist/cli/versioned-verbs.js +31 -21
- package/dist/cli.js +14 -18
- package/dist/connectors/dlq.d.ts +6 -6
- package/dist/connectors/dlq.js +12 -7
- package/dist/connectors/github/backfill.d.ts +4 -4
- package/dist/connectors/github/backfill.js +6 -4
- package/dist/connectors/github/deletion.d.ts +6 -4
- package/dist/connectors/github/deletion.js +5 -4
- package/dist/connectors/github/dlq.d.ts +8 -6
- package/dist/connectors/github/dlq.js +11 -5
- package/dist/connectors/github/ingest.d.ts +2 -2
- package/dist/connectors/github/ingest.js +9 -5
- package/dist/connectors/github/octokit-client.d.ts +3 -1
- package/dist/connectors/github/octokit-client.js +7 -2
- package/dist/connectors/github/ratelimit.d.ts +6 -2
- package/dist/connectors/github/ratelimit.js +6 -2
- package/dist/connectors/github/signature.d.ts +14 -3
- package/dist/connectors/github/signature.js +17 -3
- package/dist/connectors/github/tenant-routing.d.ts +6 -4
- package/dist/connectors/github/tenant-routing.js +6 -5
- package/dist/connectors/github/transform.js +50 -67
- package/dist/connectors/github/types.d.ts +10 -3
- package/dist/connectors/github/types.js +6 -2
- package/dist/connectors/github/webhook.d.ts +5 -5
- package/dist/connectors/github/webhook.js +36 -23
- package/dist/connectors/ingest.d.ts +5 -3
- package/dist/connectors/ingest.js +3 -3
- package/dist/connectors/slack/backfill.d.ts +5 -5
- package/dist/connectors/slack/backfill.js +3 -3
- package/dist/connectors/slack/deletion.d.ts +4 -4
- package/dist/connectors/slack/deletion.js +6 -5
- package/dist/connectors/slack/dlq.d.ts +4 -4
- package/dist/connectors/slack/dlq.js +6 -6
- package/dist/connectors/slack/ingest.d.ts +6 -4
- package/dist/connectors/slack/ingest.js +5 -4
- package/dist/connectors/slack/signature.d.ts +4 -1
- package/dist/connectors/slack/tenant-routing.d.ts +6 -4
- package/dist/connectors/slack/tenant-routing.js +6 -5
- package/dist/connectors/slack/transform.d.ts +6 -2
- package/dist/connectors/slack/transform.js +6 -2
- package/dist/connectors/slack/types.d.ts +3 -1
- package/dist/connectors/slack/web-client.js +8 -3
- package/dist/connectors/slack/webhook.d.ts +5 -5
- package/dist/connectors/slack/webhook.js +19 -11
- package/dist/connectors/slack/workspaces.d.ts +7 -3
- package/dist/connectors/slack/workspaces.js +7 -3
- package/dist/connectors/store.d.ts +8 -0
- package/dist/connectors/store.js +2 -0
- package/dist/consolidate/conflicts.js +24 -10
- package/dist/consolidate/dag-summary.js +2 -1
- package/dist/consolidate/dag.d.ts +10 -5
- package/dist/consolidate/dag.js +45 -39
- package/dist/consolidate/decay.js +19 -6
- package/dist/consolidate/dedupe.d.ts +14 -5
- package/dist/consolidate/dedupe.js +28 -17
- package/dist/consolidate/flush-units.d.ts +4 -1
- package/dist/consolidate/flush-units.js +4 -1
- package/dist/consolidate/half-life-migration.d.ts +18 -8
- package/dist/consolidate/half-life-migration.js +48 -18
- package/dist/consolidate/llm-passes.js +27 -11
- package/dist/consolidate/memory-value-weights.d.ts +6 -2
- package/dist/consolidate/memory-value-weights.js +6 -2
- package/dist/consolidate/memory-value.d.ts +30 -10
- package/dist/consolidate/memory-value.js +37 -14
- package/dist/consolidate/merge.d.ts +4 -1
- package/dist/consolidate/merge.js +47 -37
- package/dist/consolidate/overlap-index.d.ts +8 -2
- package/dist/consolidate/overlap-index.js +11 -4
- package/dist/consolidate/physics-pass.d.ts +3 -1
- package/dist/consolidate/physics-pass.js +10 -7
- package/dist/consolidate/replay.d.ts +11 -4
- package/dist/consolidate/replay.js +19 -7
- package/dist/consolidate/run.d.ts +13 -5
- package/dist/consolidate/run.js +4 -4
- package/dist/consolidate/sleep.d.ts +14 -6
- package/dist/consolidate/sleep.js +42 -39
- package/dist/consolidate/trace.d.ts +7 -2
- package/dist/consolidate/trace.js +7 -2
- package/dist/consolidate/traces.js +27 -30
- package/dist/core/ablation.d.ts +9 -3
- package/dist/core/ablation.js +14 -4
- package/dist/core/active-scope.d.ts +3 -1
- package/dist/core/active-scope.js +3 -1
- package/dist/core/agent-memory-tools.d.ts +2 -0
- package/dist/core/agent-memory-tools.js +2 -0
- package/dist/core/ambient.d.ts +4 -3
- package/dist/core/ambient.js +8 -6
- package/dist/core/api-errors.d.ts +9 -3
- package/dist/core/api-errors.js +9 -3
- package/dist/core/capture-contract.d.ts +4 -1
- package/dist/core/capture-contract.js +27 -8
- package/dist/core/compare.d.ts +24 -8
- package/dist/core/compare.js +24 -8
- package/dist/core/config.d.ts +18 -9
- package/dist/core/config.js +38 -29
- package/dist/core/cosine.d.ts +4 -1
- package/dist/core/cosine.js +4 -1
- package/dist/core/handoff.d.ts +7 -2
- package/dist/core/handoff.js +4 -1
- package/dist/core/markdown.js +22 -17
- package/dist/core/memory-audit.js +14 -3
- package/dist/core/memory-quality.d.ts +12 -3
- package/dist/core/memory-quality.js +57 -21
- package/dist/core/memory.d.ts +87 -30
- package/dist/core/memory.js +82 -33
- package/dist/core/merged-row.d.ts +8 -2
- package/dist/core/merged-row.js +10 -3
- package/dist/core/package-root.d.ts +3 -1
- package/dist/core/package-root.js +3 -1
- package/dist/core/particle-refresh.d.ts +8 -0
- package/dist/core/particle-refresh.js +22 -0
- package/dist/core/physics-config.d.ts +4 -1
- package/dist/core/physics-config.js +6 -2
- package/dist/core/physics.d.ts +39 -11
- package/dist/core/physics.js +71 -21
- package/dist/core/project-identity.d.ts +34 -17
- package/dist/core/project-identity.js +35 -18
- package/dist/core/project-remote.d.ts +8 -4
- package/dist/core/project-remote.js +31 -14
- package/dist/core/recall-scope.d.ts +33 -11
- package/dist/core/recall-scope.js +42 -15
- package/dist/core/rejection-digest.d.ts +7 -0
- package/dist/core/rejection-digest.js +13 -0
- package/dist/core/salience.d.ts +3 -1
- package/dist/core/salience.js +10 -4
- package/dist/core/search-types.d.ts +15 -2
- package/dist/core/search-types.js +11 -0
- package/dist/dashboard/dashboard-actions.d.ts +2 -2
- package/dist/dashboard/dashboard-actions.js +18 -7
- package/dist/dashboard/dashboard-queries.js +2 -7
- package/dist/dashboard/dashboard-snapshot.d.ts +2 -2
- package/dist/dashboard/dashboard-snapshot.js +5 -7
- package/dist/dashboard/dashboard.js +22 -8
- package/dist/db/backup.js +2 -2
- package/dist/db/busy.d.ts +10 -3
- package/dist/db/busy.js +27 -5
- package/dist/db/connect.d.ts +10 -2
- package/dist/db/connect.js +8 -2
- package/dist/db/continuity.d.ts +1 -1
- package/dist/db/continuity.js +27 -11
- package/dist/db/meta.d.ts +4 -1
- package/dist/db/meta.js +4 -1
- package/dist/db/migrate.d.ts +10 -5
- package/dist/db/migrate.js +40 -20
- 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 -1
- package/dist/db/migrations/v11.js +1 -0
- package/dist/db/migrations/v12.js +2 -1
- package/dist/db/migrations/v14.js +2 -0
- package/dist/db/migrations/v15.js +4 -2
- package/dist/db/migrations/v16.js +6 -3
- package/dist/db/migrations/v17.js +2 -1
- package/dist/db/migrations/v19.js +4 -2
- package/dist/db/migrations/v20.js +2 -1
- package/dist/db/migrations/v22.js +12 -6
- package/dist/db/migrations/v23.js +6 -3
- package/dist/db/migrations/v24.js +6 -3
- package/dist/db/migrations/v25.js +4 -2
- package/dist/db/migrations/v26.js +4 -2
- package/dist/db/migrations/v27.js +6 -3
- package/dist/db/migrations/v28.js +4 -2
- package/dist/db/migrations/v29.js +4 -2
- package/dist/db/migrations/v30.js +6 -3
- package/dist/db/migrations/v31.js +4 -2
- package/dist/db/migrations/v32.js +6 -3
- package/dist/db/migrations/v33.js +4 -2
- package/dist/db/migrations/v34.js +2 -1
- package/dist/db/migrations/v35.js +2 -1
- package/dist/db/migrations/v36.js +2 -1
- package/dist/db/migrations/v37.js +10 -5
- package/dist/db/migrations/v38.js +10 -5
- package/dist/db/migrations/v39.js +14 -6
- package/dist/db/migrations/v40.js +4 -2
- package/dist/db/migrations/v41.js +4 -2
- package/dist/db/migrations/v42.js +2 -1
- package/dist/db/migrations/v44.js +4 -2
- package/dist/db/migrations/v45.js +4 -2
- package/dist/db/migrations/v49.js +2 -1
- package/dist/db/migrations/v50.js +4 -2
- package/dist/db/migrations/v51.js +4 -2
- package/dist/db/migrations/v52.js +2 -1
- package/dist/db/migrations/v53.js +8 -4
- package/dist/db/migrations/v54.js +2 -1
- package/dist/db/migrations/v55.js +4 -2
- package/dist/db/migrations/v56.d.ts +3 -0
- package/dist/db/migrations/v56.js +28 -0
- package/dist/db/open.d.ts +24 -12
- package/dist/db/open.js +25 -13
- package/dist/db/physics-state.d.ts +8 -8
- package/dist/db/physics-state.js +17 -50
- package/dist/db/raw-archive-mirror-cleanup.d.ts +4 -2
- package/dist/db/raw-archive-mirror-cleanup.js +6 -4
- package/dist/db/request-stores.d.ts +20 -5
- package/dist/db/request-stores.js +15 -5
- package/dist/db/tables.d.ts +2 -1
- package/dist/db/tables.js +12 -4
- package/dist/db/vector-store.d.ts +13 -4
- package/dist/db/vector-store.js +35 -14
- package/dist/db/wal-checkpointer.d.ts +2 -1
- package/dist/db/wal-checkpointer.js +19 -7
- package/dist/doctor.d.ts +7 -1
- package/dist/doctor.js +128 -46
- package/dist/embeddings/local.d.ts +8 -4
- package/dist/embeddings/local.js +11 -7
- package/dist/embeddings/provider.d.ts +19 -10
- package/dist/embeddings/provider.js +32 -27
- package/dist/embeddings/transformers.d.ts +16 -4
- package/dist/embeddings/transformers.js +32 -15
- package/dist/entry/json-hooks.d.ts +1 -1
- package/dist/entry/json-hooks.js +1 -1
- package/dist/entry/project-identity.js +2 -1
- package/dist/entry/session-text.d.ts +1 -1
- package/dist/entry/session-text.js +1 -1
- package/dist/entry/sqlite-handles.d.ts +10 -0
- package/dist/entry/sqlite-handles.js +9 -0
- package/dist/entry/store-kit.d.ts +50 -0
- package/dist/entry/store-kit.js +27 -0
- package/dist/entry/testing.d.ts +6 -0
- package/dist/entry/testing.js +7 -0
- package/dist/eval/eval-stats.d.ts +27 -8
- package/dist/eval/eval-stats.js +17 -5
- package/dist/eval/eval-suite.d.ts +3 -1
- package/dist/eval/eval-suite.js +409 -187
- package/dist/eval/eval.d.ts +8 -2
- package/dist/eval/eval.js +8 -2
- package/dist/eval/judgment.js +17 -7
- package/dist/graph/delta.d.ts +9 -42
- package/dist/graph/delta.js +17 -11
- package/dist/graph/extract.d.ts +10 -7
- package/dist/graph/extract.js +57 -25
- package/dist/graph/recall.d.ts +12 -4
- package/dist/graph/recall.js +30 -13
- package/dist/graph/stream.d.ts +18 -6
- package/dist/graph/stream.js +32 -10
- package/dist/graph/view.d.ts +19 -6
- package/dist/graph/view.js +42 -17
- package/dist/hooks/codex-session.js +2 -2
- package/dist/hooks/codex-wrapper.d.ts +3 -1
- package/dist/hooks/codex-wrapper.js +9 -4
- package/dist/hooks/copilot.d.ts +19 -5
- package/dist/hooks/copilot.js +54 -15
- package/dist/hooks/hook-blocks.d.ts +4 -1
- package/dist/hooks/hook-blocks.js +8 -3
- package/dist/hooks/json-hooks.d.ts +9 -5
- package/dist/hooks/json-hooks.js +72 -33
- package/dist/hooks/opencode.js +15 -5
- package/dist/hooks/shared.d.ts +27 -8
- package/dist/hooks/shared.js +57 -16
- package/dist/importers/core.d.ts +12 -4
- package/dist/importers/core.js +11 -10
- package/dist/importers/markdown-parse.d.ts +15 -5
- package/dist/importers/markdown-parse.js +16 -7
- package/dist/importers/markdown.js +6 -9
- package/dist/importers/sources.js +10 -23
- package/dist/importers/vault.d.ts +3 -3
- package/dist/importers/vault.js +61 -45
- package/dist/index.d.ts +33 -7
- package/dist/index.js +26 -8
- package/dist/learn/autolearn.d.ts +21 -6
- package/dist/learn/autolearn.js +57 -26
- package/dist/learn/churn-git.d.ts +4 -1
- package/dist/learn/churn-git.js +29 -5
- package/dist/learn/extract.d.ts +4 -1
- package/dist/learn/extract.js +17 -10
- package/dist/learn/forward-claim-detector.d.ts +17 -5
- package/dist/learn/forward-claim-detector.js +34 -15
- package/dist/learn/invalidation.d.ts +12 -6
- package/dist/learn/invalidation.js +62 -28
- package/dist/learn/roots.d.ts +3 -0
- package/dist/learn/roots.js +5 -0
- package/dist/mcp/admin-tools.d.ts +5 -5
- package/dist/mcp/admin-tools.js +28 -23
- package/dist/mcp/format.d.ts +1 -1
- package/dist/mcp/format.js +4 -2
- package/dist/mcp/framing.d.ts +3 -1
- package/dist/mcp/framing.js +20 -8
- package/dist/mcp/memory-tools.d.ts +3 -3
- package/dist/mcp/memory-tools.js +21 -20
- package/dist/mcp/protocol.d.ts +32 -16
- package/dist/mcp/protocol.js +12 -9
- package/dist/mcp/recall-tools.d.ts +3 -3
- package/dist/mcp/recall-tools.js +62 -74
- package/dist/mcp/request.d.ts +7 -5
- package/dist/mcp/request.js +61 -77
- package/dist/mcp/server.d.ts +3 -1
- package/dist/mcp/server.js +8 -3
- package/dist/mcp/session-state.d.ts +1 -1
- package/dist/mcp/session-state.js +4 -3
- package/dist/mcp/shared-gate.d.ts +3 -2
- package/dist/mcp/shared-gate.js +3 -2
- package/dist/mcp/stdio.d.ts +6 -3
- package/dist/mcp/stdio.js +59 -23
- package/dist/mcp/tool-args.d.ts +4 -1
- package/dist/mcp/tool-args.js +8 -3
- package/dist/mcp/tools.js +76 -32
- package/dist/objects/customer-notes.d.ts +12 -10
- package/dist/objects/customer-notes.js +21 -15
- package/dist/objects/decisions.d.ts +18 -10
- package/dist/objects/decisions.js +23 -17
- package/dist/objects/descriptor.js +2 -1
- package/dist/objects/fields.d.ts +4 -1
- package/dist/objects/fields.js +6 -2
- package/dist/objects/incidents.d.ts +14 -16
- package/dist/objects/incidents.js +29 -30
- package/dist/objects/lifecycle.d.ts +0 -4
- package/dist/objects/lifecycle.js +21 -24
- package/dist/objects/policies.d.ts +12 -16
- package/dist/objects/policies.js +17 -21
- package/dist/objects/processes.d.ts +16 -10
- package/dist/objects/processes.js +20 -15
- package/dist/objects/project-briefs.d.ts +13 -14
- package/dist/objects/project-briefs.js +33 -39
- package/dist/objects/skills.d.ts +10 -12
- package/dist/objects/skills.js +17 -22
- package/dist/postinstall.js +15 -7
- package/dist/predictions/planning-fallacy.d.ts +19 -6
- package/dist/predictions/planning-fallacy.js +4 -2
- package/dist/rerankers/clef.d.ts +8 -2
- package/dist/rerankers/clef.js +14 -9
- package/dist/rerankers/cross-encoder.d.ts +2 -1
- package/dist/rerankers/cross-encoder.js +19 -9
- package/dist/rerankers/index.js +2 -1
- package/dist/rerankers/jev.js +2 -1
- package/dist/rerankers/llm.d.ts +6 -2
- package/dist/rerankers/llm.js +8 -3
- package/dist/rerankers/remote.d.ts +3 -1
- package/dist/rerankers/remote.js +5 -2
- package/dist/rerankers/types.d.ts +6 -2
- package/dist/search/bm25-search.d.ts +3 -1
- package/dist/search/bm25-search.js +15 -2
- package/dist/search/boosts.js +4 -3
- package/dist/search/embed-memories.d.ts +12 -4
- package/dist/search/embed-memories.js +96 -58
- package/dist/search/engine.d.ts +11 -0
- package/dist/search/engine.js +14 -0
- package/dist/search/goal-boost.d.ts +10 -3
- package/dist/search/goal-boost.js +13 -6
- package/dist/search/hybrid-score.d.ts +4 -1
- package/dist/search/hybrid-score.js +4 -1
- package/dist/search/hybrid.d.ts +23 -8
- package/dist/search/hybrid.js +12 -7
- package/dist/search/multihop.js +14 -13
- package/dist/search/path-context.d.ts +10 -3
- package/dist/search/path-context.js +10 -3
- package/dist/search/physics-search.d.ts +9 -4
- package/dist/search/physics-search.js +38 -14
- package/dist/search/rerank.d.ts +2 -1
- package/dist/search/rerank.js +2 -1
- package/dist/search/rrf.d.ts +14 -5
- package/dist/search/rrf.js +11 -4
- package/dist/search/vector.d.ts +8 -2
- package/dist/search/vector.js +14 -8
- package/dist/server/auth.d.ts +19 -15
- package/dist/server/auth.js +68 -38
- package/dist/server/boot.d.ts +4 -1
- package/dist/server/boot.js +115 -67
- package/dist/server/client-ip.d.ts +17 -5
- package/dist/server/client-ip.js +56 -21
- package/dist/server/cursor.d.ts +10 -3
- package/dist/server/cursor.js +10 -3
- package/dist/server/deadline.d.ts +5 -2
- package/dist/server/deadline.js +10 -3
- package/dist/server/key-check-bounds.js +12 -4
- package/dist/server/lifecycle.d.ts +4 -1
- package/dist/server/lifecycle.js +10 -4
- package/dist/server/mcp-http.d.ts +2 -1
- package/dist/server/mcp-http.js +37 -22
- package/dist/server/rate-limit.d.ts +17 -5
- package/dist/server/rate-limit.js +55 -26
- package/dist/server/ready.js +7 -4
- package/dist/server/request.d.ts +15 -4
- package/dist/server/request.js +42 -15
- package/dist/server/route-checks.d.ts +4 -1
- package/dist/server/route-checks.js +8 -3
- package/dist/server/route-table.d.ts +8 -6
- package/dist/server/route-table.js +550 -97
- package/dist/server/routes/admin.d.ts +7 -7
- package/dist/server/routes/admin.js +36 -15
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +5 -4
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +12 -6
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +10 -4
- package/dist/server/routes/memories.d.ts +8 -8
- package/dist/server/routes/memories.js +12 -17
- package/dist/server/routes/object-routes.d.ts +8 -5
- package/dist/server/routes/object-routes.js +4 -2
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +11 -4
- package/dist/server/routes/predictions.d.ts +5 -5
- package/dist/server/routes/predictions.js +9 -4
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +15 -6
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +3 -2
- package/dist/server/routes/recall.d.ts +3 -3
- package/dist/server/routes/recall.js +21 -10
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +12 -4
- package/dist/server/server-detect.d.ts +24 -8
- package/dist/server/server-detect.js +57 -22
- package/dist/server/sleep-child.js +16 -10
- package/dist/server/sleep-offload.d.ts +8 -5
- package/dist/server/sleep-offload.js +40 -18
- package/dist/server/tls.d.ts +10 -2
- package/dist/server/tls.js +25 -5
- package/dist/server/types.d.ts +41 -24
- package/dist/server/validation.d.ts +4 -1
- package/dist/server/validation.js +22 -9
- package/dist/server.d.ts +17 -49
- package/dist/server.js +33 -40
- package/dist/sharing/global-store.d.ts +6 -12
- package/dist/sharing/global-store.js +8 -48
- package/dist/sharing/global-sync.d.ts +3 -1
- package/dist/sharing/global-sync.js +17 -7
- package/dist/sharing/project-merge.d.ts +25 -7
- package/dist/sharing/project-merge.js +49 -17
- package/dist/sharing/search-both.d.ts +8 -4
- package/dist/sharing/search-both.js +28 -14
- package/dist/sharing/share.d.ts +8 -4
- package/dist/sharing/share.js +40 -18
- package/dist/store/ambient.js +10 -5
- package/dist/store/audit-event.d.ts +2 -2
- package/dist/store/audit-event.js +8 -3
- package/dist/store/audit.d.ts +6 -3
- package/dist/store/audit.js +16 -6
- package/dist/store/auth.d.ts +4 -2
- package/dist/store/auth.js +63 -20
- package/dist/store/busy.d.ts +9 -0
- package/dist/store/busy.js +16 -0
- package/dist/store/candidates.d.ts +12 -5
- package/dist/store/candidates.js +90 -41
- package/dist/store/capture-write.d.ts +2 -1
- package/dist/store/capture-write.js +2 -1
- package/dist/store/card-detail.d.ts +4 -4
- package/dist/store/card-detail.js +15 -8
- package/dist/store/cards.d.ts +24 -10
- package/dist/store/cards.js +97 -63
- package/dist/store/compaction-caller.d.ts +2 -1
- package/dist/store/compaction-caller.js +2 -1
- package/dist/store/compactions-record.d.ts +14 -8
- package/dist/store/compactions-record.js +101 -37
- package/dist/store/compactions.js +35 -15
- package/dist/store/conflicts.d.ts +16 -5
- package/dist/store/conflicts.js +104 -48
- package/dist/store/connectors/dlq.d.ts +17 -5
- package/dist/store/connectors/dlq.js +58 -6
- package/dist/store/connectors/event-log.d.ts +122 -0
- package/dist/store/connectors/event-log.js +25 -0
- package/dist/store/connectors/github.d.ts +6 -3
- package/dist/store/connectors/github.js +30 -48
- package/dist/store/connectors/slack.d.ts +2 -1
- package/dist/store/connectors/slack.js +31 -47
- package/dist/store/dashboard-reads.d.ts +7 -3
- package/dist/store/dashboard-reads.js +32 -10
- package/dist/store/delete-and-batch.d.ts +17 -11
- package/dist/store/delete-and-batch.js +70 -28
- package/dist/store/delivery-recorder.d.ts +10 -7
- package/dist/store/delivery-recorder.js +70 -37
- package/dist/store/descendant-page.d.ts +2 -1
- package/dist/store/descendant-page.js +26 -10
- package/dist/store/diagnostics.d.ts +2 -1
- package/dist/store/diagnostics.js +2 -1
- package/dist/store/doctor-reads.d.ts +2 -1
- package/dist/store/doctor-reads.js +13 -5
- package/dist/store/dormant.d.ts +19 -11
- package/dist/store/dormant.js +45 -19
- package/dist/store/embeddings/index.d.ts +13 -9
- package/dist/store/embeddings/index.js +19 -12
- package/dist/store/entry-reads.d.ts +72 -21
- package/dist/store/entry-reads.js +215 -69
- package/dist/store/entry-row.d.ts +10 -6
- package/dist/store/entry-row.js +26 -14
- package/dist/store/entry-writes.d.ts +28 -13
- package/dist/store/entry-writes.js +61 -22
- package/dist/store/failure-log-at.js +1 -1
- package/dist/store/failure-log.d.ts +4 -2
- package/dist/store/failure-log.js +13 -6
- package/dist/store/gated-write.d.ts +3 -3
- package/dist/store/gated-write.js +3 -3
- package/dist/store/goals.d.ts +5 -4
- package/dist/store/goals.js +11 -12
- package/dist/store/graph-apply.d.ts +21 -0
- package/dist/{graph/write.js → store/graph-apply.js} +31 -11
- package/dist/store/graph-queue.d.ts +9 -6
- package/dist/store/graph-queue.js +15 -10
- package/dist/store/graph-reads.d.ts +16 -11
- package/dist/store/graph-reads.js +29 -19
- package/dist/store/graph-rows.d.ts +41 -3
- package/dist/store/graph-rows.js +10 -7
- package/dist/store/graph-view-rows.js +15 -7
- package/dist/store/graph-writes.d.ts +16 -10
- package/dist/store/graph-writes.js +59 -36
- package/dist/store/half-life.js +2 -2
- package/dist/store/handoffs.d.ts +13 -7
- package/dist/store/handoffs.js +44 -22
- package/dist/store/index-and-stats.d.ts +2 -2
- package/dist/store/index-and-stats.js +6 -5
- package/dist/store/index.d.ts +4 -2
- package/dist/store/index.js +2 -1
- package/dist/store/key-audit.d.ts +2 -1
- package/dist/store/key-audit.js +2 -1
- package/dist/store/key-writes.d.ts +2 -1
- package/dist/store/key-writes.js +9 -2
- package/dist/store/ledger-turn.d.ts +4 -1
- package/dist/store/ledger-turn.js +7 -2
- package/dist/store/mirrors.d.ts +11 -4
- package/dist/store/mirrors.js +96 -19
- package/dist/store/narrow.d.ts +6 -0
- package/dist/store/narrow.js +11 -0
- package/dist/store/open.d.ts +6 -3
- package/dist/store/open.js +20 -10
- package/dist/store/pilot-arm.d.ts +2 -1
- package/dist/store/pilot-arm.js +18 -6
- package/dist/store/planning-fallacy-evidence.d.ts +2 -2
- package/dist/store/planning-fallacy-evidence.js +8 -5
- package/dist/store/port/agent-import.d.ts +62 -0
- package/dist/store/port/agent-import.js +2 -0
- package/dist/store/port/consolidation.d.ts +129 -0
- package/dist/store/port/consolidation.js +2 -0
- package/dist/store/port/learning.d.ts +19 -0
- package/dist/store/port/learning.js +2 -0
- package/dist/store/port/local-files.d.ts +18 -0
- package/dist/store/port/local-files.js +2 -0
- package/dist/store/port/promotion.d.ts +20 -0
- package/dist/store/port/promotion.js +3 -0
- package/dist/store/port-groups.d.ts +160 -0
- package/dist/store/port-groups.js +2 -0
- package/dist/store/port.d.ts +261 -219
- package/dist/store/port.js +3 -9
- package/dist/store/predictions.d.ts +14 -10
- package/dist/store/predictions.js +37 -17
- package/dist/store/project-tags.d.ts +4 -1
- package/dist/store/project-tags.js +16 -5
- package/dist/store/quality-repair.d.ts +8 -4
- package/dist/store/quality-repair.js +53 -20
- package/dist/store/quarantine.d.ts +1 -0
- package/dist/store/quarantine.js +23 -9
- package/dist/store/raw-archive.d.ts +5 -4
- package/dist/store/raw-archive.js +11 -10
- package/dist/store/recall-trace.d.ts +22 -17
- package/dist/store/recall-trace.js +128 -64
- package/dist/store/rejected-values.d.ts +15 -10
- package/dist/store/rejected-values.js +46 -20
- package/dist/store/rejection.d.ts +12 -11
- package/dist/store/rejection.js +18 -19
- package/dist/store/report-reads.d.ts +2 -1
- package/dist/store/report-reads.js +2 -1
- package/dist/store/rows.d.ts +7 -5
- package/dist/store/rows.js +20 -13
- package/dist/store/rule-sql.d.ts +7 -3
- package/dist/store/rule-sql.js +26 -13
- package/dist/store/search-rows.d.ts +16 -11
- package/dist/store/search-rows.js +54 -32
- package/dist/store/sessions.d.ts +12 -10
- package/dist/store/sessions.js +40 -21
- package/dist/store/set-aside.d.ts +2 -2
- package/dist/store/set-aside.js +18 -5
- package/dist/store/sqlite/agent-import.d.ts +3 -0
- package/dist/store/sqlite/agent-import.js +77 -0
- package/dist/store/sqlite/cards-group.d.ts +6 -0
- package/dist/store/sqlite/cards-group.js +37 -0
- package/dist/store/sqlite/conflicts-group.d.ts +6 -0
- package/dist/store/sqlite/conflicts-group.js +18 -0
- package/dist/store/sqlite/connector-events-group.d.ts +2 -1
- package/dist/store/sqlite/connector-events-group.js +17 -6
- package/dist/store/sqlite/connector-writes-group.d.ts +2 -1
- package/dist/store/sqlite/connector-writes-group.js +12 -5
- package/dist/store/sqlite/consolidation-group.d.ts +4 -0
- package/dist/store/sqlite/consolidation-group.js +64 -0
- package/dist/store/sqlite/dag-reads-group.js +1 -1
- package/dist/store/sqlite/dormant-group.d.ts +6 -0
- package/dist/store/sqlite/dormant-group.js +29 -0
- package/dist/store/sqlite/entry-writes-group.d.ts +9 -6
- package/dist/store/sqlite/entry-writes-group.js +37 -14
- package/dist/store/sqlite/error-codec.d.ts +4 -2
- package/dist/store/sqlite/error-codec.js +32 -10
- package/dist/store/sqlite/executor-counts.js +2 -1
- package/dist/store/sqlite/executor.d.ts +8 -3
- package/dist/store/sqlite/executor.js +56 -18
- package/dist/store/sqlite/global-promote.d.ts +5 -0
- package/dist/store/sqlite/global-promote.js +48 -0
- package/dist/store/sqlite/goals-group.d.ts +6 -0
- package/dist/store/sqlite/goals-group.js +23 -0
- package/dist/store/sqlite/graph-reads-group.d.ts +2 -1
- package/dist/store/sqlite/graph-reads-group.js +2 -1
- package/dist/store/sqlite/held-connection.d.ts +8 -0
- package/dist/store/sqlite/held-connection.js +34 -7
- package/dist/store/sqlite/last-recall-group.d.ts +15 -0
- package/dist/store/sqlite/last-recall-group.js +62 -0
- package/dist/store/sqlite/learning-group.d.ts +4 -0
- package/dist/store/sqlite/learning-group.js +17 -0
- package/dist/store/sqlite/maintenance-groups.d.ts +6 -0
- package/dist/store/sqlite/maintenance-groups.js +61 -0
- package/dist/store/sqlite/object-rows.d.ts +6 -3
- package/dist/store/sqlite/object-rows.js +34 -5
- package/dist/store/sqlite/objects-group.d.ts +5 -4
- package/dist/store/sqlite/objects-group.js +97 -38
- package/dist/store/sqlite/predictions-group.d.ts +2 -1
- package/dist/store/sqlite/predictions-group.js +4 -2
- package/dist/store/sqlite/promotion-group.d.ts +3 -0
- package/dist/store/sqlite/promotion-group.js +10 -0
- package/dist/store/sqlite/quarantine-group.d.ts +2 -1
- package/dist/store/sqlite/quarantine-group.js +4 -2
- package/dist/store/sqlite/reports-group.d.ts +6 -0
- package/dist/store/sqlite/reports-group.js +33 -0
- package/dist/store/sqlite/request-scope.d.ts +6 -0
- package/dist/store/sqlite/request-scope.js +18 -0
- package/dist/store/sqlite/sessions-group.d.ts +6 -0
- package/dist/store/sqlite/sessions-group.js +46 -0
- package/dist/store/sqlite/store.d.ts +22 -18
- package/dist/store/sqlite/store.js +95 -33
- package/dist/store/sqlite/vector-pack.js +2 -1
- package/dist/store/sqlite/vector-reads-group.js +2 -1
- package/dist/store/sqlite/worker-jobs.d.ts +2 -1
- package/dist/store/sqlite/worker-jobs.js +19 -7
- package/dist/store/sqlite/worker-ops.d.ts +10 -5
- package/dist/store/sqlite/worker-ops.js +6 -3
- package/dist/store/sqlite/worker-store.d.ts +4 -3
- package/dist/store/sqlite/worker-store.js +24 -14
- package/dist/store/summaries.d.ts +25 -11
- package/dist/store/summaries.js +84 -27
- package/dist/store/summary-dirty.d.ts +2 -1
- package/dist/store/summary-dirty.js +2 -1
- package/dist/store/tenant.d.ts +3 -2
- package/dist/store/tenant.js +5 -4
- package/dist/store/token-ledger-rows.js +8 -4
- package/dist/store/token-ledger.d.ts +19 -13
- package/dist/store/token-ledger.js +27 -14
- package/dist/store/tombstone-checks.d.ts +4 -1
- package/dist/store/tombstone-checks.js +10 -1
- package/dist/store/usage-reports.js +2 -1
- package/dist/store/vector-index.d.ts +8 -5
- package/dist/store/vector-index.js +28 -11
- package/dist/store/working-memory.d.ts +6 -4
- package/dist/store/working-memory.js +14 -9
- package/dist/support-bundle.js +10 -5
- package/dist/trust/quarantine.d.ts +1 -2
- package/dist/trust/quarantine.js +1 -5
- package/dist/trust/reject-flow.d.ts +12 -3
- package/dist/trust/reject-flow.js +12 -4
- package/dist/util/anthropic-messages.d.ts +7 -2
- package/dist/util/anthropic-messages.js +18 -7
- package/dist/util/atomic-write.d.ts +8 -3
- package/dist/util/atomic-write.js +36 -21
- package/dist/util/compaction-items.d.ts +4 -1
- package/dist/util/compaction-items.js +8 -2
- package/dist/util/crash-handlers.d.ts +7 -2
- package/dist/util/crash-handlers.js +13 -4
- package/dist/util/env.d.ts +26 -5
- package/dist/util/env.js +87 -25
- package/dist/util/format.d.ts +2 -0
- package/dist/util/format.js +4 -0
- package/dist/util/home-path.js +12 -6
- package/dist/util/hook-payload.d.ts +3 -1
- package/dist/util/hook-payload.js +3 -1
- package/dist/util/http-retry.d.ts +12 -6
- package/dist/util/http-retry.js +16 -6
- package/dist/util/http-util.d.ts +20 -5
- package/dist/util/http-util.js +28 -9
- package/dist/util/json.d.ts +4 -1
- package/dist/util/json.js +4 -1
- package/dist/util/keyset.js +2 -1
- package/dist/util/limits.js +4 -2
- package/dist/util/log.d.ts +13 -5
- package/dist/util/log.js +29 -6
- package/dist/util/net.d.ts +5 -0
- package/dist/util/net.js +19 -0
- package/dist/util/real-path.d.ts +2 -1
- package/dist/util/real-path.js +4 -3
- package/dist/util/request-scope.d.ts +16 -4
- package/dist/util/request-scope.js +19 -6
- package/dist/util/same-text.d.ts +10 -3
- package/dist/util/same-text.js +10 -3
- package/dist/util/secret-detect.d.ts +24 -7
- package/dist/util/secret-detect.js +49 -14
- package/dist/util/spawn-argv.d.ts +11 -0
- package/dist/util/spawn-argv.js +66 -0
- package/dist/util/sql.d.ts +3 -0
- package/dist/util/sql.js +6 -0
- package/dist/util/sqlite-blocked.d.ts +15 -4
- package/dist/util/sqlite-blocked.js +19 -6
- package/dist/util/stored-json.d.ts +4 -1
- package/dist/util/stored-json.js +6 -2
- package/dist/util/stream-tee.d.ts +2 -1
- package/dist/util/stream-tee.js +8 -5
- package/dist/util/transcript-tail.d.ts +4 -1
- package/dist/util/transcript-tail.js +4 -1
- package/dist/util/vector-codec.d.ts +4 -0
- package/dist/util/vector-codec.js +15 -0
- package/dist/util/version.d.ts +8 -3
- package/dist/util/version.js +8 -3
- package/dist/util/write-budget.d.ts +7 -2
- package/dist/util/write-budget.js +5 -2
- package/dist/util/yaml.d.ts +4 -1
- package/dist/util/yaml.js +4 -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 +4 -1
- package/scripts/postinstall.cjs +3 -1
- package/dist/api/audit.js +0 -56
- package/dist/api/cards.d.ts +0 -42
- package/dist/api/conflicts.d.ts +0 -28
- package/dist/api/conflicts.js +0 -61
- package/dist/api/dormant.d.ts +0 -14
- package/dist/api/dormant.js +0 -58
- package/dist/api/goals.d.ts +0 -18
- package/dist/api/graph.d.ts +0 -8
- package/dist/api/graph.js +0 -7
- package/dist/api/learn.js +0 -124
- package/dist/api/memories.d.ts +0 -23
- package/dist/api/memories.js +0 -46
- package/dist/api/objects.d.ts +0 -9
- package/dist/api/on-store.d.ts +0 -16
- package/dist/api/on-store.js +0 -38
- package/dist/api/outcome.d.ts +0 -19
- package/dist/api/outcome.js +0 -21
- package/dist/api/predictions.d.ts +0 -11
- package/dist/api/promote.d.ts +0 -36
- package/dist/api/promote.js +0 -65
- package/dist/api/recall-core.d.ts +0 -4
- package/dist/api/recall-core.js +0 -120
- package/dist/api/recall-finish.d.ts +0 -53
- package/dist/api/recall-finish.js +0 -30
- package/dist/api/recall-history.d.ts +0 -64
- package/dist/api/recall-history.js +0 -159
- package/dist/api/recall-record.d.ts +0 -43
- package/dist/api/recall-record.js +0 -78
- package/dist/api/recall-request.js +0 -121
- package/dist/api/recall.d.ts +0 -6
- package/dist/api/refine.d.ts +0 -7
- package/dist/api/refine.js +0 -10
- package/dist/api/session-owners.d.ts +0 -4
- package/dist/api/session-owners.js +0 -17
- package/dist/api/sleep-run.d.ts +0 -26
- package/dist/api/sleep.js +0 -10
- package/dist/cli/lenient-id.d.ts +0 -2
- package/dist/cli/lenient-id.js +0 -13
- package/dist/graph/write.d.ts +0 -14
- package/dist/store/sqlite/busy.d.ts +0 -3
- package/dist/store/sqlite/busy.js +0 -8
- package/dist/store/sqlite/local.d.ts +0 -21
- package/dist/store/sqlite/local.js +0 -39
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
/** Smallest number of shared tokens any qualifying pair can have, given either side's token count. */
|
|
2
2
|
export type MinShared = (size: number) => number;
|
|
3
|
-
/**
|
|
3
|
+
/**
|
|
4
|
+
* Shared >= threshold * union >= threshold * size; one token of slack covers float rounding in the caller's Jaccard
|
|
5
|
+
* check.
|
|
6
|
+
*/
|
|
4
7
|
export declare function jaccardMinShared(threshold: number, atLeast?: number): MinShared;
|
|
5
|
-
/**
|
|
8
|
+
/**
|
|
9
|
+
* Maps i to each j > i, ascending, that may share `minShared` tokens with set i; a superset the caller checks exactly,
|
|
10
|
+
* never a pair sharing no token.
|
|
11
|
+
*/
|
|
6
12
|
export declare function overlapPartners(sets: readonly ReadonlySet<string>[], minShared: MinShared): (i: number) => number[];
|
|
7
13
|
//# sourceMappingURL=overlap-index.d.ts.map
|
|
@@ -1,15 +1,22 @@
|
|
|
1
|
-
// All-pairs overlap join through an inverted index over rare-first token prefixes (prefix filtering, Chaudhuri et al.
|
|
2
|
-
|
|
1
|
+
// All-pairs overlap join through an inverted index over rare-first token prefixes (prefix filtering, Chaudhuri et al.
|
|
2
|
+
// 2006).
|
|
3
|
+
/**
|
|
4
|
+
* Shared >= threshold * union >= threshold * size; one token of slack covers float rounding in the caller's Jaccard
|
|
5
|
+
* check.
|
|
6
|
+
*/
|
|
3
7
|
export function jaccardMinShared(threshold, atLeast = 1) {
|
|
4
8
|
return (size) => Math.max(atLeast, Math.ceil(threshold * size) - 1);
|
|
5
9
|
}
|
|
6
|
-
/**
|
|
10
|
+
/**
|
|
11
|
+
* Maps i to each j > i, ascending, that may share `minShared` tokens with set i; a superset the caller checks exactly,
|
|
12
|
+
* never a pair sharing no token.
|
|
13
|
+
*/
|
|
7
14
|
export function overlapPartners(sets, minShared) {
|
|
8
15
|
const docFreq = new Map();
|
|
9
16
|
for (const set of sets)
|
|
10
17
|
for (const t of set)
|
|
11
18
|
docFreq.set(t, (docFreq.get(t) ?? 0) + 1);
|
|
12
|
-
const rareFirst = (a, b) => (
|
|
19
|
+
const rareFirst = (a, b) => (docFreq.get(a) ?? 0) - (docFreq.get(b) ?? 0) || (a < b ? -1 : a > b ? 1 : 0);
|
|
13
20
|
// Under one total order the first token two sets share lies in both sets' first size - minShared + 1 tokens.
|
|
14
21
|
const prefixes = sets.map((set) => {
|
|
15
22
|
const keep = set.size - Math.max(1, minShared(set.size)) + 1;
|
|
@@ -2,7 +2,9 @@ import { type PhysicsParticle } from '../core/physics.js';
|
|
|
2
2
|
import type { MemoryEntry } from '../core/memory.js';
|
|
3
3
|
import type { SleepRun } from './run.js';
|
|
4
4
|
export declare function physicsPass(run: SleepRun, maxParticles?: number): void;
|
|
5
|
-
/**
|
|
5
|
+
/**
|
|
6
|
+
* Every stored particle in load order up to the cap; past it, the most recently recalled survivors (memory id breaks
|
|
7
|
+
* ties),
|
|
6
8
|
* then particles with no survivor. */
|
|
7
9
|
export declare function particlesToSimulate(stored: PhysicsParticle[], entries: ReadonlyMap<string, MemoryEntry>, max?: number): PhysicsParticle[];
|
|
8
10
|
//# sourceMappingURL=physics-pass.d.ts.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { refreshParticleProperties } from '../
|
|
2
|
-
import { loadStoredParticles, saveStoredParticles } from '../store/vector-index.js';
|
|
1
|
+
import { refreshParticleProperties } from '../core/particle-refresh.js';
|
|
3
2
|
import { simulate } from '../core/physics.js';
|
|
4
3
|
import { errorMessage } from '../util/log.js';
|
|
5
4
|
const STATS_DECIMALS = 4;
|
|
6
|
-
// Every substep is all-pairs, so one sleep moves at most this many particles; the rest keep their stored state until
|
|
5
|
+
// Every substep is all-pairs, so one sleep moves at most this many particles; the rest keep their stored state until
|
|
6
|
+
// they are recalled.
|
|
7
7
|
const SLEEP_PHYSICS_MAX_PARTICLES = 1000;
|
|
8
8
|
// 2. Physics simulation pass
|
|
9
9
|
export function physicsPass(run, maxParticles = SLEEP_PHYSICS_MAX_PARTICLES) {
|
|
@@ -22,7 +22,7 @@ export function physicsPass(run, maxParticles = SLEEP_PHYSICS_MAX_PARTICLES) {
|
|
|
22
22
|
}
|
|
23
23
|
function simulateStoredParticles(run, maxParticles) {
|
|
24
24
|
const { result, survivors } = run;
|
|
25
|
-
const stored =
|
|
25
|
+
const stored = run.store.storedParticles();
|
|
26
26
|
if (stored.length === 0)
|
|
27
27
|
return;
|
|
28
28
|
// Build entry lookup for property refresh
|
|
@@ -30,14 +30,16 @@ function simulateStoredParticles(run, maxParticles) {
|
|
|
30
30
|
const particles = particlesToSimulate(stored, entryMap, maxParticles);
|
|
31
31
|
refreshParticleProperties(particles, entryMap, run.now);
|
|
32
32
|
const stats = simulate(particles, survivorForces(run));
|
|
33
|
-
|
|
33
|
+
run.store.saveParticles(particles);
|
|
34
34
|
result.physicsSimulated = stats.particleCount;
|
|
35
35
|
const capped = particles.length < stored.length ? ` (the ${particles.length} most recently recalled of ${stored.length})` : '';
|
|
36
36
|
result.details.push(` ⚛️ physics: ${stats.particleCount} particles${capped}, ` +
|
|
37
37
|
`avg vel ${stats.avgVelocityMagnitude.toFixed(STATS_DECIMALS)}, ` +
|
|
38
38
|
`energy ${stats.energy.total.toFixed(STATS_DECIMALS)}`);
|
|
39
39
|
}
|
|
40
|
-
/**
|
|
40
|
+
/**
|
|
41
|
+
* Every stored particle in load order up to the cap; past it, the most recently recalled survivors (memory id breaks
|
|
42
|
+
* ties),
|
|
41
43
|
* then particles with no survivor. */
|
|
42
44
|
export function particlesToSimulate(stored, entries, max = SLEEP_PHYSICS_MAX_PARTICLES) {
|
|
43
45
|
if (stored.length <= max)
|
|
@@ -50,7 +52,8 @@ export function particlesToSimulate(stored, entries, max = SLEEP_PHYSICS_MAX_PAR
|
|
|
50
52
|
return a.memoryId < b.memoryId ? -1 : a.memoryId > b.memoryId ? 1 : 0;
|
|
51
53
|
});
|
|
52
54
|
const kept = new Set(ranked.slice(0, max));
|
|
53
|
-
// Load order, not rank order: the force sums run in this order, so a capped run matches an uncapped one over the same
|
|
55
|
+
// Load order, not rank order: the force sums run in this order, so a capped run matches an uncapped one over the same
|
|
56
|
+
// set.
|
|
54
57
|
return stored.filter((p) => kept.has(p));
|
|
55
58
|
}
|
|
56
59
|
function survivorForces(run) {
|
|
@@ -1,9 +1,16 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
1
|
+
/**
|
|
2
|
+
* Replay: during `hippo sleep`, sample N survivors weighted by reward, valence, under-rehearsal and age, then apply the
|
|
3
|
+
* `markRetrieved` strengthening.
|
|
4
|
+
* A lightweight deterministic analog of hippocampal replay, so important memories stay strong without being queried;
|
|
5
|
+
* distinct from decay, physics and merge.
|
|
6
|
+
*/
|
|
3
7
|
import { type MemoryEntry } from '../core/memory.js';
|
|
4
|
-
/**
|
|
8
|
+
/**
|
|
9
|
+
* Priority score for ranking survivors for replay (higher = more likely sampled); pure in the entry and current time.
|
|
10
|
+
*/
|
|
5
11
|
export declare function replayPriority(entry: MemoryEntry, now: Date, outcomeAblated: boolean): number;
|
|
6
12
|
/** Pick `count` memories for replay, weighted by `replayPriority`, without replacement; deterministic for a seed.
|
|
7
|
-
* Weighted but not greedy: always taking the top-N overfits, so a stochastic element keeps adjacent survivors in play.
|
|
13
|
+
* Weighted but not greedy: always taking the top-N overfits, so a stochastic element keeps adjacent survivors in play.
|
|
14
|
+
*/
|
|
8
15
|
export declare function sampleForReplay(survivors: MemoryEntry[], count: number, now: Date, seed?: number): MemoryEntry[];
|
|
9
16
|
//# sourceMappingURL=replay.d.ts.map
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
1
|
+
/**
|
|
2
|
+
* Replay: during `hippo sleep`, sample N survivors weighted by reward, valence, under-rehearsal and age, then apply the
|
|
3
|
+
* `markRetrieved` strengthening.
|
|
4
|
+
* A lightweight deterministic analog of hippocampal replay, so important memories stay strong without being queried;
|
|
5
|
+
* distinct from decay, physics and merge.
|
|
6
|
+
*/
|
|
3
7
|
import { HOUR_MS } from '../util/time.js';
|
|
4
8
|
import { isOutcomeSlowAblated } from '../core/ablation.js';
|
|
5
9
|
import { resolveConfidence } from '../core/memory.js';
|
|
@@ -15,11 +19,14 @@ const REWARD_POSITIVE_GAIN = 0.5;
|
|
|
15
19
|
const REWARD_NET_GAIN = 0.25;
|
|
16
20
|
const IDLE_BOOST_GAIN = 0.1;
|
|
17
21
|
const STRENGTH_FLOOR = 0.1;
|
|
18
|
-
/**
|
|
22
|
+
/**
|
|
23
|
+
* Priority score for ranking survivors for replay (higher = more likely sampled); pure in the entry and current time.
|
|
24
|
+
*/
|
|
19
25
|
export function replayPriority(entry, now, outcomeAblated) {
|
|
20
26
|
const pos = entry.outcome_positive ?? 0;
|
|
21
27
|
const neg = entry.outcome_negative ?? 0;
|
|
22
|
-
// Reward signal: neutral = 1, strongly rewarded > 1, negative-dominated floors at 0.1 (still eligible, just
|
|
28
|
+
// Reward signal: neutral = 1, strongly rewarded > 1, negative-dominated floors at 0.1 (still eligible, just
|
|
29
|
+
// unlikely).
|
|
23
30
|
// The clamp is required because sampleForReplay needs all weights positive.
|
|
24
31
|
const rewardSignal = outcomeAblated
|
|
25
32
|
? 1.0 // EVAL-ONLY ablation (see ablation.ts): outcome-off also silences replay's reward bias
|
|
@@ -37,7 +44,10 @@ export function replayPriority(entry, now, outcomeAblated) {
|
|
|
37
44
|
const strengthFloor = Math.max(STRENGTH_FLOOR, rawStrength);
|
|
38
45
|
return rewardSignal * valence * underRehearsed * idleBoost * strengthFloor;
|
|
39
46
|
}
|
|
40
|
-
/**
|
|
47
|
+
/**
|
|
48
|
+
* Deterministic 32-bit RNG (Mulberry32): same seed, same sequence, so replay is reproducible without a random-number
|
|
49
|
+
* dependency.
|
|
50
|
+
*/
|
|
41
51
|
function mulberry32(seed) {
|
|
42
52
|
let s = seed >>> 0;
|
|
43
53
|
return () => {
|
|
@@ -48,12 +58,14 @@ function mulberry32(seed) {
|
|
|
48
58
|
};
|
|
49
59
|
}
|
|
50
60
|
/** Pick `count` memories for replay, weighted by `replayPriority`, without replacement; deterministic for a seed.
|
|
51
|
-
* Weighted but not greedy: always taking the top-N overfits, so a stochastic element keeps adjacent survivors in play.
|
|
61
|
+
* Weighted but not greedy: always taking the top-N overfits, so a stochastic element keeps adjacent survivors in play.
|
|
62
|
+
*/
|
|
52
63
|
export function sampleForReplay(survivors, count, now, seed = Date.now() >>> 0) {
|
|
53
64
|
if (count <= 0 || survivors.length === 0)
|
|
54
65
|
return [];
|
|
55
66
|
const rng = mulberry32(seed);
|
|
56
|
-
// Deliberately-marked and aged-out memories are both untrusted and rehearsing them defeats staleness, so derive
|
|
67
|
+
// Deliberately-marked and aged-out memories are both untrusted and rehearsing them defeats staleness, so derive
|
|
68
|
+
// rather than trust
|
|
57
69
|
// the stored value (it no longer carries the age-out case).
|
|
58
70
|
const eligible = survivors.filter((e) => resolveConfidence(e, now) !== 'stale');
|
|
59
71
|
if (eligible.length === 0)
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { MemoryEntry, type DecayOptions } from '../core/memory.js';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import type { DormantMove } from '../store/dormant.js';
|
|
3
|
+
import type { Consolidation } from '../store/port.js';
|
|
4
|
+
import type { TombstoneChecks } from '../store/tombstone-checks.js';
|
|
4
5
|
import { loadConfig } from '../core/config.js';
|
|
5
6
|
export interface ConsolidationResult {
|
|
6
7
|
decayed: number;
|
|
@@ -36,10 +37,14 @@ export interface ConsolidationResult {
|
|
|
36
37
|
export declare const REPLAY_COUNT_DEFAULT = 5;
|
|
37
38
|
export declare function keptAsWritten(entry: MemoryEntry): boolean;
|
|
38
39
|
/** Re-syncs the full-text index with `memories`; a store open that is already current no longer counts the two. */
|
|
39
|
-
export declare function syncFtsIndex(
|
|
40
|
-
/**
|
|
40
|
+
export declare function syncFtsIndex(store: Consolidation, dryRun: boolean, result: ConsolidationResult): void;
|
|
41
|
+
/**
|
|
42
|
+
* State every sleep stage reads or appends to; the pending lists are flushed at the end, each of `units` whole in one
|
|
43
|
+
* transaction.
|
|
44
|
+
*/
|
|
41
45
|
export interface SleepRun {
|
|
42
46
|
hippoRoot: string;
|
|
47
|
+
store: Consolidation;
|
|
43
48
|
now: Date;
|
|
44
49
|
dryRun: boolean;
|
|
45
50
|
config: ReturnType<typeof loadConfig>;
|
|
@@ -47,7 +52,10 @@ export interface SleepRun {
|
|
|
47
52
|
result: ConsolidationResult;
|
|
48
53
|
all: MemoryEntry[];
|
|
49
54
|
retirable: (entry: MemoryEntry) => boolean;
|
|
50
|
-
/**
|
|
55
|
+
/**
|
|
56
|
+
* Auto-promote (1.4) and merge (3) write deterministic content through the guard's bypass, so both check tombstones
|
|
57
|
+
* here first.
|
|
58
|
+
*/
|
|
51
59
|
tombstones: TombstoneChecks;
|
|
52
60
|
survivors: MemoryEntry[];
|
|
53
61
|
pendingWrites: MemoryEntry[];
|
package/dist/consolidate/run.js
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import { ftsDrift } from '../store/entry-row.js';
|
|
2
1
|
import { NO_MERGE_TAGS } from '../sharing/share.js';
|
|
3
2
|
export const REPLAY_COUNT_DEFAULT = 5;
|
|
4
3
|
export function keptAsWritten(entry) {
|
|
5
4
|
return entry.tags.some((tag) => NO_MERGE_TAGS.has(tag));
|
|
6
5
|
}
|
|
7
6
|
/** Re-syncs the full-text index with `memories`; a store open that is already current no longer counts the two. */
|
|
8
|
-
export function syncFtsIndex(
|
|
9
|
-
const counts = ftsDrift(
|
|
7
|
+
export function syncFtsIndex(store, dryRun, result) {
|
|
8
|
+
const counts = store.ftsDrift(!dryRun);
|
|
10
9
|
if (counts === null)
|
|
11
10
|
return;
|
|
12
|
-
result.details.push(` 🔎 ${dryRun ? 'would re-sync' : 're-synced'} the full-text index (${counts.fts} indexed rows for
|
|
11
|
+
result.details.push(` 🔎 ${dryRun ? 'would re-sync' : 're-synced'} the full-text index (${counts.fts} indexed rows for ` +
|
|
12
|
+
`${counts.memories} memories)`);
|
|
13
13
|
}
|
|
14
14
|
export function newConsolidationResult(dryRun) {
|
|
15
15
|
return {
|
|
@@ -1,13 +1,21 @@
|
|
|
1
|
-
/** Consolidation engine ("Sleep"): decay pass (drop entries below the strength threshold), merge pass (semantic summaries of overlapping episodics), stats. */
|
|
2
|
-
import { type WriteBudget } from '../util/write-budget.js';
|
|
3
|
-
import { type ConsolidationResult } from './run.js';
|
|
4
1
|
/**
|
|
5
|
-
*
|
|
2
|
+
* Consolidation engine ("Sleep"): decay pass (drop entries below the strength threshold), merge pass (semantic
|
|
3
|
+
* summaries of overlapping episodics), stats.
|
|
6
4
|
*/
|
|
7
|
-
|
|
5
|
+
import type { LocalFiles } from '../store/port.js';
|
|
6
|
+
import { type WriteBudget } from '../util/write-budget.js';
|
|
7
|
+
import { type ConsolidationResult } from './run.js';
|
|
8
|
+
type ConsolidateOptions = {
|
|
8
9
|
dryRun?: boolean;
|
|
9
10
|
now?: Date;
|
|
10
11
|
fetcher?: typeof fetch;
|
|
11
12
|
budget?: WriteBudget;
|
|
12
|
-
}
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Run a full consolidation pass on the hippo.db under `hippoRoot`.
|
|
16
|
+
*/
|
|
17
|
+
export declare function consolidate(hippoRoot: string, options?: ConsolidateOptions): Promise<ConsolidationResult>;
|
|
18
|
+
/** A full consolidation pass whose store work goes through `local.consolidation`. */
|
|
19
|
+
export declare function runConsolidation(local: LocalFiles, options?: ConsolidateOptions): Promise<ConsolidationResult>;
|
|
20
|
+
export {};
|
|
13
21
|
//# sourceMappingURL=sleep.d.ts.map
|
|
@@ -1,16 +1,12 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* Consolidation engine ("Sleep"): decay pass (drop entries below the strength threshold), merge pass (semantic
|
|
3
|
+
* summaries of overlapping episodics), stats.
|
|
4
|
+
*/
|
|
2
5
|
import { evalNow, strengthAblation } from '../core/ablation.js';
|
|
3
|
-
import { canAutoDelete } from '../core/memory.js';
|
|
4
|
-
import {
|
|
5
|
-
import { commitInChunks, memoriesBackingObjects } from '../store/delete-and-batch.js';
|
|
6
|
-
import { appendConsolidationRun, loadSessionDecayContext, incrementSleepCount } from '../store/index-and-stats.js';
|
|
7
|
-
import { replaceDetectedConflicts } from '../store/conflicts.js';
|
|
8
|
-
import { SLEEP_DB_WAIT_MS } from '../db/index.js';
|
|
9
|
-
import { expireDormantBefore } from '../store/dormant.js';
|
|
6
|
+
import { canAutoDelete, LEGACY_TYPED_HALF_LIFE } from '../core/memory.js';
|
|
7
|
+
import { sqliteSyncStore } from '../store/sqlite/store.js';
|
|
10
8
|
import { loadConfig } from '../core/config.js';
|
|
11
|
-
import {
|
|
12
|
-
import { lazyTombstoneChecks } from '../store/tombstone-checks.js';
|
|
13
|
-
import { migrateDefaultHalfLife, LEGACY_TYPED_HALF_LIFE } from './half-life-migration.js';
|
|
9
|
+
import { migrateDefaultHalfLife } from './half-life-migration.js';
|
|
14
10
|
import { errorFields, errorMessage, log } from '../util/log.js';
|
|
15
11
|
import { WRITE_BUDGET } from '../util/write-budget.js';
|
|
16
12
|
import { decayPass } from './decay.js';
|
|
@@ -23,28 +19,33 @@ import { llmPasses } from './llm-passes.js';
|
|
|
23
19
|
import { physicsPass } from './physics-pass.js';
|
|
24
20
|
import { DAY_MS } from '../util/time.js';
|
|
25
21
|
/**
|
|
26
|
-
* Run a full consolidation pass.
|
|
22
|
+
* Run a full consolidation pass on the hippo.db under `hippoRoot`.
|
|
27
23
|
*/
|
|
28
24
|
export async function consolidate(hippoRoot, options = {}) {
|
|
25
|
+
return runConsolidation(sqliteSyncStore(hippoRoot).localFiles, options);
|
|
26
|
+
}
|
|
27
|
+
/** A full consolidation pass whose store work goes through `local.consolidation`. */
|
|
28
|
+
export async function runConsolidation(local, options = {}) {
|
|
29
|
+
const { hippoRoot, consolidation: store } = local;
|
|
29
30
|
const now = options.now ?? evalNow(); // honors HIPPO_FAKE_NOW (eval-only; see ablation.ts)
|
|
30
31
|
const dryRun = options.dryRun ?? false;
|
|
31
32
|
const result = newConsolidationResult(dryRun);
|
|
32
|
-
const halfLife = migrateHalfLives(
|
|
33
|
-
syncFtsIndex(
|
|
33
|
+
const halfLife = migrateHalfLives(local, dryRun, result);
|
|
34
|
+
syncFtsIndex(store, dryRun, result);
|
|
34
35
|
// Host-wide by design: per-tenant filtering would mean N runs per host and no cross-tenant dedup.
|
|
35
36
|
// The api.sleep audit row tags this with the admin synthetic actor.
|
|
36
|
-
const { entries: all, base: snapshot } =
|
|
37
|
+
const { entries: all, base: snapshot } = store.entriesWithBase();
|
|
37
38
|
if (dryRun)
|
|
38
39
|
for (const e of all)
|
|
39
40
|
e.half_life_days = halfLife.halfLives.get(e.id) ?? e.half_life_days;
|
|
40
|
-
const backingObjects =
|
|
41
|
+
const backingObjects = store.objectBackedIds();
|
|
41
42
|
// Retirable: auto-deletable (never pinned, raw or kept for good) and not backing a first-class object.
|
|
42
43
|
const retirable = (entry) => canAutoDelete(entry) && !backingObjects.has(entry.id);
|
|
43
44
|
const config = loadConfig(hippoRoot);
|
|
44
|
-
const decayOpts = sessionDecayOptions(
|
|
45
|
+
const decayOpts = sessionDecayOptions(store, config);
|
|
45
46
|
const run = {
|
|
46
|
-
hippoRoot, now, dryRun, config, decayOpts, result, all, retirable,
|
|
47
|
-
tombstones:
|
|
47
|
+
hippoRoot, store, now, dryRun, config, decayOpts, result, all, retirable,
|
|
48
|
+
tombstones: store.tombstoneChecks(dryRun),
|
|
48
49
|
survivors: [],
|
|
49
50
|
// Collect all writes/deletes and batch them at the end
|
|
50
51
|
pendingWrites: [],
|
|
@@ -62,8 +63,8 @@ export async function consolidate(hippoRoot, options = {}) {
|
|
|
62
63
|
return result;
|
|
63
64
|
}
|
|
64
65
|
// Load decay options from config + session context
|
|
65
|
-
function sessionDecayOptions(
|
|
66
|
-
const sessionCtx =
|
|
66
|
+
function sessionDecayOptions(store, config) {
|
|
67
|
+
const sessionCtx = store.sessionDecayContext();
|
|
67
68
|
return {
|
|
68
69
|
decayBasis: config.decayBasis,
|
|
69
70
|
avgSessionIntervalDays: sessionCtx.avgSessionIntervalDays,
|
|
@@ -91,10 +92,12 @@ async function runPassesAfterDecay(run, fetcher) {
|
|
|
91
92
|
}
|
|
92
93
|
// A changed default half-life moves memories still on the old base first,
|
|
93
94
|
// so this pass decays them at the new one (src/consolidate/half-life-migration.ts).
|
|
94
|
-
function migrateHalfLives(
|
|
95
|
-
const
|
|
95
|
+
function migrateHalfLives(local, dryRun, result) {
|
|
96
|
+
const to = loadConfig(local.hippoRoot).defaultHalfLifeDays;
|
|
97
|
+
const halfLife = migrateDefaultHalfLife(local.consolidation, to, { dryRun });
|
|
96
98
|
if (halfLife.rescaled > 0) {
|
|
97
|
-
result.details.push(` ⏳ ${dryRun ? 'would move' : 'moved'} ${halfLife.rescaled} memories from the ${halfLife.from}-day to the
|
|
99
|
+
result.details.push(` ⏳ ${dryRun ? 'would move' : 'moved'} ${halfLife.rescaled} memories from the ${halfLife.from}-day to the ` +
|
|
100
|
+
`${halfLife.to}-day half-life`);
|
|
98
101
|
}
|
|
99
102
|
if (halfLife.typed > 0) {
|
|
100
103
|
result.details.push(` ⏳ ${dryRun ? 'would move' : 'moved'} ${halfLife.typed} memories of decisions, incidents and other objects ` +
|
|
@@ -109,8 +112,8 @@ async function flushPending(run, snapshot, budget) {
|
|
|
109
112
|
return;
|
|
110
113
|
const units = [...run.units, ...familyUnits(pendingWrites, pendingDeletes, pendingDormant, snapshot)];
|
|
111
114
|
const components = groupFlush(pendingWrites, pendingDeletes, pendingDormant, units);
|
|
112
|
-
// The snapshot keeps what the DAG passes and other writers changed while sleep ran
|
|
113
|
-
const left = new Set(await
|
|
115
|
+
// The snapshot keeps what the DAG passes and other writers changed while sleep ran.
|
|
116
|
+
const left = new Set(await run.store.commitFlush(components, { snapshot, budget }));
|
|
114
117
|
for (const id of [...pendingDeletes, ...pendingDormant.map((m) => m.entry.id)]) {
|
|
115
118
|
if (!left.has(id))
|
|
116
119
|
result.details.push(` ↩ ${id} not removed: pinned or already gone before sleep saved`);
|
|
@@ -119,44 +122,47 @@ async function flushPending(run, snapshot, budget) {
|
|
|
119
122
|
result.removed = result.removedIds.length;
|
|
120
123
|
result.dormant = pendingDormant.filter((m) => left.has(m.entry.id)).length;
|
|
121
124
|
}
|
|
122
|
-
// Dormant retention: a dormant memory nobody restored within dormant.retentionDays is deleted for good (0 keeps
|
|
125
|
+
// Dormant retention: a dormant memory nobody restored within dormant.retentionDays is deleted for good (0 keeps
|
|
126
|
+
// forever);
|
|
123
127
|
// runs even when dormant.enabled is off, so turning it off still ages out what earlier sleeps kept.
|
|
124
128
|
async function expireDormant(run, budget) {
|
|
125
129
|
const { config, result, dryRun } = run;
|
|
126
130
|
if (!(config.dormant.retentionDays > 0))
|
|
127
131
|
return;
|
|
128
132
|
const cutoff = new Date(run.now.getTime() - config.dormant.retentionDays * DAY_MS).toISOString();
|
|
129
|
-
result.dormantExpired = await
|
|
133
|
+
result.dormantExpired = await run.store.expireDormant(cutoff, { dryRun, budget });
|
|
130
134
|
if (result.dormantExpired > 0) {
|
|
131
|
-
result.details.push(` ⌛ ${dryRun ? 'would expire' : 'expired'} ${result.dormantExpired} dormant
|
|
135
|
+
result.details.push(` ⌛ ${dryRun ? 'would expire' : 'expired'} ${result.dormantExpired} dormant ` +
|
|
136
|
+
`memor${result.dormantExpired === 1 ? 'y' : 'ies'} ` +
|
|
132
137
|
`older than ${config.dormant.retentionDays} days`);
|
|
133
138
|
}
|
|
134
139
|
}
|
|
135
140
|
// 4. Log run
|
|
136
141
|
function logRun(run, decay) {
|
|
137
|
-
const {
|
|
142
|
+
const { store, now, result } = run;
|
|
138
143
|
const detectedConflicts = detectConflicts(run.survivors, now, run.decayOpts, decay.rescuedIds);
|
|
139
|
-
|
|
144
|
+
store.replaceConflicts(detectedConflicts, now.toISOString());
|
|
140
145
|
if (detectedConflicts.length > 0) {
|
|
141
146
|
result.details.push(` ⚠️ detected ${detectedConflicts.length} memory conflict${detectedConflicts.length === 1 ? '' : 's'}`);
|
|
142
147
|
}
|
|
143
|
-
|
|
148
|
+
store.recordRun({
|
|
144
149
|
timestamp: now.toISOString(),
|
|
145
150
|
decayed: result.decayed,
|
|
146
151
|
merged: result.merged,
|
|
147
152
|
removed: result.removed,
|
|
148
153
|
});
|
|
149
|
-
|
|
154
|
+
store.countSleep();
|
|
150
155
|
if (decay.rescuedEntries.length > 0)
|
|
151
156
|
auditRescues(run, decay);
|
|
152
157
|
}
|
|
153
|
-
// One audit row per rescue, written only after the last flush chunk commits, so a run stopped mid-flush asserts no
|
|
158
|
+
// One audit row per rescue, written only after the last flush chunk commits, so a run stopped mid-flush asserts no
|
|
159
|
+
// rescue.
|
|
154
160
|
function auditRescues(run, { rescuedEntries, rankById }) {
|
|
155
161
|
const { result } = run;
|
|
156
162
|
const rescueEvent = (entry) => {
|
|
157
163
|
const rank = rankById.get(entry.id);
|
|
158
164
|
return {
|
|
159
|
-
tenantId: entry.
|
|
165
|
+
tenantId: entry.tenant_id,
|
|
160
166
|
actor: 'sleep',
|
|
161
167
|
op: 'mv_rescue',
|
|
162
168
|
targetId: entry.id,
|
|
@@ -167,10 +173,7 @@ function auditRescues(run, { rescuedEntries, rankById }) {
|
|
|
167
173
|
};
|
|
168
174
|
try {
|
|
169
175
|
// Row by row: one failed audit write must not silently drop every remaining row.
|
|
170
|
-
const
|
|
171
|
-
for (const { event, error } of failed)
|
|
172
|
-
reportAuditWriteFailure('mv_rescue', String(error), event.targetId);
|
|
173
|
-
const auditFailures = failed.length;
|
|
176
|
+
const auditFailures = run.store.auditEachRow(rescuedEntries.map(rescueEvent));
|
|
174
177
|
if (auditFailures > 0) {
|
|
175
178
|
result.details.push(` ⚠️ memory-value: ${auditFailures} mv_rescue audit row${auditFailures === 1 ? '' : 's'} ` +
|
|
176
179
|
`failed to write (the rescue itself still landed)`);
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* Trace-layer helpers. A trace is a `MemoryEntry` with `layer === 'trace'`: ordered agent actions and their outcome,
|
|
3
|
+
* stored as markdown in `content`
|
|
2
4
|
* (`renderTraceContent` formats it). */
|
|
3
5
|
export interface TraceStep {
|
|
4
6
|
action: string;
|
|
@@ -10,7 +12,10 @@ export interface TraceRecord {
|
|
|
10
12
|
steps: TraceStep[];
|
|
11
13
|
outcome: 'success' | 'failure' | 'partial';
|
|
12
14
|
}
|
|
13
|
-
/**
|
|
15
|
+
/**
|
|
16
|
+
* Render a trace record as agent-readable markdown: `Task:`, `Outcome:`, then numbered `Steps:` with each observation
|
|
17
|
+
* on an arrow line (omitted if empty).
|
|
18
|
+
*/
|
|
14
19
|
export declare function renderTraceContent(rec: TraceRecord): string;
|
|
15
20
|
/**
|
|
16
21
|
* Parse a JSON string into an array of TraceStep. Throws on invalid shape.
|
|
@@ -1,8 +1,13 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* Trace-layer helpers. A trace is a `MemoryEntry` with `layer === 'trace'`: ordered agent actions and their outcome,
|
|
3
|
+
* stored as markdown in `content`
|
|
2
4
|
* (`renderTraceContent` formats it). */
|
|
3
5
|
import { isJsonString, isJsonObject } from '../util/json.js';
|
|
4
6
|
import { errorMessage } from '../util/log.js';
|
|
5
|
-
/**
|
|
7
|
+
/**
|
|
8
|
+
* Render a trace record as agent-readable markdown: `Task:`, `Outcome:`, then numbered `Steps:` with each observation
|
|
9
|
+
* on an arrow line (omitted if empty).
|
|
10
|
+
*/
|
|
6
11
|
export function renderTraceContent(rec) {
|
|
7
12
|
const lines = [];
|
|
8
13
|
lines.push(`Task: ${rec.task}`);
|
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
import { isRecallBoostAblated, strengthAblation } from '../core/ablation.js';
|
|
2
2
|
import { Layer, createMemory, markRetrieved } from '../core/memory.js';
|
|
3
|
-
import {
|
|
4
|
-
import { rejectionDigest } from '../store/rejection.js';
|
|
3
|
+
import { rejectionDigest } from '../core/rejection-digest.js';
|
|
5
4
|
import { sampleForReplay } from './replay.js';
|
|
6
5
|
import { renderTraceContent } from './trace.js';
|
|
7
|
-
import {
|
|
8
|
-
import { reportAuditWriteFailure } from '../store/audit.js';
|
|
6
|
+
import { envTenant } from '../util/env.js';
|
|
9
7
|
import { commonDerivationScope } from '../core/recall-scope.js';
|
|
10
8
|
import { log } from '../util/log.js';
|
|
11
9
|
import { REPLAY_COUNT_DEFAULT } from './run.js';
|
|
12
10
|
import { isJsonString } from '../util/json.js';
|
|
13
11
|
import { DAY_MS } from '../util/time.js';
|
|
14
|
-
// 1.4. Auto-promote complete sessions to traces: each session in the window with a `session_complete` event and no
|
|
12
|
+
// 1.4. Auto-promote complete sessions to traces: each session in the window with a `session_complete` event and no
|
|
13
|
+
// trace (idempotent via source_session_id)
|
|
15
14
|
// is rendered as markdown and persisted as a Layer.Trace memory, which inherits decay, search, replay and physics.
|
|
16
15
|
export function promoteSessionTraces(run) {
|
|
17
16
|
const { result } = run;
|
|
@@ -22,8 +21,8 @@ export function promoteSessionTraces(run) {
|
|
|
22
21
|
const sinceMs = run.now.getTime() - windowDays * DAY_MS;
|
|
23
22
|
// Auto-trace runs single-tenant (the env-resolved tenant); consolidating
|
|
24
23
|
// every tenant needs a per-tenant loop layered on top of this.
|
|
25
|
-
const consolidationTenant =
|
|
26
|
-
const promotable =
|
|
24
|
+
const consolidationTenant = envTenant();
|
|
25
|
+
const promotable = run.store.promotableSessions(consolidationTenant, sinceMs);
|
|
27
26
|
for (const session of promotable) {
|
|
28
27
|
const built = sessionTrace(run, consolidationTenant, session.session_id);
|
|
29
28
|
if (!built)
|
|
@@ -39,7 +38,8 @@ export function promoteSessionTraces(run) {
|
|
|
39
38
|
result.details.push(` 🧬 promoted trace ${trace.id} from session ${session.session_id} (${outcome})`);
|
|
40
39
|
}
|
|
41
40
|
if (result.promotedTraces > 0) {
|
|
42
|
-
result.details.push(` 🧬 promoted ${result.promotedTraces} trace${result.promotedTraces === 1 ? '' : 's'} from completed
|
|
41
|
+
result.details.push(` 🧬 promoted ${result.promotedTraces} trace${result.promotedTraces === 1 ? '' : 's'} from completed ` +
|
|
42
|
+
`session${result.promotedTraces === 1 ? '' : 's'}`);
|
|
43
43
|
}
|
|
44
44
|
if (tracesSkippedRejected > 0) {
|
|
45
45
|
log.warn(`consolidate: skipped ${tracesSkippedRejected} auto-promoted trace(s) whose content matches a rejected value`);
|
|
@@ -48,9 +48,9 @@ export function promoteSessionTraces(run) {
|
|
|
48
48
|
/** The trace a completed session renders to, or null when it already has one or cannot be promoted. */
|
|
49
49
|
function sessionTrace(run, consolidationTenant, sessionId) {
|
|
50
50
|
// Idempotency: skip if a trace for this session already exists.
|
|
51
|
-
if (
|
|
51
|
+
if (run.store.traceExists(consolidationTenant, sessionId))
|
|
52
52
|
return null;
|
|
53
|
-
const events =
|
|
53
|
+
const events = run.store.sessionEvents(consolidationTenant, {
|
|
54
54
|
session_id: sessionId,
|
|
55
55
|
limit: 1000,
|
|
56
56
|
});
|
|
@@ -70,8 +70,8 @@ function sessionTrace(run, consolidationTenant, sessionId) {
|
|
|
70
70
|
.map((e) => ({ action: e.content, observation: '' }));
|
|
71
71
|
const trace = createMemory(renderTraceContent({ task: summary, steps, outcome }), {
|
|
72
72
|
layer: Layer.Trace,
|
|
73
|
-
|
|
74
|
-
|
|
73
|
+
traceOutcome: outcome,
|
|
74
|
+
sourceSessionId: sessionId,
|
|
75
75
|
tags: ['auto-promoted'],
|
|
76
76
|
source: 'auto-promote',
|
|
77
77
|
scope: sessionScope.scope,
|
|
@@ -103,32 +103,29 @@ function sessionEnding(events) {
|
|
|
103
103
|
// sleep; check the tombstone under the entry's own stamped tenantId, never a guessed one.
|
|
104
104
|
function traceRejected(run, trace, sessionId) {
|
|
105
105
|
const traceDigest = rejectionDigest(trace.content);
|
|
106
|
-
const tombstone = run.tombstones.find(trace.
|
|
106
|
+
const tombstone = run.tombstones.find(trace.tenant_id, traceDigest);
|
|
107
107
|
if (!tombstone)
|
|
108
108
|
return false;
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
});
|
|
120
|
-
}
|
|
121
|
-
catch (error) {
|
|
122
|
-
reportAuditWriteFailure('reject_refusal', String(error));
|
|
123
|
-
}
|
|
109
|
+
run.tombstones.auditOrCount({
|
|
110
|
+
tenantId: trace.tenant_id,
|
|
111
|
+
actor: 'sleep',
|
|
112
|
+
op: 'reject_refusal',
|
|
113
|
+
metadata: {
|
|
114
|
+
digest: traceDigest,
|
|
115
|
+
reason: tombstone.reason,
|
|
116
|
+
sourceSessionId: sessionId,
|
|
117
|
+
},
|
|
118
|
+
});
|
|
124
119
|
return true;
|
|
125
120
|
}
|
|
126
|
-
// 1.5. Replay pass: rehearse high-value survivors by sampling N memories weighted by outcome, valence, under-rehearsal
|
|
121
|
+
// 1.5. Replay pass: rehearse high-value survivors by sampling N memories weighted by outcome, valence, under-rehearsal
|
|
122
|
+
// and idle time,
|
|
127
123
|
// then applying the `markRetrieved` strengthening, so important memories don't fade.
|
|
128
124
|
export function replayPass(run) {
|
|
129
125
|
const { survivors, now } = run;
|
|
130
126
|
const replayCount = run.config.replay?.count ?? REPLAY_COUNT_DEFAULT;
|
|
131
|
-
// EVAL-ONLY ablation (see ablation.ts): replay rehearsal is recall strengthening, so the strengthen-off arm silences
|
|
127
|
+
// EVAL-ONLY ablation (see ablation.ts): replay rehearsal is recall strengthening, so the strengthen-off arm silences
|
|
128
|
+
// the whole pass;
|
|
132
129
|
// persisting unmutated entries anyway would still refresh updated_at and mirrors.
|
|
133
130
|
if (!(replayCount > 0 && survivors.length > 0 && !isRecallBoostAblated()))
|
|
134
131
|
return;
|
package/dist/core/ablation.d.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
1
|
+
/**
|
|
2
|
+
* EVAL-ONLY ablation switches (HIPPO_ABLATE_*, HIPPO_EVAL_RECENCY_DAYS, HIPPO_FAKE_NOW): each cuts ONE mechanism
|
|
3
|
+
* (outcome also replayPriority bias).
|
|
4
|
+
* Not a production surface. Env is read once per process; tests that mutate these vars MUST call
|
|
5
|
+
* _resetAblationCacheForTests() in beforeEach AND afterEach. See
|
|
3
6
|
* docs/ARCHITECTURE.md#srccoreablationts. */
|
|
4
7
|
/** The three switches strength scoring honours, resolved by the entry layer and handed to core in DecayOptions. */
|
|
5
8
|
export interface StrengthAblation {
|
|
@@ -18,7 +21,10 @@ export declare function isOutcomeFastAblated(): boolean;
|
|
|
18
21
|
export declare function isRecencyAblated(): boolean;
|
|
19
22
|
/** HIPPO_EVAL_RECENCY_DAYS when it is a positive number, else null (callers keep their default). */
|
|
20
23
|
export declare function evalRecencyScaleDays(): number | null;
|
|
21
|
-
/**
|
|
24
|
+
/**
|
|
25
|
+
* The default `now` for lifecycle computations: HIPPO_FAKE_NOW when set and parseable, else the real clock; an explicit
|
|
26
|
+
* `now` parameter always wins.
|
|
27
|
+
*/
|
|
22
28
|
export declare function evalNow(): Date;
|
|
23
29
|
/** Test-only. See module JSDoc: call in BOTH beforeEach AND afterEach. */
|
|
24
30
|
export declare function _resetAblationCacheForTests(): void;
|