hippo-memory 2.0.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/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 -6
- package/dist/api/{audit.d.ts → auth/audit.d.ts} +18 -16
- package/dist/api/{audit.js → auth/audit.js} +11 -11
- package/dist/api/{auth.d.ts → auth/auth.d.ts} +19 -15
- package/dist/api/{auth.js → auth/auth.js} +46 -29
- package/dist/api/{quarantine.d.ts → auth/quarantine.d.ts} +8 -7
- package/dist/api/{quarantine.js → auth/quarantine.js} +8 -8
- 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 +10 -2
- package/dist/api/context-render.js +14 -7
- package/dist/api/context-select.d.ts +4 -1
- package/dist/api/context-select.js +23 -14
- package/dist/api/context-types.d.ts +38 -12
- package/dist/api/context.d.ts +8 -5
- package/dist/api/context.js +112 -57
- 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} +22 -15
- package/dist/api/memories/memories.d.ts +27 -0
- package/dist/api/{memories.js → memories/memories.js} +16 -21
- package/dist/api/memories/outcome.d.ts +22 -0
- package/dist/api/{outcome.js → memories/outcome.js} +14 -8
- package/dist/api/memories/promote.d.ts +40 -0
- package/dist/api/{promote.js → memories/promote.js} +35 -22
- 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} +16 -11
- package/dist/api/{remember-local.js → memories/remember-local.js} +34 -20
- package/dist/api/{remember.d.ts → memories/remember.d.ts} +19 -13
- package/dist/api/{remember.js → memories/remember.js} +42 -26
- 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 -8
- 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 -4
- package/dist/api/objects/predictions.d.ts +11 -0
- package/dist/api/{predictions.js → objects/predictions.js} +7 -6
- 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 +32 -19
- package/dist/api/prompt-hook.js +65 -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} +176 -92
- package/dist/api/recall/recall.d.ts +6 -0
- package/dist/api/{recall.js → recall/recall.js} +101 -60
- 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 -70
- package/dist/api/{recall-types.js → recall/types.js} +1 -1
- package/dist/api/session-end.d.ts +16 -12
- package/dist/api/session-end.js +46 -30
- 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} +51 -43
- 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 +28 -7
- 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 +33 -14
- 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 +15 -4
- package/dist/capture/compaction-spool.js +64 -17
- 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 +45 -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 +23 -23
- package/dist/cli/auth.js +19 -27
- 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 -4
- package/dist/cli/client.js +43 -13
- package/dist/cli/compact-resume-payload.d.ts +4 -1
- package/dist/cli/compact-resume-payload.js +12 -5
- package/dist/cli/context.js +42 -17
- package/dist/cli/continuity.d.ts +5 -5
- package/dist/cli/continuity.js +90 -107
- package/dist/cli/curate.d.ts +4 -3
- package/dist/cli/curate.js +46 -68
- package/dist/cli/dag.d.ts +1 -1
- package/dist/cli/dag.js +14 -17
- package/dist/cli/decisions.js +27 -26
- 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 +31 -9
- package/dist/cli/hook-runtime.js +40 -15
- package/dist/cli/incidents.d.ts +1 -1
- package/dist/cli/incidents.js +25 -25
- package/dist/cli/init.js +26 -11
- 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 +4 -4
- package/dist/cli/object-verbs.js +10 -13
- 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 +15 -19
- package/dist/cli/print.js +4 -2
- package/dist/cli/projects.js +21 -11
- package/dist/cli/quality-repair-once.js +5 -4
- package/dist/cli/recall.js +129 -93
- package/dist/cli/refine-llm.d.ts +15 -4
- package/dist/cli/refine-llm.js +16 -7
- package/dist/cli/remember.js +46 -50
- package/dist/cli/scheduler.d.ts +4 -1
- package/dist/cli/scheduler.js +9 -5
- package/dist/cli/serve.js +22 -17
- package/dist/cli/session-hooks.d.ts +2 -2
- package/dist/cli/session-hooks.js +87 -50
- package/dist/cli/setup.js +54 -32
- package/dist/cli/shared.d.ts +3 -1
- package/dist/cli/shared.js +24 -9
- 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 +14 -6
- 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 +1 -1
- package/dist/cli/transfer.js +71 -75
- package/dist/cli/verbs/memory.js +8 -6
- package/dist/cli/verbs/objects.js +10 -4
- package/dist/cli/versioned-verbs.d.ts +8 -7
- package/dist/cli/versioned-verbs.js +31 -21
- package/dist/cli.js +13 -16
- package/dist/connectors/dlq.d.ts +6 -6
- package/dist/connectors/dlq.js +12 -8
- 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 -5
- 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 -6
- 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 -6
- 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 +34 -23
- package/dist/connectors/ingest.d.ts +5 -3
- package/dist/connectors/ingest.js +3 -4
- 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 -6
- 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 -5
- 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 -6
- 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 +23 -9
- package/dist/consolidate/dag-summary.js +2 -1
- package/dist/consolidate/dag.d.ts +10 -5
- package/dist/consolidate/dag.js +37 -36
- package/dist/consolidate/decay.js +19 -6
- package/dist/consolidate/dedupe.d.ts +14 -5
- package/dist/consolidate/dedupe.js +27 -16
- 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 +36 -13
- package/dist/consolidate/merge.d.ts +4 -1
- package/dist/consolidate/merge.js +42 -32
- 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 +41 -38
- package/dist/consolidate/trace.d.ts +7 -2
- package/dist/consolidate/trace.js +7 -2
- package/dist/consolidate/traces.js +26 -29
- 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 +24 -14
- 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 +21 -16
- 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 +84 -27
- package/dist/core/memory.js +73 -29
- 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 +37 -11
- package/dist/core/physics.js +55 -20
- package/dist/core/project-identity.d.ts +34 -17
- package/dist/core/project-identity.js +33 -17
- 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.js +13 -2
- package/dist/dashboard/dashboard-snapshot.d.ts +2 -2
- package/dist/dashboard/dashboard-snapshot.js +4 -4
- package/dist/dashboard/dashboard.js +6 -3
- 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 -3
- package/dist/db/connect.js +8 -3
- 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 +26 -13
- 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/v12.js +2 -1
- package/dist/db/migrations/v14.js +2 -1
- 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 -4
- package/dist/db/physics-state.js +13 -20
- 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 +19 -5
- package/dist/db/request-stores.js +14 -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 +34 -14
- package/dist/db/wal-checkpointer.d.ts +2 -1
- package/dist/db/wal-checkpointer.js +19 -7
- package/dist/doctor.d.ts +4 -1
- package/dist/doctor.js +121 -39
- package/dist/embeddings/local.d.ts +8 -4
- package/dist/embeddings/local.js +9 -5
- package/dist/embeddings/provider.d.ts +19 -10
- package/dist/embeddings/provider.js +31 -17
- 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 +19 -6
- package/dist/entry/store-kit.js +6 -4
- 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 +16 -6
- 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 +69 -34
- 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 +8 -7
- 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 +2 -2
- package/dist/importers/vault.js +43 -27
- package/dist/index.d.ts +32 -6
- package/dist/index.js +25 -7
- package/dist/learn/autolearn.d.ts +17 -6
- package/dist/learn/autolearn.js +53 -24
- 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 +16 -9
- 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 -7
- package/dist/learn/invalidation.js +56 -27
- 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 +18 -14
- 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 +57 -74
- 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 +52 -21
- 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 +9 -6
- 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 +10 -5
- package/dist/search/embed-memories.js +62 -36
- package/dist/search/engine.d.ts +4 -1
- package/dist/search/engine.js +6 -2
- 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 +9 -3
- package/dist/server/auth.d.ts +18 -14
- package/dist/server/auth.js +69 -38
- package/dist/server/boot.d.ts +3 -1
- package/dist/server/boot.js +95 -56
- package/dist/server/client-ip.d.ts +11 -4
- package/dist/server/client-ip.js +27 -10
- 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 +547 -93
- 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 -19
- 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 +41 -19
- package/dist/server/tls.d.ts +4 -1
- package/dist/server/tls.js +13 -5
- package/dist/server/types.d.ts +38 -26
- package/dist/server/validation.d.ts +4 -1
- package/dist/server/validation.js +22 -9
- package/dist/server.d.ts +15 -10
- package/dist/server.js +32 -12
- package/dist/sharing/global-store.d.ts +5 -10
- package/dist/sharing/global-store.js +8 -43
- package/dist/sharing/global-sync.d.ts +3 -1
- package/dist/sharing/global-sync.js +16 -6
- 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 +19 -12
- package/dist/sharing/share.d.ts +8 -4
- package/dist/sharing/share.js +39 -15
- package/dist/store/ambient.js +9 -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 +75 -36
- 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 +93 -60
- 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 +95 -32
- package/dist/store/compactions.js +35 -15
- package/dist/store/conflicts.d.ts +9 -4
- package/dist/store/conflicts.js +100 -45
- package/dist/store/connectors/dlq.d.ts +17 -5
- package/dist/store/connectors/dlq.js +56 -5
- package/dist/store/connectors/event-log.d.ts +111 -2
- package/dist/store/connectors/event-log.js +2 -1
- package/dist/store/connectors/github.d.ts +6 -3
- package/dist/store/connectors/github.js +24 -40
- package/dist/store/connectors/slack.d.ts +2 -1
- package/dist/store/connectors/slack.js +25 -37
- package/dist/store/dashboard-reads.d.ts +7 -3
- package/dist/store/dashboard-reads.js +32 -11
- package/dist/store/delete-and-batch.d.ts +17 -11
- package/dist/store/delete-and-batch.js +67 -26
- package/dist/store/delivery-recorder.d.ts +8 -5
- package/dist/store/delivery-recorder.js +70 -32
- package/dist/store/descendant-page.d.ts +2 -1
- package/dist/store/descendant-page.js +24 -9
- 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 +40 -18
- package/dist/store/embeddings/index.d.ts +13 -9
- package/dist/store/embeddings/index.js +19 -12
- package/dist/store/entry-reads.d.ts +49 -20
- package/dist/store/entry-reads.js +181 -66
- package/dist/store/entry-row.d.ts +10 -6
- package/dist/store/entry-row.js +17 -12
- package/dist/store/entry-writes.d.ts +22 -10
- package/dist/store/entry-writes.js +41 -14
- 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 +8 -10
- 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 +24 -15
- package/dist/store/graph-rows.d.ts +41 -3
- package/dist/store/graph-rows.js +10 -7
- package/dist/store/graph-view-rows.js +14 -7
- package/dist/store/graph-writes.d.ts +16 -10
- package/dist/store/graph-writes.js +59 -36
- package/dist/store/handoffs.d.ts +4 -4
- package/dist/store/handoffs.js +40 -19
- 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 +3 -1
- package/dist/store/index.js +1 -0
- 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 +88 -16
- package/dist/store/narrow.d.ts +6 -0
- package/dist/store/narrow.js +11 -0
- package/dist/store/open.d.ts +4 -2
- package/dist/store/open.js +18 -9
- 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 +215 -229
- 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 +126 -63
- package/dist/store/rejected-values.d.ts +15 -10
- package/dist/store/rejected-values.js +33 -12
- 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 +18 -11
- package/dist/store/rule-sql.d.ts +6 -4
- package/dist/store/rule-sql.js +16 -9
- package/dist/store/search-rows.d.ts +14 -9
- package/dist/store/search-rows.js +48 -23
- 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 +9 -4
- 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 +6 -3
- 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 +7 -1
- package/dist/store/sqlite/held-connection.js +34 -7
- package/dist/store/sqlite/last-recall-group.d.ts +4 -2
- package/dist/store/sqlite/last-recall-group.js +9 -4
- 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.js +2 -1
- 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 +84 -33
- 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 -11
- package/dist/store/sqlite/store.js +84 -11
- 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 +19 -12
- package/dist/store/summaries.js +36 -21
- 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 +6 -3
- 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 +24 -10
- 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 +4 -1
- package/dist/util/anthropic-messages.js +14 -5
- package/dist/util/atomic-write.d.ts +4 -2
- package/dist/util/atomic-write.js +25 -14
- 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 +16 -4
- package/dist/util/env.js +78 -25
- 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 +11 -3
- package/dist/util/request-scope.js +13 -4
- 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 +3 -1
- package/dist/util/spawn-argv.js +13 -4
- 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/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 +2 -1
- package/scripts/postinstall.cjs +3 -1
- 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 -8
- package/dist/api/learn.js +0 -125
- package/dist/api/memories.d.ts +0 -25
- package/dist/api/objects.d.ts +0 -9
- package/dist/api/outcome.d.ts +0 -19
- package/dist/api/predictions.d.ts +0 -11
- package/dist/api/promote.d.ts +0 -36
- package/dist/api/recall-core.d.ts +0 -4
- package/dist/api/recall-core.js +0 -125
- 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 -11
- 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 -4
- package/dist/store/sqlite/local.js +0 -8
|
@@ -4,19 +4,22 @@ import { jaccardMinShared, overlapPartners } from './overlap-index.js';
|
|
|
4
4
|
import { compareEntryIdentity } from '../core/compare.js';
|
|
5
5
|
import { duplicateKey, mergedText } from '../util/same-text.js';
|
|
6
6
|
import { successorAfterRetirement } from '../core/merged-row.js';
|
|
7
|
-
import { rejectionDigest } from '../
|
|
8
|
-
import { reportAuditWriteFailure } from '../store/audit.js';
|
|
7
|
+
import { rejectionDigest } from '../core/rejection-digest.js';
|
|
9
8
|
import { derivationScope, derivationPartitionKey } from '../core/recall-scope.js';
|
|
10
9
|
import { jaccardSets } from './conflicts.js';
|
|
11
10
|
import { keptAsWritten } from './run.js';
|
|
12
11
|
import { isReusable } from '../core/memory-quality.js';
|
|
13
12
|
const MERGE_OVERLAP_THRESHOLD = 0.35; // Jaccard similarity for "related"
|
|
14
13
|
const MERGE_MIN_CLUSTER = 2; // minimum cluster size to merge
|
|
15
|
-
|
|
14
|
+
// with MERGE_MAX_CHARS, keeps a merged row near 500 tokens, a third of the 1,500-token context budget
|
|
15
|
+
const MERGE_MAX_SOURCES = 5;
|
|
16
16
|
const MERGE_MAX_CHARS = 2000; // total source text; sources past either cap stay unmerged and keep their half-life
|
|
17
|
-
// Half-life scale for merged source episodics. Demote via half_life_days: calculateStrength() recomputes live strength
|
|
17
|
+
// Half-life scale for merged source episodics. Demote via half_life_days: calculateStrength() recomputes live strength
|
|
18
|
+
// and never reads the stored field,
|
|
18
19
|
// so a stored-strength write is inert for ranking and overwritten by the next decay pass.
|
|
19
20
|
const MERGE_SOURCE_HALF_LIFE_FACTOR = 0.3;
|
|
21
|
+
// deriveHalfLife grants its high-fit bonus only above 0.7, so a rollup at 0.7 gets none.
|
|
22
|
+
const MERGED_SCHEMA_FIT = 0.7;
|
|
20
23
|
export function retireHeldTexts(run) {
|
|
21
24
|
const { survivors } = run;
|
|
22
25
|
const byId = new Map(run.all.map((e) => [e.id, e]));
|
|
@@ -118,8 +121,10 @@ function mergeCluster(run, partition, cluster, related, used) {
|
|
|
118
121
|
run.pendingWrites.push(semantic);
|
|
119
122
|
run.units.push([semantic.id, ...cluster.map((e) => e.id)]);
|
|
120
123
|
result.semanticCreated++;
|
|
121
|
-
// Scale half_life_days so merged sources decay sooner but stay recoverable; ranking is unchanged on purpose
|
|
122
|
-
//
|
|
124
|
+
// Scale half_life_days so merged sources decay sooner but stay recoverable; ranking is unchanged on purpose
|
|
125
|
+
// (demoting children regresses QA).
|
|
126
|
+
// Mutate in place: `cluster` shares references with `survivors`, and the later detectConflicts(survivors) must see
|
|
127
|
+
// the post-demotion half-life.
|
|
123
128
|
demoteMergedSources(run, cluster);
|
|
124
129
|
}
|
|
125
130
|
return true;
|
|
@@ -131,8 +136,8 @@ function semanticSummary(mergedContent, cluster, partition, baseHalfLifeDays) {
|
|
|
131
136
|
...createMemory(mergedContent, {
|
|
132
137
|
layer: Layer.Semantic,
|
|
133
138
|
tags: allTags,
|
|
134
|
-
|
|
135
|
-
|
|
139
|
+
emotionalValence: maxValence,
|
|
140
|
+
schemaFit: MERGED_SCHEMA_FIT,
|
|
136
141
|
source: 'consolidation',
|
|
137
142
|
confidence: 'inferred',
|
|
138
143
|
tenantId: partition.tenantId,
|
|
@@ -150,43 +155,45 @@ function demoteMergedSources(run, cluster) {
|
|
|
150
155
|
run.pendingWrites.push(e);
|
|
151
156
|
}
|
|
152
157
|
}
|
|
153
|
-
// mergeContents is deterministic, so a rollup a human already rejected would regenerate each cycle and
|
|
154
|
-
//
|
|
158
|
+
// mergeContents is deterministic, so a rollup a human already rejected would regenerate each cycle and
|
|
159
|
+
// batchWriteAndDelete's guard bypass would re-assert it;
|
|
160
|
+
// this producer-side check makes that bypass safe. A hit skips the whole cluster (no demote, no delete) so a later
|
|
161
|
+
// sleep can retry.
|
|
155
162
|
function mergeRejected(run, semantic, cluster, related, used) {
|
|
156
163
|
const { tombstones } = run;
|
|
157
164
|
const newDigest = rejectionDigest(semantic.content);
|
|
158
|
-
|
|
165
|
+
// tombstones from older releases hold this format's digest
|
|
166
|
+
const oldDigest = rejectionDigest(legacyMergeContents(related));
|
|
159
167
|
const newHit = tombstones.find(semantic.tenant_id, newDigest);
|
|
160
168
|
const tombstone = newHit ?? tombstones.find(semantic.tenant_id, oldDigest);
|
|
161
169
|
const mergeDigest = newHit ? newDigest : oldDigest;
|
|
162
170
|
if (!tombstone)
|
|
163
171
|
return false;
|
|
164
|
-
// Still mark used: these members are not re-tried against a different cluster in this pass; the next sleep
|
|
165
|
-
|
|
172
|
+
// Still mark used: these members are not re-tried against a different cluster in this pass; the next sleep
|
|
173
|
+
// re-clusters them fresh.
|
|
174
|
+
// the old format digested the uncapped list, so rows past the cap were rejected too
|
|
175
|
+
const rejected = newHit ? cluster : related;
|
|
166
176
|
for (const e of rejected)
|
|
167
177
|
used.add(e.id);
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
});
|
|
179
|
-
}
|
|
180
|
-
catch (error) {
|
|
181
|
-
reportAuditWriteFailure('reject_refusal', String(error));
|
|
182
|
-
}
|
|
178
|
+
tombstones.auditOrCount({
|
|
179
|
+
tenantId: semantic.tenant_id,
|
|
180
|
+
actor: 'sleep',
|
|
181
|
+
op: 'reject_refusal',
|
|
182
|
+
metadata: {
|
|
183
|
+
digest: mergeDigest,
|
|
184
|
+
reason: tombstone.reason,
|
|
185
|
+
sourceIds: rejected.map((e) => e.id),
|
|
186
|
+
},
|
|
187
|
+
});
|
|
183
188
|
return true;
|
|
184
189
|
}
|
|
185
190
|
// Helpers
|
|
186
191
|
function mergeContents(entries) {
|
|
187
|
-
// Each distinct text goes in once and in full (the merge demotes every source), one bullet with its lines indented,
|
|
188
|
-
//
|
|
189
|
-
|
|
192
|
+
// Each distinct text goes in once and in full (the merge demotes every source), one bullet with its lines indented,
|
|
193
|
+
// so heldTextKeys can read it back.
|
|
194
|
+
// Newest first says which version is current; compareEntryIdentity settles ties, so the row and its rejection digest
|
|
195
|
+
// depend only on the sources.
|
|
196
|
+
const sorted = [...entries].sort((a, b) => Date.parse(b.created) - Date.parse(a.created) || compareEntryIdentity(a, b));
|
|
190
197
|
const texts = new Map();
|
|
191
198
|
for (const e of sorted) {
|
|
192
199
|
if (!texts.has(duplicateKey(e.content)))
|
|
@@ -213,7 +220,10 @@ function pickStrongestValence(entries) {
|
|
|
213
220
|
}
|
|
214
221
|
return 'neutral';
|
|
215
222
|
}
|
|
216
|
-
/**
|
|
223
|
+
/**
|
|
224
|
+
* Maps i to each j > i, ascending, whose text overlap with i reaches the merge threshold; every text needs at least one
|
|
225
|
+
* token.
|
|
226
|
+
*/
|
|
217
227
|
export function mergePartners(contents) {
|
|
218
228
|
const sets = contents.map((text) => new Set(tokenize(text)));
|
|
219
229
|
const candidatesOf = overlapPartners(sets, jaccardMinShared(MERGE_OVERLAP_THRESHOLD));
|
|
@@ -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,38 +122,41 @@ 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) => {
|
|
@@ -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}`);
|