hippo-memory 1.70.0 → 1.72.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 +2 -2
- package/dist/agent-memories/apply.d.ts +0 -11
- package/dist/agent-memories/apply.js +6 -21
- package/dist/agent-memories/claude-code.d.ts +4 -2
- package/dist/agent-memories/claude-code.js +15 -6
- package/dist/agent-memories/codex.js +1 -1
- package/dist/agent-memories/copilot.d.ts +1 -3
- package/dist/agent-memories/copilot.js +1 -17
- package/dist/agent-memories/files.js +23 -12
- package/dist/agent-memories/markdown.d.ts +1 -3
- package/dist/agent-memories/markdown.js +1 -3
- package/dist/agent-memories/project-folds.d.ts +10 -0
- package/dist/agent-memories/project-folds.js +34 -0
- package/dist/agent-memories/report.js +2 -1
- package/dist/agent-memories/sync.d.ts +4 -2
- package/dist/agent-memories/sync.js +18 -11
- package/dist/api/assemble.d.ts +7 -44
- package/dist/api/assemble.js +3 -23
- package/dist/api/audit.d.ts +33 -1
- package/dist/api/audit.js +48 -1
- package/dist/api/auth.d.ts +20 -26
- package/dist/api/auth.js +43 -29
- package/dist/api/auto-sleep.d.ts +5 -2
- package/dist/api/auto-sleep.js +9 -5
- package/dist/api/availability.d.ts +2 -15
- package/dist/api/availability.js +4 -18
- package/dist/api/cards.d.ts +42 -0
- package/dist/api/cards.js +52 -0
- package/dist/api/conflicts.d.ts +28 -0
- package/dist/api/conflicts.js +61 -0
- package/dist/api/context-render.js +4 -3
- package/dist/api/context-select.js +12 -15
- package/dist/api/context-types.d.ts +10 -35
- package/dist/api/context.d.ts +5 -22
- package/dist/api/context.js +38 -46
- package/dist/api/continuity.d.ts +47 -0
- package/dist/api/continuity.js +66 -0
- package/dist/{cli → api}/correction-latency.d.ts +2 -14
- package/dist/{cli → api}/correction-latency.js +2 -14
- package/dist/api/dormant.d.ts +5 -21
- package/dist/api/dormant.js +11 -28
- package/dist/api/drill-down.d.ts +7 -46
- package/dist/api/drill-down.js +6 -27
- package/dist/api/embeddings.d.ts +17 -0
- package/dist/api/embeddings.js +28 -0
- package/dist/api/error-reply.d.ts +8 -0
- package/dist/api/error-reply.js +21 -0
- package/dist/api/forget.d.ts +11 -26
- package/dist/api/forget.js +23 -35
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +5 -9
- package/dist/api/graph.d.ts +8 -0
- package/dist/api/graph.js +7 -0
- package/dist/api/index.d.ts +6 -2
- package/dist/api/index.js +6 -2
- package/dist/api/instruction-detect.js +21 -6
- package/dist/api/learn.d.ts +4 -0
- package/dist/api/learn.js +53 -27
- package/dist/api/ledger-db.d.ts +2 -5
- package/dist/api/ledger-db.js +5 -35
- package/dist/api/memories.d.ts +23 -0
- package/dist/api/memories.js +46 -0
- package/dist/api/objects.d.ts +9 -0
- package/dist/api/objects.js +11 -0
- package/dist/api/on-store.js +5 -3
- package/dist/api/outcome.js +1 -1
- package/dist/api/pilot-arm.d.ts +1 -11
- package/dist/api/pilot-arm.js +5 -45
- package/dist/api/predictions.d.ts +11 -0
- package/dist/api/predictions.js +24 -0
- package/dist/api/projects.d.ts +21 -0
- package/dist/api/projects.js +24 -0
- package/dist/api/promote.d.ts +13 -17
- package/dist/api/promote.js +12 -20
- package/dist/api/prompt-hook.d.ts +19 -6
- package/dist/api/prompt-hook.js +54 -13
- package/dist/api/provenance-coverage.d.ts +14 -0
- package/dist/{cli → api}/provenance-coverage.js +2 -6
- package/dist/api/recall-cli.d.ts +58 -0
- package/dist/api/recall-cli.js +103 -0
- package/dist/api/recall-core.js +17 -9
- package/dist/api/recall-finish.d.ts +53 -0
- package/dist/api/recall-finish.js +30 -0
- package/dist/api/recall-history.d.ts +17 -84
- package/dist/api/recall-history.js +15 -88
- package/dist/api/recall-pipeline.d.ts +2 -3
- package/dist/api/recall-pipeline.js +21 -15
- package/dist/api/recall-request.js +1 -1
- package/dist/api/recall-types.d.ts +64 -304
- package/dist/api/recall.d.ts +3 -34
- package/dist/api/recall.js +63 -89
- package/dist/api/refine.d.ts +7 -0
- package/dist/api/refine.js +10 -0
- package/dist/api/remember-local.d.ts +57 -0
- package/dist/api/remember-local.js +90 -0
- package/dist/api/remember.d.ts +20 -2
- package/dist/api/remember.js +16 -3
- package/dist/api/session-end.d.ts +22 -0
- package/dist/api/session-end.js +101 -0
- package/dist/api/sleep-run.d.ts +2 -4
- package/dist/api/sleep-run.js +28 -28
- package/dist/api/sleep.d.ts +9 -28
- package/dist/api/status.d.ts +24 -0
- package/dist/api/status.js +40 -0
- package/dist/api/store-init.d.ts +4 -0
- package/dist/api/store-init.js +9 -0
- package/dist/api/tokens.d.ts +3 -10
- package/dist/api/tokens.js +4 -11
- package/dist/api/types.d.ts +8 -29
- package/dist/api/types.js +10 -23
- package/dist/capture/caller-session.d.ts +0 -3
- package/dist/capture/caller-session.js +1 -12
- package/dist/capture/capture-error.d.ts +2 -2
- package/dist/capture/capture-error.js +23 -18
- package/dist/capture/codex-patch.js +3 -1
- package/dist/capture/command.d.ts +4 -12
- package/dist/capture/command.js +39 -114
- package/dist/capture/compact.d.ts +4 -15
- package/dist/capture/compact.js +26 -30
- package/dist/capture/compaction-items-caller.js +11 -20
- package/dist/capture/compaction-record.d.ts +7 -93
- package/dist/capture/compaction-record.js +34 -399
- package/dist/capture/compaction-spool.d.ts +5 -3
- package/dist/capture/compaction-spool.js +21 -7
- package/dist/capture/copilot-transcript.d.ts +2 -1
- package/dist/capture/copilot-transcript.js +2 -1
- package/dist/capture/extract.d.ts +5 -2
- package/dist/capture/extract.js +4 -3
- package/dist/capture/failure-caller.d.ts +1 -1
- package/dist/capture/failure-caller.js +21 -16
- package/dist/capture/failure-reading.d.ts +2 -1
- package/dist/capture/failure-reading.js +7 -9
- package/dist/capture/pre-compact-caller.js +5 -4
- package/dist/capture/session-digest.d.ts +1 -1
- package/dist/capture/session-digest.js +17 -10
- package/dist/capture/session-end-caller.js +2 -1
- package/dist/capture/session-worker.js +3 -4
- package/dist/capture/transcript.d.ts +4 -11
- package/dist/capture/transcript.js +10 -21
- package/dist/capture/working-state.d.ts +4 -2
- package/dist/capture/working-state.js +4 -2
- package/dist/cli/api-context.d.ts +3 -0
- package/dist/cli/api-context.js +6 -0
- package/dist/cli/audit-prune.d.ts +1 -59
- package/dist/cli/audit-prune.js +2 -61
- package/dist/cli/audit.d.ts +1 -1
- package/dist/cli/audit.js +42 -43
- package/dist/cli/auth.d.ts +2 -2
- package/dist/cli/auth.js +61 -44
- package/dist/cli/briefs.d.ts +1 -4
- package/dist/cli/briefs.js +42 -301
- package/dist/cli/card.d.ts +2 -2
- package/dist/cli/card.js +63 -56
- package/dist/cli/client.d.ts +12 -27
- package/dist/cli/client.js +41 -44
- package/dist/cli/compact-resume-payload.js +4 -3
- package/dist/cli/context.d.ts +2 -3
- package/dist/cli/context.js +22 -18
- package/dist/cli/continuity.d.ts +6 -6
- package/dist/cli/continuity.js +81 -86
- package/dist/cli/curate.d.ts +13 -17
- package/dist/cli/curate.js +88 -116
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +55 -34
- package/dist/cli/decisions.d.ts +2 -4
- package/dist/cli/decisions.js +18 -309
- package/dist/cli/eval.d.ts +1 -1
- package/dist/cli/eval.js +27 -26
- package/dist/cli/exit.d.ts +6 -0
- package/dist/cli/exit.js +11 -0
- package/dist/cli/explain.d.ts +2 -3
- package/dist/cli/explain.js +25 -27
- package/dist/cli/flag-values.d.ts +6 -1
- package/dist/cli/flag-values.js +42 -15
- package/dist/cli/flags.d.ts +0 -288
- package/dist/cli/flags.js +3 -138
- package/dist/cli/github.d.ts +14 -0
- package/dist/{connectors/github/cli-impl.js → cli/github.js} +43 -71
- package/dist/cli/goals.d.ts +2 -2
- package/dist/cli/goals.js +46 -50
- package/dist/cli/graph.d.ts +3 -0
- package/dist/cli/graph.js +83 -0
- package/dist/cli/hook-runtime.d.ts +12 -32
- package/dist/cli/hook-runtime.js +21 -64
- package/dist/cli/incidents.d.ts +3 -0
- package/dist/cli/incidents.js +112 -0
- package/dist/cli/init.d.ts +2 -2
- package/dist/cli/init.js +33 -30
- package/dist/cli/install-steps.d.ts +2 -1
- package/dist/cli/install-steps.js +13 -14
- package/dist/cli/last-sleep.d.ts +2 -1
- package/dist/cli/last-sleep.js +4 -1
- package/dist/cli/lenient-id.d.ts +2 -0
- package/dist/cli/lenient-id.js +13 -0
- package/dist/cli/maintenance.d.ts +5 -5
- package/dist/cli/maintenance.js +37 -43
- package/dist/cli/notes.d.ts +2 -0
- package/dist/cli/notes.js +41 -0
- package/dist/cli/object-verbs.js +4 -3
- package/dist/cli/open-browser.d.ts +14 -0
- package/dist/cli/open-browser.js +26 -0
- package/dist/cli/owner-validation.d.ts +5 -28
- package/dist/cli/owner-validation.js +5 -28
- package/dist/cli/playbooks.d.ts +3 -4
- package/dist/cli/playbooks.js +131 -300
- package/dist/cli/predictions.d.ts +3 -0
- package/dist/cli/predictions.js +175 -0
- package/dist/cli/print.d.ts +2 -5
- package/dist/cli/print.js +3 -5
- package/dist/cli/projects.d.ts +2 -2
- package/dist/cli/projects.js +31 -25
- package/dist/cli/quality-repair-once.d.ts +1 -1
- package/dist/cli/quality-repair-once.js +7 -6
- package/dist/cli/recall.d.ts +2 -4
- package/dist/cli/recall.js +67 -137
- package/dist/cli/refine-llm.d.ts +5 -31
- package/dist/cli/refine-llm.js +23 -50
- package/dist/cli/remember.d.ts +3 -3
- package/dist/cli/remember.js +134 -192
- package/dist/cli/scheduler.d.ts +2 -17
- package/dist/cli/scheduler.js +14 -19
- package/dist/cli/serve.js +23 -14
- package/dist/cli/session-hooks.d.ts +11 -19
- package/dist/cli/session-hooks.js +143 -214
- package/dist/cli/setup.d.ts +4 -4
- package/dist/cli/setup.js +35 -30
- package/dist/cli/shared.d.ts +7 -25
- package/dist/cli/shared.js +17 -60
- package/dist/cli/slack.d.ts +2 -2
- package/dist/cli/slack.js +19 -23
- package/dist/cli/sleep-render.js +6 -3
- package/dist/cli/sleep.d.ts +3 -2
- package/dist/cli/sleep.js +17 -49
- package/dist/cli/status.d.ts +11 -14
- package/dist/cli/status.js +74 -120
- package/dist/cli/stdin.d.ts +4 -6
- package/dist/cli/stdin.js +2 -3
- package/dist/cli/transfer.d.ts +9 -9
- package/dist/cli/transfer.js +87 -108
- package/dist/cli/usage.d.ts +0 -79
- package/dist/cli/usage.js +1 -689
- package/dist/cli/verb-row.d.ts +32 -0
- package/dist/cli/verb-row.js +6 -0
- package/dist/cli/verbs/health.d.ts +27 -0
- package/dist/cli/verbs/health.js +232 -0
- package/dist/cli/verbs/memory.d.ts +16 -0
- package/dist/cli/verbs/memory.js +244 -0
- package/dist/cli/verbs/objects.d.ts +20 -0
- package/dist/cli/verbs/objects.js +254 -0
- package/dist/cli/verbs/sessions.d.ts +31 -0
- package/dist/cli/verbs/sessions.js +312 -0
- package/dist/cli/verbs.d.ts +81 -0
- package/dist/cli/verbs.js +7 -0
- package/dist/cli/versioned-verbs.d.ts +51 -0
- package/dist/cli/versioned-verbs.js +79 -0
- package/dist/cli.d.ts +1 -654
- package/dist/cli.js +44 -510
- package/dist/connectors/dlq.d.ts +39 -3
- package/dist/connectors/dlq.js +37 -3
- package/dist/connectors/github/backfill.d.ts +5 -25
- package/dist/connectors/github/backfill.js +26 -52
- package/dist/connectors/github/deletion.d.ts +4 -18
- package/dist/connectors/github/deletion.js +2 -15
- package/dist/connectors/github/dlq.d.ts +8 -33
- package/dist/connectors/github/dlq.js +34 -93
- package/dist/connectors/github/ingest.d.ts +4 -12
- package/dist/connectors/github/ingest.js +5 -36
- package/dist/connectors/github/octokit-client.d.ts +4 -16
- package/dist/connectors/github/octokit-client.js +27 -24
- package/dist/connectors/github/ratelimit.d.ts +3 -14
- package/dist/connectors/github/ratelimit.js +3 -14
- package/dist/connectors/github/scope.d.ts +3 -5
- package/dist/connectors/github/scope.js +3 -5
- package/dist/connectors/github/signature.d.ts +4 -26
- package/dist/connectors/github/signature.js +4 -26
- package/dist/connectors/github/tenant-routing.d.ts +2 -24
- package/dist/connectors/github/tenant-routing.js +4 -26
- package/dist/connectors/github/transform.js +2 -16
- package/dist/connectors/github/types.d.ts +3 -15
- package/dist/connectors/github/types.js +2 -9
- package/dist/connectors/github/webhook.d.ts +3 -16
- package/dist/connectors/github/webhook.js +38 -23
- package/dist/connectors/ingest.d.ts +10 -0
- package/dist/connectors/ingest.js +28 -0
- package/dist/connectors/slack/backfill.d.ts +4 -17
- package/dist/connectors/slack/backfill.js +4 -13
- package/dist/connectors/slack/dlq.d.ts +2 -19
- package/dist/connectors/slack/dlq.js +51 -90
- package/dist/connectors/slack/ingest.d.ts +4 -9
- package/dist/connectors/slack/ingest.js +4 -30
- package/dist/connectors/slack/scope.d.ts +2 -8
- package/dist/connectors/slack/scope.js +2 -8
- package/dist/connectors/slack/signature.d.ts +1 -6
- package/dist/connectors/slack/tenant-routing.d.ts +2 -19
- package/dist/connectors/slack/tenant-routing.js +2 -21
- package/dist/connectors/slack/transform.d.ts +2 -18
- package/dist/connectors/slack/transform.js +2 -18
- package/dist/connectors/slack/types.d.ts +3 -9
- package/dist/connectors/slack/types.js +2 -4
- package/dist/connectors/slack/web-client.js +33 -27
- package/dist/connectors/slack/webhook.d.ts +3 -19
- package/dist/connectors/slack/webhook.js +6 -26
- package/dist/connectors/slack/workspaces.d.ts +4 -24
- package/dist/connectors/slack/workspaces.js +4 -24
- package/dist/consolidate/conflicts.js +7 -15
- package/dist/consolidate/dag-summary.d.ts +8 -0
- package/dist/consolidate/dag-summary.js +41 -0
- package/dist/consolidate/dag.d.ts +5 -28
- package/dist/consolidate/dag.js +29 -84
- package/dist/consolidate/decay.js +7 -19
- package/dist/consolidate/dedupe.d.ts +13 -52
- package/dist/consolidate/dedupe.js +18 -74
- package/dist/consolidate/flush-units.d.ts +3 -4
- package/dist/consolidate/flush-units.js +3 -3
- package/dist/consolidate/half-life-migration.d.ts +3 -26
- package/dist/consolidate/half-life-migration.js +11 -28
- package/dist/consolidate/llm-passes.js +49 -40
- package/dist/consolidate/memory-value-weights.d.ts +2 -13
- package/dist/consolidate/memory-value-weights.js +2 -13
- package/dist/consolidate/memory-value.d.ts +11 -84
- package/dist/consolidate/memory-value.js +18 -105
- package/dist/consolidate/merge.js +12 -33
- package/dist/consolidate/physics-pass.d.ts +6 -1
- package/dist/consolidate/physics-pass.js +27 -9
- package/dist/consolidate/replay.d.ts +6 -38
- package/dist/consolidate/replay.js +25 -56
- package/dist/consolidate/run.js +1 -1
- package/dist/consolidate/sleep.d.ts +1 -8
- package/dist/consolidate/sleep.js +13 -22
- package/dist/consolidate/trace.d.ts +3 -18
- package/dist/consolidate/trace.js +3 -18
- package/dist/consolidate/traces.js +9 -25
- package/dist/core/ablation.d.ts +14 -91
- package/dist/core/ablation.js +16 -91
- package/dist/core/active-scope.d.ts +7 -0
- package/dist/{sharing/scope.js → core/active-scope.js} +5 -12
- package/dist/core/ambient.d.ts +5 -8
- package/dist/core/ambient.js +40 -26
- package/dist/core/api-errors.d.ts +16 -0
- package/dist/core/api-errors.js +20 -0
- package/dist/core/capture-contract.d.ts +4 -2
- package/dist/core/capture-contract.js +4 -2
- package/dist/core/card.d.ts +4 -1
- package/dist/core/card.js +11 -1
- package/dist/core/compaction-timing.d.ts +7 -0
- package/dist/core/compaction-timing.js +9 -0
- package/dist/core/compare.d.ts +11 -67
- package/dist/core/compare.js +9 -63
- package/dist/core/config.d.ts +10 -24
- package/dist/core/config.js +20 -16
- package/dist/core/cosine.d.ts +3 -0
- package/dist/core/cosine.js +19 -0
- package/dist/core/handoff.d.ts +1 -7
- package/dist/core/handoff.js +1 -7
- package/dist/core/markdown.d.ts +6 -0
- package/dist/{store → core}/markdown.js +23 -22
- package/dist/core/memory-audit.d.ts +17 -0
- package/dist/core/memory-audit.js +54 -0
- package/dist/core/memory-quality.js +1 -1
- package/dist/core/memory.d.ts +51 -168
- package/dist/core/memory.js +76 -239
- package/dist/{consolidate → core}/merged-row.d.ts +1 -1
- package/dist/{consolidate → core}/merged-row.js +3 -2
- package/dist/core/package-root.d.ts +3 -0
- package/dist/core/package-root.js +5 -0
- package/dist/core/physics-config.d.ts +1 -4
- package/dist/core/physics-config.js +3 -8
- package/dist/core/physics.d.ts +15 -61
- package/dist/core/physics.js +65 -138
- package/dist/core/prediction.d.ts +3 -0
- package/dist/core/prediction.js +6 -0
- package/dist/core/project-identity.d.ts +20 -58
- package/dist/core/project-identity.js +27 -39
- package/dist/core/project-remote.js +13 -2
- package/dist/core/raw-append-only.d.ts +5 -0
- package/dist/core/raw-append-only.js +7 -0
- package/dist/core/recall-scope.d.ts +69 -0
- package/dist/core/recall-scope.js +138 -0
- package/dist/core/salience.d.ts +1 -7
- package/dist/core/salience.js +1 -7
- package/dist/dashboard/dashboard-actions.js +2 -2
- package/dist/dashboard/dashboard-snapshot.d.ts +2 -1
- package/dist/dashboard/dashboard-snapshot.js +11 -2
- package/dist/dashboard/dashboard-types.d.ts +2 -1
- package/dist/dashboard/dashboard.d.ts +1 -0
- package/dist/dashboard/dashboard.js +50 -4
- package/dist/db/busy.d.ts +3 -8
- package/dist/db/busy.js +37 -33
- package/dist/db/connect.js +7 -8
- package/dist/db/index.d.ts +3 -3
- package/dist/db/index.js +3 -3
- package/dist/db/migrate.js +3 -3
- 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 -5
- package/dist/db/migrations/v14.js +2 -3
- package/dist/db/migrations/v15.js +2 -8
- package/dist/db/migrations/v16.js +2 -3
- package/dist/db/migrations/v17.js +2 -3
- package/dist/db/migrations/v19.js +2 -5
- package/dist/db/migrations/v20.js +2 -7
- package/dist/db/migrations/v22.js +4 -17
- package/dist/db/migrations/v23.js +3 -14
- package/dist/db/migrations/v24.js +2 -4
- package/dist/db/migrations/v25.js +3 -8
- package/dist/db/migrations/v26.js +2 -13
- package/dist/db/migrations/v27.js +3 -11
- package/dist/db/migrations/v28.js +2 -14
- package/dist/db/migrations/v29.js +4 -18
- package/dist/db/migrations/v30.js +4 -16
- package/dist/db/migrations/v31.js +2 -15
- package/dist/db/migrations/v32.js +4 -22
- package/dist/db/migrations/v33.js +2 -15
- package/dist/db/migrations/v34.js +2 -11
- package/dist/db/migrations/v35.js +2 -11
- package/dist/db/migrations/v36.js +2 -11
- package/dist/db/migrations/v37.js +8 -33
- package/dist/db/migrations/v38.js +5 -38
- package/dist/db/migrations/v39.js +9 -20
- package/dist/db/migrations/v40.js +2 -9
- package/dist/db/migrations/v41.js +2 -24
- package/dist/db/migrations/v43.js +1 -1
- package/dist/db/migrations/v44.js +2 -8
- package/dist/db/migrations/v45.js +2 -7
- package/dist/db/migrations/v47.js +2 -3
- package/dist/db/migrations/v51.js +1 -1
- package/dist/db/migrations/v55.d.ts +3 -0
- package/dist/db/migrations/v55.js +17 -0
- package/dist/db/open.d.ts +2 -2
- package/dist/db/open.js +21 -9
- package/dist/db/physics-state.d.ts +6 -22
- package/dist/db/physics-state.js +28 -39
- package/dist/db/raw-archive-mirror-cleanup.d.ts +2 -17
- package/dist/db/raw-archive-mirror-cleanup.js +2 -17
- package/dist/db/tables.d.ts +2 -0
- package/dist/db/tables.js +6 -2
- package/dist/db/vector-store.d.ts +2 -0
- package/dist/db/vector-store.js +25 -5
- package/dist/db/wal-checkpointer.js +2 -1
- package/dist/doctor.js +85 -27
- package/dist/embeddings/local.d.ts +62 -0
- package/dist/embeddings/local.js +146 -0
- package/dist/embeddings/provider.d.ts +43 -0
- package/dist/{store/embeddings → embeddings}/provider.js +58 -83
- package/dist/embeddings/transformers.d.ts +26 -0
- package/dist/embeddings/transformers.js +89 -0
- package/dist/entry/session-text.d.ts +1 -1
- package/dist/entry/session-text.js +3 -2
- package/dist/eval/eval-stats.d.ts +15 -53
- package/dist/eval/eval-stats.js +12 -42
- package/dist/eval/eval-suite.d.ts +2 -13
- package/dist/eval/eval-suite.js +91 -45
- package/dist/eval/eval.d.ts +6 -24
- package/dist/eval/eval.js +8 -35
- package/dist/eval/judgment.d.ts +0 -3
- package/dist/eval/judgment.js +30 -15
- package/dist/extensions/openclaw-plugin/index.js +1 -1
- package/dist/graph/extract.d.ts +5 -27
- package/dist/graph/extract.js +10 -36
- package/dist/graph/recall.d.ts +7 -20
- package/dist/graph/recall.js +15 -77
- package/dist/graph/stream.d.ts +7 -39
- package/dist/graph/stream.js +11 -34
- package/dist/graph/view.d.ts +9 -35
- package/dist/graph/view.js +24 -44
- package/dist/graph/write.d.ts +1 -1
- package/dist/graph/write.js +9 -9
- package/dist/hooks/codex-session.js +3 -2
- package/dist/hooks/codex-wrapper.js +4 -3
- package/dist/hooks/copilot.js +2 -1
- package/dist/hooks/hook-blocks.d.ts +6 -2
- package/dist/hooks/hook-blocks.js +37 -124
- package/dist/hooks/json-hooks.d.ts +4 -36
- package/dist/hooks/json-hooks.js +22 -59
- package/dist/hooks/opencode.d.ts +0 -38
- package/dist/hooks/opencode.js +17 -81
- package/dist/hooks/shared.d.ts +6 -21
- package/dist/hooks/shared.js +31 -33
- package/dist/importers/core.d.ts +12 -37
- package/dist/importers/core.js +10 -28
- package/dist/importers/markdown-parse.d.ts +8 -22
- package/dist/importers/markdown-parse.js +8 -25
- package/dist/importers/markdown.js +3 -12
- package/dist/importers/sources.js +12 -39
- package/dist/importers/vault.d.ts +2 -8
- package/dist/importers/vault.js +31 -85
- package/dist/index.d.ts +8 -3
- package/dist/index.js +8 -3
- package/dist/learn/autolearn.d.ts +23 -42
- package/dist/learn/autolearn.js +45 -52
- package/dist/learn/churn-git.js +13 -4
- package/dist/learn/extract.d.ts +3 -2
- package/dist/learn/extract.js +8 -8
- package/dist/learn/forward-claim-detector.d.ts +6 -30
- package/dist/learn/forward-claim-detector.js +18 -68
- package/dist/learn/invalidation.d.ts +6 -18
- package/dist/learn/invalidation.js +18 -31
- package/dist/mcp/admin-tools.d.ts +2 -2
- package/dist/mcp/admin-tools.js +30 -53
- package/dist/mcp/format.js +3 -2
- package/dist/mcp/framing.d.ts +1 -0
- package/dist/mcp/framing.js +1 -1
- package/dist/mcp/memory-tools.js +7 -10
- package/dist/mcp/protocol.d.ts +15 -29
- package/dist/mcp/protocol.js +26 -16
- package/dist/mcp/recall-tools.js +14 -11
- package/dist/mcp/request.d.ts +3 -11
- package/dist/mcp/request.js +12 -27
- package/dist/mcp/server.d.ts +3 -9
- package/dist/mcp/server.js +5 -16
- package/dist/mcp/session-state.d.ts +1 -1
- package/dist/mcp/session-state.js +5 -11
- package/dist/mcp/stdio.d.ts +2 -6
- package/dist/mcp/stdio.js +68 -16
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +47 -22
- package/dist/objects/customer-notes.d.ts +9 -44
- package/dist/objects/customer-notes.js +7 -48
- package/dist/objects/decisions.d.ts +14 -52
- package/dist/objects/decisions.js +15 -53
- package/dist/objects/descriptor.d.ts +1 -1
- package/dist/objects/incidents.d.ts +9 -40
- package/dist/objects/incidents.js +7 -41
- package/dist/objects/lifecycle.d.ts +1 -1
- package/dist/objects/lifecycle.js +2 -1
- package/dist/objects/policies.d.ts +13 -91
- package/dist/objects/policies.js +13 -99
- package/dist/objects/processes.d.ts +9 -54
- package/dist/objects/processes.js +7 -61
- package/dist/objects/project-briefs.d.ts +13 -57
- package/dist/objects/project-briefs.js +16 -78
- package/dist/objects/skills.d.ts +9 -44
- package/dist/objects/skills.js +8 -54
- package/dist/postinstall.js +7 -20
- package/dist/predictions/planning-fallacy.d.ts +11 -34
- package/dist/rerankers/clef.js +6 -37
- package/dist/rerankers/cross-encoder.d.ts +31 -2
- package/dist/rerankers/cross-encoder.js +65 -101
- package/dist/rerankers/index.js +5 -4
- package/dist/rerankers/jev.js +11 -10
- package/dist/rerankers/llm.d.ts +2 -11
- package/dist/rerankers/llm.js +14 -14
- package/dist/rerankers/outage-warning.d.ts +5 -2
- package/dist/rerankers/outage-warning.js +7 -4
- package/dist/rerankers/remote.d.ts +1 -0
- package/dist/rerankers/remote.js +2 -0
- package/dist/rerankers/types.d.ts +2 -14
- package/dist/search/bm25-search.js +1 -1
- package/dist/search/boosts.d.ts +0 -2
- package/dist/search/boosts.js +3 -3
- package/dist/search/embed-memories.d.ts +9 -0
- package/dist/search/embed-memories.js +377 -0
- package/dist/search/goal-boost.d.ts +23 -0
- package/dist/search/goal-boost.js +93 -0
- package/dist/search/hybrid.d.ts +11 -2
- package/dist/search/hybrid.js +9 -4
- package/dist/search/multihop.js +2 -3
- package/dist/search/path-context.d.ts +5 -18
- package/dist/search/path-context.js +5 -18
- package/dist/search/physics-search.d.ts +6 -3
- package/dist/search/physics-search.js +29 -19
- package/dist/search/rerank.js +1 -1
- package/dist/search/rrf.d.ts +7 -35
- package/dist/search/rrf.js +5 -30
- package/dist/search/vector.d.ts +13 -4
- package/dist/search/vector.js +40 -13
- package/dist/server/auth.d.ts +11 -28
- package/dist/server/auth.js +49 -32
- package/dist/server/boot.d.ts +2 -21
- package/dist/server/boot.js +69 -161
- package/dist/server/client-ip.d.ts +3 -21
- package/dist/server/client-ip.js +8 -30
- package/dist/server/deadline.d.ts +0 -2
- package/dist/server/deadline.js +1 -7
- package/dist/server/defaults.d.ts +4 -0
- package/dist/server/defaults.js +5 -0
- package/dist/server/key-check-bounds.d.ts +2 -1
- package/dist/server/lifecycle.d.ts +5 -4
- package/dist/server/lifecycle.js +19 -4
- package/dist/server/mcp-http.js +24 -53
- package/dist/server/rate-limit.d.ts +5 -18
- package/dist/server/rate-limit.js +4 -13
- package/dist/server/request.d.ts +4 -8
- package/dist/server/request.js +16 -19
- package/dist/server/route-checks.d.ts +7 -0
- package/dist/server/route-checks.js +42 -0
- package/dist/server/route-table.d.ts +9 -8
- package/dist/server/route-table.js +127 -139
- package/dist/server/routes/admin.d.ts +8 -8
- package/dist/server/routes/admin.js +35 -49
- package/dist/server/routes/customer-notes.d.ts +6 -6
- package/dist/server/routes/customer-notes.js +8 -14
- package/dist/server/routes/decisions.d.ts +6 -6
- package/dist/server/routes/decisions.js +12 -21
- package/dist/server/routes/incidents.d.ts +6 -6
- package/dist/server/routes/incidents.js +14 -25
- package/dist/server/routes/memories.d.ts +9 -9
- package/dist/server/routes/memories.js +20 -63
- package/dist/server/routes/object-routes.d.ts +6 -11
- package/dist/server/routes/object-routes.js +11 -22
- package/dist/server/routes/policies.d.ts +7 -7
- package/dist/server/routes/policies.js +12 -22
- package/dist/server/routes/predictions.d.ts +6 -6
- package/dist/server/routes/predictions.js +22 -38
- package/dist/server/routes/processes.d.ts +6 -6
- package/dist/server/routes/processes.js +17 -28
- package/dist/server/routes/project-briefs.d.ts +7 -7
- package/dist/server/routes/project-briefs.js +11 -20
- package/dist/server/routes/recall.d.ts +5 -5
- package/dist/server/routes/recall.js +16 -45
- package/dist/server/routes/skills.d.ts +7 -7
- package/dist/server/routes/skills.js +10 -22
- package/dist/server/server-detect.d.ts +15 -53
- package/dist/server/server-detect.js +55 -96
- package/dist/server/sleep-child.js +26 -7
- package/dist/server/sleep-offload.d.ts +11 -5
- package/dist/server/sleep-offload.js +21 -12
- package/dist/server/types.d.ts +32 -18
- package/dist/server/validation.d.ts +3 -2
- package/dist/server/validation.js +15 -33
- package/dist/server.d.ts +7 -6
- package/dist/server.js +8 -6
- package/dist/sharing/global-store.d.ts +19 -0
- package/dist/sharing/global-store.js +75 -0
- package/dist/sharing/global-sync.d.ts +6 -0
- package/dist/sharing/global-sync.js +73 -0
- package/dist/sharing/project-merge.d.ts +11 -19
- package/dist/sharing/project-merge.js +63 -125
- package/dist/sharing/search-both.d.ts +60 -0
- package/dist/sharing/search-both.js +138 -0
- package/dist/sharing/share.d.ts +40 -0
- package/dist/sharing/share.js +229 -0
- package/dist/store/ambient.js +9 -15
- package/dist/store/audit-event.d.ts +5 -13
- package/dist/store/audit-event.js +4 -12
- package/dist/store/audit.d.ts +2 -21
- package/dist/store/audit.js +8 -67
- package/dist/store/auth.d.ts +10 -8
- package/dist/store/auth.js +17 -12
- package/dist/store/candidates.d.ts +23 -5
- package/dist/store/candidates.js +119 -71
- package/dist/store/capture-write.d.ts +17 -0
- package/dist/store/capture-write.js +35 -0
- package/dist/store/card-detail.d.ts +2 -1
- package/dist/store/card-detail.js +2 -1
- package/dist/store/cards.d.ts +14 -9
- package/dist/store/cards.js +72 -126
- package/dist/store/compaction-caller.d.ts +18 -0
- package/dist/store/compaction-caller.js +29 -0
- package/dist/store/compactions-record.d.ts +115 -0
- package/dist/store/compactions-record.js +417 -0
- package/dist/store/compactions.js +6 -4
- package/dist/store/conflicts.d.ts +4 -21
- package/dist/store/conflicts.js +76 -152
- package/dist/store/connectors/dlq.d.ts +10 -0
- package/dist/store/connectors/dlq.js +32 -0
- package/dist/store/connectors/github.d.ts +14 -16
- package/dist/store/connectors/github.js +34 -57
- package/dist/store/connectors/slack.d.ts +2 -11
- package/dist/store/connectors/slack.js +18 -47
- package/dist/store/dashboard-reads.js +11 -14
- package/dist/store/delete-and-batch.d.ts +17 -31
- package/dist/store/delete-and-batch.js +84 -67
- package/dist/store/delivery-recorder.d.ts +15 -4
- package/dist/store/delivery-recorder.js +34 -17
- package/dist/store/descendant-page.js +6 -3
- package/dist/store/diagnostics.js +6 -13
- package/dist/store/dormant.d.ts +8 -30
- package/dist/store/dormant.js +18 -57
- package/dist/store/embeddings/index.d.ts +11 -90
- package/dist/store/embeddings/index.js +18 -523
- package/dist/store/entry-reads.d.ts +34 -61
- package/dist/store/entry-reads.js +111 -136
- package/dist/store/entry-row.d.ts +6 -35
- package/dist/store/entry-row.js +9 -37
- package/dist/store/entry-writes.d.ts +12 -18
- package/dist/store/entry-writes.js +46 -44
- package/dist/store/failure-log-at.d.ts +8 -0
- package/dist/store/failure-log-at.js +16 -0
- package/dist/store/failure-log.d.ts +2 -2
- package/dist/store/failure-log.js +5 -3
- package/dist/{trust → store}/gated-write.d.ts +3 -1
- package/dist/{trust → store}/gated-write.js +7 -5
- package/dist/store/goals.d.ts +3 -40
- package/dist/store/goals.js +41 -178
- package/dist/store/graph-queue.d.ts +6 -22
- package/dist/store/graph-queue.js +14 -45
- package/dist/store/graph-reads.d.ts +11 -35
- package/dist/store/graph-reads.js +24 -60
- package/dist/store/graph-rows.d.ts +3 -6
- package/dist/store/graph-rows.js +6 -9
- package/dist/store/graph-view-rows.d.ts +2 -1
- package/dist/store/graph-view-rows.js +2 -1
- package/dist/store/graph-writes.d.ts +10 -35
- package/dist/store/graph-writes.js +59 -106
- package/dist/store/half-life.d.ts +2 -1
- package/dist/store/half-life.js +14 -16
- package/dist/store/handoffs.d.ts +6 -12
- package/dist/store/handoffs.js +22 -40
- package/dist/store/index-and-stats.d.ts +6 -19
- package/dist/store/index-and-stats.js +36 -84
- package/dist/store/key-writes.js +1 -1
- package/dist/store/ledger-turn.d.ts +9 -0
- package/dist/store/ledger-turn.js +38 -0
- package/dist/store/mirrors.d.ts +2 -6
- package/dist/store/mirrors.js +24 -29
- package/dist/store/open.d.ts +0 -4
- package/dist/store/open.js +42 -62
- package/dist/store/pilot-arm.d.ts +12 -0
- package/dist/store/pilot-arm.js +42 -0
- package/dist/store/planning-fallacy-evidence.d.ts +2 -30
- package/dist/store/planning-fallacy-evidence.js +8 -37
- package/dist/store/port.d.ts +91 -82
- package/dist/store/port.js +8 -0
- package/dist/store/predictions.d.ts +12 -53
- package/dist/store/predictions.js +41 -125
- package/dist/store/project-tags.d.ts +62 -0
- package/dist/store/project-tags.js +67 -0
- package/dist/{cli → store}/quality-repair.js +15 -31
- package/dist/store/quarantine.js +2 -1
- package/dist/store/raw-archive.d.ts +4 -16
- package/dist/store/raw-archive.js +14 -29
- package/dist/store/recall-trace.d.ts +12 -77
- package/dist/store/recall-trace.js +37 -97
- package/dist/store/rejected-values.js +9 -20
- package/dist/store/rejection-probe.d.ts +4 -0
- package/dist/store/rejection-probe.js +19 -0
- package/dist/store/rejection.d.ts +10 -73
- package/dist/store/rejection.js +12 -84
- package/dist/store/report-reads.d.ts +6 -0
- package/dist/store/report-reads.js +29 -0
- package/dist/store/rows.d.ts +9 -19
- package/dist/store/rows.js +36 -34
- package/dist/store/rule-sql.d.ts +14 -0
- package/dist/store/rule-sql.js +56 -0
- package/dist/store/search-rows.d.ts +7 -38
- package/dist/store/search-rows.js +23 -54
- package/dist/store/sessions.d.ts +10 -47
- package/dist/store/sessions.js +21 -75
- package/dist/store/set-aside.d.ts +14 -0
- package/dist/store/set-aside.js +23 -0
- package/dist/store/sqlite/busy.d.ts +3 -0
- package/dist/store/sqlite/busy.js +8 -0
- package/dist/store/sqlite/connector-events-group.js +5 -8
- package/dist/store/sqlite/connector-writes-group.js +3 -3
- package/dist/store/sqlite/entry-writes-group.js +4 -4
- package/dist/store/sqlite/error-codec.js +8 -5
- package/dist/store/sqlite/executor.d.ts +2 -1
- package/dist/store/sqlite/executor.js +12 -5
- package/dist/store/sqlite/graph-reads-group.js +1 -1
- package/dist/store/sqlite/held-connection.d.ts +9 -0
- package/dist/store/sqlite/held-connection.js +41 -0
- package/dist/store/sqlite/local.d.ts +3 -3
- package/dist/store/sqlite/local.js +1 -0
- package/dist/store/sqlite/object-rows.d.ts +1 -1
- package/dist/store/sqlite/object-rows.js +6 -3
- package/dist/store/sqlite/objects-group.d.ts +1 -1
- package/dist/store/sqlite/objects-group.js +5 -3
- package/dist/store/sqlite/quarantine-group.js +2 -2
- package/dist/store/sqlite/store.d.ts +1 -4
- package/dist/store/sqlite/store.js +16 -15
- package/dist/store/sqlite/vector-reads-group.js +2 -2
- package/dist/store/sqlite/worker-jobs.js +1 -1
- package/dist/store/sqlite/worker-ops.d.ts +13 -2
- package/dist/store/sqlite/worker-ops.js +13 -2
- package/dist/store/sqlite/worker-store.js +5 -2
- package/dist/store/summaries.d.ts +11 -63
- package/dist/store/summaries.js +37 -148
- package/dist/store/summary-dirty.js +1 -1
- package/dist/store/tenant-lookup.d.ts +6 -1
- package/dist/store/tenant-lookup.js +7 -0
- package/dist/store/tenant.d.ts +2 -16
- package/dist/store/tenant.js +4 -19
- package/dist/store/token-ledger.d.ts +13 -50
- package/dist/store/token-ledger.js +19 -85
- package/dist/store/usage-reports.js +5 -13
- package/dist/store/vector-index.d.ts +46 -0
- package/dist/store/vector-index.js +171 -0
- package/dist/store/working-memory.d.ts +6 -25
- package/dist/store/working-memory.js +18 -52
- package/dist/support-bundle.js +9 -8
- package/dist/trust/reject-flow.js +3 -5
- package/dist/util/agent-homes.d.ts +15 -0
- package/dist/util/agent-homes.js +34 -0
- package/dist/util/anthropic-messages.d.ts +3 -0
- package/dist/util/anthropic-messages.js +35 -6
- package/dist/util/atomic-write.d.ts +2 -1
- package/dist/util/atomic-write.js +35 -4
- package/dist/util/capped-json.d.ts +6 -0
- package/dist/util/capped-json.js +46 -0
- package/dist/util/chunked.d.ts +3 -0
- package/dist/util/chunked.js +10 -0
- package/dist/util/crash-handlers.d.ts +8 -1
- package/dist/util/crash-handlers.js +52 -10
- package/dist/util/ellipsize.d.ts +3 -0
- package/dist/util/ellipsize.js +5 -0
- package/dist/util/env.d.ts +14 -6
- package/dist/util/env.js +15 -7
- package/dist/util/format.d.ts +3 -0
- package/dist/util/format.js +6 -0
- package/dist/util/home-path.d.ts +2 -1
- package/dist/util/home-path.js +4 -2
- package/dist/util/hook-payload.d.ts +8 -0
- package/dist/util/hook-payload.js +37 -0
- package/dist/util/http-retry.d.ts +9 -1
- package/dist/util/http-retry.js +67 -8
- package/dist/util/http-util.d.ts +0 -8
- package/dist/util/http-util.js +10 -21
- package/dist/util/limits.d.ts +7 -0
- package/dist/util/limits.js +14 -0
- package/dist/util/log.d.ts +7 -2
- package/dist/util/log.js +34 -9
- package/dist/util/request-scope.d.ts +5 -2
- package/dist/util/request-scope.js +13 -7
- package/dist/util/secret-detect.d.ts +5 -30
- package/dist/util/secret-detect.js +19 -40
- package/dist/util/sqlite-blocked.d.ts +2 -0
- package/dist/util/sqlite-blocked.js +5 -0
- package/dist/util/stored-json.d.ts +1 -1
- package/dist/util/stored-json.js +1 -1
- package/dist/util/stream-tee.d.ts +3 -0
- package/dist/util/stream-tee.js +35 -0
- package/dist/util/time.d.ts +4 -0
- package/dist/util/time.js +4 -0
- package/dist/util/token-text.d.ts +1 -4
- package/dist/util/token-text.js +1 -4
- package/dist/util/transcript-tail.d.ts +2 -0
- package/dist/util/transcript-tail.js +24 -23
- package/dist/util/version.d.ts +5 -20
- package/dist/util/version.js +5 -20
- package/dist/{store → util}/yaml.d.ts +1 -5
- package/dist/{store → util}/yaml.js +2 -6
- package/extensions/openclaw-plugin/index.ts +1 -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 -2
- package/dist/cli/provenance-coverage.d.ts +0 -18
- package/dist/connectors/github/cli-impl.d.ts +0 -25
- package/dist/sharing/scope.d.ts +0 -14
- package/dist/sharing/shared.d.ts +0 -187
- package/dist/sharing/shared.js +0 -563
- package/dist/store/embeddings/local.d.ts +0 -15
- package/dist/store/embeddings/local.js +0 -192
- package/dist/store/embeddings/provider.d.ts +0 -77
- package/dist/store/markdown.d.ts +0 -10
- package/dist/store/recall-scope.d.ts +0 -138
- package/dist/store/recall-scope.js +0 -216
- package/dist/store/vector-writes.d.ts +0 -13
- package/dist/store/vector-writes.js +0 -89
- /package/dist/{store → core}/object-types.d.ts +0 -0
- /package/dist/{store → core}/object-types.js +0 -0
- /package/dist/{cli → store}/quality-repair.d.ts +0 -0
- /package/dist/{capture → util}/compaction-items.d.ts +0 -0
- /package/dist/{capture → util}/compaction-items.js +0 -0
|
@@ -52,10 +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;
|
|
56
|
-
//
|
|
57
|
-
// the supersede UPDATE; the successor must share the tenant. The successor
|
|
58
|
-
// row already exists in the same transaction when this fires.
|
|
55
|
+
// Cross-tenant safety vs the successor process (self-FK; mirrors the v30 supersede trigger): superseded_by is set only via the supersede UPDATE
|
|
56
|
+
// and the successor, already present in the same transaction, must share the tenant.
|
|
59
57
|
const TRG_PROCESSES_SUPERSEDE_TENANT_MATCH_UPDATE = `
|
|
60
58
|
CREATE TRIGGER IF NOT EXISTS trg_processes_supersede_tenant_match_update
|
|
61
59
|
BEFORE UPDATE ON processes
|
|
@@ -71,24 +69,8 @@ const TRG_PROCESSES_SUPERSEDE_TENANT_MATCH_UPDATE = `
|
|
|
71
69
|
export const v32 = {
|
|
72
70
|
version: 32,
|
|
73
71
|
up: (db) => {
|
|
74
|
-
// Process first-class object.
|
|
75
|
-
//
|
|
76
|
-
// evolves. Unlike incident (open->resolved->closed, no supersede), process
|
|
77
|
-
// REUSES the v30 decisions supersede path as its delta mechanism: a process
|
|
78
|
-
// evolves by being superseded by a NEW VERSION that records what changed
|
|
79
|
-
// (change_summary) and the full new state (steps), carrying a derived
|
|
80
|
-
// version counter. So this table combines the v31 incidents tenant-match
|
|
81
|
-
// trigger pair (vs the referenced memory) WITH the v30 decisions
|
|
82
|
-
// superseded_by self-FK + supersede tenant-match trigger.
|
|
83
|
-
//
|
|
84
|
-
// status (active|superseded|closed): superseded carries a self-FK
|
|
85
|
-
// superseded_by to the successor version; closed is a terminal
|
|
86
|
-
// retire-without-successor (only an active head closes). The memory mirror
|
|
87
|
-
// is kept for recall but is not authoritative; memory_id is NULLABLE with
|
|
88
|
-
// ON DELETE SET NULL so forget/consolidate/archive does not lose a process.
|
|
89
|
-
// steps is a JSON-encoded array of step strings (scoped v1; a normalized
|
|
90
|
-
// process_steps table is deferred). version is server-derived
|
|
91
|
-
// (predecessor.version + 1); change_summary is set on a successor row only.
|
|
72
|
+
// Process first-class object (living process map): it evolves via the v30 supersede path, each version recording change_summary and full steps (JSON).
|
|
73
|
+
// Combines the v31 tenant-match trigger pair with the v30 superseded_by self-FK; version is server-derived (predecessor + 1); only an active head closes.
|
|
92
74
|
if (!tableExists(db, 'processes')) {
|
|
93
75
|
db.exec(PROCESSES_TABLE);
|
|
94
76
|
db.exec(IDX_PROCESSES_TENANT_STATUS);
|
|
@@ -75,21 +75,8 @@ 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.
|
|
79
|
-
//
|
|
80
|
-
// force over an EFFECTIVE-TIME range (valid_from required, valid_to nullable
|
|
81
|
-
// = open-ended) and evolves via the v32 processes supersede machinery
|
|
82
|
-
// (superseded_by self-FK + supersede tenant-match trigger + version +
|
|
83
|
-
// change_summary). This table = the v32 processes table MINUS `steps`
|
|
84
|
-
// (a policy has policy_text, not an ordered step list) PLUS the first-class
|
|
85
|
-
// effective-time columns valid_from/valid_to. Valid-time is the queryable
|
|
86
|
-
// axis (the as-of query loadPoliciesAsOf); transaction-time is present via
|
|
87
|
-
// created_at + the supersede chain's superseded_at (time-travel deferred).
|
|
88
|
-
//
|
|
89
|
-
// All date inputs are normalized to standard ISO-8601 datetime
|
|
90
|
-
// (toISOString) at the store boundary before persist/compare, so the
|
|
91
|
-
// fixed-width values sort lexically and the half-open [valid_from, valid_to)
|
|
92
|
-
// as-of comparison is correct.
|
|
78
|
+
// Policy first-class object: a rule in force over an effective-time range (valid_to nullable = open-ended); supersedes like v32 processes.
|
|
79
|
+
// Dates are ISO-8601 (toISOString) at the store boundary so values sort lexically and the half-open [valid_from, valid_to) as-of comparison is correct.
|
|
93
80
|
if (!tableExists(db, 'policies')) {
|
|
94
81
|
db.exec(POLICIES_TABLE);
|
|
95
82
|
db.exec(IDX_POLICIES_TENANT_STATUS);
|
|
@@ -69,17 +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.
|
|
73
|
-
//
|
|
74
|
-
// + an optional `trigger_text` (when to apply), evolving via the v32
|
|
75
|
-
// processes supersede machinery (superseded_by self-FK + supersede
|
|
76
|
-
// tenant-match trigger + version + change_summary). This table = the v32
|
|
77
|
-
// processes table MINUS `steps` (a skill's content is a single instructions
|
|
78
|
-
// body) PLUS `instructions` (NOT NULL) and `trigger_text`. "Executable" is
|
|
79
|
-
// scoped to an agent-followable instruction that EXPORTS into the agent's
|
|
80
|
-
// in-force rules (AGENTS.md / CLAUDE.md) via exportSkills; literal code
|
|
81
|
-
// execution is deferred. NOTE: the column is `trigger_text`, NOT `trigger`,
|
|
82
|
-
// because TRIGGER is a SQLite reserved keyword.
|
|
72
|
+
// Skill first-class object: `instructions` plus optional `trigger_text`, superseding like v32 processes; exportSkills writes it to AGENTS.md / CLAUDE.md.
|
|
73
|
+
// The column is `trigger_text`, not `trigger`, because TRIGGER is a SQLite reserved keyword.
|
|
83
74
|
if (!tableExists(db, 'skills')) {
|
|
84
75
|
db.exec(SKILLS_TABLE);
|
|
85
76
|
db.exec(IDX_SKILLS_TENANT_STATUS);
|
|
@@ -72,17 +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.
|
|
76
|
-
//
|
|
77
|
-
// scoped to a `repo`, evolving via the v34 skills supersede machinery
|
|
78
|
-
// (superseded_by self-FK + supersede tenant-match trigger + version +
|
|
79
|
-
// change_summary). This table = the v34 skills table with
|
|
80
|
-
// skill_name/trigger_text replaced by `repo` (the repo-scoping dimension)
|
|
81
|
-
// PLUS `summary` (the brief body). The distinguishing op (refreshBrief, in
|
|
82
|
-
// src/objects/project-briefs.ts) auto-assembles the summary from the repo's receipts
|
|
83
|
-
// (memory rows tagged path:<repo>); it needs no schema support beyond `repo`.
|
|
84
|
-
// All column names were checked against SQLite reserved words:
|
|
85
|
-
// repo/summary/version/status/etc. are non-reserved.
|
|
75
|
+
// project_brief first-class object: repo-scoped `summary` superseding like v34 skills; refreshBrief (objects/project-briefs.ts) builds it from receipts.
|
|
76
|
+
// The schema needs only `repo`; column names were checked against SQLite reserved words.
|
|
86
77
|
if (!tableExists(db, 'project_briefs')) {
|
|
87
78
|
db.exec(PROJECT_BRIEFS_TABLE);
|
|
88
79
|
db.exec(IDX_PROJECT_BRIEFS_TENANT_STATUS);
|
|
@@ -72,17 +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
|
|
76
|
-
//
|
|
77
|
-
// v35 project_briefs supersede machinery (superseded_by self-FK + supersede
|
|
78
|
-
// tenant-match trigger + version + change_summary). This table = the v35
|
|
79
|
-
// project_briefs table with repo/summary replaced by `customer` (the
|
|
80
|
-
// entity-scoping dimension; a free-form account/customer id - the entities
|
|
81
|
-
// table is unbuilt, so a FK is deferred) PLUS `note` (the note body).
|
|
82
|
-
// MANY notes per customer (each its own supersede chain), unlike the
|
|
83
|
-
// one-summary-per-repo project_brief. All column names checked against SQLite
|
|
84
|
-
// reserved words: customer/note/
|
|
85
|
-
// version/status/etc. are non-reserved.
|
|
75
|
+
// customer_note first-class object: a note on a customer, superseding like v35 project_briefs; `customer` is a free-form id (no FK: no entities table).
|
|
76
|
+
// Many notes per customer, each its own supersede chain. Column names were checked against SQLite reserved words.
|
|
86
77
|
if (!tableExists(db, 'customer_notes')) {
|
|
87
78
|
db.exec(CUSTOMER_NOTES_TABLE);
|
|
88
79
|
db.exec(IDX_CUSTOMER_NOTES_TENANT_STATUS);
|
|
@@ -41,9 +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 (
|
|
45
|
-
//
|
|
46
|
-
// INSERT and UPDATE (UPDATE fires when memory_id/source_kind/tenant_id change).
|
|
44
|
+
// entities guard: source_kind must equal the FK'd memory's actual kind (raw or a lying source_kind ABORTs) and tenant must match,
|
|
45
|
+
// on INSERT and on UPDATE (when memory_id/source_kind/tenant_id change).
|
|
47
46
|
const TRG_ENTITIES_CONSOLIDATED_ONLY_INSERT = `
|
|
48
47
|
CREATE TRIGGER IF NOT EXISTS trg_entities_consolidated_only_insert
|
|
49
48
|
BEFORE INSERT ON entities
|
|
@@ -139,16 +138,8 @@ const TRG_GRAPH_QUEUE_CONSOLIDATED_ONLY_UPDATE = `
|
|
|
139
138
|
END;
|
|
140
139
|
END
|
|
141
140
|
`;
|
|
142
|
-
// Reverse guard:
|
|
143
|
-
//
|
|
144
|
-
// already-indexed memory is later mutated. So 'UPDATE memories SET kind=raw'
|
|
145
|
-
// (or a tenant change) on a memory the graph references would silently leave
|
|
146
|
-
// entity/relation/queue rows pointing at a raw / cross-tenant memory while
|
|
147
|
-
// their source_kind stays 'distilled' - bypassing the central 'graph never
|
|
148
|
-
// indexes raw' invariant after insertion. This trigger closes that direction:
|
|
149
|
-
// a memory cannot be reclassified to raw, nor moved cross-tenant, WHILE the
|
|
150
|
-
// graph references it (rebuild/remove the graph rows first). Cheap: the EXISTS
|
|
151
|
-
// checks are only evaluated when kind actually becomes raw or tenant changes.
|
|
141
|
+
// Reverse guard: graph triggers fire only on graph-table writes, so reclassifying an indexed memory to raw (or tenant) would break the no-raw invariant.
|
|
142
|
+
// Block both while the graph references the memory; the EXISTS checks run only when kind becomes raw or tenant changes.
|
|
152
143
|
const TRG_MEMORIES_GRAPH_REFERENCED_GUARD = `
|
|
153
144
|
CREATE TRIGGER IF NOT EXISTS trg_memories_graph_referenced_guard
|
|
154
145
|
BEFORE UPDATE ON memories
|
|
@@ -162,13 +153,8 @@ const TRG_MEMORIES_GRAPH_REFERENCED_GUARD = `
|
|
|
162
153
|
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');
|
|
163
154
|
END
|
|
164
155
|
`;
|
|
165
|
-
// Second reverse guard:
|
|
166
|
-
// a
|
|
167
|
-
// validates the entity against its source memory, but an existing relation
|
|
168
|
-
// pointing at the entity is NOT re-validated, so a raw 'UPDATE entities SET
|
|
169
|
-
// tenant_id=?, memory_id=?' to another tenant would leave a tenant-A relation
|
|
170
|
-
// pointing at a tenant-B entity. Block the tenant move while the entity is
|
|
171
|
-
// referenced by any relation (rebuild the relations first).
|
|
156
|
+
// Second reverse guard: the entity UPDATE trigger does not re-validate existing relations, so a cross-tenant entity move would leave a tenant-A relation
|
|
157
|
+
// pointing at a tenant-B entity. Block the tenant move while any relation references the entity.
|
|
172
158
|
const TRG_ENTITIES_NO_TENANT_MOVE_WHEN_REFERENCED = `
|
|
173
159
|
CREATE TRIGGER IF NOT EXISTS trg_entities_no_tenant_move_when_referenced
|
|
174
160
|
BEFORE UPDATE ON entities
|
|
@@ -181,19 +167,8 @@ const TRG_ENTITIES_NO_TENANT_MOVE_WHEN_REFERENCED = `
|
|
|
181
167
|
export const v37 = {
|
|
182
168
|
version: 37,
|
|
183
169
|
up: (db) => {
|
|
184
|
-
// Graph-on-consolidated guard.
|
|
185
|
-
// The
|
|
186
|
-
// must NEVER index the raw layer. The substrate: entities + relations +
|
|
187
|
-
// graph_extraction_queue, each FK-ing to memories and guarded so they can only
|
|
188
|
-
// reference CONSOLIDATED memories (kind IN ('distilled','superseded')), never
|
|
189
|
-
// kind='raw'. New tables -> real CHECK constraints (unlike the ALTER'd memories,
|
|
190
|
-
// whose kind CHECK lives in triggers). The kind/source MATCH (source_kind ==
|
|
191
|
-
// the FK'd memory's actual kind) cannot be a CHECK (CHECK can't subquery), so it
|
|
192
|
-
// is a BEFORE INSERT *and* BEFORE UPDATE trigger (the subquery-capable pattern
|
|
193
|
-
// from the v30 decisions / predictions tenant-match triggers). Both INSERT and
|
|
194
|
-
// UPDATE are guarded: an INSERT-only guard is bypassable via a raw SQL UPDATE
|
|
195
|
-
// that moves a row onto a raw memory. All column
|
|
196
|
-
// names checked vs SQL reserved words: rel_type avoids REFERENCES.
|
|
170
|
+
// Graph-on-consolidated guard: entities, relations and graph_extraction_queue may reference only consolidated memories (distilled|superseded), never raw.
|
|
171
|
+
// The kind match needs a subquery, so it is a BEFORE INSERT and UPDATE trigger (INSERT-only is bypassable). rel_type avoids the reserved word REFERENCES.
|
|
197
172
|
if (!tableExists(db, 'entities')) {
|
|
198
173
|
db.exec(ENTITIES_TABLE);
|
|
199
174
|
db.exec(`CREATE INDEX IF NOT EXISTS idx_entities_tenant ON entities(tenant_id)`);
|
|
@@ -33,12 +33,8 @@ const RELATIONS_TABLE = `
|
|
|
33
33
|
FOREIGN KEY (memory_id) REFERENCES memories(id) ON DELETE SET NULL
|
|
34
34
|
)
|
|
35
35
|
`;
|
|
36
|
-
// entities guard (dual-provenance): at least one valid provenance, no raw.
|
|
37
|
-
//
|
|
38
|
-
// - memory path (memory_id NOT NULL): source_kind == the FK'd memory's kind
|
|
39
|
-
// (raw / lying source_kind ABORT) AND tenant-match.
|
|
40
|
-
// - object path (memory_id NULL): the (type,id) points at an EXISTING same-tenant
|
|
41
|
-
// object row whose status is active|superseded (explicit 4-way CASE per table).
|
|
36
|
+
// entities guard (dual-provenance): at least one valid provenance, no raw. Memory path: source_kind must equal the FK'd memory's kind, plus tenant-match.
|
|
37
|
+
// Object path (memory_id NULL): (type,id) must point at an existing same-tenant object with status active|superseded (4-way CASE per table); all-null aborts.
|
|
42
38
|
const TRG_ENTITIES_CONSOLIDATED_ONLY_INSERT = `
|
|
43
39
|
CREATE TRIGGER IF NOT EXISTS trg_entities_consolidated_only_insert
|
|
44
40
|
BEFORE INSERT ON entities
|
|
@@ -201,10 +197,7 @@ const TRG_RELATIONS_CONSOLIDATED_ONLY_UPDATE = `
|
|
|
201
197
|
END;
|
|
202
198
|
END
|
|
203
199
|
`;
|
|
204
|
-
// Recreated
|
|
205
|
-
// endpoint cannot be moved cross-tenant while referenced. trg_memories_graph_referenced_guard
|
|
206
|
-
// (on memories) and trg_graph_queue_* (on graph_extraction_queue) are NOT recreated
|
|
207
|
-
// here: those tables are not dropped by v38, so the triggers survive.
|
|
200
|
+
// Recreated verbatim from v37 (relation endpoints cannot move cross-tenant). The memories and graph queue triggers survive: those tables are not dropped.
|
|
208
201
|
const TRG_ENTITIES_NO_TENANT_MOVE_WHEN_REFERENCED = `
|
|
209
202
|
CREATE TRIGGER IF NOT EXISTS trg_entities_no_tenant_move_when_referenced
|
|
210
203
|
BEFORE UPDATE ON entities
|
|
@@ -217,34 +210,8 @@ const TRG_ENTITIES_NO_TENANT_MOVE_WHEN_REFERENCED = `
|
|
|
217
210
|
export const v38 = {
|
|
218
211
|
version: 38,
|
|
219
212
|
up: (db) => {
|
|
220
|
-
//
|
|
221
|
-
//
|
|
222
|
-
// decaying memory mirror. An in-force object must STAY in the graph after its mirror memory is forgotten or
|
|
223
|
-
// consolidation-pruned. The graph is a PURE DERIVED CACHE (clearGraph + rebuild on
|
|
224
|
-
// every `graph extract` / `sleep`), so v38 DROPs+recreates entities/relations (no
|
|
225
|
-
// data copy) and the next extract repopulates. graph_extraction_queue is untouched.
|
|
226
|
-
//
|
|
227
|
-
// Two provenance paths, "at least one, no raw":
|
|
228
|
-
// - memory path (memory_id NOT NULL): source_kind must equal the FK'd memory's live
|
|
229
|
-
// kind and that kind is distilled|superseded (raw still ABORTs) + tenant-match.
|
|
230
|
-
// - object path (memory_id NULL): source_object_type/id must reference an EXISTING
|
|
231
|
-
// same-tenant object row whose status is active|superseded (not closed). Such objects
|
|
232
|
-
// are consolidated BY CONSTRUCTION, so the no-raw invariant still holds.
|
|
233
|
-
// - all-null is rejected.
|
|
234
|
-
//
|
|
235
|
-
// memory_id is now NULLABLE with ON DELETE SET NULL (was NOT NULL / CASCADE), so a
|
|
236
|
-
// mirror forget/consolidate nulls the recall pointer without dropping the row. NOTE
|
|
237
|
-
// (empirically verified, contradicts the SQLite docs): node:sqlite DOES fire the
|
|
238
|
-
// BEFORE UPDATE guard from the FK SET NULL action even with recursive_triggers OFF.
|
|
239
|
-
// So the *_consolidated_only_UPDATE triggers deliberately OMIT the all-null ABORT
|
|
240
|
-
// (kept on INSERT) - otherwise a mirror delete of a memory-only row would be blocked.
|
|
241
|
-
// See the per-trigger comments below. A SET NULL leaves source_kind at its old value
|
|
242
|
-
// by design (the object path is distilled-by-construction; source_kind is only
|
|
243
|
-
// re-checked when memory_id NOT NULL).
|
|
244
|
-
// source_object_id is a SOFT (type,id) pointer (no hard FK) the rebuild re-validates,
|
|
245
|
-
// so a legitimate object hard-delete is never blocked; a `closed` object row drops at next
|
|
246
|
-
// extract. SQLite cannot parametrize a table name in a trigger, so the object-path
|
|
247
|
-
// validation is an explicit 4-way CASE (one arm per object table).
|
|
213
|
+
// Anchor graph provenance to the authoritative object, not the decaying mirror memory; the graph is a derived cache, so entities/relations are recreated.
|
|
214
|
+
// memory_id is NULLABLE ON DELETE SET NULL; node:sqlite fires the BEFORE UPDATE guard on that SET NULL, so the UPDATE triggers omit the all-null ABORT.
|
|
248
215
|
recreateGraphTables(db);
|
|
249
216
|
createGraphGuards(db);
|
|
250
217
|
},
|
|
@@ -6,25 +6,17 @@ import { tableHasColumn } from '../tables.js';
|
|
|
6
6
|
export const v39 = {
|
|
7
7
|
version: 39,
|
|
8
8
|
up: (db, ctx) => {
|
|
9
|
-
// Memory scope isolation.
|
|
10
|
-
// origin_project: '<name>' = owned by that project, '' = user-global,
|
|
9
|
+
// Memory scope isolation. origin_project: '<name>' = owned by that project, '' = user-global,
|
|
11
10
|
// NULL = legacy/unknown (ambient context treats NULL as deny).
|
|
12
11
|
if (!tableHasColumn(db, 'memories', 'origin_project')) {
|
|
13
12
|
db.exec(`ALTER TABLE memories ADD COLUMN origin_project TEXT`);
|
|
14
13
|
}
|
|
15
|
-
// Backfill
|
|
16
|
-
//
|
|
17
|
-
// take <project>; a share whose <project> is the home dir basename
|
|
18
|
-
// maps to '' (user-global).
|
|
19
|
-
// 2. Every other row was written into THIS store, so it takes the
|
|
20
|
-
// store's own origin: `<project>/.hippo` -> '<project>', the
|
|
21
|
-
// home/global store -> '' (user-global).
|
|
22
|
-
// Rows stay NULL only when no hippoRoot was provided.
|
|
14
|
+
// Backfill from store location only (no path-tag guessing): 'shared:<project>:<ts>' rows take <project> (home-dir basename maps to '' user-global);
|
|
15
|
+
// every other row takes this store's origin (`<project>/.hippo` -> '<project>', global store -> ''). Rows stay NULL only when no hippoRoot was provided.
|
|
23
16
|
const hippoRoot = ctx?.hippoRoot;
|
|
24
17
|
if (hippoRoot) {
|
|
25
|
-
// Provenance-source evidence first (shared:<project>: / promoted:<localRoot>,
|
|
26
|
-
//
|
|
27
|
-
// store's own location for everything else.
|
|
18
|
+
// Provenance-source evidence first (shared:<project>: / promoted:<localRoot>, parsed by the markdown-import stamp's helper),
|
|
19
|
+
// then the store's own location for everything else.
|
|
28
20
|
const homeName = path.basename(os.homedir()).toLowerCase();
|
|
29
21
|
// SAFETY: sourcedRows' shape matches the two columns (id, source)
|
|
30
22
|
// named in the SELECT above.
|
|
@@ -36,18 +28,15 @@ export const v39 = {
|
|
|
36
28
|
continue;
|
|
37
29
|
setOrigin.run(origin, row.id);
|
|
38
30
|
}
|
|
39
|
-
// The global root itself is
|
|
40
|
-
//
|
|
41
|
-
// repo must not stamp the whole corpus with that repo's name.
|
|
31
|
+
// The global root itself is always user-global (''), whatever surrounds it on disk: a HIPPO_HOME inside a dotfiles git repo
|
|
32
|
+
// must not stamp the whole corpus with that repo's name.
|
|
42
33
|
const storeOrigin = isGlobalStoreRoot(hippoRoot)
|
|
43
34
|
? ''
|
|
44
35
|
: deriveOriginProject(path.dirname(hippoRoot));
|
|
45
36
|
db.prepare(`UPDATE memories SET origin_project = ? WHERE origin_project IS NULL`).run(storeOrigin);
|
|
46
37
|
}
|
|
47
|
-
// Rollback-safety guard
|
|
48
|
-
//
|
|
49
|
-
// injecting cross-project rows. 1.24.0 is the first version with the
|
|
50
|
-
// isolation behavior. Forward-only - never lower an existing minimum.
|
|
38
|
+
// Rollback-safety guard: a pre-isolation binary would ignore origin_project and the secret veto and resume injecting cross-project rows.
|
|
39
|
+
// 1.24.0 is the first version with isolation; forward-only, never lower an existing minimum.
|
|
51
40
|
raiseMinBinary(db, '1.24.0');
|
|
52
41
|
},
|
|
53
42
|
};
|
|
@@ -48,15 +48,8 @@ const RECALL_TRACES_SCHEMA_SQL = `
|
|
|
48
48
|
export const v40 = {
|
|
49
49
|
version: 40,
|
|
50
50
|
up: (db) => {
|
|
51
|
-
// Retrieval-trace persistence.
|
|
52
|
-
//
|
|
53
|
-
// recall, a WITHOUT ROWID child table for the ranked results, and a
|
|
54
|
-
// separate append-only outcomes table so audit_log pruning can never
|
|
55
|
-
// erase training data.
|
|
56
|
-
//
|
|
57
|
-
// No min_compatible_binary bump, on purpose: an old binary ignores these tables and
|
|
58
|
-
// recordTraceOutcome re-validates trace ids, so its stale writes are skipped; a bump
|
|
59
|
-
// would lock old binaries out of the whole store for an observability feature.
|
|
51
|
+
// Retrieval-trace persistence: one trace row per recall, a WITHOUT ROWID results table, append-only outcomes (audit_log pruning must not erase them).
|
|
52
|
+
// No min_compatible_binary bump on purpose: old binaries ignore these tables and recordTraceOutcome re-validates trace ids; a bump would lock them out.
|
|
60
53
|
db.exec(RECALL_TRACES_SCHEMA_SQL);
|
|
61
54
|
},
|
|
62
55
|
};
|
|
@@ -1,30 +1,8 @@
|
|
|
1
1
|
export const v41 = {
|
|
2
2
|
version: 41,
|
|
3
3
|
up: (db) => {
|
|
4
|
-
// Rejected-value tombstone.
|
|
5
|
-
//
|
|
6
|
-
// a durable say: the write-path guard in upsertEntryRow refuses any
|
|
7
|
-
// write that would re-introduce a value whose normalized digest
|
|
8
|
-
// matches a row here.
|
|
9
|
-
//
|
|
10
|
-
// No raw content and no preview stored. Follows the raw_archive
|
|
11
|
-
// redaction precedent (raw-archive.ts payload is {redacted:true, ...}):
|
|
12
|
-
// a rejected value may itself be a secret or PII ("never store my key
|
|
13
|
-
// again") — persisting it in the tombstone would defeat the point. The
|
|
14
|
-
// human sees the content at reject time (CLI echoes it); afterwards
|
|
15
|
-
// `reason` is the human-readable identity.
|
|
16
|
-
//
|
|
17
|
-
// No FK on source_memory_id (v40 precedent above: tombstone outlives
|
|
18
|
-
// the row it was sourced from) — provenance only.
|
|
19
|
-
//
|
|
20
|
-
// Reserved-word check on column names:
|
|
21
|
-
// tenant/digest/reason/rejected/source/normalized/chars are non-reserved.
|
|
22
|
-
//
|
|
23
|
-
// No min_compatible_binary bump, a deliberate tradeoff: an old binary sharing a synced store
|
|
24
|
-
// writes WITHOUT the guard until upgraded; documented in
|
|
25
|
-
// MEMORY_ENVELOPE.md rather than hard-locking every old binary out of
|
|
26
|
-
// the store, which is disproportionate for the dominant single-user
|
|
27
|
-
// single-binary deployment.
|
|
4
|
+
// Rejected-value tombstone: upsertEntryRow refuses writes matching a row's digest. No raw content stored (may be secret); no FK: it outlives its row.
|
|
5
|
+
// No min_compatible_binary bump, a deliberate tradeoff: an old binary writes without the guard until upgraded (see MEMORY_ENVELOPE.md).
|
|
28
6
|
db.exec(`
|
|
29
7
|
CREATE TABLE IF NOT EXISTS rejected_values (
|
|
30
8
|
tenant_id TEXT NOT NULL,
|
|
@@ -61,7 +61,7 @@ const CARDS_SCHEMA_SQL = `
|
|
|
61
61
|
export const v43 = {
|
|
62
62
|
version: 43,
|
|
63
63
|
up: (db) => {
|
|
64
|
-
// W2a work-queue cards
|
|
64
|
+
// W2a work-queue cards. Additive only, v41 precedent.
|
|
65
65
|
db.exec(CARDS_SCHEMA_SQL);
|
|
66
66
|
},
|
|
67
67
|
};
|
|
@@ -1,14 +1,8 @@
|
|
|
1
1
|
export const v44 = {
|
|
2
2
|
version: 44,
|
|
3
3
|
up: (db) => {
|
|
4
|
-
// Dormant memories (src/store/dormant.ts): with `dormant.enabled`,
|
|
5
|
-
//
|
|
6
|
-
// leaves `memories` in the same transaction, so recall, context and
|
|
7
|
-
// every sleep pass stop seeing it; entry_json is the full MemoryEntry
|
|
8
|
-
// snapshot `hippo dormant restore` writes back. No FK to memories (the
|
|
9
|
-
// memories row is gone by design). Additive only, v41 precedent: no
|
|
10
|
-
// min_compatible_binary bump. An older binary ignores the table and
|
|
11
|
-
// keeps deleting faded memories as it always did.
|
|
4
|
+
// Dormant memories (src/store/dormant.ts): with `dormant.enabled`, sleep moves a faded memory here; `hippo dormant restore` writes entry_json back.
|
|
5
|
+
// No FK to memories (the row is gone by design). Additive only: no min_compatible_binary bump, an older binary ignores the table and keeps deleting.
|
|
12
6
|
db.exec(`
|
|
13
7
|
CREATE TABLE IF NOT EXISTS dormant_memories (
|
|
14
8
|
tenant_id TEXT NOT NULL DEFAULT 'default',
|
|
@@ -1,13 +1,8 @@
|
|
|
1
1
|
export const v45 = {
|
|
2
2
|
version: 45,
|
|
3
3
|
up: (db) => {
|
|
4
|
-
// Token ledger (src/store/token-ledger.ts): one row per block of
|
|
5
|
-
//
|
|
6
|
-
// (sent), 'skip' (unchanged since the session's last inject, not sent), 'reset'
|
|
7
|
-
// (compaction dropped earlier injections, so the next one must be sent) or
|
|
8
|
-
// 'reread' (re-read by later calls, booked at session end per call day). block_hash
|
|
9
|
-
// lets the per-prompt hook skip an unchanged block. Rows older than the retention
|
|
10
|
-
// window are pruned on write. Additive only: no min_compatible_binary bump.
|
|
4
|
+
// Token ledger (src/store/token-ledger.ts): one row per block of memory text handed to an agent; `event` is inject, skip, reset (compaction) or reread.
|
|
5
|
+
// block_hash lets the per-prompt hook skip an unchanged block; rows past retention are pruned on write. Additive: no min_compatible_binary bump.
|
|
11
6
|
db.exec(`
|
|
12
7
|
CREATE TABLE IF NOT EXISTS token_ledger (
|
|
13
8
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
export const v47 = {
|
|
2
2
|
version: 47,
|
|
3
3
|
up: (db) => {
|
|
4
|
-
// Scope grants (src/store/auth.ts): a member key reads a
|
|
5
|
-
//
|
|
6
|
-
// min_compatible_binary bump.
|
|
4
|
+
// Scope grants (src/store/auth.ts): a member key reads a restricted scope only by an explicit row here.
|
|
5
|
+
// Additive only: no min_compatible_binary bump.
|
|
7
6
|
db.exec(`
|
|
8
7
|
CREATE TABLE IF NOT EXISTS api_key_scope_grants (
|
|
9
8
|
key_id TEXT NOT NULL,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export const v51 = {
|
|
2
2
|
version: 51,
|
|
3
3
|
up: (db) => {
|
|
4
|
-
// Both indexes serve loadAmbientCandidates (src/store.ts); their WHERE text must match its SQL for the planner to pick them.
|
|
4
|
+
// Both indexes serve loadAmbientCandidates (src/store/candidates.ts); their WHERE text must match its SQL for the planner to pick them.
|
|
5
5
|
// The drift index stays empty on a healthy store, so the drift probe is one index seek instead of a tenant scan. Additive only.
|
|
6
6
|
db.exec(`
|
|
7
7
|
CREATE INDEX IF NOT EXISTS idx_memories_pinned
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { tableHasColumn, tableExists } from '../tables.js';
|
|
2
|
+
export const v55 = {
|
|
3
|
+
version: 55,
|
|
4
|
+
up: (db) => {
|
|
5
|
+
// No backfill and no floor raise: an older binary names its INSERT columns, so it still writes.
|
|
6
|
+
if (!tableExists(db, 'delivery_events'))
|
|
7
|
+
return;
|
|
8
|
+
if (!tableHasColumn(db, 'delivery_events', 'tool_use_id'))
|
|
9
|
+
db.exec('ALTER TABLE delivery_events ADD COLUMN tool_use_id TEXT');
|
|
10
|
+
if (!tableHasColumn(db, 'delivery_events', 'failure_id'))
|
|
11
|
+
db.exec('ALTER TABLE delivery_events ADD COLUMN failure_id INTEGER');
|
|
12
|
+
db.exec(`CREATE UNIQUE INDEX IF NOT EXISTS idx_delivery_events_tool_call
|
|
13
|
+
ON delivery_events(tenant_id, session_id, tool_use_id)
|
|
14
|
+
WHERE tool_use_id IS NOT NULL AND turn_seq IS NOT NULL`);
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=v55.js.map
|
package/dist/db/open.d.ts
CHANGED
|
@@ -24,8 +24,6 @@ export declare function withSqliteAllowed<T>(fn: () => T): T;
|
|
|
24
24
|
export declare function withSqliteOffLoop<T>(fn: () => T): T;
|
|
25
25
|
/** Leaves withSqliteOffLoop's block and nothing else: another store's block and the folder marker still refuse, which withSqliteAllowed would waive. */
|
|
26
26
|
export declare function outsideSqliteOffLoop<T>(fn: () => T): T;
|
|
27
|
-
/** First line of a best-effort catch around a hippo.db open: an unported path must fail closed, not fall back silently. */
|
|
28
|
-
export declare function rethrowIfSqliteBlocked<E>(err: E): void;
|
|
29
27
|
/** store init --db, store copy --db and serve --db write this file in the hippo root; its text is the store kind. */
|
|
30
28
|
export declare const OTHER_STORE_MARKER = "other-store";
|
|
31
29
|
/** Throws where hippo.db must not open; checked on every open, not cached, since the marker can appear while a process runs. */
|
|
@@ -40,5 +38,7 @@ export declare function openHippoDbWithFacts(hippoRoot: string, opts?: {
|
|
|
40
38
|
}): OpenedDb;
|
|
41
39
|
/** Open an existing store without changing it: no mkdir, WAL switch, migration or mirror cleanup. Throws when hippo.db is missing. */
|
|
42
40
|
export declare function openHippoDbReadOnly(hippoRoot: string): DatabaseSyncLike;
|
|
41
|
+
/** Runs `fn` on an existing hippo.db opened without migrations, for a repair of a store whose schema is behind; closes it after. */
|
|
42
|
+
export declare function withUnmigratedDb<T>(hippoRoot: string, readOnly: boolean, fn: (db: DatabaseSyncLike) => T): T;
|
|
43
43
|
export declare function closeHippoDb(db: DatabaseSyncLike): void;
|
|
44
44
|
//# sourceMappingURL=open.d.ts.map
|
package/dist/db/open.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
2
2
|
import { existsSync, readFileSync } from 'node:fs';
|
|
3
3
|
import { join } from 'node:path';
|
|
4
|
-
import { errorMessage, log } from '../util/log.js';
|
|
4
|
+
import { errorFields, errorMessage, log } from '../util/log.js';
|
|
5
5
|
import { DatabaseSync } from './sqlite.js';
|
|
6
6
|
import { tableExists } from './tables.js';
|
|
7
7
|
import { assertBinaryCompatible } from './migrate.js';
|
|
8
|
+
import { DEFAULT_BUSY_WAIT_MS } from './busy.js';
|
|
8
9
|
import { connectWithFacts, getHippoDbPath } from './connect.js';
|
|
9
10
|
import { currentRequestStores, isScopedHandle, runWithRequestStores } from './request-stores.js';
|
|
10
11
|
import { OtherStoreFolderError, SqliteBlockedError } from '../util/sqlite-blocked.js';
|
|
@@ -49,11 +50,6 @@ export function withSqliteOffLoop(fn) {
|
|
|
49
50
|
export function outsideSqliteOffLoop(fn) {
|
|
50
51
|
return sqliteBlockedBy.getStore() === OFF_LOOP ? sqliteBlockedBy.exit(fn) : fn();
|
|
51
52
|
}
|
|
52
|
-
/** First line of a best-effort catch around a hippo.db open: an unported path must fail closed, not fall back silently. */
|
|
53
|
-
export function rethrowIfSqliteBlocked(err) {
|
|
54
|
-
if (err instanceof SqliteBlockedError)
|
|
55
|
-
throw err;
|
|
56
|
-
}
|
|
57
53
|
/** store init --db, store copy --db and serve --db write this file in the hippo root; its text is the store kind. */
|
|
58
54
|
export const OTHER_STORE_MARKER = 'other-store';
|
|
59
55
|
const markerWaived = new AsyncLocalStorage();
|
|
@@ -95,7 +91,7 @@ export function openHippoDbReadOnly(hippoRoot) {
|
|
|
95
91
|
assertSqliteAllowed(hippoRoot);
|
|
96
92
|
const db = new DatabaseSync(getHippoDbPath(hippoRoot), { readOnly: true });
|
|
97
93
|
try {
|
|
98
|
-
db.exec(
|
|
94
|
+
db.exec(`PRAGMA busy_timeout = ${DEFAULT_BUSY_WAIT_MS}`);
|
|
99
95
|
if (tableExists(db, 'meta'))
|
|
100
96
|
assertBinaryCompatible(db);
|
|
101
97
|
return db;
|
|
@@ -104,12 +100,28 @@ export function openHippoDbReadOnly(hippoRoot) {
|
|
|
104
100
|
try {
|
|
105
101
|
db.close();
|
|
106
102
|
}
|
|
107
|
-
catch {
|
|
108
|
-
|
|
103
|
+
catch (closeErr) {
|
|
104
|
+
log.error(`openHippoDbReadOnly: closing the handle after a failed open failed: ${errorMessage(closeErr)}`, errorFields(closeErr));
|
|
109
105
|
}
|
|
110
106
|
throw error;
|
|
111
107
|
}
|
|
112
108
|
}
|
|
109
|
+
/** Runs `fn` on an existing hippo.db opened without migrations, for a repair of a store whose schema is behind; closes it after. */
|
|
110
|
+
export function withUnmigratedDb(hippoRoot, readOnly, fn) {
|
|
111
|
+
// Skips openHippoDb, so it takes the same refusal itself.
|
|
112
|
+
assertSqliteAllowed(hippoRoot);
|
|
113
|
+
const file = getHippoDbPath(hippoRoot);
|
|
114
|
+
if (!existsSync(file))
|
|
115
|
+
throw new Error(`No existing Hippo database at ${file}`);
|
|
116
|
+
const db = new DatabaseSync(file, { readOnly });
|
|
117
|
+
try {
|
|
118
|
+
db.exec(`PRAGMA busy_timeout = ${DEFAULT_BUSY_WAIT_MS}`);
|
|
119
|
+
return fn(db);
|
|
120
|
+
}
|
|
121
|
+
finally {
|
|
122
|
+
db.close();
|
|
123
|
+
}
|
|
124
|
+
}
|
|
113
125
|
export function closeHippoDb(db) {
|
|
114
126
|
if (isScopedHandle(db))
|
|
115
127
|
return;
|
|
@@ -1,17 +1,10 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Physics state persistence for Hippo.
|
|
3
|
-
* Stores and loads particle state (position, velocity, mass, charge, temperature)
|
|
4
|
-
* in SQLite using BLOB columns for 384-dim vectors.
|
|
5
|
-
*/
|
|
1
|
+
/** Physics state persistence: particle state (position, velocity, mass, charge, temperature) in SQLite, with BLOB columns for 384-dim vectors. */
|
|
6
2
|
import type { DatabaseSyncLike } from './index.js';
|
|
7
3
|
import type { MemoryEntry } from '../core/memory.js';
|
|
8
4
|
import type { PhysicsParticle } from '../core/physics.js';
|
|
9
5
|
export declare function float32ToBuffer(arr: number[]): Buffer;
|
|
10
6
|
export declare function bufferToFloat32(buf: Buffer | Uint8Array): number[];
|
|
11
|
-
/**
|
|
12
|
-
* Create the memory_physics table (migration v8).
|
|
13
|
-
* Call this from db.ts MIGRATIONS array.
|
|
14
|
-
*/
|
|
7
|
+
/** Create the memory_physics table (migration v8). */
|
|
15
8
|
export declare function createPhysicsTable(db: DatabaseSyncLike): void;
|
|
16
9
|
/**
|
|
17
10
|
* Load physics state for specific memory IDs (or all if no IDs given).
|
|
@@ -21,19 +14,10 @@ export declare function loadPhysicsState(db: DatabaseSyncLike, memoryIds?: strin
|
|
|
21
14
|
* Save physics state for multiple particles (batch upsert).
|
|
22
15
|
*/
|
|
23
16
|
export declare function savePhysicsState(db: DatabaseSyncLike, particles: PhysicsParticle[]): void;
|
|
24
|
-
/**
|
|
25
|
-
* Initialize physics state for a memory from its embedding vector.
|
|
26
|
-
* Returns the new particle (does not persist — caller must save).
|
|
27
|
-
*/
|
|
17
|
+
/** Initialize physics state for a memory from its embedding vector; returns the new particle without persisting (the caller must save). */
|
|
28
18
|
export declare function initializeParticle(entry: MemoryEntry, embedding: number[], now?: Date): PhysicsParticle;
|
|
29
|
-
/**
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
*/
|
|
33
|
-
export declare function resetAllPhysicsState(db: DatabaseSyncLike, entries: MemoryEntry[], embeddingIndex: Record<string, number[]>, now?: Date): number;
|
|
34
|
-
/**
|
|
35
|
-
* Refresh mass, charge, and temperature for existing particles
|
|
36
|
-
* based on current memory attributes (called during consolidation).
|
|
37
|
-
*/
|
|
19
|
+
/** Drops every particle, then seeds one per entry that has an embedding; `entries` may be read lazily, as each batch is written before the next is read. */
|
|
20
|
+
export declare function resetAllPhysicsState(db: DatabaseSyncLike, entries: Iterable<MemoryEntry>, embeddingIndex: Record<string, number[]>, now?: Date): number;
|
|
21
|
+
/** Refresh mass, charge and temperature for existing particles from current memory attributes (called during consolidation). */
|
|
38
22
|
export declare function refreshParticleProperties(particles: PhysicsParticle[], entries: Map<string, MemoryEntry>, now?: Date): void;
|
|
39
23
|
//# sourceMappingURL=physics-state.d.ts.map
|