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,8 +1,11 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
1
|
+
/**
|
|
2
|
+
* Moves a store's memories to a new default half-life: only memories still on the old base are rescaled
|
|
3
|
+
* (`deriveHalfLife(from, entry)` plus recall bonus).
|
|
4
|
+
* Memories hippo shortened since, or with their own fixed half-life, keep theirs; rescales are audit-logged and `meta`
|
|
5
|
+
* records the base, so it runs once.
|
|
6
|
+
*/
|
|
3
7
|
import { type MemoryEntry } from '../core/memory.js';
|
|
4
|
-
import {
|
|
5
|
-
export { HALF_LIFE_BASE_META_KEY, LEGACY_TYPED_HALF_LIFE };
|
|
8
|
+
import type { Consolidation } from '../store/port.js';
|
|
6
9
|
/** What {@link migrateDefaultHalfLife} did, or would do under `dryRun`. */
|
|
7
10
|
export interface HalfLifeMigrationResult {
|
|
8
11
|
from: number;
|
|
@@ -22,13 +25,20 @@ type HalfLifeFields = Pick<MemoryEntry, 'half_life_days' | 'tags' | 'schema_fit'
|
|
|
22
25
|
export declare function halfLifeRecallBonus(entry: HalfLifeFields, written: number): number | null;
|
|
23
26
|
/** The entries to rescale from `from` to `to`, as copies that keep their recall bonus. Pure. */
|
|
24
27
|
export declare function planHalfLifeMigration(entries: readonly MemoryEntry[], from: number, to: number): MemoryEntry[];
|
|
25
|
-
/**
|
|
28
|
+
/**
|
|
29
|
+
* Memories of decisions, incidents and other objects still on the flat 90 days, as copies on `to` that keep their
|
|
30
|
+
* recall bonus. Pure.
|
|
31
|
+
*/
|
|
26
32
|
export declare function planTypedHalfLifeMigration(entries: readonly MemoryEntry[], to: number): MemoryEntry[];
|
|
27
33
|
/** The base this store's memories are on. */
|
|
28
|
-
export declare function storeHalfLifeBase(
|
|
29
|
-
/**
|
|
30
|
-
|
|
34
|
+
export declare function storeHalfLifeBase(store: Consolidation): number;
|
|
35
|
+
/**
|
|
36
|
+
* Move the store's memories, and those of objects on the old flat 90 days, from their recorded base to `to`, once;
|
|
37
|
+
* `dryRun` writes nothing.
|
|
38
|
+
*/
|
|
39
|
+
export declare function migrateDefaultHalfLife(store: Consolidation, to: number, opts?: {
|
|
31
40
|
dryRun?: boolean;
|
|
32
41
|
actor?: string;
|
|
33
42
|
}): HalfLifeMigrationResult;
|
|
43
|
+
export {};
|
|
34
44
|
//# sourceMappingURL=half-life-migration.d.ts.map
|
|
@@ -1,10 +1,19 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Moves a store's memories to a new default half-life: only memories still on the old base are rescaled
|
|
3
|
+
* (`deriveHalfLife(from, entry)` plus recall bonus).
|
|
4
|
+
* Memories hippo shortened since, or with their own fixed half-life, keep theirs; rescales are audit-logged and `meta`
|
|
5
|
+
* records the base, so it runs once.
|
|
6
|
+
*/
|
|
7
|
+
import { deriveHalfLife, LEGACY_TYPED_HALF_LIFE } from '../core/memory.js';
|
|
8
|
+
const TYPED_SOURCES = new Set([
|
|
9
|
+
'decision',
|
|
10
|
+
'incident',
|
|
11
|
+
'process',
|
|
12
|
+
'policy',
|
|
13
|
+
'skill',
|
|
14
|
+
'project_brief',
|
|
15
|
+
'customer_note',
|
|
16
|
+
]);
|
|
8
17
|
/** Recall bonus over `written`, the half-life `entry` got at write, or null when off it; each recall added 2 days. */
|
|
9
18
|
export function halfLifeRecallBonus(entry, written) {
|
|
10
19
|
if (entry.superseded_by || entry.tags.includes('invalidated') || entry.tags.includes('superseded'))
|
|
@@ -22,7 +31,10 @@ export function planHalfLifeMigration(entries, from, to) {
|
|
|
22
31
|
return bonus === null ? [] : [{ ...e, half_life_days: deriveHalfLife(to, e) + bonus }];
|
|
23
32
|
});
|
|
24
33
|
}
|
|
25
|
-
/**
|
|
34
|
+
/**
|
|
35
|
+
* Memories of decisions, incidents and other objects still on the flat 90 days, as copies on `to` that keep their
|
|
36
|
+
* recall bonus. Pure.
|
|
37
|
+
*/
|
|
26
38
|
export function planTypedHalfLifeMigration(entries, to) {
|
|
27
39
|
return entries.flatMap((e) => {
|
|
28
40
|
const bonus = TYPED_SOURCES.has(e.source) ? halfLifeRecallBonus(e, LEGACY_TYPED_HALF_LIFE) : null;
|
|
@@ -31,13 +43,16 @@ export function planTypedHalfLifeMigration(entries, to) {
|
|
|
31
43
|
});
|
|
32
44
|
}
|
|
33
45
|
/** The base this store's memories are on. */
|
|
34
|
-
export function storeHalfLifeBase(
|
|
35
|
-
return
|
|
46
|
+
export function storeHalfLifeBase(store) {
|
|
47
|
+
return store.halfLifeBase();
|
|
36
48
|
}
|
|
37
|
-
/**
|
|
38
|
-
|
|
49
|
+
/**
|
|
50
|
+
* Move the store's memories, and those of objects on the old flat 90 days, from their recorded base to `to`, once;
|
|
51
|
+
* `dryRun` writes nothing.
|
|
52
|
+
*/
|
|
53
|
+
export function migrateDefaultHalfLife(store, to, opts = {}) {
|
|
39
54
|
const dryRun = opts.dryRun ?? false;
|
|
40
|
-
const { from, outcome } = moveHalfLives(
|
|
55
|
+
const { from, outcome } = store.moveHalfLives(to, { dryRun, actor: opts.actor ?? 'system' }, (rows) => {
|
|
41
56
|
const { basePlan, typedPlan } = planMoves(rows, to);
|
|
42
57
|
const plan = [...basePlan, ...typedPlan];
|
|
43
58
|
return {
|
|
@@ -51,7 +66,15 @@ export function migrateDefaultHalfLife(hippoRoot, to, opts = {}) {
|
|
|
51
66
|
};
|
|
52
67
|
});
|
|
53
68
|
const moved = outcome ?? { rescaled: 0, typed: 0, kept: 0, halfLives: new Map() };
|
|
54
|
-
return {
|
|
69
|
+
return {
|
|
70
|
+
from,
|
|
71
|
+
to,
|
|
72
|
+
rescaled: moved.rescaled,
|
|
73
|
+
typed: moved.typed,
|
|
74
|
+
kept: moved.kept,
|
|
75
|
+
dryRun,
|
|
76
|
+
halfLives: moved.halfLives,
|
|
77
|
+
};
|
|
55
78
|
}
|
|
56
79
|
/** The base move and the move of object memories, planned from one read of the store. Pure. */
|
|
57
80
|
function planMoves(rows, to) {
|
|
@@ -59,13 +82,20 @@ function planMoves(rows, to) {
|
|
|
59
82
|
const objects = objectMemoryIds(rows.objectRows);
|
|
60
83
|
const losers = conflictLosers(rows.conflictAudits, rows.resolvedConflicts);
|
|
61
84
|
const copies = new Set(all.flatMap((e) => (e.superseded_by ? [e.superseded_by] : [])));
|
|
62
|
-
// Provenance before shape: an object's memory came from its writer, a supersede copy from the base (it keeps the
|
|
63
|
-
|
|
64
|
-
const
|
|
85
|
+
// Provenance before shape: an object's memory came from its writer, a supersede copy from the base (it keeps the
|
|
86
|
+
// source). Shape decides the rest.
|
|
87
|
+
const objectWritten = (e) => objects.all.has(e.id) ||
|
|
88
|
+
(!copies.has(e.id) && TYPED_SOURCES.has(e.source) && halfLifeRecallBonus(e, LEGACY_TYPED_HALF_LIFE) !== null);
|
|
89
|
+
const typedPlan = typedPending
|
|
90
|
+
? planTypedHalfLifeMigration(all.filter((e) => objectWritten(e) && !objects.retired.has(e.id) && !losers.has(e.id)), to)
|
|
91
|
+
: [];
|
|
65
92
|
const basePlan = planHalfLifeMigration(typedPending ? all.filter((e) => !objectWritten(e)) : all, rows.from, to);
|
|
66
93
|
return { basePlan, typedPlan };
|
|
67
94
|
}
|
|
68
|
-
/**
|
|
95
|
+
/**
|
|
96
|
+
* Memories behind every object, and those behind a superseded or closed one. Retiring an object leaves its memory
|
|
97
|
+
* untouched, so only its table knows.
|
|
98
|
+
*/
|
|
69
99
|
function objectMemoryIds(objectRows) {
|
|
70
100
|
const all = new Set();
|
|
71
101
|
const retired = new Set();
|
|
@@ -23,6 +23,7 @@ function sleepLlm(run, fetcher) {
|
|
|
23
23
|
const llmOpts = { apiKey, model: config.extraction.model, fetcher };
|
|
24
24
|
return { apiKey, llmError, llmOpts };
|
|
25
25
|
}
|
|
26
|
+
const dagStore = (run) => ({ hippoRoot: run.hippoRoot, consolidation: run.store });
|
|
26
27
|
export async function llmPasses(run, fetcher) {
|
|
27
28
|
// 1.6. Batch extraction — extract facts from episodic memories missing them
|
|
28
29
|
const extractedFromIds = new Set(run.survivors.filter((e) => e.extracted_from).map((e) => e.extracted_from));
|
|
@@ -42,7 +43,10 @@ export async function llmPasses(run, fetcher) {
|
|
|
42
43
|
await entityProfilePass(run, llm);
|
|
43
44
|
}
|
|
44
45
|
}
|
|
45
|
-
/**
|
|
46
|
+
/**
|
|
47
|
+
* Extracts facts from each candidate; true when it stopped on a failure every later call would repeat (bad key, no
|
|
48
|
+
* credit, unknown model).
|
|
49
|
+
*/
|
|
46
50
|
async function extractionPass(run, llm, batch) {
|
|
47
51
|
const { extractFacts, storeExtractedFacts } = await import('../learn/extract.js');
|
|
48
52
|
const report = llm.llmError('extraction');
|
|
@@ -66,7 +70,8 @@ async function extractionPass(run, llm, batch) {
|
|
|
66
70
|
}
|
|
67
71
|
if (stopped) {
|
|
68
72
|
const skipped = batch.length - index - 1;
|
|
69
|
-
report(`stopped after a failure that will not clear on retry; ${skipped} of ${batch.length} candidates skipped, and
|
|
73
|
+
report(`stopped after a failure that will not clear on retry; ${skipped} of ${batch.length} candidates skipped, and ` +
|
|
74
|
+
`the DAG passes with them`);
|
|
70
75
|
break;
|
|
71
76
|
}
|
|
72
77
|
}
|
|
@@ -80,7 +85,7 @@ async function dagBuildPass(run, { apiKey, llmError, llmOpts }) {
|
|
|
80
85
|
return;
|
|
81
86
|
try {
|
|
82
87
|
const { buildDag } = await import('./dag.js');
|
|
83
|
-
const dagResult = await buildDag(run
|
|
88
|
+
const dagResult = await buildDag(dagStore(run), extractedFacts, { ...llmOpts, onError: llmError('dag') });
|
|
84
89
|
run.result.dagCandidateClusters = dagResult.candidateClusters;
|
|
85
90
|
run.result.dagSummariesCreated = dagResult.summariesCreated;
|
|
86
91
|
if (dagResult.summariesCreated > 0) {
|
|
@@ -92,7 +97,8 @@ async function dagBuildPass(run, { apiKey, llmError, llmOpts }) {
|
|
|
92
97
|
log.warn('consolidate dag threw', errorFields(err));
|
|
93
98
|
}
|
|
94
99
|
}
|
|
95
|
-
// 1.8. DAG summary rebuild: drain the summary_dirty queue set by child-write hooks; same apiKey/dryRun gate as
|
|
100
|
+
// 1.8. DAG summary rebuild: drain the summary_dirty queue set by child-write hooks; same apiKey/dryRun gate as
|
|
101
|
+
// buildDag.
|
|
96
102
|
// Cap HIPPO_DAG_REBUILD_CAP (default 20, hard ceiling 1000) prevents runaway LLM cost.
|
|
97
103
|
async function dagRebuildPass(run, { llmError, llmOpts }) {
|
|
98
104
|
const { result } = run;
|
|
@@ -101,13 +107,20 @@ async function dagRebuildPass(run, { llmError, llmOpts }) {
|
|
|
101
107
|
const rawCap = envDagRebuildCap();
|
|
102
108
|
// Hard ceiling so a misconfigured env can't burn unbounded LLM cost.
|
|
103
109
|
const cap = rawCap !== undefined ? Math.min(rawCap, 1000) : 20;
|
|
104
|
-
const rebuildResult = await rebuildDirtySummaries(run.
|
|
110
|
+
const rebuildResult = await rebuildDirtySummaries(run.store, {
|
|
111
|
+
...llmOpts,
|
|
112
|
+
onError: llmError('dag rebuild'),
|
|
113
|
+
cap,
|
|
114
|
+
});
|
|
105
115
|
result.summariesRebuilt = rebuildResult.rebuilt;
|
|
106
116
|
result.summariesRebuildFailed = rebuildResult.failed;
|
|
107
117
|
result.summariesZeroChildSkipped = rebuildResult.zeroChildSkipped;
|
|
108
118
|
result.summariesRebuildRefused = rebuildResult.refused;
|
|
109
119
|
result.summariesRebuildCapped = rebuildResult.capped;
|
|
110
|
-
if (rebuildResult.rebuilt > 0 ||
|
|
120
|
+
if (rebuildResult.rebuilt > 0 ||
|
|
121
|
+
rebuildResult.zeroChildSkipped > 0 ||
|
|
122
|
+
rebuildResult.failed > 0 ||
|
|
123
|
+
rebuildResult.refused > 0) {
|
|
111
124
|
const parts = [];
|
|
112
125
|
if (rebuildResult.rebuilt > 0)
|
|
113
126
|
parts.push(`${rebuildResult.rebuilt} rebuilt`);
|
|
@@ -127,15 +140,18 @@ async function dagRebuildPass(run, { llmError, llmOpts }) {
|
|
|
127
140
|
log.warn('consolidate dag rebuild threw', errorFields(err));
|
|
128
141
|
}
|
|
129
142
|
}
|
|
130
|
-
// 1.9. DAG entity profiles: cluster L2 summaries into per-entity L3 profiles; runs even when 1.7 was skipped
|
|
131
|
-
//
|
|
143
|
+
// 1.9. DAG entity profiles: cluster L2 summaries into per-entity L3 profiles; runs even when 1.7 was skipped
|
|
144
|
+
// (re-clusters existing L2s every sleep).
|
|
145
|
+
// Reads the stored L2s, not `survivors`: phase 1.7 wrote new L2s via writeEntry without pushing them into survivors.
|
|
132
146
|
async function entityProfilePass(run, { llmError, llmOpts }) {
|
|
133
147
|
try {
|
|
134
148
|
const { buildEntityProfiles } = await import('./dag.js');
|
|
135
|
-
const
|
|
136
|
-
const l2Summaries = loadAllL2Summaries(run.hippoRoot);
|
|
149
|
+
const l2Summaries = run.store.unprofiledTopicSummaries();
|
|
137
150
|
if (l2Summaries.length >= 2) {
|
|
138
|
-
const profileResult = await buildEntityProfiles(run
|
|
151
|
+
const profileResult = await buildEntityProfiles(dagStore(run), l2Summaries, {
|
|
152
|
+
...llmOpts,
|
|
153
|
+
onError: llmError('dag profiles'),
|
|
154
|
+
});
|
|
139
155
|
run.result.entityProfilesCreated = profileResult.profilesCreated;
|
|
140
156
|
if (profileResult.profilesCreated > 0) {
|
|
141
157
|
run.result.details.push(` 🌲 DAG L3: ${profileResult.profilesCreated} entity profiles, ${profileResult.l2sLinked} L2s linked`);
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
1
|
+
/**
|
|
2
|
+
* Frozen learned memory-value weight vector, GENERATED from benchmarks/memory-value/weights-learned.json; never edit by
|
|
3
|
+
* hand (a sync test fails CI on drift).
|
|
4
|
+
* CAVEAT: usage-feature signs come from an anti-oracle simulation, not real usage value; never read this as production
|
|
5
|
+
* ranking advice.
|
|
6
|
+
*/
|
|
3
7
|
/** The 8 live feature dims the fitter optimized over (FIT_DIMS). */
|
|
4
8
|
export declare const MEMORY_VALUE_WEIGHTS: Readonly<Record<string, number>>;
|
|
5
9
|
/** sha256 of benchmarks/memory-value/weights-learned.json at freeze time
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
1
|
+
/**
|
|
2
|
+
* Frozen learned memory-value weight vector, GENERATED from benchmarks/memory-value/weights-learned.json; never edit by
|
|
3
|
+
* hand (a sync test fails CI on drift).
|
|
4
|
+
* CAVEAT: usage-feature signs come from an anti-oracle simulation, not real usage value; never read this as production
|
|
5
|
+
* ranking advice.
|
|
6
|
+
*/
|
|
3
7
|
/** The 8 live feature dims the fitter optimized over (FIT_DIMS). */
|
|
4
8
|
export const MEMORY_VALUE_WEIGHTS = Object.freeze({
|
|
5
9
|
age_days: -0.3245577821391783,
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
1
|
+
/**
|
|
2
|
+
* Learned memory-value scorer, a rescue-only veto in the sleep decay pass (it can only shrink the condemned set);
|
|
3
|
+
* mirrors benchmarks/memory-value/*.mjs.
|
|
4
|
+
* rescueSet rescues a condemned entry iff it ranks in the top 30% (RESCUE_BUDGET) of its tenant's non-pinned set;
|
|
5
|
+
* memory-value-wiring.test.ts guards parity.
|
|
6
|
+
*/
|
|
3
7
|
import { type MemoryEntry } from '../core/memory.js';
|
|
4
8
|
/** The 8 live feature dims (FIT_DIMS) — canonical order for iteration. */
|
|
5
9
|
export declare const MV_FEATURE_NAMES: ReadonlyArray<keyof MvFeatureVector>;
|
|
@@ -13,14 +17,25 @@ export interface MvFeatureVector {
|
|
|
13
17
|
outcome_ratio: number;
|
|
14
18
|
content_length: number;
|
|
15
19
|
}
|
|
16
|
-
/**
|
|
17
|
-
*
|
|
20
|
+
/**
|
|
21
|
+
* Blind v1 feature dict for one entry, restricted to the 8 dims the frozen weights carry. `strength` is CLOCK-BASIS
|
|
22
|
+
* `calculateStrength(entry, now)` with no
|
|
23
|
+
* DecayOptions, as in the weights' training; passing the production decay basis would silently break parity with the
|
|
24
|
+
* frozen weights.
|
|
25
|
+
*/
|
|
18
26
|
export declare function computeMvFeatures(entry: MemoryEntry, now: Date): MvFeatureVector;
|
|
19
27
|
export declare function validateWeights(weights?: Readonly<Record<string, number>>, digest?: string): void;
|
|
20
|
-
/**
|
|
21
|
-
*
|
|
28
|
+
/**
|
|
29
|
+
* Min-max normalize the 8 features over the given entries (constant -> 0), then score = dot(weights, normalized);
|
|
30
|
+
* callers set the scope.
|
|
31
|
+
* An entry with any non-finite feature (NaN from a malformed `created`) is excluded from normalization and scores
|
|
32
|
+
* -Infinity, so it can never be rescued.
|
|
33
|
+
*/
|
|
22
34
|
export declare function scoreEntries(entries: MemoryEntry[], now: Date, weights?: Readonly<Record<string, number>>): Map<string, number>;
|
|
23
|
-
/**
|
|
35
|
+
/**
|
|
36
|
+
* Per-entry rank context within its tenant's non-pinned candidate set: the basis both rescueSet and the consolidate
|
|
37
|
+
* audit-row metadata read.
|
|
38
|
+
*/
|
|
24
39
|
export interface MvRankInfo {
|
|
25
40
|
tenantId: string;
|
|
26
41
|
score: number;
|
|
@@ -31,7 +46,9 @@ export interface MvRankInfo {
|
|
|
31
46
|
/** ceil(RESCUE_BUDGET * totalNonPinned) — the rescue cutoff; rank <= keepN rescues. */
|
|
32
47
|
keepN: number;
|
|
33
48
|
}
|
|
34
|
-
/**
|
|
49
|
+
/**
|
|
50
|
+
* Group non-pinned entries by tenantId, score and rank each group independently, and return rank context for every
|
|
51
|
+
* non-pinned entry;
|
|
35
52
|
* rescueSet and the consolidate audit rows share it so they never compute the ranking differently. */
|
|
36
53
|
export declare function rankNonPinnedByTenant(entries: MemoryEntry[], now: Date, weights?: Readonly<Record<string, number>>, digest?: string): Map<string, MvRankInfo>;
|
|
37
54
|
export interface RescueSetOptions {
|
|
@@ -39,7 +56,10 @@ export interface RescueSetOptions {
|
|
|
39
56
|
readonly digest?: string;
|
|
40
57
|
readonly precomputedRanks?: Map<string, MvRankInfo>;
|
|
41
58
|
}
|
|
42
|
-
/**
|
|
43
|
-
*
|
|
59
|
+
/**
|
|
60
|
+
* Rescue decision: the subset of condemnedIds ranking in the top 30% of their tenant's non-pinned set by learned score.
|
|
61
|
+
* Pass `precomputedRanks` to skip the internal ranking so the whole-store pass runs once per sleep; `weights`/`digest`
|
|
62
|
+
* overrides exist for tests only.
|
|
63
|
+
*/
|
|
44
64
|
export declare function rescueSet(entries: MemoryEntry[], condemnedIds: Set<string>, now: Date, options?: RescueSetOptions): Set<string>;
|
|
45
65
|
//# sourceMappingURL=memory-value.d.ts.map
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
1
|
+
/**
|
|
2
|
+
* Learned memory-value scorer, a rescue-only veto in the sleep decay pass (it can only shrink the condemned set);
|
|
3
|
+
* mirrors benchmarks/memory-value/*.mjs.
|
|
4
|
+
* rescueSet rescues a condemned entry iff it ranks in the top 30% (RESCUE_BUDGET) of its tenant's non-pinned set;
|
|
5
|
+
* memory-value-wiring.test.ts guards parity.
|
|
6
|
+
*/
|
|
3
7
|
import { DEFAULT_TENANT_ID } from '../util/env.js';
|
|
4
8
|
import { strengthAblation } from '../core/ablation.js';
|
|
5
9
|
import { calculateStrength } from '../core/memory.js';
|
|
@@ -20,11 +24,17 @@ export const MV_FEATURE_NAMES = [
|
|
|
20
24
|
/** The keep-budget operating point (the only point with measured
|
|
21
25
|
* evidence): a code constant tied to that evidence, not user-tunable. */
|
|
22
26
|
const RESCUE_BUDGET = 0.3;
|
|
23
|
-
/**
|
|
27
|
+
/**
|
|
28
|
+
* Per-tenant floor on the non-pinned candidate set: below it ranks are noise, and keepN=ceil(0.3*N) would rescue a
|
|
29
|
+
* 1-entry tenant's entry every sleep forever.
|
|
24
30
|
* A code constant tied to that reasoning, not user-tunable (like RESCUE_BUDGET). */
|
|
25
31
|
const MIN_RESCUE_GROUP = 10;
|
|
26
|
-
/**
|
|
27
|
-
*
|
|
32
|
+
/**
|
|
33
|
+
* Blind v1 feature dict for one entry, restricted to the 8 dims the frozen weights carry. `strength` is CLOCK-BASIS
|
|
34
|
+
* `calculateStrength(entry, now)` with no
|
|
35
|
+
* DecayOptions, as in the weights' training; passing the production decay basis would silently break parity with the
|
|
36
|
+
* frozen weights.
|
|
37
|
+
*/
|
|
28
38
|
export function computeMvFeatures(entry, now) {
|
|
29
39
|
const ageDays = (now.getTime() - Date.parse(entry.created)) / DAY_MS;
|
|
30
40
|
const pos = entry.outcome_positive ?? 0;
|
|
@@ -32,7 +42,8 @@ export function computeMvFeatures(entry, now) {
|
|
|
32
42
|
return {
|
|
33
43
|
age_days: ageDays,
|
|
34
44
|
half_life_days: entry.half_life_days,
|
|
35
|
-
|
|
45
|
+
// clock-basis, never the production decay basis — see doc comment above
|
|
46
|
+
strength: calculateStrength(entry, now, { ablation: strengthAblation() }),
|
|
36
47
|
retrieval_count: entry.retrieval_count,
|
|
37
48
|
outcome_positive: pos,
|
|
38
49
|
outcome_negative: neg,
|
|
@@ -40,7 +51,9 @@ export function computeMvFeatures(entry, now) {
|
|
|
40
51
|
content_length: entry.content.length,
|
|
41
52
|
};
|
|
42
53
|
}
|
|
43
|
-
/**
|
|
54
|
+
/**
|
|
55
|
+
* Throws on a malformed weight constant (wrong dims, non-finite weight, missing digest): flag-on with a broken constant
|
|
56
|
+
* must throw, never act as flag-off.
|
|
44
57
|
* Parameterized (default: the frozen singleton) so the throw paths are unit-testable. */
|
|
45
58
|
function isFiniteWeightValue(value) {
|
|
46
59
|
return typeof value === 'number' && Number.isFinite(value);
|
|
@@ -57,11 +70,16 @@ export function validateWeights(weights = MEMORY_VALUE_WEIGHTS, digest = SOURCE_
|
|
|
57
70
|
}
|
|
58
71
|
}
|
|
59
72
|
if (!isNonEmptyDigestString(digest)) {
|
|
60
|
-
throw new Error('memory-value: weights constant is malformed — SOURCE_ARTIFACT_SHA256 digest missing
|
|
73
|
+
throw new Error('memory-value: weights constant is malformed — SOURCE_ARTIFACT_SHA256 digest missing ' +
|
|
74
|
+
'(src/consolidate/memory-value-weights.ts)');
|
|
61
75
|
}
|
|
62
76
|
}
|
|
63
|
-
/**
|
|
64
|
-
*
|
|
77
|
+
/**
|
|
78
|
+
* Min-max normalize the 8 features over the given entries (constant -> 0), then score = dot(weights, normalized);
|
|
79
|
+
* callers set the scope.
|
|
80
|
+
* An entry with any non-finite feature (NaN from a malformed `created`) is excluded from normalization and scores
|
|
81
|
+
* -Infinity, so it can never be rescued.
|
|
82
|
+
*/
|
|
65
83
|
export function scoreEntries(entries, now, weights = MEMORY_VALUE_WEIGHTS) {
|
|
66
84
|
const raw = new Map();
|
|
67
85
|
for (const e of entries)
|
|
@@ -104,7 +122,9 @@ export function scoreEntries(entries, now, weights = MEMORY_VALUE_WEIGHTS) {
|
|
|
104
122
|
}
|
|
105
123
|
return scores;
|
|
106
124
|
}
|
|
107
|
-
/**
|
|
125
|
+
/**
|
|
126
|
+
* Group non-pinned entries by tenantId, score and rank each group independently, and return rank context for every
|
|
127
|
+
* non-pinned entry;
|
|
108
128
|
* rescueSet and the consolidate audit rows share it so they never compute the ranking differently. */
|
|
109
129
|
export function rankNonPinnedByTenant(entries, now, weights = MEMORY_VALUE_WEIGHTS, digest = SOURCE_ARTIFACT_SHA256) {
|
|
110
130
|
validateWeights(weights, digest);
|
|
@@ -114,7 +134,7 @@ export function rankNonPinnedByTenant(entries, now, weights = MEMORY_VALUE_WEIGH
|
|
|
114
134
|
continue; // pinned entries never compete for rescue (never condemned)
|
|
115
135
|
// Default an undefined tenantId as dag.ts:341 does: a raw/legacy row can carry one at runtime,
|
|
116
136
|
// and keying it "undefined" would split it into its own singleton tenant.
|
|
117
|
-
const tenantId = e.
|
|
137
|
+
const tenantId = e.tenant_id ?? DEFAULT_TENANT_ID;
|
|
118
138
|
const list = byTenant.get(tenantId);
|
|
119
139
|
if (list)
|
|
120
140
|
list.push(e);
|
|
@@ -146,8 +166,11 @@ export function rankNonPinnedByTenant(entries, now, weights = MEMORY_VALUE_WEIGH
|
|
|
146
166
|
}
|
|
147
167
|
return result;
|
|
148
168
|
}
|
|
149
|
-
/**
|
|
150
|
-
*
|
|
169
|
+
/**
|
|
170
|
+
* Rescue decision: the subset of condemnedIds ranking in the top 30% of their tenant's non-pinned set by learned score.
|
|
171
|
+
* Pass `precomputedRanks` to skip the internal ranking so the whole-store pass runs once per sleep; `weights`/`digest`
|
|
172
|
+
* overrides exist for tests only.
|
|
173
|
+
*/
|
|
151
174
|
export function rescueSet(entries, condemnedIds, now, options = {}) {
|
|
152
175
|
const { weights = MEMORY_VALUE_WEIGHTS, digest = SOURCE_ARTIFACT_SHA256, precomputedRanks } = options;
|
|
153
176
|
validateWeights(weights, digest); // fail loud before any rescue computation
|
|
@@ -2,6 +2,9 @@ import { type SleepRun } from './run.js';
|
|
|
2
2
|
export declare function retireHeldTexts(run: SleepRun): void;
|
|
3
3
|
/** Returns how many clusters were skipped because their merged text matches a rejected value. */
|
|
4
4
|
export declare function mergePass(run: SleepRun): number;
|
|
5
|
-
/**
|
|
5
|
+
/**
|
|
6
|
+
* Maps i to each j > i, ascending, whose text overlap with i reaches the merge threshold; every text needs at least one
|
|
7
|
+
* token.
|
|
8
|
+
*/
|
|
6
9
|
export declare function mergePartners(contents: readonly string[]): (i: number) => number[];
|
|
7
10
|
//# sourceMappingURL=merge.d.ts.map
|
|
@@ -4,26 +4,29 @@ 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]));
|
|
23
26
|
const rejectedIn = (tenantId) => (text) => run.tombstones.find(tenantId, rejectionDigest(text)) !== null;
|
|
24
27
|
for (let i = survivors.length - 1; i >= 0; i--) {
|
|
25
28
|
const row = survivors[i];
|
|
26
|
-
const successor = run.retirable(row) ? successorAfterRetirement(row, byId, rejectedIn(row.
|
|
29
|
+
const successor = run.retirable(row) ? successorAfterRetirement(row, byId, rejectedIn(row.tenant_id)) : undefined;
|
|
27
30
|
if (successor === undefined)
|
|
28
31
|
continue;
|
|
29
32
|
run.result.details.push(` ✂️ ${row.id} held a retired text${successor ? `, ${successor.id} holds the rest` : ''}`);
|
|
@@ -51,7 +54,7 @@ function partitionMergeCandidates(survivors) {
|
|
|
51
54
|
// Map keeps insertion order, so a single-tenant store gets one partition in the original order.
|
|
52
55
|
const mergeCandidatesByTenant = new Map();
|
|
53
56
|
for (const entry of mergeCandidates) {
|
|
54
|
-
const key = derivationPartitionKey(entry.
|
|
57
|
+
const key = derivationPartitionKey(entry.tenant_id, entry.scope, entry.origin_project);
|
|
55
58
|
const bucket = mergeCandidatesByTenant.get(key);
|
|
56
59
|
if (bucket)
|
|
57
60
|
bucket.push(entry);
|
|
@@ -70,7 +73,7 @@ export function mergePass(run) {
|
|
|
70
73
|
let mergesSkippedRejected = 0;
|
|
71
74
|
for (const [, tenantCandidates] of mergeCandidatesByTenant) {
|
|
72
75
|
const partition = {
|
|
73
|
-
tenantId: tenantCandidates[0].
|
|
76
|
+
tenantId: tenantCandidates[0].tenant_id,
|
|
74
77
|
scope: derivationScope(tenantCandidates[0].scope),
|
|
75
78
|
origin: tenantCandidates[0].origin_project,
|
|
76
79
|
};
|
|
@@ -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
|
-
|
|
159
|
-
const
|
|
160
|
-
const
|
|
165
|
+
// tombstones from older releases hold this format's digest
|
|
166
|
+
const oldDigest = rejectionDigest(legacyMergeContents(related));
|
|
167
|
+
const newHit = tombstones.find(semantic.tenant_id, newDigest);
|
|
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));
|