hippo-memory 1.69.0 → 1.71.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -2
- package/dist/agent-memories/apply.d.ts +3 -3
- package/dist/agent-memories/apply.js +16 -31
- package/dist/agent-memories/claude-code.d.ts +5 -5
- package/dist/agent-memories/claude-code.js +25 -12
- package/dist/agent-memories/copilot.js +3 -2
- package/dist/agent-memories/files.js +26 -14
- package/dist/agent-memories/gemini.js +6 -5
- package/dist/agent-memories/keys.js +3 -2
- package/dist/agent-memories/legacy.d.ts +2 -2
- package/dist/agent-memories/legacy.js +2 -2
- package/dist/agent-memories/markdown.d.ts +1 -3
- package/dist/agent-memories/markdown.js +1 -3
- package/dist/agent-memories/report.d.ts +1 -1
- package/dist/agent-memories/report.js +3 -2
- package/dist/agent-memories/source.d.ts +1 -1
- package/dist/agent-memories/source.js +6 -5
- package/dist/agent-memories/sync.d.ts +5 -3
- package/dist/agent-memories/sync.js +34 -38
- package/dist/agent-memories/types.d.ts +1 -1
- package/dist/api/assemble.d.ts +9 -46
- package/dist/api/assemble.js +44 -54
- package/dist/api/audit.d.ts +8 -7
- package/dist/api/audit.js +15 -21
- package/dist/api/auth.d.ts +17 -39
- package/dist/api/auth.js +76 -216
- package/dist/api/auto-sleep.d.ts +13 -0
- package/dist/api/auto-sleep.js +32 -0
- package/dist/{availability.d.ts → api/availability.d.ts} +4 -17
- package/dist/{availability.js → api/availability.js} +14 -44
- package/dist/{context-auto.js → api/context-auto.js} +2 -1
- package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
- package/dist/{context-render.js → api/context-render.js} +7 -6
- package/dist/api/context-select.d.ts +5 -5
- package/dist/api/context-select.js +39 -48
- package/dist/api/context-types.d.ts +15 -40
- package/dist/api/context.d.ts +7 -26
- package/dist/api/context.js +67 -97
- package/dist/api/dormant.d.ts +7 -23
- package/dist/api/dormant.js +40 -128
- package/dist/api/drill-down.d.ts +9 -48
- package/dist/api/drill-down.js +41 -90
- package/dist/api/forget.d.ts +5 -33
- package/dist/api/forget.js +17 -73
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +2 -2
- package/dist/api/graph.d.ts +8 -0
- package/dist/api/graph.js +7 -0
- package/dist/api/index.d.ts +28 -0
- package/dist/api/index.js +31 -0
- package/dist/api/instruction-detect.js +85 -0
- package/dist/api/learn.js +63 -55
- package/dist/api/ledger-db.d.ts +21 -0
- package/dist/api/ledger-db.js +81 -0
- package/dist/api/memories.d.ts +5 -0
- package/dist/api/memories.js +7 -0
- package/dist/api/objects.d.ts +9 -0
- package/dist/api/objects.js +11 -0
- package/dist/api/on-store.d.ts +16 -0
- package/dist/api/on-store.js +38 -0
- package/dist/api/outcome.d.ts +5 -42
- package/dist/api/outcome.js +15 -80
- package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
- package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
- package/dist/api/predictions.d.ts +9 -0
- package/dist/api/predictions.js +18 -0
- package/dist/api/promote.d.ts +16 -31
- package/dist/api/promote.js +38 -123
- package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +11 -11
- package/dist/{prompt-hook.js → api/prompt-hook.js} +42 -60
- package/dist/api/quarantine.d.ts +5 -5
- package/dist/api/quarantine.js +30 -106
- package/dist/api/recall-cli.d.ts +55 -0
- package/dist/api/recall-cli.js +94 -0
- package/dist/api/recall-core.d.ts +4 -0
- package/dist/api/recall-core.js +120 -0
- package/dist/api/recall-finish.d.ts +53 -0
- package/dist/api/recall-finish.js +30 -0
- package/dist/api/recall-history.d.ts +64 -0
- package/dist/api/recall-history.js +159 -0
- package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +7 -8
- package/dist/{recall-pipeline.js → api/recall-pipeline.js} +60 -48
- package/dist/api/recall-record.d.ts +10 -13
- package/dist/api/recall-record.js +10 -30
- package/dist/api/recall-request.d.ts +2 -2
- package/dist/api/recall-request.js +3 -3
- package/dist/api/recall-types.d.ts +101 -316
- package/dist/api/recall.d.ts +5 -33
- package/dist/api/recall.js +92 -91
- package/dist/api/refine.d.ts +7 -0
- package/dist/api/refine.js +10 -0
- package/dist/api/remember-local.d.ts +57 -0
- package/dist/api/remember-local.js +90 -0
- package/dist/api/remember.d.ts +27 -12
- package/dist/api/remember.js +42 -46
- package/dist/api/session-owners.d.ts +4 -0
- package/dist/api/session-owners.js +17 -0
- package/dist/api/sleep-run.d.ts +7 -9
- package/dist/api/sleep-run.js +78 -94
- package/dist/api/sleep.d.ts +10 -29
- package/dist/api/tokens.d.ts +5 -12
- package/dist/api/tokens.js +12 -31
- package/dist/api/types.d.ts +8 -31
- package/dist/api/types.js +5 -23
- package/dist/capture/caller-session.d.ts +2 -2
- package/dist/capture/caller-session.js +8 -8
- package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
- package/dist/{capture-error.js → capture/capture-error.js} +7 -7
- package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
- package/dist/capture/command.d.ts +5 -13
- package/dist/capture/command.js +57 -60
- package/dist/capture/compact-resume-caller.d.ts +1 -1
- package/dist/capture/compact-resume-caller.js +7 -7
- package/dist/capture/compact.d.ts +8 -16
- package/dist/capture/compact.js +56 -47
- package/dist/capture/compaction-items-caller.d.ts +1 -1
- package/dist/capture/compaction-items-caller.js +7 -5
- package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
- package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
- package/dist/{compaction-record.js → capture/compaction-record.js} +143 -157
- package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +1 -1
- package/dist/{compaction-spool.js → capture/compaction-spool.js} +18 -14
- package/dist/capture/copilot-transcript.js +1 -1
- package/dist/capture/extract.js +2 -2
- package/dist/capture/failure-caller.d.ts +2 -2
- package/dist/capture/failure-caller.js +6 -6
- package/dist/capture/failure-reading.d.ts +2 -5
- package/dist/capture/failure-reading.js +11 -12
- package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
- package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
- package/dist/capture/pre-compact-caller.d.ts +1 -1
- package/dist/capture/pre-compact-caller.js +2 -2
- package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +2 -6
- package/dist/{session-digest.js → capture/session-digest.js} +29 -29
- package/dist/capture/session-end-caller.d.ts +2 -2
- package/dist/capture/session-end-caller.js +1 -1
- package/dist/capture/session-texts.d.ts +1 -1
- package/dist/capture/session-texts.js +5 -5
- package/dist/capture/session-worker.js +6 -4
- package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
- package/dist/capture/transcript.d.ts +2 -10
- package/dist/capture/transcript.js +72 -92
- package/dist/capture/working-state.d.ts +0 -3
- package/dist/capture/working-state.js +7 -7
- package/dist/cli/api-context.d.ts +3 -0
- package/dist/cli/api-context.js +6 -0
- package/dist/cli/audit-prune.d.ts +28 -0
- package/dist/cli/audit-prune.js +40 -0
- package/dist/cli/audit.d.ts +2 -2
- package/dist/cli/audit.js +92 -88
- package/dist/cli/auth.d.ts +2 -1
- package/dist/cli/auth.js +69 -53
- package/dist/cli/briefs.d.ts +4 -3
- package/dist/cli/briefs.js +76 -202
- package/dist/cli/card.d.ts +2 -1
- package/dist/cli/card.js +55 -54
- package/dist/cli/client.d.ts +28 -0
- package/dist/{client.js → cli/client.js} +25 -44
- package/dist/cli/compact-resume-payload.d.ts +8 -0
- package/dist/cli/compact-resume-payload.js +40 -0
- package/dist/cli/context.d.ts +1 -13
- package/dist/cli/context.js +51 -77
- package/dist/cli/continuity.d.ts +6 -5
- package/dist/cli/continuity.js +153 -145
- package/dist/cli/correction-latency.d.ts +24 -0
- package/dist/{correction-latency.js → cli/correction-latency.js} +2 -14
- package/dist/cli/curate.d.ts +13 -17
- package/dist/cli/curate.js +226 -222
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +70 -52
- package/dist/cli/decisions.d.ts +4 -3
- package/dist/cli/decisions.js +129 -253
- package/dist/cli/eval.d.ts +1 -3
- package/dist/cli/eval.js +56 -42
- package/dist/cli/exit.d.ts +6 -0
- package/dist/cli/exit.js +11 -0
- package/dist/cli/explain.d.ts +1 -2
- package/dist/cli/explain.js +39 -21
- package/dist/cli/flag-values.d.ts +30 -0
- package/dist/cli/flag-values.js +120 -0
- package/dist/cli/flags.d.ts +304 -0
- package/dist/cli/flags.js +169 -0
- package/dist/cli/github.d.ts +14 -0
- package/dist/cli/github.js +184 -0
- package/dist/cli/goals.d.ts +2 -1
- package/dist/cli/goals.js +76 -75
- package/dist/cli/hook-runtime.d.ts +31 -0
- package/dist/cli/hook-runtime.js +139 -0
- package/dist/cli/init.d.ts +2 -1
- package/dist/cli/init.js +153 -126
- package/dist/cli/install-steps.d.ts +7 -0
- package/dist/cli/install-steps.js +101 -0
- package/dist/cli/last-sleep.d.ts +3 -1
- package/dist/cli/last-sleep.js +12 -7
- package/dist/cli/maintenance.d.ts +5 -4
- package/dist/cli/maintenance.js +41 -42
- package/dist/cli/object-verbs.d.ts +40 -0
- package/dist/cli/object-verbs.js +66 -0
- package/dist/cli/owner-validation.d.ts +18 -0
- package/dist/cli/owner-validation.js +33 -0
- package/dist/cli/playbooks.d.ts +4 -3
- package/dist/cli/playbooks.js +98 -306
- package/dist/cli/print.d.ts +15 -0
- package/dist/cli/print.js +82 -0
- package/dist/cli/projects.d.ts +2 -3
- package/dist/cli/projects.js +56 -51
- package/dist/cli/provenance-coverage.d.ts +14 -0
- package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +2 -6
- package/dist/cli/quality-repair-once.js +4 -4
- package/dist/cli/recall.d.ts +2 -6
- package/dist/cli/recall.js +128 -253
- package/dist/cli/refine-llm.d.ts +35 -0
- package/dist/cli/refine-llm.js +128 -0
- package/dist/cli/remember.d.ts +4 -6
- package/dist/cli/remember.js +193 -230
- package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +4 -17
- package/dist/{scheduler.js → cli/scheduler.js} +22 -22
- package/dist/cli/serve.d.ts +1 -1
- package/dist/cli/serve.js +46 -7
- package/dist/cli/session-hooks.d.ts +11 -19
- package/dist/cli/session-hooks.js +263 -258
- package/dist/cli/setup.d.ts +4 -3
- package/dist/cli/setup.js +55 -37
- package/dist/cli/shared.d.ts +14 -118
- package/dist/cli/shared.js +26 -400
- package/dist/cli/slack.d.ts +2 -1
- package/dist/cli/slack.js +46 -74
- package/dist/cli/sleep-render.d.ts +4 -0
- package/dist/cli/sleep-render.js +61 -0
- package/dist/cli/sleep.d.ts +3 -8
- package/dist/cli/sleep.js +34 -91
- package/dist/cli/status.d.ts +9 -12
- package/dist/cli/status.js +86 -131
- package/dist/{stdin.d.ts → cli/stdin.d.ts} +4 -6
- package/dist/{stdin.js → cli/stdin.js} +8 -9
- package/dist/cli/transfer.d.ts +9 -9
- package/dist/cli/transfer.js +125 -122
- package/dist/cli/usage.js +13 -5
- package/dist/cli.d.ts +69 -167
- package/dist/cli.js +187 -296
- package/dist/connectors/dlq.d.ts +44 -0
- package/dist/connectors/dlq.js +30 -0
- package/dist/connectors/github/backfill.d.ts +6 -26
- package/dist/connectors/github/backfill.js +42 -114
- package/dist/connectors/github/deletion.d.ts +6 -21
- package/dist/connectors/github/deletion.js +17 -64
- package/dist/connectors/github/dlq.d.ts +12 -91
- package/dist/connectors/github/dlq.js +23 -140
- package/dist/connectors/github/ingest.d.ts +4 -37
- package/dist/connectors/github/ingest.js +24 -93
- package/dist/connectors/github/octokit-client.d.ts +5 -17
- package/dist/connectors/github/octokit-client.js +29 -25
- package/dist/connectors/github/ratelimit.d.ts +3 -14
- package/dist/connectors/github/ratelimit.js +3 -14
- package/dist/connectors/github/scope.d.ts +3 -5
- package/dist/connectors/github/scope.js +3 -5
- package/dist/connectors/github/signature.d.ts +4 -26
- package/dist/connectors/github/signature.js +4 -26
- package/dist/connectors/github/tenant-routing.d.ts +4 -26
- package/dist/connectors/github/tenant-routing.js +13 -61
- package/dist/connectors/github/transform.d.ts +1 -1
- package/dist/connectors/github/transform.js +2 -16
- package/dist/connectors/github/types.d.ts +4 -16
- package/dist/connectors/github/types.js +17 -27
- package/dist/connectors/github/webhook.d.ts +5 -18
- package/dist/connectors/github/webhook.js +86 -105
- package/dist/connectors/slack/backfill.d.ts +5 -18
- package/dist/connectors/slack/backfill.js +9 -42
- package/dist/connectors/slack/deletion.d.ts +4 -7
- package/dist/connectors/slack/deletion.js +20 -49
- package/dist/connectors/slack/dlq.d.ts +9 -68
- package/dist/connectors/slack/dlq.js +26 -136
- package/dist/connectors/slack/ingest.d.ts +4 -18
- package/dist/connectors/slack/ingest.js +26 -91
- package/dist/connectors/slack/scope.d.ts +2 -8
- package/dist/connectors/slack/scope.js +2 -8
- package/dist/connectors/slack/signature.d.ts +1 -6
- package/dist/connectors/slack/signature.js +2 -1
- package/dist/connectors/slack/tenant-routing.d.ts +4 -18
- package/dist/connectors/slack/tenant-routing.js +11 -31
- package/dist/connectors/slack/transform.d.ts +3 -19
- package/dist/connectors/slack/transform.js +2 -18
- package/dist/connectors/slack/types.d.ts +4 -10
- package/dist/connectors/slack/types.js +5 -16
- package/dist/connectors/slack/web-client.js +34 -28
- package/dist/connectors/slack/webhook.d.ts +5 -21
- package/dist/connectors/slack/webhook.js +80 -108
- package/dist/connectors/slack/workspaces.d.ts +8 -41
- package/dist/connectors/slack/workspaces.js +8 -58
- package/dist/consolidate/conflicts.d.ts +1 -1
- package/dist/consolidate/conflicts.js +10 -18
- package/dist/consolidate/dag-summary.d.ts +8 -0
- package/dist/consolidate/dag-summary.js +41 -0
- package/dist/{dag.d.ts → consolidate/dag.d.ts} +6 -29
- package/dist/{dag.js → consolidate/dag.js} +49 -131
- package/dist/consolidate/decay.d.ts +2 -2
- package/dist/consolidate/decay.js +35 -41
- package/dist/consolidate/dedupe.d.ts +29 -0
- package/dist/consolidate/dedupe.js +103 -0
- package/dist/consolidate/flush-units.d.ts +5 -6
- package/dist/consolidate/flush-units.js +3 -3
- package/dist/consolidate/half-life-migration.d.ts +34 -0
- package/dist/consolidate/half-life-migration.js +89 -0
- package/dist/consolidate/llm-passes.js +12 -29
- package/dist/consolidate/memory-value-weights.d.ts +8 -0
- package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +2 -13
- package/dist/consolidate/memory-value.d.ts +45 -0
- package/dist/consolidate/memory-value.js +164 -0
- package/dist/consolidate/merge.js +65 -83
- package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
- package/dist/{merged-row.js → consolidate/merged-row.js} +4 -3
- package/dist/consolidate/physics-pass.js +46 -48
- package/dist/consolidate/replay.d.ts +9 -0
- package/dist/consolidate/replay.js +84 -0
- package/dist/consolidate/run.d.ts +7 -13
- package/dist/consolidate/run.js +6 -37
- package/dist/consolidate/sleep.d.ts +2 -9
- package/dist/consolidate/sleep.js +69 -151
- package/dist/consolidate/trace.d.ts +19 -0
- package/dist/{trace.js → consolidate/trace.js} +7 -24
- package/dist/consolidate/traces.js +40 -51
- package/dist/core/ablation.d.ts +15 -0
- package/dist/core/ablation.js +49 -0
- package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
- package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
- package/dist/{ambient.d.ts → core/ambient.d.ts} +1 -8
- package/dist/{ambient.js → core/ambient.js} +13 -18
- package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +16 -3
- package/dist/{capture-contract.js → core/capture-contract.js} +67 -1
- package/dist/{card.d.ts → core/card.d.ts} +4 -1
- package/dist/{card.js → core/card.js} +8 -0
- package/dist/core/compare.d.ts +32 -0
- package/dist/core/compare.js +70 -0
- package/dist/{config.d.ts → core/config.d.ts} +14 -28
- package/dist/{config.js → core/config.js} +101 -75
- package/dist/{handoff.d.ts → core/handoff.d.ts} +1 -7
- package/dist/core/handoff.js +81 -0
- package/dist/{memory-quality.js → core/memory-quality.js} +2 -2
- package/dist/core/memory.d.ts +183 -0
- package/dist/core/memory.js +380 -0
- package/dist/core/package-root.d.ts +3 -0
- package/dist/core/package-root.js +5 -0
- package/dist/{physics-config.d.ts → core/physics-config.d.ts} +1 -4
- package/dist/{physics-config.js → core/physics-config.js} +3 -8
- package/dist/{physics.d.ts → core/physics.d.ts} +16 -62
- package/dist/{physics.js → core/physics.js} +60 -122
- package/dist/{project-identity.d.ts → core/project-identity.d.ts} +17 -63
- package/dist/{project-identity.js → core/project-identity.js} +22 -55
- package/dist/{project-remote.js → core/project-remote.js} +17 -6
- package/dist/{prompt-recall.js → core/prompt-recall.js} +1 -1
- package/dist/core/raw-append-only.d.ts +5 -0
- package/dist/core/raw-append-only.js +7 -0
- package/dist/{salience.d.ts → core/salience.d.ts} +1 -7
- package/dist/{salience.js → core/salience.js} +36 -27
- package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
- package/dist/{search/types.js → core/search-types.js} +1 -1
- package/dist/core/session-digest-row.d.ts +5 -0
- package/dist/core/session-digest-row.js +6 -0
- package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
- package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +7 -7
- package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
- package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
- package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +11 -10
- package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +110 -104
- package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +2 -1
- package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +1 -0
- package/dist/{dashboard.js → dashboard/dashboard.js} +172 -55
- package/dist/db/backup.js +1 -1
- package/dist/db/busy.d.ts +19 -2
- package/dist/db/busy.js +88 -14
- package/dist/db/connect.d.ts +11 -2
- package/dist/db/connect.js +43 -10
- package/dist/db/index.d.ts +9 -0
- package/dist/db/index.js +8 -0
- package/dist/db/meta.d.ts +4 -0
- package/dist/db/meta.js +11 -1
- package/dist/db/migrate.d.ts +8 -1
- package/dist/db/migrate.js +28 -33
- package/dist/db/migrations/types.d.ts +2 -5
- package/dist/db/migrations/v08.js +1 -1
- package/dist/db/migrations/v14.js +39 -36
- package/dist/db/migrations/v15.js +2 -8
- package/dist/db/migrations/v16.js +31 -29
- package/dist/db/migrations/v17.js +2 -3
- package/dist/db/migrations/v18.js +6 -5
- package/dist/db/migrations/v19.js +2 -5
- package/dist/db/migrations/v20.js +5 -8
- package/dist/db/migrations/v22.js +28 -38
- package/dist/db/migrations/v23.js +3 -14
- package/dist/db/migrations/v24.js +25 -22
- package/dist/db/migrations/v25.js +3 -8
- package/dist/db/migrations/v26.js +2 -13
- package/dist/db/migrations/v27.js +3 -11
- package/dist/db/migrations/v28.js +2 -14
- package/dist/db/migrations/v29.js +23 -32
- package/dist/db/migrations/v30.js +4 -16
- package/dist/db/migrations/v31.js +23 -31
- package/dist/db/migrations/v32.js +4 -22
- package/dist/db/migrations/v33.js +2 -15
- package/dist/db/migrations/v34.js +2 -11
- package/dist/db/migrations/v35.js +2 -11
- package/dist/db/migrations/v36.js +2 -11
- package/dist/db/migrations/v37.js +8 -33
- package/dist/db/migrations/v38.js +5 -38
- package/dist/db/migrations/v39.js +10 -21
- package/dist/db/migrations/v40.js +8 -14
- package/dist/db/migrations/v41.js +2 -24
- package/dist/db/migrations/v43.js +7 -6
- package/dist/db/migrations/v44.js +2 -8
- package/dist/db/migrations/v45.js +2 -7
- package/dist/db/migrations/v46.js +1 -1
- package/dist/db/migrations/v47.js +2 -3
- package/dist/db/migrations/v48.js +1 -1
- package/dist/db/migrations/v49.js +1 -1
- package/dist/db/migrations/v50.js +8 -7
- package/dist/db/migrations/v51.js +1 -1
- package/dist/db/migrations/v52.js +1 -1
- package/dist/db/open.d.ts +11 -1
- package/dist/db/open.js +37 -4
- package/dist/db/physics-state.d.ts +23 -0
- package/dist/{physics-state.js → db/physics-state.js} +34 -52
- package/dist/db/raw-archive-mirror-cleanup.d.ts +5 -0
- package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +10 -20
- package/dist/db/request-stores.d.ts +15 -2
- package/dist/db/request-stores.js +37 -15
- package/dist/db/tables.d.ts +2 -0
- package/dist/db/tables.js +6 -0
- package/dist/{vector-store.d.ts → db/vector-store.d.ts} +6 -2
- package/dist/{vector-store.js → db/vector-store.js} +83 -51
- package/dist/db/wal-checkpointer.d.ts +11 -0
- package/dist/db/wal-checkpointer.js +92 -0
- package/dist/doctor.js +176 -152
- package/dist/entry/json-hooks.d.ts +1 -1
- package/dist/entry/json-hooks.js +1 -1
- package/dist/entry/project-identity.d.ts +1 -1
- package/dist/entry/project-identity.js +1 -1
- package/dist/entry/session-text.d.ts +3 -3
- package/dist/entry/session-text.js +5 -4
- package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +15 -53
- package/dist/{eval-stats.js → eval/eval-stats.js} +24 -51
- package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +3 -14
- package/dist/{eval-suite.js → eval/eval-suite.js} +99 -57
- package/dist/{eval.d.ts → eval/eval.d.ts} +7 -25
- package/dist/{eval.js → eval/eval.js} +35 -55
- package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -6
- package/dist/{judgment.js → eval/judgment.js} +23 -20
- package/dist/extensions/openclaw-plugin/index.js +2 -3
- package/dist/graph/delta.d.ts +3 -2
- package/dist/graph/delta.js +9 -23
- package/dist/{graph-extract.d.ts → graph/extract.d.ts} +10 -32
- package/dist/{graph-extract.js → graph/extract.js} +40 -81
- package/dist/{graph-recall.d.ts → graph/recall.d.ts} +9 -22
- package/dist/{graph-recall.js → graph/recall.js} +65 -108
- package/dist/graph/stream.d.ts +38 -0
- package/dist/{graph-stream.js → graph/stream.js} +20 -41
- package/dist/graph/view.d.ts +50 -0
- package/dist/graph/view.js +265 -0
- package/dist/graph/write.d.ts +4 -76
- package/dist/graph/write.js +13 -397
- package/dist/hooks/codex-session.js +1 -1
- package/dist/hooks/codex-wrapper.js +16 -17
- package/dist/hooks/copilot.d.ts +1 -8
- package/dist/hooks/copilot.js +16 -16
- package/dist/{cli → hooks}/hook-blocks.d.ts +6 -2
- package/dist/{cli → hooks}/hook-blocks.js +38 -125
- package/dist/hooks/json-hooks.d.ts +5 -37
- package/dist/hooks/json-hooks.js +49 -179
- package/dist/hooks/opencode.d.ts +0 -38
- package/dist/hooks/opencode.js +44 -103
- package/dist/hooks/shared.d.ts +8 -21
- package/dist/hooks/shared.js +30 -25
- package/dist/importers/core.d.ts +13 -42
- package/dist/importers/core.js +48 -64
- package/dist/importers/markdown-parse.d.ts +9 -32
- package/dist/importers/markdown-parse.js +10 -44
- package/dist/importers/markdown.js +5 -13
- package/dist/importers/sources.js +57 -81
- package/dist/importers/vault.d.ts +2 -8
- package/dist/importers/vault.js +95 -172
- package/dist/index.d.ts +26 -22
- package/dist/index.js +25 -21
- package/dist/learn/autolearn.d.ts +29 -0
- package/dist/{autolearn.js → learn/autolearn.js} +26 -51
- package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
- package/dist/{churn-git.js → learn/churn-git.js} +6 -4
- package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
- package/dist/learn/extract.js +123 -0
- package/dist/learn/forward-claim-detector.d.ts +12 -0
- package/dist/learn/forward-claim-detector.js +60 -0
- package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +10 -18
- package/dist/{invalidation.js → learn/invalidation.js} +92 -125
- package/dist/mcp/admin-tools.d.ts +1 -1
- package/dist/mcp/admin-tools.js +39 -64
- package/dist/mcp/format.d.ts +5 -5
- package/dist/mcp/format.js +7 -6
- package/dist/mcp/framing.d.ts +6 -0
- package/dist/mcp/framing.js +11 -3
- package/dist/mcp/memory-tools.js +10 -35
- package/dist/mcp/protocol.d.ts +14 -36
- package/dist/mcp/protocol.js +10 -19
- package/dist/mcp/recall-tools.d.ts +2 -2
- package/dist/mcp/recall-tools.js +70 -52
- package/dist/mcp/request.d.ts +3 -11
- package/dist/mcp/request.js +71 -85
- package/dist/mcp/server.d.ts +3 -9
- package/dist/mcp/server.js +6 -17
- package/dist/mcp/session-state.d.ts +2 -3
- package/dist/mcp/session-state.js +7 -13
- package/dist/mcp/shared-gate.js +1 -1
- package/dist/mcp/stdio.d.ts +2 -6
- package/dist/mcp/stdio.js +112 -38
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +7 -5
- package/dist/objects/customer-notes.d.ts +44 -0
- package/dist/objects/customer-notes.js +71 -0
- package/dist/objects/decisions.d.ts +41 -0
- package/dist/objects/decisions.js +63 -0
- package/dist/objects/descriptor.d.ts +52 -0
- package/dist/objects/descriptor.js +4 -0
- package/dist/objects/fields.d.ts +15 -0
- package/dist/objects/fields.js +21 -0
- package/dist/objects/incidents.d.ts +45 -0
- package/dist/objects/incidents.js +96 -0
- package/dist/objects/lifecycle.d.ts +27 -0
- package/dist/objects/lifecycle.js +96 -0
- package/dist/objects/policies.d.ts +60 -0
- package/dist/objects/policies.js +102 -0
- package/dist/objects/processes.d.ts +43 -0
- package/dist/objects/processes.js +92 -0
- package/dist/objects/project-briefs.d.ts +63 -0
- package/dist/objects/project-briefs.js +194 -0
- package/dist/objects/skills.d.ts +51 -0
- package/dist/objects/skills.js +110 -0
- package/dist/postinstall.js +10 -21
- package/dist/predictions/planning-fallacy.d.ts +14 -109
- package/dist/predictions/planning-fallacy.js +4 -129
- package/dist/rerankers/clef.d.ts +2 -6
- package/dist/rerankers/clef.js +28 -76
- package/dist/rerankers/cross-encoder.d.ts +0 -7
- package/dist/rerankers/cross-encoder.js +18 -28
- package/dist/rerankers/index.js +8 -7
- package/dist/rerankers/jev.d.ts +1 -4
- package/dist/rerankers/jev.js +36 -52
- package/dist/rerankers/llm.d.ts +2 -13
- package/dist/rerankers/llm.js +42 -59
- package/dist/rerankers/outage-warning.d.ts +8 -0
- package/dist/rerankers/outage-warning.js +32 -0
- package/dist/rerankers/remote.d.ts +4 -0
- package/dist/rerankers/remote.js +25 -0
- package/dist/rerankers/types.d.ts +3 -15
- package/dist/search/as-of.d.ts +1 -1
- package/dist/search/bm25-search.d.ts +2 -2
- package/dist/search/bm25-search.js +7 -7
- package/dist/search/bm25.d.ts +1 -1
- package/dist/search/bm25.js +1 -1
- package/dist/search/boosts.d.ts +5 -3
- package/dist/search/boosts.js +36 -15
- package/dist/search/breakdown.d.ts +2 -2
- package/dist/search/breakdown.js +2 -1
- package/dist/search/explain.d.ts +1 -1
- package/dist/search/explain.js +3 -2
- package/dist/search/finalize.d.ts +2 -2
- package/dist/search/finalize.js +4 -3
- package/dist/search/fusion.d.ts +1 -1
- package/dist/search/fusion.js +3 -3
- package/dist/search/goal-boost.d.ts +23 -0
- package/dist/search/goal-boost.js +90 -0
- package/dist/search/hybrid-score.d.ts +2 -2
- package/dist/search/hybrid-score.js +1 -1
- package/dist/search/hybrid.d.ts +6 -4
- package/dist/search/hybrid.js +11 -8
- package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
- package/dist/{multihop.js → search/multihop.js} +9 -8
- package/dist/search/path-context.d.ts +11 -0
- package/dist/{path-context.js → search/path-context.js} +8 -19
- package/dist/search/physics-search.d.ts +4 -4
- package/dist/search/physics-search.js +25 -22
- package/dist/search/rerank.d.ts +3 -3
- package/dist/search/rerank.js +4 -3
- package/dist/search/rrf.d.ts +15 -0
- package/dist/search/rrf.js +36 -0
- package/dist/search/temporal.d.ts +1 -1
- package/dist/search/temporal.js +5 -2
- package/dist/search/vector.d.ts +10 -3
- package/dist/search/vector.js +51 -15
- package/dist/server/auth.d.ts +10 -29
- package/dist/server/auth.js +57 -42
- package/dist/server/boot.d.ts +5 -0
- package/dist/server/boot.js +432 -0
- package/dist/server/client-ip.d.ts +8 -20
- package/dist/server/client-ip.js +23 -34
- package/dist/server/cursor.d.ts +1 -1
- package/dist/server/cursor.js +2 -3
- package/dist/server/deadline.d.ts +13 -0
- package/dist/server/deadline.js +45 -0
- package/dist/server/defaults.d.ts +3 -0
- package/dist/server/defaults.js +4 -0
- package/dist/server/key-check-bounds.d.ts +9 -0
- package/dist/server/key-check-bounds.js +46 -0
- package/dist/server/lifecycle.d.ts +5 -4
- package/dist/server/lifecycle.js +20 -5
- package/dist/server/mcp-http.d.ts +1 -4
- package/dist/server/mcp-http.js +44 -68
- package/dist/server/rate-limit.d.ts +21 -0
- package/dist/{rate-limit.js → server/rate-limit.js} +4 -13
- package/dist/server/ready.d.ts +7 -0
- package/dist/server/ready.js +38 -0
- package/dist/server/request.d.ts +14 -12
- package/dist/server/request.js +71 -28
- package/dist/server/route-table.d.ts +15 -0
- package/dist/server/route-table.js +202 -0
- package/dist/server/routes/admin.js +29 -30
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +35 -105
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +45 -115
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +44 -105
- package/dist/server/routes/memories.js +21 -43
- package/dist/server/routes/object-routes.d.ts +35 -0
- package/dist/server/routes/object-routes.js +72 -0
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +42 -134
- package/dist/server/routes/predictions.js +35 -63
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +44 -134
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +41 -120
- package/dist/server/routes/recall.js +21 -44
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +40 -138
- package/dist/server/server-detect.d.ts +28 -0
- package/dist/server/server-detect.js +156 -0
- package/dist/server/sleep-child.d.ts +2 -0
- package/dist/server/sleep-child.js +19 -0
- package/dist/server/sleep-offload.d.ts +20 -0
- package/dist/server/sleep-offload.js +73 -0
- package/dist/server/tls.d.ts +6 -0
- package/dist/server/tls.js +24 -0
- package/dist/server/types.d.ts +35 -14
- package/dist/server/validation.d.ts +6 -5
- package/dist/server/validation.js +16 -34
- package/dist/server.d.ts +39 -61
- package/dist/server.js +26 -569
- package/dist/sharing/global-store.d.ts +19 -0
- package/dist/sharing/global-store.js +75 -0
- package/dist/sharing/global-sync.d.ts +6 -0
- package/dist/sharing/global-sync.js +80 -0
- package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +5 -6
- package/dist/{project-merge.js → sharing/project-merge.js} +34 -51
- package/dist/sharing/scope.d.ts +7 -0
- package/dist/{scope.js → sharing/scope.js} +5 -12
- package/dist/sharing/search-both.d.ts +60 -0
- package/dist/sharing/search-both.js +138 -0
- package/dist/sharing/share.d.ts +38 -0
- package/dist/sharing/share.js +226 -0
- package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
- package/dist/{ambient-store.js → store/ambient.js} +11 -16
- package/dist/store/audit-event.d.ts +15 -17
- package/dist/store/audit-event.js +9 -16
- package/dist/{audit.d.ts → store/audit.d.ts} +29 -8
- package/dist/{audit.js → store/audit.js} +95 -18
- package/dist/{auth.d.ts → store/auth.d.ts} +19 -36
- package/dist/{auth.js → store/auth.js} +108 -99
- package/dist/store/candidates.d.ts +41 -13
- package/dist/store/candidates.js +141 -60
- package/dist/{card-detail.d.ts → store/card-detail.d.ts} +5 -4
- package/dist/{card-detail.js → store/card-detail.js} +3 -2
- package/dist/{store-cards.d.ts → store/cards.d.ts} +26 -16
- package/dist/{store-cards.js → store/cards.js} +133 -248
- package/dist/store/compactions.d.ts +78 -0
- package/dist/store/compactions.js +93 -0
- package/dist/store/conflicts.d.ts +26 -26
- package/dist/store/conflicts.js +194 -222
- package/dist/store/connectors/github.d.ts +84 -0
- package/dist/store/connectors/github.js +180 -0
- package/dist/store/connectors/slack.d.ts +69 -0
- package/dist/store/connectors/slack.js +177 -0
- package/dist/store/dashboard-reads.d.ts +27 -0
- package/dist/store/dashboard-reads.js +88 -0
- package/dist/store/delete-and-batch.d.ts +27 -51
- package/dist/store/delete-and-batch.js +100 -92
- package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +16 -5
- package/dist/{delivery-recorder.js → store/delivery-recorder.js} +60 -38
- package/dist/store/descendant-page.d.ts +12 -0
- package/dist/store/descendant-page.js +99 -0
- package/dist/store/diagnostics.d.ts +47 -0
- package/dist/store/diagnostics.js +44 -0
- package/dist/store/doctor-reads.d.ts +16 -0
- package/dist/store/doctor-reads.js +19 -0
- package/dist/store/dormant.d.ts +105 -0
- package/dist/store/dormant.js +241 -0
- package/dist/store/embeddings/index.d.ts +36 -0
- package/dist/{embeddings.js → store/embeddings/index.js} +104 -224
- package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
- package/dist/{local-embedding.js → store/embeddings/local.js} +69 -75
- package/dist/store/embeddings/provider.d.ts +40 -0
- package/dist/{embedding-provider.js → store/embeddings/provider.js} +78 -91
- package/dist/store/entry-reads.d.ts +66 -63
- package/dist/store/entry-reads.js +159 -121
- package/dist/store/entry-row.d.ts +14 -37
- package/dist/store/entry-row.js +37 -45
- package/dist/store/entry-writes.d.ts +40 -17
- package/dist/store/entry-writes.js +105 -41
- package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
- package/dist/{failure-log.js → store/failure-log.js} +9 -2
- package/dist/store/goals.d.ts +96 -0
- package/dist/store/goals.js +260 -0
- package/dist/store/graph-queue.d.ts +13 -0
- package/dist/store/graph-queue.js +70 -0
- package/dist/store/graph-reads.d.ts +41 -0
- package/dist/{graph/read.js → store/graph-reads.js} +72 -162
- package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +71 -14
- package/dist/{graph/rows.js → store/graph-rows.js} +20 -12
- package/dist/store/graph-view-rows.d.ts +13 -0
- package/dist/store/graph-view-rows.js +68 -0
- package/dist/store/graph-writes.d.ts +33 -0
- package/dist/store/graph-writes.js +232 -0
- package/dist/store/half-life.d.ts +35 -0
- package/dist/store/half-life.js +75 -0
- package/dist/store/handoffs.d.ts +6 -12
- package/dist/store/handoffs.js +54 -63
- package/dist/store/index-and-stats.d.ts +14 -20
- package/dist/store/index-and-stats.js +74 -119
- package/dist/store/index.d.ts +4 -0
- package/dist/store/index.js +3 -0
- package/dist/store/key-audit.d.ts +2 -2
- package/dist/store/key-audit.js +4 -4
- package/dist/store/key-writes.d.ts +12 -5
- package/dist/store/key-writes.js +30 -4
- package/dist/store/ledger-turn.d.ts +17 -0
- package/dist/store/ledger-turn.js +27 -0
- package/dist/store/markdown.d.ts +3 -7
- package/dist/store/markdown.js +25 -23
- package/dist/store/mirrors.d.ts +7 -13
- package/dist/store/mirrors.js +52 -47
- package/dist/store/object-types.d.ts +189 -0
- package/dist/store/object-types.js +4 -0
- package/dist/store/open.d.ts +6 -4
- package/dist/store/open.js +30 -36
- package/dist/store/planning-fallacy-evidence.d.ts +14 -0
- package/dist/store/planning-fallacy-evidence.js +52 -0
- package/dist/store/port.d.ts +649 -0
- package/dist/store/port.js +17 -0
- package/dist/{predictions/store.d.ts → store/predictions.d.ts} +25 -52
- package/dist/{predictions/store.js → store/predictions.js} +88 -184
- package/dist/{quality-repair.js → store/quality-repair.js} +27 -57
- package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
- package/dist/{quarantine.js → store/quarantine.js} +64 -22
- package/dist/store/raw-archive.d.ts +14 -0
- package/dist/{raw-archive.js → store/raw-archive.js} +20 -31
- package/dist/store/recall-scope.d.ts +78 -0
- package/dist/{recall-scope.js → store/recall-scope.js} +23 -84
- package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -81
- package/dist/{recall-trace.js → store/recall-trace.js} +41 -122
- package/dist/store/rejected-values.d.ts +55 -0
- package/dist/store/rejected-values.js +150 -0
- package/dist/store/rejection.d.ts +54 -0
- package/dist/{rejection.js → store/rejection.js} +16 -67
- package/dist/store/report-reads.d.ts +6 -0
- package/dist/store/report-reads.js +29 -0
- package/dist/store/rows.d.ts +11 -22
- package/dist/store/rows.js +52 -43
- package/dist/store/rule-sql.d.ts +5 -0
- package/dist/store/rule-sql.js +37 -0
- package/dist/store/search-rows.d.ts +22 -42
- package/dist/store/search-rows.js +55 -78
- package/dist/store/sessions.d.ts +23 -49
- package/dist/store/sessions.js +96 -118
- package/dist/store/sqlite/commit-watch.d.ts +4 -0
- package/dist/store/sqlite/commit-watch.js +29 -0
- package/dist/store/sqlite/connector-events-group.d.ts +5 -0
- package/dist/store/sqlite/connector-events-group.js +50 -0
- package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
- package/dist/store/sqlite/connector-writes-group.js +65 -0
- package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
- package/dist/store/sqlite/dag-reads-group.js +45 -0
- package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
- package/dist/store/{entry-writes-group.js → sqlite/entry-writes-group.js} +73 -60
- package/dist/store/sqlite/error-codec.d.ts +17 -0
- package/dist/store/sqlite/error-codec.js +61 -0
- package/dist/store/sqlite/executor-counts.d.ts +10 -0
- package/dist/store/sqlite/executor-counts.js +11 -0
- package/dist/store/sqlite/executor.d.ts +29 -0
- package/dist/store/sqlite/executor.js +287 -0
- package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
- package/dist/store/sqlite/graph-reads-group.js +18 -0
- package/dist/store/sqlite/local.d.ts +21 -0
- package/dist/store/sqlite/local.js +39 -0
- package/dist/store/sqlite/object-rows.d.ts +102 -0
- package/dist/store/sqlite/object-rows.js +221 -0
- package/dist/store/sqlite/objects-group.d.ts +20 -0
- package/dist/store/sqlite/objects-group.js +316 -0
- package/dist/store/sqlite/predictions-group.d.ts +5 -0
- package/dist/store/sqlite/predictions-group.js +28 -0
- package/dist/store/sqlite/quarantine-group.d.ts +5 -0
- package/dist/store/sqlite/quarantine-group.js +38 -0
- package/dist/store/sqlite/store.d.ts +23 -0
- package/dist/store/sqlite/store.js +294 -0
- package/dist/store/sqlite/vector-pack.d.ts +18 -0
- package/dist/store/sqlite/vector-pack.js +46 -0
- package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
- package/dist/store/sqlite/vector-reads-group.js +23 -0
- package/dist/store/sqlite/worker-entry.d.ts +2 -0
- package/dist/store/sqlite/worker-entry.js +8 -0
- package/dist/store/sqlite/worker-jobs.d.ts +5 -0
- package/dist/store/sqlite/worker-jobs.js +116 -0
- package/dist/store/sqlite/worker-ops.d.ts +135 -0
- package/dist/store/sqlite/worker-ops.js +93 -0
- package/dist/store/sqlite/worker-store.d.ts +8 -0
- package/dist/store/sqlite/worker-store.js +79 -0
- package/dist/store/summaries.d.ts +11 -72
- package/dist/store/summaries.js +47 -186
- package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
- package/dist/{summary-dirty.js → store/summary-dirty.js} +1 -1
- package/dist/store/tenant-lookup.d.ts +6 -1
- package/dist/store/tenant-lookup.js +7 -0
- package/dist/store/tenant.d.ts +11 -0
- package/dist/store/tenant.js +28 -0
- package/dist/store/token-ledger-rows.d.ts +61 -0
- package/dist/store/token-ledger-rows.js +68 -0
- package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +14 -51
- package/dist/{token-ledger.js → store/token-ledger.js} +51 -129
- package/dist/store/tombstone-checks.d.ts +12 -0
- package/dist/store/tombstone-checks.js +31 -0
- package/dist/store/usage-reports.d.ts +7 -0
- package/dist/store/usage-reports.js +18 -0
- package/dist/store/vector-index.d.ts +46 -0
- package/dist/store/vector-index.js +170 -0
- package/dist/{working-memory.d.ts → store/working-memory.d.ts} +11 -26
- package/dist/store/working-memory.js +118 -0
- package/dist/{yaml.d.ts → store/yaml.d.ts} +1 -5
- package/dist/{yaml.js → store/yaml.js} +2 -6
- package/dist/support-bundle.d.ts +1 -1
- package/dist/support-bundle.js +19 -37
- package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
- package/dist/{gated-write.js → trust/gated-write.js} +6 -6
- package/dist/trust/quarantine.d.ts +4 -0
- package/dist/trust/quarantine.js +8 -0
- package/dist/trust/reject-flow.d.ts +23 -0
- package/dist/trust/reject-flow.js +65 -0
- package/dist/util/anthropic-messages.d.ts +31 -0
- package/dist/util/anthropic-messages.js +58 -0
- package/dist/util/atomic-write.d.ts +4 -0
- package/dist/util/atomic-write.js +138 -0
- package/dist/util/capped-json.d.ts +6 -0
- package/dist/util/capped-json.js +46 -0
- package/dist/util/crash-handlers.d.ts +12 -0
- package/dist/util/crash-handlers.js +72 -0
- package/dist/{env.d.ts → util/env.d.ts} +27 -7
- package/dist/{env.js → util/env.js} +33 -8
- package/dist/{home-path.d.ts → util/home-path.d.ts} +2 -1
- package/dist/util/home-path.js +69 -0
- package/dist/{http-retry.d.ts → util/http-retry.d.ts} +8 -2
- package/dist/util/http-retry.js +103 -0
- package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
- package/dist/{http-util.js → util/http-util.js} +31 -11
- package/dist/util/json.d.ts +17 -0
- package/dist/util/json.js +25 -0
- package/dist/{log.d.ts → util/log.d.ts} +7 -3
- package/dist/{log.js → util/log.js} +36 -11
- package/dist/util/real-path.d.ts +3 -0
- package/dist/util/real-path.js +15 -0
- package/dist/util/request-scope.d.ts +28 -0
- package/dist/util/request-scope.js +48 -0
- package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
- package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +5 -30
- package/dist/{secret-detect.js → util/secret-detect.js} +17 -42
- package/dist/util/stored-json.d.ts +9 -0
- package/dist/util/stored-json.js +8 -0
- package/dist/util/time.d.ts +2 -0
- package/dist/util/time.js +3 -0
- package/dist/util/token-text.d.ts +15 -0
- package/dist/util/token-text.js +20 -0
- package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +2 -0
- package/dist/util/transcript-tail.js +49 -0
- package/dist/util/version.d.ts +11 -0
- package/dist/util/version.js +26 -0
- package/extensions/openclaw-plugin/index.ts +2 -6
- package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
- package/extensions/openclaw-plugin/package.json +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +2 -2
- package/dist/ablation.d.ts +0 -102
- package/dist/ablation.js +0 -136
- package/dist/api.d.ts +0 -26
- package/dist/api.js +0 -29
- package/dist/audit-prune.d.ts +0 -62
- package/dist/audit-prune.js +0 -107
- package/dist/autolearn.d.ts +0 -56
- package/dist/client.d.ts +0 -48
- package/dist/compare.d.ts +0 -86
- package/dist/compare.js +0 -117
- package/dist/connectors/github/cli-impl.d.ts +0 -25
- package/dist/connectors/github/cli-impl.js +0 -227
- package/dist/connectors/github/idempotency.d.ts +0 -19
- package/dist/connectors/github/idempotency.js +0 -27
- package/dist/connectors/slack/idempotency.d.ts +0 -17
- package/dist/connectors/slack/idempotency.js +0 -31
- package/dist/correction-latency.d.ts +0 -36
- package/dist/customer-notes.d.ts +0 -96
- package/dist/customer-notes.js +0 -336
- package/dist/db.d.ts +0 -9
- package/dist/db.js +0 -8
- package/dist/decisions.d.ts +0 -94
- package/dist/decisions.js +0 -326
- package/dist/dedupe.d.ts +0 -75
- package/dist/dedupe.js +0 -169
- package/dist/dormant.d.ts +0 -93
- package/dist/dormant.js +0 -137
- package/dist/embedding-provider.d.ts +0 -77
- package/dist/embeddings.d.ts +0 -101
- package/dist/extract.js +0 -133
- package/dist/forward-claim-detector.d.ts +0 -36
- package/dist/forward-claim-detector.js +0 -112
- package/dist/goals.d.ts +0 -173
- package/dist/goals.js +0 -448
- package/dist/graph/read.d.ts +0 -73
- package/dist/graph/rows.d.ts +0 -45
- package/dist/graph/types.js +0 -11
- package/dist/graph-stream.d.ts +0 -70
- package/dist/graph-view.d.ts +0 -73
- package/dist/graph-view.js +0 -333
- package/dist/half-life-migration.d.ts +0 -63
- package/dist/half-life-migration.js +0 -182
- package/dist/handoff.js +0 -68
- package/dist/home-path.js +0 -24
- package/dist/http-retry.js +0 -51
- package/dist/incidents.d.ts +0 -103
- package/dist/incidents.js +0 -349
- package/dist/instruction-detect.js +0 -27
- package/dist/json.d.ts +0 -7
- package/dist/json.js +0 -11
- package/dist/ledger-db.d.ts +0 -10
- package/dist/ledger-db.js +0 -42
- package/dist/memory-value-weights.d.ts +0 -19
- package/dist/memory-value.d.ts +0 -113
- package/dist/memory-value.js +0 -250
- package/dist/memory.d.ts +0 -294
- package/dist/memory.js +0 -522
- package/dist/owner-validation.d.ts +0 -42
- package/dist/owner-validation.js +0 -56
- package/dist/path-context.d.ts +0 -24
- package/dist/physics-state.d.ts +0 -39
- package/dist/policies.d.ts +0 -151
- package/dist/policies.js +0 -434
- package/dist/processes.d.ts +0 -108
- package/dist/processes.js +0 -371
- package/dist/project-briefs.d.ts +0 -128
- package/dist/project-briefs.js +0 -523
- package/dist/provenance-coverage.d.ts +0 -18
- package/dist/rate-limit.d.ts +0 -34
- package/dist/raw-archive-mirror-cleanup.d.ts +0 -20
- package/dist/raw-archive.d.ts +0 -24
- package/dist/recall-history.d.ts +0 -131
- package/dist/recall-history.js +0 -227
- package/dist/recall-scope.d.ts +0 -138
- package/dist/refine-llm.d.ts +0 -61
- package/dist/refine-llm.js +0 -167
- package/dist/reject-flow.d.ts +0 -69
- package/dist/reject-flow.js +0 -260
- package/dist/rejection.d.ts +0 -100
- package/dist/replay.d.ts +0 -41
- package/dist/replay.js +0 -122
- package/dist/rrf.d.ts +0 -43
- package/dist/rrf.js +0 -61
- package/dist/scope.d.ts +0 -14
- package/dist/server-detect.d.ts +0 -72
- package/dist/server-detect.js +0 -222
- package/dist/session-owners.d.ts +0 -7
- package/dist/session-owners.js +0 -54
- package/dist/shared.d.ts +0 -186
- package/dist/shared.js +0 -540
- package/dist/skills.d.ts +0 -101
- package/dist/skills.js +0 -367
- package/dist/store/entry-writes-group.d.ts +0 -9
- package/dist/store/vector-writes.d.ts +0 -6
- package/dist/store/vector-writes.js +0 -59
- package/dist/store-port.d.ts +0 -262
- package/dist/store-port.js +0 -178
- package/dist/tenant.d.ts +0 -25
- package/dist/tenant.js +0 -43
- package/dist/trace.d.ts +0 -34
- package/dist/transcript-tail.js +0 -48
- package/dist/version.d.ts +0 -26
- package/dist/version.js +0 -41
- package/dist/working-memory.js +0 -154
- /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
- /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
- /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
- /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
- /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
- /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
- /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
- /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
- /package/dist/{api-errors.js → core/api-errors.js} +0 -0
- /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
- /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
- /package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +0 -0
- /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
- /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
- /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
- /package/dist/{quality-repair.d.ts → store/quality-repair.d.ts} +0 -0
- /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
- /package/dist/{escape.js → util/escape.js} +0 -0
- /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
- /package/dist/{keyset.js → util/keyset.js} +0 -0
- /package/dist/{same-text.js → util/same-text.js} +0 -0
- /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
- /package/dist/{db → util}/sqlite-blocked.js +0 -0
- /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
- /package/dist/{tokenize.js → util/tokenize.js} +0 -0
- /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
- /package/dist/{write-budget.js → util/write-budget.js} +0 -0
|
@@ -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 '../
|
|
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/search-both.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.
|
|
@@ -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);
|
|
@@ -61,10 +60,10 @@ export function selectPinned(opts, plan, left, pools, admission) {
|
|
|
61
60
|
// Prompt recall gates the backfill on the prompt instead of recency.
|
|
62
61
|
if (plan.promptRecallPending) {
|
|
63
62
|
const candidates = () => promptRecallCandidates(plan, pools, admission.admit, rankedPinned, nowP);
|
|
64
|
-
backfillFromPrompt(opts, plan, pinnedCfg, candidates, picked, recentBudget);
|
|
63
|
+
backfillFromPrompt(opts, plan, { pinnedCfg, candidates, picked, recentBudget });
|
|
65
64
|
}
|
|
66
65
|
else if (plan.includeRecent > 0) {
|
|
67
|
-
backfillRecent(plan, localPool, globalPool, picked, recentBudget, nowP);
|
|
66
|
+
backfillRecent(plan, { localPool, globalPool, picked, recentBudget, nowP });
|
|
68
67
|
}
|
|
69
68
|
admitWithinBudget(rankedPinned, picked, effBudget, obs);
|
|
70
69
|
return picked.items;
|
|
@@ -75,11 +74,10 @@ function rankPinned(plan, pinnedLocal, pinnedGlobal, nowP) {
|
|
|
75
74
|
...pinnedGlobal.map((e) => ({ entry: e, isGlobal: true })),
|
|
76
75
|
]
|
|
77
76
|
.map(({ entry, isGlobal }) => {
|
|
78
|
-
const
|
|
79
|
-
const sBst = scopeSig === 1 ? 1.5 : scopeSig === -1 ? 0.5 : 1.0;
|
|
77
|
+
const scopeBoost = scopeBoostFor(scopeMatch(entry.tags, plan.activeScope));
|
|
80
78
|
return {
|
|
81
79
|
entry,
|
|
82
|
-
score: calculateStrength(entry, nowP) * (isGlobal ? GLOBAL_DISCOUNT : 1) *
|
|
80
|
+
score: calculateStrength(entry, nowP) * (isGlobal ? GLOBAL_DISCOUNT : 1) * scopeBoost,
|
|
83
81
|
tokens: plan.price(entry, isGlobal),
|
|
84
82
|
isGlobal,
|
|
85
83
|
};
|
|
@@ -115,12 +113,15 @@ function admitWithinBudget(rows, picked, budget, obs) {
|
|
|
115
113
|
picked.used += r.tokens;
|
|
116
114
|
}
|
|
117
115
|
}
|
|
118
|
-
|
|
116
|
+
// Overlap a candidate needs with the prompt when the config sets none.
|
|
117
|
+
const DEFAULT_PROMPT_RECALL_THRESHOLD = 0.04;
|
|
118
|
+
function backfillFromPrompt(opts, plan, options) {
|
|
119
|
+
const { pinnedCfg, candidates, picked, recentBudget } = options;
|
|
119
120
|
const rawMetric = pinnedCfg.pinnedInject.promptRecallMetric;
|
|
120
121
|
const metric = rawMetric === 'cosine' ? 'cosine' : 'jaccard';
|
|
121
122
|
const gate = {
|
|
122
123
|
metric,
|
|
123
|
-
threshold: finiteOr(pinnedCfg.pinnedInject.promptRecallThreshold,
|
|
124
|
+
threshold: finiteOr(pinnedCfg.pinnedInject.promptRecallThreshold, DEFAULT_PROMPT_RECALL_THRESHOLD, 0),
|
|
124
125
|
minShared: finiteOr(pinnedCfg.pinnedInject.promptRecallMinShared, 2, 0),
|
|
125
126
|
maxItems: finiteOr(pinnedCfg.pinnedInject.promptRecallMaxItems, 5, 1),
|
|
126
127
|
};
|
|
@@ -182,7 +183,8 @@ function promptRecallCandidates(plan, pools, admit, rankedPinned, nowP) {
|
|
|
182
183
|
}
|
|
183
184
|
return candidateItems;
|
|
184
185
|
}
|
|
185
|
-
function backfillRecent(plan,
|
|
186
|
+
function backfillRecent(plan, options) {
|
|
187
|
+
const { localPool, globalPool, picked, recentBudget, nowP } = options;
|
|
186
188
|
const recent = [
|
|
187
189
|
...localPool.map((entry) => ({ entry, isGlobal: plan.primaryIsGlobal })),
|
|
188
190
|
...globalPool.map((entry) => ({ entry, isGlobal: true })),
|
|
@@ -239,17 +241,19 @@ export function selectStrongest(plan, left, pools) {
|
|
|
239
241
|
export async function selectBySearch(ctx, plan, left, pools, admission) {
|
|
240
242
|
const minResults = plan.cost ? 0 : undefined; // a priced block skips an oversize top hit too, so the budget bounds it
|
|
241
243
|
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);
|
|
244
|
+
? await searchBothStores(ctx, plan, { left, minResults, pools, admit: admission.bothStoresAdmit })
|
|
245
|
+
: await searchLocalRows(ctx, plan, { left, minResults, localEntries: pools.local.entries, admit: admission.admit });
|
|
244
246
|
await auditContextRecall(ctx, plan, results.length);
|
|
245
247
|
return results;
|
|
246
248
|
}
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
async function searchBothStores(ctx, plan, left, minResults, pools, admit) {
|
|
249
|
+
async function searchBothStores(ctx, plan, options) {
|
|
250
|
+
const { left, minResults, pools, admit } = options;
|
|
250
251
|
const { cost, price } = plan;
|
|
251
|
-
|
|
252
|
-
const
|
|
252
|
+
// 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.
|
|
253
|
+
const poolIds = (pool) => [...pool.entries, ...(pool.recall ?? [])].map((e) => e.id);
|
|
254
|
+
const localIds = new Set(poolIds(pools.local));
|
|
255
|
+
const alsoLocal = heldIdLookup(ctx.hippoRoot, ctx.tenantId, poolIds(pools.global).filter((id) => !localIds.has(id)));
|
|
256
|
+
const isGlobalHit = (e) => !localIds.has(e.id) && !alsoLocal(e.id);
|
|
253
257
|
const roots = { local: ctx.hippoRoot, global: plan.globalRoot };
|
|
254
258
|
const merged = await rankBothStores(plan.query, roots, { local: pools.local.entries, global: pools.global.entries }, contextVectorSpec(ctx, plan, admit), {
|
|
255
259
|
budget: left,
|
|
@@ -268,7 +272,8 @@ async function searchBothStores(ctx, plan, left, minResults, pools, admit) {
|
|
|
268
272
|
function contextVectorSpec(ctx, plan, admit) {
|
|
269
273
|
return { tenantId: ctx.tenantId, scope: recallScopeFilter(plan.exactScope, 'exact', plan.ownScope), includeSuperseded: false, admit };
|
|
270
274
|
}
|
|
271
|
-
async function searchLocalRows(ctx, plan,
|
|
275
|
+
async function searchLocalRows(ctx, plan, options) {
|
|
276
|
+
const { left, minResults, localEntries, admit } = options;
|
|
272
277
|
const { cost, price, primaryIsGlobal, query, config: ctxConfig } = plan;
|
|
273
278
|
const usePhysicsCtx = ctxConfig.physics?.enabled !== false;
|
|
274
279
|
const localCost = cost && ((r) => price(r.entry, primaryIsGlobal));
|
|
@@ -313,23 +318,9 @@ async function auditContextRecall(ctx, plan, resultCount) {
|
|
|
313
318
|
await plan.other.appendAuditEvents([row]);
|
|
314
319
|
return;
|
|
315
320
|
}
|
|
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
|
-
}
|
|
321
|
+
if (plan.hasLocal)
|
|
322
|
+
recordAuditEvent(ctx.hippoRoot, row);
|
|
323
|
+
if (plan.hasGlobal && !plan.primaryIsGlobal)
|
|
324
|
+
recordAuditEvent(plan.globalRoot, row);
|
|
334
325
|
}
|
|
335
326
|
//# sourceMappingURL=context-select.js.map
|
|
@@ -1,20 +1,11 @@
|
|
|
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';
|
|
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
|
-
*/
|
|
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
|
+
/** 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
|
@@ -1,32 +1,13 @@
|
|
|
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';
|
|
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
|
-
export declare const
|
|
14
|
-
/**
|
|
15
|
-
*
|
|
16
|
-
* fallback / hybrid search) + active task snapshot + session handoff + recent
|
|
17
|
-
* session events. Budget-bounded, tenant-scoped. Mutates `last_retrieval_ids`
|
|
18
|
-
* + emits a 'recall' audit row for non-pinned, non-'*' queries.
|
|
19
|
-
*
|
|
20
|
-
* Behaves like the pre-extraction `cmdContext` data-loading + selection
|
|
21
|
-
* pipeline. CLI presentation (markdown / json / additional-context rendering)
|
|
22
|
-
* stays in `cli.ts`.
|
|
23
|
-
*
|
|
24
|
-
* Tenant scope: all `loadAllEntries` / snapshot / handoff / events reads use
|
|
25
|
-
* `ctx.tenantId`. Cross-tenant rows are filtered out.
|
|
26
|
-
*
|
|
27
|
-
* @returns An empty result (`entries: []`, snapshot/handoff/events undefined)
|
|
28
|
-
* when there's nothing to surface (no memories AND no snapshot AND no handoff
|
|
29
|
-
* AND no recent events).
|
|
30
|
-
*/
|
|
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`. */
|
|
31
12
|
export declare function getContext(ctx: Context, opts?: ContextOpts): Promise<ContextResult>;
|
|
32
13
|
//# sourceMappingURL=context.d.ts.map
|
package/dist/api/context.js
CHANGED
|
@@ -1,42 +1,31 @@
|
|
|
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 '../
|
|
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/global-store.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
|
-
/**
|
|
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
|
-
*/
|
|
27
|
+
/** The single ambient-injection admission policy, shared by getContext and the CLI ambient-state summary so they cannot drift.
|
|
28
|
+
* Secret veto is unconditional (flagged rows inject only in their own project); private scopes need `exactScope`, other projects `includeCrossProject`. */
|
|
40
29
|
function ambientAdmitEntry(e, currentProject, includeCrossProject, exactScope, own) {
|
|
41
30
|
if (!ambientSecretAdmit(e, currentProject))
|
|
42
31
|
return false;
|
|
@@ -46,11 +35,7 @@ function ambientAdmitEntry(e, currentProject, includeCrossProject, exactScope, o
|
|
|
46
35
|
return true;
|
|
47
36
|
return classifyOriginProject(e.origin_project, currentProject) !== 'cross-project';
|
|
48
37
|
}
|
|
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
|
-
*/
|
|
38
|
+
/** 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
39
|
export function ambientSecretAdmit(e, currentProject) {
|
|
55
40
|
if (!detectSecret(e).flagged)
|
|
56
41
|
return true;
|
|
@@ -59,15 +44,17 @@ export function ambientSecretAdmit(e, currentProject) {
|
|
|
59
44
|
return false;
|
|
60
45
|
return projectNames(currentProject).includes(origin);
|
|
61
46
|
}
|
|
47
|
+
/** Tokens a context block may use when the caller sets no budget; the hook command and the CLI default match it. */
|
|
48
|
+
export const DEFAULT_CONTEXT_BUDGET = 1500;
|
|
62
49
|
/** Most rows per store a no-query context reads; past it, ranking and ambientState see the strongest by decay. */
|
|
63
|
-
|
|
50
|
+
const CONTEXT_CANDIDATE_CAP = 2000;
|
|
64
51
|
/** A store's base search and context reads; a store without the group throws StoreNotPortedError. */
|
|
65
52
|
function sourceOf(store) {
|
|
66
53
|
return { store, reads: requireGroup(store, 'contextReads') };
|
|
67
54
|
}
|
|
68
|
-
// The pinned-only branch needs pins and recent-N candidates, not the corpus
|
|
69
|
-
|
|
70
|
-
|
|
55
|
+
// The pinned-only branch needs pins and recent-N candidates, not the corpus.
|
|
56
|
+
async function loadAmbientEntries(source, tenantId, options) {
|
|
57
|
+
const { pinnedOnly, recent, admit, recheck, window, recall, onQualityDrop } = options;
|
|
71
58
|
const ownTenant = (e) => e.tenantId === tenantId;
|
|
72
59
|
if (!pinnedOnly) {
|
|
73
60
|
const rows = 'query' in window
|
|
@@ -98,25 +85,10 @@ async function loadAmbientEntries(source, tenantId, pinnedOnly, recent, admit, r
|
|
|
98
85
|
const entries = loaded.entries.filter((e) => ownTenant(e) && recheck(e));
|
|
99
86
|
return loaded.recall ? { entries, recall: loaded.recall.filter(ownTenant) } : { entries };
|
|
100
87
|
}
|
|
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
|
-
*/
|
|
88
|
+
/** Assembles a budget-bounded, tenant-scoped context bundle; mutates `last_retrieval_ids` and emits a 'recall' audit row for non-pinned, non-'*' queries.
|
|
89
|
+
* Returns an empty result when there are no memories, snapshot, handoff or recent events. CLI rendering stays in `cli.ts`. */
|
|
118
90
|
export async function getContext(ctx, opts = {}) {
|
|
119
|
-
const budget = opts.budget ??
|
|
91
|
+
const budget = opts.budget ?? DEFAULT_CONTEXT_BUDGET;
|
|
120
92
|
assertScopeRequestAllowed(ctx.actor, opts.exactScope);
|
|
121
93
|
if (budget <= 0) {
|
|
122
94
|
return { entries: [], tokens: 0 };
|
|
@@ -166,18 +138,29 @@ function warnIsolationIgnored(hippoRoot) {
|
|
|
166
138
|
isolationWarned.add(hippoRoot);
|
|
167
139
|
log.warn(`${hippoRoot}: "contextProjectIsolation": false is ignored on a shared store; a read opts in with cross_project.`);
|
|
168
140
|
}
|
|
169
|
-
|
|
170
|
-
|
|
141
|
+
/** Which stores this read can draw on, and what kind the primary one is. */
|
|
142
|
+
function storesInReach(ctx, opts, local) {
|
|
171
143
|
const other = local.store.kind !== 'sqlite' ? local.store : undefined;
|
|
172
144
|
// Global memories do not establish a project boundary for task state.
|
|
173
145
|
const hasLocal = other !== undefined || isInitialized(ctx.hippoRoot);
|
|
174
|
-
const query = (opts.q ?? '').trim() || '*';
|
|
175
146
|
const globalRoot = getGlobalRoot();
|
|
176
147
|
// The store's own flag counts too, so no surface can read a shared store as its owner.
|
|
177
148
|
const sharedStore = opts.sharedStore === true || isSharedStore(ctx.hippoRoot);
|
|
178
149
|
// A store serving many people is not its operator's, so the operator's own global store stays out.
|
|
179
150
|
const hasGlobal = !sharedStore && other === undefined && isInitialized(globalRoot);
|
|
180
151
|
const primaryIsGlobal = isGlobalStoreRoot(ctx.hippoRoot);
|
|
152
|
+
return { other, hasLocal, globalRoot, sharedStore, hasGlobal, primaryIsGlobal };
|
|
153
|
+
}
|
|
154
|
+
/** Prices one entry against the budget: the caller's cost model when it gave one, else a token estimate. */
|
|
155
|
+
function entryPricer(cost, currentProject) {
|
|
156
|
+
return (entry, isGlobal, promptRecall) => cost
|
|
157
|
+
? cost.entry({ entry, isGlobal, promptRecall, origin: entry.origin_project ?? null, category: classifyOriginProject(entry.origin_project, currentProject) })
|
|
158
|
+
: estimateTokens(entry.content);
|
|
159
|
+
}
|
|
160
|
+
function planContext(ctx, opts, local) {
|
|
161
|
+
const pinnedOnly = opts.pinnedOnly === true;
|
|
162
|
+
const { other, hasLocal, globalRoot, sharedStore, hasGlobal, primaryIsGlobal } = storesInReach(ctx, opts, local);
|
|
163
|
+
const query = (opts.q ?? '').trim() || '*';
|
|
181
164
|
// opts.scope is only the tag boost, opts.exactScope the envelope request; other-project memories are
|
|
182
165
|
// excluded unless the caller asks for them (crossProject) or isolation is disabled.
|
|
183
166
|
const config = loadConfig(ctx.hippoRoot);
|
|
@@ -192,9 +175,7 @@ function planContext(ctx, opts, local) {
|
|
|
192
175
|
// Decided before the ambient loads so the pinned-only FTS candidate query can share their connection.
|
|
193
176
|
const promptRecallPending = pinnedOnly && Boolean(opts.prompt?.trim()) && config.pinnedInject.promptRecall === true;
|
|
194
177
|
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);
|
|
178
|
+
const price = entryPricer(cost, currentProject);
|
|
198
179
|
return {
|
|
199
180
|
local,
|
|
200
181
|
other,
|
|
@@ -238,6 +219,8 @@ function openBlockBudget(plan, opts, budget) {
|
|
|
238
219
|
obs?.facts({ projectName: projectId(plan.currentProject), budgetTokens: blockBudget, promptRecall: promptRecallPending });
|
|
239
220
|
if (pinnedOnly && !config.pinnedInject.enabled)
|
|
240
221
|
obs?.disabled();
|
|
222
|
+
if (!pinnedOnly)
|
|
223
|
+
obs?.queried(plan.query);
|
|
241
224
|
return cost
|
|
242
225
|
? Math.max(0, blockBudget - cost.fixed(blockBudget, { cross: plan.includeCrossProject, promptRecall: promptRecallPending, ambient: !pinnedOnly && config.ambient.enabled }))
|
|
243
226
|
: blockBudget;
|
|
@@ -327,17 +310,24 @@ async function loadPools(ctx, plan, admission, recallRequest) {
|
|
|
327
310
|
now: evalNow(),
|
|
328
311
|
};
|
|
329
312
|
// Tenant-scoped loads: never resolveTenantId({}) here.
|
|
313
|
+
const read = { pinnedOnly, recent, admit: loadAdmit, recheck: poolAdmit, window, recall: recallRequest };
|
|
330
314
|
const local = plan.hasLocal
|
|
331
|
-
? await loadAmbientEntries(plan.local, ctx.tenantId,
|
|
315
|
+
? await loadAmbientEntries(plan.local, ctx.tenantId, { ...read, onQualityDrop: qualityDrop(primaryIsGlobal) })
|
|
332
316
|
: { entries: [] };
|
|
333
317
|
const global = hasGlobal && !primaryIsGlobal
|
|
334
|
-
? await loadAmbientEntries(sourceOf(sqliteStore(plan.globalRoot)), ctx.tenantId,
|
|
318
|
+
? await loadAmbientEntries(sourceOf(sqliteStore(plan.globalRoot)), ctx.tenantId, { ...read, onQualityDrop: qualityDrop(true) })
|
|
335
319
|
: { entries: [] };
|
|
336
320
|
return { local, global };
|
|
337
321
|
}
|
|
338
322
|
/** The `limit` cut, then the held-copy drop, then each entry's origin annotation. */
|
|
339
323
|
function finalizeSelection(picked, plan) {
|
|
340
324
|
const { obs } = plan;
|
|
325
|
+
// Ranking reports nothing itself, so its results are offered here and the cuts below can name what they drop.
|
|
326
|
+
if (!plan.pinnedOnly && obs) {
|
|
327
|
+
const pool = plan.query === '*' ? 'strength' : 'search';
|
|
328
|
+
obs.offer(picked.filter((r) => r.isGlobal !== true).map((r) => r.entry), false, pool);
|
|
329
|
+
obs.offer(picked.filter((r) => r.isGlobal === true).map((r) => r.entry), true, pool);
|
|
330
|
+
}
|
|
341
331
|
let selected = picked;
|
|
342
332
|
if (plan.limit < selected.length) {
|
|
343
333
|
const cut = selected.slice(0, plan.limit);
|
|
@@ -368,16 +358,13 @@ async function traceEmptyContext(ctx, opts, plan) {
|
|
|
368
358
|
explainMode: false,
|
|
369
359
|
results: [],
|
|
370
360
|
};
|
|
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.
|
|
361
|
+
// The empty reply is already decided, so a lost trace is logged and the call still answers.
|
|
376
362
|
try {
|
|
377
|
-
await
|
|
363
|
+
await onStore(ctx, (port) => port.finishRecall({ goalLog: [], audit: [], trace }));
|
|
378
364
|
}
|
|
379
365
|
catch (error) {
|
|
380
|
-
|
|
366
|
+
rethrowIfSqliteBlocked(error);
|
|
367
|
+
log.error(`recall trace write failed: ${errorMessage(error)}`);
|
|
381
368
|
}
|
|
382
369
|
}
|
|
383
370
|
/** Strengthens and marks the returned rows, then writes the trace and index together. */
|
|
@@ -396,10 +383,12 @@ async function recordRetrieval(ctx, opts, plan, selected, activeSnapshot) {
|
|
|
396
383
|
score: s.score,
|
|
397
384
|
})),
|
|
398
385
|
};
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
386
|
+
const writes = { goalLog: [], audit: [], trace, strengthen: strengthenOf(ctx, retrievedIds) };
|
|
387
|
+
// hippo.db keeps the ids as its last recall, which feeds only outcomeForLastRecall, and it alone reads a second root.
|
|
388
|
+
await onStore(ctx, (port, local) => andThen(local.finishLastRecall(writes, plan.hasGlobal ? plan.globalRoot : undefined), (traceId) => {
|
|
389
|
+
plan.obs?.traced(traceId);
|
|
390
|
+
return port.bumpRecallStats(selected.length);
|
|
391
|
+
}));
|
|
403
392
|
// Replace selectedItems entries with markRetrieved-updated copies so
|
|
404
393
|
// the returned ContextResult reflects post-recall state.
|
|
405
394
|
const items = selected.map((s) => ({
|
|
@@ -409,25 +398,6 @@ async function recordRetrieval(ctx, opts, plan, selected, activeSnapshot) {
|
|
|
409
398
|
// Read after strengthenRetrieved commits, so the rows just retrieved count at their new strength.
|
|
410
399
|
return { items, ambientState: plan.config.ambient.enabled ? await readAmbientState(ctx, plan) : undefined };
|
|
411
400
|
}
|
|
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
401
|
async function readAmbientState(ctx, plan) {
|
|
432
402
|
const filter = { exactScope: plan.exactScope, ownScope: plan.ownScope, project: plan.originProject, currentProject: projectNames(plan.currentProject), now: evalNow() };
|
|
433
403
|
const sources = [
|
package/dist/api/dormant.d.ts
CHANGED
|
@@ -1,29 +1,13 @@
|
|
|
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
|
-
/**
|
|
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;
|