hippo-memory 1.69.0 → 1.70.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -2
- package/dist/agent-memories/apply.d.ts +3 -3
- package/dist/agent-memories/apply.js +16 -31
- package/dist/agent-memories/claude-code.d.ts +1 -3
- package/dist/agent-memories/claude-code.js +11 -7
- package/dist/agent-memories/copilot.js +3 -2
- package/dist/agent-memories/files.js +3 -2
- package/dist/agent-memories/gemini.js +6 -5
- package/dist/agent-memories/keys.js +3 -2
- package/dist/agent-memories/legacy.d.ts +2 -2
- package/dist/agent-memories/legacy.js +2 -2
- package/dist/agent-memories/report.d.ts +1 -1
- package/dist/agent-memories/report.js +1 -1
- package/dist/agent-memories/source.d.ts +1 -1
- package/dist/agent-memories/source.js +6 -5
- package/dist/agent-memories/sync.d.ts +1 -1
- package/dist/agent-memories/sync.js +24 -33
- package/dist/agent-memories/types.d.ts +1 -1
- package/dist/api/assemble.d.ts +2 -2
- package/dist/api/assemble.js +42 -32
- package/dist/api/audit.d.ts +4 -7
- package/dist/api/audit.js +6 -20
- package/dist/api/auth.d.ts +5 -18
- package/dist/api/auth.js +44 -194
- package/dist/api/auto-sleep.d.ts +13 -0
- package/dist/api/auto-sleep.js +32 -0
- package/dist/{availability.d.ts → api/availability.d.ts} +2 -2
- package/dist/{availability.js → api/availability.js} +12 -29
- package/dist/{context-auto.js → api/context-auto.js} +2 -1
- package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
- package/dist/{context-render.js → api/context-render.js} +7 -6
- package/dist/api/context-select.d.ts +5 -5
- package/dist/api/context-select.js +37 -45
- package/dist/api/context-types.d.ts +5 -5
- package/dist/api/context.d.ts +2 -4
- package/dist/api/context.js +48 -61
- package/dist/api/dormant.d.ts +3 -3
- package/dist/api/dormant.js +38 -107
- package/dist/api/drill-down.d.ts +2 -2
- package/dist/api/drill-down.js +37 -65
- package/dist/api/forget.d.ts +2 -11
- package/dist/api/forget.js +13 -46
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +2 -2
- package/dist/api/index.d.ts +26 -0
- package/dist/api/index.js +29 -0
- package/dist/api/instruction-detect.js +74 -0
- package/dist/api/learn.js +63 -55
- package/dist/api/ledger-db.d.ts +20 -0
- package/dist/api/ledger-db.js +79 -0
- package/dist/api/on-store.d.ts +16 -0
- package/dist/api/on-store.js +36 -0
- package/dist/api/outcome.d.ts +5 -42
- package/dist/api/outcome.js +15 -80
- package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
- package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
- package/dist/api/promote.d.ts +4 -15
- package/dist/api/promote.js +29 -106
- package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +7 -7
- package/dist/{prompt-hook.js → api/prompt-hook.js} +34 -53
- package/dist/api/quarantine.d.ts +5 -5
- package/dist/api/quarantine.js +30 -106
- package/dist/api/recall-core.d.ts +4 -0
- package/dist/api/recall-core.js +112 -0
- package/dist/{recall-history.js → api/recall-history.js} +30 -25
- package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +5 -5
- package/dist/{recall-pipeline.js → api/recall-pipeline.js} +47 -42
- package/dist/api/recall-record.d.ts +10 -13
- package/dist/api/recall-record.js +10 -30
- package/dist/api/recall-request.d.ts +2 -2
- package/dist/api/recall-request.js +3 -3
- package/dist/api/recall-types.d.ts +41 -16
- package/dist/api/recall.d.ts +1 -1
- package/dist/api/recall.js +39 -37
- package/dist/api/remember.d.ts +10 -12
- package/dist/api/remember.js +29 -45
- package/dist/api/session-owners.d.ts +4 -0
- package/dist/api/session-owners.js +17 -0
- package/dist/api/sleep-run.d.ts +7 -7
- package/dist/api/sleep-run.js +63 -75
- package/dist/api/sleep.d.ts +1 -1
- package/dist/api/tokens.d.ts +2 -2
- package/dist/api/tokens.js +9 -21
- package/dist/api/types.d.ts +2 -2
- package/dist/api/types.js +1 -1
- package/dist/capture/caller-session.d.ts +2 -2
- package/dist/capture/caller-session.js +8 -8
- package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
- package/dist/{capture-error.js → capture/capture-error.js} +7 -7
- package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
- package/dist/capture/command.d.ts +1 -1
- package/dist/capture/command.js +54 -41
- package/dist/capture/compact-resume-caller.d.ts +1 -1
- package/dist/capture/compact-resume-caller.js +7 -7
- package/dist/capture/compact.d.ts +4 -1
- package/dist/capture/compact.js +40 -22
- package/dist/capture/compaction-items-caller.d.ts +1 -1
- package/dist/capture/compaction-items-caller.js +7 -5
- package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
- package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
- package/dist/{compaction-record.js → capture/compaction-record.js} +48 -94
- package/dist/{compaction-spool.js → capture/compaction-spool.js} +17 -13
- package/dist/capture/copilot-transcript.js +1 -1
- package/dist/capture/extract.js +2 -2
- package/dist/capture/failure-caller.d.ts +2 -2
- package/dist/capture/failure-caller.js +6 -6
- package/dist/capture/failure-reading.d.ts +2 -5
- package/dist/capture/failure-reading.js +11 -12
- package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
- package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
- package/dist/capture/pre-compact-caller.d.ts +1 -1
- package/dist/capture/pre-compact-caller.js +2 -2
- package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +1 -5
- package/dist/{session-digest.js → capture/session-digest.js} +17 -23
- package/dist/capture/session-end-caller.d.ts +2 -2
- package/dist/capture/session-end-caller.js +1 -1
- package/dist/capture/session-texts.d.ts +1 -1
- package/dist/capture/session-texts.js +5 -5
- package/dist/capture/session-worker.js +6 -4
- package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
- package/dist/capture/transcript.js +68 -74
- package/dist/capture/working-state.d.ts +0 -3
- package/dist/capture/working-state.js +7 -7
- package/dist/{audit-prune.d.ts → cli/audit-prune.d.ts} +1 -2
- package/dist/{audit-prune.js → cli/audit-prune.js} +5 -39
- package/dist/cli/audit.d.ts +2 -2
- package/dist/cli/audit.js +77 -72
- package/dist/cli/auth.d.ts +2 -1
- package/dist/cli/auth.js +18 -20
- package/dist/cli/briefs.d.ts +4 -3
- package/dist/cli/briefs.js +59 -181
- package/dist/cli/card.d.ts +2 -1
- package/dist/cli/card.js +25 -23
- package/dist/{client.d.ts → cli/client.d.ts} +1 -1
- package/dist/{client.js → cli/client.js} +1 -1
- package/dist/cli/compact-resume-payload.d.ts +8 -0
- package/dist/cli/compact-resume-payload.js +39 -0
- package/dist/cli/context.d.ts +2 -13
- package/dist/cli/context.js +41 -71
- package/dist/cli/continuity.d.ts +6 -5
- package/dist/cli/continuity.js +109 -99
- package/dist/{correction-latency.d.ts → cli/correction-latency.d.ts} +1 -1
- package/dist/cli/curate.d.ts +9 -9
- package/dist/cli/curate.js +177 -149
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +46 -34
- package/dist/cli/decisions.d.ts +4 -3
- package/dist/cli/decisions.js +108 -218
- package/dist/cli/eval.d.ts +1 -3
- package/dist/cli/eval.js +43 -31
- package/dist/cli/explain.d.ts +1 -1
- package/dist/cli/explain.js +35 -19
- package/dist/cli/flag-values.d.ts +25 -0
- package/dist/cli/flag-values.js +103 -0
- package/dist/cli/flags.d.ts +303 -0
- package/dist/cli/flags.js +169 -0
- package/dist/cli/goals.d.ts +2 -1
- package/dist/cli/goals.js +39 -34
- package/dist/cli/hook-runtime.d.ts +49 -0
- package/dist/cli/hook-runtime.js +155 -0
- package/dist/cli/init.d.ts +2 -1
- package/dist/cli/init.js +151 -118
- package/dist/cli/install-steps.d.ts +7 -0
- package/dist/cli/install-steps.js +110 -0
- package/dist/cli/last-sleep.d.ts +2 -1
- package/dist/cli/last-sleep.js +9 -7
- package/dist/cli/maintenance.d.ts +5 -4
- package/dist/cli/maintenance.js +31 -27
- package/dist/cli/object-verbs.d.ts +40 -0
- package/dist/cli/object-verbs.js +65 -0
- package/dist/{owner-validation.d.ts → cli/owner-validation.d.ts} +0 -1
- package/dist/{owner-validation.js → cli/owner-validation.js} +2 -2
- package/dist/cli/playbooks.d.ts +4 -3
- package/dist/cli/playbooks.js +77 -280
- package/dist/cli/print.d.ts +18 -0
- package/dist/cli/print.js +85 -0
- package/dist/cli/projects.d.ts +2 -3
- package/dist/cli/projects.js +56 -49
- package/dist/{provenance-coverage.d.ts → cli/provenance-coverage.d.ts} +1 -1
- package/dist/cli/quality-repair-once.js +4 -4
- package/dist/{quality-repair.js → cli/quality-repair.js} +23 -37
- package/dist/cli/recall.d.ts +2 -4
- package/dist/cli/recall.js +101 -150
- package/dist/{refine-llm.d.ts → cli/refine-llm.d.ts} +1 -1
- package/dist/{refine-llm.js → cli/refine-llm.js} +70 -82
- package/dist/cli/remember.d.ts +1 -3
- package/dist/cli/remember.js +124 -103
- package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +3 -1
- package/dist/{scheduler.js → cli/scheduler.js} +13 -7
- package/dist/cli/serve.d.ts +1 -1
- package/dist/cli/serve.js +34 -4
- package/dist/cli/session-hooks.d.ts +4 -4
- package/dist/cli/session-hooks.js +190 -184
- package/dist/cli/setup.d.ts +2 -1
- package/dist/cli/setup.js +41 -21
- package/dist/cli/shared.d.ts +5 -95
- package/dist/cli/shared.js +18 -369
- package/dist/cli/slack.d.ts +2 -1
- package/dist/cli/slack.js +31 -55
- package/dist/cli/sleep-render.d.ts +4 -0
- package/dist/cli/sleep-render.js +61 -0
- package/dist/cli/sleep.d.ts +2 -8
- package/dist/cli/sleep.js +20 -76
- package/dist/cli/status.d.ts +3 -3
- package/dist/cli/status.js +39 -41
- package/dist/{stdin.js → cli/stdin.js} +6 -6
- package/dist/cli/transfer.d.ts +4 -4
- package/dist/cli/transfer.js +68 -42
- package/dist/cli/usage.js +4 -2
- package/dist/cli.d.ts +289 -5
- package/dist/cli.js +184 -117
- package/dist/connectors/dlq.d.ts +44 -0
- package/dist/connectors/dlq.js +30 -0
- package/dist/connectors/github/backfill.d.ts +1 -1
- package/dist/connectors/github/backfill.js +29 -66
- package/dist/connectors/github/cli-impl.js +59 -74
- package/dist/connectors/github/deletion.d.ts +5 -6
- package/dist/connectors/github/deletion.js +18 -52
- package/dist/connectors/github/dlq.d.ts +7 -61
- package/dist/connectors/github/dlq.js +19 -119
- package/dist/connectors/github/ingest.d.ts +2 -31
- package/dist/connectors/github/ingest.js +20 -83
- package/dist/connectors/github/octokit-client.d.ts +1 -1
- package/dist/connectors/github/octokit-client.js +2 -1
- package/dist/connectors/github/tenant-routing.d.ts +2 -2
- package/dist/connectors/github/tenant-routing.js +10 -36
- package/dist/connectors/github/transform.d.ts +1 -1
- package/dist/connectors/github/types.d.ts +1 -1
- package/dist/connectors/github/types.js +15 -18
- package/dist/connectors/github/webhook.d.ts +3 -2
- package/dist/connectors/github/webhook.js +84 -87
- package/dist/connectors/slack/backfill.d.ts +1 -1
- package/dist/connectors/slack/backfill.js +5 -29
- package/dist/connectors/slack/deletion.d.ts +4 -7
- package/dist/connectors/slack/deletion.js +20 -49
- package/dist/connectors/slack/dlq.d.ts +7 -49
- package/dist/connectors/slack/dlq.js +25 -118
- package/dist/connectors/slack/ingest.d.ts +5 -18
- package/dist/connectors/slack/ingest.js +27 -91
- package/dist/connectors/slack/signature.js +2 -1
- package/dist/connectors/slack/tenant-routing.d.ts +4 -1
- package/dist/connectors/slack/tenant-routing.js +13 -14
- package/dist/connectors/slack/transform.d.ts +1 -1
- package/dist/connectors/slack/types.d.ts +1 -1
- package/dist/connectors/slack/types.js +3 -12
- package/dist/connectors/slack/web-client.js +2 -2
- package/dist/connectors/slack/webhook.d.ts +3 -2
- package/dist/connectors/slack/webhook.js +75 -82
- package/dist/connectors/slack/workspaces.d.ts +4 -17
- package/dist/connectors/slack/workspaces.js +4 -34
- package/dist/consolidate/conflicts.d.ts +1 -1
- package/dist/consolidate/conflicts.js +4 -4
- package/dist/{dag.d.ts → consolidate/dag.d.ts} +1 -1
- package/dist/{dag.js → consolidate/dag.js} +60 -81
- package/dist/consolidate/decay.d.ts +2 -2
- package/dist/consolidate/decay.js +28 -22
- package/dist/{dedupe.js → consolidate/dedupe.js} +11 -19
- package/dist/consolidate/flush-units.d.ts +2 -2
- package/dist/{half-life-migration.d.ts → consolidate/half-life-migration.d.ts} +3 -9
- package/dist/consolidate/half-life-migration.js +106 -0
- package/dist/consolidate/llm-passes.js +8 -8
- package/dist/{memory-value.d.ts → consolidate/memory-value.d.ts} +7 -2
- package/dist/{memory-value.js → consolidate/memory-value.js} +9 -7
- package/dist/consolidate/merge.js +57 -54
- package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
- package/dist/{merged-row.js → consolidate/merged-row.js} +2 -2
- package/dist/consolidate/physics-pass.js +46 -46
- package/dist/{replay.d.ts → consolidate/replay.d.ts} +1 -1
- package/dist/{replay.js → consolidate/replay.js} +2 -2
- package/dist/consolidate/run.d.ts +7 -13
- package/dist/consolidate/run.js +6 -37
- package/dist/consolidate/sleep.d.ts +1 -1
- package/dist/consolidate/sleep.js +64 -134
- package/dist/{trace.js → consolidate/trace.js} +4 -6
- package/dist/consolidate/traces.js +34 -29
- package/dist/{ablation.js → core/ablation.js} +1 -1
- package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
- package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
- package/dist/{ambient.js → core/ambient.js} +12 -10
- package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +13 -2
- package/dist/{capture-contract.js → core/capture-contract.js} +64 -0
- package/dist/{compare.d.ts → core/compare.d.ts} +2 -0
- package/dist/{compare.js → core/compare.js} +10 -3
- package/dist/{config.d.ts → core/config.d.ts} +6 -6
- package/dist/{config.js → core/config.js} +99 -72
- package/dist/core/handoff.js +87 -0
- package/dist/{memory-quality.js → core/memory-quality.js} +1 -1
- package/dist/{memory.d.ts → core/memory.d.ts} +17 -5
- package/dist/{memory.js → core/memory.js} +110 -82
- package/dist/{physics.d.ts → core/physics.d.ts} +1 -1
- package/dist/{physics.js → core/physics.js} +2 -1
- package/dist/{project-identity.d.ts → core/project-identity.d.ts} +0 -5
- package/dist/{project-identity.js → core/project-identity.js} +5 -17
- package/dist/{project-remote.js → core/project-remote.js} +4 -4
- package/dist/{prompt-recall.js → core/prompt-recall.js} +1 -1
- package/dist/{salience.js → core/salience.js} +35 -20
- package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
- package/dist/{search/types.js → core/search-types.js} +1 -1
- package/dist/core/session-digest-row.d.ts +5 -0
- package/dist/core/session-digest-row.js +6 -0
- package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
- package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +5 -5
- package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
- package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
- package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +9 -9
- package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +101 -104
- package/dist/{dashboard.js → dashboard/dashboard.js} +124 -53
- package/dist/db/backup.js +1 -1
- package/dist/db/busy.d.ts +18 -1
- package/dist/db/busy.js +74 -9
- package/dist/db/connect.d.ts +10 -2
- package/dist/db/connect.js +43 -10
- package/dist/db/index.d.ts +9 -0
- package/dist/db/index.js +8 -0
- package/dist/db/meta.d.ts +4 -0
- package/dist/db/meta.js +11 -1
- package/dist/db/migrate.d.ts +8 -1
- package/dist/db/migrate.js +25 -30
- package/dist/db/migrations/v08.js +1 -1
- package/dist/db/migrations/v14.js +39 -35
- package/dist/db/migrations/v16.js +29 -26
- package/dist/db/migrations/v18.js +6 -5
- package/dist/db/migrations/v20.js +4 -2
- package/dist/db/migrations/v22.js +39 -36
- package/dist/db/migrations/v24.js +27 -22
- package/dist/db/migrations/v29.js +37 -32
- package/dist/db/migrations/v31.js +36 -31
- package/dist/db/migrations/v35.js +1 -1
- package/dist/db/migrations/v39.js +1 -1
- package/dist/db/migrations/v40.js +15 -14
- package/dist/db/migrations/v43.js +7 -6
- package/dist/db/migrations/v44.js +1 -1
- package/dist/db/migrations/v45.js +1 -1
- package/dist/db/migrations/v46.js +1 -1
- package/dist/db/migrations/v47.js +1 -1
- package/dist/db/migrations/v48.js +1 -1
- package/dist/db/migrations/v49.js +1 -1
- package/dist/db/migrations/v50.js +8 -7
- package/dist/db/migrations/v52.js +1 -1
- package/dist/db/open.d.ts +9 -1
- package/dist/db/open.js +21 -4
- package/dist/{physics-state.d.ts → db/physics-state.d.ts} +3 -3
- package/dist/{physics-state.js → db/physics-state.js} +9 -16
- package/dist/{raw-archive-mirror-cleanup.d.ts → db/raw-archive-mirror-cleanup.d.ts} +5 -5
- package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +11 -6
- package/dist/db/request-stores.d.ts +15 -2
- package/dist/db/request-stores.js +37 -15
- package/dist/db/tables.d.ts +2 -0
- package/dist/db/tables.js +6 -0
- package/dist/{vector-store.d.ts → db/vector-store.d.ts} +4 -2
- package/dist/{vector-store.js → db/vector-store.js} +76 -51
- package/dist/db/wal-checkpointer.d.ts +11 -0
- package/dist/db/wal-checkpointer.js +92 -0
- package/dist/doctor.js +105 -136
- package/dist/entry/json-hooks.d.ts +1 -1
- package/dist/entry/json-hooks.js +1 -1
- package/dist/entry/project-identity.d.ts +1 -1
- package/dist/entry/project-identity.js +1 -1
- package/dist/entry/session-text.d.ts +3 -3
- package/dist/entry/session-text.js +3 -3
- package/dist/{eval-stats.js → eval/eval-stats.js} +12 -9
- package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +1 -1
- package/dist/{eval-suite.js → eval/eval-suite.js} +25 -23
- package/dist/{eval.d.ts → eval/eval.d.ts} +1 -1
- package/dist/{eval.js → eval/eval.js} +29 -22
- package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -3
- package/dist/{judgment.js → eval/judgment.js} +4 -9
- package/dist/extensions/openclaw-plugin/index.js +1 -2
- package/dist/graph/delta.d.ts +3 -2
- package/dist/graph/delta.js +9 -23
- package/dist/{graph-extract.d.ts → graph/extract.d.ts} +6 -6
- package/dist/{graph-extract.js → graph/extract.js} +37 -52
- package/dist/{graph-recall.d.ts → graph/recall.d.ts} +2 -2
- package/dist/{graph-recall.js → graph/recall.js} +55 -36
- package/dist/{graph-stream.d.ts → graph/stream.d.ts} +2 -2
- package/dist/{graph-stream.js → graph/stream.js} +9 -7
- package/dist/{graph-view.d.ts → graph/view.d.ts} +6 -3
- package/dist/{graph-view.js → graph/view.js} +127 -167
- package/dist/graph/write.d.ts +4 -76
- package/dist/graph/write.js +13 -397
- package/dist/hooks/codex-session.js +1 -1
- package/dist/hooks/codex-wrapper.js +14 -15
- package/dist/hooks/copilot.d.ts +1 -8
- package/dist/hooks/copilot.js +14 -15
- package/dist/{cli → hooks}/hook-blocks.js +1 -1
- package/dist/hooks/json-hooks.d.ts +1 -1
- package/dist/hooks/json-hooks.js +31 -122
- package/dist/hooks/opencode.js +35 -27
- package/dist/hooks/shared.d.ts +0 -4
- package/dist/hooks/shared.js +1 -5
- package/dist/importers/core.d.ts +2 -6
- package/dist/importers/core.js +41 -39
- package/dist/importers/markdown-parse.d.ts +1 -10
- package/dist/importers/markdown-parse.js +2 -19
- package/dist/importers/markdown.js +2 -1
- package/dist/importers/sources.js +50 -46
- package/dist/importers/vault.js +71 -92
- package/dist/index.d.ts +22 -22
- package/dist/index.js +21 -21
- package/dist/{autolearn.d.ts → learn/autolearn.d.ts} +2 -2
- package/dist/{autolearn.js → learn/autolearn.js} +13 -11
- package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
- package/dist/{churn-git.js → learn/churn-git.js} +6 -4
- package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
- package/dist/learn/extract.js +125 -0
- package/dist/{forward-claim-detector.d.ts → learn/forward-claim-detector.d.ts} +1 -1
- package/dist/{forward-claim-detector.js → learn/forward-claim-detector.js} +1 -1
- package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +4 -0
- package/dist/{invalidation.js → learn/invalidation.js} +83 -99
- package/dist/mcp/admin-tools.d.ts +1 -1
- package/dist/mcp/admin-tools.js +37 -60
- package/dist/mcp/format.d.ts +5 -5
- package/dist/mcp/format.js +7 -6
- package/dist/mcp/framing.d.ts +6 -0
- package/dist/mcp/framing.js +11 -3
- package/dist/mcp/memory-tools.js +7 -27
- package/dist/mcp/protocol.d.ts +6 -10
- package/dist/mcp/protocol.js +8 -14
- package/dist/mcp/recall-tools.d.ts +2 -2
- package/dist/mcp/recall-tools.js +68 -50
- package/dist/mcp/request.js +62 -60
- package/dist/mcp/server.js +1 -1
- package/dist/mcp/session-state.d.ts +1 -2
- package/dist/mcp/session-state.js +2 -2
- package/dist/mcp/shared-gate.js +1 -1
- package/dist/mcp/stdio.js +69 -31
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +2 -2
- package/dist/{customer-notes.d.ts → objects/customer-notes.d.ts} +7 -24
- package/dist/objects/customer-notes.js +112 -0
- package/dist/{decisions.d.ts → objects/decisions.d.ts} +13 -28
- package/dist/objects/decisions.js +101 -0
- package/dist/objects/descriptor.d.ts +52 -0
- package/dist/objects/descriptor.js +4 -0
- package/dist/objects/fields.d.ts +15 -0
- package/dist/objects/fields.js +21 -0
- package/dist/{incidents.d.ts → objects/incidents.d.ts} +17 -44
- package/dist/objects/incidents.js +130 -0
- package/dist/objects/lifecycle.d.ts +27 -0
- package/dist/objects/lifecycle.js +96 -0
- package/dist/{policies.d.ts → objects/policies.d.ts} +14 -27
- package/dist/objects/policies.js +189 -0
- package/dist/{processes.d.ts → objects/processes.d.ts} +14 -34
- package/dist/objects/processes.js +146 -0
- package/dist/{project-briefs.d.ts → objects/project-briefs.d.ts} +19 -40
- package/dist/objects/project-briefs.js +255 -0
- package/dist/{skills.d.ts → objects/skills.d.ts} +11 -26
- package/dist/objects/skills.js +156 -0
- package/dist/postinstall.js +4 -2
- package/dist/predictions/planning-fallacy.d.ts +4 -76
- package/dist/predictions/planning-fallacy.js +4 -129
- package/dist/rerankers/clef.d.ts +2 -6
- package/dist/rerankers/clef.js +27 -47
- package/dist/rerankers/cross-encoder.d.ts +0 -7
- package/dist/rerankers/cross-encoder.js +15 -23
- package/dist/rerankers/index.js +8 -7
- package/dist/rerankers/jev.d.ts +1 -4
- package/dist/rerankers/jev.js +30 -49
- package/dist/rerankers/llm.d.ts +2 -4
- package/dist/rerankers/llm.js +33 -50
- package/dist/rerankers/outage-warning.d.ts +7 -0
- package/dist/rerankers/outage-warning.js +31 -0
- package/dist/rerankers/remote.d.ts +3 -0
- package/dist/rerankers/remote.js +23 -0
- package/dist/rerankers/types.d.ts +1 -1
- package/dist/search/as-of.d.ts +1 -1
- package/dist/search/bm25-search.d.ts +2 -2
- package/dist/search/bm25-search.js +7 -7
- package/dist/search/bm25.d.ts +1 -1
- package/dist/search/bm25.js +1 -1
- package/dist/search/boosts.d.ts +5 -1
- package/dist/search/boosts.js +34 -13
- package/dist/search/breakdown.d.ts +2 -2
- package/dist/search/breakdown.js +2 -1
- package/dist/search/explain.d.ts +1 -1
- package/dist/search/explain.js +3 -2
- package/dist/search/finalize.d.ts +2 -2
- package/dist/search/finalize.js +4 -3
- package/dist/search/fusion.d.ts +1 -1
- package/dist/search/fusion.js +3 -3
- package/dist/search/hybrid-score.d.ts +2 -2
- package/dist/search/hybrid-score.js +1 -1
- package/dist/search/hybrid.d.ts +4 -4
- package/dist/search/hybrid.js +11 -8
- package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
- package/dist/{multihop.js → search/multihop.js} +7 -5
- package/dist/{path-context.js → search/path-context.js} +3 -1
- package/dist/search/physics-search.d.ts +4 -4
- package/dist/search/physics-search.js +15 -15
- package/dist/search/rerank.d.ts +3 -3
- package/dist/search/rerank.js +4 -3
- package/dist/search/temporal.d.ts +1 -1
- package/dist/search/temporal.js +5 -2
- package/dist/search/vector.d.ts +3 -3
- package/dist/search/vector.js +17 -11
- package/dist/server/auth.d.ts +1 -1
- package/dist/server/auth.js +26 -18
- package/dist/server/boot.d.ts +24 -0
- package/dist/server/boot.js +465 -0
- package/dist/server/client-ip.d.ts +5 -1
- package/dist/server/client-ip.js +18 -6
- package/dist/server/cursor.d.ts +1 -1
- package/dist/server/cursor.js +2 -3
- package/dist/server/deadline.d.ts +13 -0
- package/dist/server/deadline.js +45 -0
- package/dist/server/key-check-bounds.d.ts +8 -0
- package/dist/server/key-check-bounds.js +46 -0
- package/dist/server/lifecycle.js +1 -1
- package/dist/server/mcp-http.d.ts +1 -4
- package/dist/server/mcp-http.js +34 -24
- package/dist/server/ready.d.ts +7 -0
- package/dist/server/ready.js +38 -0
- package/dist/server/request.d.ts +10 -4
- package/dist/server/request.js +63 -12
- package/dist/server/route-table.d.ts +15 -0
- package/dist/server/route-table.js +209 -0
- package/dist/server/routes/admin.js +13 -8
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +32 -97
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +42 -105
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +42 -95
- package/dist/server/routes/memories.js +12 -14
- package/dist/server/routes/object-routes.d.ts +40 -0
- package/dist/server/routes/object-routes.js +80 -0
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +40 -124
- package/dist/server/routes/predictions.js +29 -45
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +38 -118
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +38 -110
- package/dist/server/routes/recall.js +14 -12
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +37 -125
- package/dist/{server-detect.js → server/server-detect.js} +1 -1
- package/dist/server/sleep-child.d.ts +2 -0
- package/dist/server/sleep-child.js +19 -0
- package/dist/server/sleep-offload.d.ts +20 -0
- package/dist/server/sleep-offload.js +70 -0
- package/dist/server/tls.d.ts +6 -0
- package/dist/server/tls.js +24 -0
- package/dist/server/types.d.ts +27 -8
- package/dist/server/validation.d.ts +3 -4
- package/dist/server/validation.js +6 -11
- package/dist/server.d.ts +39 -61
- package/dist/server.js +24 -568
- package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +1 -1
- package/dist/{project-merge.js → sharing/project-merge.js} +26 -45
- package/dist/{scope.js → sharing/scope.js} +1 -1
- package/dist/{shared.d.ts → sharing/shared.d.ts} +10 -9
- package/dist/{shared.js → sharing/shared.js} +100 -77
- package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
- package/dist/{ambient-store.js → store/ambient.js} +10 -10
- package/dist/store/audit-event.d.ts +11 -5
- package/dist/store/audit-event.js +5 -4
- package/dist/{audit.d.ts → store/audit.d.ts} +27 -3
- package/dist/{audit.js → store/audit.js} +91 -6
- package/dist/{auth.d.ts → store/auth.d.ts} +15 -32
- package/dist/{auth.js → store/auth.js} +100 -92
- package/dist/store/candidates.d.ts +23 -12
- package/dist/store/candidates.js +87 -35
- package/dist/{card-detail.d.ts → store/card-detail.d.ts} +3 -3
- package/dist/{card-detail.js → store/card-detail.js} +1 -1
- package/dist/{store-cards.d.ts → store/cards.d.ts} +14 -9
- package/dist/{store-cards.js → store/cards.js} +85 -146
- package/dist/store/compactions.d.ts +78 -0
- package/dist/store/compactions.js +93 -0
- package/dist/store/conflicts.d.ts +22 -5
- package/dist/store/conflicts.js +160 -109
- package/dist/store/connectors/github.d.ts +84 -0
- package/dist/store/connectors/github.js +180 -0
- package/dist/store/connectors/slack.d.ts +69 -0
- package/dist/store/connectors/slack.js +177 -0
- package/dist/store/dashboard-reads.d.ts +27 -0
- package/dist/store/dashboard-reads.js +92 -0
- package/dist/store/delete-and-batch.d.ts +20 -24
- package/dist/store/delete-and-batch.js +64 -40
- package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +12 -5
- package/dist/{delivery-recorder.js → store/delivery-recorder.js} +42 -30
- package/dist/store/descendant-page.d.ts +12 -0
- package/dist/store/descendant-page.js +99 -0
- package/dist/store/diagnostics.d.ts +47 -0
- package/dist/store/diagnostics.js +51 -0
- package/dist/store/doctor-reads.d.ts +16 -0
- package/dist/store/doctor-reads.js +19 -0
- package/dist/{dormant.d.ts → store/dormant.d.ts} +46 -12
- package/dist/{dormant.js → store/dormant.js} +151 -6
- package/dist/{embeddings.d.ts → store/embeddings/index.d.ts} +10 -6
- package/dist/{embeddings.js → store/embeddings/index.js} +60 -44
- package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
- package/dist/{local-embedding.js → store/embeddings/local.js} +68 -57
- package/dist/{embedding-provider.d.ts → store/embeddings/provider.d.ts} +2 -2
- package/dist/{embedding-provider.js → store/embeddings/provider.js} +47 -32
- package/dist/store/entry-reads.d.ts +46 -7
- package/dist/store/entry-reads.js +120 -21
- package/dist/store/entry-row.d.ts +8 -2
- package/dist/store/entry-row.js +28 -8
- package/dist/store/entry-writes.d.ts +33 -4
- package/dist/store/entry-writes.js +108 -26
- package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
- package/dist/{failure-log.js → store/failure-log.js} +9 -2
- package/dist/{goals.d.ts → store/goals.d.ts} +6 -46
- package/dist/{goals.js → store/goals.js} +45 -94
- package/dist/store/graph-queue.d.ts +29 -0
- package/dist/store/graph-queue.js +101 -0
- package/dist/{graph/read.d.ts → store/graph-reads.d.ts} +26 -34
- package/dist/{graph/read.js → store/graph-reads.js} +63 -115
- package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +68 -8
- package/dist/{graph/rows.js → store/graph-rows.js} +14 -3
- package/dist/store/graph-view-rows.d.ts +12 -0
- package/dist/store/graph-view-rows.js +67 -0
- package/dist/store/graph-writes.d.ts +58 -0
- package/dist/store/graph-writes.js +256 -0
- package/dist/store/half-life.d.ts +34 -0
- package/dist/store/half-life.js +77 -0
- package/dist/store/handoffs.d.ts +1 -1
- package/dist/store/handoffs.js +39 -30
- package/dist/store/index-and-stats.d.ts +8 -1
- package/dist/store/index-and-stats.js +51 -48
- package/dist/store/index.d.ts +4 -0
- package/dist/store/index.js +3 -0
- package/dist/store/key-audit.d.ts +2 -2
- package/dist/store/key-audit.js +4 -4
- package/dist/store/key-writes.d.ts +12 -5
- package/dist/store/key-writes.js +30 -4
- package/dist/store/ledger-turn.d.ts +17 -0
- package/dist/store/ledger-turn.js +27 -0
- package/dist/store/markdown.d.ts +1 -1
- package/dist/store/markdown.js +4 -3
- package/dist/store/mirrors.d.ts +5 -7
- package/dist/store/mirrors.js +39 -25
- package/dist/store/object-types.d.ts +189 -0
- package/dist/store/object-types.js +4 -0
- package/dist/store/open.d.ts +6 -4
- package/dist/store/open.js +24 -23
- package/dist/store/planning-fallacy-evidence.d.ts +42 -0
- package/dist/store/planning-fallacy-evidence.js +81 -0
- package/dist/store/port.d.ts +646 -0
- package/dist/store/port.js +17 -0
- package/dist/{predictions/store.d.ts → store/predictions.d.ts} +15 -2
- package/dist/{predictions/store.js → store/predictions.js} +52 -67
- package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
- package/dist/{quarantine.js → store/quarantine.js} +64 -22
- package/dist/{raw-archive.d.ts → store/raw-archive.d.ts} +3 -1
- package/dist/{raw-archive.js → store/raw-archive.js} +6 -2
- package/dist/{recall-scope.d.ts → store/recall-scope.d.ts} +2 -2
- package/dist/{recall-scope.js → store/recall-scope.js} +3 -3
- package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -14
- package/dist/{recall-trace.js → store/recall-trace.js} +38 -43
- package/dist/store/rejected-values.d.ts +55 -0
- package/dist/store/rejected-values.js +162 -0
- package/dist/{rejection.d.ts → store/rejection.d.ts} +2 -2
- package/dist/{rejection.js → store/rejection.js} +3 -2
- package/dist/store/rows.d.ts +2 -3
- package/dist/store/rows.js +18 -11
- package/dist/store/search-rows.d.ts +15 -4
- package/dist/store/search-rows.js +41 -28
- package/dist/store/sessions.d.ts +13 -2
- package/dist/store/sessions.js +79 -45
- package/dist/store/sqlite/commit-watch.d.ts +4 -0
- package/dist/store/sqlite/commit-watch.js +29 -0
- package/dist/store/sqlite/connector-events-group.d.ts +5 -0
- package/dist/store/sqlite/connector-events-group.js +50 -0
- package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
- package/dist/store/sqlite/connector-writes-group.js +65 -0
- package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
- package/dist/store/sqlite/dag-reads-group.js +45 -0
- package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
- package/dist/store/{entry-writes-group.js → sqlite/entry-writes-group.js} +73 -60
- package/dist/store/sqlite/error-codec.d.ts +17 -0
- package/dist/store/sqlite/error-codec.js +59 -0
- package/dist/store/sqlite/executor-counts.d.ts +10 -0
- package/dist/store/sqlite/executor-counts.js +11 -0
- package/dist/store/sqlite/executor.d.ts +28 -0
- package/dist/store/sqlite/executor.js +286 -0
- package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
- package/dist/store/sqlite/graph-reads-group.js +18 -0
- package/dist/store/sqlite/local.d.ts +21 -0
- package/dist/store/sqlite/local.js +38 -0
- package/dist/store/sqlite/object-rows.d.ts +102 -0
- package/dist/store/sqlite/object-rows.js +218 -0
- package/dist/store/sqlite/objects-group.d.ts +20 -0
- package/dist/store/sqlite/objects-group.js +314 -0
- package/dist/store/sqlite/predictions-group.d.ts +5 -0
- package/dist/store/sqlite/predictions-group.js +28 -0
- package/dist/store/sqlite/quarantine-group.d.ts +5 -0
- package/dist/store/sqlite/quarantine-group.js +38 -0
- package/dist/store/sqlite/store.d.ts +26 -0
- package/dist/store/sqlite/store.js +295 -0
- package/dist/store/sqlite/vector-pack.d.ts +18 -0
- package/dist/store/sqlite/vector-pack.js +46 -0
- package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
- package/dist/store/sqlite/vector-reads-group.js +23 -0
- package/dist/store/sqlite/worker-entry.d.ts +2 -0
- package/dist/store/sqlite/worker-entry.js +8 -0
- package/dist/store/sqlite/worker-jobs.d.ts +5 -0
- package/dist/store/sqlite/worker-jobs.js +116 -0
- package/dist/store/sqlite/worker-ops.d.ts +124 -0
- package/dist/store/sqlite/worker-ops.js +82 -0
- package/dist/store/sqlite/worker-store.d.ts +8 -0
- package/dist/store/sqlite/worker-store.js +76 -0
- package/dist/store/summaries.d.ts +2 -11
- package/dist/store/summaries.js +17 -44
- package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
- package/dist/store/tenant-lookup.d.ts +1 -1
- package/dist/{tenant.d.ts → store/tenant.d.ts} +2 -2
- package/dist/{tenant.js → store/tenant.js} +1 -1
- package/dist/store/token-ledger-rows.d.ts +61 -0
- package/dist/store/token-ledger-rows.js +68 -0
- package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +2 -9
- package/dist/{token-ledger.js → store/token-ledger.js} +31 -78
- package/dist/store/tombstone-checks.d.ts +12 -0
- package/dist/store/tombstone-checks.js +31 -0
- package/dist/store/usage-reports.d.ts +7 -0
- package/dist/store/usage-reports.js +26 -0
- package/dist/store/vector-writes.d.ts +10 -3
- package/dist/store/vector-writes.js +35 -5
- package/dist/{working-memory.d.ts → store/working-memory.d.ts} +5 -1
- package/dist/{working-memory.js → store/working-memory.js} +39 -41
- package/dist/support-bundle.d.ts +1 -1
- package/dist/support-bundle.js +13 -33
- package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
- package/dist/{gated-write.js → trust/gated-write.js} +6 -6
- package/dist/trust/quarantine.d.ts +4 -0
- package/dist/trust/quarantine.js +8 -0
- package/dist/trust/reject-flow.d.ts +23 -0
- package/dist/trust/reject-flow.js +67 -0
- package/dist/util/anthropic-messages.d.ts +31 -0
- package/dist/util/anthropic-messages.js +46 -0
- package/dist/util/atomic-write.d.ts +3 -0
- package/dist/util/atomic-write.js +107 -0
- package/dist/util/crash-handlers.d.ts +5 -0
- package/dist/util/crash-handlers.js +30 -0
- package/dist/{env.d.ts → util/env.d.ts} +15 -2
- package/dist/{env.js → util/env.js} +20 -2
- package/dist/util/home-path.js +67 -0
- package/dist/{http-retry.d.ts → util/http-retry.d.ts} +6 -2
- package/dist/{http-retry.js → util/http-retry.js} +38 -7
- package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
- package/dist/{http-util.js → util/http-util.js} +31 -11
- package/dist/util/json.d.ts +17 -0
- package/dist/util/json.js +25 -0
- package/dist/{log.d.ts → util/log.d.ts} +5 -2
- package/dist/{log.js → util/log.js} +12 -3
- package/dist/util/real-path.d.ts +3 -0
- package/dist/util/real-path.js +15 -0
- package/dist/util/request-scope.d.ts +27 -0
- package/dist/util/request-scope.js +47 -0
- package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
- package/dist/{secret-detect.js → util/secret-detect.js} +5 -4
- package/dist/util/stored-json.d.ts +9 -0
- package/dist/util/stored-json.js +8 -0
- package/dist/util/time.d.ts +2 -0
- package/dist/util/time.js +3 -0
- package/dist/util/token-text.d.ts +18 -0
- package/dist/util/token-text.js +23 -0
- package/dist/{version.d.ts → util/version.d.ts} +1 -1
- package/dist/{version.js → util/version.js} +1 -1
- package/extensions/openclaw-plugin/index.ts +1 -5
- package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
- package/extensions/openclaw-plugin/package.json +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +2 -2
- package/dist/api.d.ts +0 -26
- package/dist/api.js +0 -29
- package/dist/connectors/github/idempotency.d.ts +0 -19
- package/dist/connectors/github/idempotency.js +0 -27
- package/dist/connectors/slack/idempotency.d.ts +0 -17
- package/dist/connectors/slack/idempotency.js +0 -31
- package/dist/customer-notes.js +0 -336
- package/dist/db.d.ts +0 -9
- package/dist/db.js +0 -8
- package/dist/decisions.js +0 -326
- package/dist/extract.js +0 -133
- package/dist/graph/rows.d.ts +0 -45
- package/dist/graph/types.js +0 -11
- package/dist/half-life-migration.js +0 -182
- package/dist/handoff.js +0 -68
- package/dist/home-path.js +0 -24
- package/dist/incidents.js +0 -349
- package/dist/instruction-detect.js +0 -27
- package/dist/json.d.ts +0 -7
- package/dist/json.js +0 -11
- package/dist/ledger-db.d.ts +0 -10
- package/dist/ledger-db.js +0 -42
- package/dist/policies.js +0 -434
- package/dist/processes.js +0 -371
- package/dist/project-briefs.js +0 -523
- package/dist/reject-flow.d.ts +0 -69
- package/dist/reject-flow.js +0 -260
- package/dist/session-owners.d.ts +0 -7
- package/dist/session-owners.js +0 -54
- package/dist/skills.js +0 -367
- package/dist/store/entry-writes-group.d.ts +0 -9
- package/dist/store-port.d.ts +0 -262
- package/dist/store-port.js +0 -178
- /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
- /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
- /package/dist/{recall-history.d.ts → api/recall-history.d.ts} +0 -0
- /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
- /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
- /package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +0 -0
- /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
- /package/dist/{correction-latency.js → cli/correction-latency.js} +0 -0
- /package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +0 -0
- /package/dist/{quality-repair.d.ts → cli/quality-repair.d.ts} +0 -0
- /package/dist/{stdin.d.ts → cli/stdin.d.ts} +0 -0
- /package/dist/{dedupe.d.ts → consolidate/dedupe.d.ts} +0 -0
- /package/dist/{memory-value-weights.d.ts → consolidate/memory-value-weights.d.ts} +0 -0
- /package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +0 -0
- /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
- /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
- /package/dist/{trace.d.ts → consolidate/trace.d.ts} +0 -0
- /package/dist/{ablation.d.ts → core/ablation.d.ts} +0 -0
- /package/dist/{ambient.d.ts → core/ambient.d.ts} +0 -0
- /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
- /package/dist/{api-errors.js → core/api-errors.js} +0 -0
- /package/dist/{card.d.ts → core/card.d.ts} +0 -0
- /package/dist/{card.js → core/card.js} +0 -0
- /package/dist/{handoff.d.ts → core/handoff.d.ts} +0 -0
- /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
- /package/dist/{physics-config.d.ts → core/physics-config.d.ts} +0 -0
- /package/dist/{physics-config.js → core/physics-config.js} +0 -0
- /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
- /package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +0 -0
- /package/dist/{salience.d.ts → core/salience.d.ts} +0 -0
- /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
- /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
- /package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +0 -0
- /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
- /package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +0 -0
- /package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +0 -0
- /package/dist/{cli → hooks}/hook-blocks.d.ts +0 -0
- /package/dist/{path-context.d.ts → search/path-context.d.ts} +0 -0
- /package/dist/{rrf.d.ts → search/rrf.d.ts} +0 -0
- /package/dist/{rrf.js → search/rrf.js} +0 -0
- /package/dist/{rate-limit.d.ts → server/rate-limit.d.ts} +0 -0
- /package/dist/{rate-limit.js → server/rate-limit.js} +0 -0
- /package/dist/{server-detect.d.ts → server/server-detect.d.ts} +0 -0
- /package/dist/{scope.d.ts → sharing/scope.d.ts} +0 -0
- /package/dist/{summary-dirty.js → store/summary-dirty.js} +0 -0
- /package/dist/{yaml.d.ts → store/yaml.d.ts} +0 -0
- /package/dist/{yaml.js → store/yaml.js} +0 -0
- /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
- /package/dist/{escape.js → util/escape.js} +0 -0
- /package/dist/{home-path.d.ts → util/home-path.d.ts} +0 -0
- /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
- /package/dist/{keyset.js → util/keyset.js} +0 -0
- /package/dist/{same-text.js → util/same-text.js} +0 -0
- /package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +0 -0
- /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
- /package/dist/{db → util}/sqlite-blocked.js +0 -0
- /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
- /package/dist/{tokenize.js → util/tokenize.js} +0 -0
- /package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +0 -0
- /package/dist/{transcript-tail.js → util/transcript-tail.js} +0 -0
- /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
- /package/dist/{write-budget.js → util/write-budget.js} +0 -0
|
@@ -1,23 +1,25 @@
|
|
|
1
1
|
// `hippo projects`: list the project names a store holds, fold one into another, and repair old tags in one reversible pass.
|
|
2
2
|
import * as fs from 'node:fs';
|
|
3
3
|
import * as path from 'node:path';
|
|
4
|
-
import { setAsideRow } from '
|
|
5
|
-
import { transcriptNotesProject } from '
|
|
6
|
-
import { containerId, containerPrefix } from '
|
|
7
|
-
import { AGENT_MEMORY_SOURCE_PREFIX, AGENT_MEMORY_TOOLS, toolSourcePrefix } from '
|
|
8
|
-
import { appendAuditEvent, queryAuditEvents } from '
|
|
9
|
-
import { isSharedStore } from '
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
4
|
+
import { setAsideRow } from '../agent-memories/apply.js';
|
|
5
|
+
import { transcriptNotesProject } from '../agent-memories/claude-code.js';
|
|
6
|
+
import { containerId, containerPrefix } from '../agent-memories/source.js';
|
|
7
|
+
import { AGENT_MEMORY_SOURCE_PREFIX, AGENT_MEMORY_TOOLS, toolSourcePrefix } from '../core/agent-memory-tools.js';
|
|
8
|
+
import { appendAuditEvent, queryAuditEvents } from '../store/audit.js';
|
|
9
|
+
import { isSharedStore } from '../core/config.js';
|
|
10
|
+
import { withTrialScope, withWriteScope } from '../db/index.js';
|
|
11
|
+
import { withBackup } from '../db/backup.js';
|
|
12
|
+
import { getMeta, setMeta } from '../db/meta.js';
|
|
13
|
+
import { insertDormantRow, listDormantSnapshots, replaceDormantEntry } from '../store/dormant.js';
|
|
14
|
+
import { processEnv } from '../util/env.js';
|
|
15
|
+
import { calculateStrength } from '../core/memory.js';
|
|
16
|
+
import { isObjectLike, isStringValue } from '../core/capture-contract.js';
|
|
17
|
+
import { isGlobalStoreRoot, projectNames, resolveProjectIdentity } from '../core/project-identity.js';
|
|
18
|
+
import { duplicateKey } from '../util/same-text.js';
|
|
19
|
+
import { compactionOriginsWithCwd, compactionTranscripts, holdsOrigin, restampCompactionOrigin } from '../store/compactions.js';
|
|
20
|
+
import { removeEntryMirrors } from '../store/mirrors.js';
|
|
21
|
+
import { deleteEntryRowInTx, restampOriginProjectAt, stampOriginProjectsAt, writeEntryMirrors } from '../store/entry-writes.js';
|
|
22
|
+
import { selectAllEntries, selectLiveEntriesBySourcePrefix } from '../store/entry-reads.js';
|
|
21
23
|
const ACTOR = 'cli';
|
|
22
24
|
function isImport(entry) {
|
|
23
25
|
return entry.source.startsWith(AGENT_MEMORY_SOURCE_PREFIX);
|
|
@@ -50,19 +52,7 @@ export function listProjects(db, tenantId) {
|
|
|
50
52
|
}).sort((a, b) => b.newest.localeCompare(a.newest));
|
|
51
53
|
}
|
|
52
54
|
function inTransaction(db, dryRun, body) {
|
|
53
|
-
|
|
54
|
-
try {
|
|
55
|
-
const out = body();
|
|
56
|
-
db.exec(dryRun ? 'ROLLBACK' : 'COMMIT');
|
|
57
|
-
return out;
|
|
58
|
-
}
|
|
59
|
-
catch (err) {
|
|
60
|
-
try {
|
|
61
|
-
db.exec('ROLLBACK');
|
|
62
|
-
}
|
|
63
|
-
catch { /* already rolled back; keep the original error */ }
|
|
64
|
-
throw err;
|
|
65
|
-
}
|
|
55
|
+
return dryRun ? withTrialScope(db, 'merge_projects', body) : withWriteScope(db, 'merge_projects', body);
|
|
66
56
|
}
|
|
67
57
|
/** Refuses user-global and unknown: they are not projects, and folding them would leak or hide every row. */
|
|
68
58
|
export function validateMergeNames(from, into) {
|
|
@@ -103,8 +93,7 @@ function foldInTx(db, tenantId, from, into) {
|
|
|
103
93
|
}
|
|
104
94
|
const gone = new Set(setAside);
|
|
105
95
|
const restamped = rows.filter((e) => !gone.has(e.id)).map((e) => e.id);
|
|
106
|
-
db
|
|
107
|
-
.run(into, tenantId, from);
|
|
96
|
+
restampOriginProjectAt(db, tenantId, from, into);
|
|
108
97
|
const dormantRestamped = [];
|
|
109
98
|
for (const snap of listDormantSnapshots(db, tenantId)) {
|
|
110
99
|
if (snap.entry.origin_project !== from || gone.has(snap.entry.id))
|
|
@@ -112,8 +101,7 @@ function foldInTx(db, tenantId, from, into) {
|
|
|
112
101
|
replaceDormantEntry(db, tenantId, snap.entry.id, { ...snap.entry, origin_project: into });
|
|
113
102
|
dormantRestamped.push(snap.entry.id);
|
|
114
103
|
}
|
|
115
|
-
const compactions =
|
|
116
|
-
.run(into, tenantId, from).changes ?? 0);
|
|
104
|
+
const compactions = restampCompactionOrigin(db, tenantId, from, into);
|
|
117
105
|
return { setAside, restamped, dormantRestamped, compactions };
|
|
118
106
|
}
|
|
119
107
|
/** Tool, note key and hash of an import, without the container, whose id hashes the project name. */
|
|
@@ -134,9 +122,7 @@ function strayImports(db, hippoRoot, tenantId) {
|
|
|
134
122
|
return copies;
|
|
135
123
|
const machine = { platform: process.platform, env: processEnv() };
|
|
136
124
|
const { platform } = machine;
|
|
137
|
-
|
|
138
|
-
const sessions = db.prepare(`SELECT DISTINCT transcript_path AS transcript, cwd FROM compactions WHERE tenant_id = ? AND transcript_path IS NOT NULL`)
|
|
139
|
-
.all(tenantId);
|
|
125
|
+
const sessions = compactionTranscripts(db, tenantId);
|
|
140
126
|
const owners = new Map();
|
|
141
127
|
for (const { transcript, cwd } of sessions) {
|
|
142
128
|
const project = transcriptNotesProject(transcript, cwd, machine);
|
|
@@ -172,9 +158,7 @@ function planFolds(db, hippoRoot, tenantId, globalFolds) {
|
|
|
172
158
|
const chosen = new Set(queryAuditEvents(db, { tenantId, op: 'project_merge', limit: 10000 }).map((e) => e.metadata.into));
|
|
173
159
|
if (!isGlobalStoreRoot(hippoRoot))
|
|
174
160
|
return { folds: ownLegacyFold(db, hippoRoot, tenantId).filter((f) => !chosen.has(f.from)), collisions: [] };
|
|
175
|
-
|
|
176
|
-
const rows = db.prepare(`SELECT DISTINCT origin_project AS origin, cwd FROM compactions WHERE tenant_id = ? AND origin_project <> '' AND cwd IS NOT NULL`)
|
|
177
|
-
.all(tenantId);
|
|
161
|
+
const rows = compactionOriginsWithCwd(db, tenantId);
|
|
178
162
|
const today = new Map();
|
|
179
163
|
for (const { origin, cwd } of rows) {
|
|
180
164
|
if (fs.existsSync(cwd))
|
|
@@ -203,8 +187,7 @@ function ownLegacyFold(db, hippoRoot, tenantId) {
|
|
|
203
187
|
const { name, legacyName } = resolveProjectIdentity(path.dirname(path.resolve(hippoRoot)));
|
|
204
188
|
if (legacyName === '' || legacyName === name)
|
|
205
189
|
return [];
|
|
206
|
-
const
|
|
207
|
-
const held = heldIn('memories') || heldIn('compactions') || listDormantSnapshots(db, tenantId).some((s) => s.entry.origin_project === legacyName);
|
|
190
|
+
const held = holdsOrigin(db, 'memories', tenantId, legacyName) || holdsOrigin(db, 'compactions', tenantId, legacyName) || listDormantSnapshots(db, tenantId).some((s) => s.entry.origin_project === legacyName);
|
|
208
191
|
return held ? [{ from: legacyName, into: name }] : [];
|
|
209
192
|
}
|
|
210
193
|
function foldOf(value) {
|
|
@@ -285,9 +268,7 @@ export function repairProjects(db, hippoRoot, opts) {
|
|
|
285
268
|
const { folds, collisions } = planFolds(db, hippoRoot, tenantId, globalFolds);
|
|
286
269
|
const folded = folds.map((f) => foldInTx(db, tenantId, f.from, f.into));
|
|
287
270
|
const plan = planUserGlobalRepair(db, tenantId, []);
|
|
288
|
-
|
|
289
|
-
for (const { id, origin } of plan.toProject)
|
|
290
|
-
stamp.run(origin, tenantId, id);
|
|
271
|
+
stampOriginProjectsAt(db, tenantId, plan.toProject);
|
|
291
272
|
const aside = new Set(plan.setAside);
|
|
292
273
|
const now = new Date();
|
|
293
274
|
for (const row of selectAllEntries(db, tenantId).filter((e) => aside.has(e.id))) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { envGstackSkill, envOpenclawSkill, envScope } from '
|
|
1
|
+
import { envGstackSkill, envOpenclawSkill, envScope } from '../util/env.js';
|
|
2
2
|
/**
|
|
3
3
|
* Detect the current operational scope from environment signals.
|
|
4
4
|
* Returns a scope name string (no prefix), or null if no scope detected.
|
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
* Resolution: $HIPPO_HOME > $XDG_DATA_HOME/hippo > ~/.hippo/
|
|
5
5
|
* Local .hippo/ stores are per-project.
|
|
6
6
|
*/
|
|
7
|
-
import { MemoryEntry } from '
|
|
8
|
-
import { type SearchResult, type ResultCost } from '
|
|
9
|
-
import type { HybridVectorCandidates } from '
|
|
10
|
-
import type { DatabaseSyncLike } from '
|
|
7
|
+
import { MemoryEntry } from '../core/memory.js';
|
|
8
|
+
import { type SearchResult, type ResultCost } from '../core/search-types.js';
|
|
9
|
+
import type { HybridVectorCandidates } from '../search/vector.js';
|
|
10
|
+
import type { DatabaseSyncLike } from '../db/index.js';
|
|
11
11
|
/**
|
|
12
12
|
* Returns the path to the global Hippo store.
|
|
13
13
|
* Resolution order: $HIPPO_HOME > $XDG_DATA_HOME/hippo > ~/.hippo/
|
|
@@ -17,15 +17,16 @@ export declare function getGlobalRoot(): string;
|
|
|
17
17
|
* Ensure the global store exists.
|
|
18
18
|
*/
|
|
19
19
|
export declare function initGlobal(): void;
|
|
20
|
-
/**
|
|
21
|
-
* Copy a local memory entry to the global store.
|
|
22
|
-
* Assigns a new ID (prefixed with 'g_') to avoid collisions.
|
|
23
|
-
* Returns the new global entry.
|
|
24
|
-
*/
|
|
20
|
+
/** Copies a local memory to the global store and returns the copy, which gets a new `g_` id so it cannot collide. */
|
|
25
21
|
export declare function promoteToGlobal(localRoot: string, id: string, opts?: {
|
|
26
22
|
actor?: string;
|
|
27
23
|
tenantId?: string;
|
|
28
24
|
afterWrite?: (db: DatabaseSyncLike, globalId: string) => void;
|
|
25
|
+
/** Also writes one `promote` audit row for the copy ({sourceId}), in the copy's own transaction. */
|
|
26
|
+
auditAs?: {
|
|
27
|
+
tenantId: string;
|
|
28
|
+
actor: string;
|
|
29
|
+
};
|
|
29
30
|
}): MemoryEntry;
|
|
30
31
|
export interface SearchOptions {
|
|
31
32
|
budget?: number;
|
|
@@ -4,35 +4,36 @@
|
|
|
4
4
|
* Resolution: $HIPPO_HOME > $XDG_DATA_HOME/hippo > ~/.hippo/
|
|
5
5
|
* Local .hippo/ stores are per-project.
|
|
6
6
|
*/
|
|
7
|
-
import { BadRequestError, NotFoundError } from '
|
|
7
|
+
import { BadRequestError, NotFoundError } from '../core/api-errors.js';
|
|
8
|
+
import { compareScoresDesc } from '../core/compare.js';
|
|
8
9
|
import * as fs from 'fs';
|
|
9
10
|
import * as path from 'path';
|
|
10
|
-
import { generateId, COMPACTION_MEMORY_TAG } from '
|
|
11
|
-
import { AGENT_MEMORY_SOURCE_PREFIX, AGENT_MEMORY_TAGS } from '
|
|
12
|
-
import { initStore } from '
|
|
13
|
-
import { writeEntry } from '
|
|
14
|
-
import { loadAllEntries, readEntry } from '
|
|
15
|
-
import { loadSearchEntries, loadRecallSearchEntries, recallScopeFilter } from '
|
|
16
|
-
import { tallySources } from '
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
23
|
-
import {
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
26
|
-
import {
|
|
27
|
-
import {
|
|
28
|
-
import {
|
|
29
|
-
import {
|
|
30
|
-
import {
|
|
31
|
-
import {
|
|
32
|
-
import {
|
|
11
|
+
import { generateId, COMPACTION_MEMORY_TAG } from '../core/memory.js';
|
|
12
|
+
import { AGENT_MEMORY_SOURCE_PREFIX, AGENT_MEMORY_TAGS } from '../core/agent-memory-tools.js';
|
|
13
|
+
import { initStore } from '../store/open.js';
|
|
14
|
+
import { writeEntry } from '../store/entry-writes.js';
|
|
15
|
+
import { loadAllEntries, readEntry } from '../store/entry-reads.js';
|
|
16
|
+
import { loadSearchEntries, loadRecallSearchEntries, recallScopeFilter } from '../store/search-rows.js';
|
|
17
|
+
import { tallySources } from '../store/candidates.js';
|
|
18
|
+
import { isPersonalScope, passesScopeFilterForRecall, passesCliRecallScopeFilter } from '../store/recall-scope.js';
|
|
19
|
+
import { search } from '../search/bm25-search.js';
|
|
20
|
+
import { hybridSearch } from '../search/hybrid.js';
|
|
21
|
+
import { fitBudget } from '../search/finalize.js';
|
|
22
|
+
import { DEFAULT_LOCAL_BUMP, DEFAULT_RECALL_BUDGET } from '../core/search-types.js';
|
|
23
|
+
import { evalNow } from '../core/ablation.js';
|
|
24
|
+
import { fallbackOrigin, classifyOriginProject, resolveGlobalRootDir, resolveProjectIdentity } from '../core/project-identity.js';
|
|
25
|
+
import { isSharedStore } from '../core/config.js';
|
|
26
|
+
import { detectSecret } from '../util/secret-detect.js';
|
|
27
|
+
import { isQuarantineScope } from '../trust/quarantine.js';
|
|
28
|
+
import { RejectedValueError } from '../store/rejection.js';
|
|
29
|
+
import { embedMemory, embedAll } from '../store/embeddings/index.js';
|
|
30
|
+
import { duplicateKey, storedTextKeys } from '../util/same-text.js';
|
|
31
|
+
import { isReusable } from '../core/memory-quality.js';
|
|
32
|
+
import { errorMessage, log } from '../util/log.js';
|
|
33
|
+
import { appendAuditEvent } from '../store/audit.js';
|
|
33
34
|
// The rows are already copied; a failed background embed only delays vectors, so it warns instead of throwing.
|
|
34
35
|
function logEmbedAllFailure(caller, err) {
|
|
35
|
-
log.warn(`${caller}: background embed failed (${
|
|
36
|
+
log.warn(`${caller}: background embed failed (${errorMessage(err)}); run 'hippo embed' to backfill`);
|
|
36
37
|
}
|
|
37
38
|
/**
|
|
38
39
|
* Returns the path to the global Hippo store.
|
|
@@ -56,11 +57,16 @@ export function initGlobal() {
|
|
|
56
57
|
initStore(globalRoot);
|
|
57
58
|
}
|
|
58
59
|
}
|
|
59
|
-
/**
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
60
|
+
/** The copy's write hook: the `promote` row when asked for, then the caller's own hook, both in the copy's transaction. */
|
|
61
|
+
function promoteHook(sourceId, auditAs, afterWrite) {
|
|
62
|
+
if (!auditAs)
|
|
63
|
+
return afterWrite;
|
|
64
|
+
return (db, globalId) => {
|
|
65
|
+
appendAuditEvent(db, { tenantId: auditAs.tenantId, actor: auditAs.actor, op: 'promote', targetId: globalId, metadata: { sourceId } });
|
|
66
|
+
afterWrite?.(db, globalId);
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
/** Copies a local memory to the global store and returns the copy, which gets a new `g_` id so it cannot collide. */
|
|
64
70
|
export function promoteToGlobal(localRoot, id, opts) {
|
|
65
71
|
const entry = readEntry(localRoot, id, opts?.tenantId);
|
|
66
72
|
if (!entry)
|
|
@@ -88,7 +94,7 @@ export function promoteToGlobal(localRoot, id, opts) {
|
|
|
88
94
|
source: isSharedStore(localRoot) ? `shared::${new Date().toISOString()}` : `promoted:${localRoot}`,
|
|
89
95
|
origin_project: entry.origin_project ?? fallbackOrigin(localRoot),
|
|
90
96
|
};
|
|
91
|
-
writeEntry(globalRoot, globalEntry, { actor: opts?.actor, afterWrite: opts?.afterWrite });
|
|
97
|
+
writeEntry(globalRoot, globalEntry, { actor: opts?.actor, afterWrite: promoteHook(id, opts?.auditAs, opts?.afterWrite) });
|
|
92
98
|
// Fire-and-forget: embedMemory gates on availability and never rejects.
|
|
93
99
|
void embedMemory(globalRoot, globalEntry);
|
|
94
100
|
return globalEntry;
|
|
@@ -108,8 +114,24 @@ export function searchBoth(query, localRoot, globalRoot, options = {}) {
|
|
|
108
114
|
// Search each store with full budget, then blend
|
|
109
115
|
const localResults = search(query, localEntries, { budget, now, minResults });
|
|
110
116
|
const globalResults = search(query, globalEntries, { budget, now, minResults });
|
|
117
|
+
const deduped = dedupeByContent(tagLocalAndGlobal(localResults, globalResults));
|
|
118
|
+
// PLAIN stable score sort on purpose: both inputs are deterministically ordered,
|
|
119
|
+
// and an exact tie keeps the LOCAL result ahead of the global one (concat order).
|
|
120
|
+
deduped.sort((a, b) => compareScoresDesc(a.score, b.score));
|
|
121
|
+
// Apply combined token budget (guarantee at least minResults items)
|
|
122
|
+
const results = [];
|
|
123
|
+
let usedTokens = 0;
|
|
124
|
+
for (let i = 0; i < deduped.length; i++) {
|
|
125
|
+
if (results.length >= effectiveMin && usedTokens + deduped[i].tokens > budget)
|
|
126
|
+
continue;
|
|
127
|
+
usedTokens += deduped[i].tokens;
|
|
128
|
+
results.push(deduped[i]);
|
|
129
|
+
}
|
|
130
|
+
return results;
|
|
131
|
+
}
|
|
132
|
+
function tagLocalAndGlobal(localResults, globalResults) {
|
|
111
133
|
// Tag global results. Local memories get a configurable priority bump.
|
|
112
|
-
|
|
134
|
+
return [
|
|
113
135
|
...localResults.map((r) => ({
|
|
114
136
|
...r,
|
|
115
137
|
isGlobal: false,
|
|
@@ -120,28 +142,17 @@ export function searchBoth(query, localRoot, globalRoot, options = {}) {
|
|
|
120
142
|
})),
|
|
121
143
|
...globalResults.map((r) => ({ ...r, isGlobal: true })),
|
|
122
144
|
];
|
|
145
|
+
}
|
|
146
|
+
function dedupeByContent(tagged) {
|
|
123
147
|
// Remove duplicates by content (local/global IDs differ after promote/share)
|
|
124
148
|
const seen = new Set();
|
|
125
|
-
|
|
149
|
+
return tagged.filter((r) => {
|
|
126
150
|
const key = duplicateKey(r.entry.content);
|
|
127
151
|
if (seen.has(key))
|
|
128
152
|
return false;
|
|
129
153
|
seen.add(key);
|
|
130
154
|
return true;
|
|
131
155
|
});
|
|
132
|
-
// PLAIN stable score sort on purpose: both inputs are deterministically ordered,
|
|
133
|
-
// and an exact tie keeps the LOCAL result ahead of the global one (concat order).
|
|
134
|
-
deduped.sort((a, b) => b.score - a.score);
|
|
135
|
-
// Apply combined token budget (guarantee at least minResults items)
|
|
136
|
-
const results = [];
|
|
137
|
-
let usedTokens = 0;
|
|
138
|
-
for (let i = 0; i < deduped.length; i++) {
|
|
139
|
-
if (results.length >= effectiveMin && usedTokens + deduped[i].tokens > budget)
|
|
140
|
-
continue;
|
|
141
|
-
usedTokens += deduped[i].tokens;
|
|
142
|
-
results.push(deduped[i]);
|
|
143
|
-
}
|
|
144
|
-
return results;
|
|
145
156
|
}
|
|
146
157
|
/**
|
|
147
158
|
* Hybrid search across both local and global stores, using embeddings when available.
|
|
@@ -213,7 +224,7 @@ export async function rankBothStores(query, roots, entries, vectorCandidates, op
|
|
|
213
224
|
});
|
|
214
225
|
// PLAIN stable score sort on purpose -- see searchBoth above;
|
|
215
226
|
// same rationale (deterministic inputs + stability; local-first on ties).
|
|
216
|
-
deduped.sort((a, b) =>
|
|
227
|
+
deduped.sort((a, b) => compareScoresDesc(a.score, b.score));
|
|
217
228
|
return fitBudget(deduped, budget, minResults ?? 1, cost);
|
|
218
229
|
}
|
|
219
230
|
// ---------------------------------------------------------------------------
|
|
@@ -283,21 +294,7 @@ export function shareMemory(localRoot, id, options = {}) {
|
|
|
283
294
|
const entry = readEntry(localRoot, id, options.tenantId);
|
|
284
295
|
if (!entry)
|
|
285
296
|
throw new NotFoundError(`Memory not found: ${id}`);
|
|
286
|
-
|
|
287
|
-
// with --force. Explicit and loud - a silent null would read as "low
|
|
288
|
-
// transfer score" and invite retries.
|
|
289
|
-
const secret = detectSecret(entry);
|
|
290
|
-
if (secret.flagged) {
|
|
291
|
-
throw new BadRequestError(`Refusing to share ${id} to the global store: content matches secret material (${secret.reason}). ` +
|
|
292
|
-
`Secrets stay in their owning project's store.`);
|
|
293
|
-
}
|
|
294
|
-
// A quarantined row is unreviewed input, not a lesson; sharing it would spread poison globally.
|
|
295
|
-
if (isQuarantineScope(entry.scope)) {
|
|
296
|
-
throw new BadRequestError(`Refusing to share ${id}: it is quarantined pending review. Approve it first via 'hippo quarantine approve ${id}'.`);
|
|
297
|
-
}
|
|
298
|
-
if (isPersonalScope(entry.scope ?? null)) {
|
|
299
|
-
throw new BadRequestError(`Refusing to share ${id}: it is a personal memory and stays with its owner on this server.`);
|
|
300
|
-
}
|
|
297
|
+
assertShareable(entry, id);
|
|
301
298
|
const score = transferScore(entry);
|
|
302
299
|
if (score < 0.3 && !options.force)
|
|
303
300
|
return null;
|
|
@@ -323,6 +320,23 @@ export function shareMemory(localRoot, id, options = {}) {
|
|
|
323
320
|
}
|
|
324
321
|
return globalEntry;
|
|
325
322
|
}
|
|
323
|
+
function assertShareable(entry, id) {
|
|
324
|
+
// Secret producer veto: secrets never go to the global store, not even
|
|
325
|
+
// with --force. Explicit and loud - a silent null would read as "low
|
|
326
|
+
// transfer score" and invite retries.
|
|
327
|
+
const secret = detectSecret(entry);
|
|
328
|
+
if (secret.flagged) {
|
|
329
|
+
throw new BadRequestError(`Refusing to share ${id} to the global store: content matches secret material (${secret.reason}). ` +
|
|
330
|
+
`Secrets stay in their owning project's store.`);
|
|
331
|
+
}
|
|
332
|
+
// A quarantined row is unreviewed input, not a lesson; sharing it would spread poison globally.
|
|
333
|
+
if (isQuarantineScope(entry.scope)) {
|
|
334
|
+
throw new BadRequestError(`Refusing to share ${id}: it is quarantined pending review. Approve it first via 'hippo quarantine approve ${id}'.`);
|
|
335
|
+
}
|
|
336
|
+
if (isPersonalScope(entry.scope ?? null)) {
|
|
337
|
+
throw new BadRequestError(`Refusing to share ${id}: it is a personal memory and stays with its owner on this server.`);
|
|
338
|
+
}
|
|
339
|
+
}
|
|
326
340
|
/**
|
|
327
341
|
* List all projects that have contributed memories to the global store.
|
|
328
342
|
* Parses the source field for 'shared:<project>:' or 'promoted:<path>' patterns.
|
|
@@ -489,9 +503,10 @@ export function syncGlobalToLocal(localRoot, globalRoot, opts = {}) {
|
|
|
489
503
|
// tenant-scoped local store; writeEntry on each row carries the tenant if
|
|
490
504
|
// the local-root context provides one.
|
|
491
505
|
const globalEntries = loadAllEntries(globalRoot);
|
|
492
|
-
const localIndex = loadIndex(localRoot);
|
|
493
506
|
const textKey = (e) => `${e.tenantId}\n${e.content}`;
|
|
494
|
-
const
|
|
507
|
+
const localEntries = loadAllEntries(localRoot);
|
|
508
|
+
const localIds = new Set(localEntries.map((e) => e.id));
|
|
509
|
+
const localText = new Set(localEntries.map(textKey));
|
|
495
510
|
// Syncing down must not re-import what ambient context
|
|
496
511
|
// excludes - other-project rows are skipped by default and secret rows
|
|
497
512
|
// are never copied. origin_project is preserved on the copy (writeEntry
|
|
@@ -502,7 +517,7 @@ export function syncGlobalToLocal(localRoot, globalRoot, opts = {}) {
|
|
|
502
517
|
let rejected = 0;
|
|
503
518
|
for (const entry of globalEntries) {
|
|
504
519
|
// Skip if already present by ID
|
|
505
|
-
if (
|
|
520
|
+
if (localIds.has(entry.id))
|
|
506
521
|
continue;
|
|
507
522
|
// Only the global store's user pass sets an imported note's row aside, so a copy would outlive the note.
|
|
508
523
|
if (entry.source.startsWith(AGENT_MEMORY_SOURCE_PREFIX))
|
|
@@ -511,22 +526,31 @@ export function syncGlobalToLocal(localRoot, globalRoot, opts = {}) {
|
|
|
511
526
|
continue;
|
|
512
527
|
if (detectSecret(entry).flagged)
|
|
513
528
|
continue;
|
|
514
|
-
if (!opts.includeCrossProject &&
|
|
515
|
-
|
|
529
|
+
if (!opts.includeCrossProject && classifyOriginProject(entry.origin_project, currentProject) === 'cross-project')
|
|
530
|
+
continue;
|
|
531
|
+
if (!writeUnlessRejected(localRoot, entry)) {
|
|
532
|
+
rejected++;
|
|
516
533
|
continue;
|
|
517
|
-
try {
|
|
518
|
-
writeEntry(localRoot, entry);
|
|
519
|
-
}
|
|
520
|
-
catch (err) {
|
|
521
|
-
if (err instanceof RejectedValueError) {
|
|
522
|
-
rejected++;
|
|
523
|
-
continue;
|
|
524
|
-
}
|
|
525
|
-
throw err;
|
|
526
534
|
}
|
|
527
535
|
localText.add(textKey(entry));
|
|
528
536
|
count++;
|
|
529
537
|
}
|
|
538
|
+
finishSyncDown(localRoot, count, rejected);
|
|
539
|
+
return count;
|
|
540
|
+
}
|
|
541
|
+
/** False when the local store rejects the value; any other failure still throws. */
|
|
542
|
+
function writeUnlessRejected(localRoot, entry) {
|
|
543
|
+
try {
|
|
544
|
+
writeEntry(localRoot, entry);
|
|
545
|
+
return true;
|
|
546
|
+
}
|
|
547
|
+
catch (err) {
|
|
548
|
+
if (err instanceof RejectedValueError)
|
|
549
|
+
return false;
|
|
550
|
+
throw err;
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
function finishSyncDown(localRoot, count, rejected) {
|
|
530
554
|
if (rejected > 0) {
|
|
531
555
|
log.warn(`syncGlobalToLocal: skipped ${rejected} rejected value(s) (run \`hippo unreject\` on the local store to allow).`);
|
|
532
556
|
}
|
|
@@ -535,6 +559,5 @@ export function syncGlobalToLocal(localRoot, globalRoot, opts = {}) {
|
|
|
535
559
|
if (count > 0) {
|
|
536
560
|
void embedAll(localRoot).catch((err) => logEmbedAllFailure('syncGlobalToLocal', err));
|
|
537
561
|
}
|
|
538
|
-
return count;
|
|
539
562
|
}
|
|
540
563
|
//# sourceMappingURL=shared.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,12 @@
|
|
|
1
|
-
import { closeHippoDb } from '
|
|
2
|
-
import { strengthSql } from '
|
|
1
|
+
import { closeHippoDb } from '../db/index.js';
|
|
2
|
+
import { strengthSql } from '../core/memory.js';
|
|
3
3
|
import { scopeAdmitSql } from './recall-scope.js';
|
|
4
|
-
import { SECRET_TAGS } from '
|
|
5
|
-
import { openStore } from './
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
|
|
4
|
+
import { SECRET_TAGS } from '../util/secret-detect.js';
|
|
5
|
+
import { openStore } from './open.js';
|
|
6
|
+
import { jsonList } from './candidates.js';
|
|
7
|
+
import { originInSql } from '../core/project-identity.js';
|
|
8
|
+
import { isErrorTagged } from '../core/ambient.js';
|
|
9
|
+
import { DAY_MS } from '../util/time.js';
|
|
10
10
|
// SHORTCUT: mirrors loadContextCandidates' WHERE (request-path snapshots pin the match); share it once store.ts is split.
|
|
11
11
|
function contextRowsWhere(tenantId, filter) {
|
|
12
12
|
const where = ['tenant_id = ?', `COALESCE(superseded_by, '') = ''`, `COALESCE(kind, '') != 'archived'`];
|
|
@@ -40,7 +40,7 @@ function secretTaggedSql() {
|
|
|
40
40
|
export function loadAmbientTallies(hippoRoot, tenantId, filter) {
|
|
41
41
|
const { where, params } = contextRowsWhere(tenantId, filter);
|
|
42
42
|
const secret = secretTaggedSql();
|
|
43
|
-
const sevenDaysAgo = new Date(filter.now.getTime() - 7 *
|
|
43
|
+
const sevenDaysAgo = new Date(filter.now.getTime() - 7 * DAY_MS).toISOString();
|
|
44
44
|
const db = openStore(hippoRoot);
|
|
45
45
|
try {
|
|
46
46
|
// SAFETY: one aggregate row whose columns are the aliases named below. Tag lists come back as one JSON array of
|
|
@@ -89,4 +89,4 @@ export function loadAmbientTallies(hippoRoot, tenantId, filter) {
|
|
|
89
89
|
closeHippoDb(db);
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
|
-
//# sourceMappingURL=ambient
|
|
92
|
+
//# sourceMappingURL=ambient.js.map
|
|
@@ -1,13 +1,19 @@
|
|
|
1
|
-
import { openHippoDb } from '../db.js';
|
|
2
|
-
import { type AuditOp } from '
|
|
3
|
-
import { RejectedValueError } from '
|
|
4
|
-
import type { JsonValue } from '../json.js';
|
|
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
|
+
}
|
|
5
11
|
/**
|
|
6
12
|
* Emit an audit event for a mutation against `db`. Wrapped so a broken audit
|
|
7
13
|
* log can never crash the surrounding mutation — the SQLite store is still the
|
|
8
14
|
* source of truth and audit failures are diagnosable from the missing rows.
|
|
9
15
|
*/
|
|
10
|
-
export declare function audit(db: ReturnType<typeof openHippoDb>, op: AuditOp,
|
|
16
|
+
export declare function audit(db: ReturnType<typeof openHippoDb>, op: AuditOp, options?: AuditOptions): void;
|
|
11
17
|
/**
|
|
12
18
|
* Refusal audit for the rejected-value guard. Written by the
|
|
13
19
|
* transaction OWNER post-rollback — writeEntry's catch (no outer tx exists
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import { resolveTenantId } from '
|
|
2
|
-
import { appendAuditEvent, reportAuditWriteFailure } from '
|
|
1
|
+
import { resolveTenantId } from './tenant.js';
|
|
2
|
+
import { appendAuditEvent, reportAuditWriteFailure } from './audit.js';
|
|
3
3
|
/**
|
|
4
4
|
* Emit an audit event for a mutation against `db`. Wrapped so a broken audit
|
|
5
5
|
* log can never crash the surrounding mutation — the SQLite store is still the
|
|
6
6
|
* source of truth and audit failures are diagnosable from the missing rows.
|
|
7
7
|
*/
|
|
8
|
-
export function audit(db, op,
|
|
8
|
+
export function audit(db, op, options = {}) {
|
|
9
|
+
const { targetId, metadata, actor = 'cli', tenantId } = options;
|
|
9
10
|
try {
|
|
10
11
|
appendAuditEvent(db, {
|
|
11
12
|
tenantId: tenantId ?? resolveTenantId({}),
|
|
@@ -28,6 +29,6 @@ export function audit(db, op, targetId, metadata, actor = 'cli', tenantId) {
|
|
|
28
29
|
* rollback could claw back. Best-effort `audit()` semantics: never throws.
|
|
29
30
|
*/
|
|
30
31
|
export function auditRejectionRefusal(db, err, actor) {
|
|
31
|
-
audit(db, 'reject_refusal', err.entryId, { digest: err.digest, reason: err.reason }, actor, err.tenantId);
|
|
32
|
+
audit(db, 'reject_refusal', { targetId: err.entryId, metadata: { digest: err.digest, reason: err.reason }, actor, tenantId: err.tenantId });
|
|
32
33
|
}
|
|
33
34
|
//# 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;
|
|
@@ -68,4 +72,24 @@ export interface ListAuditAfterOpts {
|
|
|
68
72
|
* the last id returned, never from a count.
|
|
69
73
|
*/
|
|
70
74
|
export declare function listAuditEventsAfter(db: DatabaseSyncLike, opts: ListAuditAfterOpts): AuditEvent[];
|
|
75
|
+
/** 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. */
|
|
76
|
+
export declare function confirmedOutcomeTimes(hippoRoot: string, tenantId: string): Map<string, string>;
|
|
77
|
+
/** An audit row that did not land, with what its write threw. */
|
|
78
|
+
export interface FailedAuditEvent {
|
|
79
|
+
event: AppendAuditOpts;
|
|
80
|
+
error: unknown;
|
|
81
|
+
}
|
|
82
|
+
/** 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. */
|
|
83
|
+
export declare function recordAuditEventsRowByRow(hippoRoot: string, events: readonly AppendAuditOpts[]): FailedAuditEvent[];
|
|
84
|
+
export interface AuditPrune {
|
|
85
|
+
tenantId: string;
|
|
86
|
+
/** ISO time; rows with `ts` before it go. */
|
|
87
|
+
cutoff: string;
|
|
88
|
+
actor: string;
|
|
89
|
+
olderThanDays: number;
|
|
90
|
+
/** Count the rows and delete nothing. */
|
|
91
|
+
dryRun: boolean;
|
|
92
|
+
}
|
|
93
|
+
/** 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. */
|
|
94
|
+
export declare function pruneAuditRows(hippoRoot: string, prune: AuditPrune): number;
|
|
71
95
|
//# sourceMappingURL=audit.d.ts.map
|