hippo-memory 1.72.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -4
- package/dist/agent-memories/apply.d.ts +7 -5
- package/dist/agent-memories/apply.js +66 -39
- package/dist/agent-memories/claude-code.d.ts +8 -2
- package/dist/agent-memories/claude-code.js +26 -7
- package/dist/agent-memories/copilot.js +2 -1
- package/dist/agent-memories/files.js +2 -1
- package/dist/agent-memories/legacy.d.ts +6 -3
- package/dist/agent-memories/legacy.js +35 -14
- package/dist/agent-memories/markdown.d.ts +3 -1
- package/dist/agent-memories/markdown.js +3 -1
- package/dist/agent-memories/openclaw.js +5 -2
- package/dist/agent-memories/plan.js +11 -1
- package/dist/agent-memories/project-folds.js +2 -1
- package/dist/agent-memories/report.d.ts +4 -1
- package/dist/agent-memories/report.js +43 -9
- package/dist/agent-memories/source.d.ts +8 -2
- package/dist/agent-memories/source.js +11 -3
- package/dist/agent-memories/sync.d.ts +7 -2
- package/dist/agent-memories/sync.js +141 -101
- package/dist/api/assemble.d.ts +6 -4
- package/dist/api/assemble.js +11 -5
- package/dist/api/{audit.d.ts → auth/audit.d.ts} +18 -16
- package/dist/api/auth/audit.js +58 -0
- package/dist/api/{auth.d.ts → auth/auth.d.ts} +19 -16
- package/dist/api/{auth.js → auth/auth.js} +66 -54
- package/dist/api/{quarantine.d.ts → auth/quarantine.d.ts} +8 -7
- package/dist/api/{quarantine.js → auth/quarantine.js} +8 -7
- package/dist/api/auth/session-owners.d.ts +10 -0
- package/dist/api/auth/session-owners.js +35 -0
- package/dist/api/availability.d.ts +3 -1
- package/dist/api/availability.js +3 -1
- package/dist/api/busy.d.ts +2 -0
- package/dist/api/busy.js +2 -0
- package/dist/api/cli-surface.d.ts +6 -0
- package/dist/api/cli-surface.js +6 -0
- package/dist/api/config-of.d.ts +5 -0
- package/dist/api/config-of.js +6 -0
- package/dist/api/context-auto.d.ts +4 -1
- package/dist/api/context-auto.js +14 -4
- package/dist/api/context-render.js +14 -7
- package/dist/api/context-select.d.ts +4 -1
- package/dist/api/context-select.js +31 -34
- package/dist/api/context-types.d.ts +38 -12
- package/dist/api/context.d.ts +8 -5
- package/dist/api/context.js +120 -63
- package/dist/api/continuity.d.ts +24 -21
- package/dist/api/continuity.js +18 -20
- package/dist/api/correction-latency.d.ts +3 -1
- package/dist/api/correction-latency.js +3 -1
- package/dist/api/error-reply.d.ts +4 -1
- package/dist/api/error-reply.js +12 -3
- package/dist/api/index.d.ts +39 -23
- package/dist/api/index.js +21 -23
- package/dist/api/instruction-detect.d.ts +4 -1
- package/dist/api/instruction-detect.js +75 -20
- package/dist/api/ledger-db.d.ts +15 -11
- package/dist/api/ledger-db.js +21 -23
- package/dist/api/memories/conflicts.d.ts +33 -0
- package/dist/api/memories/conflicts.js +67 -0
- package/dist/api/{forget.d.ts → memories/forget.d.ts} +11 -9
- package/dist/api/{forget.js → memories/forget.js} +23 -17
- package/dist/api/memories/memories.d.ts +27 -0
- package/dist/api/memories/memories.js +52 -0
- package/dist/api/memories/outcome.d.ts +22 -0
- package/dist/api/memories/outcome.js +28 -0
- package/dist/api/memories/promote.d.ts +40 -0
- package/dist/api/memories/promote.js +76 -0
- package/dist/api/memories/refine.d.ts +10 -0
- package/dist/api/memories/refine.js +12 -0
- package/dist/api/{remember-local.d.ts → memories/remember-local.d.ts} +17 -9
- package/dist/api/{remember-local.js → memories/remember-local.js} +46 -24
- package/dist/api/{remember.d.ts → memories/remember.d.ts} +22 -13
- package/dist/api/{remember.js → memories/remember.js} +50 -32
- package/dist/api/objects/cards.d.ts +39 -0
- package/dist/api/{cards.js → objects/cards.js} +12 -14
- package/dist/api/{drill-down.d.ts → objects/drill-down.d.ts} +12 -10
- package/dist/api/{drill-down.js → objects/drill-down.js} +7 -7
- package/dist/api/objects/goals.d.ts +18 -0
- package/dist/api/{goals.js → objects/goals.js} +12 -12
- package/dist/api/objects/graph.d.ts +11 -0
- package/dist/api/objects/graph.js +16 -0
- package/dist/api/objects/objects.d.ts +9 -0
- package/dist/api/{objects.js → objects/objects.js} +2 -3
- package/dist/api/objects/predictions.d.ts +11 -0
- package/dist/api/{predictions.js → objects/predictions.js} +7 -5
- package/dist/api/{projects.d.ts → objects/projects.d.ts} +8 -5
- package/dist/api/{projects.js → objects/projects.js} +8 -4
- package/dist/api/pilot-arm.d.ts +8 -4
- package/dist/api/pilot-arm.js +5 -4
- package/dist/api/prompt-hook.d.ts +35 -20
- package/dist/api/prompt-hook.js +66 -44
- package/dist/api/provenance-coverage.d.ts +3 -1
- package/dist/api/provenance-coverage.js +3 -1
- package/dist/api/recall/finish.d.ts +185 -0
- package/dist/api/recall/finish.js +301 -0
- package/dist/api/{recall-pipeline.d.ts → recall/pipeline.d.ts} +12 -8
- package/dist/api/{recall-pipeline.js → recall/pipeline.js} +185 -101
- package/dist/api/recall/recall.d.ts +6 -0
- package/dist/api/{recall.js → recall/recall.js} +116 -72
- package/dist/api/recall/render.d.ts +39 -0
- package/dist/api/recall/render.js +60 -0
- package/dist/api/{recall-request.d.ts → recall/request.d.ts} +7 -5
- package/dist/api/recall/request.js +261 -0
- package/dist/api/{recall-cli.d.ts → recall/rows.d.ts} +18 -12
- package/dist/api/{recall-cli.js → recall/rows.js} +28 -27
- package/dist/api/{recall-types.d.ts → recall/types.d.ts} +95 -68
- package/dist/api/{recall-types.js → recall/types.js} +1 -1
- package/dist/api/session-end.d.ts +36 -8
- package/dist/api/session-end.js +71 -25
- package/dist/api/{auto-sleep.d.ts → sleep/auto-sleep.d.ts} +9 -5
- package/dist/api/{auto-sleep.js → sleep/auto-sleep.js} +7 -12
- package/dist/api/sleep/dormant.d.ts +25 -0
- package/dist/api/sleep/dormant.js +64 -0
- package/dist/api/{learn.d.ts → sleep/learn.d.ts} +5 -4
- package/dist/api/sleep/learn.js +138 -0
- package/dist/api/sleep/sleep-run.d.ts +38 -0
- package/dist/api/{sleep-run.js → sleep/sleep-run.js} +54 -45
- package/dist/api/{sleep.d.ts → sleep/sleep.d.ts} +17 -11
- package/dist/api/sleep/sleep.js +9 -0
- package/dist/api/status.d.ts +3 -1
- package/dist/api/status.js +3 -1
- package/dist/api/store-init.d.ts +4 -1
- package/dist/api/store-init.js +4 -1
- package/dist/api/tokens.d.ts +10 -9
- package/dist/api/tokens.js +9 -10
- package/dist/api/types.d.ts +27 -12
- package/dist/api/types.js +13 -4
- package/dist/capture/caller-session.d.ts +8 -2
- package/dist/capture/caller-session.js +16 -6
- package/dist/capture/capture-error.d.ts +3 -1
- package/dist/capture/capture-error.js +3 -1
- package/dist/capture/codex-patch.js +7 -2
- package/dist/capture/command.d.ts +4 -2
- package/dist/capture/command.js +34 -15
- package/dist/capture/compact-resume-caller.js +15 -8
- package/dist/capture/compact.d.ts +8 -5
- package/dist/capture/compact.js +34 -23
- package/dist/capture/compaction-items-caller.js +9 -3
- package/dist/capture/compaction-record.d.ts +4 -3
- package/dist/capture/compaction-record.js +20 -12
- package/dist/capture/compaction-spool.d.ts +18 -9
- package/dist/capture/compaction-spool.js +105 -63
- package/dist/capture/copilot-transcript.d.ts +11 -3
- package/dist/capture/copilot-transcript.js +16 -6
- package/dist/capture/extract.js +20 -8
- package/dist/capture/failure-caller.js +23 -12
- package/dist/capture/failure-reading.d.ts +10 -3
- package/dist/capture/failure-reading.js +24 -7
- package/dist/capture/pre-compact-caller.js +11 -4
- package/dist/capture/session-digest.d.ts +15 -4
- package/dist/capture/session-digest.js +39 -13
- package/dist/capture/session-end-caller.d.ts +4 -1
- package/dist/capture/session-end-caller.js +20 -8
- package/dist/capture/session-texts.d.ts +6 -2
- package/dist/capture/session-texts.js +22 -7
- package/dist/capture/session-worker.d.ts +4 -2
- package/dist/capture/session-worker.js +58 -17
- package/dist/capture/transcript.d.ts +13 -4
- package/dist/capture/transcript.js +32 -10
- package/dist/capture/working-state.d.ts +13 -4
- package/dist/capture/working-state.js +50 -56
- package/dist/cli/api-context.d.ts +14 -2
- package/dist/cli/api-context.js +45 -2
- package/dist/cli/audit.js +33 -33
- package/dist/cli/auth.js +23 -31
- package/dist/cli/briefs.d.ts +1 -1
- package/dist/cli/briefs.js +20 -15
- package/dist/cli/card.d.ts +1 -1
- package/dist/cli/card.js +56 -73
- package/dist/cli/client.d.ts +12 -5
- package/dist/cli/client.js +53 -23
- package/dist/cli/compact-resume-payload.d.ts +4 -1
- package/dist/cli/compact-resume-payload.js +12 -5
- package/dist/cli/context.js +43 -18
- package/dist/cli/continuity.d.ts +5 -5
- package/dist/cli/continuity.js +90 -107
- package/dist/cli/curate.d.ts +5 -4
- package/dist/cli/curate.js +55 -77
- package/dist/cli/dag.d.ts +1 -1
- package/dist/cli/dag.js +14 -17
- package/dist/cli/decisions.js +30 -30
- package/dist/cli/eval.js +16 -21
- package/dist/cli/exit.d.ts +4 -1
- package/dist/cli/exit.js +10 -2
- package/dist/cli/explain.js +12 -11
- package/dist/cli/flag-values.d.ts +1 -1
- package/dist/cli/flag-values.js +9 -18
- package/dist/cli/github.d.ts +6 -0
- package/dist/cli/github.js +25 -13
- package/dist/cli/goals.d.ts +1 -1
- package/dist/cli/goals.js +39 -56
- package/dist/cli/graph.d.ts +1 -1
- package/dist/cli/graph.js +15 -11
- package/dist/cli/hook-runtime.d.ts +34 -10
- package/dist/cli/hook-runtime.js +41 -16
- package/dist/cli/incidents.d.ts +1 -1
- package/dist/cli/incidents.js +25 -25
- package/dist/cli/init.d.ts +1 -1
- package/dist/cli/init.js +35 -20
- package/dist/cli/install-steps.d.ts +12 -3
- package/dist/cli/install-steps.js +42 -18
- package/dist/cli/last-sleep.d.ts +4 -1
- package/dist/cli/last-sleep.js +9 -4
- package/dist/cli/maintenance.d.ts +1 -1
- package/dist/cli/maintenance.js +11 -12
- package/dist/cli/notes.d.ts +1 -1
- package/dist/cli/notes.js +8 -5
- package/dist/cli/object-verbs.d.ts +5 -5
- package/dist/cli/object-verbs.js +13 -16
- package/dist/cli/open-browser.js +11 -2
- package/dist/cli/playbooks.d.ts +3 -3
- package/dist/cli/playbooks.js +40 -32
- package/dist/cli/predictions.js +17 -22
- package/dist/cli/print.js +4 -2
- package/dist/cli/projects.js +21 -11
- package/dist/cli/quality-repair-once.d.ts +1 -1
- package/dist/cli/quality-repair-once.js +7 -6
- package/dist/cli/recall.js +129 -93
- package/dist/cli/refine-llm.d.ts +15 -4
- package/dist/cli/refine-llm.js +17 -7
- package/dist/cli/remember.js +51 -55
- package/dist/cli/scheduler.d.ts +4 -1
- package/dist/cli/scheduler.js +9 -5
- package/dist/cli/serve.js +28 -18
- package/dist/cli/session-hooks.d.ts +2 -6
- package/dist/cli/session-hooks.js +140 -112
- package/dist/cli/setup.d.ts +1 -1
- package/dist/cli/setup.js +56 -34
- package/dist/cli/shared.d.ts +4 -2
- package/dist/cli/shared.js +26 -11
- package/dist/cli/slack.js +15 -24
- package/dist/cli/sleep-render.d.ts +3 -1
- package/dist/cli/sleep-render.js +8 -5
- package/dist/cli/sleep.js +16 -8
- package/dist/cli/status.d.ts +4 -4
- package/dist/cli/status.js +32 -27
- package/dist/cli/stdin.d.ts +10 -3
- package/dist/cli/stdin.js +10 -3
- package/dist/cli/transfer.d.ts +4 -4
- package/dist/cli/transfer.js +97 -82
- package/dist/cli/usage.d.ts +1 -1
- package/dist/cli/usage.js +1 -1
- package/dist/cli/verb-row.d.ts +2 -0
- package/dist/cli/verbs/health.js +2 -0
- package/dist/cli/verbs/memory.js +47 -53
- package/dist/cli/verbs/objects.js +16 -7
- package/dist/cli/verbs/sessions.js +4 -2
- package/dist/cli/versioned-verbs.d.ts +8 -7
- package/dist/cli/versioned-verbs.js +31 -21
- package/dist/cli.js +14 -18
- package/dist/connectors/dlq.d.ts +6 -6
- package/dist/connectors/dlq.js +12 -7
- package/dist/connectors/github/backfill.d.ts +4 -4
- package/dist/connectors/github/backfill.js +6 -4
- package/dist/connectors/github/deletion.d.ts +6 -4
- package/dist/connectors/github/deletion.js +5 -4
- package/dist/connectors/github/dlq.d.ts +8 -6
- package/dist/connectors/github/dlq.js +11 -5
- package/dist/connectors/github/ingest.d.ts +2 -2
- package/dist/connectors/github/ingest.js +9 -5
- package/dist/connectors/github/octokit-client.d.ts +3 -1
- package/dist/connectors/github/octokit-client.js +7 -2
- package/dist/connectors/github/ratelimit.d.ts +6 -2
- package/dist/connectors/github/ratelimit.js +6 -2
- package/dist/connectors/github/signature.d.ts +14 -3
- package/dist/connectors/github/signature.js +17 -3
- package/dist/connectors/github/tenant-routing.d.ts +6 -4
- package/dist/connectors/github/tenant-routing.js +6 -5
- package/dist/connectors/github/transform.js +50 -67
- package/dist/connectors/github/types.d.ts +10 -3
- package/dist/connectors/github/types.js +6 -2
- package/dist/connectors/github/webhook.d.ts +5 -5
- package/dist/connectors/github/webhook.js +36 -23
- package/dist/connectors/ingest.d.ts +5 -3
- package/dist/connectors/ingest.js +3 -3
- package/dist/connectors/slack/backfill.d.ts +5 -5
- package/dist/connectors/slack/backfill.js +3 -3
- package/dist/connectors/slack/deletion.d.ts +4 -4
- package/dist/connectors/slack/deletion.js +6 -5
- package/dist/connectors/slack/dlq.d.ts +4 -4
- package/dist/connectors/slack/dlq.js +6 -6
- package/dist/connectors/slack/ingest.d.ts +6 -4
- package/dist/connectors/slack/ingest.js +5 -4
- package/dist/connectors/slack/signature.d.ts +4 -1
- package/dist/connectors/slack/tenant-routing.d.ts +6 -4
- package/dist/connectors/slack/tenant-routing.js +6 -5
- package/dist/connectors/slack/transform.d.ts +6 -2
- package/dist/connectors/slack/transform.js +6 -2
- package/dist/connectors/slack/types.d.ts +3 -1
- package/dist/connectors/slack/web-client.js +8 -3
- package/dist/connectors/slack/webhook.d.ts +5 -5
- package/dist/connectors/slack/webhook.js +19 -11
- package/dist/connectors/slack/workspaces.d.ts +7 -3
- package/dist/connectors/slack/workspaces.js +7 -3
- package/dist/connectors/store.d.ts +8 -0
- package/dist/connectors/store.js +2 -0
- package/dist/consolidate/conflicts.js +24 -10
- package/dist/consolidate/dag-summary.js +2 -1
- package/dist/consolidate/dag.d.ts +10 -5
- package/dist/consolidate/dag.js +45 -39
- package/dist/consolidate/decay.js +19 -6
- package/dist/consolidate/dedupe.d.ts +14 -5
- package/dist/consolidate/dedupe.js +28 -17
- package/dist/consolidate/flush-units.d.ts +4 -1
- package/dist/consolidate/flush-units.js +4 -1
- package/dist/consolidate/half-life-migration.d.ts +18 -8
- package/dist/consolidate/half-life-migration.js +48 -18
- package/dist/consolidate/llm-passes.js +27 -11
- package/dist/consolidate/memory-value-weights.d.ts +6 -2
- package/dist/consolidate/memory-value-weights.js +6 -2
- package/dist/consolidate/memory-value.d.ts +30 -10
- package/dist/consolidate/memory-value.js +37 -14
- package/dist/consolidate/merge.d.ts +4 -1
- package/dist/consolidate/merge.js +47 -37
- package/dist/consolidate/overlap-index.d.ts +8 -2
- package/dist/consolidate/overlap-index.js +11 -4
- package/dist/consolidate/physics-pass.d.ts +3 -1
- package/dist/consolidate/physics-pass.js +10 -7
- package/dist/consolidate/replay.d.ts +11 -4
- package/dist/consolidate/replay.js +19 -7
- package/dist/consolidate/run.d.ts +13 -5
- package/dist/consolidate/run.js +4 -4
- package/dist/consolidate/sleep.d.ts +14 -6
- package/dist/consolidate/sleep.js +42 -39
- package/dist/consolidate/trace.d.ts +7 -2
- package/dist/consolidate/trace.js +7 -2
- package/dist/consolidate/traces.js +27 -30
- package/dist/core/ablation.d.ts +9 -3
- package/dist/core/ablation.js +14 -4
- package/dist/core/active-scope.d.ts +3 -1
- package/dist/core/active-scope.js +3 -1
- package/dist/core/agent-memory-tools.d.ts +2 -0
- package/dist/core/agent-memory-tools.js +2 -0
- package/dist/core/ambient.d.ts +4 -3
- package/dist/core/ambient.js +8 -6
- package/dist/core/api-errors.d.ts +9 -3
- package/dist/core/api-errors.js +9 -3
- package/dist/core/capture-contract.d.ts +4 -1
- package/dist/core/capture-contract.js +27 -8
- package/dist/core/compare.d.ts +24 -8
- package/dist/core/compare.js +24 -8
- package/dist/core/config.d.ts +18 -9
- package/dist/core/config.js +38 -29
- package/dist/core/cosine.d.ts +4 -1
- package/dist/core/cosine.js +4 -1
- package/dist/core/handoff.d.ts +7 -2
- package/dist/core/handoff.js +4 -1
- package/dist/core/markdown.js +22 -17
- package/dist/core/memory-audit.js +14 -3
- package/dist/core/memory-quality.d.ts +12 -3
- package/dist/core/memory-quality.js +57 -21
- package/dist/core/memory.d.ts +87 -30
- package/dist/core/memory.js +82 -33
- package/dist/core/merged-row.d.ts +8 -2
- package/dist/core/merged-row.js +10 -3
- package/dist/core/package-root.d.ts +3 -1
- package/dist/core/package-root.js +3 -1
- package/dist/core/particle-refresh.d.ts +8 -0
- package/dist/core/particle-refresh.js +22 -0
- package/dist/core/physics-config.d.ts +4 -1
- package/dist/core/physics-config.js +6 -2
- package/dist/core/physics.d.ts +39 -11
- package/dist/core/physics.js +71 -21
- package/dist/core/project-identity.d.ts +34 -17
- package/dist/core/project-identity.js +35 -18
- package/dist/core/project-remote.d.ts +8 -4
- package/dist/core/project-remote.js +31 -14
- package/dist/core/recall-scope.d.ts +33 -11
- package/dist/core/recall-scope.js +42 -15
- package/dist/core/rejection-digest.d.ts +7 -0
- package/dist/core/rejection-digest.js +13 -0
- package/dist/core/salience.d.ts +3 -1
- package/dist/core/salience.js +10 -4
- package/dist/core/search-types.d.ts +15 -2
- package/dist/core/search-types.js +11 -0
- package/dist/dashboard/dashboard-actions.d.ts +2 -2
- package/dist/dashboard/dashboard-actions.js +18 -7
- package/dist/dashboard/dashboard-queries.js +2 -7
- package/dist/dashboard/dashboard-snapshot.d.ts +2 -2
- package/dist/dashboard/dashboard-snapshot.js +5 -7
- package/dist/dashboard/dashboard.js +22 -8
- package/dist/db/backup.js +2 -2
- package/dist/db/busy.d.ts +10 -3
- package/dist/db/busy.js +27 -5
- package/dist/db/connect.d.ts +10 -2
- package/dist/db/connect.js +8 -2
- package/dist/db/continuity.d.ts +1 -1
- package/dist/db/continuity.js +27 -11
- package/dist/db/meta.d.ts +4 -1
- package/dist/db/meta.js +4 -1
- package/dist/db/migrate.d.ts +10 -5
- package/dist/db/migrate.js +40 -20
- package/dist/db/migrations/index.d.ts +1 -1
- package/dist/db/migrations/index.js +3 -1
- package/dist/db/migrations/types.d.ts +2 -1
- package/dist/db/migrations/v11.js +1 -0
- package/dist/db/migrations/v12.js +2 -1
- package/dist/db/migrations/v14.js +2 -0
- package/dist/db/migrations/v15.js +4 -2
- package/dist/db/migrations/v16.js +6 -3
- package/dist/db/migrations/v17.js +2 -1
- package/dist/db/migrations/v19.js +4 -2
- package/dist/db/migrations/v20.js +2 -1
- package/dist/db/migrations/v22.js +12 -6
- package/dist/db/migrations/v23.js +6 -3
- package/dist/db/migrations/v24.js +6 -3
- package/dist/db/migrations/v25.js +4 -2
- package/dist/db/migrations/v26.js +4 -2
- package/dist/db/migrations/v27.js +6 -3
- package/dist/db/migrations/v28.js +4 -2
- package/dist/db/migrations/v29.js +4 -2
- package/dist/db/migrations/v30.js +6 -3
- package/dist/db/migrations/v31.js +4 -2
- package/dist/db/migrations/v32.js +6 -3
- package/dist/db/migrations/v33.js +4 -2
- package/dist/db/migrations/v34.js +2 -1
- package/dist/db/migrations/v35.js +2 -1
- package/dist/db/migrations/v36.js +2 -1
- package/dist/db/migrations/v37.js +10 -5
- package/dist/db/migrations/v38.js +10 -5
- package/dist/db/migrations/v39.js +14 -6
- package/dist/db/migrations/v40.js +4 -2
- package/dist/db/migrations/v41.js +4 -2
- package/dist/db/migrations/v42.js +2 -1
- package/dist/db/migrations/v44.js +4 -2
- package/dist/db/migrations/v45.js +4 -2
- package/dist/db/migrations/v49.js +2 -1
- package/dist/db/migrations/v50.js +4 -2
- package/dist/db/migrations/v51.js +4 -2
- package/dist/db/migrations/v52.js +2 -1
- package/dist/db/migrations/v53.js +8 -4
- package/dist/db/migrations/v54.js +2 -1
- package/dist/db/migrations/v55.js +4 -2
- package/dist/db/migrations/v56.d.ts +3 -0
- package/dist/db/migrations/v56.js +28 -0
- package/dist/db/open.d.ts +24 -12
- package/dist/db/open.js +25 -13
- package/dist/db/physics-state.d.ts +8 -8
- package/dist/db/physics-state.js +17 -50
- package/dist/db/raw-archive-mirror-cleanup.d.ts +4 -2
- package/dist/db/raw-archive-mirror-cleanup.js +6 -4
- package/dist/db/request-stores.d.ts +20 -5
- package/dist/db/request-stores.js +15 -5
- package/dist/db/tables.d.ts +2 -1
- package/dist/db/tables.js +12 -4
- package/dist/db/vector-store.d.ts +13 -4
- package/dist/db/vector-store.js +35 -14
- package/dist/db/wal-checkpointer.d.ts +2 -1
- package/dist/db/wal-checkpointer.js +19 -7
- package/dist/doctor.d.ts +7 -1
- package/dist/doctor.js +128 -46
- package/dist/embeddings/local.d.ts +8 -4
- package/dist/embeddings/local.js +11 -7
- package/dist/embeddings/provider.d.ts +19 -10
- package/dist/embeddings/provider.js +32 -27
- package/dist/embeddings/transformers.d.ts +16 -4
- package/dist/embeddings/transformers.js +32 -15
- package/dist/entry/json-hooks.d.ts +1 -1
- package/dist/entry/json-hooks.js +1 -1
- package/dist/entry/project-identity.js +2 -1
- package/dist/entry/session-text.d.ts +1 -1
- package/dist/entry/session-text.js +1 -1
- package/dist/entry/sqlite-handles.d.ts +10 -0
- package/dist/entry/sqlite-handles.js +9 -0
- package/dist/entry/store-kit.d.ts +50 -0
- package/dist/entry/store-kit.js +27 -0
- package/dist/entry/testing.d.ts +6 -0
- package/dist/entry/testing.js +7 -0
- package/dist/eval/eval-stats.d.ts +27 -8
- package/dist/eval/eval-stats.js +17 -5
- package/dist/eval/eval-suite.d.ts +3 -1
- package/dist/eval/eval-suite.js +409 -187
- package/dist/eval/eval.d.ts +8 -2
- package/dist/eval/eval.js +8 -2
- package/dist/eval/judgment.js +17 -7
- package/dist/graph/delta.d.ts +9 -42
- package/dist/graph/delta.js +17 -11
- package/dist/graph/extract.d.ts +10 -7
- package/dist/graph/extract.js +57 -25
- package/dist/graph/recall.d.ts +12 -4
- package/dist/graph/recall.js +30 -13
- package/dist/graph/stream.d.ts +18 -6
- package/dist/graph/stream.js +32 -10
- package/dist/graph/view.d.ts +19 -6
- package/dist/graph/view.js +42 -17
- package/dist/hooks/codex-session.js +2 -2
- package/dist/hooks/codex-wrapper.d.ts +3 -1
- package/dist/hooks/codex-wrapper.js +9 -4
- package/dist/hooks/copilot.d.ts +19 -5
- package/dist/hooks/copilot.js +54 -15
- package/dist/hooks/hook-blocks.d.ts +4 -1
- package/dist/hooks/hook-blocks.js +8 -3
- package/dist/hooks/json-hooks.d.ts +9 -5
- package/dist/hooks/json-hooks.js +72 -33
- package/dist/hooks/opencode.js +15 -5
- package/dist/hooks/shared.d.ts +27 -8
- package/dist/hooks/shared.js +57 -16
- package/dist/importers/core.d.ts +12 -4
- package/dist/importers/core.js +11 -10
- package/dist/importers/markdown-parse.d.ts +15 -5
- package/dist/importers/markdown-parse.js +16 -7
- package/dist/importers/markdown.js +6 -9
- package/dist/importers/sources.js +10 -23
- package/dist/importers/vault.d.ts +3 -3
- package/dist/importers/vault.js +61 -45
- package/dist/index.d.ts +33 -7
- package/dist/index.js +26 -8
- package/dist/learn/autolearn.d.ts +21 -6
- package/dist/learn/autolearn.js +57 -26
- package/dist/learn/churn-git.d.ts +4 -1
- package/dist/learn/churn-git.js +29 -5
- package/dist/learn/extract.d.ts +4 -1
- package/dist/learn/extract.js +17 -10
- package/dist/learn/forward-claim-detector.d.ts +17 -5
- package/dist/learn/forward-claim-detector.js +34 -15
- package/dist/learn/invalidation.d.ts +12 -6
- package/dist/learn/invalidation.js +62 -28
- package/dist/learn/roots.d.ts +3 -0
- package/dist/learn/roots.js +5 -0
- package/dist/mcp/admin-tools.d.ts +5 -5
- package/dist/mcp/admin-tools.js +28 -23
- package/dist/mcp/format.d.ts +1 -1
- package/dist/mcp/format.js +4 -2
- package/dist/mcp/framing.d.ts +3 -1
- package/dist/mcp/framing.js +20 -8
- package/dist/mcp/memory-tools.d.ts +3 -3
- package/dist/mcp/memory-tools.js +21 -20
- package/dist/mcp/protocol.d.ts +32 -16
- package/dist/mcp/protocol.js +12 -9
- package/dist/mcp/recall-tools.d.ts +3 -3
- package/dist/mcp/recall-tools.js +62 -74
- package/dist/mcp/request.d.ts +7 -5
- package/dist/mcp/request.js +61 -77
- package/dist/mcp/server.d.ts +3 -1
- package/dist/mcp/server.js +8 -3
- package/dist/mcp/session-state.d.ts +1 -1
- package/dist/mcp/session-state.js +4 -3
- package/dist/mcp/shared-gate.d.ts +3 -2
- package/dist/mcp/shared-gate.js +3 -2
- package/dist/mcp/stdio.d.ts +6 -3
- package/dist/mcp/stdio.js +59 -23
- package/dist/mcp/tool-args.d.ts +4 -1
- package/dist/mcp/tool-args.js +8 -3
- package/dist/mcp/tools.js +76 -32
- package/dist/objects/customer-notes.d.ts +12 -10
- package/dist/objects/customer-notes.js +21 -15
- package/dist/objects/decisions.d.ts +18 -10
- package/dist/objects/decisions.js +23 -17
- package/dist/objects/descriptor.js +2 -1
- package/dist/objects/fields.d.ts +4 -1
- package/dist/objects/fields.js +6 -2
- package/dist/objects/incidents.d.ts +14 -16
- package/dist/objects/incidents.js +29 -30
- package/dist/objects/lifecycle.d.ts +0 -4
- package/dist/objects/lifecycle.js +21 -24
- package/dist/objects/policies.d.ts +12 -16
- package/dist/objects/policies.js +17 -21
- package/dist/objects/processes.d.ts +16 -10
- package/dist/objects/processes.js +20 -15
- package/dist/objects/project-briefs.d.ts +13 -14
- package/dist/objects/project-briefs.js +33 -39
- package/dist/objects/skills.d.ts +10 -12
- package/dist/objects/skills.js +17 -22
- package/dist/postinstall.js +15 -7
- package/dist/predictions/planning-fallacy.d.ts +19 -6
- package/dist/predictions/planning-fallacy.js +4 -2
- package/dist/rerankers/clef.d.ts +8 -2
- package/dist/rerankers/clef.js +14 -9
- package/dist/rerankers/cross-encoder.d.ts +2 -1
- package/dist/rerankers/cross-encoder.js +19 -9
- package/dist/rerankers/index.js +2 -1
- package/dist/rerankers/jev.js +2 -1
- package/dist/rerankers/llm.d.ts +6 -2
- package/dist/rerankers/llm.js +8 -3
- package/dist/rerankers/remote.d.ts +3 -1
- package/dist/rerankers/remote.js +5 -2
- package/dist/rerankers/types.d.ts +6 -2
- package/dist/search/bm25-search.d.ts +3 -1
- package/dist/search/bm25-search.js +15 -2
- package/dist/search/boosts.js +4 -3
- package/dist/search/embed-memories.d.ts +12 -4
- package/dist/search/embed-memories.js +96 -58
- package/dist/search/engine.d.ts +11 -0
- package/dist/search/engine.js +14 -0
- package/dist/search/goal-boost.d.ts +10 -3
- package/dist/search/goal-boost.js +13 -6
- package/dist/search/hybrid-score.d.ts +4 -1
- package/dist/search/hybrid-score.js +4 -1
- package/dist/search/hybrid.d.ts +23 -8
- package/dist/search/hybrid.js +12 -7
- package/dist/search/multihop.js +14 -13
- package/dist/search/path-context.d.ts +10 -3
- package/dist/search/path-context.js +10 -3
- package/dist/search/physics-search.d.ts +9 -4
- package/dist/search/physics-search.js +38 -14
- package/dist/search/rerank.d.ts +2 -1
- package/dist/search/rerank.js +2 -1
- package/dist/search/rrf.d.ts +14 -5
- package/dist/search/rrf.js +11 -4
- package/dist/search/vector.d.ts +8 -2
- package/dist/search/vector.js +14 -8
- package/dist/server/auth.d.ts +19 -15
- package/dist/server/auth.js +68 -38
- package/dist/server/boot.d.ts +4 -1
- package/dist/server/boot.js +115 -67
- package/dist/server/client-ip.d.ts +17 -5
- package/dist/server/client-ip.js +56 -21
- package/dist/server/cursor.d.ts +10 -3
- package/dist/server/cursor.js +10 -3
- package/dist/server/deadline.d.ts +5 -2
- package/dist/server/deadline.js +10 -3
- package/dist/server/key-check-bounds.js +12 -4
- package/dist/server/lifecycle.d.ts +4 -1
- package/dist/server/lifecycle.js +10 -4
- package/dist/server/mcp-http.d.ts +2 -1
- package/dist/server/mcp-http.js +37 -22
- package/dist/server/rate-limit.d.ts +17 -5
- package/dist/server/rate-limit.js +55 -26
- package/dist/server/ready.js +7 -4
- package/dist/server/request.d.ts +15 -4
- package/dist/server/request.js +42 -15
- package/dist/server/route-checks.d.ts +4 -1
- package/dist/server/route-checks.js +8 -3
- package/dist/server/route-table.d.ts +8 -6
- package/dist/server/route-table.js +550 -97
- package/dist/server/routes/admin.d.ts +7 -7
- package/dist/server/routes/admin.js +36 -15
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +5 -4
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +12 -6
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +10 -4
- package/dist/server/routes/memories.d.ts +8 -8
- package/dist/server/routes/memories.js +12 -17
- package/dist/server/routes/object-routes.d.ts +8 -5
- package/dist/server/routes/object-routes.js +4 -2
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +11 -4
- package/dist/server/routes/predictions.d.ts +5 -5
- package/dist/server/routes/predictions.js +9 -4
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +15 -6
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +3 -2
- package/dist/server/routes/recall.d.ts +3 -3
- package/dist/server/routes/recall.js +21 -10
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +12 -4
- package/dist/server/server-detect.d.ts +24 -8
- package/dist/server/server-detect.js +57 -22
- package/dist/server/sleep-child.js +16 -10
- package/dist/server/sleep-offload.d.ts +8 -5
- package/dist/server/sleep-offload.js +40 -18
- package/dist/server/tls.d.ts +10 -2
- package/dist/server/tls.js +25 -5
- package/dist/server/types.d.ts +41 -24
- package/dist/server/validation.d.ts +4 -1
- package/dist/server/validation.js +22 -9
- package/dist/server.d.ts +17 -49
- package/dist/server.js +33 -40
- package/dist/sharing/global-store.d.ts +6 -12
- package/dist/sharing/global-store.js +8 -48
- package/dist/sharing/global-sync.d.ts +3 -1
- package/dist/sharing/global-sync.js +17 -7
- package/dist/sharing/project-merge.d.ts +25 -7
- package/dist/sharing/project-merge.js +49 -17
- package/dist/sharing/search-both.d.ts +8 -4
- package/dist/sharing/search-both.js +28 -14
- package/dist/sharing/share.d.ts +8 -4
- package/dist/sharing/share.js +40 -18
- package/dist/store/ambient.js +10 -5
- package/dist/store/audit-event.d.ts +2 -2
- package/dist/store/audit-event.js +8 -3
- package/dist/store/audit.d.ts +6 -3
- package/dist/store/audit.js +16 -6
- package/dist/store/auth.d.ts +4 -2
- package/dist/store/auth.js +63 -20
- package/dist/store/busy.d.ts +9 -0
- package/dist/store/busy.js +16 -0
- package/dist/store/candidates.d.ts +12 -5
- package/dist/store/candidates.js +90 -41
- package/dist/store/capture-write.d.ts +2 -1
- package/dist/store/capture-write.js +2 -1
- package/dist/store/card-detail.d.ts +4 -4
- package/dist/store/card-detail.js +15 -8
- package/dist/store/cards.d.ts +24 -10
- package/dist/store/cards.js +97 -63
- package/dist/store/compaction-caller.d.ts +2 -1
- package/dist/store/compaction-caller.js +2 -1
- package/dist/store/compactions-record.d.ts +14 -8
- package/dist/store/compactions-record.js +101 -37
- package/dist/store/compactions.js +35 -15
- package/dist/store/conflicts.d.ts +16 -5
- package/dist/store/conflicts.js +104 -48
- package/dist/store/connectors/dlq.d.ts +17 -5
- package/dist/store/connectors/dlq.js +58 -6
- package/dist/store/connectors/event-log.d.ts +122 -0
- package/dist/store/connectors/event-log.js +25 -0
- package/dist/store/connectors/github.d.ts +6 -3
- package/dist/store/connectors/github.js +30 -48
- package/dist/store/connectors/slack.d.ts +2 -1
- package/dist/store/connectors/slack.js +31 -47
- package/dist/store/dashboard-reads.d.ts +7 -3
- package/dist/store/dashboard-reads.js +32 -10
- package/dist/store/delete-and-batch.d.ts +17 -11
- package/dist/store/delete-and-batch.js +70 -28
- package/dist/store/delivery-recorder.d.ts +10 -7
- package/dist/store/delivery-recorder.js +70 -37
- package/dist/store/descendant-page.d.ts +2 -1
- package/dist/store/descendant-page.js +26 -10
- package/dist/store/diagnostics.d.ts +2 -1
- package/dist/store/diagnostics.js +2 -1
- package/dist/store/doctor-reads.d.ts +2 -1
- package/dist/store/doctor-reads.js +13 -5
- package/dist/store/dormant.d.ts +19 -11
- package/dist/store/dormant.js +45 -19
- package/dist/store/embeddings/index.d.ts +13 -9
- package/dist/store/embeddings/index.js +19 -12
- package/dist/store/entry-reads.d.ts +72 -21
- package/dist/store/entry-reads.js +215 -69
- package/dist/store/entry-row.d.ts +10 -6
- package/dist/store/entry-row.js +26 -14
- package/dist/store/entry-writes.d.ts +28 -13
- package/dist/store/entry-writes.js +61 -22
- package/dist/store/failure-log-at.js +1 -1
- package/dist/store/failure-log.d.ts +4 -2
- package/dist/store/failure-log.js +13 -6
- package/dist/store/gated-write.d.ts +3 -3
- package/dist/store/gated-write.js +3 -3
- package/dist/store/goals.d.ts +5 -4
- package/dist/store/goals.js +11 -12
- package/dist/store/graph-apply.d.ts +21 -0
- package/dist/{graph/write.js → store/graph-apply.js} +31 -11
- package/dist/store/graph-queue.d.ts +9 -6
- package/dist/store/graph-queue.js +15 -10
- package/dist/store/graph-reads.d.ts +16 -11
- package/dist/store/graph-reads.js +29 -19
- package/dist/store/graph-rows.d.ts +41 -3
- package/dist/store/graph-rows.js +10 -7
- package/dist/store/graph-view-rows.js +15 -7
- package/dist/store/graph-writes.d.ts +16 -10
- package/dist/store/graph-writes.js +59 -36
- package/dist/store/half-life.js +2 -2
- package/dist/store/handoffs.d.ts +13 -7
- package/dist/store/handoffs.js +44 -22
- package/dist/store/index-and-stats.d.ts +2 -2
- package/dist/store/index-and-stats.js +6 -5
- package/dist/store/index.d.ts +4 -2
- package/dist/store/index.js +2 -1
- package/dist/store/key-audit.d.ts +2 -1
- package/dist/store/key-audit.js +2 -1
- package/dist/store/key-writes.d.ts +2 -1
- package/dist/store/key-writes.js +9 -2
- package/dist/store/ledger-turn.d.ts +4 -1
- package/dist/store/ledger-turn.js +7 -2
- package/dist/store/mirrors.d.ts +11 -4
- package/dist/store/mirrors.js +96 -19
- package/dist/store/narrow.d.ts +6 -0
- package/dist/store/narrow.js +11 -0
- package/dist/store/open.d.ts +6 -3
- package/dist/store/open.js +20 -10
- package/dist/store/pilot-arm.d.ts +2 -1
- package/dist/store/pilot-arm.js +18 -6
- package/dist/store/planning-fallacy-evidence.d.ts +2 -2
- package/dist/store/planning-fallacy-evidence.js +8 -5
- package/dist/store/port/agent-import.d.ts +62 -0
- package/dist/store/port/agent-import.js +2 -0
- package/dist/store/port/consolidation.d.ts +129 -0
- package/dist/store/port/consolidation.js +2 -0
- package/dist/store/port/learning.d.ts +19 -0
- package/dist/store/port/learning.js +2 -0
- package/dist/store/port/local-files.d.ts +18 -0
- package/dist/store/port/local-files.js +2 -0
- package/dist/store/port/promotion.d.ts +20 -0
- package/dist/store/port/promotion.js +3 -0
- package/dist/store/port-groups.d.ts +160 -0
- package/dist/store/port-groups.js +2 -0
- package/dist/store/port.d.ts +261 -219
- package/dist/store/port.js +3 -9
- package/dist/store/predictions.d.ts +14 -10
- package/dist/store/predictions.js +37 -17
- package/dist/store/project-tags.d.ts +4 -1
- package/dist/store/project-tags.js +16 -5
- package/dist/store/quality-repair.d.ts +8 -4
- package/dist/store/quality-repair.js +53 -20
- package/dist/store/quarantine.d.ts +1 -0
- package/dist/store/quarantine.js +23 -9
- package/dist/store/raw-archive.d.ts +5 -4
- package/dist/store/raw-archive.js +11 -10
- package/dist/store/recall-trace.d.ts +22 -17
- package/dist/store/recall-trace.js +128 -64
- package/dist/store/rejected-values.d.ts +15 -10
- package/dist/store/rejected-values.js +46 -20
- package/dist/store/rejection.d.ts +12 -11
- package/dist/store/rejection.js +18 -19
- package/dist/store/report-reads.d.ts +2 -1
- package/dist/store/report-reads.js +2 -1
- package/dist/store/rows.d.ts +7 -5
- package/dist/store/rows.js +20 -13
- package/dist/store/rule-sql.d.ts +7 -3
- package/dist/store/rule-sql.js +26 -13
- package/dist/store/search-rows.d.ts +16 -11
- package/dist/store/search-rows.js +54 -32
- package/dist/store/sessions.d.ts +12 -10
- package/dist/store/sessions.js +40 -21
- package/dist/store/set-aside.d.ts +2 -2
- package/dist/store/set-aside.js +18 -5
- package/dist/store/sqlite/agent-import.d.ts +3 -0
- package/dist/store/sqlite/agent-import.js +77 -0
- package/dist/store/sqlite/cards-group.d.ts +6 -0
- package/dist/store/sqlite/cards-group.js +37 -0
- package/dist/store/sqlite/conflicts-group.d.ts +6 -0
- package/dist/store/sqlite/conflicts-group.js +18 -0
- package/dist/store/sqlite/connector-events-group.d.ts +2 -1
- package/dist/store/sqlite/connector-events-group.js +17 -6
- package/dist/store/sqlite/connector-writes-group.d.ts +2 -1
- package/dist/store/sqlite/connector-writes-group.js +12 -5
- package/dist/store/sqlite/consolidation-group.d.ts +4 -0
- package/dist/store/sqlite/consolidation-group.js +64 -0
- package/dist/store/sqlite/dag-reads-group.js +1 -1
- package/dist/store/sqlite/dormant-group.d.ts +6 -0
- package/dist/store/sqlite/dormant-group.js +29 -0
- package/dist/store/sqlite/entry-writes-group.d.ts +9 -6
- package/dist/store/sqlite/entry-writes-group.js +37 -14
- package/dist/store/sqlite/error-codec.d.ts +4 -2
- package/dist/store/sqlite/error-codec.js +32 -10
- package/dist/store/sqlite/executor-counts.js +2 -1
- package/dist/store/sqlite/executor.d.ts +8 -3
- package/dist/store/sqlite/executor.js +56 -18
- package/dist/store/sqlite/global-promote.d.ts +5 -0
- package/dist/store/sqlite/global-promote.js +48 -0
- package/dist/store/sqlite/goals-group.d.ts +6 -0
- package/dist/store/sqlite/goals-group.js +23 -0
- package/dist/store/sqlite/graph-reads-group.d.ts +2 -1
- package/dist/store/sqlite/graph-reads-group.js +2 -1
- package/dist/store/sqlite/held-connection.d.ts +8 -0
- package/dist/store/sqlite/held-connection.js +34 -7
- package/dist/store/sqlite/last-recall-group.d.ts +15 -0
- package/dist/store/sqlite/last-recall-group.js +62 -0
- package/dist/store/sqlite/learning-group.d.ts +4 -0
- package/dist/store/sqlite/learning-group.js +17 -0
- package/dist/store/sqlite/maintenance-groups.d.ts +6 -0
- package/dist/store/sqlite/maintenance-groups.js +61 -0
- package/dist/store/sqlite/object-rows.d.ts +6 -3
- package/dist/store/sqlite/object-rows.js +34 -5
- package/dist/store/sqlite/objects-group.d.ts +5 -4
- package/dist/store/sqlite/objects-group.js +97 -38
- package/dist/store/sqlite/predictions-group.d.ts +2 -1
- package/dist/store/sqlite/predictions-group.js +4 -2
- package/dist/store/sqlite/promotion-group.d.ts +3 -0
- package/dist/store/sqlite/promotion-group.js +10 -0
- package/dist/store/sqlite/quarantine-group.d.ts +2 -1
- package/dist/store/sqlite/quarantine-group.js +4 -2
- package/dist/store/sqlite/reports-group.d.ts +6 -0
- package/dist/store/sqlite/reports-group.js +33 -0
- package/dist/store/sqlite/request-scope.d.ts +6 -0
- package/dist/store/sqlite/request-scope.js +18 -0
- package/dist/store/sqlite/sessions-group.d.ts +6 -0
- package/dist/store/sqlite/sessions-group.js +46 -0
- package/dist/store/sqlite/store.d.ts +22 -18
- package/dist/store/sqlite/store.js +95 -33
- package/dist/store/sqlite/vector-pack.js +2 -1
- package/dist/store/sqlite/vector-reads-group.js +2 -1
- package/dist/store/sqlite/worker-jobs.d.ts +2 -1
- package/dist/store/sqlite/worker-jobs.js +19 -7
- package/dist/store/sqlite/worker-ops.d.ts +10 -5
- package/dist/store/sqlite/worker-ops.js +6 -3
- package/dist/store/sqlite/worker-store.d.ts +4 -3
- package/dist/store/sqlite/worker-store.js +24 -14
- package/dist/store/summaries.d.ts +25 -11
- package/dist/store/summaries.js +84 -27
- package/dist/store/summary-dirty.d.ts +2 -1
- package/dist/store/summary-dirty.js +2 -1
- package/dist/store/tenant.d.ts +3 -2
- package/dist/store/tenant.js +5 -4
- package/dist/store/token-ledger-rows.js +8 -4
- package/dist/store/token-ledger.d.ts +19 -13
- package/dist/store/token-ledger.js +27 -14
- package/dist/store/tombstone-checks.d.ts +4 -1
- package/dist/store/tombstone-checks.js +10 -1
- package/dist/store/usage-reports.js +2 -1
- package/dist/store/vector-index.d.ts +8 -5
- package/dist/store/vector-index.js +28 -11
- package/dist/store/working-memory.d.ts +6 -4
- package/dist/store/working-memory.js +14 -9
- package/dist/support-bundle.js +10 -5
- package/dist/trust/quarantine.d.ts +1 -2
- package/dist/trust/quarantine.js +1 -5
- package/dist/trust/reject-flow.d.ts +12 -3
- package/dist/trust/reject-flow.js +12 -4
- package/dist/util/anthropic-messages.d.ts +7 -2
- package/dist/util/anthropic-messages.js +18 -7
- package/dist/util/atomic-write.d.ts +8 -3
- package/dist/util/atomic-write.js +36 -21
- package/dist/util/compaction-items.d.ts +4 -1
- package/dist/util/compaction-items.js +8 -2
- package/dist/util/crash-handlers.d.ts +7 -2
- package/dist/util/crash-handlers.js +13 -4
- package/dist/util/env.d.ts +26 -5
- package/dist/util/env.js +87 -25
- package/dist/util/format.d.ts +2 -0
- package/dist/util/format.js +4 -0
- package/dist/util/home-path.js +12 -6
- package/dist/util/hook-payload.d.ts +3 -1
- package/dist/util/hook-payload.js +3 -1
- package/dist/util/http-retry.d.ts +12 -6
- package/dist/util/http-retry.js +16 -6
- package/dist/util/http-util.d.ts +20 -5
- package/dist/util/http-util.js +28 -9
- package/dist/util/json.d.ts +4 -1
- package/dist/util/json.js +4 -1
- package/dist/util/keyset.js +2 -1
- package/dist/util/limits.js +4 -2
- package/dist/util/log.d.ts +13 -5
- package/dist/util/log.js +29 -6
- package/dist/util/net.d.ts +5 -0
- package/dist/util/net.js +19 -0
- package/dist/util/real-path.d.ts +2 -1
- package/dist/util/real-path.js +4 -3
- package/dist/util/request-scope.d.ts +16 -4
- package/dist/util/request-scope.js +19 -6
- package/dist/util/same-text.d.ts +10 -3
- package/dist/util/same-text.js +10 -3
- package/dist/util/secret-detect.d.ts +24 -7
- package/dist/util/secret-detect.js +49 -14
- package/dist/util/spawn-argv.d.ts +11 -0
- package/dist/util/spawn-argv.js +66 -0
- package/dist/util/sql.d.ts +3 -0
- package/dist/util/sql.js +6 -0
- package/dist/util/sqlite-blocked.d.ts +15 -4
- package/dist/util/sqlite-blocked.js +19 -6
- package/dist/util/stored-json.d.ts +4 -1
- package/dist/util/stored-json.js +6 -2
- package/dist/util/stream-tee.d.ts +2 -1
- package/dist/util/stream-tee.js +8 -5
- package/dist/util/transcript-tail.d.ts +4 -1
- package/dist/util/transcript-tail.js +4 -1
- package/dist/util/vector-codec.d.ts +4 -0
- package/dist/util/vector-codec.js +15 -0
- package/dist/util/version.d.ts +8 -3
- package/dist/util/version.js +8 -3
- package/dist/util/write-budget.d.ts +7 -2
- package/dist/util/write-budget.js +5 -2
- package/dist/util/yaml.d.ts +4 -1
- package/dist/util/yaml.js +4 -1
- package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
- package/extensions/openclaw-plugin/package.json +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +4 -1
- package/scripts/postinstall.cjs +3 -1
- package/dist/api/audit.js +0 -56
- package/dist/api/cards.d.ts +0 -42
- package/dist/api/conflicts.d.ts +0 -28
- package/dist/api/conflicts.js +0 -61
- package/dist/api/dormant.d.ts +0 -14
- package/dist/api/dormant.js +0 -58
- package/dist/api/goals.d.ts +0 -18
- package/dist/api/graph.d.ts +0 -8
- package/dist/api/graph.js +0 -7
- package/dist/api/learn.js +0 -124
- package/dist/api/memories.d.ts +0 -23
- package/dist/api/memories.js +0 -46
- package/dist/api/objects.d.ts +0 -9
- package/dist/api/on-store.d.ts +0 -16
- package/dist/api/on-store.js +0 -38
- package/dist/api/outcome.d.ts +0 -19
- package/dist/api/outcome.js +0 -21
- package/dist/api/predictions.d.ts +0 -11
- package/dist/api/promote.d.ts +0 -36
- package/dist/api/promote.js +0 -65
- package/dist/api/recall-core.d.ts +0 -4
- package/dist/api/recall-core.js +0 -120
- package/dist/api/recall-finish.d.ts +0 -53
- package/dist/api/recall-finish.js +0 -30
- package/dist/api/recall-history.d.ts +0 -64
- package/dist/api/recall-history.js +0 -159
- package/dist/api/recall-record.d.ts +0 -43
- package/dist/api/recall-record.js +0 -78
- package/dist/api/recall-request.js +0 -121
- package/dist/api/recall.d.ts +0 -6
- package/dist/api/refine.d.ts +0 -7
- package/dist/api/refine.js +0 -10
- package/dist/api/session-owners.d.ts +0 -4
- package/dist/api/session-owners.js +0 -17
- package/dist/api/sleep-run.d.ts +0 -26
- package/dist/api/sleep.js +0 -10
- package/dist/cli/lenient-id.d.ts +0 -2
- package/dist/cli/lenient-id.js +0 -13
- package/dist/graph/write.d.ts +0 -14
- package/dist/store/sqlite/busy.d.ts +0 -3
- package/dist/store/sqlite/busy.js +0 -8
- package/dist/store/sqlite/local.d.ts +0 -21
- package/dist/store/sqlite/local.js +0 -39
|
@@ -1,4 +1,15 @@
|
|
|
1
1
|
export const DEFAULT_RECALL_BUDGET = 4000;
|
|
2
2
|
// Local memories outrank global ones by this factor; getContext applies it as a 1/x global discount.
|
|
3
3
|
export const DEFAULT_LOCAL_BUMP = 1.2;
|
|
4
|
+
// The relevance side of the MMR relevance-versus-diversity trade; config and hybrid recall both default to it.
|
|
5
|
+
export const DEFAULT_MMR_LAMBDA = 0.7;
|
|
6
|
+
// A recorded conflict peer in the same result list is cut to this share of its score.
|
|
7
|
+
export const CONFLICT_PEER_MULTIPLIER = 0.3;
|
|
8
|
+
// The value-aware clamp is wider than the always-on outcome nudge, so outcome history can decide the order.
|
|
9
|
+
export const VALUE_MULT_SLOPE = 0.3;
|
|
10
|
+
export const VALUE_MULT_MIN = 0.7;
|
|
11
|
+
export const VALUE_MULT_MAX = 1.3;
|
|
12
|
+
export const UTILITY_LENGTH_PENALTY_CAP = 0.3;
|
|
13
|
+
export const UTILITY_LENGTH_TOKENS = 10000;
|
|
14
|
+
export const SALIENCE_MIN_MULTIPLIER = 0.5;
|
|
4
15
|
//# sourceMappingURL=search-types.js.map
|
|
@@ -12,9 +12,9 @@ export interface ActionResult {
|
|
|
12
12
|
/** Sets `pinned`; the audit row says `remember` with actor `dashboard`, the same op the old star toggle wrote. */
|
|
13
13
|
export declare function pinMemory(hippoRoot: string, tenantId: string, rawId: string, body: ActionBody): ActionResult;
|
|
14
14
|
/** Marks a memory wrong, the same signal as `hippo outcome --bad`. */
|
|
15
|
-
export declare function markWrong(hippoRoot: string, tenantId: string, rawId: string): ActionResult
|
|
15
|
+
export declare function markWrong(hippoRoot: string, tenantId: string, rawId: string): Promise<ActionResult>;
|
|
16
16
|
/** Deletes a memory like `hippo forget`; a raw receipt is append-only and answers 409 with the archive hint. */
|
|
17
|
-
export declare function forgetMemory(hippoRoot: string, tenantId: string, rawId: string): ActionResult
|
|
17
|
+
export declare function forgetMemory(hippoRoot: string, tenantId: string, rawId: string): Promise<ActionResult>;
|
|
18
18
|
/** Keeps one side of an open conflict and weakens the other; every refusal maps to its own status. */
|
|
19
19
|
export declare function resolveOpenConflict(hippoRoot: string, tenantId: string, conflictId: number, body: ActionBody): ActionResult;
|
|
20
20
|
//# sourceMappingURL=dashboard-actions.d.ts.map
|
|
@@ -5,6 +5,7 @@ import { RawAppendOnlyError } from '../core/raw-append-only.js';
|
|
|
5
5
|
import { listTouchableConflicts, resolveConflict } from '../store/conflicts.js';
|
|
6
6
|
import { readEntry } from '../store/entry-reads.js';
|
|
7
7
|
import { writeEntry } from '../store/entry-writes.js';
|
|
8
|
+
import { sqliteStore } from '../store/sqlite/store.js';
|
|
8
9
|
import { ParamError, parseMemoryId } from './dashboard-params.js';
|
|
9
10
|
import { isLiveMemory } from './dashboard-snapshot.js';
|
|
10
11
|
const ACTOR = 'dashboard';
|
|
@@ -29,25 +30,35 @@ export function pinMemory(hippoRoot, tenantId, rawId, body) {
|
|
|
29
30
|
return { status: 200, body: null, changed: true, entry: next };
|
|
30
31
|
}
|
|
31
32
|
/** Marks a memory wrong, the same signal as `hippo outcome --bad`. */
|
|
32
|
-
export function markWrong(hippoRoot, tenantId, rawId) {
|
|
33
|
+
export async function markWrong(hippoRoot, tenantId, rawId) {
|
|
33
34
|
const id = parseMemoryId(rawId);
|
|
34
35
|
if (liveEntry(hippoRoot, tenantId, id) === null)
|
|
35
36
|
return notFound();
|
|
36
|
-
const ctx = {
|
|
37
|
+
const ctx = {
|
|
38
|
+
hippoRoot,
|
|
39
|
+
tenantId,
|
|
40
|
+
actor: api.adminActor(ACTOR),
|
|
41
|
+
store: sqliteStore(hippoRoot),
|
|
42
|
+
};
|
|
37
43
|
// outcome() answers `applied: 0` for a missing or other-tenant id instead of throwing.
|
|
38
|
-
if (api.outcome(ctx, [id], false).applied === 0)
|
|
44
|
+
if ((await api.outcome(ctx, [id], false)).applied === 0)
|
|
39
45
|
return notFound();
|
|
40
46
|
const entry = readEntry(hippoRoot, id, tenantId);
|
|
41
47
|
return entry === null ? notFound() : { status: 200, body: null, changed: true, entry };
|
|
42
48
|
}
|
|
43
49
|
/** Deletes a memory like `hippo forget`; a raw receipt is append-only and answers 409 with the archive hint. */
|
|
44
|
-
export function forgetMemory(hippoRoot, tenantId, rawId) {
|
|
50
|
+
export async function forgetMemory(hippoRoot, tenantId, rawId) {
|
|
45
51
|
const id = parseMemoryId(rawId);
|
|
46
52
|
if (liveEntry(hippoRoot, tenantId, id) === null)
|
|
47
53
|
return notFound();
|
|
48
|
-
const ctx = {
|
|
54
|
+
const ctx = {
|
|
55
|
+
hippoRoot,
|
|
56
|
+
tenantId,
|
|
57
|
+
actor: api.adminActor(ACTOR),
|
|
58
|
+
store: sqliteStore(hippoRoot),
|
|
59
|
+
};
|
|
49
60
|
try {
|
|
50
|
-
const done = api.forget(ctx, id);
|
|
61
|
+
const done = await api.forget(ctx, id);
|
|
51
62
|
return { status: 200, body: done, changed: true };
|
|
52
63
|
}
|
|
53
64
|
catch (err) {
|
|
@@ -79,7 +90,7 @@ export function resolveOpenConflict(hippoRoot, tenantId, conflictId, body) {
|
|
|
79
90
|
if (liveEntry(hippoRoot, tenantId, conflict.memory_a_id) === null || liveEntry(hippoRoot, tenantId, conflict.memory_b_id) === null) {
|
|
80
91
|
return notFound();
|
|
81
92
|
}
|
|
82
|
-
const resolved = resolveConflict(hippoRoot, conflictId, keep,
|
|
93
|
+
const resolved = resolveConflict(hippoRoot, { conflictId, keepId: keep, tenantId }, { rejectedBy: ACTOR });
|
|
83
94
|
// Both guards passed above, so null here is a race with another resolver.
|
|
84
95
|
if (resolved === null)
|
|
85
96
|
return already();
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { calculateStrength } from '../core/memory.js';
|
|
3
3
|
import { loadOpenConflictsOf } from '../store/conflicts.js';
|
|
4
4
|
import { BANDS, DAY_MS, LAYERS, isLiveMemory, memoryFacts, projectIdentity, } from './dashboard-snapshot.js';
|
|
5
|
+
import { pct, round1 } from '../util/format.js';
|
|
5
6
|
const SERIES_DAYS = 90;
|
|
6
7
|
/** The server words each delta for this range; the client re-slices the series for 7d and 90d. */
|
|
7
8
|
const DELTA_DAYS = 30;
|
|
@@ -9,9 +10,6 @@ const POINTS_MAX = 4_000;
|
|
|
9
10
|
const GRID_COLS = 64;
|
|
10
11
|
const GRID_ROWS = 32;
|
|
11
12
|
const NAME_MATCHES = 3;
|
|
12
|
-
function round1(value) {
|
|
13
|
-
return Math.round(value * 10) / 10;
|
|
14
|
-
}
|
|
15
13
|
function round3(value) {
|
|
16
14
|
return Math.round(value * 1000) / 1000;
|
|
17
15
|
}
|
|
@@ -32,9 +30,6 @@ function cumulativeSeries(times, nowMs) {
|
|
|
32
30
|
function addedWithin(series) {
|
|
33
31
|
return series[SERIES_DAYS] - series[SERIES_DAYS - DELTA_DAYS];
|
|
34
32
|
}
|
|
35
|
-
function pct(share) {
|
|
36
|
-
return `${(share * 100).toFixed(1)}%`;
|
|
37
|
-
}
|
|
38
33
|
function plural(n, one, many) {
|
|
39
34
|
return `${n} ${n === 1 ? one : many}`;
|
|
40
35
|
}
|
|
@@ -342,7 +337,7 @@ export function buildMemoryDetail(hippoRoot, tenantId, entry, options) {
|
|
|
342
337
|
projectKey: project.key,
|
|
343
338
|
projectName: project.name,
|
|
344
339
|
scope: entry.scope,
|
|
345
|
-
tenant: entry.
|
|
340
|
+
tenant: entry.tenant_id,
|
|
346
341
|
kind: entry.kind,
|
|
347
342
|
embedded,
|
|
348
343
|
conflicts: openConflictsOf(hippoRoot, tenantId, entry, nowMs),
|
|
@@ -129,8 +129,8 @@ export interface SnapshotService {
|
|
|
129
129
|
invalidate(): void;
|
|
130
130
|
/** Id of the most recent build, which is what a client holding the last response still has. */
|
|
131
131
|
currentId(): number;
|
|
132
|
-
/**
|
|
133
|
-
|
|
132
|
+
/** Whether a row of the last build's tenant had a vector at that build (a point read before any build), so a detail read never scans vectors. */
|
|
133
|
+
isEmbedded(id: string): boolean;
|
|
134
134
|
close(): void;
|
|
135
135
|
}
|
|
136
136
|
/** Holds one read-only connection for its commit signal (`PRAGMA data_version`) and the
|
|
@@ -5,6 +5,7 @@ import { isQuarantineScope } from '../trust/quarantine.js';
|
|
|
5
5
|
import { listMemoryConflicts } from '../store/conflicts.js';
|
|
6
6
|
import { DashboardConnection, loadDashboardRows } from '../store/dashboard-reads.js';
|
|
7
7
|
import { DAY_MS } from '../util/time.js';
|
|
8
|
+
import { round1 } from '../util/format.js';
|
|
8
9
|
export { DAY_MS };
|
|
9
10
|
export const LAYERS = ['buffer', 'episodic', 'semantic', 'trace'];
|
|
10
11
|
// Wire order of `Band`, and the order the mockup sorts bands in.
|
|
@@ -99,9 +100,6 @@ function cutHead(content) {
|
|
|
99
100
|
end -= 1;
|
|
100
101
|
return { head: content.slice(0, end), truncated: true };
|
|
101
102
|
}
|
|
102
|
-
function round1(value) {
|
|
103
|
-
return Math.round(value * 10) / 10;
|
|
104
|
-
}
|
|
105
103
|
function newDraft(identity) {
|
|
106
104
|
return {
|
|
107
105
|
summary: {
|
|
@@ -262,7 +260,7 @@ class SnapshotCacheService {
|
|
|
262
260
|
this.lastId += 1;
|
|
263
261
|
highestIssuedId = Math.max(highestIssuedId, this.lastId);
|
|
264
262
|
// After loadDashboardRows, whose writable open has run any pending migration and legacy embeddings.json import.
|
|
265
|
-
this.lastEmbeddedIds = this.connection.embeddedIds();
|
|
263
|
+
this.lastEmbeddedIds = this.connection.embeddedIds(tenantId);
|
|
266
264
|
return buildSnapshot({
|
|
267
265
|
id: this.lastId,
|
|
268
266
|
tenantId,
|
|
@@ -294,11 +292,11 @@ class SnapshotCacheService {
|
|
|
294
292
|
currentId() {
|
|
295
293
|
return this.lastId;
|
|
296
294
|
}
|
|
297
|
-
|
|
295
|
+
isEmbedded(id) {
|
|
298
296
|
if (this.lastEmbeddedIds !== undefined)
|
|
299
|
-
return this.lastEmbeddedIds;
|
|
297
|
+
return this.lastEmbeddedIds?.has(id) ?? false;
|
|
300
298
|
this.connection.dataVersion();
|
|
301
|
-
return this.connection.
|
|
299
|
+
return this.connection.hasVector(id);
|
|
302
300
|
}
|
|
303
301
|
close() {
|
|
304
302
|
this.connection.close();
|
|
@@ -19,6 +19,7 @@ import { installSignalHandlers } from '../util/crash-handlers.js';
|
|
|
19
19
|
import { DEFAULT_SHUTDOWN_DRAIN_MS, drainAndClose, setKeepAliveTimeouts, shutdownBoundMs } from '../server/lifecycle.js';
|
|
20
20
|
import { printError } from '../cli/output.js';
|
|
21
21
|
import { PACKAGE_ROOT } from '../core/package-root.js';
|
|
22
|
+
import { DAY_MS } from '../util/time.js';
|
|
22
23
|
const MIME_TYPES = {
|
|
23
24
|
'.html': 'text/html; charset=utf-8',
|
|
24
25
|
'.js': 'application/javascript; charset=utf-8',
|
|
@@ -132,7 +133,7 @@ function handleRead(ctx, segments) {
|
|
|
132
133
|
if (entry === null || !isLiveMemory(entry))
|
|
133
134
|
return sendOrNotFound(res, null);
|
|
134
135
|
const snapshotId = snapshots.get(tenantId, fresh).id;
|
|
135
|
-
const embedded = snapshots.
|
|
136
|
+
const embedded = snapshots.isEmbedded(entry.id);
|
|
136
137
|
return sendOrNotFound(res, buildMemoryDetail(hippoRoot, tenantId, entry, { snapshotId, nowMs: ctx.now(), embedded }));
|
|
137
138
|
}
|
|
138
139
|
if (head === 'search' && segments.length === 2) {
|
|
@@ -179,12 +180,12 @@ async function handlePost(ctx, segments) {
|
|
|
179
180
|
}
|
|
180
181
|
const body = await readActionBody(req);
|
|
181
182
|
const tenantId = resolveTenantId({});
|
|
182
|
-
const result = action(hippoRoot, tenantId, body);
|
|
183
|
+
const result = await action(hippoRoot, tenantId, body);
|
|
183
184
|
if (result.changed)
|
|
184
185
|
snapshots.invalidate();
|
|
185
186
|
if (result.entry) {
|
|
186
187
|
// The write is committed, so a rebuild failure must not turn it into a 500: the next read rebuilds.
|
|
187
|
-
const embedded = snapshots.
|
|
188
|
+
const embedded = snapshots.isEmbedded(result.entry.id);
|
|
188
189
|
const detail = buildMemoryDetail(hippoRoot, tenantId, result.entry, { snapshotId: snapshots.currentId(), nowMs: ctx.now(), embedded });
|
|
189
190
|
jsonResponse(res, detail, result.status);
|
|
190
191
|
}
|
|
@@ -279,13 +280,15 @@ function leaveTokenUrl(req, res, url) {
|
|
|
279
280
|
res.end(`<!doctype html>\n<html lang="en"><head><meta charset="utf-8"><meta http-equiv="refresh" content="0;url=${target}"><title>Hippo Dashboard</title></head><body></body></html>`);
|
|
280
281
|
return true;
|
|
281
282
|
}
|
|
283
|
+
// A browser that restores its session keeps a cookie with no Max-Age for good; no Secure, since this server speaks plain HTTP on loopback only.
|
|
284
|
+
const DASHBOARD_COOKIE_MAX_AGE_S = DAY_MS / 1000;
|
|
282
285
|
/** True when the request may proceed; false when this already answered it (redirect off the token URL, or 401). */
|
|
283
286
|
function admitDashboardRequest(req, res, url, access) {
|
|
284
287
|
const { token, port } = access;
|
|
285
288
|
// Cookies ignore the port, so the name carries it: two dashboards on one host keep separate tokens.
|
|
286
289
|
const cookieName = `hippo_dashboard_${req.socket.localPort ?? port}`;
|
|
287
290
|
if (sameToken(url.searchParams.get('token') ?? undefined, token)) {
|
|
288
|
-
res.setHeader('Set-Cookie', `${cookieName}=${token}; HttpOnly; SameSite=Strict; Path
|
|
291
|
+
res.setHeader('Set-Cookie', `${cookieName}=${token}; HttpOnly; SameSite=Strict; Path=/; Max-Age=${DASHBOARD_COOKIE_MAX_AGE_S}`);
|
|
289
292
|
if (leaveTokenUrl(req, res, url))
|
|
290
293
|
return false;
|
|
291
294
|
}
|
|
@@ -300,7 +303,7 @@ function answerDashboardFailure(req, res, err) {
|
|
|
300
303
|
const clientFault = err instanceof ParamError || err instanceof URIError || err instanceof BodyTimeoutError;
|
|
301
304
|
// A cut-short response is logged even for a client fault; a bare 400 is not.
|
|
302
305
|
if (res.headersSent || !clientFault) {
|
|
303
|
-
log.error('dashboard request failed', { ...errorFields(err), error: errorMessage(err), path: req.url });
|
|
306
|
+
log.error('dashboard request failed', { ...errorFields(err), error: errorMessage(err), path: (req.url ?? '/').split('?')[0] });
|
|
304
307
|
}
|
|
305
308
|
if (res.headersSent) {
|
|
306
309
|
res.end();
|
|
@@ -318,9 +321,20 @@ function answerDashboardFailure(req, res, err) {
|
|
|
318
321
|
return jsonResponse(res, { error: 'Malformed URL path' }, 400);
|
|
319
322
|
jsonResponse(res, { error: 'Internal error' }, 500);
|
|
320
323
|
}
|
|
321
|
-
|
|
324
|
+
const DASHBOARD_URL_FILE = 'dashboard.url';
|
|
325
|
+
function printDashboardBanner(hippoRoot, boundPort, token, distUiDir) {
|
|
322
326
|
// The banner is the `hippo dashboard` command's printed result, so it stays on stdout.
|
|
323
|
-
|
|
327
|
+
const url = `http://localhost:${boundPort}/?token=${token}`;
|
|
328
|
+
if (process.stdout.isTTY) {
|
|
329
|
+
console.log(`Hippo Dashboard running at ${url}`);
|
|
330
|
+
}
|
|
331
|
+
else {
|
|
332
|
+
// Captured stdout lands in logs, so the token goes to an owner-only file, created fresh so its mode holds.
|
|
333
|
+
const file = path.join(hippoRoot, DASHBOARD_URL_FILE);
|
|
334
|
+
fs.rmSync(file, { force: true });
|
|
335
|
+
fs.writeFileSync(file, `${url}\n`, { flag: 'wx', mode: 0o600 });
|
|
336
|
+
console.log(`Hippo Dashboard running at http://localhost:${boundPort}/ (open the URL with its token from ${file})`);
|
|
337
|
+
}
|
|
324
338
|
if (distUiDir !== null)
|
|
325
339
|
console.log(`Serving React UI from ${distUiDir}`);
|
|
326
340
|
console.log('Press Ctrl+C to stop.');
|
|
@@ -406,7 +420,7 @@ export function serveDashboard(hippoRoot, port = 3333, token = randomBytes(32).t
|
|
|
406
420
|
server.listen(port, '127.0.0.1', () => {
|
|
407
421
|
// SAFETY: listen() was given a TCP port, so address() is AddressInfo, never a pipe name.
|
|
408
422
|
const boundPort = server.address().port;
|
|
409
|
-
printDashboardBanner(boundPort, token, hasDistUi ? distUiDir : null);
|
|
423
|
+
printDashboardBanner(hippoRoot, boundPort, token, hasDistUi ? distUiDir : null);
|
|
410
424
|
});
|
|
411
425
|
return server;
|
|
412
426
|
}
|
package/dist/db/backup.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as fs from 'node:fs';
|
|
2
2
|
import * as path from 'node:path';
|
|
3
|
-
import { log } from '../util/log.js';
|
|
3
|
+
import { log, errorFields } from '../util/log.js';
|
|
4
4
|
/** Copies the database before a repair writes, so the audit ids plus this file are the way back. */
|
|
5
5
|
export function backupStore(db, hippoRoot, label, now = new Date()) {
|
|
6
6
|
const dir = path.join(hippoRoot, 'backups');
|
|
@@ -21,7 +21,7 @@ export function withBackup(db, hippoRoot, label, transaction) {
|
|
|
21
21
|
fs.rmSync(backup, { force: true });
|
|
22
22
|
}
|
|
23
23
|
catch (cleanupError) {
|
|
24
|
-
log.warn(`Could not delete the unused backup ${backup}: ${String(cleanupError)}
|
|
24
|
+
log.warn(`Could not delete the unused backup ${backup}: ${String(cleanupError)}`, errorFields(cleanupError));
|
|
25
25
|
}
|
|
26
26
|
throw err;
|
|
27
27
|
}
|
package/dist/db/busy.d.ts
CHANGED
|
@@ -8,18 +8,25 @@ export interface WriteScopeOptions {
|
|
|
8
8
|
readonly busyWaitMs?: number;
|
|
9
9
|
}
|
|
10
10
|
/** Runs `fn` as one write: BEGIN IMMEDIATE on an idle handle, else SAVEPOINT `name` inside the caller's transaction.
|
|
11
|
-
*
|
|
11
|
+
* A deferred scope that reads first cannot wait out another writer, while BEGIN IMMEDIATE waits the open's
|
|
12
|
+
* busy_timeout.
|
|
13
|
+
*/
|
|
12
14
|
export declare function withWriteScope<T>(db: DatabaseSyncLike, name: string, fn: () => T, opts?: WriteScopeOptions): T;
|
|
13
15
|
/** Runs the reads in `fn` against one snapshot, so two statements cannot straddle another process's write. */
|
|
14
16
|
export declare function withReadSnapshot<T>(db: DatabaseSyncLike, fn: () => T): T;
|
|
15
|
-
/**
|
|
17
|
+
/**
|
|
18
|
+
* Runs `fn` and undoes every write it made, throw or not: a dry run that reports what a real run would do. Takes no
|
|
19
|
+
* write lock up front.
|
|
20
|
+
*/
|
|
16
21
|
export declare function withTrialScope<T>(db: DatabaseSyncLike, name: string, fn: () => T): T;
|
|
17
22
|
/** What `withWriteScopeOr` hands its callback's `rollback(value)`; a class so no stored value can pass for one. */
|
|
18
23
|
declare class RolledBack<V> {
|
|
19
24
|
readonly value: V;
|
|
20
25
|
constructor(value: V);
|
|
21
26
|
}
|
|
22
|
-
/**
|
|
27
|
+
/**
|
|
28
|
+
* `withWriteScope` for a write that can refuse: a callback that returns `rollback(value)` gets the scope's writes
|
|
29
|
+
* undone
|
|
23
30
|
* and `value` back, with no throw. Any other return commits. */
|
|
24
31
|
export declare function withWriteScopeOr<T, R>(db: DatabaseSyncLike, name: string, fn: (rollback: <V>(value: V) => RolledBack<V>) => T | RolledBack<R>): T | R;
|
|
25
32
|
export {};
|
package/dist/db/busy.js
CHANGED
|
@@ -8,7 +8,8 @@ export function isSqliteBusy(cause) {
|
|
|
8
8
|
}
|
|
9
9
|
/** The lock wait of an open that names none: its busy_timeout and every explicit wait below. */
|
|
10
10
|
export const DEFAULT_BUSY_WAIT_MS = 5000;
|
|
11
|
-
// busy_timeout covers neither contended statement here: SQLite skips the busy handler for `PRAGMA journal_mode` and for
|
|
11
|
+
// busy_timeout covers neither contended statement here: SQLite skips the busy handler for `PRAGMA journal_mode` and for
|
|
12
|
+
// a write
|
|
12
13
|
// that upgrades a deferred read snapshot, so both need an explicit wait.
|
|
13
14
|
export function execWithBusyRetry(db, sql, timeoutMs = DEFAULT_BUSY_WAIT_MS) {
|
|
14
15
|
const deadline = Date.now() + timeoutMs;
|
|
@@ -25,6 +26,14 @@ export function execWithBusyRetry(db, sql, timeoutMs = DEFAULT_BUSY_WAIT_MS) {
|
|
|
25
26
|
}
|
|
26
27
|
}
|
|
27
28
|
}
|
|
29
|
+
// SQLite cannot bind a savepoint name as a parameter, so the name is spliced into the SQL and must be a bare
|
|
30
|
+
// identifier.
|
|
31
|
+
const SAVEPOINT_NAME_RE = /^[A-Za-z_][A-Za-z0-9_]*$/;
|
|
32
|
+
function assertSavepointName(name) {
|
|
33
|
+
if (!SAVEPOINT_NAME_RE.test(name)) {
|
|
34
|
+
throw new Error(`invalid savepoint name ${JSON.stringify(name)}: use letters, digits and _ only`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
28
37
|
function undoScope(db, top, name) {
|
|
29
38
|
if (top) {
|
|
30
39
|
db.exec('ROLLBACK');
|
|
@@ -34,7 +43,10 @@ function undoScope(db, top, name) {
|
|
|
34
43
|
db.exec(`RELEASE SAVEPOINT ${name}`);
|
|
35
44
|
}
|
|
36
45
|
}
|
|
37
|
-
/**
|
|
46
|
+
/**
|
|
47
|
+
* Undo after a failure without letting a failed undo replace the caller's error; an idle handle means SQLite already
|
|
48
|
+
* unwound the scope.
|
|
49
|
+
*/
|
|
38
50
|
function undoAfterFailure(db, top, name) {
|
|
39
51
|
if (db.isTransaction === false)
|
|
40
52
|
return;
|
|
@@ -46,8 +58,11 @@ function undoAfterFailure(db, top, name) {
|
|
|
46
58
|
}
|
|
47
59
|
}
|
|
48
60
|
/** Runs `fn` as one write: BEGIN IMMEDIATE on an idle handle, else SAVEPOINT `name` inside the caller's transaction.
|
|
49
|
-
*
|
|
61
|
+
* A deferred scope that reads first cannot wait out another writer, while BEGIN IMMEDIATE waits the open's
|
|
62
|
+
* busy_timeout.
|
|
63
|
+
*/
|
|
50
64
|
export function withWriteScope(db, name, fn, opts) {
|
|
65
|
+
assertSavepointName(name);
|
|
51
66
|
const top = db.isTransaction === false;
|
|
52
67
|
if (top && opts)
|
|
53
68
|
execWithBusyRetry(db, 'BEGIN IMMEDIATE', opts.busyWaitMs);
|
|
@@ -84,8 +99,12 @@ export function withReadSnapshot(db, fn) {
|
|
|
84
99
|
db.exec('COMMIT');
|
|
85
100
|
return result;
|
|
86
101
|
}
|
|
87
|
-
/**
|
|
102
|
+
/**
|
|
103
|
+
* Runs `fn` and undoes every write it made, throw or not: a dry run that reports what a real run would do. Takes no
|
|
104
|
+
* write lock up front.
|
|
105
|
+
*/
|
|
88
106
|
export function withTrialScope(db, name, fn) {
|
|
107
|
+
assertSavepointName(name);
|
|
89
108
|
const top = db.isTransaction === false;
|
|
90
109
|
db.exec(top ? 'BEGIN' : `SAVEPOINT ${name}`);
|
|
91
110
|
let result;
|
|
@@ -106,9 +125,12 @@ class RolledBack {
|
|
|
106
125
|
this.value = value;
|
|
107
126
|
}
|
|
108
127
|
}
|
|
109
|
-
/**
|
|
128
|
+
/**
|
|
129
|
+
* `withWriteScope` for a write that can refuse: a callback that returns `rollback(value)` gets the scope's writes
|
|
130
|
+
* undone
|
|
110
131
|
* and `value` back, with no throw. Any other return commits. */
|
|
111
132
|
export function withWriteScopeOr(db, name, fn) {
|
|
133
|
+
assertSavepointName(name);
|
|
112
134
|
const top = db.isTransaction === false;
|
|
113
135
|
db.exec(top ? 'BEGIN IMMEDIATE' : `SAVEPOINT ${name}`);
|
|
114
136
|
try {
|
package/dist/db/connect.d.ts
CHANGED
|
@@ -3,11 +3,19 @@ import { type OpenFacts } from './migrate.js';
|
|
|
3
3
|
export declare function getHippoDbPath(hippoRoot: string): string;
|
|
4
4
|
/** Runs `step` on this store unless it already ran to the end in this process; a throw leaves it due. */
|
|
5
5
|
export declare function oncePerStore(hippoRoot: string, name: string, step: () => void): void;
|
|
6
|
-
/**
|
|
6
|
+
/**
|
|
7
|
+
* A connection with what its own open's probe read; facts go stale with the next statement, so a handle made by an
|
|
8
|
+
* earlier call carries null.
|
|
9
|
+
*/
|
|
7
10
|
export interface OpenedDb {
|
|
8
11
|
readonly db: DatabaseSyncLike;
|
|
9
12
|
readonly facts: OpenFacts | null;
|
|
10
13
|
}
|
|
11
|
-
/**
|
|
14
|
+
/**
|
|
15
|
+
* A new connection with the store's pragmas and migrations applied and the mirror cleanup run when it is due; the
|
|
16
|
+
* caller owns and closes it.
|
|
17
|
+
* Outside any request scope (CLI start-up, timers) this is the only handle there is; openHippoDb reuses the scope's
|
|
18
|
+
* when one exists.
|
|
19
|
+
*/
|
|
12
20
|
export declare function connectWithFacts(hippoRoot: string, busyWaitMs?: number): OpenedDb;
|
|
13
21
|
//# sourceMappingURL=connect.d.ts.map
|
package/dist/db/connect.js
CHANGED
|
@@ -37,7 +37,8 @@ function createStoreFilesOwnerOnly(hippoRoot) {
|
|
|
37
37
|
throw err;
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
|
-
// The archive only grows and its ids never repeat, so an unchanged top id means no row this process has not swept; a
|
|
40
|
+
// The archive only grows and its ids never repeat, so an unchanged top id means no row this process has not swept; a
|
|
41
|
+
// failed sweep stays due.
|
|
41
42
|
function sweepArchivedMirrorsIfDue(hippoRoot, db, probedTop) {
|
|
42
43
|
const top = probedTop ?? archiveTop(db);
|
|
43
44
|
const key = storeKey(hippoRoot);
|
|
@@ -51,7 +52,12 @@ function archiveTop(db) {
|
|
|
51
52
|
const row = db.prepare('SELECT MAX(id) AS top FROM raw_archive').get();
|
|
52
53
|
return Number(row?.top ?? 0);
|
|
53
54
|
}
|
|
54
|
-
/**
|
|
55
|
+
/**
|
|
56
|
+
* A new connection with the store's pragmas and migrations applied and the mirror cleanup run when it is due; the
|
|
57
|
+
* caller owns and closes it.
|
|
58
|
+
* Outside any request scope (CLI start-up, timers) this is the only handle there is; openHippoDb reuses the scope's
|
|
59
|
+
* when one exists.
|
|
60
|
+
*/
|
|
55
61
|
export function connectWithFacts(hippoRoot, busyWaitMs = DEFAULT_BUSY_WAIT_MS) {
|
|
56
62
|
createStoreFilesOwnerOnly(hippoRoot);
|
|
57
63
|
const db = new DatabaseSync(getHippoDbPath(hippoRoot));
|
package/dist/db/continuity.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import type { DatabaseSyncLike } from './sqlite.js';
|
|
|
2
2
|
export declare const MEMORY_QUARANTINE_DDL = "\n CREATE TABLE IF NOT EXISTS memory_quarantine (\n tenant_id TEXT NOT NULL DEFAULT 'default',\n memory_id TEXT NOT NULL,\n original_scope TEXT,\n reason TEXT NOT NULL,\n status TEXT NOT NULL DEFAULT 'pending' CHECK (status IN ('pending','approved','rejected')),\n quarantined_at TEXT NOT NULL,\n decided_at TEXT,\n decided_by TEXT,\n PRIMARY KEY (tenant_id, memory_id)\n ) WITHOUT ROWID;\n CREATE INDEX IF NOT EXISTS idx_memory_quarantine_status\n ON memory_quarantine(tenant_id, status, quarantined_at DESC);\n";
|
|
3
3
|
export declare const SESSION_OWNERS_DDL = "\n CREATE TABLE IF NOT EXISTS session_owners (\n tenant_id TEXT NOT NULL,\n session_id TEXT NOT NULL,\n owner_subject TEXT NOT NULL,\n created_at TEXT NOT NULL,\n PRIMARY KEY (tenant_id, session_id)\n )\n ";
|
|
4
4
|
export declare function ensureContinuityTables(db: DatabaseSyncLike): void;
|
|
5
|
-
export declare const MEMORIES_FTS_DDL
|
|
5
|
+
export declare const MEMORIES_FTS_DDL: string;
|
|
6
6
|
/** Names of every table and index a `CREATE ... IF NOT EXISTS` in `ddl` makes. */
|
|
7
7
|
export declare function createdObjectNames(ddl: string): string[];
|
|
8
8
|
/** Every object runMigrations re-asserts on a stamped store; the open fast path requires all of them. */
|
package/dist/db/continuity.js
CHANGED
|
@@ -149,35 +149,51 @@ const CONTINUITY_INDEX_DDL = [
|
|
|
149
149
|
`CREATE INDEX IF NOT EXISTS idx_task_snapshots_status_updated ON task_snapshots(status, updated_at DESC, id DESC)`,
|
|
150
150
|
`CREATE INDEX IF NOT EXISTS idx_task_snapshots_tenant_status ON task_snapshots(tenant_id, status, updated_at DESC)`,
|
|
151
151
|
`CREATE INDEX IF NOT EXISTS idx_task_snapshots_tenant_scope ON task_snapshots(tenant_id, scope, status)`,
|
|
152
|
-
`CREATE INDEX IF NOT EXISTS idx_session_events_session_created ON session_events(session_id, created_at DESC, id
|
|
152
|
+
`CREATE INDEX IF NOT EXISTS idx_session_events_session_created ON session_events(session_id, created_at DESC, id ` +
|
|
153
|
+
`DESC)`,
|
|
153
154
|
`CREATE INDEX IF NOT EXISTS idx_session_events_task_created ON session_events(task, created_at DESC, id DESC)`,
|
|
154
|
-
`CREATE INDEX IF NOT EXISTS idx_session_events_tenant_session ON session_events(tenant_id, session_id, created_at
|
|
155
|
+
`CREATE INDEX IF NOT EXISTS idx_session_events_tenant_session ON session_events(tenant_id, session_id, created_at ` +
|
|
156
|
+
`DESC, id DESC)`,
|
|
155
157
|
`CREATE INDEX IF NOT EXISTS idx_session_handoffs_session ON session_handoffs(session_id, created_at DESC)`,
|
|
156
|
-
`CREATE INDEX IF NOT EXISTS idx_session_handoffs_tenant_session ON session_handoffs(tenant_id, session_id,
|
|
157
|
-
|
|
158
|
+
`CREATE INDEX IF NOT EXISTS idx_session_handoffs_tenant_session ON session_handoffs(tenant_id, session_id, ` +
|
|
159
|
+
`created_at DESC)`,
|
|
160
|
+
`CREATE INDEX IF NOT EXISTS idx_session_handoffs_tenant_outcome ON session_handoffs(tenant_id, outcome, created_at ` +
|
|
161
|
+
`DESC)`,
|
|
158
162
|
`CREATE INDEX IF NOT EXISTS idx_cards_tenant_status ON cards(tenant_id, status, updated_at DESC)`,
|
|
159
163
|
`CREATE INDEX IF NOT EXISTS idx_card_deps_tenant_child ON card_deps(tenant_id, child)`,
|
|
160
164
|
`CREATE INDEX IF NOT EXISTS idx_card_deps_tenant_parent ON card_deps(tenant_id, parent)`,
|
|
161
165
|
`CREATE INDEX IF NOT EXISTS idx_card_runs_tenant_card ON card_runs(tenant_id, card, started DESC)`,
|
|
162
166
|
`CREATE INDEX IF NOT EXISTS idx_card_comments_tenant_card ON card_comments(tenant_id, card_id, created_at DESC)`,
|
|
163
|
-
`CREATE INDEX IF NOT EXISTS idx_session_handoffs_tenant_card ON session_handoffs(tenant_id, card_id, created_at
|
|
164
|
-
|
|
165
|
-
`CREATE INDEX IF NOT EXISTS
|
|
167
|
+
`CREATE INDEX IF NOT EXISTS idx_session_handoffs_tenant_card ON session_handoffs(tenant_id, card_id, created_at ` +
|
|
168
|
+
`DESC)`,
|
|
169
|
+
`CREATE INDEX IF NOT EXISTS idx_task_snapshots_owner ON task_snapshots(tenant_id, owner_subject, origin_project, ` +
|
|
170
|
+
`status, updated_at DESC)`,
|
|
171
|
+
`CREATE INDEX IF NOT EXISTS idx_session_handoffs_owner ON session_handoffs(tenant_id, owner_subject, ` +
|
|
172
|
+
`origin_project, created_at DESC)`,
|
|
166
173
|
];
|
|
167
174
|
// A client retry carries the same request id, so a repeat finds the earlier row instead of writing again.
|
|
168
175
|
const REQUEST_INDEX_DDL = {
|
|
169
|
-
compactions: `CREATE UNIQUE INDEX IF NOT EXISTS idx_compactions_request ON compactions(tenant_id, request_id)
|
|
170
|
-
|
|
176
|
+
compactions: `CREATE UNIQUE INDEX IF NOT EXISTS idx_compactions_request ON compactions(tenant_id, request_id) ` +
|
|
177
|
+
`WHERE request_id IS NOT NULL`,
|
|
178
|
+
failure_log: `CREATE UNIQUE INDEX IF NOT EXISTS idx_failure_log_request ON failure_log(tenant_id, request_id) ` +
|
|
179
|
+
`WHERE request_id IS NOT NULL`,
|
|
171
180
|
};
|
|
172
181
|
// Lives with the other re-asserted DDL so the required-object list below derives from one place.
|
|
173
|
-
export const MEMORIES_FTS_DDL = `CREATE VIRTUAL TABLE IF NOT EXISTS memories_fts
|
|
182
|
+
export const MEMORIES_FTS_DDL = `CREATE VIRTUAL TABLE IF NOT EXISTS memories_fts ` +
|
|
183
|
+
`USING fts5(id UNINDEXED, content, tags)`;
|
|
174
184
|
const CREATED_NAME = /CREATE\s+(?:VIRTUAL\s+|UNIQUE\s+)?(?:TABLE|INDEX)\s+IF\s+NOT\s+EXISTS\s+(\w+)/gi;
|
|
175
185
|
/** Names of every table and index a `CREATE ... IF NOT EXISTS` in `ddl` makes. */
|
|
176
186
|
export function createdObjectNames(ddl) {
|
|
177
187
|
return [...ddl.matchAll(CREATED_NAME)].map((m) => m[1]);
|
|
178
188
|
}
|
|
179
189
|
/** Every object runMigrations re-asserts on a stamped store; the open fast path requires all of them. */
|
|
180
|
-
export const REQUIRED_SCHEMA_OBJECTS = Object.freeze([
|
|
190
|
+
export const REQUIRED_SCHEMA_OBJECTS = Object.freeze([
|
|
191
|
+
META_TABLE_DDL,
|
|
192
|
+
...CONTINUITY_TABLE_DDL,
|
|
193
|
+
...CONTINUITY_INDEX_DDL,
|
|
194
|
+
...Object.values(REQUEST_INDEX_DDL),
|
|
195
|
+
MEMORIES_FTS_DDL,
|
|
196
|
+
].flatMap(createdObjectNames));
|
|
181
197
|
// After the loop: tenant_id (v16) and scope (v23) do not exist yet on a genuine old store.
|
|
182
198
|
export function ensureContinuityIndexes(db) {
|
|
183
199
|
for (const ddl of CONTINUITY_INDEX_DDL)
|
package/dist/db/meta.d.ts
CHANGED
|
@@ -9,7 +9,10 @@ export declare function pragmaDataVersion(db: DatabaseSyncLike): number;
|
|
|
9
9
|
export declare function setSchemaVersion(db: DatabaseSyncLike, version: number): void;
|
|
10
10
|
export declare function getMeta(db: DatabaseSyncLike, key: string, fallback?: string): string;
|
|
11
11
|
export declare function setMeta(db: DatabaseSyncLike, key: string, value: string): void;
|
|
12
|
-
/**
|
|
12
|
+
/**
|
|
13
|
+
* Raise min_compatible_binary to `version`; never lowers it, since an older floor would let back in a binary a newer
|
|
14
|
+
* write already shut out.
|
|
15
|
+
*/
|
|
13
16
|
export declare function raiseMinBinary(db: DatabaseSyncLike, version: string): void;
|
|
14
17
|
export declare function isFtsAvailable(db: DatabaseSyncLike): boolean;
|
|
15
18
|
//# sourceMappingURL=meta.d.ts.map
|
package/dist/db/meta.js
CHANGED
|
@@ -41,7 +41,10 @@ export function getMeta(db, key, fallback = '') {
|
|
|
41
41
|
export function setMeta(db, key, value) {
|
|
42
42
|
db.prepare(`INSERT INTO meta(key, value) VALUES(?, ?) ON CONFLICT(key) DO UPDATE SET value=excluded.value`).run(key, value);
|
|
43
43
|
}
|
|
44
|
-
/**
|
|
44
|
+
/**
|
|
45
|
+
* Raise min_compatible_binary to `version`; never lowers it, since an older floor would let back in a binary a newer
|
|
46
|
+
* write already shut out.
|
|
47
|
+
*/
|
|
45
48
|
export function raiseMinBinary(db, version) {
|
|
46
49
|
const existing = getMeta(db, 'min_compatible_binary');
|
|
47
50
|
if (!existing || compareSemver(version, existing) > 0)
|
package/dist/db/migrate.d.ts
CHANGED
|
@@ -3,9 +3,11 @@ export declare function getCurrentSchemaVersion(): number;
|
|
|
3
3
|
/** Thrown by {@link assertBinaryCompatible}; doctor uses it to pick the upgrade fix over a generic permissions fix. */
|
|
4
4
|
export declare class IncompatibleBinaryError extends Error {
|
|
5
5
|
}
|
|
6
|
-
/** Refuse a store stamped for a newer binary. Fails closed:
|
|
6
|
+
/** Refuse a store stamped for a newer binary. Fails closed:
|
|
7
|
+
* runMigrations creates meta first, so a failed read is a real error. */
|
|
7
8
|
export declare function assertBinaryCompatible(db: DatabaseSyncLike): void;
|
|
8
|
-
/** The fast path's single probe: versions, the binary minimum, the
|
|
9
|
+
/** The fast path's single probe: versions, the binary minimum, the
|
|
10
|
+
* FTS flag, and counts of the meta defaults and required objects. */
|
|
9
11
|
export declare const SCHEMA_PROBE_SQL: string;
|
|
10
12
|
/** What the probe of a current store read beyond the schema proof, so the same open need not read them again. */
|
|
11
13
|
export interface OpenFacts {
|
|
@@ -13,13 +15,16 @@ export interface OpenFacts {
|
|
|
13
15
|
readonly archiveTop: number;
|
|
14
16
|
readonly hasMemories: boolean;
|
|
15
17
|
}
|
|
16
|
-
/** Brings the store to the current schema; returns the probe's
|
|
18
|
+
/** Brings the store to the current schema; returns the probe's
|
|
19
|
+
* facts when it was current already, null after any repair. */
|
|
17
20
|
export declare function runMigrations(db: DatabaseSyncLike, hippoRoot?: string, busyWaitMs?: number): OpenFacts | null;
|
|
18
|
-
/** Row counts of `memories` and its full-text index, which differ
|
|
21
|
+
/** Row counts of `memories` and its full-text index, which differ
|
|
22
|
+
* once the index drifts; null when either table is missing. */
|
|
19
23
|
export declare function ftsRowCounts(db: DatabaseSyncLike): {
|
|
20
24
|
memories: number;
|
|
21
25
|
fts: number;
|
|
22
26
|
} | null;
|
|
23
|
-
/** Re-syncs `memories_fts` with `memories` when their counts differ and returns whether it did; sleep runs it
|
|
27
|
+
/** Re-syncs `memories_fts` with `memories` when their counts differ and returns whether it did; sleep runs it
|
|
28
|
+
* because a fast open does not. */
|
|
24
29
|
export declare function repairFtsDrift(db: DatabaseSyncLike): boolean;
|
|
25
30
|
//# sourceMappingURL=migrate.d.ts.map
|