hippo-memory 1.69.0 → 1.71.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 +5 -5
- package/dist/agent-memories/claude-code.js +25 -12
- package/dist/agent-memories/copilot.js +3 -2
- package/dist/agent-memories/files.js +26 -14
- 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/markdown.d.ts +1 -3
- package/dist/agent-memories/markdown.js +1 -3
- package/dist/agent-memories/report.d.ts +1 -1
- package/dist/agent-memories/report.js +3 -2
- package/dist/agent-memories/source.d.ts +1 -1
- package/dist/agent-memories/source.js +6 -5
- package/dist/agent-memories/sync.d.ts +5 -3
- package/dist/agent-memories/sync.js +34 -38
- package/dist/agent-memories/types.d.ts +1 -1
- package/dist/api/assemble.d.ts +9 -46
- package/dist/api/assemble.js +44 -54
- package/dist/api/audit.d.ts +8 -7
- package/dist/api/audit.js +15 -21
- package/dist/api/auth.d.ts +17 -39
- package/dist/api/auth.js +76 -216
- 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} +4 -17
- package/dist/{availability.js → api/availability.js} +14 -44
- 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 +39 -48
- package/dist/api/context-types.d.ts +15 -40
- package/dist/api/context.d.ts +7 -26
- package/dist/api/context.js +67 -97
- package/dist/api/dormant.d.ts +7 -23
- package/dist/api/dormant.js +40 -128
- package/dist/api/drill-down.d.ts +9 -48
- package/dist/api/drill-down.js +41 -90
- package/dist/api/forget.d.ts +5 -33
- package/dist/api/forget.js +17 -73
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +2 -2
- package/dist/api/graph.d.ts +8 -0
- package/dist/api/graph.js +7 -0
- package/dist/api/index.d.ts +28 -0
- package/dist/api/index.js +31 -0
- package/dist/api/instruction-detect.js +85 -0
- package/dist/api/learn.js +63 -55
- package/dist/api/ledger-db.d.ts +21 -0
- package/dist/api/ledger-db.js +81 -0
- package/dist/api/memories.d.ts +5 -0
- package/dist/api/memories.js +7 -0
- package/dist/api/objects.d.ts +9 -0
- package/dist/api/objects.js +11 -0
- package/dist/api/on-store.d.ts +16 -0
- package/dist/api/on-store.js +38 -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/predictions.d.ts +9 -0
- package/dist/api/predictions.js +18 -0
- package/dist/api/promote.d.ts +16 -31
- package/dist/api/promote.js +38 -123
- package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +11 -11
- package/dist/{prompt-hook.js → api/prompt-hook.js} +42 -60
- package/dist/api/quarantine.d.ts +5 -5
- package/dist/api/quarantine.js +30 -106
- package/dist/api/recall-cli.d.ts +55 -0
- package/dist/api/recall-cli.js +94 -0
- package/dist/api/recall-core.d.ts +4 -0
- package/dist/api/recall-core.js +120 -0
- package/dist/api/recall-finish.d.ts +53 -0
- package/dist/api/recall-finish.js +30 -0
- package/dist/api/recall-history.d.ts +64 -0
- package/dist/api/recall-history.js +159 -0
- package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +7 -8
- package/dist/{recall-pipeline.js → api/recall-pipeline.js} +60 -48
- 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 +101 -316
- package/dist/api/recall.d.ts +5 -33
- package/dist/api/recall.js +92 -91
- 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 +27 -12
- package/dist/api/remember.js +42 -46
- 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 -9
- package/dist/api/sleep-run.js +78 -94
- package/dist/api/sleep.d.ts +10 -29
- package/dist/api/tokens.d.ts +5 -12
- package/dist/api/tokens.js +12 -31
- package/dist/api/types.d.ts +8 -31
- package/dist/api/types.js +5 -23
- 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 +5 -13
- package/dist/capture/command.js +57 -60
- 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 +8 -16
- package/dist/capture/compact.js +56 -47
- 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} +143 -157
- package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +1 -1
- package/dist/{compaction-spool.js → capture/compaction-spool.js} +18 -14
- 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} +2 -6
- package/dist/{session-digest.js → capture/session-digest.js} +29 -29
- 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.d.ts +2 -10
- package/dist/capture/transcript.js +72 -92
- package/dist/capture/working-state.d.ts +0 -3
- package/dist/capture/working-state.js +7 -7
- package/dist/cli/api-context.d.ts +3 -0
- package/dist/cli/api-context.js +6 -0
- package/dist/cli/audit-prune.d.ts +28 -0
- package/dist/cli/audit-prune.js +40 -0
- package/dist/cli/audit.d.ts +2 -2
- package/dist/cli/audit.js +92 -88
- package/dist/cli/auth.d.ts +2 -1
- package/dist/cli/auth.js +69 -53
- package/dist/cli/briefs.d.ts +4 -3
- package/dist/cli/briefs.js +76 -202
- package/dist/cli/card.d.ts +2 -1
- package/dist/cli/card.js +55 -54
- package/dist/cli/client.d.ts +28 -0
- package/dist/{client.js → cli/client.js} +25 -44
- package/dist/cli/compact-resume-payload.d.ts +8 -0
- package/dist/cli/compact-resume-payload.js +40 -0
- package/dist/cli/context.d.ts +1 -13
- package/dist/cli/context.js +51 -77
- package/dist/cli/continuity.d.ts +6 -5
- package/dist/cli/continuity.js +153 -145
- package/dist/cli/correction-latency.d.ts +24 -0
- package/dist/{correction-latency.js → cli/correction-latency.js} +2 -14
- package/dist/cli/curate.d.ts +13 -17
- package/dist/cli/curate.js +226 -222
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +70 -52
- package/dist/cli/decisions.d.ts +4 -3
- package/dist/cli/decisions.js +129 -253
- package/dist/cli/eval.d.ts +1 -3
- package/dist/cli/eval.js +56 -42
- package/dist/cli/exit.d.ts +6 -0
- package/dist/cli/exit.js +11 -0
- package/dist/cli/explain.d.ts +1 -2
- package/dist/cli/explain.js +39 -21
- package/dist/cli/flag-values.d.ts +30 -0
- package/dist/cli/flag-values.js +120 -0
- package/dist/cli/flags.d.ts +304 -0
- package/dist/cli/flags.js +169 -0
- package/dist/cli/github.d.ts +14 -0
- package/dist/cli/github.js +184 -0
- package/dist/cli/goals.d.ts +2 -1
- package/dist/cli/goals.js +76 -75
- package/dist/cli/hook-runtime.d.ts +31 -0
- package/dist/cli/hook-runtime.js +139 -0
- package/dist/cli/init.d.ts +2 -1
- package/dist/cli/init.js +153 -126
- package/dist/cli/install-steps.d.ts +7 -0
- package/dist/cli/install-steps.js +101 -0
- package/dist/cli/last-sleep.d.ts +3 -1
- package/dist/cli/last-sleep.js +12 -7
- package/dist/cli/maintenance.d.ts +5 -4
- package/dist/cli/maintenance.js +41 -42
- package/dist/cli/object-verbs.d.ts +40 -0
- package/dist/cli/object-verbs.js +66 -0
- package/dist/cli/owner-validation.d.ts +18 -0
- package/dist/cli/owner-validation.js +33 -0
- package/dist/cli/playbooks.d.ts +4 -3
- package/dist/cli/playbooks.js +98 -306
- package/dist/cli/print.d.ts +15 -0
- package/dist/cli/print.js +82 -0
- package/dist/cli/projects.d.ts +2 -3
- package/dist/cli/projects.js +56 -51
- package/dist/cli/provenance-coverage.d.ts +14 -0
- package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +2 -6
- package/dist/cli/quality-repair-once.js +4 -4
- package/dist/cli/recall.d.ts +2 -6
- package/dist/cli/recall.js +128 -253
- package/dist/cli/refine-llm.d.ts +35 -0
- package/dist/cli/refine-llm.js +128 -0
- package/dist/cli/remember.d.ts +4 -6
- package/dist/cli/remember.js +193 -230
- package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +4 -17
- package/dist/{scheduler.js → cli/scheduler.js} +22 -22
- package/dist/cli/serve.d.ts +1 -1
- package/dist/cli/serve.js +46 -7
- package/dist/cli/session-hooks.d.ts +11 -19
- package/dist/cli/session-hooks.js +263 -258
- package/dist/cli/setup.d.ts +4 -3
- package/dist/cli/setup.js +55 -37
- package/dist/cli/shared.d.ts +14 -118
- package/dist/cli/shared.js +26 -400
- package/dist/cli/slack.d.ts +2 -1
- package/dist/cli/slack.js +46 -74
- package/dist/cli/sleep-render.d.ts +4 -0
- package/dist/cli/sleep-render.js +61 -0
- package/dist/cli/sleep.d.ts +3 -8
- package/dist/cli/sleep.js +34 -91
- package/dist/cli/status.d.ts +9 -12
- package/dist/cli/status.js +86 -131
- package/dist/{stdin.d.ts → cli/stdin.d.ts} +4 -6
- package/dist/{stdin.js → cli/stdin.js} +8 -9
- package/dist/cli/transfer.d.ts +9 -9
- package/dist/cli/transfer.js +125 -122
- package/dist/cli/usage.js +13 -5
- package/dist/cli.d.ts +69 -167
- package/dist/cli.js +187 -296
- package/dist/connectors/dlq.d.ts +44 -0
- package/dist/connectors/dlq.js +30 -0
- package/dist/connectors/github/backfill.d.ts +6 -26
- package/dist/connectors/github/backfill.js +42 -114
- package/dist/connectors/github/deletion.d.ts +6 -21
- package/dist/connectors/github/deletion.js +17 -64
- package/dist/connectors/github/dlq.d.ts +12 -91
- package/dist/connectors/github/dlq.js +23 -140
- package/dist/connectors/github/ingest.d.ts +4 -37
- package/dist/connectors/github/ingest.js +24 -93
- package/dist/connectors/github/octokit-client.d.ts +5 -17
- package/dist/connectors/github/octokit-client.js +29 -25
- 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 +4 -26
- package/dist/connectors/github/tenant-routing.js +13 -61
- package/dist/connectors/github/transform.d.ts +1 -1
- package/dist/connectors/github/transform.js +2 -16
- package/dist/connectors/github/types.d.ts +4 -16
- package/dist/connectors/github/types.js +17 -27
- package/dist/connectors/github/webhook.d.ts +5 -18
- package/dist/connectors/github/webhook.js +86 -105
- package/dist/connectors/slack/backfill.d.ts +5 -18
- package/dist/connectors/slack/backfill.js +9 -42
- package/dist/connectors/slack/deletion.d.ts +4 -7
- package/dist/connectors/slack/deletion.js +20 -49
- package/dist/connectors/slack/dlq.d.ts +9 -68
- package/dist/connectors/slack/dlq.js +26 -136
- package/dist/connectors/slack/ingest.d.ts +4 -18
- package/dist/connectors/slack/ingest.js +26 -91
- 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/signature.js +2 -1
- package/dist/connectors/slack/tenant-routing.d.ts +4 -18
- package/dist/connectors/slack/tenant-routing.js +11 -31
- package/dist/connectors/slack/transform.d.ts +3 -19
- package/dist/connectors/slack/transform.js +2 -18
- package/dist/connectors/slack/types.d.ts +4 -10
- package/dist/connectors/slack/types.js +5 -16
- package/dist/connectors/slack/web-client.js +34 -28
- package/dist/connectors/slack/webhook.d.ts +5 -21
- package/dist/connectors/slack/webhook.js +80 -108
- package/dist/connectors/slack/workspaces.d.ts +8 -41
- package/dist/connectors/slack/workspaces.js +8 -58
- package/dist/consolidate/conflicts.d.ts +1 -1
- package/dist/consolidate/conflicts.js +10 -18
- package/dist/consolidate/dag-summary.d.ts +8 -0
- package/dist/consolidate/dag-summary.js +41 -0
- package/dist/{dag.d.ts → consolidate/dag.d.ts} +6 -29
- package/dist/{dag.js → consolidate/dag.js} +49 -131
- package/dist/consolidate/decay.d.ts +2 -2
- package/dist/consolidate/decay.js +35 -41
- package/dist/consolidate/dedupe.d.ts +29 -0
- package/dist/consolidate/dedupe.js +103 -0
- package/dist/consolidate/flush-units.d.ts +5 -6
- package/dist/consolidate/flush-units.js +3 -3
- package/dist/consolidate/half-life-migration.d.ts +34 -0
- package/dist/consolidate/half-life-migration.js +89 -0
- package/dist/consolidate/llm-passes.js +12 -29
- package/dist/consolidate/memory-value-weights.d.ts +8 -0
- package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +2 -13
- package/dist/consolidate/memory-value.d.ts +45 -0
- package/dist/consolidate/memory-value.js +164 -0
- package/dist/consolidate/merge.js +65 -83
- package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
- package/dist/{merged-row.js → consolidate/merged-row.js} +4 -3
- package/dist/consolidate/physics-pass.js +46 -48
- package/dist/consolidate/replay.d.ts +9 -0
- package/dist/consolidate/replay.js +84 -0
- package/dist/consolidate/run.d.ts +7 -13
- package/dist/consolidate/run.js +6 -37
- package/dist/consolidate/sleep.d.ts +2 -9
- package/dist/consolidate/sleep.js +69 -151
- package/dist/consolidate/trace.d.ts +19 -0
- package/dist/{trace.js → consolidate/trace.js} +7 -24
- package/dist/consolidate/traces.js +40 -51
- package/dist/core/ablation.d.ts +15 -0
- package/dist/core/ablation.js +49 -0
- 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.d.ts → core/ambient.d.ts} +1 -8
- package/dist/{ambient.js → core/ambient.js} +13 -18
- package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +16 -3
- package/dist/{capture-contract.js → core/capture-contract.js} +67 -1
- package/dist/{card.d.ts → core/card.d.ts} +4 -1
- package/dist/{card.js → core/card.js} +8 -0
- package/dist/core/compare.d.ts +32 -0
- package/dist/core/compare.js +70 -0
- package/dist/{config.d.ts → core/config.d.ts} +14 -28
- package/dist/{config.js → core/config.js} +101 -75
- package/dist/{handoff.d.ts → core/handoff.d.ts} +1 -7
- package/dist/core/handoff.js +81 -0
- package/dist/{memory-quality.js → core/memory-quality.js} +2 -2
- package/dist/core/memory.d.ts +183 -0
- package/dist/core/memory.js +380 -0
- package/dist/core/package-root.d.ts +3 -0
- package/dist/core/package-root.js +5 -0
- package/dist/{physics-config.d.ts → core/physics-config.d.ts} +1 -4
- package/dist/{physics-config.js → core/physics-config.js} +3 -8
- package/dist/{physics.d.ts → core/physics.d.ts} +16 -62
- package/dist/{physics.js → core/physics.js} +60 -122
- package/dist/{project-identity.d.ts → core/project-identity.d.ts} +17 -63
- package/dist/{project-identity.js → core/project-identity.js} +22 -55
- package/dist/{project-remote.js → core/project-remote.js} +17 -6
- package/dist/{prompt-recall.js → core/prompt-recall.js} +1 -1
- package/dist/core/raw-append-only.d.ts +5 -0
- package/dist/core/raw-append-only.js +7 -0
- package/dist/{salience.d.ts → core/salience.d.ts} +1 -7
- package/dist/{salience.js → core/salience.js} +36 -27
- 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} +7 -7
- 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} +11 -10
- package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +110 -104
- package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +2 -1
- package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +1 -0
- package/dist/{dashboard.js → dashboard/dashboard.js} +172 -55
- package/dist/db/backup.js +1 -1
- package/dist/db/busy.d.ts +19 -2
- package/dist/db/busy.js +88 -14
- package/dist/db/connect.d.ts +11 -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 +28 -33
- package/dist/db/migrations/types.d.ts +2 -5
- package/dist/db/migrations/v08.js +1 -1
- package/dist/db/migrations/v14.js +39 -36
- package/dist/db/migrations/v15.js +2 -8
- package/dist/db/migrations/v16.js +31 -29
- package/dist/db/migrations/v17.js +2 -3
- package/dist/db/migrations/v18.js +6 -5
- package/dist/db/migrations/v19.js +2 -5
- package/dist/db/migrations/v20.js +5 -8
- package/dist/db/migrations/v22.js +28 -38
- package/dist/db/migrations/v23.js +3 -14
- package/dist/db/migrations/v24.js +25 -22
- 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 +23 -32
- package/dist/db/migrations/v30.js +4 -16
- package/dist/db/migrations/v31.js +23 -31
- 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 +10 -21
- package/dist/db/migrations/v40.js +8 -14
- package/dist/db/migrations/v41.js +2 -24
- package/dist/db/migrations/v43.js +7 -6
- package/dist/db/migrations/v44.js +2 -8
- package/dist/db/migrations/v45.js +2 -7
- package/dist/db/migrations/v46.js +1 -1
- package/dist/db/migrations/v47.js +2 -3
- 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/v51.js +1 -1
- package/dist/db/migrations/v52.js +1 -1
- package/dist/db/open.d.ts +11 -1
- package/dist/db/open.js +37 -4
- package/dist/db/physics-state.d.ts +23 -0
- package/dist/{physics-state.js → db/physics-state.js} +34 -52
- package/dist/db/raw-archive-mirror-cleanup.d.ts +5 -0
- package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +10 -20
- 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} +6 -2
- package/dist/{vector-store.js → db/vector-store.js} +83 -51
- package/dist/db/wal-checkpointer.d.ts +11 -0
- package/dist/db/wal-checkpointer.js +92 -0
- package/dist/doctor.js +176 -152
- 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 +5 -4
- package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +15 -53
- package/dist/{eval-stats.js → eval/eval-stats.js} +24 -51
- package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +3 -14
- package/dist/{eval-suite.js → eval/eval-suite.js} +99 -57
- package/dist/{eval.d.ts → eval/eval.d.ts} +7 -25
- package/dist/{eval.js → eval/eval.js} +35 -55
- package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -6
- package/dist/{judgment.js → eval/judgment.js} +23 -20
- package/dist/extensions/openclaw-plugin/index.js +2 -3
- 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} +10 -32
- package/dist/{graph-extract.js → graph/extract.js} +40 -81
- package/dist/{graph-recall.d.ts → graph/recall.d.ts} +9 -22
- package/dist/{graph-recall.js → graph/recall.js} +65 -108
- package/dist/graph/stream.d.ts +38 -0
- package/dist/{graph-stream.js → graph/stream.js} +20 -41
- package/dist/graph/view.d.ts +50 -0
- package/dist/graph/view.js +265 -0
- 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 +16 -17
- package/dist/hooks/copilot.d.ts +1 -8
- package/dist/hooks/copilot.js +16 -16
- package/dist/{cli → hooks}/hook-blocks.d.ts +6 -2
- package/dist/{cli → hooks}/hook-blocks.js +38 -125
- package/dist/hooks/json-hooks.d.ts +5 -37
- package/dist/hooks/json-hooks.js +49 -179
- package/dist/hooks/opencode.d.ts +0 -38
- package/dist/hooks/opencode.js +44 -103
- package/dist/hooks/shared.d.ts +8 -21
- package/dist/hooks/shared.js +30 -25
- package/dist/importers/core.d.ts +13 -42
- package/dist/importers/core.js +48 -64
- package/dist/importers/markdown-parse.d.ts +9 -32
- package/dist/importers/markdown-parse.js +10 -44
- package/dist/importers/markdown.js +5 -13
- package/dist/importers/sources.js +57 -81
- package/dist/importers/vault.d.ts +2 -8
- package/dist/importers/vault.js +95 -172
- package/dist/index.d.ts +26 -22
- package/dist/index.js +25 -21
- package/dist/learn/autolearn.d.ts +29 -0
- package/dist/{autolearn.js → learn/autolearn.js} +26 -51
- 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 +123 -0
- package/dist/learn/forward-claim-detector.d.ts +12 -0
- package/dist/learn/forward-claim-detector.js +60 -0
- package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +10 -18
- package/dist/{invalidation.js → learn/invalidation.js} +92 -125
- package/dist/mcp/admin-tools.d.ts +1 -1
- package/dist/mcp/admin-tools.js +39 -64
- 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 +10 -35
- package/dist/mcp/protocol.d.ts +14 -36
- package/dist/mcp/protocol.js +10 -19
- package/dist/mcp/recall-tools.d.ts +2 -2
- package/dist/mcp/recall-tools.js +70 -52
- package/dist/mcp/request.d.ts +3 -11
- package/dist/mcp/request.js +71 -85
- package/dist/mcp/server.d.ts +3 -9
- package/dist/mcp/server.js +6 -17
- package/dist/mcp/session-state.d.ts +2 -3
- package/dist/mcp/session-state.js +7 -13
- package/dist/mcp/shared-gate.js +1 -1
- package/dist/mcp/stdio.d.ts +2 -6
- package/dist/mcp/stdio.js +112 -38
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +7 -5
- package/dist/objects/customer-notes.d.ts +44 -0
- package/dist/objects/customer-notes.js +71 -0
- package/dist/objects/decisions.d.ts +41 -0
- package/dist/objects/decisions.js +63 -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/objects/incidents.d.ts +45 -0
- package/dist/objects/incidents.js +96 -0
- package/dist/objects/lifecycle.d.ts +27 -0
- package/dist/objects/lifecycle.js +96 -0
- package/dist/objects/policies.d.ts +60 -0
- package/dist/objects/policies.js +102 -0
- package/dist/objects/processes.d.ts +43 -0
- package/dist/objects/processes.js +92 -0
- package/dist/objects/project-briefs.d.ts +63 -0
- package/dist/objects/project-briefs.js +194 -0
- package/dist/objects/skills.d.ts +51 -0
- package/dist/objects/skills.js +110 -0
- package/dist/postinstall.js +10 -21
- package/dist/predictions/planning-fallacy.d.ts +14 -109
- package/dist/predictions/planning-fallacy.js +4 -129
- package/dist/rerankers/clef.d.ts +2 -6
- package/dist/rerankers/clef.js +28 -76
- package/dist/rerankers/cross-encoder.d.ts +0 -7
- package/dist/rerankers/cross-encoder.js +18 -28
- package/dist/rerankers/index.js +8 -7
- package/dist/rerankers/jev.d.ts +1 -4
- package/dist/rerankers/jev.js +36 -52
- package/dist/rerankers/llm.d.ts +2 -13
- package/dist/rerankers/llm.js +42 -59
- package/dist/rerankers/outage-warning.d.ts +8 -0
- package/dist/rerankers/outage-warning.js +32 -0
- package/dist/rerankers/remote.d.ts +4 -0
- package/dist/rerankers/remote.js +25 -0
- package/dist/rerankers/types.d.ts +3 -15
- 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 -3
- package/dist/search/boosts.js +36 -15
- 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/goal-boost.d.ts +23 -0
- package/dist/search/goal-boost.js +90 -0
- package/dist/search/hybrid-score.d.ts +2 -2
- package/dist/search/hybrid-score.js +1 -1
- package/dist/search/hybrid.d.ts +6 -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} +9 -8
- package/dist/search/path-context.d.ts +11 -0
- package/dist/{path-context.js → search/path-context.js} +8 -19
- package/dist/search/physics-search.d.ts +4 -4
- package/dist/search/physics-search.js +25 -22
- package/dist/search/rerank.d.ts +3 -3
- package/dist/search/rerank.js +4 -3
- package/dist/search/rrf.d.ts +15 -0
- package/dist/search/rrf.js +36 -0
- package/dist/search/temporal.d.ts +1 -1
- package/dist/search/temporal.js +5 -2
- package/dist/search/vector.d.ts +10 -3
- package/dist/search/vector.js +51 -15
- package/dist/server/auth.d.ts +10 -29
- package/dist/server/auth.js +57 -42
- package/dist/server/boot.d.ts +5 -0
- package/dist/server/boot.js +432 -0
- package/dist/server/client-ip.d.ts +8 -20
- package/dist/server/client-ip.js +23 -34
- 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/defaults.d.ts +3 -0
- package/dist/server/defaults.js +4 -0
- package/dist/server/key-check-bounds.d.ts +9 -0
- package/dist/server/key-check-bounds.js +46 -0
- package/dist/server/lifecycle.d.ts +5 -4
- package/dist/server/lifecycle.js +20 -5
- package/dist/server/mcp-http.d.ts +1 -4
- package/dist/server/mcp-http.js +44 -68
- package/dist/server/rate-limit.d.ts +21 -0
- package/dist/{rate-limit.js → server/rate-limit.js} +4 -13
- package/dist/server/ready.d.ts +7 -0
- package/dist/server/ready.js +38 -0
- package/dist/server/request.d.ts +14 -12
- package/dist/server/request.js +71 -28
- package/dist/server/route-table.d.ts +15 -0
- package/dist/server/route-table.js +202 -0
- package/dist/server/routes/admin.js +29 -30
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +35 -105
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +45 -115
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +44 -105
- package/dist/server/routes/memories.js +21 -43
- package/dist/server/routes/object-routes.d.ts +35 -0
- package/dist/server/routes/object-routes.js +72 -0
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +42 -134
- package/dist/server/routes/predictions.js +35 -63
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +44 -134
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +41 -120
- package/dist/server/routes/recall.js +21 -44
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +40 -138
- package/dist/server/server-detect.d.ts +28 -0
- package/dist/server/server-detect.js +156 -0
- 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 +73 -0
- package/dist/server/tls.d.ts +6 -0
- package/dist/server/tls.js +24 -0
- package/dist/server/types.d.ts +35 -14
- package/dist/server/validation.d.ts +6 -5
- package/dist/server/validation.js +16 -34
- package/dist/server.d.ts +39 -61
- package/dist/server.js +26 -569
- 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 +80 -0
- package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +5 -6
- package/dist/{project-merge.js → sharing/project-merge.js} +34 -51
- package/dist/sharing/scope.d.ts +7 -0
- package/dist/{scope.js → sharing/scope.js} +5 -12
- package/dist/sharing/search-both.d.ts +60 -0
- package/dist/sharing/search-both.js +138 -0
- package/dist/sharing/share.d.ts +38 -0
- package/dist/sharing/share.js +226 -0
- package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
- package/dist/{ambient-store.js → store/ambient.js} +11 -16
- package/dist/store/audit-event.d.ts +15 -17
- package/dist/store/audit-event.js +9 -16
- package/dist/{audit.d.ts → store/audit.d.ts} +29 -8
- package/dist/{audit.js → store/audit.js} +95 -18
- package/dist/{auth.d.ts → store/auth.d.ts} +19 -36
- package/dist/{auth.js → store/auth.js} +108 -99
- package/dist/store/candidates.d.ts +41 -13
- package/dist/store/candidates.js +141 -60
- package/dist/{card-detail.d.ts → store/card-detail.d.ts} +5 -4
- package/dist/{card-detail.js → store/card-detail.js} +3 -2
- package/dist/{store-cards.d.ts → store/cards.d.ts} +26 -16
- package/dist/{store-cards.js → store/cards.js} +133 -248
- package/dist/store/compactions.d.ts +78 -0
- package/dist/store/compactions.js +93 -0
- package/dist/store/conflicts.d.ts +26 -26
- package/dist/store/conflicts.js +194 -222
- 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 +88 -0
- package/dist/store/delete-and-batch.d.ts +27 -51
- package/dist/store/delete-and-batch.js +100 -92
- package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +16 -5
- package/dist/{delivery-recorder.js → store/delivery-recorder.js} +60 -38
- 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 +44 -0
- package/dist/store/doctor-reads.d.ts +16 -0
- package/dist/store/doctor-reads.js +19 -0
- package/dist/store/dormant.d.ts +105 -0
- package/dist/store/dormant.js +241 -0
- package/dist/store/embeddings/index.d.ts +36 -0
- package/dist/{embeddings.js → store/embeddings/index.js} +104 -224
- package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
- package/dist/{local-embedding.js → store/embeddings/local.js} +69 -75
- package/dist/store/embeddings/provider.d.ts +40 -0
- package/dist/{embedding-provider.js → store/embeddings/provider.js} +78 -91
- package/dist/store/entry-reads.d.ts +66 -63
- package/dist/store/entry-reads.js +159 -121
- package/dist/store/entry-row.d.ts +14 -37
- package/dist/store/entry-row.js +37 -45
- package/dist/store/entry-writes.d.ts +40 -17
- package/dist/store/entry-writes.js +105 -41
- 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/store/goals.d.ts +96 -0
- package/dist/store/goals.js +260 -0
- package/dist/store/graph-queue.d.ts +13 -0
- package/dist/store/graph-queue.js +70 -0
- package/dist/store/graph-reads.d.ts +41 -0
- package/dist/{graph/read.js → store/graph-reads.js} +72 -162
- package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +71 -14
- package/dist/{graph/rows.js → store/graph-rows.js} +20 -12
- package/dist/store/graph-view-rows.d.ts +13 -0
- package/dist/store/graph-view-rows.js +68 -0
- package/dist/store/graph-writes.d.ts +33 -0
- package/dist/store/graph-writes.js +232 -0
- package/dist/store/half-life.d.ts +35 -0
- package/dist/store/half-life.js +75 -0
- package/dist/store/handoffs.d.ts +6 -12
- package/dist/store/handoffs.js +54 -63
- package/dist/store/index-and-stats.d.ts +14 -20
- package/dist/store/index-and-stats.js +74 -119
- 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 +3 -7
- package/dist/store/markdown.js +25 -23
- package/dist/store/mirrors.d.ts +7 -13
- package/dist/store/mirrors.js +52 -47
- 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 +30 -36
- package/dist/store/planning-fallacy-evidence.d.ts +14 -0
- package/dist/store/planning-fallacy-evidence.js +52 -0
- package/dist/store/port.d.ts +649 -0
- package/dist/store/port.js +17 -0
- package/dist/{predictions/store.d.ts → store/predictions.d.ts} +25 -52
- package/dist/{predictions/store.js → store/predictions.js} +88 -184
- package/dist/{quality-repair.js → store/quality-repair.js} +27 -57
- package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
- package/dist/{quarantine.js → store/quarantine.js} +64 -22
- package/dist/store/raw-archive.d.ts +14 -0
- package/dist/{raw-archive.js → store/raw-archive.js} +20 -31
- package/dist/store/recall-scope.d.ts +78 -0
- package/dist/{recall-scope.js → store/recall-scope.js} +23 -84
- package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -81
- package/dist/{recall-trace.js → store/recall-trace.js} +41 -122
- package/dist/store/rejected-values.d.ts +55 -0
- package/dist/store/rejected-values.js +150 -0
- package/dist/store/rejection.d.ts +54 -0
- package/dist/{rejection.js → store/rejection.js} +16 -67
- package/dist/store/report-reads.d.ts +6 -0
- package/dist/store/report-reads.js +29 -0
- package/dist/store/rows.d.ts +11 -22
- package/dist/store/rows.js +52 -43
- package/dist/store/rule-sql.d.ts +5 -0
- package/dist/store/rule-sql.js +37 -0
- package/dist/store/search-rows.d.ts +22 -42
- package/dist/store/search-rows.js +55 -78
- package/dist/store/sessions.d.ts +23 -49
- package/dist/store/sessions.js +96 -118
- 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 +61 -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 +29 -0
- package/dist/store/sqlite/executor.js +287 -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 +39 -0
- package/dist/store/sqlite/object-rows.d.ts +102 -0
- package/dist/store/sqlite/object-rows.js +221 -0
- package/dist/store/sqlite/objects-group.d.ts +20 -0
- package/dist/store/sqlite/objects-group.js +316 -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 +23 -0
- package/dist/store/sqlite/store.js +294 -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 +135 -0
- package/dist/store/sqlite/worker-ops.js +93 -0
- package/dist/store/sqlite/worker-store.d.ts +8 -0
- package/dist/store/sqlite/worker-store.js +79 -0
- package/dist/store/summaries.d.ts +11 -72
- package/dist/store/summaries.js +47 -186
- package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
- package/dist/{summary-dirty.js → 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 +11 -0
- package/dist/store/tenant.js +28 -0
- 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} +14 -51
- package/dist/{token-ledger.js → store/token-ledger.js} +51 -129
- 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 +18 -0
- package/dist/store/vector-index.d.ts +46 -0
- package/dist/store/vector-index.js +170 -0
- package/dist/{working-memory.d.ts → store/working-memory.d.ts} +11 -26
- package/dist/store/working-memory.js +118 -0
- package/dist/{yaml.d.ts → store/yaml.d.ts} +1 -5
- package/dist/{yaml.js → store/yaml.js} +2 -6
- package/dist/support-bundle.d.ts +1 -1
- package/dist/support-bundle.js +19 -37
- 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 +65 -0
- package/dist/util/anthropic-messages.d.ts +31 -0
- package/dist/util/anthropic-messages.js +58 -0
- package/dist/util/atomic-write.d.ts +4 -0
- package/dist/util/atomic-write.js +138 -0
- package/dist/util/capped-json.d.ts +6 -0
- package/dist/util/capped-json.js +46 -0
- package/dist/util/crash-handlers.d.ts +12 -0
- package/dist/util/crash-handlers.js +72 -0
- package/dist/{env.d.ts → util/env.d.ts} +27 -7
- package/dist/{env.js → util/env.js} +33 -8
- package/dist/{home-path.d.ts → util/home-path.d.ts} +2 -1
- package/dist/util/home-path.js +69 -0
- package/dist/{http-retry.d.ts → util/http-retry.d.ts} +8 -2
- package/dist/util/http-retry.js +103 -0
- 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} +7 -3
- package/dist/{log.js → util/log.js} +36 -11
- package/dist/util/real-path.d.ts +3 -0
- package/dist/util/real-path.js +15 -0
- package/dist/util/request-scope.d.ts +28 -0
- package/dist/util/request-scope.js +48 -0
- package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
- package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +5 -30
- package/dist/{secret-detect.js → util/secret-detect.js} +17 -42
- 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 +15 -0
- package/dist/util/token-text.js +20 -0
- package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +2 -0
- package/dist/util/transcript-tail.js +49 -0
- package/dist/util/version.d.ts +11 -0
- package/dist/util/version.js +26 -0
- package/extensions/openclaw-plugin/index.ts +2 -6
- 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/ablation.d.ts +0 -102
- package/dist/ablation.js +0 -136
- package/dist/api.d.ts +0 -26
- package/dist/api.js +0 -29
- package/dist/audit-prune.d.ts +0 -62
- package/dist/audit-prune.js +0 -107
- package/dist/autolearn.d.ts +0 -56
- package/dist/client.d.ts +0 -48
- package/dist/compare.d.ts +0 -86
- package/dist/compare.js +0 -117
- package/dist/connectors/github/cli-impl.d.ts +0 -25
- package/dist/connectors/github/cli-impl.js +0 -227
- 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/correction-latency.d.ts +0 -36
- package/dist/customer-notes.d.ts +0 -96
- package/dist/customer-notes.js +0 -336
- package/dist/db.d.ts +0 -9
- package/dist/db.js +0 -8
- package/dist/decisions.d.ts +0 -94
- package/dist/decisions.js +0 -326
- package/dist/dedupe.d.ts +0 -75
- package/dist/dedupe.js +0 -169
- package/dist/dormant.d.ts +0 -93
- package/dist/dormant.js +0 -137
- package/dist/embedding-provider.d.ts +0 -77
- package/dist/embeddings.d.ts +0 -101
- package/dist/extract.js +0 -133
- package/dist/forward-claim-detector.d.ts +0 -36
- package/dist/forward-claim-detector.js +0 -112
- package/dist/goals.d.ts +0 -173
- package/dist/goals.js +0 -448
- package/dist/graph/read.d.ts +0 -73
- package/dist/graph/rows.d.ts +0 -45
- package/dist/graph/types.js +0 -11
- package/dist/graph-stream.d.ts +0 -70
- package/dist/graph-view.d.ts +0 -73
- package/dist/graph-view.js +0 -333
- package/dist/half-life-migration.d.ts +0 -63
- package/dist/half-life-migration.js +0 -182
- package/dist/handoff.js +0 -68
- package/dist/home-path.js +0 -24
- package/dist/http-retry.js +0 -51
- package/dist/incidents.d.ts +0 -103
- 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/memory-value-weights.d.ts +0 -19
- package/dist/memory-value.d.ts +0 -113
- package/dist/memory-value.js +0 -250
- package/dist/memory.d.ts +0 -294
- package/dist/memory.js +0 -522
- package/dist/owner-validation.d.ts +0 -42
- package/dist/owner-validation.js +0 -56
- package/dist/path-context.d.ts +0 -24
- package/dist/physics-state.d.ts +0 -39
- package/dist/policies.d.ts +0 -151
- package/dist/policies.js +0 -434
- package/dist/processes.d.ts +0 -108
- package/dist/processes.js +0 -371
- package/dist/project-briefs.d.ts +0 -128
- package/dist/project-briefs.js +0 -523
- package/dist/provenance-coverage.d.ts +0 -18
- package/dist/rate-limit.d.ts +0 -34
- package/dist/raw-archive-mirror-cleanup.d.ts +0 -20
- package/dist/raw-archive.d.ts +0 -24
- package/dist/recall-history.d.ts +0 -131
- package/dist/recall-history.js +0 -227
- package/dist/recall-scope.d.ts +0 -138
- package/dist/refine-llm.d.ts +0 -61
- package/dist/refine-llm.js +0 -167
- package/dist/reject-flow.d.ts +0 -69
- package/dist/reject-flow.js +0 -260
- package/dist/rejection.d.ts +0 -100
- package/dist/replay.d.ts +0 -41
- package/dist/replay.js +0 -122
- package/dist/rrf.d.ts +0 -43
- package/dist/rrf.js +0 -61
- package/dist/scope.d.ts +0 -14
- package/dist/server-detect.d.ts +0 -72
- package/dist/server-detect.js +0 -222
- package/dist/session-owners.d.ts +0 -7
- package/dist/session-owners.js +0 -54
- package/dist/shared.d.ts +0 -186
- package/dist/shared.js +0 -540
- package/dist/skills.d.ts +0 -101
- package/dist/skills.js +0 -367
- package/dist/store/entry-writes-group.d.ts +0 -9
- package/dist/store/vector-writes.d.ts +0 -6
- package/dist/store/vector-writes.js +0 -59
- package/dist/store-port.d.ts +0 -262
- package/dist/store-port.js +0 -178
- package/dist/tenant.d.ts +0 -25
- package/dist/tenant.js +0 -43
- package/dist/trace.d.ts +0 -34
- package/dist/transcript-tail.js +0 -48
- package/dist/version.d.ts +0 -26
- package/dist/version.js +0 -41
- package/dist/working-memory.js +0 -154
- /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/{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/{share-scrub.d.ts → capture/share-scrub.d.ts} +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/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
- /package/dist/{api-errors.js → core/api-errors.js} +0 -0
- /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +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/{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.js → dashboard/dashboard-types.js} +0 -0
- /package/dist/{quality-repair.d.ts → store/quality-repair.d.ts} +0 -0
- /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
- /package/dist/{escape.js → util/escape.js} +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/{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/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
- /package/dist/{write-budget.js → util/write-budget.js} +0 -0
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
// Reject, unreject and list rejected values, each on one handle of its own.
|
|
2
|
+
// A file apart from rejection.ts: store/open.ts imports that one, so an open there would be an import cycle.
|
|
3
|
+
import { closeHippoDb, openHippoDb, withWriteScope } from '../db/index.js';
|
|
4
|
+
import { heldTexts } from '../util/same-text.js';
|
|
5
|
+
import { audit } from './audit-event.js';
|
|
6
|
+
import { deleteEntryCore } from './delete-and-batch.js';
|
|
7
|
+
import { deleteDormantRow, listDormantSnapshots, purgeDormantByDigest, replaceDormantEntry } from './dormant.js';
|
|
8
|
+
import { entryRejectRowAt, selectAllEntries } from './entry-reads.js';
|
|
9
|
+
import { stampOriginProject } from './entry-row.js';
|
|
10
|
+
import { writeEntryDbOnly, writeEntryMirrors } from './entry-writes.js';
|
|
11
|
+
import { purgeMirrorBestEffort } from './mirrors.js';
|
|
12
|
+
import { onHandle, openStore } from './open.js';
|
|
13
|
+
import { archiveRawMemory, markMirrorCleaned } from './raw-archive.js';
|
|
14
|
+
import { RejectedValueError, checkRejectionGuard, deleteRejectedValue, insertRejectedValue, listRejectedValues, normalizeValueForRejection, rejectionDigest, } from './rejection.js';
|
|
15
|
+
function removeLiveRows(db, hippoRoot, rejection, holdsValue, removal) {
|
|
16
|
+
const { tenantId, actor, reason } = rejection;
|
|
17
|
+
const { removedIds, removedRawIds, successors } = removal;
|
|
18
|
+
const merged = [];
|
|
19
|
+
for (const row of selectAllEntries(db, tenantId)) {
|
|
20
|
+
if (!rejection.inReach(row.scope))
|
|
21
|
+
continue;
|
|
22
|
+
if (!holdsValue(row.content)) {
|
|
23
|
+
if (heldTexts(row).some(holdsValue))
|
|
24
|
+
merged.push(row);
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
if (row.kind === 'raw') {
|
|
28
|
+
// A raw row is append-only: archiving is its one removal path, and its savepoint nests in this write scope.
|
|
29
|
+
archiveRawMemory(db, row.id, { reason, who: actor });
|
|
30
|
+
removedRawIds.push(row.id);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
// The one reject_value row is the trail for these removals, so no forget row each.
|
|
34
|
+
deleteEntryCore(db, row.id, { actor, suppressForgetAudit: true });
|
|
35
|
+
}
|
|
36
|
+
removedIds.push(row.id);
|
|
37
|
+
}
|
|
38
|
+
for (const row of merged) {
|
|
39
|
+
const successor = rejection.successorOf(row, holdsValue, new Set(removedIds));
|
|
40
|
+
deleteEntryCore(db, row.id, { actor, suppressForgetAudit: true });
|
|
41
|
+
removedIds.push(row.id);
|
|
42
|
+
if (!successor)
|
|
43
|
+
continue;
|
|
44
|
+
const kept = stampOriginProject(hippoRoot, successor);
|
|
45
|
+
writeEntryDbOnly(db, kept, { actor });
|
|
46
|
+
successors.push(kept);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
// Dormant copies go in the same write scope, so `hippo dormant restore` cannot bring the text back. They have no mirror to purge.
|
|
50
|
+
function removeDormantCopies(db, rejection, digest, holdsValue, removal) {
|
|
51
|
+
const { tenantId } = rejection;
|
|
52
|
+
const { removedIds, dormantSuccessorIds } = removal;
|
|
53
|
+
removedIds.push(...purgeDormantByDigest(db, tenantId, digest, rejection.inReach));
|
|
54
|
+
for (const dormant of listDormantSnapshots(db, tenantId)) {
|
|
55
|
+
if (!rejection.inReach(dormant.entry.scope))
|
|
56
|
+
continue;
|
|
57
|
+
const successor = rejection.successorOf(dormant.entry, holdsValue, new Set(removedIds));
|
|
58
|
+
if (successor === undefined)
|
|
59
|
+
continue;
|
|
60
|
+
removedIds.push(dormant.entry.id);
|
|
61
|
+
if (!successor) {
|
|
62
|
+
deleteDormantRow(db, tenantId, dormant.entry.id);
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
replaceDormantEntry(db, tenantId, dormant.entry.id, successor);
|
|
66
|
+
dormantSuccessorIds.push(successor.id);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// After the commit, on the same handle: a purged raw mirror is stamped so the reaper skips it, and one that stays is logged.
|
|
70
|
+
function purgeRemovedMirrors(db, hippoRoot, removal) {
|
|
71
|
+
for (const id of removal.removedIds) {
|
|
72
|
+
const isRaw = removal.removedRawIds.includes(id);
|
|
73
|
+
const mirrorOk = purgeMirrorBestEffort(hippoRoot, id, isRaw, 'hippo reject');
|
|
74
|
+
if (mirrorOk && isRaw)
|
|
75
|
+
markMirrorCleaned(db, id, new Date().toISOString());
|
|
76
|
+
}
|
|
77
|
+
for (const successor of removal.successors)
|
|
78
|
+
writeEntryMirrors(hippoRoot, successor);
|
|
79
|
+
}
|
|
80
|
+
/** Applies one rejection on one handle and in one write scope: the rejected-value row, the removal of every row in reach that holds the
|
|
81
|
+
* text (live or dormant, whole or inside a merged row) and one reject_value audit row. Markdown mirrors follow the commit. */
|
|
82
|
+
export function applyRejection(hippoRoot, rejection) {
|
|
83
|
+
const { tenantId, actor, reason, memoryId } = rejection;
|
|
84
|
+
return onHandle(hippoRoot, (db) => {
|
|
85
|
+
const content = rejection.textOf(memoryId === undefined ? undefined : entryRejectRowAt(db, memoryId));
|
|
86
|
+
const digest = rejectionDigest(content);
|
|
87
|
+
const rejectedAt = new Date().toISOString();
|
|
88
|
+
const removal = { removedIds: [], removedRawIds: [], successors: [], dormantSuccessorIds: [] };
|
|
89
|
+
withWriteScope(db, 'reject_value', () => {
|
|
90
|
+
insertRejectedValue(db, {
|
|
91
|
+
tenantId,
|
|
92
|
+
digest,
|
|
93
|
+
reason,
|
|
94
|
+
rejectedBy: actor,
|
|
95
|
+
rejectedAt,
|
|
96
|
+
sourceMemoryId: memoryId ?? null,
|
|
97
|
+
normalizedChars: normalizeValueForRejection(content).length,
|
|
98
|
+
});
|
|
99
|
+
// SHORTCUT: scans every row of the tenant, fine for a human-run command; a digest column on memories if stores grow a hundredfold.
|
|
100
|
+
const holdsValue = (text) => rejectionDigest(text) === digest;
|
|
101
|
+
removeLiveRows(db, hippoRoot, rejection, holdsValue, removal);
|
|
102
|
+
removeDormantCopies(db, rejection, digest, holdsValue, removal);
|
|
103
|
+
// Still inside the write scope: a failed audit row is reported and the reject commits without it.
|
|
104
|
+
const { removedIds } = removal;
|
|
105
|
+
audit(db, 'reject_value', { tenantId, actor, targetId: memoryId, metadata: { digest, removedIds, count: removedIds.length } });
|
|
106
|
+
});
|
|
107
|
+
purgeRemovedMirrors(db, hippoRoot, removal);
|
|
108
|
+
const { removedIds, removedRawIds, successors, dormantSuccessorIds } = removal;
|
|
109
|
+
return { digest, content, removedIds, removedRawIds, successorIds: successors.map((s) => s.id), dormantSuccessorIds };
|
|
110
|
+
}, openStore);
|
|
111
|
+
}
|
|
112
|
+
/** Deletes the tenant's one rejected value whose digest starts with `digestPrefix` and writes its unreject_value audit row.
|
|
113
|
+
* No match, or more than one, writes nothing. */
|
|
114
|
+
export function liftRejection(hippoRoot, tenantId, digestPrefix, actor) {
|
|
115
|
+
return onHandle(hippoRoot, (db) => {
|
|
116
|
+
const matches = listRejectedValues(db, tenantId).filter((r) => r.digest.startsWith(digestPrefix));
|
|
117
|
+
const target = matches[0];
|
|
118
|
+
if (target === undefined)
|
|
119
|
+
return { status: 'not_found' };
|
|
120
|
+
if (matches.length > 1)
|
|
121
|
+
return { status: 'ambiguous', candidates: matches };
|
|
122
|
+
deleteRejectedValue(db, tenantId, target.digest);
|
|
123
|
+
audit(db, 'unreject_value', { tenantId, actor, targetId: target.sourceMemoryId ?? undefined, metadata: { digest: target.digest, reason: target.reason } });
|
|
124
|
+
return { status: 'ok', digest: target.digest, reason: target.reason };
|
|
125
|
+
}, openStore);
|
|
126
|
+
}
|
|
127
|
+
/** The tenant's rejected values, newest first. */
|
|
128
|
+
export function loadRejectedValues(hippoRoot, tenantId) {
|
|
129
|
+
return onHandle(hippoRoot, (db) => {
|
|
130
|
+
return listRejectedValues(db, tenantId);
|
|
131
|
+
}, openStore);
|
|
132
|
+
}
|
|
133
|
+
/** Whether the write guard would refuse `content` under `entryId`, as a write of that row would find it. Reads on a plain open
|
|
134
|
+
* and writes nothing, so a dry run counts the values a real run refuses. */
|
|
135
|
+
export function rejectionGuardRefuses(hippoRoot, tenantId, entryId, content) {
|
|
136
|
+
const db = openHippoDb(hippoRoot);
|
|
137
|
+
try {
|
|
138
|
+
checkRejectionGuard(db, tenantId, entryId, content);
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
catch (err) {
|
|
142
|
+
if (err instanceof RejectedValueError)
|
|
143
|
+
return true;
|
|
144
|
+
throw err;
|
|
145
|
+
}
|
|
146
|
+
finally {
|
|
147
|
+
closeHippoDb(db);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=rejected-values.js.map
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/** Rejected-value tombstone: a human can refuse byte-stable re-ingestion of a rejected fact (exact normalized value); paraphrase matching is out of scope.
|
|
2
|
+
* db-agnostic (helpers take a `DatabaseSyncLike`) and imports nothing from the store layer above it, which imports this (the reverse is a cycle). */
|
|
3
|
+
import type { DatabaseSyncLike } from '../db/index.js';
|
|
4
|
+
import { BadRequestError } from '../core/api-errors.js';
|
|
5
|
+
/** Normalize content for rejection digests: NFC, lowercase, collapse whitespace runs, trim. No punctuation stripping: over-normalizing causes false
|
|
6
|
+
* refusals, worse than misses. */
|
|
7
|
+
export declare function normalizeValueForRejection(content: string): string;
|
|
8
|
+
/** Full 64-char sha256 hex of the normalized content: a tombstone key needs collision resistance, not the 16-char redaction hash used for query hashing. */
|
|
9
|
+
export declare function rejectionDigest(content: string): string;
|
|
10
|
+
/** Thrown by the write-path guard (checkRejectionGuard, via upsertEntryRow) when a write would introduce a tombstoned value; carries what the
|
|
11
|
+
* transaction-owner catch blocks (writeEntry, api.supersede) need to write the post-rollback `reject_refusal` audit row via `auditRejectionRefusal`. */
|
|
12
|
+
export declare class RejectedValueError extends BadRequestError {
|
|
13
|
+
readonly digest: string;
|
|
14
|
+
readonly tenantId: string;
|
|
15
|
+
readonly entryId: string;
|
|
16
|
+
readonly reason: string | null;
|
|
17
|
+
readonly rejectedAt: string;
|
|
18
|
+
constructor(opts: {
|
|
19
|
+
digest: string;
|
|
20
|
+
tenantId: string;
|
|
21
|
+
entryId: string;
|
|
22
|
+
reason: string | null;
|
|
23
|
+
rejectedAt: string;
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
export interface RejectedValueRow {
|
|
27
|
+
tenantId: string;
|
|
28
|
+
digest: string;
|
|
29
|
+
reason: string | null;
|
|
30
|
+
rejectedBy: string | null;
|
|
31
|
+
rejectedAt: string;
|
|
32
|
+
sourceMemoryId: string | null;
|
|
33
|
+
normalizedChars: number | null;
|
|
34
|
+
}
|
|
35
|
+
/** Look up a tombstone by tenant + digest: one indexed point query, the guard's common-case cost; a miss ends the guard. */
|
|
36
|
+
export declare function findRejectedValue(db: DatabaseSyncLike, tenantId: string, digest: string): RejectedValueRow | null;
|
|
37
|
+
/** Insert (or refresh) a tombstone row; the caller owns the transaction (used by the `reject` verb and `resolveConflict`'s `rejectLoserValue`). */
|
|
38
|
+
export declare function insertRejectedValue(db: DatabaseSyncLike, opts: {
|
|
39
|
+
tenantId: string;
|
|
40
|
+
digest: string;
|
|
41
|
+
reason: string;
|
|
42
|
+
rejectedBy: string;
|
|
43
|
+
rejectedAt: string;
|
|
44
|
+
sourceMemoryId?: string | null;
|
|
45
|
+
normalizedChars: number;
|
|
46
|
+
}): void;
|
|
47
|
+
/** Delete a tombstone by tenant + exact digest: the `unreject` verb, the only escape hatch. */
|
|
48
|
+
export declare function deleteRejectedValue(db: DatabaseSyncLike, tenantId: string, digest: string): boolean;
|
|
49
|
+
/** List tombstones for a tenant, newest first: the `rejections` verb. */
|
|
50
|
+
export declare function listRejectedValues(db: DatabaseSyncLike, tenantId: string): RejectedValueRow[];
|
|
51
|
+
/** Write-path guard check: fires when the digest matches a tombstone AND the write introduces that content (a new row, or a same-id UPSERT changing it).
|
|
52
|
+
* Unchanged same-id re-persists (recall boost, decay, star toggle) are exempt. A miss costs ONE indexed point query; only a hit SELECTs the stored row. */
|
|
53
|
+
export declare function checkRejectionGuard(db: DatabaseSyncLike, tenantId: string, entryId: string, content: string): void;
|
|
54
|
+
//# sourceMappingURL=rejection.d.ts.map
|
|
@@ -1,42 +1,19 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* Exact-normalized-value semantics: a human who rejects a fact can refuse
|
|
5
|
-
* byte-stable re-ingestion of the same value across remember/capture/import/
|
|
6
|
-
* sync surfaces. Paraphrase/semantic matching is explicitly out of scope
|
|
7
|
-
* (documented limitation, plan "Design").
|
|
8
|
-
*
|
|
9
|
-
* Kept db-agnostic (helpers take a `DatabaseSyncLike` handle) and does NOT
|
|
10
|
-
* import from store.ts — store.ts imports from here, and the reverse would
|
|
11
|
-
* be a cycle.
|
|
12
|
-
*/
|
|
1
|
+
/** Rejected-value tombstone: a human can refuse byte-stable re-ingestion of a rejected fact (exact normalized value); paraphrase matching is out of scope.
|
|
2
|
+
* db-agnostic (helpers take a `DatabaseSyncLike`) and imports nothing from the store layer above it, which imports this (the reverse is a cycle). */
|
|
13
3
|
import { createHash } from 'node:crypto';
|
|
14
|
-
import { BadRequestError } from '
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
*
|
|
18
|
-
* punctuation stripping — over-normalization creates false refusals, which
|
|
19
|
-
* are worse than misses (plan §1).
|
|
20
|
-
*/
|
|
4
|
+
import { BadRequestError } from '../core/api-errors.js';
|
|
5
|
+
import { DIGEST_DISPLAY_CHARS } from '../util/token-text.js';
|
|
6
|
+
/** Normalize content for rejection digests: NFC, lowercase, collapse whitespace runs, trim. No punctuation stripping: over-normalizing causes false
|
|
7
|
+
* refusals, worse than misses. */
|
|
21
8
|
export function normalizeValueForRejection(content) {
|
|
22
9
|
return content.normalize('NFC').toLowerCase().replace(/\s+/g, ' ').trim();
|
|
23
10
|
}
|
|
24
|
-
/**
|
|
25
|
-
* Full sha256 hex (64 chars) of the normalized content. Reuses the strong-
|
|
26
|
-
* identity convention (importers.ts:814 content-hash tag), NOT the privacy-
|
|
27
|
-
* lossy 16-char convention (recall-trace query hashing) — a tombstone lookup
|
|
28
|
-
* key needs collision resistance, not redaction (plan §1).
|
|
29
|
-
*/
|
|
11
|
+
/** Full 64-char sha256 hex of the normalized content: a tombstone key needs collision resistance, not the 16-char redaction hash used for query hashing. */
|
|
30
12
|
export function rejectionDigest(content) {
|
|
31
13
|
return createHash('sha256').update(normalizeValueForRejection(content)).digest('hex');
|
|
32
14
|
}
|
|
33
|
-
/**
|
|
34
|
-
*
|
|
35
|
-
* upsertEntryRow) when an incoming write would introduce a value matching a
|
|
36
|
-
* tombstoned digest. Carries enough context for the transaction-owner catch
|
|
37
|
-
* blocks (writeEntry, api.supersede) to write a post-rollback
|
|
38
|
-
* `reject_refusal` audit row via `auditRejectionRefusal` (plan §3).
|
|
39
|
-
*/
|
|
15
|
+
/** Thrown by the write-path guard (checkRejectionGuard, via upsertEntryRow) when a write would introduce a tombstoned value; carries what the
|
|
16
|
+
* transaction-owner catch blocks (writeEntry, api.supersede) need to write the post-rollback `reject_refusal` audit row via `auditRejectionRefusal`. */
|
|
40
17
|
export class RejectedValueError extends BadRequestError {
|
|
41
18
|
digest;
|
|
42
19
|
tenantId;
|
|
@@ -44,7 +21,7 @@ export class RejectedValueError extends BadRequestError {
|
|
|
44
21
|
reason;
|
|
45
22
|
rejectedAt;
|
|
46
23
|
constructor(opts) {
|
|
47
|
-
super(`Memory value refused: matches a rejected value (digest ${opts.digest.slice(0,
|
|
24
|
+
super(`Memory value refused: matches a rejected value (digest ${opts.digest.slice(0, DIGEST_DISPLAY_CHARS)}..., ` +
|
|
48
25
|
`reason: ${opts.reason ?? 'none given'}). Run "hippo unreject" to allow it again.`);
|
|
49
26
|
this.name = 'RejectedValueError';
|
|
50
27
|
this.digest = opts.digest;
|
|
@@ -65,10 +42,7 @@ function rowToRejectedValue(row) {
|
|
|
65
42
|
normalizedChars: row.normalized_chars,
|
|
66
43
|
};
|
|
67
44
|
}
|
|
68
|
-
/**
|
|
69
|
-
* Look up a tombstone by tenant + digest. One indexed point query — the
|
|
70
|
-
* guard's common-case cost, a miss ends the guard (plan §3).
|
|
71
|
-
*/
|
|
45
|
+
/** Look up a tombstone by tenant + digest: one indexed point query, the guard's common-case cost; a miss ends the guard. */
|
|
72
46
|
export function findRejectedValue(db, tenantId, digest) {
|
|
73
47
|
// SAFETY: row's shape matches the columns named in the SELECT above.
|
|
74
48
|
const row = db
|
|
@@ -77,10 +51,7 @@ export function findRejectedValue(db, tenantId, digest) {
|
|
|
77
51
|
.get(tenantId, digest);
|
|
78
52
|
return row ? rowToRejectedValue(row) : null;
|
|
79
53
|
}
|
|
80
|
-
/**
|
|
81
|
-
* Insert (or refresh) a tombstone row. Caller owns the transaction — used by
|
|
82
|
-
* the `reject` verb and `resolveConflict`'s `rejectLoserValue` path.
|
|
83
|
-
*/
|
|
54
|
+
/** Insert (or refresh) a tombstone row; the caller owns the transaction (used by the `reject` verb and `resolveConflict`'s `rejectLoserValue`). */
|
|
84
55
|
export function insertRejectedValue(db, opts) {
|
|
85
56
|
db.prepare(`INSERT INTO rejected_values(tenant_id, digest, reason, rejected_by, rejected_at, source_memory_id, normalized_chars)
|
|
86
57
|
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
@@ -91,10 +62,7 @@ export function insertRejectedValue(db, opts) {
|
|
|
91
62
|
source_memory_id = excluded.source_memory_id,
|
|
92
63
|
normalized_chars = excluded.normalized_chars`).run(opts.tenantId, opts.digest, opts.reason, opts.rejectedBy, opts.rejectedAt, opts.sourceMemoryId ?? null, opts.normalizedChars);
|
|
93
64
|
}
|
|
94
|
-
/**
|
|
95
|
-
* Delete a tombstone by tenant + exact digest: the `unreject` verb, the
|
|
96
|
-
* only escape hatch.
|
|
97
|
-
*/
|
|
65
|
+
/** Delete a tombstone by tenant + exact digest: the `unreject` verb, the only escape hatch. */
|
|
98
66
|
export function deleteRejectedValue(db, tenantId, digest) {
|
|
99
67
|
const result = db.prepare(`DELETE FROM rejected_values WHERE tenant_id = ? AND digest = ?`).run(tenantId, digest);
|
|
100
68
|
return (result.changes ?? 0) > 0;
|
|
@@ -108,33 +76,14 @@ export function listRejectedValues(db, tenantId) {
|
|
|
108
76
|
.all(tenantId);
|
|
109
77
|
return rows.map(rowToRejectedValue);
|
|
110
78
|
}
|
|
111
|
-
/**
|
|
112
|
-
*
|
|
113
|
-
* (store.ts). Fires when the incoming content's digest matches a tombstone
|
|
114
|
-
* AND the write *introduces* that content: the row is new, OR the stored
|
|
115
|
-
* row's content digest differs from the incoming one — an UPSERT editing a
|
|
116
|
-
* same-id row TO a rejected value is a content introduction and must be
|
|
117
|
-
* refused. Unchanged same-id re-persists (recall boost, decay, star toggle)
|
|
118
|
-
* are exempt by construction (plan §3).
|
|
119
|
-
*
|
|
120
|
-
* Ordering minimizes queries on the common (miss) path: (a) caller has
|
|
121
|
-
* already computed nothing yet — this does the digest + point lookup first;
|
|
122
|
-
* (b) a miss returns immediately (ONE indexed point query); (c) only on a
|
|
123
|
-
* tombstone hit does it SELECT the stored row's content to classify
|
|
124
|
-
* new-row vs content-introduction (+1 query, rare path).
|
|
125
|
-
*/
|
|
79
|
+
/** Write-path guard check: fires when the digest matches a tombstone AND the write introduces that content (a new row, or a same-id UPSERT changing it).
|
|
80
|
+
* Unchanged same-id re-persists (recall boost, decay, star toggle) are exempt. A miss costs ONE indexed point query; only a hit SELECTs the stored row. */
|
|
126
81
|
export function checkRejectionGuard(db, tenantId, entryId, content) {
|
|
127
82
|
const incomingDigest = rejectionDigest(content);
|
|
128
83
|
const tombstone = findRejectedValue(db, tenantId, incomingDigest);
|
|
129
84
|
if (!tombstone)
|
|
130
85
|
return; // miss ends the guard — the overwhelmingly common case
|
|
131
|
-
//
|
|
132
|
-
// ULIDs, this lookup only classifies new-row vs same-id re-persist for the
|
|
133
|
-
// id the caller is already writing, and the tombstone lookup above is the
|
|
134
|
-
// tenant-scoped decision. Matches deleteEntry's own by-id SELECT.
|
|
135
|
-
//
|
|
136
|
-
// Also read tenant_id: a same-id upsert that only changes tenantId introduces the
|
|
137
|
-
// content into the destination tenant, exactly as if the row were new there.
|
|
86
|
+
// Id-only on purpose (ids are global ULIDs; the tombstone lookup is tenant-scoped); tenant_id is read as a tenantId-only upsert introduces content there.
|
|
138
87
|
// SAFETY: storedRow's shape matches the two columns named in the SELECT above.
|
|
139
88
|
const storedRow = db.prepare(`SELECT content, tenant_id FROM memories WHERE id = ?`).get(entryId);
|
|
140
89
|
const isNewRow = storedRow === undefined;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { MemoryEntry } from '../core/memory.js';
|
|
2
|
+
/** Every superseded row, the row that replaced it and that row's extraction source, in loadAllEntries' order: all a correction-latency report reads. */
|
|
3
|
+
export declare function loadCorrectionEntries(hippoRoot: string): MemoryEntry[];
|
|
4
|
+
/** The kind='raw' rows in loadAllEntries' order: all a provenance-coverage report reads. */
|
|
5
|
+
export declare function loadRawEntries(hippoRoot: string): MemoryEntry[];
|
|
6
|
+
//# sourceMappingURL=report-reads.d.ts.map
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { MEMORY_SELECT_COLUMNS, rowToEntry } from './rows.js';
|
|
2
|
+
import { onHandle, openStore } from './open.js';
|
|
3
|
+
/** Every superseded row, the row that replaced it and that row's extraction source, in loadAllEntries' order: all a correction-latency report reads. */
|
|
4
|
+
export function loadCorrectionEntries(hippoRoot) {
|
|
5
|
+
return onHandle(hippoRoot, (db) => {
|
|
6
|
+
const superseded = `superseded_by IS NOT NULL AND superseded_by != ''`;
|
|
7
|
+
// SAFETY: selects exactly MEMORY_SELECT_COLUMNS, matching MemoryRow's field set.
|
|
8
|
+
const rows = db.prepare(`
|
|
9
|
+
SELECT ${MEMORY_SELECT_COLUMNS} FROM memories
|
|
10
|
+
WHERE (${superseded})
|
|
11
|
+
OR id IN (SELECT superseded_by FROM memories WHERE ${superseded})
|
|
12
|
+
OR id IN (
|
|
13
|
+
SELECT extracted_from FROM memories
|
|
14
|
+
WHERE extracted_from IS NOT NULL AND id IN (SELECT superseded_by FROM memories WHERE ${superseded})
|
|
15
|
+
)
|
|
16
|
+
ORDER BY created ASC, id ASC
|
|
17
|
+
`).all();
|
|
18
|
+
return rows.map(rowToEntry);
|
|
19
|
+
}, openStore);
|
|
20
|
+
}
|
|
21
|
+
/** The kind='raw' rows in loadAllEntries' order: all a provenance-coverage report reads. */
|
|
22
|
+
export function loadRawEntries(hippoRoot) {
|
|
23
|
+
return onHandle(hippoRoot, (db) => {
|
|
24
|
+
// SAFETY: selects exactly MEMORY_SELECT_COLUMNS, matching MemoryRow's field set.
|
|
25
|
+
const rows = db.prepare(`SELECT ${MEMORY_SELECT_COLUMNS} FROM memories WHERE kind = 'raw' ORDER BY created ASC, id ASC`).all();
|
|
26
|
+
return rows.map(rowToEntry);
|
|
27
|
+
}, openStore);
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=report-reads.js.map
|
package/dist/store/rows.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { Layer, type MemoryEntry, type ConfidenceLevel } from '../memory.js';
|
|
2
|
-
import type
|
|
1
|
+
import { Layer, type MemoryEntry, type ConfidenceLevel } from '../core/memory.js';
|
|
2
|
+
import { type JsonValue } from '../util/json.js';
|
|
3
|
+
import { type StoredJsonSite } from '../util/stored-json.js';
|
|
3
4
|
export interface IndexEntry {
|
|
4
5
|
id: string;
|
|
5
6
|
file: string;
|
|
@@ -134,29 +135,17 @@ export interface SessionEvent {
|
|
|
134
135
|
created_at: string;
|
|
135
136
|
}
|
|
136
137
|
export declare const INDEX_VERSION = 3;
|
|
137
|
-
export declare const MEMORY_SELECT_COLUMNS
|
|
138
|
-
export declare const MEMORY_SEARCH_COLUMNS
|
|
139
|
-
/**
|
|
140
|
-
*
|
|
141
|
-
* `limit === undefined`. Single source of truth; `api.recall` imports
|
|
142
|
-
* this for `RecallResult.windowSize` reporting so the two cannot drift.
|
|
143
|
-
*/
|
|
138
|
+
export declare const MEMORY_SELECT_COLUMNS: string;
|
|
139
|
+
export declare const MEMORY_SEARCH_COLUMNS: string;
|
|
140
|
+
/** Default candidate-pool size for `loadSearchEntries` when `limit` is undefined; `api.recall` imports it for `RecallResult.windowSize` so the two cannot
|
|
141
|
+
* drift. */
|
|
144
142
|
export declare const DEFAULT_SEARCH_CANDIDATE_LIMIT = 200;
|
|
145
143
|
export declare function rowToEntry(row: MemoryRow): MemoryEntry;
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
*
|
|
150
|
-
* usable-looking 0/NaN — a consumer INSERTing recall_trace_outcomes with
|
|
151
|
-
* trace_id=0 would hit a masked FK violation (row id 0 never exists).
|
|
152
|
-
* Require a clean positive integer string; anything else is treated as
|
|
153
|
-
* unset. This is the ONE place that decides "clean" — every consumer of
|
|
154
|
-
* `HippoIndex.last_trace_id` (outcomeForLastRecall, tests) reads the
|
|
155
|
-
* already-validated value out of `buildIndexFromDb`'s result and never
|
|
156
|
-
* re-parses the raw meta string itself.
|
|
157
|
-
*/
|
|
144
|
+
/** A column that is not JSON reads as empty. With `site` the row is named at warn once; without it no row is known and the line stays at debug. */
|
|
145
|
+
export declare function parseJsonArray(raw: string | null | undefined, site?: StoredJsonSite): string[];
|
|
146
|
+
/** Strict parse for `last_trace_id`: Number(raw) turns '' or garbage into 0/NaN (a masked FK violation); require a clean positive integer string, else unset.
|
|
147
|
+
* The ONE place that decides 'clean'; consumers read the validated value from `buildIndexFromDb`'s result and never re-parse. */
|
|
158
148
|
export declare function parseLastTraceId(raw: string | null | undefined): string | null;
|
|
159
|
-
export declare function isPlainJsonObject(x: JsonValue): x is Record<string, JsonValue>;
|
|
160
149
|
export declare function rowToTaskSnapshot(row: TaskSnapshotRow): TaskSnapshot;
|
|
161
150
|
export declare function rowToMemoryConflict(row: MemoryConflictRow): MemoryConflict;
|
|
162
151
|
export declare function rowToSessionEvent(row: SessionEventRow): SessionEvent;
|
package/dist/store/rows.js
CHANGED
|
@@ -1,42 +1,56 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { DEFAULT_TENANT_ID } from '../util/env.js';
|
|
2
|
+
import { FALLBACK_HALF_LIFE_DAYS, DEFAULT_SCHEMA_FIT } from '../core/memory.js';
|
|
3
|
+
import { errorMessage, log } from '../util/log.js';
|
|
4
|
+
import { isJsonObject } from '../util/json.js';
|
|
5
|
+
import { warnDamagedColumn } from '../util/stored-json.js';
|
|
2
6
|
export const INDEX_VERSION = 3;
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
const MEMORY_COLUMN_NAMES = [
|
|
8
|
+
'id', 'created', 'last_retrieved', 'retrieval_count', 'strength', 'half_life_days', 'layer', 'tags_json',
|
|
9
|
+
'emotional_valence', 'schema_fit', 'source', 'outcome_score', 'outcome_positive', 'outcome_negative',
|
|
10
|
+
'conflicts_with_json', 'pinned', 'confidence', 'content', 'parents_json', 'starred', 'trace_outcome',
|
|
11
|
+
'source_session_id', 'valid_from', 'superseded_by', 'extracted_from', 'dag_level', 'dag_parent_id', 'kind', 'scope',
|
|
12
|
+
'owner', 'artifact_ref', 'tenant_id', 'origin_project', 'descendant_count', 'earliest_at', 'latest_at',
|
|
13
|
+
'summary_dirty', 'last_rebuilt_at', 'rebuild_count', 'dag_level_3_built_at',
|
|
14
|
+
];
|
|
15
|
+
// FTS-join columns for loadSearchRows: `m.<col> AS <col>` keeps rowToEntry's unqualified reads working.
|
|
16
|
+
export const MEMORY_SELECT_COLUMNS = MEMORY_COLUMN_NAMES.join(', ');
|
|
17
|
+
export const MEMORY_SEARCH_COLUMNS = [
|
|
18
|
+
...MEMORY_COLUMN_NAMES.map((c) => `m.${c} AS ${c}`),
|
|
19
|
+
'bm25(memories_fts) AS bm25_score',
|
|
20
|
+
].join(', ');
|
|
21
|
+
/** Default candidate-pool size for `loadSearchEntries` when `limit` is undefined; `api.recall` imports it for `RecallResult.windowSize` so the two cannot
|
|
22
|
+
* drift. */
|
|
12
23
|
export const DEFAULT_SEARCH_CANDIDATE_LIMIT = 200;
|
|
13
|
-
|
|
14
|
-
// SAFETY: every `as X`
|
|
15
|
-
//
|
|
16
|
-
|
|
17
|
-
// and the DB layer only ever writes these columns from the same enums.
|
|
18
|
-
const entry = {
|
|
24
|
+
function rowToRetrievalFields(row) {
|
|
25
|
+
// SAFETY: every `as X` narrows a SQLite column to a MemoryEntry enum/union member; `row` comes from MEMORY_SELECT_COLUMNS / MEMORY_SEARCH_COLUMNS,
|
|
26
|
+
// the only queries producing MemoryRow, and the DB layer writes these columns only from the same enums.
|
|
27
|
+
return {
|
|
19
28
|
id: row.id,
|
|
20
29
|
created: row.created,
|
|
21
30
|
last_retrieved: row.last_retrieved,
|
|
22
31
|
retrieval_count: Number(row.retrieval_count ?? 0),
|
|
23
32
|
strength: Number(row.strength ?? 1),
|
|
24
|
-
half_life_days: Number(row.half_life_days ??
|
|
33
|
+
half_life_days: Number(row.half_life_days ?? FALLBACK_HALF_LIFE_DAYS),
|
|
25
34
|
layer: row.layer,
|
|
26
|
-
tags: parseJsonArray(row.tags_json),
|
|
35
|
+
tags: parseJsonArray(row.tags_json, { table: 'memories', id: row.id, column: 'tags_json' }),
|
|
27
36
|
emotional_valence: row.emotional_valence ?? 'neutral',
|
|
28
|
-
schema_fit: Number(row.schema_fit ??
|
|
37
|
+
schema_fit: Number(row.schema_fit ?? DEFAULT_SCHEMA_FIT),
|
|
29
38
|
source: row.source ?? 'cli',
|
|
30
39
|
outcome_score: row.outcome_score === null || row.outcome_score === undefined ? null : Number(row.outcome_score),
|
|
31
40
|
outcome_positive: Number(row.outcome_positive ?? 0),
|
|
32
41
|
outcome_negative: Number(row.outcome_negative ?? 0),
|
|
33
|
-
conflicts_with: parseJsonArray(row.conflicts_with_json),
|
|
42
|
+
conflicts_with: parseJsonArray(row.conflicts_with_json, { table: 'memories', id: row.id, column: 'conflicts_with_json' }),
|
|
34
43
|
pinned: Boolean(row.pinned),
|
|
35
44
|
confidence: row.confidence ?? 'observed',
|
|
36
45
|
content: row.content,
|
|
37
|
-
parents: parseJsonArray(row.parents_json),
|
|
46
|
+
parents: parseJsonArray(row.parents_json, { table: 'memories', id: row.id, column: 'parents_json' }),
|
|
38
47
|
starred: Boolean(row.starred),
|
|
39
48
|
trace_outcome: row.trace_outcome ?? null,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
function rowToPlacementFields(row) {
|
|
52
|
+
// SAFETY: the `as MemoryKind` narrows a column the DB layer only writes from that enum.
|
|
53
|
+
return {
|
|
40
54
|
source_session_id: row.source_session_id ?? null,
|
|
41
55
|
valid_from: row.valid_from ?? row.created,
|
|
42
56
|
superseded_by: row.superseded_by ?? null,
|
|
@@ -47,7 +61,7 @@ export function rowToEntry(row) {
|
|
|
47
61
|
scope: row.scope ?? null,
|
|
48
62
|
owner: row.owner ?? null,
|
|
49
63
|
artifact_ref: row.artifact_ref ?? null,
|
|
50
|
-
tenantId: row.tenant_id ??
|
|
64
|
+
tenantId: row.tenant_id ?? DEFAULT_TENANT_ID,
|
|
51
65
|
origin_project: row.origin_project ?? null,
|
|
52
66
|
descendant_count: Number(row.descendant_count ?? 0),
|
|
53
67
|
earliest_at: row.earliest_at ?? null,
|
|
@@ -57,6 +71,9 @@ export function rowToEntry(row) {
|
|
|
57
71
|
rebuild_count: Number(row.rebuild_count ?? 0),
|
|
58
72
|
dag_level_3_built_at: row.dag_level_3_built_at ?? null,
|
|
59
73
|
};
|
|
74
|
+
}
|
|
75
|
+
export function rowToEntry(row) {
|
|
76
|
+
const entry = { ...rowToRetrievalFields(row), ...rowToPlacementFields(row) };
|
|
60
77
|
// Preserve bm25_score from the FTS path; `'bm25_score' in row` tells an absent column
|
|
61
78
|
// (non-FTS path) from a present one.
|
|
62
79
|
if ('bm25_score' in row && row.bm25_score !== undefined && row.bm25_score !== null) {
|
|
@@ -64,7 +81,8 @@ export function rowToEntry(row) {
|
|
|
64
81
|
}
|
|
65
82
|
return entry;
|
|
66
83
|
}
|
|
67
|
-
|
|
84
|
+
/** A column that is not JSON reads as empty. With `site` the row is named at warn once; without it no row is known and the line stays at debug. */
|
|
85
|
+
export function parseJsonArray(raw, site) {
|
|
68
86
|
if (!raw)
|
|
69
87
|
return [];
|
|
70
88
|
try {
|
|
@@ -72,42 +90,33 @@ export function parseJsonArray(raw) {
|
|
|
72
90
|
return Array.isArray(parsed) ? parsed.map((item) => String(item)) : [];
|
|
73
91
|
}
|
|
74
92
|
catch (err) {
|
|
75
|
-
|
|
93
|
+
if (site)
|
|
94
|
+
warnDamagedColumn(site, 'not valid JSON');
|
|
95
|
+
else
|
|
96
|
+
log.debug(`store: corrupt JSON array column read as empty: ${errorMessage(err)}`);
|
|
76
97
|
return [];
|
|
77
98
|
}
|
|
78
99
|
}
|
|
79
|
-
/**
|
|
80
|
-
*
|
|
81
|
-
* A bare Number(raw) would turn '', whitespace, or garbage into a
|
|
82
|
-
* usable-looking 0/NaN — a consumer INSERTing recall_trace_outcomes with
|
|
83
|
-
* trace_id=0 would hit a masked FK violation (row id 0 never exists).
|
|
84
|
-
* Require a clean positive integer string; anything else is treated as
|
|
85
|
-
* unset. This is the ONE place that decides "clean" — every consumer of
|
|
86
|
-
* `HippoIndex.last_trace_id` (outcomeForLastRecall, tests) reads the
|
|
87
|
-
* already-validated value out of `buildIndexFromDb`'s result and never
|
|
88
|
-
* re-parses the raw meta string itself.
|
|
89
|
-
*/
|
|
100
|
+
/** Strict parse for `last_trace_id`: Number(raw) turns '' or garbage into 0/NaN (a masked FK violation); require a clean positive integer string, else unset.
|
|
101
|
+
* The ONE place that decides 'clean'; consumers read the validated value from `buildIndexFromDb`'s result and never re-parse. */
|
|
90
102
|
export function parseLastTraceId(raw) {
|
|
91
103
|
const trimmed = (raw ?? '').trim();
|
|
92
104
|
if (!/^\d+$/.test(trimmed) || Number(trimmed) <= 0)
|
|
93
105
|
return null;
|
|
94
106
|
return trimmed;
|
|
95
107
|
}
|
|
96
|
-
|
|
97
|
-
return x !== null && typeof x === 'object' && !Array.isArray(x);
|
|
98
|
-
}
|
|
99
|
-
function parseJsonObject(raw) {
|
|
108
|
+
function parseJsonObject(raw, site) {
|
|
100
109
|
if (!raw)
|
|
101
110
|
return {};
|
|
102
111
|
try {
|
|
103
112
|
const parsed = JSON.parse(raw);
|
|
104
|
-
if (
|
|
113
|
+
if (isJsonObject(parsed)) {
|
|
105
114
|
return parsed;
|
|
106
115
|
}
|
|
107
116
|
return {};
|
|
108
117
|
}
|
|
109
|
-
catch
|
|
110
|
-
|
|
118
|
+
catch {
|
|
119
|
+
warnDamagedColumn(site, 'not valid JSON');
|
|
111
120
|
return {};
|
|
112
121
|
}
|
|
113
122
|
}
|
|
@@ -146,7 +155,7 @@ export function rowToSessionEvent(row) {
|
|
|
146
155
|
content: row.content,
|
|
147
156
|
source: row.source,
|
|
148
157
|
scope: row.scope ?? null,
|
|
149
|
-
metadata: parseJsonObject(row.metadata_json),
|
|
158
|
+
metadata: parseJsonObject(row.metadata_json, { table: 'session_events', id: row.id, column: 'metadata_json' }),
|
|
150
159
|
created_at: row.created_at,
|
|
151
160
|
};
|
|
152
161
|
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** calculateStrength's clock-basis formula as SQL over `memories` columns, flags and multipliers baked in; keep in step.
|
|
2
|
+
* An unparseable date scores NULL here and 0 in JS, so sums agree. */
|
|
3
|
+
export declare function strengthSql(now: Date): string;
|
|
4
|
+
export declare const AUTO_DELETABLE_SQL: string;
|
|
5
|
+
//# sourceMappingURL=rule-sql.d.ts.map
|