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
|
@@ -1,20 +1,19 @@
|
|
|
1
|
-
import fs from 'node:fs';
|
|
2
|
-
import path from 'node:path';
|
|
3
1
|
import { appendAuditEvent } from './audit.js';
|
|
4
|
-
import { withBackup } from '
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { getMeta, setMeta } from '
|
|
8
|
-
import { tableColumns } from '
|
|
9
|
-
import { assertBinaryCompatible } from '
|
|
2
|
+
import { withBackup } from '../db/backup.js';
|
|
3
|
+
import { withTrialScope, withWriteScope } from '../db/busy.js';
|
|
4
|
+
import { withUnmigratedDb } from '../db/open.js';
|
|
5
|
+
import { getMeta, pragmaUserVersion, setMeta } from '../db/meta.js';
|
|
6
|
+
import { tableColumns } from '../db/tables.js';
|
|
7
|
+
import { assertBinaryCompatible } from '../db/migrate.js';
|
|
10
8
|
import { insertDormantRow, listDormantSnapshots } from './dormant.js';
|
|
11
|
-
import { calculateStrength, canAutoDelete } from '
|
|
12
|
-
import { assessAutomaticMemory, BUNDLE_HEADER, isAutomaticEntry, isCertainReason } from '
|
|
13
|
-
import { heldTexts } from '
|
|
14
|
-
import { deleteEntryCore, MEMORY_BACKED_TABLES, memoriesBackingObjectsOn } from './
|
|
15
|
-
import { selectAllEntries } from './
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
9
|
+
import { calculateStrength, canAutoDelete } from '../core/memory.js';
|
|
10
|
+
import { assessAutomaticMemory, BUNDLE_HEADER, isAutomaticEntry, isCertainReason } from '../core/memory-quality.js';
|
|
11
|
+
import { heldTexts } from '../util/same-text.js';
|
|
12
|
+
import { deleteEntryCore, MEMORY_BACKED_TABLES, memoriesBackingObjectsOn } from './delete-and-batch.js';
|
|
13
|
+
import { selectAllEntries, selectPreviewRows } from './entry-reads.js';
|
|
14
|
+
import { ftsRowExists } from './entry-row.js';
|
|
15
|
+
import { MEMORY_SELECT_COLUMNS, parseJsonArray } from './rows.js';
|
|
16
|
+
import { purgeMirrorBestEffort } from './mirrors.js';
|
|
18
17
|
const REQUIRED_COLUMNS = {
|
|
19
18
|
memories: MEMORY_SELECT_COLUMNS.split(',').map((s) => s.trim()),
|
|
20
19
|
meta: ['key', 'value'],
|
|
@@ -104,13 +103,10 @@ function unsupportedPreview(db, tenantId) {
|
|
|
104
103
|
const columns = tableColumns(db, 'memories');
|
|
105
104
|
if (!columns.has('id') || !columns.has('content'))
|
|
106
105
|
return { total: 0, issues: [] };
|
|
107
|
-
const
|
|
108
|
-
const column = (name, fallback) => (columns.has(name) ? name : `${fallback} AS ${name}`);
|
|
109
|
-
const statement = db.prepare(`SELECT id, content, ${column('source', "''")}, ${column('confidence', 'NULL')}, ${column('extracted_from', 'NULL')}, ${column('dag_level', '0')}, ${column('tags_json', "'[]'")} FROM memories${tenant}`);
|
|
110
|
-
// SAFETY: the SELECT names every Row field, each a literal fallback when its column is missing.
|
|
111
|
-
const rows = (tenant ? statement.all(tenantId) : statement.all());
|
|
106
|
+
const rows = selectPreviewRows(db, columns, tenantId);
|
|
112
107
|
const issues = rows.flatMap((row) => {
|
|
113
|
-
const
|
|
108
|
+
const tags = parseJsonArray(row.tags_json, { table: 'memories', id: row.id, column: 'tags_json' });
|
|
109
|
+
const provenance = { ...row, source: row.source ?? '', confidence: row.confidence ?? 'observed', dag_level: row.dag_level ?? 0, tags };
|
|
114
110
|
if (!isAutomaticEntry(provenance))
|
|
115
111
|
return [];
|
|
116
112
|
const { reason } = assessAutomaticMemory(row.content);
|
|
@@ -120,8 +116,7 @@ function unsupportedPreview(db, tenantId) {
|
|
|
120
116
|
}
|
|
121
117
|
function initialResult(db, root, tenantId) {
|
|
122
118
|
const blockers = capabilityBlockers(db);
|
|
123
|
-
|
|
124
|
-
const schema = db.prepare('PRAGMA user_version').get().user_version;
|
|
119
|
+
const schema = pragmaUserVersion(db);
|
|
125
120
|
const plan = blockers.length > 0 ? unsupportedPreview(db, tenantId) : planRows(db, tenantId);
|
|
126
121
|
return {
|
|
127
122
|
root, schema, supported: blockers.length === 0, blockers,
|
|
@@ -135,15 +130,14 @@ function setAsideIssue(db, entry, reason, now, backup) {
|
|
|
135
130
|
if (deleteEntryCore(db, entry.id, { actor, automatic: true, suppressForgetAudit: true }) === null)
|
|
136
131
|
return false;
|
|
137
132
|
insertDormantRow(db, { entry, strength: calculateStrength(entry, now), reason: 'quality-repair', dormantAt: now.toISOString() });
|
|
138
|
-
if (getMeta(db, 'fts5_available', '0') === '1' && db
|
|
133
|
+
if (getMeta(db, 'fts5_available', '0') === '1' && ftsRowExists(db, entry.id)) {
|
|
139
134
|
throw new Error(`Quality repair could not remove the full-text row for ${entry.id}`);
|
|
140
135
|
}
|
|
141
136
|
appendAuditEvent(db, { tenantId: entry.tenantId, actor, op: 'quality_repair', targetId: entry.id, metadata: { reason, backup } });
|
|
142
137
|
return true;
|
|
143
138
|
}
|
|
144
139
|
function applyPlan(db, root, tenantId, backup, doneKey) {
|
|
145
|
-
db
|
|
146
|
-
try {
|
|
140
|
+
return withWriteScope(db, 'quality_repair_apply', () => {
|
|
147
141
|
const result = initialResult(db, root, tenantId);
|
|
148
142
|
if (!result.supported)
|
|
149
143
|
throw new Error(`Quality repair capability changed: ${result.blockers.join('; ')}`);
|
|
@@ -161,55 +155,31 @@ function applyPlan(db, root, tenantId, backup, doneKey) {
|
|
|
161
155
|
}
|
|
162
156
|
if (doneKey)
|
|
163
157
|
setMeta(db, doneKey, '1');
|
|
164
|
-
db.exec('COMMIT');
|
|
165
158
|
return { ...result, appliedIds, backup, warnings };
|
|
166
|
-
}
|
|
167
|
-
catch (error) {
|
|
168
|
-
try {
|
|
169
|
-
db.exec('ROLLBACK');
|
|
170
|
-
}
|
|
171
|
-
catch { /* preserve the mutation error */ }
|
|
172
|
-
throw error;
|
|
173
|
-
}
|
|
159
|
+
});
|
|
174
160
|
}
|
|
175
161
|
function repairOn(db, root, opts) {
|
|
176
|
-
db
|
|
177
|
-
const initial = initialResult(db, root, opts.tenantId);
|
|
178
|
-
db.exec('ROLLBACK');
|
|
162
|
+
const initial = withTrialScope(db, 'quality_repair_plan', () => initialResult(db, root, opts.tenantId));
|
|
179
163
|
if (!opts.apply || !initial.supported || !initial.issues.some((issue) => issue.disposition === 'set-aside'))
|
|
180
164
|
return initial;
|
|
181
165
|
db.exec('PRAGMA foreign_keys = ON');
|
|
182
166
|
const result = withBackup(db, root, 'before-quality-repair', (backup) => applyPlan(db, root, opts.tenantId, backup, opts.doneKey));
|
|
183
167
|
const warnings = [...result.warnings];
|
|
184
168
|
for (const id of result.appliedIds) {
|
|
185
|
-
if (
|
|
186
|
-
|
|
169
|
+
if (purgeMirrorBestEffort(root, id, false, 'quality repair'))
|
|
170
|
+
continue;
|
|
171
|
+
warnings.push(`Mirror cleanup failed for ${id}; remove its stale mirror before rebuilding the index.`);
|
|
187
172
|
}
|
|
188
173
|
return { ...result, warnings };
|
|
189
174
|
}
|
|
190
|
-
function openForRepair(root, readOnly, fn) {
|
|
191
|
-
// Opens without openHippoDb to skip migrations, so it takes the same refusal itself.
|
|
192
|
-
assertSqliteAllowed(root);
|
|
193
|
-
const file = path.join(root, 'hippo.db');
|
|
194
|
-
if (!fs.existsSync(file))
|
|
195
|
-
throw new Error(`No existing Hippo database at ${file}`);
|
|
196
|
-
const db = new DatabaseSync(file, { readOnly });
|
|
197
|
-
try {
|
|
198
|
-
db.exec('PRAGMA busy_timeout = 5000');
|
|
199
|
-
return fn(db);
|
|
200
|
-
}
|
|
201
|
-
finally {
|
|
202
|
-
db.close();
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
175
|
/** Preview by default; apply backs the database up, then moves certain defects to dormant storage, without running migrations. */
|
|
206
176
|
export function repairAutomaticMemories(root, opts) {
|
|
207
|
-
return
|
|
177
|
+
return withUnmigratedDb(root, !opts.apply, (db) => repairOn(db, root, opts));
|
|
208
178
|
}
|
|
209
179
|
const AUTO_REPAIR_META_KEY = 'quality_repair_auto';
|
|
210
180
|
/** Applies the repair once per store, so stores that predate the quality gate are cleaned on upgrade with no command; null once done. */
|
|
211
181
|
export function repairQualityOnce(root, tenantId) {
|
|
212
|
-
return
|
|
182
|
+
return withUnmigratedDb(root, false, (db) => {
|
|
213
183
|
if (getMeta(db, AUTO_REPAIR_META_KEY) === '1')
|
|
214
184
|
return null;
|
|
215
185
|
// The apply commits the flag with the moves, so a lock taken between them cannot hide what moved.
|
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
import type {
|
|
3
|
-
import { type KeysetPosition } from './keyset.js';
|
|
1
|
+
import { type DatabaseSyncLike } from '../db/index.js';
|
|
2
|
+
import type { QuarantineApproval, QuarantineListQuery, QuarantineRejection, QuarantinedMemory } from './port.js';
|
|
4
3
|
export declare const QUARANTINE_SCOPE_PREFIX = "quarantine:private:";
|
|
5
4
|
/** Scope a quarantined memory is stored under; matches PRIVATE_SCOPE_RE so every default-deny site hides it. */
|
|
6
5
|
export declare function quarantineScopeFor(original: string | null): string;
|
|
7
|
-
export declare function isQuarantineScope(scope: string | null | undefined): boolean;
|
|
8
6
|
export type QuarantineStatus = 'pending' | 'approved' | 'rejected';
|
|
9
7
|
export interface QuarantineRow {
|
|
10
8
|
tenantId: string;
|
|
@@ -25,8 +23,10 @@ export interface RecordQuarantineOpts {
|
|
|
25
23
|
}
|
|
26
24
|
/** Insert the quarantine row + its audit event; caller runs this inside the memory's own write transaction. */
|
|
27
25
|
export declare function recordQuarantine(db: DatabaseSyncLike, opts: RecordQuarantineOpts): void;
|
|
28
|
-
|
|
29
|
-
export declare function
|
|
30
|
-
|
|
31
|
-
export declare function
|
|
26
|
+
/** A page of the tenant's records, each with its memory's content read in the same query batch. */
|
|
27
|
+
export declare function listQuarantinedAt(db: DatabaseSyncLike, tenantId: string, { status, limit, after }: QuarantineListQuery): QuarantinedMemory[];
|
|
28
|
+
/** Puts the memory back under its original scope; the scope guard refuses a row moved since it was quarantined. */
|
|
29
|
+
export declare function approveQuarantinedAt(db: DatabaseSyncLike, tenantId: string, id: string, actor: string): QuarantineApproval;
|
|
30
|
+
/** Marks the record rejected; the memory row is left as stored. */
|
|
31
|
+
export declare function rejectQuarantinedAt(db: DatabaseSyncLike, tenantId: string, id: string, actor: string): QuarantineRejection;
|
|
32
32
|
//# sourceMappingURL=quarantine.d.ts.map
|
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
|
|
1
|
+
// The memory_quarantine table: the review queue's rows, and the approve and reject writes with their audit rows.
|
|
2
2
|
import { appendAuditEvent } from './audit.js';
|
|
3
|
-
import {
|
|
3
|
+
import { withWriteScopeOr } from '../db/index.js';
|
|
4
|
+
import { keysetAfter } from '../util/keyset.js';
|
|
5
|
+
import { selectEntriesByIds } from './entry-reads.js';
|
|
4
6
|
export const QUARANTINE_SCOPE_PREFIX = 'quarantine:private:';
|
|
5
7
|
/** Scope a quarantined memory is stored under; matches PRIVATE_SCOPE_RE so every default-deny site hides it. */
|
|
6
8
|
export function quarantineScopeFor(original) {
|
|
7
9
|
return `${QUARANTINE_SCOPE_PREFIX}${original ?? 'unscoped'}`;
|
|
8
10
|
}
|
|
9
|
-
export function isQuarantineScope(scope) {
|
|
10
|
-
return scope != null && scope.startsWith(QUARANTINE_SCOPE_PREFIX);
|
|
11
|
-
}
|
|
12
11
|
const SELECT_COLUMNS = 'tenant_id, memory_id, original_scope, reason, status, quarantined_at, decided_at, decided_by';
|
|
13
12
|
function fromDbRow(row) {
|
|
14
13
|
return {
|
|
@@ -16,31 +15,19 @@ function fromDbRow(row) {
|
|
|
16
15
|
memoryId: row.memory_id,
|
|
17
16
|
originalScope: row.original_scope,
|
|
18
17
|
reason: row.reason,
|
|
19
|
-
// SAFETY: this module's
|
|
18
|
+
// SAFETY: the quarantine INSERT and this module's UPDATE statements are the only writers of status.
|
|
20
19
|
status: row.status,
|
|
21
20
|
quarantinedAt: row.quarantined_at,
|
|
22
21
|
decidedAt: row.decided_at,
|
|
23
22
|
decidedBy: row.decided_by,
|
|
24
23
|
};
|
|
25
24
|
}
|
|
26
|
-
|
|
27
|
-
export function recordQuarantine(db, opts) {
|
|
28
|
-
db.prepare(`INSERT INTO memory_quarantine (tenant_id, memory_id, original_scope, reason, status, quarantined_at)
|
|
29
|
-
VALUES (?, ?, ?, ?, 'pending', ?)`).run(opts.tenantId, opts.memoryId, opts.originalScope, opts.reason, new Date().toISOString());
|
|
30
|
-
appendAuditEvent(db, {
|
|
31
|
-
tenantId: opts.tenantId,
|
|
32
|
-
actor: opts.actor,
|
|
33
|
-
op: 'quarantine',
|
|
34
|
-
targetId: opts.memoryId,
|
|
35
|
-
metadata: { reason: opts.reason, originalScope: opts.originalScope },
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
export function getQuarantineRow(db, tenantId, memoryId) {
|
|
25
|
+
function getQuarantineRow(db, tenantId, memoryId) {
|
|
39
26
|
const row = db.prepare(`SELECT ${SELECT_COLUMNS} FROM memory_quarantine WHERE tenant_id = ? AND memory_id = ?`)
|
|
40
27
|
.get(tenantId, memoryId);
|
|
41
28
|
return row ? fromDbRow(row) : null;
|
|
42
29
|
}
|
|
43
|
-
|
|
30
|
+
function listQuarantineRows(db, tenantId, status = 'pending', limit = 100, afterRow) {
|
|
44
31
|
// A pending row whose memory was deleted (e.g. Slack message_deleted) is dead; keep its history, drop it from the queue.
|
|
45
32
|
const live = status === 'pending'
|
|
46
33
|
? ' AND EXISTS (SELECT 1 FROM memories m WHERE m.id = memory_quarantine.memory_id AND m.tenant_id = memory_quarantine.tenant_id)'
|
|
@@ -55,12 +42,67 @@ export function listQuarantineRows(db, tenantId, status = 'pending', limit = 100
|
|
|
55
42
|
// SAFETY: both branches select SELECT_COLUMNS, matching QuarantineDbRow's field set.
|
|
56
43
|
return rows.map(fromDbRow);
|
|
57
44
|
}
|
|
58
|
-
|
|
45
|
+
/** Insert the quarantine row + its audit event; caller runs this inside the memory's own write transaction. */
|
|
46
|
+
export function recordQuarantine(db, opts) {
|
|
47
|
+
db.prepare(`INSERT INTO memory_quarantine (tenant_id, memory_id, original_scope, reason, status, quarantined_at)
|
|
48
|
+
VALUES (?, ?, ?, ?, 'pending', ?)`).run(opts.tenantId, opts.memoryId, opts.originalScope, opts.reason, new Date().toISOString());
|
|
49
|
+
appendAuditEvent(db, {
|
|
50
|
+
tenantId: opts.tenantId,
|
|
51
|
+
actor: opts.actor,
|
|
52
|
+
op: 'quarantine',
|
|
53
|
+
targetId: opts.memoryId,
|
|
54
|
+
metadata: { reason: opts.reason, originalScope: opts.originalScope },
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
function approveQuarantineRow(db, tenantId, memoryId, decidedBy) {
|
|
59
58
|
db.prepare(`UPDATE memory_quarantine SET status = 'approved', decided_at = ?, decided_by = ? WHERE tenant_id = ? AND memory_id = ?`)
|
|
60
59
|
.run(new Date().toISOString(), decidedBy, tenantId, memoryId);
|
|
61
60
|
}
|
|
62
|
-
|
|
61
|
+
function rejectQuarantineRow(db, tenantId, memoryId, decidedBy) {
|
|
63
62
|
db.prepare(`UPDATE memory_quarantine SET status = 'rejected', decided_at = ?, decided_by = ? WHERE tenant_id = ? AND memory_id = ?`)
|
|
64
63
|
.run(new Date().toISOString(), decidedBy, tenantId, memoryId);
|
|
65
64
|
}
|
|
65
|
+
/** A page of the tenant's records, each with its memory's content read in the same query batch. */
|
|
66
|
+
export function listQuarantinedAt(db, tenantId, { status, limit, after }) {
|
|
67
|
+
const rows = listQuarantineRows(db, tenantId, status, limit, after);
|
|
68
|
+
const entries = selectEntriesByIds(db, rows.map((row) => row.memoryId), tenantId);
|
|
69
|
+
return rows.map((row) => ({ ...row, content: entries.get(row.memoryId)?.content ?? null }));
|
|
70
|
+
}
|
|
71
|
+
/** The pending record, or why a decision on `id` is refused. */
|
|
72
|
+
function pendingOrRefusal(db, tenantId, id) {
|
|
73
|
+
const row = getQuarantineRow(db, tenantId, id);
|
|
74
|
+
if (!row)
|
|
75
|
+
return { outcome: 'not_quarantined' };
|
|
76
|
+
if (row.status !== 'pending')
|
|
77
|
+
return { outcome: 'already_decided', status: row.status };
|
|
78
|
+
return row;
|
|
79
|
+
}
|
|
80
|
+
/** Puts the memory back under its original scope; the scope guard refuses a row moved since it was quarantined. */
|
|
81
|
+
export function approveQuarantinedAt(db, tenantId, id, actor) {
|
|
82
|
+
return withWriteScopeOr(db, 'quarantine_approve', (rollback) => {
|
|
83
|
+
const row = pendingOrRefusal(db, tenantId, id);
|
|
84
|
+
if ('outcome' in row)
|
|
85
|
+
return rollback(row);
|
|
86
|
+
const quarantineScope = quarantineScopeFor(row.originalScope);
|
|
87
|
+
const updated = db
|
|
88
|
+
.prepare(`UPDATE memories SET scope = ? WHERE id = ? AND tenant_id = ? AND scope = ?`)
|
|
89
|
+
.run(row.originalScope, id, tenantId, quarantineScope);
|
|
90
|
+
if (Number(updated.changes ?? 0) !== 1)
|
|
91
|
+
return rollback({ outcome: 'scope_moved' });
|
|
92
|
+
approveQuarantineRow(db, tenantId, id, actor);
|
|
93
|
+
appendAuditEvent(db, { tenantId, actor, op: 'quarantine_approve', targetId: id, metadata: { originalScope: row.originalScope } });
|
|
94
|
+
return { outcome: 'approved' };
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
/** Marks the record rejected; the memory row is left as stored. */
|
|
98
|
+
export function rejectQuarantinedAt(db, tenantId, id, actor) {
|
|
99
|
+
return withWriteScopeOr(db, 'quarantine_reject', (rollback) => {
|
|
100
|
+
const row = pendingOrRefusal(db, tenantId, id);
|
|
101
|
+
if ('outcome' in row)
|
|
102
|
+
return rollback(row);
|
|
103
|
+
rejectQuarantineRow(db, tenantId, id, actor);
|
|
104
|
+
appendAuditEvent(db, { tenantId, actor, op: 'quarantine_reject', targetId: id, metadata: {} });
|
|
105
|
+
return { outcome: 'rejected' };
|
|
106
|
+
});
|
|
107
|
+
}
|
|
66
108
|
//# sourceMappingURL=quarantine.js.map
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { DatabaseSyncLike } from '../db/index.js';
|
|
2
|
+
export interface ArchiveOpts {
|
|
3
|
+
reason: string;
|
|
4
|
+
who: string;
|
|
5
|
+
/** Hook run inside the archive SAVEPOINT after the audit row and before RELEASE (the Slack deletion connector marks the event seen atomically);
|
|
6
|
+
* throwing rolls back the whole archive, audit row included. */
|
|
7
|
+
afterArchive?: (db: DatabaseSyncLike, archivedMemoryId: string) => void;
|
|
8
|
+
}
|
|
9
|
+
/** Stamps the archived copy of `memoryId` as having its markdown mirror cleaned at `at`. */
|
|
10
|
+
export declare function markMirrorCleaned(db: DatabaseSyncLike, memoryId: string, at: string): void;
|
|
11
|
+
/** The only way to remove a `kind='raw'` row: snapshots it into `raw_archive`, flips `kind` to 'archived' so the append-only trigger allows the delete,
|
|
12
|
+
* all in one write scope that nests in an outer transaction. Throws if the row is missing or not raw; returns the archived_at. */
|
|
13
|
+
export declare function archiveRawMemory(db: DatabaseSyncLike, id: string, opts: ArchiveOpts): string;
|
|
14
|
+
//# sourceMappingURL=raw-archive.d.ts.map
|
|
@@ -1,11 +1,15 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { DEFAULT_TENANT_ID } from '../util/env.js';
|
|
2
|
+
import { BadRequestError, NotFoundError } from '../core/api-errors.js';
|
|
3
|
+
import { isFtsAvailable, withWriteScope } from '../db/index.js';
|
|
3
4
|
import { appendAuditEvent, reportAuditWriteFailure } from './audit.js';
|
|
4
5
|
import { markSummaryDirtyInTx } from './summary-dirty.js';
|
|
6
|
+
/** Stamps the archived copy of `memoryId` as having its markdown mirror cleaned at `at`. */
|
|
7
|
+
export function markMirrorCleaned(db, memoryId, at) {
|
|
8
|
+
db.prepare(`UPDATE raw_archive SET mirror_cleaned_at = ? WHERE memory_id = ?`).run(at, memoryId);
|
|
9
|
+
}
|
|
5
10
|
function loadRawRow(db, id) {
|
|
6
|
-
// SAFETY: SELECT *
|
|
7
|
-
//
|
|
8
|
-
// null) by the memories schema.
|
|
11
|
+
// SAFETY: SELECT * returns every memories column; only kind, tenant_id and dag_parent_id are read below, all guaranteed present (possibly null) by the
|
|
12
|
+
// schema.
|
|
9
13
|
const row = db.prepare(`SELECT * FROM memories WHERE id = ?`).get(id);
|
|
10
14
|
if (!row)
|
|
11
15
|
throw new NotFoundError(`memory not found: ${id}`);
|
|
@@ -15,15 +19,13 @@ function loadRawRow(db, id) {
|
|
|
15
19
|
return row;
|
|
16
20
|
}
|
|
17
21
|
function moveRowToArchive(db, id, row, opts) {
|
|
18
|
-
// GDPR: raw_archive stores ONLY metadata,
|
|
19
|
-
//
|
|
20
|
-
// for the compliance audit trail. True right-to-be-forgotten — the original
|
|
21
|
-
// content is unrecoverable from raw_archive after this point.
|
|
22
|
+
// GDPR: raw_archive stores ONLY metadata, never the original content; the archive_raw audit row is the compliance trail,
|
|
23
|
+
// so the content is unrecoverable from here on.
|
|
22
24
|
const archivedAt = new Date().toISOString();
|
|
23
25
|
const redactedPayload = JSON.stringify({
|
|
24
26
|
redacted: true,
|
|
25
27
|
archived_at: archivedAt,
|
|
26
|
-
tenant_id: row.tenant_id ??
|
|
28
|
+
tenant_id: row.tenant_id ?? DEFAULT_TENANT_ID,
|
|
27
29
|
kind: row.kind,
|
|
28
30
|
reason: opts.reason,
|
|
29
31
|
});
|
|
@@ -36,15 +38,12 @@ function moveRowToArchive(db, id, row, opts) {
|
|
|
36
38
|
db.prepare(`DELETE FROM memories_fts WHERE id = ?`).run(id);
|
|
37
39
|
return archivedAt;
|
|
38
40
|
}
|
|
39
|
-
// Emit the archive_raw audit
|
|
40
|
-
//
|
|
41
|
-
// (fetched above as part of SELECT *), not the env. Archives must be
|
|
42
|
-
// attributed to the tenant that owns the row, not whatever HIPPO_TENANT
|
|
43
|
-
// happens to be set to in the calling shell.
|
|
41
|
+
// Emit the archive_raw audit inside the SAVEPOINT so it commits atomically with the row deletion, attributed to the row's own tenant_id,
|
|
42
|
+
// not whatever HIPPO_TENANT the calling shell has set.
|
|
44
43
|
function auditArchive(db, id, row, opts) {
|
|
45
44
|
try {
|
|
46
45
|
appendAuditEvent(db, {
|
|
47
|
-
tenantId: String(row.tenant_id ??
|
|
46
|
+
tenantId: String(row.tenant_id ?? DEFAULT_TENANT_ID),
|
|
48
47
|
actor: opts.who || 'cli',
|
|
49
48
|
op: 'archive_raw',
|
|
50
49
|
targetId: id,
|
|
@@ -56,15 +55,8 @@ function auditArchive(db, id, row, opts) {
|
|
|
56
55
|
reportAuditWriteFailure('archive_raw', String(error), id);
|
|
57
56
|
}
|
|
58
57
|
}
|
|
59
|
-
/**
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
* Snapshots the full row into `raw_archive`, flips `kind` to `'archived'` so the
|
|
63
|
-
* append-only trigger lets the delete through, then deletes the row. All in one
|
|
64
|
-
* write scope, which nests inside an outer transaction (e.g. batchWriteAndDelete).
|
|
65
|
-
*
|
|
66
|
-
* Throws if the row does not exist or is not `kind='raw'`. Returns the archived_at it wrote.
|
|
67
|
-
*/
|
|
58
|
+
/** The only way to remove a `kind='raw'` row: snapshots it into `raw_archive`, flips `kind` to 'archived' so the append-only trigger allows the delete,
|
|
59
|
+
* all in one write scope that nests in an outer transaction. Throws if the row is missing or not raw; returns the archived_at. */
|
|
68
60
|
export function archiveRawMemory(db, id, opts) {
|
|
69
61
|
const row = loadRawRow(db, id);
|
|
70
62
|
// A SAVEPOINT when already inside a transaction (e.g. batchWriteAndDelete), so a throw here
|
|
@@ -75,13 +67,10 @@ export function archiveRawMemory(db, id, opts) {
|
|
|
75
67
|
// Archiving a child under a level-2 summary marks the parent dirty, inside the
|
|
76
68
|
// SAVEPOINT so the dirty-mark commits atomically with the archive.
|
|
77
69
|
if (row.dag_parent_id) {
|
|
78
|
-
markSummaryDirtyInTx(db, String(row.dag_parent_id), String(row.tenant_id ??
|
|
70
|
+
markSummaryDirtyInTx(db, String(row.dag_parent_id), String(row.tenant_id ?? DEFAULT_TENANT_ID), opts.who || 'cli');
|
|
79
71
|
}
|
|
80
|
-
// afterArchive hook: connector
|
|
81
|
-
//
|
|
82
|
-
// Throwing here rolls back the entire SAVEPOINT — both the archive and any
|
|
83
|
-
// hook side effects. The hook runs INSIDE the SAVEPOINT so its writes
|
|
84
|
-
// share the archive's transactional fate.
|
|
72
|
+
// afterArchive hook: connector idempotency markers (e.g. slack_event_log) must commit atomically with the archive, so it runs INSIDE the SAVEPOINT;
|
|
73
|
+
// throwing rolls back both.
|
|
85
74
|
if (opts.afterArchive) {
|
|
86
75
|
opts.afterArchive(db, id);
|
|
87
76
|
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/** Recall-side scope predicates, in a leaf module so search-both.ts can apply the same default-deny rule to searchBothHybrid's candidate loads without an
|
|
2
|
+
* import cycle. src/api/index.ts imports these and re-exports them for back-compat (`api.isPrivateScope`, tests importing `passesScopeFilterForRecall`). */
|
|
3
|
+
import { ForbiddenError } from '../core/api-errors.js';
|
|
4
|
+
/** Literal scopes excluded from recall by default-deny when the caller passes no `scope`; read by the SQL clause in `loadSearchRows` and by
|
|
5
|
+
* `passesScopeFilterForRecall`. Invariant: never empty, or quarantine scopes would pass both paths silently (the module-load assertion below pins this). */
|
|
6
|
+
export declare const RECALL_DEFAULT_DENY_SCOPES: readonly ["unknown:legacy"];
|
|
7
|
+
/** @internal Runtime guard against blanking a load-bearing literal array; `as const` arrays widen via `readonly T[]` at the call site, so the empty case
|
|
8
|
+
* is reachable and testable. */
|
|
9
|
+
export declare function assertNonEmpty<T>(arr: readonly T[], name: string): void;
|
|
10
|
+
/** Source-agnostic private-scope detector: private means `<lowercase-source>:private:<rest>` (`slack:private:Cabc`; not `slack:public:x`, null, '',
|
|
11
|
+
* 'private:foo'). The single source of truth for api.recall, the MCP server, the CLI and search-both.ts, so connector work cannot drift. */
|
|
12
|
+
export declare const PRIVATE_SCOPE_RE: RegExp;
|
|
13
|
+
/** True when `scope` matches the `<source>:private:*` shape. */
|
|
14
|
+
export declare function isPrivateScope(scope: string | null | undefined): boolean;
|
|
15
|
+
export declare const PERSONAL_SCOPE_PREFIX = "personal:private:";
|
|
16
|
+
export declare const PERSONAL_OWNER_MAX: number;
|
|
17
|
+
/** True for a `personal:private:<owner>` scope, any case, so a case variant is never mistaken for a team scope. */
|
|
18
|
+
export declare function isPersonalScope(scope: string | null | undefined): boolean;
|
|
19
|
+
/** The caller's own personal scope, or null when it has no owner that can hold one. */
|
|
20
|
+
export declare function personalScopeOf(actor: {
|
|
21
|
+
owner?: string;
|
|
22
|
+
} | undefined): string | null;
|
|
23
|
+
/** Refuses a client-sent `personal:` scope: only the server stamps one, from the caller's owner. */
|
|
24
|
+
export declare function assertClientScope(scope: string | null | undefined): void;
|
|
25
|
+
/** True when `actor` may change or delete a row in `scope`: any non-personal scope, or its own personal one. */
|
|
26
|
+
export declare function canTouchScope(actor: {
|
|
27
|
+
owner?: string;
|
|
28
|
+
}, scope: string | null): boolean;
|
|
29
|
+
/** canTouchScope for a caller known by its own personal scope, as a store method receives it. */
|
|
30
|
+
export declare function ownScopeTouches(ownScope: string | null, scope: string | null): boolean;
|
|
31
|
+
/** JS half of the recall default-deny rule (SQL half: `loadSearchRows`). A non-empty `requested` needs an exact match;
|
|
32
|
+
* otherwise `<source>:private:*` and `RECALL_DEFAULT_DENY_SCOPES` buckets are denied, while null, public scopes and the caller's `ownScope` pass. */
|
|
33
|
+
export declare function passesScopeFilterForRecall(scope: string | null, requested: string | undefined, ownScope?: string | null): boolean;
|
|
34
|
+
export interface SqlFragment {
|
|
35
|
+
sql: string;
|
|
36
|
+
params: string[];
|
|
37
|
+
}
|
|
38
|
+
/** SQL twin of the no-request arm of passesScopeFilterForRecall; `ownScope` is bound and compared with `=`, so `%` or `_` in an owner match nothing extra. */
|
|
39
|
+
export declare function scopeAdmitSql(col: '' | 'm.', ownScope?: string | null): SqlFragment;
|
|
40
|
+
/** SQL twin of canTouchScope, which is also canReadScope for an admin: every row but
|
|
41
|
+
* another person's personal one. LIKE folds ASCII case as isPersonalScope's /i does. */
|
|
42
|
+
export declare function touchableScopeSql(col: '' | 'm.', ownScope?: string | null): SqlFragment;
|
|
43
|
+
/** CLI `--scope` variant: an explicit `--scope X` UNLOCKS scope X on top of the default-admitted set rather than narrowing to X (api.recall keeps 'exact').
|
|
44
|
+
* Includes private/quarantine scopes (owner access); a named personal scope never unlocks: the CLI has no caller identity. */
|
|
45
|
+
export declare function passesCliRecallScopeFilter(scope: string | null, requested: string | undefined): boolean;
|
|
46
|
+
/** Thrown when a caller requests a scope its role may not read; the HTTP layer maps it to 403. */
|
|
47
|
+
export declare class ScopeForbiddenError extends ForbiddenError {
|
|
48
|
+
readonly scope: string;
|
|
49
|
+
constructor(scope: string);
|
|
50
|
+
}
|
|
51
|
+
/** True for scopes default-deny hides (`<source>:private:*` and the quarantine buckets); naming one explicitly unlocks it, so naming one needs
|
|
52
|
+
* authorization. */
|
|
53
|
+
export declare function isRestrictedScope(scope: string | null | undefined): boolean;
|
|
54
|
+
/** The identity a scope check runs against: a role, any scope grants, and the person who owns the key. */
|
|
55
|
+
export interface ScopeActor {
|
|
56
|
+
role: 'admin' | 'member';
|
|
57
|
+
scopes?: readonly string[];
|
|
58
|
+
owner?: string;
|
|
59
|
+
}
|
|
60
|
+
/** Personal rows answer to their owner alone: role, key grants and resolver scopes never
|
|
61
|
+
* open one. Else admin reads all; a member needs an exact grant on a restricted scope. */
|
|
62
|
+
export declare function canReadScope(actor: ScopeActor, scope: string): boolean;
|
|
63
|
+
/** Authorize an explicitly requested scope before any read honours it (member scope grants). */
|
|
64
|
+
export declare function assertScopeRequestAllowed(actor: ScopeActor, requested: string | undefined): void;
|
|
65
|
+
/** Scope a derived row keeps from one source: the restricted scope itself, else null. */
|
|
66
|
+
export declare function derivationScope(scope: string | null | undefined): string | null;
|
|
67
|
+
/** The one derivation scope shared by every source, or `{ ok: false }` when
|
|
68
|
+
* two disagree, so the caller skips the derived row instead of under-scoping it. */
|
|
69
|
+
export declare function commonDerivationScope(scopes: readonly (string | null | undefined)[]): {
|
|
70
|
+
ok: true;
|
|
71
|
+
scope: string | null;
|
|
72
|
+
} | {
|
|
73
|
+
ok: false;
|
|
74
|
+
};
|
|
75
|
+
/** Map-partition key for consolidate/dag/dedup producers: tenant + derivation scope + origin project,
|
|
76
|
+
* so a derived row never blends two restricted scopes, a mixed pair, or two projects. */
|
|
77
|
+
export declare function derivationPartitionKey(tenantId: string, scope: string | null | undefined, origin: string | null | undefined): string;
|
|
78
|
+
//# sourceMappingURL=recall-scope.d.ts.map
|