hippo-memory 1.69.0 → 1.71.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -2
- package/dist/agent-memories/apply.d.ts +3 -3
- package/dist/agent-memories/apply.js +16 -31
- package/dist/agent-memories/claude-code.d.ts +5 -5
- package/dist/agent-memories/claude-code.js +25 -12
- package/dist/agent-memories/copilot.js +3 -2
- package/dist/agent-memories/files.js +26 -14
- package/dist/agent-memories/gemini.js +6 -5
- package/dist/agent-memories/keys.js +3 -2
- package/dist/agent-memories/legacy.d.ts +2 -2
- package/dist/agent-memories/legacy.js +2 -2
- package/dist/agent-memories/markdown.d.ts +1 -3
- package/dist/agent-memories/markdown.js +1 -3
- package/dist/agent-memories/report.d.ts +1 -1
- package/dist/agent-memories/report.js +3 -2
- package/dist/agent-memories/source.d.ts +1 -1
- package/dist/agent-memories/source.js +6 -5
- package/dist/agent-memories/sync.d.ts +5 -3
- package/dist/agent-memories/sync.js +34 -38
- package/dist/agent-memories/types.d.ts +1 -1
- package/dist/api/assemble.d.ts +9 -46
- package/dist/api/assemble.js +44 -54
- package/dist/api/audit.d.ts +8 -7
- package/dist/api/audit.js +15 -21
- package/dist/api/auth.d.ts +17 -39
- package/dist/api/auth.js +76 -216
- package/dist/api/auto-sleep.d.ts +13 -0
- package/dist/api/auto-sleep.js +32 -0
- package/dist/{availability.d.ts → api/availability.d.ts} +4 -17
- package/dist/{availability.js → api/availability.js} +14 -44
- package/dist/{context-auto.js → api/context-auto.js} +2 -1
- package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
- package/dist/{context-render.js → api/context-render.js} +7 -6
- package/dist/api/context-select.d.ts +5 -5
- package/dist/api/context-select.js +39 -48
- package/dist/api/context-types.d.ts +15 -40
- package/dist/api/context.d.ts +7 -26
- package/dist/api/context.js +67 -97
- package/dist/api/dormant.d.ts +7 -23
- package/dist/api/dormant.js +40 -128
- package/dist/api/drill-down.d.ts +9 -48
- package/dist/api/drill-down.js +41 -90
- package/dist/api/forget.d.ts +5 -33
- package/dist/api/forget.js +17 -73
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +2 -2
- package/dist/api/graph.d.ts +8 -0
- package/dist/api/graph.js +7 -0
- package/dist/api/index.d.ts +28 -0
- package/dist/api/index.js +31 -0
- package/dist/api/instruction-detect.js +85 -0
- package/dist/api/learn.js +63 -55
- package/dist/api/ledger-db.d.ts +21 -0
- package/dist/api/ledger-db.js +81 -0
- package/dist/api/memories.d.ts +5 -0
- package/dist/api/memories.js +7 -0
- package/dist/api/objects.d.ts +9 -0
- package/dist/api/objects.js +11 -0
- package/dist/api/on-store.d.ts +16 -0
- package/dist/api/on-store.js +38 -0
- package/dist/api/outcome.d.ts +5 -42
- package/dist/api/outcome.js +15 -80
- package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
- package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
- package/dist/api/predictions.d.ts +9 -0
- package/dist/api/predictions.js +18 -0
- package/dist/api/promote.d.ts +16 -31
- package/dist/api/promote.js +38 -123
- package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +11 -11
- package/dist/{prompt-hook.js → api/prompt-hook.js} +42 -60
- package/dist/api/quarantine.d.ts +5 -5
- package/dist/api/quarantine.js +30 -106
- package/dist/api/recall-cli.d.ts +55 -0
- package/dist/api/recall-cli.js +94 -0
- package/dist/api/recall-core.d.ts +4 -0
- package/dist/api/recall-core.js +120 -0
- package/dist/api/recall-finish.d.ts +53 -0
- package/dist/api/recall-finish.js +30 -0
- package/dist/api/recall-history.d.ts +64 -0
- package/dist/api/recall-history.js +159 -0
- package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +7 -8
- package/dist/{recall-pipeline.js → api/recall-pipeline.js} +60 -48
- package/dist/api/recall-record.d.ts +10 -13
- package/dist/api/recall-record.js +10 -30
- package/dist/api/recall-request.d.ts +2 -2
- package/dist/api/recall-request.js +3 -3
- package/dist/api/recall-types.d.ts +101 -316
- package/dist/api/recall.d.ts +5 -33
- package/dist/api/recall.js +92 -91
- package/dist/api/refine.d.ts +7 -0
- package/dist/api/refine.js +10 -0
- package/dist/api/remember-local.d.ts +57 -0
- package/dist/api/remember-local.js +90 -0
- package/dist/api/remember.d.ts +27 -12
- package/dist/api/remember.js +42 -46
- package/dist/api/session-owners.d.ts +4 -0
- package/dist/api/session-owners.js +17 -0
- package/dist/api/sleep-run.d.ts +7 -9
- package/dist/api/sleep-run.js +78 -94
- package/dist/api/sleep.d.ts +10 -29
- package/dist/api/tokens.d.ts +5 -12
- package/dist/api/tokens.js +12 -31
- package/dist/api/types.d.ts +8 -31
- package/dist/api/types.js +5 -23
- package/dist/capture/caller-session.d.ts +2 -2
- package/dist/capture/caller-session.js +8 -8
- package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
- package/dist/{capture-error.js → capture/capture-error.js} +7 -7
- package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
- package/dist/capture/command.d.ts +5 -13
- package/dist/capture/command.js +57 -60
- package/dist/capture/compact-resume-caller.d.ts +1 -1
- package/dist/capture/compact-resume-caller.js +7 -7
- package/dist/capture/compact.d.ts +8 -16
- package/dist/capture/compact.js +56 -47
- package/dist/capture/compaction-items-caller.d.ts +1 -1
- package/dist/capture/compaction-items-caller.js +7 -5
- package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
- package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
- package/dist/{compaction-record.js → capture/compaction-record.js} +143 -157
- package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +1 -1
- package/dist/{compaction-spool.js → capture/compaction-spool.js} +18 -14
- package/dist/capture/copilot-transcript.js +1 -1
- package/dist/capture/extract.js +2 -2
- package/dist/capture/failure-caller.d.ts +2 -2
- package/dist/capture/failure-caller.js +6 -6
- package/dist/capture/failure-reading.d.ts +2 -5
- package/dist/capture/failure-reading.js +11 -12
- package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
- package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
- package/dist/capture/pre-compact-caller.d.ts +1 -1
- package/dist/capture/pre-compact-caller.js +2 -2
- package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +2 -6
- package/dist/{session-digest.js → capture/session-digest.js} +29 -29
- package/dist/capture/session-end-caller.d.ts +2 -2
- package/dist/capture/session-end-caller.js +1 -1
- package/dist/capture/session-texts.d.ts +1 -1
- package/dist/capture/session-texts.js +5 -5
- package/dist/capture/session-worker.js +6 -4
- package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
- package/dist/capture/transcript.d.ts +2 -10
- package/dist/capture/transcript.js +72 -92
- package/dist/capture/working-state.d.ts +0 -3
- package/dist/capture/working-state.js +7 -7
- package/dist/cli/api-context.d.ts +3 -0
- package/dist/cli/api-context.js +6 -0
- package/dist/cli/audit-prune.d.ts +28 -0
- package/dist/cli/audit-prune.js +40 -0
- package/dist/cli/audit.d.ts +2 -2
- package/dist/cli/audit.js +92 -88
- package/dist/cli/auth.d.ts +2 -1
- package/dist/cli/auth.js +69 -53
- package/dist/cli/briefs.d.ts +4 -3
- package/dist/cli/briefs.js +76 -202
- package/dist/cli/card.d.ts +2 -1
- package/dist/cli/card.js +55 -54
- package/dist/cli/client.d.ts +28 -0
- package/dist/{client.js → cli/client.js} +25 -44
- package/dist/cli/compact-resume-payload.d.ts +8 -0
- package/dist/cli/compact-resume-payload.js +40 -0
- package/dist/cli/context.d.ts +1 -13
- package/dist/cli/context.js +51 -77
- package/dist/cli/continuity.d.ts +6 -5
- package/dist/cli/continuity.js +153 -145
- package/dist/cli/correction-latency.d.ts +24 -0
- package/dist/{correction-latency.js → cli/correction-latency.js} +2 -14
- package/dist/cli/curate.d.ts +13 -17
- package/dist/cli/curate.js +226 -222
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +70 -52
- package/dist/cli/decisions.d.ts +4 -3
- package/dist/cli/decisions.js +129 -253
- package/dist/cli/eval.d.ts +1 -3
- package/dist/cli/eval.js +56 -42
- package/dist/cli/exit.d.ts +6 -0
- package/dist/cli/exit.js +11 -0
- package/dist/cli/explain.d.ts +1 -2
- package/dist/cli/explain.js +39 -21
- package/dist/cli/flag-values.d.ts +30 -0
- package/dist/cli/flag-values.js +120 -0
- package/dist/cli/flags.d.ts +304 -0
- package/dist/cli/flags.js +169 -0
- package/dist/cli/github.d.ts +14 -0
- package/dist/cli/github.js +184 -0
- package/dist/cli/goals.d.ts +2 -1
- package/dist/cli/goals.js +76 -75
- package/dist/cli/hook-runtime.d.ts +31 -0
- package/dist/cli/hook-runtime.js +139 -0
- package/dist/cli/init.d.ts +2 -1
- package/dist/cli/init.js +153 -126
- package/dist/cli/install-steps.d.ts +7 -0
- package/dist/cli/install-steps.js +101 -0
- package/dist/cli/last-sleep.d.ts +3 -1
- package/dist/cli/last-sleep.js +12 -7
- package/dist/cli/maintenance.d.ts +5 -4
- package/dist/cli/maintenance.js +41 -42
- package/dist/cli/object-verbs.d.ts +40 -0
- package/dist/cli/object-verbs.js +66 -0
- package/dist/cli/owner-validation.d.ts +18 -0
- package/dist/cli/owner-validation.js +33 -0
- package/dist/cli/playbooks.d.ts +4 -3
- package/dist/cli/playbooks.js +98 -306
- package/dist/cli/print.d.ts +15 -0
- package/dist/cli/print.js +82 -0
- package/dist/cli/projects.d.ts +2 -3
- package/dist/cli/projects.js +56 -51
- package/dist/cli/provenance-coverage.d.ts +14 -0
- package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +2 -6
- package/dist/cli/quality-repair-once.js +4 -4
- package/dist/cli/recall.d.ts +2 -6
- package/dist/cli/recall.js +128 -253
- package/dist/cli/refine-llm.d.ts +35 -0
- package/dist/cli/refine-llm.js +128 -0
- package/dist/cli/remember.d.ts +4 -6
- package/dist/cli/remember.js +193 -230
- package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +4 -17
- package/dist/{scheduler.js → cli/scheduler.js} +22 -22
- package/dist/cli/serve.d.ts +1 -1
- package/dist/cli/serve.js +46 -7
- package/dist/cli/session-hooks.d.ts +11 -19
- package/dist/cli/session-hooks.js +263 -258
- package/dist/cli/setup.d.ts +4 -3
- package/dist/cli/setup.js +55 -37
- package/dist/cli/shared.d.ts +14 -118
- package/dist/cli/shared.js +26 -400
- package/dist/cli/slack.d.ts +2 -1
- package/dist/cli/slack.js +46 -74
- package/dist/cli/sleep-render.d.ts +4 -0
- package/dist/cli/sleep-render.js +61 -0
- package/dist/cli/sleep.d.ts +3 -8
- package/dist/cli/sleep.js +34 -91
- package/dist/cli/status.d.ts +9 -12
- package/dist/cli/status.js +86 -131
- package/dist/{stdin.d.ts → cli/stdin.d.ts} +4 -6
- package/dist/{stdin.js → cli/stdin.js} +8 -9
- package/dist/cli/transfer.d.ts +9 -9
- package/dist/cli/transfer.js +125 -122
- package/dist/cli/usage.js +13 -5
- package/dist/cli.d.ts +69 -167
- package/dist/cli.js +187 -296
- package/dist/connectors/dlq.d.ts +44 -0
- package/dist/connectors/dlq.js +30 -0
- package/dist/connectors/github/backfill.d.ts +6 -26
- package/dist/connectors/github/backfill.js +42 -114
- package/dist/connectors/github/deletion.d.ts +6 -21
- package/dist/connectors/github/deletion.js +17 -64
- package/dist/connectors/github/dlq.d.ts +12 -91
- package/dist/connectors/github/dlq.js +23 -140
- package/dist/connectors/github/ingest.d.ts +4 -37
- package/dist/connectors/github/ingest.js +24 -93
- package/dist/connectors/github/octokit-client.d.ts +5 -17
- package/dist/connectors/github/octokit-client.js +29 -25
- package/dist/connectors/github/ratelimit.d.ts +3 -14
- package/dist/connectors/github/ratelimit.js +3 -14
- package/dist/connectors/github/scope.d.ts +3 -5
- package/dist/connectors/github/scope.js +3 -5
- package/dist/connectors/github/signature.d.ts +4 -26
- package/dist/connectors/github/signature.js +4 -26
- package/dist/connectors/github/tenant-routing.d.ts +4 -26
- package/dist/connectors/github/tenant-routing.js +13 -61
- package/dist/connectors/github/transform.d.ts +1 -1
- package/dist/connectors/github/transform.js +2 -16
- package/dist/connectors/github/types.d.ts +4 -16
- package/dist/connectors/github/types.js +17 -27
- package/dist/connectors/github/webhook.d.ts +5 -18
- package/dist/connectors/github/webhook.js +86 -105
- package/dist/connectors/slack/backfill.d.ts +5 -18
- package/dist/connectors/slack/backfill.js +9 -42
- package/dist/connectors/slack/deletion.d.ts +4 -7
- package/dist/connectors/slack/deletion.js +20 -49
- package/dist/connectors/slack/dlq.d.ts +9 -68
- package/dist/connectors/slack/dlq.js +26 -136
- package/dist/connectors/slack/ingest.d.ts +4 -18
- package/dist/connectors/slack/ingest.js +26 -91
- package/dist/connectors/slack/scope.d.ts +2 -8
- package/dist/connectors/slack/scope.js +2 -8
- package/dist/connectors/slack/signature.d.ts +1 -6
- package/dist/connectors/slack/signature.js +2 -1
- package/dist/connectors/slack/tenant-routing.d.ts +4 -18
- package/dist/connectors/slack/tenant-routing.js +11 -31
- package/dist/connectors/slack/transform.d.ts +3 -19
- package/dist/connectors/slack/transform.js +2 -18
- package/dist/connectors/slack/types.d.ts +4 -10
- package/dist/connectors/slack/types.js +5 -16
- package/dist/connectors/slack/web-client.js +34 -28
- package/dist/connectors/slack/webhook.d.ts +5 -21
- package/dist/connectors/slack/webhook.js +80 -108
- package/dist/connectors/slack/workspaces.d.ts +8 -41
- package/dist/connectors/slack/workspaces.js +8 -58
- package/dist/consolidate/conflicts.d.ts +1 -1
- package/dist/consolidate/conflicts.js +10 -18
- package/dist/consolidate/dag-summary.d.ts +8 -0
- package/dist/consolidate/dag-summary.js +41 -0
- package/dist/{dag.d.ts → consolidate/dag.d.ts} +6 -29
- package/dist/{dag.js → consolidate/dag.js} +49 -131
- package/dist/consolidate/decay.d.ts +2 -2
- package/dist/consolidate/decay.js +35 -41
- package/dist/consolidate/dedupe.d.ts +29 -0
- package/dist/consolidate/dedupe.js +103 -0
- package/dist/consolidate/flush-units.d.ts +5 -6
- package/dist/consolidate/flush-units.js +3 -3
- package/dist/consolidate/half-life-migration.d.ts +34 -0
- package/dist/consolidate/half-life-migration.js +89 -0
- package/dist/consolidate/llm-passes.js +12 -29
- package/dist/consolidate/memory-value-weights.d.ts +8 -0
- package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +2 -13
- package/dist/consolidate/memory-value.d.ts +45 -0
- package/dist/consolidate/memory-value.js +164 -0
- package/dist/consolidate/merge.js +65 -83
- package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
- package/dist/{merged-row.js → consolidate/merged-row.js} +4 -3
- package/dist/consolidate/physics-pass.js +46 -48
- package/dist/consolidate/replay.d.ts +9 -0
- package/dist/consolidate/replay.js +84 -0
- package/dist/consolidate/run.d.ts +7 -13
- package/dist/consolidate/run.js +6 -37
- package/dist/consolidate/sleep.d.ts +2 -9
- package/dist/consolidate/sleep.js +69 -151
- package/dist/consolidate/trace.d.ts +19 -0
- package/dist/{trace.js → consolidate/trace.js} +7 -24
- package/dist/consolidate/traces.js +40 -51
- package/dist/core/ablation.d.ts +15 -0
- package/dist/core/ablation.js +49 -0
- package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
- package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
- package/dist/{ambient.d.ts → core/ambient.d.ts} +1 -8
- package/dist/{ambient.js → core/ambient.js} +13 -18
- package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +16 -3
- package/dist/{capture-contract.js → core/capture-contract.js} +67 -1
- package/dist/{card.d.ts → core/card.d.ts} +4 -1
- package/dist/{card.js → core/card.js} +8 -0
- package/dist/core/compare.d.ts +32 -0
- package/dist/core/compare.js +70 -0
- package/dist/{config.d.ts → core/config.d.ts} +14 -28
- package/dist/{config.js → core/config.js} +101 -75
- package/dist/{handoff.d.ts → core/handoff.d.ts} +1 -7
- package/dist/core/handoff.js +81 -0
- package/dist/{memory-quality.js → core/memory-quality.js} +2 -2
- package/dist/core/memory.d.ts +183 -0
- package/dist/core/memory.js +380 -0
- package/dist/core/package-root.d.ts +3 -0
- package/dist/core/package-root.js +5 -0
- package/dist/{physics-config.d.ts → core/physics-config.d.ts} +1 -4
- package/dist/{physics-config.js → core/physics-config.js} +3 -8
- package/dist/{physics.d.ts → core/physics.d.ts} +16 -62
- package/dist/{physics.js → core/physics.js} +60 -122
- package/dist/{project-identity.d.ts → core/project-identity.d.ts} +17 -63
- package/dist/{project-identity.js → core/project-identity.js} +22 -55
- package/dist/{project-remote.js → core/project-remote.js} +17 -6
- package/dist/{prompt-recall.js → core/prompt-recall.js} +1 -1
- package/dist/core/raw-append-only.d.ts +5 -0
- package/dist/core/raw-append-only.js +7 -0
- package/dist/{salience.d.ts → core/salience.d.ts} +1 -7
- package/dist/{salience.js → core/salience.js} +36 -27
- package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
- package/dist/{search/types.js → core/search-types.js} +1 -1
- package/dist/core/session-digest-row.d.ts +5 -0
- package/dist/core/session-digest-row.js +6 -0
- package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
- package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +7 -7
- package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
- package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
- package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +11 -10
- package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +110 -104
- package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +2 -1
- package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +1 -0
- package/dist/{dashboard.js → dashboard/dashboard.js} +172 -55
- package/dist/db/backup.js +1 -1
- package/dist/db/busy.d.ts +19 -2
- package/dist/db/busy.js +88 -14
- package/dist/db/connect.d.ts +11 -2
- package/dist/db/connect.js +43 -10
- package/dist/db/index.d.ts +9 -0
- package/dist/db/index.js +8 -0
- package/dist/db/meta.d.ts +4 -0
- package/dist/db/meta.js +11 -1
- package/dist/db/migrate.d.ts +8 -1
- package/dist/db/migrate.js +28 -33
- package/dist/db/migrations/types.d.ts +2 -5
- package/dist/db/migrations/v08.js +1 -1
- package/dist/db/migrations/v14.js +39 -36
- package/dist/db/migrations/v15.js +2 -8
- package/dist/db/migrations/v16.js +31 -29
- package/dist/db/migrations/v17.js +2 -3
- package/dist/db/migrations/v18.js +6 -5
- package/dist/db/migrations/v19.js +2 -5
- package/dist/db/migrations/v20.js +5 -8
- package/dist/db/migrations/v22.js +28 -38
- package/dist/db/migrations/v23.js +3 -14
- package/dist/db/migrations/v24.js +25 -22
- package/dist/db/migrations/v25.js +3 -8
- package/dist/db/migrations/v26.js +2 -13
- package/dist/db/migrations/v27.js +3 -11
- package/dist/db/migrations/v28.js +2 -14
- package/dist/db/migrations/v29.js +23 -32
- package/dist/db/migrations/v30.js +4 -16
- package/dist/db/migrations/v31.js +23 -31
- package/dist/db/migrations/v32.js +4 -22
- package/dist/db/migrations/v33.js +2 -15
- package/dist/db/migrations/v34.js +2 -11
- package/dist/db/migrations/v35.js +2 -11
- package/dist/db/migrations/v36.js +2 -11
- package/dist/db/migrations/v37.js +8 -33
- package/dist/db/migrations/v38.js +5 -38
- package/dist/db/migrations/v39.js +10 -21
- package/dist/db/migrations/v40.js +8 -14
- package/dist/db/migrations/v41.js +2 -24
- package/dist/db/migrations/v43.js +7 -6
- package/dist/db/migrations/v44.js +2 -8
- package/dist/db/migrations/v45.js +2 -7
- package/dist/db/migrations/v46.js +1 -1
- package/dist/db/migrations/v47.js +2 -3
- package/dist/db/migrations/v48.js +1 -1
- package/dist/db/migrations/v49.js +1 -1
- package/dist/db/migrations/v50.js +8 -7
- package/dist/db/migrations/v51.js +1 -1
- package/dist/db/migrations/v52.js +1 -1
- package/dist/db/open.d.ts +11 -1
- package/dist/db/open.js +37 -4
- package/dist/db/physics-state.d.ts +23 -0
- package/dist/{physics-state.js → db/physics-state.js} +34 -52
- package/dist/db/raw-archive-mirror-cleanup.d.ts +5 -0
- package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +10 -20
- package/dist/db/request-stores.d.ts +15 -2
- package/dist/db/request-stores.js +37 -15
- package/dist/db/tables.d.ts +2 -0
- package/dist/db/tables.js +6 -0
- package/dist/{vector-store.d.ts → db/vector-store.d.ts} +6 -2
- package/dist/{vector-store.js → db/vector-store.js} +83 -51
- package/dist/db/wal-checkpointer.d.ts +11 -0
- package/dist/db/wal-checkpointer.js +92 -0
- package/dist/doctor.js +176 -152
- package/dist/entry/json-hooks.d.ts +1 -1
- package/dist/entry/json-hooks.js +1 -1
- package/dist/entry/project-identity.d.ts +1 -1
- package/dist/entry/project-identity.js +1 -1
- package/dist/entry/session-text.d.ts +3 -3
- package/dist/entry/session-text.js +5 -4
- package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +15 -53
- package/dist/{eval-stats.js → eval/eval-stats.js} +24 -51
- package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +3 -14
- package/dist/{eval-suite.js → eval/eval-suite.js} +99 -57
- package/dist/{eval.d.ts → eval/eval.d.ts} +7 -25
- package/dist/{eval.js → eval/eval.js} +35 -55
- package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -6
- package/dist/{judgment.js → eval/judgment.js} +23 -20
- package/dist/extensions/openclaw-plugin/index.js +2 -3
- package/dist/graph/delta.d.ts +3 -2
- package/dist/graph/delta.js +9 -23
- package/dist/{graph-extract.d.ts → graph/extract.d.ts} +10 -32
- package/dist/{graph-extract.js → graph/extract.js} +40 -81
- package/dist/{graph-recall.d.ts → graph/recall.d.ts} +9 -22
- package/dist/{graph-recall.js → graph/recall.js} +65 -108
- package/dist/graph/stream.d.ts +38 -0
- package/dist/{graph-stream.js → graph/stream.js} +20 -41
- package/dist/graph/view.d.ts +50 -0
- package/dist/graph/view.js +265 -0
- package/dist/graph/write.d.ts +4 -76
- package/dist/graph/write.js +13 -397
- package/dist/hooks/codex-session.js +1 -1
- package/dist/hooks/codex-wrapper.js +16 -17
- package/dist/hooks/copilot.d.ts +1 -8
- package/dist/hooks/copilot.js +16 -16
- package/dist/{cli → hooks}/hook-blocks.d.ts +6 -2
- package/dist/{cli → hooks}/hook-blocks.js +38 -125
- package/dist/hooks/json-hooks.d.ts +5 -37
- package/dist/hooks/json-hooks.js +49 -179
- package/dist/hooks/opencode.d.ts +0 -38
- package/dist/hooks/opencode.js +44 -103
- package/dist/hooks/shared.d.ts +8 -21
- package/dist/hooks/shared.js +30 -25
- package/dist/importers/core.d.ts +13 -42
- package/dist/importers/core.js +48 -64
- package/dist/importers/markdown-parse.d.ts +9 -32
- package/dist/importers/markdown-parse.js +10 -44
- package/dist/importers/markdown.js +5 -13
- package/dist/importers/sources.js +57 -81
- package/dist/importers/vault.d.ts +2 -8
- package/dist/importers/vault.js +95 -172
- package/dist/index.d.ts +26 -22
- package/dist/index.js +25 -21
- package/dist/learn/autolearn.d.ts +29 -0
- package/dist/{autolearn.js → learn/autolearn.js} +26 -51
- package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
- package/dist/{churn-git.js → learn/churn-git.js} +6 -4
- package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
- package/dist/learn/extract.js +123 -0
- package/dist/learn/forward-claim-detector.d.ts +12 -0
- package/dist/learn/forward-claim-detector.js +60 -0
- package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +10 -18
- package/dist/{invalidation.js → learn/invalidation.js} +92 -125
- package/dist/mcp/admin-tools.d.ts +1 -1
- package/dist/mcp/admin-tools.js +39 -64
- package/dist/mcp/format.d.ts +5 -5
- package/dist/mcp/format.js +7 -6
- package/dist/mcp/framing.d.ts +6 -0
- package/dist/mcp/framing.js +11 -3
- package/dist/mcp/memory-tools.js +10 -35
- package/dist/mcp/protocol.d.ts +14 -36
- package/dist/mcp/protocol.js +10 -19
- package/dist/mcp/recall-tools.d.ts +2 -2
- package/dist/mcp/recall-tools.js +70 -52
- package/dist/mcp/request.d.ts +3 -11
- package/dist/mcp/request.js +71 -85
- package/dist/mcp/server.d.ts +3 -9
- package/dist/mcp/server.js +6 -17
- package/dist/mcp/session-state.d.ts +2 -3
- package/dist/mcp/session-state.js +7 -13
- package/dist/mcp/shared-gate.js +1 -1
- package/dist/mcp/stdio.d.ts +2 -6
- package/dist/mcp/stdio.js +112 -38
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +7 -5
- package/dist/objects/customer-notes.d.ts +44 -0
- package/dist/objects/customer-notes.js +71 -0
- package/dist/objects/decisions.d.ts +41 -0
- package/dist/objects/decisions.js +63 -0
- package/dist/objects/descriptor.d.ts +52 -0
- package/dist/objects/descriptor.js +4 -0
- package/dist/objects/fields.d.ts +15 -0
- package/dist/objects/fields.js +21 -0
- package/dist/objects/incidents.d.ts +45 -0
- package/dist/objects/incidents.js +96 -0
- package/dist/objects/lifecycle.d.ts +27 -0
- package/dist/objects/lifecycle.js +96 -0
- package/dist/objects/policies.d.ts +60 -0
- package/dist/objects/policies.js +102 -0
- package/dist/objects/processes.d.ts +43 -0
- package/dist/objects/processes.js +92 -0
- package/dist/objects/project-briefs.d.ts +63 -0
- package/dist/objects/project-briefs.js +194 -0
- package/dist/objects/skills.d.ts +51 -0
- package/dist/objects/skills.js +110 -0
- package/dist/postinstall.js +10 -21
- package/dist/predictions/planning-fallacy.d.ts +14 -109
- package/dist/predictions/planning-fallacy.js +4 -129
- package/dist/rerankers/clef.d.ts +2 -6
- package/dist/rerankers/clef.js +28 -76
- package/dist/rerankers/cross-encoder.d.ts +0 -7
- package/dist/rerankers/cross-encoder.js +18 -28
- package/dist/rerankers/index.js +8 -7
- package/dist/rerankers/jev.d.ts +1 -4
- package/dist/rerankers/jev.js +36 -52
- package/dist/rerankers/llm.d.ts +2 -13
- package/dist/rerankers/llm.js +42 -59
- package/dist/rerankers/outage-warning.d.ts +8 -0
- package/dist/rerankers/outage-warning.js +32 -0
- package/dist/rerankers/remote.d.ts +4 -0
- package/dist/rerankers/remote.js +25 -0
- package/dist/rerankers/types.d.ts +3 -15
- package/dist/search/as-of.d.ts +1 -1
- package/dist/search/bm25-search.d.ts +2 -2
- package/dist/search/bm25-search.js +7 -7
- package/dist/search/bm25.d.ts +1 -1
- package/dist/search/bm25.js +1 -1
- package/dist/search/boosts.d.ts +5 -3
- package/dist/search/boosts.js +36 -15
- package/dist/search/breakdown.d.ts +2 -2
- package/dist/search/breakdown.js +2 -1
- package/dist/search/explain.d.ts +1 -1
- package/dist/search/explain.js +3 -2
- package/dist/search/finalize.d.ts +2 -2
- package/dist/search/finalize.js +4 -3
- package/dist/search/fusion.d.ts +1 -1
- package/dist/search/fusion.js +3 -3
- package/dist/search/goal-boost.d.ts +23 -0
- package/dist/search/goal-boost.js +90 -0
- package/dist/search/hybrid-score.d.ts +2 -2
- package/dist/search/hybrid-score.js +1 -1
- package/dist/search/hybrid.d.ts +6 -4
- package/dist/search/hybrid.js +11 -8
- package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
- package/dist/{multihop.js → search/multihop.js} +9 -8
- package/dist/search/path-context.d.ts +11 -0
- package/dist/{path-context.js → search/path-context.js} +8 -19
- package/dist/search/physics-search.d.ts +4 -4
- package/dist/search/physics-search.js +25 -22
- package/dist/search/rerank.d.ts +3 -3
- package/dist/search/rerank.js +4 -3
- package/dist/search/rrf.d.ts +15 -0
- package/dist/search/rrf.js +36 -0
- package/dist/search/temporal.d.ts +1 -1
- package/dist/search/temporal.js +5 -2
- package/dist/search/vector.d.ts +10 -3
- package/dist/search/vector.js +51 -15
- package/dist/server/auth.d.ts +10 -29
- package/dist/server/auth.js +57 -42
- package/dist/server/boot.d.ts +5 -0
- package/dist/server/boot.js +432 -0
- package/dist/server/client-ip.d.ts +8 -20
- package/dist/server/client-ip.js +23 -34
- package/dist/server/cursor.d.ts +1 -1
- package/dist/server/cursor.js +2 -3
- package/dist/server/deadline.d.ts +13 -0
- package/dist/server/deadline.js +45 -0
- package/dist/server/defaults.d.ts +3 -0
- package/dist/server/defaults.js +4 -0
- package/dist/server/key-check-bounds.d.ts +9 -0
- package/dist/server/key-check-bounds.js +46 -0
- package/dist/server/lifecycle.d.ts +5 -4
- package/dist/server/lifecycle.js +20 -5
- package/dist/server/mcp-http.d.ts +1 -4
- package/dist/server/mcp-http.js +44 -68
- package/dist/server/rate-limit.d.ts +21 -0
- package/dist/{rate-limit.js → server/rate-limit.js} +4 -13
- package/dist/server/ready.d.ts +7 -0
- package/dist/server/ready.js +38 -0
- package/dist/server/request.d.ts +14 -12
- package/dist/server/request.js +71 -28
- package/dist/server/route-table.d.ts +15 -0
- package/dist/server/route-table.js +202 -0
- package/dist/server/routes/admin.js +29 -30
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +35 -105
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +45 -115
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +44 -105
- package/dist/server/routes/memories.js +21 -43
- package/dist/server/routes/object-routes.d.ts +35 -0
- package/dist/server/routes/object-routes.js +72 -0
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +42 -134
- package/dist/server/routes/predictions.js +35 -63
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +44 -134
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +41 -120
- package/dist/server/routes/recall.js +21 -44
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +40 -138
- package/dist/server/server-detect.d.ts +28 -0
- package/dist/server/server-detect.js +156 -0
- package/dist/server/sleep-child.d.ts +2 -0
- package/dist/server/sleep-child.js +19 -0
- package/dist/server/sleep-offload.d.ts +20 -0
- package/dist/server/sleep-offload.js +73 -0
- package/dist/server/tls.d.ts +6 -0
- package/dist/server/tls.js +24 -0
- package/dist/server/types.d.ts +35 -14
- package/dist/server/validation.d.ts +6 -5
- package/dist/server/validation.js +16 -34
- package/dist/server.d.ts +39 -61
- package/dist/server.js +26 -569
- package/dist/sharing/global-store.d.ts +19 -0
- package/dist/sharing/global-store.js +75 -0
- package/dist/sharing/global-sync.d.ts +6 -0
- package/dist/sharing/global-sync.js +80 -0
- package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +5 -6
- package/dist/{project-merge.js → sharing/project-merge.js} +34 -51
- package/dist/sharing/scope.d.ts +7 -0
- package/dist/{scope.js → sharing/scope.js} +5 -12
- package/dist/sharing/search-both.d.ts +60 -0
- package/dist/sharing/search-both.js +138 -0
- package/dist/sharing/share.d.ts +38 -0
- package/dist/sharing/share.js +226 -0
- package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
- package/dist/{ambient-store.js → store/ambient.js} +11 -16
- package/dist/store/audit-event.d.ts +15 -17
- package/dist/store/audit-event.js +9 -16
- package/dist/{audit.d.ts → store/audit.d.ts} +29 -8
- package/dist/{audit.js → store/audit.js} +95 -18
- package/dist/{auth.d.ts → store/auth.d.ts} +19 -36
- package/dist/{auth.js → store/auth.js} +108 -99
- package/dist/store/candidates.d.ts +41 -13
- package/dist/store/candidates.js +141 -60
- package/dist/{card-detail.d.ts → store/card-detail.d.ts} +5 -4
- package/dist/{card-detail.js → store/card-detail.js} +3 -2
- package/dist/{store-cards.d.ts → store/cards.d.ts} +26 -16
- package/dist/{store-cards.js → store/cards.js} +133 -248
- package/dist/store/compactions.d.ts +78 -0
- package/dist/store/compactions.js +93 -0
- package/dist/store/conflicts.d.ts +26 -26
- package/dist/store/conflicts.js +194 -222
- package/dist/store/connectors/github.d.ts +84 -0
- package/dist/store/connectors/github.js +180 -0
- package/dist/store/connectors/slack.d.ts +69 -0
- package/dist/store/connectors/slack.js +177 -0
- package/dist/store/dashboard-reads.d.ts +27 -0
- package/dist/store/dashboard-reads.js +88 -0
- package/dist/store/delete-and-batch.d.ts +27 -51
- package/dist/store/delete-and-batch.js +100 -92
- package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +16 -5
- package/dist/{delivery-recorder.js → store/delivery-recorder.js} +60 -38
- package/dist/store/descendant-page.d.ts +12 -0
- package/dist/store/descendant-page.js +99 -0
- package/dist/store/diagnostics.d.ts +47 -0
- package/dist/store/diagnostics.js +44 -0
- package/dist/store/doctor-reads.d.ts +16 -0
- package/dist/store/doctor-reads.js +19 -0
- package/dist/store/dormant.d.ts +105 -0
- package/dist/store/dormant.js +241 -0
- package/dist/store/embeddings/index.d.ts +36 -0
- package/dist/{embeddings.js → store/embeddings/index.js} +104 -224
- package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
- package/dist/{local-embedding.js → store/embeddings/local.js} +69 -75
- package/dist/store/embeddings/provider.d.ts +40 -0
- package/dist/{embedding-provider.js → store/embeddings/provider.js} +78 -91
- package/dist/store/entry-reads.d.ts +66 -63
- package/dist/store/entry-reads.js +159 -121
- package/dist/store/entry-row.d.ts +14 -37
- package/dist/store/entry-row.js +37 -45
- package/dist/store/entry-writes.d.ts +40 -17
- package/dist/store/entry-writes.js +105 -41
- package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
- package/dist/{failure-log.js → store/failure-log.js} +9 -2
- package/dist/store/goals.d.ts +96 -0
- package/dist/store/goals.js +260 -0
- package/dist/store/graph-queue.d.ts +13 -0
- package/dist/store/graph-queue.js +70 -0
- package/dist/store/graph-reads.d.ts +41 -0
- package/dist/{graph/read.js → store/graph-reads.js} +72 -162
- package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +71 -14
- package/dist/{graph/rows.js → store/graph-rows.js} +20 -12
- package/dist/store/graph-view-rows.d.ts +13 -0
- package/dist/store/graph-view-rows.js +68 -0
- package/dist/store/graph-writes.d.ts +33 -0
- package/dist/store/graph-writes.js +232 -0
- package/dist/store/half-life.d.ts +35 -0
- package/dist/store/half-life.js +75 -0
- package/dist/store/handoffs.d.ts +6 -12
- package/dist/store/handoffs.js +54 -63
- package/dist/store/index-and-stats.d.ts +14 -20
- package/dist/store/index-and-stats.js +74 -119
- package/dist/store/index.d.ts +4 -0
- package/dist/store/index.js +3 -0
- package/dist/store/key-audit.d.ts +2 -2
- package/dist/store/key-audit.js +4 -4
- package/dist/store/key-writes.d.ts +12 -5
- package/dist/store/key-writes.js +30 -4
- package/dist/store/ledger-turn.d.ts +17 -0
- package/dist/store/ledger-turn.js +27 -0
- package/dist/store/markdown.d.ts +3 -7
- package/dist/store/markdown.js +25 -23
- package/dist/store/mirrors.d.ts +7 -13
- package/dist/store/mirrors.js +52 -47
- package/dist/store/object-types.d.ts +189 -0
- package/dist/store/object-types.js +4 -0
- package/dist/store/open.d.ts +6 -4
- package/dist/store/open.js +30 -36
- package/dist/store/planning-fallacy-evidence.d.ts +14 -0
- package/dist/store/planning-fallacy-evidence.js +52 -0
- package/dist/store/port.d.ts +649 -0
- package/dist/store/port.js +17 -0
- package/dist/{predictions/store.d.ts → store/predictions.d.ts} +25 -52
- package/dist/{predictions/store.js → store/predictions.js} +88 -184
- package/dist/{quality-repair.js → store/quality-repair.js} +27 -57
- package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
- package/dist/{quarantine.js → store/quarantine.js} +64 -22
- package/dist/store/raw-archive.d.ts +14 -0
- package/dist/{raw-archive.js → store/raw-archive.js} +20 -31
- package/dist/store/recall-scope.d.ts +78 -0
- package/dist/{recall-scope.js → store/recall-scope.js} +23 -84
- package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -81
- package/dist/{recall-trace.js → store/recall-trace.js} +41 -122
- package/dist/store/rejected-values.d.ts +55 -0
- package/dist/store/rejected-values.js +150 -0
- package/dist/store/rejection.d.ts +54 -0
- package/dist/{rejection.js → store/rejection.js} +16 -67
- package/dist/store/report-reads.d.ts +6 -0
- package/dist/store/report-reads.js +29 -0
- package/dist/store/rows.d.ts +11 -22
- package/dist/store/rows.js +52 -43
- package/dist/store/rule-sql.d.ts +5 -0
- package/dist/store/rule-sql.js +37 -0
- package/dist/store/search-rows.d.ts +22 -42
- package/dist/store/search-rows.js +55 -78
- package/dist/store/sessions.d.ts +23 -49
- package/dist/store/sessions.js +96 -118
- package/dist/store/sqlite/commit-watch.d.ts +4 -0
- package/dist/store/sqlite/commit-watch.js +29 -0
- package/dist/store/sqlite/connector-events-group.d.ts +5 -0
- package/dist/store/sqlite/connector-events-group.js +50 -0
- package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
- package/dist/store/sqlite/connector-writes-group.js +65 -0
- package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
- package/dist/store/sqlite/dag-reads-group.js +45 -0
- package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
- package/dist/store/{entry-writes-group.js → sqlite/entry-writes-group.js} +73 -60
- package/dist/store/sqlite/error-codec.d.ts +17 -0
- package/dist/store/sqlite/error-codec.js +61 -0
- package/dist/store/sqlite/executor-counts.d.ts +10 -0
- package/dist/store/sqlite/executor-counts.js +11 -0
- package/dist/store/sqlite/executor.d.ts +29 -0
- package/dist/store/sqlite/executor.js +287 -0
- package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
- package/dist/store/sqlite/graph-reads-group.js +18 -0
- package/dist/store/sqlite/local.d.ts +21 -0
- package/dist/store/sqlite/local.js +39 -0
- package/dist/store/sqlite/object-rows.d.ts +102 -0
- package/dist/store/sqlite/object-rows.js +221 -0
- package/dist/store/sqlite/objects-group.d.ts +20 -0
- package/dist/store/sqlite/objects-group.js +316 -0
- package/dist/store/sqlite/predictions-group.d.ts +5 -0
- package/dist/store/sqlite/predictions-group.js +28 -0
- package/dist/store/sqlite/quarantine-group.d.ts +5 -0
- package/dist/store/sqlite/quarantine-group.js +38 -0
- package/dist/store/sqlite/store.d.ts +23 -0
- package/dist/store/sqlite/store.js +294 -0
- package/dist/store/sqlite/vector-pack.d.ts +18 -0
- package/dist/store/sqlite/vector-pack.js +46 -0
- package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
- package/dist/store/sqlite/vector-reads-group.js +23 -0
- package/dist/store/sqlite/worker-entry.d.ts +2 -0
- package/dist/store/sqlite/worker-entry.js +8 -0
- package/dist/store/sqlite/worker-jobs.d.ts +5 -0
- package/dist/store/sqlite/worker-jobs.js +116 -0
- package/dist/store/sqlite/worker-ops.d.ts +135 -0
- package/dist/store/sqlite/worker-ops.js +93 -0
- package/dist/store/sqlite/worker-store.d.ts +8 -0
- package/dist/store/sqlite/worker-store.js +79 -0
- package/dist/store/summaries.d.ts +11 -72
- package/dist/store/summaries.js +47 -186
- package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
- package/dist/{summary-dirty.js → store/summary-dirty.js} +1 -1
- package/dist/store/tenant-lookup.d.ts +6 -1
- package/dist/store/tenant-lookup.js +7 -0
- package/dist/store/tenant.d.ts +11 -0
- package/dist/store/tenant.js +28 -0
- package/dist/store/token-ledger-rows.d.ts +61 -0
- package/dist/store/token-ledger-rows.js +68 -0
- package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +14 -51
- package/dist/{token-ledger.js → store/token-ledger.js} +51 -129
- package/dist/store/tombstone-checks.d.ts +12 -0
- package/dist/store/tombstone-checks.js +31 -0
- package/dist/store/usage-reports.d.ts +7 -0
- package/dist/store/usage-reports.js +18 -0
- package/dist/store/vector-index.d.ts +46 -0
- package/dist/store/vector-index.js +170 -0
- package/dist/{working-memory.d.ts → store/working-memory.d.ts} +11 -26
- package/dist/store/working-memory.js +118 -0
- package/dist/{yaml.d.ts → store/yaml.d.ts} +1 -5
- package/dist/{yaml.js → store/yaml.js} +2 -6
- package/dist/support-bundle.d.ts +1 -1
- package/dist/support-bundle.js +19 -37
- package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
- package/dist/{gated-write.js → trust/gated-write.js} +6 -6
- package/dist/trust/quarantine.d.ts +4 -0
- package/dist/trust/quarantine.js +8 -0
- package/dist/trust/reject-flow.d.ts +23 -0
- package/dist/trust/reject-flow.js +65 -0
- package/dist/util/anthropic-messages.d.ts +31 -0
- package/dist/util/anthropic-messages.js +58 -0
- package/dist/util/atomic-write.d.ts +4 -0
- package/dist/util/atomic-write.js +138 -0
- package/dist/util/capped-json.d.ts +6 -0
- package/dist/util/capped-json.js +46 -0
- package/dist/util/crash-handlers.d.ts +12 -0
- package/dist/util/crash-handlers.js +72 -0
- package/dist/{env.d.ts → util/env.d.ts} +27 -7
- package/dist/{env.js → util/env.js} +33 -8
- package/dist/{home-path.d.ts → util/home-path.d.ts} +2 -1
- package/dist/util/home-path.js +69 -0
- package/dist/{http-retry.d.ts → util/http-retry.d.ts} +8 -2
- package/dist/util/http-retry.js +103 -0
- package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
- package/dist/{http-util.js → util/http-util.js} +31 -11
- package/dist/util/json.d.ts +17 -0
- package/dist/util/json.js +25 -0
- package/dist/{log.d.ts → util/log.d.ts} +7 -3
- package/dist/{log.js → util/log.js} +36 -11
- package/dist/util/real-path.d.ts +3 -0
- package/dist/util/real-path.js +15 -0
- package/dist/util/request-scope.d.ts +28 -0
- package/dist/util/request-scope.js +48 -0
- package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
- package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +5 -30
- package/dist/{secret-detect.js → util/secret-detect.js} +17 -42
- package/dist/util/stored-json.d.ts +9 -0
- package/dist/util/stored-json.js +8 -0
- package/dist/util/time.d.ts +2 -0
- package/dist/util/time.js +3 -0
- package/dist/util/token-text.d.ts +15 -0
- package/dist/util/token-text.js +20 -0
- package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +2 -0
- package/dist/util/transcript-tail.js +49 -0
- package/dist/util/version.d.ts +11 -0
- package/dist/util/version.js +26 -0
- package/extensions/openclaw-plugin/index.ts +2 -6
- package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
- package/extensions/openclaw-plugin/package.json +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +2 -2
- package/dist/ablation.d.ts +0 -102
- package/dist/ablation.js +0 -136
- package/dist/api.d.ts +0 -26
- package/dist/api.js +0 -29
- package/dist/audit-prune.d.ts +0 -62
- package/dist/audit-prune.js +0 -107
- package/dist/autolearn.d.ts +0 -56
- package/dist/client.d.ts +0 -48
- package/dist/compare.d.ts +0 -86
- package/dist/compare.js +0 -117
- package/dist/connectors/github/cli-impl.d.ts +0 -25
- package/dist/connectors/github/cli-impl.js +0 -227
- package/dist/connectors/github/idempotency.d.ts +0 -19
- package/dist/connectors/github/idempotency.js +0 -27
- package/dist/connectors/slack/idempotency.d.ts +0 -17
- package/dist/connectors/slack/idempotency.js +0 -31
- package/dist/correction-latency.d.ts +0 -36
- package/dist/customer-notes.d.ts +0 -96
- package/dist/customer-notes.js +0 -336
- package/dist/db.d.ts +0 -9
- package/dist/db.js +0 -8
- package/dist/decisions.d.ts +0 -94
- package/dist/decisions.js +0 -326
- package/dist/dedupe.d.ts +0 -75
- package/dist/dedupe.js +0 -169
- package/dist/dormant.d.ts +0 -93
- package/dist/dormant.js +0 -137
- package/dist/embedding-provider.d.ts +0 -77
- package/dist/embeddings.d.ts +0 -101
- package/dist/extract.js +0 -133
- package/dist/forward-claim-detector.d.ts +0 -36
- package/dist/forward-claim-detector.js +0 -112
- package/dist/goals.d.ts +0 -173
- package/dist/goals.js +0 -448
- package/dist/graph/read.d.ts +0 -73
- package/dist/graph/rows.d.ts +0 -45
- package/dist/graph/types.js +0 -11
- package/dist/graph-stream.d.ts +0 -70
- package/dist/graph-view.d.ts +0 -73
- package/dist/graph-view.js +0 -333
- package/dist/half-life-migration.d.ts +0 -63
- package/dist/half-life-migration.js +0 -182
- package/dist/handoff.js +0 -68
- package/dist/home-path.js +0 -24
- package/dist/http-retry.js +0 -51
- package/dist/incidents.d.ts +0 -103
- package/dist/incidents.js +0 -349
- package/dist/instruction-detect.js +0 -27
- package/dist/json.d.ts +0 -7
- package/dist/json.js +0 -11
- package/dist/ledger-db.d.ts +0 -10
- package/dist/ledger-db.js +0 -42
- package/dist/memory-value-weights.d.ts +0 -19
- package/dist/memory-value.d.ts +0 -113
- package/dist/memory-value.js +0 -250
- package/dist/memory.d.ts +0 -294
- package/dist/memory.js +0 -522
- package/dist/owner-validation.d.ts +0 -42
- package/dist/owner-validation.js +0 -56
- package/dist/path-context.d.ts +0 -24
- package/dist/physics-state.d.ts +0 -39
- package/dist/policies.d.ts +0 -151
- package/dist/policies.js +0 -434
- package/dist/processes.d.ts +0 -108
- package/dist/processes.js +0 -371
- package/dist/project-briefs.d.ts +0 -128
- package/dist/project-briefs.js +0 -523
- package/dist/provenance-coverage.d.ts +0 -18
- package/dist/rate-limit.d.ts +0 -34
- package/dist/raw-archive-mirror-cleanup.d.ts +0 -20
- package/dist/raw-archive.d.ts +0 -24
- package/dist/recall-history.d.ts +0 -131
- package/dist/recall-history.js +0 -227
- package/dist/recall-scope.d.ts +0 -138
- package/dist/refine-llm.d.ts +0 -61
- package/dist/refine-llm.js +0 -167
- package/dist/reject-flow.d.ts +0 -69
- package/dist/reject-flow.js +0 -260
- package/dist/rejection.d.ts +0 -100
- package/dist/replay.d.ts +0 -41
- package/dist/replay.js +0 -122
- package/dist/rrf.d.ts +0 -43
- package/dist/rrf.js +0 -61
- package/dist/scope.d.ts +0 -14
- package/dist/server-detect.d.ts +0 -72
- package/dist/server-detect.js +0 -222
- package/dist/session-owners.d.ts +0 -7
- package/dist/session-owners.js +0 -54
- package/dist/shared.d.ts +0 -186
- package/dist/shared.js +0 -540
- package/dist/skills.d.ts +0 -101
- package/dist/skills.js +0 -367
- package/dist/store/entry-writes-group.d.ts +0 -9
- package/dist/store/vector-writes.d.ts +0 -6
- package/dist/store/vector-writes.js +0 -59
- package/dist/store-port.d.ts +0 -262
- package/dist/store-port.js +0 -178
- package/dist/tenant.d.ts +0 -25
- package/dist/tenant.js +0 -43
- package/dist/trace.d.ts +0 -34
- package/dist/transcript-tail.js +0 -48
- package/dist/version.d.ts +0 -26
- package/dist/version.js +0 -41
- package/dist/working-memory.js +0 -154
- /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
- /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
- /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
- /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
- /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
- /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
- /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
- /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
- /package/dist/{api-errors.js → core/api-errors.js} +0 -0
- /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
- /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
- /package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +0 -0
- /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
- /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
- /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
- /package/dist/{quality-repair.d.ts → store/quality-repair.d.ts} +0 -0
- /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
- /package/dist/{escape.js → util/escape.js} +0 -0
- /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
- /package/dist/{keyset.js → util/keyset.js} +0 -0
- /package/dist/{same-text.js → util/same-text.js} +0 -0
- /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
- /package/dist/{db → util}/sqlite-blocked.js +0 -0
- /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
- /package/dist/{tokenize.js → util/tokenize.js} +0 -0
- /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
- /package/dist/{write-budget.js → util/write-budget.js} +0 -0
|
@@ -1,17 +1,11 @@
|
|
|
1
|
-
import { type MemoryEntry } from '
|
|
1
|
+
import { type MemoryEntry } from '../core/memory.js';
|
|
2
|
+
import { type DagSummaryOptions } from './dag-summary.js';
|
|
2
3
|
export interface FactCluster {
|
|
3
4
|
label: string;
|
|
4
5
|
members: MemoryEntry[];
|
|
5
6
|
entityTags: string[];
|
|
6
7
|
}
|
|
7
8
|
export declare function clusterFacts(facts: MemoryEntry[]): FactCluster[];
|
|
8
|
-
export interface DagSummaryOptions {
|
|
9
|
-
apiKey: string;
|
|
10
|
-
model?: string;
|
|
11
|
-
fetcher?: typeof fetch;
|
|
12
|
-
onError?: (msg: string) => void;
|
|
13
|
-
}
|
|
14
|
-
export declare function generateDagSummary(label: string, factContents: string[], opts: DagSummaryOptions): Promise<string | null>;
|
|
15
9
|
export interface DagBuildResult {
|
|
16
10
|
candidateClusters: number;
|
|
17
11
|
summariesCreated: number;
|
|
@@ -29,19 +23,8 @@ export interface DagRebuildResult {
|
|
|
29
23
|
failed: number;
|
|
30
24
|
capped: boolean;
|
|
31
25
|
}
|
|
32
|
-
/**
|
|
33
|
-
*
|
|
34
|
-
* Thin orchestrator; the heavy lifting lives in store.ts (load + apply)
|
|
35
|
-
* and dag.ts:generateDagSummary (LLM call).
|
|
36
|
-
*
|
|
37
|
-
* Per-summary try/catch: one throwing rebuild does NOT abort the rest of the queue.
|
|
38
|
-
*
|
|
39
|
-
* Race-loser handling: applyRebuildResult's UPDATE WHERE includes
|
|
40
|
-
* AND summary_dirty=1, so concurrent sleep's second writer returns
|
|
41
|
-
* changed=false. Silent skip (neither rebuilt++ nor refused++ nor failed++).
|
|
42
|
-
*
|
|
43
|
-
* A tombstone hit counts as `refused`, not `rebuilt`; dirty clears either way.
|
|
44
|
-
*/
|
|
26
|
+
/** Sleep-cycle phase draining the dirty L2 summary queue; one throwing rebuild does not abort the rest.
|
|
27
|
+
* A concurrent sleep's second writer gets changed=false (UPDATE requires summary_dirty=1) and is skipped silently; a tombstone hit counts as `refused`. */
|
|
45
28
|
export declare function rebuildDirtySummaries(hippoRoot: string, opts: DagSummaryOptions & {
|
|
46
29
|
cap?: number;
|
|
47
30
|
}): Promise<DagRebuildResult>;
|
|
@@ -54,13 +37,7 @@ export interface EntityProfilesBuildResult {
|
|
|
54
37
|
* `failed`: a tombstone hit is a deliberate refusal, not an error. */
|
|
55
38
|
rejected: number;
|
|
56
39
|
}
|
|
57
|
-
/**
|
|
58
|
-
*
|
|
59
|
-
* shared entity tags. Threshold 2+ L2s per entity. Mirrors buildDag L1->L2
|
|
60
|
-
* pattern, one level up.
|
|
61
|
-
*
|
|
62
|
-
* Born-dirty cancellation: each L2 link write marks the new L3 dirty, so clear it
|
|
63
|
-
* or the same sleep cycle's rebuild re-rebuilds the freshly built L3.
|
|
64
|
-
*/
|
|
40
|
+
/** Build L3 entity profiles by clustering L2 summaries sharing entity tags (2+ L2s per entity).
|
|
41
|
+
* Each L2 link write marks the new L3 dirty, so clear it or the same cycle re-rebuilds it. */
|
|
65
42
|
export declare function buildEntityProfiles(hippoRoot: string, l2Summaries: MemoryEntry[], opts: DagSummaryOptions): Promise<EntityProfilesBuildResult>;
|
|
66
43
|
//# sourceMappingURL=dag.d.ts.map
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { createMemory, Layer } from '
|
|
2
|
-
import { writeEntry } from '
|
|
3
|
-
import { loadAllDirtySummaries, loadChildrenOfSummary, applyRebuildResult, clearSummaryDirtyAfterBuild, } from '
|
|
4
|
-
import { RejectedValueError } from '
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
|
|
11
|
-
|
|
1
|
+
import { createMemory, Layer } from '../core/memory.js';
|
|
2
|
+
import { writeEntry, writeEntriesTogether } from '../store/entry-writes.js';
|
|
3
|
+
import { loadAllDirtySummaries, loadChildrenOfSummary, applyRebuildResult, clearSummaryDirtyAfterBuild, } from '../store/summaries.js';
|
|
4
|
+
import { RejectedValueError } from '../store/rejection.js';
|
|
5
|
+
import { generateDagSummary } from './dag-summary.js';
|
|
6
|
+
import { derivationScope, derivationPartitionKey } from '../store/recall-scope.js';
|
|
7
|
+
import { loadConfig } from '../core/config.js';
|
|
8
|
+
import { neverAutoShareTags } from '../sharing/share.js';
|
|
9
|
+
import { errorFields, errorMessage, log } from '../util/log.js';
|
|
10
|
+
const SUMMARY_FALLBACK_CHARS = 40;
|
|
11
|
+
const DEFAULT_REBUILD_CAP = 20;
|
|
12
12
|
export function clusterFacts(facts) {
|
|
13
13
|
if (facts.length === 0)
|
|
14
14
|
return [];
|
|
@@ -35,66 +35,12 @@ export function clusterFacts(facts) {
|
|
|
35
35
|
const sharedTags = entityTags[cluster[0]].filter((t) => cluster.every((idx) => entityTags[idx].includes(t)));
|
|
36
36
|
const label = sharedTags
|
|
37
37
|
.map((t) => t.split(':')[1])
|
|
38
|
-
.join(': ') || members[0].content.slice(0,
|
|
38
|
+
.join(': ') || members[0].content.slice(0, SUMMARY_FALLBACK_CHARS);
|
|
39
39
|
clusters.push({ label, members, entityTags: sharedTags });
|
|
40
40
|
}
|
|
41
41
|
return clusters;
|
|
42
42
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
Topic: {label}
|
|
46
|
-
Facts:
|
|
47
|
-
{facts}
|
|
48
|
-
|
|
49
|
-
Write a single concise paragraph (2-4 sentences) that captures all the key information from these facts. This summary will be used to quickly determine if this cluster is relevant to a future query, so include specific names, dates, numbers, and key details. Output ONLY the summary paragraph, no preamble.`;
|
|
50
|
-
export async function generateDagSummary(label, factContents, opts) {
|
|
51
|
-
const model = opts.model ?? 'claude-sonnet-4-6';
|
|
52
|
-
const fetchFn = opts.fetcher ?? fetch;
|
|
53
|
-
const factsBlock = factContents.map((f, i) => `${i + 1}. ${redactSecretsStrict(f)}`).join('\n');
|
|
54
|
-
const prompt = DAG_SUMMARY_PROMPT
|
|
55
|
-
.replace('{label}', redactSecretsStrict(label))
|
|
56
|
-
.replace('{facts}', factsBlock);
|
|
57
|
-
let res;
|
|
58
|
-
try {
|
|
59
|
-
res = await fetchWithRetry('https://api.anthropic.com/v1/messages', {
|
|
60
|
-
method: 'POST',
|
|
61
|
-
headers: {
|
|
62
|
-
'content-type': 'application/json',
|
|
63
|
-
'x-api-key': opts.apiKey,
|
|
64
|
-
'anthropic-version': '2023-06-01',
|
|
65
|
-
},
|
|
66
|
-
body: JSON.stringify({
|
|
67
|
-
model,
|
|
68
|
-
max_tokens: 400,
|
|
69
|
-
messages: [{ role: 'user', content: prompt }],
|
|
70
|
-
}),
|
|
71
|
-
}, { timeoutMs: llmTimeoutMs(), fetchFn });
|
|
72
|
-
}
|
|
73
|
-
catch (err) {
|
|
74
|
-
opts.onError?.(`request failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
75
|
-
return null;
|
|
76
|
-
}
|
|
77
|
-
if (!res.ok) {
|
|
78
|
-
opts.onError?.(`HTTP ${res.status}`);
|
|
79
|
-
return null;
|
|
80
|
-
}
|
|
81
|
-
try {
|
|
82
|
-
const data = await res.json();
|
|
83
|
-
const text = data.content?.[0]?.text?.trim() ?? '';
|
|
84
|
-
const defect = certainDefect(text);
|
|
85
|
-
if (defect !== null) {
|
|
86
|
-
opts.onError?.(`summary quality refused: ${defect}`);
|
|
87
|
-
return null;
|
|
88
|
-
}
|
|
89
|
-
return text.length >= 20 ? text : null;
|
|
90
|
-
}
|
|
91
|
-
catch (err) {
|
|
92
|
-
opts.onError?.(`unparseable response: ${err instanceof Error ? err.message : String(err)}`);
|
|
93
|
-
return null;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
// Partition BEFORE clustering so one LLM summary never mixes facts from different tenants.
|
|
97
|
-
// Map keeps insertion order, so a single-tenant store iterates in its original order.
|
|
43
|
+
// Partition before clustering so one LLM summary never mixes tenants; Map keeps insertion order, so a single-tenant store iterates as before.
|
|
98
44
|
// buildEntityProfiles partitions its L2s with this same key.
|
|
99
45
|
function partitionFactsByTenant(unparented) {
|
|
100
46
|
const unparentedByTenant = new Map();
|
|
@@ -111,10 +57,7 @@ function partitionFactsByTenant(unparented) {
|
|
|
111
57
|
/** The L2 summary entry for one cluster, landing in the facts' own tenant and scope. */
|
|
112
58
|
function createClusterSummaryEntry(summary, cluster, home) {
|
|
113
59
|
const memberCreatedAts = cluster.members.map((m) => m.created).sort();
|
|
114
|
-
// Every member
|
|
115
|
-
// tenant partition above), so the summary lands in the same tenant
|
|
116
|
-
// as the facts it summarizes instead of always 'default'
|
|
117
|
-
// (memory.ts:535 defaults tenantId when the option is omitted).
|
|
60
|
+
// Every cluster member shares home.tenantId (tenant partition above), so the summary lands in the facts' tenant, not 'default'.
|
|
118
61
|
const summaryEntry = createMemory(summary, {
|
|
119
62
|
layer: Layer.Semantic,
|
|
120
63
|
tags: [...cluster.entityTags, ...neverAutoShareTags(cluster.members), 'dag-summary'],
|
|
@@ -152,11 +95,7 @@ async function summarizeCluster(hippoRoot, cluster, home, opts, result) {
|
|
|
152
95
|
throw err;
|
|
153
96
|
}
|
|
154
97
|
result.summariesCreated++;
|
|
155
|
-
|
|
156
|
-
const updated = { ...member, dag_parent_id: summaryEntry.id };
|
|
157
|
-
writeEntry(hippoRoot, updated);
|
|
158
|
-
result.factsLinked++;
|
|
159
|
-
}
|
|
98
|
+
result.factsLinked += writeEntriesTogether(hippoRoot, cluster.members.map((member) => ({ ...member, dag_parent_id: summaryEntry.id })));
|
|
160
99
|
// Member writes just marked this fresh summary dirty; clear it, or the same sleep cycle's
|
|
161
100
|
// rebuild pass would re-rebuild every new summary at twice the LLM cost.
|
|
162
101
|
clearSummaryDirtyAfterBuild(hippoRoot, summaryEntry.id, summaryEntry.tenantId, 'buildDag');
|
|
@@ -185,29 +124,10 @@ export async function buildDag(hippoRoot, facts, opts) {
|
|
|
185
124
|
async function rebuildOneSummary(hippoRoot, summary, opts, result) {
|
|
186
125
|
const children = loadChildrenOfSummary(hippoRoot, summary.id, summary.tenantId);
|
|
187
126
|
if (children.length === 0) {
|
|
188
|
-
|
|
189
|
-
const { changed } = applyRebuildResult(hippoRoot, summary, {
|
|
190
|
-
content: summary.content,
|
|
191
|
-
descendant_count: 0,
|
|
192
|
-
earliest_at: null,
|
|
193
|
-
latest_at: null,
|
|
194
|
-
bumpRebuildCount: false,
|
|
195
|
-
zeroChildren: true,
|
|
196
|
-
actor: 'sleep',
|
|
197
|
-
});
|
|
198
|
-
if (changed)
|
|
199
|
-
result.zeroChildSkipped++;
|
|
200
|
-
// changed=false → race lost / row vanished; silently skip. `refused`
|
|
201
|
-
// is always false here — applyRebuildResult only checks the
|
|
202
|
-
// tombstone when bumpRebuildCount is true (store/summaries.ts).
|
|
127
|
+
clearZeroChildSummary(hippoRoot, summary, result);
|
|
203
128
|
return;
|
|
204
129
|
}
|
|
205
|
-
|
|
206
|
-
const entityTags = summary.tags.filter((t) => t.startsWith('speaker:') || t.startsWith('topic:'));
|
|
207
|
-
const label = entityTags.length > 0
|
|
208
|
-
? entityTags.map((t) => t.split(':')[1]).join(': ')
|
|
209
|
-
: summary.content.slice(0, 40);
|
|
210
|
-
const newContent = await generateDagSummary(label, children.map((c) => c.content), opts);
|
|
130
|
+
const newContent = await generateDagSummary(summaryLabel(summary), children.map((c) => c.content), opts);
|
|
211
131
|
if (!newContent) {
|
|
212
132
|
// LLM null / fetch error → leave dirty for next cycle
|
|
213
133
|
result.failed++;
|
|
@@ -232,21 +152,33 @@ async function rebuildOneSummary(hippoRoot, summary, opts, result) {
|
|
|
232
152
|
// changed=false (refused also false) → race lost; not failure, not
|
|
233
153
|
// success, silently skip
|
|
234
154
|
}
|
|
235
|
-
/**
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
155
|
+
/** Zero-child case: clear dirty + zero counts, no LLM call, no rebuild_count bump. */
|
|
156
|
+
function clearZeroChildSummary(hippoRoot, summary, result) {
|
|
157
|
+
const { changed } = applyRebuildResult(hippoRoot, summary, {
|
|
158
|
+
content: summary.content,
|
|
159
|
+
descendant_count: 0,
|
|
160
|
+
earliest_at: null,
|
|
161
|
+
latest_at: null,
|
|
162
|
+
bumpRebuildCount: false,
|
|
163
|
+
zeroChildren: true,
|
|
164
|
+
actor: 'sleep',
|
|
165
|
+
});
|
|
166
|
+
if (changed)
|
|
167
|
+
result.zeroChildSkipped++;
|
|
168
|
+
// changed=false means race lost or row vanished: skip silently. `refused` is always false here, as applyRebuildResult
|
|
169
|
+
// checks the tombstone only when bumpRebuildCount is true.
|
|
170
|
+
}
|
|
171
|
+
// Derive label from summary's existing entity tags (mirrors clusterFacts)
|
|
172
|
+
function summaryLabel(summary) {
|
|
173
|
+
const entityTags = summary.tags.filter((t) => t.startsWith('speaker:') || t.startsWith('topic:'));
|
|
174
|
+
return entityTags.length > 0
|
|
175
|
+
? entityTags.map((t) => t.split(':')[1]).join(': ')
|
|
176
|
+
: summary.content.slice(0, SUMMARY_FALLBACK_CHARS);
|
|
177
|
+
}
|
|
178
|
+
/** Sleep-cycle phase draining the dirty L2 summary queue; one throwing rebuild does not abort the rest.
|
|
179
|
+
* A concurrent sleep's second writer gets changed=false (UPDATE requires summary_dirty=1) and is skipped silently; a tombstone hit counts as `refused`. */
|
|
248
180
|
export async function rebuildDirtySummaries(hippoRoot, opts) {
|
|
249
|
-
const cap = opts.cap ??
|
|
181
|
+
const cap = opts.cap ?? DEFAULT_REBUILD_CAP;
|
|
250
182
|
const dirty = loadAllDirtySummaries(hippoRoot);
|
|
251
183
|
const capped = dirty.length > cap;
|
|
252
184
|
const queue = dirty.slice(0, cap);
|
|
@@ -259,12 +191,8 @@ export async function rebuildDirtySummaries(hippoRoot, opts) {
|
|
|
259
191
|
capped,
|
|
260
192
|
};
|
|
261
193
|
for (const [index, summary] of queue.entries()) {
|
|
262
|
-
// Yield the macrotask queue every 25 summaries
|
|
263
|
-
//
|
|
264
|
-
// microtask when the response is cached/mocked), so a large batch would
|
|
265
|
-
// otherwise starve timers and IPC for the whole rebuild: server
|
|
266
|
-
// keep-alive pings in production, Vitest's birpc heartbeat in tests
|
|
267
|
-
// (hardcoded 60s upstream, vitest-dev/vitest#8164).
|
|
194
|
+
// Yield the macrotask queue every 25 summaries: each iteration is synchronous SQLite, so a batch of up to 1000
|
|
195
|
+
// would starve timers and IPC (server keep-alives, Vitest's birpc heartbeat).
|
|
268
196
|
if (index > 0 && index % 25 === 0) {
|
|
269
197
|
await new Promise((resolve) => setImmediate(resolve));
|
|
270
198
|
}
|
|
@@ -275,7 +203,7 @@ export async function rebuildDirtySummaries(hippoRoot, opts) {
|
|
|
275
203
|
// One throw doesn't abort the queue; log enough to triage an exotic
|
|
276
204
|
// failure (SQLite I/O, prepare), since audit() already catches its own.
|
|
277
205
|
result.failed++;
|
|
278
|
-
log.error(`rebuildDirtySummaries: summary ${summary.id} (tenant ${summary.tenantId}) failed: ${err
|
|
206
|
+
log.error(`rebuildDirtySummaries: summary ${summary.id} (tenant ${summary.tenantId}) failed: ${errorMessage(err)}`, errorFields(err));
|
|
279
207
|
}
|
|
280
208
|
}
|
|
281
209
|
return result;
|
|
@@ -321,23 +249,13 @@ async function profileCluster(hippoRoot, cluster, home, opts, result) {
|
|
|
321
249
|
throw err;
|
|
322
250
|
}
|
|
323
251
|
result.profilesCreated++;
|
|
324
|
-
|
|
325
|
-
const updated = { ...member, dag_parent_id: profileEntry.id };
|
|
326
|
-
writeEntry(hippoRoot, updated);
|
|
327
|
-
result.l2sLinked++;
|
|
328
|
-
}
|
|
252
|
+
result.l2sLinked += writeEntriesTogether(hippoRoot, cluster.members.map((member) => ({ ...member, dag_parent_id: profileEntry.id })));
|
|
329
253
|
// Re-linking just marked the fresh L3 dirty; clear it so this cycle's rebuild skips it.
|
|
330
254
|
// The distinct source tags the audit row.
|
|
331
255
|
clearSummaryDirtyAfterBuild(hippoRoot, profileEntry.id, home.tenantId, 'buildEntityProfiles', 'buildEntityProfiles-clean');
|
|
332
256
|
}
|
|
333
|
-
/**
|
|
334
|
-
*
|
|
335
|
-
* shared entity tags. Threshold 2+ L2s per entity. Mirrors buildDag L1->L2
|
|
336
|
-
* pattern, one level up.
|
|
337
|
-
*
|
|
338
|
-
* Born-dirty cancellation: each L2 link write marks the new L3 dirty, so clear it
|
|
339
|
-
* or the same sleep cycle's rebuild re-rebuilds the freshly built L3.
|
|
340
|
-
*/
|
|
257
|
+
/** Build L3 entity profiles by clustering L2 summaries sharing entity tags (2+ L2s per entity).
|
|
258
|
+
* Each L2 link write marks the new L3 dirty, so clear it or the same cycle re-rebuilds it. */
|
|
341
259
|
export async function buildEntityProfiles(hippoRoot, l2Summaries, opts) {
|
|
342
260
|
const result = {
|
|
343
261
|
candidateClusters: 0,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { MemoryEntry } from '../memory.js';
|
|
2
|
-
import { type MvRankInfo } from '
|
|
1
|
+
import { MemoryEntry } from '../core/memory.js';
|
|
2
|
+
import { type MvRankInfo } from './memory-value.js';
|
|
3
3
|
import type { SleepRun } from './run.js';
|
|
4
4
|
export declare const DECAY_THRESHOLD = 0.05;
|
|
5
5
|
/** What the decay pass hands to the conflict check and the rescue audit at the end of the run. */
|
|
@@ -1,18 +1,14 @@
|
|
|
1
|
-
import { calculateStrength } from '../memory.js';
|
|
2
|
-
import { detectSecret } from '../secret-detect.js';
|
|
3
|
-
import { rescueSet, rankNonPinnedByTenant, validateWeights } from '
|
|
4
|
-
import { MEMORY_VALUE_WEIGHTS, SOURCE_ARTIFACT_SHA256 } from '
|
|
1
|
+
import { calculateStrength } from '../core/memory.js';
|
|
2
|
+
import { detectSecret } from '../util/secret-detect.js';
|
|
3
|
+
import { rescueSet, rankNonPinnedByTenant, validateWeights } from './memory-value.js';
|
|
4
|
+
import { MEMORY_VALUE_WEIGHTS, SOURCE_ARTIFACT_SHA256 } from './memory-value-weights.js';
|
|
5
|
+
const STRENGTH_DECIMALS = 4;
|
|
5
6
|
export const DECAY_THRESHOLD = 0.05;
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
// a DELETE, and with it this whole cycle's batch and every later sleep,
|
|
9
|
-
// so it stays where it is (stored strength refreshed) but sits out the
|
|
10
|
-
// rest of this cycle the way a deleted row would. Anything else goes
|
|
11
|
-
// dormant when config.dormant is on, and is deleted otherwise.
|
|
12
|
-
// Only called for rows `retirable` allows (never pinned, raw, kept for good or backing a first-class object).
|
|
7
|
+
// Leaving active memory: a raw receipt stays (the append-only trigger aborts DELETE for the whole batch; stored strength refreshed) but sits out this cycle;
|
|
8
|
+
// others go dormant when config.dormant is on, else are deleted. Only called for rows `retirable` allows.
|
|
13
9
|
function retireFaded(run, entry, strength) {
|
|
14
10
|
const { result } = run;
|
|
15
|
-
const why = `(strength ${strength.toFixed(
|
|
11
|
+
const why = `(strength ${strength.toFixed(STRENGTH_DECIMALS)} < ${DECAY_THRESHOLD})`;
|
|
16
12
|
// A faded secret is deleted, never kept dormant: keeping it would hold a
|
|
17
13
|
// credential on disk that the user reasonably expects forgetting removed.
|
|
18
14
|
if (run.config.dormant.enabled && !detectSecret(entry).flagged) {
|
|
@@ -35,11 +31,8 @@ function keepSurvivor(run, entry, strength) {
|
|
|
35
31
|
run.result.decayed++;
|
|
36
32
|
return updated;
|
|
37
33
|
}
|
|
38
|
-
//
|
|
39
|
-
//
|
|
40
|
-
// -------------------------------------------------------------------------
|
|
41
|
-
// Memory-value flag OFF runs the single-phase loop below. Flag ON classifies every entry with ZERO commits,
|
|
42
|
-
// runs rescueSet per tenant, then commits; rescued entries stay full survivors for this cycle's later passes.
|
|
34
|
+
// 1. Decay pass. Memory-value flag OFF runs the single-phase loop below; ON classifies every entry with zero commits, runs rescueSet per tenant, then commits.
|
|
35
|
+
// Rescued entries stay full survivors for this cycle's later passes.
|
|
43
36
|
export function decayPass(run) {
|
|
44
37
|
if (run.config.memoryValue.enabled)
|
|
45
38
|
return decayWithMemoryValue(run);
|
|
@@ -65,35 +58,41 @@ function reportNonFiniteScores(result, rankById) {
|
|
|
65
58
|
`with non-finite computed features (never rescued): ${nonFiniteIds.join(', ')}`);
|
|
66
59
|
}
|
|
67
60
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
// Carried forward to logRun, where the mv_rescue audit rows are written: writing them here, before
|
|
71
|
-
// batchWriteAndDelete, would assert rescues whose effects might never land if a later phase throws.
|
|
72
|
-
const rescuedEntries = [];
|
|
73
|
-
let rescuedIds = new Set();
|
|
74
|
-
let rankById = new Map();
|
|
75
|
-
// --- Phase 1: classify (zero commits) ---
|
|
61
|
+
// --- Phase 1: classify (zero commits) ---
|
|
62
|
+
function classifyByStrength(run) {
|
|
76
63
|
const condemned = [];
|
|
77
64
|
const strengthById = new Map();
|
|
78
|
-
for (const entry of all) {
|
|
79
|
-
const strength = calculateStrength(entry, now, run.decayOpts);
|
|
65
|
+
for (const entry of run.all) {
|
|
66
|
+
const strength = calculateStrength(entry, run.now, run.decayOpts);
|
|
80
67
|
strengthById.set(entry.id, strength);
|
|
81
68
|
if (run.retirable(entry) && strength < DECAY_THRESHOLD) {
|
|
82
69
|
condemned.push(entry);
|
|
83
70
|
}
|
|
84
71
|
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
72
|
+
return { strengthById, condemnedIds: new Set(condemned.map((e) => e.id)) };
|
|
73
|
+
}
|
|
74
|
+
function reportRescue(result, entry, strength, rank) {
|
|
75
|
+
const rankNote = rank
|
|
76
|
+
? ` - rescued (rank ${rank.rank}/${rank.totalNonPinned} in tenant ${rank.tenantId}, top ${rank.keepN})`
|
|
77
|
+
: ' - rescued';
|
|
78
|
+
result.details.push(` 🛟 ${entry.id} (strength ${strength.toFixed(STRENGTH_DECIMALS)} < ${DECAY_THRESHOLD})${rankNote}`);
|
|
79
|
+
}
|
|
80
|
+
function decayWithMemoryValue(run) {
|
|
81
|
+
const { all, now, result } = run;
|
|
82
|
+
// Carried forward to logRun, where the mv_rescue audit rows are written: writing them here, before
|
|
83
|
+
// batchWriteAndDelete, would assert rescues whose effects might never land if a later phase throws.
|
|
84
|
+
const rescuedEntries = [];
|
|
85
|
+
let rescuedIds = new Set();
|
|
86
|
+
let rankById = new Map();
|
|
87
|
+
const { strengthById, condemnedIds } = classifyByStrength(run);
|
|
88
|
+
// Phase 2a: rescue decision (pure compute); runs under --dry-run too (only the pendingDeletes flush and the logRun audit write are !dryRun-gated).
|
|
90
89
|
// Fail-loud must not depend on condemnation traffic: validate the frozen weights even when nothing is condemned.
|
|
91
90
|
validateWeights();
|
|
92
91
|
if (condemnedIds.size > 0) {
|
|
93
92
|
// Rank per tenant ONCE: rankById feeds both rescueSet (via precomputedRanks) and the detail/audit
|
|
94
93
|
// context below, so the whole-store ranking runs once per sleep and only when something is condemned.
|
|
95
94
|
rankById = rankNonPinnedByTenant(all, now);
|
|
96
|
-
rescuedIds = rescueSet(all, condemnedIds, now, MEMORY_VALUE_WEIGHTS, SOURCE_ARTIFACT_SHA256, rankById);
|
|
95
|
+
rescuedIds = rescueSet(all, condemnedIds, now, { weights: MEMORY_VALUE_WEIGHTS, digest: SOURCE_ARTIFACT_SHA256, precomputedRanks: rankById });
|
|
97
96
|
reportNonFiniteScores(result, rankById);
|
|
98
97
|
}
|
|
99
98
|
// --- Phase 2b: commit, one pass over `all` in ITS ORIGINAL ORDER ---
|
|
@@ -102,15 +101,10 @@ function decayWithMemoryValue(run) {
|
|
|
102
101
|
const strength = strengthById.get(entry.id);
|
|
103
102
|
if (run.retirable(entry) && strength < DECAY_THRESHOLD) {
|
|
104
103
|
if (rescuedIds.has(entry.id)) {
|
|
105
|
-
// Rescued: standard survivor stored-strength refresh.
|
|
106
|
-
//
|
|
107
|
-
// cached computation, so resolveConfidence derives it on read.
|
|
104
|
+
// Rescued: standard survivor stored-strength refresh. Confidence is left alone: it is an epistemic tier, not a cached
|
|
105
|
+
// computation, so resolveConfidence derives it on read.
|
|
108
106
|
rescuedEntries.push(keepSurvivor(run, entry, strength));
|
|
109
|
-
|
|
110
|
-
const rankNote = rank
|
|
111
|
-
? ` - rescued (rank ${rank.rank}/${rank.totalNonPinned} in tenant ${rank.tenantId}, top ${rank.keepN})`
|
|
112
|
-
: ' - rescued';
|
|
113
|
-
result.details.push(` 🛟 ${entry.id} (strength ${strength.toFixed(4)} < ${DECAY_THRESHOLD})${rankNote}`);
|
|
107
|
+
reportRescue(result, entry, strength, rankById.get(entry.id));
|
|
114
108
|
}
|
|
115
109
|
else {
|
|
116
110
|
retireFaded(run, entry, strength);
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/** Store-level dedup: same text apart from spacing, keeping the stronger copy; split out so `api.sleep` can dedupe without cli -> api imports.
|
|
2
|
+
* Survivor order is total and tenant-scoped: strength bucket, retrieval_count, then compareEntryIdentity; raw and superseded rows are not candidates. */
|
|
3
|
+
export interface DedupPair {
|
|
4
|
+
kept: string;
|
|
5
|
+
keptContent: string;
|
|
6
|
+
keptLayer: string;
|
|
7
|
+
keptStrength: number;
|
|
8
|
+
removed: string;
|
|
9
|
+
removedContent: string;
|
|
10
|
+
removedLayer: string;
|
|
11
|
+
removedStrength: number;
|
|
12
|
+
similarity: number;
|
|
13
|
+
}
|
|
14
|
+
/** Result of `deduplicateStore`: how many entries were removed, and the kept/removed pairs. */
|
|
15
|
+
export interface DedupResult {
|
|
16
|
+
removed: number;
|
|
17
|
+
pairs: DedupPair[];
|
|
18
|
+
}
|
|
19
|
+
/** Quantize strength to an integer bucket so ties are a true equivalence relation (equal iff same multiple of `STRENGTH_TIE_EPSILON`).
|
|
20
|
+
* Non-finite input maps to 0: a NaN bucket would make the comparator return NaN and break the total order. */
|
|
21
|
+
export declare function strengthBucket(strength: number | null | undefined): number;
|
|
22
|
+
/** Remove the weaker copy of same-text (apart from spacing) memories within one tenant; cross-tenant pairs are never duplicates (isolation boundary).
|
|
23
|
+
* Higher strength wins, then more retrievals; `threshold` is accepted for old callers and ignored. */
|
|
24
|
+
export declare function deduplicateStore(hippoRoot: string, options?: {
|
|
25
|
+
threshold?: number;
|
|
26
|
+
dryRun?: boolean;
|
|
27
|
+
actor?: string;
|
|
28
|
+
}): DedupResult;
|
|
29
|
+
//# sourceMappingURL=dedupe.d.ts.map
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/** Store-level dedup: same text apart from spacing, keeping the stronger copy; split out so `api.sleep` can dedupe without cli -> api imports.
|
|
2
|
+
* Survivor order is total and tenant-scoped: strength bucket, retrieval_count, then compareEntryIdentity; raw and superseded rows are not candidates. */
|
|
3
|
+
import { textOverlap } from '../util/tokenize.js';
|
|
4
|
+
import { loadCurrentDistilledEntries } from '../store/entry-reads.js';
|
|
5
|
+
import { deleteEntriesOneByOne, memoriesBackingObjects } from '../store/delete-and-batch.js';
|
|
6
|
+
import { compareEntryIdentity } from '../core/compare.js';
|
|
7
|
+
import { canAutoDelete } from '../core/memory.js';
|
|
8
|
+
import { derivationPartitionKey } from '../store/recall-scope.js';
|
|
9
|
+
import { duplicateKey } from '../util/same-text.js';
|
|
10
|
+
/** Quantization step for strength-tie comparisons: the 0.01 epsilon applied by rounding instead of an abs-diff threshold, so the tiebreak is transitive. */
|
|
11
|
+
const STRENGTH_TIE_EPSILON = 0.01;
|
|
12
|
+
/** Quantize strength to an integer bucket so ties are a true equivalence relation (equal iff same multiple of `STRENGTH_TIE_EPSILON`).
|
|
13
|
+
* Non-finite input maps to 0: a NaN bucket would make the comparator return NaN and break the total order. */
|
|
14
|
+
export function strengthBucket(strength) {
|
|
15
|
+
const s = strength ?? 0;
|
|
16
|
+
return Number.isFinite(s) ? Math.round(s / STRENGTH_TIE_EPSILON) : 0;
|
|
17
|
+
}
|
|
18
|
+
// finiteCount hardens the retrieval leg like strengthBucket: a NaN would break the total order.
|
|
19
|
+
// Unreachable via the schema (non-nullable INTEGER column); kept for symmetry.
|
|
20
|
+
const finiteCount = (n) => Number.isFinite(n ?? 0) ? (n ?? 0) : 0;
|
|
21
|
+
/** The v1.26.3 survivor total order: strength bucket desc, then retrieval_count desc, then compareEntryIdentity. */
|
|
22
|
+
function survivorOrder(a, b) {
|
|
23
|
+
const bucketDiff = strengthBucket(b.strength) - strengthBucket(a.strength);
|
|
24
|
+
if (bucketDiff !== 0)
|
|
25
|
+
return bucketDiff;
|
|
26
|
+
const retrievalDiff = finiteCount(b.retrieval_count) - finiteCount(a.retrieval_count);
|
|
27
|
+
if (retrievalDiff !== 0)
|
|
28
|
+
return retrievalDiff;
|
|
29
|
+
return compareEntryIdentity(a, b);
|
|
30
|
+
}
|
|
31
|
+
// Tenant partition: group by tenantId before sorting so a duplicate pair never forms across tenants; Map keeps insertion order,
|
|
32
|
+
// so a single-tenant store gets one group and the same result as a global pass.
|
|
33
|
+
function entriesByPartition(entries) {
|
|
34
|
+
const entriesByTenant = new Map();
|
|
35
|
+
for (const entry of entries) {
|
|
36
|
+
// EI2: also split by restricted scope, else a private copy can delete the readable one.
|
|
37
|
+
const key = derivationPartitionKey(entry.tenantId, entry.scope, entry.origin_project);
|
|
38
|
+
const bucket = entriesByTenant.get(key);
|
|
39
|
+
if (bucket)
|
|
40
|
+
bucket.push(entry);
|
|
41
|
+
else
|
|
42
|
+
entriesByTenant.set(key, [entry]);
|
|
43
|
+
}
|
|
44
|
+
return entriesByTenant;
|
|
45
|
+
}
|
|
46
|
+
function dedupPair(kept, dropped) {
|
|
47
|
+
return {
|
|
48
|
+
kept: kept.id,
|
|
49
|
+
keptContent: kept.content,
|
|
50
|
+
keptLayer: kept.layer,
|
|
51
|
+
keptStrength: kept.strength ?? 0,
|
|
52
|
+
removed: dropped.id,
|
|
53
|
+
removedContent: dropped.content,
|
|
54
|
+
removedLayer: dropped.layer,
|
|
55
|
+
removedStrength: dropped.strength ?? 0,
|
|
56
|
+
similarity: textOverlap(kept.content, dropped.content),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
/** Pairs within one partition, already in survivor order, grouped by survivor; marks each loser in `removed`. */
|
|
60
|
+
function partitionPairs(tenantEntries, removed, backing) {
|
|
61
|
+
const groups = new Map();
|
|
62
|
+
for (const entry of tenantEntries) {
|
|
63
|
+
const key = duplicateKey(entry.content);
|
|
64
|
+
const group = groups.get(key);
|
|
65
|
+
if (!group) {
|
|
66
|
+
groups.set(key, { survivor: entry, pairs: [] });
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
if (!canAutoDelete(entry) || backing.has(entry.id))
|
|
70
|
+
continue;
|
|
71
|
+
removed.add(entry.id);
|
|
72
|
+
group.pairs.push(dedupPair(group.survivor, entry));
|
|
73
|
+
}
|
|
74
|
+
return [...groups.values()].flatMap((group) => group.pairs);
|
|
75
|
+
}
|
|
76
|
+
/** Remove the weaker copy of same-text (apart from spacing) memories within one tenant; cross-tenant pairs are never duplicates (isolation boundary).
|
|
77
|
+
* Higher strength wins, then more retrievals; `threshold` is accepted for old callers and ignored. */
|
|
78
|
+
export function deduplicateStore(hippoRoot, options = {}) {
|
|
79
|
+
const dryRun = options.dryRun ?? false;
|
|
80
|
+
// Only current distilled rows compete: raw rows are append-only (the delete
|
|
81
|
+
// trigger would abort sleep mid-loop) and superseded rows are history.
|
|
82
|
+
const entries = loadCurrentDistilledEntries(hippoRoot);
|
|
83
|
+
const entriesByTenant = entriesByPartition(entries);
|
|
84
|
+
// Shared across tenant groups: ids are globally unique UUIDs, so `removed` cannot collide across tenants and deleteEntry deletes by primary key alone.
|
|
85
|
+
const removed = new Set();
|
|
86
|
+
const pairs = [];
|
|
87
|
+
const backing = memoriesBackingObjects(hippoRoot);
|
|
88
|
+
for (const tenantEntries of entriesByTenant.values()) {
|
|
89
|
+
// The survivor total order (see the file-level docstring), scoped per
|
|
90
|
+
// tenant group: the total order holds within a tenant only, matching the partition above.
|
|
91
|
+
tenantEntries.sort(survivorOrder);
|
|
92
|
+
pairs.push(...partitionPairs(tenantEntries, removed, backing));
|
|
93
|
+
}
|
|
94
|
+
const done = dryRun ? pairs : deletePairs(hippoRoot, pairs, options.actor);
|
|
95
|
+
return { removed: done.length, pairs: done };
|
|
96
|
+
}
|
|
97
|
+
/** The pairs whose loser was deleted; one store handle, one transaction per delete. */
|
|
98
|
+
function deletePairs(hippoRoot, pairs, actor) {
|
|
99
|
+
const targets = pairs.map((p) => ({ id: p.removed, reason: `dedup: duplicate of ${p.kept}` }));
|
|
100
|
+
const gone = deleteEntriesOneByOne(hippoRoot, targets, { actor, automatic: true });
|
|
101
|
+
return pairs.filter((_, i) => gone[i]);
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=dedupe.js.map
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import type { MemoryEntry } from '../memory.js';
|
|
2
|
-
import type { DormantMove } from '../dormant.js';
|
|
3
|
-
import type { FlushComponent } from '../store/delete-and-batch.js';
|
|
1
|
+
import type { MemoryEntry } from '../core/memory.js';
|
|
2
|
+
import type { DormantMove } from '../store/dormant.js';
|
|
3
|
+
import type { FlushComponent, LoadedRows } from '../store/delete-and-batch.js';
|
|
4
4
|
/** Components that share no id, ordered by each one's first op across writes, then deletes, then dormant moves. */
|
|
5
5
|
export declare function groupFlush(writes: readonly MemoryEntry[], deletes: readonly string[], dormant: readonly DormantMove[], units: readonly (readonly string[])[]): FlushComponent[];
|
|
6
|
-
/** [child, parent]
|
|
7
|
-
|
|
8
|
-
export declare function familyUnits(writes: readonly MemoryEntry[], deletes: readonly string[], dormant: readonly DormantMove[], snapshot: ReadonlyMap<string, MemoryEntry>): string[][];
|
|
6
|
+
/** [child, parent] per queued op on a child whose DAG parent the run removes: the parent-dirty mark otherwise lands after the parent is gone. */
|
|
7
|
+
export declare function familyUnits(writes: readonly MemoryEntry[], deletes: readonly string[], dormant: readonly DormantMove[], snapshot: LoadedRows): string[][];
|
|
9
8
|
//# sourceMappingURL=flush-units.d.ts.map
|
|
@@ -42,9 +42,9 @@ function unionFind(units) {
|
|
|
42
42
|
}
|
|
43
43
|
return find;
|
|
44
44
|
}
|
|
45
|
-
/** [child, parent]
|
|
46
|
-
|
|
47
|
-
//
|
|
45
|
+
/** [child, parent] per queued op on a child whose DAG parent the run removes: the parent-dirty mark otherwise lands after the parent is gone. */
|
|
46
|
+
// SHORTCUT: a removed parent and all its changed children commit as one component, so
|
|
47
|
+
// one hold can pass holdMs by a family's size; split by child if a family grows large.
|
|
48
48
|
export function familyUnits(writes, deletes, dormant, snapshot) {
|
|
49
49
|
const removing = new Set([...deletes, ...dormant.map((m) => m.entry.id)]);
|
|
50
50
|
const units = [];
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/** Moves a store's memories to a new default half-life: only memories still on the old base are rescaled (`deriveHalfLife(from, entry)` plus recall bonus).
|
|
2
|
+
* Memories hippo shortened since, or with their own fixed half-life, keep theirs; rescales are audit-logged and `meta` records the base, so it runs once. */
|
|
3
|
+
import { type MemoryEntry } from '../core/memory.js';
|
|
4
|
+
import { HALF_LIFE_BASE_META_KEY, LEGACY_TYPED_HALF_LIFE } from '../store/open.js';
|
|
5
|
+
export { HALF_LIFE_BASE_META_KEY, LEGACY_TYPED_HALF_LIFE };
|
|
6
|
+
/** What {@link migrateDefaultHalfLife} did, or would do under `dryRun`. */
|
|
7
|
+
export interface HalfLifeMigrationResult {
|
|
8
|
+
from: number;
|
|
9
|
+
to: number;
|
|
10
|
+
/** Memories moved to the new base. */
|
|
11
|
+
rescaled: number;
|
|
12
|
+
/** Memories of decisions, incidents and other objects moved off the flat 90 days. */
|
|
13
|
+
typed: number;
|
|
14
|
+
/** Memories left alone because they are not on the old base. */
|
|
15
|
+
kept: number;
|
|
16
|
+
dryRun: boolean;
|
|
17
|
+
/** New half-life per moved id, so a dry run can preview decay at the new base. */
|
|
18
|
+
halfLives: ReadonlyMap<string, number>;
|
|
19
|
+
}
|
|
20
|
+
type HalfLifeFields = Pick<MemoryEntry, 'half_life_days' | 'tags' | 'schema_fit' | 'retrieval_count' | 'superseded_by'>;
|
|
21
|
+
/** Recall bonus over `written`, the half-life `entry` got at write, or null when off it; each recall added 2 days. */
|
|
22
|
+
export declare function halfLifeRecallBonus(entry: HalfLifeFields, written: number): number | null;
|
|
23
|
+
/** The entries to rescale from `from` to `to`, as copies that keep their recall bonus. Pure. */
|
|
24
|
+
export declare function planHalfLifeMigration(entries: readonly MemoryEntry[], from: number, to: number): MemoryEntry[];
|
|
25
|
+
/** Memories of decisions, incidents and other objects still on the flat 90 days, as copies on `to` that keep their recall bonus. Pure. */
|
|
26
|
+
export declare function planTypedHalfLifeMigration(entries: readonly MemoryEntry[], to: number): MemoryEntry[];
|
|
27
|
+
/** The base this store's memories are on. */
|
|
28
|
+
export declare function storeHalfLifeBase(hippoRoot: string): number;
|
|
29
|
+
/** Move the store's memories, and those of objects on the old flat 90 days, from their recorded base to `to`, once; `dryRun` writes nothing. */
|
|
30
|
+
export declare function migrateDefaultHalfLife(hippoRoot: string, to: number, opts?: {
|
|
31
|
+
dryRun?: boolean;
|
|
32
|
+
actor?: string;
|
|
33
|
+
}): HalfLifeMigrationResult;
|
|
34
|
+
//# sourceMappingURL=half-life-migration.d.ts.map
|