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
package/dist/db/migrate.d.ts
CHANGED
|
@@ -3,9 +3,11 @@ export declare function getCurrentSchemaVersion(): number;
|
|
|
3
3
|
/** Thrown by {@link assertBinaryCompatible}; doctor uses it to pick the upgrade fix over a generic permissions fix. */
|
|
4
4
|
export declare class IncompatibleBinaryError extends Error {
|
|
5
5
|
}
|
|
6
|
-
/** Refuse a store stamped for a newer binary. Fails closed:
|
|
6
|
+
/** Refuse a store stamped for a newer binary. Fails closed:
|
|
7
|
+
* runMigrations creates meta first, so a failed read is a real error. */
|
|
7
8
|
export declare function assertBinaryCompatible(db: DatabaseSyncLike): void;
|
|
8
|
-
/** The fast path's single probe: versions, the binary minimum, the
|
|
9
|
+
/** The fast path's single probe: versions, the binary minimum, the
|
|
10
|
+
* FTS flag, and counts of the meta defaults and required objects. */
|
|
9
11
|
export declare const SCHEMA_PROBE_SQL: string;
|
|
10
12
|
/** What the probe of a current store read beyond the schema proof, so the same open need not read them again. */
|
|
11
13
|
export interface OpenFacts {
|
|
@@ -13,13 +15,16 @@ export interface OpenFacts {
|
|
|
13
15
|
readonly archiveTop: number;
|
|
14
16
|
readonly hasMemories: boolean;
|
|
15
17
|
}
|
|
16
|
-
/** Brings the store to the current schema; returns the probe's
|
|
18
|
+
/** Brings the store to the current schema; returns the probe's
|
|
19
|
+
* facts when it was current already, null after any repair. */
|
|
17
20
|
export declare function runMigrations(db: DatabaseSyncLike, hippoRoot?: string, busyWaitMs?: number): OpenFacts | null;
|
|
18
|
-
/** Row counts of `memories` and its full-text index, which differ
|
|
21
|
+
/** Row counts of `memories` and its full-text index, which differ
|
|
22
|
+
* once the index drifts; null when either table is missing. */
|
|
19
23
|
export declare function ftsRowCounts(db: DatabaseSyncLike): {
|
|
20
24
|
memories: number;
|
|
21
25
|
fts: number;
|
|
22
26
|
} | null;
|
|
23
|
-
/** Re-syncs `memories_fts` with `memories` when their counts differ and returns whether it did; sleep runs it
|
|
27
|
+
/** Re-syncs `memories_fts` with `memories` when their counts differ and returns whether it did; sleep runs it
|
|
28
|
+
* because a fast open does not. */
|
|
24
29
|
export declare function repairFtsDrift(db: DatabaseSyncLike): boolean;
|
|
25
30
|
//# sourceMappingURL=migrate.d.ts.map
|
package/dist/db/migrate.js
CHANGED
|
@@ -4,7 +4,7 @@ import { importLegacyEmbeddingIndex } from './vector-store.js';
|
|
|
4
4
|
import { execWithBusyRetry, withWriteScope } from './busy.js';
|
|
5
5
|
import { tableExists } from './tables.js';
|
|
6
6
|
import { ensureMetaTable, getMeta, getSchemaVersion, setMeta, setSchemaVersion } from './meta.js';
|
|
7
|
-
import { MEMORIES_FTS_DDL, REQUIRED_SCHEMA_OBJECTS, ensureContinuityIndexes, ensureContinuityTables } from './continuity.js';
|
|
7
|
+
import { MEMORIES_FTS_DDL, REQUIRED_SCHEMA_OBJECTS, ensureContinuityIndexes, ensureContinuityTables, } from './continuity.js';
|
|
8
8
|
import { CURRENT_SCHEMA_VERSION, MIGRATIONS } from './migrations/index.js';
|
|
9
9
|
import { placeholders } from '../util/sql.js';
|
|
10
10
|
export function getCurrentSchemaVersion() {
|
|
@@ -15,11 +15,14 @@ export class IncompatibleBinaryError extends Error {
|
|
|
15
15
|
}
|
|
16
16
|
function assertMinBinary(minRequired) {
|
|
17
17
|
if (minRequired && compareSemver(minRequired, PACKAGE_VERSION) > 0) {
|
|
18
|
-
throw new IncompatibleBinaryError(`hippo-memory: this database requires hippo-memory >=
|
|
19
|
-
|
|
18
|
+
throw new IncompatibleBinaryError(`hippo-memory: this database requires hippo-memory >= ` +
|
|
19
|
+
`${minRequired}, but the running binary is ${PACKAGE_VERSION}. ` +
|
|
20
|
+
`Upgrade hippo-memory to open it; an older binary does not know ` +
|
|
21
|
+
`this schema and could expose private rows or damage the store.`);
|
|
20
22
|
}
|
|
21
23
|
}
|
|
22
|
-
/** Refuse a store stamped for a newer binary. Fails closed:
|
|
24
|
+
/** Refuse a store stamped for a newer binary. Fails closed:
|
|
25
|
+
* runMigrations creates meta first, so a failed read is a real error. */
|
|
23
26
|
export function assertBinaryCompatible(db) {
|
|
24
27
|
assertMinBinary(getMeta(db, 'min_compatible_binary'));
|
|
25
28
|
}
|
|
@@ -34,17 +37,20 @@ const META_DEFAULTS = [
|
|
|
34
37
|
];
|
|
35
38
|
// Names come from our own constants and match \w+, so inlining them as literals is safe.
|
|
36
39
|
const sqlList = (names) => names.map((n) => `'${n}'`).join(', ');
|
|
37
|
-
|
|
40
|
+
const REQUIRED_OBJECTS = sqlList(REQUIRED_SCHEMA_OBJECTS);
|
|
41
|
+
/** The fast path's single probe: versions, the binary minimum, the
|
|
42
|
+
* FTS flag, and counts of the meta defaults and required objects. */
|
|
38
43
|
export const SCHEMA_PROBE_SQL = `SELECT
|
|
39
44
|
(SELECT user_version FROM pragma_user_version) AS user_version,
|
|
40
45
|
(SELECT value FROM meta WHERE key = 'schema_version') AS schema_version,
|
|
41
46
|
(SELECT value FROM meta WHERE key = 'min_compatible_binary') AS min_binary,
|
|
42
47
|
(SELECT value FROM meta WHERE key = 'fts5_available') AS fts5,
|
|
43
48
|
(SELECT COUNT(*) FROM meta WHERE key IN (${sqlList(META_DEFAULTS.map(([key]) => key))})) AS meta_keys,
|
|
44
|
-
(SELECT COUNT(*) FROM sqlite_master WHERE type IN ('table', 'index') AND name IN (${
|
|
49
|
+
(SELECT COUNT(*) FROM sqlite_master WHERE type IN ('table', 'index') AND name IN (${REQUIRED_OBJECTS})) AS objects,
|
|
45
50
|
(SELECT MAX(id) FROM raw_archive) AS archive_top,
|
|
46
51
|
(SELECT 1 FROM memories LIMIT 1) AS has_memories`;
|
|
47
|
-
/** The probe's facts when the store is current and whole, so the open can skip every DDL statement; else null. Runs
|
|
52
|
+
/** The probe's facts when the store is current and whole, so the open can skip every DDL statement; else null. Runs
|
|
53
|
+
* the binary check either way. */
|
|
48
54
|
function currentStoreFacts(db) {
|
|
49
55
|
let probe;
|
|
50
56
|
try {
|
|
@@ -67,7 +73,8 @@ function currentStoreFacts(db) {
|
|
|
67
73
|
&& probe.fts5 === '1';
|
|
68
74
|
return current ? { archiveTop: Number(probe.archive_top ?? 0), hasMemories: probe.has_memories !== null } : null;
|
|
69
75
|
}
|
|
70
|
-
/** Brings the store to the current schema; returns the probe's
|
|
76
|
+
/** Brings the store to the current schema; returns the probe's
|
|
77
|
+
* facts when it was current already, null after any repair. */
|
|
71
78
|
export function runMigrations(db, hippoRoot, busyWaitMs) {
|
|
72
79
|
const facts = currentStoreFacts(db);
|
|
73
80
|
if (!facts)
|
|
@@ -122,14 +129,18 @@ function importLegacyVectors(db, hippoRoot) {
|
|
|
122
129
|
importLegacyEmbeddingIndex(db, hippoRoot);
|
|
123
130
|
}
|
|
124
131
|
catch (err) {
|
|
125
|
-
log.warn(`embeddings.json import failed; the next open retries it (${errorMessage(err)})`, {
|
|
132
|
+
log.warn(`embeddings.json import failed; the next open retries it (${errorMessage(err)})`, {
|
|
133
|
+
hippoRoot,
|
|
134
|
+
...errorFields(err),
|
|
135
|
+
});
|
|
126
136
|
}
|
|
127
137
|
}
|
|
128
138
|
function ensureMetaDefaults(db) {
|
|
129
139
|
// Read-first: an already-current store has all 7 keys, so this is one SELECT and zero writes instead of 7 no-op
|
|
130
140
|
// INSERT OR IGNOREs, each of which takes a RESERVED lock even when nothing changes.
|
|
131
141
|
const keys = META_DEFAULTS.map(([key]) => key);
|
|
132
|
-
// SAFETY: the statement selects only the `key` column of `meta`, which is TEXT NOT NULL, so each row is { key: string
|
|
142
|
+
// SAFETY: the statement selects only the `key` column of `meta`, which is TEXT NOT NULL, so each row is { key: string
|
|
143
|
+
// }.
|
|
133
144
|
const present = new Set(db
|
|
134
145
|
.prepare(`SELECT key FROM meta WHERE key IN (${placeholders(keys.length)})`)
|
|
135
146
|
.all(...keys)
|
|
@@ -153,7 +164,7 @@ function ensureOptionalFts(db) {
|
|
|
153
164
|
log.warn(`full-text index not set up this open (${errorMessage(err)}); the next open retries`, errorFields(err));
|
|
154
165
|
return;
|
|
155
166
|
}
|
|
156
|
-
log.warn(`full-text index unavailable (${errorMessage(err)}); search falls back to slower LIKE matching
|
|
167
|
+
log.warn(`full-text index unavailable (${errorMessage(err)}); search falls back to slower LIKE matching`, errorFields(err));
|
|
157
168
|
writeFtsFlag(db, '0');
|
|
158
169
|
return;
|
|
159
170
|
}
|
|
@@ -164,7 +175,8 @@ function writeFtsFlag(db, flag) {
|
|
|
164
175
|
if (getMeta(db, 'fts5_available') !== flag)
|
|
165
176
|
setMeta(db, 'fts5_available', flag);
|
|
166
177
|
}
|
|
167
|
-
/** Row counts of `memories` and its full-text index, which differ
|
|
178
|
+
/** Row counts of `memories` and its full-text index, which differ
|
|
179
|
+
* once the index drifts; null when either table is missing. */
|
|
168
180
|
export function ftsRowCounts(db) {
|
|
169
181
|
if (!tableExists(db, 'memories_fts') || !tableExists(db, 'memories'))
|
|
170
182
|
return null;
|
|
@@ -176,7 +188,8 @@ export function ftsRowCounts(db) {
|
|
|
176
188
|
const fts = db.prepare(`SELECT COUNT(*) AS c FROM ${ftsTable}`).get()?.c ?? 0;
|
|
177
189
|
return { memories: Number(memories), fts: Number(fts) };
|
|
178
190
|
}
|
|
179
|
-
/** Re-syncs `memories_fts` with `memories` when their counts differ and returns whether it did; sleep runs it
|
|
191
|
+
/** Re-syncs `memories_fts` with `memories` when their counts differ and returns whether it did; sleep runs it
|
|
192
|
+
* because a fast open does not. */
|
|
180
193
|
export function repairFtsDrift(db) {
|
|
181
194
|
const counts = ftsRowCounts(db);
|
|
182
195
|
if (counts === null || counts.memories === counts.fts)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Migration } from './types.js';
|
|
2
|
-
export declare const CURRENT_SCHEMA_VERSION =
|
|
2
|
+
export declare const CURRENT_SCHEMA_VERSION = 56;
|
|
3
3
|
/** Every schema migration in version order; runMigrations applies each one above the stored version. */
|
|
4
4
|
export declare const MIGRATIONS: Migration[];
|
|
5
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -53,7 +53,8 @@ import { v52 } from './v52.js';
|
|
|
53
53
|
import { v53 } from './v53.js';
|
|
54
54
|
import { v54 } from './v54.js';
|
|
55
55
|
import { v55 } from './v55.js';
|
|
56
|
-
|
|
56
|
+
import { v56 } from './v56.js';
|
|
57
|
+
export const CURRENT_SCHEMA_VERSION = 56;
|
|
57
58
|
/** Every schema migration in version order; runMigrations applies each one above the stored version. */
|
|
58
59
|
export const MIGRATIONS = [
|
|
59
60
|
v01,
|
|
@@ -111,5 +112,6 @@ export const MIGRATIONS = [
|
|
|
111
112
|
v53,
|
|
112
113
|
v54,
|
|
113
114
|
v55,
|
|
115
|
+
v56,
|
|
114
116
|
];
|
|
115
117
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { DatabaseSyncLike } from '../sqlite.js';
|
|
2
|
-
/** Context for migrations that need to know where the store lives. hippoRoot is the store directory (e.g.
|
|
2
|
+
/** Context for migrations that need to know where the store lives. hippoRoot is the store directory (e.g.
|
|
3
|
+
* `<project>/.hippo`);
|
|
3
4
|
* undefined only for callers that open a DB without a filesystem store. */
|
|
4
5
|
export type MigrationContext = {
|
|
5
6
|
hippoRoot?: string;
|
|
@@ -5,7 +5,8 @@ export const v12 = {
|
|
|
5
5
|
if (!tableHasColumn(db, 'memories', 'extracted_from')) {
|
|
6
6
|
db.exec(`ALTER TABLE memories ADD COLUMN extracted_from TEXT`);
|
|
7
7
|
}
|
|
8
|
-
db.exec(`CREATE INDEX IF NOT EXISTS idx_memories_extracted_from
|
|
8
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_memories_extracted_from ` +
|
|
9
|
+
`ON memories(extracted_from) WHERE extracted_from IS NOT NULL`);
|
|
9
10
|
},
|
|
10
11
|
};
|
|
11
12
|
//# sourceMappingURL=v12.js.map
|
|
@@ -48,7 +48,8 @@ export const v14 = {
|
|
|
48
48
|
if (!tableHasColumn(db, 'memories', 'owner')) {
|
|
49
49
|
db.exec(`ALTER TABLE memories ADD COLUMN owner TEXT`);
|
|
50
50
|
}
|
|
51
|
-
// SHORTCUT: artifact_ref has no index, so connector deletes and vault lookups scan the tenant; the index is held
|
|
51
|
+
// SHORTCUT: artifact_ref has no index, so connector deletes and vault lookups scan the tenant; the index is held
|
|
52
|
+
// until a schema migration is approved.
|
|
52
53
|
if (!tableHasColumn(db, 'memories', 'artifact_ref')) {
|
|
53
54
|
db.exec(`ALTER TABLE memories ADD COLUMN artifact_ref TEXT`);
|
|
54
55
|
}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
export const v15 = {
|
|
2
2
|
version: 15,
|
|
3
3
|
up: (db) => {
|
|
4
|
-
// Close the NULL-kind bypass: v14 triggers used `WHEN NEW.kind IS NOT NULL AND ...`, so kind=NULL slipped past;
|
|
5
|
-
//
|
|
4
|
+
// Close the NULL-kind bypass: v14 triggers used `WHEN NEW.kind IS NOT NULL AND ...`, so kind=NULL slipped past;
|
|
5
|
+
// now `IS NULL OR NOT IN (...)` rejects it.
|
|
6
|
+
// Add UNIQUE(memory_id, archived_at) to raw_archive so re-archiving in the same instant cannot yield ambiguous
|
|
7
|
+
// audit rows (per-id history stays allowed).
|
|
6
8
|
db.exec(`DROP TRIGGER IF EXISTS trg_memories_kind_check_insert`);
|
|
7
9
|
db.exec(`DROP TRIGGER IF EXISTS trg_memories_kind_check_update`);
|
|
8
10
|
db.exec(`
|
|
@@ -48,10 +48,13 @@ export const v16 = {
|
|
|
48
48
|
// Composite indexes for recall hot paths. Leading column is tenant_id so
|
|
49
49
|
// single-tenant lookups are O(log n).
|
|
50
50
|
db.exec(`CREATE INDEX IF NOT EXISTS idx_memories_tenant_created ON memories(tenant_id, created)`);
|
|
51
|
-
db.exec(`CREATE INDEX IF NOT EXISTS idx_working_memory_tenant
|
|
51
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_working_memory_tenant ` +
|
|
52
|
+
`ON working_memory(tenant_id, importance DESC, created_at DESC)`);
|
|
52
53
|
db.exec(`CREATE INDEX IF NOT EXISTS idx_consolidation_runs_tenant_ts ON consolidation_runs(tenant_id, timestamp DESC)`);
|
|
53
|
-
db.exec(`CREATE INDEX IF NOT EXISTS idx_task_snapshots_tenant_status
|
|
54
|
-
|
|
54
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_task_snapshots_tenant_status ` +
|
|
55
|
+
`ON task_snapshots(tenant_id, status, updated_at DESC)`);
|
|
56
|
+
// Stub auth: api_keys (scrypt-hashed; plaintext returned once) and audit_log (append-only mutation trail), both
|
|
57
|
+
// with tenant_id from day 1
|
|
55
58
|
// so future multi-tenant enforcement is a config flip, not a re-migration.
|
|
56
59
|
db.exec(CREATE_TABLE_API_KEYS_SQL);
|
|
57
60
|
db.exec(CREATE_INDEX_IDX_API_KEYS_TENANT_ACTIVE_SQL);
|
|
@@ -9,7 +9,8 @@ export const v17 = {
|
|
|
9
9
|
memory_id TEXT
|
|
10
10
|
)
|
|
11
11
|
`);
|
|
12
|
-
db.exec(`CREATE INDEX IF NOT EXISTS idx_slack_event_log_memory
|
|
12
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_slack_event_log_memory ` +
|
|
13
|
+
`ON slack_event_log(memory_id) WHERE memory_id IS NOT NULL`);
|
|
13
14
|
db.exec(`
|
|
14
15
|
CREATE TABLE IF NOT EXISTS slack_cursors (
|
|
15
16
|
tenant_id TEXT NOT NULL,
|
|
@@ -2,8 +2,10 @@ import { tableHasColumn } from '../tables.js';
|
|
|
2
2
|
export const v19 = {
|
|
3
3
|
version: 19,
|
|
4
4
|
up: (db) => {
|
|
5
|
-
// Widen slack_dlq with bucketing, retry tracking and the signature/timestamp pair `hippo slack dlq replay`
|
|
6
|
-
//
|
|
5
|
+
// Widen slack_dlq with bucketing, retry tracking and the signature/timestamp pair `hippo slack dlq replay`
|
|
6
|
+
// re-verifies;
|
|
7
|
+
// ALTER ADD COLUMN with DEFAULT is non-destructive, so legacy rows take the defaults. Idempotent via
|
|
8
|
+
// tableHasColumn().
|
|
7
9
|
if (!tableHasColumn(db, 'slack_dlq', 'team_id')) {
|
|
8
10
|
db.exec(`ALTER TABLE slack_dlq ADD COLUMN team_id TEXT`);
|
|
9
11
|
}
|
|
@@ -2,7 +2,8 @@ import { warnDamagedColumn } from '../../util/stored-json.js';
|
|
|
2
2
|
export const v20 = {
|
|
3
3
|
version: 20,
|
|
4
4
|
up: (db) => {
|
|
5
|
-
// GDPR Path A backfill: redact every existing raw_archive.payload_json to the metadata-only shape
|
|
5
|
+
// GDPR Path A backfill: redact every existing raw_archive.payload_json to the metadata-only shape
|
|
6
|
+
// (store/raw-archive.ts); unparseable legacy JSON
|
|
6
7
|
// gets tenant_id='unknown', kind='unknown'. The audit_log remains the compliance record.
|
|
7
8
|
// SAFETY: rows' shape matches the four columns named in the SELECT above.
|
|
8
9
|
const rows = db
|
|
@@ -44,8 +44,10 @@ const BACKFILL_SESSION_HANDOFFS_TENANT_SQL = `
|
|
|
44
44
|
export const v22 = {
|
|
45
45
|
version: 22,
|
|
46
46
|
up: (db) => {
|
|
47
|
-
// session_events and session_handoffs missed the v16 tenant migration (cross-tenant leak): add tenant_id (NOT
|
|
48
|
-
//
|
|
47
|
+
// session_events and session_handoffs missed the v16 tenant migration (cross-tenant leak): add tenant_id (NOT
|
|
48
|
+
// NULL DEFAULT 'default') backfilled from
|
|
49
|
+
// task_snapshots when unambiguous, plus a scope column. Re-run v4/v5 CREATE IF NOT EXISTS first so a partial-init
|
|
50
|
+
// store isn't stamped v22 without tables.
|
|
49
51
|
db.exec(CREATE_TABLE_SESSION_EVENTS_SQL);
|
|
50
52
|
if (!tableHasColumn(db, 'session_events', 'tenant_id')) {
|
|
51
53
|
db.exec(`ALTER TABLE session_events ADD COLUMN tenant_id TEXT NOT NULL DEFAULT 'default'`);
|
|
@@ -59,12 +61,16 @@ export const v22 = {
|
|
|
59
61
|
if (!tableHasColumn(db, 'session_handoffs', 'scope')) {
|
|
60
62
|
db.exec(`ALTER TABLE session_handoffs ADD COLUMN scope TEXT`);
|
|
61
63
|
}
|
|
62
|
-
// Smart backfill: a row whose session_id maps to exactly one tenant in task_snapshots inherits it; ambiguous or
|
|
63
|
-
//
|
|
64
|
+
// Smart backfill: a row whose session_id maps to exactly one tenant in task_snapshots inherits it; ambiguous or
|
|
65
|
+
// unmapped rows keep 'default'.
|
|
66
|
+
// The COUNT(DISTINCT) gate is load-bearing: without it a session_id spanning tenants would silently pick
|
|
67
|
+
// whichever group came first.
|
|
64
68
|
db.exec(BACKFILL_SESSION_EVENTS_TENANT_SQL);
|
|
65
69
|
db.exec(BACKFILL_SESSION_HANDOFFS_TENANT_SQL);
|
|
66
|
-
db.exec(`CREATE INDEX IF NOT EXISTS idx_session_events_tenant_session
|
|
67
|
-
|
|
70
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_session_events_tenant_session ` +
|
|
71
|
+
`ON session_events(tenant_id, session_id, created_at DESC, id DESC)`);
|
|
72
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_session_handoffs_tenant_session ` +
|
|
73
|
+
`ON session_handoffs(tenant_id, session_id, created_at DESC)`);
|
|
68
74
|
},
|
|
69
75
|
};
|
|
70
76
|
//# sourceMappingURL=v22.js.map
|
|
@@ -2,7 +2,8 @@ import { tableHasColumn, tableExists } from '../tables.js';
|
|
|
2
2
|
export const v23 = {
|
|
3
3
|
version: 23,
|
|
4
4
|
up: (db) => {
|
|
5
|
-
// task_snapshots: add scope so all three continuity tables carry it; self-heal partial-init stores via CREATE
|
|
5
|
+
// task_snapshots: add scope so all three continuity tables carry it; self-heal partial-init stores via CREATE
|
|
6
|
+
// TABLE IF NOT EXISTS.
|
|
6
7
|
db.exec(`
|
|
7
8
|
CREATE TABLE IF NOT EXISTS task_snapshots (
|
|
8
9
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
@@ -20,8 +21,10 @@ export const v23 = {
|
|
|
20
21
|
if (!tableHasColumn(db, 'task_snapshots', 'scope')) {
|
|
21
22
|
db.exec(`ALTER TABLE task_snapshots ADD COLUMN scope TEXT`);
|
|
22
23
|
}
|
|
23
|
-
// Quarantine pre-existing continuity rows with NULL scope as 'unknown:legacy' so the recall default-deny filter
|
|
24
|
-
//
|
|
24
|
+
// Quarantine pre-existing continuity rows with NULL scope as 'unknown:legacy' so the recall default-deny filter
|
|
25
|
+
// excludes them for no-scope callers;
|
|
26
|
+
// new rows legitimately carry NULL. UPDATE only tables that exist (v22 healing is skipped on some paths); WHERE
|
|
27
|
+
// scope IS NULL keeps it idempotent.
|
|
25
28
|
if (tableExists(db, 'task_snapshots')) {
|
|
26
29
|
db.exec(`UPDATE task_snapshots SET scope = 'unknown:legacy' WHERE scope IS NULL`);
|
|
27
30
|
}
|
|
@@ -56,18 +56,21 @@ export const v24 = {
|
|
|
56
56
|
// GitHub connector schema.
|
|
57
57
|
// Six tables + a min_compatible_binary meta row for rollback safety.
|
|
58
58
|
db.exec(CREATE_TABLE_GITHUB_EVENT_LOG_SQL);
|
|
59
|
-
db.exec(`CREATE INDEX IF NOT EXISTS idx_github_event_log_memory
|
|
59
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_github_event_log_memory ` +
|
|
60
|
+
`ON github_event_log(memory_id) WHERE memory_id IS NOT NULL`);
|
|
60
61
|
db.exec(`CREATE INDEX IF NOT EXISTS idx_github_event_log_delivery ON github_event_log(delivery_id)`);
|
|
61
62
|
db.exec(CREATE_TABLE_GITHUB_CURSORS_SQL);
|
|
62
63
|
db.exec(CREATE_TABLE_GITHUB_DLQ_SQL);
|
|
63
64
|
db.exec(`CREATE INDEX IF NOT EXISTS idx_github_dlq_tenant_received ON github_dlq(tenant_id, received_at)`);
|
|
64
65
|
db.exec(CREATE_TABLE_GITHUB_INSTALLATIONS_SQL);
|
|
65
|
-
// PAT-mode multi-tenant routing: maps repo_full_name to a tenant when the webhook envelope has no `installation`
|
|
66
|
+
// PAT-mode multi-tenant routing: maps repo_full_name to a tenant when the webhook envelope has no `installation`
|
|
67
|
+
// field.
|
|
66
68
|
// Composite PK so one repo can be visible to several tenants; the collision is on the (repo, tenant) pair.
|
|
67
69
|
db.exec(CREATE_TABLE_GITHUB_REPOSITORIES_SQL);
|
|
68
70
|
// Rollback-safety guard: an older binary lacks the *:private:* default-deny and would leak
|
|
69
71
|
// github:private:* rows; the startup guard refuses a DB whose min_compatible_binary is newer.
|
|
70
|
-
db.prepare(`INSERT INTO meta(key, value) VALUES('min_compatible_binary', ?)
|
|
72
|
+
db.prepare(`INSERT INTO meta(key, value) VALUES('min_compatible_binary', ?) ` +
|
|
73
|
+
`ON CONFLICT(key) DO UPDATE SET value=excluded.value`).run('1.2.1');
|
|
71
74
|
},
|
|
72
75
|
};
|
|
73
76
|
//# sourceMappingURL=v24.js.map
|
|
@@ -2,7 +2,8 @@ import { tableHasColumn } from '../tables.js';
|
|
|
2
2
|
export const v25 = {
|
|
3
3
|
version: 25,
|
|
4
4
|
up: (db) => {
|
|
5
|
-
// DAG-aware recall: three additive optional columns cache summary metadata so the assembler need not re-walk the
|
|
5
|
+
// DAG-aware recall: three additive optional columns cache summary metadata so the assembler need not re-walk the
|
|
6
|
+
// DAG.
|
|
6
7
|
// No min_compatible_binary bump: older binaries see them as NULL / 0 and behave as before.
|
|
7
8
|
if (!tableHasColumn(db, 'memories', 'descendant_count')) {
|
|
8
9
|
db.exec(`ALTER TABLE memories ADD COLUMN descendant_count INTEGER NOT NULL DEFAULT 0`);
|
|
@@ -13,7 +14,8 @@ export const v25 = {
|
|
|
13
14
|
if (!tableHasColumn(db, 'memories', 'latest_at')) {
|
|
14
15
|
db.exec(`ALTER TABLE memories ADD COLUMN latest_at TEXT`);
|
|
15
16
|
}
|
|
16
|
-
// Backfill descendant_count for existing level-2 summary rows via dag_parent_id = summary id; level-3 (entity
|
|
17
|
+
// Backfill descendant_count for existing level-2 summary rows via dag_parent_id = summary id; level-3 (entity
|
|
18
|
+
// profiles) is not built, so it stays 0.
|
|
17
19
|
db.exec(`
|
|
18
20
|
UPDATE memories
|
|
19
21
|
SET descendant_count = (
|
|
@@ -2,8 +2,10 @@ import { tableHasColumn, tableExists } from '../tables.js';
|
|
|
2
2
|
export const v26 = {
|
|
3
3
|
version: 26,
|
|
4
4
|
up: (db) => {
|
|
5
|
-
// Add api_keys.role for the admin/member split gating /v1/sleep; existing keys backfill to 'admin' via DEFAULT.
|
|
6
|
-
//
|
|
5
|
+
// Add api_keys.role for the admin/member split gating /v1/sleep; existing keys backfill to 'admin' via DEFAULT.
|
|
6
|
+
// No min_compatible_binary bump.
|
|
7
|
+
// Guard on tableExists: a partial-v16 DB without api_keys would crash this ALTER and block later migrations (v27
|
|
8
|
+
// heals it with role present).
|
|
7
9
|
if (tableExists(db, 'api_keys') && !tableHasColumn(db, 'api_keys', 'role')) {
|
|
8
10
|
db.exec(`ALTER TABLE api_keys ADD COLUMN role TEXT NOT NULL DEFAULT 'admin'`);
|
|
9
11
|
}
|
|
@@ -2,8 +2,10 @@ import { tableHasColumn, tableExists } from '../tables.js';
|
|
|
2
2
|
export const v27 = {
|
|
3
3
|
version: 27,
|
|
4
4
|
up: (db) => {
|
|
5
|
-
// Self-heal: re-assert the v16 schema (api_keys + audit_log) on stores stamped past v16 whose tables are missing
|
|
6
|
-
//
|
|
5
|
+
// Self-heal: re-assert the v16 schema (api_keys + audit_log) on stores stamped past v16 whose tables are missing
|
|
6
|
+
// (dropped table or old-backup restore).
|
|
7
|
+
// All CREATE IF NOT EXISTS, so a no-op for healthy stores; includes the role column so v26's ALTER is not needed
|
|
8
|
+
// on this path.
|
|
7
9
|
db.exec(`
|
|
8
10
|
CREATE TABLE IF NOT EXISTS api_keys (
|
|
9
11
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
@@ -32,7 +34,8 @@ export const v27 = {
|
|
|
32
34
|
)
|
|
33
35
|
`);
|
|
34
36
|
db.exec(`CREATE INDEX IF NOT EXISTS idx_audit_log_tenant_ts ON audit_log(tenant_id, ts DESC)`);
|
|
35
|
-
// Belt-and-braces: backfill role on an api_keys table that exists without it (v16-shape table that v26's ALTER
|
|
37
|
+
// Belt-and-braces: backfill role on an api_keys table that exists without it (v16-shape table that v26's ALTER
|
|
38
|
+
// skipped on an earlier broken run).
|
|
36
39
|
if (tableExists(db, 'api_keys') && !tableHasColumn(db, 'api_keys', 'role')) {
|
|
37
40
|
db.exec(`ALTER TABLE api_keys ADD COLUMN role TEXT NOT NULL DEFAULT 'admin'`);
|
|
38
41
|
}
|
|
@@ -2,8 +2,10 @@ import { tableHasColumn } from '../tables.js';
|
|
|
2
2
|
export const v28 = {
|
|
3
3
|
version: 28,
|
|
4
4
|
up: (db) => {
|
|
5
|
-
// Dirty-flag persistence for level-2 DAG summaries; dag_level_3_built_at lands now so the entity-profile path
|
|
6
|
-
//
|
|
5
|
+
// Dirty-flag persistence for level-2 DAG summaries; dag_level_3_built_at lands now so the entity-profile path
|
|
6
|
+
// needs no second migration.
|
|
7
|
+
// Columns are additive and DEFAULTed/nullable, so no min_compatible_binary bump. Column-only guard: memories
|
|
8
|
+
// comes from v1 and always exists.
|
|
7
9
|
if (!tableHasColumn(db, 'memories', 'summary_dirty')) {
|
|
8
10
|
db.exec(`ALTER TABLE memories ADD COLUMN summary_dirty INTEGER NOT NULL DEFAULT 0`);
|
|
9
11
|
}
|
|
@@ -52,8 +52,10 @@ const CREATE_TRIGGER_TRG_PREDICTIONS_TENANT_MATCH_UPDATE_SQL = `
|
|
|
52
52
|
export const v29 = {
|
|
53
53
|
version: 29,
|
|
54
54
|
up: (db) => {
|
|
55
|
-
// Prediction first-class object: claim_text is duplicated so deleting the memory loses nothing; memory_id is
|
|
56
|
-
//
|
|
55
|
+
// Prediction first-class object: claim_text is duplicated so deleting the memory loses nothing; memory_id is
|
|
56
|
+
// NULLABLE ON DELETE SET NULL.
|
|
57
|
+
// Tenant-match triggers replace a composite FK, which is incompatible with ON DELETE SET NULL; closure_state is
|
|
58
|
+
// CHECKed to open|closed|closed-unknown.
|
|
57
59
|
if (!tableExists(db, 'predictions')) {
|
|
58
60
|
db.exec(CREATE_TABLE_PREDICTIONS_SQL);
|
|
59
61
|
db.exec(CREATE_INDEX_IDX_PREDICTIONS_TENANT_CLASS_SQL);
|
|
@@ -48,7 +48,8 @@ const TRG_DECISIONS_TENANT_MATCH_UPDATE = `
|
|
|
48
48
|
END;
|
|
49
49
|
END
|
|
50
50
|
`;
|
|
51
|
-
// Cross-tenant safety vs the successor decision (self-FK): superseded_by is set only via the supersede UPDATE and the
|
|
51
|
+
// Cross-tenant safety vs the successor decision (self-FK): superseded_by is set only via the supersede UPDATE and the
|
|
52
|
+
// successor,
|
|
52
53
|
// which already exists in the same transaction when this fires, must share the tenant.
|
|
53
54
|
const TRG_DECISIONS_SUPERSEDE_TENANT_MATCH_UPDATE = `
|
|
54
55
|
CREATE TRIGGER IF NOT EXISTS trg_decisions_supersede_tenant_match_update
|
|
@@ -65,8 +66,10 @@ const TRG_DECISIONS_SUPERSEDE_TENANT_MATCH_UPDATE = `
|
|
|
65
66
|
export const v30 = {
|
|
66
67
|
version: 30,
|
|
67
68
|
up: (db) => {
|
|
68
|
-
// Decision first-class object, the source of truth for `hippo decide`; the memory mirror serves recall only,
|
|
69
|
-
//
|
|
69
|
+
// Decision first-class object, the source of truth for `hippo decide`; the memory mirror serves recall only,
|
|
70
|
+
// memory_id NULLABLE ON DELETE SET NULL.
|
|
71
|
+
// status active|superseded|closed (closed = retired without successor); a same-tenant trigger on superseded_by
|
|
72
|
+
// blocks cross-tenant supersession.
|
|
70
73
|
if (!tableExists(db, 'decisions')) {
|
|
71
74
|
db.exec(DECISIONS_TABLE);
|
|
72
75
|
db.exec(IDX_DECISIONS_TENANT_STATUS);
|
|
@@ -50,8 +50,10 @@ const CREATE_TRIGGER_TRG_INCIDENTS_TENANT_MATCH_UPDATE_SQL = `
|
|
|
50
50
|
export const v31 = {
|
|
51
51
|
version: 31,
|
|
52
52
|
up: (db) => {
|
|
53
|
-
// Incident first-class object: a postmortem capsule with an open -> resolved -> closed lifecycle (no supersede)
|
|
54
|
-
//
|
|
53
|
+
// Incident first-class object: a postmortem capsule with an open -> resolved -> closed lifecycle (no supersede)
|
|
54
|
+
// and linked receipts (JSON ids).
|
|
55
|
+
// Memory mirror is for recall only (memory_id NULLABLE ON DELETE SET NULL); BEFORE INSERT/UPDATE triggers mirror
|
|
56
|
+
// the v30 tenant-match triggers.
|
|
55
57
|
if (!tableExists(db, 'incidents')) {
|
|
56
58
|
db.exec(CREATE_TABLE_INCIDENTS_SQL);
|
|
57
59
|
db.exec(CREATE_INDEX_IDX_INCIDENTS_TENANT_STATUS_SQL);
|
|
@@ -52,7 +52,8 @@ const TRG_PROCESSES_TENANT_MATCH_UPDATE = `
|
|
|
52
52
|
END;
|
|
53
53
|
END
|
|
54
54
|
`;
|
|
55
|
-
// Cross-tenant safety vs the successor process (self-FK; mirrors the v30 supersede trigger): superseded_by is set only
|
|
55
|
+
// Cross-tenant safety vs the successor process (self-FK; mirrors the v30 supersede trigger): superseded_by is set only
|
|
56
|
+
// via the supersede UPDATE
|
|
56
57
|
// and the successor, already present in the same transaction, must share the tenant.
|
|
57
58
|
const TRG_PROCESSES_SUPERSEDE_TENANT_MATCH_UPDATE = `
|
|
58
59
|
CREATE TRIGGER IF NOT EXISTS trg_processes_supersede_tenant_match_update
|
|
@@ -69,8 +70,10 @@ const TRG_PROCESSES_SUPERSEDE_TENANT_MATCH_UPDATE = `
|
|
|
69
70
|
export const v32 = {
|
|
70
71
|
version: 32,
|
|
71
72
|
up: (db) => {
|
|
72
|
-
// Process first-class object (living process map): it evolves via the v30 supersede path, each version recording
|
|
73
|
-
//
|
|
73
|
+
// Process first-class object (living process map): it evolves via the v30 supersede path, each version recording
|
|
74
|
+
// change_summary and full steps (JSON).
|
|
75
|
+
// Combines the v31 tenant-match trigger pair with the v30 superseded_by self-FK; version is server-derived
|
|
76
|
+
// (predecessor + 1); only an active head closes.
|
|
74
77
|
if (!tableExists(db, 'processes')) {
|
|
75
78
|
db.exec(PROCESSES_TABLE);
|
|
76
79
|
db.exec(IDX_PROCESSES_TENANT_STATUS);
|
|
@@ -75,8 +75,10 @@ const TRG_POLICIES_SUPERSEDE_TENANT_MATCH_UPDATE = `
|
|
|
75
75
|
export const v33 = {
|
|
76
76
|
version: 33,
|
|
77
77
|
up: (db) => {
|
|
78
|
-
// Policy first-class object: a rule in force over an effective-time range (valid_to nullable = open-ended);
|
|
79
|
-
//
|
|
78
|
+
// Policy first-class object: a rule in force over an effective-time range (valid_to nullable = open-ended);
|
|
79
|
+
// supersedes like v32 processes.
|
|
80
|
+
// Dates are ISO-8601 (toISOString) at the store boundary so values sort lexically and the half-open [valid_from,
|
|
81
|
+
// valid_to) as-of comparison is correct.
|
|
80
82
|
if (!tableExists(db, 'policies')) {
|
|
81
83
|
db.exec(POLICIES_TABLE);
|
|
82
84
|
db.exec(IDX_POLICIES_TENANT_STATUS);
|
|
@@ -69,7 +69,8 @@ const TRG_SKILLS_SUPERSEDE_TENANT_MATCH_UPDATE = `
|
|
|
69
69
|
export const v34 = {
|
|
70
70
|
version: 34,
|
|
71
71
|
up: (db) => {
|
|
72
|
-
// Skill first-class object: `instructions` plus optional `trigger_text`, superseding like v32 processes;
|
|
72
|
+
// Skill first-class object: `instructions` plus optional `trigger_text`, superseding like v32 processes;
|
|
73
|
+
// exportSkills writes it to AGENTS.md / CLAUDE.md.
|
|
73
74
|
// The column is `trigger_text`, not `trigger`, because TRIGGER is a SQLite reserved keyword.
|
|
74
75
|
if (!tableExists(db, 'skills')) {
|
|
75
76
|
db.exec(SKILLS_TABLE);
|
|
@@ -72,7 +72,8 @@ const TRG_PROJECT_BRIEFS_SUPERSEDE_TENANT_MATCH_UPDATE = `
|
|
|
72
72
|
export const v35 = {
|
|
73
73
|
version: 35,
|
|
74
74
|
up: (db) => {
|
|
75
|
-
// project_brief first-class object: repo-scoped `summary` superseding like v34 skills; refreshBrief
|
|
75
|
+
// project_brief first-class object: repo-scoped `summary` superseding like v34 skills; refreshBrief
|
|
76
|
+
// (objects/project-briefs.ts) builds it from receipts.
|
|
76
77
|
// The schema needs only `repo`; column names were checked against SQLite reserved words.
|
|
77
78
|
if (!tableExists(db, 'project_briefs')) {
|
|
78
79
|
db.exec(PROJECT_BRIEFS_TABLE);
|
|
@@ -72,7 +72,8 @@ const TRG_CUSTOMER_NOTES_SUPERSEDE_TENANT_MATCH_UPDATE = `
|
|
|
72
72
|
export const v36 = {
|
|
73
73
|
version: 36,
|
|
74
74
|
up: (db) => {
|
|
75
|
-
// customer_note first-class object: a note on a customer, superseding like v35 project_briefs; `customer` is a
|
|
75
|
+
// customer_note first-class object: a note on a customer, superseding like v35 project_briefs; `customer` is a
|
|
76
|
+
// free-form id (no FK: no entities table).
|
|
76
77
|
// Many notes per customer, each its own supersede chain. Column names were checked against SQLite reserved words.
|
|
77
78
|
if (!tableExists(db, 'customer_notes')) {
|
|
78
79
|
db.exec(CUSTOMER_NOTES_TABLE);
|
|
@@ -41,7 +41,8 @@ const GRAPH_EXTRACTION_QUEUE_TABLE = `
|
|
|
41
41
|
FOREIGN KEY (memory_id) REFERENCES memories(id) ON DELETE CASCADE
|
|
42
42
|
)
|
|
43
43
|
`;
|
|
44
|
-
// entities guard: source_kind must equal the FK'd memory's actual kind (raw or a lying source_kind ABORTs) and tenant
|
|
44
|
+
// entities guard: source_kind must equal the FK'd memory's actual kind (raw or a lying source_kind ABORTs) and tenant
|
|
45
|
+
// must match,
|
|
45
46
|
// on INSERT and on UPDATE (when memory_id/source_kind/tenant_id change).
|
|
46
47
|
const TRG_ENTITIES_CONSOLIDATED_ONLY_INSERT = `
|
|
47
48
|
CREATE TRIGGER IF NOT EXISTS trg_entities_consolidated_only_insert
|
|
@@ -138,7 +139,8 @@ const TRG_GRAPH_QUEUE_CONSOLIDATED_ONLY_UPDATE = `
|
|
|
138
139
|
END;
|
|
139
140
|
END
|
|
140
141
|
`;
|
|
141
|
-
// Reverse guard: graph triggers fire only on graph-table writes, so reclassifying an indexed memory to raw (or tenant)
|
|
142
|
+
// Reverse guard: graph triggers fire only on graph-table writes, so reclassifying an indexed memory to raw (or tenant)
|
|
143
|
+
// would break the no-raw invariant.
|
|
142
144
|
// Block both while the graph references the memory; the EXISTS checks run only when kind becomes raw or tenant changes.
|
|
143
145
|
const TRG_MEMORIES_GRAPH_REFERENCED_GUARD = `
|
|
144
146
|
CREATE TRIGGER IF NOT EXISTS trg_memories_graph_referenced_guard
|
|
@@ -153,7 +155,8 @@ const TRG_MEMORIES_GRAPH_REFERENCED_GUARD = `
|
|
|
153
155
|
SELECT RAISE(ABORT, 'cannot change the kind or tenant of a memory while the graph references it (E3.3 graph-on-consolidated guard); a graph-referenced memory is immutable in kind/tenant - rebuild/remove the graph rows first, or rebuild them after supersession');
|
|
154
156
|
END
|
|
155
157
|
`;
|
|
156
|
-
// Second reverse guard: the entity UPDATE trigger does not re-validate existing relations, so a cross-tenant entity
|
|
158
|
+
// Second reverse guard: the entity UPDATE trigger does not re-validate existing relations, so a cross-tenant entity
|
|
159
|
+
// move would leave a tenant-A relation
|
|
157
160
|
// pointing at a tenant-B entity. Block the tenant move while any relation references the entity.
|
|
158
161
|
const TRG_ENTITIES_NO_TENANT_MOVE_WHEN_REFERENCED = `
|
|
159
162
|
CREATE TRIGGER IF NOT EXISTS trg_entities_no_tenant_move_when_referenced
|
|
@@ -167,8 +170,10 @@ const TRG_ENTITIES_NO_TENANT_MOVE_WHEN_REFERENCED = `
|
|
|
167
170
|
export const v37 = {
|
|
168
171
|
version: 37,
|
|
169
172
|
up: (db) => {
|
|
170
|
-
// Graph-on-consolidated guard: entities, relations and graph_extraction_queue may reference only consolidated
|
|
171
|
-
//
|
|
173
|
+
// Graph-on-consolidated guard: entities, relations and graph_extraction_queue may reference only consolidated
|
|
174
|
+
// memories (distilled|superseded), never raw.
|
|
175
|
+
// The kind match needs a subquery, so it is a BEFORE INSERT and UPDATE trigger (INSERT-only is bypassable).
|
|
176
|
+
// rel_type avoids the reserved word REFERENCES.
|
|
172
177
|
if (!tableExists(db, 'entities')) {
|
|
173
178
|
db.exec(ENTITIES_TABLE);
|
|
174
179
|
db.exec(`CREATE INDEX IF NOT EXISTS idx_entities_tenant ON entities(tenant_id)`);
|