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
package/dist/api/recall.js
CHANGED
|
@@ -1,26 +1,28 @@
|
|
|
1
1
|
// Read path: recall (sync) and retrieve (async, adds the vector arm).
|
|
2
|
-
import { envRequireSessionScopedFreshTail } from '../env.js';
|
|
2
|
+
import { envRequireSessionScopedFreshTail } from '../util/env.js';
|
|
3
3
|
import { DEFAULT_SEARCH_CANDIDATE_LIMIT } from '../store/rows.js';
|
|
4
|
-
import { isRecallBoostAblated } from '../ablation.js';
|
|
5
4
|
import { loadEntriesByIds, loadFreshRawMemories } from '../store/entry-reads.js';
|
|
6
5
|
import { loadRecallSearchEntries, recallScopeFilter } from '../store/search-rows.js';
|
|
7
|
-
import { estimateTokens } from '../token-
|
|
8
|
-
import { formatHandoffEvidenceLine } from '../handoff.js';
|
|
9
|
-
import { activeGoalsWithPolicies, boostByGoals } from '../goals.js';
|
|
10
|
-
import { continuityAt, finishRecallAt, storeFor } from '../store
|
|
6
|
+
import { estimateTokens } from '../util/token-text.js';
|
|
7
|
+
import { formatHandoffEvidenceLine } from '../core/handoff.js';
|
|
8
|
+
import { activeGoalsWithPolicies, boostByGoals } from '../store/goals.js';
|
|
9
|
+
import { continuityAt, finishRecallAt, storeFor } from '../store/index.js';
|
|
11
10
|
import { hybridSearch } from '../search/hybrid.js';
|
|
12
11
|
import { physicsSearch } from '../search/physics-search.js';
|
|
13
12
|
import { churnStaleFactor } from '../search/boosts.js';
|
|
14
|
-
import { compareEntryIdentity } from '../compare.js';
|
|
15
|
-
import { dropHeldCopies, duplicateKey, storedTextKeys } from '../same-text.js';
|
|
16
|
-
import { isSharedStore, loadConfig } from '../config.js';
|
|
17
|
-
import { classifyOriginProject, projectNames } from '../project-identity.js';
|
|
18
|
-
import { decidePlanningFallacy, detectPlanningClaim
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
13
|
+
import { compareEntryIdentity } from '../core/compare.js';
|
|
14
|
+
import { dropHeldCopies, duplicateKey, storedTextKeys } from '../util/same-text.js';
|
|
15
|
+
import { isSharedStore, loadConfig } from '../core/config.js';
|
|
16
|
+
import { classifyOriginProject, projectNames } from '../core/project-identity.js';
|
|
17
|
+
import { decidePlanningFallacy, detectPlanningClaim } from '../predictions/planning-fallacy.js';
|
|
18
|
+
import { planningFallacyEvidenceAt } from '../store/planning-fallacy-evidence.js';
|
|
19
|
+
import { detectAnchoring, hashQueryText, biasHintEnabled } from './recall-history.js';
|
|
20
|
+
import { detectAvailabilityBias } from './availability.js';
|
|
21
|
+
import { passesScopeFilterForRecall, assertScopeRequestAllowed, personalScopeOf } from '../store/recall-scope.js';
|
|
22
22
|
import { ownerOrSubject, RecallContractError } from './types.js';
|
|
23
|
-
import { anchoringRows, availabilityRows, recallAuditMetadata, recallAuditRow } from './recall-record.js';
|
|
23
|
+
import { anchoringRows, availabilityRows, callerOf, recallAuditMetadata, recallAuditRow, strengthenOf } from './recall-record.js';
|
|
24
|
+
import { retrieveWithCliCore } from './recall-core.js';
|
|
25
|
+
const DEFAULT_RECALL_LIMIT = 10;
|
|
24
26
|
/**
|
|
25
27
|
* Shared construction helper for `RecallSuppressionSummary`. Used by
|
|
26
28
|
* `api.recall`, `cmdRecall`, and the MCP `hippo_recall` handler so all three
|
|
@@ -61,7 +63,7 @@ export function recall(ctx, opts) {
|
|
|
61
63
|
const own = personalScopeOf(ctx.actor) ?? undefined;
|
|
62
64
|
const all = loadRecallSearchEntries(ctx.hippoRoot, opts.query, windowSize, ctx.tenantId, opts.scope, 'exact', false, recallOrigin(opts), own);
|
|
63
65
|
const plan = planRecall(ctx, opts, all, own);
|
|
64
|
-
const { result, writes } = composeRecall(ctx, opts, windowSize, all, plan, readRecallSync(ctx, opts, plan));
|
|
66
|
+
const { result, writes } = composeRecall(ctx, opts, { windowSize, all, plan, reads: readRecallSync(ctx, opts, plan) });
|
|
65
67
|
finishRecallAt(ctx.hippoRoot, { ...writes, audit: [...(opts.leadingAudit ?? []), ...writes.audit] });
|
|
66
68
|
return result;
|
|
67
69
|
}
|
|
@@ -71,9 +73,11 @@ function recallOrigin(opts) {
|
|
|
71
73
|
function inCallerProject(entry, opts) {
|
|
72
74
|
return !opts.project || classifyOriginProject(entry.origin_project, opts.project) !== 'cross-project';
|
|
73
75
|
}
|
|
74
|
-
/**
|
|
76
|
+
/** The one recall entry: ranks with the ranker `opts` names, then writes the recall. Only the CLI core ranker writes last_retrieval_ids (contract lock). */
|
|
75
77
|
export async function retrieve(ctx, opts) {
|
|
76
78
|
assertScopeRequestAllowed(ctx.actor, opts.scope);
|
|
79
|
+
if (opts.cliCore)
|
|
80
|
+
return retrieveWithCliCore(ctx, opts, opts.cliCore);
|
|
77
81
|
const windowSize = recallWindowSize(opts);
|
|
78
82
|
// From the authenticated actor, never from RecallOpts, which a caller fills in.
|
|
79
83
|
const own = personalScopeOf(ctx.actor) ?? undefined;
|
|
@@ -90,7 +94,7 @@ export async function retrieve(ctx, opts) {
|
|
|
90
94
|
candidates = [...ranked.map((r) => r.entry), ...candidates.filter((e) => !rankedIds.has(e.id))];
|
|
91
95
|
}
|
|
92
96
|
const plan = planRecall(ctx, opts, candidates, own);
|
|
93
|
-
const { result, writes } = composeRecall(ctx, opts, windowSize, candidates, plan, await readRecall(store, ctx, opts, plan));
|
|
97
|
+
const { result, writes } = composeRecall(ctx, opts, { windowSize, all: candidates, plan, reads: await readRecall(store, ctx, opts, plan) });
|
|
94
98
|
await store.finishRecall({ ...writes, audit: [...(opts.leadingAudit ?? []), ...writes.audit], strengthen: strengthenOf(ctx, result.results.map((r) => r.id)) });
|
|
95
99
|
return result;
|
|
96
100
|
}
|
|
@@ -106,9 +110,6 @@ function recallSearchArgs(ctx, opts, limit, own) {
|
|
|
106
110
|
ownScope: own,
|
|
107
111
|
};
|
|
108
112
|
}
|
|
109
|
-
function strengthenOf(ctx, ids) {
|
|
110
|
-
return { ids, opts: { tenantId: ctx.tenantId, recallBoostAblated: isRecallBoostAblated() } };
|
|
111
|
-
}
|
|
112
113
|
/** api.retrieve's vector arm: the recall load's exact-scope rule, current rows only. */
|
|
113
114
|
function recallVectorSpec(ctx, opts, own) {
|
|
114
115
|
return {
|
|
@@ -142,7 +143,7 @@ async function retrieveFromStore(ctx, opts, windowSize, show, own) {
|
|
|
142
143
|
const window = ranked.slice(0, windowSize).map((r) => r.entry);
|
|
143
144
|
const bandOpts = { ...opts, suppressRecallTrace: true };
|
|
144
145
|
const plan = planRecall(ctx, bandOpts, window, own);
|
|
145
|
-
const { result, writes } = composeRecall(ctx, bandOpts, windowSize, window, plan, await readRecall(store, ctx, bandOpts, plan, goals), false);
|
|
146
|
+
const { result, writes } = composeRecall(ctx, bandOpts, { windowSize, all: window, plan, reads: await readRecall(store, ctx, bandOpts, plan, goals), auditBand: false });
|
|
146
147
|
// Rows the vector arm added count as candidates too.
|
|
147
148
|
const inPool = new Set(pool.map((e) => e.id));
|
|
148
149
|
const candidates = [...pool, ...ranked.map((r) => r.entry).filter((e) => !inPool.has(e.id))];
|
|
@@ -187,7 +188,7 @@ function recallWindowSize(opts) {
|
|
|
187
188
|
}
|
|
188
189
|
const CONTINUITY_EVENT_LIMIT = 5;
|
|
189
190
|
function planRecall(ctx, opts, all, own) {
|
|
190
|
-
const limit = opts.limit ??
|
|
191
|
+
const limit = opts.limit ?? DEFAULT_RECALL_LIMIT;
|
|
191
192
|
const window = admitCandidates(opts, all, limit, own);
|
|
192
193
|
return {
|
|
193
194
|
limit,
|
|
@@ -228,9 +229,8 @@ function continuityKey(ctx, opts) {
|
|
|
228
229
|
return null;
|
|
229
230
|
return { owner: ownerOrSubject(ctx.actor), project: opts.project ? projectNames(opts.project) : [] };
|
|
230
231
|
}
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
function composeRecall(ctx, opts, windowSize, all, plan, reads, auditBand = true) {
|
|
232
|
+
function composeRecall(ctx, opts, options) {
|
|
233
|
+
const { windowSize, all, plan, reads, auditBand = true } = options;
|
|
234
234
|
const { window } = plan;
|
|
235
235
|
const bands = rankBands(opts, plan, reads);
|
|
236
236
|
const rankedOut = bands.rankedOut;
|
|
@@ -319,7 +319,9 @@ function rankBands(opts, plan, reads) {
|
|
|
319
319
|
const baseRanked = baseScored.map((r) => baseItem(r, opts, explainTrace));
|
|
320
320
|
const summaryRanked = substituted.map((s) => summaryItem(s, opts));
|
|
321
321
|
const freshRanked = (opts.freshTailCount ?? 0) > 0
|
|
322
|
-
? freshTailBand(opts,
|
|
322
|
+
? freshTailBand(opts, {
|
|
323
|
+
recent: reads.freshRaws, baseRanked, summaryRanked, shownEntries: opts.keepHeldCopies ? [] : [...baseSlice, ...substituted.map((s) => s.entry)], own,
|
|
324
|
+
})
|
|
323
325
|
: [];
|
|
324
326
|
return {
|
|
325
327
|
rankedOut: [...freshRanked, ...baseRanked, ...summaryRanked],
|
|
@@ -334,7 +336,7 @@ function rankBands(opts, plan, reads) {
|
|
|
334
336
|
// `limit`. Each one is tenant-scoped and re-checked against the scope filter; drillDown recovers the children.
|
|
335
337
|
function substituteOverflow(opts, overflowByParent, parents, limit, own) {
|
|
336
338
|
const eligibleParents = parents.filter((p) => (p.dag_level ?? 0) === 2 && !p.superseded_by && passesScopeFilterForRecall(p.scope ?? null, opts.scope, own) && inCallerProject(p, opts));
|
|
337
|
-
const maxSub = Math.max(1, Math.ceil(limit *
|
|
339
|
+
const maxSub = Math.max(1, Math.ceil(limit * SUMMARY_SUB_FRACTION));
|
|
338
340
|
// Most overflowed children first; compareEntryIdentity only breaks a tie, which used to fall to scan order.
|
|
339
341
|
eligibleParents.sort((a, b) => {
|
|
340
342
|
const ac = overflowByParent.get(a.id)?.length ?? 0;
|
|
@@ -380,12 +382,16 @@ function baseItem(r, opts, explainTrace) {
|
|
|
380
382
|
}
|
|
381
383
|
return item;
|
|
382
384
|
}
|
|
383
|
-
//
|
|
385
|
+
// A summary scores below the strong top-N matches but above the weakest leaves.
|
|
386
|
+
const SUMMARY_ITEM_SCORE = 0.5;
|
|
387
|
+
const FRESH_TAIL_ITEM_SCORE = 1.0;
|
|
388
|
+
// Summaries may take this share of the limit.
|
|
389
|
+
const SUMMARY_SUB_FRACTION = 0.3;
|
|
384
390
|
function summaryItem(s, opts) {
|
|
385
391
|
const item = {
|
|
386
392
|
id: s.entry.id,
|
|
387
393
|
content: s.entry.content,
|
|
388
|
-
score:
|
|
394
|
+
score: SUMMARY_ITEM_SCORE,
|
|
389
395
|
layer: s.entry.layer,
|
|
390
396
|
strength: s.entry.strength,
|
|
391
397
|
isSummary: true,
|
|
@@ -396,9 +402,8 @@ function summaryItem(s, opts) {
|
|
|
396
402
|
item.rerankPipeline = 'api';
|
|
397
403
|
return item;
|
|
398
404
|
}
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
function freshTailBand(opts, recent, baseRanked, summaryRanked, shownEntries, own) {
|
|
405
|
+
function freshTailBand(opts, options) {
|
|
406
|
+
const { recent, baseRanked, summaryRanked, shownEntries, own } = options;
|
|
402
407
|
const recentScoped = recent.filter((m) => passesScopeFilterForRecall(m.scope ?? null, opts.scope, own) && inCallerProject(m, opts));
|
|
403
408
|
const recentIdSet = new Set(recentScoped.map((m) => m.id));
|
|
404
409
|
for (const r of baseRanked) {
|
|
@@ -415,7 +420,7 @@ function freshTailBand(opts, recent, baseRanked, summaryRanked, shownEntries, ow
|
|
|
415
420
|
const item = {
|
|
416
421
|
id: m.id,
|
|
417
422
|
content: m.content,
|
|
418
|
-
score:
|
|
423
|
+
score: FRESH_TAIL_ITEM_SCORE,
|
|
419
424
|
layer: m.layer,
|
|
420
425
|
strength: m.strength,
|
|
421
426
|
isFreshTail: true,
|
|
@@ -471,9 +476,6 @@ function continuityTokensOf(c) {
|
|
|
471
476
|
tokenize(filteredHandoff?.cardId) +
|
|
472
477
|
c.recentSessionEvents.reduce((acc, e) => acc + tokenize(e.content), 0);
|
|
473
478
|
}
|
|
474
|
-
function callerOf(ctx) {
|
|
475
|
-
return { tenantId: ctx.tenantId, actor: ctx.actor.subject };
|
|
476
|
-
}
|
|
477
479
|
// A pure read of the caller's recallHistory snapshot against this top-1. HIPPO_ANCHORING=off skips even the detect
|
|
478
480
|
// call; CLI paths pass no history (cmdRecall computes its own hint), so the hint stays absent there.
|
|
479
481
|
function detectRecallAnchoring(opts, topMemoryId) {
|
package/dist/api/remember.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import { type MemoryKind } from '../memory.js';
|
|
1
|
+
import type { ConnectorEvent } from '../store/port.js';
|
|
2
|
+
import { type MemoryKind } from '../core/memory.js';
|
|
3
3
|
import type { Context, StoreReply } from './types.js';
|
|
4
4
|
export interface RememberOpts {
|
|
5
5
|
content: string;
|
|
@@ -8,15 +8,8 @@ export interface RememberOpts {
|
|
|
8
8
|
owner?: string;
|
|
9
9
|
artifactRef?: string;
|
|
10
10
|
tags?: string[];
|
|
11
|
-
/**
|
|
12
|
-
|
|
13
|
-
* memories INSERT. Used by ingestion connectors to stamp
|
|
14
|
-
* idempotency / cursor rows atomically with the memory row, so a crash
|
|
15
|
-
* mid-write cannot produce a memory without its corresponding side-effect
|
|
16
|
-
* log row (or vice versa). If the callback throws, the INSERT is rolled
|
|
17
|
-
* back and the error is rethrown.
|
|
18
|
-
*/
|
|
19
|
-
afterWrite?: (db: DatabaseSyncLike, memoryId: string) => void;
|
|
11
|
+
/** The connector event this write answers. The store logs it in the memory's own transaction; an event logged before stores nothing and answers `duplicate`. */
|
|
12
|
+
event?: ConnectorEvent;
|
|
20
13
|
/** Connector-ingested content an agent doesn't control; gates detectInstruction. CLI/HTTP/MCP never set this. */
|
|
21
14
|
untrusted?: boolean;
|
|
22
15
|
/** The caller's project: its name becomes the row's origin. Without it the store's fallback applies (NULL on a shared store). */
|
|
@@ -37,7 +30,12 @@ export interface RememberResult {
|
|
|
37
30
|
};
|
|
38
31
|
/** Set only when the content held secret material: untrusted text had it redacted, typed text was stored as sent. */
|
|
39
32
|
warnings?: string[];
|
|
33
|
+
/** Set only when the write's event was logged before: nothing was stored, so `id` names no row; `memoryId` is the id the first write logged. */
|
|
34
|
+
duplicate?: {
|
|
35
|
+
memoryId: string | null;
|
|
36
|
+
};
|
|
40
37
|
}
|
|
41
|
-
/** Store one memory
|
|
38
|
+
/** Store one memory: the store's entryWrites group writes the row and its one remember audit row, under the caller's subject.
|
|
39
|
+
* A write that carries a connector event or untrusted content goes through connectorWrites, which commits its companion rows with it. */
|
|
42
40
|
export declare function remember<C extends Context>(ctx: C, opts: RememberOpts): StoreReply<C, RememberResult>;
|
|
43
41
|
//# sourceMappingURL=remember.d.ts.map
|
package/dist/api/remember.js
CHANGED
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
// Write path: remember stores one memory after secret vetting and, for untrusted content, the instruction check.
|
|
2
|
-
import { writeEntry } from '../store/entry-writes.js';
|
|
3
2
|
import { stampOriginProject } from '../store/entry-row.js';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
3
|
+
import { detectInstruction } from './instruction-detect.js';
|
|
4
|
+
import { quarantineScopeFor } from '../trust/quarantine.js';
|
|
5
|
+
import { createMemory } from '../core/memory.js';
|
|
6
|
+
import { loadConfig } from '../core/config.js';
|
|
7
|
+
import { vetSecrets } from '../util/secret-detect.js';
|
|
8
|
+
import { assertCallerProject } from '../core/project-identity.js';
|
|
9
|
+
import { BadRequestError } from '../core/api-errors.js';
|
|
10
|
+
import { assertClientScope, personalScopeOf } from '../store/recall-scope.js';
|
|
11
|
+
import { andThen, notPorted, onStore } from './on-store.js';
|
|
13
12
|
/** The scope a write lands in: the caller's own personal scope when asked for, else the client's, which may not be a personal one. */
|
|
14
13
|
function rememberScope(ctx, opts) {
|
|
15
14
|
if (!opts.personal) {
|
|
@@ -46,49 +45,34 @@ function prepareRemember(ctx, opts) {
|
|
|
46
45
|
const stamped = origin !== undefined ? { ...entry, origin_project: origin } : entry;
|
|
47
46
|
return { entry: stamped, requestedScope, detection, warnings: vetted.warnings };
|
|
48
47
|
}
|
|
49
|
-
function rememberResult(ctx, prepared) {
|
|
48
|
+
function rememberResult(ctx, prepared, written) {
|
|
50
49
|
const { entry, detection, warnings } = prepared;
|
|
51
50
|
const result = { id: entry.id, kind: entry.kind, tenantId: ctx.tenantId };
|
|
52
51
|
if (detection.flagged)
|
|
53
52
|
result.quarantined = { reason: detection.reason ?? 'unknown' };
|
|
54
53
|
if (warnings.length > 0)
|
|
55
54
|
result.warnings = [...warnings];
|
|
55
|
+
if (written?.outcome === 'duplicate')
|
|
56
|
+
result.duplicate = { memoryId: written.memoryId };
|
|
56
57
|
return result;
|
|
57
58
|
}
|
|
58
|
-
/**
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
// SAFETY: a C typed with a store gets the promise its path returns; a wide C is typed as the union, which a caller has to await anyway.
|
|
62
|
-
return reply;
|
|
63
|
-
}
|
|
64
|
-
/** afterWrite and the quarantine row write on hippo.db's own handle, and only connectors send them, so a store refuses both. */
|
|
65
|
-
async function rememberThroughStore(ctx, store, opts) {
|
|
66
|
-
const entryWrites = requireGroup(store, 'entryWrites');
|
|
67
|
-
if (opts.afterWrite || opts.untrusted)
|
|
68
|
-
throw new Error('afterWrite and untrusted content are written to hippo.db only, never through a store');
|
|
69
|
-
const prepared = prepareRemember(ctx, opts);
|
|
70
|
-
// The store writes origin_project as given, so the served folder's fallback is stamped here.
|
|
71
|
-
await entryWrites.writeEntry({ entry: stampOriginProject(ctx.hippoRoot, prepared.entry), actor: ctx.actor.subject });
|
|
72
|
-
return rememberResult(ctx, prepared);
|
|
59
|
+
/** A flagged row's review record, which the store writes in the row's own transaction. */
|
|
60
|
+
function quarantineOf({ requestedScope, detection }) {
|
|
61
|
+
return detection.flagged ? { originalScope: requestedScope, reason: detection.reason ?? 'unknown' } : undefined;
|
|
73
62
|
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
opts.afterWrite?.(db, memoryId);
|
|
89
|
-
}
|
|
90
|
-
: opts.afterWrite;
|
|
91
|
-
writeEntry(ctx.hippoRoot, prepared.entry, { actor: ctx.actor.subject, afterWrite });
|
|
92
|
-
return rememberResult(ctx, prepared);
|
|
63
|
+
/** Store one memory: the store's entryWrites group writes the row and its one remember audit row, under the caller's subject.
|
|
64
|
+
* A write that carries a connector event or untrusted content goes through connectorWrites, which commits its companion rows with it. */
|
|
65
|
+
export function remember(ctx, opts) {
|
|
66
|
+
return onStore(ctx, (port) => {
|
|
67
|
+
const entryWrites = port.entryWrites ?? notPorted(port, 'entryWrites');
|
|
68
|
+
const prepared = prepareRemember(ctx, opts);
|
|
69
|
+
// A store writes origin_project as given, so the served folder's fallback is stamped here.
|
|
70
|
+
const write = { entry: stampOriginProject(ctx.hippoRoot, prepared.entry), actor: ctx.actor.subject };
|
|
71
|
+
if (opts.untrusted !== true && opts.event === undefined)
|
|
72
|
+
return andThen(entryWrites.writeEntry(write), () => rememberResult(ctx, prepared));
|
|
73
|
+
const connectorWrites = port.connectorWrites ?? notPorted(port, 'connectorWrites');
|
|
74
|
+
const written = connectorWrites.writeConnectorEntry({ ...write, event: opts.event, quarantine: quarantineOf(prepared) });
|
|
75
|
+
return andThen(written, (outcome) => rememberResult(ctx, prepared, outcome));
|
|
76
|
+
});
|
|
93
77
|
}
|
|
94
78
|
//# sourceMappingURL=remember.js.map
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type Context } from './types.js';
|
|
2
|
+
/** Binds `sessionId` to the caller's owner on first use; a session another owner holds is a 409, so the client can set it aside. */
|
|
3
|
+
export declare function bindSessionOwner(ctx: Context, sessionId: string): void;
|
|
4
|
+
//# sourceMappingURL=session-owners.d.ts.map
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// A session id belongs to the first owner that binds it, so one developer's client cannot write into another's session.
|
|
2
|
+
import { ConflictError } from '../core/api-errors.js';
|
|
3
|
+
import { ownerOrSubject } from './types.js';
|
|
4
|
+
import { sessionOwnerOrBind } from '../store/sessions.js';
|
|
5
|
+
import { assertTenantId } from '../store/tenant.js';
|
|
6
|
+
import { DAY_MS } from '../util/time.js';
|
|
7
|
+
/** Bindings older than this are pruned when a new session binds. */
|
|
8
|
+
const BINDING_RETENTION_DAYS = 90;
|
|
9
|
+
/** Binds `sessionId` to the caller's owner on first use; a session another owner holds is a 409, so the client can set it aside. */
|
|
10
|
+
export function bindSessionOwner(ctx, sessionId) {
|
|
11
|
+
assertTenantId('bindSessionOwner', ctx.tenantId);
|
|
12
|
+
const owner = ownerOrSubject(ctx.actor);
|
|
13
|
+
const bound = sessionOwnerOrBind(ctx.hippoRoot, { tenantId: ctx.tenantId, sessionId, owner, retentionMs: BINDING_RETENTION_DAYS * DAY_MS });
|
|
14
|
+
if (bound !== owner)
|
|
15
|
+
throw new ConflictError('session id belongs to another caller');
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=session-owners.js.map
|
package/dist/api/sleep-run.d.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { loadAllEntries } from '../store/entry-reads.js';
|
|
2
2
|
import { deleteEntry } from '../store/delete-and-batch.js';
|
|
3
|
-
import { auditMemories } from '../audit.js';
|
|
4
|
-
import { autoShare } from '../shared.js';
|
|
3
|
+
import { auditMemories } from '../store/audit.js';
|
|
4
|
+
import { autoShare } from '../sharing/shared.js';
|
|
5
5
|
import { consolidate } from '../consolidate/sleep.js';
|
|
6
|
-
import { loadConfig } from '../config.js';
|
|
7
|
-
import { deduplicateStore } from '../dedupe.js';
|
|
8
|
-
import { computeAmbientState } from '../ambient.js';
|
|
9
|
-
import { loadPendingExtractionTenants } from '../graph
|
|
10
|
-
import { type ExtractResult } from '../graph
|
|
6
|
+
import { loadConfig } from '../core/config.js';
|
|
7
|
+
import { deduplicateStore } from '../consolidate/dedupe.js';
|
|
8
|
+
import { computeAmbientState } from '../core/ambient.js';
|
|
9
|
+
import { loadPendingExtractionTenants } from '../store/graph-queue.js';
|
|
10
|
+
import { type ExtractResult } from '../graph/extract.js';
|
|
11
11
|
import type { Context } from './types.js';
|
|
12
12
|
import type { SleepOpts, SleepResult } from './sleep.js';
|
|
13
13
|
/** Test-only seam: `runSleep` overrides force a phase to throw into emitSleepAudit's `partial: true` row; production never sets them. */
|
package/dist/api/sleep-run.js
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
// The sleep pipeline behind `sleep`, with its phase dependencies injectable; kept out of the package root.
|
|
2
|
-
import { openHippoDb, closeHippoDb } from '../db.js';
|
|
3
2
|
import { loadAllEntries } from '../store/entry-reads.js';
|
|
4
3
|
import { deleteEntry, memoriesBackingObjects } from '../store/delete-and-batch.js';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
4
|
+
import { reportAuditWriteFailure, auditMemories } from '../store/audit.js';
|
|
5
|
+
import { sqliteSyncStore } from '../store/sqlite/store.js';
|
|
6
|
+
import { autoShare } from '../sharing/shared.js';
|
|
7
7
|
import { consolidate } from '../consolidate/sleep.js';
|
|
8
8
|
import { failedUnitOf } from '../store/delete-and-batch.js';
|
|
9
|
-
import { loadConfig } from '../config.js';
|
|
10
|
-
import { deduplicateStore } from '../dedupe.js';
|
|
11
|
-
import { computeAmbientState } from '../ambient.js';
|
|
12
|
-
import { loadPendingExtractionTenants } from '../graph
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
9
|
+
import { loadConfig } from '../core/config.js';
|
|
10
|
+
import { deduplicateStore } from '../consolidate/dedupe.js';
|
|
11
|
+
import { computeAmbientState } from '../core/ambient.js';
|
|
12
|
+
import { loadPendingExtractionTenants, markPendingProcessedUpTo } from '../store/graph-queue.js';
|
|
13
|
+
import { extractGraphChunked } from '../graph/extract.js';
|
|
14
|
+
import { errorMessage } from '../util/log.js';
|
|
15
15
|
const DEFAULT_SLEEP_PHASES = {
|
|
16
16
|
consolidate,
|
|
17
17
|
deduplicateStore,
|
|
@@ -60,7 +60,7 @@ async function runSleepPhases(ctx, opts, phases, counts) {
|
|
|
60
60
|
if (dedupResult.removed > 0)
|
|
61
61
|
result.deduped = dedupSummary(dedupResult);
|
|
62
62
|
// Phase 3: Quality audit (remove junk, report warnings; a dry run skips rows earlier phases would remove).
|
|
63
|
-
counts.auditDeleted = runQualityAudit(ctx, phases, dryRun, consolidateResult, dedupResult, result);
|
|
63
|
+
counts.auditDeleted = runQualityAudit(ctx, phases, { dryRun, consolidateResult, dedupResult, result });
|
|
64
64
|
if (dryRun)
|
|
65
65
|
return result;
|
|
66
66
|
// Phase 4: Auto-share high-transfer-score memories to global.
|
|
@@ -80,10 +80,7 @@ function snapshotDirtyTenants(ctx, phases, dryRun) {
|
|
|
80
80
|
snapshot.dirtyTenants = phases.loadPendingExtractionTenants(ctx.hippoRoot);
|
|
81
81
|
}
|
|
82
82
|
catch (snapErr) {
|
|
83
|
-
|
|
84
|
-
// any JS value is safe (undefined if absent), preserving the existing
|
|
85
|
-
// lenient formatting even when something non-Error was thrown.
|
|
86
|
-
snapshot.error = snapErr.message;
|
|
83
|
+
snapshot.error = errorMessage(snapErr);
|
|
87
84
|
}
|
|
88
85
|
}
|
|
89
86
|
return snapshot;
|
|
@@ -118,8 +115,8 @@ function dedupSummary(dedupResult) {
|
|
|
118
115
|
crossDups,
|
|
119
116
|
};
|
|
120
117
|
}
|
|
121
|
-
|
|
122
|
-
|
|
118
|
+
function runQualityAudit(ctx, phases, options) {
|
|
119
|
+
const { dryRun, consolidateResult, dedupResult, result } = options;
|
|
123
120
|
const planned = new Set(dryRun ? [...(consolidateResult.removedIds ?? []), ...dedupResult.pairs.map((p) => p.removed)] : []);
|
|
124
121
|
const allEntries = phases.loadAllEntries(ctx.hippoRoot).filter((e) => !planned.has(e.id));
|
|
125
122
|
const auditOut = phases.auditMemories(allEntries, memoriesBackingObjects(ctx.hippoRoot));
|
|
@@ -180,49 +177,45 @@ async function drainGraphQueue(ctx, phases, snapshot, result) {
|
|
|
180
177
|
`graph: dirty-tenant snapshot failed (skipped graph refresh): ${snapshot.error}`,
|
|
181
178
|
];
|
|
182
179
|
}
|
|
183
|
-
|
|
184
|
-
let gEntities = 0;
|
|
185
|
-
let gRelations = 0;
|
|
180
|
+
const rebuilt = { tenants: 0, entities: 0, relations: 0 };
|
|
186
181
|
// dirtyTenants was snapshotted before the memory-deleting phases above.
|
|
187
182
|
for (const { tenantId, maxPendingId } of snapshot.dirtyTenants) {
|
|
188
|
-
|
|
189
|
-
const ext = await phases.extractGraph(ctx.hippoRoot, tenantId);
|
|
190
|
-
// Count the rebuild as soon as it succeeds — it happened regardless of
|
|
191
|
-
// the drain-mark below.
|
|
192
|
-
gTenants += 1;
|
|
193
|
-
gEntities += ext.entities;
|
|
194
|
-
gRelations += ext.relations;
|
|
195
|
-
if (ext.skipped) {
|
|
196
|
-
result.details = [
|
|
197
|
-
...(result.details ?? []),
|
|
198
|
-
`graph: ${ext.skipped} stale op(s) skipped for a tenant; the next sleep redoes them`,
|
|
199
|
-
];
|
|
200
|
-
}
|
|
201
|
-
// Watermark drain: only items enqueued before this rebuild started are marked; later arrivals stay pending.
|
|
202
|
-
// Marked only after the last chunk, so a run stopped between chunks leaves the tenant for the next one.
|
|
203
|
-
markPendingProcessedUpTo(ctx.hippoRoot, tenantId, maxPendingId);
|
|
204
|
-
}
|
|
205
|
-
catch (tenantErr) {
|
|
206
|
-
// SAFETY: this is a best-effort log message only; property access
|
|
207
|
-
// on any JS value is safe (undefined if absent), preserving the
|
|
208
|
-
// existing lenient formatting even when something non-Error was thrown.
|
|
209
|
-
result.details = [
|
|
210
|
-
...(result.details ?? []),
|
|
211
|
-
`graph: extract failed for a dirty tenant (left pending): ${tenantErr.message}`,
|
|
212
|
-
];
|
|
213
|
-
}
|
|
183
|
+
await rebuildDirtyTenant(ctx, phases, { tenantId, maxPendingId }, rebuilt, result);
|
|
214
184
|
}
|
|
215
|
-
if (
|
|
216
|
-
result.graph =
|
|
185
|
+
if (rebuilt.tenants > 0) {
|
|
186
|
+
result.graph = rebuilt;
|
|
217
187
|
}
|
|
218
188
|
}
|
|
219
189
|
catch (graphErr) {
|
|
220
|
-
// SAFETY: this is a best-effort log message only; property access on
|
|
221
|
-
// any JS value is safe (undefined if absent), preserving the existing
|
|
222
|
-
// lenient formatting even when something non-Error was thrown.
|
|
223
190
|
result.details = [
|
|
224
191
|
...(result.details ?? []),
|
|
225
|
-
`graph: drain phase failed (skipped): ${graphErr
|
|
192
|
+
`graph: drain phase failed (skipped): ${errorMessage(graphErr)}`,
|
|
193
|
+
];
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
/** Rebuilds one dirty tenant's graph into `rebuilt` and drains its queue; a failure is a detail line and the tenant stays pending. */
|
|
197
|
+
async function rebuildDirtyTenant(ctx, phases, dirty, rebuilt, result) {
|
|
198
|
+
try {
|
|
199
|
+
const ext = await phases.extractGraph(ctx.hippoRoot, dirty.tenantId);
|
|
200
|
+
// Count the rebuild as soon as it succeeds — it happened regardless of
|
|
201
|
+
// the drain-mark below.
|
|
202
|
+
rebuilt.tenants += 1;
|
|
203
|
+
rebuilt.entities += ext.entities;
|
|
204
|
+
rebuilt.relations += ext.relations;
|
|
205
|
+
if (ext.skipped) {
|
|
206
|
+
result.details = [
|
|
207
|
+
...(result.details ?? []),
|
|
208
|
+
`graph: ${ext.skipped} stale op(s) skipped for a tenant; the next sleep redoes them`,
|
|
209
|
+
];
|
|
210
|
+
}
|
|
211
|
+
// Watermark drain: only items enqueued before this rebuild started are marked; later arrivals stay pending.
|
|
212
|
+
// Marked only after the last chunk, so a run stopped between chunks leaves the tenant for the next one.
|
|
213
|
+
markPendingProcessedUpTo(ctx.hippoRoot, dirty.tenantId, dirty.maxPendingId);
|
|
214
|
+
}
|
|
215
|
+
catch (tenantErr) {
|
|
216
|
+
result.details = [
|
|
217
|
+
...(result.details ?? []),
|
|
218
|
+
`graph: extract failed for a dirty tenant (left pending): ${errorMessage(tenantErr)}`,
|
|
226
219
|
];
|
|
227
220
|
}
|
|
228
221
|
}
|
|
@@ -230,34 +223,29 @@ async function drainGraphQueue(ctx, phases, snapshot, result) {
|
|
|
230
223
|
// Its own handle; an audit failure is logged and never replaces the original phase error.
|
|
231
224
|
function emitSleepAudit(ctx, opts, dryRun, counts, phaseError) {
|
|
232
225
|
try {
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
appendAuditEvent(db, {
|
|
226
|
+
// Tagged '__host__' because sleep is host-wide; the actor still names the operator who ran it.
|
|
227
|
+
const sleepAuditMetadata = {
|
|
228
|
+
consolidationCount: counts.consolidation,
|
|
229
|
+
dedupCount: counts.dedup,
|
|
230
|
+
auditDeletedCount: counts.auditDeleted,
|
|
231
|
+
ambientTotal: counts.ambient,
|
|
232
|
+
dryRun,
|
|
233
|
+
noShare: opts.noShare ?? false,
|
|
234
|
+
partial: phaseError !== null,
|
|
235
|
+
triggeredByTenant: ctx.tenantId, // preserve for audit forensics
|
|
236
|
+
};
|
|
237
|
+
if (phaseError)
|
|
238
|
+
sleepAuditMetadata.errorMessage = phaseError.message;
|
|
239
|
+
// A flush stopped between chunks names the unit it would have committed next, so a unit that fails every night can be found.
|
|
240
|
+
const nextUnitIds = failedUnitOf(phaseError);
|
|
241
|
+
if (nextUnitIds)
|
|
242
|
+
sleepAuditMetadata.nextUnitIds = nextUnitIds;
|
|
243
|
+
sqliteSyncStore(ctx.hippoRoot).appendAuditEvents([{
|
|
252
244
|
tenantId: '__host__',
|
|
253
245
|
actor: ctx.actor.subject,
|
|
254
246
|
op: 'consolidate',
|
|
255
247
|
metadata: { ...sleepAuditMetadata },
|
|
256
|
-
});
|
|
257
|
-
}
|
|
258
|
-
finally {
|
|
259
|
-
closeHippoDb(db);
|
|
260
|
-
}
|
|
248
|
+
}]);
|
|
261
249
|
}
|
|
262
250
|
catch (auditErr) {
|
|
263
251
|
// Logged, never thrown: a second failure must not mask the original phaseError.
|
package/dist/api/sleep.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { AmbientState } from '../ambient.js';
|
|
1
|
+
import type { AmbientState } from '../core/ambient.js';
|
|
2
2
|
import type { Context } from './types.js';
|
|
3
3
|
/** Options for `sleep`, one consolidation cycle on a SQLite store that returns counts; unlike `hippo sleep` it skips the auto-learn step. */
|
|
4
4
|
export interface SleepOpts {
|
package/dist/api/tokens.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import type { TokenSummary, TokenSurface } from '../store/token-ledger.js';
|
|
2
|
+
import type { FailureSummary } from '../store/failure-log.js';
|
|
3
3
|
import type { Context } from './types.js';
|
|
4
4
|
/**
|
|
5
5
|
* Record memory text handed to an agent in the token ledger.
|
package/dist/api/tokens.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// Token-use and failure reports.
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
2
|
+
import { rethrowIfSqliteBlocked } from '../db/index.js';
|
|
3
|
+
import { storeFor } from '../store/index.js';
|
|
4
|
+
import { failureLogSummary, tokenUseSummary } from '../store/usage-reports.js';
|
|
5
|
+
import { errorMessage, log } from '../util/log.js';
|
|
6
|
+
import { DAY_MS } from '../util/time.js';
|
|
7
7
|
/**
|
|
8
8
|
* Record memory text handed to an agent in the token ledger.
|
|
9
9
|
* Best-effort: never throws, because a ledger failure must not fail the
|
|
@@ -22,7 +22,7 @@ export async function recordTokens(ctx, surface, use) {
|
|
|
22
22
|
}
|
|
23
23
|
catch (err) {
|
|
24
24
|
rethrowIfSqliteBlocked(err);
|
|
25
|
-
log.warnThenDebug('api-token-ledger', `token ledger write failed; the reply is unaffected: ${
|
|
25
|
+
log.warnThenDebug('api-token-ledger', `token ledger write failed; the reply is unaffected: ${errorMessage(err)}`);
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
28
|
/**
|
|
@@ -31,26 +31,14 @@ export async function recordTokens(ctx, surface, use) {
|
|
|
31
31
|
* surface, with session counts and mean tokens per session.
|
|
32
32
|
*/
|
|
33
33
|
export function tokenSummary(ctx, opts = {}) {
|
|
34
|
-
|
|
35
|
-
try {
|
|
36
|
-
return summarizeTokenUse(db, ctx.tenantId, reportWindowStart(opts.days));
|
|
37
|
-
}
|
|
38
|
-
finally {
|
|
39
|
-
closeHippoDb(db);
|
|
40
|
-
}
|
|
34
|
+
return tokenUseSummary(ctx.hippoRoot, ctx.tenantId, reportWindowStart(opts.days));
|
|
41
35
|
}
|
|
42
36
|
/** Failed tool calls by outcome, and repeats across sessions, over the last `days` days (default 30). */
|
|
43
37
|
export function failureSummary(ctx, opts = {}) {
|
|
44
|
-
|
|
45
|
-
try {
|
|
46
|
-
return summarizeFailures(db, ctx.tenantId, reportWindowStart(opts.days));
|
|
47
|
-
}
|
|
48
|
-
finally {
|
|
49
|
-
closeHippoDb(db);
|
|
50
|
-
}
|
|
38
|
+
return failureLogSummary(ctx.hippoRoot, ctx.tenantId, reportWindowStart(opts.days));
|
|
51
39
|
}
|
|
52
40
|
function reportWindowStart(days) {
|
|
53
41
|
const span = days !== undefined && Number.isFinite(days) && days > 0 ? days : 30;
|
|
54
|
-
return new Date(Date.now() - span *
|
|
42
|
+
return new Date(Date.now() - span * DAY_MS).toISOString();
|
|
55
43
|
}
|
|
56
44
|
//# sourceMappingURL=tokens.js.map
|