hippo-memory 2.0.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/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 -6
- package/dist/api/{audit.d.ts → auth/audit.d.ts} +18 -16
- package/dist/api/{audit.js → auth/audit.js} +11 -11
- package/dist/api/{auth.d.ts → auth/auth.d.ts} +19 -15
- package/dist/api/{auth.js → auth/auth.js} +46 -29
- package/dist/api/{quarantine.d.ts → auth/quarantine.d.ts} +8 -7
- package/dist/api/{quarantine.js → auth/quarantine.js} +8 -8
- 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 +10 -2
- package/dist/api/context-render.js +14 -7
- package/dist/api/context-select.d.ts +4 -1
- package/dist/api/context-select.js +23 -14
- package/dist/api/context-types.d.ts +38 -12
- package/dist/api/context.d.ts +8 -5
- package/dist/api/context.js +112 -57
- 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} +22 -15
- package/dist/api/memories/memories.d.ts +27 -0
- package/dist/api/{memories.js → memories/memories.js} +16 -21
- package/dist/api/memories/outcome.d.ts +22 -0
- package/dist/api/{outcome.js → memories/outcome.js} +14 -8
- package/dist/api/memories/promote.d.ts +40 -0
- package/dist/api/{promote.js → memories/promote.js} +35 -22
- 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} +16 -11
- package/dist/api/{remember-local.js → memories/remember-local.js} +34 -20
- package/dist/api/{remember.d.ts → memories/remember.d.ts} +19 -13
- package/dist/api/{remember.js → memories/remember.js} +42 -26
- 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 -8
- 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 -4
- package/dist/api/objects/predictions.d.ts +11 -0
- package/dist/api/{predictions.js → objects/predictions.js} +7 -6
- 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 +32 -19
- package/dist/api/prompt-hook.js +65 -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} +176 -92
- package/dist/api/recall/recall.d.ts +6 -0
- package/dist/api/{recall.js → recall/recall.js} +101 -60
- 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 -70
- package/dist/api/{recall-types.js → recall/types.js} +1 -1
- package/dist/api/session-end.d.ts +16 -12
- package/dist/api/session-end.js +46 -30
- 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} +51 -43
- 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 +28 -7
- 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 +33 -14
- 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 +15 -4
- package/dist/capture/compaction-spool.js +64 -17
- 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 +45 -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 +23 -23
- package/dist/cli/auth.js +19 -27
- 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 -4
- package/dist/cli/client.js +43 -13
- package/dist/cli/compact-resume-payload.d.ts +4 -1
- package/dist/cli/compact-resume-payload.js +12 -5
- package/dist/cli/context.js +42 -17
- package/dist/cli/continuity.d.ts +5 -5
- package/dist/cli/continuity.js +90 -107
- package/dist/cli/curate.d.ts +4 -3
- package/dist/cli/curate.js +46 -68
- package/dist/cli/dag.d.ts +1 -1
- package/dist/cli/dag.js +14 -17
- package/dist/cli/decisions.js +27 -26
- 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 +31 -9
- package/dist/cli/hook-runtime.js +40 -15
- package/dist/cli/incidents.d.ts +1 -1
- package/dist/cli/incidents.js +25 -25
- package/dist/cli/init.js +26 -11
- 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 +4 -4
- package/dist/cli/object-verbs.js +10 -13
- 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 +15 -19
- package/dist/cli/print.js +4 -2
- package/dist/cli/projects.js +21 -11
- package/dist/cli/quality-repair-once.js +5 -4
- package/dist/cli/recall.js +129 -93
- package/dist/cli/refine-llm.d.ts +15 -4
- package/dist/cli/refine-llm.js +16 -7
- package/dist/cli/remember.js +46 -50
- package/dist/cli/scheduler.d.ts +4 -1
- package/dist/cli/scheduler.js +9 -5
- package/dist/cli/serve.js +22 -17
- package/dist/cli/session-hooks.d.ts +2 -2
- package/dist/cli/session-hooks.js +87 -50
- package/dist/cli/setup.js +54 -32
- package/dist/cli/shared.d.ts +3 -1
- package/dist/cli/shared.js +24 -9
- 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 +14 -6
- 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 +1 -1
- package/dist/cli/transfer.js +71 -75
- package/dist/cli/verbs/memory.js +8 -6
- package/dist/cli/verbs/objects.js +10 -4
- package/dist/cli/versioned-verbs.d.ts +8 -7
- package/dist/cli/versioned-verbs.js +31 -21
- package/dist/cli.js +13 -16
- package/dist/connectors/dlq.d.ts +6 -6
- package/dist/connectors/dlq.js +12 -8
- 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 -5
- 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 -6
- 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 -6
- 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 +34 -23
- package/dist/connectors/ingest.d.ts +5 -3
- package/dist/connectors/ingest.js +3 -4
- 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 -6
- 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 -5
- 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 -6
- 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 +23 -9
- package/dist/consolidate/dag-summary.js +2 -1
- package/dist/consolidate/dag.d.ts +10 -5
- package/dist/consolidate/dag.js +37 -36
- package/dist/consolidate/decay.js +19 -6
- package/dist/consolidate/dedupe.d.ts +14 -5
- package/dist/consolidate/dedupe.js +27 -16
- 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 +36 -13
- package/dist/consolidate/merge.d.ts +4 -1
- package/dist/consolidate/merge.js +42 -32
- 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 +41 -38
- package/dist/consolidate/trace.d.ts +7 -2
- package/dist/consolidate/trace.js +7 -2
- package/dist/consolidate/traces.js +26 -29
- 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 +24 -14
- 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 +21 -16
- 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 +84 -27
- package/dist/core/memory.js +73 -29
- 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 +37 -11
- package/dist/core/physics.js +55 -20
- package/dist/core/project-identity.d.ts +34 -17
- package/dist/core/project-identity.js +33 -17
- 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.js +13 -2
- package/dist/dashboard/dashboard-snapshot.d.ts +2 -2
- package/dist/dashboard/dashboard-snapshot.js +4 -4
- package/dist/dashboard/dashboard.js +6 -3
- 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 -3
- package/dist/db/connect.js +8 -3
- 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 +26 -13
- 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/v12.js +2 -1
- package/dist/db/migrations/v14.js +2 -1
- 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 -4
- package/dist/db/physics-state.js +13 -20
- 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 +19 -5
- package/dist/db/request-stores.js +14 -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 +34 -14
- package/dist/db/wal-checkpointer.d.ts +2 -1
- package/dist/db/wal-checkpointer.js +19 -7
- package/dist/doctor.d.ts +4 -1
- package/dist/doctor.js +121 -39
- package/dist/embeddings/local.d.ts +8 -4
- package/dist/embeddings/local.js +9 -5
- package/dist/embeddings/provider.d.ts +19 -10
- package/dist/embeddings/provider.js +31 -17
- 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 +19 -6
- package/dist/entry/store-kit.js +6 -4
- 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 +16 -6
- 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 +69 -34
- 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 +8 -7
- 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 +2 -2
- package/dist/importers/vault.js +43 -27
- package/dist/index.d.ts +32 -6
- package/dist/index.js +25 -7
- package/dist/learn/autolearn.d.ts +17 -6
- package/dist/learn/autolearn.js +53 -24
- 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 +16 -9
- 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 -7
- package/dist/learn/invalidation.js +56 -27
- 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 +18 -14
- 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 +57 -74
- 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 +52 -21
- 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 +9 -6
- 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 +10 -5
- package/dist/search/embed-memories.js +62 -36
- package/dist/search/engine.d.ts +4 -1
- package/dist/search/engine.js +6 -2
- 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 +9 -3
- package/dist/server/auth.d.ts +18 -14
- package/dist/server/auth.js +69 -38
- package/dist/server/boot.d.ts +3 -1
- package/dist/server/boot.js +95 -56
- package/dist/server/client-ip.d.ts +11 -4
- package/dist/server/client-ip.js +27 -10
- 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 +547 -93
- 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 -19
- 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 +41 -19
- package/dist/server/tls.d.ts +4 -1
- package/dist/server/tls.js +13 -5
- package/dist/server/types.d.ts +38 -26
- package/dist/server/validation.d.ts +4 -1
- package/dist/server/validation.js +22 -9
- package/dist/server.d.ts +15 -10
- package/dist/server.js +32 -12
- package/dist/sharing/global-store.d.ts +5 -10
- package/dist/sharing/global-store.js +8 -43
- package/dist/sharing/global-sync.d.ts +3 -1
- package/dist/sharing/global-sync.js +16 -6
- 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 +19 -12
- package/dist/sharing/share.d.ts +8 -4
- package/dist/sharing/share.js +39 -15
- package/dist/store/ambient.js +9 -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 +75 -36
- 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 +93 -60
- 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 +95 -32
- package/dist/store/compactions.js +35 -15
- package/dist/store/conflicts.d.ts +9 -4
- package/dist/store/conflicts.js +100 -45
- package/dist/store/connectors/dlq.d.ts +17 -5
- package/dist/store/connectors/dlq.js +56 -5
- package/dist/store/connectors/event-log.d.ts +111 -2
- package/dist/store/connectors/event-log.js +2 -1
- package/dist/store/connectors/github.d.ts +6 -3
- package/dist/store/connectors/github.js +24 -40
- package/dist/store/connectors/slack.d.ts +2 -1
- package/dist/store/connectors/slack.js +25 -37
- package/dist/store/dashboard-reads.d.ts +7 -3
- package/dist/store/dashboard-reads.js +32 -11
- package/dist/store/delete-and-batch.d.ts +17 -11
- package/dist/store/delete-and-batch.js +67 -26
- package/dist/store/delivery-recorder.d.ts +8 -5
- package/dist/store/delivery-recorder.js +70 -32
- package/dist/store/descendant-page.d.ts +2 -1
- package/dist/store/descendant-page.js +24 -9
- 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 +40 -18
- package/dist/store/embeddings/index.d.ts +13 -9
- package/dist/store/embeddings/index.js +19 -12
- package/dist/store/entry-reads.d.ts +49 -20
- package/dist/store/entry-reads.js +181 -66
- package/dist/store/entry-row.d.ts +10 -6
- package/dist/store/entry-row.js +17 -12
- package/dist/store/entry-writes.d.ts +22 -10
- package/dist/store/entry-writes.js +41 -14
- 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 +8 -10
- 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 +24 -15
- package/dist/store/graph-rows.d.ts +41 -3
- package/dist/store/graph-rows.js +10 -7
- package/dist/store/graph-view-rows.js +14 -7
- package/dist/store/graph-writes.d.ts +16 -10
- package/dist/store/graph-writes.js +59 -36
- package/dist/store/handoffs.d.ts +4 -4
- package/dist/store/handoffs.js +40 -19
- 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 +3 -1
- package/dist/store/index.js +1 -0
- 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 +88 -16
- package/dist/store/narrow.d.ts +6 -0
- package/dist/store/narrow.js +11 -0
- package/dist/store/open.d.ts +4 -2
- package/dist/store/open.js +18 -9
- 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 +215 -229
- 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 +126 -63
- package/dist/store/rejected-values.d.ts +15 -10
- package/dist/store/rejected-values.js +33 -12
- 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 +18 -11
- package/dist/store/rule-sql.d.ts +6 -4
- package/dist/store/rule-sql.js +16 -9
- package/dist/store/search-rows.d.ts +14 -9
- package/dist/store/search-rows.js +48 -23
- 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 +9 -4
- 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 +6 -3
- 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 +7 -1
- package/dist/store/sqlite/held-connection.js +34 -7
- package/dist/store/sqlite/last-recall-group.d.ts +4 -2
- package/dist/store/sqlite/last-recall-group.js +9 -4
- 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.js +2 -1
- 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 +84 -33
- 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 -11
- package/dist/store/sqlite/store.js +84 -11
- 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 +19 -12
- package/dist/store/summaries.js +36 -21
- 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 +6 -3
- 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 +24 -10
- 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 +4 -1
- package/dist/util/anthropic-messages.js +14 -5
- package/dist/util/atomic-write.d.ts +4 -2
- package/dist/util/atomic-write.js +25 -14
- 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 +16 -4
- package/dist/util/env.js +78 -25
- 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 +11 -3
- package/dist/util/request-scope.js +13 -4
- 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 +3 -1
- package/dist/util/spawn-argv.js +13 -4
- 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/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 +2 -1
- package/scripts/postinstall.cjs +3 -1
- 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 -8
- package/dist/api/learn.js +0 -125
- package/dist/api/memories.d.ts +0 -25
- package/dist/api/objects.d.ts +0 -9
- package/dist/api/outcome.d.ts +0 -19
- package/dist/api/predictions.d.ts +0 -11
- package/dist/api/promote.d.ts +0 -36
- package/dist/api/recall-core.d.ts +0 -4
- package/dist/api/recall-core.js +0 -125
- 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 -11
- 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 -4
- package/dist/store/sqlite/local.js +0 -8
|
@@ -1,11 +1,21 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
1
|
+
/**
|
|
2
|
+
* Recall-side scope predicates, in a leaf module so search-both.ts can apply the same default-deny rule to
|
|
3
|
+
* searchBothHybrid's candidate loads without an
|
|
4
|
+
* import cycle. src/api/index.ts imports these and re-exports them for back-compat (`api.isPrivateScope`, tests
|
|
5
|
+
* importing `passesScopeFilterForRecall`).
|
|
6
|
+
*/
|
|
3
7
|
import { BadRequestError, ForbiddenError } from './api-errors.js';
|
|
4
8
|
import { MAX_ID_LEN } from '../util/limits.js';
|
|
5
|
-
/**
|
|
6
|
-
*
|
|
9
|
+
/**
|
|
10
|
+
* Literal scopes excluded from recall by default-deny when the caller passes no `scope`; read by the SQL clause in
|
|
11
|
+
* `loadSearchRows` and by
|
|
12
|
+
* `passesScopeFilterForRecall`. Invariant: never empty, or quarantine scopes would pass both paths silently (the
|
|
13
|
+
* module-load assertion below pins this).
|
|
14
|
+
*/
|
|
7
15
|
export const RECALL_DEFAULT_DENY_SCOPES = ['unknown:legacy'];
|
|
8
|
-
/**
|
|
16
|
+
/**
|
|
17
|
+
* @internal Runtime guard against blanking a load-bearing literal array; `as const` arrays widen via `readonly T[]` at
|
|
18
|
+
* the call site, so the empty case
|
|
9
19
|
* is reachable and testable. */
|
|
10
20
|
export function assertNonEmpty(arr, name) {
|
|
11
21
|
if (arr.length === 0) {
|
|
@@ -13,8 +23,12 @@ export function assertNonEmpty(arr, name) {
|
|
|
13
23
|
}
|
|
14
24
|
}
|
|
15
25
|
assertNonEmpty(RECALL_DEFAULT_DENY_SCOPES, 'RECALL_DEFAULT_DENY_SCOPES');
|
|
16
|
-
/**
|
|
17
|
-
*
|
|
26
|
+
/**
|
|
27
|
+
* Source-agnostic private-scope detector: private means `<lowercase-source>:private:<rest>` (`slack:private:Cabc`; not
|
|
28
|
+
* `slack:public:x`, null, '',
|
|
29
|
+
* 'private:foo'). The single source of truth for api.recall, the MCP server, the CLI and search-both.ts, so connector
|
|
30
|
+
* work cannot drift.
|
|
31
|
+
*/
|
|
18
32
|
export const PRIVATE_SCOPE_RE = /^[a-z][a-z0-9_-]*:private:/;
|
|
19
33
|
function isScopeString(value) {
|
|
20
34
|
return typeof value === 'string';
|
|
@@ -56,15 +70,21 @@ export function ownScopeTouches(ownScope, scope) {
|
|
|
56
70
|
return !isPersonalScope(scope) || scope === ownScope;
|
|
57
71
|
}
|
|
58
72
|
/** JS half of the recall default-deny rule (SQL half: `loadSearchRows`). A non-empty `requested` needs an exact match;
|
|
59
|
-
* otherwise `<source>:private:*` and `RECALL_DEFAULT_DENY_SCOPES` buckets are denied, while null, public scopes and the
|
|
73
|
+
* otherwise `<source>:private:*` and `RECALL_DEFAULT_DENY_SCOPES` buckets are denied, while null, public scopes and the
|
|
74
|
+
* caller's `ownScope` pass.
|
|
75
|
+
*/
|
|
60
76
|
export function passesScopeFilterForRecall(scope, requested, ownScope) {
|
|
61
77
|
if (requested !== undefined && requested !== '') {
|
|
62
78
|
return scope === requested;
|
|
63
79
|
}
|
|
64
80
|
return !isRestrictedScope(scope) || (ownScope != null && scope === ownScope);
|
|
65
81
|
}
|
|
66
|
-
/**
|
|
67
|
-
*
|
|
82
|
+
/**
|
|
83
|
+
* CLI `--scope` variant: an explicit `--scope X` UNLOCKS scope X on top of the default-admitted set rather than
|
|
84
|
+
* narrowing to X (api.recall keeps 'exact').
|
|
85
|
+
* Includes private/quarantine scopes (owner access); a named personal scope never unlocks: the CLI has no caller
|
|
86
|
+
* identity.
|
|
87
|
+
*/
|
|
68
88
|
export function passesCliRecallScopeFilter(scope, requested) {
|
|
69
89
|
if (requested !== undefined && requested !== '' && !isPersonalScope(requested) && scope === requested) {
|
|
70
90
|
return true;
|
|
@@ -80,14 +100,20 @@ export class ScopeForbiddenError extends ForbiddenError {
|
|
|
80
100
|
this.scope = scope;
|
|
81
101
|
}
|
|
82
102
|
}
|
|
83
|
-
/**
|
|
103
|
+
/**
|
|
104
|
+
* True for scopes default-deny hides (`<source>:private:*` and the quarantine buckets); naming one explicitly unlocks
|
|
105
|
+
* it, so naming one needs
|
|
84
106
|
* authorization. */
|
|
85
107
|
export function isRestrictedScope(scope) {
|
|
86
108
|
if (!isScopeString(scope))
|
|
87
109
|
return false;
|
|
88
|
-
// SAFETY: RECALL_DEFAULT_DENY_SCOPES is a readonly tuple of string literals; widening the array lets .includes() take
|
|
89
|
-
//
|
|
90
|
-
|
|
110
|
+
// SAFETY: RECALL_DEFAULT_DENY_SCOPES is a readonly tuple of string literals; widening the array lets .includes() take
|
|
111
|
+
// any scope.
|
|
112
|
+
// `:private:` anywhere, any case, matches the SQL default-deny in src/store/search-rows.ts so JS never admits what
|
|
113
|
+
// SQL hides.
|
|
114
|
+
return (isPrivateScope(scope) ||
|
|
115
|
+
/:private:/i.test(scope) ||
|
|
116
|
+
RECALL_DEFAULT_DENY_SCOPES.includes(scope));
|
|
91
117
|
}
|
|
92
118
|
/** Personal rows answer to their owner alone: role, key grants and resolver scopes never
|
|
93
119
|
* open one. Else admin reads all; a member needs an exact grant on a restricted scope. */
|
|
@@ -132,7 +158,8 @@ export function commonDerivationScope(scopes) {
|
|
|
132
158
|
/** Map-partition key for consolidate/dag/dedup producers: tenant + derivation scope + origin project,
|
|
133
159
|
* so a derived row never blends two restricted scopes, a mixed pair, or two projects. */
|
|
134
160
|
export function derivationPartitionKey(tenantId, scope, origin) {
|
|
135
|
-
|
|
161
|
+
// unstamped, unknown and named never share a bucket
|
|
162
|
+
const project = origin === undefined ? '\u0002' : (origin ?? '\u0001');
|
|
136
163
|
return `${tenantId}\u0000${derivationScope(scope) ?? ''}\u0000${project}`;
|
|
137
164
|
}
|
|
138
165
|
//# sourceMappingURL=recall-scope.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** Normalize content for rejection digests: NFC, lowercase, collapse whitespace runs, trim. No punctuation stripping:
|
|
2
|
+
* over-normalizing causes false refusals, worse than misses. */
|
|
3
|
+
export declare function normalizeValueForRejection(content: string): string;
|
|
4
|
+
/** Full 64-char sha256 hex of the normalized content: a tombstone key needs collision resistance, not the 16-char
|
|
5
|
+
* redaction hash used for query hashing. */
|
|
6
|
+
export declare function rejectionDigest(content: string): string;
|
|
7
|
+
//# sourceMappingURL=rejection-digest.d.ts.map
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// Tombstone keys are a pure hash of the normalized value, so the domain computes them without reaching the store.
|
|
2
|
+
import { createHash } from 'node:crypto';
|
|
3
|
+
/** Normalize content for rejection digests: NFC, lowercase, collapse whitespace runs, trim. No punctuation stripping:
|
|
4
|
+
* over-normalizing causes false refusals, worse than misses. */
|
|
5
|
+
export function normalizeValueForRejection(content) {
|
|
6
|
+
return content.normalize('NFC').toLowerCase().replace(/\s+/g, ' ').trim();
|
|
7
|
+
}
|
|
8
|
+
/** Full 64-char sha256 hex of the normalized content: a tombstone key needs collision resistance, not the 16-char
|
|
9
|
+
* redaction hash used for query hashing. */
|
|
10
|
+
export function rejectionDigest(content) {
|
|
11
|
+
return createHash('sha256').update(normalizeValueForRejection(content)).digest('hex');
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=rejection-digest.js.map
|
package/dist/core/salience.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* Salience gate: decides at memory creation whether content is stored at full strength, starts weakened, or is skipped.
|
|
3
|
+
*/
|
|
2
4
|
import type { MemoryEntry } from './memory.js';
|
|
3
5
|
export type SalienceDecision = 'store' | 'skip' | 'start_weak';
|
|
4
6
|
export interface SalienceResult {
|
package/dist/core/salience.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* Salience gate: decides at memory creation whether content is stored at full strength, starts weakened, or is skipped.
|
|
3
|
+
*/
|
|
2
4
|
import { textOverlap } from '../util/tokenize.js';
|
|
3
5
|
import { duplicateKey, heldTextKeys } from '../util/same-text.js';
|
|
4
6
|
// Each store or skip reason carries a score; a novel memory adds bonuses for structure and length.
|
|
@@ -10,6 +12,9 @@ const NOVEL_ERROR_SCORE = 0.9;
|
|
|
10
12
|
const NOVEL_BASE_SCORE = 0.5;
|
|
11
13
|
const STRUCTURED_TAGS_BONUS = 0.15;
|
|
12
14
|
const LENGTH_BONUS = 0.1;
|
|
15
|
+
// A novel memory earns LENGTH_BONUS past each of these lengths in characters.
|
|
16
|
+
const LONG_CONTENT_CHARS = 100;
|
|
17
|
+
const VERY_LONG_CONTENT_CHARS = 300;
|
|
13
18
|
const DEFAULTS = {
|
|
14
19
|
recentWindow: 20,
|
|
15
20
|
overlapThreshold: 0.6,
|
|
@@ -35,7 +40,8 @@ export function computeSalience(content, tags, recentMemories, options = {}) {
|
|
|
35
40
|
if (recentErrors >= opts.maxRepeatErrors) {
|
|
36
41
|
return {
|
|
37
42
|
decision: 'start_weak',
|
|
38
|
-
reason: `repeat_error (${recentErrors} recent errors, overlap
|
|
43
|
+
reason: `repeat_error (${recentErrors} recent errors, overlap ` +
|
|
44
|
+
`${(duplicateMatch.overlap * 100).toFixed(0)}% with ${duplicateMatch.matchId})`,
|
|
39
45
|
score: REPEAT_ERROR_SCORE,
|
|
40
46
|
};
|
|
41
47
|
}
|
|
@@ -66,9 +72,9 @@ function scoreNovel(trimmed, tags) {
|
|
|
66
72
|
let score = NOVEL_BASE_SCORE;
|
|
67
73
|
if (hasStructuredTags)
|
|
68
74
|
score += STRUCTURED_TAGS_BONUS;
|
|
69
|
-
if (trimmed.length >
|
|
75
|
+
if (trimmed.length > LONG_CONTENT_CHARS)
|
|
70
76
|
score += LENGTH_BONUS;
|
|
71
|
-
if (trimmed.length >
|
|
77
|
+
if (trimmed.length > VERY_LONG_CONTENT_CHARS)
|
|
72
78
|
score += LENGTH_BONUS;
|
|
73
79
|
return { decision: 'store', reason: 'novel', score: Math.min(score, 1.0) };
|
|
74
80
|
}
|
|
@@ -1,7 +1,17 @@
|
|
|
1
1
|
import type { MemoryEntry } from './memory.js';
|
|
2
2
|
export declare const DEFAULT_RECALL_BUDGET = 4000;
|
|
3
3
|
export declare const DEFAULT_LOCAL_BUMP = 1.2;
|
|
4
|
-
|
|
4
|
+
export declare const DEFAULT_MMR_LAMBDA = 0.7;
|
|
5
|
+
export declare const CONFLICT_PEER_MULTIPLIER = 0.3;
|
|
6
|
+
export declare const VALUE_MULT_SLOPE = 0.3;
|
|
7
|
+
export declare const VALUE_MULT_MIN = 0.7;
|
|
8
|
+
export declare const VALUE_MULT_MAX = 1.3;
|
|
9
|
+
export declare const UTILITY_LENGTH_PENALTY_CAP = 0.3;
|
|
10
|
+
export declare const UTILITY_LENGTH_TOKENS = 10000;
|
|
11
|
+
export declare const SALIENCE_MIN_MULTIPLIER = 0.5;
|
|
12
|
+
/**
|
|
13
|
+
* One score mutation applied after candidate generation; allocated only under `recall --why` or `RecallOpts.explain`.
|
|
14
|
+
*/
|
|
5
15
|
export interface RerankStep {
|
|
6
16
|
/** One of: interference, value, utility, reranker, goal-boost, retrieval-count-downweight. */
|
|
7
17
|
stage: string;
|
|
@@ -63,7 +73,10 @@ export interface ScoreBreakdown {
|
|
|
63
73
|
scopeBoost: number;
|
|
64
74
|
/** Extra multiplier applied post-hybrid (e.g. 1.2x for local hits in a local+global merge); 1.0 otherwise. */
|
|
65
75
|
sourceBump: number;
|
|
66
|
-
/**
|
|
76
|
+
/**
|
|
77
|
+
* Immediate outcome nudge, 1 + 0.15*tanh((pos - neg) / 2) clipped to [0.85, 1.15]; separate from the slow strength
|
|
78
|
+
* path.
|
|
79
|
+
*/
|
|
67
80
|
outcomeBoost: number;
|
|
68
81
|
/** CHURN_STALE_RANK_MULTIPLIER if tagged 'churn-stale', else 1.0. */
|
|
69
82
|
churnStaleMultiplier: number;
|
|
@@ -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
|
|
@@ -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';
|
|
@@ -33,7 +34,12 @@ 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
44
|
if ((await api.outcome(ctx, [id], false)).applied === 0)
|
|
39
45
|
return notFound();
|
|
@@ -45,7 +51,12 @@ 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
61
|
const done = await api.forget(ctx, id);
|
|
51
62
|
return { status: 200, body: done, changed: true };
|
|
@@ -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
|
|
@@ -260,7 +260,7 @@ class SnapshotCacheService {
|
|
|
260
260
|
this.lastId += 1;
|
|
261
261
|
highestIssuedId = Math.max(highestIssuedId, this.lastId);
|
|
262
262
|
// After loadDashboardRows, whose writable open has run any pending migration and legacy embeddings.json import.
|
|
263
|
-
this.lastEmbeddedIds = this.connection.embeddedIds();
|
|
263
|
+
this.lastEmbeddedIds = this.connection.embeddedIds(tenantId);
|
|
264
264
|
return buildSnapshot({
|
|
265
265
|
id: this.lastId,
|
|
266
266
|
tenantId,
|
|
@@ -292,11 +292,11 @@ class SnapshotCacheService {
|
|
|
292
292
|
currentId() {
|
|
293
293
|
return this.lastId;
|
|
294
294
|
}
|
|
295
|
-
|
|
295
|
+
isEmbedded(id) {
|
|
296
296
|
if (this.lastEmbeddedIds !== undefined)
|
|
297
|
-
return this.lastEmbeddedIds;
|
|
297
|
+
return this.lastEmbeddedIds?.has(id) ?? false;
|
|
298
298
|
this.connection.dataVersion();
|
|
299
|
-
return this.connection.
|
|
299
|
+
return this.connection.hasVector(id);
|
|
300
300
|
}
|
|
301
301
|
close() {
|
|
302
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) {
|
|
@@ -184,7 +185,7 @@ async function handlePost(ctx, segments) {
|
|
|
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
|
}
|
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,12 +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
|
-
/**
|
|
12
|
-
*
|
|
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
|
+
*/
|
|
13
20
|
export declare function connectWithFacts(hippoRoot: string, busyWaitMs?: number): OpenedDb;
|
|
14
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,8 +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
|
-
*
|
|
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
|
+
*/
|
|
56
61
|
export function connectWithFacts(hippoRoot, busyWaitMs = DEFAULT_BUSY_WAIT_MS) {
|
|
57
62
|
createStoreFilesOwnerOnly(hippoRoot);
|
|
58
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)
|