hippo-memory 1.70.0 → 1.72.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 +2 -2
- package/dist/agent-memories/apply.d.ts +0 -11
- package/dist/agent-memories/apply.js +6 -21
- package/dist/agent-memories/claude-code.d.ts +4 -2
- package/dist/agent-memories/claude-code.js +15 -6
- package/dist/agent-memories/codex.js +1 -1
- package/dist/agent-memories/copilot.d.ts +1 -3
- package/dist/agent-memories/copilot.js +1 -17
- package/dist/agent-memories/files.js +23 -12
- package/dist/agent-memories/markdown.d.ts +1 -3
- package/dist/agent-memories/markdown.js +1 -3
- package/dist/agent-memories/project-folds.d.ts +10 -0
- package/dist/agent-memories/project-folds.js +34 -0
- package/dist/agent-memories/report.js +2 -1
- package/dist/agent-memories/sync.d.ts +4 -2
- package/dist/agent-memories/sync.js +18 -11
- package/dist/api/assemble.d.ts +7 -44
- package/dist/api/assemble.js +3 -23
- package/dist/api/audit.d.ts +33 -1
- package/dist/api/audit.js +48 -1
- package/dist/api/auth.d.ts +20 -26
- package/dist/api/auth.js +43 -29
- package/dist/api/auto-sleep.d.ts +5 -2
- package/dist/api/auto-sleep.js +9 -5
- package/dist/api/availability.d.ts +2 -15
- package/dist/api/availability.js +4 -18
- package/dist/api/cards.d.ts +42 -0
- package/dist/api/cards.js +52 -0
- package/dist/api/conflicts.d.ts +28 -0
- package/dist/api/conflicts.js +61 -0
- package/dist/api/context-render.js +4 -3
- package/dist/api/context-select.js +12 -15
- package/dist/api/context-types.d.ts +10 -35
- package/dist/api/context.d.ts +5 -22
- package/dist/api/context.js +38 -46
- package/dist/api/continuity.d.ts +47 -0
- package/dist/api/continuity.js +66 -0
- package/dist/{cli → api}/correction-latency.d.ts +2 -14
- package/dist/{cli → api}/correction-latency.js +2 -14
- package/dist/api/dormant.d.ts +5 -21
- package/dist/api/dormant.js +11 -28
- package/dist/api/drill-down.d.ts +7 -46
- package/dist/api/drill-down.js +6 -27
- package/dist/api/embeddings.d.ts +17 -0
- package/dist/api/embeddings.js +28 -0
- package/dist/api/error-reply.d.ts +8 -0
- package/dist/api/error-reply.js +21 -0
- package/dist/api/forget.d.ts +11 -26
- package/dist/api/forget.js +23 -35
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +5 -9
- package/dist/api/graph.d.ts +8 -0
- package/dist/api/graph.js +7 -0
- package/dist/api/index.d.ts +6 -2
- package/dist/api/index.js +6 -2
- package/dist/api/instruction-detect.js +21 -6
- package/dist/api/learn.d.ts +4 -0
- package/dist/api/learn.js +53 -27
- package/dist/api/ledger-db.d.ts +2 -5
- package/dist/api/ledger-db.js +5 -35
- package/dist/api/memories.d.ts +23 -0
- package/dist/api/memories.js +46 -0
- package/dist/api/objects.d.ts +9 -0
- package/dist/api/objects.js +11 -0
- package/dist/api/on-store.js +5 -3
- package/dist/api/outcome.js +1 -1
- package/dist/api/pilot-arm.d.ts +1 -11
- package/dist/api/pilot-arm.js +5 -45
- package/dist/api/predictions.d.ts +11 -0
- package/dist/api/predictions.js +24 -0
- package/dist/api/projects.d.ts +21 -0
- package/dist/api/projects.js +24 -0
- package/dist/api/promote.d.ts +13 -17
- package/dist/api/promote.js +12 -20
- package/dist/api/prompt-hook.d.ts +19 -6
- package/dist/api/prompt-hook.js +54 -13
- package/dist/api/provenance-coverage.d.ts +14 -0
- package/dist/{cli → api}/provenance-coverage.js +2 -6
- package/dist/api/recall-cli.d.ts +58 -0
- package/dist/api/recall-cli.js +103 -0
- package/dist/api/recall-core.js +17 -9
- package/dist/api/recall-finish.d.ts +53 -0
- package/dist/api/recall-finish.js +30 -0
- package/dist/api/recall-history.d.ts +17 -84
- package/dist/api/recall-history.js +15 -88
- package/dist/api/recall-pipeline.d.ts +2 -3
- package/dist/api/recall-pipeline.js +21 -15
- package/dist/api/recall-request.js +1 -1
- package/dist/api/recall-types.d.ts +64 -304
- package/dist/api/recall.d.ts +3 -34
- package/dist/api/recall.js +63 -89
- package/dist/api/refine.d.ts +7 -0
- package/dist/api/refine.js +10 -0
- package/dist/api/remember-local.d.ts +57 -0
- package/dist/api/remember-local.js +90 -0
- package/dist/api/remember.d.ts +20 -2
- package/dist/api/remember.js +16 -3
- package/dist/api/session-end.d.ts +22 -0
- package/dist/api/session-end.js +101 -0
- package/dist/api/sleep-run.d.ts +2 -4
- package/dist/api/sleep-run.js +28 -28
- package/dist/api/sleep.d.ts +9 -28
- package/dist/api/status.d.ts +24 -0
- package/dist/api/status.js +40 -0
- package/dist/api/store-init.d.ts +4 -0
- package/dist/api/store-init.js +9 -0
- package/dist/api/tokens.d.ts +3 -10
- package/dist/api/tokens.js +4 -11
- package/dist/api/types.d.ts +8 -29
- package/dist/api/types.js +10 -23
- package/dist/capture/caller-session.d.ts +0 -3
- package/dist/capture/caller-session.js +1 -12
- package/dist/capture/capture-error.d.ts +2 -2
- package/dist/capture/capture-error.js +23 -18
- package/dist/capture/codex-patch.js +3 -1
- package/dist/capture/command.d.ts +4 -12
- package/dist/capture/command.js +39 -114
- package/dist/capture/compact.d.ts +4 -15
- package/dist/capture/compact.js +26 -30
- package/dist/capture/compaction-items-caller.js +11 -20
- package/dist/capture/compaction-record.d.ts +7 -93
- package/dist/capture/compaction-record.js +34 -399
- package/dist/capture/compaction-spool.d.ts +5 -3
- package/dist/capture/compaction-spool.js +21 -7
- package/dist/capture/copilot-transcript.d.ts +2 -1
- package/dist/capture/copilot-transcript.js +2 -1
- package/dist/capture/extract.d.ts +5 -2
- package/dist/capture/extract.js +4 -3
- package/dist/capture/failure-caller.d.ts +1 -1
- package/dist/capture/failure-caller.js +21 -16
- package/dist/capture/failure-reading.d.ts +2 -1
- package/dist/capture/failure-reading.js +7 -9
- package/dist/capture/pre-compact-caller.js +5 -4
- package/dist/capture/session-digest.d.ts +1 -1
- package/dist/capture/session-digest.js +17 -10
- package/dist/capture/session-end-caller.js +2 -1
- package/dist/capture/session-worker.js +3 -4
- package/dist/capture/transcript.d.ts +4 -11
- package/dist/capture/transcript.js +10 -21
- package/dist/capture/working-state.d.ts +4 -2
- package/dist/capture/working-state.js +4 -2
- package/dist/cli/api-context.d.ts +3 -0
- package/dist/cli/api-context.js +6 -0
- package/dist/cli/audit-prune.d.ts +1 -59
- package/dist/cli/audit-prune.js +2 -61
- package/dist/cli/audit.d.ts +1 -1
- package/dist/cli/audit.js +42 -43
- package/dist/cli/auth.d.ts +2 -2
- package/dist/cli/auth.js +61 -44
- package/dist/cli/briefs.d.ts +1 -4
- package/dist/cli/briefs.js +42 -301
- package/dist/cli/card.d.ts +2 -2
- package/dist/cli/card.js +63 -56
- package/dist/cli/client.d.ts +12 -27
- package/dist/cli/client.js +41 -44
- package/dist/cli/compact-resume-payload.js +4 -3
- package/dist/cli/context.d.ts +2 -3
- package/dist/cli/context.js +22 -18
- package/dist/cli/continuity.d.ts +6 -6
- package/dist/cli/continuity.js +81 -86
- package/dist/cli/curate.d.ts +13 -17
- package/dist/cli/curate.js +88 -116
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +55 -34
- package/dist/cli/decisions.d.ts +2 -4
- package/dist/cli/decisions.js +18 -309
- package/dist/cli/eval.d.ts +1 -1
- package/dist/cli/eval.js +27 -26
- package/dist/cli/exit.d.ts +6 -0
- package/dist/cli/exit.js +11 -0
- package/dist/cli/explain.d.ts +2 -3
- package/dist/cli/explain.js +25 -27
- package/dist/cli/flag-values.d.ts +6 -1
- package/dist/cli/flag-values.js +42 -15
- package/dist/cli/flags.d.ts +0 -288
- package/dist/cli/flags.js +3 -138
- package/dist/cli/github.d.ts +14 -0
- package/dist/{connectors/github/cli-impl.js → cli/github.js} +43 -71
- package/dist/cli/goals.d.ts +2 -2
- package/dist/cli/goals.js +46 -50
- package/dist/cli/graph.d.ts +3 -0
- package/dist/cli/graph.js +83 -0
- package/dist/cli/hook-runtime.d.ts +12 -32
- package/dist/cli/hook-runtime.js +21 -64
- package/dist/cli/incidents.d.ts +3 -0
- package/dist/cli/incidents.js +112 -0
- package/dist/cli/init.d.ts +2 -2
- package/dist/cli/init.js +33 -30
- package/dist/cli/install-steps.d.ts +2 -1
- package/dist/cli/install-steps.js +13 -14
- package/dist/cli/last-sleep.d.ts +2 -1
- package/dist/cli/last-sleep.js +4 -1
- package/dist/cli/lenient-id.d.ts +2 -0
- package/dist/cli/lenient-id.js +13 -0
- package/dist/cli/maintenance.d.ts +5 -5
- package/dist/cli/maintenance.js +37 -43
- package/dist/cli/notes.d.ts +2 -0
- package/dist/cli/notes.js +41 -0
- package/dist/cli/object-verbs.js +4 -3
- package/dist/cli/open-browser.d.ts +14 -0
- package/dist/cli/open-browser.js +26 -0
- package/dist/cli/owner-validation.d.ts +5 -28
- package/dist/cli/owner-validation.js +5 -28
- package/dist/cli/playbooks.d.ts +3 -4
- package/dist/cli/playbooks.js +131 -300
- package/dist/cli/predictions.d.ts +3 -0
- package/dist/cli/predictions.js +175 -0
- package/dist/cli/print.d.ts +2 -5
- package/dist/cli/print.js +3 -5
- package/dist/cli/projects.d.ts +2 -2
- package/dist/cli/projects.js +31 -25
- package/dist/cli/quality-repair-once.d.ts +1 -1
- package/dist/cli/quality-repair-once.js +7 -6
- package/dist/cli/recall.d.ts +2 -4
- package/dist/cli/recall.js +67 -137
- package/dist/cli/refine-llm.d.ts +5 -31
- package/dist/cli/refine-llm.js +23 -50
- package/dist/cli/remember.d.ts +3 -3
- package/dist/cli/remember.js +134 -192
- package/dist/cli/scheduler.d.ts +2 -17
- package/dist/cli/scheduler.js +14 -19
- package/dist/cli/serve.js +23 -14
- package/dist/cli/session-hooks.d.ts +11 -19
- package/dist/cli/session-hooks.js +143 -214
- package/dist/cli/setup.d.ts +4 -4
- package/dist/cli/setup.js +35 -30
- package/dist/cli/shared.d.ts +7 -25
- package/dist/cli/shared.js +17 -60
- package/dist/cli/slack.d.ts +2 -2
- package/dist/cli/slack.js +19 -23
- package/dist/cli/sleep-render.js +6 -3
- package/dist/cli/sleep.d.ts +3 -2
- package/dist/cli/sleep.js +17 -49
- package/dist/cli/status.d.ts +11 -14
- package/dist/cli/status.js +74 -120
- package/dist/cli/stdin.d.ts +4 -6
- package/dist/cli/stdin.js +2 -3
- package/dist/cli/transfer.d.ts +9 -9
- package/dist/cli/transfer.js +87 -108
- package/dist/cli/usage.d.ts +0 -79
- package/dist/cli/usage.js +1 -689
- package/dist/cli/verb-row.d.ts +32 -0
- package/dist/cli/verb-row.js +6 -0
- package/dist/cli/verbs/health.d.ts +27 -0
- package/dist/cli/verbs/health.js +232 -0
- package/dist/cli/verbs/memory.d.ts +16 -0
- package/dist/cli/verbs/memory.js +244 -0
- package/dist/cli/verbs/objects.d.ts +20 -0
- package/dist/cli/verbs/objects.js +254 -0
- package/dist/cli/verbs/sessions.d.ts +31 -0
- package/dist/cli/verbs/sessions.js +312 -0
- package/dist/cli/verbs.d.ts +81 -0
- package/dist/cli/verbs.js +7 -0
- package/dist/cli/versioned-verbs.d.ts +51 -0
- package/dist/cli/versioned-verbs.js +79 -0
- package/dist/cli.d.ts +1 -654
- package/dist/cli.js +44 -510
- package/dist/connectors/dlq.d.ts +39 -3
- package/dist/connectors/dlq.js +37 -3
- package/dist/connectors/github/backfill.d.ts +5 -25
- package/dist/connectors/github/backfill.js +26 -52
- package/dist/connectors/github/deletion.d.ts +4 -18
- package/dist/connectors/github/deletion.js +2 -15
- package/dist/connectors/github/dlq.d.ts +8 -33
- package/dist/connectors/github/dlq.js +34 -93
- package/dist/connectors/github/ingest.d.ts +4 -12
- package/dist/connectors/github/ingest.js +5 -36
- package/dist/connectors/github/octokit-client.d.ts +4 -16
- package/dist/connectors/github/octokit-client.js +27 -24
- package/dist/connectors/github/ratelimit.d.ts +3 -14
- package/dist/connectors/github/ratelimit.js +3 -14
- package/dist/connectors/github/scope.d.ts +3 -5
- package/dist/connectors/github/scope.js +3 -5
- package/dist/connectors/github/signature.d.ts +4 -26
- package/dist/connectors/github/signature.js +4 -26
- package/dist/connectors/github/tenant-routing.d.ts +2 -24
- package/dist/connectors/github/tenant-routing.js +4 -26
- package/dist/connectors/github/transform.js +2 -16
- package/dist/connectors/github/types.d.ts +3 -15
- package/dist/connectors/github/types.js +2 -9
- package/dist/connectors/github/webhook.d.ts +3 -16
- package/dist/connectors/github/webhook.js +38 -23
- package/dist/connectors/ingest.d.ts +10 -0
- package/dist/connectors/ingest.js +28 -0
- package/dist/connectors/slack/backfill.d.ts +4 -17
- package/dist/connectors/slack/backfill.js +4 -13
- package/dist/connectors/slack/dlq.d.ts +2 -19
- package/dist/connectors/slack/dlq.js +51 -90
- package/dist/connectors/slack/ingest.d.ts +4 -9
- package/dist/connectors/slack/ingest.js +4 -30
- package/dist/connectors/slack/scope.d.ts +2 -8
- package/dist/connectors/slack/scope.js +2 -8
- package/dist/connectors/slack/signature.d.ts +1 -6
- package/dist/connectors/slack/tenant-routing.d.ts +2 -19
- package/dist/connectors/slack/tenant-routing.js +2 -21
- package/dist/connectors/slack/transform.d.ts +2 -18
- package/dist/connectors/slack/transform.js +2 -18
- package/dist/connectors/slack/types.d.ts +3 -9
- package/dist/connectors/slack/types.js +2 -4
- package/dist/connectors/slack/web-client.js +33 -27
- package/dist/connectors/slack/webhook.d.ts +3 -19
- package/dist/connectors/slack/webhook.js +6 -26
- package/dist/connectors/slack/workspaces.d.ts +4 -24
- package/dist/connectors/slack/workspaces.js +4 -24
- package/dist/consolidate/conflicts.js +7 -15
- package/dist/consolidate/dag-summary.d.ts +8 -0
- package/dist/consolidate/dag-summary.js +41 -0
- package/dist/consolidate/dag.d.ts +5 -28
- package/dist/consolidate/dag.js +29 -84
- package/dist/consolidate/decay.js +7 -19
- package/dist/consolidate/dedupe.d.ts +13 -52
- package/dist/consolidate/dedupe.js +18 -74
- package/dist/consolidate/flush-units.d.ts +3 -4
- package/dist/consolidate/flush-units.js +3 -3
- package/dist/consolidate/half-life-migration.d.ts +3 -26
- package/dist/consolidate/half-life-migration.js +11 -28
- package/dist/consolidate/llm-passes.js +49 -40
- package/dist/consolidate/memory-value-weights.d.ts +2 -13
- package/dist/consolidate/memory-value-weights.js +2 -13
- package/dist/consolidate/memory-value.d.ts +11 -84
- package/dist/consolidate/memory-value.js +18 -105
- package/dist/consolidate/merge.js +12 -33
- package/dist/consolidate/physics-pass.d.ts +6 -1
- package/dist/consolidate/physics-pass.js +27 -9
- package/dist/consolidate/replay.d.ts +6 -38
- package/dist/consolidate/replay.js +25 -56
- package/dist/consolidate/run.js +1 -1
- package/dist/consolidate/sleep.d.ts +1 -8
- package/dist/consolidate/sleep.js +13 -22
- package/dist/consolidate/trace.d.ts +3 -18
- package/dist/consolidate/trace.js +3 -18
- package/dist/consolidate/traces.js +9 -25
- package/dist/core/ablation.d.ts +14 -91
- package/dist/core/ablation.js +16 -91
- package/dist/core/active-scope.d.ts +7 -0
- package/dist/{sharing/scope.js → core/active-scope.js} +5 -12
- package/dist/core/ambient.d.ts +5 -8
- package/dist/core/ambient.js +40 -26
- package/dist/core/api-errors.d.ts +16 -0
- package/dist/core/api-errors.js +20 -0
- package/dist/core/capture-contract.d.ts +4 -2
- package/dist/core/capture-contract.js +4 -2
- package/dist/core/card.d.ts +4 -1
- package/dist/core/card.js +11 -1
- package/dist/core/compaction-timing.d.ts +7 -0
- package/dist/core/compaction-timing.js +9 -0
- package/dist/core/compare.d.ts +11 -67
- package/dist/core/compare.js +9 -63
- package/dist/core/config.d.ts +10 -24
- package/dist/core/config.js +20 -16
- package/dist/core/cosine.d.ts +3 -0
- package/dist/core/cosine.js +19 -0
- package/dist/core/handoff.d.ts +1 -7
- package/dist/core/handoff.js +1 -7
- package/dist/core/markdown.d.ts +6 -0
- package/dist/{store → core}/markdown.js +23 -22
- package/dist/core/memory-audit.d.ts +17 -0
- package/dist/core/memory-audit.js +54 -0
- package/dist/core/memory-quality.js +1 -1
- package/dist/core/memory.d.ts +51 -168
- package/dist/core/memory.js +76 -239
- package/dist/{consolidate → core}/merged-row.d.ts +1 -1
- package/dist/{consolidate → core}/merged-row.js +3 -2
- package/dist/core/package-root.d.ts +3 -0
- package/dist/core/package-root.js +5 -0
- package/dist/core/physics-config.d.ts +1 -4
- package/dist/core/physics-config.js +3 -8
- package/dist/core/physics.d.ts +15 -61
- package/dist/core/physics.js +65 -138
- package/dist/core/prediction.d.ts +3 -0
- package/dist/core/prediction.js +6 -0
- package/dist/core/project-identity.d.ts +20 -58
- package/dist/core/project-identity.js +27 -39
- package/dist/core/project-remote.js +13 -2
- package/dist/core/raw-append-only.d.ts +5 -0
- package/dist/core/raw-append-only.js +7 -0
- package/dist/core/recall-scope.d.ts +69 -0
- package/dist/core/recall-scope.js +138 -0
- package/dist/core/salience.d.ts +1 -7
- package/dist/core/salience.js +1 -7
- package/dist/dashboard/dashboard-actions.js +2 -2
- package/dist/dashboard/dashboard-snapshot.d.ts +2 -1
- package/dist/dashboard/dashboard-snapshot.js +11 -2
- package/dist/dashboard/dashboard-types.d.ts +2 -1
- package/dist/dashboard/dashboard.d.ts +1 -0
- package/dist/dashboard/dashboard.js +50 -4
- package/dist/db/busy.d.ts +3 -8
- package/dist/db/busy.js +37 -33
- package/dist/db/connect.js +7 -8
- package/dist/db/index.d.ts +3 -3
- package/dist/db/index.js +3 -3
- package/dist/db/migrate.js +3 -3
- package/dist/db/migrations/index.d.ts +1 -1
- package/dist/db/migrations/index.js +3 -1
- package/dist/db/migrations/types.d.ts +2 -5
- package/dist/db/migrations/v14.js +2 -3
- package/dist/db/migrations/v15.js +2 -8
- package/dist/db/migrations/v16.js +2 -3
- package/dist/db/migrations/v17.js +2 -3
- package/dist/db/migrations/v19.js +2 -5
- package/dist/db/migrations/v20.js +2 -7
- package/dist/db/migrations/v22.js +4 -17
- package/dist/db/migrations/v23.js +3 -14
- package/dist/db/migrations/v24.js +2 -4
- package/dist/db/migrations/v25.js +3 -8
- package/dist/db/migrations/v26.js +2 -13
- package/dist/db/migrations/v27.js +3 -11
- package/dist/db/migrations/v28.js +2 -14
- package/dist/db/migrations/v29.js +4 -18
- package/dist/db/migrations/v30.js +4 -16
- package/dist/db/migrations/v31.js +2 -15
- package/dist/db/migrations/v32.js +4 -22
- package/dist/db/migrations/v33.js +2 -15
- package/dist/db/migrations/v34.js +2 -11
- package/dist/db/migrations/v35.js +2 -11
- package/dist/db/migrations/v36.js +2 -11
- package/dist/db/migrations/v37.js +8 -33
- package/dist/db/migrations/v38.js +5 -38
- package/dist/db/migrations/v39.js +9 -20
- package/dist/db/migrations/v40.js +2 -9
- package/dist/db/migrations/v41.js +2 -24
- package/dist/db/migrations/v43.js +1 -1
- package/dist/db/migrations/v44.js +2 -8
- package/dist/db/migrations/v45.js +2 -7
- package/dist/db/migrations/v47.js +2 -3
- package/dist/db/migrations/v51.js +1 -1
- package/dist/db/migrations/v55.d.ts +3 -0
- package/dist/db/migrations/v55.js +17 -0
- package/dist/db/open.d.ts +2 -2
- package/dist/db/open.js +21 -9
- package/dist/db/physics-state.d.ts +6 -22
- package/dist/db/physics-state.js +28 -39
- package/dist/db/raw-archive-mirror-cleanup.d.ts +2 -17
- package/dist/db/raw-archive-mirror-cleanup.js +2 -17
- package/dist/db/tables.d.ts +2 -0
- package/dist/db/tables.js +6 -2
- package/dist/db/vector-store.d.ts +2 -0
- package/dist/db/vector-store.js +25 -5
- package/dist/db/wal-checkpointer.js +2 -1
- package/dist/doctor.js +85 -27
- package/dist/embeddings/local.d.ts +62 -0
- package/dist/embeddings/local.js +146 -0
- package/dist/embeddings/provider.d.ts +43 -0
- package/dist/{store/embeddings → embeddings}/provider.js +58 -83
- package/dist/embeddings/transformers.d.ts +26 -0
- package/dist/embeddings/transformers.js +89 -0
- package/dist/entry/session-text.d.ts +1 -1
- package/dist/entry/session-text.js +3 -2
- package/dist/eval/eval-stats.d.ts +15 -53
- package/dist/eval/eval-stats.js +12 -42
- package/dist/eval/eval-suite.d.ts +2 -13
- package/dist/eval/eval-suite.js +91 -45
- package/dist/eval/eval.d.ts +6 -24
- package/dist/eval/eval.js +8 -35
- package/dist/eval/judgment.d.ts +0 -3
- package/dist/eval/judgment.js +30 -15
- package/dist/extensions/openclaw-plugin/index.js +1 -1
- package/dist/graph/extract.d.ts +5 -27
- package/dist/graph/extract.js +10 -36
- package/dist/graph/recall.d.ts +7 -20
- package/dist/graph/recall.js +15 -77
- package/dist/graph/stream.d.ts +7 -39
- package/dist/graph/stream.js +11 -34
- package/dist/graph/view.d.ts +9 -35
- package/dist/graph/view.js +24 -44
- package/dist/graph/write.d.ts +1 -1
- package/dist/graph/write.js +9 -9
- package/dist/hooks/codex-session.js +3 -2
- package/dist/hooks/codex-wrapper.js +4 -3
- package/dist/hooks/copilot.js +2 -1
- package/dist/hooks/hook-blocks.d.ts +6 -2
- package/dist/hooks/hook-blocks.js +37 -124
- package/dist/hooks/json-hooks.d.ts +4 -36
- package/dist/hooks/json-hooks.js +22 -59
- package/dist/hooks/opencode.d.ts +0 -38
- package/dist/hooks/opencode.js +17 -81
- package/dist/hooks/shared.d.ts +6 -21
- package/dist/hooks/shared.js +31 -33
- package/dist/importers/core.d.ts +12 -37
- package/dist/importers/core.js +10 -28
- package/dist/importers/markdown-parse.d.ts +8 -22
- package/dist/importers/markdown-parse.js +8 -25
- package/dist/importers/markdown.js +3 -12
- package/dist/importers/sources.js +12 -39
- package/dist/importers/vault.d.ts +2 -8
- package/dist/importers/vault.js +31 -85
- package/dist/index.d.ts +8 -3
- package/dist/index.js +8 -3
- package/dist/learn/autolearn.d.ts +23 -42
- package/dist/learn/autolearn.js +45 -52
- package/dist/learn/churn-git.js +13 -4
- package/dist/learn/extract.d.ts +3 -2
- package/dist/learn/extract.js +8 -8
- package/dist/learn/forward-claim-detector.d.ts +6 -30
- package/dist/learn/forward-claim-detector.js +18 -68
- package/dist/learn/invalidation.d.ts +6 -18
- package/dist/learn/invalidation.js +18 -31
- package/dist/mcp/admin-tools.d.ts +2 -2
- package/dist/mcp/admin-tools.js +30 -53
- package/dist/mcp/format.js +3 -2
- package/dist/mcp/framing.d.ts +1 -0
- package/dist/mcp/framing.js +1 -1
- package/dist/mcp/memory-tools.js +7 -10
- package/dist/mcp/protocol.d.ts +15 -29
- package/dist/mcp/protocol.js +26 -16
- package/dist/mcp/recall-tools.js +14 -11
- package/dist/mcp/request.d.ts +3 -11
- package/dist/mcp/request.js +12 -27
- package/dist/mcp/server.d.ts +3 -9
- package/dist/mcp/server.js +5 -16
- package/dist/mcp/session-state.d.ts +1 -1
- package/dist/mcp/session-state.js +5 -11
- package/dist/mcp/stdio.d.ts +2 -6
- package/dist/mcp/stdio.js +68 -16
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +47 -22
- package/dist/objects/customer-notes.d.ts +9 -44
- package/dist/objects/customer-notes.js +7 -48
- package/dist/objects/decisions.d.ts +14 -52
- package/dist/objects/decisions.js +15 -53
- package/dist/objects/descriptor.d.ts +1 -1
- package/dist/objects/incidents.d.ts +9 -40
- package/dist/objects/incidents.js +7 -41
- package/dist/objects/lifecycle.d.ts +1 -1
- package/dist/objects/lifecycle.js +2 -1
- package/dist/objects/policies.d.ts +13 -91
- package/dist/objects/policies.js +13 -99
- package/dist/objects/processes.d.ts +9 -54
- package/dist/objects/processes.js +7 -61
- package/dist/objects/project-briefs.d.ts +13 -57
- package/dist/objects/project-briefs.js +16 -78
- package/dist/objects/skills.d.ts +9 -44
- package/dist/objects/skills.js +8 -54
- package/dist/postinstall.js +7 -20
- package/dist/predictions/planning-fallacy.d.ts +11 -34
- package/dist/rerankers/clef.js +6 -37
- package/dist/rerankers/cross-encoder.d.ts +31 -2
- package/dist/rerankers/cross-encoder.js +65 -101
- package/dist/rerankers/index.js +5 -4
- package/dist/rerankers/jev.js +11 -10
- package/dist/rerankers/llm.d.ts +2 -11
- package/dist/rerankers/llm.js +14 -14
- package/dist/rerankers/outage-warning.d.ts +5 -2
- package/dist/rerankers/outage-warning.js +7 -4
- package/dist/rerankers/remote.d.ts +1 -0
- package/dist/rerankers/remote.js +2 -0
- package/dist/rerankers/types.d.ts +2 -14
- package/dist/search/bm25-search.js +1 -1
- package/dist/search/boosts.d.ts +0 -2
- package/dist/search/boosts.js +3 -3
- package/dist/search/embed-memories.d.ts +9 -0
- package/dist/search/embed-memories.js +377 -0
- package/dist/search/goal-boost.d.ts +23 -0
- package/dist/search/goal-boost.js +93 -0
- package/dist/search/hybrid.d.ts +11 -2
- package/dist/search/hybrid.js +9 -4
- package/dist/search/multihop.js +2 -3
- package/dist/search/path-context.d.ts +5 -18
- package/dist/search/path-context.js +5 -18
- package/dist/search/physics-search.d.ts +6 -3
- package/dist/search/physics-search.js +29 -19
- package/dist/search/rerank.js +1 -1
- package/dist/search/rrf.d.ts +7 -35
- package/dist/search/rrf.js +5 -30
- package/dist/search/vector.d.ts +13 -4
- package/dist/search/vector.js +40 -13
- package/dist/server/auth.d.ts +11 -28
- package/dist/server/auth.js +49 -32
- package/dist/server/boot.d.ts +2 -21
- package/dist/server/boot.js +69 -161
- package/dist/server/client-ip.d.ts +3 -21
- package/dist/server/client-ip.js +8 -30
- package/dist/server/deadline.d.ts +0 -2
- package/dist/server/deadline.js +1 -7
- package/dist/server/defaults.d.ts +4 -0
- package/dist/server/defaults.js +5 -0
- package/dist/server/key-check-bounds.d.ts +2 -1
- package/dist/server/lifecycle.d.ts +5 -4
- package/dist/server/lifecycle.js +19 -4
- package/dist/server/mcp-http.js +24 -53
- package/dist/server/rate-limit.d.ts +5 -18
- package/dist/server/rate-limit.js +4 -13
- package/dist/server/request.d.ts +4 -8
- package/dist/server/request.js +16 -19
- package/dist/server/route-checks.d.ts +7 -0
- package/dist/server/route-checks.js +42 -0
- package/dist/server/route-table.d.ts +9 -8
- package/dist/server/route-table.js +127 -139
- package/dist/server/routes/admin.d.ts +8 -8
- package/dist/server/routes/admin.js +35 -49
- package/dist/server/routes/customer-notes.d.ts +6 -6
- package/dist/server/routes/customer-notes.js +8 -14
- package/dist/server/routes/decisions.d.ts +6 -6
- package/dist/server/routes/decisions.js +12 -21
- package/dist/server/routes/incidents.d.ts +6 -6
- package/dist/server/routes/incidents.js +14 -25
- package/dist/server/routes/memories.d.ts +9 -9
- package/dist/server/routes/memories.js +20 -63
- package/dist/server/routes/object-routes.d.ts +6 -11
- package/dist/server/routes/object-routes.js +11 -22
- package/dist/server/routes/policies.d.ts +7 -7
- package/dist/server/routes/policies.js +12 -22
- package/dist/server/routes/predictions.d.ts +6 -6
- package/dist/server/routes/predictions.js +22 -38
- package/dist/server/routes/processes.d.ts +6 -6
- package/dist/server/routes/processes.js +17 -28
- package/dist/server/routes/project-briefs.d.ts +7 -7
- package/dist/server/routes/project-briefs.js +11 -20
- package/dist/server/routes/recall.d.ts +5 -5
- package/dist/server/routes/recall.js +16 -45
- package/dist/server/routes/skills.d.ts +7 -7
- package/dist/server/routes/skills.js +10 -22
- package/dist/server/server-detect.d.ts +15 -53
- package/dist/server/server-detect.js +55 -96
- package/dist/server/sleep-child.js +26 -7
- package/dist/server/sleep-offload.d.ts +11 -5
- package/dist/server/sleep-offload.js +21 -12
- package/dist/server/types.d.ts +32 -18
- package/dist/server/validation.d.ts +3 -2
- package/dist/server/validation.js +15 -33
- package/dist/server.d.ts +7 -6
- package/dist/server.js +8 -6
- package/dist/sharing/global-store.d.ts +19 -0
- package/dist/sharing/global-store.js +75 -0
- package/dist/sharing/global-sync.d.ts +6 -0
- package/dist/sharing/global-sync.js +73 -0
- package/dist/sharing/project-merge.d.ts +11 -19
- package/dist/sharing/project-merge.js +63 -125
- package/dist/sharing/search-both.d.ts +60 -0
- package/dist/sharing/search-both.js +138 -0
- package/dist/sharing/share.d.ts +40 -0
- package/dist/sharing/share.js +229 -0
- package/dist/store/ambient.js +9 -15
- package/dist/store/audit-event.d.ts +5 -13
- package/dist/store/audit-event.js +4 -12
- package/dist/store/audit.d.ts +2 -21
- package/dist/store/audit.js +8 -67
- package/dist/store/auth.d.ts +10 -8
- package/dist/store/auth.js +17 -12
- package/dist/store/candidates.d.ts +23 -5
- package/dist/store/candidates.js +119 -71
- package/dist/store/capture-write.d.ts +17 -0
- package/dist/store/capture-write.js +35 -0
- package/dist/store/card-detail.d.ts +2 -1
- package/dist/store/card-detail.js +2 -1
- package/dist/store/cards.d.ts +14 -9
- package/dist/store/cards.js +72 -126
- package/dist/store/compaction-caller.d.ts +18 -0
- package/dist/store/compaction-caller.js +29 -0
- package/dist/store/compactions-record.d.ts +115 -0
- package/dist/store/compactions-record.js +417 -0
- package/dist/store/compactions.js +6 -4
- package/dist/store/conflicts.d.ts +4 -21
- package/dist/store/conflicts.js +76 -152
- package/dist/store/connectors/dlq.d.ts +10 -0
- package/dist/store/connectors/dlq.js +32 -0
- package/dist/store/connectors/github.d.ts +14 -16
- package/dist/store/connectors/github.js +34 -57
- package/dist/store/connectors/slack.d.ts +2 -11
- package/dist/store/connectors/slack.js +18 -47
- package/dist/store/dashboard-reads.js +11 -14
- package/dist/store/delete-and-batch.d.ts +17 -31
- package/dist/store/delete-and-batch.js +84 -67
- package/dist/store/delivery-recorder.d.ts +15 -4
- package/dist/store/delivery-recorder.js +34 -17
- package/dist/store/descendant-page.js +6 -3
- package/dist/store/diagnostics.js +6 -13
- package/dist/store/dormant.d.ts +8 -30
- package/dist/store/dormant.js +18 -57
- package/dist/store/embeddings/index.d.ts +11 -90
- package/dist/store/embeddings/index.js +18 -523
- package/dist/store/entry-reads.d.ts +34 -61
- package/dist/store/entry-reads.js +111 -136
- package/dist/store/entry-row.d.ts +6 -35
- package/dist/store/entry-row.js +9 -37
- package/dist/store/entry-writes.d.ts +12 -18
- package/dist/store/entry-writes.js +46 -44
- package/dist/store/failure-log-at.d.ts +8 -0
- package/dist/store/failure-log-at.js +16 -0
- package/dist/store/failure-log.d.ts +2 -2
- package/dist/store/failure-log.js +5 -3
- package/dist/{trust → store}/gated-write.d.ts +3 -1
- package/dist/{trust → store}/gated-write.js +7 -5
- package/dist/store/goals.d.ts +3 -40
- package/dist/store/goals.js +41 -178
- package/dist/store/graph-queue.d.ts +6 -22
- package/dist/store/graph-queue.js +14 -45
- package/dist/store/graph-reads.d.ts +11 -35
- package/dist/store/graph-reads.js +24 -60
- package/dist/store/graph-rows.d.ts +3 -6
- package/dist/store/graph-rows.js +6 -9
- package/dist/store/graph-view-rows.d.ts +2 -1
- package/dist/store/graph-view-rows.js +2 -1
- package/dist/store/graph-writes.d.ts +10 -35
- package/dist/store/graph-writes.js +59 -106
- package/dist/store/half-life.d.ts +2 -1
- package/dist/store/half-life.js +14 -16
- package/dist/store/handoffs.d.ts +6 -12
- package/dist/store/handoffs.js +22 -40
- package/dist/store/index-and-stats.d.ts +6 -19
- package/dist/store/index-and-stats.js +36 -84
- package/dist/store/key-writes.js +1 -1
- package/dist/store/ledger-turn.d.ts +9 -0
- package/dist/store/ledger-turn.js +38 -0
- package/dist/store/mirrors.d.ts +2 -6
- package/dist/store/mirrors.js +24 -29
- package/dist/store/open.d.ts +0 -4
- package/dist/store/open.js +42 -62
- package/dist/store/pilot-arm.d.ts +12 -0
- package/dist/store/pilot-arm.js +42 -0
- package/dist/store/planning-fallacy-evidence.d.ts +2 -30
- package/dist/store/planning-fallacy-evidence.js +8 -37
- package/dist/store/port.d.ts +91 -82
- package/dist/store/port.js +8 -0
- package/dist/store/predictions.d.ts +12 -53
- package/dist/store/predictions.js +41 -125
- package/dist/store/project-tags.d.ts +62 -0
- package/dist/store/project-tags.js +67 -0
- package/dist/{cli → store}/quality-repair.js +15 -31
- package/dist/store/quarantine.js +2 -1
- package/dist/store/raw-archive.d.ts +4 -16
- package/dist/store/raw-archive.js +14 -29
- package/dist/store/recall-trace.d.ts +12 -77
- package/dist/store/recall-trace.js +37 -97
- package/dist/store/rejected-values.js +9 -20
- package/dist/store/rejection-probe.d.ts +4 -0
- package/dist/store/rejection-probe.js +19 -0
- package/dist/store/rejection.d.ts +10 -73
- package/dist/store/rejection.js +12 -84
- package/dist/store/report-reads.d.ts +6 -0
- package/dist/store/report-reads.js +29 -0
- package/dist/store/rows.d.ts +9 -19
- package/dist/store/rows.js +36 -34
- package/dist/store/rule-sql.d.ts +14 -0
- package/dist/store/rule-sql.js +56 -0
- package/dist/store/search-rows.d.ts +7 -38
- package/dist/store/search-rows.js +23 -54
- package/dist/store/sessions.d.ts +10 -47
- package/dist/store/sessions.js +21 -75
- package/dist/store/set-aside.d.ts +14 -0
- package/dist/store/set-aside.js +23 -0
- package/dist/store/sqlite/busy.d.ts +3 -0
- package/dist/store/sqlite/busy.js +8 -0
- package/dist/store/sqlite/connector-events-group.js +5 -8
- package/dist/store/sqlite/connector-writes-group.js +3 -3
- package/dist/store/sqlite/entry-writes-group.js +4 -4
- package/dist/store/sqlite/error-codec.js +8 -5
- package/dist/store/sqlite/executor.d.ts +2 -1
- package/dist/store/sqlite/executor.js +12 -5
- package/dist/store/sqlite/graph-reads-group.js +1 -1
- package/dist/store/sqlite/held-connection.d.ts +9 -0
- package/dist/store/sqlite/held-connection.js +41 -0
- package/dist/store/sqlite/local.d.ts +3 -3
- package/dist/store/sqlite/local.js +1 -0
- package/dist/store/sqlite/object-rows.d.ts +1 -1
- package/dist/store/sqlite/object-rows.js +6 -3
- package/dist/store/sqlite/objects-group.d.ts +1 -1
- package/dist/store/sqlite/objects-group.js +5 -3
- package/dist/store/sqlite/quarantine-group.js +2 -2
- package/dist/store/sqlite/store.d.ts +1 -4
- package/dist/store/sqlite/store.js +16 -15
- package/dist/store/sqlite/vector-reads-group.js +2 -2
- package/dist/store/sqlite/worker-jobs.js +1 -1
- package/dist/store/sqlite/worker-ops.d.ts +13 -2
- package/dist/store/sqlite/worker-ops.js +13 -2
- package/dist/store/sqlite/worker-store.js +5 -2
- package/dist/store/summaries.d.ts +11 -63
- package/dist/store/summaries.js +37 -148
- package/dist/store/summary-dirty.js +1 -1
- package/dist/store/tenant-lookup.d.ts +6 -1
- package/dist/store/tenant-lookup.js +7 -0
- package/dist/store/tenant.d.ts +2 -16
- package/dist/store/tenant.js +4 -19
- package/dist/store/token-ledger.d.ts +13 -50
- package/dist/store/token-ledger.js +19 -85
- package/dist/store/usage-reports.js +5 -13
- package/dist/store/vector-index.d.ts +46 -0
- package/dist/store/vector-index.js +171 -0
- package/dist/store/working-memory.d.ts +6 -25
- package/dist/store/working-memory.js +18 -52
- package/dist/support-bundle.js +9 -8
- package/dist/trust/reject-flow.js +3 -5
- package/dist/util/agent-homes.d.ts +15 -0
- package/dist/util/agent-homes.js +34 -0
- package/dist/util/anthropic-messages.d.ts +3 -0
- package/dist/util/anthropic-messages.js +35 -6
- package/dist/util/atomic-write.d.ts +2 -1
- package/dist/util/atomic-write.js +35 -4
- package/dist/util/capped-json.d.ts +6 -0
- package/dist/util/capped-json.js +46 -0
- package/dist/util/chunked.d.ts +3 -0
- package/dist/util/chunked.js +10 -0
- package/dist/util/crash-handlers.d.ts +8 -1
- package/dist/util/crash-handlers.js +52 -10
- package/dist/util/ellipsize.d.ts +3 -0
- package/dist/util/ellipsize.js +5 -0
- package/dist/util/env.d.ts +14 -6
- package/dist/util/env.js +15 -7
- package/dist/util/format.d.ts +3 -0
- package/dist/util/format.js +6 -0
- package/dist/util/home-path.d.ts +2 -1
- package/dist/util/home-path.js +4 -2
- package/dist/util/hook-payload.d.ts +8 -0
- package/dist/util/hook-payload.js +37 -0
- package/dist/util/http-retry.d.ts +9 -1
- package/dist/util/http-retry.js +67 -8
- package/dist/util/http-util.d.ts +0 -8
- package/dist/util/http-util.js +10 -21
- package/dist/util/limits.d.ts +7 -0
- package/dist/util/limits.js +14 -0
- package/dist/util/log.d.ts +7 -2
- package/dist/util/log.js +34 -9
- package/dist/util/request-scope.d.ts +5 -2
- package/dist/util/request-scope.js +13 -7
- package/dist/util/secret-detect.d.ts +5 -30
- package/dist/util/secret-detect.js +19 -40
- package/dist/util/sqlite-blocked.d.ts +2 -0
- package/dist/util/sqlite-blocked.js +5 -0
- package/dist/util/stored-json.d.ts +1 -1
- package/dist/util/stored-json.js +1 -1
- package/dist/util/stream-tee.d.ts +3 -0
- package/dist/util/stream-tee.js +35 -0
- package/dist/util/time.d.ts +4 -0
- package/dist/util/time.js +4 -0
- package/dist/util/token-text.d.ts +1 -4
- package/dist/util/token-text.js +1 -4
- package/dist/util/transcript-tail.d.ts +2 -0
- package/dist/util/transcript-tail.js +24 -23
- package/dist/util/version.d.ts +5 -20
- package/dist/util/version.js +5 -20
- package/dist/{store → util}/yaml.d.ts +1 -5
- package/dist/{store → util}/yaml.js +2 -6
- package/extensions/openclaw-plugin/index.ts +1 -1
- 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/cli/provenance-coverage.d.ts +0 -18
- package/dist/connectors/github/cli-impl.d.ts +0 -25
- package/dist/sharing/scope.d.ts +0 -14
- package/dist/sharing/shared.d.ts +0 -187
- package/dist/sharing/shared.js +0 -563
- package/dist/store/embeddings/local.d.ts +0 -15
- package/dist/store/embeddings/local.js +0 -192
- package/dist/store/embeddings/provider.d.ts +0 -77
- package/dist/store/markdown.d.ts +0 -10
- package/dist/store/recall-scope.d.ts +0 -138
- package/dist/store/recall-scope.js +0 -216
- package/dist/store/vector-writes.d.ts +0 -13
- package/dist/store/vector-writes.js +0 -89
- /package/dist/{store → core}/object-types.d.ts +0 -0
- /package/dist/{store → core}/object-types.js +0 -0
- /package/dist/{cli → store}/quality-repair.d.ts +0 -0
- /package/dist/{capture → util}/compaction-items.d.ts +0 -0
- /package/dist/{capture → util}/compaction-items.js +0 -0
|
@@ -4,20 +4,20 @@ import { heldIdLookup } from '../store/entry-reads.js';
|
|
|
4
4
|
import { calculateStrength } from '../core/memory.js';
|
|
5
5
|
import { auditQueryFields, recordAuditEvent } from '../store/audit.js';
|
|
6
6
|
import { isWorthSurfacing } from '../core/memory-quality.js';
|
|
7
|
-
import { rankBothStores } from '../sharing/
|
|
8
|
-
import { evalNow } from '../core/ablation.js';
|
|
7
|
+
import { rankBothStores } from '../sharing/search-both.js';
|
|
8
|
+
import { evalNow, strengthAblation } from '../core/ablation.js';
|
|
9
9
|
import { hybridSearch } from '../search/hybrid.js';
|
|
10
|
-
import {
|
|
10
|
+
import { physicsSearchIn } from '../search/physics-search.js';
|
|
11
11
|
import { DEFAULT_LOCAL_BUMP } from '../core/search-types.js';
|
|
12
12
|
import { compareScoredResults } from '../core/compare.js';
|
|
13
|
-
import { scopeMatch } from '../
|
|
13
|
+
import { scopeMatch } from '../core/active-scope.js';
|
|
14
14
|
import { scopeBoostFor } from '../search/boosts.js';
|
|
15
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.
|
|
19
19
|
export function oneCopyPerMemory(local, global, now) {
|
|
20
|
-
const score = (e, isGlobal) => calculateStrength(e, now) * (isGlobal ? GLOBAL_DISCOUNT : 1);
|
|
20
|
+
const score = (e, isGlobal) => calculateStrength(e, now, { ablation: strengthAblation() }) * (isGlobal ? GLOBAL_DISCOUNT : 1);
|
|
21
21
|
const best = new Map();
|
|
22
22
|
const offer = (entry, isGlobal) => {
|
|
23
23
|
const held = best.get(entry.content);
|
|
@@ -51,9 +51,8 @@ export function selectPinned(opts, plan, left, pools, admission) {
|
|
|
51
51
|
const [localPool, globalPool] = oneCopyPerMemory(localEntries, globalEntries, nowP);
|
|
52
52
|
obs?.dropMissing([...localEntries, ...globalEntries], [...localPool, ...globalPool], 'load', 'duplicate');
|
|
53
53
|
const picked = { items: [], ids: new Set(), used: 0 };
|
|
54
|
-
// Pinned entries are explicit
|
|
55
|
-
//
|
|
56
|
-
// pins are ranked here and reserve their share before it can spend.
|
|
54
|
+
// Pinned entries are explicit intent, the recent-N list an automatic backfill; both share ONE budget and the recent loop runs first,
|
|
55
|
+
// so pins are ranked here and reserve their share before it can spend.
|
|
57
56
|
const pinnedLocal = localPool.filter((e) => e.pinned);
|
|
58
57
|
const pinnedGlobal = globalPool.filter((e) => e.pinned);
|
|
59
58
|
const rankedPinned = rankPinned(plan, pinnedLocal, pinnedGlobal, nowP);
|
|
@@ -78,7 +77,7 @@ function rankPinned(plan, pinnedLocal, pinnedGlobal, nowP) {
|
|
|
78
77
|
const scopeBoost = scopeBoostFor(scopeMatch(entry.tags, plan.activeScope));
|
|
79
78
|
return {
|
|
80
79
|
entry,
|
|
81
|
-
score: calculateStrength(entry, nowP) * (isGlobal ? GLOBAL_DISCOUNT : 1) * scopeBoost,
|
|
80
|
+
score: calculateStrength(entry, nowP, { ablation: strengthAblation() }) * (isGlobal ? GLOBAL_DISCOUNT : 1) * scopeBoost,
|
|
82
81
|
tokens: plan.price(entry, isGlobal),
|
|
83
82
|
isGlobal,
|
|
84
83
|
};
|
|
@@ -201,7 +200,7 @@ function backfillRecent(plan, options) {
|
|
|
201
200
|
.slice(0, plan.includeRecent)
|
|
202
201
|
.map(({ entry, isGlobal }) => ({
|
|
203
202
|
entry,
|
|
204
|
-
score: calculateStrength(entry, nowP) * (isGlobal ? GLOBAL_DISCOUNT : 1),
|
|
203
|
+
score: calculateStrength(entry, nowP, { ablation: strengthAblation() }) * (isGlobal ? GLOBAL_DISCOUNT : 1),
|
|
205
204
|
tokens: plan.price(entry, isGlobal),
|
|
206
205
|
isGlobal,
|
|
207
206
|
}));
|
|
@@ -214,7 +213,7 @@ export function selectStrongest(plan, left, pools) {
|
|
|
214
213
|
const localRanked = localPool
|
|
215
214
|
.map((e) => ({
|
|
216
215
|
entry: e,
|
|
217
|
-
score: calculateStrength(e, now),
|
|
216
|
+
score: calculateStrength(e, now, { ablation: strengthAblation() }),
|
|
218
217
|
tokens: plan.price(e, plan.primaryIsGlobal),
|
|
219
218
|
isGlobal: plan.primaryIsGlobal,
|
|
220
219
|
}))
|
|
@@ -222,7 +221,7 @@ export function selectStrongest(plan, left, pools) {
|
|
|
222
221
|
const globalRanked = globalPool
|
|
223
222
|
.map((e) => ({
|
|
224
223
|
entry: e,
|
|
225
|
-
score: calculateStrength(e, now) * GLOBAL_DISCOUNT,
|
|
224
|
+
score: calculateStrength(e, now, { ablation: strengthAblation() }) * GLOBAL_DISCOUNT,
|
|
226
225
|
tokens: plan.price(e, true),
|
|
227
226
|
isGlobal: true,
|
|
228
227
|
}))
|
|
@@ -281,15 +280,13 @@ async function searchLocalRows(ctx, plan, options) {
|
|
|
281
280
|
const vectorCandidates = contextVectorSpec(ctx, plan, admit);
|
|
282
281
|
const store = plan.local.store;
|
|
283
282
|
const ctxResults = usePhysicsCtx
|
|
284
|
-
? await
|
|
283
|
+
? await physicsSearchIn({ root: ctx.hippoRoot, store }, query, localEntries, {
|
|
285
284
|
budget: left,
|
|
286
285
|
minResults,
|
|
287
286
|
cost: localCost,
|
|
288
|
-
hippoRoot: ctx.hippoRoot,
|
|
289
287
|
physicsConfig: ctxConfig.physics,
|
|
290
288
|
scope: plan.activeScope,
|
|
291
289
|
vectorCandidates,
|
|
292
|
-
store,
|
|
293
290
|
})
|
|
294
291
|
: await hybridSearch(query, localEntries, {
|
|
295
292
|
budget: left,
|
|
@@ -4,17 +4,8 @@ import type { MemoryEntry } from '../core/memory.js';
|
|
|
4
4
|
import type { DeliveryObserver } from '../store/delivery-recorder.js';
|
|
5
5
|
import type { AmbientState } from '../core/ambient.js';
|
|
6
6
|
import type { ProjectRef } from '../core/project-identity.js';
|
|
7
|
-
/**
|
|
8
|
-
*
|
|
9
|
-
* (recalled memories + active task snapshot + handoff + recent events).
|
|
10
|
-
*
|
|
11
|
-
* Named `getContext` (not `context`) to avoid collision with the `Context`
|
|
12
|
-
* interface above and the ubiquitous `ctx: Context` convention. Follows the
|
|
13
|
-
* existing `getEntry` naming pattern in store.ts.
|
|
14
|
-
*
|
|
15
|
-
* Rendering opts (`format`, `framing`, `rendered`) and host-side opts (`auto`) stay in the CLI,
|
|
16
|
-
* because its print helpers are shared with `cmdRecall` / `cmdSnapshot` / `cmdHandoffShow`.
|
|
17
|
-
*/
|
|
7
|
+
/** Options for `getContext`: a budget-bounded bundle of recalled memories, active task snapshot, handoff and recent events.
|
|
8
|
+
* Rendering opts (`format`, `framing`, `rendered`) and host-side opts (`auto`) stay in the CLI, whose print helpers are shared. */
|
|
18
9
|
export interface ContextOpts {
|
|
19
10
|
q?: string;
|
|
20
11
|
/** Default 1500 tokens. */
|
|
@@ -24,30 +15,16 @@ export interface ContextOpts {
|
|
|
24
15
|
scope?: string;
|
|
25
16
|
/** Envelope scope to match exactly, as in `recall`: admits that scope even when private, after the actor's scope check. */
|
|
26
17
|
exactScope?: string;
|
|
27
|
-
/** With `pinnedOnly`, also inject the N most recent writes that pass the
|
|
28
|
-
*
|
|
29
|
-
* the take-N, so a caller asking for 5 gets 5 qualifying entries rather
|
|
30
|
-
* than 5-minus-junk; pinned entries bypass the floor. Entries are only
|
|
31
|
-
* skipped for this read, never mutated or deleted. Ignored when
|
|
32
|
-
* `pinnedOnly` is false — no other path reads it. */
|
|
18
|
+
/** With `pinnedOnly`, also inject the N most recent writes that pass the quality floor (`isWorthSurfacing`); pinned entries bypass it.
|
|
19
|
+
* Filtering happens BEFORE the take-N, so asking for 5 gets 5 qualifying entries. Ignored when `pinnedOnly` is false. */
|
|
33
20
|
includeRecent?: number;
|
|
34
|
-
/**
|
|
35
|
-
* origin partition excludes by default. They come back tagged
|
|
36
|
-
* `category: 'cross-project'` so renderers can demarcate them. */
|
|
21
|
+
/** Re-include other-project memories the origin partition excludes by default; they come back tagged `category: 'cross-project'`. */
|
|
37
22
|
crossProject?: boolean;
|
|
38
|
-
/** The active project for the origin partition ('' = not in a project): a
|
|
39
|
-
*
|
|
40
|
-
* Defaults to `resolveProjectIdentity(process.cwd())`; surfaces whose
|
|
41
|
-
* process cwd is not the caller's project (HTTP server) should pass it. */
|
|
23
|
+
/** The active project for the origin partition ('' = not in a project): a name, or an identity whose rows may carry its legacy folder name.
|
|
24
|
+
* Defaults to `resolveProjectIdentity(process.cwd())`; surfaces whose cwd is not the caller's project (HTTP server) should pass it. */
|
|
42
25
|
currentProject?: ProjectRef;
|
|
43
|
-
/** The calling
|
|
44
|
-
*
|
|
45
|
-
* `loadFreshActiveTaskSnapshot` — when it strictly equals the active
|
|
46
|
-
* snapshot's `session_id`, the read is unbounded (same-session
|
|
47
|
-
* continuity); otherwise the snapshot must pass the freshness bound to
|
|
48
|
-
* surface. Absent (undefined/null/'') never short-circuits as a match;
|
|
49
|
-
* it just means every snapshot goes through the age check. Host-resolved
|
|
50
|
-
* (stdin payload, HIPPO_SESSION_ID, else the host's session var) so this stays host-agnostic. */
|
|
26
|
+
/** The calling session's id, stamped on this call's recall trace. When it strictly equals the active snapshot's `session_id` the read is unbounded;
|
|
27
|
+
* otherwise the snapshot must pass the freshness bound. Absent (undefined/null/'') never matches. Host-resolved, so this stays host-agnostic. */
|
|
51
28
|
currentSessionId?: string | null;
|
|
52
29
|
/** Raw hook-payload prompt; only the pinned-only branch reads it, gated on `pinnedInject.promptRecall`. */
|
|
53
30
|
prompt?: string;
|
|
@@ -83,9 +60,7 @@ export interface ContextResultEntry {
|
|
|
83
60
|
promptRecall?: boolean;
|
|
84
61
|
/** v39: the entry's owning project ('' = user-global, null = legacy row). */
|
|
85
62
|
origin?: string | null;
|
|
86
|
-
/**
|
|
87
|
-
* entries only appear when ContextOpts.crossProject was set (or isolation
|
|
88
|
-
* is disabled). */
|
|
63
|
+
/** How the origin relates to the active project; 'cross-project' appears only when `crossProject` was set (or isolation is disabled). */
|
|
89
64
|
category?: 'project' | 'user-global' | 'cross-project';
|
|
90
65
|
}
|
|
91
66
|
export interface ContextResult {
|
package/dist/api/context.d.ts
CHANGED
|
@@ -3,28 +3,11 @@ 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';
|
|
6
|
-
/**
|
|
7
|
-
* The secret half of the ambient policy on its own, for callers
|
|
8
|
-
* that apply their own scope rule. A flagged row is only admitted inside its owning project;
|
|
9
|
-
* flagged rows with no project origin never ambient-inject.
|
|
10
|
-
*/
|
|
6
|
+
/** The secret half of the ambient policy alone, for callers with their own scope rule: a flagged row is admitted only inside its owning project. */
|
|
11
7
|
export declare function ambientSecretAdmit(e: MemoryEntry, currentProject: ProjectRef): boolean;
|
|
12
|
-
/**
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
*
|
|
16
|
-
* + emits a 'recall' audit row for non-pinned, non-'*' queries.
|
|
17
|
-
*
|
|
18
|
-
* Behaves like the pre-extraction `cmdContext` data-loading + selection
|
|
19
|
-
* pipeline. CLI presentation (markdown / json / additional-context rendering)
|
|
20
|
-
* stays in `cli.ts`.
|
|
21
|
-
*
|
|
22
|
-
* Tenant scope: all `loadAllEntries` / snapshot / handoff / events reads use
|
|
23
|
-
* `ctx.tenantId`. Cross-tenant rows are filtered out.
|
|
24
|
-
*
|
|
25
|
-
* @returns An empty result (`entries: []`, snapshot/handoff/events undefined)
|
|
26
|
-
* when there's nothing to surface (no memories AND no snapshot AND no handoff
|
|
27
|
-
* AND no recent events).
|
|
28
|
-
*/
|
|
8
|
+
/** Tokens a context block may use when the caller sets no budget; the hook command and the CLI default match it. */
|
|
9
|
+
export declare const DEFAULT_CONTEXT_BUDGET = 1500;
|
|
10
|
+
/** Assembles a budget-bounded, tenant-scoped context bundle; mutates `last_retrieval_ids` and emits a 'recall' audit row for non-pinned, non-'*' queries.
|
|
11
|
+
* Returns an empty result when there are no memories, snapshot, handoff or recent events. CLI rendering stays in `cli.ts`. */
|
|
29
12
|
export declare function getContext(ctx: Context, opts?: ContextOpts): Promise<ContextResult>;
|
|
30
13
|
//# sourceMappingURL=context.d.ts.map
|
package/dist/api/context.js
CHANGED
|
@@ -1,42 +1,30 @@
|
|
|
1
1
|
// Ambient context injection: the admission policy and getContext.
|
|
2
|
-
import { isInitialized } from '../store/open.js';
|
|
3
2
|
import { DEFAULT_SEARCH_CANDIDATE_LIMIT } from '../store/rows.js';
|
|
4
3
|
import { freshActiveSnapshot, SNAPSHOT_AMBIENT_MAX_AGE_MS } from '../store/sessions.js';
|
|
5
4
|
import { estimateTokens } from '../util/token-text.js';
|
|
6
5
|
import { markRetrieved, COMPACTION_MEMORY_TAG } from '../core/memory.js';
|
|
7
6
|
import { isWorthSurfacing } from '../core/memory-quality.js';
|
|
8
|
-
import { getGlobalRoot } from '../sharing/
|
|
9
|
-
import { evalNow } from '../core/ablation.js';
|
|
7
|
+
import { getGlobalRoot } from '../sharing/global-store.js';
|
|
8
|
+
import { evalNow, strengthAblation } from '../core/ablation.js';
|
|
10
9
|
import { dropHeldCopies } from '../util/same-text.js';
|
|
11
10
|
import { BadRequestError } from '../core/api-errors.js';
|
|
12
11
|
import { isSharedStore, loadConfig } from '../core/config.js';
|
|
13
|
-
import { rethrowIfSqliteBlocked } from '../
|
|
12
|
+
import { rethrowIfSqliteBlocked } from '../util/sqlite-blocked.js';
|
|
14
13
|
import { errorMessage, log } from '../util/log.js';
|
|
15
|
-
import { resolveProjectIdentity, classifyOriginProject, isGlobalStoreRoot, projectId, projectNames } from '../core/project-identity.js';
|
|
14
|
+
import { resolveProjectIdentity, classifyOriginProject, isGlobalStoreRoot, isInitialized, projectId, projectNames, } from '../core/project-identity.js';
|
|
16
15
|
import { promptTokens } from '../core/prompt-recall.js';
|
|
17
16
|
import { detectSecret } from '../util/secret-detect.js';
|
|
18
17
|
import { isSessionDigestRow } from '../core/session-digest-row.js';
|
|
19
18
|
import { addAmbientTallies, ambientStateFromTallies } from '../core/ambient.js';
|
|
20
19
|
import { requireGroup, sqliteStore, storeFor } from '../store/index.js';
|
|
21
|
-
import { passesScopeFilterForRecall, assertScopeRequestAllowed, personalScopeOf } from '../
|
|
20
|
+
import { passesScopeFilterForRecall, assertScopeRequestAllowed, personalScopeOf } from '../core/recall-scope.js';
|
|
22
21
|
import { finiteOr, selectBySearch, selectPinned, selectStrongest, } from './context-select.js';
|
|
23
22
|
import { andThen, onStore } from './on-store.js';
|
|
24
23
|
import { strengthenOf } from './recall-record.js';
|
|
25
24
|
import { ownerOrSubject } from './types.js';
|
|
26
25
|
export { oneCopyPerMemory } from './context-select.js';
|
|
27
|
-
/**
|
|
28
|
-
*
|
|
29
|
-
* and the CLI-side ambient-state summary so the two cannot drift.
|
|
30
|
-
*
|
|
31
|
-
* - Secret veto is UNCONDITIONAL: neither crossProject nor
|
|
32
|
-
* contextProjectIsolation:false re-includes secrets. A flagged row only
|
|
33
|
-
* injects inside its owning project; flagged rows with no project origin
|
|
34
|
-
* (''/null) never ambient-inject at all. Explicit recall is unaffected -
|
|
35
|
-
* recalling a secret is a deliberate act.
|
|
36
|
-
* - Envelope parity: private/quarantine scopes never inject unless `exactScope` names one.
|
|
37
|
-
* - Origin partition: other-project rows are excluded unless
|
|
38
|
-
* `includeCrossProject`.
|
|
39
|
-
*/
|
|
26
|
+
/** The single ambient-injection admission policy, shared by getContext and the CLI ambient-state summary so they cannot drift.
|
|
27
|
+
* Secret veto is unconditional (flagged rows inject only in their own project); private scopes need `exactScope`, other projects `includeCrossProject`. */
|
|
40
28
|
function ambientAdmitEntry(e, currentProject, includeCrossProject, exactScope, own) {
|
|
41
29
|
if (!ambientSecretAdmit(e, currentProject))
|
|
42
30
|
return false;
|
|
@@ -46,11 +34,7 @@ function ambientAdmitEntry(e, currentProject, includeCrossProject, exactScope, o
|
|
|
46
34
|
return true;
|
|
47
35
|
return classifyOriginProject(e.origin_project, currentProject) !== 'cross-project';
|
|
48
36
|
}
|
|
49
|
-
/**
|
|
50
|
-
* The secret half of the ambient policy on its own, for callers
|
|
51
|
-
* that apply their own scope rule. A flagged row is only admitted inside its owning project;
|
|
52
|
-
* flagged rows with no project origin never ambient-inject.
|
|
53
|
-
*/
|
|
37
|
+
/** The secret half of the ambient policy alone, for callers with their own scope rule: a flagged row is admitted only inside its owning project. */
|
|
54
38
|
export function ambientSecretAdmit(e, currentProject) {
|
|
55
39
|
if (!detectSecret(e).flagged)
|
|
56
40
|
return true;
|
|
@@ -59,6 +43,8 @@ export function ambientSecretAdmit(e, currentProject) {
|
|
|
59
43
|
return false;
|
|
60
44
|
return projectNames(currentProject).includes(origin);
|
|
61
45
|
}
|
|
46
|
+
/** Tokens a context block may use when the caller sets no budget; the hook command and the CLI default match it. */
|
|
47
|
+
export const DEFAULT_CONTEXT_BUDGET = 1500;
|
|
62
48
|
/** Most rows per store a no-query context reads; past it, ranking and ambientState see the strongest by decay. */
|
|
63
49
|
const CONTEXT_CANDIDATE_CAP = 2000;
|
|
64
50
|
/** A store's base search and context reads; a store without the group throws StoreNotPortedError. */
|
|
@@ -98,25 +84,10 @@ async function loadAmbientEntries(source, tenantId, options) {
|
|
|
98
84
|
const entries = loaded.entries.filter((e) => ownTenant(e) && recheck(e));
|
|
99
85
|
return loaded.recall ? { entries, recall: loaded.recall.filter(ownTenant) } : { entries };
|
|
100
86
|
}
|
|
101
|
-
/**
|
|
102
|
-
*
|
|
103
|
-
* fallback / hybrid search) + active task snapshot + session handoff + recent
|
|
104
|
-
* session events. Budget-bounded, tenant-scoped. Mutates `last_retrieval_ids`
|
|
105
|
-
* + emits a 'recall' audit row for non-pinned, non-'*' queries.
|
|
106
|
-
*
|
|
107
|
-
* Behaves like the pre-extraction `cmdContext` data-loading + selection
|
|
108
|
-
* pipeline. CLI presentation (markdown / json / additional-context rendering)
|
|
109
|
-
* stays in `cli.ts`.
|
|
110
|
-
*
|
|
111
|
-
* Tenant scope: all `loadAllEntries` / snapshot / handoff / events reads use
|
|
112
|
-
* `ctx.tenantId`. Cross-tenant rows are filtered out.
|
|
113
|
-
*
|
|
114
|
-
* @returns An empty result (`entries: []`, snapshot/handoff/events undefined)
|
|
115
|
-
* when there's nothing to surface (no memories AND no snapshot AND no handoff
|
|
116
|
-
* AND no recent events).
|
|
117
|
-
*/
|
|
87
|
+
/** Assembles a budget-bounded, tenant-scoped context bundle; mutates `last_retrieval_ids` and emits a 'recall' audit row for non-pinned, non-'*' queries.
|
|
88
|
+
* Returns an empty result when there are no memories, snapshot, handoff or recent events. CLI rendering stays in `cli.ts`. */
|
|
118
89
|
export async function getContext(ctx, opts = {}) {
|
|
119
|
-
const budget = opts.budget ??
|
|
90
|
+
const budget = opts.budget ?? DEFAULT_CONTEXT_BUDGET;
|
|
120
91
|
assertScopeRequestAllowed(ctx.actor, opts.exactScope);
|
|
121
92
|
if (budget <= 0) {
|
|
122
93
|
return { entries: [], tokens: 0 };
|
|
@@ -247,8 +218,14 @@ function openBlockBudget(plan, opts, budget) {
|
|
|
247
218
|
obs?.facts({ projectName: projectId(plan.currentProject), budgetTokens: blockBudget, promptRecall: promptRecallPending });
|
|
248
219
|
if (pinnedOnly && !config.pinnedInject.enabled)
|
|
249
220
|
obs?.disabled();
|
|
221
|
+
if (!pinnedOnly)
|
|
222
|
+
obs?.queried(plan.query);
|
|
250
223
|
return cost
|
|
251
|
-
? Math.max(0, blockBudget - cost.fixed(blockBudget, {
|
|
224
|
+
? Math.max(0, blockBudget - cost.fixed(blockBudget, {
|
|
225
|
+
cross: plan.includeCrossProject,
|
|
226
|
+
promptRecall: promptRecallPending,
|
|
227
|
+
ambient: !pinnedOnly && config.ambient.enabled,
|
|
228
|
+
}))
|
|
252
229
|
: blockBudget;
|
|
253
230
|
}
|
|
254
231
|
const NO_TASK_STATE = { snapshot: null, handoff: null, events: [] };
|
|
@@ -348,6 +325,12 @@ async function loadPools(ctx, plan, admission, recallRequest) {
|
|
|
348
325
|
/** The `limit` cut, then the held-copy drop, then each entry's origin annotation. */
|
|
349
326
|
function finalizeSelection(picked, plan) {
|
|
350
327
|
const { obs } = plan;
|
|
328
|
+
// Ranking reports nothing itself, so its results are offered here and the cuts below can name what they drop.
|
|
329
|
+
if (!plan.pinnedOnly && obs) {
|
|
330
|
+
const pool = plan.query === '*' ? 'strength' : 'search';
|
|
331
|
+
obs.offer(picked.filter((r) => r.isGlobal !== true).map((r) => r.entry), false, pool);
|
|
332
|
+
obs.offer(picked.filter((r) => r.isGlobal === true).map((r) => r.entry), true, pool);
|
|
333
|
+
}
|
|
351
334
|
let selected = picked;
|
|
352
335
|
if (plan.limit < selected.length) {
|
|
353
336
|
const cut = selected.slice(0, plan.limit);
|
|
@@ -390,7 +373,7 @@ async function traceEmptyContext(ctx, opts, plan) {
|
|
|
390
373
|
/** Strengthens and marks the returned rows, then writes the trace and index together. */
|
|
391
374
|
async function recordRetrieval(ctx, opts, plan, selected, activeSnapshot) {
|
|
392
375
|
const toUpdate = selected.map((s) => s.entry);
|
|
393
|
-
const updatedEntries = markRetrieved(toUpdate);
|
|
376
|
+
const updatedEntries = markRetrieved(toUpdate, undefined, { ablation: strengthAblation() });
|
|
394
377
|
const retrievedIds = updatedEntries.map((u) => u.id);
|
|
395
378
|
const trace = {
|
|
396
379
|
tenantId: ctx.tenantId,
|
|
@@ -405,7 +388,10 @@ async function recordRetrieval(ctx, opts, plan, selected, activeSnapshot) {
|
|
|
405
388
|
};
|
|
406
389
|
const writes = { goalLog: [], audit: [], trace, strengthen: strengthenOf(ctx, retrievedIds) };
|
|
407
390
|
// 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), () =>
|
|
391
|
+
await onStore(ctx, (port, local) => andThen(local.finishLastRecall(writes, plan.hasGlobal ? plan.globalRoot : undefined), (traceId) => {
|
|
392
|
+
plan.obs?.traced(traceId);
|
|
393
|
+
return port.bumpRecallStats(selected.length);
|
|
394
|
+
}));
|
|
409
395
|
// Replace selectedItems entries with markRetrieved-updated copies so
|
|
410
396
|
// the returned ContextResult reflects post-recall state.
|
|
411
397
|
const items = selected.map((s) => ({
|
|
@@ -416,7 +402,13 @@ async function recordRetrieval(ctx, opts, plan, selected, activeSnapshot) {
|
|
|
416
402
|
return { items, ambientState: plan.config.ambient.enabled ? await readAmbientState(ctx, plan) : undefined };
|
|
417
403
|
}
|
|
418
404
|
async function readAmbientState(ctx, plan) {
|
|
419
|
-
const filter = {
|
|
405
|
+
const filter = {
|
|
406
|
+
exactScope: plan.exactScope,
|
|
407
|
+
ownScope: plan.ownScope,
|
|
408
|
+
project: plan.originProject,
|
|
409
|
+
currentProject: projectNames(plan.currentProject),
|
|
410
|
+
now: evalNow(),
|
|
411
|
+
};
|
|
420
412
|
const sources = [
|
|
421
413
|
...(plan.hasLocal ? [plan.local.reads] : []),
|
|
422
414
|
...(plan.hasGlobal && !plan.primaryIsGlobal ? [sourceOf(sqliteStore(plan.globalRoot)).reads] : []),
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { HandoffOutcome, SessionHandoff } from '../core/handoff.js';
|
|
2
|
+
import type { SessionEvent, TaskSnapshot } from '../store/rows.js';
|
|
3
|
+
import { appendSessionEvent, listSessionEvents, saveActiveTaskSnapshot } from '../store/sessions.js';
|
|
4
|
+
import { wmClear, wmFlush, wmPush, wmRead, type WorkingMemoryItem } from '../store/working-memory.js';
|
|
5
|
+
import type { Context } from './types.js';
|
|
6
|
+
/** What a snapshot save carries. */
|
|
7
|
+
export type SnapshotSaveInput = Parameters<typeof saveActiveTaskSnapshot>[2];
|
|
8
|
+
/** What a session event append carries. */
|
|
9
|
+
export type SessionEventAppendInput = Parameters<typeof appendSessionEvent>[2];
|
|
10
|
+
/** What a session event listing filters on. */
|
|
11
|
+
export type SessionEventListOpts = NonNullable<Parameters<typeof listSessionEvents>[2]>;
|
|
12
|
+
/** Save the caller's active task snapshot. */
|
|
13
|
+
export declare function snapshotSave(ctx: Context, input: SnapshotSaveInput): TaskSnapshot;
|
|
14
|
+
/** Clear the caller's active task snapshot; false when there was none. */
|
|
15
|
+
export declare function snapshotClear(ctx: Context, status: string): boolean;
|
|
16
|
+
/** The caller's active task snapshot, or null. */
|
|
17
|
+
export declare function snapshotLoad(ctx: Context): TaskSnapshot | null;
|
|
18
|
+
/** Append a session event in the caller's tenant. */
|
|
19
|
+
export declare function sessionEventAppend(ctx: Context, event: SessionEventAppendInput): SessionEvent;
|
|
20
|
+
/** List the caller's session events. */
|
|
21
|
+
export declare function sessionEventList(ctx: Context, opts: SessionEventListOpts): SessionEvent[];
|
|
22
|
+
export interface LatestContinuity {
|
|
23
|
+
snapshot: TaskSnapshot | null;
|
|
24
|
+
events: SessionEvent[];
|
|
25
|
+
}
|
|
26
|
+
/** The active snapshot plus recent events for `sessionId`, falling back to the snapshot's own session. */
|
|
27
|
+
export declare function continuityLatest(ctx: Context, opts: {
|
|
28
|
+
sessionId?: string;
|
|
29
|
+
limit: number;
|
|
30
|
+
}): LatestContinuity;
|
|
31
|
+
/** Stamp the outcome on the caller's handoff for `sessionId`; returns the rows stamped. */
|
|
32
|
+
export declare function handoffStampOutcome(ctx: Context, sessionId: string, outcome: HandoffOutcome): number;
|
|
33
|
+
/** Save a session handoff in the caller's tenant. */
|
|
34
|
+
export declare function handoffSave(ctx: Context, handoff: Omit<SessionHandoff, 'updatedAt'>): SessionHandoff;
|
|
35
|
+
/** The caller's latest handoff, optionally for one session. */
|
|
36
|
+
export declare function handoffLatest(ctx: Context, sessionId?: string): SessionHandoff | null;
|
|
37
|
+
/** The caller's handoff by id, or null. */
|
|
38
|
+
export declare function handoffById(ctx: Context, id: number): SessionHandoff | null;
|
|
39
|
+
/** Push a working memory entry in the caller's tenant; returns its row id. */
|
|
40
|
+
export declare function workingMemoryPush(ctx: Context, opts: Omit<Parameters<typeof wmPush>[1], 'tenantId'>): number;
|
|
41
|
+
/** The caller's working memory entries, most important first. */
|
|
42
|
+
export declare function workingMemoryRead(ctx: Context, opts: Omit<NonNullable<Parameters<typeof wmRead>[1]>, 'tenantId'>): WorkingMemoryItem[];
|
|
43
|
+
/** Delete the caller's working memory entries; returns the count. */
|
|
44
|
+
export declare function workingMemoryClear(ctx: Context, opts: Omit<NonNullable<Parameters<typeof wmClear>[1]>, 'tenantId'>): number;
|
|
45
|
+
/** Flush the caller's working memory at session end; returns the count. */
|
|
46
|
+
export declare function workingMemoryFlush(ctx: Context, opts: Omit<NonNullable<Parameters<typeof wmFlush>[1]>, 'tenantId'>): number;
|
|
47
|
+
//# sourceMappingURL=continuity.d.ts.map
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
// Where-you-left-off ops: task snapshot, session events, handoffs and working memory.
|
|
2
|
+
import { appendSessionEvent, clearActiveTaskSnapshot, listSessionEvents, loadActiveTaskSnapshot, saveActiveTaskSnapshot, } from '../store/sessions.js';
|
|
3
|
+
import { loadHandoffById, loadLatestHandoff, saveSessionHandoff, stampHandoffOutcome } from '../store/handoffs.js';
|
|
4
|
+
import { wmClear, wmFlush, wmPush, wmRead } from '../store/working-memory.js';
|
|
5
|
+
/** Save the caller's active task snapshot. */
|
|
6
|
+
export function snapshotSave(ctx, input) {
|
|
7
|
+
return saveActiveTaskSnapshot(ctx.hippoRoot, ctx.tenantId, input);
|
|
8
|
+
}
|
|
9
|
+
/** Clear the caller's active task snapshot; false when there was none. */
|
|
10
|
+
export function snapshotClear(ctx, status) {
|
|
11
|
+
return clearActiveTaskSnapshot(ctx.hippoRoot, ctx.tenantId, status);
|
|
12
|
+
}
|
|
13
|
+
/** The caller's active task snapshot, or null. */
|
|
14
|
+
export function snapshotLoad(ctx) {
|
|
15
|
+
return loadActiveTaskSnapshot(ctx.hippoRoot, ctx.tenantId);
|
|
16
|
+
}
|
|
17
|
+
/** Append a session event in the caller's tenant. */
|
|
18
|
+
export function sessionEventAppend(ctx, event) {
|
|
19
|
+
return appendSessionEvent(ctx.hippoRoot, ctx.tenantId, event);
|
|
20
|
+
}
|
|
21
|
+
/** List the caller's session events. */
|
|
22
|
+
export function sessionEventList(ctx, opts) {
|
|
23
|
+
return listSessionEvents(ctx.hippoRoot, ctx.tenantId, opts);
|
|
24
|
+
}
|
|
25
|
+
/** The active snapshot plus recent events for `sessionId`, falling back to the snapshot's own session. */
|
|
26
|
+
export function continuityLatest(ctx, opts) {
|
|
27
|
+
const snapshot = loadActiveTaskSnapshot(ctx.hippoRoot, ctx.tenantId);
|
|
28
|
+
const events = listSessionEvents(ctx.hippoRoot, ctx.tenantId, {
|
|
29
|
+
session_id: opts.sessionId || snapshot?.session_id || undefined,
|
|
30
|
+
limit: opts.limit,
|
|
31
|
+
});
|
|
32
|
+
return { snapshot, events };
|
|
33
|
+
}
|
|
34
|
+
/** Stamp the outcome on the caller's handoff for `sessionId`; returns the rows stamped. */
|
|
35
|
+
export function handoffStampOutcome(ctx, sessionId, outcome) {
|
|
36
|
+
return stampHandoffOutcome(ctx.hippoRoot, ctx.tenantId, sessionId, outcome);
|
|
37
|
+
}
|
|
38
|
+
/** Save a session handoff in the caller's tenant. */
|
|
39
|
+
export function handoffSave(ctx, handoff) {
|
|
40
|
+
return saveSessionHandoff(ctx.hippoRoot, ctx.tenantId, handoff);
|
|
41
|
+
}
|
|
42
|
+
/** The caller's latest handoff, optionally for one session. */
|
|
43
|
+
export function handoffLatest(ctx, sessionId) {
|
|
44
|
+
return loadLatestHandoff(ctx.hippoRoot, ctx.tenantId, sessionId);
|
|
45
|
+
}
|
|
46
|
+
/** The caller's handoff by id, or null. */
|
|
47
|
+
export function handoffById(ctx, id) {
|
|
48
|
+
return loadHandoffById(ctx.hippoRoot, ctx.tenantId, id);
|
|
49
|
+
}
|
|
50
|
+
/** Push a working memory entry in the caller's tenant; returns its row id. */
|
|
51
|
+
export function workingMemoryPush(ctx, opts) {
|
|
52
|
+
return wmPush(ctx.hippoRoot, { ...opts, tenantId: ctx.tenantId });
|
|
53
|
+
}
|
|
54
|
+
/** The caller's working memory entries, most important first. */
|
|
55
|
+
export function workingMemoryRead(ctx, opts) {
|
|
56
|
+
return wmRead(ctx.hippoRoot, { ...opts, tenantId: ctx.tenantId });
|
|
57
|
+
}
|
|
58
|
+
/** Delete the caller's working memory entries; returns the count. */
|
|
59
|
+
export function workingMemoryClear(ctx, opts) {
|
|
60
|
+
return wmClear(ctx.hippoRoot, { ...opts, tenantId: ctx.tenantId });
|
|
61
|
+
}
|
|
62
|
+
/** Flush the caller's working memory at session end; returns the count. */
|
|
63
|
+
export function workingMemoryFlush(ctx, opts) {
|
|
64
|
+
return wmFlush(ctx.hippoRoot, { ...opts, tenantId: ctx.tenantId });
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=continuity.js.map
|
|
@@ -18,19 +18,7 @@ export interface CorrectionLatencyReport {
|
|
|
18
18
|
maxMs: number | null;
|
|
19
19
|
pairs: CorrectionPair[];
|
|
20
20
|
}
|
|
21
|
-
/**
|
|
22
|
-
*
|
|
23
|
-
* change-of-truth and when the supersession actually landed.
|
|
24
|
-
*
|
|
25
|
-
* For each (old, new) chain via `old.superseded_by = new.id`:
|
|
26
|
-
* - `correctedAt` = `new.created` (always)
|
|
27
|
-
* - `observedAt` = source row's `created` if `new.extracted_from` is set,
|
|
28
|
-
* else `new.created` (no earlier observation possible)
|
|
29
|
-
*
|
|
30
|
-
* Pairs split into two cohorts:
|
|
31
|
-
* - `extraction` — derived from a raw receipt; latency is meaningful
|
|
32
|
-
* - `manual` — direct supersede call; latency is trivially 0 and
|
|
33
|
-
* excluded from percentiles to avoid masking real lag
|
|
34
|
-
*/
|
|
21
|
+
/** Correction latency = `new.created` minus the observation time (the extracted-from row's `created`, else `new.created`).
|
|
22
|
+
* Manual supersedes have latency 0 and are excluded from percentiles so they do not mask real lag. */
|
|
35
23
|
export declare function buildCorrectionLatency(entries: MemoryEntry[]): CorrectionLatencyReport;
|
|
36
24
|
//# sourceMappingURL=correction-latency.d.ts.map
|
|
@@ -10,20 +10,8 @@ function percentile(sorted, q) {
|
|
|
10
10
|
return sorted[lo];
|
|
11
11
|
return sorted[lo] + (sorted[hi] - sorted[lo]) * (idx - lo);
|
|
12
12
|
}
|
|
13
|
-
/**
|
|
14
|
-
*
|
|
15
|
-
* change-of-truth and when the supersession actually landed.
|
|
16
|
-
*
|
|
17
|
-
* For each (old, new) chain via `old.superseded_by = new.id`:
|
|
18
|
-
* - `correctedAt` = `new.created` (always)
|
|
19
|
-
* - `observedAt` = source row's `created` if `new.extracted_from` is set,
|
|
20
|
-
* else `new.created` (no earlier observation possible)
|
|
21
|
-
*
|
|
22
|
-
* Pairs split into two cohorts:
|
|
23
|
-
* - `extraction` — derived from a raw receipt; latency is meaningful
|
|
24
|
-
* - `manual` — direct supersede call; latency is trivially 0 and
|
|
25
|
-
* excluded from percentiles to avoid masking real lag
|
|
26
|
-
*/
|
|
13
|
+
/** Correction latency = `new.created` minus the observation time (the extracted-from row's `created`, else `new.created`).
|
|
14
|
+
* Manual supersedes have latency 0 and are excluded from percentiles so they do not mask real lag. */
|
|
27
15
|
export function buildCorrectionLatency(entries) {
|
|
28
16
|
const byId = new Map();
|
|
29
17
|
for (const e of entries)
|
package/dist/api/dormant.d.ts
CHANGED
|
@@ -1,29 +1,13 @@
|
|
|
1
1
|
import { type DormantMemory, type ListDormantOpts } from '../store/dormant.js';
|
|
2
2
|
import { type MemoryEntry } from '../core/memory.js';
|
|
3
3
|
import type { Context } from './types.js';
|
|
4
|
-
/**
|
|
5
|
-
*
|
|
6
|
-
* active memory instead of deleting, when `dormant.enabled` is on. Newest
|
|
7
|
-
* first; `opts.query` keeps rows containing every term (case-insensitive).
|
|
8
|
-
*/
|
|
4
|
+
/** A tenant's dormant memories (src/store/dormant.ts): what sleep moved out of active memory when `dormant.enabled` is on. Newest first;
|
|
5
|
+
* `opts.query` keeps rows containing every term (case-insensitive). */
|
|
9
6
|
export declare function listDormant(ctx: Context, opts?: ListDormantOpts): DormantMemory[];
|
|
10
|
-
/**
|
|
11
|
-
*
|
|
12
|
-
* recalled, with a full half-life. A row audit repair set aside returns
|
|
13
|
-
* `verified`, so no quality check judges it again. Every other field is the
|
|
14
|
-
* snapshot taken when it went dormant.
|
|
15
|
-
*
|
|
16
|
-
* Throws when the tenant has no dormant memory with that id (another
|
|
17
|
-
* tenant's id, or another person's personal row, reads the same way), when a live memory already holds the id,
|
|
18
|
-
* and RejectedValueError when the value has been rejected since. On any
|
|
19
|
-
* throw the dormant copy stays where it is.
|
|
20
|
-
*/
|
|
7
|
+
/** Restores a dormant memory as if just recalled, with a full half-life; a row set aside by audit repair returns `verified`.
|
|
8
|
+
* Throws if the tenant has no such dormant id or a live memory holds it, and RejectedValueError if the value was since rejected (the dormant copy stays). */
|
|
21
9
|
export declare function restoreDormant(ctx: Context, id: string): MemoryEntry;
|
|
22
|
-
/**
|
|
23
|
-
* Permanently delete a dormant memory: the explicit "forget it for good"
|
|
24
|
-
* that dormant storage leaves to the user. Throws when the tenant has no
|
|
25
|
-
* dormant memory with that id.
|
|
26
|
-
*/
|
|
10
|
+
/** Permanently deletes a dormant memory, the explicit "forget it for good"; throws when the tenant has no dormant memory with that id. */
|
|
27
11
|
export declare function forgetDormant(ctx: Context, id: string): void;
|
|
28
12
|
/** Whether the tenant holds a dormant memory with this id that the caller may touch (for "not found" hints). */
|
|
29
13
|
export declare function isDormant(ctx: Context, id: string): boolean;
|
package/dist/api/dormant.js
CHANGED
|
@@ -3,29 +3,19 @@ import { ConflictError, NotFoundError } from '../core/api-errors.js';
|
|
|
3
3
|
import { stampOriginProject } from '../store/entry-row.js';
|
|
4
4
|
import { updateStatsUnlessBusy } from '../store/index-and-stats.js';
|
|
5
5
|
import { loadDormantMemories, holdsDormantMemory, restoreDormantMemory, forgetDormantMemory, } from '../store/dormant.js';
|
|
6
|
+
import { strengthAblation } from '../core/ablation.js';
|
|
6
7
|
import { createMemory, calculateStrength } from '../core/memory.js';
|
|
7
8
|
import { loadConfig } from '../core/config.js';
|
|
8
|
-
import { canTouchScope, personalScopeOf
|
|
9
|
+
import { canTouchScope, personalScopeOf } from '../core/recall-scope.js';
|
|
10
|
+
import { touchableScopeSql } from '../store/rule-sql.js';
|
|
9
11
|
const touchable = (ctx) => touchableScopeSql('', personalScopeOf(ctx.actor));
|
|
10
|
-
/**
|
|
11
|
-
*
|
|
12
|
-
* active memory instead of deleting, when `dormant.enabled` is on. Newest
|
|
13
|
-
* first; `opts.query` keeps rows containing every term (case-insensitive).
|
|
14
|
-
*/
|
|
12
|
+
/** A tenant's dormant memories (src/store/dormant.ts): what sleep moved out of active memory when `dormant.enabled` is on. Newest first;
|
|
13
|
+
* `opts.query` keeps rows containing every term (case-insensitive). */
|
|
15
14
|
export function listDormant(ctx, opts = {}) {
|
|
16
15
|
return loadDormantMemories(ctx.hippoRoot, ctx.tenantId, opts, touchable(ctx));
|
|
17
16
|
}
|
|
18
|
-
/**
|
|
19
|
-
*
|
|
20
|
-
* recalled, with a full half-life. A row audit repair set aside returns
|
|
21
|
-
* `verified`, so no quality check judges it again. Every other field is the
|
|
22
|
-
* snapshot taken when it went dormant.
|
|
23
|
-
*
|
|
24
|
-
* Throws when the tenant has no dormant memory with that id (another
|
|
25
|
-
* tenant's id, or another person's personal row, reads the same way), when a live memory already holds the id,
|
|
26
|
-
* and RejectedValueError when the value has been rejected since. On any
|
|
27
|
-
* throw the dormant copy stays where it is.
|
|
28
|
-
*/
|
|
17
|
+
/** Restores a dormant memory as if just recalled, with a full half-life; a row set aside by audit repair returns `verified`.
|
|
18
|
+
* Throws if the tenant has no such dormant id or a live memory holds it, and RejectedValueError if the value was since rejected (the dormant copy stays). */
|
|
29
19
|
export function restoreDormant(ctx, id) {
|
|
30
20
|
const outcome = restoreDormantMemory(ctx.hippoRoot, {
|
|
31
21
|
tenantId: ctx.tenantId,
|
|
@@ -42,11 +32,8 @@ export function restoreDormant(ctx, id) {
|
|
|
42
32
|
return outcome.entry;
|
|
43
33
|
}
|
|
44
34
|
function reviveSnapshot(ctx, dormant, now) {
|
|
45
|
-
//
|
|
46
|
-
//
|
|
47
|
-
// the snapshot overrides every field it does carry, content included.
|
|
48
|
-
// (The placeholder only satisfies createMemory's minimum length, so a
|
|
49
|
-
// legacy row shorter than 3 chars can still be restored.)
|
|
35
|
+
// A snapshot can predate a field added later: createMemory supplies defaults, then the snapshot overrides every field it carries.
|
|
36
|
+
// The placeholder content only meets createMemory's minimum length, so a legacy row under 3 chars still restores.
|
|
50
37
|
const revived = {
|
|
51
38
|
...createMemory('dormant snapshot defaults', { baseHalfLifeDays: loadConfig(ctx.hippoRoot).defaultHalfLifeDays }),
|
|
52
39
|
...dormant.entry,
|
|
@@ -54,13 +41,9 @@ function reviveSnapshot(ctx, dormant, now) {
|
|
|
54
41
|
};
|
|
55
42
|
if (dormant.reason === 'quality-repair')
|
|
56
43
|
revived.confidence = 'verified';
|
|
57
|
-
return stampOriginProject(ctx.hippoRoot, { ...revived, strength: calculateStrength(revived, now) });
|
|
44
|
+
return stampOriginProject(ctx.hippoRoot, { ...revived, strength: calculateStrength(revived, now, { ablation: strengthAblation() }) });
|
|
58
45
|
}
|
|
59
|
-
/**
|
|
60
|
-
* Permanently delete a dormant memory: the explicit "forget it for good"
|
|
61
|
-
* that dormant storage leaves to the user. Throws when the tenant has no
|
|
62
|
-
* dormant memory with that id.
|
|
63
|
-
*/
|
|
46
|
+
/** Permanently deletes a dormant memory, the explicit "forget it for good"; throws when the tenant has no dormant memory with that id. */
|
|
64
47
|
export function forgetDormant(ctx, id) {
|
|
65
48
|
const forgotten = forgetDormantMemory(ctx.hippoRoot, { tenantId: ctx.tenantId, id, actor: ctx.actor.subject, admit: touchable(ctx) });
|
|
66
49
|
if (!forgotten)
|