hippo-memory 1.69.0 → 1.70.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 +5 -2
- package/dist/agent-memories/apply.d.ts +3 -3
- package/dist/agent-memories/apply.js +16 -31
- package/dist/agent-memories/claude-code.d.ts +1 -3
- package/dist/agent-memories/claude-code.js +11 -7
- package/dist/agent-memories/copilot.js +3 -2
- package/dist/agent-memories/files.js +3 -2
- package/dist/agent-memories/gemini.js +6 -5
- package/dist/agent-memories/keys.js +3 -2
- package/dist/agent-memories/legacy.d.ts +2 -2
- package/dist/agent-memories/legacy.js +2 -2
- package/dist/agent-memories/report.d.ts +1 -1
- package/dist/agent-memories/report.js +1 -1
- package/dist/agent-memories/source.d.ts +1 -1
- package/dist/agent-memories/source.js +6 -5
- package/dist/agent-memories/sync.d.ts +1 -1
- package/dist/agent-memories/sync.js +24 -33
- package/dist/agent-memories/types.d.ts +1 -1
- package/dist/api/assemble.d.ts +2 -2
- package/dist/api/assemble.js +42 -32
- package/dist/api/audit.d.ts +4 -7
- package/dist/api/audit.js +6 -20
- package/dist/api/auth.d.ts +5 -18
- package/dist/api/auth.js +44 -194
- package/dist/api/auto-sleep.d.ts +13 -0
- package/dist/api/auto-sleep.js +32 -0
- package/dist/{availability.d.ts → api/availability.d.ts} +2 -2
- package/dist/{availability.js → api/availability.js} +12 -29
- package/dist/{context-auto.js → api/context-auto.js} +2 -1
- package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
- package/dist/{context-render.js → api/context-render.js} +7 -6
- package/dist/api/context-select.d.ts +5 -5
- package/dist/api/context-select.js +37 -45
- package/dist/api/context-types.d.ts +5 -5
- package/dist/api/context.d.ts +2 -4
- package/dist/api/context.js +48 -61
- package/dist/api/dormant.d.ts +3 -3
- package/dist/api/dormant.js +38 -107
- package/dist/api/drill-down.d.ts +2 -2
- package/dist/api/drill-down.js +37 -65
- package/dist/api/forget.d.ts +2 -11
- package/dist/api/forget.js +13 -46
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +2 -2
- package/dist/api/index.d.ts +26 -0
- package/dist/api/index.js +29 -0
- package/dist/api/instruction-detect.js +74 -0
- package/dist/api/learn.js +63 -55
- package/dist/api/ledger-db.d.ts +20 -0
- package/dist/api/ledger-db.js +79 -0
- package/dist/api/on-store.d.ts +16 -0
- package/dist/api/on-store.js +36 -0
- package/dist/api/outcome.d.ts +5 -42
- package/dist/api/outcome.js +15 -80
- package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
- package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
- package/dist/api/promote.d.ts +4 -15
- package/dist/api/promote.js +29 -106
- package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +7 -7
- package/dist/{prompt-hook.js → api/prompt-hook.js} +34 -53
- package/dist/api/quarantine.d.ts +5 -5
- package/dist/api/quarantine.js +30 -106
- package/dist/api/recall-core.d.ts +4 -0
- package/dist/api/recall-core.js +112 -0
- package/dist/{recall-history.js → api/recall-history.js} +30 -25
- package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +5 -5
- package/dist/{recall-pipeline.js → api/recall-pipeline.js} +47 -42
- package/dist/api/recall-record.d.ts +10 -13
- package/dist/api/recall-record.js +10 -30
- package/dist/api/recall-request.d.ts +2 -2
- package/dist/api/recall-request.js +3 -3
- package/dist/api/recall-types.d.ts +41 -16
- package/dist/api/recall.d.ts +1 -1
- package/dist/api/recall.js +39 -37
- package/dist/api/remember.d.ts +10 -12
- package/dist/api/remember.js +29 -45
- package/dist/api/session-owners.d.ts +4 -0
- package/dist/api/session-owners.js +17 -0
- package/dist/api/sleep-run.d.ts +7 -7
- package/dist/api/sleep-run.js +63 -75
- package/dist/api/sleep.d.ts +1 -1
- package/dist/api/tokens.d.ts +2 -2
- package/dist/api/tokens.js +9 -21
- package/dist/api/types.d.ts +2 -2
- package/dist/api/types.js +1 -1
- package/dist/capture/caller-session.d.ts +2 -2
- package/dist/capture/caller-session.js +8 -8
- package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
- package/dist/{capture-error.js → capture/capture-error.js} +7 -7
- package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
- package/dist/capture/command.d.ts +1 -1
- package/dist/capture/command.js +54 -41
- package/dist/capture/compact-resume-caller.d.ts +1 -1
- package/dist/capture/compact-resume-caller.js +7 -7
- package/dist/capture/compact.d.ts +4 -1
- package/dist/capture/compact.js +40 -22
- package/dist/capture/compaction-items-caller.d.ts +1 -1
- package/dist/capture/compaction-items-caller.js +7 -5
- package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
- package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
- package/dist/{compaction-record.js → capture/compaction-record.js} +48 -94
- package/dist/{compaction-spool.js → capture/compaction-spool.js} +17 -13
- package/dist/capture/copilot-transcript.js +1 -1
- package/dist/capture/extract.js +2 -2
- package/dist/capture/failure-caller.d.ts +2 -2
- package/dist/capture/failure-caller.js +6 -6
- package/dist/capture/failure-reading.d.ts +2 -5
- package/dist/capture/failure-reading.js +11 -12
- package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
- package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
- package/dist/capture/pre-compact-caller.d.ts +1 -1
- package/dist/capture/pre-compact-caller.js +2 -2
- package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +1 -5
- package/dist/{session-digest.js → capture/session-digest.js} +17 -23
- package/dist/capture/session-end-caller.d.ts +2 -2
- package/dist/capture/session-end-caller.js +1 -1
- package/dist/capture/session-texts.d.ts +1 -1
- package/dist/capture/session-texts.js +5 -5
- package/dist/capture/session-worker.js +6 -4
- package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
- package/dist/capture/transcript.js +68 -74
- package/dist/capture/working-state.d.ts +0 -3
- package/dist/capture/working-state.js +7 -7
- package/dist/{audit-prune.d.ts → cli/audit-prune.d.ts} +1 -2
- package/dist/{audit-prune.js → cli/audit-prune.js} +5 -39
- package/dist/cli/audit.d.ts +2 -2
- package/dist/cli/audit.js +77 -72
- package/dist/cli/auth.d.ts +2 -1
- package/dist/cli/auth.js +18 -20
- package/dist/cli/briefs.d.ts +4 -3
- package/dist/cli/briefs.js +59 -181
- package/dist/cli/card.d.ts +2 -1
- package/dist/cli/card.js +25 -23
- package/dist/{client.d.ts → cli/client.d.ts} +1 -1
- package/dist/{client.js → cli/client.js} +1 -1
- package/dist/cli/compact-resume-payload.d.ts +8 -0
- package/dist/cli/compact-resume-payload.js +39 -0
- package/dist/cli/context.d.ts +2 -13
- package/dist/cli/context.js +41 -71
- package/dist/cli/continuity.d.ts +6 -5
- package/dist/cli/continuity.js +109 -99
- package/dist/{correction-latency.d.ts → cli/correction-latency.d.ts} +1 -1
- package/dist/cli/curate.d.ts +9 -9
- package/dist/cli/curate.js +177 -149
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +46 -34
- package/dist/cli/decisions.d.ts +4 -3
- package/dist/cli/decisions.js +108 -218
- package/dist/cli/eval.d.ts +1 -3
- package/dist/cli/eval.js +43 -31
- package/dist/cli/explain.d.ts +1 -1
- package/dist/cli/explain.js +35 -19
- package/dist/cli/flag-values.d.ts +25 -0
- package/dist/cli/flag-values.js +103 -0
- package/dist/cli/flags.d.ts +303 -0
- package/dist/cli/flags.js +169 -0
- package/dist/cli/goals.d.ts +2 -1
- package/dist/cli/goals.js +39 -34
- package/dist/cli/hook-runtime.d.ts +49 -0
- package/dist/cli/hook-runtime.js +155 -0
- package/dist/cli/init.d.ts +2 -1
- package/dist/cli/init.js +151 -118
- package/dist/cli/install-steps.d.ts +7 -0
- package/dist/cli/install-steps.js +110 -0
- package/dist/cli/last-sleep.d.ts +2 -1
- package/dist/cli/last-sleep.js +9 -7
- package/dist/cli/maintenance.d.ts +5 -4
- package/dist/cli/maintenance.js +31 -27
- package/dist/cli/object-verbs.d.ts +40 -0
- package/dist/cli/object-verbs.js +65 -0
- package/dist/{owner-validation.d.ts → cli/owner-validation.d.ts} +0 -1
- package/dist/{owner-validation.js → cli/owner-validation.js} +2 -2
- package/dist/cli/playbooks.d.ts +4 -3
- package/dist/cli/playbooks.js +77 -280
- package/dist/cli/print.d.ts +18 -0
- package/dist/cli/print.js +85 -0
- package/dist/cli/projects.d.ts +2 -3
- package/dist/cli/projects.js +56 -49
- package/dist/{provenance-coverage.d.ts → cli/provenance-coverage.d.ts} +1 -1
- package/dist/cli/quality-repair-once.js +4 -4
- package/dist/{quality-repair.js → cli/quality-repair.js} +23 -37
- package/dist/cli/recall.d.ts +2 -4
- package/dist/cli/recall.js +101 -150
- package/dist/{refine-llm.d.ts → cli/refine-llm.d.ts} +1 -1
- package/dist/{refine-llm.js → cli/refine-llm.js} +70 -82
- package/dist/cli/remember.d.ts +1 -3
- package/dist/cli/remember.js +124 -103
- package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +3 -1
- package/dist/{scheduler.js → cli/scheduler.js} +13 -7
- package/dist/cli/serve.d.ts +1 -1
- package/dist/cli/serve.js +34 -4
- package/dist/cli/session-hooks.d.ts +4 -4
- package/dist/cli/session-hooks.js +190 -184
- package/dist/cli/setup.d.ts +2 -1
- package/dist/cli/setup.js +41 -21
- package/dist/cli/shared.d.ts +5 -95
- package/dist/cli/shared.js +18 -369
- package/dist/cli/slack.d.ts +2 -1
- package/dist/cli/slack.js +31 -55
- package/dist/cli/sleep-render.d.ts +4 -0
- package/dist/cli/sleep-render.js +61 -0
- package/dist/cli/sleep.d.ts +2 -8
- package/dist/cli/sleep.js +20 -76
- package/dist/cli/status.d.ts +3 -3
- package/dist/cli/status.js +39 -41
- package/dist/{stdin.js → cli/stdin.js} +6 -6
- package/dist/cli/transfer.d.ts +4 -4
- package/dist/cli/transfer.js +68 -42
- package/dist/cli/usage.js +4 -2
- package/dist/cli.d.ts +289 -5
- package/dist/cli.js +184 -117
- package/dist/connectors/dlq.d.ts +44 -0
- package/dist/connectors/dlq.js +30 -0
- package/dist/connectors/github/backfill.d.ts +1 -1
- package/dist/connectors/github/backfill.js +29 -66
- package/dist/connectors/github/cli-impl.js +59 -74
- package/dist/connectors/github/deletion.d.ts +5 -6
- package/dist/connectors/github/deletion.js +18 -52
- package/dist/connectors/github/dlq.d.ts +7 -61
- package/dist/connectors/github/dlq.js +19 -119
- package/dist/connectors/github/ingest.d.ts +2 -31
- package/dist/connectors/github/ingest.js +20 -83
- package/dist/connectors/github/octokit-client.d.ts +1 -1
- package/dist/connectors/github/octokit-client.js +2 -1
- package/dist/connectors/github/tenant-routing.d.ts +2 -2
- package/dist/connectors/github/tenant-routing.js +10 -36
- package/dist/connectors/github/transform.d.ts +1 -1
- package/dist/connectors/github/types.d.ts +1 -1
- package/dist/connectors/github/types.js +15 -18
- package/dist/connectors/github/webhook.d.ts +3 -2
- package/dist/connectors/github/webhook.js +84 -87
- package/dist/connectors/slack/backfill.d.ts +1 -1
- package/dist/connectors/slack/backfill.js +5 -29
- package/dist/connectors/slack/deletion.d.ts +4 -7
- package/dist/connectors/slack/deletion.js +20 -49
- package/dist/connectors/slack/dlq.d.ts +7 -49
- package/dist/connectors/slack/dlq.js +25 -118
- package/dist/connectors/slack/ingest.d.ts +5 -18
- package/dist/connectors/slack/ingest.js +27 -91
- package/dist/connectors/slack/signature.js +2 -1
- package/dist/connectors/slack/tenant-routing.d.ts +4 -1
- package/dist/connectors/slack/tenant-routing.js +13 -14
- package/dist/connectors/slack/transform.d.ts +1 -1
- package/dist/connectors/slack/types.d.ts +1 -1
- package/dist/connectors/slack/types.js +3 -12
- package/dist/connectors/slack/web-client.js +2 -2
- package/dist/connectors/slack/webhook.d.ts +3 -2
- package/dist/connectors/slack/webhook.js +75 -82
- package/dist/connectors/slack/workspaces.d.ts +4 -17
- package/dist/connectors/slack/workspaces.js +4 -34
- package/dist/consolidate/conflicts.d.ts +1 -1
- package/dist/consolidate/conflicts.js +4 -4
- package/dist/{dag.d.ts → consolidate/dag.d.ts} +1 -1
- package/dist/{dag.js → consolidate/dag.js} +60 -81
- package/dist/consolidate/decay.d.ts +2 -2
- package/dist/consolidate/decay.js +28 -22
- package/dist/{dedupe.js → consolidate/dedupe.js} +11 -19
- package/dist/consolidate/flush-units.d.ts +2 -2
- package/dist/{half-life-migration.d.ts → consolidate/half-life-migration.d.ts} +3 -9
- package/dist/consolidate/half-life-migration.js +106 -0
- package/dist/consolidate/llm-passes.js +8 -8
- package/dist/{memory-value.d.ts → consolidate/memory-value.d.ts} +7 -2
- package/dist/{memory-value.js → consolidate/memory-value.js} +9 -7
- package/dist/consolidate/merge.js +57 -54
- package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
- package/dist/{merged-row.js → consolidate/merged-row.js} +2 -2
- package/dist/consolidate/physics-pass.js +46 -46
- package/dist/{replay.d.ts → consolidate/replay.d.ts} +1 -1
- package/dist/{replay.js → consolidate/replay.js} +2 -2
- package/dist/consolidate/run.d.ts +7 -13
- package/dist/consolidate/run.js +6 -37
- package/dist/consolidate/sleep.d.ts +1 -1
- package/dist/consolidate/sleep.js +64 -134
- package/dist/{trace.js → consolidate/trace.js} +4 -6
- package/dist/consolidate/traces.js +34 -29
- package/dist/{ablation.js → core/ablation.js} +1 -1
- package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
- package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
- package/dist/{ambient.js → core/ambient.js} +12 -10
- package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +13 -2
- package/dist/{capture-contract.js → core/capture-contract.js} +64 -0
- package/dist/{compare.d.ts → core/compare.d.ts} +2 -0
- package/dist/{compare.js → core/compare.js} +10 -3
- package/dist/{config.d.ts → core/config.d.ts} +6 -6
- package/dist/{config.js → core/config.js} +99 -72
- package/dist/core/handoff.js +87 -0
- package/dist/{memory-quality.js → core/memory-quality.js} +1 -1
- package/dist/{memory.d.ts → core/memory.d.ts} +17 -5
- package/dist/{memory.js → core/memory.js} +110 -82
- package/dist/{physics.d.ts → core/physics.d.ts} +1 -1
- package/dist/{physics.js → core/physics.js} +2 -1
- package/dist/{project-identity.d.ts → core/project-identity.d.ts} +0 -5
- package/dist/{project-identity.js → core/project-identity.js} +5 -17
- package/dist/{project-remote.js → core/project-remote.js} +4 -4
- package/dist/{prompt-recall.js → core/prompt-recall.js} +1 -1
- package/dist/{salience.js → core/salience.js} +35 -20
- package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
- package/dist/{search/types.js → core/search-types.js} +1 -1
- package/dist/core/session-digest-row.d.ts +5 -0
- package/dist/core/session-digest-row.js +6 -0
- package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
- package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +5 -5
- package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
- package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
- package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +9 -9
- package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +101 -104
- package/dist/{dashboard.js → dashboard/dashboard.js} +124 -53
- package/dist/db/backup.js +1 -1
- package/dist/db/busy.d.ts +18 -1
- package/dist/db/busy.js +74 -9
- package/dist/db/connect.d.ts +10 -2
- package/dist/db/connect.js +43 -10
- package/dist/db/index.d.ts +9 -0
- package/dist/db/index.js +8 -0
- package/dist/db/meta.d.ts +4 -0
- package/dist/db/meta.js +11 -1
- package/dist/db/migrate.d.ts +8 -1
- package/dist/db/migrate.js +25 -30
- package/dist/db/migrations/v08.js +1 -1
- package/dist/db/migrations/v14.js +39 -35
- package/dist/db/migrations/v16.js +29 -26
- package/dist/db/migrations/v18.js +6 -5
- package/dist/db/migrations/v20.js +4 -2
- package/dist/db/migrations/v22.js +39 -36
- package/dist/db/migrations/v24.js +27 -22
- package/dist/db/migrations/v29.js +37 -32
- package/dist/db/migrations/v31.js +36 -31
- package/dist/db/migrations/v35.js +1 -1
- package/dist/db/migrations/v39.js +1 -1
- package/dist/db/migrations/v40.js +15 -14
- package/dist/db/migrations/v43.js +7 -6
- package/dist/db/migrations/v44.js +1 -1
- package/dist/db/migrations/v45.js +1 -1
- package/dist/db/migrations/v46.js +1 -1
- package/dist/db/migrations/v47.js +1 -1
- package/dist/db/migrations/v48.js +1 -1
- package/dist/db/migrations/v49.js +1 -1
- package/dist/db/migrations/v50.js +8 -7
- package/dist/db/migrations/v52.js +1 -1
- package/dist/db/open.d.ts +9 -1
- package/dist/db/open.js +21 -4
- package/dist/{physics-state.d.ts → db/physics-state.d.ts} +3 -3
- package/dist/{physics-state.js → db/physics-state.js} +9 -16
- package/dist/{raw-archive-mirror-cleanup.d.ts → db/raw-archive-mirror-cleanup.d.ts} +5 -5
- package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +11 -6
- package/dist/db/request-stores.d.ts +15 -2
- package/dist/db/request-stores.js +37 -15
- package/dist/db/tables.d.ts +2 -0
- package/dist/db/tables.js +6 -0
- package/dist/{vector-store.d.ts → db/vector-store.d.ts} +4 -2
- package/dist/{vector-store.js → db/vector-store.js} +76 -51
- package/dist/db/wal-checkpointer.d.ts +11 -0
- package/dist/db/wal-checkpointer.js +92 -0
- package/dist/doctor.js +105 -136
- package/dist/entry/json-hooks.d.ts +1 -1
- package/dist/entry/json-hooks.js +1 -1
- package/dist/entry/project-identity.d.ts +1 -1
- package/dist/entry/project-identity.js +1 -1
- package/dist/entry/session-text.d.ts +3 -3
- package/dist/entry/session-text.js +3 -3
- package/dist/{eval-stats.js → eval/eval-stats.js} +12 -9
- package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +1 -1
- package/dist/{eval-suite.js → eval/eval-suite.js} +25 -23
- package/dist/{eval.d.ts → eval/eval.d.ts} +1 -1
- package/dist/{eval.js → eval/eval.js} +29 -22
- package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -3
- package/dist/{judgment.js → eval/judgment.js} +4 -9
- package/dist/extensions/openclaw-plugin/index.js +1 -2
- package/dist/graph/delta.d.ts +3 -2
- package/dist/graph/delta.js +9 -23
- package/dist/{graph-extract.d.ts → graph/extract.d.ts} +6 -6
- package/dist/{graph-extract.js → graph/extract.js} +37 -52
- package/dist/{graph-recall.d.ts → graph/recall.d.ts} +2 -2
- package/dist/{graph-recall.js → graph/recall.js} +55 -36
- package/dist/{graph-stream.d.ts → graph/stream.d.ts} +2 -2
- package/dist/{graph-stream.js → graph/stream.js} +9 -7
- package/dist/{graph-view.d.ts → graph/view.d.ts} +6 -3
- package/dist/{graph-view.js → graph/view.js} +127 -167
- package/dist/graph/write.d.ts +4 -76
- package/dist/graph/write.js +13 -397
- package/dist/hooks/codex-session.js +1 -1
- package/dist/hooks/codex-wrapper.js +14 -15
- package/dist/hooks/copilot.d.ts +1 -8
- package/dist/hooks/copilot.js +14 -15
- package/dist/{cli → hooks}/hook-blocks.js +1 -1
- package/dist/hooks/json-hooks.d.ts +1 -1
- package/dist/hooks/json-hooks.js +31 -122
- package/dist/hooks/opencode.js +35 -27
- package/dist/hooks/shared.d.ts +0 -4
- package/dist/hooks/shared.js +1 -5
- package/dist/importers/core.d.ts +2 -6
- package/dist/importers/core.js +41 -39
- package/dist/importers/markdown-parse.d.ts +1 -10
- package/dist/importers/markdown-parse.js +2 -19
- package/dist/importers/markdown.js +2 -1
- package/dist/importers/sources.js +50 -46
- package/dist/importers/vault.js +71 -92
- package/dist/index.d.ts +22 -22
- package/dist/index.js +21 -21
- package/dist/{autolearn.d.ts → learn/autolearn.d.ts} +2 -2
- package/dist/{autolearn.js → learn/autolearn.js} +13 -11
- package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
- package/dist/{churn-git.js → learn/churn-git.js} +6 -4
- package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
- package/dist/learn/extract.js +125 -0
- package/dist/{forward-claim-detector.d.ts → learn/forward-claim-detector.d.ts} +1 -1
- package/dist/{forward-claim-detector.js → learn/forward-claim-detector.js} +1 -1
- package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +4 -0
- package/dist/{invalidation.js → learn/invalidation.js} +83 -99
- package/dist/mcp/admin-tools.d.ts +1 -1
- package/dist/mcp/admin-tools.js +37 -60
- package/dist/mcp/format.d.ts +5 -5
- package/dist/mcp/format.js +7 -6
- package/dist/mcp/framing.d.ts +6 -0
- package/dist/mcp/framing.js +11 -3
- package/dist/mcp/memory-tools.js +7 -27
- package/dist/mcp/protocol.d.ts +6 -10
- package/dist/mcp/protocol.js +8 -14
- package/dist/mcp/recall-tools.d.ts +2 -2
- package/dist/mcp/recall-tools.js +68 -50
- package/dist/mcp/request.js +62 -60
- package/dist/mcp/server.js +1 -1
- package/dist/mcp/session-state.d.ts +1 -2
- package/dist/mcp/session-state.js +2 -2
- package/dist/mcp/shared-gate.js +1 -1
- package/dist/mcp/stdio.js +69 -31
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +2 -2
- package/dist/{customer-notes.d.ts → objects/customer-notes.d.ts} +7 -24
- package/dist/objects/customer-notes.js +112 -0
- package/dist/{decisions.d.ts → objects/decisions.d.ts} +13 -28
- package/dist/objects/decisions.js +101 -0
- package/dist/objects/descriptor.d.ts +52 -0
- package/dist/objects/descriptor.js +4 -0
- package/dist/objects/fields.d.ts +15 -0
- package/dist/objects/fields.js +21 -0
- package/dist/{incidents.d.ts → objects/incidents.d.ts} +17 -44
- package/dist/objects/incidents.js +130 -0
- package/dist/objects/lifecycle.d.ts +27 -0
- package/dist/objects/lifecycle.js +96 -0
- package/dist/{policies.d.ts → objects/policies.d.ts} +14 -27
- package/dist/objects/policies.js +189 -0
- package/dist/{processes.d.ts → objects/processes.d.ts} +14 -34
- package/dist/objects/processes.js +146 -0
- package/dist/{project-briefs.d.ts → objects/project-briefs.d.ts} +19 -40
- package/dist/objects/project-briefs.js +255 -0
- package/dist/{skills.d.ts → objects/skills.d.ts} +11 -26
- package/dist/objects/skills.js +156 -0
- package/dist/postinstall.js +4 -2
- package/dist/predictions/planning-fallacy.d.ts +4 -76
- package/dist/predictions/planning-fallacy.js +4 -129
- package/dist/rerankers/clef.d.ts +2 -6
- package/dist/rerankers/clef.js +27 -47
- package/dist/rerankers/cross-encoder.d.ts +0 -7
- package/dist/rerankers/cross-encoder.js +15 -23
- package/dist/rerankers/index.js +8 -7
- package/dist/rerankers/jev.d.ts +1 -4
- package/dist/rerankers/jev.js +30 -49
- package/dist/rerankers/llm.d.ts +2 -4
- package/dist/rerankers/llm.js +33 -50
- package/dist/rerankers/outage-warning.d.ts +7 -0
- package/dist/rerankers/outage-warning.js +31 -0
- package/dist/rerankers/remote.d.ts +3 -0
- package/dist/rerankers/remote.js +23 -0
- package/dist/rerankers/types.d.ts +1 -1
- package/dist/search/as-of.d.ts +1 -1
- package/dist/search/bm25-search.d.ts +2 -2
- package/dist/search/bm25-search.js +7 -7
- package/dist/search/bm25.d.ts +1 -1
- package/dist/search/bm25.js +1 -1
- package/dist/search/boosts.d.ts +5 -1
- package/dist/search/boosts.js +34 -13
- package/dist/search/breakdown.d.ts +2 -2
- package/dist/search/breakdown.js +2 -1
- package/dist/search/explain.d.ts +1 -1
- package/dist/search/explain.js +3 -2
- package/dist/search/finalize.d.ts +2 -2
- package/dist/search/finalize.js +4 -3
- package/dist/search/fusion.d.ts +1 -1
- package/dist/search/fusion.js +3 -3
- package/dist/search/hybrid-score.d.ts +2 -2
- package/dist/search/hybrid-score.js +1 -1
- package/dist/search/hybrid.d.ts +4 -4
- package/dist/search/hybrid.js +11 -8
- package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
- package/dist/{multihop.js → search/multihop.js} +7 -5
- package/dist/{path-context.js → search/path-context.js} +3 -1
- package/dist/search/physics-search.d.ts +4 -4
- package/dist/search/physics-search.js +15 -15
- package/dist/search/rerank.d.ts +3 -3
- package/dist/search/rerank.js +4 -3
- package/dist/search/temporal.d.ts +1 -1
- package/dist/search/temporal.js +5 -2
- package/dist/search/vector.d.ts +3 -3
- package/dist/search/vector.js +17 -11
- package/dist/server/auth.d.ts +1 -1
- package/dist/server/auth.js +26 -18
- package/dist/server/boot.d.ts +24 -0
- package/dist/server/boot.js +465 -0
- package/dist/server/client-ip.d.ts +5 -1
- package/dist/server/client-ip.js +18 -6
- package/dist/server/cursor.d.ts +1 -1
- package/dist/server/cursor.js +2 -3
- package/dist/server/deadline.d.ts +13 -0
- package/dist/server/deadline.js +45 -0
- package/dist/server/key-check-bounds.d.ts +8 -0
- package/dist/server/key-check-bounds.js +46 -0
- package/dist/server/lifecycle.js +1 -1
- package/dist/server/mcp-http.d.ts +1 -4
- package/dist/server/mcp-http.js +34 -24
- package/dist/server/ready.d.ts +7 -0
- package/dist/server/ready.js +38 -0
- package/dist/server/request.d.ts +10 -4
- package/dist/server/request.js +63 -12
- package/dist/server/route-table.d.ts +15 -0
- package/dist/server/route-table.js +209 -0
- package/dist/server/routes/admin.js +13 -8
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +32 -97
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +42 -105
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +42 -95
- package/dist/server/routes/memories.js +12 -14
- package/dist/server/routes/object-routes.d.ts +40 -0
- package/dist/server/routes/object-routes.js +80 -0
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +40 -124
- package/dist/server/routes/predictions.js +29 -45
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +38 -118
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +38 -110
- package/dist/server/routes/recall.js +14 -12
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +37 -125
- package/dist/{server-detect.js → server/server-detect.js} +1 -1
- package/dist/server/sleep-child.d.ts +2 -0
- package/dist/server/sleep-child.js +19 -0
- package/dist/server/sleep-offload.d.ts +20 -0
- package/dist/server/sleep-offload.js +70 -0
- package/dist/server/tls.d.ts +6 -0
- package/dist/server/tls.js +24 -0
- package/dist/server/types.d.ts +27 -8
- package/dist/server/validation.d.ts +3 -4
- package/dist/server/validation.js +6 -11
- package/dist/server.d.ts +39 -61
- package/dist/server.js +24 -568
- package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +1 -1
- package/dist/{project-merge.js → sharing/project-merge.js} +26 -45
- package/dist/{scope.js → sharing/scope.js} +1 -1
- package/dist/{shared.d.ts → sharing/shared.d.ts} +10 -9
- package/dist/{shared.js → sharing/shared.js} +100 -77
- package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
- package/dist/{ambient-store.js → store/ambient.js} +10 -10
- package/dist/store/audit-event.d.ts +11 -5
- package/dist/store/audit-event.js +5 -4
- package/dist/{audit.d.ts → store/audit.d.ts} +27 -3
- package/dist/{audit.js → store/audit.js} +91 -6
- package/dist/{auth.d.ts → store/auth.d.ts} +15 -32
- package/dist/{auth.js → store/auth.js} +100 -92
- package/dist/store/candidates.d.ts +23 -12
- package/dist/store/candidates.js +87 -35
- package/dist/{card-detail.d.ts → store/card-detail.d.ts} +3 -3
- package/dist/{card-detail.js → store/card-detail.js} +1 -1
- package/dist/{store-cards.d.ts → store/cards.d.ts} +14 -9
- package/dist/{store-cards.js → store/cards.js} +85 -146
- package/dist/store/compactions.d.ts +78 -0
- package/dist/store/compactions.js +93 -0
- package/dist/store/conflicts.d.ts +22 -5
- package/dist/store/conflicts.js +160 -109
- package/dist/store/connectors/github.d.ts +84 -0
- package/dist/store/connectors/github.js +180 -0
- package/dist/store/connectors/slack.d.ts +69 -0
- package/dist/store/connectors/slack.js +177 -0
- package/dist/store/dashboard-reads.d.ts +27 -0
- package/dist/store/dashboard-reads.js +92 -0
- package/dist/store/delete-and-batch.d.ts +20 -24
- package/dist/store/delete-and-batch.js +64 -40
- package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +12 -5
- package/dist/{delivery-recorder.js → store/delivery-recorder.js} +42 -30
- package/dist/store/descendant-page.d.ts +12 -0
- package/dist/store/descendant-page.js +99 -0
- package/dist/store/diagnostics.d.ts +47 -0
- package/dist/store/diagnostics.js +51 -0
- package/dist/store/doctor-reads.d.ts +16 -0
- package/dist/store/doctor-reads.js +19 -0
- package/dist/{dormant.d.ts → store/dormant.d.ts} +46 -12
- package/dist/{dormant.js → store/dormant.js} +151 -6
- package/dist/{embeddings.d.ts → store/embeddings/index.d.ts} +10 -6
- package/dist/{embeddings.js → store/embeddings/index.js} +60 -44
- package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
- package/dist/{local-embedding.js → store/embeddings/local.js} +68 -57
- package/dist/{embedding-provider.d.ts → store/embeddings/provider.d.ts} +2 -2
- package/dist/{embedding-provider.js → store/embeddings/provider.js} +47 -32
- package/dist/store/entry-reads.d.ts +46 -7
- package/dist/store/entry-reads.js +120 -21
- package/dist/store/entry-row.d.ts +8 -2
- package/dist/store/entry-row.js +28 -8
- package/dist/store/entry-writes.d.ts +33 -4
- package/dist/store/entry-writes.js +108 -26
- package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
- package/dist/{failure-log.js → store/failure-log.js} +9 -2
- package/dist/{goals.d.ts → store/goals.d.ts} +6 -46
- package/dist/{goals.js → store/goals.js} +45 -94
- package/dist/store/graph-queue.d.ts +29 -0
- package/dist/store/graph-queue.js +101 -0
- package/dist/{graph/read.d.ts → store/graph-reads.d.ts} +26 -34
- package/dist/{graph/read.js → store/graph-reads.js} +63 -115
- package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +68 -8
- package/dist/{graph/rows.js → store/graph-rows.js} +14 -3
- package/dist/store/graph-view-rows.d.ts +12 -0
- package/dist/store/graph-view-rows.js +67 -0
- package/dist/store/graph-writes.d.ts +58 -0
- package/dist/store/graph-writes.js +256 -0
- package/dist/store/half-life.d.ts +34 -0
- package/dist/store/half-life.js +77 -0
- package/dist/store/handoffs.d.ts +1 -1
- package/dist/store/handoffs.js +39 -30
- package/dist/store/index-and-stats.d.ts +8 -1
- package/dist/store/index-and-stats.js +51 -48
- package/dist/store/index.d.ts +4 -0
- package/dist/store/index.js +3 -0
- package/dist/store/key-audit.d.ts +2 -2
- package/dist/store/key-audit.js +4 -4
- package/dist/store/key-writes.d.ts +12 -5
- package/dist/store/key-writes.js +30 -4
- package/dist/store/ledger-turn.d.ts +17 -0
- package/dist/store/ledger-turn.js +27 -0
- package/dist/store/markdown.d.ts +1 -1
- package/dist/store/markdown.js +4 -3
- package/dist/store/mirrors.d.ts +5 -7
- package/dist/store/mirrors.js +39 -25
- package/dist/store/object-types.d.ts +189 -0
- package/dist/store/object-types.js +4 -0
- package/dist/store/open.d.ts +6 -4
- package/dist/store/open.js +24 -23
- package/dist/store/planning-fallacy-evidence.d.ts +42 -0
- package/dist/store/planning-fallacy-evidence.js +81 -0
- package/dist/store/port.d.ts +646 -0
- package/dist/store/port.js +17 -0
- package/dist/{predictions/store.d.ts → store/predictions.d.ts} +15 -2
- package/dist/{predictions/store.js → store/predictions.js} +52 -67
- package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
- package/dist/{quarantine.js → store/quarantine.js} +64 -22
- package/dist/{raw-archive.d.ts → store/raw-archive.d.ts} +3 -1
- package/dist/{raw-archive.js → store/raw-archive.js} +6 -2
- package/dist/{recall-scope.d.ts → store/recall-scope.d.ts} +2 -2
- package/dist/{recall-scope.js → store/recall-scope.js} +3 -3
- package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -14
- package/dist/{recall-trace.js → store/recall-trace.js} +38 -43
- package/dist/store/rejected-values.d.ts +55 -0
- package/dist/store/rejected-values.js +162 -0
- package/dist/{rejection.d.ts → store/rejection.d.ts} +2 -2
- package/dist/{rejection.js → store/rejection.js} +3 -2
- package/dist/store/rows.d.ts +2 -3
- package/dist/store/rows.js +18 -11
- package/dist/store/search-rows.d.ts +15 -4
- package/dist/store/search-rows.js +41 -28
- package/dist/store/sessions.d.ts +13 -2
- package/dist/store/sessions.js +79 -45
- package/dist/store/sqlite/commit-watch.d.ts +4 -0
- package/dist/store/sqlite/commit-watch.js +29 -0
- package/dist/store/sqlite/connector-events-group.d.ts +5 -0
- package/dist/store/sqlite/connector-events-group.js +50 -0
- package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
- package/dist/store/sqlite/connector-writes-group.js +65 -0
- package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
- package/dist/store/sqlite/dag-reads-group.js +45 -0
- package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
- package/dist/store/{entry-writes-group.js → sqlite/entry-writes-group.js} +73 -60
- package/dist/store/sqlite/error-codec.d.ts +17 -0
- package/dist/store/sqlite/error-codec.js +59 -0
- package/dist/store/sqlite/executor-counts.d.ts +10 -0
- package/dist/store/sqlite/executor-counts.js +11 -0
- package/dist/store/sqlite/executor.d.ts +28 -0
- package/dist/store/sqlite/executor.js +286 -0
- package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
- package/dist/store/sqlite/graph-reads-group.js +18 -0
- package/dist/store/sqlite/local.d.ts +21 -0
- package/dist/store/sqlite/local.js +38 -0
- package/dist/store/sqlite/object-rows.d.ts +102 -0
- package/dist/store/sqlite/object-rows.js +218 -0
- package/dist/store/sqlite/objects-group.d.ts +20 -0
- package/dist/store/sqlite/objects-group.js +314 -0
- package/dist/store/sqlite/predictions-group.d.ts +5 -0
- package/dist/store/sqlite/predictions-group.js +28 -0
- package/dist/store/sqlite/quarantine-group.d.ts +5 -0
- package/dist/store/sqlite/quarantine-group.js +38 -0
- package/dist/store/sqlite/store.d.ts +26 -0
- package/dist/store/sqlite/store.js +295 -0
- package/dist/store/sqlite/vector-pack.d.ts +18 -0
- package/dist/store/sqlite/vector-pack.js +46 -0
- package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
- package/dist/store/sqlite/vector-reads-group.js +23 -0
- package/dist/store/sqlite/worker-entry.d.ts +2 -0
- package/dist/store/sqlite/worker-entry.js +8 -0
- package/dist/store/sqlite/worker-jobs.d.ts +5 -0
- package/dist/store/sqlite/worker-jobs.js +116 -0
- package/dist/store/sqlite/worker-ops.d.ts +124 -0
- package/dist/store/sqlite/worker-ops.js +82 -0
- package/dist/store/sqlite/worker-store.d.ts +8 -0
- package/dist/store/sqlite/worker-store.js +76 -0
- package/dist/store/summaries.d.ts +2 -11
- package/dist/store/summaries.js +17 -44
- package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
- package/dist/store/tenant-lookup.d.ts +1 -1
- package/dist/{tenant.d.ts → store/tenant.d.ts} +2 -2
- package/dist/{tenant.js → store/tenant.js} +1 -1
- package/dist/store/token-ledger-rows.d.ts +61 -0
- package/dist/store/token-ledger-rows.js +68 -0
- package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +2 -9
- package/dist/{token-ledger.js → store/token-ledger.js} +31 -78
- package/dist/store/tombstone-checks.d.ts +12 -0
- package/dist/store/tombstone-checks.js +31 -0
- package/dist/store/usage-reports.d.ts +7 -0
- package/dist/store/usage-reports.js +26 -0
- package/dist/store/vector-writes.d.ts +10 -3
- package/dist/store/vector-writes.js +35 -5
- package/dist/{working-memory.d.ts → store/working-memory.d.ts} +5 -1
- package/dist/{working-memory.js → store/working-memory.js} +39 -41
- package/dist/support-bundle.d.ts +1 -1
- package/dist/support-bundle.js +13 -33
- package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
- package/dist/{gated-write.js → trust/gated-write.js} +6 -6
- package/dist/trust/quarantine.d.ts +4 -0
- package/dist/trust/quarantine.js +8 -0
- package/dist/trust/reject-flow.d.ts +23 -0
- package/dist/trust/reject-flow.js +67 -0
- package/dist/util/anthropic-messages.d.ts +31 -0
- package/dist/util/anthropic-messages.js +46 -0
- package/dist/util/atomic-write.d.ts +3 -0
- package/dist/util/atomic-write.js +107 -0
- package/dist/util/crash-handlers.d.ts +5 -0
- package/dist/util/crash-handlers.js +30 -0
- package/dist/{env.d.ts → util/env.d.ts} +15 -2
- package/dist/{env.js → util/env.js} +20 -2
- package/dist/util/home-path.js +67 -0
- package/dist/{http-retry.d.ts → util/http-retry.d.ts} +6 -2
- package/dist/{http-retry.js → util/http-retry.js} +38 -7
- package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
- package/dist/{http-util.js → util/http-util.js} +31 -11
- package/dist/util/json.d.ts +17 -0
- package/dist/util/json.js +25 -0
- package/dist/{log.d.ts → util/log.d.ts} +5 -2
- package/dist/{log.js → util/log.js} +12 -3
- package/dist/util/real-path.d.ts +3 -0
- package/dist/util/real-path.js +15 -0
- package/dist/util/request-scope.d.ts +27 -0
- package/dist/util/request-scope.js +47 -0
- package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
- package/dist/{secret-detect.js → util/secret-detect.js} +5 -4
- package/dist/util/stored-json.d.ts +9 -0
- package/dist/util/stored-json.js +8 -0
- package/dist/util/time.d.ts +2 -0
- package/dist/util/time.js +3 -0
- package/dist/util/token-text.d.ts +18 -0
- package/dist/util/token-text.js +23 -0
- package/dist/{version.d.ts → util/version.d.ts} +1 -1
- package/dist/{version.js → util/version.js} +1 -1
- package/extensions/openclaw-plugin/index.ts +1 -5
- 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/api.d.ts +0 -26
- package/dist/api.js +0 -29
- package/dist/connectors/github/idempotency.d.ts +0 -19
- package/dist/connectors/github/idempotency.js +0 -27
- package/dist/connectors/slack/idempotency.d.ts +0 -17
- package/dist/connectors/slack/idempotency.js +0 -31
- package/dist/customer-notes.js +0 -336
- package/dist/db.d.ts +0 -9
- package/dist/db.js +0 -8
- package/dist/decisions.js +0 -326
- package/dist/extract.js +0 -133
- package/dist/graph/rows.d.ts +0 -45
- package/dist/graph/types.js +0 -11
- package/dist/half-life-migration.js +0 -182
- package/dist/handoff.js +0 -68
- package/dist/home-path.js +0 -24
- package/dist/incidents.js +0 -349
- package/dist/instruction-detect.js +0 -27
- package/dist/json.d.ts +0 -7
- package/dist/json.js +0 -11
- package/dist/ledger-db.d.ts +0 -10
- package/dist/ledger-db.js +0 -42
- package/dist/policies.js +0 -434
- package/dist/processes.js +0 -371
- package/dist/project-briefs.js +0 -523
- package/dist/reject-flow.d.ts +0 -69
- package/dist/reject-flow.js +0 -260
- package/dist/session-owners.d.ts +0 -7
- package/dist/session-owners.js +0 -54
- package/dist/skills.js +0 -367
- package/dist/store/entry-writes-group.d.ts +0 -9
- package/dist/store-port.d.ts +0 -262
- package/dist/store-port.js +0 -178
- /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
- /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
- /package/dist/{recall-history.d.ts → api/recall-history.d.ts} +0 -0
- /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
- /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
- /package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +0 -0
- /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
- /package/dist/{correction-latency.js → cli/correction-latency.js} +0 -0
- /package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +0 -0
- /package/dist/{quality-repair.d.ts → cli/quality-repair.d.ts} +0 -0
- /package/dist/{stdin.d.ts → cli/stdin.d.ts} +0 -0
- /package/dist/{dedupe.d.ts → consolidate/dedupe.d.ts} +0 -0
- /package/dist/{memory-value-weights.d.ts → consolidate/memory-value-weights.d.ts} +0 -0
- /package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +0 -0
- /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
- /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
- /package/dist/{trace.d.ts → consolidate/trace.d.ts} +0 -0
- /package/dist/{ablation.d.ts → core/ablation.d.ts} +0 -0
- /package/dist/{ambient.d.ts → core/ambient.d.ts} +0 -0
- /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
- /package/dist/{api-errors.js → core/api-errors.js} +0 -0
- /package/dist/{card.d.ts → core/card.d.ts} +0 -0
- /package/dist/{card.js → core/card.js} +0 -0
- /package/dist/{handoff.d.ts → core/handoff.d.ts} +0 -0
- /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
- /package/dist/{physics-config.d.ts → core/physics-config.d.ts} +0 -0
- /package/dist/{physics-config.js → core/physics-config.js} +0 -0
- /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
- /package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +0 -0
- /package/dist/{salience.d.ts → core/salience.d.ts} +0 -0
- /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
- /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
- /package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +0 -0
- /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
- /package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +0 -0
- /package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +0 -0
- /package/dist/{cli → hooks}/hook-blocks.d.ts +0 -0
- /package/dist/{path-context.d.ts → search/path-context.d.ts} +0 -0
- /package/dist/{rrf.d.ts → search/rrf.d.ts} +0 -0
- /package/dist/{rrf.js → search/rrf.js} +0 -0
- /package/dist/{rate-limit.d.ts → server/rate-limit.d.ts} +0 -0
- /package/dist/{rate-limit.js → server/rate-limit.js} +0 -0
- /package/dist/{server-detect.d.ts → server/server-detect.d.ts} +0 -0
- /package/dist/{scope.d.ts → sharing/scope.d.ts} +0 -0
- /package/dist/{summary-dirty.js → store/summary-dirty.js} +0 -0
- /package/dist/{yaml.d.ts → store/yaml.d.ts} +0 -0
- /package/dist/{yaml.js → store/yaml.js} +0 -0
- /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
- /package/dist/{escape.js → util/escape.js} +0 -0
- /package/dist/{home-path.d.ts → util/home-path.d.ts} +0 -0
- /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
- /package/dist/{keyset.js → util/keyset.js} +0 -0
- /package/dist/{same-text.js → util/same-text.js} +0 -0
- /package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +0 -0
- /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
- /package/dist/{db → util}/sqlite-blocked.js +0 -0
- /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
- /package/dist/{tokenize.js → util/tokenize.js} +0 -0
- /package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +0 -0
- /package/dist/{transcript-tail.js → util/transcript-tail.js} +0 -0
- /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
- /package/dist/{write-budget.js → util/write-budget.js} +0 -0
package/dist/db/backup.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as fs from 'node:fs';
|
|
2
2
|
import * as path from 'node:path';
|
|
3
|
-
import { log } from '../log.js';
|
|
3
|
+
import { log } from '../util/log.js';
|
|
4
4
|
/** Copies the database before a repair writes, so the audit ids plus this file are the way back. */
|
|
5
5
|
export function backupStore(db, hippoRoot, label, now = new Date()) {
|
|
6
6
|
const dir = path.join(hippoRoot, 'backups');
|
package/dist/db/busy.d.ts
CHANGED
|
@@ -8,7 +8,24 @@ export declare class StoreBusyError extends Error {
|
|
|
8
8
|
/** A held lock in any store: SQLite's busy codes or a port's StoreBusyError. */
|
|
9
9
|
export declare function isStoreBusy<E>(error: E): boolean;
|
|
10
10
|
export declare function execWithBusyRetry(db: DatabaseSyncLike, sql: string, timeoutMs?: number): void;
|
|
11
|
+
/** Waits for the lock past busy_timeout when given; ignored inside a caller's transaction, which already holds it. */
|
|
12
|
+
export interface WriteScopeOptions {
|
|
13
|
+
readonly busyWaitMs?: number;
|
|
14
|
+
}
|
|
11
15
|
/** Runs `fn` as one write: BEGIN IMMEDIATE on an idle handle, else SAVEPOINT `name` inside the caller's transaction.
|
|
12
16
|
* A deferred scope that reads first cannot wait out another writer, while BEGIN IMMEDIATE waits the open's busy_timeout. */
|
|
13
|
-
export declare function withWriteScope<T>(db: DatabaseSyncLike, name: string, fn: () => T): T;
|
|
17
|
+
export declare function withWriteScope<T>(db: DatabaseSyncLike, name: string, fn: () => T, opts?: WriteScopeOptions): T;
|
|
18
|
+
/** Runs the reads in `fn` against one snapshot, so two statements cannot straddle another process's write. */
|
|
19
|
+
export declare function withReadSnapshot<T>(db: DatabaseSyncLike, fn: () => T): T;
|
|
20
|
+
/** Runs `fn` and undoes every write it made, throw or not: a dry run that reports what a real run would do. Takes no write lock up front. */
|
|
21
|
+
export declare function withTrialScope<T>(db: DatabaseSyncLike, name: string, fn: () => T): T;
|
|
22
|
+
/** What `withWriteScopeOr` hands its callback's `rollback(value)`; a class so no stored value can pass for one. */
|
|
23
|
+
declare class RolledBack<V> {
|
|
24
|
+
readonly value: V;
|
|
25
|
+
constructor(value: V);
|
|
26
|
+
}
|
|
27
|
+
/** `withWriteScope` for a write that can refuse: a callback that returns `rollback(value)` gets the scope's writes undone
|
|
28
|
+
* and `value` back, with no throw. Any other return commits. */
|
|
29
|
+
export declare function withWriteScopeOr<T, R>(db: DatabaseSyncLike, name: string, fn: (rollback: <V>(value: V) => RolledBack<V>) => T | RolledBack<R>): T | R;
|
|
30
|
+
export {};
|
|
14
31
|
//# sourceMappingURL=busy.d.ts.map
|
package/dist/db/busy.js
CHANGED
|
@@ -32,11 +32,23 @@ export function execWithBusyRetry(db, sql, timeoutMs = 30000) {
|
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
|
+
function undoScope(db, top, name) {
|
|
36
|
+
if (top) {
|
|
37
|
+
db.exec('ROLLBACK');
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
db.exec(`ROLLBACK TO SAVEPOINT ${name}`);
|
|
41
|
+
db.exec(`RELEASE SAVEPOINT ${name}`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
35
44
|
/** Runs `fn` as one write: BEGIN IMMEDIATE on an idle handle, else SAVEPOINT `name` inside the caller's transaction.
|
|
36
45
|
* A deferred scope that reads first cannot wait out another writer, while BEGIN IMMEDIATE waits the open's busy_timeout. */
|
|
37
|
-
export function withWriteScope(db, name, fn) {
|
|
46
|
+
export function withWriteScope(db, name, fn, opts) {
|
|
38
47
|
const top = db.isTransaction === false;
|
|
39
|
-
|
|
48
|
+
if (top && opts)
|
|
49
|
+
execWithBusyRetry(db, 'BEGIN IMMEDIATE', opts.busyWaitMs);
|
|
50
|
+
else
|
|
51
|
+
db.exec(top ? 'BEGIN IMMEDIATE' : `SAVEPOINT ${name}`);
|
|
40
52
|
try {
|
|
41
53
|
const result = fn();
|
|
42
54
|
db.exec(top ? 'COMMIT' : `RELEASE SAVEPOINT ${name}`);
|
|
@@ -44,13 +56,66 @@ export function withWriteScope(db, name, fn) {
|
|
|
44
56
|
}
|
|
45
57
|
catch (error) {
|
|
46
58
|
try {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
59
|
+
undoScope(db, top, name);
|
|
60
|
+
}
|
|
61
|
+
catch { /* already rolled back; keep the original error */ }
|
|
62
|
+
throw error;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/** Runs the reads in `fn` against one snapshot, so two statements cannot straddle another process's write. */
|
|
66
|
+
export function withReadSnapshot(db, fn) {
|
|
67
|
+
if (db.isTransaction !== false)
|
|
68
|
+
return fn();
|
|
69
|
+
db.exec('BEGIN');
|
|
70
|
+
try {
|
|
71
|
+
return fn();
|
|
72
|
+
}
|
|
73
|
+
finally {
|
|
74
|
+
db.exec('COMMIT');
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/** Runs `fn` and undoes every write it made, throw or not: a dry run that reports what a real run would do. Takes no write lock up front. */
|
|
78
|
+
export function withTrialScope(db, name, fn) {
|
|
79
|
+
const top = db.isTransaction === false;
|
|
80
|
+
db.exec(top ? 'BEGIN' : `SAVEPOINT ${name}`);
|
|
81
|
+
let result;
|
|
82
|
+
try {
|
|
83
|
+
result = fn();
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
try {
|
|
87
|
+
undoScope(db, top, name);
|
|
88
|
+
}
|
|
89
|
+
catch { /* already rolled back; keep the original error */ }
|
|
90
|
+
throw error;
|
|
91
|
+
}
|
|
92
|
+
undoScope(db, top, name);
|
|
93
|
+
return result;
|
|
94
|
+
}
|
|
95
|
+
/** What `withWriteScopeOr` hands its callback's `rollback(value)`; a class so no stored value can pass for one. */
|
|
96
|
+
class RolledBack {
|
|
97
|
+
value;
|
|
98
|
+
constructor(value) {
|
|
99
|
+
this.value = value;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
/** `withWriteScope` for a write that can refuse: a callback that returns `rollback(value)` gets the scope's writes undone
|
|
103
|
+
* and `value` back, with no throw. Any other return commits. */
|
|
104
|
+
export function withWriteScopeOr(db, name, fn) {
|
|
105
|
+
const top = db.isTransaction === false;
|
|
106
|
+
db.exec(top ? 'BEGIN IMMEDIATE' : `SAVEPOINT ${name}`);
|
|
107
|
+
try {
|
|
108
|
+
const result = fn((value) => new RolledBack(value));
|
|
109
|
+
if (result instanceof RolledBack) {
|
|
110
|
+
undoScope(db, top, name);
|
|
111
|
+
return result.value;
|
|
112
|
+
}
|
|
113
|
+
db.exec(top ? 'COMMIT' : `RELEASE SAVEPOINT ${name}`);
|
|
114
|
+
return result;
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
try {
|
|
118
|
+
undoScope(db, top, name);
|
|
54
119
|
}
|
|
55
120
|
catch { /* already rolled back; keep the original error */ }
|
|
56
121
|
throw error;
|
package/dist/db/connect.d.ts
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
import { type DatabaseSyncLike } from './sqlite.js';
|
|
2
|
+
import { type OpenFacts } from './migrate.js';
|
|
2
3
|
export declare function getHippoDbPath(hippoRoot: string): string;
|
|
3
|
-
/**
|
|
4
|
-
export declare function
|
|
4
|
+
/** Runs `step` on this store unless it already ran to the end in this process; a throw leaves it due. */
|
|
5
|
+
export declare function oncePerStore(hippoRoot: string, name: string, step: () => void): void;
|
|
6
|
+
/** A connection with what its own open's probe read; facts go stale with the next statement, so a handle made by an earlier call carries null. */
|
|
7
|
+
export interface OpenedDb {
|
|
8
|
+
readonly db: DatabaseSyncLike;
|
|
9
|
+
readonly facts: OpenFacts | null;
|
|
10
|
+
}
|
|
11
|
+
/** A new connection with the store's pragmas and migrations applied and the mirror cleanup run when it is due; the caller owns and closes it. */
|
|
12
|
+
export declare function connectWithFacts(hippoRoot: string, busyWaitMs?: number): OpenedDb;
|
|
5
13
|
//# sourceMappingURL=connect.d.ts.map
|
package/dist/db/connect.js
CHANGED
|
@@ -1,43 +1,76 @@
|
|
|
1
1
|
import * as fs from 'fs';
|
|
2
2
|
import * as path from 'path';
|
|
3
|
-
import { cleanupArchivedMirrors } from '
|
|
4
|
-
import { log } from '../log.js';
|
|
3
|
+
import { cleanupArchivedMirrors } from './raw-archive-mirror-cleanup.js';
|
|
4
|
+
import { errorMessage, log } from '../util/log.js';
|
|
5
5
|
import { DatabaseSync } from './sqlite.js';
|
|
6
6
|
import { execWithBusyRetry } from './busy.js';
|
|
7
7
|
import { runMigrations } from './migrate.js';
|
|
8
|
+
import { autoCheckpointPages } from './wal-checkpointer.js';
|
|
9
|
+
const DEFAULT_BUSY_WAIT_MS = 5000;
|
|
8
10
|
export function getHippoDbPath(hippoRoot) {
|
|
9
11
|
return path.join(hippoRoot, 'hippo.db');
|
|
10
12
|
}
|
|
13
|
+
// Per store file, what this process has already done to it; a store file created anew starts over.
|
|
14
|
+
const settledSteps = new Map();
|
|
15
|
+
const sweptThrough = new Map();
|
|
16
|
+
function storeKey(hippoRoot) {
|
|
17
|
+
return path.resolve(getHippoDbPath(hippoRoot));
|
|
18
|
+
}
|
|
19
|
+
/** Runs `step` on this store unless it already ran to the end in this process; a throw leaves it due. */
|
|
20
|
+
export function oncePerStore(hippoRoot, name, step) {
|
|
21
|
+
const key = storeKey(hippoRoot);
|
|
22
|
+
const settled = settledSteps.get(key) ?? new Set();
|
|
23
|
+
if (settled.has(name))
|
|
24
|
+
return;
|
|
25
|
+
step();
|
|
26
|
+
settledSteps.set(key, settled.add(name));
|
|
27
|
+
}
|
|
11
28
|
// Owner-only on create; SQLite gives the WAL and SHM files the db's mode. Existing paths keep theirs.
|
|
12
29
|
function createStoreFilesOwnerOnly(hippoRoot) {
|
|
13
30
|
fs.mkdirSync(hippoRoot, { recursive: true, mode: 0o700 });
|
|
14
31
|
try {
|
|
15
32
|
fs.closeSync(fs.openSync(getHippoDbPath(hippoRoot), 'wx', 0o600));
|
|
33
|
+
settledSteps.delete(storeKey(hippoRoot));
|
|
34
|
+
sweptThrough.delete(storeKey(hippoRoot));
|
|
16
35
|
}
|
|
17
36
|
catch (err) {
|
|
18
37
|
if (!(err instanceof Error && 'code' in err && err.code === 'EEXIST'))
|
|
19
38
|
throw err;
|
|
20
39
|
}
|
|
21
40
|
}
|
|
22
|
-
|
|
23
|
-
|
|
41
|
+
// The archive only grows and its ids never repeat, so an unchanged top id means no row this process has not swept; a failed sweep stays due.
|
|
42
|
+
function sweepArchivedMirrorsIfDue(hippoRoot, db, probedTop) {
|
|
43
|
+
const top = probedTop ?? archiveTop(db);
|
|
44
|
+
const key = storeKey(hippoRoot);
|
|
45
|
+
if (sweptThrough.get(key) === top)
|
|
46
|
+
return;
|
|
47
|
+
if (cleanupArchivedMirrors(hippoRoot, db))
|
|
48
|
+
sweptThrough.set(key, top);
|
|
49
|
+
}
|
|
50
|
+
function archiveTop(db) {
|
|
51
|
+
// SAFETY: MAX over the integer key returns one row with one column, null for an empty table.
|
|
52
|
+
const row = db.prepare('SELECT MAX(id) AS top FROM raw_archive').get();
|
|
53
|
+
return Number(row?.top ?? 0);
|
|
54
|
+
}
|
|
55
|
+
/** A new connection with the store's pragmas and migrations applied and the mirror cleanup run when it is due; the caller owns and closes it. */
|
|
56
|
+
export function connectWithFacts(hippoRoot, busyWaitMs) {
|
|
24
57
|
createStoreFilesOwnerOnly(hippoRoot);
|
|
25
58
|
const db = new DatabaseSync(getHippoDbPath(hippoRoot));
|
|
26
59
|
try {
|
|
27
|
-
db.exec(`PRAGMA busy_timeout = ${busyWaitMs ??
|
|
60
|
+
db.exec(`PRAGMA busy_timeout = ${busyWaitMs ?? DEFAULT_BUSY_WAIT_MS}`);
|
|
28
61
|
execWithBusyRetry(db, 'PRAGMA journal_mode = WAL', busyWaitMs);
|
|
29
62
|
db.exec('PRAGMA synchronous = NORMAL');
|
|
30
|
-
db.exec(
|
|
63
|
+
db.exec(`PRAGMA wal_autocheckpoint = ${autoCheckpointPages(getHippoDbPath(hippoRoot))}`);
|
|
31
64
|
db.exec('PRAGMA foreign_keys = ON');
|
|
32
|
-
runMigrations(db, hippoRoot, busyWaitMs);
|
|
65
|
+
const facts = runMigrations(db, hippoRoot, busyWaitMs);
|
|
33
66
|
// Orphan mirrors of archived raw rows go here; a filesystem failure must not block the open.
|
|
34
67
|
try {
|
|
35
|
-
|
|
68
|
+
sweepArchivedMirrorsIfDue(hippoRoot, db, facts?.archiveTop);
|
|
36
69
|
}
|
|
37
70
|
catch (cleanupErr) {
|
|
38
|
-
log.error(`openHippoDb: cleanupArchivedMirrors failed (non-fatal): ${
|
|
71
|
+
log.error(`openHippoDb: cleanupArchivedMirrors failed (non-fatal): ${errorMessage(cleanupErr)}`);
|
|
39
72
|
}
|
|
40
|
-
return db;
|
|
73
|
+
return { db, facts };
|
|
41
74
|
}
|
|
42
75
|
catch (error) {
|
|
43
76
|
try {
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export type { DatabaseSyncLike } from './sqlite.js';
|
|
2
|
+
export { isSqliteBusy, isStoreBusy, StoreBusyError, STORE_BUSY_MESSAGE, execWithBusyRetry, withReadSnapshot, withTrialScope, withWriteScope, withWriteScopeOr } from './busy.js';
|
|
3
|
+
export { getSchemaVersion, getMeta, setMeta, isFtsAvailable } from './meta.js';
|
|
4
|
+
export { countTableRows, pruneConsolidationRuns } from './tables.js';
|
|
5
|
+
export { getCurrentSchemaVersion, IncompatibleBinaryError, ftsRowCounts, repairFtsDrift } from './migrate.js';
|
|
6
|
+
export { getHippoDbPath, HOOK_DB_WAIT_MS, noteStoreBusy, withSharedStoreHandles, SERVER_DB_WAIT_MS, SLEEP_DB_WAIT_MS, scopedBusyWait, withSqliteBlocked, withSqliteAllowed, withSqliteOffLoop, outsideSqliteOffLoop, rethrowIfSqliteBlocked, OTHER_STORE_MARKER, openHippoDb, openHippoDbReadOnly, closeHippoDb, } from './open.js';
|
|
7
|
+
export { RequestStores, runWithRequestStores, currentRequestStores, outsideRequestStores } from './request-stores.js';
|
|
8
|
+
export { OtherStoreFolderError, SqliteBlockedError } from '../util/sqlite-blocked.js';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
package/dist/db/index.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { isSqliteBusy, isStoreBusy, StoreBusyError, STORE_BUSY_MESSAGE, execWithBusyRetry, withReadSnapshot, withTrialScope, withWriteScope, withWriteScopeOr } from './busy.js';
|
|
2
|
+
export { getSchemaVersion, getMeta, setMeta, isFtsAvailable } from './meta.js';
|
|
3
|
+
export { countTableRows, pruneConsolidationRuns } from './tables.js';
|
|
4
|
+
export { getCurrentSchemaVersion, IncompatibleBinaryError, ftsRowCounts, repairFtsDrift } from './migrate.js';
|
|
5
|
+
export { getHippoDbPath, HOOK_DB_WAIT_MS, noteStoreBusy, withSharedStoreHandles, SERVER_DB_WAIT_MS, SLEEP_DB_WAIT_MS, scopedBusyWait, withSqliteBlocked, withSqliteAllowed, withSqliteOffLoop, outsideSqliteOffLoop, rethrowIfSqliteBlocked, OTHER_STORE_MARKER, openHippoDb, openHippoDbReadOnly, closeHippoDb, } from './open.js';
|
|
6
|
+
export { RequestStores, runWithRequestStores, currentRequestStores, outsideRequestStores } from './request-stores.js';
|
|
7
|
+
export { OtherStoreFolderError, SqliteBlockedError } from '../util/sqlite-blocked.js';
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
package/dist/db/meta.d.ts
CHANGED
|
@@ -2,6 +2,10 @@ import type { DatabaseSyncLike } from './sqlite.js';
|
|
|
2
2
|
export declare const META_TABLE_DDL = "\n CREATE TABLE IF NOT EXISTS meta (\n key TEXT PRIMARY KEY,\n value TEXT NOT NULL\n );\n ";
|
|
3
3
|
export declare function ensureMetaTable(db: DatabaseSyncLike): void;
|
|
4
4
|
export declare function getSchemaVersion(db: DatabaseSyncLike): number;
|
|
5
|
+
/** SQLite's own `user_version` stamp, which can differ from the `meta` schema_version row. */
|
|
6
|
+
export declare function pragmaUserVersion(db: DatabaseSyncLike): number;
|
|
7
|
+
/** The connection's commit counter: it moves when another connection commits. */
|
|
8
|
+
export declare function pragmaDataVersion(db: DatabaseSyncLike): number;
|
|
5
9
|
export declare function setSchemaVersion(db: DatabaseSyncLike, version: number): void;
|
|
6
10
|
export declare function getMeta(db: DatabaseSyncLike, key: string, fallback?: string): string;
|
|
7
11
|
export declare function setMeta(db: DatabaseSyncLike, key: string, value: string): void;
|
package/dist/db/meta.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { compareSemver } from '../version.js';
|
|
1
|
+
import { compareSemver } from '../util/version.js';
|
|
2
2
|
import { tableExists } from './tables.js';
|
|
3
3
|
export const META_TABLE_DDL = `
|
|
4
4
|
CREATE TABLE IF NOT EXISTS meta (
|
|
@@ -18,6 +18,16 @@ export function getSchemaVersion(db) {
|
|
|
18
18
|
const version = Number(row?.value ?? 0);
|
|
19
19
|
return Number.isFinite(version) ? version : 0;
|
|
20
20
|
}
|
|
21
|
+
/** SQLite's own `user_version` stamp, which can differ from the `meta` schema_version row. */
|
|
22
|
+
export function pragmaUserVersion(db) {
|
|
23
|
+
// SAFETY: PRAGMA user_version returns one row with one integer column.
|
|
24
|
+
return db.prepare('PRAGMA user_version').get().user_version;
|
|
25
|
+
}
|
|
26
|
+
/** The connection's commit counter: it moves when another connection commits. */
|
|
27
|
+
export function pragmaDataVersion(db) {
|
|
28
|
+
// SAFETY: PRAGMA data_version returns one row with that single integer column.
|
|
29
|
+
return db.prepare('PRAGMA data_version').get().data_version;
|
|
30
|
+
}
|
|
21
31
|
export function setSchemaVersion(db, version) {
|
|
22
32
|
db.prepare(`INSERT INTO meta(key, value) VALUES('schema_version', ?) ON CONFLICT(key) DO UPDATE SET value=excluded.value`).run(String(version));
|
|
23
33
|
db.exec(`PRAGMA user_version = ${Math.max(0, Math.trunc(version))}`);
|
package/dist/db/migrate.d.ts
CHANGED
|
@@ -7,7 +7,14 @@ export declare class IncompatibleBinaryError extends Error {
|
|
|
7
7
|
export declare function assertBinaryCompatible(db: DatabaseSyncLike): void;
|
|
8
8
|
/** The fast path's single probe: versions, the binary minimum, the FTS flag, and counts of the meta defaults and required objects. */
|
|
9
9
|
export declare const SCHEMA_PROBE_SQL: string;
|
|
10
|
-
|
|
10
|
+
/** What the probe of a current store read beyond the schema proof, so the same open need not read them again. */
|
|
11
|
+
export interface OpenFacts {
|
|
12
|
+
/** The largest raw_archive id, 0 for an empty archive. */
|
|
13
|
+
readonly archiveTop: number;
|
|
14
|
+
readonly hasMemories: boolean;
|
|
15
|
+
}
|
|
16
|
+
/** Brings the store to the current schema; returns the probe's facts when it was current already, null after any repair. */
|
|
17
|
+
export declare function runMigrations(db: DatabaseSyncLike, hippoRoot?: string, busyWaitMs?: number): OpenFacts | null;
|
|
11
18
|
/** Row counts of `memories` and its full-text index, which differ once the index drifts; null when either table is missing. */
|
|
12
19
|
export declare function ftsRowCounts(db: DatabaseSyncLike): {
|
|
13
20
|
memories: number;
|
package/dist/db/migrate.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { PACKAGE_VERSION, compareSemver } from '../version.js';
|
|
2
|
-
import { log } from '../log.js';
|
|
3
|
-
import { importLegacyEmbeddingIndex } from '
|
|
4
|
-
import { execWithBusyRetry } from './busy.js';
|
|
1
|
+
import { PACKAGE_VERSION, compareSemver } from '../util/version.js';
|
|
2
|
+
import { errorMessage, log } from '../util/log.js';
|
|
3
|
+
import { importLegacyEmbeddingIndex } from './vector-store.js';
|
|
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
7
|
import { MEMORIES_FTS_DDL, REQUIRED_SCHEMA_OBJECTS, ensureContinuityIndexes, ensureContinuityTables } from './continuity.js';
|
|
@@ -40,34 +40,40 @@ export const SCHEMA_PROBE_SQL = `SELECT
|
|
|
40
40
|
(SELECT value FROM meta WHERE key = 'min_compatible_binary') AS min_binary,
|
|
41
41
|
(SELECT value FROM meta WHERE key = 'fts5_available') AS fts5,
|
|
42
42
|
(SELECT COUNT(*) FROM meta WHERE key IN (${sqlList(META_DEFAULTS.map(([key]) => key))})) AS meta_keys,
|
|
43
|
-
(SELECT COUNT(*) FROM sqlite_master WHERE type IN ('table', 'index') AND name IN (${sqlList(REQUIRED_SCHEMA_OBJECTS)})) AS objects
|
|
44
|
-
|
|
45
|
-
|
|
43
|
+
(SELECT COUNT(*) FROM sqlite_master WHERE type IN ('table', 'index') AND name IN (${sqlList(REQUIRED_SCHEMA_OBJECTS)})) AS objects,
|
|
44
|
+
(SELECT MAX(id) FROM raw_archive) AS archive_top,
|
|
45
|
+
(SELECT 1 FROM memories LIMIT 1) AS has_memories`;
|
|
46
|
+
/** The probe's facts when the store is current and whole, so the open can skip every DDL statement; else null. Runs the binary check either way. */
|
|
47
|
+
function currentStoreFacts(db) {
|
|
46
48
|
let probe;
|
|
47
49
|
try {
|
|
48
|
-
// SAFETY: the SELECT names exactly these
|
|
50
|
+
// SAFETY: the SELECT names exactly these eight columns and always returns one row.
|
|
49
51
|
probe = db.prepare(SCHEMA_PROBE_SQL).get();
|
|
50
52
|
}
|
|
51
53
|
catch (err) {
|
|
52
|
-
// A store
|
|
53
|
-
if (err instanceof Error && /no such table: meta/.test(err.message))
|
|
54
|
-
return
|
|
54
|
+
// A store missing a table the probe reads is the slow path's job; anything else is a real error.
|
|
55
|
+
if (err instanceof Error && /no such table: (meta|raw_archive|memories)\b/.test(err.message))
|
|
56
|
+
return null;
|
|
55
57
|
throw err;
|
|
56
58
|
}
|
|
57
59
|
if (!probe)
|
|
58
|
-
return
|
|
60
|
+
return null;
|
|
59
61
|
assertMinBinary(probe.min_binary);
|
|
60
|
-
|
|
62
|
+
const current = Number(probe.user_version) === CURRENT_SCHEMA_VERSION
|
|
61
63
|
&& Number(probe.schema_version) === CURRENT_SCHEMA_VERSION
|
|
62
64
|
&& Number(probe.meta_keys) === META_DEFAULTS.length
|
|
63
65
|
&& Number(probe.objects) === REQUIRED_SCHEMA_OBJECTS.length
|
|
64
66
|
&& probe.fts5 === '1';
|
|
67
|
+
return current ? { archiveTop: Number(probe.archive_top ?? 0), hasMemories: probe.has_memories !== null } : null;
|
|
65
68
|
}
|
|
69
|
+
/** Brings the store to the current schema; returns the probe's facts when it was current already, null after any repair. */
|
|
66
70
|
export function runMigrations(db, hippoRoot, busyWaitMs) {
|
|
67
|
-
|
|
71
|
+
const facts = currentStoreFacts(db);
|
|
72
|
+
if (!facts)
|
|
68
73
|
migrateAndHeal(db, hippoRoot, busyWaitMs);
|
|
69
74
|
if (hippoRoot)
|
|
70
75
|
importLegacyVectors(db, hippoRoot);
|
|
76
|
+
return facts;
|
|
71
77
|
}
|
|
72
78
|
function migrateAndHeal(db, hippoRoot, busyWaitMs) {
|
|
73
79
|
ensureMetaTable(db);
|
|
@@ -88,29 +94,18 @@ function migrateAndHeal(db, hippoRoot, busyWaitMs) {
|
|
|
88
94
|
}
|
|
89
95
|
/** Applies one migration under the write lock and returns the version the store is now at. */
|
|
90
96
|
function applyMigration(db, migration, hippoRoot, busyWaitMs) {
|
|
91
|
-
|
|
92
|
-
try {
|
|
97
|
+
return withWriteScope(db, 'apply_migration', () => {
|
|
93
98
|
// A newer binary may have migrated and raised the minimum while we waited for the lock.
|
|
94
99
|
assertBinaryCompatible(db);
|
|
95
100
|
// Re-read under the write lock: another process may have applied this
|
|
96
101
|
// migration while we waited, and re-running one is not idempotent.
|
|
97
102
|
const applied = getSchemaVersion(db);
|
|
98
|
-
if (applied >= migration.version)
|
|
99
|
-
db.exec('COMMIT');
|
|
103
|
+
if (applied >= migration.version)
|
|
100
104
|
return applied;
|
|
101
|
-
}
|
|
102
105
|
migration.up(db, { hippoRoot });
|
|
103
106
|
setSchemaVersion(db, migration.version);
|
|
104
|
-
db.exec('COMMIT');
|
|
105
107
|
return migration.version;
|
|
106
|
-
}
|
|
107
|
-
catch (error) {
|
|
108
|
-
try {
|
|
109
|
-
db.exec('ROLLBACK');
|
|
110
|
-
}
|
|
111
|
-
catch { /* already rolled back; keep the original error */ }
|
|
112
|
-
throw error;
|
|
113
|
-
}
|
|
108
|
+
}, { busyWaitMs });
|
|
114
109
|
}
|
|
115
110
|
// The fast path requires user_version as well, and a store stamped only in meta would otherwise never reach it.
|
|
116
111
|
function healUserVersion(db, version, busyWaitMs) {
|
|
@@ -126,7 +121,7 @@ function importLegacyVectors(db, hippoRoot) {
|
|
|
126
121
|
importLegacyEmbeddingIndex(db, hippoRoot);
|
|
127
122
|
}
|
|
128
123
|
catch (err) {
|
|
129
|
-
log.warn(`embeddings.json import failed; the next open retries it (${
|
|
124
|
+
log.warn(`embeddings.json import failed; the next open retries it (${errorMessage(err)})`, { hippoRoot });
|
|
130
125
|
}
|
|
131
126
|
}
|
|
132
127
|
function ensureMetaDefaults(db) {
|
|
@@ -154,7 +149,7 @@ function ensureOptionalFts(db) {
|
|
|
154
149
|
available = true;
|
|
155
150
|
}
|
|
156
151
|
catch (err) {
|
|
157
|
-
log.warn(`full-text index unavailable (${
|
|
152
|
+
log.warn(`full-text index unavailable (${errorMessage(err)}); search falls back to slower LIKE matching`);
|
|
158
153
|
}
|
|
159
154
|
// Read-first: only write when the flag actually changed, so a healthy
|
|
160
155
|
// store's open doesn't take a write lock for a same-value upsert.
|
|
@@ -1,4 +1,38 @@
|
|
|
1
1
|
import { tableHasColumn } from '../tables.js';
|
|
2
|
+
const CREATE_TABLE_RAW_ARCHIVE_SQL = `
|
|
3
|
+
CREATE TABLE IF NOT EXISTS raw_archive (
|
|
4
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
5
|
+
memory_id TEXT NOT NULL,
|
|
6
|
+
archived_at TEXT NOT NULL,
|
|
7
|
+
reason TEXT NOT NULL,
|
|
8
|
+
archived_by TEXT,
|
|
9
|
+
payload_json TEXT NOT NULL
|
|
10
|
+
)
|
|
11
|
+
`;
|
|
12
|
+
const CREATE_TRIGGER_TRG_MEMORIES_RAW_APPEND_ONLY_SQL = `
|
|
13
|
+
CREATE TRIGGER IF NOT EXISTS trg_memories_raw_append_only
|
|
14
|
+
BEFORE DELETE ON memories
|
|
15
|
+
WHEN OLD.kind = 'raw'
|
|
16
|
+
BEGIN
|
|
17
|
+
SELECT RAISE(ABORT, 'raw is append-only');
|
|
18
|
+
END
|
|
19
|
+
`;
|
|
20
|
+
const CREATE_TRIGGER_TRG_MEMORIES_KIND_CHECK_INSERT_SQL = `
|
|
21
|
+
CREATE TRIGGER IF NOT EXISTS trg_memories_kind_check_insert
|
|
22
|
+
BEFORE INSERT ON memories
|
|
23
|
+
WHEN NEW.kind IS NOT NULL AND NEW.kind NOT IN ('raw','distilled','superseded','archived')
|
|
24
|
+
BEGIN
|
|
25
|
+
SELECT RAISE(ABORT, 'invalid kind: must be raw|distilled|superseded|archived');
|
|
26
|
+
END
|
|
27
|
+
`;
|
|
28
|
+
const CREATE_TRIGGER_TRG_MEMORIES_KIND_CHECK_UPDATE_SQL = `
|
|
29
|
+
CREATE TRIGGER IF NOT EXISTS trg_memories_kind_check_update
|
|
30
|
+
BEFORE UPDATE ON memories
|
|
31
|
+
WHEN NEW.kind IS NOT NULL AND NEW.kind NOT IN ('raw','distilled','superseded','archived')
|
|
32
|
+
BEGIN
|
|
33
|
+
SELECT RAISE(ABORT, 'invalid kind: must be raw|distilled|superseded|archived');
|
|
34
|
+
END
|
|
35
|
+
`;
|
|
2
36
|
export const v14 = {
|
|
3
37
|
version: 14,
|
|
4
38
|
up: (db) => {
|
|
@@ -22,45 +56,15 @@ export const v14 = {
|
|
|
22
56
|
db.exec(`UPDATE memories SET kind = 'superseded' WHERE kind IS NULL AND superseded_by IS NOT NULL`);
|
|
23
57
|
db.exec(`UPDATE memories SET kind = 'distilled' WHERE kind IS NULL`);
|
|
24
58
|
// raw_archive: legitimate path for kind='raw' removal (used by archiveRawMemory).
|
|
25
|
-
db.exec(
|
|
26
|
-
CREATE TABLE IF NOT EXISTS raw_archive (
|
|
27
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
28
|
-
memory_id TEXT NOT NULL,
|
|
29
|
-
archived_at TEXT NOT NULL,
|
|
30
|
-
reason TEXT NOT NULL,
|
|
31
|
-
archived_by TEXT,
|
|
32
|
-
payload_json TEXT NOT NULL
|
|
33
|
-
)
|
|
34
|
-
`);
|
|
59
|
+
db.exec(CREATE_TABLE_RAW_ARCHIVE_SQL);
|
|
35
60
|
db.exec(`CREATE INDEX IF NOT EXISTS idx_raw_archive_memory_id ON raw_archive(memory_id)`);
|
|
36
61
|
// Append-only invariant: kind='raw' rows cannot be deleted directly.
|
|
37
|
-
// Use raw_archive flow: archive-then-update-then-delete (see src/raw-archive.ts).
|
|
38
|
-
db.exec(
|
|
39
|
-
CREATE TRIGGER IF NOT EXISTS trg_memories_raw_append_only
|
|
40
|
-
BEFORE DELETE ON memories
|
|
41
|
-
WHEN OLD.kind = 'raw'
|
|
42
|
-
BEGIN
|
|
43
|
-
SELECT RAISE(ABORT, 'raw is append-only');
|
|
44
|
-
END
|
|
45
|
-
`);
|
|
62
|
+
// Use raw_archive flow: archive-then-update-then-delete (see src/store/raw-archive.ts).
|
|
63
|
+
db.exec(CREATE_TRIGGER_TRG_MEMORIES_RAW_APPEND_ONLY_SQL);
|
|
46
64
|
// CHECK substitute: ALTER TABLE cannot add CHECK, so enforce kind allowed-set
|
|
47
65
|
// via INSERT/UPDATE triggers.
|
|
48
|
-
db.exec(
|
|
49
|
-
|
|
50
|
-
BEFORE INSERT ON memories
|
|
51
|
-
WHEN NEW.kind IS NOT NULL AND NEW.kind NOT IN ('raw','distilled','superseded','archived')
|
|
52
|
-
BEGIN
|
|
53
|
-
SELECT RAISE(ABORT, 'invalid kind: must be raw|distilled|superseded|archived');
|
|
54
|
-
END
|
|
55
|
-
`);
|
|
56
|
-
db.exec(`
|
|
57
|
-
CREATE TRIGGER IF NOT EXISTS trg_memories_kind_check_update
|
|
58
|
-
BEFORE UPDATE ON memories
|
|
59
|
-
WHEN NEW.kind IS NOT NULL AND NEW.kind NOT IN ('raw','distilled','superseded','archived')
|
|
60
|
-
BEGIN
|
|
61
|
-
SELECT RAISE(ABORT, 'invalid kind: must be raw|distilled|superseded|archived');
|
|
62
|
-
END
|
|
63
|
-
`);
|
|
66
|
+
db.exec(CREATE_TRIGGER_TRG_MEMORIES_KIND_CHECK_INSERT_SQL);
|
|
67
|
+
db.exec(CREATE_TRIGGER_TRG_MEMORIES_KIND_CHECK_UPDATE_SQL);
|
|
64
68
|
},
|
|
65
69
|
};
|
|
66
70
|
//# sourceMappingURL=v14.js.map
|
|
@@ -1,4 +1,30 @@
|
|
|
1
1
|
import { tableHasColumn } from '../tables.js';
|
|
2
|
+
const CREATE_TABLE_API_KEYS_SQL = `
|
|
3
|
+
CREATE TABLE IF NOT EXISTS api_keys (
|
|
4
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
5
|
+
key_id TEXT UNIQUE NOT NULL,
|
|
6
|
+
key_hash TEXT NOT NULL,
|
|
7
|
+
tenant_id TEXT NOT NULL DEFAULT 'default',
|
|
8
|
+
label TEXT,
|
|
9
|
+
created_at TEXT NOT NULL,
|
|
10
|
+
revoked_at TEXT
|
|
11
|
+
)
|
|
12
|
+
`;
|
|
13
|
+
const CREATE_INDEX_IDX_API_KEYS_TENANT_ACTIVE_SQL = `
|
|
14
|
+
CREATE INDEX IF NOT EXISTS idx_api_keys_tenant_active
|
|
15
|
+
ON api_keys(tenant_id) WHERE revoked_at IS NULL
|
|
16
|
+
`;
|
|
17
|
+
const CREATE_TABLE_AUDIT_LOG_SQL = `
|
|
18
|
+
CREATE TABLE IF NOT EXISTS audit_log (
|
|
19
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
20
|
+
ts TEXT NOT NULL,
|
|
21
|
+
tenant_id TEXT NOT NULL DEFAULT 'default',
|
|
22
|
+
actor TEXT NOT NULL,
|
|
23
|
+
op TEXT NOT NULL,
|
|
24
|
+
target_id TEXT,
|
|
25
|
+
metadata_json TEXT NOT NULL DEFAULT '{}'
|
|
26
|
+
)
|
|
27
|
+
`;
|
|
2
28
|
export const v16 = {
|
|
3
29
|
version: 16,
|
|
4
30
|
up: (db) => {
|
|
@@ -28,32 +54,9 @@ export const v16 = {
|
|
|
28
54
|
// Stub auth: api_keys (scrypt-hashed; plaintext returned to caller exactly once)
|
|
29
55
|
// and audit_log (append-only mutation trail). Both carry tenant_id from day 1 so
|
|
30
56
|
// future multi-tenant enforcement is a config flip, not a re-migration.
|
|
31
|
-
db.exec(
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
key_id TEXT UNIQUE NOT NULL,
|
|
35
|
-
key_hash TEXT NOT NULL,
|
|
36
|
-
tenant_id TEXT NOT NULL DEFAULT 'default',
|
|
37
|
-
label TEXT,
|
|
38
|
-
created_at TEXT NOT NULL,
|
|
39
|
-
revoked_at TEXT
|
|
40
|
-
)
|
|
41
|
-
`);
|
|
42
|
-
db.exec(`
|
|
43
|
-
CREATE INDEX IF NOT EXISTS idx_api_keys_tenant_active
|
|
44
|
-
ON api_keys(tenant_id) WHERE revoked_at IS NULL
|
|
45
|
-
`);
|
|
46
|
-
db.exec(`
|
|
47
|
-
CREATE TABLE IF NOT EXISTS audit_log (
|
|
48
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
49
|
-
ts TEXT NOT NULL,
|
|
50
|
-
tenant_id TEXT NOT NULL DEFAULT 'default',
|
|
51
|
-
actor TEXT NOT NULL,
|
|
52
|
-
op TEXT NOT NULL,
|
|
53
|
-
target_id TEXT,
|
|
54
|
-
metadata_json TEXT NOT NULL DEFAULT '{}'
|
|
55
|
-
)
|
|
56
|
-
`);
|
|
57
|
+
db.exec(CREATE_TABLE_API_KEYS_SQL);
|
|
58
|
+
db.exec(CREATE_INDEX_IDX_API_KEYS_TENANT_ACTIVE_SQL);
|
|
59
|
+
db.exec(CREATE_TABLE_AUDIT_LOG_SQL);
|
|
57
60
|
db.exec(`CREATE INDEX IF NOT EXISTS idx_audit_log_tenant_ts ON audit_log(tenant_id, ts DESC)`);
|
|
58
61
|
},
|
|
59
62
|
};
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
version: 18,
|
|
3
|
-
up: (db) => {
|
|
4
|
-
db.exec(`
|
|
1
|
+
const GOAL_STACK_SCHEMA_SQL = `
|
|
5
2
|
CREATE TABLE IF NOT EXISTS goal_stack (
|
|
6
3
|
id TEXT PRIMARY KEY,
|
|
7
4
|
session_id TEXT NOT NULL,
|
|
@@ -54,7 +51,11 @@ export const v18 = {
|
|
|
54
51
|
ON goal_recall_log(goal_id);
|
|
55
52
|
CREATE UNIQUE INDEX IF NOT EXISTS uniq_goal_recall_log_memory_goal
|
|
56
53
|
ON goal_recall_log(memory_id, goal_id);
|
|
57
|
-
|
|
54
|
+
`;
|
|
55
|
+
export const v18 = {
|
|
56
|
+
version: 18,
|
|
57
|
+
up: (db) => {
|
|
58
|
+
db.exec(GOAL_STACK_SCHEMA_SQL);
|
|
58
59
|
},
|
|
59
60
|
};
|
|
60
61
|
//# sourceMappingURL=v18.js.map
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import { warnDamagedColumn } from '../../util/stored-json.js';
|
|
1
2
|
export const v20 = {
|
|
2
3
|
version: 20,
|
|
3
4
|
up: (db) => {
|
|
4
5
|
// GDPR Path A backfill: redact every existing
|
|
5
6
|
// raw_archive.payload_json so historical archives match the new
|
|
6
|
-
// metadata-only contract from src/raw-archive.ts. Read each row, parse
|
|
7
|
+
// metadata-only contract from src/store/raw-archive.ts. Read each row, parse
|
|
7
8
|
// the existing JSON to extract tenant_id and kind (best effort), then
|
|
8
9
|
// UPDATE with the redacted shape. Rows with unparseable legacy JSON get
|
|
9
10
|
// redacted with tenant_id='unknown', kind='unknown'. The audit_log
|
|
@@ -25,7 +26,8 @@ export const v20 = {
|
|
|
25
26
|
kind = parsed.kind ?? 'unknown';
|
|
26
27
|
}
|
|
27
28
|
catch {
|
|
28
|
-
//
|
|
29
|
+
// The row is still redacted, with unknowns; the line says which one lost its tenant and kind.
|
|
30
|
+
warnDamagedColumn({ table: 'raw_archive', id: row.id, column: 'payload_json' }, 'not valid JSON');
|
|
29
31
|
}
|
|
30
32
|
const redacted = JSON.stringify({
|
|
31
33
|
redacted: true,
|