hippo-memory 1.69.0 → 1.71.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -2
- package/dist/agent-memories/apply.d.ts +3 -3
- package/dist/agent-memories/apply.js +16 -31
- package/dist/agent-memories/claude-code.d.ts +5 -5
- package/dist/agent-memories/claude-code.js +25 -12
- package/dist/agent-memories/copilot.js +3 -2
- package/dist/agent-memories/files.js +26 -14
- package/dist/agent-memories/gemini.js +6 -5
- package/dist/agent-memories/keys.js +3 -2
- package/dist/agent-memories/legacy.d.ts +2 -2
- package/dist/agent-memories/legacy.js +2 -2
- package/dist/agent-memories/markdown.d.ts +1 -3
- package/dist/agent-memories/markdown.js +1 -3
- package/dist/agent-memories/report.d.ts +1 -1
- package/dist/agent-memories/report.js +3 -2
- package/dist/agent-memories/source.d.ts +1 -1
- package/dist/agent-memories/source.js +6 -5
- package/dist/agent-memories/sync.d.ts +5 -3
- package/dist/agent-memories/sync.js +34 -38
- package/dist/agent-memories/types.d.ts +1 -1
- package/dist/api/assemble.d.ts +9 -46
- package/dist/api/assemble.js +44 -54
- package/dist/api/audit.d.ts +8 -7
- package/dist/api/audit.js +15 -21
- package/dist/api/auth.d.ts +17 -39
- package/dist/api/auth.js +76 -216
- package/dist/api/auto-sleep.d.ts +13 -0
- package/dist/api/auto-sleep.js +32 -0
- package/dist/{availability.d.ts → api/availability.d.ts} +4 -17
- package/dist/{availability.js → api/availability.js} +14 -44
- package/dist/{context-auto.js → api/context-auto.js} +2 -1
- package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
- package/dist/{context-render.js → api/context-render.js} +7 -6
- package/dist/api/context-select.d.ts +5 -5
- package/dist/api/context-select.js +39 -48
- package/dist/api/context-types.d.ts +15 -40
- package/dist/api/context.d.ts +7 -26
- package/dist/api/context.js +67 -97
- package/dist/api/dormant.d.ts +7 -23
- package/dist/api/dormant.js +40 -128
- package/dist/api/drill-down.d.ts +9 -48
- package/dist/api/drill-down.js +41 -90
- package/dist/api/forget.d.ts +5 -33
- package/dist/api/forget.js +17 -73
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +2 -2
- package/dist/api/graph.d.ts +8 -0
- package/dist/api/graph.js +7 -0
- package/dist/api/index.d.ts +28 -0
- package/dist/api/index.js +31 -0
- package/dist/api/instruction-detect.js +85 -0
- package/dist/api/learn.js +63 -55
- package/dist/api/ledger-db.d.ts +21 -0
- package/dist/api/ledger-db.js +81 -0
- package/dist/api/memories.d.ts +5 -0
- package/dist/api/memories.js +7 -0
- package/dist/api/objects.d.ts +9 -0
- package/dist/api/objects.js +11 -0
- package/dist/api/on-store.d.ts +16 -0
- package/dist/api/on-store.js +38 -0
- package/dist/api/outcome.d.ts +5 -42
- package/dist/api/outcome.js +15 -80
- package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
- package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
- package/dist/api/predictions.d.ts +9 -0
- package/dist/api/predictions.js +18 -0
- package/dist/api/promote.d.ts +16 -31
- package/dist/api/promote.js +38 -123
- package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +11 -11
- package/dist/{prompt-hook.js → api/prompt-hook.js} +42 -60
- package/dist/api/quarantine.d.ts +5 -5
- package/dist/api/quarantine.js +30 -106
- package/dist/api/recall-cli.d.ts +55 -0
- package/dist/api/recall-cli.js +94 -0
- package/dist/api/recall-core.d.ts +4 -0
- package/dist/api/recall-core.js +120 -0
- package/dist/api/recall-finish.d.ts +53 -0
- package/dist/api/recall-finish.js +30 -0
- package/dist/api/recall-history.d.ts +64 -0
- package/dist/api/recall-history.js +159 -0
- package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +7 -8
- package/dist/{recall-pipeline.js → api/recall-pipeline.js} +60 -48
- package/dist/api/recall-record.d.ts +10 -13
- package/dist/api/recall-record.js +10 -30
- package/dist/api/recall-request.d.ts +2 -2
- package/dist/api/recall-request.js +3 -3
- package/dist/api/recall-types.d.ts +101 -316
- package/dist/api/recall.d.ts +5 -33
- package/dist/api/recall.js +92 -91
- package/dist/api/refine.d.ts +7 -0
- package/dist/api/refine.js +10 -0
- package/dist/api/remember-local.d.ts +57 -0
- package/dist/api/remember-local.js +90 -0
- package/dist/api/remember.d.ts +27 -12
- package/dist/api/remember.js +42 -46
- package/dist/api/session-owners.d.ts +4 -0
- package/dist/api/session-owners.js +17 -0
- package/dist/api/sleep-run.d.ts +7 -9
- package/dist/api/sleep-run.js +78 -94
- package/dist/api/sleep.d.ts +10 -29
- package/dist/api/tokens.d.ts +5 -12
- package/dist/api/tokens.js +12 -31
- package/dist/api/types.d.ts +8 -31
- package/dist/api/types.js +5 -23
- package/dist/capture/caller-session.d.ts +2 -2
- package/dist/capture/caller-session.js +8 -8
- package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
- package/dist/{capture-error.js → capture/capture-error.js} +7 -7
- package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
- package/dist/capture/command.d.ts +5 -13
- package/dist/capture/command.js +57 -60
- package/dist/capture/compact-resume-caller.d.ts +1 -1
- package/dist/capture/compact-resume-caller.js +7 -7
- package/dist/capture/compact.d.ts +8 -16
- package/dist/capture/compact.js +56 -47
- package/dist/capture/compaction-items-caller.d.ts +1 -1
- package/dist/capture/compaction-items-caller.js +7 -5
- package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
- package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
- package/dist/{compaction-record.js → capture/compaction-record.js} +143 -157
- package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +1 -1
- package/dist/{compaction-spool.js → capture/compaction-spool.js} +18 -14
- package/dist/capture/copilot-transcript.js +1 -1
- package/dist/capture/extract.js +2 -2
- package/dist/capture/failure-caller.d.ts +2 -2
- package/dist/capture/failure-caller.js +6 -6
- package/dist/capture/failure-reading.d.ts +2 -5
- package/dist/capture/failure-reading.js +11 -12
- package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
- package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
- package/dist/capture/pre-compact-caller.d.ts +1 -1
- package/dist/capture/pre-compact-caller.js +2 -2
- package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +2 -6
- package/dist/{session-digest.js → capture/session-digest.js} +29 -29
- package/dist/capture/session-end-caller.d.ts +2 -2
- package/dist/capture/session-end-caller.js +1 -1
- package/dist/capture/session-texts.d.ts +1 -1
- package/dist/capture/session-texts.js +5 -5
- package/dist/capture/session-worker.js +6 -4
- package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
- package/dist/capture/transcript.d.ts +2 -10
- package/dist/capture/transcript.js +72 -92
- package/dist/capture/working-state.d.ts +0 -3
- package/dist/capture/working-state.js +7 -7
- package/dist/cli/api-context.d.ts +3 -0
- package/dist/cli/api-context.js +6 -0
- package/dist/cli/audit-prune.d.ts +28 -0
- package/dist/cli/audit-prune.js +40 -0
- package/dist/cli/audit.d.ts +2 -2
- package/dist/cli/audit.js +92 -88
- package/dist/cli/auth.d.ts +2 -1
- package/dist/cli/auth.js +69 -53
- package/dist/cli/briefs.d.ts +4 -3
- package/dist/cli/briefs.js +76 -202
- package/dist/cli/card.d.ts +2 -1
- package/dist/cli/card.js +55 -54
- package/dist/cli/client.d.ts +28 -0
- package/dist/{client.js → cli/client.js} +25 -44
- package/dist/cli/compact-resume-payload.d.ts +8 -0
- package/dist/cli/compact-resume-payload.js +40 -0
- package/dist/cli/context.d.ts +1 -13
- package/dist/cli/context.js +51 -77
- package/dist/cli/continuity.d.ts +6 -5
- package/dist/cli/continuity.js +153 -145
- package/dist/cli/correction-latency.d.ts +24 -0
- package/dist/{correction-latency.js → cli/correction-latency.js} +2 -14
- package/dist/cli/curate.d.ts +13 -17
- package/dist/cli/curate.js +226 -222
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +70 -52
- package/dist/cli/decisions.d.ts +4 -3
- package/dist/cli/decisions.js +129 -253
- package/dist/cli/eval.d.ts +1 -3
- package/dist/cli/eval.js +56 -42
- package/dist/cli/exit.d.ts +6 -0
- package/dist/cli/exit.js +11 -0
- package/dist/cli/explain.d.ts +1 -2
- package/dist/cli/explain.js +39 -21
- package/dist/cli/flag-values.d.ts +30 -0
- package/dist/cli/flag-values.js +120 -0
- package/dist/cli/flags.d.ts +304 -0
- package/dist/cli/flags.js +169 -0
- package/dist/cli/github.d.ts +14 -0
- package/dist/cli/github.js +184 -0
- package/dist/cli/goals.d.ts +2 -1
- package/dist/cli/goals.js +76 -75
- package/dist/cli/hook-runtime.d.ts +31 -0
- package/dist/cli/hook-runtime.js +139 -0
- package/dist/cli/init.d.ts +2 -1
- package/dist/cli/init.js +153 -126
- package/dist/cli/install-steps.d.ts +7 -0
- package/dist/cli/install-steps.js +101 -0
- package/dist/cli/last-sleep.d.ts +3 -1
- package/dist/cli/last-sleep.js +12 -7
- package/dist/cli/maintenance.d.ts +5 -4
- package/dist/cli/maintenance.js +41 -42
- package/dist/cli/object-verbs.d.ts +40 -0
- package/dist/cli/object-verbs.js +66 -0
- package/dist/cli/owner-validation.d.ts +18 -0
- package/dist/cli/owner-validation.js +33 -0
- package/dist/cli/playbooks.d.ts +4 -3
- package/dist/cli/playbooks.js +98 -306
- package/dist/cli/print.d.ts +15 -0
- package/dist/cli/print.js +82 -0
- package/dist/cli/projects.d.ts +2 -3
- package/dist/cli/projects.js +56 -51
- package/dist/cli/provenance-coverage.d.ts +14 -0
- package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +2 -6
- package/dist/cli/quality-repair-once.js +4 -4
- package/dist/cli/recall.d.ts +2 -6
- package/dist/cli/recall.js +128 -253
- package/dist/cli/refine-llm.d.ts +35 -0
- package/dist/cli/refine-llm.js +128 -0
- package/dist/cli/remember.d.ts +4 -6
- package/dist/cli/remember.js +193 -230
- package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +4 -17
- package/dist/{scheduler.js → cli/scheduler.js} +22 -22
- package/dist/cli/serve.d.ts +1 -1
- package/dist/cli/serve.js +46 -7
- package/dist/cli/session-hooks.d.ts +11 -19
- package/dist/cli/session-hooks.js +263 -258
- package/dist/cli/setup.d.ts +4 -3
- package/dist/cli/setup.js +55 -37
- package/dist/cli/shared.d.ts +14 -118
- package/dist/cli/shared.js +26 -400
- package/dist/cli/slack.d.ts +2 -1
- package/dist/cli/slack.js +46 -74
- package/dist/cli/sleep-render.d.ts +4 -0
- package/dist/cli/sleep-render.js +61 -0
- package/dist/cli/sleep.d.ts +3 -8
- package/dist/cli/sleep.js +34 -91
- package/dist/cli/status.d.ts +9 -12
- package/dist/cli/status.js +86 -131
- package/dist/{stdin.d.ts → cli/stdin.d.ts} +4 -6
- package/dist/{stdin.js → cli/stdin.js} +8 -9
- package/dist/cli/transfer.d.ts +9 -9
- package/dist/cli/transfer.js +125 -122
- package/dist/cli/usage.js +13 -5
- package/dist/cli.d.ts +69 -167
- package/dist/cli.js +187 -296
- package/dist/connectors/dlq.d.ts +44 -0
- package/dist/connectors/dlq.js +30 -0
- package/dist/connectors/github/backfill.d.ts +6 -26
- package/dist/connectors/github/backfill.js +42 -114
- package/dist/connectors/github/deletion.d.ts +6 -21
- package/dist/connectors/github/deletion.js +17 -64
- package/dist/connectors/github/dlq.d.ts +12 -91
- package/dist/connectors/github/dlq.js +23 -140
- package/dist/connectors/github/ingest.d.ts +4 -37
- package/dist/connectors/github/ingest.js +24 -93
- package/dist/connectors/github/octokit-client.d.ts +5 -17
- package/dist/connectors/github/octokit-client.js +29 -25
- package/dist/connectors/github/ratelimit.d.ts +3 -14
- package/dist/connectors/github/ratelimit.js +3 -14
- package/dist/connectors/github/scope.d.ts +3 -5
- package/dist/connectors/github/scope.js +3 -5
- package/dist/connectors/github/signature.d.ts +4 -26
- package/dist/connectors/github/signature.js +4 -26
- package/dist/connectors/github/tenant-routing.d.ts +4 -26
- package/dist/connectors/github/tenant-routing.js +13 -61
- package/dist/connectors/github/transform.d.ts +1 -1
- package/dist/connectors/github/transform.js +2 -16
- package/dist/connectors/github/types.d.ts +4 -16
- package/dist/connectors/github/types.js +17 -27
- package/dist/connectors/github/webhook.d.ts +5 -18
- package/dist/connectors/github/webhook.js +86 -105
- package/dist/connectors/slack/backfill.d.ts +5 -18
- package/dist/connectors/slack/backfill.js +9 -42
- package/dist/connectors/slack/deletion.d.ts +4 -7
- package/dist/connectors/slack/deletion.js +20 -49
- package/dist/connectors/slack/dlq.d.ts +9 -68
- package/dist/connectors/slack/dlq.js +26 -136
- package/dist/connectors/slack/ingest.d.ts +4 -18
- package/dist/connectors/slack/ingest.js +26 -91
- package/dist/connectors/slack/scope.d.ts +2 -8
- package/dist/connectors/slack/scope.js +2 -8
- package/dist/connectors/slack/signature.d.ts +1 -6
- package/dist/connectors/slack/signature.js +2 -1
- package/dist/connectors/slack/tenant-routing.d.ts +4 -18
- package/dist/connectors/slack/tenant-routing.js +11 -31
- package/dist/connectors/slack/transform.d.ts +3 -19
- package/dist/connectors/slack/transform.js +2 -18
- package/dist/connectors/slack/types.d.ts +4 -10
- package/dist/connectors/slack/types.js +5 -16
- package/dist/connectors/slack/web-client.js +34 -28
- package/dist/connectors/slack/webhook.d.ts +5 -21
- package/dist/connectors/slack/webhook.js +80 -108
- package/dist/connectors/slack/workspaces.d.ts +8 -41
- package/dist/connectors/slack/workspaces.js +8 -58
- package/dist/consolidate/conflicts.d.ts +1 -1
- package/dist/consolidate/conflicts.js +10 -18
- package/dist/consolidate/dag-summary.d.ts +8 -0
- package/dist/consolidate/dag-summary.js +41 -0
- package/dist/{dag.d.ts → consolidate/dag.d.ts} +6 -29
- package/dist/{dag.js → consolidate/dag.js} +49 -131
- package/dist/consolidate/decay.d.ts +2 -2
- package/dist/consolidate/decay.js +35 -41
- package/dist/consolidate/dedupe.d.ts +29 -0
- package/dist/consolidate/dedupe.js +103 -0
- package/dist/consolidate/flush-units.d.ts +5 -6
- package/dist/consolidate/flush-units.js +3 -3
- package/dist/consolidate/half-life-migration.d.ts +34 -0
- package/dist/consolidate/half-life-migration.js +89 -0
- package/dist/consolidate/llm-passes.js +12 -29
- package/dist/consolidate/memory-value-weights.d.ts +8 -0
- package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +2 -13
- package/dist/consolidate/memory-value.d.ts +45 -0
- package/dist/consolidate/memory-value.js +164 -0
- package/dist/consolidate/merge.js +65 -83
- package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
- package/dist/{merged-row.js → consolidate/merged-row.js} +4 -3
- package/dist/consolidate/physics-pass.js +46 -48
- package/dist/consolidate/replay.d.ts +9 -0
- package/dist/consolidate/replay.js +84 -0
- package/dist/consolidate/run.d.ts +7 -13
- package/dist/consolidate/run.js +6 -37
- package/dist/consolidate/sleep.d.ts +2 -9
- package/dist/consolidate/sleep.js +69 -151
- package/dist/consolidate/trace.d.ts +19 -0
- package/dist/{trace.js → consolidate/trace.js} +7 -24
- package/dist/consolidate/traces.js +40 -51
- package/dist/core/ablation.d.ts +15 -0
- package/dist/core/ablation.js +49 -0
- package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
- package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
- package/dist/{ambient.d.ts → core/ambient.d.ts} +1 -8
- package/dist/{ambient.js → core/ambient.js} +13 -18
- package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +16 -3
- package/dist/{capture-contract.js → core/capture-contract.js} +67 -1
- package/dist/{card.d.ts → core/card.d.ts} +4 -1
- package/dist/{card.js → core/card.js} +8 -0
- package/dist/core/compare.d.ts +32 -0
- package/dist/core/compare.js +70 -0
- package/dist/{config.d.ts → core/config.d.ts} +14 -28
- package/dist/{config.js → core/config.js} +101 -75
- package/dist/{handoff.d.ts → core/handoff.d.ts} +1 -7
- package/dist/core/handoff.js +81 -0
- package/dist/{memory-quality.js → core/memory-quality.js} +2 -2
- package/dist/core/memory.d.ts +183 -0
- package/dist/core/memory.js +380 -0
- package/dist/core/package-root.d.ts +3 -0
- package/dist/core/package-root.js +5 -0
- package/dist/{physics-config.d.ts → core/physics-config.d.ts} +1 -4
- package/dist/{physics-config.js → core/physics-config.js} +3 -8
- package/dist/{physics.d.ts → core/physics.d.ts} +16 -62
- package/dist/{physics.js → core/physics.js} +60 -122
- package/dist/{project-identity.d.ts → core/project-identity.d.ts} +17 -63
- package/dist/{project-identity.js → core/project-identity.js} +22 -55
- package/dist/{project-remote.js → core/project-remote.js} +17 -6
- package/dist/{prompt-recall.js → core/prompt-recall.js} +1 -1
- package/dist/core/raw-append-only.d.ts +5 -0
- package/dist/core/raw-append-only.js +7 -0
- package/dist/{salience.d.ts → core/salience.d.ts} +1 -7
- package/dist/{salience.js → core/salience.js} +36 -27
- package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
- package/dist/{search/types.js → core/search-types.js} +1 -1
- package/dist/core/session-digest-row.d.ts +5 -0
- package/dist/core/session-digest-row.js +6 -0
- package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
- package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +7 -7
- package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
- package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
- package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +11 -10
- package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +110 -104
- package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +2 -1
- package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +1 -0
- package/dist/{dashboard.js → dashboard/dashboard.js} +172 -55
- package/dist/db/backup.js +1 -1
- package/dist/db/busy.d.ts +19 -2
- package/dist/db/busy.js +88 -14
- package/dist/db/connect.d.ts +11 -2
- package/dist/db/connect.js +43 -10
- package/dist/db/index.d.ts +9 -0
- package/dist/db/index.js +8 -0
- package/dist/db/meta.d.ts +4 -0
- package/dist/db/meta.js +11 -1
- package/dist/db/migrate.d.ts +8 -1
- package/dist/db/migrate.js +28 -33
- package/dist/db/migrations/types.d.ts +2 -5
- package/dist/db/migrations/v08.js +1 -1
- package/dist/db/migrations/v14.js +39 -36
- package/dist/db/migrations/v15.js +2 -8
- package/dist/db/migrations/v16.js +31 -29
- package/dist/db/migrations/v17.js +2 -3
- package/dist/db/migrations/v18.js +6 -5
- package/dist/db/migrations/v19.js +2 -5
- package/dist/db/migrations/v20.js +5 -8
- package/dist/db/migrations/v22.js +28 -38
- package/dist/db/migrations/v23.js +3 -14
- package/dist/db/migrations/v24.js +25 -22
- package/dist/db/migrations/v25.js +3 -8
- package/dist/db/migrations/v26.js +2 -13
- package/dist/db/migrations/v27.js +3 -11
- package/dist/db/migrations/v28.js +2 -14
- package/dist/db/migrations/v29.js +23 -32
- package/dist/db/migrations/v30.js +4 -16
- package/dist/db/migrations/v31.js +23 -31
- package/dist/db/migrations/v32.js +4 -22
- package/dist/db/migrations/v33.js +2 -15
- package/dist/db/migrations/v34.js +2 -11
- package/dist/db/migrations/v35.js +2 -11
- package/dist/db/migrations/v36.js +2 -11
- package/dist/db/migrations/v37.js +8 -33
- package/dist/db/migrations/v38.js +5 -38
- package/dist/db/migrations/v39.js +10 -21
- package/dist/db/migrations/v40.js +8 -14
- package/dist/db/migrations/v41.js +2 -24
- package/dist/db/migrations/v43.js +7 -6
- package/dist/db/migrations/v44.js +2 -8
- package/dist/db/migrations/v45.js +2 -7
- package/dist/db/migrations/v46.js +1 -1
- package/dist/db/migrations/v47.js +2 -3
- package/dist/db/migrations/v48.js +1 -1
- package/dist/db/migrations/v49.js +1 -1
- package/dist/db/migrations/v50.js +8 -7
- package/dist/db/migrations/v51.js +1 -1
- package/dist/db/migrations/v52.js +1 -1
- package/dist/db/open.d.ts +11 -1
- package/dist/db/open.js +37 -4
- package/dist/db/physics-state.d.ts +23 -0
- package/dist/{physics-state.js → db/physics-state.js} +34 -52
- package/dist/db/raw-archive-mirror-cleanup.d.ts +5 -0
- package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +10 -20
- package/dist/db/request-stores.d.ts +15 -2
- package/dist/db/request-stores.js +37 -15
- package/dist/db/tables.d.ts +2 -0
- package/dist/db/tables.js +6 -0
- package/dist/{vector-store.d.ts → db/vector-store.d.ts} +6 -2
- package/dist/{vector-store.js → db/vector-store.js} +83 -51
- package/dist/db/wal-checkpointer.d.ts +11 -0
- package/dist/db/wal-checkpointer.js +92 -0
- package/dist/doctor.js +176 -152
- package/dist/entry/json-hooks.d.ts +1 -1
- package/dist/entry/json-hooks.js +1 -1
- package/dist/entry/project-identity.d.ts +1 -1
- package/dist/entry/project-identity.js +1 -1
- package/dist/entry/session-text.d.ts +3 -3
- package/dist/entry/session-text.js +5 -4
- package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +15 -53
- package/dist/{eval-stats.js → eval/eval-stats.js} +24 -51
- package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +3 -14
- package/dist/{eval-suite.js → eval/eval-suite.js} +99 -57
- package/dist/{eval.d.ts → eval/eval.d.ts} +7 -25
- package/dist/{eval.js → eval/eval.js} +35 -55
- package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -6
- package/dist/{judgment.js → eval/judgment.js} +23 -20
- package/dist/extensions/openclaw-plugin/index.js +2 -3
- package/dist/graph/delta.d.ts +3 -2
- package/dist/graph/delta.js +9 -23
- package/dist/{graph-extract.d.ts → graph/extract.d.ts} +10 -32
- package/dist/{graph-extract.js → graph/extract.js} +40 -81
- package/dist/{graph-recall.d.ts → graph/recall.d.ts} +9 -22
- package/dist/{graph-recall.js → graph/recall.js} +65 -108
- package/dist/graph/stream.d.ts +38 -0
- package/dist/{graph-stream.js → graph/stream.js} +20 -41
- package/dist/graph/view.d.ts +50 -0
- package/dist/graph/view.js +265 -0
- package/dist/graph/write.d.ts +4 -76
- package/dist/graph/write.js +13 -397
- package/dist/hooks/codex-session.js +1 -1
- package/dist/hooks/codex-wrapper.js +16 -17
- package/dist/hooks/copilot.d.ts +1 -8
- package/dist/hooks/copilot.js +16 -16
- package/dist/{cli → hooks}/hook-blocks.d.ts +6 -2
- package/dist/{cli → hooks}/hook-blocks.js +38 -125
- package/dist/hooks/json-hooks.d.ts +5 -37
- package/dist/hooks/json-hooks.js +49 -179
- package/dist/hooks/opencode.d.ts +0 -38
- package/dist/hooks/opencode.js +44 -103
- package/dist/hooks/shared.d.ts +8 -21
- package/dist/hooks/shared.js +30 -25
- package/dist/importers/core.d.ts +13 -42
- package/dist/importers/core.js +48 -64
- package/dist/importers/markdown-parse.d.ts +9 -32
- package/dist/importers/markdown-parse.js +10 -44
- package/dist/importers/markdown.js +5 -13
- package/dist/importers/sources.js +57 -81
- package/dist/importers/vault.d.ts +2 -8
- package/dist/importers/vault.js +95 -172
- package/dist/index.d.ts +26 -22
- package/dist/index.js +25 -21
- package/dist/learn/autolearn.d.ts +29 -0
- package/dist/{autolearn.js → learn/autolearn.js} +26 -51
- package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
- package/dist/{churn-git.js → learn/churn-git.js} +6 -4
- package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
- package/dist/learn/extract.js +123 -0
- package/dist/learn/forward-claim-detector.d.ts +12 -0
- package/dist/learn/forward-claim-detector.js +60 -0
- package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +10 -18
- package/dist/{invalidation.js → learn/invalidation.js} +92 -125
- package/dist/mcp/admin-tools.d.ts +1 -1
- package/dist/mcp/admin-tools.js +39 -64
- package/dist/mcp/format.d.ts +5 -5
- package/dist/mcp/format.js +7 -6
- package/dist/mcp/framing.d.ts +6 -0
- package/dist/mcp/framing.js +11 -3
- package/dist/mcp/memory-tools.js +10 -35
- package/dist/mcp/protocol.d.ts +14 -36
- package/dist/mcp/protocol.js +10 -19
- package/dist/mcp/recall-tools.d.ts +2 -2
- package/dist/mcp/recall-tools.js +70 -52
- package/dist/mcp/request.d.ts +3 -11
- package/dist/mcp/request.js +71 -85
- package/dist/mcp/server.d.ts +3 -9
- package/dist/mcp/server.js +6 -17
- package/dist/mcp/session-state.d.ts +2 -3
- package/dist/mcp/session-state.js +7 -13
- package/dist/mcp/shared-gate.js +1 -1
- package/dist/mcp/stdio.d.ts +2 -6
- package/dist/mcp/stdio.js +112 -38
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +7 -5
- package/dist/objects/customer-notes.d.ts +44 -0
- package/dist/objects/customer-notes.js +71 -0
- package/dist/objects/decisions.d.ts +41 -0
- package/dist/objects/decisions.js +63 -0
- package/dist/objects/descriptor.d.ts +52 -0
- package/dist/objects/descriptor.js +4 -0
- package/dist/objects/fields.d.ts +15 -0
- package/dist/objects/fields.js +21 -0
- package/dist/objects/incidents.d.ts +45 -0
- package/dist/objects/incidents.js +96 -0
- package/dist/objects/lifecycle.d.ts +27 -0
- package/dist/objects/lifecycle.js +96 -0
- package/dist/objects/policies.d.ts +60 -0
- package/dist/objects/policies.js +102 -0
- package/dist/objects/processes.d.ts +43 -0
- package/dist/objects/processes.js +92 -0
- package/dist/objects/project-briefs.d.ts +63 -0
- package/dist/objects/project-briefs.js +194 -0
- package/dist/objects/skills.d.ts +51 -0
- package/dist/objects/skills.js +110 -0
- package/dist/postinstall.js +10 -21
- package/dist/predictions/planning-fallacy.d.ts +14 -109
- package/dist/predictions/planning-fallacy.js +4 -129
- package/dist/rerankers/clef.d.ts +2 -6
- package/dist/rerankers/clef.js +28 -76
- package/dist/rerankers/cross-encoder.d.ts +0 -7
- package/dist/rerankers/cross-encoder.js +18 -28
- package/dist/rerankers/index.js +8 -7
- package/dist/rerankers/jev.d.ts +1 -4
- package/dist/rerankers/jev.js +36 -52
- package/dist/rerankers/llm.d.ts +2 -13
- package/dist/rerankers/llm.js +42 -59
- package/dist/rerankers/outage-warning.d.ts +8 -0
- package/dist/rerankers/outage-warning.js +32 -0
- package/dist/rerankers/remote.d.ts +4 -0
- package/dist/rerankers/remote.js +25 -0
- package/dist/rerankers/types.d.ts +3 -15
- package/dist/search/as-of.d.ts +1 -1
- package/dist/search/bm25-search.d.ts +2 -2
- package/dist/search/bm25-search.js +7 -7
- package/dist/search/bm25.d.ts +1 -1
- package/dist/search/bm25.js +1 -1
- package/dist/search/boosts.d.ts +5 -3
- package/dist/search/boosts.js +36 -15
- package/dist/search/breakdown.d.ts +2 -2
- package/dist/search/breakdown.js +2 -1
- package/dist/search/explain.d.ts +1 -1
- package/dist/search/explain.js +3 -2
- package/dist/search/finalize.d.ts +2 -2
- package/dist/search/finalize.js +4 -3
- package/dist/search/fusion.d.ts +1 -1
- package/dist/search/fusion.js +3 -3
- package/dist/search/goal-boost.d.ts +23 -0
- package/dist/search/goal-boost.js +90 -0
- package/dist/search/hybrid-score.d.ts +2 -2
- package/dist/search/hybrid-score.js +1 -1
- package/dist/search/hybrid.d.ts +6 -4
- package/dist/search/hybrid.js +11 -8
- package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
- package/dist/{multihop.js → search/multihop.js} +9 -8
- package/dist/search/path-context.d.ts +11 -0
- package/dist/{path-context.js → search/path-context.js} +8 -19
- package/dist/search/physics-search.d.ts +4 -4
- package/dist/search/physics-search.js +25 -22
- package/dist/search/rerank.d.ts +3 -3
- package/dist/search/rerank.js +4 -3
- package/dist/search/rrf.d.ts +15 -0
- package/dist/search/rrf.js +36 -0
- package/dist/search/temporal.d.ts +1 -1
- package/dist/search/temporal.js +5 -2
- package/dist/search/vector.d.ts +10 -3
- package/dist/search/vector.js +51 -15
- package/dist/server/auth.d.ts +10 -29
- package/dist/server/auth.js +57 -42
- package/dist/server/boot.d.ts +5 -0
- package/dist/server/boot.js +432 -0
- package/dist/server/client-ip.d.ts +8 -20
- package/dist/server/client-ip.js +23 -34
- package/dist/server/cursor.d.ts +1 -1
- package/dist/server/cursor.js +2 -3
- package/dist/server/deadline.d.ts +13 -0
- package/dist/server/deadline.js +45 -0
- package/dist/server/defaults.d.ts +3 -0
- package/dist/server/defaults.js +4 -0
- package/dist/server/key-check-bounds.d.ts +9 -0
- package/dist/server/key-check-bounds.js +46 -0
- package/dist/server/lifecycle.d.ts +5 -4
- package/dist/server/lifecycle.js +20 -5
- package/dist/server/mcp-http.d.ts +1 -4
- package/dist/server/mcp-http.js +44 -68
- package/dist/server/rate-limit.d.ts +21 -0
- package/dist/{rate-limit.js → server/rate-limit.js} +4 -13
- package/dist/server/ready.d.ts +7 -0
- package/dist/server/ready.js +38 -0
- package/dist/server/request.d.ts +14 -12
- package/dist/server/request.js +71 -28
- package/dist/server/route-table.d.ts +15 -0
- package/dist/server/route-table.js +202 -0
- package/dist/server/routes/admin.js +29 -30
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +35 -105
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +45 -115
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +44 -105
- package/dist/server/routes/memories.js +21 -43
- package/dist/server/routes/object-routes.d.ts +35 -0
- package/dist/server/routes/object-routes.js +72 -0
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +42 -134
- package/dist/server/routes/predictions.js +35 -63
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +44 -134
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +41 -120
- package/dist/server/routes/recall.js +21 -44
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +40 -138
- package/dist/server/server-detect.d.ts +28 -0
- package/dist/server/server-detect.js +156 -0
- package/dist/server/sleep-child.d.ts +2 -0
- package/dist/server/sleep-child.js +19 -0
- package/dist/server/sleep-offload.d.ts +20 -0
- package/dist/server/sleep-offload.js +73 -0
- package/dist/server/tls.d.ts +6 -0
- package/dist/server/tls.js +24 -0
- package/dist/server/types.d.ts +35 -14
- package/dist/server/validation.d.ts +6 -5
- package/dist/server/validation.js +16 -34
- package/dist/server.d.ts +39 -61
- package/dist/server.js +26 -569
- package/dist/sharing/global-store.d.ts +19 -0
- package/dist/sharing/global-store.js +75 -0
- package/dist/sharing/global-sync.d.ts +6 -0
- package/dist/sharing/global-sync.js +80 -0
- package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +5 -6
- package/dist/{project-merge.js → sharing/project-merge.js} +34 -51
- package/dist/sharing/scope.d.ts +7 -0
- package/dist/{scope.js → sharing/scope.js} +5 -12
- package/dist/sharing/search-both.d.ts +60 -0
- package/dist/sharing/search-both.js +138 -0
- package/dist/sharing/share.d.ts +38 -0
- package/dist/sharing/share.js +226 -0
- package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
- package/dist/{ambient-store.js → store/ambient.js} +11 -16
- package/dist/store/audit-event.d.ts +15 -17
- package/dist/store/audit-event.js +9 -16
- package/dist/{audit.d.ts → store/audit.d.ts} +29 -8
- package/dist/{audit.js → store/audit.js} +95 -18
- package/dist/{auth.d.ts → store/auth.d.ts} +19 -36
- package/dist/{auth.js → store/auth.js} +108 -99
- package/dist/store/candidates.d.ts +41 -13
- package/dist/store/candidates.js +141 -60
- package/dist/{card-detail.d.ts → store/card-detail.d.ts} +5 -4
- package/dist/{card-detail.js → store/card-detail.js} +3 -2
- package/dist/{store-cards.d.ts → store/cards.d.ts} +26 -16
- package/dist/{store-cards.js → store/cards.js} +133 -248
- package/dist/store/compactions.d.ts +78 -0
- package/dist/store/compactions.js +93 -0
- package/dist/store/conflicts.d.ts +26 -26
- package/dist/store/conflicts.js +194 -222
- package/dist/store/connectors/github.d.ts +84 -0
- package/dist/store/connectors/github.js +180 -0
- package/dist/store/connectors/slack.d.ts +69 -0
- package/dist/store/connectors/slack.js +177 -0
- package/dist/store/dashboard-reads.d.ts +27 -0
- package/dist/store/dashboard-reads.js +88 -0
- package/dist/store/delete-and-batch.d.ts +27 -51
- package/dist/store/delete-and-batch.js +100 -92
- package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +16 -5
- package/dist/{delivery-recorder.js → store/delivery-recorder.js} +60 -38
- package/dist/store/descendant-page.d.ts +12 -0
- package/dist/store/descendant-page.js +99 -0
- package/dist/store/diagnostics.d.ts +47 -0
- package/dist/store/diagnostics.js +44 -0
- package/dist/store/doctor-reads.d.ts +16 -0
- package/dist/store/doctor-reads.js +19 -0
- package/dist/store/dormant.d.ts +105 -0
- package/dist/store/dormant.js +241 -0
- package/dist/store/embeddings/index.d.ts +36 -0
- package/dist/{embeddings.js → store/embeddings/index.js} +104 -224
- package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
- package/dist/{local-embedding.js → store/embeddings/local.js} +69 -75
- package/dist/store/embeddings/provider.d.ts +40 -0
- package/dist/{embedding-provider.js → store/embeddings/provider.js} +78 -91
- package/dist/store/entry-reads.d.ts +66 -63
- package/dist/store/entry-reads.js +159 -121
- package/dist/store/entry-row.d.ts +14 -37
- package/dist/store/entry-row.js +37 -45
- package/dist/store/entry-writes.d.ts +40 -17
- package/dist/store/entry-writes.js +105 -41
- package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
- package/dist/{failure-log.js → store/failure-log.js} +9 -2
- package/dist/store/goals.d.ts +96 -0
- package/dist/store/goals.js +260 -0
- package/dist/store/graph-queue.d.ts +13 -0
- package/dist/store/graph-queue.js +70 -0
- package/dist/store/graph-reads.d.ts +41 -0
- package/dist/{graph/read.js → store/graph-reads.js} +72 -162
- package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +71 -14
- package/dist/{graph/rows.js → store/graph-rows.js} +20 -12
- package/dist/store/graph-view-rows.d.ts +13 -0
- package/dist/store/graph-view-rows.js +68 -0
- package/dist/store/graph-writes.d.ts +33 -0
- package/dist/store/graph-writes.js +232 -0
- package/dist/store/half-life.d.ts +35 -0
- package/dist/store/half-life.js +75 -0
- package/dist/store/handoffs.d.ts +6 -12
- package/dist/store/handoffs.js +54 -63
- package/dist/store/index-and-stats.d.ts +14 -20
- package/dist/store/index-and-stats.js +74 -119
- package/dist/store/index.d.ts +4 -0
- package/dist/store/index.js +3 -0
- package/dist/store/key-audit.d.ts +2 -2
- package/dist/store/key-audit.js +4 -4
- package/dist/store/key-writes.d.ts +12 -5
- package/dist/store/key-writes.js +30 -4
- package/dist/store/ledger-turn.d.ts +17 -0
- package/dist/store/ledger-turn.js +27 -0
- package/dist/store/markdown.d.ts +3 -7
- package/dist/store/markdown.js +25 -23
- package/dist/store/mirrors.d.ts +7 -13
- package/dist/store/mirrors.js +52 -47
- package/dist/store/object-types.d.ts +189 -0
- package/dist/store/object-types.js +4 -0
- package/dist/store/open.d.ts +6 -4
- package/dist/store/open.js +30 -36
- package/dist/store/planning-fallacy-evidence.d.ts +14 -0
- package/dist/store/planning-fallacy-evidence.js +52 -0
- package/dist/store/port.d.ts +649 -0
- package/dist/store/port.js +17 -0
- package/dist/{predictions/store.d.ts → store/predictions.d.ts} +25 -52
- package/dist/{predictions/store.js → store/predictions.js} +88 -184
- package/dist/{quality-repair.js → store/quality-repair.js} +27 -57
- package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
- package/dist/{quarantine.js → store/quarantine.js} +64 -22
- package/dist/store/raw-archive.d.ts +14 -0
- package/dist/{raw-archive.js → store/raw-archive.js} +20 -31
- package/dist/store/recall-scope.d.ts +78 -0
- package/dist/{recall-scope.js → store/recall-scope.js} +23 -84
- package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -81
- package/dist/{recall-trace.js → store/recall-trace.js} +41 -122
- package/dist/store/rejected-values.d.ts +55 -0
- package/dist/store/rejected-values.js +150 -0
- package/dist/store/rejection.d.ts +54 -0
- package/dist/{rejection.js → store/rejection.js} +16 -67
- package/dist/store/report-reads.d.ts +6 -0
- package/dist/store/report-reads.js +29 -0
- package/dist/store/rows.d.ts +11 -22
- package/dist/store/rows.js +52 -43
- package/dist/store/rule-sql.d.ts +5 -0
- package/dist/store/rule-sql.js +37 -0
- package/dist/store/search-rows.d.ts +22 -42
- package/dist/store/search-rows.js +55 -78
- package/dist/store/sessions.d.ts +23 -49
- package/dist/store/sessions.js +96 -118
- package/dist/store/sqlite/commit-watch.d.ts +4 -0
- package/dist/store/sqlite/commit-watch.js +29 -0
- package/dist/store/sqlite/connector-events-group.d.ts +5 -0
- package/dist/store/sqlite/connector-events-group.js +50 -0
- package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
- package/dist/store/sqlite/connector-writes-group.js +65 -0
- package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
- package/dist/store/sqlite/dag-reads-group.js +45 -0
- package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
- package/dist/store/{entry-writes-group.js → sqlite/entry-writes-group.js} +73 -60
- package/dist/store/sqlite/error-codec.d.ts +17 -0
- package/dist/store/sqlite/error-codec.js +61 -0
- package/dist/store/sqlite/executor-counts.d.ts +10 -0
- package/dist/store/sqlite/executor-counts.js +11 -0
- package/dist/store/sqlite/executor.d.ts +29 -0
- package/dist/store/sqlite/executor.js +287 -0
- package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
- package/dist/store/sqlite/graph-reads-group.js +18 -0
- package/dist/store/sqlite/local.d.ts +21 -0
- package/dist/store/sqlite/local.js +39 -0
- package/dist/store/sqlite/object-rows.d.ts +102 -0
- package/dist/store/sqlite/object-rows.js +221 -0
- package/dist/store/sqlite/objects-group.d.ts +20 -0
- package/dist/store/sqlite/objects-group.js +316 -0
- package/dist/store/sqlite/predictions-group.d.ts +5 -0
- package/dist/store/sqlite/predictions-group.js +28 -0
- package/dist/store/sqlite/quarantine-group.d.ts +5 -0
- package/dist/store/sqlite/quarantine-group.js +38 -0
- package/dist/store/sqlite/store.d.ts +23 -0
- package/dist/store/sqlite/store.js +294 -0
- package/dist/store/sqlite/vector-pack.d.ts +18 -0
- package/dist/store/sqlite/vector-pack.js +46 -0
- package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
- package/dist/store/sqlite/vector-reads-group.js +23 -0
- package/dist/store/sqlite/worker-entry.d.ts +2 -0
- package/dist/store/sqlite/worker-entry.js +8 -0
- package/dist/store/sqlite/worker-jobs.d.ts +5 -0
- package/dist/store/sqlite/worker-jobs.js +116 -0
- package/dist/store/sqlite/worker-ops.d.ts +135 -0
- package/dist/store/sqlite/worker-ops.js +93 -0
- package/dist/store/sqlite/worker-store.d.ts +8 -0
- package/dist/store/sqlite/worker-store.js +79 -0
- package/dist/store/summaries.d.ts +11 -72
- package/dist/store/summaries.js +47 -186
- package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
- package/dist/{summary-dirty.js → store/summary-dirty.js} +1 -1
- package/dist/store/tenant-lookup.d.ts +6 -1
- package/dist/store/tenant-lookup.js +7 -0
- package/dist/store/tenant.d.ts +11 -0
- package/dist/store/tenant.js +28 -0
- package/dist/store/token-ledger-rows.d.ts +61 -0
- package/dist/store/token-ledger-rows.js +68 -0
- package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +14 -51
- package/dist/{token-ledger.js → store/token-ledger.js} +51 -129
- package/dist/store/tombstone-checks.d.ts +12 -0
- package/dist/store/tombstone-checks.js +31 -0
- package/dist/store/usage-reports.d.ts +7 -0
- package/dist/store/usage-reports.js +18 -0
- package/dist/store/vector-index.d.ts +46 -0
- package/dist/store/vector-index.js +170 -0
- package/dist/{working-memory.d.ts → store/working-memory.d.ts} +11 -26
- package/dist/store/working-memory.js +118 -0
- package/dist/{yaml.d.ts → store/yaml.d.ts} +1 -5
- package/dist/{yaml.js → store/yaml.js} +2 -6
- package/dist/support-bundle.d.ts +1 -1
- package/dist/support-bundle.js +19 -37
- package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
- package/dist/{gated-write.js → trust/gated-write.js} +6 -6
- package/dist/trust/quarantine.d.ts +4 -0
- package/dist/trust/quarantine.js +8 -0
- package/dist/trust/reject-flow.d.ts +23 -0
- package/dist/trust/reject-flow.js +65 -0
- package/dist/util/anthropic-messages.d.ts +31 -0
- package/dist/util/anthropic-messages.js +58 -0
- package/dist/util/atomic-write.d.ts +4 -0
- package/dist/util/atomic-write.js +138 -0
- package/dist/util/capped-json.d.ts +6 -0
- package/dist/util/capped-json.js +46 -0
- package/dist/util/crash-handlers.d.ts +12 -0
- package/dist/util/crash-handlers.js +72 -0
- package/dist/{env.d.ts → util/env.d.ts} +27 -7
- package/dist/{env.js → util/env.js} +33 -8
- package/dist/{home-path.d.ts → util/home-path.d.ts} +2 -1
- package/dist/util/home-path.js +69 -0
- package/dist/{http-retry.d.ts → util/http-retry.d.ts} +8 -2
- package/dist/util/http-retry.js +103 -0
- package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
- package/dist/{http-util.js → util/http-util.js} +31 -11
- package/dist/util/json.d.ts +17 -0
- package/dist/util/json.js +25 -0
- package/dist/{log.d.ts → util/log.d.ts} +7 -3
- package/dist/{log.js → util/log.js} +36 -11
- package/dist/util/real-path.d.ts +3 -0
- package/dist/util/real-path.js +15 -0
- package/dist/util/request-scope.d.ts +28 -0
- package/dist/util/request-scope.js +48 -0
- package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
- package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +5 -30
- package/dist/{secret-detect.js → util/secret-detect.js} +17 -42
- package/dist/util/stored-json.d.ts +9 -0
- package/dist/util/stored-json.js +8 -0
- package/dist/util/time.d.ts +2 -0
- package/dist/util/time.js +3 -0
- package/dist/util/token-text.d.ts +15 -0
- package/dist/util/token-text.js +20 -0
- package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +2 -0
- package/dist/util/transcript-tail.js +49 -0
- package/dist/util/version.d.ts +11 -0
- package/dist/util/version.js +26 -0
- package/extensions/openclaw-plugin/index.ts +2 -6
- package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
- package/extensions/openclaw-plugin/package.json +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +2 -2
- package/dist/ablation.d.ts +0 -102
- package/dist/ablation.js +0 -136
- package/dist/api.d.ts +0 -26
- package/dist/api.js +0 -29
- package/dist/audit-prune.d.ts +0 -62
- package/dist/audit-prune.js +0 -107
- package/dist/autolearn.d.ts +0 -56
- package/dist/client.d.ts +0 -48
- package/dist/compare.d.ts +0 -86
- package/dist/compare.js +0 -117
- package/dist/connectors/github/cli-impl.d.ts +0 -25
- package/dist/connectors/github/cli-impl.js +0 -227
- package/dist/connectors/github/idempotency.d.ts +0 -19
- package/dist/connectors/github/idempotency.js +0 -27
- package/dist/connectors/slack/idempotency.d.ts +0 -17
- package/dist/connectors/slack/idempotency.js +0 -31
- package/dist/correction-latency.d.ts +0 -36
- package/dist/customer-notes.d.ts +0 -96
- package/dist/customer-notes.js +0 -336
- package/dist/db.d.ts +0 -9
- package/dist/db.js +0 -8
- package/dist/decisions.d.ts +0 -94
- package/dist/decisions.js +0 -326
- package/dist/dedupe.d.ts +0 -75
- package/dist/dedupe.js +0 -169
- package/dist/dormant.d.ts +0 -93
- package/dist/dormant.js +0 -137
- package/dist/embedding-provider.d.ts +0 -77
- package/dist/embeddings.d.ts +0 -101
- package/dist/extract.js +0 -133
- package/dist/forward-claim-detector.d.ts +0 -36
- package/dist/forward-claim-detector.js +0 -112
- package/dist/goals.d.ts +0 -173
- package/dist/goals.js +0 -448
- package/dist/graph/read.d.ts +0 -73
- package/dist/graph/rows.d.ts +0 -45
- package/dist/graph/types.js +0 -11
- package/dist/graph-stream.d.ts +0 -70
- package/dist/graph-view.d.ts +0 -73
- package/dist/graph-view.js +0 -333
- package/dist/half-life-migration.d.ts +0 -63
- package/dist/half-life-migration.js +0 -182
- package/dist/handoff.js +0 -68
- package/dist/home-path.js +0 -24
- package/dist/http-retry.js +0 -51
- package/dist/incidents.d.ts +0 -103
- package/dist/incidents.js +0 -349
- package/dist/instruction-detect.js +0 -27
- package/dist/json.d.ts +0 -7
- package/dist/json.js +0 -11
- package/dist/ledger-db.d.ts +0 -10
- package/dist/ledger-db.js +0 -42
- package/dist/memory-value-weights.d.ts +0 -19
- package/dist/memory-value.d.ts +0 -113
- package/dist/memory-value.js +0 -250
- package/dist/memory.d.ts +0 -294
- package/dist/memory.js +0 -522
- package/dist/owner-validation.d.ts +0 -42
- package/dist/owner-validation.js +0 -56
- package/dist/path-context.d.ts +0 -24
- package/dist/physics-state.d.ts +0 -39
- package/dist/policies.d.ts +0 -151
- package/dist/policies.js +0 -434
- package/dist/processes.d.ts +0 -108
- package/dist/processes.js +0 -371
- package/dist/project-briefs.d.ts +0 -128
- package/dist/project-briefs.js +0 -523
- package/dist/provenance-coverage.d.ts +0 -18
- package/dist/rate-limit.d.ts +0 -34
- package/dist/raw-archive-mirror-cleanup.d.ts +0 -20
- package/dist/raw-archive.d.ts +0 -24
- package/dist/recall-history.d.ts +0 -131
- package/dist/recall-history.js +0 -227
- package/dist/recall-scope.d.ts +0 -138
- package/dist/refine-llm.d.ts +0 -61
- package/dist/refine-llm.js +0 -167
- package/dist/reject-flow.d.ts +0 -69
- package/dist/reject-flow.js +0 -260
- package/dist/rejection.d.ts +0 -100
- package/dist/replay.d.ts +0 -41
- package/dist/replay.js +0 -122
- package/dist/rrf.d.ts +0 -43
- package/dist/rrf.js +0 -61
- package/dist/scope.d.ts +0 -14
- package/dist/server-detect.d.ts +0 -72
- package/dist/server-detect.js +0 -222
- package/dist/session-owners.d.ts +0 -7
- package/dist/session-owners.js +0 -54
- package/dist/shared.d.ts +0 -186
- package/dist/shared.js +0 -540
- package/dist/skills.d.ts +0 -101
- package/dist/skills.js +0 -367
- package/dist/store/entry-writes-group.d.ts +0 -9
- package/dist/store/vector-writes.d.ts +0 -6
- package/dist/store/vector-writes.js +0 -59
- package/dist/store-port.d.ts +0 -262
- package/dist/store-port.js +0 -178
- package/dist/tenant.d.ts +0 -25
- package/dist/tenant.js +0 -43
- package/dist/trace.d.ts +0 -34
- package/dist/transcript-tail.js +0 -48
- package/dist/version.d.ts +0 -26
- package/dist/version.js +0 -41
- package/dist/working-memory.js +0 -154
- /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
- /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
- /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
- /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
- /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
- /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
- /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
- /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
- /package/dist/{api-errors.js → core/api-errors.js} +0 -0
- /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
- /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
- /package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +0 -0
- /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
- /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
- /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
- /package/dist/{quality-repair.d.ts → store/quality-repair.d.ts} +0 -0
- /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
- /package/dist/{escape.js → util/escape.js} +0 -0
- /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
- /package/dist/{keyset.js → util/keyset.js} +0 -0
- /package/dist/{same-text.js → util/same-text.js} +0 -0
- /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
- /package/dist/{db → util}/sqlite-blocked.js +0 -0
- /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
- /package/dist/{tokenize.js → util/tokenize.js} +0 -0
- /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
- /package/dist/{write-budget.js → util/write-budget.js} +0 -0
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
// Sharing local memories to the global store: transfer scoring, share, peers and auto-share.
|
|
2
|
+
import { BadRequestError, NotFoundError } from '../core/api-errors.js';
|
|
3
|
+
import * as fs from 'fs';
|
|
4
|
+
import * as path from 'path';
|
|
5
|
+
import { generateId, COMPACTION_MEMORY_TAG } from '../core/memory.js';
|
|
6
|
+
import { AGENT_MEMORY_SOURCE_PREFIX, AGENT_MEMORY_TAGS } from '../core/agent-memory-tools.js';
|
|
7
|
+
import { writeEntry } from '../store/entry-writes.js';
|
|
8
|
+
import { loadAllEntries, readEntry } from '../store/entry-reads.js';
|
|
9
|
+
import { tallySources } from '../store/candidates.js';
|
|
10
|
+
import { isPersonalScope } from '../store/recall-scope.js';
|
|
11
|
+
import { fallbackOrigin } from '../core/project-identity.js';
|
|
12
|
+
import { detectSecret } from '../util/secret-detect.js';
|
|
13
|
+
import { isQuarantineScope } from '../trust/quarantine.js';
|
|
14
|
+
import { RejectedValueError } from '../store/rejection.js';
|
|
15
|
+
import { embedMemory, embedAll } from '../store/embeddings/index.js';
|
|
16
|
+
import { duplicateKey, storedTextKeys } from '../util/same-text.js';
|
|
17
|
+
import { isReusable } from '../core/memory-quality.js';
|
|
18
|
+
import { log } from '../util/log.js';
|
|
19
|
+
import { getGlobalRoot, initGlobal } from './global-store.js';
|
|
20
|
+
import { logEmbedAllFailure } from './search-both.js';
|
|
21
|
+
/** Tags that indicate project-specific memories (poor transfer candidates) */
|
|
22
|
+
const PROJECT_SPECIFIC_TAGS = new Set([
|
|
23
|
+
'file-path', 'config', 'deploy', 'cron', 'url', 'auth',
|
|
24
|
+
'field-names', 'column-names', 'api-key', 'endpoint',
|
|
25
|
+
]);
|
|
26
|
+
/** Tags that indicate transferable memories (good transfer candidates) */
|
|
27
|
+
const TRANSFERABLE_TAGS = new Set([
|
|
28
|
+
'error', 'platform', 'windows', 'encoding', 'python', 'shell',
|
|
29
|
+
'powershell', 'quant', 'backtest', 'pattern', 'rule', 'gotcha',
|
|
30
|
+
'sub-agent', 'review', 'best-practice',
|
|
31
|
+
]);
|
|
32
|
+
/** Tags whose rows only a hand-run share or promote may copy to the global store; derived rows inherit them. */
|
|
33
|
+
export const NEVER_AUTO_SHARE_TAGS = new Set([
|
|
34
|
+
'git-learned',
|
|
35
|
+
'session-digest',
|
|
36
|
+
...AGENT_MEMORY_TAGS,
|
|
37
|
+
]);
|
|
38
|
+
export function neverAutoShareTags(sources) {
|
|
39
|
+
return [...NEVER_AUTO_SHARE_TAGS].filter((tag) => sources.some((s) => s.tags.includes(tag)));
|
|
40
|
+
}
|
|
41
|
+
/** Tags whose rows sleep keeps as written: never merged, never sent to LLM extraction. Conflict detection keeps its own list. */
|
|
42
|
+
export const NO_MERGE_TAGS = new Set([
|
|
43
|
+
'extracted',
|
|
44
|
+
'session-digest',
|
|
45
|
+
COMPACTION_MEMORY_TAG,
|
|
46
|
+
...AGENT_MEMORY_TAGS,
|
|
47
|
+
]);
|
|
48
|
+
/** Estimate how well a memory would transfer to other projects.
|
|
49
|
+
* Returns 0..1 where >0.5 = good candidate for sharing. */
|
|
50
|
+
export function transferScore(entry) {
|
|
51
|
+
let score = 0.5; // neutral default
|
|
52
|
+
// Boost for transferable tags
|
|
53
|
+
const transferableCount = entry.tags.filter((t) => TRANSFERABLE_TAGS.has(t)).length;
|
|
54
|
+
score += transferableCount * 0.1;
|
|
55
|
+
// Penalize for project-specific tags
|
|
56
|
+
const specificCount = entry.tags.filter((t) => PROJECT_SPECIFIC_TAGS.has(t)).length;
|
|
57
|
+
score -= specificCount * 0.15;
|
|
58
|
+
// High-retrieval memories are more likely to be universally useful
|
|
59
|
+
if (entry.retrieval_count >= 3)
|
|
60
|
+
score += 0.1;
|
|
61
|
+
// Pinned memories are important to their owner
|
|
62
|
+
if (entry.pinned)
|
|
63
|
+
score += 0.1;
|
|
64
|
+
// Error-tagged memories often encode universal lessons
|
|
65
|
+
if (entry.emotional_valence === 'negative' || entry.emotional_valence === 'critical')
|
|
66
|
+
score += 0.05;
|
|
67
|
+
return Math.min(1, Math.max(0, score));
|
|
68
|
+
}
|
|
69
|
+
/** Share a memory to the global store with attribution (source enriched with project path and timestamp).
|
|
70
|
+
* Returns the new entry, or null if the transfer score is too low. */
|
|
71
|
+
export function shareMemory(localRoot, id, options = {}) {
|
|
72
|
+
// tenantId is optional for single-tenant callers (autoShare passes only `{ force: true }`); MCP/REST hosts MUST pass it so tenant A cannot share
|
|
73
|
+
// tenant B's memory to global (readEntry returns null on a cross-tenant lookup).
|
|
74
|
+
const entry = readEntry(localRoot, id, options.tenantId);
|
|
75
|
+
if (!entry)
|
|
76
|
+
throw new NotFoundError(`Memory not found: ${id}`);
|
|
77
|
+
assertShareable(entry, id);
|
|
78
|
+
const score = transferScore(entry);
|
|
79
|
+
if (score < 0.3 && !options.force)
|
|
80
|
+
return null;
|
|
81
|
+
initGlobal();
|
|
82
|
+
const globalRoot = getGlobalRoot();
|
|
83
|
+
// The label keeps the folder name for a user-global row; a NULL row gets `shared::`, which originFromSource reads as no project.
|
|
84
|
+
const fallbackName = path.basename(path.resolve(localRoot, '..'));
|
|
85
|
+
const originName = entry.origin_project ?? fallbackOrigin(localRoot);
|
|
86
|
+
const label = originName === '' ? fallbackName : (originName ?? '');
|
|
87
|
+
const globalEntry = {
|
|
88
|
+
...entry,
|
|
89
|
+
id: generateId('g'),
|
|
90
|
+
source: `shared:${label}:${new Date().toISOString()}`,
|
|
91
|
+
origin_project: originName,
|
|
92
|
+
};
|
|
93
|
+
writeEntry(globalRoot, globalEntry);
|
|
94
|
+
// Embed here unless the caller opts out: autoShare sets skipEmbed to batch one embedAll(), since embedMemory rewrites the whole index per call.
|
|
95
|
+
if (!options.skipEmbed) {
|
|
96
|
+
void embedMemory(globalRoot, globalEntry);
|
|
97
|
+
}
|
|
98
|
+
return globalEntry;
|
|
99
|
+
}
|
|
100
|
+
function assertShareable(entry, id) {
|
|
101
|
+
// Secret veto: secrets never reach the global store, even with --force; throw loudly, since a silent null reads as "low transfer score" and invites retries.
|
|
102
|
+
const secret = detectSecret(entry);
|
|
103
|
+
if (secret.flagged) {
|
|
104
|
+
throw new BadRequestError(`Refusing to share ${id} to the global store: content matches secret material (${secret.reason}). ` +
|
|
105
|
+
`Secrets stay in their owning project's store.`);
|
|
106
|
+
}
|
|
107
|
+
// A quarantined row is unreviewed input, not a lesson; sharing it would spread poison globally.
|
|
108
|
+
if (isQuarantineScope(entry.scope)) {
|
|
109
|
+
throw new BadRequestError(`Refusing to share ${id}: it is quarantined pending review. Approve it first via 'hippo quarantine approve ${id}'.`);
|
|
110
|
+
}
|
|
111
|
+
if (isPersonalScope(entry.scope ?? null)) {
|
|
112
|
+
throw new BadRequestError(`Refusing to share ${id}: it is a personal memory and stays with its owner on this server.`);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/** List all projects that contributed memories to the global store, parsed from 'shared:<project>:' or 'promoted:<path>' sources.
|
|
116
|
+
* `tenantId` filters to one tenant; undefined is host-wide (legacy callers: CLI standalone, dashboard). */
|
|
117
|
+
export function listPeers(globalRoot, tenantId) {
|
|
118
|
+
const root = globalRoot ?? getGlobalRoot();
|
|
119
|
+
if (!fs.existsSync(root))
|
|
120
|
+
return [];
|
|
121
|
+
// Tenant-scoped by default when tenantId provided. Host-wide when
|
|
122
|
+
// undefined (preserves back-compat).
|
|
123
|
+
const tallies = tallySources(root, tenantId).sort((a, b) => (a.first < b.first ? -1 : a.first > b.first ? 1 : 0));
|
|
124
|
+
const peerMap = new Map();
|
|
125
|
+
for (const tally of tallies) {
|
|
126
|
+
let project = 'unknown';
|
|
127
|
+
if (tally.source.startsWith('shared:')) {
|
|
128
|
+
const parts = tally.source.split(':');
|
|
129
|
+
project = parts[1] || 'unknown';
|
|
130
|
+
}
|
|
131
|
+
else if (tally.source.startsWith('promoted:')) {
|
|
132
|
+
const promotedPath = tally.source.slice('promoted:'.length);
|
|
133
|
+
project = path.basename(path.resolve(promotedPath, '..'));
|
|
134
|
+
}
|
|
135
|
+
else if (tally.source === 'cli-global') {
|
|
136
|
+
project = 'global-cli';
|
|
137
|
+
}
|
|
138
|
+
const existing = peerMap.get(project);
|
|
139
|
+
if (!existing) {
|
|
140
|
+
peerMap.set(project, { count: tally.count, latest: tally.latest });
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
existing.count += tally.count;
|
|
144
|
+
if (tally.latest > existing.latest)
|
|
145
|
+
existing.latest = tally.latest;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
return Array.from(peerMap.entries())
|
|
149
|
+
.map(([project, data]) => ({ project, ...data }))
|
|
150
|
+
.sort((a, b) => b.count - a.count);
|
|
151
|
+
}
|
|
152
|
+
function isAutoShareCandidate(entry, globalContentSet, minScore, stats) {
|
|
153
|
+
// shareMemory refuses quarantined and personal rows; filtering here keeps sleep from aborting on one.
|
|
154
|
+
if (isQuarantineScope(entry.scope ?? null) || isPersonalScope(entry.scope ?? null) || !isReusable(entry))
|
|
155
|
+
return false;
|
|
156
|
+
// Before the score: these rows describe one project only, and a git seed's 'error' tag clears the bar.
|
|
157
|
+
if (entry.tags.some((t) => NEVER_AUTO_SHARE_TAGS.has(t)) || entry.source.startsWith(AGENT_MEMORY_SOURCE_PREFIX)) {
|
|
158
|
+
if (stats)
|
|
159
|
+
stats.neverAutoShareSkipped = (stats.neverAutoShareSkipped ?? 0) + 1;
|
|
160
|
+
return false;
|
|
161
|
+
}
|
|
162
|
+
const score = transferScore(entry);
|
|
163
|
+
if (score < minScore)
|
|
164
|
+
return false;
|
|
165
|
+
// Skip if already shared (same text apart from spacing)
|
|
166
|
+
if (globalContentSet.has(duplicateKey(entry.content)))
|
|
167
|
+
return false;
|
|
168
|
+
// Secret veto, checked LAST so the stats counter only counts rows it withheld (a row failing the score or dedupe gate was never going to share).
|
|
169
|
+
// shareMemory would throw here; filtering keeps the sleep pipeline fail-safe.
|
|
170
|
+
if (detectSecret(entry).flagged) {
|
|
171
|
+
if (stats)
|
|
172
|
+
stats.secretSkipped++;
|
|
173
|
+
return false;
|
|
174
|
+
}
|
|
175
|
+
return true;
|
|
176
|
+
}
|
|
177
|
+
// Rejection containment: shareMemory -> writeEntry can throw RejectedValueError against the GLOBAL store tombstones and abort the autoShare sleep phase.
|
|
178
|
+
// Catch per item like syncGlobalToLocal; writeEntry already audits reject_refusal before rethrowing, so count and continue.
|
|
179
|
+
function shareCandidates(localRoot, candidates, stats) {
|
|
180
|
+
const shared = [];
|
|
181
|
+
let rejectedSkipped = 0;
|
|
182
|
+
for (const entry of candidates) {
|
|
183
|
+
try {
|
|
184
|
+
// skipEmbed: batching invariant, this is a batch producer, so it embeds
|
|
185
|
+
// once via embedAll() below rather than once per row inside shareMemory.
|
|
186
|
+
const result = shareMemory(localRoot, entry.id, { force: true, skipEmbed: true });
|
|
187
|
+
if (result)
|
|
188
|
+
shared.push(result);
|
|
189
|
+
}
|
|
190
|
+
catch (err) {
|
|
191
|
+
if (err instanceof RejectedValueError) {
|
|
192
|
+
rejectedSkipped++;
|
|
193
|
+
if (stats)
|
|
194
|
+
stats.rejectedSkipped = (stats.rejectedSkipped ?? 0) + 1;
|
|
195
|
+
continue;
|
|
196
|
+
}
|
|
197
|
+
throw err;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
if (rejectedSkipped > 0) {
|
|
201
|
+
log.warn(`autoShare: skipped ${rejectedSkipped} candidate(s) refused by the global store's rejection tombstone`);
|
|
202
|
+
}
|
|
203
|
+
return shared;
|
|
204
|
+
}
|
|
205
|
+
/** Auto-share local memories with high transfer scores, not already global and without a NEVER_AUTO_SHARE_TAGS tag; `options.tenantId` scopes the LOCAL read.
|
|
206
|
+
* `options.stats` is an opt-in out-param: `secretSkipped` counts shares the secret veto prevented, `rejectedSkipped` rejection refusals (0 under `dryRun`). */
|
|
207
|
+
export function autoShare(localRoot, options = {}) {
|
|
208
|
+
const { minScore = 0.6, dryRun = false } = options;
|
|
209
|
+
const localEntries = loadAllEntries(localRoot, options.tenantId);
|
|
210
|
+
initGlobal();
|
|
211
|
+
const globalRoot = getGlobalRoot();
|
|
212
|
+
// Host-wide read. The global store IS the union across all tenants;
|
|
213
|
+
// per-tenant filtering on the global root would defeat the purpose.
|
|
214
|
+
const globalEntries = loadAllEntries(globalRoot);
|
|
215
|
+
// Build set of global content hashes to avoid duplicates
|
|
216
|
+
const globalContentSet = storedTextKeys(globalEntries);
|
|
217
|
+
const candidates = localEntries.filter((entry) => isAutoShareCandidate(entry, globalContentSet, minScore, options.stats));
|
|
218
|
+
if (dryRun)
|
|
219
|
+
return candidates;
|
|
220
|
+
const shared = shareCandidates(localRoot, candidates, options.stats);
|
|
221
|
+
if (shared.length > 0) {
|
|
222
|
+
void embedAll(globalRoot).catch((err) => logEmbedAllFailure('autoShare', err));
|
|
223
|
+
}
|
|
224
|
+
return shared;
|
|
225
|
+
}
|
|
226
|
+
//# sourceMappingURL=share.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type AmbientTallies } from '
|
|
1
|
+
import { type AmbientTallies } from '../core/ambient.js';
|
|
2
2
|
/** The rows an ambient summary describes: a context read's envelope, origin partition and tag secret veto. */
|
|
3
3
|
export interface AmbientStoreFilter {
|
|
4
4
|
exactScope?: string;
|
|
@@ -13,4 +13,4 @@ export interface AmbientStoreFilter {
|
|
|
13
13
|
/** Whole-store ambient tallies in one aggregate pass, no row loaded. Content-pattern secrets and session-local
|
|
14
14
|
* rows (own compaction items, a printed handoff's digest) still count: only injection drops them. */
|
|
15
15
|
export declare function loadAmbientTallies(hippoRoot: string, tenantId: string, filter: AmbientStoreFilter): AmbientTallies;
|
|
16
|
-
//# sourceMappingURL=ambient
|
|
16
|
+
//# sourceMappingURL=ambient.d.ts.map
|
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { strengthSql } from './memory.js';
|
|
1
|
+
import { strengthSql } from './rule-sql.js';
|
|
3
2
|
import { scopeAdmitSql } from './recall-scope.js';
|
|
4
|
-
import { SECRET_TAGS } from '
|
|
5
|
-
import { openStore } from './
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
|
|
3
|
+
import { SECRET_TAGS } from '../util/secret-detect.js';
|
|
4
|
+
import { onHandle, openStore } from './open.js';
|
|
5
|
+
import { jsonList } from './candidates.js';
|
|
6
|
+
import { originInSql } from '../core/project-identity.js';
|
|
7
|
+
import { isErrorTagged } from '../core/ambient.js';
|
|
8
|
+
import { DAY_MS } from '../util/time.js';
|
|
10
9
|
// SHORTCUT: mirrors loadContextCandidates' WHERE (request-path snapshots pin the match); share it once store.ts is split.
|
|
11
10
|
function contextRowsWhere(tenantId, filter) {
|
|
12
11
|
const where = ['tenant_id = ?', `COALESCE(superseded_by, '') = ''`, `COALESCE(kind, '') != 'archived'`];
|
|
@@ -40,9 +39,8 @@ function secretTaggedSql() {
|
|
|
40
39
|
export function loadAmbientTallies(hippoRoot, tenantId, filter) {
|
|
41
40
|
const { where, params } = contextRowsWhere(tenantId, filter);
|
|
42
41
|
const secret = secretTaggedSql();
|
|
43
|
-
const sevenDaysAgo = new Date(filter.now.getTime() - 7 *
|
|
44
|
-
|
|
45
|
-
try {
|
|
42
|
+
const sevenDaysAgo = new Date(filter.now.getTime() - 7 * DAY_MS).toISOString();
|
|
43
|
+
return onHandle(hippoRoot, (db) => {
|
|
46
44
|
// SAFETY: one aggregate row whose columns are the aliases named below. Tag lists come back as one JSON array of
|
|
47
45
|
// arrays and are counted in JS, which maps items through String() as parseJsonArray does.
|
|
48
46
|
const row = db.prepare(`SELECT
|
|
@@ -84,9 +82,6 @@ export function loadAmbientTallies(hippoRoot, tenantId, filter) {
|
|
|
84
82
|
maxDagLevel: Number(row.maxDagLevel),
|
|
85
83
|
tagCounts,
|
|
86
84
|
};
|
|
87
|
-
}
|
|
88
|
-
finally {
|
|
89
|
-
closeHippoDb(db);
|
|
90
|
-
}
|
|
85
|
+
}, openStore);
|
|
91
86
|
}
|
|
92
|
-
//# sourceMappingURL=ambient
|
|
87
|
+
//# sourceMappingURL=ambient.js.map
|
|
@@ -1,19 +1,17 @@
|
|
|
1
|
-
import { openHippoDb } from '../db.js';
|
|
2
|
-
import { type AuditOp } from '
|
|
3
|
-
import { RejectedValueError } from '
|
|
4
|
-
import type { JsonValue } from '../json.js';
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
*
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
*
|
|
16
|
-
* rollback could claw back. Best-effort `audit()` semantics: never throws.
|
|
17
|
-
*/
|
|
1
|
+
import { openHippoDb } from '../db/index.js';
|
|
2
|
+
import { type AuditOp } from './audit.js';
|
|
3
|
+
import { RejectedValueError } from './rejection.js';
|
|
4
|
+
import type { JsonValue } from '../util/json.js';
|
|
5
|
+
export interface AuditOptions {
|
|
6
|
+
readonly targetId?: string;
|
|
7
|
+
readonly metadata?: Record<string, JsonValue>;
|
|
8
|
+
readonly actor?: string;
|
|
9
|
+
readonly tenantId?: string;
|
|
10
|
+
}
|
|
11
|
+
/** Emit an audit event for a mutation. Never throws: the SQLite store stays the source of truth,
|
|
12
|
+
* and a failed audit write shows up as missing rows. */
|
|
13
|
+
export declare function audit(db: ReturnType<typeof openHippoDb>, op: AuditOp, options?: AuditOptions): void;
|
|
14
|
+
/** Refusal audit for the rejected-value guard, written by the transaction owner after rollback so the caller's own rollback cannot claw it back.
|
|
15
|
+
* Best-effort like `audit()`: never throws. */
|
|
18
16
|
export declare function auditRejectionRefusal(db: ReturnType<typeof openHippoDb>, err: RejectedValueError, actor: string): void;
|
|
19
17
|
//# sourceMappingURL=audit-event.d.ts.map
|
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
import { resolveTenantId } from '
|
|
2
|
-
import { appendAuditEvent, reportAuditWriteFailure } from '
|
|
3
|
-
/**
|
|
4
|
-
*
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
*/
|
|
8
|
-
export function audit(db, op, targetId, metadata, actor = 'cli', tenantId) {
|
|
1
|
+
import { resolveTenantId } from './tenant.js';
|
|
2
|
+
import { appendAuditEvent, reportAuditWriteFailure } from './audit.js';
|
|
3
|
+
/** Emit an audit event for a mutation. Never throws: the SQLite store stays the source of truth,
|
|
4
|
+
* and a failed audit write shows up as missing rows. */
|
|
5
|
+
export function audit(db, op, options = {}) {
|
|
6
|
+
const { targetId, metadata, actor = 'cli', tenantId } = options;
|
|
9
7
|
try {
|
|
10
8
|
appendAuditEvent(db, {
|
|
11
9
|
tenantId: tenantId ?? resolveTenantId({}),
|
|
@@ -20,14 +18,9 @@ export function audit(db, op, targetId, metadata, actor = 'cli', tenantId) {
|
|
|
20
18
|
reportAuditWriteFailure(op, String(error), targetId);
|
|
21
19
|
}
|
|
22
20
|
}
|
|
23
|
-
/**
|
|
24
|
-
*
|
|
25
|
-
* transaction OWNER post-rollback — writeEntry's catch (no outer tx exists
|
|
26
|
-
* there, so this lands in a fresh implicit transaction) and commitSupersede's
|
|
27
|
-
* catch (after its own ROLLBACK) — never inside a scope the caller's own
|
|
28
|
-
* rollback could claw back. Best-effort `audit()` semantics: never throws.
|
|
29
|
-
*/
|
|
21
|
+
/** Refusal audit for the rejected-value guard, written by the transaction owner after rollback so the caller's own rollback cannot claw it back.
|
|
22
|
+
* Best-effort like `audit()`: never throws. */
|
|
30
23
|
export function auditRejectionRefusal(db, err, actor) {
|
|
31
|
-
audit(db, 'reject_refusal', err.entryId, { digest: err.digest, reason: err.reason }, actor, err.tenantId);
|
|
24
|
+
audit(db, 'reject_refusal', { targetId: err.entryId, metadata: { digest: err.digest, reason: err.reason }, actor, tenantId: err.tenantId });
|
|
32
25
|
}
|
|
33
26
|
//# sourceMappingURL=audit-event.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { type MemoryEntry } from '
|
|
2
|
-
import type
|
|
1
|
+
import { type MemoryEntry } from '../core/memory.js';
|
|
2
|
+
import { type DatabaseSyncLike } from '../db/index.js';
|
|
3
3
|
import type { JsonObject } from './working-memory.js';
|
|
4
|
-
import { type KeysetPosition } from '
|
|
4
|
+
import { type KeysetPosition } from '../util/keyset.js';
|
|
5
5
|
export type AuditSeverity = 'warning' | 'error';
|
|
6
6
|
export interface AuditIssue {
|
|
7
7
|
memoryId: string;
|
|
@@ -32,10 +32,14 @@ export type AuditQueryFields = {
|
|
|
32
32
|
};
|
|
33
33
|
export declare function auditQueryFields(query: string): AuditQueryFields;
|
|
34
34
|
export declare function appendAuditEvent(db: DatabaseSyncLike, opts: AppendAuditOpts): void;
|
|
35
|
+
/** One audit row in the store under `hippoRoot`, as its own write. */
|
|
36
|
+
export declare function recordAuditEvent(hippoRoot: string, event: AppendAuditOpts): void;
|
|
35
37
|
/** For callers that keep a mutation when its audit row fails: the failure is logged and counted, never silent. */
|
|
36
38
|
export declare function reportAuditWriteFailure(op: AuditOp, reason: string, targetId?: string | null): void;
|
|
37
39
|
/** Audit rows this process failed to write; the loopback `/health` body reports it. */
|
|
38
40
|
export declare function auditWriteFailureCount(): number;
|
|
41
|
+
/** Adds the failures a store worker counted on its own thread, so the process reports one number. */
|
|
42
|
+
export declare function addAuditWriteFailures(count: number): void;
|
|
39
43
|
export interface QueryAuditOpts {
|
|
40
44
|
tenantId: string;
|
|
41
45
|
op?: AuditOp;
|
|
@@ -62,10 +66,27 @@ export interface ListAuditAfterOpts {
|
|
|
62
66
|
/** Omit for every tenant (deployment-wide export). */
|
|
63
67
|
tenantId?: string;
|
|
64
68
|
}
|
|
65
|
-
/**
|
|
66
|
-
*
|
|
67
|
-
* and never reused, but deletes (retention prune) leave gaps, so resume from
|
|
68
|
-
* the last id returned, never from a count.
|
|
69
|
-
*/
|
|
69
|
+
/** Cursor read: events with id > afterId, ascending. Retention prune leaves gaps in the ids,
|
|
70
|
+
* so resume from the last id returned, never from a count. */
|
|
70
71
|
export declare function listAuditEventsAfter(db: DatabaseSyncLike, opts: ListAuditAfterOpts): AuditEvent[];
|
|
72
|
+
/** Latest time each target got a good outcome, from the audit rows, read on a handle of its own; unlike queryAuditEvents it has no row cap. */
|
|
73
|
+
export declare function confirmedOutcomeTimes(hippoRoot: string, tenantId: string): Map<string, string>;
|
|
74
|
+
/** An audit row that did not land, with what its write threw. */
|
|
75
|
+
export interface FailedAuditEvent {
|
|
76
|
+
event: AppendAuditOpts;
|
|
77
|
+
error: unknown;
|
|
78
|
+
}
|
|
79
|
+
/** Appends each event as its own write on one handle, so a row that fails drops only itself. Returns the rows that failed, for the caller to report. */
|
|
80
|
+
export declare function recordAuditEventsRowByRow(hippoRoot: string, events: readonly AppendAuditOpts[]): FailedAuditEvent[];
|
|
81
|
+
export interface AuditPrune {
|
|
82
|
+
tenantId: string;
|
|
83
|
+
/** ISO time; rows with `ts` before it go. */
|
|
84
|
+
cutoff: string;
|
|
85
|
+
actor: string;
|
|
86
|
+
olderThanDays: number;
|
|
87
|
+
/** Count the rows and delete nothing. */
|
|
88
|
+
dryRun: boolean;
|
|
89
|
+
}
|
|
90
|
+
/** Deletes a tenant's audit rows older than the cutoff and records the prune in the same write scope, so neither lands alone; returns the row count. */
|
|
91
|
+
export declare function pruneAuditRows(hippoRoot: string, prune: AuditPrune): number;
|
|
71
92
|
//# sourceMappingURL=audit.d.ts.map
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { createHash } from 'node:crypto';
|
|
2
|
-
import { canAutoDelete } from '
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
2
|
+
import { canAutoDelete } from '../core/memory.js';
|
|
3
|
+
import { closeHippoDb, openHippoDb, withWriteScope } from '../db/index.js';
|
|
4
|
+
import { log } from '../util/log.js';
|
|
5
|
+
import { keysetAfter } from '../util/keyset.js';
|
|
6
|
+
import { warnDamagedColumn } from '../util/stored-json.js';
|
|
7
|
+
import { automaticDefect, hasNoSpecificity, isFragment, isReleaseCommitNoise, substantiveWordCount, } from '../core/memory-quality.js';
|
|
6
8
|
export function auditMemory(entry, backsObject = false) {
|
|
7
9
|
const issue = classifyMemory(entry);
|
|
8
10
|
// Error means "auto-remove"; a pinned, raw, kept-for-good or object-backing row is never auto-removed, so it can only warn.
|
|
@@ -53,9 +55,6 @@ export function auditMemories(entries, backing) {
|
|
|
53
55
|
clean: entries.length - issues.length,
|
|
54
56
|
};
|
|
55
57
|
}
|
|
56
|
-
// ---------------------------------------------------------------------------
|
|
57
|
-
// Audit log primitives (append-only mutation trail)
|
|
58
|
-
// ---------------------------------------------------------------------------
|
|
59
58
|
// The one list of audit ops: the AuditOp type, `hippo audit list --op` and GET /v1/audit?op= all read it.
|
|
60
59
|
export const AUDIT_OPS = [
|
|
61
60
|
'remember',
|
|
@@ -136,6 +135,16 @@ export function auditQueryFields(query) {
|
|
|
136
135
|
export function appendAuditEvent(db, opts) {
|
|
137
136
|
db.prepare(`INSERT INTO audit_log (ts, tenant_id, actor, op, target_id, metadata_json) VALUES (?, ?, ?, ?, ?, ?)`).run(new Date().toISOString(), opts.tenantId, opts.actor, opts.op, opts.targetId ?? null, JSON.stringify(opts.metadata ?? {}, bigintSafeReplacer));
|
|
138
137
|
}
|
|
138
|
+
/** One audit row in the store under `hippoRoot`, as its own write. */
|
|
139
|
+
export function recordAuditEvent(hippoRoot, event) {
|
|
140
|
+
const db = openHippoDb(hippoRoot);
|
|
141
|
+
try {
|
|
142
|
+
appendAuditEvent(db, event);
|
|
143
|
+
}
|
|
144
|
+
finally {
|
|
145
|
+
closeHippoDb(db);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
139
148
|
let auditWriteFailures = 0;
|
|
140
149
|
/** For callers that keep a mutation when its audit row fails: the failure is logged and counted, never silent. */
|
|
141
150
|
export function reportAuditWriteFailure(op, reason, targetId) {
|
|
@@ -146,6 +155,10 @@ export function reportAuditWriteFailure(op, reason, targetId) {
|
|
|
146
155
|
export function auditWriteFailureCount() {
|
|
147
156
|
return auditWriteFailures;
|
|
148
157
|
}
|
|
158
|
+
/** Adds the failures a store worker counted on its own thread, so the process reports one number. */
|
|
159
|
+
export function addAuditWriteFailures(count) {
|
|
160
|
+
auditWriteFailures += count;
|
|
161
|
+
}
|
|
149
162
|
export function queryAuditEvents(db, opts) {
|
|
150
163
|
const where = ['tenant_id = ?'];
|
|
151
164
|
const params = [opts.tenantId];
|
|
@@ -166,11 +179,8 @@ export function queryAuditEvents(db, opts) {
|
|
|
166
179
|
.all(...params, ...after.params, limit);
|
|
167
180
|
return rows.map(rowToAuditEvent);
|
|
168
181
|
}
|
|
169
|
-
/**
|
|
170
|
-
*
|
|
171
|
-
* and never reused, but deletes (retention prune) leave gaps, so resume from
|
|
172
|
-
* the last id returned, never from a count.
|
|
173
|
-
*/
|
|
182
|
+
/** Cursor read: events with id > afterId, ascending. Retention prune leaves gaps in the ids,
|
|
183
|
+
* so resume from the last id returned, never from a count. */
|
|
174
184
|
export function listAuditEventsAfter(db, opts) {
|
|
175
185
|
if (!Number.isInteger(opts.afterId) || opts.afterId < 0) {
|
|
176
186
|
throw new RangeError('afterId must be a non-negative integer');
|
|
@@ -191,6 +201,37 @@ export function listAuditEventsAfter(db, opts) {
|
|
|
191
201
|
.all(...params, limit);
|
|
192
202
|
return rows.map(rowToAuditEvent);
|
|
193
203
|
}
|
|
204
|
+
/** How many of a tenant's audit rows are older than `cutoff`. */
|
|
205
|
+
function countAuditBefore(db, tenantId, cutoff) {
|
|
206
|
+
// SAFETY: row comes from `SELECT COUNT(*) AS c`; COUNT(*) always yields exactly one row with a
|
|
207
|
+
// numeric `c` column (number or bigint depending on the node:sqlite driver's integer handling).
|
|
208
|
+
const row = db
|
|
209
|
+
.prepare(`SELECT COUNT(*) AS c FROM audit_log WHERE tenant_id = ? AND ts < ?`)
|
|
210
|
+
.get(tenantId, cutoff);
|
|
211
|
+
return Number(row.c);
|
|
212
|
+
}
|
|
213
|
+
/** Deletes a tenant's audit rows older than `cutoff`; returns how many went. */
|
|
214
|
+
function deleteAuditBefore(db, tenantId, cutoff) {
|
|
215
|
+
const result = db
|
|
216
|
+
.prepare(`DELETE FROM audit_log WHERE tenant_id = ? AND ts < ?`)
|
|
217
|
+
.run(tenantId, cutoff);
|
|
218
|
+
return Number(result.changes ?? 0);
|
|
219
|
+
}
|
|
220
|
+
/** Latest time each target got a good outcome, from the audit rows, read on a handle of its own; unlike queryAuditEvents it has no row cap. */
|
|
221
|
+
export function confirmedOutcomeTimes(hippoRoot, tenantId) {
|
|
222
|
+
const db = openHippoDb(hippoRoot);
|
|
223
|
+
try {
|
|
224
|
+
// SAFETY: the SELECT list is exactly target_id and ts; no other shape reaches this cast.
|
|
225
|
+
const rows = db.prepare(`SELECT target_id, MAX(ts) AS ts FROM audit_log
|
|
226
|
+
WHERE tenant_id = ? AND op = 'outcome' AND target_id IS NOT NULL
|
|
227
|
+
AND json_extract(metadata_json, '$.good') = 1
|
|
228
|
+
GROUP BY target_id`).all(tenantId);
|
|
229
|
+
return new Map(rows.map((r) => [r.target_id, r.ts]));
|
|
230
|
+
}
|
|
231
|
+
finally {
|
|
232
|
+
closeHippoDb(db);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
194
235
|
const AUDIT_COLUMNS = 'id, ts, tenant_id, actor, op, target_id, metadata_json';
|
|
195
236
|
function rowToAuditEvent(r) {
|
|
196
237
|
return {
|
|
@@ -202,21 +243,57 @@ function rowToAuditEvent(r) {
|
|
|
202
243
|
// typed AuditOp at the INSERT call site, so every stored value is a valid AuditOp.
|
|
203
244
|
op: r.op,
|
|
204
245
|
targetId: r.target_id,
|
|
205
|
-
metadata: safeJsonParse(r.metadata_json),
|
|
246
|
+
metadata: safeJsonParse(r.metadata_json, r.id),
|
|
206
247
|
};
|
|
207
248
|
}
|
|
208
|
-
function safeJsonParse(raw) {
|
|
249
|
+
function safeJsonParse(raw, id) {
|
|
209
250
|
try {
|
|
210
251
|
const v = JSON.parse(raw);
|
|
211
|
-
// SAFETY: JSON.parse
|
|
212
|
-
//
|
|
213
|
-
// (both are valid JsonObject shapes for our purposes), matching the prior
|
|
214
|
-
// `typeof v === 'object' && v !== null` check without using typeof.
|
|
252
|
+
// SAFETY: JSON.parse returns only an object, array or primitive; `instanceof Object` is true for the first two,
|
|
253
|
+
// both valid JsonObject shapes here.
|
|
215
254
|
return v instanceof Object ? v : {};
|
|
216
255
|
}
|
|
217
256
|
catch {
|
|
218
257
|
// Malformed metadata reads as empty so the audit row itself stays listable.
|
|
258
|
+
warnDamagedColumn({ table: 'audit_log', id, column: 'metadata_json' }, 'not valid JSON');
|
|
219
259
|
return {};
|
|
220
260
|
}
|
|
221
261
|
}
|
|
262
|
+
/** Appends each event as its own write on one handle, so a row that fails drops only itself. Returns the rows that failed, for the caller to report. */
|
|
263
|
+
export function recordAuditEventsRowByRow(hippoRoot, events) {
|
|
264
|
+
const db = openHippoDb(hippoRoot);
|
|
265
|
+
try {
|
|
266
|
+
const failed = [];
|
|
267
|
+
for (const event of events) {
|
|
268
|
+
try {
|
|
269
|
+
appendAuditEvent(db, event);
|
|
270
|
+
}
|
|
271
|
+
catch (error) {
|
|
272
|
+
failed.push({ event, error });
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
return failed;
|
|
276
|
+
}
|
|
277
|
+
finally {
|
|
278
|
+
closeHippoDb(db);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
/** Deletes a tenant's audit rows older than the cutoff and records the prune in the same write scope, so neither lands alone; returns the row count. */
|
|
282
|
+
export function pruneAuditRows(hippoRoot, prune) {
|
|
283
|
+
const { tenantId, cutoff, actor, olderThanDays } = prune;
|
|
284
|
+
const db = openHippoDb(hippoRoot);
|
|
285
|
+
try {
|
|
286
|
+
if (prune.dryRun)
|
|
287
|
+
return countAuditBefore(db, tenantId, cutoff);
|
|
288
|
+
return withWriteScope(db, 'audit_prune', () => {
|
|
289
|
+
const count = deleteAuditBefore(db, tenantId, cutoff);
|
|
290
|
+
// Written after the delete with ts = now, so the cutoff just applied cannot take it.
|
|
291
|
+
appendAuditEvent(db, { tenantId, actor, op: 'audit_prune', metadata: { cutoff, count, dryRun: false, olderThanDays } });
|
|
292
|
+
return count;
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
finally {
|
|
296
|
+
closeHippoDb(db);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
222
299
|
//# sourceMappingURL=audit.js.map
|