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
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import type { DatabaseSyncLike } from '../db/index.js';
|
|
2
|
+
export type CompactionStatus = 'started' | 'summarised' | 'done' | 'no-summary';
|
|
3
|
+
export interface CompactionRow {
|
|
4
|
+
tenant_id: string;
|
|
5
|
+
id: string;
|
|
6
|
+
session_id: string;
|
|
7
|
+
origin_project: string;
|
|
8
|
+
compact_trigger: string | null;
|
|
9
|
+
cwd: string | null;
|
|
10
|
+
transcript_path: string | null;
|
|
11
|
+
snapshot_saved: number;
|
|
12
|
+
started_at: string;
|
|
13
|
+
summarised_at: string | null;
|
|
14
|
+
summary: string | null;
|
|
15
|
+
items_json: string | null;
|
|
16
|
+
items_written: number;
|
|
17
|
+
status: CompactionStatus;
|
|
18
|
+
}
|
|
19
|
+
export interface HeldMemoryRow {
|
|
20
|
+
id: string;
|
|
21
|
+
source_session_id: string | null;
|
|
22
|
+
content: string;
|
|
23
|
+
}
|
|
24
|
+
export interface StartedCompactionInput {
|
|
25
|
+
readonly id: string;
|
|
26
|
+
readonly sessionId: string;
|
|
27
|
+
readonly originProject: string;
|
|
28
|
+
readonly trigger: string | null;
|
|
29
|
+
readonly cwd: string | null;
|
|
30
|
+
readonly transcriptPath: string | null;
|
|
31
|
+
readonly startedAt: string;
|
|
32
|
+
}
|
|
33
|
+
export interface SummarisedUpdate {
|
|
34
|
+
readonly summary: string;
|
|
35
|
+
readonly itemsJson: string;
|
|
36
|
+
readonly summarisedAt: string;
|
|
37
|
+
readonly requestId?: string;
|
|
38
|
+
}
|
|
39
|
+
export interface SummarisedInsert extends SummarisedUpdate {
|
|
40
|
+
readonly id: string;
|
|
41
|
+
}
|
|
42
|
+
export type SummarisedInsertMeta = Omit<StartedCompactionInput, 'id'>;
|
|
43
|
+
/** A session's newest row, as an array of at most one. */
|
|
44
|
+
export declare function latestCompactionRows(db: DatabaseSyncLike, tenantId: string, sessionId: string): CompactionRow[];
|
|
45
|
+
export declare function compactionRowsByRequest(db: DatabaseSyncLike, tenantId: string, requestId: string): CompactionRow[];
|
|
46
|
+
/** The session's newest `started` row with a start in [`notBefore`, `notAfter`], both ISO strings. */
|
|
47
|
+
export declare function latestStartedRows(db: DatabaseSyncLike, tenantId: string, sessionId: string, notAfter: string, notBefore: string): CompactionRow[];
|
|
48
|
+
/** `summarised` rows whose summary is older than `summarisedBefore`, an ISO string. */
|
|
49
|
+
export declare function stalledSummarisedRows(db: DatabaseSyncLike, tenantId: string, summarisedBefore: string): CompactionRow[];
|
|
50
|
+
/** `started` rows with a transcript whose start lies between `startedAfter` and `startedBefore`, oldest first. */
|
|
51
|
+
export declare function openTranscriptRows(db: DatabaseSyncLike, tenantId: string, startedBefore: string, startedAfter: string): CompactionRow[];
|
|
52
|
+
export declare function insertStartedCompaction(db: DatabaseSyncLike, tenantId: string, start: StartedCompactionInput): void;
|
|
53
|
+
/** Moves a `started` row to `summarised`; false when another process already moved it. */
|
|
54
|
+
export declare function markCompactionSummarised(db: DatabaseSyncLike, tenantId: string, id: string, update: SummarisedUpdate): boolean;
|
|
55
|
+
export declare function insertSummarisedCompaction(db: DatabaseSyncLike, tenantId: string, meta: SummarisedInsertMeta, row: SummarisedInsert): void;
|
|
56
|
+
export declare function markSnapshotSavedRow(db: DatabaseSyncLike, tenantId: string, recordId: string): void;
|
|
57
|
+
export declare function compactionProgress(db: DatabaseSyncLike, tenantId: string, id: string): {
|
|
58
|
+
status: CompactionStatus;
|
|
59
|
+
items_written: number;
|
|
60
|
+
} | undefined;
|
|
61
|
+
export declare function markCompactionDone(db: DatabaseSyncLike, tenantId: string, id: string, itemsWritten: number): void;
|
|
62
|
+
/** Rows changed: 1 when the `started` row was closed, 0 when it had already moved. */
|
|
63
|
+
export declare function closeStartedWithoutSummary(db: DatabaseSyncLike, tenantId: string, id: string): number;
|
|
64
|
+
export declare function nextCompactionStart(db: DatabaseSyncLike, tenantId: string, sessionId: string, after: string): string | null;
|
|
65
|
+
/** Live rows of one tenant and origin set that default recall shows. */
|
|
66
|
+
export declare function heldMemoryRows(db: DatabaseSyncLike, tenantId: string, origins: readonly string[]): HeldMemoryRow[];
|
|
67
|
+
export declare function restampCompactionOrigin(db: DatabaseSyncLike, tenantId: string, from: string, into: string): number;
|
|
68
|
+
export declare function compactionTranscripts(db: DatabaseSyncLike, tenantId: string): Array<{
|
|
69
|
+
transcript: string;
|
|
70
|
+
cwd: string | null;
|
|
71
|
+
}>;
|
|
72
|
+
export declare function compactionOriginsWithCwd(db: DatabaseSyncLike, tenantId: string): Array<{
|
|
73
|
+
origin: string;
|
|
74
|
+
cwd: string;
|
|
75
|
+
}>;
|
|
76
|
+
/** True when `table` holds a row of this tenant under the project name. */
|
|
77
|
+
export declare function holdsOrigin(db: DatabaseSyncLike, table: 'memories' | 'compactions', tenantId: string, name: string): boolean;
|
|
78
|
+
//# sourceMappingURL=compactions.d.ts.map
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { originInSql } from '../core/project-identity.js';
|
|
2
|
+
import { scopeAdmitSql } from './recall-scope.js';
|
|
3
|
+
const COLUMNS = 'tenant_id, id, session_id, origin_project, compact_trigger, cwd, transcript_path, snapshot_saved, started_at, summarised_at, summary, items_json, items_written, status';
|
|
4
|
+
function selectRows(db, where, ...params) {
|
|
5
|
+
// SAFETY: the SELECT names exactly COLUMNS, matching CompactionRow's field set.
|
|
6
|
+
return db.prepare(`SELECT ${COLUMNS} FROM compactions WHERE ${where}`).all(...params);
|
|
7
|
+
}
|
|
8
|
+
/** A session's newest row, as an array of at most one. */
|
|
9
|
+
export function latestCompactionRows(db, tenantId, sessionId) {
|
|
10
|
+
return selectRows(db, 'tenant_id = ? AND session_id = ? ORDER BY started_at DESC, id DESC LIMIT 1', tenantId, sessionId);
|
|
11
|
+
}
|
|
12
|
+
export function compactionRowsByRequest(db, tenantId, requestId) {
|
|
13
|
+
return selectRows(db, 'tenant_id = ? AND request_id = ?', tenantId, requestId);
|
|
14
|
+
}
|
|
15
|
+
/** The session's newest `started` row with a start in [`notBefore`, `notAfter`], both ISO strings. */
|
|
16
|
+
export function latestStartedRows(db, tenantId, sessionId, notAfter, notBefore) {
|
|
17
|
+
return selectRows(db, `tenant_id = ? AND session_id = ? AND status = 'started' AND started_at <= ? AND started_at >= ? ORDER BY started_at DESC, id DESC LIMIT 1`, tenantId, sessionId, notAfter, notBefore);
|
|
18
|
+
}
|
|
19
|
+
/** `summarised` rows whose summary is older than `summarisedBefore`, an ISO string. */
|
|
20
|
+
export function stalledSummarisedRows(db, tenantId, summarisedBefore) {
|
|
21
|
+
return selectRows(db, `tenant_id = ? AND status = 'summarised' AND summarised_at < ?`, tenantId, summarisedBefore);
|
|
22
|
+
}
|
|
23
|
+
/** `started` rows with a transcript whose start lies between `startedAfter` and `startedBefore`, oldest first. */
|
|
24
|
+
export function openTranscriptRows(db, tenantId, startedBefore, startedAfter) {
|
|
25
|
+
return selectRows(db, `tenant_id = ? AND status = 'started' AND started_at < ? AND started_at > ? AND transcript_path IS NOT NULL ORDER BY started_at`, tenantId, startedBefore, startedAfter);
|
|
26
|
+
}
|
|
27
|
+
export function insertStartedCompaction(db, tenantId, start) {
|
|
28
|
+
db.prepare(`INSERT INTO compactions(tenant_id, id, session_id, origin_project, compact_trigger, cwd, transcript_path, started_at)
|
|
29
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?)`).run(tenantId, start.id, start.sessionId, start.originProject, start.trigger, start.cwd, start.transcriptPath, start.startedAt);
|
|
30
|
+
}
|
|
31
|
+
/** Moves a `started` row to `summarised`; false when another process already moved it. */
|
|
32
|
+
export function markCompactionSummarised(db, tenantId, id, update) {
|
|
33
|
+
const { summary, itemsJson, summarisedAt, requestId } = update;
|
|
34
|
+
// Only a caller names the column, so a store from before it was added still takes local writes.
|
|
35
|
+
const stamp = requestId === undefined ? [] : [requestId];
|
|
36
|
+
const result = db.prepare(`UPDATE compactions SET summary = ?, items_json = ?, summarised_at = ?, status = 'summarised'${stamp.length === 0 ? '' : ', request_id = ?'}
|
|
37
|
+
WHERE tenant_id = ? AND id = ? AND status = 'started'`).run(summary, itemsJson, summarisedAt, ...stamp, tenantId, id);
|
|
38
|
+
return (result.changes ?? 0) > 0;
|
|
39
|
+
}
|
|
40
|
+
export function insertSummarisedCompaction(db, tenantId, meta, row) {
|
|
41
|
+
const { id, summary, itemsJson, summarisedAt, requestId } = row;
|
|
42
|
+
// Only a caller names the column, so a store from before it was added still takes local writes.
|
|
43
|
+
const stamp = requestId === undefined ? [] : [requestId];
|
|
44
|
+
const [col, mark] = stamp.length === 0 ? ['', ''] : [', request_id', ', ?'];
|
|
45
|
+
db.prepare(`INSERT INTO compactions(tenant_id, id, session_id, origin_project, compact_trigger, cwd, transcript_path, started_at, summarised_at, summary, items_json, status${col})
|
|
46
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'summarised'${mark})`).run(tenantId, id, meta.sessionId, meta.originProject, meta.trigger, meta.cwd, meta.transcriptPath, meta.startedAt, summarisedAt, summary, itemsJson, ...stamp);
|
|
47
|
+
}
|
|
48
|
+
export function markSnapshotSavedRow(db, tenantId, recordId) {
|
|
49
|
+
db.prepare(`UPDATE compactions SET snapshot_saved = 1 WHERE tenant_id = ? AND id = ?`).run(tenantId, recordId);
|
|
50
|
+
}
|
|
51
|
+
export function compactionProgress(db, tenantId, id) {
|
|
52
|
+
return db.prepare(`SELECT status, items_written FROM compactions WHERE tenant_id = ? AND id = ?`)
|
|
53
|
+
.get(tenantId, id);
|
|
54
|
+
}
|
|
55
|
+
export function markCompactionDone(db, tenantId, id, itemsWritten) {
|
|
56
|
+
db.prepare(`UPDATE compactions SET items_written = ?, status = 'done' WHERE tenant_id = ? AND id = ?`).run(itemsWritten, tenantId, id);
|
|
57
|
+
}
|
|
58
|
+
/** Rows changed: 1 when the `started` row was closed, 0 when it had already moved. */
|
|
59
|
+
export function closeStartedWithoutSummary(db, tenantId, id) {
|
|
60
|
+
const result = db.prepare(`UPDATE compactions SET status = 'no-summary' WHERE tenant_id = ? AND id = ? AND status = 'started'`).run(tenantId, id);
|
|
61
|
+
return Number(result.changes ?? 0);
|
|
62
|
+
}
|
|
63
|
+
export function nextCompactionStart(db, tenantId, sessionId, after) {
|
|
64
|
+
const row = db.prepare(`SELECT MIN(started_at) AS at FROM compactions WHERE tenant_id = ? AND session_id = ? AND started_at > ?`)
|
|
65
|
+
.get(tenantId, sessionId, after);
|
|
66
|
+
return row?.at ?? null;
|
|
67
|
+
}
|
|
68
|
+
/** Live rows of one tenant and origin set that default recall shows. */
|
|
69
|
+
export function heldMemoryRows(db, tenantId, origins) {
|
|
70
|
+
const deny = scopeAdmitSql('');
|
|
71
|
+
// SAFETY: the SELECT names the id, source_session_id and content columns.
|
|
72
|
+
return db.prepare(`SELECT id, source_session_id, content FROM memories WHERE tenant_id = ? AND ${originInSql(origins)} AND superseded_by IS NULL AND kind != 'raw'
|
|
73
|
+
AND ${deny.sql}`).all(tenantId, ...origins, ...deny.params);
|
|
74
|
+
}
|
|
75
|
+
export function restampCompactionOrigin(db, tenantId, from, into) {
|
|
76
|
+
return Number(db.prepare(`UPDATE compactions SET origin_project = ? WHERE tenant_id = ? AND origin_project = ?`)
|
|
77
|
+
.run(into, tenantId, from).changes ?? 0);
|
|
78
|
+
}
|
|
79
|
+
export function compactionTranscripts(db, tenantId) {
|
|
80
|
+
// SAFETY: the SELECT names the two columns of the row type.
|
|
81
|
+
return db.prepare(`SELECT DISTINCT transcript_path AS transcript, cwd FROM compactions WHERE tenant_id = ? AND transcript_path IS NOT NULL`)
|
|
82
|
+
.all(tenantId);
|
|
83
|
+
}
|
|
84
|
+
export function compactionOriginsWithCwd(db, tenantId) {
|
|
85
|
+
// SAFETY: the SELECT names the two columns of the row type.
|
|
86
|
+
return db.prepare(`SELECT DISTINCT origin_project AS origin, cwd FROM compactions WHERE tenant_id = ? AND origin_project <> '' AND cwd IS NOT NULL`)
|
|
87
|
+
.all(tenantId);
|
|
88
|
+
}
|
|
89
|
+
/** True when `table` holds a row of this tenant under the project name. */
|
|
90
|
+
export function holdsOrigin(db, table, tenantId, name) {
|
|
91
|
+
return db.prepare(`SELECT 1 FROM ${table} WHERE tenant_id = ? AND origin_project = ? LIMIT 1`).get(tenantId, name) !== undefined;
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=compactions.js.map
|
|
@@ -1,6 +1,16 @@
|
|
|
1
|
-
import { type DatabaseSyncLike } from '../db.js';
|
|
1
|
+
import { type DatabaseSyncLike } from '../db/index.js';
|
|
2
|
+
import type { MemoryEntry } from '../core/memory.js';
|
|
2
3
|
import { type MemoryConflict } from './rows.js';
|
|
3
4
|
export declare function listMemoryConflicts(hippoRoot: string, status?: string, tenantId?: string): MemoryConflict[];
|
|
5
|
+
/** How many open conflicts listMemoryConflicts returns for a tenant, without loading one. */
|
|
6
|
+
export declare function countOpenConflicts(hippoRoot: string, tenantId: string): number;
|
|
7
|
+
/** One open conflict of a memory, with the row on its other side. */
|
|
8
|
+
export interface OpenConflictOf {
|
|
9
|
+
conflict: MemoryConflict;
|
|
10
|
+
other: MemoryEntry;
|
|
11
|
+
}
|
|
12
|
+
/** A tenant's open conflicts naming `memoryId`, in listMemoryConflicts' order, each with its other member read in one batch. */
|
|
13
|
+
export declare function loadOpenConflictsOf(hippoRoot: string, tenantId: string, memoryId: string): OpenConflictOf[];
|
|
4
14
|
/** Conflicts whose two rows `actor` may both touch; someone else's personal row hides its whole pair. */
|
|
5
15
|
export declare function listTouchableConflicts(hippoRoot: string, status: string, tenantId: string, actor: {
|
|
6
16
|
owner?: string;
|
|
@@ -18,10 +28,6 @@ export interface ConflictRefreshReads {
|
|
|
18
28
|
sameTenant: SameTenant;
|
|
19
29
|
storedRefs: ReadonlyMap<string, string | null>;
|
|
20
30
|
}
|
|
21
|
-
/** The refresh's read of the whole memories table, kept out of the write lock because it grows with the store. */
|
|
22
|
-
export declare function readConflictRefresh(db: DatabaseSyncLike): ConflictRefreshReads;
|
|
23
|
-
/** Under the write lock: the memory_conflicts rows, then each memory whose refs change; returns the ids it rewrote. */
|
|
24
|
-
export declare function writeConflictRefresh(db: DatabaseSyncLike, reads: ConflictRefreshReads, detected: readonly DetectedConflict[], detectedAt: string): string[];
|
|
25
31
|
/**
|
|
26
32
|
* AT1 (plan §5): additive-optional opts for resolveConflict.
|
|
27
33
|
* `rejectLoserValue` implies removal of the loser regardless of
|
|
@@ -55,5 +61,16 @@ export declare function resolveConflict(hippoRoot: string, conflictId: number, k
|
|
|
55
61
|
conflict: MemoryConflict;
|
|
56
62
|
loserId: string;
|
|
57
63
|
} | null;
|
|
64
|
+
/** The conflict and loser ids every conflict_resolve audit row names. */
|
|
65
|
+
export declare function conflictResolveAuditsAt(db: DatabaseSyncLike): Array<{
|
|
66
|
+
conflictId: number;
|
|
67
|
+
loserId: string;
|
|
68
|
+
}>;
|
|
69
|
+
/** Every resolved conflict with both sides. */
|
|
70
|
+
export declare function resolvedConflictsAt(db: DatabaseSyncLike): Array<{
|
|
71
|
+
id: number;
|
|
72
|
+
memory_a_id: string;
|
|
73
|
+
memory_b_id: string;
|
|
74
|
+
}>;
|
|
58
75
|
export {};
|
|
59
76
|
//# sourceMappingURL=conflicts.d.ts.map
|
package/dist/store/conflicts.js
CHANGED
|
@@ -1,20 +1,63 @@
|
|
|
1
|
-
import { closeHippoDb, openHippoDb } from '../db.js';
|
|
2
|
-
import { rejectionDigest, insertRejectedValue, normalizeValueForRejection } from '
|
|
3
|
-
import { archiveRawMemory } from '
|
|
1
|
+
import { closeHippoDb, openHippoDb, withWriteScope } from '../db/index.js';
|
|
2
|
+
import { rejectionDigest, insertRejectedValue, normalizeValueForRejection } from './rejection.js';
|
|
3
|
+
import { archiveRawMemory } from './raw-archive.js';
|
|
4
4
|
import { rowToMemoryConflict } from './rows.js';
|
|
5
5
|
import { audit } from './audit-event.js';
|
|
6
6
|
import { syncChangedMirrors, purgeMirrorBestEffort } from './mirrors.js';
|
|
7
7
|
import { selectEntriesByIds } from './entry-reads.js';
|
|
8
8
|
import { openStore } from './open.js';
|
|
9
9
|
import { deleteEntryCore } from './delete-and-batch.js';
|
|
10
|
-
import { BadRequestError } from '../api-errors.js';
|
|
11
|
-
import { canTouchScope, isPersonalScope } from '
|
|
10
|
+
import { BadRequestError } from '../core/api-errors.js';
|
|
11
|
+
import { canTouchScope, isPersonalScope } from './recall-scope.js';
|
|
12
12
|
import { selectMemoryReach } from './tenant-lookup.js';
|
|
13
13
|
function canonicalConflictPair(aId, bId) {
|
|
14
14
|
return aId < bId
|
|
15
15
|
? { memory_a_id: aId, memory_b_id: bId }
|
|
16
16
|
: { memory_a_id: bId, memory_b_id: aId };
|
|
17
17
|
}
|
|
18
|
+
function selectConflictRowsInTenant(db, status, allStatuses, tenantId) {
|
|
19
|
+
// Tenanted query — JOIN to memories on both conflict members and require
|
|
20
|
+
// each in-tenant, so neither a normal cross-tenant pair nor a stale
|
|
21
|
+
// pre-fix row surfaces (consistent with resolveConflict).
|
|
22
|
+
// SAFETY: both branches select the same eight mc.* columns (aliased
|
|
23
|
+
// to MemoryConflictRow's field names) from memory_conflicts.
|
|
24
|
+
return allStatuses
|
|
25
|
+
? db.prepare(`
|
|
26
|
+
SELECT mc.id, mc.memory_a_id, mc.memory_b_id, mc.reason, mc.score,
|
|
27
|
+
mc.status, mc.detected_at, mc.updated_at
|
|
28
|
+
FROM memory_conflicts mc
|
|
29
|
+
JOIN memories ma ON ma.id = mc.memory_a_id
|
|
30
|
+
JOIN memories mb ON mb.id = mc.memory_b_id
|
|
31
|
+
WHERE ma.tenant_id = ? AND mb.tenant_id = ?
|
|
32
|
+
ORDER BY mc.updated_at DESC, mc.id DESC
|
|
33
|
+
`).all(tenantId, tenantId)
|
|
34
|
+
: db.prepare(`
|
|
35
|
+
SELECT mc.id, mc.memory_a_id, mc.memory_b_id, mc.reason, mc.score,
|
|
36
|
+
mc.status, mc.detected_at, mc.updated_at
|
|
37
|
+
FROM memory_conflicts mc
|
|
38
|
+
JOIN memories ma ON ma.id = mc.memory_a_id
|
|
39
|
+
JOIN memories mb ON mb.id = mc.memory_b_id
|
|
40
|
+
WHERE mc.status = ? AND ma.tenant_id = ? AND mb.tenant_id = ?
|
|
41
|
+
ORDER BY mc.updated_at DESC, mc.id DESC
|
|
42
|
+
`).all(status, tenantId, tenantId);
|
|
43
|
+
}
|
|
44
|
+
function selectConflictRowsUnscoped(db, status, allStatuses) {
|
|
45
|
+
// Unscoped query — legacy direct-mode (CLI, tests, consolidate).
|
|
46
|
+
// SAFETY: both branches select the same eight columns matching
|
|
47
|
+
// MemoryConflictRow's field set.
|
|
48
|
+
return allStatuses
|
|
49
|
+
? db.prepare(`
|
|
50
|
+
SELECT id, memory_a_id, memory_b_id, reason, score, status, detected_at, updated_at
|
|
51
|
+
FROM memory_conflicts
|
|
52
|
+
ORDER BY updated_at DESC, id DESC
|
|
53
|
+
`).all()
|
|
54
|
+
: db.prepare(`
|
|
55
|
+
SELECT id, memory_a_id, memory_b_id, reason, score, status, detected_at, updated_at
|
|
56
|
+
FROM memory_conflicts
|
|
57
|
+
WHERE status = ?
|
|
58
|
+
ORDER BY updated_at DESC, id DESC
|
|
59
|
+
`).all(status);
|
|
60
|
+
}
|
|
18
61
|
export function listMemoryConflicts(hippoRoot, status = 'open', tenantId) {
|
|
19
62
|
const db = openStore(hippoRoot);
|
|
20
63
|
try {
|
|
@@ -23,56 +66,55 @@ export function listMemoryConflicts(hippoRoot, status = 'open', tenantId) {
|
|
|
23
66
|
// so this sentinel is purely additive. The 4 SQL branches below cover
|
|
24
67
|
// {tenanted | unscoped} × {all-statuses | specific-status}.
|
|
25
68
|
const allStatuses = status === '*';
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
// each in-tenant, so neither a normal cross-tenant pair nor a stale
|
|
30
|
-
// pre-fix row surfaces (consistent with resolveConflict).
|
|
31
|
-
// SAFETY: both branches select the same eight mc.* columns (aliased
|
|
32
|
-
// to MemoryConflictRow's field names) from memory_conflicts.
|
|
33
|
-
rows = allStatuses
|
|
34
|
-
? db.prepare(`
|
|
35
|
-
SELECT mc.id, mc.memory_a_id, mc.memory_b_id, mc.reason, mc.score,
|
|
36
|
-
mc.status, mc.detected_at, mc.updated_at
|
|
37
|
-
FROM memory_conflicts mc
|
|
38
|
-
JOIN memories ma ON ma.id = mc.memory_a_id
|
|
39
|
-
JOIN memories mb ON mb.id = mc.memory_b_id
|
|
40
|
-
WHERE ma.tenant_id = ? AND mb.tenant_id = ?
|
|
41
|
-
ORDER BY mc.updated_at DESC, mc.id DESC
|
|
42
|
-
`).all(tenantId, tenantId)
|
|
43
|
-
: db.prepare(`
|
|
44
|
-
SELECT mc.id, mc.memory_a_id, mc.memory_b_id, mc.reason, mc.score,
|
|
45
|
-
mc.status, mc.detected_at, mc.updated_at
|
|
46
|
-
FROM memory_conflicts mc
|
|
47
|
-
JOIN memories ma ON ma.id = mc.memory_a_id
|
|
48
|
-
JOIN memories mb ON mb.id = mc.memory_b_id
|
|
49
|
-
WHERE mc.status = ? AND ma.tenant_id = ? AND mb.tenant_id = ?
|
|
50
|
-
ORDER BY mc.updated_at DESC, mc.id DESC
|
|
51
|
-
`).all(status, tenantId, tenantId);
|
|
52
|
-
}
|
|
53
|
-
else {
|
|
54
|
-
// Unscoped query — legacy direct-mode (CLI, tests, consolidate).
|
|
55
|
-
// SAFETY: both branches select the same eight columns matching
|
|
56
|
-
// MemoryConflictRow's field set.
|
|
57
|
-
rows = allStatuses
|
|
58
|
-
? db.prepare(`
|
|
59
|
-
SELECT id, memory_a_id, memory_b_id, reason, score, status, detected_at, updated_at
|
|
60
|
-
FROM memory_conflicts
|
|
61
|
-
ORDER BY updated_at DESC, id DESC
|
|
62
|
-
`).all()
|
|
63
|
-
: db.prepare(`
|
|
64
|
-
SELECT id, memory_a_id, memory_b_id, reason, score, status, detected_at, updated_at
|
|
65
|
-
FROM memory_conflicts
|
|
66
|
-
WHERE status = ?
|
|
67
|
-
ORDER BY updated_at DESC, id DESC
|
|
68
|
-
`).all(status);
|
|
69
|
-
}
|
|
69
|
+
const rows = tenantId !== undefined
|
|
70
|
+
? selectConflictRowsInTenant(db, status, allStatuses, tenantId)
|
|
71
|
+
: selectConflictRowsUnscoped(db, status, allStatuses);
|
|
70
72
|
return rows.map(rowToMemoryConflict);
|
|
71
73
|
}
|
|
72
74
|
finally {
|
|
73
75
|
closeHippoDb(db);
|
|
74
76
|
}
|
|
75
77
|
}
|
|
78
|
+
// listMemoryConflicts' tenanted open set: both members in the tenant.
|
|
79
|
+
const OPEN_IN_TENANT = `FROM memory_conflicts mc
|
|
80
|
+
JOIN memories ma ON ma.id = mc.memory_a_id
|
|
81
|
+
JOIN memories mb ON mb.id = mc.memory_b_id
|
|
82
|
+
WHERE mc.status = 'open' AND ma.tenant_id = ? AND mb.tenant_id = ?`;
|
|
83
|
+
/** How many open conflicts listMemoryConflicts returns for a tenant, without loading one. */
|
|
84
|
+
export function countOpenConflicts(hippoRoot, tenantId) {
|
|
85
|
+
const db = openStore(hippoRoot);
|
|
86
|
+
try {
|
|
87
|
+
// SAFETY: one row with the single aliased count column.
|
|
88
|
+
const row = db.prepare(`SELECT COUNT(*) AS n ${OPEN_IN_TENANT}`).get(tenantId, tenantId);
|
|
89
|
+
return Number(row.n);
|
|
90
|
+
}
|
|
91
|
+
finally {
|
|
92
|
+
closeHippoDb(db);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/** A tenant's open conflicts naming `memoryId`, in listMemoryConflicts' order, each with its other member read in one batch. */
|
|
96
|
+
export function loadOpenConflictsOf(hippoRoot, tenantId, memoryId) {
|
|
97
|
+
const db = openStore(hippoRoot);
|
|
98
|
+
try {
|
|
99
|
+
// SAFETY: selects the eight mc.* columns of MemoryConflictRow.
|
|
100
|
+
const rows = db.prepare(`SELECT mc.id, mc.memory_a_id, mc.memory_b_id, mc.reason, mc.score, mc.status, mc.detected_at, mc.updated_at
|
|
101
|
+
${OPEN_IN_TENANT} AND (mc.memory_a_id = ? OR mc.memory_b_id = ?)
|
|
102
|
+
ORDER BY mc.updated_at DESC, mc.id DESC`).all(tenantId, tenantId, memoryId, memoryId);
|
|
103
|
+
const conflicts = rows.map(rowToMemoryConflict);
|
|
104
|
+
const otherId = (c) => (c.memory_a_id === memoryId ? c.memory_b_id : c.memory_a_id);
|
|
105
|
+
const others = selectEntriesByIds(db, conflicts.map(otherId), tenantId);
|
|
106
|
+
const out = [];
|
|
107
|
+
for (const conflict of conflicts) {
|
|
108
|
+
const other = others.get(otherId(conflict));
|
|
109
|
+
if (other)
|
|
110
|
+
out.push({ conflict, other });
|
|
111
|
+
}
|
|
112
|
+
return out;
|
|
113
|
+
}
|
|
114
|
+
finally {
|
|
115
|
+
closeHippoDb(db);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
76
118
|
/** Conflicts whose two rows `actor` may both touch; someone else's personal row hides its whole pair. */
|
|
77
119
|
export function listTouchableConflicts(hippoRoot, status, tenantId, actor) {
|
|
78
120
|
const conflicts = listMemoryConflicts(hippoRoot, status, tenantId);
|
|
@@ -95,7 +137,7 @@ export function replaceDetectedConflicts(hippoRoot, detected, detectedAt = new D
|
|
|
95
137
|
}
|
|
96
138
|
}
|
|
97
139
|
/** The refresh's read of the whole memories table, kept out of the write lock because it grows with the store. */
|
|
98
|
-
|
|
140
|
+
function readConflictRefresh(db) {
|
|
99
141
|
// Tenant guard (E2): a conflict is meaningful only within one tenant, so cross-tenant pairs are
|
|
100
142
|
// skipped on insert and on rebuild, and a stale cross-tenant row can neither persist nor leak a foreign id.
|
|
101
143
|
const tenantById = new Map();
|
|
@@ -114,25 +156,17 @@ export function readConflictRefresh(db) {
|
|
|
114
156
|
return { sameTenant, storedRefs };
|
|
115
157
|
}
|
|
116
158
|
/** Under the write lock: the memory_conflicts rows, then each memory whose refs change; returns the ids it rewrote. */
|
|
117
|
-
|
|
159
|
+
function writeConflictRefresh(db, reads, detected, detectedAt) {
|
|
118
160
|
const canonicalDetected = detected.map((conflict) => ({
|
|
119
161
|
...canonicalConflictPair(conflict.memory_a_id, conflict.memory_b_id),
|
|
120
162
|
reason: conflict.reason,
|
|
121
163
|
score: conflict.score,
|
|
122
164
|
}));
|
|
123
|
-
db
|
|
124
|
-
try {
|
|
165
|
+
return withWriteScope(db, 'replace_conflicts', () => {
|
|
125
166
|
resolveStaleOpenConflicts(db, canonicalDetected, reads.sameTenant, detectedAt);
|
|
126
167
|
upsertDetectedConflicts(db, canonicalDetected, reads.sameTenant, detectedAt);
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
return changedIds;
|
|
130
|
-
}
|
|
131
|
-
catch (error) {
|
|
132
|
-
if (db.isTransaction !== false)
|
|
133
|
-
db.exec('ROLLBACK');
|
|
134
|
-
throw error;
|
|
135
|
-
}
|
|
168
|
+
return rebuildConflictsWithJson(db, reads);
|
|
169
|
+
});
|
|
136
170
|
}
|
|
137
171
|
function resolveStaleOpenConflicts(db, canonicalDetected, sameTenant, detectedAt) {
|
|
138
172
|
const detectedKeys = new Set(canonicalDetected.map((conflict) => `${conflict.memory_a_id}::${conflict.memory_b_id}`));
|
|
@@ -208,6 +242,32 @@ function rebuildConflictsWithJson(db, { sameTenant, storedRefs }) {
|
|
|
208
242
|
}
|
|
209
243
|
return changedIds;
|
|
210
244
|
}
|
|
245
|
+
// When tenantId is set, the conflict lookup requires BOTH members in-tenant
|
|
246
|
+
// and every memories mutation carries AND tenant_id = ?. A cross-tenant probe
|
|
247
|
+
// then returns null, indistinguishable from a bad id. Omitted tenantId =
|
|
248
|
+
// legacy unscoped behaviour (CLI direct mode, tests, consolidate.ts).
|
|
249
|
+
function conflictMemScope(tenantId) {
|
|
250
|
+
return {
|
|
251
|
+
memScope: tenantId !== undefined ? ' AND tenant_id = ?' : '',
|
|
252
|
+
memArgs: tenantId !== undefined ? [tenantId] : [],
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
function findResolvableConflict(db, conflictId, keepId, tenantId) {
|
|
256
|
+
const row = selectConflictRow(db, conflictId, tenantId);
|
|
257
|
+
if (!row)
|
|
258
|
+
return null;
|
|
259
|
+
const conflict = rowToMemoryConflict(row);
|
|
260
|
+
if (conflict.status !== 'open')
|
|
261
|
+
return null;
|
|
262
|
+
const loserId = keepId === conflict.memory_a_id
|
|
263
|
+
? conflict.memory_b_id
|
|
264
|
+
: keepId === conflict.memory_b_id
|
|
265
|
+
? conflict.memory_a_id
|
|
266
|
+
: null;
|
|
267
|
+
if (!loserId)
|
|
268
|
+
return null;
|
|
269
|
+
return { conflict, loserId };
|
|
270
|
+
}
|
|
211
271
|
/**
|
|
212
272
|
* Resolve a conflict by keeping one memory and weakening the other.
|
|
213
273
|
* Sets conflict status to 'resolved' and halves the loser's half-life.
|
|
@@ -225,50 +285,28 @@ function rebuildConflictsWithJson(db, { sameTenant, storedRefs }) {
|
|
|
225
285
|
*/
|
|
226
286
|
export function resolveConflict(hippoRoot, conflictId, keepId, forgetLoser = false, tenantId, opts) {
|
|
227
287
|
const db = openStore(hippoRoot);
|
|
228
|
-
|
|
229
|
-
// and every memories mutation carries AND tenant_id = ?. A cross-tenant probe
|
|
230
|
-
// then returns null, indistinguishable from a bad id. Omitted tenantId =
|
|
231
|
-
// legacy unscoped behaviour (CLI direct mode, tests, consolidate.ts).
|
|
232
|
-
const scope = {
|
|
233
|
-
memScope: tenantId !== undefined ? ' AND tenant_id = ?' : '',
|
|
234
|
-
memArgs: tenantId !== undefined ? [tenantId] : [],
|
|
235
|
-
};
|
|
288
|
+
const scope = conflictMemScope(tenantId);
|
|
236
289
|
try {
|
|
237
|
-
const
|
|
238
|
-
if (!
|
|
239
|
-
return null;
|
|
240
|
-
const conflict = rowToMemoryConflict(row);
|
|
241
|
-
if (conflict.status !== 'open')
|
|
290
|
+
const resolvable = findResolvableConflict(db, conflictId, keepId, tenantId);
|
|
291
|
+
if (!resolvable)
|
|
242
292
|
return null;
|
|
243
|
-
const loserId =
|
|
244
|
-
? conflict.memory_b_id
|
|
245
|
-
: keepId === conflict.memory_b_id
|
|
246
|
-
? conflict.memory_a_id
|
|
247
|
-
: null;
|
|
248
|
-
if (!loserId)
|
|
249
|
-
return null;
|
|
250
|
-
db.exec('BEGIN IMMEDIATE');
|
|
251
|
-
// Mark conflict as resolved
|
|
252
|
-
db.prepare(`UPDATE memory_conflicts SET status = 'resolved', updated_at = datetime('now') WHERE id = ?`)
|
|
253
|
-
.run(conflictId);
|
|
293
|
+
const { conflict, loserId } = resolvable;
|
|
254
294
|
const target = { conflictId, keepId, loserId, scope, opts };
|
|
255
|
-
const
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
295
|
+
const removal = withWriteScope(db, 'resolve_conflict', () => {
|
|
296
|
+
// Mark conflict as resolved
|
|
297
|
+
db.prepare(`UPDATE memory_conflicts SET status = 'resolved', updated_at = datetime('now') WHERE id = ?`)
|
|
298
|
+
.run(conflictId);
|
|
299
|
+
const removeLoser = forgetLoser || opts?.rejectLoserValue === true;
|
|
300
|
+
const out = removeLoser ? removeConflictLoser(db, target) : weakenConflictLoser(db, target);
|
|
301
|
+
stripConflictRefs(db, target, out.loserRemoved);
|
|
302
|
+
auditConflictResolve(db, target, out, tenantId);
|
|
303
|
+
return out;
|
|
304
|
+
});
|
|
260
305
|
syncChangedMirrors(hippoRoot, db, [...selectEntriesByIds(db, [keepId, loserId]).values()]);
|
|
261
306
|
if (removal.loserRemoved)
|
|
262
307
|
purgeRemovedLoserMirrors(hippoRoot, db, loserId, removal);
|
|
263
308
|
return { conflict: { ...conflict, status: 'resolved' }, loserId };
|
|
264
309
|
}
|
|
265
|
-
catch (error) {
|
|
266
|
-
try {
|
|
267
|
-
db.exec('ROLLBACK');
|
|
268
|
-
}
|
|
269
|
-
catch { /* ignore */ }
|
|
270
|
-
throw error;
|
|
271
|
-
}
|
|
272
310
|
finally {
|
|
273
311
|
closeHippoDb(db);
|
|
274
312
|
}
|
|
@@ -340,6 +378,17 @@ function removeConflictLoser(db, t) {
|
|
|
340
378
|
// the old tenant-scoped DELETE's silent 0-rows-affected behavior.
|
|
341
379
|
return removal;
|
|
342
380
|
}
|
|
381
|
+
function recordRejectedLoserValue(db, t, loserRow, digest, who) {
|
|
382
|
+
insertRejectedValue(db, {
|
|
383
|
+
tenantId: loserRow.tenant_id ?? 'default',
|
|
384
|
+
digest,
|
|
385
|
+
reason: who.reason,
|
|
386
|
+
rejectedBy: who.actor,
|
|
387
|
+
rejectedAt: new Date().toISOString(),
|
|
388
|
+
sourceMemoryId: t.loserId,
|
|
389
|
+
normalizedChars: normalizeValueForRejection(loserRow.content).length,
|
|
390
|
+
});
|
|
391
|
+
}
|
|
343
392
|
/** Tombstones the loser's digest and removes its same-tenant duplicates into `removal`; returns the digest. */
|
|
344
393
|
function tombstoneLoserValue(db, t, loserRow, who, removal) {
|
|
345
394
|
if (isPersonalScope(loserRow.scope)) {
|
|
@@ -347,15 +396,7 @@ function tombstoneLoserValue(db, t, loserRow, who, removal) {
|
|
|
347
396
|
}
|
|
348
397
|
const { actor, reason } = who;
|
|
349
398
|
const rejectedDigest = rejectionDigest(loserRow.content);
|
|
350
|
-
|
|
351
|
-
tenantId: loserRow.tenant_id ?? 'default',
|
|
352
|
-
digest: rejectedDigest,
|
|
353
|
-
reason,
|
|
354
|
-
rejectedBy: actor,
|
|
355
|
-
rejectedAt: new Date().toISOString(),
|
|
356
|
-
sourceMemoryId: t.loserId,
|
|
357
|
-
normalizedChars: normalizeValueForRejection(loserRow.content).length,
|
|
358
|
-
});
|
|
399
|
+
recordRejectedLoserValue(db, t, loserRow, rejectedDigest, who);
|
|
359
400
|
// AT1 P1 fix (codex): reject-flow.ts's `rejectValue` removes ALL
|
|
360
401
|
// live same-tenant rows whose normalized digest matches, not just
|
|
361
402
|
// the one id passed — but this branch only ever removed loserId,
|
|
@@ -439,7 +480,7 @@ function auditConflictResolve(db, t, removal, tenantId) {
|
|
|
439
480
|
// index signature) and isn't directly assignable to audit()'s
|
|
440
481
|
// Record<string, JsonValue> metadata param; a spread into a fresh
|
|
441
482
|
// object literal satisfies it without widening the declared type above.
|
|
442
|
-
audit(db, 'conflict_resolve', t.keepId, { ...conflictResolveMeta }, t.opts?.rejectedBy ?? 'cli', tenantId);
|
|
483
|
+
audit(db, 'conflict_resolve', { targetId: t.keepId, metadata: { ...conflictResolveMeta }, actor: t.opts?.rejectedBy ?? 'cli', tenantId });
|
|
443
484
|
}
|
|
444
485
|
function purgeRemovedLoserMirrors(hippoRoot, db, loserId, removal) {
|
|
445
486
|
// AT1 P1b fix: mirror purge + reaper stamp for EVERY removed loser, not
|
|
@@ -454,7 +495,7 @@ function purgeRemovedLoserMirrors(hippoRoot, db, loserId, removal) {
|
|
|
454
495
|
// eventually, since archiveRawMemory's own raw_archive insert leaves
|
|
455
496
|
// mirror_cleaned_at NULL) and a plain non-raw --forget left its mirror
|
|
456
497
|
// orphaned FOREVER (no reaper exists for non-raw rows). Same post-commit
|
|
457
|
-
// purge+reaper pattern as the reject verb (src/reject-flow.ts) and
|
|
498
|
+
// purge+reaper pattern as the reject verb (src/trust/reject-flow.ts) and
|
|
458
499
|
// api.archiveRaw — reusing removeEntryMirrors + raw_archive bookkeeping.
|
|
459
500
|
// AT1 P1 fix: loop over loserId AND every same-tenant duplicate the
|
|
460
501
|
// rejectLoserValue sweep above removed (extraRemovedIds) — previously
|
|
@@ -473,4 +514,14 @@ function purgeRemovedLoserMirrors(hippoRoot, db, loserId, removal) {
|
|
|
473
514
|
}
|
|
474
515
|
}
|
|
475
516
|
}
|
|
517
|
+
/** The conflict and loser ids every conflict_resolve audit row names. */
|
|
518
|
+
export function conflictResolveAuditsAt(db) {
|
|
519
|
+
// SAFETY: SELECT of two fields every conflict_resolve audit row carries (ConflictResolveMeta in store.ts).
|
|
520
|
+
return db.prepare(`SELECT json_extract(metadata_json, '$.conflictId') AS conflictId, json_extract(metadata_json, '$.loserId') AS loserId FROM audit_log WHERE op = 'conflict_resolve'`).all();
|
|
521
|
+
}
|
|
522
|
+
/** Every resolved conflict with both sides. */
|
|
523
|
+
export function resolvedConflictsAt(db) {
|
|
524
|
+
// SAFETY: SELECT of three columns of resolved conflicts.
|
|
525
|
+
return db.prepare(`SELECT id, memory_a_id, memory_b_id FROM memory_conflicts WHERE status = 'resolved'`).all();
|
|
526
|
+
}
|
|
476
527
|
//# sourceMappingURL=conflicts.js.map
|