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
package/dist/store/rejection.js
CHANGED
|
@@ -1,16 +1,10 @@
|
|
|
1
|
-
/** Rejected-value tombstone: a human can refuse byte-stable re-ingestion of a rejected fact (exact normalized value);
|
|
2
|
-
* db-agnostic (helpers take a `DatabaseSyncLike`) and imports nothing from the
|
|
3
|
-
|
|
1
|
+
/** Rejected-value tombstone: a human can refuse byte-stable re-ingestion of a rejected fact (exact normalized value);
|
|
2
|
+
* paraphrase matching is out of scope. db-agnostic (helpers take a `DatabaseSyncLike`) and imports nothing from the
|
|
3
|
+
* store layer above it, which imports this (the reverse is a cycle). */
|
|
4
|
+
import { normalizeValueForRejection, rejectionDigest } from '../core/rejection-digest.js';
|
|
4
5
|
import { RejectedValueError } from '../core/api-errors.js';
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
export function normalizeValueForRejection(content) {
|
|
8
|
-
return content.normalize('NFC').toLowerCase().replace(/\s+/g, ' ').trim();
|
|
9
|
-
}
|
|
10
|
-
/** Full 64-char sha256 hex of the normalized content: a tombstone key needs collision resistance, not the 16-char redaction hash used for query hashing. */
|
|
11
|
-
export function rejectionDigest(content) {
|
|
12
|
-
return createHash('sha256').update(normalizeValueForRejection(content)).digest('hex');
|
|
13
|
-
}
|
|
6
|
+
// store-kit publishes rejectionDigest from this path.
|
|
7
|
+
export { normalizeValueForRejection, rejectionDigest };
|
|
14
8
|
function rowToRejectedValue(row) {
|
|
15
9
|
return {
|
|
16
10
|
tenantId: row.tenant_id,
|
|
@@ -22,7 +16,8 @@ function rowToRejectedValue(row) {
|
|
|
22
16
|
normalizedChars: row.normalized_chars,
|
|
23
17
|
};
|
|
24
18
|
}
|
|
25
|
-
/** Look up a tombstone by tenant + digest: one indexed point query, the guard's common-case cost; a miss ends the
|
|
19
|
+
/** Look up a tombstone by tenant + digest: one indexed point query, the guard's common-case cost; a miss ends the
|
|
20
|
+
* guard. */
|
|
26
21
|
export function findRejectedValue(db, tenantId, digest) {
|
|
27
22
|
// SAFETY: row's shape matches the columns named in the SELECT above.
|
|
28
23
|
const row = db
|
|
@@ -31,9 +26,11 @@ export function findRejectedValue(db, tenantId, digest) {
|
|
|
31
26
|
.get(tenantId, digest);
|
|
32
27
|
return row ? rowToRejectedValue(row) : null;
|
|
33
28
|
}
|
|
34
|
-
/** Insert (or refresh) a tombstone row; the caller owns the transaction (used by the `reject` verb and
|
|
29
|
+
/** Insert (or refresh) a tombstone row; the caller owns the transaction (used by the `reject` verb and
|
|
30
|
+
* `resolveConflict`'s `rejectLoserValue`). */
|
|
35
31
|
export function insertRejectedValue(db, opts) {
|
|
36
|
-
db.prepare(`INSERT INTO rejected_values(tenant_id, digest, reason, rejected_by, rejected_at, source_memory_id,
|
|
32
|
+
db.prepare(`INSERT INTO rejected_values(tenant_id, digest, reason, rejected_by, rejected_at, source_memory_id, ` +
|
|
33
|
+
`normalized_chars)
|
|
37
34
|
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
38
35
|
ON CONFLICT(tenant_id, digest) DO UPDATE SET
|
|
39
36
|
reason = excluded.reason,
|
|
@@ -56,15 +53,17 @@ export function listRejectedValues(db, tenantId) {
|
|
|
56
53
|
.all(tenantId);
|
|
57
54
|
return rows.map(rowToRejectedValue);
|
|
58
55
|
}
|
|
59
|
-
/** Write-path guard check: fires when the digest matches a tombstone AND the write introduces that content (a new row,
|
|
60
|
-
* Unchanged same-id re-persists (recall boost, decay, star toggle) are exempt. A miss
|
|
56
|
+
/** Write-path guard check: fires when the digest matches a tombstone AND the write introduces that content (a new row,
|
|
57
|
+
* or a same-id UPSERT changing it). Unchanged same-id re-persists (recall boost, decay, star toggle) are exempt. A miss
|
|
58
|
+
* costs ONE indexed point query; only a hit SELECTs the stored row. */
|
|
61
59
|
export function checkRejectionGuard(db, tenantId, entryId, content) {
|
|
62
60
|
const incomingDigest = rejectionDigest(content);
|
|
63
61
|
const tombstone = findRejectedValue(db, tenantId, incomingDigest);
|
|
64
62
|
if (!tombstone)
|
|
65
63
|
return; // miss ends the guard — the overwhelmingly common case
|
|
66
|
-
// Id-only on purpose (ids are global ULIDs; the tombstone lookup is tenant-scoped); tenant_id is read as a
|
|
67
|
-
// SAFETY: storedRow's shape matches the two columns named in the
|
|
64
|
+
// Id-only on purpose (ids are global ULIDs; the tombstone lookup is tenant-scoped); tenant_id is read as a
|
|
65
|
+
// tenantId-only upsert introduces content there. SAFETY: storedRow's shape matches the two columns named in the
|
|
66
|
+
// SELECT above.
|
|
68
67
|
const storedRow = db.prepare(`SELECT content, tenant_id FROM memories WHERE id = ?`).get(entryId);
|
|
69
68
|
const isNewRow = storedRow === undefined;
|
|
70
69
|
const tenantChanged = !isNewRow && storedRow.tenant_id !== tenantId;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { MemoryEntry } from '../core/memory.js';
|
|
2
|
-
/** Every superseded row, the row that replaced it and that row's extraction source, in loadAllEntries' order: all a
|
|
2
|
+
/** Every superseded row, the row that replaced it and that row's extraction source, in loadAllEntries' order: all a
|
|
3
|
+
* correction-latency report reads. */
|
|
3
4
|
export declare function loadCorrectionEntries(hippoRoot: string): MemoryEntry[];
|
|
4
5
|
/** The kind='raw' rows in loadAllEntries' order: all a provenance-coverage report reads. */
|
|
5
6
|
export declare function loadRawEntries(hippoRoot: string): MemoryEntry[];
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { MEMORY_SELECT_COLUMNS, rowToEntry } from './rows.js';
|
|
2
2
|
import { onHandle, openStore } from './open.js';
|
|
3
|
-
/** Every superseded row, the row that replaced it and that row's extraction source, in loadAllEntries' order: all a
|
|
3
|
+
/** Every superseded row, the row that replaced it and that row's extraction source, in loadAllEntries' order: all a
|
|
4
|
+
* correction-latency report reads. */
|
|
4
5
|
export function loadCorrectionEntries(hippoRoot) {
|
|
5
6
|
return onHandle(hippoRoot, (db) => {
|
|
6
7
|
const superseded = `superseded_by IS NOT NULL AND superseded_by != ''`;
|
package/dist/store/rows.d.ts
CHANGED
|
@@ -137,14 +137,16 @@ export interface SessionEvent {
|
|
|
137
137
|
export declare const INDEX_VERSION = 3;
|
|
138
138
|
export declare const MEMORY_SELECT_COLUMNS: string;
|
|
139
139
|
export declare const MEMORY_SEARCH_COLUMNS: string;
|
|
140
|
-
/** Default candidate-pool size for `loadSearchEntries` when `limit` is undefined; `api.recall` imports it for
|
|
141
|
-
* drift. */
|
|
140
|
+
/** Default candidate-pool size for `loadSearchEntries` when `limit` is undefined; `api.recall` imports it for
|
|
141
|
+
* `RecallResult.windowSize` so the two cannot drift. */
|
|
142
142
|
export declare const DEFAULT_SEARCH_CANDIDATE_LIMIT = 200;
|
|
143
143
|
export declare function rowToEntry(row: MemoryRow): MemoryEntry;
|
|
144
|
-
/** A column that is not JSON reads as empty. With `site` the row is named at warn once; without it no row is known and
|
|
144
|
+
/** A column that is not JSON reads as empty. With `site` the row is named at warn once; without it no row is known and
|
|
145
|
+
* the line stays at debug. */
|
|
145
146
|
export declare function parseJsonArray(raw: string | null | undefined, site?: StoredJsonSite): string[];
|
|
146
|
-
/** Strict parse for `last_trace_id`: Number(raw) turns '' or garbage into 0/NaN (a masked FK violation); require a
|
|
147
|
-
* The ONE place that decides 'clean'; consumers read the validated value
|
|
147
|
+
/** Strict parse for `last_trace_id`: Number(raw) turns '' or garbage into 0/NaN (a masked FK violation); require a
|
|
148
|
+
* clean positive integer string, else unset. The ONE place that decides 'clean'; consumers read the validated value
|
|
149
|
+
* from `buildIndexFromDb`'s result and never re-parse. */
|
|
148
150
|
export declare function parseLastTraceId(raw: string | null | undefined): string | null;
|
|
149
151
|
export declare function rowToTaskSnapshot(row: TaskSnapshotRow): TaskSnapshot;
|
|
150
152
|
export declare function rowToMemoryConflict(row: MemoryConflictRow): MemoryConflict;
|
package/dist/store/rows.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { DEFAULT_TENANT_ID } from '../util/env.js';
|
|
2
|
-
import { FALLBACK_HALF_LIFE_DAYS, DEFAULT_SCHEMA_FIT } from '../core/memory.js';
|
|
3
|
-
import { errorMessage, log } from '../util/log.js';
|
|
2
|
+
import { FALLBACK_HALF_LIFE_DAYS, DEFAULT_SCHEMA_FIT, } from '../core/memory.js';
|
|
3
|
+
import { errorMessage, log, errorFields } from '../util/log.js';
|
|
4
4
|
import { isJsonObject } from '../util/json.js';
|
|
5
5
|
import { warnDamagedColumn } from '../util/stored-json.js';
|
|
6
6
|
export const INDEX_VERSION = 3;
|
|
@@ -18,12 +18,13 @@ export const MEMORY_SEARCH_COLUMNS = [
|
|
|
18
18
|
...MEMORY_COLUMN_NAMES.map((c) => `m.${c} AS ${c}`),
|
|
19
19
|
'bm25(memories_fts) AS bm25_score',
|
|
20
20
|
].join(', ');
|
|
21
|
-
/** Default candidate-pool size for `loadSearchEntries` when `limit` is undefined; `api.recall` imports it for
|
|
22
|
-
* drift. */
|
|
21
|
+
/** Default candidate-pool size for `loadSearchEntries` when `limit` is undefined; `api.recall` imports it for
|
|
22
|
+
* `RecallResult.windowSize` so the two cannot drift. */
|
|
23
23
|
export const DEFAULT_SEARCH_CANDIDATE_LIMIT = 200;
|
|
24
24
|
function rowToRetrievalFields(row) {
|
|
25
|
-
// SAFETY: every `as X` narrows a SQLite column to a MemoryEntry enum/union member; `row` comes from
|
|
26
|
-
// the only queries producing MemoryRow, and the DB layer writes these
|
|
25
|
+
// SAFETY: every `as X` narrows a SQLite column to a MemoryEntry enum/union member; `row` comes from
|
|
26
|
+
// MEMORY_SELECT_COLUMNS / MEMORY_SEARCH_COLUMNS, the only queries producing MemoryRow, and the DB layer writes these
|
|
27
|
+
// columns only from the same enums.
|
|
27
28
|
return {
|
|
28
29
|
id: row.id,
|
|
29
30
|
created: row.created,
|
|
@@ -39,7 +40,11 @@ function rowToRetrievalFields(row) {
|
|
|
39
40
|
outcome_score: row.outcome_score === null || row.outcome_score === undefined ? null : Number(row.outcome_score),
|
|
40
41
|
outcome_positive: Number(row.outcome_positive ?? 0),
|
|
41
42
|
outcome_negative: Number(row.outcome_negative ?? 0),
|
|
42
|
-
conflicts_with: parseJsonArray(row.conflicts_with_json, {
|
|
43
|
+
conflicts_with: parseJsonArray(row.conflicts_with_json, {
|
|
44
|
+
table: 'memories',
|
|
45
|
+
id: row.id,
|
|
46
|
+
column: 'conflicts_with_json',
|
|
47
|
+
}),
|
|
43
48
|
pinned: Boolean(row.pinned),
|
|
44
49
|
confidence: row.confidence ?? 'observed',
|
|
45
50
|
content: row.content,
|
|
@@ -61,12 +66,12 @@ function rowToPlacementFields(row) {
|
|
|
61
66
|
scope: row.scope ?? null,
|
|
62
67
|
owner: row.owner ?? null,
|
|
63
68
|
artifact_ref: row.artifact_ref ?? null,
|
|
64
|
-
|
|
69
|
+
tenant_id: row.tenant_id ?? DEFAULT_TENANT_ID,
|
|
65
70
|
origin_project: row.origin_project ?? null,
|
|
66
71
|
descendant_count: Number(row.descendant_count ?? 0),
|
|
67
72
|
earliest_at: row.earliest_at ?? null,
|
|
68
73
|
latest_at: row.latest_at ?? null,
|
|
69
|
-
summary_dirty:
|
|
74
|
+
summary_dirty: Number(row.summary_dirty) === 1,
|
|
70
75
|
last_rebuilt_at: row.last_rebuilt_at ?? null,
|
|
71
76
|
rebuild_count: Number(row.rebuild_count ?? 0),
|
|
72
77
|
dag_level_3_built_at: row.dag_level_3_built_at ?? null,
|
|
@@ -81,7 +86,8 @@ export function rowToEntry(row) {
|
|
|
81
86
|
}
|
|
82
87
|
return entry;
|
|
83
88
|
}
|
|
84
|
-
/** A column that is not JSON reads as empty. With `site` the row is named at warn once; without it no row is known and
|
|
89
|
+
/** A column that is not JSON reads as empty. With `site` the row is named at warn once; without it no row is known and
|
|
90
|
+
* the line stays at debug. */
|
|
85
91
|
export function parseJsonArray(raw, site) {
|
|
86
92
|
if (!raw)
|
|
87
93
|
return [];
|
|
@@ -93,12 +99,13 @@ export function parseJsonArray(raw, site) {
|
|
|
93
99
|
if (site)
|
|
94
100
|
warnDamagedColumn(site, 'not valid JSON');
|
|
95
101
|
else
|
|
96
|
-
log.debug(`store: corrupt JSON array column read as empty: ${errorMessage(err)}
|
|
102
|
+
log.debug(`store: corrupt JSON array column read as empty: ${errorMessage(err)}`, errorFields(err));
|
|
97
103
|
return [];
|
|
98
104
|
}
|
|
99
105
|
}
|
|
100
|
-
/** Strict parse for `last_trace_id`: Number(raw) turns '' or garbage into 0/NaN (a masked FK violation); require a
|
|
101
|
-
* The ONE place that decides 'clean'; consumers read the validated value
|
|
106
|
+
/** Strict parse for `last_trace_id`: Number(raw) turns '' or garbage into 0/NaN (a masked FK violation); require a
|
|
107
|
+
* clean positive integer string, else unset. The ONE place that decides 'clean'; consumers read the validated value
|
|
108
|
+
* from `buildIndexFromDb`'s result and never re-parse. */
|
|
102
109
|
export function parseLastTraceId(raw) {
|
|
103
110
|
const trimmed = (raw ?? '').trim();
|
|
104
111
|
if (!/^\d+$/.test(trimmed) || Number(trimmed) <= 0)
|
package/dist/store/rule-sql.d.ts
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
1
|
+
/** calculateRewardFactor as SQL over `memories` columns; strengthSql and the context-candidate rank both build on it,
|
|
2
|
+
* so the slope has one source. */
|
|
3
|
+
export declare function rewardFactorSql(): string;
|
|
4
|
+
/** calculateStrength's clock-basis formula as SQL over `memories` columns, flags and multipliers baked in; keep in
|
|
5
|
+
* step. An unparseable date scores NULL here and 0 in JS, so sums agree. */
|
|
3
6
|
export declare function strengthSql(now: Date): string;
|
|
4
7
|
export declare const AUTO_DELETABLE_SQL: string;
|
|
5
8
|
export interface SqlFragment {
|
|
6
9
|
sql: string;
|
|
7
10
|
params: string[];
|
|
8
11
|
}
|
|
9
|
-
/** SQL twin of the no-request arm of passesScopeFilterForRecall; `ownScope` is bound and compared with `=`, so `%` or
|
|
12
|
+
/** SQL twin of the no-request arm of passesScopeFilterForRecall; `ownScope` is bound and compared with `=`, so `%` or
|
|
13
|
+
* `_` in an owner match nothing extra. */
|
|
10
14
|
export declare function scopeAdmitSql(col: '' | 'm.', ownScope?: string | null): SqlFragment;
|
|
11
15
|
/** SQL twin of canTouchScope, which is also canReadScope for an admin: every row but
|
|
12
16
|
* another person's personal one. LIKE folds ASCII case as isPersonalScope's /i does. */
|
package/dist/store/rule-sql.js
CHANGED
|
@@ -1,26 +1,36 @@
|
|
|
1
|
-
// The SQL twins of the model's rules in src/core: strength and keep (memory.ts), recall scope (recall-scope.ts); keep
|
|
1
|
+
// The SQL twins of the model's rules in src/core: strength and keep (memory.ts), recall scope (recall-scope.ts); keep
|
|
2
|
+
// each in step with its JS half.
|
|
2
3
|
import { DAY_MS } from '../util/time.js';
|
|
3
4
|
import { isDecayAblated, isOutcomeSlowAblated, isRecallBoostAblated } from '../core/ablation.js';
|
|
4
5
|
import { DECAY_BASE, EMOTIONAL_MULTIPLIERS, FALLBACK_HALF_LIFE_DAYS, KEEP_PAIRS, MAX_WRONG_HALVINGS, RETRIEVAL_BOOST_SLOPE, REWARD_SLOPE, applyLossAversionRatio, } from '../core/memory.js';
|
|
5
6
|
import { PERSONAL_SCOPE_PREFIX, RECALL_DEFAULT_DENY_SCOPES } from '../core/recall-scope.js';
|
|
7
|
+
import { placeholders } from '../util/sql.js';
|
|
6
8
|
const UNIX_EPOCH_JULIAN_DAY = 2440587.5;
|
|
7
|
-
/**
|
|
8
|
-
*
|
|
9
|
+
/** calculateRewardFactor as SQL over `memories` columns; strengthSql and the context-candidate rank both build on it,
|
|
10
|
+
* so the slope has one source. */
|
|
11
|
+
export function rewardFactorSql() {
|
|
12
|
+
if (isOutcomeSlowAblated())
|
|
13
|
+
return '1.0';
|
|
14
|
+
const pos = 'COALESCE(outcome_positive, 0)';
|
|
15
|
+
const neg = 'COALESCE(outcome_negative, 0)';
|
|
16
|
+
return `(CASE WHEN ${pos} = 0 AND ${neg} = 0 THEN 1.0 ELSE 1.0 + ${REWARD_SLOPE} * (${pos} - ${neg}) / (${pos} + ` +
|
|
17
|
+
`${neg} + 1.0) END)`;
|
|
18
|
+
}
|
|
19
|
+
/** calculateStrength's clock-basis formula as SQL over `memories` columns, flags and multipliers baked in; keep in
|
|
20
|
+
* step. An unparseable date scores NULL here and 0 in JS, so sums agree. */
|
|
9
21
|
export function strengthSql(now) {
|
|
10
22
|
const num = (n) => (Number.isInteger(n) ? n.toFixed(1) : String(n));
|
|
11
23
|
const pos = 'COALESCE(outcome_positive, 0)';
|
|
12
24
|
const neg = 'COALESCE(outcome_negative, 0)';
|
|
13
25
|
const wrong = isOutcomeSlowAblated() || isDecayAblated() ? '0' : `MAX(0, ${neg} - ${pos})`;
|
|
14
|
-
const
|
|
15
|
-
? '1.0'
|
|
16
|
-
: `(CASE WHEN ${pos} = 0 AND ${neg} = 0 THEN 1.0 ELSE 1.0 + ${REWARD_SLOPE} * (${pos} - ${neg}) / (${pos} + ${neg} + 1.0) END)`;
|
|
17
|
-
const halfLife = `(COALESCE(half_life_days, ${FALLBACK_HALF_LIFE_DAYS}) * ${reward})`;
|
|
26
|
+
const halfLife = `(COALESCE(half_life_days, ${FALLBACK_HALF_LIFE_DAYS}) * ${rewardFactorSql()})`;
|
|
18
27
|
const anchor = isRecallBoostAblated() ? 'created' : 'last_retrieved';
|
|
19
28
|
const nowJulian = num(now.getTime() / DAY_MS + UNIX_EPOCH_JULIAN_DAY);
|
|
20
29
|
const decay = isDecayAblated() ? '1.0' : `pow(${DECAY_BASE}, (${nowJulian} - julianday(${anchor})) / ${halfLife})`;
|
|
21
30
|
const boost = isRecallBoostAblated()
|
|
22
31
|
? '1.0'
|
|
23
|
-
: `(CASE WHEN ${wrong} > 0 THEN 1.0 ELSE 1.0 + ${RETRIEVAL_BOOST_SLOPE} * log2(COALESCE(retrieval_count, 0) + 1)
|
|
32
|
+
: `(CASE WHEN ${wrong} > 0 THEN 1.0 ELSE 1.0 + ${RETRIEVAL_BOOST_SLOPE} * log2(COALESCE(retrieval_count, 0) + 1) ` +
|
|
33
|
+
`END)`;
|
|
24
34
|
const valences = /* SAFETY: a Record keyed by EmotionalValence */ Object.keys(EMOTIONAL_MULTIPLIERS);
|
|
25
35
|
const emotion = `(CASE COALESCE(emotional_valence, 'neutral') ${valences
|
|
26
36
|
.map((v) => `WHEN '${v}' THEN ${num(applyLossAversionRatio(v, EMOTIONAL_MULTIPLIERS[v]))}`)
|
|
@@ -31,15 +41,18 @@ export function strengthSql(now) {
|
|
|
31
41
|
}
|
|
32
42
|
const sqlText = (s) => `'${s.replace(/'/g, "''")}'`;
|
|
33
43
|
// json_each matches the tag as a whole element; substr, not LIKE, keeps the prefix case-sensitive like startsWith.
|
|
34
|
-
const keepPairSql = (p) => `(COALESCE(superseded_by, '') = '' AND EXISTS (SELECT 1 FROM json_each(CASE WHEN json_valid(tags_json) THEN
|
|
44
|
+
const keepPairSql = (p) => `(COALESCE(superseded_by, '') = '' AND EXISTS (SELECT 1 FROM json_each(CASE WHEN json_valid(tags_json) THEN ` +
|
|
45
|
+
`tags_json ELSE '[]' END) ` +
|
|
35
46
|
`WHERE value = ${sqlText(p.tag)}) AND substr(source, 1, ${p.sourcePrefix.length}) = ${sqlText(p.sourcePrefix)})`;
|
|
36
47
|
// Pinned and kept rows stay (a superseded row is not kept: its successor carries the tag and
|
|
37
48
|
// source); raw rows leave only through archiveRawMemory. The SQL twin guards the DELETE itself.
|
|
38
|
-
export const AUTO_DELETABLE_SQL = `pinned = 0 AND kind !=
|
|
39
|
-
|
|
49
|
+
export const AUTO_DELETABLE_SQL = `pinned = 0 AND kind != ` +
|
|
50
|
+
`'raw'${KEEP_PAIRS.map((p) => ` AND NOT ${keepPairSql(p)}`).join('')}`;
|
|
51
|
+
/** SQL twin of the no-request arm of passesScopeFilterForRecall; `ownScope` is bound and compared with `=`, so `%` or
|
|
52
|
+
* `_` in an owner match nothing extra. */
|
|
40
53
|
export function scopeAdmitSql(col, ownScope) {
|
|
41
|
-
const
|
|
42
|
-
const admitted = `${col}scope IS NULL OR (${col}scope NOT IN (${
|
|
54
|
+
const marks = placeholders(RECALL_DEFAULT_DENY_SCOPES.length);
|
|
55
|
+
const admitted = `${col}scope IS NULL OR (${col}scope NOT IN (${marks}) AND ${col}scope NOT LIKE '%:private:%')`;
|
|
43
56
|
if (ownScope == null)
|
|
44
57
|
return { sql: `(${admitted})`, params: [...RECALL_DEFAULT_DENY_SCOPES] };
|
|
45
58
|
// The own arm sits inside the outer parentheses so a caller's `AND ${sql}` cannot split it off.
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { MemoryEntry } from '../core/memory.js';
|
|
2
2
|
import { type DatabaseSyncLike } from '../db/index.js';
|
|
3
|
-
/** Recall scope filter: 'default-deny' (exclude RECALL_DEFAULT_DENY_SCOPES), 'exact' (m.scope = value),
|
|
4
|
-
* @internal Internal SQL-builder shape; not re-exported from
|
|
3
|
+
/** Recall scope filter: 'default-deny' (exclude RECALL_DEFAULT_DENY_SCOPES), 'exact' (m.scope = value),
|
|
4
|
+
* 'default-deny-or-exact' (both; CLI `--scope`). @internal Internal SQL-builder shape; not re-exported from
|
|
5
|
+
* `src/index.ts`. Subject to change. */
|
|
5
6
|
export type RecallScopeFilter = {
|
|
6
7
|
mode: 'default-deny';
|
|
7
8
|
ownScope?: string;
|
|
@@ -15,16 +16,12 @@ export type RecallScopeFilter = {
|
|
|
15
16
|
};
|
|
16
17
|
/** One project name, or every name a project's rows carry. */
|
|
17
18
|
export type OriginFilter = string | readonly string[];
|
|
18
|
-
/** Scope rule for recall: none requested is default-deny; 'exact' narrows to the request; 'additive' adds it to the
|
|
19
|
-
* which only `ownScope` opens. */
|
|
19
|
+
/** Scope rule for recall: none requested is default-deny; 'exact' narrows to the request; 'additive' adds it to the
|
|
20
|
+
* default set, unless it is personal, which only `ownScope` opens. */
|
|
20
21
|
export declare function recallScopeFilter(requestedScope: string | undefined, mode: 'exact' | 'additive', ownScope?: string): RecallScopeFilter;
|
|
21
|
-
/**
|
|
22
|
-
|
|
23
|
-
/** Load likely search candidates: FTS5 when available, else LIKE, then full-store fallback. With `tenantId` every SELECT filters by it; omitted = no filter. */
|
|
22
|
+
/** Load likely search candidates: FTS5 when available, else LIKE, then full-store fallback. With `tenantId` every
|
|
23
|
+
* SELECT filters by it; omitted = no filter. */
|
|
24
24
|
export declare function loadSearchEntries(hippoRoot: string, query: string, limit?: number, tenantId?: string): MemoryEntry[];
|
|
25
|
-
/** Recall-mode loader: scope predicate in SQL so `unknown:legacy` cannot leak. Empty `requestedScope` default-denies (admits `ownScope`); else exact match.
|
|
26
|
-
* SQL `NOT LIKE '%:private:%'` runs before the LIMIT so private rows cannot starve admitted ones; `passesScopeFilterForRecall` is the exact post-filter. */
|
|
27
|
-
export declare function loadRecallSearchEntries(hippoRoot: string, query: string, limit?: number, tenantId?: string, requestedScope?: string, explicitScopeMode?: 'exact' | 'additive', includeSuperseded?: boolean, originProjects?: OriginFilter, ownScope?: string): MemoryEntry[];
|
|
28
25
|
export interface RecallSearchEntriesOptions {
|
|
29
26
|
readonly limit?: number;
|
|
30
27
|
readonly tenantId?: string;
|
|
@@ -34,8 +31,16 @@ export interface RecallSearchEntriesOptions {
|
|
|
34
31
|
readonly originProjects?: OriginFilter;
|
|
35
32
|
readonly ownScope?: string;
|
|
36
33
|
}
|
|
34
|
+
/** Recall-mode loader: scope predicate in SQL so `unknown:legacy` cannot leak. Empty `requestedScope` default-denies
|
|
35
|
+
* (admits `ownScope`); else exact match. SQL `NOT LIKE '%:private:%'` runs before the LIMIT so private rows cannot
|
|
36
|
+
* starve admitted ones; `passesScopeFilterForRecall` is the exact post-filter. */
|
|
37
|
+
export declare function loadRecallEntries(hippoRoot: string, query: string, options?: RecallSearchEntriesOptions): MemoryEntry[];
|
|
38
|
+
/** Positional form of `loadRecallEntries`, kept internal because the frozen q3b-ranker-floor benchmark imports it from
|
|
39
|
+
* dist. */
|
|
40
|
+
export declare function loadRecallSearchEntries(hippoRoot: string, query: string, limit?: number, tenantId?: string, requestedScope?: string, explicitScopeMode?: 'exact' | 'additive', includeSuperseded?: boolean, originProjects?: OriginFilter, ownScope?: string): MemoryEntry[];
|
|
37
41
|
export declare function loadRecallSearchEntriesFromDb(db: DatabaseSyncLike, query: string, options?: RecallSearchEntriesOptions): MemoryEntry[];
|
|
38
|
-
/** Which rows the vector arm of hybrid search may add: the same tenant, scope and superseded rules as the lexical
|
|
42
|
+
/** Which rows the vector arm of hybrid search may add: the same tenant, scope and superseded rules as the lexical
|
|
43
|
+
* load. */
|
|
39
44
|
export interface VectorCandidateSpec {
|
|
40
45
|
tenantId?: string;
|
|
41
46
|
scope?: RecallScopeFilter;
|
|
@@ -3,13 +3,15 @@ import { tokenize } from '../util/tokenize.js';
|
|
|
3
3
|
import { isPersonalScope } from '../core/recall-scope.js';
|
|
4
4
|
import { scopeAdmitSql } from './rule-sql.js';
|
|
5
5
|
import { ftsTermParts, RAREST_TERM_COUNT, rarestFtsQuery } from '../core/prompt-recall.js';
|
|
6
|
-
import { errorMessage, log } from '../util/log.js';
|
|
6
|
+
import { errorMessage, log, errorFields } from '../util/log.js';
|
|
7
7
|
import { originInSql } from '../core/project-identity.js';
|
|
8
8
|
import { topVectorMatches } from '../db/vector-store.js';
|
|
9
9
|
import { MEMORY_SELECT_COLUMNS, MEMORY_SEARCH_COLUMNS, DEFAULT_SEARCH_CANDIDATE_LIMIT, rowToEntry, } from './rows.js';
|
|
10
10
|
import { onHandle, openStore } from './open.js';
|
|
11
11
|
import { escapeLike } from '../util/escape.js';
|
|
12
|
-
|
|
12
|
+
import { placeholders } from '../util/sql.js';
|
|
13
|
+
/** The recall scope rule for a table column prefix (`m.` or none); `passesScopeFilterForRecall` in recall-scope.ts is
|
|
14
|
+
* its JS twin. */
|
|
13
15
|
function recallScopeClause(col, scopeFilter) {
|
|
14
16
|
if (scopeFilter === undefined)
|
|
15
17
|
return { sql: '', params: [] };
|
|
@@ -32,19 +34,17 @@ function withProject(scope, col, origin) {
|
|
|
32
34
|
params: [...scope.params, ...originProjects],
|
|
33
35
|
};
|
|
34
36
|
}
|
|
35
|
-
/** Scope rule for recall: none requested is default-deny; 'exact' narrows to the request; 'additive' adds it to the
|
|
36
|
-
* which only `ownScope` opens. */
|
|
37
|
+
/** Scope rule for recall: none requested is default-deny; 'exact' narrows to the request; 'additive' adds it to the
|
|
38
|
+
* default set, unless it is personal, which only `ownScope` opens. */
|
|
37
39
|
export function recallScopeFilter(requestedScope, mode, ownScope) {
|
|
38
|
-
if (!requestedScope || (mode === 'additive' && isPersonalScope(requestedScope)))
|
|
40
|
+
if (!requestedScope || (mode === 'additive' && isPersonalScope(requestedScope))) {
|
|
39
41
|
return { mode: 'default-deny', ownScope };
|
|
40
|
-
|
|
42
|
+
}
|
|
43
|
+
return mode === 'additive'
|
|
44
|
+
? { mode: 'default-deny-or-exact', value: requestedScope, ownScope }
|
|
45
|
+
: { mode: 'exact', value: requestedScope };
|
|
41
46
|
}
|
|
42
47
|
const FTS_QUERY_SYNTAX_RE = /fts5: syntax error|unterminated string/i;
|
|
43
|
-
let forceLikePath = false;
|
|
44
|
-
/** Sends term queries down the LIKE path on a build that has FTS. Only tests call it. */
|
|
45
|
-
export function _forceLikePathForTests(on) {
|
|
46
|
-
forceLikePath = on;
|
|
47
|
-
}
|
|
48
48
|
function loadSearchRows(db, query, limit, tenantId, options = {}) {
|
|
49
49
|
const { scopeFilter, includeSuperseded = true, originProjects } = options;
|
|
50
50
|
const p = searchPredicates(tenantId, scopeFilter, includeSuperseded, originProjects);
|
|
@@ -53,8 +53,7 @@ function loadSearchRows(db, query, limit, tenantId, options = {}) {
|
|
|
53
53
|
// LIMIT here too, so every candidate path honours the caller's cap.
|
|
54
54
|
return selectAllCandidates(db, p, limit);
|
|
55
55
|
}
|
|
56
|
-
|
|
57
|
-
if (!forceLikePath && isFtsAvailable(db)) {
|
|
56
|
+
if (isFtsAvailable(db)) {
|
|
58
57
|
const rows = selectFtsCandidates(db, terms, p, limit);
|
|
59
58
|
if (rows.length > 0)
|
|
60
59
|
return rows;
|
|
@@ -67,14 +66,16 @@ function loadSearchRows(db, query, limit, tenantId, options = {}) {
|
|
|
67
66
|
return selectAllCandidates(db, p, limit);
|
|
68
67
|
}
|
|
69
68
|
function searchPredicates(tenantId, scopeFilter, includeSuperseded, originProjects) {
|
|
70
|
-
// tenantId undefined = no tenant filter (legacy callers / cross-deployment helpers); set = strict isolation via the
|
|
69
|
+
// tenantId undefined = no tenant filter (legacy callers / cross-deployment helpers); set = strict isolation via the
|
|
70
|
+
// composite idx_memories_tenant_created.
|
|
71
71
|
const tenantPredicate = tenantId !== undefined ? ` AND m.tenant_id = ?` : '';
|
|
72
72
|
const tenantOnlyPredicate = tenantId !== undefined ? ` WHERE tenant_id = ?` : '';
|
|
73
73
|
const tenantParams = tenantId !== undefined ? [tenantId] : [];
|
|
74
74
|
// Defensive: kind='archived' is a transient sentinel inside archiveRawMemory's SAVEPOINT, so this only
|
|
75
75
|
// guards against a dropped SAVEPOINT, a persisted 'archived' state, or direct-SQL writes.
|
|
76
76
|
const archivedClauseAlias = ` AND m.kind != 'archived'`;
|
|
77
|
-
// Tenant-only path: with no tenant `tenantOnlyPredicate` is '', so the archived clause switches between ' AND' and '
|
|
77
|
+
// Tenant-only path: with no tenant `tenantOnlyPredicate` is '', so the archived clause switches between ' AND' and '
|
|
78
|
+
// WHERE' by caller context.
|
|
78
79
|
const archivedClauseTenantOnly = tenantId !== undefined ? ` AND kind != 'archived'` : ` WHERE kind != 'archived'`;
|
|
79
80
|
const aliasScope = withProject(recallScopeClause('m.', scopeFilter), 'm.', originProjects);
|
|
80
81
|
const plainScope = withProject(recallScopeClause('', scopeFilter), '', originProjects);
|
|
@@ -99,8 +100,9 @@ function selectAllCandidates(db, p, limit) {
|
|
|
99
100
|
function selectFtsCandidates(db, terms, p, limit) {
|
|
100
101
|
try {
|
|
101
102
|
const ftsQuery = terms.map((t) => `"${t.replace(/"/g, '""')}"`).join(' OR ');
|
|
102
|
-
// memories_fts has no tenant_id column; filter via the joined memories row (cheap with
|
|
103
|
-
// SAFETY: MEMORY_SEARCH_COLUMNS aliases every column like MEMORY_SELECT_COLUMNS (plus
|
|
103
|
+
// memories_fts has no tenant_id column; filter via the joined memories row (cheap with
|
|
104
|
+
// idx_memories_tenant_created). SAFETY: MEMORY_SEARCH_COLUMNS aliases every column like MEMORY_SELECT_COLUMNS (plus
|
|
105
|
+
// bm25_score), matching MemoryRow.
|
|
104
106
|
return db.prepare(`
|
|
105
107
|
SELECT ${MEMORY_SEARCH_COLUMNS}
|
|
106
108
|
FROM memories m
|
|
@@ -113,24 +115,30 @@ function selectFtsCandidates(db, terms, p, limit) {
|
|
|
113
115
|
catch (err) {
|
|
114
116
|
// A query FTS5 cannot parse is expected input; anything else means the index itself is broken.
|
|
115
117
|
const message = errorMessage(err);
|
|
116
|
-
if (!FTS_QUERY_SYNTAX_RE.test(message))
|
|
117
|
-
|
|
118
|
+
if (!FTS_QUERY_SYNTAX_RE.test(message)) {
|
|
119
|
+
const failure = `FTS search failed, using the slower LIKE match: ${message}`;
|
|
120
|
+
log.once('fts-match-fallback', 'warn', failure, errorFields(err));
|
|
121
|
+
}
|
|
118
122
|
return [];
|
|
119
123
|
}
|
|
120
124
|
}
|
|
121
|
-
/** Newest admitted rows the substring match tests, so a query matching nothing costs the same in a store of any
|
|
125
|
+
/** Newest admitted rows the substring match tests, so a query matching nothing costs the same in a store of any
|
|
126
|
+
* size. */
|
|
122
127
|
const LIKE_WINDOW_ROWS = 2000;
|
|
123
|
-
/** Substring matches in content or tags among the newest admitted rows: the lexical path without FTS5, and the catch
|
|
128
|
+
/** Substring matches in content or tags among the newest admitted rows: the lexical path without FTS5, and the catch
|
|
129
|
+
* for a part-word that FTS5 tokens miss. */
|
|
124
130
|
function selectLikeCandidates(db, terms, p, limit) {
|
|
125
|
-
const where = terms
|
|
131
|
+
const where = terms
|
|
132
|
+
.map(() => `(LOWER(content) LIKE ? ESCAPE '\\' OR LOWER(tags_json) LIKE ? ESCAPE '\\')`)
|
|
133
|
+
.join(' OR ');
|
|
126
134
|
const params = terms.flatMap((term) => {
|
|
127
135
|
const like = `%${escapeLike(term)}%`;
|
|
128
136
|
return [like, like];
|
|
129
137
|
});
|
|
130
138
|
// idx_memories_tenant_created serves a tenant's newest rows; with no tenant only the table's own order needs no sort.
|
|
131
139
|
const newestFirst = p.tenantParams.length > 0 ? 'created DESC' : 'rowid DESC';
|
|
132
|
-
// SHORTCUT: no index serves a substring, so a match older than the window is missed; an FTS5 trigram index is the
|
|
133
|
-
// SAFETY: the outer query selects exactly MEMORY_SELECT_COLUMNS, matching MemoryRow's field set.
|
|
140
|
+
// SHORTCUT: no index serves a substring, so a match older than the window is missed; an FTS5 trigram index is the
|
|
141
|
+
// upgrade. SAFETY: the outer query selects exactly MEMORY_SELECT_COLUMNS, matching MemoryRow's field set.
|
|
134
142
|
return db.prepare(`
|
|
135
143
|
SELECT ${MEMORY_SELECT_COLUMNS}
|
|
136
144
|
FROM (
|
|
@@ -144,18 +152,31 @@ function selectLikeCandidates(db, terms, p, limit) {
|
|
|
144
152
|
LIMIT ?
|
|
145
153
|
`).all(...p.tenantParams, ...p.scopeParams, Math.max(limit, LIKE_WINDOW_ROWS), ...params, limit);
|
|
146
154
|
}
|
|
147
|
-
/** Load likely search candidates: FTS5 when available, else LIKE, then full-store fallback. With `tenantId` every
|
|
155
|
+
/** Load likely search candidates: FTS5 when available, else LIKE, then full-store fallback. With `tenantId` every
|
|
156
|
+
* SELECT filters by it; omitted = no filter. */
|
|
148
157
|
export function loadSearchEntries(hippoRoot, query, limit = DEFAULT_SEARCH_CANDIDATE_LIMIT, tenantId) {
|
|
149
158
|
return onHandle(hippoRoot, (db) => {
|
|
150
159
|
return loadSearchRows(db, query, limit, tenantId).map(rowToEntry);
|
|
151
160
|
}, openStore);
|
|
152
161
|
}
|
|
153
|
-
/** Recall-mode loader: scope predicate in SQL so `unknown:legacy` cannot leak. Empty `requestedScope` default-denies
|
|
154
|
-
* SQL `NOT LIKE '%:private:%'` runs before the LIMIT so private rows cannot
|
|
162
|
+
/** Recall-mode loader: scope predicate in SQL so `unknown:legacy` cannot leak. Empty `requestedScope` default-denies
|
|
163
|
+
* (admits `ownScope`); else exact match. SQL `NOT LIKE '%:private:%'` runs before the LIMIT so private rows cannot
|
|
164
|
+
* starve admitted ones; `passesScopeFilterForRecall` is the exact post-filter. */
|
|
165
|
+
export function loadRecallEntries(hippoRoot, query, options = {}) {
|
|
166
|
+
return onHandle(hippoRoot, (db) => loadRecallSearchEntriesFromDb(db, query, options), openStore);
|
|
167
|
+
}
|
|
168
|
+
/** Positional form of `loadRecallEntries`, kept internal because the frozen q3b-ranker-floor benchmark imports it from
|
|
169
|
+
* dist. */
|
|
155
170
|
export function loadRecallSearchEntries(hippoRoot, query, limit = DEFAULT_SEARCH_CANDIDATE_LIMIT, tenantId, requestedScope, explicitScopeMode = 'exact', includeSuperseded = true, originProjects, ownScope) {
|
|
156
|
-
return
|
|
157
|
-
|
|
158
|
-
|
|
171
|
+
return loadRecallEntries(hippoRoot, query, {
|
|
172
|
+
limit,
|
|
173
|
+
tenantId,
|
|
174
|
+
requestedScope,
|
|
175
|
+
explicitScopeMode,
|
|
176
|
+
includeSuperseded,
|
|
177
|
+
originProjects,
|
|
178
|
+
ownScope,
|
|
179
|
+
});
|
|
159
180
|
}
|
|
160
181
|
// Split out so callers with an already-open db (the prompt-recall path) skip
|
|
161
182
|
// the initStore+open/close cycle per store per call.
|
|
@@ -176,7 +197,8 @@ export async function loadVectorCandidateEntries(hippoRoot, queryVector, spec) {
|
|
|
176
197
|
if (matches.length === 0)
|
|
177
198
|
return [];
|
|
178
199
|
// SAFETY: the SELECT names exactly MEMORY_SELECT_COLUMNS, matching MemoryRow's field set.
|
|
179
|
-
const rows = db
|
|
200
|
+
const rows = db
|
|
201
|
+
.prepare(`SELECT ${MEMORY_SELECT_COLUMNS} FROM memories WHERE id IN (${placeholders(matches.length)})`)
|
|
180
202
|
.all(...matches.map((m) => m.id));
|
|
181
203
|
const byId = new Map(rows.map((r) => [r.id, rowToEntry(r)]));
|
|
182
204
|
return matches.flatMap((m) => byId.get(m.id) ?? []);
|
|
@@ -197,7 +219,7 @@ export function pickRarestFtsQuery(db, terms, maxTerms = RAREST_TERM_COUNT) {
|
|
|
197
219
|
return '';
|
|
198
220
|
// SAFETY: rows' shape matches the two columns named in the SELECT.
|
|
199
221
|
const rows = db
|
|
200
|
-
.prepare(`SELECT term, doc FROM temp.z1_rarest_vocab WHERE term IN (${vocab.
|
|
222
|
+
.prepare(`SELECT term, doc FROM temp.z1_rarest_vocab WHERE term IN (${placeholders(vocab.length)})`)
|
|
201
223
|
.all(...vocab);
|
|
202
224
|
const counts = new Map(rows.map((r) => [r.term, r.doc]));
|
|
203
225
|
return rarestFtsQuery(terms, (part) => counts.get(part) ?? 0, maxTerms);
|
package/dist/store/sessions.d.ts
CHANGED
|
@@ -17,7 +17,7 @@ export interface ContinuityStamp {
|
|
|
17
17
|
export declare function continuityWhere(key: ContinuityKey): ContinuityFilter;
|
|
18
18
|
/** The columns a keyed write stamps; a partial key throws, since a row it wrote would match no reader. */
|
|
19
19
|
export declare function continuityStamp(key: ContinuityKey): ContinuityStamp;
|
|
20
|
-
type SnapshotInput = {
|
|
20
|
+
export type SnapshotInput = {
|
|
21
21
|
task: string;
|
|
22
22
|
summary: string;
|
|
23
23
|
next_step: string;
|
|
@@ -27,11 +27,13 @@ type SnapshotInput = {
|
|
|
27
27
|
};
|
|
28
28
|
export declare function saveActiveTaskSnapshot(hippoRoot: string, tenantId: string, snapshot: SnapshotInput, key?: ContinuityKey): TaskSnapshot;
|
|
29
29
|
export declare function loadActiveTaskSnapshot(hippoRoot: string, tenantId: string, key?: ContinuityKey): TaskSnapshot | null;
|
|
30
|
-
/** Default freshness bound for AMBIENT active-task-snapshot reads: 72h rather than 48h so a Friday-evening orphan still
|
|
31
|
-
* override via `loadFreshActiveTaskSnapshot`'s `opts.maxAgeMs`; deliberately no env
|
|
30
|
+
/** Default freshness bound for AMBIENT active-task-snapshot reads: 72h rather than 48h so a Friday-evening orphan still
|
|
31
|
+
* offers continuity on Monday; override via `loadFreshActiveTaskSnapshot`'s `opts.maxAgeMs`; deliberately no env
|
|
32
|
+
* knob. */
|
|
32
33
|
export declare const SNAPSHOT_AMBIENT_MAX_AGE_MS: number;
|
|
33
|
-
/** Bounded read for AMBIENT snapshot surfaces so orphaned snapshots expire. The owner (both session ids non-empty and
|
|
34
|
-
* all others, null ids included (null === null is no match), get it only if
|
|
34
|
+
/** Bounded read for AMBIENT snapshot surfaces so orphaned snapshots expire. The owner (both session ids non-empty and
|
|
35
|
+
* `===`) always sees its own state; all others, null ids included (null === null is no match), get it only if
|
|
36
|
+
* age(updated_at) <= maxAgeMs (default `SNAPSHOT_AMBIENT_MAX_AGE_MS`), else null. */
|
|
35
37
|
export declare function loadFreshActiveTaskSnapshot(hippoRoot: string, tenantId: string, opts?: {
|
|
36
38
|
maxAgeMs?: number;
|
|
37
39
|
sessionId?: string | null;
|
|
@@ -42,10 +44,10 @@ export declare function freshActiveSnapshot(snapshot: TaskSnapshot | null, opts?
|
|
|
42
44
|
sessionId?: string | null;
|
|
43
45
|
}): TaskSnapshot | null;
|
|
44
46
|
export declare function clearActiveTaskSnapshot(hippoRoot: string, tenantId: string, clearedStatus?: string): boolean;
|
|
45
|
-
/** Close the `active` task snapshot(s) owned by `sessionId` at session end; the WHERE scopes on `session_id` too so an
|
|
46
|
-
* newer session's snapshot. Returns the number of rows closed. */
|
|
47
|
+
/** Close the `active` task snapshot(s) owned by `sessionId` at session end; the WHERE scopes on `session_id` too so an
|
|
48
|
+
* ending session can never close a newer session's snapshot. Returns the number of rows closed. */
|
|
47
49
|
export declare function closeTaskSnapshotsForSession(hippoRoot: string, tenantId: string, sessionId: string, status?: string, key?: ContinuityKey): number;
|
|
48
|
-
interface SessionEventInput {
|
|
50
|
+
export interface SessionEventInput {
|
|
49
51
|
session_id: string;
|
|
50
52
|
event_type: string;
|
|
51
53
|
content: string;
|
|
@@ -60,7 +62,8 @@ export declare function listSessionEvents(hippoRoot: string, tenantId: string, o
|
|
|
60
62
|
task?: string;
|
|
61
63
|
limit?: number;
|
|
62
64
|
}): SessionEvent[];
|
|
63
|
-
/** Session_ids with a `session_complete` event newer than `sinceMs`; bounds the sleep auto-promotion scan to a fixed
|
|
65
|
+
/** Session_ids with a `session_complete` event newer than `sinceMs`; bounds the sleep auto-promotion scan to a fixed
|
|
66
|
+
* window. */
|
|
64
67
|
export declare function findPromotableSessions(hippoRoot: string, tenantId: string, sinceMs: number): Array<{
|
|
65
68
|
session_id: string;
|
|
66
69
|
}>;
|
|
@@ -76,5 +79,4 @@ export interface SessionOwnerBinding {
|
|
|
76
79
|
}
|
|
77
80
|
/** The owner stored for the session id, binding `binding.owner` first when none is stored. */
|
|
78
81
|
export declare function sessionOwnerOrBind(hippoRoot: string, binding: SessionOwnerBinding): string | null;
|
|
79
|
-
export {};
|
|
80
82
|
//# sourceMappingURL=sessions.d.ts.map
|