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,27 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
// ---------------------------------------------------------------------------
|
|
4
|
-
//
|
|
5
|
-
// Flags when a recall's returned top-K is dominated by recent entries while
|
|
6
|
-
// substantially older relevant candidates in the same MATCHED pool were passed
|
|
7
|
-
// over. This is the availability / recency heuristic (Tversky-Kahneman): what
|
|
8
|
-
// is most mentally available (recent) gets over-weighted relative to what is
|
|
9
|
-
// most relevant. Hippo's substrate makes this measurable: every entry carries a
|
|
10
|
-
// creation timestamp, so we can compare the age distribution of what was
|
|
11
|
-
// RETURNED against the age distribution of the pool it was drawn from.
|
|
12
|
-
//
|
|
13
|
-
// Soft warning ONLY: this never filters, reorders, or suppresses a result. It surfaces
|
|
14
|
-
// a hint the calling agent may act on, like anchoringHint / planningFallacyHint / suppressionSummary.
|
|
15
|
-
//
|
|
16
|
-
// PURE: no I/O, no env reads. The env gate (HIPPO_AVAILABILITY=off) and the
|
|
17
|
-
// audit emission live in the callers (api.recall, cmdRecall, MCP), mirroring
|
|
18
|
-
// detectAnchoring in recall-history.ts.
|
|
19
|
-
export const DEFAULT_RECENCY_WINDOW_MS = 24 * 60 * 60 * 1000;
|
|
1
|
+
import { DAY_MS } from '../util/time.js';
|
|
2
|
+
export const DEFAULT_RECENCY_WINDOW_MS = DAY_MS;
|
|
20
3
|
export const DEFAULT_RECENT_FRACTION_THRESHOLD = 0.7;
|
|
21
4
|
export const DEFAULT_MIN_RETURNED = 3;
|
|
22
5
|
export const DEFAULT_MIN_POOL = 10;
|
|
23
6
|
export const DEFAULT_MIN_OLDER_PASSED_OVER = 3;
|
|
24
|
-
const MS_PER_DAY = 24 * 60 * 60 * 1000;
|
|
25
7
|
const MS_PER_HOUR = 60 * 60 * 1000;
|
|
26
8
|
function median(nums) {
|
|
27
9
|
if (nums.length === 0)
|
|
@@ -30,6 +12,11 @@ function median(nums) {
|
|
|
30
12
|
const mid = Math.floor(sorted.length / 2);
|
|
31
13
|
return sorted.length % 2 === 0 ? (sorted[mid - 1] + sorted[mid]) / 2 : sorted[mid];
|
|
32
14
|
}
|
|
15
|
+
function parseTimestamps(refs) {
|
|
16
|
+
return refs
|
|
17
|
+
.map((e) => ({ id: e.id, ts: Date.parse(e.created) }))
|
|
18
|
+
.filter((e) => Number.isFinite(e.ts));
|
|
19
|
+
}
|
|
33
20
|
/**
|
|
34
21
|
* Detect availability/recency bias in a recall result.
|
|
35
22
|
*
|
|
@@ -52,24 +39,20 @@ export function detectAvailabilityBias(opts) {
|
|
|
52
39
|
const minReturned = opts.minReturned ?? DEFAULT_MIN_RETURNED;
|
|
53
40
|
const minPool = opts.minPool ?? DEFAULT_MIN_POOL;
|
|
54
41
|
const minOlderPassedOver = opts.minOlderPassedOver ?? DEFAULT_MIN_OLDER_PASSED_OVER;
|
|
55
|
-
const topK = opts.topK
|
|
56
|
-
|
|
57
|
-
.filter((e) => Number.isFinite(e.ts));
|
|
58
|
-
const pool = opts.pool
|
|
59
|
-
.map((e) => ({ id: e.id, ts: Date.parse(e.created) }))
|
|
60
|
-
.filter((e) => Number.isFinite(e.ts));
|
|
42
|
+
const topK = parseTimestamps(opts.topK);
|
|
43
|
+
const pool = parseTimestamps(opts.pool);
|
|
61
44
|
if (topK.length < minReturned || pool.length < minPool)
|
|
62
45
|
return null;
|
|
63
46
|
const recentCount = topK.filter((e) => now - e.ts <= recencyWindowMs).length;
|
|
64
47
|
const recentFraction = recentCount / topK.length;
|
|
65
48
|
if (recentFraction <= recentFractionThreshold)
|
|
66
49
|
return null;
|
|
67
|
-
const topKMedianAgeDays = median(topK.map((e) => (now - e.ts) /
|
|
68
|
-
const poolMedianAgeDays = median(pool.map((e) => (now - e.ts) /
|
|
50
|
+
const topKMedianAgeDays = median(topK.map((e) => (now - e.ts) / DAY_MS));
|
|
51
|
+
const poolMedianAgeDays = median(pool.map((e) => (now - e.ts) / DAY_MS));
|
|
69
52
|
if (poolMedianAgeDays <= topKMedianAgeDays)
|
|
70
53
|
return null;
|
|
71
54
|
const topKIds = new Set(topK.map((e) => e.id));
|
|
72
|
-
const olderCandidatesPassedOver = pool.filter((e) => !topKIds.has(e.id) && (now - e.ts) /
|
|
55
|
+
const olderCandidatesPassedOver = pool.filter((e) => !topKIds.has(e.id) && (now - e.ts) / DAY_MS > topKMedianAgeDays).length;
|
|
73
56
|
if (olderCandidatesPassedOver < minOlderPassedOver)
|
|
74
57
|
return null;
|
|
75
58
|
const pct = Math.round(recentFraction * 100);
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { execFileSync } from 'child_process';
|
|
2
|
+
const MAX_DIFF_TERMS = 10;
|
|
2
3
|
const SKIPPED_PATH_TERMS = ['src', 'dist', 'test', 'tests', 'node_modules', 'index'];
|
|
3
4
|
// stderr is dropped because git's warnings (line-ending notices, for one) would otherwise become query terms.
|
|
4
5
|
function readGit(args) {
|
|
@@ -13,7 +14,7 @@ export function autoDetectContext() {
|
|
|
13
14
|
.split('\n')
|
|
14
15
|
.flatMap((f) => f.replace(/[/\\.]/g, ' ').split(/\s+/))
|
|
15
16
|
.filter((t) => t.length > 2 && !SKIPPED_PATH_TERMS.includes(t))
|
|
16
|
-
.slice(0,
|
|
17
|
+
.slice(0, MAX_DIFF_TERMS);
|
|
17
18
|
if (terms.length > 0)
|
|
18
19
|
return terms.join(' ');
|
|
19
20
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { type MemoryEntry } from '
|
|
2
|
-
import { type SessionHandoff } from '
|
|
3
|
-
import type { SessionEvent, TaskSnapshot } from '
|
|
4
|
-
import type { AssembleCost, AssembleResult, AssembledContextItem, ContextCost, ContextResultEntry, DrillDownChild, DrillDownCost, DrillDownResult } from './
|
|
1
|
+
import { type MemoryEntry } from '../core/memory.js';
|
|
2
|
+
import { type SessionHandoff } from '../core/handoff.js';
|
|
3
|
+
import type { SessionEvent, TaskSnapshot } from '../store/rows.js';
|
|
4
|
+
import type { AssembleCost, AssembleResult, AssembledContextItem, ContextCost, ContextResultEntry, DrillDownChild, DrillDownCost, DrillDownResult } from './index.js';
|
|
5
5
|
export declare function snapshotText(s: TaskSnapshot): string;
|
|
6
6
|
export declare function handoffText(h: SessionHandoff): string;
|
|
7
7
|
/** Needs at least one event; the header reads the latest. */
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
// The strings a context block prints. The budget prices these same strings, so selection and print cannot drift.
|
|
2
|
-
import { calculateStrength, confidenceFacets, confidenceLabel } from '
|
|
3
|
-
import { evalNow } from '
|
|
4
|
-
import { estimateTokens } from '
|
|
5
|
-
import { renderAmbientSummary } from '
|
|
6
|
-
import { formatHandoffEvidenceLine } from '
|
|
2
|
+
import { calculateStrength, confidenceFacets, confidenceLabel } from '../core/memory.js';
|
|
3
|
+
import { evalNow } from '../core/ablation.js';
|
|
4
|
+
import { estimateTokens } from '../util/token-text.js';
|
|
5
|
+
import { renderAmbientSummary } from '../core/ambient.js';
|
|
6
|
+
import { formatHandoffEvidenceLine } from '../core/handoff.js';
|
|
7
|
+
import { DATE_PREFIX_CHARS } from '../util/token-text.js';
|
|
7
8
|
export function snapshotText(s) {
|
|
8
9
|
return [
|
|
9
10
|
'## Active Task Snapshot\n',
|
|
@@ -78,7 +79,7 @@ export function contextLine(item, framing, showStrength, now, strengthPct = Math
|
|
|
78
79
|
const label = confidenceLabel(e, now);
|
|
79
80
|
const confTag = `[${label.text}]${label.warn ? ' ⚠️' : ''}`;
|
|
80
81
|
if (framing === 'observe') {
|
|
81
|
-
const dateStr = new Date(e.created).toISOString().slice(0,
|
|
82
|
+
const dateStr = new Date(e.created).toISOString().slice(0, DATE_PREFIX_CHARS);
|
|
82
83
|
// Verified rules print without the date prefix.
|
|
83
84
|
if (confidenceFacets(e, now).tier === 'verified')
|
|
84
85
|
return `- **${confTag} ${globalPrefix}${e.content}**${tagStr}${strengthStr}`;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { AmbientLoadResult } from '../store/candidates.js';
|
|
2
|
-
import { type MemoryEntry } from '../memory.js';
|
|
3
|
-
import type { ContextReads, HippoStore } from '../store
|
|
4
|
-
import { type HippoConfig } from '../config.js';
|
|
5
|
-
import type { ProjectRef } from '../project-identity.js';
|
|
6
|
-
import type { DeliveryObserver } from '../delivery-recorder.js';
|
|
2
|
+
import { type MemoryEntry } from '../core/memory.js';
|
|
3
|
+
import type { ContextReads, HippoStore } from '../store/index.js';
|
|
4
|
+
import { type HippoConfig } from '../core/config.js';
|
|
5
|
+
import type { ProjectRef } from '../core/project-identity.js';
|
|
6
|
+
import type { DeliveryObserver } from '../store/delivery-recorder.js';
|
|
7
7
|
import type { ContextCost, ContextOpts, ContextResultEntry } from './context-types.js';
|
|
8
8
|
import type { Context } from './types.js';
|
|
9
9
|
/** One store getContext reads rows from: its base search and its context reads. */
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
// getContext's selection stages: the pinned-only branch, the strongest-first branch and the search branch.
|
|
2
|
-
import { openHippoDb, closeHippoDb } from '../db.js';
|
|
3
2
|
import { recallScopeFilter } from '../store/search-rows.js';
|
|
4
|
-
import {
|
|
5
|
-
import { calculateStrength } from '../memory.js';
|
|
6
|
-
import {
|
|
7
|
-
import { isWorthSurfacing } from '../memory-quality.js';
|
|
8
|
-
import { rankBothStores } from '../shared.js';
|
|
9
|
-
import { evalNow } from '../ablation.js';
|
|
3
|
+
import { heldIdLookup } from '../store/entry-reads.js';
|
|
4
|
+
import { calculateStrength } from '../core/memory.js';
|
|
5
|
+
import { auditQueryFields, recordAuditEvent } from '../store/audit.js';
|
|
6
|
+
import { isWorthSurfacing } from '../core/memory-quality.js';
|
|
7
|
+
import { rankBothStores } from '../sharing/shared.js';
|
|
8
|
+
import { evalNow } from '../core/ablation.js';
|
|
10
9
|
import { hybridSearch } from '../search/hybrid.js';
|
|
11
10
|
import { physicsSearch } from '../search/physics-search.js';
|
|
12
|
-
import { DEFAULT_LOCAL_BUMP } from '../search
|
|
13
|
-
import { compareScoredResults } from '../compare.js';
|
|
14
|
-
import { scopeMatch } from '../scope.js';
|
|
15
|
-
import {
|
|
11
|
+
import { DEFAULT_LOCAL_BUMP } from '../core/search-types.js';
|
|
12
|
+
import { compareScoredResults } from '../core/compare.js';
|
|
13
|
+
import { scopeMatch } from '../sharing/scope.js';
|
|
14
|
+
import { scopeBoostFor } from '../search/boosts.js';
|
|
15
|
+
import { promptTokens, contentTokens, gatePromptRecall, } from '../core/prompt-recall.js';
|
|
16
16
|
const GLOBAL_DISCOUNT = 1 / DEFAULT_LOCAL_BUMP;
|
|
17
17
|
// Share and promote copy a memory to the global store under a new id, so equal content is the only link.
|
|
18
18
|
// A pinned copy wins, then the stronger one after the ranking's own global discount; a tie keeps the local copy.
|
|
@@ -61,10 +61,10 @@ export function selectPinned(opts, plan, left, pools, admission) {
|
|
|
61
61
|
// Prompt recall gates the backfill on the prompt instead of recency.
|
|
62
62
|
if (plan.promptRecallPending) {
|
|
63
63
|
const candidates = () => promptRecallCandidates(plan, pools, admission.admit, rankedPinned, nowP);
|
|
64
|
-
backfillFromPrompt(opts, plan, pinnedCfg, candidates, picked, recentBudget);
|
|
64
|
+
backfillFromPrompt(opts, plan, { pinnedCfg, candidates, picked, recentBudget });
|
|
65
65
|
}
|
|
66
66
|
else if (plan.includeRecent > 0) {
|
|
67
|
-
backfillRecent(plan, localPool, globalPool, picked, recentBudget, nowP);
|
|
67
|
+
backfillRecent(plan, { localPool, globalPool, picked, recentBudget, nowP });
|
|
68
68
|
}
|
|
69
69
|
admitWithinBudget(rankedPinned, picked, effBudget, obs);
|
|
70
70
|
return picked.items;
|
|
@@ -75,11 +75,10 @@ function rankPinned(plan, pinnedLocal, pinnedGlobal, nowP) {
|
|
|
75
75
|
...pinnedGlobal.map((e) => ({ entry: e, isGlobal: true })),
|
|
76
76
|
]
|
|
77
77
|
.map(({ entry, isGlobal }) => {
|
|
78
|
-
const
|
|
79
|
-
const sBst = scopeSig === 1 ? 1.5 : scopeSig === -1 ? 0.5 : 1.0;
|
|
78
|
+
const scopeBoost = scopeBoostFor(scopeMatch(entry.tags, plan.activeScope));
|
|
80
79
|
return {
|
|
81
80
|
entry,
|
|
82
|
-
score: calculateStrength(entry, nowP) * (isGlobal ? GLOBAL_DISCOUNT : 1) *
|
|
81
|
+
score: calculateStrength(entry, nowP) * (isGlobal ? GLOBAL_DISCOUNT : 1) * scopeBoost,
|
|
83
82
|
tokens: plan.price(entry, isGlobal),
|
|
84
83
|
isGlobal,
|
|
85
84
|
};
|
|
@@ -115,12 +114,15 @@ function admitWithinBudget(rows, picked, budget, obs) {
|
|
|
115
114
|
picked.used += r.tokens;
|
|
116
115
|
}
|
|
117
116
|
}
|
|
118
|
-
|
|
117
|
+
// Overlap a candidate needs with the prompt when the config sets none.
|
|
118
|
+
const DEFAULT_PROMPT_RECALL_THRESHOLD = 0.04;
|
|
119
|
+
function backfillFromPrompt(opts, plan, options) {
|
|
120
|
+
const { pinnedCfg, candidates, picked, recentBudget } = options;
|
|
119
121
|
const rawMetric = pinnedCfg.pinnedInject.promptRecallMetric;
|
|
120
122
|
const metric = rawMetric === 'cosine' ? 'cosine' : 'jaccard';
|
|
121
123
|
const gate = {
|
|
122
124
|
metric,
|
|
123
|
-
threshold: finiteOr(pinnedCfg.pinnedInject.promptRecallThreshold,
|
|
125
|
+
threshold: finiteOr(pinnedCfg.pinnedInject.promptRecallThreshold, DEFAULT_PROMPT_RECALL_THRESHOLD, 0),
|
|
124
126
|
minShared: finiteOr(pinnedCfg.pinnedInject.promptRecallMinShared, 2, 0),
|
|
125
127
|
maxItems: finiteOr(pinnedCfg.pinnedInject.promptRecallMaxItems, 5, 1),
|
|
126
128
|
};
|
|
@@ -182,7 +184,8 @@ function promptRecallCandidates(plan, pools, admit, rankedPinned, nowP) {
|
|
|
182
184
|
}
|
|
183
185
|
return candidateItems;
|
|
184
186
|
}
|
|
185
|
-
function backfillRecent(plan,
|
|
187
|
+
function backfillRecent(plan, options) {
|
|
188
|
+
const { localPool, globalPool, picked, recentBudget, nowP } = options;
|
|
186
189
|
const recent = [
|
|
187
190
|
...localPool.map((entry) => ({ entry, isGlobal: plan.primaryIsGlobal })),
|
|
188
191
|
...globalPool.map((entry) => ({ entry, isGlobal: true })),
|
|
@@ -239,17 +242,19 @@ export function selectStrongest(plan, left, pools) {
|
|
|
239
242
|
export async function selectBySearch(ctx, plan, left, pools, admission) {
|
|
240
243
|
const minResults = plan.cost ? 0 : undefined; // a priced block skips an oversize top hit too, so the budget bounds it
|
|
241
244
|
const results = plan.hasGlobal && !plan.primaryIsGlobal
|
|
242
|
-
? await searchBothStores(ctx, plan, left, minResults, pools, admission.bothStoresAdmit)
|
|
243
|
-
: await searchLocalRows(ctx, plan, left, minResults, pools.local.entries, admission.admit);
|
|
245
|
+
? await searchBothStores(ctx, plan, { left, minResults, pools, admit: admission.bothStoresAdmit })
|
|
246
|
+
: await searchLocalRows(ctx, plan, { left, minResults, localEntries: pools.local.entries, admit: admission.admit });
|
|
244
247
|
await auditContextRecall(ctx, plan, results.length);
|
|
245
248
|
return results;
|
|
246
249
|
}
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
async function searchBothStores(ctx, plan, left, minResults, pools, admit) {
|
|
250
|
+
async function searchBothStores(ctx, plan, options) {
|
|
251
|
+
const { left, minResults, pools, admit } = options;
|
|
250
252
|
const { cost, price } = plan;
|
|
251
|
-
|
|
252
|
-
const
|
|
253
|
+
// A local pool row is local by construction; sync keeps a global row's id on its local copy, so the global pool is looked up.
|
|
254
|
+
const poolIds = (pool) => [...pool.entries, ...(pool.recall ?? [])].map((e) => e.id);
|
|
255
|
+
const localIds = new Set(poolIds(pools.local));
|
|
256
|
+
const alsoLocal = heldIdLookup(ctx.hippoRoot, ctx.tenantId, poolIds(pools.global).filter((id) => !localIds.has(id)));
|
|
257
|
+
const isGlobalHit = (e) => !localIds.has(e.id) && !alsoLocal(e.id);
|
|
253
258
|
const roots = { local: ctx.hippoRoot, global: plan.globalRoot };
|
|
254
259
|
const merged = await rankBothStores(plan.query, roots, { local: pools.local.entries, global: pools.global.entries }, contextVectorSpec(ctx, plan, admit), {
|
|
255
260
|
budget: left,
|
|
@@ -268,7 +273,8 @@ async function searchBothStores(ctx, plan, left, minResults, pools, admit) {
|
|
|
268
273
|
function contextVectorSpec(ctx, plan, admit) {
|
|
269
274
|
return { tenantId: ctx.tenantId, scope: recallScopeFilter(plan.exactScope, 'exact', plan.ownScope), includeSuperseded: false, admit };
|
|
270
275
|
}
|
|
271
|
-
async function searchLocalRows(ctx, plan,
|
|
276
|
+
async function searchLocalRows(ctx, plan, options) {
|
|
277
|
+
const { left, minResults, localEntries, admit } = options;
|
|
272
278
|
const { cost, price, primaryIsGlobal, query, config: ctxConfig } = plan;
|
|
273
279
|
const usePhysicsCtx = ctxConfig.physics?.enabled !== false;
|
|
274
280
|
const localCost = cost && ((r) => price(r.entry, primaryIsGlobal));
|
|
@@ -313,23 +319,9 @@ async function auditContextRecall(ctx, plan, resultCount) {
|
|
|
313
319
|
await plan.other.appendAuditEvents([row]);
|
|
314
320
|
return;
|
|
315
321
|
}
|
|
316
|
-
if (plan.hasLocal)
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
}
|
|
321
|
-
finally {
|
|
322
|
-
closeHippoDb(localDb);
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
if (plan.hasGlobal && !plan.primaryIsGlobal) {
|
|
326
|
-
const globalDb = openHippoDb(plan.globalRoot);
|
|
327
|
-
try {
|
|
328
|
-
appendAuditEvent(globalDb, row);
|
|
329
|
-
}
|
|
330
|
-
finally {
|
|
331
|
-
closeHippoDb(globalDb);
|
|
332
|
-
}
|
|
333
|
-
}
|
|
322
|
+
if (plan.hasLocal)
|
|
323
|
+
recordAuditEvent(ctx.hippoRoot, row);
|
|
324
|
+
if (plan.hasGlobal && !plan.primaryIsGlobal)
|
|
325
|
+
recordAuditEvent(plan.globalRoot, row);
|
|
334
326
|
}
|
|
335
327
|
//# sourceMappingURL=context-select.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { TaskSnapshot, SessionEvent } from '../store/rows.js';
|
|
2
|
-
import type { SessionHandoff } from '../handoff.js';
|
|
3
|
-
import type { MemoryEntry } from '../memory.js';
|
|
4
|
-
import type { DeliveryObserver } from '../delivery-recorder.js';
|
|
5
|
-
import type { AmbientState } from '../ambient.js';
|
|
6
|
-
import type { ProjectRef } from '../project-identity.js';
|
|
2
|
+
import type { SessionHandoff } from '../core/handoff.js';
|
|
3
|
+
import type { MemoryEntry } from '../core/memory.js';
|
|
4
|
+
import type { DeliveryObserver } from '../store/delivery-recorder.js';
|
|
5
|
+
import type { AmbientState } from '../core/ambient.js';
|
|
6
|
+
import type { ProjectRef } from '../core/project-identity.js';
|
|
7
7
|
/**
|
|
8
8
|
* Options for `getContext` — assemble a budget-bounded context bundle
|
|
9
9
|
* (recalled memories + active task snapshot + handoff + recent events).
|
package/dist/api/context.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type MemoryEntry } from '../memory.js';
|
|
2
|
-
import { type ProjectRef } from '../project-identity.js';
|
|
1
|
+
import { type MemoryEntry } from '../core/memory.js';
|
|
2
|
+
import { type ProjectRef } from '../core/project-identity.js';
|
|
3
3
|
import type { ContextOpts, ContextResult } from './context-types.js';
|
|
4
4
|
import { type Context } from './types.js';
|
|
5
5
|
export { oneCopyPerMemory } from './context-select.js';
|
|
@@ -9,8 +9,6 @@ export { oneCopyPerMemory } from './context-select.js';
|
|
|
9
9
|
* flagged rows with no project origin never ambient-inject.
|
|
10
10
|
*/
|
|
11
11
|
export declare function ambientSecretAdmit(e: MemoryEntry, currentProject: ProjectRef): boolean;
|
|
12
|
-
/** Most rows per store a no-query context reads; past it, ranking and ambientState see the strongest by decay. */
|
|
13
|
-
export declare const CONTEXT_CANDIDATE_CAP = 2000;
|
|
14
12
|
/**
|
|
15
13
|
* Assemble a context bundle: recalled memories (pinned-only / strength-sorted
|
|
16
14
|
* fallback / hybrid search) + active task snapshot + session handoff + recent
|
package/dist/api/context.js
CHANGED
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
// Ambient context injection: the admission policy and getContext.
|
|
2
2
|
import { isInitialized } from '../store/open.js';
|
|
3
|
-
import { strengthenRetrieved } from '../store/entry-writes.js';
|
|
4
3
|
import { DEFAULT_SEARCH_CANDIDATE_LIMIT } from '../store/rows.js';
|
|
5
|
-
import { loadIndex, saveIndex, updateStats } from '../store/index-and-stats.js';
|
|
6
4
|
import { freshActiveSnapshot, SNAPSHOT_AMBIENT_MAX_AGE_MS } from '../store/sessions.js';
|
|
7
|
-
import { estimateTokens } from '../token-
|
|
8
|
-
import { markRetrieved, COMPACTION_MEMORY_TAG } from '../memory.js';
|
|
9
|
-
import { isWorthSurfacing } from '../memory-quality.js';
|
|
10
|
-
import { getGlobalRoot } from '../shared.js';
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import { log } from '../log.js';
|
|
17
|
-
import { resolveProjectIdentity, classifyOriginProject, isGlobalStoreRoot, projectId, projectNames } from '../project-identity.js';
|
|
18
|
-
import { promptTokens } from '../prompt-recall.js';
|
|
19
|
-
import { detectSecret } from '../secret-detect.js';
|
|
20
|
-
import { isSessionDigestRow } from '../session-digest.js';
|
|
21
|
-
import { addAmbientTallies, ambientStateFromTallies } from '../ambient.js';
|
|
22
|
-
import { requireGroup, sqliteStore, storeFor } from '../store
|
|
23
|
-
import { passesScopeFilterForRecall, assertScopeRequestAllowed, personalScopeOf } from '../recall-scope.js';
|
|
5
|
+
import { estimateTokens } from '../util/token-text.js';
|
|
6
|
+
import { markRetrieved, COMPACTION_MEMORY_TAG } from '../core/memory.js';
|
|
7
|
+
import { isWorthSurfacing } from '../core/memory-quality.js';
|
|
8
|
+
import { getGlobalRoot } from '../sharing/shared.js';
|
|
9
|
+
import { evalNow } from '../core/ablation.js';
|
|
10
|
+
import { dropHeldCopies } from '../util/same-text.js';
|
|
11
|
+
import { BadRequestError } from '../core/api-errors.js';
|
|
12
|
+
import { isSharedStore, loadConfig } from '../core/config.js';
|
|
13
|
+
import { rethrowIfSqliteBlocked } from '../db/index.js';
|
|
14
|
+
import { errorMessage, log } from '../util/log.js';
|
|
15
|
+
import { resolveProjectIdentity, classifyOriginProject, isGlobalStoreRoot, projectId, projectNames } from '../core/project-identity.js';
|
|
16
|
+
import { promptTokens } from '../core/prompt-recall.js';
|
|
17
|
+
import { detectSecret } from '../util/secret-detect.js';
|
|
18
|
+
import { isSessionDigestRow } from '../core/session-digest-row.js';
|
|
19
|
+
import { addAmbientTallies, ambientStateFromTallies } from '../core/ambient.js';
|
|
20
|
+
import { requireGroup, sqliteStore, storeFor } from '../store/index.js';
|
|
21
|
+
import { passesScopeFilterForRecall, assertScopeRequestAllowed, personalScopeOf } from '../store/recall-scope.js';
|
|
24
22
|
import { finiteOr, selectBySearch, selectPinned, selectStrongest, } from './context-select.js';
|
|
23
|
+
import { andThen, onStore } from './on-store.js';
|
|
24
|
+
import { strengthenOf } from './recall-record.js';
|
|
25
25
|
import { ownerOrSubject } from './types.js';
|
|
26
26
|
export { oneCopyPerMemory } from './context-select.js';
|
|
27
27
|
/**
|
|
@@ -60,14 +60,14 @@ export function ambientSecretAdmit(e, currentProject) {
|
|
|
60
60
|
return projectNames(currentProject).includes(origin);
|
|
61
61
|
}
|
|
62
62
|
/** Most rows per store a no-query context reads; past it, ranking and ambientState see the strongest by decay. */
|
|
63
|
-
|
|
63
|
+
const CONTEXT_CANDIDATE_CAP = 2000;
|
|
64
64
|
/** A store's base search and context reads; a store without the group throws StoreNotPortedError. */
|
|
65
65
|
function sourceOf(store) {
|
|
66
66
|
return { store, reads: requireGroup(store, 'contextReads') };
|
|
67
67
|
}
|
|
68
|
-
// The pinned-only branch needs pins and recent-N candidates, not the corpus
|
|
69
|
-
|
|
70
|
-
|
|
68
|
+
// The pinned-only branch needs pins and recent-N candidates, not the corpus.
|
|
69
|
+
async function loadAmbientEntries(source, tenantId, options) {
|
|
70
|
+
const { pinnedOnly, recent, admit, recheck, window, recall, onQualityDrop } = options;
|
|
71
71
|
const ownTenant = (e) => e.tenantId === tenantId;
|
|
72
72
|
if (!pinnedOnly) {
|
|
73
73
|
const rows = 'query' in window
|
|
@@ -166,18 +166,29 @@ function warnIsolationIgnored(hippoRoot) {
|
|
|
166
166
|
isolationWarned.add(hippoRoot);
|
|
167
167
|
log.warn(`${hippoRoot}: "contextProjectIsolation": false is ignored on a shared store; a read opts in with cross_project.`);
|
|
168
168
|
}
|
|
169
|
-
|
|
170
|
-
|
|
169
|
+
/** Which stores this read can draw on, and what kind the primary one is. */
|
|
170
|
+
function storesInReach(ctx, opts, local) {
|
|
171
171
|
const other = local.store.kind !== 'sqlite' ? local.store : undefined;
|
|
172
172
|
// Global memories do not establish a project boundary for task state.
|
|
173
173
|
const hasLocal = other !== undefined || isInitialized(ctx.hippoRoot);
|
|
174
|
-
const query = (opts.q ?? '').trim() || '*';
|
|
175
174
|
const globalRoot = getGlobalRoot();
|
|
176
175
|
// The store's own flag counts too, so no surface can read a shared store as its owner.
|
|
177
176
|
const sharedStore = opts.sharedStore === true || isSharedStore(ctx.hippoRoot);
|
|
178
177
|
// A store serving many people is not its operator's, so the operator's own global store stays out.
|
|
179
178
|
const hasGlobal = !sharedStore && other === undefined && isInitialized(globalRoot);
|
|
180
179
|
const primaryIsGlobal = isGlobalStoreRoot(ctx.hippoRoot);
|
|
180
|
+
return { other, hasLocal, globalRoot, sharedStore, hasGlobal, primaryIsGlobal };
|
|
181
|
+
}
|
|
182
|
+
/** Prices one entry against the budget: the caller's cost model when it gave one, else a token estimate. */
|
|
183
|
+
function entryPricer(cost, currentProject) {
|
|
184
|
+
return (entry, isGlobal, promptRecall) => cost
|
|
185
|
+
? cost.entry({ entry, isGlobal, promptRecall, origin: entry.origin_project ?? null, category: classifyOriginProject(entry.origin_project, currentProject) })
|
|
186
|
+
: estimateTokens(entry.content);
|
|
187
|
+
}
|
|
188
|
+
function planContext(ctx, opts, local) {
|
|
189
|
+
const pinnedOnly = opts.pinnedOnly === true;
|
|
190
|
+
const { other, hasLocal, globalRoot, sharedStore, hasGlobal, primaryIsGlobal } = storesInReach(ctx, opts, local);
|
|
191
|
+
const query = (opts.q ?? '').trim() || '*';
|
|
181
192
|
// opts.scope is only the tag boost, opts.exactScope the envelope request; other-project memories are
|
|
182
193
|
// excluded unless the caller asks for them (crossProject) or isolation is disabled.
|
|
183
194
|
const config = loadConfig(ctx.hippoRoot);
|
|
@@ -192,9 +203,7 @@ function planContext(ctx, opts, local) {
|
|
|
192
203
|
// Decided before the ambient loads so the pinned-only FTS candidate query can share their connection.
|
|
193
204
|
const promptRecallPending = pinnedOnly && Boolean(opts.prompt?.trim()) && config.pinnedInject.promptRecall === true;
|
|
194
205
|
const cost = opts.cost;
|
|
195
|
-
const price = (
|
|
196
|
-
? cost.entry({ entry, isGlobal, promptRecall, origin: entry.origin_project ?? null, category: classifyOriginProject(entry.origin_project, currentProject) })
|
|
197
|
-
: estimateTokens(entry.content);
|
|
206
|
+
const price = entryPricer(cost, currentProject);
|
|
198
207
|
return {
|
|
199
208
|
local,
|
|
200
209
|
other,
|
|
@@ -327,11 +336,12 @@ async function loadPools(ctx, plan, admission, recallRequest) {
|
|
|
327
336
|
now: evalNow(),
|
|
328
337
|
};
|
|
329
338
|
// Tenant-scoped loads: never resolveTenantId({}) here.
|
|
339
|
+
const read = { pinnedOnly, recent, admit: loadAdmit, recheck: poolAdmit, window, recall: recallRequest };
|
|
330
340
|
const local = plan.hasLocal
|
|
331
|
-
? await loadAmbientEntries(plan.local, ctx.tenantId,
|
|
341
|
+
? await loadAmbientEntries(plan.local, ctx.tenantId, { ...read, onQualityDrop: qualityDrop(primaryIsGlobal) })
|
|
332
342
|
: { entries: [] };
|
|
333
343
|
const global = hasGlobal && !primaryIsGlobal
|
|
334
|
-
? await loadAmbientEntries(sourceOf(sqliteStore(plan.globalRoot)), ctx.tenantId,
|
|
344
|
+
? await loadAmbientEntries(sourceOf(sqliteStore(plan.globalRoot)), ctx.tenantId, { ...read, onQualityDrop: qualityDrop(true) })
|
|
335
345
|
: { entries: [] };
|
|
336
346
|
return { local, global };
|
|
337
347
|
}
|
|
@@ -368,16 +378,13 @@ async function traceEmptyContext(ctx, opts, plan) {
|
|
|
368
378
|
explainMode: false,
|
|
369
379
|
results: [],
|
|
370
380
|
};
|
|
371
|
-
|
|
372
|
-
writeRecallTraceAtRoot(ctx.hippoRoot, trace);
|
|
373
|
-
return;
|
|
374
|
-
}
|
|
375
|
-
// The empty reply is already decided, so a lost trace logs as the hippo.db write does rather than failing the call.
|
|
381
|
+
// The empty reply is already decided, so a lost trace is logged and the call still answers.
|
|
376
382
|
try {
|
|
377
|
-
await
|
|
383
|
+
await onStore(ctx, (port) => port.finishRecall({ goalLog: [], audit: [], trace }));
|
|
378
384
|
}
|
|
379
385
|
catch (error) {
|
|
380
|
-
|
|
386
|
+
rethrowIfSqliteBlocked(error);
|
|
387
|
+
log.error(`recall trace write failed: ${errorMessage(error)}`);
|
|
381
388
|
}
|
|
382
389
|
}
|
|
383
390
|
/** Strengthens and marks the returned rows, then writes the trace and index together. */
|
|
@@ -396,10 +403,9 @@ async function recordRetrieval(ctx, opts, plan, selected, activeSnapshot) {
|
|
|
396
403
|
score: s.score,
|
|
397
404
|
})),
|
|
398
405
|
};
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
recordOnHippoDb(ctx, plan, retrievedIds, trace, selected.length);
|
|
406
|
+
const writes = { goalLog: [], audit: [], trace, strengthen: strengthenOf(ctx, retrievedIds) };
|
|
407
|
+
// hippo.db keeps the ids as its last recall, which feeds only outcomeForLastRecall, and it alone reads a second root.
|
|
408
|
+
await onStore(ctx, (port, local) => andThen(local.finishLastRecall(writes, plan.hasGlobal ? plan.globalRoot : undefined), () => port.bumpRecallStats(selected.length)));
|
|
403
409
|
// Replace selectedItems entries with markRetrieved-updated copies so
|
|
404
410
|
// the returned ContextResult reflects post-recall state.
|
|
405
411
|
const items = selected.map((s) => ({
|
|
@@ -409,25 +415,6 @@ async function recordRetrieval(ctx, opts, plan, selected, activeSnapshot) {
|
|
|
409
415
|
// Read after strengthenRetrieved commits, so the rows just retrieved count at their new strength.
|
|
410
416
|
return { items, ambientState: plan.config.ambient.enabled ? await readAmbientState(ctx, plan) : undefined };
|
|
411
417
|
}
|
|
412
|
-
function recordOnHippoDb(ctx, plan, retrievedIds, trace, recalled) {
|
|
413
|
-
const localIndex = loadIndex(ctx.hippoRoot);
|
|
414
|
-
const strengthenedHere = strengthenRetrieved(ctx.hippoRoot, retrievedIds, { recallBoostAblated: isRecallBoostAblated() });
|
|
415
|
-
if (plan.hasGlobal)
|
|
416
|
-
strengthenRetrieved(plan.globalRoot, retrievedIds.filter((id) => !strengthenedHere.has(id)), { recallBoostAblated: isRecallBoostAblated() });
|
|
417
|
-
localIndex.last_retrieval_ids = retrievedIds;
|
|
418
|
-
// Trace first on its own short-lived connection, then fold its id into localIndex so one saveIndex moves
|
|
419
|
-
// last_retrieval_ids and last_trace_id in lockstep; a failed trace write stores null, never a stale id.
|
|
420
|
-
const traceId = writeRecallTraceAtRoot(ctx.hippoRoot, trace);
|
|
421
|
-
localIndex.last_trace_id = traceId !== null ? String(traceId) : null;
|
|
422
|
-
saveIndex(ctx.hippoRoot, localIndex);
|
|
423
|
-
updateStats(ctx.hippoRoot, { recalled });
|
|
424
|
-
}
|
|
425
|
-
// The index's last-recall ids feed only outcomeForLastRecall, which no other store serves, so they are not written here.
|
|
426
|
-
async function recordOnStore(ctx, store, retrievedIds, trace, recalled) {
|
|
427
|
-
const strengthen = { ids: retrievedIds, opts: { tenantId: ctx.tenantId, recallBoostAblated: isRecallBoostAblated() } };
|
|
428
|
-
await store.finishRecall({ goalLog: [], audit: [], trace, strengthen });
|
|
429
|
-
await store.bumpRecallStats(recalled);
|
|
430
|
-
}
|
|
431
418
|
async function readAmbientState(ctx, plan) {
|
|
432
419
|
const filter = { exactScope: plan.exactScope, ownScope: plan.ownScope, project: plan.originProject, currentProject: projectNames(plan.currentProject), now: evalNow() };
|
|
433
420
|
const sources = [
|
package/dist/api/dormant.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { type DormantMemory, type ListDormantOpts } from '../dormant.js';
|
|
2
|
-
import { type MemoryEntry } from '../memory.js';
|
|
1
|
+
import { type DormantMemory, type ListDormantOpts } from '../store/dormant.js';
|
|
2
|
+
import { type MemoryEntry } from '../core/memory.js';
|
|
3
3
|
import type { Context } from './types.js';
|
|
4
4
|
/**
|
|
5
|
-
* A tenant's dormant memories (src/dormant.ts): what sleep moved out of
|
|
5
|
+
* A tenant's dormant memories (src/store/dormant.ts): what sleep moved out of
|
|
6
6
|
* active memory instead of deleting, when `dormant.enabled` is on. Newest
|
|
7
7
|
* first; `opts.query` keeps rows containing every term (case-insensitive).
|
|
8
8
|
*/
|