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
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** Physics state persistence: particle state (position, velocity, mass, charge, temperature) in SQLite, with BLOB columns for 384-dim vectors. */
|
|
2
|
+
import type { DatabaseSyncLike } from './index.js';
|
|
3
|
+
import type { MemoryEntry } from '../core/memory.js';
|
|
4
|
+
import type { PhysicsParticle } from '../core/physics.js';
|
|
5
|
+
export declare function float32ToBuffer(arr: number[]): Buffer;
|
|
6
|
+
export declare function bufferToFloat32(buf: Buffer | Uint8Array): number[];
|
|
7
|
+
/** Create the memory_physics table (migration v8). */
|
|
8
|
+
export declare function createPhysicsTable(db: DatabaseSyncLike): void;
|
|
9
|
+
/**
|
|
10
|
+
* Load physics state for specific memory IDs (or all if no IDs given).
|
|
11
|
+
*/
|
|
12
|
+
export declare function loadPhysicsState(db: DatabaseSyncLike, memoryIds?: string[]): Map<string, PhysicsParticle>;
|
|
13
|
+
/**
|
|
14
|
+
* Save physics state for multiple particles (batch upsert).
|
|
15
|
+
*/
|
|
16
|
+
export declare function savePhysicsState(db: DatabaseSyncLike, particles: PhysicsParticle[]): void;
|
|
17
|
+
/** Initialize physics state for a memory from its embedding vector; returns the new particle without persisting (the caller must save). */
|
|
18
|
+
export declare function initializeParticle(entry: MemoryEntry, embedding: number[], now?: Date): PhysicsParticle;
|
|
19
|
+
/** Drops every particle, then seeds one per entry that has an embedding; `entries` may be read lazily, as each batch is written before the next is read. */
|
|
20
|
+
export declare function resetAllPhysicsState(db: DatabaseSyncLike, entries: Iterable<MemoryEntry>, embeddingIndex: Record<string, number[]>, now?: Date): number;
|
|
21
|
+
/** Refresh mass, charge and temperature for existing particles from current memory attributes (called during consolidation). */
|
|
22
|
+
export declare function refreshParticleProperties(particles: PhysicsParticle[], entries: Map<string, MemoryEntry>, now?: Date): void;
|
|
23
|
+
//# sourceMappingURL=physics-state.d.ts.map
|
|
@@ -1,14 +1,10 @@
|
|
|
1
|
-
/**
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
import {
|
|
7
|
-
import { computeMass, computeCharge, computeTemperature, vecZero } from './physics.js';
|
|
8
|
-
import { calculateStrength } from './memory.js';
|
|
9
|
-
// ---------------------------------------------------------------------------
|
|
1
|
+
/** Physics state persistence: particle state (position, velocity, mass, charge, temperature) in SQLite, with BLOB columns for 384-dim vectors. */
|
|
2
|
+
import { evalNow } from '../core/ablation.js';
|
|
3
|
+
import { withWriteScope } from './busy.js';
|
|
4
|
+
import { computeMass, computeCharge, computeTemperature, vecZero } from '../core/physics.js';
|
|
5
|
+
import { calculateStrength } from '../core/memory.js';
|
|
6
|
+
import { DAY_MS } from '../util/time.js';
|
|
10
7
|
// Float32Array <-> Buffer serialization
|
|
11
|
-
// ---------------------------------------------------------------------------
|
|
12
8
|
export function float32ToBuffer(arr) {
|
|
13
9
|
const f32 = new Float32Array(arr);
|
|
14
10
|
return Buffer.from(f32.buffer);
|
|
@@ -22,13 +18,8 @@ export function bufferToFloat32(buf) {
|
|
|
22
18
|
new Uint8Array(aligned).set(bytes);
|
|
23
19
|
return Array.from(new Float32Array(aligned));
|
|
24
20
|
}
|
|
25
|
-
// ---------------------------------------------------------------------------
|
|
26
21
|
// Schema migration
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Create the memory_physics table (migration v8).
|
|
30
|
-
* Call this from db.ts MIGRATIONS array.
|
|
31
|
-
*/
|
|
22
|
+
/** Create the memory_physics table (migration v8). */
|
|
32
23
|
export function createPhysicsTable(db) {
|
|
33
24
|
db.exec(`
|
|
34
25
|
CREATE TABLE IF NOT EXISTS memory_physics (
|
|
@@ -100,28 +91,16 @@ export function savePhysicsState(db, particles) {
|
|
|
100
91
|
last_simulation = excluded.last_simulation,
|
|
101
92
|
updated_at = datetime('now')
|
|
102
93
|
`);
|
|
103
|
-
db
|
|
104
|
-
try {
|
|
94
|
+
withWriteScope(db, 'save_particles', () => {
|
|
105
95
|
for (const p of particles) {
|
|
106
96
|
stmt.run(p.memoryId, float32ToBuffer(p.position), float32ToBuffer(p.velocity), p.mass, p.charge, p.temperature, p.lastSimulation);
|
|
107
97
|
}
|
|
108
|
-
|
|
109
|
-
}
|
|
110
|
-
catch (error) {
|
|
111
|
-
try {
|
|
112
|
-
db.exec('ROLLBACK');
|
|
113
|
-
}
|
|
114
|
-
catch { /* already rolled back; keep the original error */ }
|
|
115
|
-
throw error;
|
|
116
|
-
}
|
|
98
|
+
});
|
|
117
99
|
}
|
|
118
|
-
/**
|
|
119
|
-
* Initialize physics state for a memory from its embedding vector.
|
|
120
|
-
* Returns the new particle (does not persist — caller must save).
|
|
121
|
-
*/
|
|
100
|
+
/** Initialize physics state for a memory from its embedding vector; returns the new particle without persisting (the caller must save). */
|
|
122
101
|
export function initializeParticle(entry, embedding, now = evalNow()) {
|
|
123
102
|
const strength = calculateStrength(entry, now);
|
|
124
|
-
const ageDays = (now.getTime() - new Date(entry.created).getTime()) /
|
|
103
|
+
const ageDays = (now.getTime() - new Date(entry.created).getTime()) / DAY_MS;
|
|
125
104
|
return {
|
|
126
105
|
memoryId: entry.id,
|
|
127
106
|
position: [...embedding], // copy — position will diverge from original embedding
|
|
@@ -132,35 +111,38 @@ export function initializeParticle(entry, embedding, now = evalNow()) {
|
|
|
132
111
|
lastSimulation: now.toISOString(),
|
|
133
112
|
};
|
|
134
113
|
}
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
* Drops existing physics data and re-initializes from the embedding index.
|
|
138
|
-
*/
|
|
114
|
+
const RESET_BATCH = 64;
|
|
115
|
+
/** Drops every particle, then seeds one per entry that has an embedding; `entries` may be read lazily, as each batch is written before the next is read. */
|
|
139
116
|
export function resetAllPhysicsState(db, entries, embeddingIndex, now = evalNow()) {
|
|
140
117
|
db.exec('DELETE FROM memory_physics');
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
118
|
+
// One transaction for every batch, so a failure part way leaves no particles rather than some.
|
|
119
|
+
return withWriteScope(db, 'reset_particles', () => {
|
|
120
|
+
let count = 0;
|
|
121
|
+
let batch = [];
|
|
122
|
+
const flush = () => {
|
|
123
|
+
savePhysicsState(db, batch);
|
|
124
|
+
count += batch.length;
|
|
125
|
+
batch = [];
|
|
126
|
+
};
|
|
127
|
+
for (const entry of entries) {
|
|
128
|
+
const embedding = embeddingIndex[entry.id];
|
|
129
|
+
if (!embedding || embedding.length === 0)
|
|
130
|
+
continue;
|
|
131
|
+
if (batch.push(initializeParticle(entry, embedding, now)) === RESET_BATCH)
|
|
132
|
+
flush();
|
|
133
|
+
}
|
|
134
|
+
flush();
|
|
135
|
+
return count;
|
|
136
|
+
});
|
|
152
137
|
}
|
|
153
|
-
/**
|
|
154
|
-
* Refresh mass, charge, and temperature for existing particles
|
|
155
|
-
* based on current memory attributes (called during consolidation).
|
|
156
|
-
*/
|
|
138
|
+
/** Refresh mass, charge and temperature for existing particles from current memory attributes (called during consolidation). */
|
|
157
139
|
export function refreshParticleProperties(particles, entries, now = evalNow()) {
|
|
158
140
|
for (const p of particles) {
|
|
159
141
|
const entry = entries.get(p.memoryId);
|
|
160
142
|
if (!entry)
|
|
161
143
|
continue;
|
|
162
144
|
const strength = calculateStrength(entry, now);
|
|
163
|
-
const ageDays = (now.getTime() - new Date(entry.created).getTime()) /
|
|
145
|
+
const ageDays = (now.getTime() - new Date(entry.created).getTime()) / DAY_MS;
|
|
164
146
|
p.mass = computeMass(strength, entry.retrieval_count);
|
|
165
147
|
p.charge = computeCharge(entry.emotional_valence);
|
|
166
148
|
p.temperature = computeTemperature(ageDays, 1.0);
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { DatabaseSyncLike } from './index.js';
|
|
2
|
+
/** Path A backfill cleanup: delete markdown mirrors (<hippoRoot>/<layer>/<id>.md) of rows archived before redaction, so RTBF holds for historical archives.
|
|
3
|
+
* Tracked by raw_archive.mirror_cleaned_at: set only on success, so a failed unlink retries next connection. Returns whether all pending rows were cleaned. */
|
|
4
|
+
export declare function cleanupArchivedMirrors(hippoRoot: string, db: DatabaseSyncLike): boolean;
|
|
5
|
+
//# sourceMappingURL=raw-archive-mirror-cleanup.d.ts.map
|
|
@@ -1,25 +1,10 @@
|
|
|
1
1
|
import * as fs from 'fs';
|
|
2
2
|
import * as path from 'path';
|
|
3
|
-
import { log } from '
|
|
3
|
+
import { errorMessage, log } from '../util/log.js';
|
|
4
4
|
const LAYERS = ['episodic', 'buffer', 'semantic'];
|
|
5
5
|
const MAX_WARN_LOGS = 5;
|
|
6
|
-
/**
|
|
7
|
-
*
|
|
8
|
-
* commit 70180b5 left their markdown mirrors at <hippoRoot>/<layer>/<id>.md
|
|
9
|
-
* with original content intact. The DB is already redacted via migration v20;
|
|
10
|
-
* this function deletes those filesystem mirrors so RTBF holds for historical
|
|
11
|
-
* archives too.
|
|
12
|
-
*
|
|
13
|
-
* Per-row tracking via raw_archive.mirror_cleaned_at (added in v21):
|
|
14
|
-
* - SELECT only rows WHERE mirror_cleaned_at IS NULL.
|
|
15
|
-
* - On success (every layer either deleted or didn't exist), UPDATE the row
|
|
16
|
-
* with the cleanup timestamp.
|
|
17
|
-
* - On any unlink failure, leave mirror_cleaned_at NULL so the next
|
|
18
|
-
* openHippoDb call retries. Warn (capped at MAX_WARN_LOGS rows per call).
|
|
19
|
-
*
|
|
20
|
-
* Steady-state cost is one SELECT returning empty after every row has been
|
|
21
|
-
* cleaned successfully.
|
|
22
|
-
*/
|
|
6
|
+
/** Path A backfill cleanup: delete markdown mirrors (<hippoRoot>/<layer>/<id>.md) of rows archived before redaction, so RTBF holds for historical archives.
|
|
7
|
+
* Tracked by raw_archive.mirror_cleaned_at: set only on success, so a failed unlink retries next connection. Returns whether all pending rows were cleaned. */
|
|
23
8
|
export function cleanupArchivedMirrors(hippoRoot, db) {
|
|
24
9
|
// SAFETY: the SELECT above names exactly one column, memory_id (raw_archive.memory_id
|
|
25
10
|
// is NOT NULL TEXT), so the row shape matches this assertion.
|
|
@@ -27,10 +12,11 @@ export function cleanupArchivedMirrors(hippoRoot, db) {
|
|
|
27
12
|
.prepare(`SELECT memory_id FROM raw_archive WHERE mirror_cleaned_at IS NULL`)
|
|
28
13
|
.all();
|
|
29
14
|
if (rows.length === 0)
|
|
30
|
-
return;
|
|
15
|
+
return true;
|
|
31
16
|
const update = db.prepare(`UPDATE raw_archive SET mirror_cleaned_at = ? WHERE memory_id = ?`);
|
|
32
17
|
const now = new Date().toISOString();
|
|
33
18
|
let warnCount = 0;
|
|
19
|
+
let everyRowCleaned = true;
|
|
34
20
|
for (const row of rows) {
|
|
35
21
|
let allOk = true;
|
|
36
22
|
for (const layer of LAYERS) {
|
|
@@ -43,7 +29,7 @@ export function cleanupArchivedMirrors(hippoRoot, db) {
|
|
|
43
29
|
catch (err) {
|
|
44
30
|
allOk = false;
|
|
45
31
|
if (warnCount < MAX_WARN_LOGS) {
|
|
46
|
-
log.warn(`cleanupArchivedMirrors: unlink failed for ${filePath} (will retry on next DB open): ${
|
|
32
|
+
log.warn(`cleanupArchivedMirrors: unlink failed for ${filePath} (will retry on next DB open): ${errorMessage(err)}`);
|
|
47
33
|
warnCount += 1;
|
|
48
34
|
}
|
|
49
35
|
}
|
|
@@ -51,6 +37,10 @@ export function cleanupArchivedMirrors(hippoRoot, db) {
|
|
|
51
37
|
if (allOk) {
|
|
52
38
|
update.run(now, row.memory_id);
|
|
53
39
|
}
|
|
40
|
+
else {
|
|
41
|
+
everyRowCleaned = false;
|
|
42
|
+
}
|
|
54
43
|
}
|
|
44
|
+
return everyRowCleaned;
|
|
55
45
|
}
|
|
56
46
|
//# sourceMappingURL=raw-archive-mirror-cleanup.js.map
|
|
@@ -1,29 +1,42 @@
|
|
|
1
1
|
import type { DatabaseSyncLike } from './sqlite.js';
|
|
2
|
+
import { type OpenedDb } from './connect.js';
|
|
3
|
+
import { type RequestScope } from '../util/request-scope.js';
|
|
2
4
|
export interface RequestStoresOptions {
|
|
3
5
|
/** Lock wait of every open in the scope that does not pass its own. */
|
|
4
6
|
readonly busyWaitMs?: number;
|
|
5
7
|
/** Set for hook scopes: after one lock wait runs out, {@link RequestStores.noteBusy} makes the scope's later writes skip at once. */
|
|
6
8
|
readonly failFastWhenBusy?: boolean;
|
|
9
|
+
/** The store whose open-time setup another connection has already run, so an open in this scope skips it: a store worker's reader, which cannot write it. */
|
|
10
|
+
readonly setupDoneFor?: string;
|
|
7
11
|
}
|
|
8
12
|
/** The handles one request opened, keyed by resolved store path and lock wait. */
|
|
9
|
-
export declare class RequestStores {
|
|
13
|
+
export declare class RequestStores implements RequestScope {
|
|
10
14
|
#private;
|
|
11
15
|
readonly busyWaitMs: number | undefined;
|
|
16
|
+
readonly requestId: string | undefined;
|
|
17
|
+
readonly deadline: import("../util/request-scope.js").RequestDeadline | undefined;
|
|
18
|
+
readonly setupDoneFor: string | undefined;
|
|
12
19
|
constructor(opts?: RequestStoresOptions);
|
|
13
20
|
get closed(): boolean;
|
|
14
21
|
/** The scope's handle on `hippoRoot`, opened on first use. `opts.busyWaitMs` overrides the scope's lock wait. */
|
|
15
22
|
get(hippoRoot: string, opts?: {
|
|
16
23
|
busyWaitMs?: number;
|
|
17
24
|
}): DatabaseSyncLike;
|
|
25
|
+
/** `get`, with the facts of the open's probe when this call made the connection and null for a cached handle. */
|
|
26
|
+
getWithFacts(hippoRoot: string, opts?: {
|
|
27
|
+
busyWaitMs?: number;
|
|
28
|
+
}): OpenedDb;
|
|
18
29
|
/** A lock held past one full wait belongs to a long transaction, so a hook scope's later writes skip at once. */
|
|
19
30
|
noteBusy(): void;
|
|
20
31
|
close(): void;
|
|
21
32
|
}
|
|
22
33
|
/** Runs `fn` in a request scope whose handles close when `fn` settles; inside an open scope `fn` joins it and `opts` is ignored. */
|
|
23
34
|
export declare function runWithRequestStores<T>(fn: () => T | Promise<T>, opts?: RequestStoresOptions): Promise<T>;
|
|
35
|
+
/** runWithRequestStores for a synchronous `fn`, so a batch called from outside any request still opens each store once. */
|
|
36
|
+
export declare function withRequestStoresSync<T>(fn: () => T): T;
|
|
24
37
|
/** The scope this code runs in, if any. A closed scope still answers: its `get` falls through to a plain open. */
|
|
25
38
|
export declare function currentRequestStores(): RequestStores | undefined;
|
|
26
|
-
/** Runs `fn` outside every scope, for a connection that must outlive the request that happens to open it. */
|
|
39
|
+
/** Runs `fn` outside every store scope, for a connection that must outlive the request that happens to open it; its log lines keep the request's id. */
|
|
27
40
|
export declare function outsideRequestStores<T>(fn: () => T): T;
|
|
28
41
|
/** Whether a scope owns `db` and will close it itself. */
|
|
29
42
|
export declare function isScopedHandle(db: DatabaseSyncLike): boolean;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// One store handle per store for each request (HTTP call, MCP tool call, scoped CLI command), opened lazily and closed with it.
|
|
2
2
|
import * as path from 'node:path';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { connectWithFacts, getHippoDbPath } from './connect.js';
|
|
4
|
+
import { currentDeadline, currentRequestId, requestScopes } from '../util/request-scope.js';
|
|
5
5
|
// Handles a scope owns, so closeHippoDb leaves them open for the rest of the request.
|
|
6
6
|
const scopedHandles = new WeakSet();
|
|
7
7
|
// process.exit skips every finally, so one exit listener closes the handles of scopes still open.
|
|
@@ -21,11 +21,16 @@ function trackLive(scope) {
|
|
|
21
21
|
/** The handles one request opened, keyed by resolved store path and lock wait. */
|
|
22
22
|
export class RequestStores {
|
|
23
23
|
busyWaitMs;
|
|
24
|
+
// Taken from the scope this one opens inside, so the request's log lines keep their id.
|
|
25
|
+
requestId = currentRequestId();
|
|
26
|
+
deadline = currentDeadline();
|
|
27
|
+
setupDoneFor;
|
|
24
28
|
#failFastWhenBusy;
|
|
25
29
|
#handles = new Map();
|
|
26
30
|
#closed = false;
|
|
27
31
|
constructor(opts = {}) {
|
|
28
32
|
this.busyWaitMs = opts.busyWaitMs;
|
|
33
|
+
this.setupDoneFor = opts.setupDoneFor;
|
|
29
34
|
this.#failFastWhenBusy = opts.failFastWhenBusy === true;
|
|
30
35
|
}
|
|
31
36
|
get closed() {
|
|
@@ -33,22 +38,26 @@ export class RequestStores {
|
|
|
33
38
|
}
|
|
34
39
|
/** The scope's handle on `hippoRoot`, opened on first use. `opts.busyWaitMs` overrides the scope's lock wait. */
|
|
35
40
|
get(hippoRoot, opts) {
|
|
41
|
+
return this.getWithFacts(hippoRoot, opts).db;
|
|
42
|
+
}
|
|
43
|
+
/** `get`, with the facts of the open's probe when this call made the connection and null for a cached handle. */
|
|
44
|
+
getWithFacts(hippoRoot, opts) {
|
|
36
45
|
const busyWaitMs = opts?.busyWaitMs ?? this.busyWaitMs;
|
|
37
46
|
// A listener or timer that outlives its request still sees this scope, so it gets a connection of its own.
|
|
38
47
|
if (this.#closed)
|
|
39
|
-
return
|
|
48
|
+
return connectWithFacts(hippoRoot, busyWaitMs);
|
|
40
49
|
const key = `${path.resolve(getHippoDbPath(hippoRoot))}\0${busyWaitMs ?? ''}`;
|
|
41
50
|
const cached = this.#handles.get(key);
|
|
42
51
|
if (cached?.isOpen && !cached.isTransaction)
|
|
43
|
-
return cached;
|
|
44
|
-
const
|
|
52
|
+
return { db: cached, facts: null };
|
|
53
|
+
const opened = connectWithFacts(hippoRoot, busyWaitMs);
|
|
45
54
|
// An open nested inside a transaction gets its own connection, which its caller closes.
|
|
46
55
|
if (cached?.isOpen)
|
|
47
|
-
return
|
|
48
|
-
this.#handles.set(key, db);
|
|
49
|
-
scopedHandles.add(db);
|
|
56
|
+
return opened;
|
|
57
|
+
this.#handles.set(key, opened.db);
|
|
58
|
+
scopedHandles.add(opened.db);
|
|
50
59
|
trackLive(this);
|
|
51
|
-
return
|
|
60
|
+
return opened;
|
|
52
61
|
}
|
|
53
62
|
/** A lock held past one full wait belongs to a long transaction, so a hook scope's later writes skip at once. */
|
|
54
63
|
noteBusy() {
|
|
@@ -69,14 +78,13 @@ export class RequestStores {
|
|
|
69
78
|
this.#handles.clear();
|
|
70
79
|
}
|
|
71
80
|
}
|
|
72
|
-
const scopes = new AsyncLocalStorage();
|
|
73
81
|
/** Runs `fn` in a request scope whose handles close when `fn` settles; inside an open scope `fn` joins it and `opts` is ignored. */
|
|
74
82
|
export async function runWithRequestStores(fn, opts) {
|
|
75
|
-
const outer =
|
|
83
|
+
const outer = currentRequestStores();
|
|
76
84
|
if (outer && !outer.closed)
|
|
77
85
|
return fn();
|
|
78
86
|
const stores = new RequestStores(opts);
|
|
79
|
-
return
|
|
87
|
+
return requestScopes.run(stores, async () => {
|
|
80
88
|
try {
|
|
81
89
|
return await fn();
|
|
82
90
|
}
|
|
@@ -85,13 +93,27 @@ export async function runWithRequestStores(fn, opts) {
|
|
|
85
93
|
}
|
|
86
94
|
});
|
|
87
95
|
}
|
|
96
|
+
/** runWithRequestStores for a synchronous `fn`, so a batch called from outside any request still opens each store once. */
|
|
97
|
+
export function withRequestStoresSync(fn) {
|
|
98
|
+
const outer = currentRequestStores();
|
|
99
|
+
if (outer && !outer.closed)
|
|
100
|
+
return fn();
|
|
101
|
+
const stores = new RequestStores();
|
|
102
|
+
try {
|
|
103
|
+
return requestScopes.run(stores, fn);
|
|
104
|
+
}
|
|
105
|
+
finally {
|
|
106
|
+
stores.close();
|
|
107
|
+
}
|
|
108
|
+
}
|
|
88
109
|
/** The scope this code runs in, if any. A closed scope still answers: its `get` falls through to a plain open. */
|
|
89
110
|
export function currentRequestStores() {
|
|
90
|
-
|
|
111
|
+
const scope = requestScopes.getStore();
|
|
112
|
+
return scope instanceof RequestStores ? scope : undefined;
|
|
91
113
|
}
|
|
92
|
-
/** Runs `fn` outside every scope, for a connection that must outlive the request that happens to open it. */
|
|
114
|
+
/** Runs `fn` outside every store scope, for a connection that must outlive the request that happens to open it; its log lines keep the request's id. */
|
|
93
115
|
export function outsideRequestStores(fn) {
|
|
94
|
-
return
|
|
116
|
+
return requestScopes.run({ requestId: currentRequestId() }, fn);
|
|
95
117
|
}
|
|
96
118
|
/** Whether a scope owns `db` and will close it itself. */
|
|
97
119
|
export function isScopedHandle(db) {
|
package/dist/db/tables.d.ts
CHANGED
|
@@ -3,6 +3,8 @@ import type { DatabaseSyncLike } from './sqlite.js';
|
|
|
3
3
|
export declare function tableColumns(db: DatabaseSyncLike, tableName: string): Set<string>;
|
|
4
4
|
export declare function tableHasColumn(db: DatabaseSyncLike, tableName: string, columnName: string): boolean;
|
|
5
5
|
export declare function tableExists(db: DatabaseSyncLike, tableName: string): boolean;
|
|
6
|
+
/** Names of the real tables, without sqlite internals and FTS virtual tables. */
|
|
7
|
+
export declare function listTableNames(db: DatabaseSyncLike): string[];
|
|
6
8
|
/** Row count of one table; null when the table is missing or unreadable, which callers show as unknown. */
|
|
7
9
|
export declare function countTableRows(db: DatabaseSyncLike, table: string): number | null;
|
|
8
10
|
export declare function pruneConsolidationRuns(db: DatabaseSyncLike, keep?: number): void;
|
package/dist/db/tables.js
CHANGED
|
@@ -17,6 +17,12 @@ export function tableExists(db, tableName) {
|
|
|
17
17
|
const row = db.prepare(`SELECT name FROM sqlite_master WHERE type='table' AND name = ?`).get(tableName);
|
|
18
18
|
return !!row?.name;
|
|
19
19
|
}
|
|
20
|
+
/** Names of the real tables, without sqlite internals and FTS virtual tables. */
|
|
21
|
+
export function listTableNames(db) {
|
|
22
|
+
// SAFETY: each row's shape matches the single `name` column named in the SELECT below.
|
|
23
|
+
const rows = db.prepare(`SELECT name FROM sqlite_master WHERE type = 'table' AND name NOT LIKE 'sqlite_%' AND sql NOT LIKE 'CREATE VIRTUAL TABLE%' ORDER BY name`).all();
|
|
24
|
+
return rows.map((r) => r.name);
|
|
25
|
+
}
|
|
20
26
|
/** Row count of one table; null when the table is missing or unreadable, which callers show as unknown. */
|
|
21
27
|
export function countTableRows(db, table) {
|
|
22
28
|
try {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** Embedding vectors in the `memory_vectors` table: one Float32 BLOB per memory id, plus the one-time import of the old JSON index. */
|
|
2
|
-
import type { DatabaseSyncLike } from './
|
|
2
|
+
import type { DatabaseSyncLike } from './index.js';
|
|
3
3
|
export declare const EMBEDDING_MODEL_META_KEY = "embedding_model";
|
|
4
4
|
export declare const MEMORY_VECTORS_DDL = "\n CREATE TABLE IF NOT EXISTS memory_vectors (\n memory_id TEXT PRIMARY KEY,\n model TEXT NOT NULL,\n dim INTEGER NOT NULL,\n vector BLOB NOT NULL\n );\n CREATE TRIGGER IF NOT EXISTS trg_memory_vectors_delete AFTER DELETE ON memories BEGIN\n DELETE FROM memory_vectors WHERE memory_id = old.id;\n END;\n";
|
|
5
5
|
export declare function encodeVector(vector: readonly number[]): Uint8Array;
|
|
@@ -12,7 +12,11 @@ export declare function replaceAllVectors(db: DatabaseSyncLike, index: Readonly<
|
|
|
12
12
|
export declare function deleteOrphanVectors(db: DatabaseSyncLike): number;
|
|
13
13
|
/** Vectors for `ids`, or every stored vector when `ids` is omitted. */
|
|
14
14
|
export declare function loadVectors(db: DatabaseSyncLike, ids?: readonly string[]): Map<string, number[]>;
|
|
15
|
+
/** `loadVectors` for `ids` with no copy: each value views the bytes the store returned for that row. */
|
|
16
|
+
export declare function loadVectorViews(db: DatabaseSyncLike, ids: readonly string[]): Map<string, Float32Array>;
|
|
15
17
|
export declare function storedVectorIds(db: DatabaseSyncLike): Set<string>;
|
|
18
|
+
/** Float count of the first stored row, from its blob length; the vector is never read. */
|
|
19
|
+
export declare function storedVectorDims(db: DatabaseSyncLike): number | undefined;
|
|
16
20
|
export declare function hasStoredVectors(db: DatabaseSyncLike): boolean;
|
|
17
21
|
export interface VectorMatch {
|
|
18
22
|
id: string;
|
|
@@ -28,7 +32,7 @@ export interface VectorRow {
|
|
|
28
32
|
export declare function rankVectorRows(query: readonly number[], rows: Iterable<VectorRow>, k: number): VectorMatch[];
|
|
29
33
|
/** The `k` stored vectors closest to `query` among `memories m` rows passing `where` (SQL starting with ` AND`).
|
|
30
34
|
* Filters run before the cut, so rows a caller may not see can never push admitted rows out of the top k. */
|
|
31
|
-
export declare function topVectorMatches(db: DatabaseSyncLike, query: readonly number[], k: number, where: string, params: readonly (string | number)[]): VectorMatch[]
|
|
35
|
+
export declare function topVectorMatches(db: DatabaseSyncLike, query: readonly number[], k: number, where: string, params: readonly (string | number)[]): Promise<VectorMatch[]>;
|
|
32
36
|
/** Move a legacy `embeddings.json` into `memory_vectors`, then keep the file as `embeddings.json.imported-<stamp>`.
|
|
33
37
|
* Runs after the migration commits, so the rename never outlives rolled-back rows; a file an older binary writes later imports the same way. */
|
|
34
38
|
export declare function importLegacyEmbeddingIndex(db: DatabaseSyncLike, hippoRoot: string): void;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/** Embedding vectors in the `memory_vectors` table: one Float32 BLOB per memory id, plus the one-time import of the old JSON index. */
|
|
2
2
|
import * as fs from 'fs';
|
|
3
3
|
import * as path from 'path';
|
|
4
|
-
import {
|
|
4
|
+
import { withWriteScope } from './busy.js';
|
|
5
|
+
import { log } from '../util/log.js';
|
|
5
6
|
/** Legacy whole-file index; imported once into `memory_vectors`, then kept beside the store as a renamed backup. */
|
|
6
7
|
const LEGACY_EMBEDDINGS_FILE = 'embeddings.json';
|
|
7
8
|
export const EMBEDDING_MODEL_META_KEY = 'embedding_model';
|
|
@@ -40,24 +41,9 @@ export function upsertVectors(db, rows, model) {
|
|
|
40
41
|
}
|
|
41
42
|
return written;
|
|
42
43
|
}
|
|
43
|
-
function inTransaction(db, fn) {
|
|
44
|
-
db.exec('BEGIN IMMEDIATE');
|
|
45
|
-
try {
|
|
46
|
-
const out = fn();
|
|
47
|
-
db.exec('COMMIT');
|
|
48
|
-
return out;
|
|
49
|
-
}
|
|
50
|
-
catch (err) {
|
|
51
|
-
try {
|
|
52
|
-
db.exec('ROLLBACK');
|
|
53
|
-
}
|
|
54
|
-
catch { /* keep the original error */ }
|
|
55
|
-
throw err;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
44
|
/** Replace the whole table with `index` in one transaction, as a full rebuild does. */
|
|
59
45
|
export function replaceAllVectors(db, index, model) {
|
|
60
|
-
|
|
46
|
+
withWriteScope(db, 'replace_all_vectors', () => {
|
|
61
47
|
db.exec('DELETE FROM memory_vectors');
|
|
62
48
|
upsertVectors(db, Object.entries(index), model);
|
|
63
49
|
});
|
|
@@ -66,80 +52,126 @@ export function replaceAllVectors(db, index, model) {
|
|
|
66
52
|
export function deleteOrphanVectors(db) {
|
|
67
53
|
return Number(db.prepare('DELETE FROM memory_vectors WHERE memory_id NOT IN (SELECT id FROM memories)').run().changes ?? 0);
|
|
68
54
|
}
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
const out = new Map();
|
|
55
|
+
// One read behind the copied and the viewed shape, so the two can never return different rows.
|
|
56
|
+
function eachStoredVector(db, ids, take) {
|
|
72
57
|
const read = (rows) => {
|
|
73
58
|
// SAFETY: both SELECTs below name exactly these two columns; node:sqlite returns BLOBs as Uint8Array.
|
|
74
59
|
for (const row of rows)
|
|
75
|
-
|
|
60
|
+
take(row.memory_id, decodeVector(row.vector));
|
|
76
61
|
};
|
|
77
62
|
if (ids === undefined) {
|
|
78
63
|
read(db.prepare('SELECT memory_id, vector FROM memory_vectors').iterate());
|
|
79
|
-
return
|
|
64
|
+
return;
|
|
80
65
|
}
|
|
81
66
|
const unique = [...new Set(ids)];
|
|
82
67
|
for (let i = 0; i < unique.length; i += ID_CHUNK) {
|
|
83
68
|
const chunk = unique.slice(i, i + ID_CHUNK);
|
|
84
69
|
read(db.prepare(`SELECT memory_id, vector FROM memory_vectors WHERE memory_id IN (${chunk.map(() => '?').join(', ')})`).all(...chunk));
|
|
85
70
|
}
|
|
71
|
+
}
|
|
72
|
+
/** Vectors for `ids`, or every stored vector when `ids` is omitted. */
|
|
73
|
+
export function loadVectors(db, ids) {
|
|
74
|
+
const out = new Map();
|
|
75
|
+
eachStoredVector(db, ids, (id, vector) => out.set(id, Array.from(vector)));
|
|
76
|
+
return out;
|
|
77
|
+
}
|
|
78
|
+
/** `loadVectors` for `ids` with no copy: each value views the bytes the store returned for that row. */
|
|
79
|
+
export function loadVectorViews(db, ids) {
|
|
80
|
+
const out = new Map();
|
|
81
|
+
eachStoredVector(db, ids, (id, vector) => out.set(id, vector));
|
|
86
82
|
return out;
|
|
87
83
|
}
|
|
88
84
|
export function storedVectorIds(db) {
|
|
89
85
|
// SAFETY: the SELECT names exactly the one column read.
|
|
90
86
|
return new Set(db.prepare('SELECT memory_id FROM memory_vectors').all().map((r) => r.memory_id));
|
|
91
87
|
}
|
|
88
|
+
/** Float count of the first stored row, from its blob length; the vector is never read. */
|
|
89
|
+
export function storedVectorDims(db) {
|
|
90
|
+
// SAFETY: the SELECT names exactly the one column read.
|
|
91
|
+
const row = db.prepare('SELECT length(vector) AS bytes FROM memory_vectors LIMIT 1').get();
|
|
92
|
+
return row === undefined ? undefined : Math.floor(row.bytes / 4);
|
|
93
|
+
}
|
|
92
94
|
export function hasStoredVectors(db) {
|
|
93
95
|
return db.prepare('SELECT 1 FROM memory_vectors LIMIT 1').get() !== undefined;
|
|
94
96
|
}
|
|
95
97
|
/** The `k` rows closest to `query` by cosine, best first; ties go to the smaller id, so row order never changes the top k.
|
|
96
98
|
* The query rounds to Float32 as stored vectors are, and scores add up in float64, so every store that feeds it the same bytes ranks alike. */
|
|
97
99
|
export function rankVectorRows(query, rows, k) {
|
|
98
|
-
const
|
|
100
|
+
const best = bestMatches(query, k);
|
|
101
|
+
if (!best)
|
|
102
|
+
return [];
|
|
103
|
+
for (const { id, vector } of rows)
|
|
104
|
+
best.offer(id, vector);
|
|
105
|
+
return best.top;
|
|
106
|
+
}
|
|
107
|
+
// One scoring loop for rows in memory and rows streamed from the store, so the two can never rank apart.
|
|
108
|
+
function bestMatches(query, k) {
|
|
99
109
|
if (k <= 0 || query.length === 0)
|
|
100
|
-
return
|
|
110
|
+
return null;
|
|
101
111
|
const q = Float32Array.from(query);
|
|
102
112
|
let qNorm = 0;
|
|
103
113
|
for (let i = 0; i < q.length; i++)
|
|
104
114
|
qNorm += q[i] * q[i];
|
|
105
115
|
qNorm = Math.sqrt(qNorm);
|
|
106
116
|
if (qNorm < 1e-10)
|
|
107
|
-
return
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
dot
|
|
115
|
-
norm
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
117
|
+
return null;
|
|
118
|
+
const top = [];
|
|
119
|
+
return {
|
|
120
|
+
top,
|
|
121
|
+
offer(id, v) {
|
|
122
|
+
if (v.length !== q.length)
|
|
123
|
+
return;
|
|
124
|
+
let dot = 0;
|
|
125
|
+
let norm = 0;
|
|
126
|
+
for (let i = 0; i < v.length; i++) {
|
|
127
|
+
dot += q[i] * v[i];
|
|
128
|
+
norm += v[i] * v[i];
|
|
129
|
+
}
|
|
130
|
+
if (norm < 1e-20)
|
|
131
|
+
return;
|
|
132
|
+
const score = dot / (qNorm * Math.sqrt(norm));
|
|
133
|
+
if (top.length === k && !beats(score, id, top[k - 1]))
|
|
134
|
+
return;
|
|
135
|
+
insertSorted(top, { id, score }, k);
|
|
136
|
+
},
|
|
137
|
+
};
|
|
125
138
|
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
139
|
+
/** Rows the nearest-vector scan scores between two turns of the event loop. */
|
|
140
|
+
const VECTOR_SCAN_CHUNK = 256;
|
|
141
|
+
function nextTurn() {
|
|
142
|
+
return new Promise((resolve) => { setImmediate(resolve); });
|
|
129
143
|
}
|
|
130
144
|
/** The `k` stored vectors closest to `query` among `memories m` rows passing `where` (SQL starting with ` AND`).
|
|
131
145
|
* Filters run before the cut, so rows a caller may not see can never push admitted rows out of the top k. */
|
|
132
|
-
export function topVectorMatches(db, query, k, where, params) {
|
|
133
|
-
|
|
146
|
+
export async function topVectorMatches(db, query, k, where, params) {
|
|
147
|
+
const best = bestMatches(query, k);
|
|
148
|
+
if (!best)
|
|
134
149
|
return [];
|
|
135
|
-
// SHORTCUT: brute-force cosine over every vector
|
|
150
|
+
// SHORTCUT: brute-force cosine over every admitted vector, a chunk per event-loop turn; latency
|
|
151
|
+
// still grows with rows, fine to ~100k, and an ANN index (sqlite-vec, HNSW) is the upgrade.
|
|
152
|
+
// SAFETY: the SELECT names exactly these two columns; node:sqlite returns BLOBs as Uint8Array.
|
|
136
153
|
const rows = db.prepare(`
|
|
137
154
|
SELECT v.memory_id AS id, v.vector AS vector
|
|
138
155
|
FROM memory_vectors v JOIN memories m ON m.id = v.memory_id
|
|
139
156
|
WHERE v.dim = ?${where}
|
|
140
157
|
`).iterate(query.length, ...params);
|
|
141
|
-
|
|
142
|
-
|
|
158
|
+
const floats = new Float32Array(query.length);
|
|
159
|
+
const bytes = new Uint8Array(floats.buffer);
|
|
160
|
+
let scored = 0;
|
|
161
|
+
for (const row of rows) {
|
|
162
|
+
// The cursor stays open across the pause: under WAL a reader blocks no writer, and the scan keeps one snapshot.
|
|
163
|
+
if (scored > 0 && scored % VECTOR_SCAN_CHUNK === 0)
|
|
164
|
+
await nextTurn();
|
|
165
|
+
scored++;
|
|
166
|
+
if (row.vector.byteLength === bytes.byteLength) {
|
|
167
|
+
bytes.set(row.vector);
|
|
168
|
+
best.offer(row.id, floats);
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
best.offer(row.id, decodeVector(row.vector));
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return best.top;
|
|
143
175
|
}
|
|
144
176
|
// Ties break on id so the cut is the same on every run.
|
|
145
177
|
function beats(score, id, other) {
|
|
@@ -213,7 +245,7 @@ export function importLegacyEmbeddingIndex(db, hippoRoot) {
|
|
|
213
245
|
}
|
|
214
246
|
// SAFETY: the SELECT names exactly the one column read.
|
|
215
247
|
const model = db.prepare(`SELECT value FROM meta WHERE key = ?`).get(EMBEDDING_MODEL_META_KEY)?.value ?? '';
|
|
216
|
-
const written =
|
|
248
|
+
const written = withWriteScope(db, 'import_legacy_vectors', () => upsertVectors(db, index, model));
|
|
217
249
|
const backup = `${fp}.imported-${stamp()}`;
|
|
218
250
|
if (moveAside(fp, backup)) {
|
|
219
251
|
log.info(`moved ${written} vectors from ${LEGACY_EMBEDDINGS_FILE} into the store; the file is kept as ${path.basename(backup)}`, { hippoRoot });
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface WalCheckpointer {
|
|
2
|
+
/** Counts one finished response and starts a checkpoint when enough have finished, unless one is still running. */
|
|
3
|
+
noteResponse(): void;
|
|
4
|
+
/** Resolves once the worker's connection is closed, so the caller's own close can be SQLite's last. */
|
|
5
|
+
stop(): Promise<void>;
|
|
6
|
+
}
|
|
7
|
+
/** The wal_autocheckpoint value for a new connection to `dbPath` in this process. */
|
|
8
|
+
export declare function autoCheckpointPages(dbPath: string): number;
|
|
9
|
+
/** Checkpoints `dbPath` off the calling thread until `stop()`; the worker starts with the first checkpoint that is due. */
|
|
10
|
+
export declare function startWalCheckpointer(dbPath: string): WalCheckpointer;
|
|
11
|
+
//# sourceMappingURL=wal-checkpointer.d.ts.map
|