hippo-memory 1.69.0 → 1.70.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 +1 -3
- package/dist/agent-memories/claude-code.js +11 -7
- package/dist/agent-memories/copilot.js +3 -2
- package/dist/agent-memories/files.js +3 -2
- 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/report.d.ts +1 -1
- package/dist/agent-memories/report.js +1 -1
- package/dist/agent-memories/source.d.ts +1 -1
- package/dist/agent-memories/source.js +6 -5
- package/dist/agent-memories/sync.d.ts +1 -1
- package/dist/agent-memories/sync.js +24 -33
- package/dist/agent-memories/types.d.ts +1 -1
- package/dist/api/assemble.d.ts +2 -2
- package/dist/api/assemble.js +42 -32
- package/dist/api/audit.d.ts +4 -7
- package/dist/api/audit.js +6 -20
- package/dist/api/auth.d.ts +5 -18
- package/dist/api/auth.js +44 -194
- 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} +2 -2
- package/dist/{availability.js → api/availability.js} +12 -29
- 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 +37 -45
- package/dist/api/context-types.d.ts +5 -5
- package/dist/api/context.d.ts +2 -4
- package/dist/api/context.js +48 -61
- package/dist/api/dormant.d.ts +3 -3
- package/dist/api/dormant.js +38 -107
- package/dist/api/drill-down.d.ts +2 -2
- package/dist/api/drill-down.js +37 -65
- package/dist/api/forget.d.ts +2 -11
- package/dist/api/forget.js +13 -46
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +2 -2
- package/dist/api/index.d.ts +26 -0
- package/dist/api/index.js +29 -0
- package/dist/api/instruction-detect.js +74 -0
- package/dist/api/learn.js +63 -55
- package/dist/api/ledger-db.d.ts +20 -0
- package/dist/api/ledger-db.js +79 -0
- package/dist/api/on-store.d.ts +16 -0
- package/dist/api/on-store.js +36 -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/promote.d.ts +4 -15
- package/dist/api/promote.js +29 -106
- package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +7 -7
- package/dist/{prompt-hook.js → api/prompt-hook.js} +34 -53
- package/dist/api/quarantine.d.ts +5 -5
- package/dist/api/quarantine.js +30 -106
- package/dist/api/recall-core.d.ts +4 -0
- package/dist/api/recall-core.js +112 -0
- package/dist/{recall-history.js → api/recall-history.js} +30 -25
- package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +5 -5
- package/dist/{recall-pipeline.js → api/recall-pipeline.js} +47 -42
- 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 +41 -16
- package/dist/api/recall.d.ts +1 -1
- package/dist/api/recall.js +39 -37
- package/dist/api/remember.d.ts +10 -12
- package/dist/api/remember.js +29 -45
- 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 -7
- package/dist/api/sleep-run.js +63 -75
- package/dist/api/sleep.d.ts +1 -1
- package/dist/api/tokens.d.ts +2 -2
- package/dist/api/tokens.js +9 -21
- package/dist/api/types.d.ts +2 -2
- package/dist/api/types.js +1 -1
- 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 +1 -1
- package/dist/capture/command.js +54 -41
- 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 +4 -1
- package/dist/capture/compact.js +40 -22
- 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} +48 -94
- package/dist/{compaction-spool.js → capture/compaction-spool.js} +17 -13
- 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} +1 -5
- package/dist/{session-digest.js → capture/session-digest.js} +17 -23
- 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.js +68 -74
- package/dist/capture/working-state.d.ts +0 -3
- package/dist/capture/working-state.js +7 -7
- package/dist/{audit-prune.d.ts → cli/audit-prune.d.ts} +1 -2
- package/dist/{audit-prune.js → cli/audit-prune.js} +5 -39
- package/dist/cli/audit.d.ts +2 -2
- package/dist/cli/audit.js +77 -72
- package/dist/cli/auth.d.ts +2 -1
- package/dist/cli/auth.js +18 -20
- package/dist/cli/briefs.d.ts +4 -3
- package/dist/cli/briefs.js +59 -181
- package/dist/cli/card.d.ts +2 -1
- package/dist/cli/card.js +25 -23
- package/dist/{client.d.ts → cli/client.d.ts} +1 -1
- package/dist/{client.js → cli/client.js} +1 -1
- package/dist/cli/compact-resume-payload.d.ts +8 -0
- package/dist/cli/compact-resume-payload.js +39 -0
- package/dist/cli/context.d.ts +2 -13
- package/dist/cli/context.js +41 -71
- package/dist/cli/continuity.d.ts +6 -5
- package/dist/cli/continuity.js +109 -99
- package/dist/{correction-latency.d.ts → cli/correction-latency.d.ts} +1 -1
- package/dist/cli/curate.d.ts +9 -9
- package/dist/cli/curate.js +177 -149
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +46 -34
- package/dist/cli/decisions.d.ts +4 -3
- package/dist/cli/decisions.js +108 -218
- package/dist/cli/eval.d.ts +1 -3
- package/dist/cli/eval.js +43 -31
- package/dist/cli/explain.d.ts +1 -1
- package/dist/cli/explain.js +35 -19
- package/dist/cli/flag-values.d.ts +25 -0
- package/dist/cli/flag-values.js +103 -0
- package/dist/cli/flags.d.ts +303 -0
- package/dist/cli/flags.js +169 -0
- package/dist/cli/goals.d.ts +2 -1
- package/dist/cli/goals.js +39 -34
- package/dist/cli/hook-runtime.d.ts +49 -0
- package/dist/cli/hook-runtime.js +155 -0
- package/dist/cli/init.d.ts +2 -1
- package/dist/cli/init.js +151 -118
- package/dist/cli/install-steps.d.ts +7 -0
- package/dist/cli/install-steps.js +110 -0
- package/dist/cli/last-sleep.d.ts +2 -1
- package/dist/cli/last-sleep.js +9 -7
- package/dist/cli/maintenance.d.ts +5 -4
- package/dist/cli/maintenance.js +31 -27
- package/dist/cli/object-verbs.d.ts +40 -0
- package/dist/cli/object-verbs.js +65 -0
- package/dist/{owner-validation.d.ts → cli/owner-validation.d.ts} +0 -1
- package/dist/{owner-validation.js → cli/owner-validation.js} +2 -2
- package/dist/cli/playbooks.d.ts +4 -3
- package/dist/cli/playbooks.js +77 -280
- package/dist/cli/print.d.ts +18 -0
- package/dist/cli/print.js +85 -0
- package/dist/cli/projects.d.ts +2 -3
- package/dist/cli/projects.js +56 -49
- package/dist/{provenance-coverage.d.ts → cli/provenance-coverage.d.ts} +1 -1
- package/dist/cli/quality-repair-once.js +4 -4
- package/dist/{quality-repair.js → cli/quality-repair.js} +23 -37
- package/dist/cli/recall.d.ts +2 -4
- package/dist/cli/recall.js +101 -150
- package/dist/{refine-llm.d.ts → cli/refine-llm.d.ts} +1 -1
- package/dist/{refine-llm.js → cli/refine-llm.js} +70 -82
- package/dist/cli/remember.d.ts +1 -3
- package/dist/cli/remember.js +124 -103
- package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +3 -1
- package/dist/{scheduler.js → cli/scheduler.js} +13 -7
- package/dist/cli/serve.d.ts +1 -1
- package/dist/cli/serve.js +34 -4
- package/dist/cli/session-hooks.d.ts +4 -4
- package/dist/cli/session-hooks.js +190 -184
- package/dist/cli/setup.d.ts +2 -1
- package/dist/cli/setup.js +41 -21
- package/dist/cli/shared.d.ts +5 -95
- package/dist/cli/shared.js +18 -369
- package/dist/cli/slack.d.ts +2 -1
- package/dist/cli/slack.js +31 -55
- package/dist/cli/sleep-render.d.ts +4 -0
- package/dist/cli/sleep-render.js +61 -0
- package/dist/cli/sleep.d.ts +2 -8
- package/dist/cli/sleep.js +20 -76
- package/dist/cli/status.d.ts +3 -3
- package/dist/cli/status.js +39 -41
- package/dist/{stdin.js → cli/stdin.js} +6 -6
- package/dist/cli/transfer.d.ts +4 -4
- package/dist/cli/transfer.js +68 -42
- package/dist/cli/usage.js +4 -2
- package/dist/cli.d.ts +289 -5
- package/dist/cli.js +184 -117
- package/dist/connectors/dlq.d.ts +44 -0
- package/dist/connectors/dlq.js +30 -0
- package/dist/connectors/github/backfill.d.ts +1 -1
- package/dist/connectors/github/backfill.js +29 -66
- package/dist/connectors/github/cli-impl.js +59 -74
- package/dist/connectors/github/deletion.d.ts +5 -6
- package/dist/connectors/github/deletion.js +18 -52
- package/dist/connectors/github/dlq.d.ts +7 -61
- package/dist/connectors/github/dlq.js +19 -119
- package/dist/connectors/github/ingest.d.ts +2 -31
- package/dist/connectors/github/ingest.js +20 -83
- package/dist/connectors/github/octokit-client.d.ts +1 -1
- package/dist/connectors/github/octokit-client.js +2 -1
- package/dist/connectors/github/tenant-routing.d.ts +2 -2
- package/dist/connectors/github/tenant-routing.js +10 -36
- package/dist/connectors/github/transform.d.ts +1 -1
- package/dist/connectors/github/types.d.ts +1 -1
- package/dist/connectors/github/types.js +15 -18
- package/dist/connectors/github/webhook.d.ts +3 -2
- package/dist/connectors/github/webhook.js +84 -87
- package/dist/connectors/slack/backfill.d.ts +1 -1
- package/dist/connectors/slack/backfill.js +5 -29
- package/dist/connectors/slack/deletion.d.ts +4 -7
- package/dist/connectors/slack/deletion.js +20 -49
- package/dist/connectors/slack/dlq.d.ts +7 -49
- package/dist/connectors/slack/dlq.js +25 -118
- package/dist/connectors/slack/ingest.d.ts +5 -18
- package/dist/connectors/slack/ingest.js +27 -91
- package/dist/connectors/slack/signature.js +2 -1
- package/dist/connectors/slack/tenant-routing.d.ts +4 -1
- package/dist/connectors/slack/tenant-routing.js +13 -14
- package/dist/connectors/slack/transform.d.ts +1 -1
- package/dist/connectors/slack/types.d.ts +1 -1
- package/dist/connectors/slack/types.js +3 -12
- package/dist/connectors/slack/web-client.js +2 -2
- package/dist/connectors/slack/webhook.d.ts +3 -2
- package/dist/connectors/slack/webhook.js +75 -82
- package/dist/connectors/slack/workspaces.d.ts +4 -17
- package/dist/connectors/slack/workspaces.js +4 -34
- package/dist/consolidate/conflicts.d.ts +1 -1
- package/dist/consolidate/conflicts.js +4 -4
- package/dist/{dag.d.ts → consolidate/dag.d.ts} +1 -1
- package/dist/{dag.js → consolidate/dag.js} +60 -81
- package/dist/consolidate/decay.d.ts +2 -2
- package/dist/consolidate/decay.js +28 -22
- package/dist/{dedupe.js → consolidate/dedupe.js} +11 -19
- package/dist/consolidate/flush-units.d.ts +2 -2
- package/dist/{half-life-migration.d.ts → consolidate/half-life-migration.d.ts} +3 -9
- package/dist/consolidate/half-life-migration.js +106 -0
- package/dist/consolidate/llm-passes.js +8 -8
- package/dist/{memory-value.d.ts → consolidate/memory-value.d.ts} +7 -2
- package/dist/{memory-value.js → consolidate/memory-value.js} +9 -7
- package/dist/consolidate/merge.js +57 -54
- package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
- package/dist/{merged-row.js → consolidate/merged-row.js} +2 -2
- package/dist/consolidate/physics-pass.js +46 -46
- package/dist/{replay.d.ts → consolidate/replay.d.ts} +1 -1
- package/dist/{replay.js → consolidate/replay.js} +2 -2
- package/dist/consolidate/run.d.ts +7 -13
- package/dist/consolidate/run.js +6 -37
- package/dist/consolidate/sleep.d.ts +1 -1
- package/dist/consolidate/sleep.js +64 -134
- package/dist/{trace.js → consolidate/trace.js} +4 -6
- package/dist/consolidate/traces.js +34 -29
- package/dist/{ablation.js → core/ablation.js} +1 -1
- 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.js → core/ambient.js} +12 -10
- package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +13 -2
- package/dist/{capture-contract.js → core/capture-contract.js} +64 -0
- package/dist/{compare.d.ts → core/compare.d.ts} +2 -0
- package/dist/{compare.js → core/compare.js} +10 -3
- package/dist/{config.d.ts → core/config.d.ts} +6 -6
- package/dist/{config.js → core/config.js} +99 -72
- package/dist/core/handoff.js +87 -0
- package/dist/{memory-quality.js → core/memory-quality.js} +1 -1
- package/dist/{memory.d.ts → core/memory.d.ts} +17 -5
- package/dist/{memory.js → core/memory.js} +110 -82
- package/dist/{physics.d.ts → core/physics.d.ts} +1 -1
- package/dist/{physics.js → core/physics.js} +2 -1
- package/dist/{project-identity.d.ts → core/project-identity.d.ts} +0 -5
- package/dist/{project-identity.js → core/project-identity.js} +5 -17
- package/dist/{project-remote.js → core/project-remote.js} +4 -4
- package/dist/{prompt-recall.js → core/prompt-recall.js} +1 -1
- package/dist/{salience.js → core/salience.js} +35 -20
- 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} +5 -5
- 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} +9 -9
- package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +101 -104
- package/dist/{dashboard.js → dashboard/dashboard.js} +124 -53
- package/dist/db/backup.js +1 -1
- package/dist/db/busy.d.ts +18 -1
- package/dist/db/busy.js +74 -9
- package/dist/db/connect.d.ts +10 -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 +25 -30
- package/dist/db/migrations/v08.js +1 -1
- package/dist/db/migrations/v14.js +39 -35
- package/dist/db/migrations/v16.js +29 -26
- package/dist/db/migrations/v18.js +6 -5
- package/dist/db/migrations/v20.js +4 -2
- package/dist/db/migrations/v22.js +39 -36
- package/dist/db/migrations/v24.js +27 -22
- package/dist/db/migrations/v29.js +37 -32
- package/dist/db/migrations/v31.js +36 -31
- package/dist/db/migrations/v35.js +1 -1
- package/dist/db/migrations/v39.js +1 -1
- package/dist/db/migrations/v40.js +15 -14
- package/dist/db/migrations/v43.js +7 -6
- package/dist/db/migrations/v44.js +1 -1
- package/dist/db/migrations/v45.js +1 -1
- package/dist/db/migrations/v46.js +1 -1
- package/dist/db/migrations/v47.js +1 -1
- 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/v52.js +1 -1
- package/dist/db/open.d.ts +9 -1
- package/dist/db/open.js +21 -4
- package/dist/{physics-state.d.ts → db/physics-state.d.ts} +3 -3
- package/dist/{physics-state.js → db/physics-state.js} +9 -16
- package/dist/{raw-archive-mirror-cleanup.d.ts → db/raw-archive-mirror-cleanup.d.ts} +5 -5
- package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +11 -6
- 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} +4 -2
- package/dist/{vector-store.js → db/vector-store.js} +76 -51
- package/dist/db/wal-checkpointer.d.ts +11 -0
- package/dist/db/wal-checkpointer.js +92 -0
- package/dist/doctor.js +105 -136
- 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 +3 -3
- package/dist/{eval-stats.js → eval/eval-stats.js} +12 -9
- package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +1 -1
- package/dist/{eval-suite.js → eval/eval-suite.js} +25 -23
- package/dist/{eval.d.ts → eval/eval.d.ts} +1 -1
- package/dist/{eval.js → eval/eval.js} +29 -22
- package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -3
- package/dist/{judgment.js → eval/judgment.js} +4 -9
- package/dist/extensions/openclaw-plugin/index.js +1 -2
- 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} +6 -6
- package/dist/{graph-extract.js → graph/extract.js} +37 -52
- package/dist/{graph-recall.d.ts → graph/recall.d.ts} +2 -2
- package/dist/{graph-recall.js → graph/recall.js} +55 -36
- package/dist/{graph-stream.d.ts → graph/stream.d.ts} +2 -2
- package/dist/{graph-stream.js → graph/stream.js} +9 -7
- package/dist/{graph-view.d.ts → graph/view.d.ts} +6 -3
- package/dist/{graph-view.js → graph/view.js} +127 -167
- 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 +14 -15
- package/dist/hooks/copilot.d.ts +1 -8
- package/dist/hooks/copilot.js +14 -15
- package/dist/{cli → hooks}/hook-blocks.js +1 -1
- package/dist/hooks/json-hooks.d.ts +1 -1
- package/dist/hooks/json-hooks.js +31 -122
- package/dist/hooks/opencode.js +35 -27
- package/dist/hooks/shared.d.ts +0 -4
- package/dist/hooks/shared.js +1 -5
- package/dist/importers/core.d.ts +2 -6
- package/dist/importers/core.js +41 -39
- package/dist/importers/markdown-parse.d.ts +1 -10
- package/dist/importers/markdown-parse.js +2 -19
- package/dist/importers/markdown.js +2 -1
- package/dist/importers/sources.js +50 -46
- package/dist/importers/vault.js +71 -92
- package/dist/index.d.ts +22 -22
- package/dist/index.js +21 -21
- package/dist/{autolearn.d.ts → learn/autolearn.d.ts} +2 -2
- package/dist/{autolearn.js → learn/autolearn.js} +13 -11
- 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 +125 -0
- package/dist/{forward-claim-detector.d.ts → learn/forward-claim-detector.d.ts} +1 -1
- package/dist/{forward-claim-detector.js → learn/forward-claim-detector.js} +1 -1
- package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +4 -0
- package/dist/{invalidation.js → learn/invalidation.js} +83 -99
- package/dist/mcp/admin-tools.d.ts +1 -1
- package/dist/mcp/admin-tools.js +37 -60
- 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 +7 -27
- package/dist/mcp/protocol.d.ts +6 -10
- package/dist/mcp/protocol.js +8 -14
- package/dist/mcp/recall-tools.d.ts +2 -2
- package/dist/mcp/recall-tools.js +68 -50
- package/dist/mcp/request.js +62 -60
- package/dist/mcp/server.js +1 -1
- package/dist/mcp/session-state.d.ts +1 -2
- package/dist/mcp/session-state.js +2 -2
- package/dist/mcp/shared-gate.js +1 -1
- package/dist/mcp/stdio.js +69 -31
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +2 -2
- package/dist/{customer-notes.d.ts → objects/customer-notes.d.ts} +7 -24
- package/dist/objects/customer-notes.js +112 -0
- package/dist/{decisions.d.ts → objects/decisions.d.ts} +13 -28
- package/dist/objects/decisions.js +101 -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/{incidents.d.ts → objects/incidents.d.ts} +17 -44
- package/dist/objects/incidents.js +130 -0
- package/dist/objects/lifecycle.d.ts +27 -0
- package/dist/objects/lifecycle.js +96 -0
- package/dist/{policies.d.ts → objects/policies.d.ts} +14 -27
- package/dist/objects/policies.js +189 -0
- package/dist/{processes.d.ts → objects/processes.d.ts} +14 -34
- package/dist/objects/processes.js +146 -0
- package/dist/{project-briefs.d.ts → objects/project-briefs.d.ts} +19 -40
- package/dist/objects/project-briefs.js +255 -0
- package/dist/{skills.d.ts → objects/skills.d.ts} +11 -26
- package/dist/objects/skills.js +156 -0
- package/dist/postinstall.js +4 -2
- package/dist/predictions/planning-fallacy.d.ts +4 -76
- package/dist/predictions/planning-fallacy.js +4 -129
- package/dist/rerankers/clef.d.ts +2 -6
- package/dist/rerankers/clef.js +27 -47
- package/dist/rerankers/cross-encoder.d.ts +0 -7
- package/dist/rerankers/cross-encoder.js +15 -23
- package/dist/rerankers/index.js +8 -7
- package/dist/rerankers/jev.d.ts +1 -4
- package/dist/rerankers/jev.js +30 -49
- package/dist/rerankers/llm.d.ts +2 -4
- package/dist/rerankers/llm.js +33 -50
- package/dist/rerankers/outage-warning.d.ts +7 -0
- package/dist/rerankers/outage-warning.js +31 -0
- package/dist/rerankers/remote.d.ts +3 -0
- package/dist/rerankers/remote.js +23 -0
- package/dist/rerankers/types.d.ts +1 -1
- 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 -1
- package/dist/search/boosts.js +34 -13
- 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/hybrid-score.d.ts +2 -2
- package/dist/search/hybrid-score.js +1 -1
- package/dist/search/hybrid.d.ts +4 -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} +7 -5
- package/dist/{path-context.js → search/path-context.js} +3 -1
- package/dist/search/physics-search.d.ts +4 -4
- package/dist/search/physics-search.js +15 -15
- package/dist/search/rerank.d.ts +3 -3
- package/dist/search/rerank.js +4 -3
- package/dist/search/temporal.d.ts +1 -1
- package/dist/search/temporal.js +5 -2
- package/dist/search/vector.d.ts +3 -3
- package/dist/search/vector.js +17 -11
- package/dist/server/auth.d.ts +1 -1
- package/dist/server/auth.js +26 -18
- package/dist/server/boot.d.ts +24 -0
- package/dist/server/boot.js +465 -0
- package/dist/server/client-ip.d.ts +5 -1
- package/dist/server/client-ip.js +18 -6
- 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/key-check-bounds.d.ts +8 -0
- package/dist/server/key-check-bounds.js +46 -0
- package/dist/server/lifecycle.js +1 -1
- package/dist/server/mcp-http.d.ts +1 -4
- package/dist/server/mcp-http.js +34 -24
- package/dist/server/ready.d.ts +7 -0
- package/dist/server/ready.js +38 -0
- package/dist/server/request.d.ts +10 -4
- package/dist/server/request.js +63 -12
- package/dist/server/route-table.d.ts +15 -0
- package/dist/server/route-table.js +209 -0
- package/dist/server/routes/admin.js +13 -8
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +32 -97
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +42 -105
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +42 -95
- package/dist/server/routes/memories.js +12 -14
- package/dist/server/routes/object-routes.d.ts +40 -0
- package/dist/server/routes/object-routes.js +80 -0
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +40 -124
- package/dist/server/routes/predictions.js +29 -45
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +38 -118
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +38 -110
- package/dist/server/routes/recall.js +14 -12
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +37 -125
- package/dist/{server-detect.js → server/server-detect.js} +1 -1
- 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 +70 -0
- package/dist/server/tls.d.ts +6 -0
- package/dist/server/tls.js +24 -0
- package/dist/server/types.d.ts +27 -8
- package/dist/server/validation.d.ts +3 -4
- package/dist/server/validation.js +6 -11
- package/dist/server.d.ts +39 -61
- package/dist/server.js +24 -568
- package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +1 -1
- package/dist/{project-merge.js → sharing/project-merge.js} +26 -45
- package/dist/{scope.js → sharing/scope.js} +1 -1
- package/dist/{shared.d.ts → sharing/shared.d.ts} +10 -9
- package/dist/{shared.js → sharing/shared.js} +100 -77
- package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
- package/dist/{ambient-store.js → store/ambient.js} +10 -10
- package/dist/store/audit-event.d.ts +11 -5
- package/dist/store/audit-event.js +5 -4
- package/dist/{audit.d.ts → store/audit.d.ts} +27 -3
- package/dist/{audit.js → store/audit.js} +91 -6
- package/dist/{auth.d.ts → store/auth.d.ts} +15 -32
- package/dist/{auth.js → store/auth.js} +100 -92
- package/dist/store/candidates.d.ts +23 -12
- package/dist/store/candidates.js +87 -35
- package/dist/{card-detail.d.ts → store/card-detail.d.ts} +3 -3
- package/dist/{card-detail.js → store/card-detail.js} +1 -1
- package/dist/{store-cards.d.ts → store/cards.d.ts} +14 -9
- package/dist/{store-cards.js → store/cards.js} +85 -146
- package/dist/store/compactions.d.ts +78 -0
- package/dist/store/compactions.js +93 -0
- package/dist/store/conflicts.d.ts +22 -5
- package/dist/store/conflicts.js +160 -109
- 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 +92 -0
- package/dist/store/delete-and-batch.d.ts +20 -24
- package/dist/store/delete-and-batch.js +64 -40
- package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +12 -5
- package/dist/{delivery-recorder.js → store/delivery-recorder.js} +42 -30
- 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 +51 -0
- package/dist/store/doctor-reads.d.ts +16 -0
- package/dist/store/doctor-reads.js +19 -0
- package/dist/{dormant.d.ts → store/dormant.d.ts} +46 -12
- package/dist/{dormant.js → store/dormant.js} +151 -6
- package/dist/{embeddings.d.ts → store/embeddings/index.d.ts} +10 -6
- package/dist/{embeddings.js → store/embeddings/index.js} +60 -44
- package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
- package/dist/{local-embedding.js → store/embeddings/local.js} +68 -57
- package/dist/{embedding-provider.d.ts → store/embeddings/provider.d.ts} +2 -2
- package/dist/{embedding-provider.js → store/embeddings/provider.js} +47 -32
- package/dist/store/entry-reads.d.ts +46 -7
- package/dist/store/entry-reads.js +120 -21
- package/dist/store/entry-row.d.ts +8 -2
- package/dist/store/entry-row.js +28 -8
- package/dist/store/entry-writes.d.ts +33 -4
- package/dist/store/entry-writes.js +108 -26
- 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/{goals.d.ts → store/goals.d.ts} +6 -46
- package/dist/{goals.js → store/goals.js} +45 -94
- package/dist/store/graph-queue.d.ts +29 -0
- package/dist/store/graph-queue.js +101 -0
- package/dist/{graph/read.d.ts → store/graph-reads.d.ts} +26 -34
- package/dist/{graph/read.js → store/graph-reads.js} +63 -115
- package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +68 -8
- package/dist/{graph/rows.js → store/graph-rows.js} +14 -3
- package/dist/store/graph-view-rows.d.ts +12 -0
- package/dist/store/graph-view-rows.js +67 -0
- package/dist/store/graph-writes.d.ts +58 -0
- package/dist/store/graph-writes.js +256 -0
- package/dist/store/half-life.d.ts +34 -0
- package/dist/store/half-life.js +77 -0
- package/dist/store/handoffs.d.ts +1 -1
- package/dist/store/handoffs.js +39 -30
- package/dist/store/index-and-stats.d.ts +8 -1
- package/dist/store/index-and-stats.js +51 -48
- 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 +1 -1
- package/dist/store/markdown.js +4 -3
- package/dist/store/mirrors.d.ts +5 -7
- package/dist/store/mirrors.js +39 -25
- 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 +24 -23
- package/dist/store/planning-fallacy-evidence.d.ts +42 -0
- package/dist/store/planning-fallacy-evidence.js +81 -0
- package/dist/store/port.d.ts +646 -0
- package/dist/store/port.js +17 -0
- package/dist/{predictions/store.d.ts → store/predictions.d.ts} +15 -2
- package/dist/{predictions/store.js → store/predictions.js} +52 -67
- package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
- package/dist/{quarantine.js → store/quarantine.js} +64 -22
- package/dist/{raw-archive.d.ts → store/raw-archive.d.ts} +3 -1
- package/dist/{raw-archive.js → store/raw-archive.js} +6 -2
- package/dist/{recall-scope.d.ts → store/recall-scope.d.ts} +2 -2
- package/dist/{recall-scope.js → store/recall-scope.js} +3 -3
- package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -14
- package/dist/{recall-trace.js → store/recall-trace.js} +38 -43
- package/dist/store/rejected-values.d.ts +55 -0
- package/dist/store/rejected-values.js +162 -0
- package/dist/{rejection.d.ts → store/rejection.d.ts} +2 -2
- package/dist/{rejection.js → store/rejection.js} +3 -2
- package/dist/store/rows.d.ts +2 -3
- package/dist/store/rows.js +18 -11
- package/dist/store/search-rows.d.ts +15 -4
- package/dist/store/search-rows.js +41 -28
- package/dist/store/sessions.d.ts +13 -2
- package/dist/store/sessions.js +79 -45
- 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 +59 -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 +28 -0
- package/dist/store/sqlite/executor.js +286 -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 +38 -0
- package/dist/store/sqlite/object-rows.d.ts +102 -0
- package/dist/store/sqlite/object-rows.js +218 -0
- package/dist/store/sqlite/objects-group.d.ts +20 -0
- package/dist/store/sqlite/objects-group.js +314 -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 +26 -0
- package/dist/store/sqlite/store.js +295 -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 +124 -0
- package/dist/store/sqlite/worker-ops.js +82 -0
- package/dist/store/sqlite/worker-store.d.ts +8 -0
- package/dist/store/sqlite/worker-store.js +76 -0
- package/dist/store/summaries.d.ts +2 -11
- package/dist/store/summaries.js +17 -44
- package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
- package/dist/store/tenant-lookup.d.ts +1 -1
- package/dist/{tenant.d.ts → store/tenant.d.ts} +2 -2
- package/dist/{tenant.js → store/tenant.js} +1 -1
- 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} +2 -9
- package/dist/{token-ledger.js → store/token-ledger.js} +31 -78
- 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 +26 -0
- package/dist/store/vector-writes.d.ts +10 -3
- package/dist/store/vector-writes.js +35 -5
- package/dist/{working-memory.d.ts → store/working-memory.d.ts} +5 -1
- package/dist/{working-memory.js → store/working-memory.js} +39 -41
- package/dist/support-bundle.d.ts +1 -1
- package/dist/support-bundle.js +13 -33
- 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 +67 -0
- package/dist/util/anthropic-messages.d.ts +31 -0
- package/dist/util/anthropic-messages.js +46 -0
- package/dist/util/atomic-write.d.ts +3 -0
- package/dist/util/atomic-write.js +107 -0
- package/dist/util/crash-handlers.d.ts +5 -0
- package/dist/util/crash-handlers.js +30 -0
- package/dist/{env.d.ts → util/env.d.ts} +15 -2
- package/dist/{env.js → util/env.js} +20 -2
- package/dist/util/home-path.js +67 -0
- package/dist/{http-retry.d.ts → util/http-retry.d.ts} +6 -2
- package/dist/{http-retry.js → util/http-retry.js} +38 -7
- 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} +5 -2
- package/dist/{log.js → util/log.js} +12 -3
- package/dist/util/real-path.d.ts +3 -0
- package/dist/util/real-path.js +15 -0
- package/dist/util/request-scope.d.ts +27 -0
- package/dist/util/request-scope.js +47 -0
- package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
- package/dist/{secret-detect.js → util/secret-detect.js} +5 -4
- 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 +18 -0
- package/dist/util/token-text.js +23 -0
- package/dist/{version.d.ts → util/version.d.ts} +1 -1
- package/dist/{version.js → util/version.js} +1 -1
- package/extensions/openclaw-plugin/index.ts +1 -5
- 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/api.d.ts +0 -26
- package/dist/api.js +0 -29
- 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/customer-notes.js +0 -336
- package/dist/db.d.ts +0 -9
- package/dist/db.js +0 -8
- package/dist/decisions.js +0 -326
- package/dist/extract.js +0 -133
- package/dist/graph/rows.d.ts +0 -45
- package/dist/graph/types.js +0 -11
- package/dist/half-life-migration.js +0 -182
- package/dist/handoff.js +0 -68
- package/dist/home-path.js +0 -24
- 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/policies.js +0 -434
- package/dist/processes.js +0 -371
- package/dist/project-briefs.js +0 -523
- package/dist/reject-flow.d.ts +0 -69
- package/dist/reject-flow.js +0 -260
- package/dist/session-owners.d.ts +0 -7
- package/dist/session-owners.js +0 -54
- package/dist/skills.js +0 -367
- package/dist/store/entry-writes-group.d.ts +0 -9
- package/dist/store-port.d.ts +0 -262
- package/dist/store-port.js +0 -178
- /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/{recall-history.d.ts → api/recall-history.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/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +0 -0
- /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
- /package/dist/{correction-latency.js → cli/correction-latency.js} +0 -0
- /package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +0 -0
- /package/dist/{quality-repair.d.ts → cli/quality-repair.d.ts} +0 -0
- /package/dist/{stdin.d.ts → cli/stdin.d.ts} +0 -0
- /package/dist/{dedupe.d.ts → consolidate/dedupe.d.ts} +0 -0
- /package/dist/{memory-value-weights.d.ts → consolidate/memory-value-weights.d.ts} +0 -0
- /package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +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/{trace.d.ts → consolidate/trace.d.ts} +0 -0
- /package/dist/{ablation.d.ts → core/ablation.d.ts} +0 -0
- /package/dist/{ambient.d.ts → core/ambient.d.ts} +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/{card.d.ts → core/card.d.ts} +0 -0
- /package/dist/{card.js → core/card.js} +0 -0
- /package/dist/{handoff.d.ts → core/handoff.d.ts} +0 -0
- /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
- /package/dist/{physics-config.d.ts → core/physics-config.d.ts} +0 -0
- /package/dist/{physics-config.js → core/physics-config.js} +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/{salience.d.ts → core/salience.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.d.ts → dashboard/dashboard-types.d.ts} +0 -0
- /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
- /package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +0 -0
- /package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +0 -0
- /package/dist/{cli → hooks}/hook-blocks.d.ts +0 -0
- /package/dist/{path-context.d.ts → search/path-context.d.ts} +0 -0
- /package/dist/{rrf.d.ts → search/rrf.d.ts} +0 -0
- /package/dist/{rrf.js → search/rrf.js} +0 -0
- /package/dist/{rate-limit.d.ts → server/rate-limit.d.ts} +0 -0
- /package/dist/{rate-limit.js → server/rate-limit.js} +0 -0
- /package/dist/{server-detect.d.ts → server/server-detect.d.ts} +0 -0
- /package/dist/{scope.d.ts → sharing/scope.d.ts} +0 -0
- /package/dist/{summary-dirty.js → store/summary-dirty.js} +0 -0
- /package/dist/{yaml.d.ts → store/yaml.d.ts} +0 -0
- /package/dist/{yaml.js → store/yaml.js} +0 -0
- /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
- /package/dist/{escape.js → util/escape.js} +0 -0
- /package/dist/{home-path.d.ts → util/home-path.d.ts} +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/{secret-detect.d.ts → util/secret-detect.d.ts} +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/{transcript-tail.d.ts → util/transcript-tail.d.ts} +0 -0
- /package/dist/{transcript-tail.js → util/transcript-tail.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
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** Compaction records in all, those with a summary whose memories never got saved, and those still without a summary; each cutoff is an ISO time. */
|
|
2
|
+
export function compactionCountsAt(db, stuckBefore, transcriptFloor) {
|
|
3
|
+
// SAFETY: COUNT aggregate row.
|
|
4
|
+
const row = db.prepare(`SELECT COUNT(*) AS total,
|
|
5
|
+
COUNT(CASE WHEN status = 'summarised' AND summarised_at < ? THEN 1 END) AS summarised,
|
|
6
|
+
COUNT(CASE WHEN status = 'started' AND started_at < ? AND started_at > ? AND transcript_path IS NOT NULL THEN 1 END) AS started
|
|
7
|
+
FROM compactions`).get(stuckBefore, stuckBefore, transcriptFloor);
|
|
8
|
+
return { total: Number(row?.total ?? 0), summarised: Number(row?.summarised ?? 0), started: Number(row?.started ?? 0) };
|
|
9
|
+
}
|
|
10
|
+
/** Memory blocks injected since `sinceIso`, the tokens they sent and the tokens later model calls re-read. */
|
|
11
|
+
export function tokenTallySince(db, sinceIso) {
|
|
12
|
+
// SAFETY: COUNT/SUM aggregate row.
|
|
13
|
+
const row = db.prepare(`SELECT COUNT(CASE WHEN event = 'inject' THEN 1 END) AS n,
|
|
14
|
+
COALESCE(SUM(CASE WHEN event = 'inject' THEN tokens END), 0) AS t,
|
|
15
|
+
COALESCE(SUM(CASE WHEN event = 'reread' THEN tokens END), 0) AS r
|
|
16
|
+
FROM token_ledger WHERE ts >= ?`).get(sinceIso);
|
|
17
|
+
return { injected: Number(row?.n ?? 0), tokensSent: Number(row?.t ?? 0), tokensReread: Number(row?.r ?? 0) };
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=doctor-reads.js.map
|
|
@@ -13,13 +13,14 @@
|
|
|
13
13
|
* `hippo forget --archive`): that path removes a raw receipt's content and
|
|
14
14
|
* keeps only its metadata. A dormant memory keeps its content.
|
|
15
15
|
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* forgetDormant.
|
|
16
|
+
* The db-taking helpers leave the handle and any transaction to the caller.
|
|
17
|
+
* The hippoRoot-taking functions at the end open one of their own, for
|
|
18
|
+
* api.listDormant / restoreDormant / forgetDormant / isDormant.
|
|
19
19
|
*/
|
|
20
|
-
import type
|
|
21
|
-
import type { MemoryEntry } from '
|
|
20
|
+
import { type DatabaseSyncLike } from '../db/index.js';
|
|
21
|
+
import type { MemoryEntry } from '../core/memory.js';
|
|
22
22
|
import type { SqlFragment } from './recall-scope.js';
|
|
23
|
+
import type { WriteBudget } from '../util/write-budget.js';
|
|
23
24
|
/** Why a memory went dormant: sleep's decay pass, an imported agent memory whose note was deleted, `hippo projects repair` splitting a two-project merge, or `hippo audit repair` setting aside an automatic memory with a certain defect. */
|
|
24
25
|
export type DormantReason = 'decay' | 'source-deleted' | 'project-repair' | 'quality-repair';
|
|
25
26
|
/** One memory that sleep is moving out of active memory into the dormant store. */
|
|
@@ -58,8 +59,6 @@ export interface ListDormantOpts {
|
|
|
58
59
|
* memory is never in both places or in neither.
|
|
59
60
|
*/
|
|
60
61
|
export declare function insertDormantRow(db: DatabaseSyncLike, move: DormantMove): void;
|
|
61
|
-
/** A tenant's dormant memories whose scope `admit` passes, newest first, optionally filtered by search terms. */
|
|
62
|
-
export declare function listDormantRows(db: DatabaseSyncLike, tenantId: string, opts?: ListDormantOpts, admit?: SqlFragment): DormantMemory[];
|
|
63
62
|
/** A dormant memory's stored snapshot plus when and why it went dormant. */
|
|
64
63
|
export interface DormantSnapshot {
|
|
65
64
|
entry: MemoryEntry;
|
|
@@ -78,16 +77,51 @@ export declare function listDormantSnapshots(db: DatabaseSyncLike, tenantId: str
|
|
|
78
77
|
export declare function dormantSnapshotsBySourcePrefix(db: DatabaseSyncLike, tenantId: string, prefix: string): DormantSnapshot[];
|
|
79
78
|
/** Put `entry` in place of a tenant's dormant memory `id`, keeping when and why that one went dormant. */
|
|
80
79
|
export declare function replaceDormantEntry(db: DatabaseSyncLike, tenantId: string, id: string, entry: MemoryEntry): void;
|
|
81
|
-
/** Whether a tenant has a dormant memory with this id whose scope `admit` passes (snapshot readable or not). */
|
|
82
|
-
export declare function hasDormantRow(db: DatabaseSyncLike, tenantId: string, id: string, admit?: SqlFragment): boolean;
|
|
83
80
|
/** Delete a tenant's dormant memory. Returns false when there was none. */
|
|
84
81
|
export declare function deleteDormantRow(db: DatabaseSyncLike, tenantId: string, id: string): boolean;
|
|
85
82
|
/** Deletes the tenant's dormant copies of a rejected digest whose snapshot scope `inReach` admits, so the value cannot linger; returns their ids. */
|
|
86
83
|
export declare function purgeDormantByDigest(db: DatabaseSyncLike, tenantId: string, digest: string, inReach: (scope: string | null) => boolean): string[];
|
|
87
|
-
|
|
84
|
+
/** Deletes for good every memory that went dormant before `cutoffIso`, on one handle; returns how many went, or under `dryRun` how many would. */
|
|
85
|
+
export declare function expireDormantBefore(hippoRoot: string, cutoffIso: string, opts: {
|
|
86
|
+
dryRun: boolean;
|
|
87
|
+
budget: WriteBudget;
|
|
88
|
+
busyWaitMs: number;
|
|
89
|
+
}): Promise<number>;
|
|
90
|
+
/** A tenant's dormant memories whose scope `admit` passes, newest first, read on a handle of its own. */
|
|
91
|
+
export declare function loadDormantMemories(hippoRoot: string, tenantId: string, opts?: ListDormantOpts, admit?: SqlFragment): DormantMemory[];
|
|
92
|
+
/** Whether a tenant holds a dormant memory with this id whose scope `admit` passes, read on a handle of its own. */
|
|
93
|
+
export declare function holdsDormantMemory(hippoRoot: string, tenantId: string, id: string, admit?: SqlFragment): boolean;
|
|
94
|
+
/** One restore as the store applies it. The two functions are the caller's policy over plain rows; neither is handed the handle. */
|
|
95
|
+
export interface DormantRestore {
|
|
88
96
|
readonly tenantId: string;
|
|
89
97
|
readonly id: string;
|
|
98
|
+
/** Who restores, for the audit rows. */
|
|
99
|
+
readonly actor: string;
|
|
100
|
+
/** False for a snapshot this caller may not touch, which then reads as missing. */
|
|
101
|
+
readonly inReach: (scope: string | null) => boolean;
|
|
102
|
+
/** The live memory the snapshot comes back as at `now`; a throw refuses before any write. */
|
|
103
|
+
readonly revive: (snapshot: DormantSnapshot, now: Date) => MemoryEntry;
|
|
90
104
|
}
|
|
91
|
-
|
|
92
|
-
export
|
|
105
|
+
/** The restored memory, or why nothing was written: no dormant copy in reach, or a live memory already holds the id. */
|
|
106
|
+
export type DormantRestoreOutcome = {
|
|
107
|
+
readonly status: 'restored';
|
|
108
|
+
readonly entry: MemoryEntry;
|
|
109
|
+
} | {
|
|
110
|
+
readonly status: 'missing';
|
|
111
|
+
} | {
|
|
112
|
+
readonly status: 'active';
|
|
113
|
+
};
|
|
114
|
+
/** Brings one dormant memory back on a single handle: the live row, the dormant delete and the audit row commit together, then its mirrors are written. */
|
|
115
|
+
export declare function restoreDormantMemory(hippoRoot: string, restore: DormantRestore): DormantRestoreOutcome;
|
|
116
|
+
/** One permanent delete of a dormant memory. */
|
|
117
|
+
export interface DormantForget {
|
|
118
|
+
readonly tenantId: string;
|
|
119
|
+
readonly id: string;
|
|
120
|
+
/** Who forgets, for the audit row. */
|
|
121
|
+
readonly actor: string;
|
|
122
|
+
/** The scopes this caller may touch; a row outside them reads as missing. */
|
|
123
|
+
readonly admit: SqlFragment;
|
|
124
|
+
}
|
|
125
|
+
/** Deletes a tenant's dormant memory for good and writes its `forget` audit row, on a single handle; false when it holds none `admit` passes. */
|
|
126
|
+
export declare function forgetDormantMemory(hippoRoot: string, forget: DormantForget): boolean;
|
|
93
127
|
//# sourceMappingURL=dormant.d.ts.map
|
|
@@ -1,5 +1,31 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Dormant memories: what sleep does with a faded memory instead of deleting
|
|
3
|
+
* it (config `dormant.enabled`, on by default; `retentionDays` bounds how
|
|
4
|
+
* long one is kept).
|
|
5
|
+
*
|
|
6
|
+
* A dormant memory keeps its full content in `dormant_memories` (schema v44)
|
|
7
|
+
* but is no longer a `memories` row, so recall, context, every sleep pass and
|
|
8
|
+
* every other reader of `memories` stop seeing it exactly as if it had been
|
|
9
|
+
* deleted. `hippo dormant` lists and searches them, `hippo dormant restore`
|
|
10
|
+
* brings one back, `hippo dormant forget` deletes one for good.
|
|
11
|
+
*
|
|
12
|
+
* Not to be confused with the raw archive (`raw_archive`, `archiveRawMemory`,
|
|
13
|
+
* `hippo forget --archive`): that path removes a raw receipt's content and
|
|
14
|
+
* keeps only its metadata. A dormant memory keeps its content.
|
|
15
|
+
*
|
|
16
|
+
* The db-taking helpers leave the handle and any transaction to the caller.
|
|
17
|
+
* The hippoRoot-taking functions at the end open one of their own, for
|
|
18
|
+
* api.listDormant / restoreDormant / forgetDormant / isDormant.
|
|
19
|
+
*/
|
|
20
|
+
import { closeHippoDb, openHippoDb, withWriteScope, withWriteScopeOr } from '../db/index.js';
|
|
21
|
+
import { RejectedValueError, rejectionDigest } from './rejection.js';
|
|
22
|
+
import { escapeLike } from '../util/escape.js';
|
|
23
|
+
import { warnDamagedColumn } from '../util/stored-json.js';
|
|
24
|
+
import { DAY_MS } from '../util/time.js';
|
|
25
|
+
import { appendAuditEvent } from './audit.js';
|
|
26
|
+
import { audit, auditRejectionRefusal } from './audit-event.js';
|
|
27
|
+
import { entryIdTakenAt } from './entry-reads.js';
|
|
28
|
+
import { writeEntryDbOnly, writeEntryMirrors } from './entry-writes.js';
|
|
3
29
|
const DEFAULT_LIST_LIMIT = 20;
|
|
4
30
|
/**
|
|
5
31
|
* Insert (or refresh) the dormant snapshot for `move.entry`. Does not touch
|
|
@@ -34,6 +60,7 @@ function parseSnapshot(row) {
|
|
|
34
60
|
}
|
|
35
61
|
catch {
|
|
36
62
|
// A row that will not parse is out of shape, so it is not restorable.
|
|
63
|
+
warnDamagedColumn({ table: 'dormant_memories', id: row.id, column: 'entry_json' }, 'not valid JSON');
|
|
37
64
|
return null;
|
|
38
65
|
}
|
|
39
66
|
}
|
|
@@ -53,7 +80,7 @@ function rowToDormantMemory(row) {
|
|
|
53
80
|
const DORMANT_WITH_SCOPE = `(SELECT *, CASE WHEN json_valid(entry_json) THEN json_extract(entry_json, '$.scope') END AS scope FROM dormant_memories)`;
|
|
54
81
|
const EVERY_SCOPE = { sql: '1', params: [] };
|
|
55
82
|
/** A tenant's dormant memories whose scope `admit` passes, newest first, optionally filtered by search terms. */
|
|
56
|
-
|
|
83
|
+
function listDormantRows(db, tenantId, opts = {}, admit = EVERY_SCOPE) {
|
|
57
84
|
const terms = (opts.query ?? '').trim().split(/\s+/).filter((t) => t.length > 0);
|
|
58
85
|
const limit = opts.limit !== undefined && Number.isFinite(opts.limit) && opts.limit >= 1
|
|
59
86
|
? Math.floor(opts.limit)
|
|
@@ -103,7 +130,7 @@ export function replaceDormantEntry(db, tenantId, id, entry) {
|
|
|
103
130
|
.run(entry.id, entry.content, JSON.stringify(entry), tenantId, id);
|
|
104
131
|
}
|
|
105
132
|
/** Whether a tenant has a dormant memory with this id whose scope `admit` passes (snapshot readable or not). */
|
|
106
|
-
|
|
133
|
+
function hasDormantRow(db, tenantId, id, admit = EVERY_SCOPE) {
|
|
107
134
|
return db.prepare(`SELECT 1 FROM ${DORMANT_WITH_SCOPE} WHERE tenant_id = ? AND id = ? AND ${admit.sql}`).get(tenantId, id, ...admit.params) !== undefined;
|
|
108
135
|
}
|
|
109
136
|
/** Delete a tenant's dormant memory. Returns false when there was none. */
|
|
@@ -125,13 +152,131 @@ export function purgeDormantByDigest(db, tenantId, digest, inReach) {
|
|
|
125
152
|
}
|
|
126
153
|
return removed;
|
|
127
154
|
}
|
|
128
|
-
|
|
155
|
+
function expiredDormantKeys(db, cutoffIso) {
|
|
129
156
|
const sql = `SELECT tenant_id AS tenantId, id FROM dormant_memories WHERE dormant_at < ?`;
|
|
130
157
|
// SAFETY: rows' shape matches the two columns named in the SELECT.
|
|
131
158
|
return db.prepare(sql).all(cutoffIso);
|
|
132
159
|
}
|
|
133
|
-
|
|
160
|
+
function deleteExpiredDormantRow(db, key, cutoffIso) {
|
|
134
161
|
const sql = `DELETE FROM dormant_memories WHERE tenant_id = ? AND id = ? AND dormant_at < ?`;
|
|
135
162
|
return Number(db.prepare(sql).run(key.tenantId, key.id, cutoffIso).changes ?? 0);
|
|
136
163
|
}
|
|
164
|
+
/** Deletes `keys` in transactions of about `budget.holdMs`, letting other writers in between; returns how many went. */
|
|
165
|
+
async function expireInChunks(db, keys, cutoffIso, budget) {
|
|
166
|
+
let gone = 0;
|
|
167
|
+
let next = 0;
|
|
168
|
+
let committedAt = 0;
|
|
169
|
+
while (next < keys.length) {
|
|
170
|
+
if (next > 0)
|
|
171
|
+
await budget.pause(committedAt);
|
|
172
|
+
withWriteScope(db, 'expire_dormant_chunk', () => {
|
|
173
|
+
const begunAt = budget.clock();
|
|
174
|
+
do
|
|
175
|
+
gone += deleteExpiredDormantRow(db, keys[next++], cutoffIso);
|
|
176
|
+
while (next < keys.length && budget.clock() - begunAt < budget.holdMs);
|
|
177
|
+
});
|
|
178
|
+
committedAt = budget.clock();
|
|
179
|
+
}
|
|
180
|
+
return gone;
|
|
181
|
+
}
|
|
182
|
+
/** Deletes for good every memory that went dormant before `cutoffIso`, on one handle; returns how many went, or under `dryRun` how many would. */
|
|
183
|
+
export async function expireDormantBefore(hippoRoot, cutoffIso, opts) {
|
|
184
|
+
const db = openHippoDb(hippoRoot, { busyWaitMs: opts.busyWaitMs });
|
|
185
|
+
try {
|
|
186
|
+
// The keys come from a read, so a run with nothing to expire never takes the write lock.
|
|
187
|
+
const keys = expiredDormantKeys(db, cutoffIso);
|
|
188
|
+
return opts.dryRun ? keys.length : await expireInChunks(db, keys, cutoffIso, opts.budget);
|
|
189
|
+
}
|
|
190
|
+
finally {
|
|
191
|
+
closeHippoDb(db);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
/** A tenant's dormant memories whose scope `admit` passes, newest first, read on a handle of its own. */
|
|
195
|
+
export function loadDormantMemories(hippoRoot, tenantId, opts = {}, admit = EVERY_SCOPE) {
|
|
196
|
+
const db = openHippoDb(hippoRoot);
|
|
197
|
+
try {
|
|
198
|
+
return listDormantRows(db, tenantId, opts, admit);
|
|
199
|
+
}
|
|
200
|
+
finally {
|
|
201
|
+
closeHippoDb(db);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
/** Whether a tenant holds a dormant memory with this id whose scope `admit` passes, read on a handle of its own. */
|
|
205
|
+
export function holdsDormantMemory(hippoRoot, tenantId, id, admit = EVERY_SCOPE) {
|
|
206
|
+
const db = openHippoDb(hippoRoot);
|
|
207
|
+
try {
|
|
208
|
+
return hasDormantRow(db, tenantId, id, admit);
|
|
209
|
+
}
|
|
210
|
+
finally {
|
|
211
|
+
closeHippoDb(db);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
function auditDormantRestore(db, restore, snapshot, now) {
|
|
215
|
+
appendAuditEvent(db, {
|
|
216
|
+
tenantId: restore.tenantId,
|
|
217
|
+
actor: restore.actor,
|
|
218
|
+
op: 'dormant_restore',
|
|
219
|
+
targetId: restore.id,
|
|
220
|
+
metadata: {
|
|
221
|
+
reason: snapshot.reason,
|
|
222
|
+
strengthAtDormancy: snapshot.strength,
|
|
223
|
+
dormantAt: snapshot.dormantAt,
|
|
224
|
+
daysDormant: Math.max(0, (now.getTime() - Date.parse(snapshot.dormantAt)) / DAY_MS),
|
|
225
|
+
},
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
function restoreInWriteScope(db, restore) {
|
|
229
|
+
return withWriteScopeOr(db, 'restore_dormant', (rollback) => {
|
|
230
|
+
const snapshot = readDormantSnapshot(db, restore.tenantId, restore.id);
|
|
231
|
+
if (!snapshot || !restore.inReach(snapshot.entry.scope ?? null))
|
|
232
|
+
return rollback({ status: 'missing' });
|
|
233
|
+
if (entryIdTakenAt(db, restore.id))
|
|
234
|
+
return rollback({ status: 'active' });
|
|
235
|
+
const now = new Date();
|
|
236
|
+
const entry = restore.revive(snapshot, now);
|
|
237
|
+
writeEntryDbOnly(db, entry, { actor: restore.actor });
|
|
238
|
+
deleteDormantRow(db, restore.tenantId, restore.id);
|
|
239
|
+
// A restore is a labelled "forgot it, then needed it" event, the signal a learned lifecycle trains on.
|
|
240
|
+
// Same write scope as the restore, so the label exists exactly when the restore does.
|
|
241
|
+
auditDormantRestore(db, restore, snapshot, now);
|
|
242
|
+
return { status: 'restored', entry };
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
/** Brings one dormant memory back on a single handle: the live row, the dormant delete and the audit row commit together, then its mirrors are written. */
|
|
246
|
+
export function restoreDormantMemory(hippoRoot, restore) {
|
|
247
|
+
const db = openHippoDb(hippoRoot);
|
|
248
|
+
try {
|
|
249
|
+
let outcome;
|
|
250
|
+
try {
|
|
251
|
+
outcome = restoreInWriteScope(db, restore);
|
|
252
|
+
}
|
|
253
|
+
catch (error) {
|
|
254
|
+
// Written after the rollback, so the refusal row outlives it.
|
|
255
|
+
if (error instanceof RejectedValueError)
|
|
256
|
+
auditRejectionRefusal(db, error, restore.actor);
|
|
257
|
+
throw error;
|
|
258
|
+
}
|
|
259
|
+
if (outcome.status === 'restored')
|
|
260
|
+
writeEntryMirrors(hippoRoot, outcome.entry);
|
|
261
|
+
return outcome;
|
|
262
|
+
}
|
|
263
|
+
finally {
|
|
264
|
+
closeHippoDb(db);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
/** Deletes a tenant's dormant memory for good and writes its `forget` audit row, on a single handle; false when it holds none `admit` passes. */
|
|
268
|
+
export function forgetDormantMemory(hippoRoot, forget) {
|
|
269
|
+
const { tenantId, id, actor, admit } = forget;
|
|
270
|
+
const db = openHippoDb(hippoRoot);
|
|
271
|
+
try {
|
|
272
|
+
if (!hasDormantRow(db, tenantId, id, admit) || !deleteDormantRow(db, tenantId, id))
|
|
273
|
+
return false;
|
|
274
|
+
// Best-effort, like every other forget audit row: the delete stands.
|
|
275
|
+
audit(db, 'forget', { tenantId, actor, targetId: id, metadata: { dormant: true } });
|
|
276
|
+
return true;
|
|
277
|
+
}
|
|
278
|
+
finally {
|
|
279
|
+
closeHippoDb(db);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
137
282
|
//# sourceMappingURL=dormant.js.map
|
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
* Uses @huggingface/transformers (local, zero API keys, ~22MB model).
|
|
4
4
|
* Falls back silently if the library is not installed.
|
|
5
5
|
*/
|
|
6
|
-
import { MemoryEntry } from '
|
|
7
|
-
import { type DatabaseSyncLike } from '
|
|
8
|
-
import { EMBEDDING_MODEL_META_KEY } from '
|
|
9
|
-
import { type EmbeddingProvider } from './
|
|
10
|
-
import type { HippoStore } from '
|
|
6
|
+
import { MemoryEntry } from '../../core/memory.js';
|
|
7
|
+
import { type DatabaseSyncLike } from '../../db/index.js';
|
|
8
|
+
import { EMBEDDING_MODEL_META_KEY } from '../../db/vector-store.js';
|
|
9
|
+
import { type EmbeddingProvider } from './provider.js';
|
|
10
|
+
import type { HippoStore } from '../index.js';
|
|
11
11
|
export { EMBEDDING_MODEL_META_KEY };
|
|
12
12
|
/**
|
|
13
13
|
* Bump whenever `embeddingInputText`'s composition changes in a way that
|
|
@@ -87,10 +87,14 @@ export declare function embeddingIndexStateOn(db: DatabaseSyncLike): EmbeddingIn
|
|
|
87
87
|
* Returns 0 for empty or mismatched vectors.
|
|
88
88
|
*/
|
|
89
89
|
export declare function cosineSimilarity(a: number[], b: number[]): number;
|
|
90
|
+
/** `cosineSimilarity` over any indexable vectors; a Float32 view reads the same doubles as its number[] copy, so the score is the same. */
|
|
91
|
+
export declare function cosineOf(a: ArrayLike<number>, b: ArrayLike<number>): number;
|
|
90
92
|
/** Every stored vector keyed by memory id; `{}` when none. Search reads only the rows it ranks via `loadStoredVectors`. */
|
|
91
93
|
export declare function loadEmbeddingIndex(hippoRoot: string): Record<string, number[]>;
|
|
92
94
|
/** Stored vectors for `ids` only. */
|
|
93
95
|
export declare function loadStoredVectors(hippoRoot: string, ids: readonly string[]): Map<string, number[]>;
|
|
96
|
+
/** `loadStoredVectors` as Float32 views, for a caller that only scores them. */
|
|
97
|
+
export declare function loadStoredVectorViews(hippoRoot: string, ids: readonly string[]): Map<string, Float32Array>;
|
|
94
98
|
/** Replace every stored vector with `index`; `model` defaults to the stored index identity. */
|
|
95
99
|
export declare function saveEmbeddingIndex(hippoRoot: string, index: Record<string, number[]>, model?: string): void;
|
|
96
100
|
/** Embed a single memory entry and cache the result in the embedding index; with `store`, through its vectorWrites, never opening hippo.db. */
|
|
@@ -98,4 +102,4 @@ export declare function embedMemory(hippoRoot: string, entry: MemoryEntry, model
|
|
|
98
102
|
/** Embeds every entry with no cached vector, prunes vectors of deleted memories, and returns how many it embedded; `provider` defaults to the
|
|
99
103
|
* configured one. With `store`, every tenant's memories with no vector for the provider's model go through its `vectorWrites`, never hippo.db. */
|
|
100
104
|
export declare function embedAll(hippoRoot: string, model?: string, provider?: EmbeddingProvider, store?: HippoStore): Promise<number>;
|
|
101
|
-
//# sourceMappingURL=
|
|
105
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -3,20 +3,20 @@
|
|
|
3
3
|
* Uses @huggingface/transformers (local, zero API keys, ~22MB model).
|
|
4
4
|
* Falls back silently if the library is not installed.
|
|
5
5
|
*/
|
|
6
|
-
import { envByName } from '
|
|
6
|
+
import { envByName } from '../../util/env.js';
|
|
7
7
|
import * as fs from 'fs';
|
|
8
8
|
import * as path from 'path';
|
|
9
9
|
import { randomUUID } from 'crypto';
|
|
10
|
-
import { loadAllEntries } from '
|
|
11
|
-
import { openHippoDb, closeHippoDb, getMeta, rethrowIfSqliteBlocked, setMeta } from '
|
|
12
|
-
import { EMBEDDING_MODEL_META_KEY, deleteOrphanVectors, hasStoredVectors, loadVectors, replaceAllVectors, storedVectorIds, upsertVectors, } from '
|
|
13
|
-
import { initializeParticle, savePhysicsState, loadPhysicsState, resetAllPhysicsState } from '
|
|
14
|
-
import { loadConfig } from '
|
|
15
|
-
import { resolveEmbeddingProvider } from './
|
|
16
|
-
import { DEFAULT_EMBEDDING_MODEL } from './local
|
|
17
|
-
import { redactSecretsStrict } from '
|
|
18
|
-
import { log } from '
|
|
19
|
-
import { StoreNotPortedError } from '
|
|
10
|
+
import { loadAllEntries } from '../entry-reads.js';
|
|
11
|
+
import { openHippoDb, closeHippoDb, getMeta, rethrowIfSqliteBlocked, setMeta } from '../../db/index.js';
|
|
12
|
+
import { EMBEDDING_MODEL_META_KEY, deleteOrphanVectors, hasStoredVectors, loadVectors, loadVectorViews, replaceAllVectors, storedVectorIds, upsertVectors, } from '../../db/vector-store.js';
|
|
13
|
+
import { initializeParticle, savePhysicsState, loadPhysicsState, resetAllPhysicsState } from '../../db/physics-state.js';
|
|
14
|
+
import { loadConfig } from '../../core/config.js';
|
|
15
|
+
import { resolveEmbeddingProvider } from './provider.js';
|
|
16
|
+
import { DEFAULT_EMBEDDING_MODEL } from './local.js';
|
|
17
|
+
import { redactSecretsStrict } from '../../util/secret-detect.js';
|
|
18
|
+
import { errorMessage, log } from '../../util/log.js';
|
|
19
|
+
import { StoreNotPortedError } from '../../util/sqlite-blocked.js';
|
|
20
20
|
export { EMBEDDING_MODEL_META_KEY };
|
|
21
21
|
/**
|
|
22
22
|
* Bump whenever `embeddingInputText`'s composition changes in a way that
|
|
@@ -83,7 +83,7 @@ function loadStoredEmbeddingModel(hippoRoot) {
|
|
|
83
83
|
}
|
|
84
84
|
catch (err) {
|
|
85
85
|
rethrowIfSqliteBlocked(err);
|
|
86
|
-
log.debug(`stored embedding model unreadable: ${
|
|
86
|
+
log.debug(`stored embedding model unreadable: ${errorMessage(err)}`);
|
|
87
87
|
return null;
|
|
88
88
|
}
|
|
89
89
|
}
|
|
@@ -166,7 +166,7 @@ function resetPhysicsFromIndex(hippoRoot, entries, index) {
|
|
|
166
166
|
}
|
|
167
167
|
catch (err) {
|
|
168
168
|
// Best effort: retrieval still falls back without physics state.
|
|
169
|
-
log.warn(`physics reset after reindex failed: ${
|
|
169
|
+
log.warn(`physics reset after reindex failed: ${errorMessage(err)}`);
|
|
170
170
|
}
|
|
171
171
|
}
|
|
172
172
|
/** A provider's `[]` row is a swallowed per-item failure; name the memory so the gap can be traced. */
|
|
@@ -178,6 +178,10 @@ function noteSkippedEmbedding(id) {
|
|
|
178
178
|
* Returns 0 for empty or mismatched vectors.
|
|
179
179
|
*/
|
|
180
180
|
export function cosineSimilarity(a, b) {
|
|
181
|
+
return cosineOf(a, b);
|
|
182
|
+
}
|
|
183
|
+
/** `cosineSimilarity` over any indexable vectors; a Float32 view reads the same doubles as its number[] copy, so the score is the same. */
|
|
184
|
+
export function cosineOf(a, b) {
|
|
181
185
|
if (a.length === 0 || b.length === 0 || a.length !== b.length)
|
|
182
186
|
return 0;
|
|
183
187
|
let dot = 0;
|
|
@@ -211,6 +215,10 @@ export function loadEmbeddingIndex(hippoRoot) {
|
|
|
211
215
|
export function loadStoredVectors(hippoRoot, ids) {
|
|
212
216
|
return ids.length === 0 ? new Map() : withVectorDb(hippoRoot, (db) => loadVectors(db, ids));
|
|
213
217
|
}
|
|
218
|
+
/** `loadStoredVectors` as Float32 views, for a caller that only scores them. */
|
|
219
|
+
export function loadStoredVectorViews(hippoRoot, ids) {
|
|
220
|
+
return ids.length === 0 ? new Map() : withVectorDb(hippoRoot, (db) => loadVectorViews(db, ids));
|
|
221
|
+
}
|
|
214
222
|
/** Replace every stored vector with `index`; `model` defaults to the stored index identity. */
|
|
215
223
|
export function saveEmbeddingIndex(hippoRoot, index, model) {
|
|
216
224
|
withVectorDb(hippoRoot, (db) => replaceAllVectors(db, index, model ?? getMeta(db, EMBEDDING_MODEL_META_KEY, '')));
|
|
@@ -381,10 +389,10 @@ function embedMemoryInStore(store, provider, entry) {
|
|
|
381
389
|
warnEmbedFailureOnce('index', OTHER_MODEL_INDEX);
|
|
382
390
|
}
|
|
383
391
|
catch (err) {
|
|
384
|
-
warnEmbedFailureOnce(provider.kind,
|
|
392
|
+
warnEmbedFailureOnce(provider.kind, errorMessage(err));
|
|
385
393
|
}
|
|
386
394
|
}).catch((err) => {
|
|
387
|
-
log.warn(`skipped embedding ${entry.id} (${
|
|
395
|
+
log.warn(`skipped embedding ${entry.id} (${errorMessage(err)})`);
|
|
388
396
|
});
|
|
389
397
|
}
|
|
390
398
|
/** Embed a single memory entry and cache the result in the embedding index; with `store`, through its vectorWrites, never opening hippo.db. */
|
|
@@ -395,7 +403,7 @@ export async function embedMemory(hippoRoot, entry, model, store) {
|
|
|
395
403
|
}
|
|
396
404
|
catch (err) {
|
|
397
405
|
// Callers fire and forget, so this must resolve: a bad config warns once instead of rejecting.
|
|
398
|
-
warnEmbedFailureOnce('config',
|
|
406
|
+
warnEmbedFailureOnce('config', errorMessage(err));
|
|
399
407
|
return;
|
|
400
408
|
}
|
|
401
409
|
if (!provider.isAvailable())
|
|
@@ -410,15 +418,7 @@ export async function embedMemory(hippoRoot, entry, model, store) {
|
|
|
410
418
|
try {
|
|
411
419
|
const identity = provider.id;
|
|
412
420
|
if (embeddingModelRequiresReindex(hippoRoot, identity)) {
|
|
413
|
-
|
|
414
|
-
// (which is tenant-scoped) but the index itself is one per hippoRoot.
|
|
415
|
-
// Cross-tenant content equivalence is visible at the vector level.
|
|
416
|
-
// Per-tenant indices would be a larger architecture change.
|
|
417
|
-
const entries = loadAllEntries(hippoRoot);
|
|
418
|
-
const rebuiltIndex = await rebuildEmbeddingIndex(entries, provider);
|
|
419
|
-
saveEmbeddingIndex(hippoRoot, rebuiltIndex, embeddingIndexIdentity(identity));
|
|
420
|
-
saveStoredEmbeddingModel(hippoRoot, identity);
|
|
421
|
-
resetPhysicsFromIndex(hippoRoot, entries, rebuiltIndex);
|
|
421
|
+
await rebuildIndexForProvider(hippoRoot, provider);
|
|
422
422
|
return;
|
|
423
423
|
}
|
|
424
424
|
const text = embeddingInputText(entry);
|
|
@@ -428,31 +428,47 @@ export async function embedMemory(hippoRoot, entry, model, store) {
|
|
|
428
428
|
withVectorDb(hippoRoot, (db) => upsertVectors(db, [[entry.id, vector]], embeddingIndexIdentity(identity)));
|
|
429
429
|
saveStoredEmbeddingModel(hippoRoot, identity);
|
|
430
430
|
// Initialize physics state for this memory
|
|
431
|
-
|
|
432
|
-
const db = openHippoDb(hippoRoot);
|
|
433
|
-
try {
|
|
434
|
-
const existing = loadPhysicsState(db, [entry.id]);
|
|
435
|
-
if (!existing.has(entry.id)) {
|
|
436
|
-
const particle = initializeParticle(entry, vector);
|
|
437
|
-
savePhysicsState(db, [particle]);
|
|
438
|
-
}
|
|
439
|
-
}
|
|
440
|
-
finally {
|
|
441
|
-
closeHippoDb(db);
|
|
442
|
-
}
|
|
443
|
-
}
|
|
444
|
-
catch {
|
|
445
|
-
// Physics init is best-effort — don't break embedding
|
|
446
|
-
}
|
|
431
|
+
initializePhysicsIfMissing(hippoRoot, entry, vector);
|
|
447
432
|
}
|
|
448
433
|
catch (err) {
|
|
449
434
|
// Provider failure (API down / bad key). Best-effort: leave the index as-is, but say so once.
|
|
450
|
-
warnEmbedFailureOnce(provider.kind,
|
|
435
|
+
warnEmbedFailureOnce(provider.kind, errorMessage(err));
|
|
451
436
|
}
|
|
452
437
|
}).catch((err) => {
|
|
453
|
-
log.warn(`skipped embedding ${entry.id} (${
|
|
438
|
+
log.warn(`skipped embedding ${entry.id} (${errorMessage(err)}); run 'hippo embed' to backfill`);
|
|
454
439
|
});
|
|
455
440
|
}
|
|
441
|
+
async function rebuildIndexForProvider(hippoRoot, provider) {
|
|
442
|
+
const identity = provider.id;
|
|
443
|
+
// Host-wide rebuild. The embedding index is keyed by entry.id
|
|
444
|
+
// (which is tenant-scoped) but the index itself is one per hippoRoot.
|
|
445
|
+
// Cross-tenant content equivalence is visible at the vector level.
|
|
446
|
+
// Per-tenant indices would be a larger architecture change.
|
|
447
|
+
const entries = loadAllEntries(hippoRoot);
|
|
448
|
+
const rebuiltIndex = await rebuildEmbeddingIndex(entries, provider);
|
|
449
|
+
saveEmbeddingIndex(hippoRoot, rebuiltIndex, embeddingIndexIdentity(identity));
|
|
450
|
+
saveStoredEmbeddingModel(hippoRoot, identity);
|
|
451
|
+
resetPhysicsFromIndex(hippoRoot, entries, rebuiltIndex);
|
|
452
|
+
}
|
|
453
|
+
function initializePhysicsIfMissing(hippoRoot, entry, vector) {
|
|
454
|
+
try {
|
|
455
|
+
const db = openHippoDb(hippoRoot);
|
|
456
|
+
try {
|
|
457
|
+
const existing = loadPhysicsState(db, [entry.id]);
|
|
458
|
+
if (!existing.has(entry.id)) {
|
|
459
|
+
const particle = initializeParticle(entry, vector);
|
|
460
|
+
savePhysicsState(db, [particle]);
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
finally {
|
|
464
|
+
closeHippoDb(db);
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
catch (err) {
|
|
468
|
+
// Physics init is best-effort and must not fail the embedding that just landed.
|
|
469
|
+
log.debug(`physics state not initialised for ${entry.id}: ${errorMessage(err)}`);
|
|
470
|
+
}
|
|
471
|
+
}
|
|
456
472
|
/** Throws when an unavailable provider is a misconfiguration rather than an intentional no-op. */
|
|
457
473
|
function throwIfProviderKeyMissing(hippoRoot, provider) {
|
|
458
474
|
// A configured (non-disabled) API provider with a missing key is a
|
|
@@ -541,4 +557,4 @@ export async function embedAll(hippoRoot, model, provider = resolveEmbeddingProv
|
|
|
541
557
|
return count;
|
|
542
558
|
});
|
|
543
559
|
}
|
|
544
|
-
//# sourceMappingURL=
|
|
560
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -12,4 +12,4 @@ export declare function requireLocalPipeline(model: string): Promise<void>;
|
|
|
12
12
|
export declare function resolveEmbeddingModel(hippoRoot: string, explicitModel?: string): string;
|
|
13
13
|
/** Embeds `text` with the local model, or returns `[]` when Transformers.js is missing or fails; `role` adds e5-style prefixes. */
|
|
14
14
|
export declare function getEmbedding(text: string, model?: string, role?: EmbeddingRole): Promise<number[]>;
|
|
15
|
-
//# sourceMappingURL=local
|
|
15
|
+
//# sourceMappingURL=local.d.ts.map
|